1
from ConfigWidget import ConfigWidget
2
from utils.datatypes import *
3
from layout import Unit
7
class ConfigUnit(ConfigWidget):
9
def __init__(self, name, getter, setter, caller):
14
self.__prev_unit = Unit.UNIT_PX
17
ConfigWidget.__init__(self, name, getter, setter, caller)
19
self._register_property("min", TYPE_FLOAT, self._setp_lhd,
20
self._getp, 0.0, doc = "Lower bound")
21
self._register_property("max", TYPE_FLOAT, self._setp_lhd,
22
self._getp, 9999.0, doc = "Upper bound")
23
self._register_property("digits", TYPE_INT, self._setp_lhd,
25
doc = "Numbers of decimal digits")
26
self._register_property("increment", TYPE_FLOAT, self._setp_increment,
27
self._getp, 1, doc = "Size of increments")
28
self._register_property("value", TYPE_UNIT, self._setp_value,
29
self._getp, Unit.ZERO, doc = "Value")
33
def get_widgets(self):
35
low = self.get_prop("min")
36
high = self.get_prop("max")
37
digits = self.get_prop("digits")
39
self.__label = gtk.Label("")
41
align = gtk.Alignment(0.0, 0.5, 0.0, 0.0)
43
align.add(self.__label)
45
box = gtk.HBox(spacing = 6)
48
adjustment = gtk.Adjustment(0, -0xffffff, 0xffffff, 1, 1, 0)
49
self.__spin_button = gtk.SpinButton(adjustment, 1, digits)
50
self.__spin_button.set_numeric(True)
51
self.__spin_button.show()
52
self.__spin_button.connect("value-changed", self.__on_change)
53
box.pack_start(self.__spin_button, True, True)
55
self.__optmenu = gtk.combo_box_new_text()
57
for unit, name in ((Unit.UNIT_PX, _("pixel")),
58
(Unit.UNIT_PT, _("point")),
59
(Unit.UNIT_CM, _("cm")),
60
(Unit.UNIT_IN, _("inch")),
61
(Unit.UNIT_PERCENT, "%")):
62
self.__units.append(unit)
63
self.__optmenu.append_text(name)
65
self.__optmenu.set_active(0)
67
self.__optmenu.connect("changed", self.__on_change_unit)
68
box.pack_end(self.__optmenu, False, False)
73
def __on_change(self, src):
75
size = self.__spin_button.get_value()
76
unit = self.__units[self.__optmenu.get_active()]
78
new_value = Unit.Unit(size, unit)
79
self._setp("value", new_value)
80
self._set_config(Unit.Unit(size, unit))
83
def __on_change_unit(self, src):
85
if (self.__lock): return
87
unit = self.__units[src.get_active()]
88
value = self.get_prop("value")
90
if (unit == Unit.UNIT_PX): size = value.as_px()
91
elif (unit == Unit.UNIT_PT): size = value.as_pt()
92
elif (unit == Unit.UNIT_CM): size = value.as_cm()
93
elif (unit == Unit.UNIT_IN): size = value.as_in()
94
elif (unit == Unit.UNIT_PERCENT): size = value.as_percent()
96
self.__spin_button.set_value(size)
99
def _set_enabled(self, value): self.__spin_button.set_sensitive(value)
100
def _set_label(self, value): self.__label.set_text(value)
103
def _setp_lhd(self, key, value):
105
low, high = self.__spin_button.get_range()
107
self.__spin_button.set_range(value, high)
109
self.__spin_button.set_range(low, value)
110
elif (key == "digits"):
111
self.__spin_button.set_digits(value)
113
self._setp(key, value)
116
def _setp_increment(self, key, value):
118
self.__spin_button.set_increments(value, value * 10);
119
self._setp(key, value)
123
def _setp_value(self, key, value):
125
unit = value.get_unit()
126
if (unit == Unit.UNIT_PX): size = value.as_px()
127
elif (unit == Unit.UNIT_PT): size = value.as_pt()
128
elif (unit == Unit.UNIT_CM): size = value.as_cm()
129
elif (unit == Unit.UNIT_IN): size = value.as_in()
130
elif (unit == Unit.UNIT_PERCENT): size = value.as_percent()
133
self.__optmenu.set_active(self.__units.index(unit))
134
self.__spin_button.set_value(size)
136
self._setp(key, value)