Changeset 8180:2ec75fd4c0df in orange


Ignore:
Timestamp:
08/16/11 14:56:19 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
2d4080d0dcc4a44c7335c3815b8fd07854f2ea9e
Message:

Replace QwtSliders with QSliders where possible (everywhere except logarithmic sliders)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/OWGUI.py

    r8100 r8180  
    676676 
    677677 
    678 def hSlider(widget, master, value, box=None, minValue=0, maxValue=10, step=1, callback=None, label=None, labelFormat=" %d", ticks=0, divideFactor = 1.0, debuggingEnabled = 1, vertical = False, createLabel = 1, tooltip = None, width = None): 
     678def hSlider(widget, master, value, box=None, minValue=0, maxValue=10, step=1, callback=None, label=None, labelFormat=" %d", ticks=0, divideFactor = 1.0, debuggingEnabled = 1, vertical = False, createLabel = 1, tooltip = None, width = None, intOnly = 1): 
    679679    sliderBox = widgetBox(widget, box, orientation = "horizontal") 
    680680    if label: 
     
    685685    else: 
    686686        sliderOrient = Qt.Horizontal 
    687  
    688     slider = QSlider(sliderOrient, sliderBox) 
    689     slider.setRange(minValue, maxValue) 
    690     slider.setSingleStep(step) 
    691     slider.setPageStep(step) 
    692     slider.setTickInterval(step) 
     687         
     688    if intOnly: 
     689        slider = QSlider(sliderOrient, sliderBox) 
     690        slider.setRange(minValue, maxValue) 
     691        if step != 0: 
     692            slider.setSingleStep(step) 
     693            slider.setPageStep(step) 
     694            slider.setTickInterval(step) 
     695        signal_signature = "valueChanged(int)" 
     696    else: 
     697        slider = FloatSlider(sliderOrient, minValue, maxValue, step) 
     698        signal_signature = "valueChangedFloat(double)" 
    693699    slider.setValue(getdeepattr(master, value)) 
    694  
     700     
    695701    if tooltip: 
    696702        slider.setToolTip(tooltip) 
     
    718724        label.setText(txt) 
    719725        label.setLbl = lambda x, l=label, f=labelFormat: l.setText(f % (x/divideFactor)) 
    720         QObject.connect(slider, SIGNAL("valueChanged(int)"), label.setLbl) 
    721  
    722     connectControl(slider, master, value, callback, "valueChanged(int)", CallFrontHSlider(slider)) 
     726        QObject.connect(slider, SIGNAL(signal_signature), label.setLbl) 
     727 
     728    connectControl(slider, master, value, callback, signal_signature, CallFrontHSlider(slider)) 
    723729 
    724730    if debuggingEnabled and hasattr(master, "_guiElements"): 
     
    728734 
    729735def 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, showValueLabel = 1, debuggingEnabled = 1, addSpace=False, orientation=0): 
     736    if not logarithmic: 
     737        if type(precision) == str: 
     738            format = precision 
     739        elif precision == 0: 
     740            format = " %d" 
     741        else: 
     742            format = " %s.%df" % ("%", precision) 
     743 
     744        return hSlider(widget, master, value, box, minValue, maxValue, step, callback, labelFormat=format, width=maxWidth, intOnly=0) 
     745 
    730746    import PyQt4.Qwt5 as qwt 
    731747 
     
    20172033    style_correction = {"macintosh (aqua)": -2, "macintosh(aqua)": -2, "plastique": 1, "cde": 1, "motif": 1} #TODO: add other styles (Maybe load corrections from .cfg file?) 
    20182034    return space + width + style_correction.get(str(qApp.style().objectName()).lower(), 0) 
    2019                  
     2035     
     2036class FloatSlider(QSlider): 
     2037    def __init__(self, orientation, min_value, max_value, step, parent=None): 
     2038        QSlider.__init__(self, orientation, parent) 
     2039        self.setScale(min_value, max_value, step) 
     2040        QObject.connect(self, SIGNAL("valueChanged(int)"), self.sendValue) 
     2041     
     2042    valueChangedFloat = pyqtSignal(['double']) 
     2043         
     2044    def update(self): 
     2045        self.setSingleStep(1) 
     2046        if self.min_value != self.max_value: 
     2047            self.setEnabled(True) 
     2048            self.setMinimum(int(self.min_value/self.step)) 
     2049            self.setMaximum(int(self.max_value/self.step)) 
     2050        else: 
     2051            self.setEnabled(False) 
     2052     
     2053    def sendValue(self, slider_value): 
     2054        value = min(max(slider_value * self.step, self.min_value), self.max_value) 
     2055        self.valueChangedFloat.emit(value) 
     2056         
     2057    def setValue(self, value): 
     2058        QSlider.setValue(self, int(value/self.step)) 
     2059         
     2060    def setScale(self, minValue, maxValue, step=0): 
     2061        if minValue >= maxValue: 
     2062            ## It would be more logical to disable the slider in this case (self.setEnabled(False)) 
     2063            ## However, we do nothing to keep consistency with Qwt 
     2064            return 
     2065        if step <= 0 or step > (maxValue-minValue): 
     2066            if type(maxValue) == int and type(minValue) == int: 
     2067                step = 1 
     2068            else: 
     2069                step = float(minValue-maxValue)/100.0 
     2070        self.min_value = float(minValue) 
     2071        self.max_value = float(maxValue) 
     2072        self.step = step 
     2073        self.update() 
Note: See TracChangeset for help on using the changeset viewer.