~gdesklets-desklet-team/gdesklets/0.36

« back to all changes in this revision

Viewing changes to config/ConfigUnit.py

  • Committer: Robert Pastierovic
  • Date: 2007-10-07 10:08:42 UTC
  • Revision ID: pastierovic@gmail.com-20071007100842-fdvp2vzmqgh1j87k
merged 0.3x branch and basic documentation and some other changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from ConfigWidget import ConfigWidget
 
2
from utils.datatypes import *
 
3
from layout import Unit
 
4
 
 
5
import gtk
 
6
 
 
7
class ConfigUnit(ConfigWidget):
 
8
 
 
9
    def __init__(self, name, getter, setter, caller):
 
10
 
 
11
        self.__lock = False
 
12
 
 
13
        self.__units = []
 
14
        self.__prev_unit = Unit.UNIT_PX
 
15
 
 
16
 
 
17
        ConfigWidget.__init__(self, name, getter, setter, caller)
 
18
 
 
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,
 
24
                                self._getp, 2,
 
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")
 
30
 
 
31
 
 
32
 
 
33
    def get_widgets(self):
 
34
 
 
35
        low = self.get_prop("min")
 
36
        high = self.get_prop("max")
 
37
        digits = self.get_prop("digits")
 
38
 
 
39
        self.__label = gtk.Label("")
 
40
        self.__label.show()
 
41
        align = gtk.Alignment(0.0, 0.5, 0.0, 0.0)
 
42
        align.show()
 
43
        align.add(self.__label)
 
44
 
 
45
        box = gtk.HBox(spacing = 6)
 
46
        box.show()
 
47
 
 
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)
 
54
 
 
55
        self.__optmenu = gtk.combo_box_new_text()
 
56
        self.__optmenu.show()
 
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)
 
64
        #end for
 
65
        self.__optmenu.set_active(0)
 
66
 
 
67
        self.__optmenu.connect("changed", self.__on_change_unit)
 
68
        box.pack_end(self.__optmenu, False, False)
 
69
 
 
70
        return (align, box)
 
71
 
 
72
 
 
73
    def __on_change(self, src):
 
74
 
 
75
        size = self.__spin_button.get_value()
 
76
        unit = self.__units[self.__optmenu.get_active()]
 
77
 
 
78
        new_value = Unit.Unit(size, unit)
 
79
        self._setp("value", new_value)
 
80
        self._set_config(Unit.Unit(size, unit))
 
81
 
 
82
 
 
83
    def __on_change_unit(self, src):
 
84
 
 
85
        if (self.__lock): return
 
86
        
 
87
        unit = self.__units[src.get_active()]
 
88
        value = self.get_prop("value")
 
89
        
 
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()
 
95
 
 
96
        self.__spin_button.set_value(size)
 
97
 
 
98
 
 
99
    def _set_enabled(self, value): self.__spin_button.set_sensitive(value)
 
100
    def _set_label(self, value): self.__label.set_text(value)
 
101
 
 
102
 
 
103
    def _setp_lhd(self, key, value):
 
104
 
 
105
        low, high = self.__spin_button.get_range()
 
106
        if (key == "min"):
 
107
            self.__spin_button.set_range(value, high)
 
108
        elif (key == "max"):
 
109
            self.__spin_button.set_range(low, value)
 
110
        elif (key == "digits"):
 
111
            self.__spin_button.set_digits(value)
 
112
 
 
113
        self._setp(key, value)
 
114
 
 
115
 
 
116
    def _setp_increment(self, key, value):
 
117
 
 
118
        self.__spin_button.set_increments(value, value * 10);
 
119
        self._setp(key, value)
 
120
 
 
121
 
 
122
 
 
123
    def _setp_value(self, key, value):
 
124
 
 
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()
 
131
 
 
132
        self.__lock = True
 
133
        self.__optmenu.set_active(self.__units.index(unit))
 
134
        self.__spin_button.set_value(size)
 
135
        self.__lock = False
 
136
        self._setp(key, value)