mirror of https://gitlab.com/pamhyr/pamhyr2
Geometry: Make import button an undo command.
parent
30702cb118
commit
4d95e42d20
|
|
@ -487,8 +487,7 @@ class Reach(SQLSubModel):
|
||||||
Returns:
|
Returns:
|
||||||
Nothing.
|
Nothing.
|
||||||
"""
|
"""
|
||||||
list_profile = []
|
imported_profiles = []
|
||||||
list_header = []
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
list_profile, list_header = self.read_file_st(str(file_path_name))
|
list_profile, list_header = self.read_file_st(str(file_path_name))
|
||||||
|
|
@ -505,9 +504,8 @@ class Reach(SQLSubModel):
|
||||||
**d, reach=self, status=self._status
|
**d, reach=self, status=self._status
|
||||||
)
|
)
|
||||||
prof.import_points(profile)
|
prof.import_points(profile)
|
||||||
self.profiles.append(prof)
|
|
||||||
self._update_profile_numbers()
|
|
||||||
|
|
||||||
|
imported_profiles.append(prof)
|
||||||
self._status.modified()
|
self._status.modified()
|
||||||
except FileNotFoundError as e:
|
except FileNotFoundError as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
|
|
@ -515,6 +513,12 @@ class Reach(SQLSubModel):
|
||||||
except FileFormatError as e:
|
except FileFormatError as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
e.alert()
|
e.alert()
|
||||||
|
finally:
|
||||||
|
self.profiles = imported_profiles + self.profiles
|
||||||
|
|
||||||
|
self._update_profile_numbers()
|
||||||
|
return imported_profiles
|
||||||
|
|
||||||
|
|
||||||
@timer
|
@timer
|
||||||
def read_file_st(self, filename):
|
def read_file_st(self, filename):
|
||||||
|
|
|
||||||
|
|
@ -185,6 +185,20 @@ class GeometryReachTableModel(PamhyrTableModel):
|
||||||
self.endMoveRows()
|
self.endMoveRows()
|
||||||
self.layoutChanged.emit()
|
self.layoutChanged.emit()
|
||||||
|
|
||||||
|
def import_geometry(self, row, filename):
|
||||||
|
self.layoutAboutToBeChanged.emit()
|
||||||
|
|
||||||
|
self._undo.push(
|
||||||
|
ImportCommand(
|
||||||
|
self._data, row,
|
||||||
|
filename
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.layoutAboutToBeChanged.emit()
|
||||||
|
self.layoutChanged.emit()
|
||||||
|
|
||||||
|
|
||||||
def duplicate(self, rows, profiles):
|
def duplicate(self, rows, profiles):
|
||||||
self.layoutAboutToBeChanged.emit()
|
self.layoutAboutToBeChanged.emit()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from tools import trace, timer
|
from tools import trace, timer
|
||||||
|
|
||||||
|
|
@ -27,6 +29,8 @@ from Model.Geometry import Reach
|
||||||
|
|
||||||
from Meshing.Mage import MeshingWithMage
|
from Meshing.Mage import MeshingWithMage
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
class SetDataCommand(QUndoCommand):
|
class SetDataCommand(QUndoCommand):
|
||||||
def __init__(self, reach, index, old_value, new_value):
|
def __init__(self, reach, index, old_value, new_value):
|
||||||
|
|
@ -190,6 +194,26 @@ class DuplicateCommand(QUndoCommand):
|
||||||
for profile in self._profiles:
|
for profile in self._profiles:
|
||||||
self._reach.insert_profile(self._rows[0], profile)
|
self._reach.insert_profile(self._rows[0], profile)
|
||||||
|
|
||||||
|
class ImportCommand(QUndoCommand):
|
||||||
|
def __init__(self, reach, row, filename):
|
||||||
|
QUndoCommand.__init__(self)
|
||||||
|
|
||||||
|
self._reach = reach
|
||||||
|
self._row = row
|
||||||
|
self._filename = filename
|
||||||
|
self._profiles = None
|
||||||
|
|
||||||
|
def undo(self):
|
||||||
|
self._reach.delete_profiles(self._profiles)
|
||||||
|
|
||||||
|
def redo(self):
|
||||||
|
if self._profiles is None:
|
||||||
|
self._profiles = self._reach.import_geometry(self._filename)
|
||||||
|
self._profiles.reverse()
|
||||||
|
else:
|
||||||
|
for profile in self._profiles:
|
||||||
|
self._reach.insert_profile(self._row, profile)
|
||||||
|
|
||||||
|
|
||||||
class MeshingCommand(QUndoCommand):
|
class MeshingCommand(QUndoCommand):
|
||||||
def __init__(self, reach, mesher, step):
|
def __init__(self, reach, mesher, step):
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ class GeometryWindow(PamhyrWindow):
|
||||||
# Add reach to hash computation data
|
# Add reach to hash computation data
|
||||||
self._hash_data.append(self._reach)
|
self._hash_data.append(self._reach)
|
||||||
|
|
||||||
self._tablemodel = None
|
self._table = None
|
||||||
self._profile_window = []
|
self._profile_window = []
|
||||||
|
|
||||||
self.setup_table()
|
self.setup_table()
|
||||||
|
|
@ -94,14 +94,14 @@ class GeometryWindow(PamhyrWindow):
|
||||||
table_headers = self._trad.get_dict("table_headers")
|
table_headers = self._trad.get_dict("table_headers")
|
||||||
|
|
||||||
table = self.find(QTableView, "tableView")
|
table = self.find(QTableView, "tableView")
|
||||||
self._tablemodel = GeometryReachTableModel(
|
self._table = GeometryReachTableModel(
|
||||||
table_view=table,
|
table_view=table,
|
||||||
table_headers=table_headers,
|
table_headers=table_headers,
|
||||||
editable_headers=["name", "kp"],
|
editable_headers=["name", "kp"],
|
||||||
data=self._reach,
|
data=self._reach,
|
||||||
undo=self._undo_stack
|
undo=self._undo_stack
|
||||||
)
|
)
|
||||||
table.setModel(self._tablemodel)
|
table.setModel(self._table)
|
||||||
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||||
table.setAlternatingRowColors(True)
|
table.setAlternatingRowColors(True)
|
||||||
|
|
@ -214,8 +214,7 @@ class GeometryWindow(PamhyrWindow):
|
||||||
|
|
||||||
if filename != "":
|
if filename != "":
|
||||||
size = os.stat(filename).st_size
|
size = os.stat(filename).st_size
|
||||||
self._reach.import_geometry(filename)
|
self._table.import_geometry(0, filename)
|
||||||
self._tablemodel.layoutChanged.emit()
|
|
||||||
|
|
||||||
self.update_profile_windows()
|
self.update_profile_windows()
|
||||||
self.plot_xy()
|
self.plot_xy()
|
||||||
|
|
@ -251,7 +250,7 @@ class GeometryWindow(PamhyrWindow):
|
||||||
|
|
||||||
def edit_meshing(self):
|
def edit_meshing(self):
|
||||||
mesher = MeshingWithMage()
|
mesher = MeshingWithMage()
|
||||||
self._tablemodel.meshing(mesher, -1)
|
self._table.meshing(mesher, -1)
|
||||||
|
|
||||||
self.update_profile_windows()
|
self.update_profile_windows()
|
||||||
self.plot_xy()
|
self.plot_xy()
|
||||||
|
|
@ -370,9 +369,9 @@ class GeometryWindow(PamhyrWindow):
|
||||||
def changed_slider_value(self):
|
def changed_slider_value(self):
|
||||||
self.tableView.model().blockSignals(True)
|
self.tableView.model().blockSignals(True)
|
||||||
|
|
||||||
if self._tablemodel.rowCount() != 0:
|
if self._table.rowCount() != 0:
|
||||||
slider = self.find(QSlider, "verticalSlider")
|
slider = self.find(QSlider, "verticalSlider")
|
||||||
slider.setMaximum(self._tablemodel.rowCount() - 1)
|
slider.setMaximum(self._table.rowCount() - 1)
|
||||||
|
|
||||||
slider_value = slider.value()
|
slider_value = slider.value()
|
||||||
kp = self._reach.profile(slider_value).kp
|
kp = self._reach.profile(slider_value).kp
|
||||||
|
|
@ -386,20 +385,20 @@ class GeometryWindow(PamhyrWindow):
|
||||||
|
|
||||||
def increment_value_slider(self):
|
def increment_value_slider(self):
|
||||||
slider = self.find(QSlider, "verticalSlider")
|
slider = self.find(QSlider, "verticalSlider")
|
||||||
if 0 <= slider.value() < self._tablemodel.rowCount() - 1:
|
if 0 <= slider.value() < self._table.rowCount() - 1:
|
||||||
slider.setValue(slider.value() + 1)
|
slider.setValue(slider.value() + 1)
|
||||||
|
|
||||||
def decrement_value_slider(self):
|
def decrement_value_slider(self):
|
||||||
slider = self.find(QSlider, "verticalSlider")
|
slider = self.find(QSlider, "verticalSlider")
|
||||||
if 0 < slider.value() < self._tablemodel.rowCount():
|
if 0 < slider.value() < self._table.rowCount():
|
||||||
slider.setValue(slider.value() - 1)
|
slider.setValue(slider.value() - 1)
|
||||||
|
|
||||||
def add(self):
|
def add(self):
|
||||||
if len(self.tableView.selectedIndexes()) == 0:
|
if len(self.tableView.selectedIndexes()) == 0:
|
||||||
self._tablemodel.add(self._tablemodel.rowCount())
|
self._table.add(self._table.rowCount())
|
||||||
else:
|
else:
|
||||||
row = self.index_selected_row()
|
row = self.index_selected_row()
|
||||||
self._tablemodel.add(row + 1)
|
self._table.add(row + 1)
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
rows = sorted(
|
rows = sorted(
|
||||||
|
|
@ -411,7 +410,7 @@ class GeometryWindow(PamhyrWindow):
|
||||||
)
|
)
|
||||||
|
|
||||||
if len(rows) > 0:
|
if len(rows) > 0:
|
||||||
self._tablemodel.delete(rows)
|
self._table.delete(rows)
|
||||||
|
|
||||||
self.update_plot_xy()
|
self.update_plot_xy()
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
|
|
@ -426,24 +425,24 @@ class GeometryWindow(PamhyrWindow):
|
||||||
.row()
|
.row()
|
||||||
|
|
||||||
def sort_ascending(self):
|
def sort_ascending(self):
|
||||||
self._tablemodel.sort_profiles(False)
|
self._table.sort_profiles(False)
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
self.changed_slider_value()
|
self.changed_slider_value()
|
||||||
|
|
||||||
def sort_descending(self):
|
def sort_descending(self):
|
||||||
self._tablemodel.sort_profiles(True)
|
self._table.sort_profiles(True)
|
||||||
|
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
self.changed_slider_value()
|
self.changed_slider_value()
|
||||||
|
|
||||||
def move_up(self):
|
def move_up(self):
|
||||||
row = self.index_selected_row()
|
row = self.index_selected_row()
|
||||||
self._tablemodel.move_up(row)
|
self._table.move_up(row)
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
|
|
||||||
def move_down(self):
|
def move_down(self):
|
||||||
row = self.index_selected_row()
|
row = self.index_selected_row()
|
||||||
self._tablemodel.move_down(row)
|
self._table.move_down(row)
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
|
|
||||||
def duplicate(self):
|
def duplicate(self):
|
||||||
|
|
@ -461,7 +460,7 @@ class GeometryWindow(PamhyrWindow):
|
||||||
if len(profiles) == 0:
|
if len(profiles) == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
self._tablemodel.duplicate(rows, profiles)
|
self._table.duplicate(rows, profiles)
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
|
|
||||||
def _copy(self):
|
def _copy(self):
|
||||||
|
|
@ -507,18 +506,18 @@ class GeometryWindow(PamhyrWindow):
|
||||||
row.append(self._study.river._status)
|
row.append(self._study.river._status)
|
||||||
|
|
||||||
row = self.index_selected_row()
|
row = self.index_selected_row()
|
||||||
# self._tablemodel.paste(row, header, data)
|
# self._table.paste(row, header, data)
|
||||||
self._tablemodel.paste(row, [], data)
|
self._table.paste(row, [], data)
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
|
|
||||||
def _undo(self):
|
def _undo(self):
|
||||||
self._tablemodel.undo()
|
self._table.undo()
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
self.update_plot_xy()
|
self.update_plot_xy()
|
||||||
self.update_plot_kpc()
|
self.update_plot_kpc()
|
||||||
|
|
||||||
def _redo(self):
|
def _redo(self):
|
||||||
self._tablemodel.redo()
|
self._table.redo()
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
self.update_plot_xy()
|
self.update_plot_xy()
|
||||||
self.update_plot_kpc()
|
self.update_plot_kpc()
|
||||||
|
|
@ -541,4 +540,4 @@ class GeometryWindow(PamhyrWindow):
|
||||||
current_dir = os.path.split(filename)[0] or DEFAULT_DIRECTORY
|
current_dir = os.path.split(filename)[0] or DEFAULT_DIRECTORY
|
||||||
|
|
||||||
if filename != '':
|
if filename != '':
|
||||||
self._tablemodel.export_reach(filename)
|
self._table.export_reach(filename)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue