Changeset 11179:f7ee1338a997 in orange


Ignore:
Timestamp:
11/09/12 14:49:58 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

More code cleanup.

Location:
Orange/OrangeCanvas/gui
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/gui/dock.py

    r11100 r11179  
    6868                                   QSizePolicy.Expanding) 
    6969 
    70         self.__stack.transitionStarted.connect(self._onTransitionStarted) 
    71         self.__stack.transitionFinished.connect(self._onTransitionFinished) 
     70        self.__stack.transitionStarted.connect(self.__onTransitionStarted) 
     71        self.__stack.transitionFinished.connect(self.__onTransitionFinished) 
    7272 
    7373        self.__stack.installEventFilter(self) 
     
    170170    def eventFilter(self, obj, event): 
    171171        if obj is self.__closeButton: 
    172             type = event.type() 
    173             if type == QEvent.MouseButtonPress: 
     172            etype = event.type() 
     173            if etype == QEvent.MouseButtonPress: 
    174174                self.setExpanded(not self.__expanded) 
    175175                return True 
    176             elif type == QEvent.MouseButtonDblClick or \ 
    177                     type == QEvent.MouseButtonRelease: 
     176            elif etype == QEvent.MouseButtonDblClick or \ 
     177                    etype == QEvent.MouseButtonRelease: 
    178178                return True 
    179179            # TODO: which other events can trigger the button (is the button 
     
    181181 
    182182        if obj is self.__stack: 
    183             type = event.type() 
    184             if type == QEvent.Resize: 
     183            etype = event.type() 
     184            if etype == QEvent.Resize: 
    185185                # If the stack resizes 
    186186                obj.resizeEvent(event) 
     
    206206        self.__fixIcon() 
    207207 
    208     def _onTransitionStarted(self): 
     208    def __onTransitionStarted(self): 
    209209        self.__stack.installEventFilter(self) 
    210210 
    211     def _onTransitionFinished(self): 
     211    def __onTransitionFinished(self): 
    212212        self.__stack.removeEventFilter(self) 
    213213        size = self.__stack.sizeHint() 
  • Orange/OrangeCanvas/gui/tests/test_dock.py

    r11100 r11179  
    3636 
    3737        def toogle(): 
    38 #            print dock.width(), dock.minimumWidth(), dock.sizeHint() 
    3938            dock.setExpanded(not dock.expanded()) 
    4039            self.singleShot(2000, toogle) 
     
    6059 
    6160        def toogle(): 
    62 #            print dock.width(), dock.minimumWidth(), dock.sizeHint() 
    6361            dock.setExpanded(not dock.expanded()) 
    6462            self.singleShot(2000, toogle) 
  • Orange/OrangeCanvas/gui/tests/test_toolbar.py

    r11100 r11179  
    1717    def test_dynamic_toolbar(self): 
    1818        logging.basicConfig(level=logging.DEBUG) 
    19         self.app.setStyleSheet("QToolButton { border: 1px solid red; }") 
    2019 
    2120        w = toolbar.DynamicResizeToolBar(None) 
     21        w.setStyleSheet("QToolButton { border: 1px solid red; }") 
    2222 
    2323        w.addAction(QAction("1", w)) 
    2424        w.addAction(QAction("2", w)) 
    25         w.addAction(QAction("A long", w)) 
     25        w.addAction(QAction("A long name", w)) 
    2626        actions = list(w.actions()) 
     27 
     28        self.assertSequenceEqual([str(action.text()) for action in actions], 
     29                                 ["1", "2", "A long name"]) 
    2730 
    2831        w.resize(100, 30) 
     
    3235 
    3336        w.removeAction(actions[1]) 
    34         w.insertAction(actions[0], actions[1]) 
     37        w.insertAction(actions[2], actions[1]) 
    3538 
    36         self.assertSetEqual(set(actions), set(w.actions())) 
     39        self.assertSequenceEqual(actions, list(w.actions()), 
     40                                 msg="insertAction does not preserve " 
     41                                     "action order") 
    3742 
    3843        self.singleShot(2000, lambda: w.setOrientation(Qt.Vertical)) 
  • Orange/OrangeCanvas/gui/toolbar.py

    r11137 r11179  
    77import logging 
    88 
    9 from collections import namedtuple 
     9from PyQt4.QtGui import QToolBar 
    1010 
    11 from PyQt4.QtGui import ( 
    12     QWidget, QToolBar, QToolButton, QAction, QBoxLayout, QStyle, QStylePainter, 
    13     QStyleOptionToolBar, QSizePolicy 
    14 ) 
    15  
    16 from PyQt4.QtCore import Qt, QSize, QPoint, QEvent, QSignalMapper 
    17  
    18 from PyQt4.QtCore import pyqtSignal as Signal, \ 
    19                          pyqtProperty as Property 
     11from PyQt4.QtCore import Qt, QSize, QEvent 
    2012 
    2113log = logging.getLogger(__name__) 
     
    2315 
    2416class DynamicResizeToolBar(QToolBar): 
    25     """A QToolBar subclass that dynamically resizes its toolbuttons 
     17    """A QToolBar subclass that dynamically resizes its tool buttons 
    2618    to fit available space (this is done by setting fixed size on the 
    2719    button instances). 
     
    3325    def __init__(self, parent=None, *args, **kwargs): 
    3426        QToolBar.__init__(self, *args, **kwargs) 
    35  
    36 #        if self.orientation() == Qt.Horizontal: 
    37 #            self.setSizePolicy(QSizePolicy.Fixed, 
    38 #                               QSizePolicy.MinimumExpanding) 
    39 #        else: 
    40 #            self.setSizePolicy(QSizePolicy.MinimumExpanding, 
    41 #                               QSizePolicy.Fixed) 
    4227 
    4328    def resizeEvent(self, event): 
     
    120105        item_size = base_size + (1 if i < remainder else 0) 
    121106        setter(item, item_size) 
    122  
    123  
    124 ######## 
    125 # Unused 
    126 ######## 
    127  
    128 _ToolBarSlot = namedtuple( 
    129     "_ToolBarAction", 
    130     ["index", 
    131      "action", 
    132      "button", 
    133      ] 
    134 ) 
    135  
    136  
    137 class ToolBarButton(QToolButton): 
    138     def __init__(self, *args, **kwargs): 
    139         QToolButton.__init__(self, *args, **kwargs) 
    140  
    141  
    142 class ToolBar(QWidget): 
    143  
    144     actionTriggered = Signal() 
    145     actionHovered = Signal() 
    146  
    147     def __init__(self, parent=None, toolButtonStyle=Qt.ToolButtonFollowStyle, 
    148                  orientation=Qt.Horizontal, iconSize=None, **kwargs): 
    149         QWidget.__init__(self, parent, **kwargs) 
    150  
    151         self.__actions = [] 
    152         self.__toolButtonStyle = toolButtonStyle 
    153         self.__orientation = orientation 
    154  
    155         if iconSize is not None: 
    156             pm = self.style().pixelMetric(QStyle.PM_ToolBarIconSize) 
    157             iconSize = QSize(pm, pm) 
    158  
    159         self.__iconSize = iconSize 
    160  
    161         if orientation == Qt.Horizontal: 
    162             layout = QBoxLayout(QBoxLayout.LeftToRight) 
    163         else: 
    164             layout = QBoxLayout(QBoxLayout.TopToBottom) 
    165  
    166         layout.setContentsMargins(0, 0, 0, 0) 
    167         layout.setSpacing(0) 
    168         self.setLayout(layout) 
    169  
    170         self.__signalMapper = QSignalMapper() 
    171  
    172     def setToolButtonStyle(self, style): 
    173         if self.__toolButtonStyle != style: 
    174             for slot in self.__actions: 
    175                 slot.button.setToolButtonStyle(style) 
    176             self.__toolButtonStyle = style 
    177  
    178     def toolButtonStyle(self): 
    179         return self.__toolButtonStyle 
    180  
    181     toolButtonStyle_ = Property(int, fget=toolButtonStyle, 
    182                                 fset=setToolButtonStyle) 
    183  
    184     def setOrientation(self, orientation): 
    185         if self.__orientation != orientation: 
    186             if orientation == Qt.Horizontal: 
    187                 self.layout().setDirection(QBoxLayout.LeftToRight) 
    188             else: 
    189                 self.layout().setDirection(QBoxLayout.TopToBottom) 
    190             sp = self.sizePolicy() 
    191             sp.transpose() 
    192             self.setSizePolicy(sp) 
    193             self.__orientation = orientation 
    194  
    195     def orientation(self): 
    196         return self.__orientation 
    197  
    198     orientation_ = Property(int, fget=orientation, fset=setOrientation) 
    199  
    200     def setIconSize(self, size): 
    201         if self.__iconSize != size: 
    202             for slot in self.__actions: 
    203                 slot.button.setIconSize(size) 
    204             self.__iconSize = size 
    205  
    206     def iconSize(self): 
    207         return self.__iconSize 
    208  
    209     iconSize_ = Property(QSize, fget=iconSize, fset=setIconSize) 
    210  
    211     def actionEvent(self, event): 
    212         action = event.action() 
    213         if event.type() == QEvent.ActionAdded: 
    214             if event.before() is not None: 
    215                 index = self._indexForAction(event.before()) + 1 
    216             else: 
    217                 index = self.count() 
    218  
    219             already_added = True 
    220             try: 
    221                 self._indexForAction(action) 
    222             except IndexError: 
    223                 already_added = False 
    224  
    225             if already_added: 
    226                 log.error("Action ('%s') already inserted", action.text()) 
    227                 return 
    228  
    229             self.__insertAction(index, action) 
    230  
    231         elif event.type() == QEvent.ActionRemoved: 
    232             try: 
    233                 index = self._indexForAction(event.action()) 
    234             except IndexError: 
    235                 log.error("Action ('%s') is not in the toolbar", action.text()) 
    236                 return 
    237  
    238             self.__removeAction(index) 
    239  
    240         elif event.type() == QEvent.ActionChanged: 
    241             pass 
    242  
    243         return QWidget.actionEvent(self, event) 
    244  
    245     def count(self): 
    246         return len(self.__actions) 
    247  
    248     def actionAt(self, point): 
    249         widget = self.childAt(QPoint) 
    250         if isinstance(widget, QToolButton): 
    251             return widget.defaultAction() 
    252  
    253     def _indexForAction(self, action): 
    254         for i, slot in enumerate(self.__actions): 
    255             if slot.action is action: 
    256                 return i 
    257         raise IndexError("Action not in the toolbar") 
    258  
    259     def __insertAction(self, index, action): 
    260         """Insert action into index. 
    261         """ 
    262         log.debug("Inserting action '%s' at %i.", action.text(), index) 
    263         button = ToolBarButton(self) 
    264         button.setDefaultAction(action) 
    265         button.setToolButtonStyle(self.toolButtonStyle_) 
    266         button.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) 
    267         button.triggered[QAction].connect(self.actionTriggered) 
    268         self.__signalMapper.setMapping(button, action) 
    269         slot = _ToolBarSlot(index, action, button) 
    270         self.__actions.insert(index, slot) 
    271  
    272         for i in range(index + 1, len(self.__actions)): 
    273             self.__actions[i] = self.__actions[i]._replace(index=i) 
    274  
    275         self.layout().insertWidget(index, button, stretch=1) 
    276  
    277     def __removeAction(self, index): 
    278         """Remove action at index. 
    279         """ 
    280         slot = self.__actions.pop(index) 
    281         log.debug("Removing action '%s'.", slot.action.text()) 
    282         for i in range(index, len(self.__actions)): 
    283             self.__actions[i] = self.__actions[i]._replace(index=i) 
    284         self.layout().takeAt(index) 
    285         slot.button.hide() 
    286         slot.button.setParent(None) 
    287         slot.button.deleteLater() 
    288  
    289     def paintEvent(self, event): 
    290         try: 
    291             painter = QStylePainter(self) 
    292             opt = QStyleOptionToolBar() 
    293             opt.initFrom(self) 
    294  
    295             opt.features = QStyleOptionToolBar.None 
    296             opt.positionOfLine = QStyleOptionToolBar.OnlyOne 
    297             opt.positionWithinLine = QStyleOptionToolBar.OnlyOne 
    298  
    299             painter.drawControl(QStyle.CE_ToolBar, opt) 
    300             print self.style() 
    301         except Exception: 
    302             log.critical("Error", exc_info=1) 
    303         painter.end() 
Note: See TracChangeset for help on using the changeset viewer.