Changeset 3782:5dd40c5faee7 in orange


Ignore:
Timestamp:
07/13/07 16:11:42 (7 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
a0a15ed3381afefcd1a675715e8615b2dbfd2c1b
Message:
  • lineedit's callbackOnType didn't work; fixed
  • added 'value' to button, so toggle buttons can use it
  • added addSpace to listBox
  • comboBoxes can now have search drop downs
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/OWGUI.py

    r3725 r3782  
    305305        wa.setValidator(validator) 
    306306 
    307     wa.cback = connectControl(wa, master, value, callback and callbackOnType, "textChanged(const QString &)", CallFront_lineEdit(wa), fvcb = value and valueType)[1] 
     307    wa.cback = connectControl(wa, master, value, callbackOnType and callback, "textChanged(const QString &)", CallFront_lineEdit(wa), fvcb = value and valueType)[1] 
    308308 
    309309    wa.box = b 
     
    311311 
    312312 
    313 def button(widget, master, label, callback = None, disabled=0, tooltip=None, debuggingEnabled = 1, width = None, toggleButton = False, value = ""): 
     313def button(widget, master, label, callback = None, disabled=0, tooltip=None, debuggingEnabled = 1, width = None, toggleButton = False,value = ""): 
    314314    btn = QPushButton(label, widget) 
    315315    if width: 
     
    322322        btn.setToggleButton(True) 
    323323 
    324     if callback: 
    325         master.connect(btn, SIGNAL("clicked()"), callback) 
     324 
     325    if value: 
     326        cfront, cback, cfunc = connectControl(btn, master, value, None, "toggled(bool)", CallFront_toggleButton(btn), 
     327                                              cfunc = callback and FunctionCallback(master, callback, widget=btn)) 
     328    else: 
     329        if callback: 
     330            master.connect(btn, SIGNAL("clicked()"), callback) 
    326331 
    327332    if debuggingEnabled: 
     
    370375 
    371376 
    372 def listBox(widget, master, value, labels, box = None, tooltip = None, callback = None, selectionMode = QListBox.Single, debuggingEnabled = 1): 
     377def listBox(widget, master, value, labels, box = None, tooltip = None, callback = None, selectionMode = QListBox.Single, debuggingEnabled = 1, addSpace = False): 
    373378    bg = box and QHButtonGroup(box, widget) or widget 
     379 
    374380    lb = QListBox(bg) 
    375381    lb.setSelectionMode(selectionMode) 
     382 
     383    if addSpace: 
     384        separator(widget) 
    376385 
    377386    clist = master.getdeepattr(value) 
     
    553562 
    554563 
    555 def comboBox(widget, master, value, box=None, label=None, labelWidth=None, orientation='vertical', items=None, tooltip=None, callback=None, sendSelectedValue = 0, valueType = unicode, control2attributeDict = {}, emptyString = None, debuggingEnabled = 1): 
     564 
     565class SearchLineEdit(QLineEdit): 
     566    def __init__(self, t, searcher): 
     567        QLineEdit.__init__(self, t) 
     568        self.searcher = searcher 
     569         
     570    def keyPressEvent(self, e): 
     571        k = e.key() 
     572        if k == Qt.Key_Down: 
     573            curItem = self.searcher.lb.currentItem() 
     574            if curItem+1 < self.searcher.lb.count(): 
     575                self.searcher.lb.setCurrentItem(curItem+1) 
     576        elif k == Qt.Key_Up: 
     577            curItem = self.searcher.lb.currentItem() 
     578            if curItem: 
     579                self.searcher.lb.setCurrentItem(curItem-1) 
     580        elif k == Qt.Key_Escape: 
     581            self.searcher.window.hide() 
     582        else: 
     583            return QLineEdit.keyPressEvent(self, e) 
     584         
     585class Searcher: 
     586    def __init__(self, control, master): 
     587        self.control = control 
     588        self.master = master 
     589         
     590    def __call__(self): 
     591        self.window = t = QFrame(self.master, "", QStyle.WStyle_Dialog + QStyle.WStyle_Tool + QStyle.WStyle_Customize + QStyle.WStyle_NormalBorder) 
     592        la = QVBoxLayout(t).setAutoAdd(1) 
     593        gs = self.master.mapToGlobal(QPoint(0, 0)) 
     594        gl = self.control.mapToGlobal(QPoint(0, 0)) 
     595        t.move(gl.x()-gs.x(), gl.y()-gs.y()) 
     596        self.allItems = [str(self.control.text(i)) for i in range(self.control.count())] 
     597        le = SearchLineEdit(t, self) 
     598        self.lb = QListBox(t) 
     599        for i in self.allItems: 
     600            self.lb.insertItem(i) 
     601        t.setFixedSize(self.control.width(), 200) 
     602        t.show() 
     603        le.setFocus() 
     604         
     605        self.master.connect(le, SIGNAL("textChanged(const QString &)"), self.textChanged) 
     606        self.master.connect(le, SIGNAL("returnPressed()"), self.returnPressed) 
     607        self.master.connect(self.lb, SIGNAL("clicked(QListBoxItem *)"), self.mouseClicked) 
     608         
     609    def textChanged(self, s): 
     610        s = str(s) 
     611        self.lb.clear() 
     612        for i in self.allItems: 
     613            if s.lower() in i.lower(): 
     614                self.lb.insertItem(i) 
     615                
     616    def returnPressed(self):  
     617        if self.lb.count(): 
     618            self.conclude(self.lb.text(max(0, self.lb.currentItem()))) 
     619        else: 
     620            self.window.hide() 
     621        
     622    def mouseClicked(self, item): 
     623        self.conclude(item.text()) 
     624        
     625    def conclude(self, valueQStr): 
     626        value = str(valueQStr) 
     627        index = self.allItems.index(value) 
     628        self.control.setCurrentItem(index) 
     629        if self.control.cback: 
     630            if self.control.sendSelectedValue: 
     631                self.control.cback(value) 
     632            else: 
     633                self.control.cback(index) 
     634        if self.control.cfunc: 
     635            self.control.cfunc() 
     636                 
     637        self.window.hide() 
     638 
     639 
     640def comboBox(widget, master, value, box=None, label=None, labelWidth=None, orientation='vertical', items=None, tooltip=None, callback=None, sendSelectedValue = 0, valueType = unicode, control2attributeDict = {}, emptyString = None, debuggingEnabled = 1, searchAttr = False, addSpace = False): 
     641    horizontalBox = False 
    556642    if box or label: 
    557643        hb = widgetBox(widget, box, orientation) 
    558644        widgetLabel(hb, label, labelWidth) 
     645        horizontalBox = orientation == 'horizontal' or not orientation 
    559646    else: 
    560647        hb = widget 
     
    563650        QToolTip.add(hb, tooltip) 
    564651 
    565     combo = QComboBox(hb) 
     652    if searchAttr and not horizontalBox: 
     653        hb2 = widgetBox(hb, "", 0) 
     654    else: 
     655        hb2 = hb 
     656    combo = QComboBox(hb2) 
     657    if searchAttr: 
     658        searchButton = enterButton(hb2, combo.sizeHint().height(), False) 
     659        master.connect(searchButton, SIGNAL("clicked()"), Searcher(combo, master)) 
     660 
    566661    combo.box = hb 
     662 
     663    if addSpace: 
     664        separator(widget) 
    567665 
    568666    if items: 
     
    575673            combo.setDisabled(True) 
    576674 
     675    combo.sendSelectedValue = sendSelectedValue 
    577676    if sendSelectedValue: 
    578677        control2attributeDict = dict(control2attributeDict) 
    579678        if emptyString: 
    580679            control2attributeDict[emptyString] = "" 
    581         connectControl(combo, master, value, callback, "activated( const QString & )", 
     680        combo.cfront, combo.cback, combo.cfunc = connectControl(combo, master, value, callback, "activated( const QString & )", 
    582681                       CallFront_comboBox(combo, valueType, control2attributeDict), 
    583682                       ValueCallbackCombo(master, value, valueType, control2attributeDict)) 
    584683    else: 
    585         connectControl(combo, master, value, callback, "activated(int)", CallFront_comboBox(combo, None, control2attributeDict)) 
     684        combo.cfront, combo.cback, combo.cfunc = connectControl(combo, master, value, callback, "activated(int)", CallFront_comboBox(combo, None, control2attributeDict)) 
     685         
    586686    if debuggingEnabled: 
    587687        master._guiElements = getattr(master, "_guiElements", []) + [("comboBox", combo, value, sendSelectedValue, valueType, callback)] 
     
    9941094 
    9951095 
    996 class CallFront_checkBox(ControlledCallFront): 
     1096class CallFront_toggleButton(ControlledCallFront): 
    9971097    def action(self, value): 
    9981098        if value != None: 
    999             self.control.setChecked(value) 
     1099            self.control.setOn(value) 
    10001100 
    10011101 
Note: See TracChangeset for help on using the changeset viewer.