1 from PyQt4 import QtCore, QtGui
2 from PyQt4.QtCore import Qt
3
4 from customeditor import CustomEditor, editingFinished
5 from camelot.view.art import Icon
6 from camelot.core import constants
7 from math import floor
8
10 """Spinbox that doesn't accept mouse scrolling as input"""
11
14
16 """Widget for editing an integer field, with a calculator"""
17
27 CustomEditor.__init__(self, parent)
28 action = QtGui.QAction(self)
29 action.setShortcut(Qt.Key_F3)
30 self.setFocusPolicy(Qt.StrongFocus)
31
32 prefix = str(prefix) + ' '
33 prefix = prefix.lstrip()
34
35 suffix = ' ' + str(suffix)
36 suffix = suffix.rstrip()
37
38 self.spinBox = CustomDoubleSpinBox(parent)
39 self.spinBox.setPrefix(prefix)
40 self.spinBox.setSuffix(suffix)
41 self.spinBox.setReadOnly(not editable)
42 self.spinBox.setRange(minimum, maximum)
43 self.spinBox.setDecimals(0)
44 self.spinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
45 self.spinBox.setSingleStep(1)
46 self.spinBox.addAction(action)
47 self.calculatorButton = QtGui.QToolButton()
48 icon = Icon('tango/16x16/apps/accessories-calculator.png').getQIcon()
49 self.calculatorButton.setIcon(icon)
50 self.calculatorButton.setAutoRaise(True)
51 self.calculatorButton.setFixedHeight(self.get_height())
52
53 self.connect(self.calculatorButton,
54 QtCore.SIGNAL('clicked()'),
55 lambda:self.popupCalculator(self.spinBox.value()))
56 self.connect(action,
57 QtCore.SIGNAL('triggered(bool)'),
58 lambda:self.popupCalculator(self.spinBox.value()))
59 self.connect(self.spinBox,
60 QtCore.SIGNAL('editingFinished()'),
61 lambda:self.editingFinished(self.spinBox.value()))
62
63 layout = QtGui.QHBoxLayout()
64 layout.setMargin(0)
65 layout.setSpacing(0)
66 layout.addWidget(self.spinBox)
67 if editable and calculator:
68 layout.addWidget(self.calculatorButton)
69 if not editable:
70 self.spinBox.setEnabled(False)
71 self.spinBox.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
72 self.setFocusProxy(self.spinBox)
73 self.setLayout(layout)
74
82
87
89 if self.spinBox.isEnabled() != editable:
90 if not editable:
91 self.layout().removeWidget(self.calculatorButton)
92 else:
93 self.layout().addWidget(self.calculatorButton)
94 self.spinBox.setEnabled(editable)
95
104
108
111