Changeset 3488:b79a06adb723 in orange


Ignore:
Timestamp:
04/04/07 13:33:20 (7 years ago)
Author:
Gregor <Gregor@…>
Branch:
default
Convert:
0a21d58770cf7ba74beb804c4a6b05295351c5de
Message:
  • qwtHSlider accepts tooltips
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/OWGUI.py

    r3432 r3488  
    3838    elif addSpace: 
    3939        separator(widget) 
    40          
     40 
    4141    return b 
    4242 
     
    7171 
    7272    return lbl 
    73      
    74      
     73 
     74 
    7575class SpinBoxWFocusOut(QSpinBox): 
    7676    def __init__(self, min, max, step, bi): 
     
    7878        self.inSetValue = False 
    7979        self.enterButton = None 
    80          
     80 
    8181    def onChange(self, value): 
    8282        if not self.inSetValue: 
    8383            self.placeHolder.hide() 
    8484            self.enterButton.show() 
    85          
     85 
    8686    def onEnter(self): 
    8787        if self.enterButton.isVisible(): 
     
    9292            if self.cfunc: 
    9393                self.cfunc() 
    94              
     94 
    9595    # doesn't work: it's probably LineEdit's focusOut that we should (and can't) catch 
    9696    def focusOutEvent(self, *e): 
     
    103103        QSpinBox.setValue(self, value) 
    104104        self.inSetValue = False 
    105              
     105 
    106106 
    107107def checkWithSpin(widget, master, label, min, max, checked, value, posttext = None, step = 1, tooltip=None, 
     
    112112                spinCallback, debuggingEnabled, controlWidth, callbackOnReturn, checked, checkCallback, posttext) 
    113113 
    114      
     114 
    115115 
    116116def spin(widget, master, value, min, max, step=1, 
     
    124124        b = widget 
    125125        hasHBox = False 
    126          
     126 
    127127    if not hasHBox and (checked or callback and callbackOnReturn or posttext): 
    128128        bi = widgetBox(b, "", 0) 
    129129    else: 
    130130        bi = b 
    131          
     131 
    132132    if checked: 
    133133        wb = checkBox(bi, master, checked, label, labelWidth = labelWidth, callback=checkCallback, debuggingEnabled = debuggingEnabled) 
    134134    elif label: 
    135135        widgetLabel(b, label, labelWidth) 
    136          
    137          
     136 
     137 
    138138    wa = bi.control = SpinBoxWFocusOut(min, max, step, bi) 
    139139    # must be defined because of the setText below 
     
    146146 
    147147    cfront, wa.cback, wa.cfunc = connectControl(wa, master, value, callback, not (callback and callbackOnReturn) and "valueChanged(int)", CallFront_spin(wa)) 
    148      
     148 
    149149    if checked: 
    150150        wb.disables = [wa] 
    151151        wb.makeConsistent() 
    152      
     152 
    153153    if callback and callbackOnReturn: 
    154154        wa.enterButton, wa.placeHolder = enterButton(bi, wa.sizeHint().height()) 
     
    162162    if debuggingEnabled: 
    163163        master._guiElements = getattr(master, "_guiElements", []) + [("spin", wa, value, min, max, step, callback)] 
    164          
     164 
    165165    if checked: 
    166166        return wb, wa 
     
    172172    b = widgetBox(widget, box, orientation) 
    173173    widgetLabel(b, label, labelWidth) 
    174      
     174 
    175175    wa = b.control = DoubleSpinBox(min, max, step, value, master, b) 
    176176    wa.setValue(master.getdeepattr(value)) 
     
    178178    if controlWidth: 
    179179        wa.setFixedWidth(controlWidth) 
    180          
     180 
    181181    if tooltip: 
    182182        QToolTip.add(wa, tooltip) 
     
    194194        wa = QCheckBox(widget) 
    195195        wa.box = None 
    196          
     196 
    197197    if labelWidth: 
    198198        wa.setFixedSize(labelWidth, wa.sizeHint().height()) 
    199          
     199 
    200200    wa.setChecked(master.getdeepattr(value)) 
    201201    if disabled: 
     
    204204        QToolTip.add(wa, tooltip) 
    205205 
    206     cfront, cback, cfunc = connectControl(wa, master, value, None, "toggled(bool)", CallFront_checkBox(wa),  
     206    cfront, cback, cfunc = connectControl(wa, master, value, None, "toggled(bool)", CallFront_checkBox(wa), 
    207207                                          cfunc = callback and FunctionCallback(master, callback, widget=wa, getwidget=getwidget, id=id)) 
    208208 
     
    214214    if debuggingEnabled: 
    215215        master._guiElements = getattr(master, "_guiElements", []) + [("checkBox", wa, value, callback)] 
    216      
     216 
    217217    return wa 
    218218 
     
    229229        holder.setFixedSize(height, height) 
    230230        return button, holder 
    231      
    232      
     231 
     232 
    233233class LineEditWFocusOut(QLineEdit): 
    234234    def __init__(self, parent, master, callback, focusInCallback=None): 
     
    243243        self.placeHolder.hide() 
    244244        self.enterButton.show() 
    245          
     245 
    246246    def markUnchanged(self, *e): 
    247247        self.enterButton.hide() 
    248248        self.placeHolder.show() 
    249          
     249 
    250250    def returnPressed(self): 
    251251        if self.enterButton.isVisible(): 
     
    255255            if self.callback: 
    256256                self.callback() 
    257          
     257 
    258258    def setText(self, t): 
    259259        QLineEdit.setText(self, t) 
    260260        if self.enterButton: 
    261261            self.markUnchanged() 
    262          
     262 
    263263    def focusOutEvent(self, *e): 
    264264        QLineEdit.focusOutEvent(self, *e) 
     
    271271 
    272272 
    273 def lineEdit(widget, master, value,  
    274              label=None, labelWidth=None, orientation='vertical', box=None, tooltip=None,  
     273def lineEdit(widget, master, value, 
     274             label=None, labelWidth=None, orientation='vertical', box=None, tooltip=None, 
    275275             callback=None, valueType = unicode, validator=None, controlWidth = None, callbackOnType = False, focusInCallback = None): 
    276276    if box or label: 
     
    281281        b = widget 
    282282        hasHBox = False 
    283          
     283 
    284284    if focusInCallback or callback and not callbackOnType: 
    285285        if not hasHBox: 
     
    294294    if value: 
    295295        wa.setText(unicode(master.getdeepattr(value))) 
    296      
     296 
    297297    if controlWidth: 
    298298        wa.setFixedWidth(controlWidth) 
    299          
     299 
    300300    if tooltip: 
    301301        QToolTip.add(wa, tooltip) 
     
    304304 
    305305    wa.cback = connectControl(wa, master, value, callback and callbackOnType, "textChanged(const QString &)", CallFront_lineEdit(wa), fvcb = value and valueType)[1] 
    306          
     306 
    307307    wa.box = b 
    308308    return wa 
     
    316316    if tooltip: 
    317317        QToolTip.add(btn, tooltip) 
    318      
     318 
    319319    if toggleButton: 
    320320        btn.setToggleButton(True) 
     
    322322    if callback: 
    323323        master.connect(btn, SIGNAL("clicked()"), callback) 
    324          
     324 
    325325    if debuggingEnabled: 
    326326        master._guiElements = getattr(master, "_guiElements", []) + [("button", btn, callback)] 
     
    361361    global attributeIconDict 
    362362    if not attributeIconDict: 
    363         attributeIconDict = {orange.VarTypes.Continuous: createAttributePixmap("C", QColor(202, 0, 32)),  
    364                      orange.VarTypes.Discrete: createAttributePixmap("D", QColor(26, 150, 65)),  
    365                      orange.VarTypes.String: createAttributePixmap("S", Qt.black),  
     363        attributeIconDict = {orange.VarTypes.Continuous: createAttributePixmap("C", QColor(202, 0, 32)), 
     364                     orange.VarTypes.Discrete: createAttributePixmap("D", QColor(26, 150, 65)), 
     365                     orange.VarTypes.String: createAttributePixmap("S", Qt.black), 
    366366                     -1: createAttributePixmap("?", QColor(128, 128, 128))} 
    367367    return attributeIconDict 
     
    391391        master._guiElements = getattr(master, "_guiElements", []) + [("listBox", lb, value, callback)] 
    392392    return lb 
    393      
     393 
    394394 
    395395# btnLabels is a list of either char strings or pixmaps 
     
    431431    if tooltip: 
    432432        QToolTip.add(w, tooltip) 
    433      
     433 
    434434 
    435435def radioButton(widget, master, value, label, box = None, tooltip = None, callback = None, debuggingEnabled = 1): 
     
    464464    else: 
    465465        sliderOrient = QSlider.Horizontal 
    466          
     466 
    467467    slider = QSlider(minValue, maxValue, step, master.getdeepattr(value), sliderOrient, sliderBox) 
    468468    if ticks: 
    469469        slider.setTickmarks(QSlider.Below) 
    470470        slider.setTickInterval(ticks) 
    471          
     471 
    472472    label = QLabel(sliderBox) 
    473473    label.setText(labelFormat % minValue) 
     
    487487 
    488488 
    489 def qwtHSlider(widget, master, value, box=None, label=None, labelWidth=None, minValue=1, maxValue=10, step=0.1, precision=1, callback=None, logarithmic=0, ticks=0, maxWidth=80, debuggingEnabled = 1): 
     489def qwtHSlider(widget, master, value, box=None, label=None, labelWidth=None, minValue=1, maxValue=10, step=0.1, precision=1, callback=None, logarithmic=0, ticks=0, maxWidth=80, tooltip = None, debuggingEnabled = 1): 
    490490    import qwt 
    491491    init = master.getdeepattr(value) 
     
    516516        slider.setRange(minValue, maxValue, step) 
    517517        slider.setValue(init) 
    518          
     518    if tooltip: 
     519        QToolTip.add(hb, tooltip) 
     520 
    519521##    format = "%s%d.%df" % ("%", precision+3, precision) 
    520522    format = " %s.%df" % ("%", precision) 
    521      
     523 
    522524    lbl = QLabel(hb) 
    523525    lbl.setText(format % minValue) 
     
    527529    lbl.setFixedSize(max(width1, width2), lbl.sizeHint().height()) 
    528530    lbl.setText(format % init) 
    529      
     531 
    530532    if logarithmic: 
    531533        cfront = CallFront_logSlider(slider) 
     
    538540    connectControl(slider, master, value, callback, "valueChanged(double)", cfront, cback) 
    539541    slider.box = hb 
    540      
     542 
    541543    if debuggingEnabled: 
    542544        master._guiElements = getattr(master, "_guiElements", []) + [("qwtHSlider", slider, value, minValue, maxValue, step, callback)] 
     
    550552    else: 
    551553        hb = widget 
    552          
     554 
    553555    if tooltip: 
    554556        QToolTip.add(hb, tooltip) 
    555          
     557 
    556558    combo = QComboBox(hb) 
    557559    combo.box = hb 
     
    570572        if emptyString: 
    571573            control2attributeDict[emptyString] = "" 
    572         connectControl(combo, master, value, callback, "activated( const QString & )",  
    573                        CallFront_comboBox(combo, valueType, control2attributeDict),  
     574        connectControl(combo, master, value, callback, "activated( const QString & )", 
     575                       CallFront_comboBox(combo, valueType, control2attributeDict), 
    574576                       ValueCallbackCombo(master, value, valueType, control2attributeDict)) 
    575577    else: 
     
    593595            self.setTitle(" " + box.strip() + " ") 
    594596 
    595         self.pixEdgeOffset = 10         
    596          
     597        self.pixEdgeOffset = 10 
     598 
    597599        self.master = master 
    598600        self.value = value 
     
    607609        icon1 = os.path.join(iconDir, "arrow_down.png") 
    608610        icon2 = os.path.join(iconDir, "arrow_up.png") 
    609                          
     611 
    610612        if os.path.exists(icon1) and os.path.exists(icon2): 
    611613            self.pixmaps = [QPixmap(icon1), QPixmap(icon2)] 
     
    613615            self.setBackgroundColor(Qt.black) 
    614616        #self.updateControls()      # not needed yet, since no widgets are in it 
    615              
     617 
    616618 
    617619    def mousePressEvent(self, ev): 
     
    632634            if isinstance(c, QLayout): continue 
    633635            self.childWidgetVisibility[str(c)] = not c.isHidden() 
    634         self.updateControls()             
    635      
     636        self.updateControls() 
     637 
    636638    def updateControls(self): 
    637639        val = self.master.getdeepattr(self.value) 
    638                  
     640 
    639641        for c in self.children(): 
    640642            if isinstance(c, QLayout): continue 
     
    647649    def paintEvent(self, ev): 
    648650        QVGroupBox.paintEvent(self, ev) 
    649          
     651 
    650652        if self.pixmaps != []: 
    651653            pix = self.pixmaps[self.master.getdeepattr(self.value)] 
     
    654656            self.xPixCoord = self.width() - pix.width() - self.pixEdgeOffset 
    655657            self.shownPixSize = (pix.width(), pix.height()) 
    656         
     658 
    657659 
    658660 
     
    672674        icon2 = os.path.join(iconDir, "arrow_up.png") 
    673675        self.pixmaps = [] 
    674                  
     676 
    675677        if os.path.exists(icon1) and os.path.exists(icon2): 
    676678            self.pixmaps = [QPixmap(icon1), QPixmap(icon2)] 
     
    682684        self.setMaximumHeight(h) 
    683685        self.setMinimumSize(w, h) 
    684              
     686 
    685687        self.disables = widgets or [] # need to create a new instance of list (in case someone would want to append...) 
    686688        self.makeConsistent = Disabler(self, master, value, type = HIDER) 
     
    696698            self.setBackgroundPixmap(self.pixmaps[self.master.getdeepattr(self.value)]) 
    697699        self.makeConsistent.__call__() 
    698          
     700 
    699701 
    700702    def setWidgets(self, widgets): 
     
    713715    stopCheckbox.disables.append((-1, sendButton)) 
    714716    sendButton.setDisabled(stopCheckbox.isChecked()) 
    715     master.connect(stopCheckbox, SIGNAL("toggled(bool)"),  
     717    master.connect(stopCheckbox, SIGNAL("toggled(bool)"), 
    716718                   lambda x, master=master, changedFlag=changedFlag, callback=callback: x and getattr(master, changedFlag, True) and callback()) 
    717719 
     
    726728        import copy_reg 
    727729        return copy_reg._reconstructor, (list, list, ()), None, self.__iter__() 
    728                     
     730 
    729731    def item2name(self, item): 
    730732        item = self.listBox.labels[item] 
     
    733735        else: 
    734736            return item 
    735          
     737 
    736738    def __setitem__(self, index, item): 
    737739        self.listBox.setSelected(list.__getitem__(self, index), 0) 
    738740        self.listBox.setSelected(item, 1) 
    739741        list.__setitem__(self, index, item) 
    740          
     742 
    741743    def __delitem__(self, index): 
    742744        self.listBox.setSelected(__getitem__(self, index), 0) 
     
    758760                self.listBox.setSelected(i, 0) 
    759761        list.__delslice__(self, start, end) 
    760          
     762 
    761763    def append(self, item): 
    762764        list.append(self, item) 
     
    775777        self.listBox.setSelected(list.__getitem__(self, index), 0) 
    776778        list.pop(self, index) 
    777                                   
     779 
    778780    def remove(self, item): 
    779781        self.listBox.setSelected(item, 0) 
     
    789791        cback.opposite = cfront 
    790792        if value and cfront: 
    791             master.controlledAttributes[value] = cfront     
     793            master.controlledAttributes[value] = cfront 
    792794    return cback 
    793      
     795 
    794796def connectControl(control, master, value, f, signal, cfront, cback = None, cfunc = None, fvcb = None): 
    795797    cback = connectValueControl(control, master, value, signal, cfront, cback, fvcb) 
    796      
     798 
    797799    cfunc = cfunc or f and FunctionCallback(master, f) 
    798800    if cfunc: 
     
    835837        else: 
    836838            setattr(self.widget, self.attribute, value) 
    837                  
    838      
     839 
     840 
    839841class ValueCallback(ControlledCallback): 
    840842    def __call__(self, value): 
     
    856858        return ValueCallback.__call__(self, self.control2attributeDict.get(value, value)) 
    857859 
    858                                         
     860 
    859861 
    860862class ValueCallbackLineEdit(ControlledCallback): 
     
    870872                self.control.setCursorPosition(pos) 
    871873            except: 
    872                 print "invalid value ", value, type(value)             
     874                print "invalid value ", value, type(value) 
    873875 
    874876 
     
    881883        widget.callbackDeposit.append(self) 
    882884        self.disabled = False 
    883          
     885 
    884886    def __call__(self, value): 
    885887        if not self.disabled and value != None: 
     
    930932            self.widget.__setattr__(self.control.ogValue, clist) 
    931933 
    932          
     934 
    933935############################################################################## 
    934936# call fronts (through this a change of the attribute value changes the related control) 
     
    953955            else: 
    954956                self.action(*args) 
    955              
    956          
     957 
     958 
    957959class CallFront_spin(ControlledCallFront): 
    958960    def action(self, value): 
     
    988990        if value != None: 
    989991            value = self.attribute2controlDict.get(value, value) 
    990             if self.valType:  
     992            if self.valType: 
    991993                for i in range(self.control.count()): 
    992994                    if self.valType(str(self.control.text(i))) == value: 
     
    10001002                self.control.setCurrentItem(value) 
    10011003 
    1002          
     1004 
    10031005class CallFront_hSlider(ControlledCallFront): 
    10041006    def action(self, value): 
     
    10151017                self.control.setValue(math.log10(value)) 
    10161018 
    1017                  
     1019 
    10181020class CallFront_lineEdit(ControlledCallFront): 
    10191021    def action(self, value): 
     
    10331035            if not type(value) <= ControlledList: 
    10341036                setattr(self.control.ogMaster, self.control.ogValue, ControlledList(value, self.control)) 
    1035             for i in range(self.control.count()):        
     1037            for i in range(self.control.count()): 
    10361038                self.control.setSelected(i, 0) 
    10371039            for i in value: 
     
    10521054                else: 
    10531055                    self.control.insertItem(i) 
    1054              
     1056 
    10551057 
    10561058class CallFront_Label: 
     
    10621064    def __call__(self, *args): 
    10631065        self.control.setText(self.label % self.master.__dict__) 
    1064          
     1066 
    10651067############################################################################## 
    10661068## Disabler is a call-back class for check box that can disable/enable other 
     
    10831085        self.propagateState = propagateState 
    10841086        self.type = type 
    1085          
     1087 
    10861088    def __call__(self, *value): 
    10871089        currState = self.widget.isEnabled() 
    1088              
     1090 
    10891091        if currState or not self.propagateState: 
    10901092            if len(value): 
     
    10941096        else: 
    10951097            disabled = 1 
    1096              
     1098 
    10971099        for w in self.widget.disables: 
    10981100            if type(w) == tuple: 
     
    11171119                    if disabled: w.hide() 
    11181120                    else:        w.show() 
    1119          
     1121 
    11201122############################################################################## 
    11211123# some table related widgets 
     
    11601162 
    11611163############################################################################## 
    1162 # float  
     1164# float 
    11631165class DoubleSpinBox(QSpinBox): 
    11641166    def __init__(self, min, max, step, value, master, *args): 
     
    11831185        return int(math.floor((val-self.min)/self.stepSize)) 
    11841186 
    1185          
     1187 
Note: See TracChangeset for help on using the changeset viewer.