diff --git a/soitool/modules/module_phonebook.py b/soitool/modules/module_phonebook.py index be37faa6f80b3677d8894abfb0f63e0da5d96f2f..5ca1a392d9a51bcd651315f688c8a4f21301a8cd 100644 --- a/soitool/modules/module_phonebook.py +++ b/soitool/modules/module_phonebook.py @@ -20,38 +20,59 @@ from soitool.modules.module_base import ( class ComponentsChoicePopup(QDialog): - def __init__(self, table_columns): - + def __init__(self, selected_columns): + """A popup for selecting wich columns to hide/show in phonebook. + + Parameters + ---------- + QDialog : QDialog + Parent class for popup functionality. + selected_columns : dict + Table structure for columns to show/hide. + """ super().__init__() - - self.table_columns = table_columns - + self.selected_columns = selected_columns self.setWindowTitle("Kolonner") # Layout layout = QVBoxLayout() - for header in self.table_columns.keys(): + # Checkboxes + for header in self.selected_columns.keys(): box = QCheckBox(header) - box.setChecked(self.table_columns[header]) + box.setChecked(self.selected_columns[header]) layout.addWidget(box) + # Button btn_done = QPushButton("Bruk") - btn_done.clicked.connect(lambda: self.update_table_columns(layout)) + btn_done.clicked.connect(lambda: self.update_selected_columns(layout)) layout.addWidget(btn_done) self.setLayout(layout) - def update_table_columns(self, layout): + def update_selected_columns(self, layout): + """Update the dict for columns to hide/show based on checkboxes. + Parameters + ---------- + layout : QLayout + Layout with checkboxes to loop trough. + """ for item_index in range(layout.count()): item = layout.itemAt(item_index).widget() if isinstance(item, QCheckBox): - self.table_columns[item.text()] = item.isChecked() + self.selected_columns[item.text()] = item.isChecked() self.accept() - def get_table_columns(self): - return self.table_columns + def get_selected_columns(self): + """Getter for the table structure. + + Returns + ------- + dict + The table structure. + """ + return self.selected_columns class Meta(type(ModuleBase), type(QWidget)): @@ -60,12 +81,13 @@ class Meta(type(ModuleBase), type(QWidget)): class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): def __init__(self): - + """Phonebook.""" self.type = "Telefonliste" QWidget.__init__(self) ModuleBase.__init__(self) - self.table_columns = { + # Table structure + self.selected_columns = { "Funksjon": True, "Telefon": True, "FDN": False, @@ -99,9 +121,14 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): # !!!!! CREATE MAIN COMPONENTS !!!!!! def __create_table(self): - - table = QTableWidget(2, len(self.table_columns)) - + """The actual phonebook table. + + Returns + ------- + QTableWidget + The phonebook table. + """ + table = QTableWidget(2, len(self.selected_columns)) table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) table.horizontalHeader().hide() @@ -109,7 +136,7 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): # Headers - setup column_index = 0 - for header in self.table_columns.keys(): + for header in self.selected_columns.keys(): header_item = QTableWidgetItem(header) header_item.setFont(HEADLINE_FONT) header_item.setFlags(header_item.flags() ^ Qt.ItemIsEditable) @@ -123,20 +150,30 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): return table def __creat_buttons(self): - + """Buttons for editing phonebook table. + + Returns + ------- + QWidget + Widget holding a layout with buttons. + """ + # Button for editing columns btn_components = QPushButton("Kolonner", self) btn_components.clicked.connect(lambda: self.open_popup()) btn_components.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_K)) btn_components.setFixedWidth(100) + # Buttons for adding row btn_add = QPushButton(" + ", self) btn_add.clicked.connect(lambda: self.add_row()) btn_add.setFixedWidth(50) + # Buttons for removing row btn_remove = QPushButton(" - ", self) btn_remove.clicked.connect(lambda: self.remove_row()) btn_remove.setFixedWidth(50) + # Layout for structure hbox = QHBoxLayout() hbox.setSpacing(0) hbox.setSpacing(0) @@ -144,6 +181,7 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): hbox.addWidget(btn_add) hbox.addWidget(btn_remove) + # Widget wrapping buttons wrapper = QWidget() wrapper.setFixedSize(QSize(230, 50)) wrapper.setLayout(hbox) @@ -154,15 +192,35 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): # !!!!! EVENT HADNDLERS !!!!! def enterEvent(self, event): + """Eventhandler for showing buttons when mous enters widgets space. + + Parameters + ---------- + event : enterEvent + Called when mouse enters widgets space. + """ self.buttons.show() self.resize() def leaveEvent(self, event): + """Eventhandler for hiding buttons when mouse leaves widgets space. + + Parameters + ---------- + event : enterEvent + Called when mosue leaves widgets space. + """ self.buttons.hide() self.resize() def keyPressEvent(self, event): + """Keyboard shortcuts for adding and removing rows. + Parameters + ---------- + event : keyPressEvent + Called when keys are pressed. + """ ctrl = event.modifiers() == Qt.ControlModifier if ctrl and event.key() == Qt.Key_Plus: @@ -175,24 +233,43 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): # !!!!! TABLE OPERATIONS !!!!! def add_row(self): + """Add row to phonebook table.""" self.table.insertRow(self.table.currentRow() + 1) self.resize() def remove_row(self): + """Remove row for phonebook table.""" if self.table.currentRow() > 0: self.table.removeRow(self.table.currentRow()) self.resize() def set_columns(self): - for header in self.table_columns.keys(): + """Update table columns visibility based on selected_columns.""" + for header in self.selected_columns.keys(): self.table.setColumnHidden( self.get_column_index_by_header(header), - not (self.table_columns[header]), + not (self.selected_columns[header]), ) - self.resize() def get_column_index_by_header(self, header): + """Get index for column containing a spesific header. + + Parameters + ---------- + header : string + The header to search for. + + Returns + ------- + int + The column index for where the header was found. + + Raises + ------ + LookupError + Unable to find header in table headers. + """ for column_index in range(self.table.columnCount()): self.table.setCurrentCell(0, column_index) if self.table.currentItem().text() == header: @@ -203,6 +280,7 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): # !!!!! MODULE OPERATIONs !!!!! def resize(self): + """Resize whole module based on content.""" resize_table(self.table) width = max(get_table_size(self.table)[0], self.header.minimumWidth()) @@ -216,9 +294,10 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta): self.setFixedSize(QSize(width, height)) def open_popup(self): - popup = ComponentsChoicePopup(self.table_columns) + """Open dialog for editing columns.""" + popup = ComponentsChoicePopup(self.selected_columns) popup.exec_() - self.table_columns = popup.get_table_columns() + self.selected_columns = popup.get_selected_columns() self.set_columns() # !!!!! MODULE BASE OPERATIONS !!!!!