geometry: Fix move profile up/down.

mesh
Pierre-Antoine Rouby 2023-04-20 15:06:01 +02:00
parent 59c4463bf7
commit bef640168e
4 changed files with 63 additions and 60 deletions

View File

@ -111,6 +111,19 @@ class Reach:
self._profiles.pop(index) self._profiles.pop(index)
self._update_profile_numbers() self._update_profile_numbers()
def move_up_profile(self, index: int):
if index < len(self.profiles):
next = index - 1
p = self._profiles
p[index], p[next] = p[next], p[index]
def move_down_profile(self, index: int):
if index >= 0:
prev = index + 1
p = self._profiles
p[index], p[prev] = p[prev], p[index]
def get_x(self): def get_x(self):
return [profile.x() for profile in self.profiles] return [profile.x() for profile in self.profiles]

View File

@ -396,69 +396,21 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.select_current_profile() self.select_current_profile()
self.changed_slider_value() self.changed_slider_value()
self.update_plot_kpc()
self.update_plot_ac(self.index_selected_row())
def sort_descending(self): def sort_descending(self):
self._tablemodel.sort_profiles(False) self._tablemodel.sort_profiles(False)
self.select_current_profile() self.select_current_profile()
self.changed_slider_value() self.changed_slider_value()
self.update_plot_kpc()
self.update_plot_ac(self.index_selected_row())
def move_row_down(self): def move_row_down(self):
row = self.index_selected_row() row = self.index_selected_row()
self._tablemodel.move_row_down(row)
if row < self._tablemodel.rowCount() - 1: self.select_current_profile()
self._tablemodel.moveRowDown(row)
self.update_plot_ac(row + 1)
self.ui.canvas_3.axes.relim()
self.ui.canvas_3.axes.autoscale_view()
if row < self._tablemodel.rowCount() - 2:
self.select_before_plot_selected_1(row)
self.select_after_plot_selected_1(row + 2)
self.select_before_plot_selected_2(row)
self.select_after_plot_selected_2(row + 2)
if row == self._tablemodel.rowCount() - 2:
self.select_before_plot_selected_1(self._tablemodel.rowCount() - 2)
self.after_plot_selected_1.set_visible(False)
self.select_before_plot_selected_2(self._tablemodel.rowCount() - 2)
self.after_plot_selected_2.set_visible(False)
self.update_plot_kpc()
def move_row_up(self): def move_row_up(self):
row = self.index_selected_row() row = self.index_selected_row()
self._tablemodel.move_row_up(row)
if 0 < row <= self._tablemodel.rowCount() - 1: self.select_current_profile()
self._tablemodel.moveRowUp(row)
if row == 1:
self.select_after_plot_selected_1(row)
self.before_plot_selected_1.set_visible(False)
self.select_after_plot_selected_2(row)
self.before_plot_selected_2.set_visible(False)
elif row == self._tablemodel.rowCount() - 1:
self.select_before_plot_selected_1(row - 2)
self.select_after_plot_selected_1(row)
self.select_before_plot_selected_2(row - 2)
self.select_after_plot_selected_2(row)
else:
self.select_before_plot_selected_1(row - 2)
self.select_after_plot_selected_1(row)
self.select_before_plot_selected_2(row - 2)
self.select_after_plot_selected_2(row)
self.update_plot_kpc()
self.update_plot_ac(row - 1)
self.ui.canvas_3.axes.relim()
self.ui.canvas_3.axes.autoscale_view()
def handleSave(self): def handleSave(self):
options = QFileDialog.Options() options = QFileDialog.Options()

View File

@ -83,3 +83,24 @@ class SortCommand(QUndoCommand):
def redo(self): def redo(self):
self._reach.sort(self._reverse) self._reach.sort(self._reverse)
class MoveCommand(QUndoCommand):
def __init__(self, reach, up, i):
QUndoCommand.__init__(self)
self._reach = reach
self._up = up == "up"
self._i = i
def undo(self):
if self._up:
self._reach.move_up_profile(self._i)
else:
self._reach.move_down_profile(self._i)
def redo(self):
if self._up:
self._reach.move_up_profile(self._i)
else:
self._reach.move_down_profile(self._i)

View File

@ -174,20 +174,37 @@ class PandasModelEditable(QAbstractTableModel):
self.layoutAboutToBeChanged.emit() self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit() self.layoutChanged.emit()
def moveRowDown(self, row_to_move, parent=QModelIndex()):
target = row_to_move + 2
self.beginMoveRows(parent, row_to_move, row_to_move, parent, target)
self._reach.move_down_profile(row_to_move) def move_row_up(self, row, parent=QModelIndex()):
target = row + 2
if row <= 0:
return
self.beginMoveRows(parent, row - 1, row - 1, parent, target)
self._undo_stack.push(
MoveCommand(
self._reach, "up", row
)
)
self.endMoveRows() self.endMoveRows()
self.layoutChanged.emit() self.layoutChanged.emit()
def moveRowUp(self, row_to_move, parent=QModelIndex()): def move_row_down(self, row, parent=QModelIndex()):
target = row_to_move + 1 target = row
self.beginMoveRows(parent, row_to_move - 1, row_to_move - 1, parent, target)
self._reach.move_up_profile(row_to_move) if row > self._reach.number_profiles:
return
self.beginMoveRows(parent, row + 1, row + 1, parent, target)
self._undo_stack.push(
MoveCommand(
self._reach, "down", row
)
)
self.endMoveRows() self.endMoveRows()
self.layoutChanged.emit() self.layoutChanged.emit()