Changeset 11845:eea51f046b13 in orange


Ignore:
Timestamp:
01/24/14 10:58:02 (3 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added keyboard shortcuts for moving the attributes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Data/OWDataDomain.py

    r11791 r11845  
    443443        self.original_completer_items = [] 
    444444 
     445        # Actions for keyboard shortcuts 
     446        self.remove_action = QAction( 
     447            "Remove from domain", self, 
     448            shortcut=QKeySequence.Delete, 
     449            shortcutContext=Qt.WidgetShortcut, 
     450            triggered=self.remove_selected 
     451        ) 
     452 
     453        self.add_to_attributes_action = QAction( 
     454            "Add to attributes", self, 
     455            shortcut=QKeySequence(Qt.AltModifier | Qt.Key_A), 
     456            shortcutContext=Qt.WidgetShortcut, 
     457            triggered=self.add_to_attributes 
     458        ) 
     459 
     460        self.add_to_class_action = QAction( 
     461            "Add to class", self, 
     462            shortcut=QKeySequence(Qt.AltModifier | Qt.Key_C), 
     463            shortcutContext=Qt.WidgetShortcut, 
     464            triggered=self.add_to_class, 
     465        ) 
     466        self.add_to_meta_action = QAction( 
     467            "Add to meta", self, 
     468            shortcut=QKeySequence(Qt.AltModifier | Qt.Key_M), 
     469            shortcutContext=Qt.WidgetShortcut, 
     470            triggered=self.add_to_meta 
     471        ) 
     472 
     473        for view in [self.used_attrs_view, self.class_attrs_view, 
     474                     self.meta_attrs_view]: 
     475            view.addAction(self.remove_action) 
     476 
     477        self.available_attrs_view.addActions( 
     478            [self.add_to_attributes_action, 
     479             self.add_to_class_action, 
     480             self.add_to_meta_action] 
     481        ) 
     482 
    445483        self.resize(500, 600) 
    446484         
     
    562600             
    563601        dst_model.extend(attrs) 
    564          
     602 
     603    def remove_selected(self): 
     604        """ 
     605        Remove the selected features from the right (focused) view 
     606        (output domain) and place them in the "Available attributes". 
     607        """ 
     608        views = [self.used_attrs_view, self.class_attrs_view, 
     609                 self.meta_attrs_view] 
     610        focused = find( 
     611            lambda v: v.hasFocus(), views 
     612        ) 
     613        if focused: 
     614            self.move_selected_from_to( 
     615                focused.val, self.available_attrs_view 
     616            ) 
     617 
     618    def add_to_attributes(self): 
     619        """ 
     620        Add (move) selected available features to output `attributes`. 
     621        """ 
     622        if self.selected_rows(self.available_attrs_view): 
     623            self.move_selected_from_to( 
     624                self.available_attrs_view, self.used_attrs_view 
     625            ) 
     626 
     627    def add_to_class(self): 
     628        """ 
     629        Add (move) selected available feature to output `class_var` 
     630        """ 
     631        if self.selected_rows(self.available_attrs_view): 
     632            self.move_selected_from_to( 
     633                self.available_attrs_view, 
     634                self.class_attrs_view, 
     635                exclusive=True 
     636            ) 
     637 
     638    def add_to_meta(self): 
     639        """ 
     640        Add (move) selected available feature to output's `metas`. 
     641        """ 
     642        if self.selected_rows(self.available_attrs_view): 
     643            self.move_selected_from_to( 
     644                self.available_attrs_view, self.meta_attrs_view 
     645            ) 
     646 
    565647    def update_interface_state(self, focus=None, selected=None, deselected=None): 
    566648        for view in [self.available_attrs_view, self.used_attrs_view, 
     
    664746                removed = set(all_vars).difference(set(used_vars)) 
    665747                self.reportSettings("", [("Removed", "%i (%s)" % (len(removed), ", ".join(x.name for x in removed)))]) 
    666      
     748 
     749 
     750from collections import namedtuple 
     751Some = namedtuple("Some", ["val"]) 
     752 
     753 
     754def find(predicate, iterable): 
     755    for el in iterable: 
     756        if predicate(el): 
     757            return Some(el) 
     758    return None 
     759 
     760 
    667761if __name__ == "__main__":     
    668762    app = QApplication(sys.argv) 
Note: See TracChangeset for help on using the changeset viewer.