diff --git a/src/View/BoundaryCondition/BoundaryConditionWindow.py b/src/View/BoundaryCondition/BoundaryConditionWindow.py index 07fdeb6f55feb2f9ef66657fa628e7c30aecf1c0..0688b7007dcb224960ef8267d086451ca47b7d71 100644 --- a/src/View/BoundaryCondition/BoundaryConditionWindow.py +++ b/src/View/BoundaryCondition/BoundaryConditionWindow.py @@ -27,10 +27,12 @@ from View.BoundaryCondition.BCUndoCommand import ( AddCommand, DelCommand, SortCommand, MoveCommand, PasteCommand, DuplicateCommand, ) + from Model.BoundaryCondition.BoundaryConditionTypes import ( NotDefined, PonctualContribution, TimeOverZ, TimeOverDebit, ZOverDebit ) + from View.BoundaryCondition.translate import long_types from View.BoundaryCondition.Edit.Window import EditBoundaryConditionWindow diff --git a/src/View/BoundaryCondition/Edit/Plot.py b/src/View/BoundaryCondition/Edit/Plot.py new file mode 100644 index 0000000000000000000000000000000000000000..be3ad8544172d88e6dbbafe112bc857599a2b39b --- /dev/null +++ b/src/View/BoundaryCondition/Edit/Plot.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- + +from tools import timer, trace +from View.Plot.APlot import APlot + +from PyQt5.QtCore import ( + QCoreApplication +) + +from View.BoundaryCondition.Edit.translate import * + +_translate = QCoreApplication.translate + +class Plot(APlot): + def __init__(self, canvas=None, data=None, toolbar=None): + super(Plot, self).__init__( + canvas=canvas, + data=data, + toolbar=toolbar + ) + + @timer + def draw(self): + self.canvas.axes.cla() + self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5) + + if len(self.data) == 0: + self._init = False + return + + # Plot data + x = list(map(lambda v: v[0], self.data.data)) + y = list(map(lambda v: v[1], self.data.data)) + self._line, = self.canvas.axes.plot( + x, y, + color='r', lw=1., + markersize=5, marker='+', + picker=30 + ) + + # Plot label + header = self.data.header + self.canvas.axes.set_xlabel( + table_headers[header[0]], color='black', fontsize=10 + ) + self.canvas.axes.set_ylabel( + table_headers[header[1]], color='black', fontsize=10 + ) + + self.canvas.figure.tight_layout() + self.canvas.figure.canvas.draw_idle() + self.toolbar.update() + + self._init = True + + @timer + def update(self, ind=None): + if self._init == False: + self.draw() + return + + # if ind is not None: + + # else: + + self.canvas.figure.tight_layout() + self.canvas.figure.canvas.draw_idle() diff --git a/src/View/BoundaryCondition/Edit/Table.py b/src/View/BoundaryCondition/Edit/Table.py index 9235bee8393635daef6a13fd28ab65e5594e6b40..1e9033d0153aa2c97b74aaa1e246d01cc8a60e41 100644 --- a/src/View/BoundaryCondition/Edit/Table.py +++ b/src/View/BoundaryCondition/Edit/Table.py @@ -15,25 +15,20 @@ from PyQt5.QtWidgets import ( QTableView, QAbstractItemView, ) +from Model.BoundaryCondition.BoundaryConditionTypes import ( + NotDefined, PonctualContribution, + TimeOverZ, TimeOverDebit, ZOverDebit +) + from View.BoundaryCondition.Edit.UndoCommand import ( SetDataCommand, AddCommand, DelCommand, SortCommand, MoveCommand, PasteCommand, DuplicateCommand, ) - -from Model.BoundaryCondition.BoundaryConditionTypes import ( - NotDefined, PonctualContribution, - TimeOverZ, TimeOverDebit, ZOverDebit -) +from View.BoundaryCondition.Edit.translate import * _translate = QCoreApplication.translate -table_headers = { - "time": _translate("BoundaryCondition", "Time"), - "debit": _translate("BoundaryCondition", "Debit"), - "z": _translate("BoundaryCondition", "Z (m)") -} - class TableModel(QAbstractTableModel): def __init__(self, data=None, undo=None): diff --git a/src/View/BoundaryCondition/Edit/UndoCommand.py b/src/View/BoundaryCondition/Edit/UndoCommand.py index 7f3bbef536b4f75f8ada332fcd1dc8216fdfba6b..c20288ff4c10c881b97db3988f02bbfd9477c2af 100644 --- a/src/View/BoundaryCondition/Edit/UndoCommand.py +++ b/src/View/BoundaryCondition/Edit/UndoCommand.py @@ -79,7 +79,7 @@ class SortCommand(QUndoCommand): def redo(self): self._data.sort( - reverse=self._reverse, + _reverse=self._reverse, key=lambda x: x.name ) if self._indexes is None: diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index 7de37c5e1bb7e8169478e4c941cd24519d8986ea..5823a2cea99ae06ff710dbd41ee1dc1ee23e65fc 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -17,8 +17,11 @@ from PyQt5.QtWidgets import ( QUndoStack, QShortcut, QAction, QItemDelegate, ) +from View.Plot.MplCanvas import MplCanvas + from View.BoundaryCondition.translate import long_types from View.BoundaryCondition.Edit.Table import TableModel +from View.BoundaryCondition.Edit.Plot import Plot _translate = QCoreApplication.translate @@ -34,6 +37,7 @@ class EditBoundaryConditionWindow(ASubMainWindow, ListedSubWindow): self.setup_window() self.setup_sc() self.setup_table() + self.setup_plot() self.setup_connections() def setup_window(self): @@ -67,6 +71,18 @@ class EditBoundaryConditionWindow(ASubMainWindow, ListedSubWindow): table.setSelectionBehavior(QAbstractItemView.SelectRows) table.setAlternatingRowColors(True) + def setup_plot(self): + self.canvas = MplCanvas(width=5, height=4, dpi=100) + self.canvas.setObjectName("canvas") + self.verticalLayout.addWidget(self.canvas) + + self.plot = Plot( + canvas = self.canvas, + data = self._data, + ) + self.plot.draw() + + def setup_connections(self): self.find(QAction, "action_add").triggered.connect(self.add) self.find(QAction, "action_del").triggered.connect(self.delete) diff --git a/src/View/BoundaryCondition/Edit/translate.py b/src/View/BoundaryCondition/Edit/translate.py new file mode 100644 index 0000000000000000000000000000000000000000..e3fa75135617dce4859d6e05dc0845d78842a373 --- /dev/null +++ b/src/View/BoundaryCondition/Edit/translate.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from PyQt5.QtCore import QCoreApplication + +_translate = QCoreApplication.translate + +table_headers = { + "time": _translate("BoundaryCondition", "Time"), + "debit": _translate("BoundaryCondition", "Debit"), + "z": _translate("BoundaryCondition", "Z (m)") +} diff --git a/src/View/ui/BoundaryConditions.ui b/src/View/ui/BoundaryConditions.ui index 8a0f8f962687b9a6df0057fbc166206932967c99..5d68ac0a98cf366443ef971027aa7edcc56249c8 100644 --- a/src/View/ui/BoundaryConditions.ui +++ b/src/View/ui/BoundaryConditions.ui @@ -25,19 +25,43 @@ <widget class="QWidget" name="centralwidget"> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> - <widget class="QSplitter" name="splitter"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <widget class="QTableView" name="tableView"/> - <widget class="QWidget" name="verticalLayoutWidget"> - <layout class="QVBoxLayout" name="verticalLayout"/> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Liquid</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QSplitter" name="splitter"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <widget class="QTableView" name="tableView"/> + <widget class="QWidget" name="verticalLayoutWidget"> + <layout class="QVBoxLayout" name="verticalLayout"/> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>Solid</string> + </attribute> + </widget> + <widget class="QWidget" name="tab_3"> + <attribute name="title"> + <string>Suspension</string> + </attribute> </widget> </widget> </item>