diff --git a/Server/copter_table.py b/Server/copter_table.py index 50b0c25..46f7edd 100644 --- a/Server/copter_table.py +++ b/Server/copter_table.py @@ -12,6 +12,17 @@ from config_editor_models import ConfigDialog import copter_table_models as table +def save_preset(config, current, header_dict): + presets = config.table_presets + + for key in presets[HeaderEditWidget.default]: + if key not in presets[current] and not header_dict[key]: + header_dict.pop(key) + + presets[current] = header_dict + # config.write() + + class CopterTableWidget(QTableView): def __init__(self, model: table.CopterDataModel, config): QTableView.__init__(self) @@ -75,8 +86,17 @@ class CopterTableWidget(QTableView): for name, show in item_dict.items(): # for index, name in enumerate(self.columns): self.setColumnHidden(self.columns.index(name), not show) # self.setColumnHidden(index, not item_dict.get(name, False)) + @property + def item_dict(self): + return {column: not self.isColumnHidden(self.columns.index(column)) for column in self.current_columns} + + def save_columns(self): + current = self.config.table_presets_current + header_dict = self.item_dict + save_preset(self.config, current, header_dict) + def select_all(self, state): - for i in self.model.rowCount(): + for i in range(self.model.rowCount()): self.model.update_data(i, 0, state, Qt.CheckStateRole) def toggle_select(self): @@ -104,6 +124,7 @@ class CopterTableWidget(QTableView): dialog.exec() def showHeaderMenu(self, event): + self.save_columns() menu = QMenu(self) header_view = HeaderEditWidget(self, self.config, menu_mode=True, parent=menu) # header_view.setFixedHeight((header_view.geometry().height()-2) * len(header_view.columns)) @@ -183,12 +204,7 @@ class ActiveHeaderListWidget(HeaderListWidget): self.itemChanged.connect(self.on_itemChanged) def _populate_from_widget(self): - item_dict = {} - for column, name in enumerate(self.current_columns): - visible = not self.source_widget.isColumnHidden(column) - item_dict[name] = visible - - self.populate_items(item_dict) + self.populate_items(self.source_widget.item_dict) @pyqtSlot(QListWidgetItem) def on_itemChanged(self, item): @@ -220,10 +236,17 @@ class HeaderEditWidget(QtWidgets.QWidget): if self.menu_mode else HeaderListWidget() self.previous = self.config.table_presets_current - self._dialog = None + self.save = True + # self._dialog = None self.setupUi() + @pyqtSlot() + def call_dialog(self): + self.save_preset() + self.save = False + HeaderEditDialog(self.source, self.config).exec() + def setupUi(self): self.header_widget.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) @@ -255,9 +278,8 @@ class HeaderEditWidget(QtWidgets.QWidget): hbox.addWidget(save_button) hbox.addWidget(apply_button) else: - self._dialog = HeaderEditDialog(self.source, self.config) dialog_button = QPushButton("Manage presets") - dialog_button.clicked.connect(self._dialog.show) + dialog_button.clicked.connect(self.call_dialog) hbox.addWidget(dialog_button) vbox.addLayout(hbox) @@ -297,13 +319,14 @@ class HeaderEditWidget(QtWidgets.QWidget): self.preset_widget.setCurrentText(self.previous) return + name = name.strip() if name in self.config.table_presets or name == self.default or name == self.add_new_text: QMessageBox.warning(None, "Preset already exists!", "Preset already exists!") self.preset_widget.setCurrentText(self.previous) return self.config.table_presets[name] = deepcopy(dict(self.config.table_presets[self.default])) - self.config.write() + # self.config.write() self.update_preset_list() self.preset_widget.setCurrentText(name) @@ -320,22 +343,18 @@ class HeaderEditWidget(QtWidgets.QWidget): return self.config.table_presets.pop(self.preset_widget.currentText()) - self.config.write() + # self.config.write() self.previous = self.default self.update_preset_list() def save_preset(self): + if not self.save: # don't save after calling dialog to avoid overrides + return + current = self.preset_widget.currentText() - presets = self.config.table_presets header_dict = self.header_widget.item_dict - - for key in presets[self.default]: - if key not in presets[current] and not header_dict[key]: - header_dict.pop(key) - - presets[current] = header_dict - self.config.write() + save_preset(self.config, current, header_dict) def apply_preset(self): self.config.table_presets_current = self.preset_widget.currentText() diff --git a/Server/server_qt.py b/Server/server_qt.py index 8d2c714..aa25d0a 100644 --- a/Server/server_qt.py +++ b/Server/server_qt.py @@ -196,6 +196,11 @@ class MainWindow(QtWidgets.QMainWindow): event.accept() QApplication.quit() + def on_quit(self): + self.ui.copter_table.save_columns() + self.server.config.write() + logging.info("Exit actions completed: config saved") + def iterate_selected(self, f, *args, **kwargs): for copter in self.model.user_selected(): yield f(copter, *args, **kwargs) @@ -611,6 +616,8 @@ if __name__ == "__main__": Client.on_connect = window.client_connection_changed Client.on_disconnect = window.client_connection_changed + app.aboutToQuit.connect(window.on_quit) + server.start() window.show()