From 5575072b9b66d2b4aa63fa6cba0530a7d8bc5e76 Mon Sep 17 00:00:00 2001 From: Jezra Date: Sat, 26 Apr 2014 13:10:52 -0700 Subject: Added Gtk Tray UI (thanks padfoot) Added active/inactive icons --- GtkTrayUI.py | 100 ++++++++++++++++++++++++++++++++++++++++++++ assets/blather.svg | 91 +++++++++++++++++++++++++++------------- assets/blather_inactive.png | Bin 0 -> 13379 bytes assets/blathersrc.png | Bin 0 -> 27324 bytes data/icon_inactive.png | Bin 0 -> 13379 bytes 5 files changed, 161 insertions(+), 30 deletions(-) create mode 100644 GtkTrayUI.py create mode 100644 assets/blather_inactive.png create mode 100644 assets/blathersrc.png create mode 100644 data/icon_inactive.png diff --git a/GtkTrayUI.py b/GtkTrayUI.py new file mode 100644 index 0000000..24e2b57 --- /dev/null +++ b/GtkTrayUI.py @@ -0,0 +1,100 @@ +import sys +import gobject + +import pygtk +import gtk + +class UI(gobject.GObject): + __gsignals__ = { + 'command' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) + } + + def __init__(self,args, continuous): + gobject.GObject.__init__(self) + self.continuous = continuous + + self.statusicon = gtk.StatusIcon() + self.statusicon.set_title("Blather") + self.statusicon.set_name("Blather") + self.statusicon.set_tooltip_text("Blather - Idle") + self.statusicon.set_has_tooltip(True) + self.statusicon.connect("activate", self.continuous_toggle) + self.statusicon.connect("popup-menu", self.popup_menu) + + self.menu = gtk.Menu() + self.menu_listen = gtk.MenuItem('Listen') + self.menu_continuous = gtk.CheckMenuItem('Continuous') + self.menu_quit = gtk.MenuItem('Quit') + self.menu.append(self.menu_listen) + self.menu.append(self.menu_continuous) + self.menu.append(self.menu_quit) + self.menu_listen.connect("activate", self.toggle_listen) + self.menu_continuous.connect("toggled", self.toggle_continuous) + self.menu_quit.connect("activate", self.quit) + self.menu.show_all() + + def continuous_toggle(self, item): + checked = self.menu_continuous.get_active() + self.menu_continuous.set_active(not checked) + + def toggle_continuous(self, item): + checked = self.menu_continuous.get_active() + self.menu_listen.set_sensitive(not checked) + if checked: + self.menu_listen.set_label("Listen") + self.emit('command', "continuous_listen") + self.statusicon.set_tooltip_text("Blather - Listening") + self.set_icon_active() + else: + self.set_icon_inactive() + self.statusicon.set_tooltip_text("Blather - Idle") + self.emit('command', "continuous_stop") + + def toggle_listen(self, item): + val = self.menu_listen.get_label() + if val == "Listen": + self.emit("command", "listen") + self.menu_listen.set_label("Stop") + self.statusicon.set_tooltip_text("Blather - Listening") + else: + self.icon_inactive() + self.menu_listen.set_label("Listen") + self.emit("command", "stop") + self.statusicon.set_tooltip_text("Blather - Idle") + + def popup_menu(self, item, button, time): + self.menu.popup(None, None, gtk.status_icon_position_menu, button, time, item) + + def run(self): + #set the icon + self.set_icon_inactive() + if self.continuous: + self.menu_continuous.set_active(True) + self.set_icon_active() + else: + self.menu_continuous.set_active(False) + self.statusicon.set_visible(True) + + def quit(self, item): + self.statusicon.set_visible(False) + self.emit("command", "quit") + + def finished(self, text): + print text + if not self.menu_continuous.get_active(): + self.menu_listen.set_label("Listen") + self.statusicon.set_from_icon_name("blather_stopped") + self.statusicon.set_tooltip_text("Blather - Idle") + + def set_icon_active_asset(self, i): + self.icon_active = i + + def set_icon_inactive_asset(self, i): + self.icon_inactive = i + + def set_icon_active(self): + self.statusicon.set_from_file( self.icon_active ) + + def set_icon_inactive(self): + self.statusicon.set_from_file( self.icon_inactive ) + diff --git a/assets/blather.svg b/assets/blather.svg index 1e10ee7..e7e3446 100644 --- a/assets/blather.svg +++ b/assets/blather.svg @@ -14,7 +14,10 @@ id="svg2" version="1.1" inkscape:version="0.48.4 r9939" - sodipodi:docname="blather.svg"> + sodipodi:docname="blather.svg" + inkscape:export-filename="/storage/projects/blather/assets/blathersrc.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> @@ -43,7 +46,7 @@ image/svg+xml - + @@ -51,35 +54,63 @@ inkscape:groupmode="layer" id="layer2" inkscape:label="Layer" - style="display:inline"> - - + style="display:inline" /> - - + + + B + x="185.41168" + style="font-size:130.46780396px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#008900;stroke-width:5.77600002;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Sans" + xml:space="preserve">B + + + + + B + diff --git a/assets/blather_inactive.png b/assets/blather_inactive.png new file mode 100644 index 0000000..63d1572 Binary files /dev/null and b/assets/blather_inactive.png differ diff --git a/assets/blathersrc.png b/assets/blathersrc.png new file mode 100644 index 0000000..fb187e4 Binary files /dev/null and b/assets/blathersrc.png differ diff --git a/data/icon_inactive.png b/data/icon_inactive.png new file mode 100644 index 0000000..63d1572 Binary files /dev/null and b/data/icon_inactive.png differ -- cgit 1.4.1