from qtpy.QtCore import Qt
from qtpy.QtWidgets import QComboBox, QPushButton, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from typing import Union
TEXT_COLUMN = 0
WIDGET_COLUMN = 1
class View(QWidget):
    def __init__(self, parent: Union[QWidget, None]=None):
        super().__init__(parent)
        self._presenter = None
        grid = QVBoxLayout(self)
        self._table = QTableWidget(self)
        self._table.setRowCount(4)
        self._table.setColumnCount(2)
        grid.addWidget(self._table)
        self._colours = QComboBox()
        options=["Blue", "Green", "Red"]
        self._colours.addItems(options)
        self._grid_lines= QTableWidgetItem()
        self._grid_lines.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
        self._grid_lines.setCheckState(Qt.Unchecked)
        self._add_item_to_table("Show grid lines", self._grid_lines, 1)
        self._freq = QTableWidgetItem("1.0")
        self._phi = QTableWidgetItem("0.0")
        self._add_widget_to_table("Colour", self._colours, 0)
        self._add_item_to_table("Frequency", self._freq, 2)
        self._add_item_to_table("Phase", self._phi, 3)
        self._plot = QPushButton('Add', self)
        self._plot.setStyleSheet("background-color:lightgrey")
        grid.addWidget(self._plot)
        self.setLayout(grid)
        self._plot.clicked.connect(self._button_clicked)
    def subscribe_presenter(self, presenter) -> None:
        # Subscribe the presenter to the view so we do not need to
        # make a Qt connection between the presenter and view
        self._presenter = presenter
    def get_colour(self) -> str:
        return self._colours.currentText()
    def get_grid_lines(self) -> bool:
        return self._grid_lines.checkState() == Qt.Checked
    def get_freq(self) -> float:
        return float(self._freq.text())
    def get_phase(self) -> float:
        return float(self._phi.text())
    def _button_clicked(self):
        self._presenter.handle_plot_clicked()
    def _set_table_row(self, name: str, row: int) -> None:
        text = QTableWidgetItem(name)
        text.setFlags(Qt.ItemIsEnabled)
        self._table.setItem(row, TEXT_COLUMN, text)
    def _add_widget_to_table(self, name: str, widget: QWidget, row: int) -> None:
        self._set_table_row(name, row)
        self._table.setCellWidget(row, WIDGET_COLUMN, widget)
    def _add_item_to_table(self, name: str, widget: QWidget, row: int) -> None:
        self._set_table_row(name, row)
        self._table.setItem(row, WIDGET_COLUMN, widget)