Commit f93f3fe1 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

doc: dev: Update Table and UndoCommand.

Showing with 48 additions and 4 deletions
+48 -4
......@@ -485,6 +485,7 @@ generic value from optional parameters, for examples:
#+begin_src python :python python3 :results output :noweb yes
from View.Tools.PamhyrWindow import PamhyrWindow
from View.My.Translate import MyTranslate
from View.My.Table import MyTableModel
class MyWindow(PamhyrWindow):
_pamhyr_ui = "MyUI"
......@@ -532,8 +533,11 @@ QAbstractTableModel shortly. In simple cases, there are only =data=
and =setData= methode to implement, but the constructor needs more
information than a classic QAbstractTableModel class.
#+NAME: table-src
#+CAPTION: Definition of a table model from =PamhyrTableModel= in a file =View/My/Table.py=.
#+begin_src python :python python3 :results output :noweb yes
# Table model definition (Table.py)
from View.Tools.PamhyrTable import PamhyrTableModel
class MyTableModel(PamhyrTableModel):
def data(self, index, role):
# Retrun data at INDEX...
......@@ -541,8 +545,11 @@ information than a classic QAbstractTableModel class.
@pyqtSlot()
def setData(self, index, value, role=Qt.EditRole):
# Set VALUE at INDEX...
#+end_src
# Table model creation (Window.py)
#+CAPTION: Using the table model defined in Listing [[table-src]] in window funtion =setup_table= defined Listing [[window]].
#+begin_src python :python python3 :results output :noweb yes
# Table model creation (Window.py: setup_table)
table_headers = self._trad.get_dict("table_headers")
self._model = MyTableModel(
table_view = table, # The table view object
......@@ -553,11 +560,48 @@ information than a classic QAbstractTableModel class.
"bar": self.my_delegate, # Custom delegate for column 'bar'
},
data = self._my_lst, # The data
undo = self._undo_stack, # The undo command stack
undo = self._undo_stack, # The window undo command stack
)
#+end_src
*** UndoCommand
All model modification must be done by an QUndoCommand, this command
allow to undo and redo an action. This a Qt class wi can inherit to
define custom undo command (see example Listing [[undo-cmd]])
#+NAME: undo-cmd
#+CAPTION: Example of custom UndoCommand, this command allow to add a node to graph in river network window (method redo), and delete it to graph with undo method
#+begin_src python :python python3 :results output :noweb yes
class AddNodeCommand(QUndoCommand):
def __init__(self, graph, node):
QUndoCommand.__init__(self)
self._graph = graph
self._node = node
def undo(self):
self._graph.remove_node(self._node.name)
def redo(self):
self._graph.insert_node(self._node)
#+end_src
All undo command must be push into a =QUndoStack= (see Listing
[[undo-cmd-push]]) to perform the action and allow user undo and redo this
action. In PamhyrWindow (and PamhyrDialog) the undo stack is
automatically create if the option ="undo"= is activate at window
creation, this stack is accessible at =self._undo_stack=.
#+begin_src python :python python3 :results output :noweb yes
self._undo_stack.push(
AddNodeCommand(
self._graph,
node
)
)
#+end_src
*** TODO UndoCommand
*** TODO Plot
*** TODO Mainwindow
** TODO Solver
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment