1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import os, sys, re, logging, string
20
21 import gtk, gobject, pango
22
23
24
25
26
27
28
30 __gsignals__ = {
31 "response" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT,)),
32 "close" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
33 }
34
36 super(MsgArea, self).__init__(**kwargs)
37
38 self.__contents = None
39 self.__changing_style = False
40
41 self.__main_hbox = gtk.HBox(False, 16)
42 self.__main_hbox.show()
43 self.__main_hbox.set_border_width(8)
44
45 self.__action_area = gtk.HBox(True, 4);
46 self.__action_area.show()
47
48
49
50 vb = gtk.VBox()
51 vb.pack_end(self.__action_area, False, False)
52
53 self.__main_hbox.pack_end (vb, False, False, 0)
54
55 self.pack_start(self.__main_hbox, True, True, 0)
56
57 self.set_app_paintable(True)
58
59 self.connect("expose-event", self.__paint)
60
61
62
63
64
65 self.__main_hbox.connect("style-set", self.__on_style_set)
66
67 self.add_buttons(buttons)
68
70 d = w.get_data('hotwire-msg-area-data')
71 if (d is None) and create:
72 d = {'respid': None}
73 w.set_data('hotwire-msg-area-data', d)
74 return d
75
82
88
90 gtk.Style.paint_flat_box(w.style,
91 w.window,
92 gtk.STATE_NORMAL,
93 gtk.SHADOW_OUT,
94 None,
95 w,
96 "tooltip",
97 w.allocation.x + 1,
98 w.allocation.y + 1,
99 w.allocation.width - 2,
100 w.allocation.height - 2)
101
102 return False
103
105 if self.__changing_style:
106 return
107
108 window = gtk.Window(gtk.WINDOW_POPUP);
109 window.set_name("gtk-tooltip")
110 window.ensure_style()
111 style = window.get_style()
112
113 self.__changing_style = True
114 self.set_style(style)
115 self.__changing_style = False
116
117 window.destroy()
118
119 self.queue_draw()
120
126
130
141
142 - def set_contents(self, contents):
143 self.__contents = contents
144 self.__main_hbox.pack_start(contents, True, True, 0)
145
146
154
159
161 for child in self.__action_area.get_children():
162 rd = self.__get_response_data(child, False)
163 if rd is not None and rd['respid'] == respid:
164 child.set_sensitive(setting)
165 break
166
168 for child in self.__action_area.get_children():
169 rd = self.__get_response_data(child, False)
170 if rd is not None and rd['respid'] == respid:
171 child.grab_default()
172 break
173
175 self.emit('response', respid)
176
178 b = gtk.Button(label=text)
179 b.set_focus_on_click(False)
180 img = gtk.Image()
181 img.set_from_stock(stockid, gtk.ICON_SIZE_BUTTON)
182 b.set_image(img)
183 b.show_all()
184 self.add_action_widget(b, respid)
185 return b
186
187 - def set_text_and_icon(self, stockid, primary_text, secondary_text=None):
188 hbox_content = gtk.HBox(False, 8)
189 hbox_content.show()
190
191 image = gtk.Image()
192 image.set_from_stock(stockid, gtk.ICON_SIZE_BUTTON)
193 image.show()
194 hbox_content.pack_start(image, False, False, 0)
195 image.set_alignment(0.5, 0.5)
196
197 vbox = gtk.VBox(False, 6)
198 vbox.show()
199 hbox_content.pack_start (vbox, True, True, 0)
200
201 primary_markup = "<b>%s</b>" % (primary_text,)
202 primary_label = gtk.Label(primary_markup)
203 primary_label.show()
204 vbox.pack_start(primary_label, True, True, 0)
205 primary_label.set_use_markup(True)
206 primary_label.set_line_wrap(True)
207 primary_label.set_alignment(0, 0.5)
208 primary_label.set_flags(gtk.CAN_FOCUS)
209 primary_label.set_selectable(True)
210
211 if secondary_text:
212 secondary_markup = "<small>%s</small>" % (secondary_text,)
213 secondary_label = gtk.Label(secondary_markup)
214 secondary_label.show()
215 vbox.pack_start(secondary_label, True, True, 0)
216 secondary_label.set_flags(gtk.CAN_FOCUS)
217 secondary_label.set_use_markup(True)
218 secondary_label.set_line_wrap(True)
219 secondary_label.set_selectable(True)
220 secondary_label.set_alignment(0, 0.5)
221
222 self.set_contents(hbox_content)
223
229
231 if msgarea == self.__msgarea:
232 self.clear()
233
235 if self.__msgarea is not None:
236 self.remove(self.__msgarea)
237 self.__msgarea.destroy()
238 self.__msgarea = None
239
240 - def new_from_text_and_icon(self, stockid, primary, secondary=None, buttons=[], timeout=0):
241 self.clear()
242 msgarea = self.__msgarea = MsgArea(buttons)
243 msgarea.set_text_and_icon(stockid, primary, secondary)
244 self.pack_start(msgarea, expand=True)
245
246 if timeout:
247 gobject.timeout_add(timeout*1000, self._timeout, msgarea)
248
249 return msgarea
250