1 from PyQt4 import QtGui, QtCore
2 from PyQt4.QtCore import Qt
3
4 from customeditor import CustomEditor
5 from camelot.core import constants
6 from camelot.view.art import Icon
7
9 """Widget for editing a float field, with a calculator"""
10
11 - def __init__(self,
12 parent,
13 precision=2,
14 minimum=constants.camelot_minfloat,
15 maximum=constants.camelot_maxfloat,
16 prefix='',
17 suffix='',
18 editable=True,
19 reverse=False,
20 neutral=False,
21 **kwargs):
22 CustomEditor.__init__(self, parent)
23 action = QtGui.QAction(self)
24 action.setShortcut(Qt.Key_F3)
25 self.setFocusPolicy(Qt.StrongFocus)
26 self.spinBox = QtGui.QDoubleSpinBox(parent)
27 self.spinBox.setReadOnly(not editable)
28 self.spinBox.setDisabled(not editable)
29 self.spinBox.setEnabled(editable)
30 self.spinBox.setPrefix(prefix)
31 self.spinBox.setSuffix(suffix)
32 self.spinBox.setRange(minimum, maximum)
33 self.spinBox.setDecimals(precision)
34 self.spinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
35 self.spinBox.setSingleStep(1.0)
36 self.spinBox.addAction(action)
37 self.spinBox.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
38 self.arrow = QtGui.QLabel()
39 self.arrow.setPixmap(Icon('tango/16x16/actions/go-up.png').getQPixmap())
40 self.arrow.setFixedHeight(self.get_height())
41
42 self.arrow.setAutoFillBackground(False)
43 self.arrow.setMaximumWidth(19)
44
45 self.calculatorButton = QtGui.QToolButton()
46 icon = Icon('tango/16x16/apps/accessories-calculator.png').getQIcon()
47 self.calculatorButton.setIcon(icon)
48 self.calculatorButton.setAutoRaise(True)
49 self.calculatorButton.setFixedHeight(self.get_height())
50
51 self.connect(self.calculatorButton,
52 QtCore.SIGNAL('clicked()'),
53 lambda:self.popupCalculator(self.spinBox.value()))
54 self.connect(action,
55 QtCore.SIGNAL('triggered(bool)'),
56 lambda:self.popupCalculator(self.spinBox.value()))
57 self.connect(self.spinBox,
58 QtCore.SIGNAL('editingFinished()'),
59 lambda:self.editingFinished(self.spinBox.value()))
60
61 self.releaseKeyboard()
62
63 layout = QtGui.QHBoxLayout()
64 layout.setMargin(0)
65 layout.setSpacing(0)
66 layout.addSpacing(3.5)
67 layout.addWidget(self.arrow)
68 layout.addWidget(self.spinBox)
69 if editable:
70 layout.addWidget(self.calculatorButton)
71 self.reverse = reverse
72 self.neutral = neutral
73 self.setFocusProxy(self.spinBox)
74 self.setLayout(layout)
75 if not self.reverse:
76 if not self.neutral:
77 self.icons = {
78 -1:Icon('tango/16x16/actions/go-down-red.png').getQPixmap(),
79 1:Icon('tango/16x16/actions/go-up.png').getQPixmap(),
80 0:Icon('tango/16x16/actions/zero.png').getQPixmap()
81 }
82 else:
83 self.icons = {
84 -1:Icon('tango/16x16/actions/go-down-blue.png').getQPixmap(),
85 1:Icon('tango/16x16/actions/go-up-blue.png').getQPixmap(),
86 0:Icon('tango/16x16/actions/zero.png').getQPixmap()
87 }
88 else:
89 self.icons = {
90 1:Icon('tango/16x16/actions/go-down-red.png').getQPixmap(),
91 -1:Icon('tango/16x16/actions/go-up.png').getQPixmap(),
92 0:Icon('tango/16x16/actions/zero.png').getQPixmap()
93 }
94
99
104
106 if self.spinBox.isEnabled() != editable:
107 if not editable:
108 self.layout().removeWidget(self.calculatorButton)
109 else:
110 self.layout().addWidget(self.calculatorButton)
111 self.spinBox.setEnabled(editable)
112
121
123 self.spinBox.setValue(float(value))
124 self.emit(QtCore.SIGNAL('editingFinished()'))
125
127 self.emit(QtCore.SIGNAL('editingFinished()'))
128