source: orange/orange/OrangeCanvas/orngGui.py @ 6538:a5f65d7f0b2c

Revision 6538:a5f65d7f0b2c, 10.5 KB checked in by Mitar <Mitar@…>, 4 years ago (diff)

Made XPM version of the icon 32x32.

Line 
1from PyQt4.QtCore import *
2from PyQt4.QtGui import *
3
4def separator(widget, width=8, height=8):
5    sep = QWidget(widget)
6    if widget.layout(): widget.layout().addWidget(sep)
7    sep.setFixedSize(width, height)
8    return sep
9
10# constructs a box (frame) if not none, and returns the right master widget
11def widgetBox(widget, box=None, orientation='vertical', addSpace=False, sizePolicy = None, removeMargin = 1):
12    if box:
13        b = QGroupBox(widget)
14        if type(box) in (str, unicode):   # if you pass 1 for box, there will be a box, but no text
15            b.setTitle(" "+box.strip()+" ")
16    else:
17        b = QWidget(widget)
18    if widget.layout(): widget.layout().addWidget(b)
19
20    if orientation == 'horizontal' or not orientation:
21        b.setLayout(QHBoxLayout())
22        #b.setSizePolicy(sizePolicy or QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Minimum))
23    else:
24        b.setLayout(QVBoxLayout())
25        #b.setSizePolicy(sizePolicy or QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
26
27    if not box and removeMargin:
28        b.layout().setMargin(0)
29
30    return b
31
32
33def widgetLabel(widget, label, labelWidth=None):
34    lbl = QLabel(label, widget)
35    if widget.layout(): widget.layout().addWidget(lbl)
36    if labelWidth:
37        lbl.setFixedSize(labelWidth, lbl.sizeHint().height())
38    return lbl
39
40def checkBox(widget, value, label, box=None, tooltip=None, disabled=0, labelWidth=None, indent = 0):
41    if box:
42        widget = widgetBox(widget, box, orientation=None)
43    if indent:
44        hbox = widgetBox(widget, orientation = "horizontal")
45        if widget.layout(): widget.layout().addWidget(hbox)
46        sep = QWidget(hbox)
47        sep.setFixedSize(indent, 5)
48        if hbox.layout(): hbox.layout().addWidget(sep)
49        widget = hbox
50
51    wa = QCheckBox(label, widget)
52    if widget.layout(): widget.layout().addWidget(wa)
53     
54    if labelWidth:
55        wa.setFixedSize(labelWidth, wa.sizeHint().height())
56    wa.setDisabled(disabled)
57    wa.setChecked(value)
58    if tooltip:
59        wa.setToolTip(tooltip)
60    return wa
61
62
63def lineEdit(widget, value, label=None, labelWidth=None, orientation='vertical', box=None, tooltip=None, validator=None, controlWidth = None, **args):
64    b = widgetBox(widget, box, orientation)
65    if label:
66        l = widgetLabel(b, label, labelWidth)
67        if b.layout(): b.layout().addWidget(l)
68
69    if args.has_key("baseClass"):
70        wa = args["baseClass"](b)
71    else:
72        wa = QLineEdit(b)
73    if b.layout(): b.layout().addWidget(wa)
74
75    if controlWidth:
76        wa.setFixedWidth(controlWidth)
77
78    if tooltip:
79        wa.setToolTip(tooltip)
80    if validator:
81        wa.setValidator(validator)
82    wa.setText(str(value))
83    return wa
84
85
86def button(widget, master, label, callback = None, disabled=0, tooltip=None, width = None):
87    btn = QPushButton(label, widget)
88    if widget.layout(): widget.layout().addWidget(btn)
89
90    if width:
91        btn.setFixedWidth(width)
92    btn.setDisabled(disabled)
93    if callback:
94        master.connect(btn, SIGNAL("clicked()"), callback)
95    if tooltip:
96        btn.setToolTip(tooltip)
97    return btn
98
99
100def listBox(widget, master, box = None, tooltip = None, callback = None, selectionMode = QListWidget.SingleSelection):
101    bg = box and widgetBox(widget, box, orientation = "horizontal") or widget
102    lb = QListWidget(master)
103    lb.box = bg
104    lb.setSelectionMode(selectionMode)
105    if bg.layout(): bg.layout().addWidget(lb)
106
107    if tooltip:
108        lb.setToolTip(tooltip)
109
110    if callback:
111        master.connect(lb, SIGNAL("itemSelectionChanged()"), callback)
112    return lb
113
114
115
116def comboBox(widget, master, value, box=None, label=None, labelWidth=None, orientation='horizontal', items=None, tooltip=None, callback=None):
117    hb = widgetBox(widget, box, orientation)
118    if label:
119        l = widgetLabel(hb, label, labelWidth)
120        if hb.layout(): hb.layout().addWidget(l)
121    combo = QComboBox(hb)
122    if hb.layout(): hb.layout().addWidget(combo)
123
124    if tooltip:
125        combo.setToolTip(tooltip)
126    if items:
127        combo.addItems(items)
128        combo.setCurrentIndex(value)
129    if callback:
130        master.connect(combo, SIGNAL("activated(int)"), callback)
131    return combo
132
133def comboBoxWithCaption(widget, master, value, label, box=None, items=None, tooltip=None, callback = None, labelWidth = None):
134    hb = widgetBox(widget, box = box, orientation="horizontal")
135    l = widgetLabel(hb, label, labelWidth)
136    if hb.layout(): hb.layout().addWidget(l)
137    combo = comboBox(hb, master, value, items = items, tooltip = tooltip, callback = callback)
138    if hb.layout(): hb.layout().addWidget(combo)
139    return combo
140
141
142def 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):
143    sliderBox = widgetBox(widget, box, orientation = "horizontal")
144    if label:
145        lbl = widgetLabel(sliderBox, label)
146
147    if vertical:
148        sliderOrient = Qt.Vertical
149    else:
150        sliderOrient = Qt.Horizontal
151
152    slider = QSlider(sliderOrient, sliderBox)
153    slider.setRange(minValue, maxValue)
154    slider.setSingleStep(step)
155    slider.setPageStep(step)
156    slider.setTickInterval(step)
157    slider.setValue(value)
158
159    if tooltip:
160        slider.setToolTip(tooltip)
161
162    if width != None:
163        slider.setFixedWidth(width)
164
165    if sliderBox.layout(): sliderBox.layout().addWidget(slider)
166
167    if ticks:
168        slider.setTickPosition(QSlider.TicksBelow)
169        slider.setTickInterval(ticks)
170
171    if createLabel:
172        label = QLabel(sliderBox)
173        if sliderBox.layout(): sliderBox.layout().addWidget(label)
174        label.setText(labelFormat % minValue)
175        width1 = label.sizeHint().width()
176        label.setText(labelFormat % maxValue)
177        width2 = label.sizeHint().width()
178        label.setFixedSize(max(width1, width2), label.sizeHint().height())
179        txt = labelFormat % (slider.value()/divideFactor)
180        label.setText(txt)
181        label.setLbl = lambda x, l=label, f=labelFormat: l.setText(f % (x/divideFactor))
182        QObject.connect(slider, SIGNAL("valueChanged(int)"), label.setLbl)
183
184    if callback:
185        master.connect(slider, SIGNAL("valueChanged(int)"), callback)
186    return slider
187
188
189def 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):
190    import PyQt4.Qwt5 as qwt
191
192    if label:
193        hb = widgetBox(widget, box, orientation) 
194        lbl = widgetLabel(hb, label)
195        if labelWidth:
196            lbl.setFixedSize(labelWidth, lbl.sizeHint().height())
197        if orientation and orientation!="horizontal":
198            separator(hb, height=2)
199            hb = widgetBox(hb, 0)
200    else:
201        hb = widgetBox(widget, box, 0)
202
203    if ticks:
204        slider = qwt.QwtSlider(hb, Qt.Horizontal, qwt.QwtSlider.Bottom, qwt.QwtSlider.BgSlot)
205    else:
206        slider = qwt.QwtSlider(hb, Qt.Horizontal, qwt.QwtSlider.NoScale, qwt.QwtSlider.BgSlot)
207    hb.layout().addWidget(slider)
208
209    slider.setScale(minValue, maxValue, 0) # the third parameter for logaritmic scale
210    slider.setScaleMaxMinor(10)
211    slider.setThumbWidth(20)
212    slider.setThumbLength(12)
213    if maxWidth:
214        slider.setMaximumSize(maxWidth, 40)
215    slider.setRange(minValue, maxValue, step)
216    slider.setValue(value)
217    if tooltip:
218        hb.setToolTip(tooltip)
219
220    if showValueLabel:
221        if type(precision) == str:  format = precision
222        else:                       format = " %s.%df" % ("%", precision)
223        lbl = widgetLabel(hb, format % minValue)
224        width1 = lbl.sizeHint().width()
225        lbl.setText(format % maxValue)
226        width2 = lbl.sizeHint().width()
227        lbl.setFixedSize(max(width1, width2), lbl.sizeHint().height())
228        lbl.setText(format % value)
229        lbl.setLbl = lambda x, l=lbl, f=format: l.setText(f % (x))
230        QObject.connect(slider, SIGNAL("valueChanged(double)"), lbl.setLbl)
231    if callback: 
232        master.connect(slider, SIGNAL("valueChanged(double)"), callback)
233    slider.box = hb
234    return slider
235
236
237##class ListBoxDnD(QListWidget):
238##    def __init__(self, parent):
239##        QListWidget.__init__(self, parent)
240##        self.setDragEnabled(True)
241##        self.setAcceptDrops(True)
242##        self.setSelectionMode(QAbstractItemView.ExtendedSelection)
243##
244##    def dropMimeData(self, index, data, action):
245##        print "dropMimeData"
246##
247##    def dragEnterEvent(self, e):
248##        if e.mimeData().hasFormat("application/x-qabstractitemmodeldatalist"):
249##            e.accept()
250##
251##    def dropEvent(self, e):
252##        print "drop"
253##        vals = e.mimeData().retrieveData("application/x-qabstractitemmodeldatalist")
254##        print vals
255##
256##
257##    def dragMoveEvent(self, e):
258##        print "moveEvent"
259##        if e.mimeData().hasFormat("application/x-qabstractitemmodeldatalist"):
260##            e.setDropAction(Qt.MoveAction)
261##            e.accept()
262##            print "acc"
263##        else:
264##            e.ignore()
265##            print "ignore"
266##
267##import sys
268##app = QApplication(sys.argv)
269##
270##w = QWidget(None)
271##w.setLayout(QVBoxLayout())
272##l1 = ListBoxDnD(w)
273##l2 = ListBoxDnD(w)
274##
275##for i in range(10):
276##    l1.addItem("Text " + str(i))
277##
278##w.layout().addWidget(l1)
279##w.layout().addWidget(l2)
280##w.show()
281##
282##sys.exit(app.exec_())
283
284class MyCanvasText(QGraphicsSimpleTextItem):
285    def __init__(self, canvas, text, x, y, flags=Qt.AlignLeft, bold=0, show=1):
286        QGraphicsSimpleTextItem.__init__(self, text, None, canvas)
287        self.setPos(x,y)
288        self.setPen(QPen(Qt.black))
289        self.flags = flags
290        if bold:
291            font = self.font();
292            font.setBold(1);
293            self.setFont(font)
294        if show:
295            self.show()
296
297    def paint(self, painter, option, widget = None):
298        #painter.resetMatrix()
299        painter.setPen(self.pen())
300        painter.setFont(self.font())
301
302        xOff = 0; yOff = 0
303        rect = painter.boundingRect(QRectF(0,0,2000,2000), self.flags, self.text())
304        if self.flags & Qt.AlignHCenter: xOff = rect.width()/2.
305        elif self.flags & Qt.AlignRight: xOff = rect.width()
306        if self.flags & Qt.AlignVCenter: yOff = rect.height()/2.
307        elif self.flags & Qt.AlignBottom:yOff = rect.height()
308        #painter.drawText(self.pos().x()-xOff, self.pos().y()-yOff, rect.width(), rect.height(), self.flags, self.text())
309        painter.drawText(-xOff, -yOff, rect.width(), rect.height(), self.flags, self.text())
Note: See TracBrowser for help on using the repository browser.