AddFiles, REPLine: Add undo commands.

This commit is contained in:
Pierre-Antoine Rouby committed 2024-04-02 16:18:21 +02:00
1 parent e350b7d8f5
commit 92eac86c68
11 files changed
+298 -23

No files matched your search

+15 -5
View File
@@ -27,6 +27,9 @@ from PyQt5.QtWidgets import (
)
from View.AdditionalFiles.Translate import AddFileTranslate
from View.AdditionalFiles.UndoCommand import (
SetCommand
)
logger = logging.getLogger()
@@ -36,7 +39,7 @@ class EditAddFileWindow(PamhyrWindow):
_pamhyr_name = "Edit additional file"
def __init__(self, study=None, config=None, add_file=None,
trad=None, parent=None):
trad=None, undo=None, parent=None):
name = trad[self._pamhyr_name] + " - " + study.name
super(EditAddFileWindow, self).__init__(
@@ -50,6 +53,8 @@ class EditAddFileWindow(PamhyrWindow):
self._add_file = add_file
self._hash_data.append(self._add_file)
self._undo = undo
self.setup_values()
self.setup_connection()
@@ -71,10 +76,15 @@ class EditAddFileWindow(PamhyrWindow):
path = self.get_line_edit_text("lineEdit_path")
text = self.get_plaintext_edit_text("plainTextEdit")
self._add_file.enabled = is_enabled
self._add_file.name = name
self._add_file.path = path
self._add_file.text = text
self._undo.push(
SetCommand(
self._add_file,
enabled=is_enabled,
name=name,
path=path,
text=text,
)
)
self._propagate_update(key=Modules.ADDITIONAL_FILES)
self.close()
+14 -4
View File
@@ -30,6 +30,9 @@ from PyQt5.QtGui import (
)
from View.Tools.PamhyrList import PamhyrListModel
from View.AdditionalFiles.UndoCommand import (
AddCommand, DelCommand
)
logger = logging.getLogger()
@@ -62,10 +65,17 @@ class ListModel(PamhyrListModel):
return QVariant()
def add(self, row):
self._data.new(row)
self._undo.push(
AddCommand(
self._data, row
)
)
self.update()
def delete(self, rows):
logger.info(f"add_files: delete {rows}")
self._data.delete_i(rows)
def delete(self, row):
self._undo.push(
DelCommand(
self._data, row
)
)
self.update()
+80
View File
@@ -0,0 +1,80 @@
# UndoCommand.py -- Pamhyr
# Copyright (C) 2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
from tools import trace, timer
from PyQt5.QtWidgets import (
QMessageBox, QUndoCommand, QUndoStack,
)
class SetCommand(QUndoCommand):
def __init__(self, add_file, **kwargs):
QUndoCommand.__init__(self)
self._add_file = add_file
self._new = kwargs
self._old = None
def undo(self):
f = self._add_file
for key in self._old:
f[key] = self._old[key]
def redo(self):
f = self._add_file
if self._old is None:
self._old = {}
for key in self._new:
self._old[key] = f[key]
for key in self._new:
f[key] = self._new[key]
class AddCommand(QUndoCommand):
def __init__(self, files, row):
QUndoCommand.__init__(self)
self._files = files
self._row = row
self._new = None
def undo(self):
self._files.delete([self._new])
def redo(self):
if self._new is None:
self._new = self._files.new(self._row)
else:
self._files.insert(self._row, self._new)
class DelCommand(QUndoCommand):
def __init__(self, files, row):
QUndoCommand.__init__(self)
self._files = files
self._row = row
self._old = self._files.get(row)
def undo(self):
self._files.insert(self._row, self._old)
def redo(self):
self._files.delete_i([self._row])
+15 -2
View File
@@ -28,7 +28,6 @@ from View.AdditionalFiles.List import ListModel
from View.AdditionalFiles.Translate import AddFileTranslate
from View.AdditionalFiles.Edit.Window import EditAddFileWindow
class AddFileListWindow(PamhyrWindow):
_pamhyr_ui = "AdditionalFileList"
_pamhyr_name = "Additional files"
@@ -55,6 +54,8 @@ class AddFileListWindow(PamhyrWindow):
self._list = ListModel(
list_view=lst,
data=self._study.river.additional_files,
undo=self._undo_stack,
trad=self._trad,
)
def setup_connections(self):
@@ -80,7 +81,10 @@ class AddFileListWindow(PamhyrWindow):
def delete(self):
rows = self.selected_rows()
self._list.delete(rows)
if len(rows) == 0:
return
self._list.delete(rows[0])
def edit(self):
rows = self.selected_rows()
@@ -99,6 +103,15 @@ class AddFileListWindow(PamhyrWindow):
config=self._config,
add_file=add_file,
trad=self._trad,
undo=self._undo_stack,
parent=self,
)
win.show()
def _undo(self):
self._undo_stack.undo()
self.update()
def _redo(self):
self._undo_stack.redo()
self.update()