Skip to content

Commit bac1f70

Browse files
Delete with keyboard (#87)
1 parent 41c756d commit bac1f70

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

src/petab_gui/controllers/mother_controller.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,15 @@ def setup_actions(self):
391391
actions["redo"].triggered.connect(self.undo_stack.redo)
392392
actions["redo"].setEnabled(self.undo_stack.canRedo())
393393
self.undo_stack.canRedoChanged.connect(actions["redo"].setEnabled)
394+
# Clear cells
395+
actions["clear_cells"] = QAction(
396+
qta.icon("mdi6.delete"),
397+
"&Clear Cells", self.view
398+
)
399+
actions["clear_cells"].setShortcuts(
400+
[QKeySequence.Delete, QKeySequence.Backspace]
401+
)
402+
actions["clear_cells"].triggered.connect(self.clear_cells)
394403
return actions
395404

396405
def sync_visibility_with_actions(self):
@@ -768,6 +777,11 @@ def delete_column(self):
768777
if controller:
769778
controller.delete_column()
770779

780+
def clear_cells(self):
781+
controller = self.active_controller()
782+
if controller:
783+
controller.clear_cells()
784+
771785
def filter_table(self):
772786
"""Filter the currently activated tables"""
773787
filter_text = self.filter_input.text()

src/petab_gui/controllers/table_controllers.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
ColumnSuggestionDelegate, ComboBoxDelegate, ParameterIdSuggestionDelegate
1414
from ..utils import get_selected, process_file, ConditionInputDialog
1515
from .utils import prompt_overwrite_or_append, linter_wrapper
16-
from ..C import COLUMN
16+
from ..C import COLUMN, INDEX
1717
import re
1818

1919

@@ -286,6 +286,11 @@ def add_column(self, column_name: str = None):
286286
return
287287
self.model.insertColumn(column_name)
288288

289+
def clear_cells(self):
290+
"""Clear all selected cells"""
291+
selected = get_selected(self.view.table_view, mode=INDEX)
292+
self.model.clear_cells(selected)
293+
289294
def set_index_on_new_row(self, index: QModelIndex):
290295
"""Set the index of the model when a new row is added."""
291296
proxy_index = self.proxy_model.mapFromSource(index)

src/petab_gui/models/pandas_table_model.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ def insertColumn(self, column_name: str):
148148

149149
return True
150150

151-
def setData(self, index, value, role=Qt.EditRole):
151+
def setData(
152+
self, index, value, role=Qt.EditRole, check_multi: bool = True
153+
):
152154
if not (index.isValid() and role == Qt.EditRole):
153155
return False
154156

@@ -157,8 +159,10 @@ def setData(self, index, value, role=Qt.EditRole):
157159

158160
if is_invalid(value) or value == "":
159161
value = None
160-
# check whether multiple rows but only one column is selected
161-
multi_row_change, selected = self.check_selection()
162+
multi_row_change = False
163+
if check_multi:
164+
# check whether multiple rows but only one column is selected
165+
multi_row_change, selected = self.check_selection()
162166
if not multi_row_change:
163167
self.undo_stack.beginMacro("Set data")
164168
success = self._set_data_single(index, value)
@@ -250,6 +254,14 @@ def _push_change_and_notify(
250254
[Qt.DisplayRole])
251255
self.something_changed.emit(True)
252256

257+
def clear_cells(self, selected):
258+
"""Clear the selected cells."""
259+
self.undo_stack.beginMacro("Clear cells")
260+
for index in selected:
261+
if index.isValid():
262+
self.setData(index, None, Qt.EditRole, False)
263+
self.undo_stack.endMacro()
264+
253265
def handle_named_index(self, index, value):
254266
"""Handle the named index column."""
255267
pass

0 commit comments

Comments
 (0)