4 from choices
import settings
10 class Dialog(g
.Dialog
):
11 def __init__(self
, client
, parent
= None):
13 g
.Dialog
.__init
__(self
, _("SysBars Choices"), parent
,
14 buttons
= (g
.STOCK_CLOSE
, g
.RESPONSE_CLOSE
))
15 self
.set_has_separator(False)
17 #table = g.Table(2, 2)
18 #table.set_row_spacings(VSPACING)
20 hbox
= g
.HBox(False, 0)
21 l
= g
.Label(_("Label font"))
22 #l.set_alignment(0, 0.5)
23 hbox
.pack_start(l
, False, True, HSPACING
)
24 #table.attach(l, 0, 1, 0, 1, xoptions = g.FILL, xpadding = HSPACING)
25 self
.font_w
= g
.FontButton(settings
.get_label_font())
26 self
.font_w
.set_title(_("SysBars Label Font"))
27 self
.font_w
.connect("font-set", self
.font_set_cb
)
28 hbox
.pack_start(self
.font_w
, True, True, HSPACING
)
29 #table.attach(self.font_w, 1, 2, 0, 1, xpadding = HSPACING)
30 #l = g.Label(_("Label colour"))
31 #l.set_alignment(0, 0.5)
32 #table.attach(l, 0, 1, 1, 2, xoptions = g.FILL, xpadding = HSPACING)
33 #self.label_colour_w = g.ColorButton(settings.get_label_colour())
34 #self.label_colour_w.connect("color-set", self.label_colour_set_cb)
35 #table.attach(self.label_colour_w, 1, 2, 1, 2, xpadding = HSPACING)
36 #self.vbox.pack_start(table, padding = VSPACING)
37 self
.vbox
.pack_start(hbox
, padding
= VSPACING
)
39 b
= g
.CheckButton(_("Overlap labels and bars"))
40 b
.set_active(settings
.get_overlap())
41 b
.connect("toggled", self
.overlap_toggled_cb
)
42 self
.vbox
.pack_start(b
, padding
= VSPACING
)
45 l
= g
.Label(_("<b>System Monitor Bars</b>"))
46 l
.set_use_markup(True)
47 frame
.set_label_widget(l
)
48 frame
.set_shadow_type(g
.SHADOW_NONE
)
49 self
.vbox
.pack_start(frame
, padding
= VSPACING
)
51 self
.list_store
= g
.ListStore(gobject
.TYPE_STRING
,
52 gobject
.TYPE_PYOBJECT
)
53 for b
in plugins
.all_descs
:
54 iter = self
.list_store
.append()
55 self
.list_store
.set(iter, 0, b
.get_name(), 1, b
)
57 self
.tree_view
= g
.TreeView(self
.list_store
)
58 self
.tree_view
.append_column( \
59 g
.TreeViewColumn(None, g
.CellRendererText(), text
= 0))
60 self
.tree_view
.set_headers_visible(False)
61 self
.tree_view
.connect("row-activated", self
.row_activated_cb
)
63 scroll
= g
.ScrolledWindow()
64 scroll
.set_policy(g
.POLICY_AUTOMATIC
, g
.POLICY_AUTOMATIC
)
65 scroll
.set_shadow_type(g
.SHADOW_ETCHED_IN
)
66 scroll
.set_size_request(200, -1)
67 scroll
.add(self
.tree_view
)
69 vbox
= g
.VBox(False, VSPACING
)
70 hbox
= g
.HBox(True, HSPACING
)
71 self
.up_button
= g
.Button(stock
= g
.STOCK_GO_UP
)
72 self
.up_button
.connect("clicked", self
.up_cb
)
73 hbox
.pack_start(self
.up_button
)
74 self
.down_button
= g
.Button(stock
= g
.STOCK_GO_DOWN
)
75 self
.down_button
.connect("clicked", self
.down_cb
)
76 hbox
.pack_start(self
.down_button
)
77 vbox
.pack_end(hbox
, False, False)
78 self
.add_button
= g
.Button(stock
= g
.STOCK_ADD
)
79 self
.add_button
.connect("button-press-event", self
.add_cb
)
80 vbox
.pack_end(self
.add_button
, False, False)
81 self
.edit_button
= g
.Button(stock
= g
.STOCK_EDIT
)
82 self
.edit_button
.connect("clicked", self
.edit_cb
)
83 vbox
.pack_end(self
.edit_button
, False, False)
84 self
.del_button
= g
.Button(stock
= g
.STOCK_DELETE
)
85 self
.del_button
.connect("clicked", self
.delete_cb
)
86 vbox
.pack_end(self
.del_button
, False, False)
89 hbox
.pack_start(scroll
, padding
= HSPACING
)
90 hbox
.pack_start(vbox
, False, True, padding
= HSPACING
)
95 self
.tree_view
.connect("cursor-changed", self
.update_buttons
)
96 self
.tree_view
.connect("move-cursor", self
.update_buttons
)
98 def update_buttons(self
, *args
):
99 sel
= self
.tree_view
.get_selection()
100 has_sel
= sel
!= None and sel
.get_selected()[1] != None
101 n_items
= self
.list_store
.iter_n_children(None)
102 moren1
= has_sel
and n_items
> 1
103 self
.edit_button
.set_sensitive(has_sel
)
104 self
.del_button
.set_sensitive(moren1
)
105 self
.up_button
.set_sensitive(moren1
and \
106 not sel
.iter_is_selected(self
.list_store
.get_iter_first()))
107 self
.down_button
.set_sensitive(moren1
and \
108 self
.list_store
.iter_next(sel
.get_selected()[1]) != None)
110 def get_selected_iter(self
):
111 return self
.tree_view
.get_selection().get_selected()[1]
113 def run_edit_dialog(self
, iter):
114 desc
= self
.list_store
.get_value(iter, 1)
115 edit_dialog
= plugins
.dialog_factory(self
, False, desc
,
116 self
.client
.get_bar_widget(desc
.num
))
117 edit_dialog
.run_apply_destroy()
118 self
.update_buttons()
120 def update_bar_name(self
, desc
):
122 def find_desc(m
, p
, i
, u
):
123 if self
.list_store
.get_value(i
, 1) == desc
:
125 self
.list_store
.foreach(find_desc
, u
)
126 self
.list_store
.set(u
[0], 0, desc
.get_name())
128 def font_set_cb(self
, fw
):
129 f
= fw
.get_font_name()
130 settings
.set_label_font(f
)
131 self
.client
.update_label_font(f
)
133 def overlap_toggled_cb(self
, b
):
134 overlap
= b
.get_active()
135 settings
.set_overlap(overlap
)
136 self
.client
.update_overlap(overlap
)
139 #def label_colour_set_cb(self, cw):
140 # settings.set_label_colour(cw.get_color())
142 def edit_cb(self
, widget
):
143 iter = self
.get_selected_iter()
144 self
.run_edit_dialog(iter)
146 def row_activated_cb(self
, view
, path
, column
):
147 iter = self
.list_store
.get_iter(path
)
148 self
.run_edit_dialog(iter)
150 def add_cb(self
, widget
, event
):
151 if event
.button
!= 1:
154 for t
, n
in plugins
.types
.items():
156 i
.connect("activate", self
.add_menu_cb
, t
)
159 menu
.popup(None, None, None, event
.button
, event
.time
)
162 def add_menu_cb(self
, widget
, type):
163 num
= self
.list_store
.iter_n_children(None)
164 desc
= plugins
.desc_factory(num
, type)
165 add_dialog
= plugins
.dialog_factory(self
, True, desc
)
166 if add_dialog
.run_apply_destroy() == g
.RESPONSE_OK
:
167 iter = self
.list_store
.append()
168 self
.list_store
.set(iter, 0, desc
.get_name(), 1, desc
)
169 settings
.set_bar_type(num
, type)
170 settings
.set_num_bars(num
+ 1)
171 plugins
.all_descs
.append(desc
)
172 self
.client
.add_bar(num
)
173 self
.update_buttons()
175 def fix_nums_after_delete(self
, model
, path
, iter, data
):
176 if data
[1] >= data
[0]:
177 desc
= model
.get_value(iter, 1)
178 desc
.change_num(data
[1])
181 def delete_cb(self
, widget
):
182 iter = self
.get_selected_iter()
183 desc
= self
.list_store
.get_value(iter, 1)
185 self
.list_store
.remove(iter)
186 del plugins
.all_descs
[num
]
187 self
.list_store
.foreach(self
.fix_nums_after_delete
, [num
, 0])
188 settings
.set_num_bars(self
.list_store
.iter_n_children(None))
190 self
.update_buttons()
192 def up_cb(self
, widget
):
193 i2
= self
.get_selected_iter()
194 d2
= self
.list_store
.get_value(i2
, 1)
195 i1
= self
.list_store
.get_iter_first()
197 next
= self
.list_store
.iter_next(i1
)
198 dn
= self
.list_store
.get_value(next
, 1)
205 def down_cb(self
, widget
):
206 i1
= self
.get_selected_iter()
207 i2
= self
.list_store
.iter_next(i1
)
210 def swap(self
, i1
, i2
):
211 d1
= self
.list_store
.get_value(i1
, 1)
212 d2
= self
.list_store
.get_value(i2
, 1)
215 self
.list_store
.swap(i1
, i2
)
216 plugins
.all_descs
[n1
] = d2
217 plugins
.all_descs
[n2
] = d1
221 self
.update_buttons()
225 def run_dialog(client
, parent
= None):
226 if parent
and not isinstance(parent
, g
.Window
):
228 d
= Dialog(client
, parent
)