Skip to content

Commit 1f6e439

Browse files
authored
Merge pull request #3119 from rokgomiscek/EditDomainMoveVariable
[ENH] OWEditDomain: Enable reordering of discrete variables
2 parents 0f84885 + c1e0357 commit 1f6e439

File tree

1 file changed

+61
-1
lines changed

1 file changed

+61
-1
lines changed

Orange/widgets/data/oweditdomain.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,14 +317,55 @@ def setup_gui(self):
317317
self._setup_gui_labels()
318318

319319
def _setup_gui_values(self):
320+
vlayout = QVBoxLayout()
321+
vlayout.setContentsMargins(0, 0, 0, 0)
322+
vlayout.setSpacing(1)
323+
320324
self.values_edit = QListView()
321325
self.values_edit.setEditTriggers(QTreeView.CurrentChanged)
322326
self.values_model = itemmodels.PyListModel(flags=Qt.ItemIsSelectable | \
323327
Qt.ItemIsEnabled | Qt.ItemIsEditable)
324328
self.values_edit.setModel(self.values_model)
325329

330+
self.values_edit.selectionModel().selectionChanged.connect(
331+
self.on_value_selection_changed)
332+
326333
self.values_model.dataChanged.connect(self.on_values_changed)
327-
self.main_form.addRow("Values:", self.values_edit)
334+
335+
vlayout.addWidget(self.values_edit)
336+
hlayout = QHBoxLayout()
337+
hlayout.setContentsMargins(0, 0, 0, 0)
338+
hlayout.setSpacing(1)
339+
self.move_value_up = QAction(
340+
unicodedata.lookup("UPWARDS ARROW"), self,
341+
toolTip="Move up.",
342+
triggered=self.move_up,
343+
enabled=False,
344+
shortcut=QKeySequence(QKeySequence.New))
345+
346+
self.move_value_down = QAction(
347+
unicodedata.lookup("DOWNWARDS ARROW"), self,
348+
toolTip="Move down.",
349+
triggered=self.move_down,
350+
enabled=False,
351+
shortcut=QKeySequence(QKeySequence.Delete))
352+
353+
button_size = gui.toolButtonSizeHint()
354+
button_size = QSize(button_size, button_size)
355+
356+
button = QToolButton(self)
357+
button.setFixedSize(button_size)
358+
button.setDefaultAction(self.move_value_up)
359+
hlayout.addWidget(button)
360+
361+
button = QToolButton(self)
362+
button.setFixedSize(button_size)
363+
button.setDefaultAction(self.move_value_down)
364+
hlayout.addWidget(button)
365+
hlayout.addStretch(10)
366+
vlayout.addLayout(hlayout)
367+
368+
self.main_form.addRow("Values:", vlayout)
328369

329370
def set_data(self, var):
330371
"""Set the variable to edit
@@ -361,10 +402,29 @@ def clear(self):
361402
VariableEditor.clear(self)
362403
self.values_model.clear()
363404

405+
def move_rows(self, rows, offset):
406+
i = rows[0].row()
407+
self.values_model[i], self.values_model[i+offset] = \
408+
self.values_model[i+offset], self.values_model[i]
409+
self.maybe_commit()
410+
411+
def move_up(self):
412+
rows = self.values_edit.selectionModel().selectedRows()
413+
self.move_rows(rows, -1)
414+
415+
def move_down(self):
416+
rows = self.values_edit.selectionModel().selectedRows()
417+
self.move_rows(rows, 1)
418+
364419
@Slot()
365420
def on_values_changed(self):
366421
self.maybe_commit()
367422

423+
@Slot()
424+
def on_value_selection_changed(self):
425+
i = self.values_edit.selectionModel().selectedRows()[0].row()
426+
self.move_value_up.setEnabled(i)
427+
self.move_value_down.setEnabled(i != len(self.var.values)-1)
368428

369429
class ContinuousVariableEditor(VariableEditor):
370430
# TODO: enable editing of number_of_decimals, scientific format ...

0 commit comments

Comments
 (0)