@@ -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
369429class ContinuousVariableEditor (VariableEditor ):
370430 # TODO: enable editing of number_of_decimals, scientific format ...
0 commit comments