Skip to content
Snippets Groups Projects
Commit 4f3fe21b authored by morkolai's avatar morkolai
Browse files

#96 Dokumentasjon

parent 791ac4ca
No related branches found
No related tags found
1 merge request!57#96 Telefonliste & Fiks til høyde på tabeller (rundt oppløsning)
Pipeline #83387 failed
......@@ -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 !!!!!
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment