mirror of https://gitlab.com/pamhyr/pamhyr2
doc: dev: Update Table and UndoCommand.
parent
2e94348bb8
commit
f93f3fe122
|
|
@ -485,6 +485,7 @@ generic value from optional parameters, for examples:
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
#+begin_src python :python python3 :results output :noweb yes
|
||||||
from View.Tools.PamhyrWindow import PamhyrWindow
|
from View.Tools.PamhyrWindow import PamhyrWindow
|
||||||
from View.My.Translate import MyTranslate
|
from View.My.Translate import MyTranslate
|
||||||
|
from View.My.Table import MyTableModel
|
||||||
|
|
||||||
class MyWindow(PamhyrWindow):
|
class MyWindow(PamhyrWindow):
|
||||||
_pamhyr_ui = "MyUI"
|
_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
|
and =setData= methode to implement, but the constructor needs more
|
||||||
information than a classic QAbstractTableModel class.
|
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
|
#+begin_src python :python python3 :results output :noweb yes
|
||||||
# Table model definition (Table.py)
|
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||||
|
|
||||||
class MyTableModel(PamhyrTableModel):
|
class MyTableModel(PamhyrTableModel):
|
||||||
def data(self, index, role):
|
def data(self, index, role):
|
||||||
# Retrun data at INDEX...
|
# Retrun data at INDEX...
|
||||||
|
|
@ -541,8 +545,11 @@ information than a classic QAbstractTableModel class.
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def setData(self, index, value, role=Qt.EditRole):
|
def setData(self, index, value, role=Qt.EditRole):
|
||||||
# Set VALUE at INDEX...
|
# 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")
|
table_headers = self._trad.get_dict("table_headers")
|
||||||
self._model = MyTableModel(
|
self._model = MyTableModel(
|
||||||
table_view = table, # The table view object
|
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'
|
"bar": self.my_delegate, # Custom delegate for column 'bar'
|
||||||
},
|
},
|
||||||
data = self._my_lst, # The data
|
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
|
#+end_src
|
||||||
|
|
||||||
*** TODO UndoCommand
|
|
||||||
*** TODO Plot
|
*** TODO Plot
|
||||||
*** TODO Mainwindow
|
*** TODO Mainwindow
|
||||||
** TODO Solver
|
** TODO Solver
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue