131
131
self.tabs = gtk.Notebook()
132
132
self.tabs.set_property("homogeneous", False)
133
133
self.tabs.set_scrollable(True)
134
self.messages_view = self.add_tab(self.client.receive, _("Messages"), show_icon = "go-home")
135
self.add_tab(self.client.responses, _("Replies"), show_icon = "mail-reply-all")
134
self.messages_view = self.add_msg_tab(self.client.receive, _("Messages"), show_icon = "go-home")
135
self.add_msg_tab(self.client.responses, _("Replies"), show_icon = "mail-reply-all")
137
137
saved_position = config.GCONF.get_list("%s/%s" % (config.GCONF_PREFERENCES_DIR, "saved_position"), config.gconf.VALUE_INT)
138
138
if saved_position:
148
148
if saved_queries:
149
149
for query in saved_queries:
150
150
if query.startswith("#"):
151
self.add_tab(functools.partial(self.client.tag, query),
151
self.add_msg_tab(functools.partial(self.client.tag, query),
152
152
query.replace("#", ""), True, gtk.STOCK_INFO, False, query)
153
153
elif microblog.support.LINK_PARSE.match(query):
154
154
self.add_tab(functools.partial(self.client.search_url, query),
155
155
urlparse.urlparse(query)[1], True, gtk.STOCK_FIND, True, query)
156
156
elif len(query) > 0:
157
self.add_tab(functools.partial(self.client.search, query),
157
self.add_msg_tab(functools.partial(self.client.search, query),
158
158
query, True, gtk.STOCK_FIND, False, query)
160
160
#self.add_map_tab(self.client.friend_positions, "Location")
303
303
query = entry.get_text()
305
305
if query.startswith("#"):
306
view = self.add_tab(functools.partial(self.client.tag, query),
306
view = self.add_msg_tab(functools.partial(self.client.tag, query),
307
307
query.replace("#", ""), True, gtk.STOCK_INFO, True, query)
308
308
elif microblog.support.LINK_PARSE.match(query):
309
309
view = self.add_tab(functools.partial(self.client.search_url, query),
310
310
urlparse.urlparse(query)[1], True, gtk.STOCK_FIND, True, query)
311
311
elif len(query) > 0:
312
view = self.add_tab(functools.partial(self.client.search, query),
312
view = self.add_msg_tab(functools.partial(self.client.search, query),
313
313
query, True, gtk.STOCK_FIND, True, query)
316
316
self.update([view.get_parent()])
318
def add_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
319
view = gwui.MessageView(self.preferences["theme"])
320
view.link_handler = self.on_link_clicked
321
view.data_retrieval_handler = data_handler
322
view.config_retrieval_handler = self.get_account_config
318
def add_scrolled_parent(self, view, text, show_close=False, show_icon=None, make_active=False, save=None):
324
319
scroll = gtk.ScrolledWindow()
325
320
scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
346
341
if make_active: self.tabs.set_current_page(self.tabs.page_num(scroll))
348
343
btn.connect("clicked", self.on_tab_close, scroll)
345
def add_msg_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
346
view = gwui.MessageView(self.preferences["theme"])
347
view.link_handler = self.on_link_clicked
348
view.data_retrieval_handler = data_handler
349
view.config_retrieval_handler = self.get_account_config
351
self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save)
354
def add_user_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
355
view = gwui.UserView(self.preferences["theme"])
356
view.link_handler = self.on_link_clicked
357
view.data_retrieval_handler = data_handler
358
view.config_retrieval_handler = self.get_account_config
360
self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save)
351
363
def add_map_tab(self, data_handler, text, show_close = True, show_icon = "applications-internet"):
354
366
view.data_retrieval_handler = data_handler
355
367
view.config_retrieval_handler = self.get_account_config
358
#scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
361
img = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
365
btn.set_relief(gtk.RELIEF_NONE)
366
btn.set_name("tab-close-button")
368
hb = gtk.HBox(spacing=2)
370
hb.pack_start(gtk.image_new_from_icon_name(show_icon, gtk.ICON_SIZE_MENU))
371
hb.pack_start(gtk.Label(text))
372
if show_close: hb.pack_end(btn, False, False)
375
self.tabs.append_page(scroll, hb)
376
self.tabs.set_tab_reorderable(scroll, True)
379
btn.connect("clicked", self.on_tab_close, scroll)
369
self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save)
382
372
def on_tab_close(self, w, e):
468
458
if acct["protocol"] in microblog.PROTOCOLS.keys():
469
459
if hasattr(message.client, "can_reply"):
470
view = self.add_tab(lambda: self.client.thread(message), "Jaiku Replies", True)
460
view = self.add_msg_tab(lambda: self.client.thread(message), "Jaiku Replies", True)
471
461
view.load_messages()
472
462
view.load_preferences(self.get_account_config())
480
470
elif uri.startswith("gwibber:search"):
481
471
query = uri.split("/")[-1]
482
view = self.add_tab(lambda: self.client.search(query), query, True, gtk.STOCK_FIND, True, query)
472
view = self.add_msg_tab(lambda: self.client.search(query), query, True, gtk.STOCK_FIND, True, query)
483
473
self.update([view.get_parent()])
485
475
elif uri.startswith("gwibber:tag"):
486
476
query = uri.split("/")[-1]
487
view = self.add_tab(lambda: self.client.tag(query),
477
view = self.add_msg_tab(lambda: self.client.tag(query),
488
478
query, True, gtk.STOCK_INFO, True, query)
489
479
self.update([view.get_parent()])
498
488
msg = view.message_store[int(uri.split("/")[-1])]
499
489
if hasattr(msg, "original_title"): tab_label = msg.original_title
500
490
else: tab_label = msg.text
501
t = self.add_tab(lambda: self.client.thread(msg),
491
t = self.add_msg_tab(lambda: self.client.thread(msg),
502
492
microblog.support.truncate(tab_label), True, "mail-reply-all", True)
503
493
self.update([t.get_parent()])
495
elif uri.startswith("gwibber:user"):
496
query = uri.split("/")[-1]
497
view = self.add_user_tab(lambda: self.client.user_messages(query),
498
query, True, gtk.STOCK_INFO, True)
499
self.update([view.get_parent()])
505
501
else: return False
507
503
def on_input_context_menu(self, obj, menu):