Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/chat/ChatToolbar.py
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2006-06-15 20:51:30 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2006-06-15 20:51:30 (GMT)
commit1b611fc842f29270479013cd0b8635d3efcccdfe (patch)
treebe515fe519e580f7b3e3478ca47bc4e8041c49b5 /sugar/chat/ChatToolbar.py
parentc05bc5a669c8a333e902ae02ab3d55c4307cf56f (diff)
More chat refactoring
Diffstat (limited to 'sugar/chat/ChatToolbar.py')
-rw-r--r--sugar/chat/ChatToolbar.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/sugar/chat/ChatToolbar.py b/sugar/chat/ChatToolbar.py
new file mode 100644
index 0000000..f239116
--- /dev/null
+++ b/sugar/chat/ChatToolbar.py
@@ -0,0 +1,124 @@
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+from sugar.chat.Emoticons import Emoticons
+import richtext
+
+class ChatToolbar(gtk.HBox):
+ def __init__(self, rich_buf):
+ gtk.HBox.__init__(self)
+
+ self._emt_popup = None
+
+ spring = gtk.Label('')
+ self.pack_start(spring, True)
+ spring.show()
+
+ toolbar = richtext.RichTextToolbar(rich_buf)
+
+ item = gtk.ToolButton()
+
+ e_hbox = gtk.HBox(False, 6)
+
+ e_image = gtk.Image()
+ e_image.set_from_icon_name('stock_smiley-1', gtk.ICON_SIZE_SMALL_TOOLBAR)
+ e_hbox.pack_start(e_image)
+ e_image.show()
+
+ arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE)
+ e_hbox.pack_start(arrow)
+ arrow.show()
+
+ item.set_icon_widget(e_hbox)
+ item.set_homogeneous(False)
+ item.connect("clicked", self.__emoticons_button_clicked_cb)
+ toolbar.insert(item, -1)
+ item.show()
+
+ separator = gtk.SeparatorToolItem()
+ toolbar.insert(separator, -1)
+ separator.show()
+
+ item = gtk.MenuToolButton(None, "Links")
+ item.set_menu(gtk.Menu())
+ item.connect("show-menu", self.__show_link_menu_cb)
+ toolbar.insert(item, -1)
+ item.show()
+
+ self.pack_start(toolbar)
+ toolbar.show()
+
+ spring = gtk.Label('')
+ self.pack_start(spring, True)
+ spring.show()
+
+ def __link_activate_cb(self, item, link):
+ buf = self._editor.get_buffer()
+ buf.append_link(link['title'], link['address'])
+
+ def __show_link_menu_cb(self, button):
+ menu = gtk.Menu()
+
+ links = self.__get_browser_shell().get_links()
+
+ for link in links:
+ item = gtk.MenuItem(link['title'], False)
+ item.connect("activate", self.__link_activate_cb, link)
+ menu.append(item)
+ item.show()
+
+ button.set_menu(menu)
+
+
+ def _create_emoticons_popup(self):
+ model = gtk.ListStore(gtk.gdk.Pixbuf, str)
+
+ for name in Emoticons.get_instance().get_all():
+ icon_theme = gtk.icon_theme_get_default()
+ pixbuf = icon_theme.load_icon(name, 16, 0)
+ model.append([pixbuf, name])
+
+ icon_view = gtk.IconView(model)
+ icon_view.connect('selection-changed', self.__emoticon_selection_changed_cb)
+ icon_view.set_pixbuf_column(0)
+ icon_view.set_selection_mode(gtk.SELECTION_SINGLE)
+
+ frame = gtk.Frame()
+ frame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ frame.add(icon_view)
+ icon_view.show()
+
+ window = gtk.Window(gtk.WINDOW_POPUP)
+ window.add(frame)
+ frame.show()
+
+ return window
+
+ def __emoticon_selection_changed_cb(self, icon_view):
+ items = icon_view.get_selected_items()
+ if items:
+ model = icon_view.get_model()
+ icon_name = model[items[0]][1]
+ self._editor.get_buffer().append_icon(icon_name)
+ self._emt_popup.hide()
+
+ def __emoticons_button_clicked_cb(self, button):
+ # FIXME grabs...
+ if not self._emt_popup:
+ self._emt_popup = self._create_emoticons_popup()
+
+ if self._emt_popup.get_property('visible'):
+ self._emt_popup.hide()
+ else:
+ width = 180
+ height = 130
+
+ self._emt_popup.set_default_size(width, height)
+
+ [x, y] = button.window.get_origin()
+ x += button.allocation.x
+ y += button.allocation.y - height
+ self._emt_popup.move(x, y)
+
+ self._emt_popup.show()