Ignore:
Timestamp:
01/24/13 13:17:39 (15 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Show placeholder text in annotations when no text is entered.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/canvas/items/annotationitem.py

    r11255 r11273  
    1313 
    1414from PyQt4.QtCore import pyqtSignal as Signal 
     15from PyQt4.QtCore import pyqtProperty as Property 
    1516 
    1617log = logging.getLogger(__name__) 
     
    3334 
    3435 
     36class GraphicsTextEdit(QGraphicsTextItem): 
     37    """ 
     38    QGraphicsTextItem subclass defining an additional placeholderText 
     39    property (text displayed when no text is set). 
     40 
     41    """ 
     42    def __init__(self, *args, **kwargs): 
     43        QGraphicsTextItem.__init__(self, *args, **kwargs) 
     44 
     45        self.__placeholderText = "" 
     46 
     47    def setPlaceholderText(self, text): 
     48        """ 
     49        Set the placeholder text. This is shown when the item has no text, 
     50        i.e when `toPlainText()` returns an empty string. 
     51 
     52        """ 
     53        if self.__placeholderText != text: 
     54            self.__placeholderText = text 
     55            if not self.toPlainText(): 
     56                self.update() 
     57 
     58    def placeholderText(self): 
     59        """ 
     60        Return the placeholder text. 
     61        """ 
     62        return unicode(self.__placeholderText) 
     63 
     64    placeholderText_ = Property(unicode, placeholderText, setPlaceholderText) 
     65 
     66    def paint(self, painter, option, widget=None): 
     67        QGraphicsTextItem.paint(self, painter, option, widget) 
     68 
     69        # Draw placeholder text if necessary 
     70        if not (self.toPlainText() and self.toHtml()) and \ 
     71                self.__placeholderText and \ 
     72                not (self.hasFocus() and \ 
     73                     self.textInteractionFlags() & Qt.TextEditable): 
     74            brect = self.boundingRect() 
     75            metrics = painter.fontMetrics() 
     76            text = metrics.elidedText(self.__placeholderText, Qt.ElideRight, 
     77                                      brect.width()) 
     78            color = self.defaultTextColor() 
     79            color.setAlpha(min(color.alpha(), 150)) 
     80            painter.setPen(QPen(color)) 
     81            painter.drawText(brect, Qt.AlignTop | Qt.AlignLeft, text) 
     82 
     83 
    3584class TextAnnotation(Annotation): 
    3685    """Text annotation item for the canvas scheme. 
     
    56105        self.__framePathItem.setPen(QPen(Qt.NoPen)) 
    57106 
    58         self.__textItem = QGraphicsTextItem(self) 
     107        self.__textItem = GraphicsTextEdit(self) 
     108        self.__textItem.setPlaceholderText(self.tr("Enter text here")) 
    59109        self.__textItem.setPos(2, 2) 
    60110        self.__textItem.setTextWidth(rect.width() - 4) 
Note: See TracChangeset for help on using the changeset viewer.