1 from PyQt4 import QtGui, QtCore
2 from PyQt4.QtCore import Qt
3
4 from customeditor import CustomEditor
5 from camelot.view.art import Icon
6 from camelot.core import constants
7 from camelot.view.proxy import ValueLoading
8
10 """Spinbox that doesn't accept mouse scrolling as input"""
11
14
15 - def textFromValue(self, value):
16 return str( QtCore.QString("%L1").arg(float(value), 0, 'f', self.decimals()) )
17
18
19
20
21
23 """Widget for editing a float field, with a calculator"""
24
35 CustomEditor.__init__(self, parent)
36 action = QtGui.QAction(self)
37 action.setShortcut(Qt.Key_F3)
38 self.setFocusPolicy(Qt.StrongFocus)
39 self.precision = precision
40 self.spinBox = CustomDoubleSpinBox(parent)
41 self.spinBox.setReadOnly(not editable)
42 self.spinBox.setEnabled(editable)
43 self.spinBox.setDisabled(not editable)
44 self.spinBox.setRange(minimum, maximum)
45 self.spinBox.setDecimals(precision)
46 self.spinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
47 self.spinBox.setSingleStep(1.0)
48
49 prefix = str(prefix) + ' '
50 prefix = prefix.lstrip()
51
52 suffix = ' ' + str(suffix)
53 suffix = suffix.rstrip()
54
55 self.spinBox.setPrefix(prefix)
56 self.spinBox.setSuffix(suffix)
57 self.spinBox.addAction(action)
58 self.calculatorButton = QtGui.QToolButton()
59 icon = Icon('tango/16x16/apps/accessories-calculator.png').getQIcon()
60 self.calculatorButton.setIcon(icon)
61 self.calculatorButton.setAutoRaise(True)
62 self.calculatorButton.setFixedHeight(self.get_height())
63
64 self.connect(self.calculatorButton,
65 QtCore.SIGNAL('clicked()'),
66 lambda:self.popupCalculator(self.spinBox.value()))
67 self.connect(action,
68 QtCore.SIGNAL('triggered(bool)'),
69 lambda:self.popupCalculator(self.spinBox.value()))
70 self.connect(self.spinBox,
71 QtCore.SIGNAL('editingFinished()'),
72 lambda:self.editingFinished(self.spinBox.value()))
73
74 self.releaseKeyboard()
75
76 layout = QtGui.QHBoxLayout()
77 layout.setMargin(0)
78 layout.setSpacing(0)
79 layout.addWidget(self.spinBox)
80 if editable and calculator:
81 layout.addWidget(self.calculatorButton)
82 if not editable:
83 self.spinBox.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
84 self.spinBox.setEnabled(False)
85 self.setFocusProxy(self.spinBox)
86 self.setLayout(layout)
87
94
96 if self.spinBox.isEnabled() != editable:
97 if not editable:
98 self.layout().removeWidget(self.calculatorButton)
99 else:
100 self.layout().addWidget(self.calculatorButton)
101 self.spinBox.setEnabled(editable)
102
107
116
118 self.spinBox.setValue(float(value))
119 self.emit(QtCore.SIGNAL('editingFinished()'))
120
122 self.emit(QtCore.SIGNAL('editingFinished()'))
123
125 if background_color not in (None, ValueLoading):
126 selfpalette = self.spinBox.palette()
127 sbpalette = self.spinBox.palette()
128 lepalette = self.spinBox.lineEdit().palette()
129 for x in [QtGui.QPalette.Active, QtGui.QPalette.Inactive, QtGui.QPalette.Disabled]:
130 for y in [self.backgroundRole(), QtGui.QPalette.Window, QtGui.QPalette.Base]:
131 selfpalette.setColor(x, y, background_color)
132 for y in [self.spinBox.backgroundRole(), QtGui.QPalette.Window, QtGui.QPalette.Base]:
133 sbpalette.setColor(x, y, background_color)
134 for y in [self.spinBox.lineEdit().backgroundRole(), QtGui.QPalette.Window, QtGui.QPalette.Base]:
135 lepalette.setColor(x, y, background_color)
136 self.setPalette(selfpalette)
137 self.spinBox.setPalette(sbpalette)
138 self.spinBox.lineEdit().setPalette(lepalette)
139 return True
140 else:
141 return False
142