Changeset 11201:04262f6c3392 in orange


Ignore:
Timestamp:
11/23/12 18:56:18 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added annotation action menus for font size and arrow color.

Location:
Orange/OrangeCanvas
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/application/canvasmain.py

    r11197 r11201  
    1414    QMainWindow, QWidget, QAction, QActionGroup, QMenu, QMenuBar, QDialog, 
    1515    QFileDialog, QMessageBox, QVBoxLayout, QSizePolicy, QColor, QKeySequence, 
    16     QIcon, QToolBar, QDockWidget, QDesktopServices, QUndoGroup, QApplication 
     16    QIcon, QToolBar, QToolButton, QDockWidget, QDesktopServices, QUndoGroup, 
     17    QApplication 
    1718) 
    1819 
     
    334335 
    335336        for action in dock_actions: 
     337            self.canvas_toolbar.addAction(action) 
     338            button = self.canvas_toolbar.widgetForAction(action) 
     339            button.setPopupMode(QToolButton.DelayedPopup) 
     340 
    336341            actions_toolbar.addAction(action) 
    337             self.canvas_toolbar.addAction(action) 
    338342            button = actions_toolbar.widgetForAction(action) 
    339343            button.setFixedSize(38, 30) 
     344            button.setPopupMode(QToolButton.DelayedPopup) 
    340345 
    341346        dock2.layout().addWidget(self.quick_category) 
  • Orange/OrangeCanvas/document/interactions.py

    r11199 r11201  
    659659        self.arrow_item = None 
    660660        self.annotation = None 
     661        self.color = "red" 
    661662 
    662663    def start(self): 
    663664        self.document.view().setCursor(Qt.CrossCursor) 
    664665        UserInteraction.start(self) 
     666 
     667    def setColor(self, color): 
     668        self.color = color 
    665669 
    666670    def mousePressEvent(self, event): 
     
    680684                    point_to_tuple(event.scenePos()) 
    681685                ) 
     686                annot.set_color(self.color) 
    682687                item = self.scene.add_annotation(annot) 
     688 
    683689                self.arrow_item = item 
    684690                self.annotation = annot 
     
    730736        self.annotation = None 
    731737        self.control = None 
     738        self.font = document.font() 
     739 
     740    def setFont(self, font): 
     741        self.font = font 
    732742 
    733743    def start(self): 
     
    739749        """ 
    740750        annot = scheme.SchemeTextAnnotation(rect_to_tuple(rect)) 
     751        annot.set_font(self.font.toString()) 
    741752 
    742753        item = self.scene.add_annotation(annot) 
  • Orange/OrangeCanvas/document/schemeedit.py

    r11198 r11201  
    77 
    88from PyQt4.QtGui import ( 
    9     QWidget, QVBoxLayout, QInputDialog, QMenu, QAction, QKeySequence, 
    10     QUndoStack, QGraphicsItem, QGraphicsObject, QPainter, QCursor, 
    11     QGraphicsTextItem 
     9    QWidget, QVBoxLayout, QInputDialog, QMenu, QAction, QActionGroup, 
     10    QKeySequence, QUndoStack, QGraphicsItem, QGraphicsObject, 
     11    QGraphicsTextItem, QCursor, QFont, QPainter, QPixmap, QColor, 
     12    QIcon 
    1213) 
    1314 
     
    133134                    ) 
    134135 
     136        # Create a font size menu for the new annotation action. 
     137        self.__fontMenu = QMenu("Font Size", self) 
     138        self.__fontActionGroup = group = \ 
     139            QActionGroup(self, exclusive=True, 
     140                         triggered=self.__onFontSizeTriggered) 
     141 
     142        def font(size): 
     143            return QFont("Helvetica", size) 
     144 
     145        for size in [12, 14, 16, 18, 20, 22, 24]: 
     146            action = QAction("%ip" % size, group, 
     147                             checkable=True, 
     148                             font=font(size)) 
     149 
     150            self.__fontMenu.addAction(action) 
     151 
     152        group.actions()[2].setChecked(True) 
     153 
     154        self.__newTextAnnotationAction.setMenu(self.__fontMenu) 
     155 
    135156        self.__newArrowAnnotationAction = \ 
    136157            QAction(self.tr("Arrow"), self, 
     
    140161                    toggled=self.__toggleNewArrowAnnotation, 
    141162                    ) 
     163 
     164        # Create a color menu for the arrow annotation action 
     165        self.__arrowColorMenu = QMenu("Arrow Color",) 
     166        self.__arrowColorActionGroup = group = \ 
     167            QActionGroup(self, exclusive=True, 
     168                         triggered=self.__onArrowColorTriggered) 
     169 
     170        def color_icon(color): 
     171            icon = QIcon() 
     172            for size in [16, 24, 32]: 
     173                pixmap = QPixmap(size, size) 
     174                pixmap.fill(QColor(0, 0, 0, 0)) 
     175                p = QPainter(pixmap) 
     176                p.setRenderHint(QPainter.Antialiasing) 
     177                p.setBrush(color) 
     178                p.setPen(Qt.NoPen) 
     179                p.drawEllipse(1, 1, size - 2, size - 2) 
     180                p.end() 
     181                icon.addPixmap(pixmap) 
     182            return icon 
     183 
     184        for color in ["#000", "#C1272D", "#662D91", "#1F9CDF", "#39B54A"]: 
     185            icon = color_icon(QColor(color)) 
     186            action = QAction(group, icon=icon, checkable=True, 
     187                             iconVisibleInMenu=True) 
     188            action.setData(color) 
     189            self.__arrowColorMenu.addAction(action) 
     190 
     191        group.actions()[1].setChecked(True) 
     192 
     193        self.__newArrowAnnotationAction.setMenu(self.__arrowColorMenu) 
    142194 
    143195        self.__linkEnableAction = \ 
     
    400452        else: 
    401453            view.resetTransform() 
    402  
    403     def newArrowAnnotation(self): 
    404         handler = interactions.NewArrowAnnotation(self) 
    405         self.__scene.set_user_interaction_handler(handler) 
    406  
    407     def newTextAnnotation(self): 
    408         handler = interactions.NewTextAnnotation(self) 
    409         self.__scene.set_user_interaction_handler(handler) 
    410454 
    411455    def alignToGrid(self): 
     
    798842        else: 
    799843            handler = interactions.NewArrowAnnotation(self) 
     844            checked = self.__arrowColorActionGroup.checkedAction() 
     845            handler.setColor(checked.data().toPyObject()) 
     846 
    800847            handler.ended.connect(action.toggle) 
    801848 
    802849            self.__scene.set_user_interaction_handler(handler) 
     850 
     851    def __onFontSizeTriggered(self, action): 
     852        if not self.__newTextAnnotationAction.isChecked(): 
     853            # Trigger the action 
     854            self.__newTextAnnotationAction.trigger() 
     855        else: 
     856            # just update the preferred font on the interaction handler 
     857            handler = self.__scene.user_interaction_handler 
     858            if isinstance(handler, interactions.NewTextAnnotation): 
     859                handler.setFont(action.font()) 
    803860 
    804861    def __toggleNewTextAnnotation(self, checked): 
     
    818875        else: 
    819876            handler = interactions.NewTextAnnotation(self) 
     877            checked = self.__fontActionGroup.checkedAction() 
     878            handler.setFont(checked.font()) 
     879 
    820880            handler.ended.connect(action.toggle) 
    821881 
    822882            self.__scene.set_user_interaction_handler(handler) 
     883 
     884    def __onArrowColorTriggered(self, action): 
     885        if not self.__newArrowAnnotationAction.isChecked(): 
     886            # Trigger the action 
     887            self.__newArrowAnnotationAction.trigger() 
     888        else: 
     889            # just update the preferred color on the interaction handler 
     890            handler = self.__scene.user_interaction_handler 
     891            if isinstance(handler, interactions.NewArrowAnnotation): 
     892                handler.setColor(action.data().toPyObject()) 
    823893 
    824894    def __onCustomContextMenuRequested(self, pos): 
  • Orange/OrangeCanvas/styles/orange.qss

    r11178 r11201  
    149149        stop: 0 #808080, stop: 1.0 #666 
    150150    ); 
     151} 
     152 
     153CanvasToolDock QToolBar QToolButton:menu-indicator { 
     154     image: url(canvas_icons:/Dropdown.svg); 
     155     subcontrol-position: top right; 
     156     height: 8px; 
     157     width: 8px; 
    151158} 
    152159 
  • Orange/OrangeCanvas/styles/orange/Dropdown.svg

    r11096 r11201  
    44<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
    55     width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"> 
    6 <polygon points="6,10.021 24.007,37.979 42,10.021 "/> 
     6<polygon fill="white" points="6,10.021 24.007,37.979 42,10.021 "/> 
    77</svg> 
Note: See TracChangeset for help on using the changeset viewer.