stricklers, config: Add stricklers tab in config window.

This commit is contained in:
Pierre-Antoine Rouby committed 2023-05-23 08:53:04 +02:00
1 parent 6c14e5ebf1
commit 70fac8e6e3
7 files changed
+161 -10

No files matched your search

+74 -7
View File
@@ -4,8 +4,16 @@ from config import Config
from View.ASubWindow import ASubWindow
from View.ListedSubWindow import ListedSubWindow
from View.Stricklers.Table import TableModel
from View.Stricklers.translate import *
from View.Stricklers.UndoCommand import *
from View.Configure.Solver.Window import ConfigureSolverWindow
from PyQt5.QtGui import (
QKeySequence,
)
from PyQt5.QtCore import (
Qt, QVariant, QAbstractTableModel,
)
@@ -13,7 +21,7 @@ from PyQt5.QtCore import (
from PyQt5.QtWidgets import (
QDialogButtonBox, QPushButton, QLineEdit,
QFileDialog, QTableView, QAbstractItemView,
QComboBox,
QComboBox, QUndoStack, QShortcut, QHeaderView,
)
@@ -71,17 +79,18 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
else:
self.conf = conf
self.setup_sc()
# Solver
table = self.find(QTableView, "tableView_solver")
self.solver_table_model = SolverTableModel(
headers = ["name", "type", "description"],
rows = conf.solvers.copy()
)
self.find(QTableView, "tableView_solver")\
.setModel(self.solver_table_model)
self.find(QTableView, "tableView_solver")\
.setSelectionBehavior(QAbstractItemView.SelectRows)
self.find(QTableView, "tableView_solver")\
.setAlternatingRowColors(True)
table.setModel(self.solver_table_model)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True)
# Meshing_Tool
self.set_line_edit_text("lineEdit_meshing_tool", self.conf.meshing_tool)
@@ -99,6 +108,18 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
self.find(QTableView, "tableView_solver").resizeColumnsToContents()
self.connect()
# Stricklers
table = self.find(QTableView, f"tableView_stricklers")
self._stricklers = self.conf.stricklers
self._stricklers_table = TableModel(
data = self._stricklers,
undo = self._undo_stack,
)
table.setModel(self._stricklers_table)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True)
# Language
languages = Config.languages()
for lang in languages:
@@ -106,11 +127,25 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
if self.conf.lang == languages[lang]:
self.set_combobox_text("comboBox_language", lang)
def setup_sc(self):
self._undo_stack = QUndoStack()
self.undo_sc = QShortcut(QKeySequence.Undo, self)
self.redo_sc = QShortcut(QKeySequence.Redo, self)
self.copy_sc = QShortcut(QKeySequence.Copy, self)
self.paste_sc = QShortcut(QKeySequence.Paste, self)
def connect(self):
buttons = {
# Solvers
"pushButton_solver_add": self.add_solver,
"pushButton_solver_del": self.remove_solver,
"pushButton_solver_edit": self.edit_solver,
# Stricklers
"pushButton_stricklers_add": self.add_stricklers,
"pushButton_stricklers_del": self.del_stricklers,
"pushButton_stricklers_sort": self.sort_stricklers,
# Others
"pushButton_backup_path": lambda: self.file_dialog(
select_file = False,
callback = lambda f: self.set_line_edit_text(
@@ -158,6 +193,8 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
self.conf.save()
self.close()
# Solvers
def edit_solver(self):
indexes = self.find(QTableView, "tableView_solver").selectionModel().selectedRows()
for index in indexes:
@@ -177,3 +214,33 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
indices = self.find(QTableView, "tableView_solver").selectionModel().selectedRows()
for index in sorted(indices):
self.solver_table_model.removeRow(index)
# Stricklers
def index_selected_rows_strikclers(self):
table = self.find(QTableView, f"tableView_stricklers")
return list(
set(
map(
lambda i: i.row(),
table.selectedIndexes()
)
)
)
def add_stricklers(self):
rows = self.index_selected_rows_strikclers()
if len(rows) == 0:
self._stricklers_table.add(0)
else:
self._stricklers_table.add(rows[0])
def del_stricklers(self):
rows = self.index_selected_rows_strikclers()
if len(rows) == 0:
return
self._stricklers_table.delete(rows)
def sort_stricklers(self):
self._stricklers_table.sort(False)