15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
from gi.repository import GObject
19
from gi.repository import Gtk
39
41
last_selected = None
41
43
def __init__(self, homogeneous=False, spacing=6):
42
super(SpanSelector, self).__init__(
43
homogeneous=homogeneous, spacing=spacing)
44
gtk.HBox.__init__(self, homogeneous, spacing)
45
46
self.model = self._create_model()
46
47
self.combo = self._create_combobox(self.model)
47
48
self.entry = self._create_custom_entry()
49
label = Gtk.Label(label="Highlighting spans:")
50
label = gtk.Label("Highlighting spans:")
52
self.pack_start(label, False, True, True, 0)
53
self.pack_start(self.combo, False, False, True, 0)
54
self.pack_start(self.entry, False, False, True, 0)
53
self.pack_start(label, expand=False, fill=True)
54
self.pack_start(self.combo, expand=False, fill=False)
55
self.pack_start(self.entry, expand=False, fill=False)
56
57
def set_to_oldest_span(self, span):
57
58
"""Set the span associated with the "to Oldest Revision" entry."""
66
67
self.max_custom_spans = n
68
69
def activate(self, iter):
69
"""Activate the row pointed to by Gtk.TreeIter iter."""
70
"""Activate the row pointed to by gtk.TreeIter iter."""
70
71
index = self._get_index_from_iter(iter)
71
72
self.combo.set_active(index)
99
100
self.emit("span-changed", model.get_value(iter, SPAN_DAYS_COL))
101
102
def _activate_custom_span_cb(self, w):
103
self.entry.hide_all()
103
104
self.combo.show()
105
106
span = float(w.get_text())
136
137
def _create_model(self):
137
138
# [span in days, span as string, row is seperator?, row is select
139
m = Gtk.ListStore(GObject.TYPE_FLOAT,
141
GObject.TYPE_BOOLEAN,
142
GObject.TYPE_BOOLEAN)
140
m = gtk.ListStore(gobject.TYPE_FLOAT,
142
gobject.TYPE_BOOLEAN,
143
gobject.TYPE_BOOLEAN)
144
145
self.separator = [0., "", True, False]
158
159
def _create_combobox(self, model):
159
cb = Gtk.ComboBox(model)
160
cb = gtk.ComboBox(model)
160
161
cb.set_row_separator_func(
161
162
lambda m, i: m.get_value(i, SPAN_IS_SEPARATOR_COL))
162
cell = Gtk.CellRendererText()
163
cell = gtk.CellRendererText()
163
164
cb.pack_start(cell, False)
164
165
cb.add_attribute(cell, "text", SPAN_STR_COL)
165
166
cb.connect("changed", self._combo_changed_cb)
170
171
def _create_custom_entry(self):
171
entry = Gtk.HBox(False, 6)
172
entry = gtk.HBox(False, 6)
173
spin = Gtk.SpinButton(digits=2)
174
spin = gtk.SpinButton(digits=2)
174
175
spin.set_numeric(True)
175
176
spin.set_increments(1., 10.)
176
177
spin.set_range(0., 100 * 365) # I presume 100 years is sufficient
177
178
spin.connect("activate", self._activate_custom_span_cb)
178
179
spin.connect("show", lambda w: w.grab_focus())
180
label = Gtk.Label(label="Days")
181
label = gtk.Label("Days")
182
entry.pack_start(spin, False, False, True, 0)
183
entry.pack_start(label, False, False, True, 0)
183
entry.pack_start(spin, expand=False, fill=False)
184
entry.pack_start(label, expand=False, fill=False)
191
192
Callback signature: def callback(SpanSelector, span, [user_param, ...])
193
GObject.signal_new("span-changed", SpanSelector,
194
GObject.SignalFlags.RUN_LAST,
196
(GObject.TYPE_FLOAT,))
194
gobject.signal_new("span-changed", SpanSelector,
195
gobject.SIGNAL_RUN_LAST,
197
(gobject.TYPE_FLOAT,))
198
199
"""The "custom-span-added" signal is emitted after a custom span has been
199
200
added, but before it has been selected.
201
202
Callback signature: def callback(SpanSelector, span, [user_param, ...])
203
GObject.signal_new("custom-span-added", SpanSelector,
204
GObject.SignalFlags.RUN_LAST,
206
(GObject.TYPE_FLOAT,))
204
gobject.signal_new("custom-span-added", SpanSelector,
205
gobject.SIGNAL_RUN_LAST,
207
(gobject.TYPE_FLOAT,))