diff --git a/soitool/codebook.py b/soitool/codebook_model_view.py similarity index 100% rename from soitool/codebook.py rename to soitool/codebook_model_view.py diff --git a/soitool/codebook_row_adder.py b/soitool/codebook_row_adder.py index cac0fe8603ff8df87e4eb8aa44da0ee71c66544f..2372001b36cba575590b9c77fb94c61771d51479 100644 --- a/soitool/codebook_row_adder.py +++ b/soitool/codebook_row_adder.py @@ -11,7 +11,7 @@ from PySide2.QtWidgets import ( ) from PySide2.QtCore import Qt from soitool.database import Database -from soitool.codebook import CodeBookTableView, CodeBookTableModel +from soitool.codebook_model_view import CodeBookTableModel, CodeBookTableView class CodebookRowAdder(QWidget): diff --git a/soitool/codebook_widget.py b/soitool/codebook_widget.py new file mode 100644 index 0000000000000000000000000000000000000000..9f418daad940e50385f76b342dd6f3f021c13647 --- /dev/null +++ b/soitool/codebook_widget.py @@ -0,0 +1,29 @@ +"""Module containing a widget for viewing and editing codebook.""" +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout +from soitool.codebook_model_view import CodeBookTableView +from soitool.codebook_row_adder import CodebookRowAdder + + +class CodebookWidget(QWidget): + """Widget for viewing and editing codebook.""" + + def __init__(self): + super().__init__() + + # Create widgets + self.view = CodeBookTableView() + self.row_adder = CodebookRowAdder() + + self.create_and_set_layouts() + + def create_and_set_layouts(self): + """Create layouts, add widgets and set layout.""" + # Add widgets to layouts + vbox = QVBoxLayout() + vbox.addWidget(self.row_adder) + vbox.addWidget(self.view) + hbox = QHBoxLayout() + hbox.addLayout(vbox) + + # Set layout + self.setLayout(hbox) diff --git a/soitool/main_window.py b/soitool/main_window.py index bfb194a5b29ae3d3c1fb4d7bb474714a41fc4c5c..eb093b0c53146a7b21dd6c050d092e1776c0f1f2 100644 --- a/soitool/main_window.py +++ b/soitool/main_window.py @@ -8,21 +8,18 @@ from enum import Enum from functools import partial from PySide2.QtWidgets import ( QTabWidget, - QWidget, QMainWindow, QApplication, - QHBoxLayout, - QVBoxLayout, QAction, QFileDialog, ) from PySide2.QtGui import QIcon from PySide2.QtCore import QTimer from soitool.soi_workspace_widget import SOIWorkspaceWidget -from soitool.codebook import CodeBookTableView -from soitool.codebook_row_adder import CodebookRowAdder from soitool.codebook_to_pdf import generate_codebook_pdf from soitool.dialog_wrappers import exec_info_dialog +from soitool.codebook_widget import CodebookWidget +from soitool.codebook_model_view import CodeBookTableModel from soitool.database import Database, DBPATH from soitool.serialize_export_import_soi import ( export_soi, @@ -57,9 +54,7 @@ class MainWindow(QMainWindow): self.timer.setInterval( self.database.seconds_to_next_update(60 * 60 * 24) * 1000 ) - self.timer.timeout.connect( - lambda: self.database.update_codebook_auto(self.timer) - ) + self.timer.timeout.connect(partial(self.regenerate_codes, auto=True)) self.timer.start() # Add SOIWorkspaceWidget-tab @@ -147,7 +142,7 @@ class MainWindow(QMainWindow): # Regenerate codebook-codes: regenerate_codes = QAction("Nye koder i db", self) regenerate_codes.setStatusTip("Nye koder lages tilfeldig") - regenerate_codes.triggered.connect(self.database.update_codebook) + regenerate_codes.triggered.connect(self.regenerate_codes) codebook_menu.addAction(regenerate_codes) # Export codebook as PDF @@ -192,20 +187,7 @@ class MainWindow(QMainWindow): break # Codebook-tab does not exist, create, add and select tab else: - # Create widgets - tab = QWidget() - view = CodeBookTableView(self.database) - row_adder = CodebookRowAdder(view) - - # Add widgets to layouts - vbox = QVBoxLayout() - vbox.addWidget(row_adder) - vbox.addWidget(view) - hbox = QHBoxLayout() - hbox.addLayout(vbox) - - # Set layout, add tab and select tab - tab.setLayout(hbox) + tab = CodebookWidget() self.tabs.addTab(tab, "Kodebok") self.tabs.setCurrentWidget(tab) @@ -256,6 +238,34 @@ class MainWindow(QMainWindow): self.tabs.addTab(tab, soi.title) self.tabs.setCurrentWidget(tab) + def regenerate_codes(self, auto=False): + """Regenerate codebook-codes and update codebook-tab if open. + + Parameters + ---------- + auto : bool, optional + True if self.timer called this function, by default False. + """ + if auto: + + def regenerate(): + self.database.update_codebook_auto(self.timer) + + else: + + def regenerate(): + self.database.update_codebook() + + for i in range(self.tabs.count()): + if self.tabs.tabText(i) == "Kodebok": + view = self.tabs.widget(i).view + view.setModel(None) + regenerate() + view.setModel(CodeBookTableModel()) + break + else: + regenerate() + if __name__ == "__main__":