From 60b56d46490d04838ce903dca04fda5cdad1ac4a Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Tue, 17 Feb 2004 02:23:38 +0000 Subject: [PATCH] Many changes : New class and variable names New variable fot glade file Button in chat window instead of label New image loader --- plugins/gtkgui/about.png | Bin 0 -> 3846 bytes plugins/gtkgui/gtkgui.glade | 1435 ++++++++++++++---------- plugins/gtkgui/gtkgui.py | 295 +++-- plugins/gtkgui/icons/sun/away.xpm | 125 +++ plugins/gtkgui/icons/sun/closed.xpm | 21 + plugins/gtkgui/icons/sun/dnd.xpm | 64 ++ plugins/gtkgui/icons/sun/message.xpm | 21 + plugins/gtkgui/icons/sun/offline.xpm | 62 + plugins/gtkgui/icons/sun/online.xpm | 81 ++ plugins/gtkgui/icons/sun/opened.xpm | 21 + plugins/gtkgui/icons/sun/requested.xpm | 21 + plugins/gtkgui/icons/sun/xa.xpm | 68 ++ 12 files changed, 1505 insertions(+), 709 deletions(-) create mode 100644 plugins/gtkgui/about.png create mode 100644 plugins/gtkgui/icons/sun/away.xpm create mode 100644 plugins/gtkgui/icons/sun/closed.xpm create mode 100644 plugins/gtkgui/icons/sun/dnd.xpm create mode 100644 plugins/gtkgui/icons/sun/message.xpm create mode 100644 plugins/gtkgui/icons/sun/offline.xpm create mode 100644 plugins/gtkgui/icons/sun/online.xpm create mode 100644 plugins/gtkgui/icons/sun/opened.xpm create mode 100644 plugins/gtkgui/icons/sun/requested.xpm create mode 100644 plugins/gtkgui/icons/sun/xa.xpm diff --git a/plugins/gtkgui/about.png b/plugins/gtkgui/about.png new file mode 100644 index 0000000000000000000000000000000000000000..c33125c7bdbbccd1bef3afdaccf566c4235bb05d GIT binary patch literal 3846 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 IM6N<$f-&NVYXATM literal 0 HcmV?d00001 diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade index cfcdca28e..5c68c3ec7 100644 --- a/plugins/gtkgui/gtkgui.glade +++ b/plugins/gtkgui/gtkgui.glade @@ -510,23 +510,18 @@ - + True + True Anonymous <id@server/res> - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 + True + GTK_RELIEF_NONE + 0 - True - True + False + False @@ -830,6 +825,7 @@ True + about.png 0.5 0.5 0 @@ -847,12 +843,11 @@ True <b>Gajim</b> -Copyright © 2003 Gajim Team +Copyright © 2003-2004 Gajim Team <b>Gajim Team</b> Vincent Hanquez (tab@tuxfamily.org) -Yann Le Boulanger (asterix@crans.org) -David Ferlier (david@yazzy.org) +Yann Le Boulanger (asterix@crans.org) False True GTK_JUSTIFY_LEFT @@ -1442,12 +1437,29 @@ David Ferlier (david@yazzy.org) False 0 + + + True + gtk-redo + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + True + True + + + 145 8 True - Send subscription to : + Send subscription to : False False GTK_JUSTIFY_RIGHT @@ -1501,20 +1513,56 @@ David Ferlier (david@yazzy.org) GTK_CORNER_TOP_LEFT - + True - True - True - GTK_JUSTIFY_LEFT - GTK_WRAP_WORD - True - 0 - 0 - 0 - 0 - 0 - 0 - I would like to add you to my contact list, please. + GTK_SHADOW_IN + + + + 2 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + True + True + GTK_JUSTIFY_LEFT + GTK_WRAP_WORD + True + 0 + 0 + 0 + 0 + 0 + 0 + I would like to add you to my contact list, please. + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + @@ -1541,7 +1589,7 @@ David Ferlier (david@yazzy.org) 10 True GTK_BUTTONBOX_END - 30 + 10 @@ -2527,7 +2575,7 @@ David Ferlier (david@yazzy.org) - + True Préférences GTK_WINDOW_TOPLEVEL @@ -2544,374 +2592,62 @@ David Ferlier (david@yazzy.org) 0 - + True - True - True - True - GTK_POS_TOP - False - False + False + 0 - + + 6 True + GTK_BUTTONBOX_SPREAD + 0 - - 200 - 200 + True - 0 - 0.5 - GTK_SHADOW_ETCHED_IN + True + True + GTK_RELIEF_HALF + - - True - 3 - 2 - False - 10 - 3 - - - - 100 - True - Outgoing Messages - False - False - GTK_JUSTIFY_CENTER - True - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - 100 - True - Status Messages - False - False - GTK_JUSTIFY_CENTER - True - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - 100 - True - Incomming Messages - False - False - GTK_JUSTIFY_CENTER - True - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - True - GTK_RELIEF_NORMAL - - - - - 40 - 20 - True - - - - - 1 - 2 - 1 - 2 - fill - - - - - - - True - True - GTK_RELIEF_NORMAL - - - - - 40 - 20 - True - - - - - 1 - 2 - 2 - 3 - fill - - - - - - - True - True - GTK_RELIEF_NORMAL - - - - - 40 - 20 - True - - - - - 1 - 2 - 0 - 1 - fill - - - - - - - - - True - Color - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - label_item - - - - - 0 - 0 - - - - - - 150 - 70 - True - 0 - 0.5 - GTK_SHADOW_ETCHED_IN - - - - True - True - False - False - True - False - - - - True - True - True - True - 0 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - - - - - True - Icon Style - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - label_item - - - - - 210 - 0 - - - - - False - True - - - - - - True - Look - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - - True - - - - 200 - 150 - True - 0 - 0.5 - GTK_SHADOW_ETCHED_IN - - - + True False 0 - + True - True - AutoPopup new -messages - True - GTK_RELIEF_NORMAL - False - False - True + gtk-find + 4 + 0.5 + 0.5 + 0 + 0 0 - False - False + True + True - + True - False - True - Allow AutoPopup -when NOT onlie - True - GTK_RELIEF_NORMAL - False - False - True - - - 0 - False - False - - - - - - True - False - True - checkbutton5 - True - GTK_RELIEF_NORMAL - False - False - True + Look&Feel + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 0 @@ -2921,262 +2657,780 @@ when NOT onlie - - - - True - AutoPopup - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - label_item - - - - 0 - 0 - - - - False - True - - - - - - True - Events - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - - True - - 325 - 142 + True - 0 - 0.5 - GTK_SHADOW_ETCHED_IN + True + True + GTK_RELIEF_HALF + - + True - 3 - 3 False - 4 - 5 + 0 - + True - True - Auto Away After - True - GTK_RELIEF_NORMAL - False - False - True - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Minutes - False - False - GTK_JUSTIFY_LEFT - False - False - 0 + gtk-select-color + 4 + 0.5 0.5 0 0 - 2 - 3 - 0 - 1 - + 0 + True + True - - 50 + True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 10 1 100 1 10 10 - - - 1 - 2 - 0 - 1 - fill - - - - - - - True - True - Auto eXtanded Away After - True - GTK_RELIEF_NORMAL - False - False - True - - - 0 - 1 - 1 - 2 - fill - - - - - - - 50 - True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 20 1 100 1 10 10 - - - 1 - 2 - 1 - 2 - - - - - - - True - Minutes + Events False False GTK_JUSTIFY_LEFT False False - 0 + 0.5 0.5 0 0 - 2 - 3 - 1 - 2 - fill - + 0 + False + False + + + + + + + + + + True + True + True + GTK_RELIEF_HALF + + + + + True + False + 0 + + + + True + gtk-dialog-info + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + True + True + + + + + + True + Presence + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False - - - - True - Auto Status - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - label_item - - - - 0 - 0 - - False - True + 0 + False + True - + True - Presence - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - tab + 0 + True + False + + + + + + 10 + True + False + False + GTK_POS_TOP + False + False + + + + True + + + + 150 + 70 + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + True + False + False + True + False + + + + True + True + True + True + 0 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + + + + + True + Icon Style + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 210 + 0 + + + + + + 200 + 200 + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + 3 + 2 + False + 10 + 3 + + + + 100 + True + Outgoing Messages + False + False + GTK_JUSTIFY_CENTER + True + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + 100 + True + Status Messages + False + False + GTK_JUSTIFY_CENTER + True + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + 100 + True + Incoming Messages + False + False + GTK_JUSTIFY_CENTER + True + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + GTK_RELIEF_NORMAL + + + + + 40 + 20 + True + + + + + 1 + 2 + 1 + 2 + fill + + + + + + + True + True + GTK_RELIEF_NORMAL + + + + + 40 + 20 + True + + + + + 1 + 2 + 2 + 3 + fill + + + + + + + True + True + GTK_RELIEF_NORMAL + + + + + 40 + 20 + True + + + + + 1 + 2 + 0 + 1 + fill + + + + + + + + + True + Color + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + 0 + + + + + False + True + + + + + + True + Look + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + True + + + + 200 + 150 + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + False + 0 + + + + True + True + AutoPopup new +messages + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + True + False + True + Allow AutoPopup +when NOT onlie + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + True + False + True + checkbutton5 + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + + + True + AutoPopup + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + 0 + + + + + False + True + + + + + + True + Events + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + True + + + + 325 + 142 + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + 2 + 3 + False + 4 + 5 + + + + True + True + Auto Away After + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Minutes + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 2 + 3 + 0 + 1 + + + + + + + 50 + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 10 1 100 1 10 10 + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + Auto eXtanded Away After + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + 1 + 1 + 2 + fill + + + + + + + 50 + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 20 1 100 1 10 10 + + + 1 + 2 + 1 + 2 + + + + + + + True + Minutes + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 2 + 3 + 1 + 2 + fill + + + + + + + + + True + Auto Status + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + 0 + + + + + False + True + + + + + + True + Presence + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + 0 + True + True @@ -3187,6 +3441,17 @@ when NOT onlie + + + True + + + 0 + False + True + + + 5 diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py index da230438b..f1f100af9 100644 --- a/plugins/gtkgui/gtkgui.py +++ b/plugins/gtkgui/gtkgui.py @@ -24,9 +24,10 @@ from gtk import TRUE, FALSE import gtk.glade,gobject import os,string,time,Queue import common.optparser,common.sleepy -#CONFPATH = "~/.gajim/config" -Wbrowser = 0 -Waccounts = 0 +browserWindow = 0 +accountsWindow = 0 + +GTKGUI_GLADE='plugins/gtkgui/gtkgui.glade' class user: """Informations concerning each users""" @@ -49,7 +50,7 @@ class user: self.resource = args[6] else: raise TypeError, 'bad arguments' -class info_user: +class infoUser_Window: """Class for user's information window""" def delete_event(self, widget): """close window""" @@ -61,19 +62,34 @@ class info_user: def on_close(self, widget): """Save user's informations and update the roster on the Jabber server""" - #TODO: send things to server only if changes are done + #update: to know if things have changed to send things + # to server only if changes are done + update = 0 #update user.name if it's not "" newName = self.entry_name.get_text() - if newName != '': - self.user.name = newName + if newName != self.user.name: + update = 1 + if newName != '': + self.user.name = newName #update user.groups and redraw the user in the roster + old_groups = self.user.groups self.r.remove_user(self.user) self.user.groups = [] model = self.list2.get_model() model.foreach(self.add_grp_to_user) self.r.add_user(self.user) - self.r.queueOUT.put(('UPDUSER', (self.user.jid, self.user.name, \ - self.user.groups))) + for g in old_groups: + if not g in self.user.groups: + update = 1 + break + if not update: + for g in self.user.groups: + if not g in old_groups: + update = 1 + break + if update: + self.r.queueOUT.put(('UPDUSER', (self.user.jid, self.user.name, \ + self.user.groups))) self.delete_event(self) def add_grp(self, model, path, iter, stors): @@ -110,25 +126,25 @@ class info_user: """Initialize both available and current listStores""" #list available store = gtk.ListStore(gobject.TYPE_STRING) - for i in self.r.l_group.keys(): - if i != 'Agents' and i not in self.user.groups: + for g in self.r.l_group.keys(): + if g != 'Agents' and g not in self.user.groups: iter = store.append() - store.set(iter, 0, i) + store.set(iter, 0, g) self.list1.set_model(store) column = gtk.TreeViewColumn('Available', gtk.CellRendererText(), text=0) self.list1.append_column(column) #list_current store = gtk.ListStore(gobject.TYPE_STRING) - for i in self.user.groups: + for g in self.user.groups: iter = store.append() - store.set(iter, 0, i) + store.set(iter, 0, g) self.list2.set_model(store) column = gtk.TreeViewColumn('Available', gtk.CellRendererText(), text=0) self.list2.append_column(column) def __init__(self, user, roster): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Info_user') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Info_user') self.window = xml.get_widget("Info_user") self.r = roster self.user = user @@ -155,7 +171,7 @@ class info_user: self.on_new_key_pressed) -class prefs: +class preference_Window: """Class for Preferences window""" def delete_event(self, widget): """close window""" @@ -259,20 +275,40 @@ class prefs: self.write_cfg() self.window.destroy() + def change_notebook_page(self, number): + self.notebook.set_current_page(number) + + def on_lookfeel_button_clicked(self, widget, data=None): + self.change_notebook_page(0) + + def on_events_button_clicked(self, widget, data=None): + self.change_notebook_page(1) + + def on_presence_button_clicked(self, widget, data=None): + self.change_notebook_page(2) + def __init__(self, roster): """Initialize Preference window""" - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Prefs') - self.window = xml.get_widget("Prefs") + xml = gtk.glade.XML(GTKGUI_GLADE, 'preferences_window') + self.window = xml.get_widget('preferences_window') self.r = roster - self.da_in = xml.get_widget("drawing_in") - self.da_out = xml.get_widget("drawing_out") - self.da_status = xml.get_widget("drawing_status") - self.combo_iconstyle = xml.get_widget("combo_iconstyle") - self.chk_autopp = xml.get_widget("chk_autopopup") - self.chk_autoaway = xml.get_widget("chk_autoaway") - self.spin_autoawaytime = xml.get_widget("spin_autoawaytime") - self.chk_autoxa = xml.get_widget("chk_autoxa") - self.spin_autoxatime = xml.get_widget("spin_autoxatime") + self.da_in = xml.get_widget('drawing_in') + self.da_out = xml.get_widget('drawing_out') + self.da_status = xml.get_widget('drawing_status') + self.combo_iconstyle = xml.get_widget('combo_iconstyle') + self.chk_autopp = xml.get_widget('chk_autopopup') + self.chk_autoaway = xml.get_widget('chk_autoaway') + self.spin_autoawaytime = xml.get_widget('spin_autoawaytime') + self.chk_autoxa = xml.get_widget('chk_autoxa') + self.spin_autoxatime = xml.get_widget('spin_autoxatime') + self.notebook = xml.get_widget('preferences_notebook') + + button = xml.get_widget('lookfeel_button') + button.connect('clicked', self.on_lookfeel_button_clicked) + button = xml.get_widget('events_button') + button.connect('clicked', self.on_events_button_clicked) + button = xml.get_widget('presence_button') + button.connect('clicked', self.on_presence_button_clicked) #Color for incomming messages colSt = self.r.plugin.config['inmsgcolor'] @@ -311,34 +347,33 @@ class prefs: self.combo_iconstyle.entry.set_text(self.r.iconstyle) #Autopopup + st = 0 if self.r.plugin.config.has_key('autopopup'): st = self.r.plugin.config['autopopup'] - else: - st = 0 self.chk_autopp.set_active(st) #Autoaway + st = 1 if self.r.plugin.config.has_key('autoaway'): st = self.r.plugin.config['autoaway'] - else: - st = 1 self.chk_autoaway.set_active(st) + + #Autoawaytime + st = 10 if self.r.plugin.config.has_key('autoawaytime'): st = self.r.plugin.config['autoawaytime'] - else: - st = 10 self.spin_autoawaytime.set_value(st) #Autoxa + st = 1 if self.r.plugin.config.has_key('autoxa'): st = self.r.plugin.config['autoxa'] - else: - st = 1 self.chk_autoxa.set_active(st) + + #Autoxatime + st = 20 if self.r.plugin.config.has_key('autoxatime'): st = self.r.plugin.config['autoxatime'] - else: - st = 20 self.spin_autoxatime.set_value(st) xml.signal_connect('gtk_widget_destroy', self.delete_event) @@ -346,7 +381,7 @@ class prefs: self.on_color_button_clicked) xml.signal_connect('on_ok_clicked', self.on_ok) -class away_msg: +class awayMsg_Window: """Class for Away Message Window""" def delete_event(self, widget): """close window""" @@ -361,22 +396,21 @@ class away_msg: def run(self): """Wait for Ok button to be pressed and return away messsage""" rep = self.window.run() + msg = '' if rep == gtk.RESPONSE_OK: beg, end = self.txtBuffer.get_bounds() msg = self.txtBuffer.get_text(beg, end, 0) self.window.destroy() - if not msg: - msg = "" return msg def __init__(self): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Away_msg') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Away_msg') self.window = xml.get_widget("Away_msg") txt = xml.get_widget("textview") self.txtBuffer = txt.get_buffer() xml.signal_connect('gtk_widget_destroy', self.delete_event) -class add: +class addContact_Window: """Class for Add user window""" def delete_event(self, widget): """close window""" @@ -394,7 +428,7 @@ class add: def __init__(self, roster, jid=None): self.r = roster - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Add') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Add') self.entry_who = xml.get_widget('entry_who') self.textview_sub = xml.get_widget("textview_sub") if jid: @@ -403,30 +437,30 @@ class add: xml.signal_connect('gtk_widget_destroy', self.delete_event) xml.signal_connect('on_button_sub_clicked', self.on_subscribe) -class warning: +class warning_Window: """Class for warning window : print a warning message""" def delete_event(self, widget): """close window""" self.window.destroy() def __init__(self, txt): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Warning') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Warning') self.window = xml.get_widget("Warning") xml.get_widget('label').set_text(txt) xml.signal_connect('gtk_widget_destroy', self.delete_event) -class about: +class about_Window: """Class for about window""" def delete_event(self, widget): """close window""" self.Wabout.destroy() def __init__(self): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'About') + xml = gtk.glade.XML(GTKGUI_GLADE, 'About') self.Wabout = xml.get_widget("About") xml.signal_connect('gtk_widget_destroy', self.delete_event) -class account_pref: +class accountPreference_Window: """Class for account informations""" def delete_event(self, widget): """close window""" @@ -448,10 +482,10 @@ class account_pref: name = self.entryName.get_text() jid = self.entryJid.get_text() if (name == ''): - warning('You must enter a name for this account') + warning_Window('You must enter a name for this account') return 0 if (jid == '') or (string.count(jid, '@') != 1): - warning('You must enter a Jabber ID for this account\n\ + warning_Window('You must enter a Jabber ID for this account\n\ For example : login@hostname') return 0 else: @@ -464,7 +498,7 @@ class account_pref: #if it's a new account else: if name in self.accs.r.accounts: - warning('An account already has this name') + warning_Window('An account already has this name') return 0 #if we neeed to register a new account if self.check.get_active(): @@ -483,7 +517,7 @@ class account_pref: #info must be a dictionnary def __init__(self, accs, infos = {}): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Account') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Account') self.window = xml.get_widget("Account") self.entryPass = xml.get_widget("entry_password") self.entryRessource = xml.get_widget("entry_ressource") @@ -491,22 +525,21 @@ class account_pref: self.entryName = xml.get_widget("entry_name") self.entryJid = xml.get_widget("entry_jid") self.accs = accs + self.mod = FALSE if infos: self.mod = TRUE self.acc = infos['name'] self.init_account(infos) self.check.set_sensitive(FALSE) - else: - self.mod = FALSE xml.signal_connect('gtk_widget_destroy', self.delete_event) xml.signal_connect('on_save_clicked', self.on_save_clicked) -class accounts: +class accounts_Window: """Class for accounts window : lists of accounts""" def delete_event(self, widget): """close window""" - global Waccounts - Waccounts = 0 + global accountsWindow + accountsWindow = 0 self.window.destroy() def init_accounts(self): @@ -525,7 +558,7 @@ class accounts: def on_new_clicked(self, widget): """When new button is clicked : open an account information window""" - account_pref(self) + accountPreference_Window(self) def on_delete_clicked(self, widget): """When delete button is clicked : @@ -551,11 +584,11 @@ class accounts: '@' + self.r.plugin.accounts[account]["hostname"] infos['password'] = self.r.plugin.accounts[account]["password"] infos['ressource'] = self.r.plugin.accounts[account]["ressource"] - account_pref(self, infos) + accountPreference_Window(self, infos) def __init__(self, roster): self.r = roster - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Accounts') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Accounts') self.window = xml.get_widget("Accounts") self.treeview = xml.get_widget("treeview") self.modButt = xml.get_widget("modify_button") @@ -577,7 +610,7 @@ class accounts: xml.signal_connect('on_modify_clicked', self.on_modify_clicked) self.init_accounts() -class confirm: +class confirm_Window: """Class for confirmation window : window that appears to confirm the removal of a contact""" def delete_event(self, widget): @@ -596,7 +629,7 @@ class confirm: self.delete_event(self) def __init__(self, roster, iter): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Confirm') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Confirm') self.window = xml.get_widget('Confirm') self.r = roster self.iter = iter @@ -606,7 +639,7 @@ class confirm: xml.signal_connect('on_okbutton_clicked', self.req_usub) xml.signal_connect('gtk_widget_destroy', self.delete_event) -class authorize: +class authorize_Window: """Class for authorization window : window that appears when a user wants to add us to his/her roster""" def delete_event(self, widget): @@ -618,7 +651,7 @@ class authorize: self.r.queueOUT.put(('AUTH', self.jid)) self.delete_event(self) if not self.r.l_contact.has_key(self.jid): - add(self.r, self.jid) + addContact_Window(self.r, self.jid) def deny(self, widget): """refuse the request""" @@ -626,7 +659,7 @@ class authorize: self.delete_event(self) def __init__(self, roster, jid): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Sub_req') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Sub_req') self.window = xml.get_widget('Sub_req') self.r = roster self.jid = jid @@ -635,7 +668,7 @@ class authorize: xml.signal_connect('on_button_deny_clicked', self.deny) xml.signal_connect('on_button_close_clicked', self.delete_event) -class agent_reg: +class agentRegistration_Window: """Class for agent registration window : window that appears when we want to subscribe to an agent""" def delete_event(self, widget): @@ -668,7 +701,7 @@ class agent_reg: self.delete_event(self) def __init__(self, agent, infos, roster): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'agent_reg') + xml = gtk.glade.XML(GTKGUI_GLADE, 'agent_reg') self.agent = agent self.infos = infos self.r = roster @@ -682,13 +715,13 @@ class agent_reg: xml.signal_connect('on_button_cancel_clicked', self.delete_event) xml.signal_connect('on_button_ok_clicked', self.on_ok) -class browser: - """Class for rbowser agent window : +class browseAgent_Window: + """Class for bowser agent window : to know the agents on the selected server""" def delete_event(self, widget): """close window""" - global Wbrowser - Wbrowser = 0 + global browserWindow + browserWindow = 0 self.window.destroy() def browse(self): @@ -719,7 +752,7 @@ class browser: self.delete_event(self) def __init__(self, roster): - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'browser') + xml = gtk.glade.XML(GTKGUI_GLADE, 'browser') self.window = xml.get_widget('browser') self.treeview = xml.get_widget('treeview') self.r = roster @@ -740,9 +773,9 @@ class browser: if self.r.connected: self.browse() else: - warning("You must be connected to view Agents") + warning_Window("You must be connected to view Agents") -class message: +class message_Window: """Class for chat window""" def delete_event(self, widget): """close window""" @@ -816,15 +849,16 @@ class message: def __init__(self, user, roster): self.user = user self.r = roster - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Chat') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Chat') self.hbox = xml.get_widget('hbox1') self.hbox.set_property('resize-mode', 2) self.window = xml.get_widget('Chat') self.window.set_title('Chat with ' + user.name) self.img = xml.get_widget('image') self.img.set_from_pixbuf(self.r.pixbufs[user.show]) - xml.get_widget('label_contact').set_text(user.name + ' <'\ + xml.get_widget('button_contact').set_label(user.name + ' <'\ + user.jid + '>') + xml.get_widget('button_contact').set_resize_mode(gtk.RESIZE_QUEUE) self.message = xml.get_widget('message') self.message.grab_focus() self.conversation = xml.get_widget('conversation') @@ -850,7 +884,7 @@ class message: color = '#00ff00' #green self.tagStatus.set_property("foreground", color) -class roster: +class roster_Window: """Class for main gtk window""" def add_user(self, u): """Add a user to the roster and add groups if they aren't in roster""" @@ -957,8 +991,8 @@ class roster: u.status = status def on_info(self, widget, jid): - """Call info_user class to display user's information""" - info_user(self.l_contact[jid]['user'], self) + """Call infoUser_Window class to display user's information""" + infoUser_Window(self.l_contact[jid]['user'], self) def mk_menu_c(self, event, iter): """Make user's popup menu""" @@ -1057,12 +1091,12 @@ class roster: def on_req_usub(self, widget, iter): """Remove a user""" - window_confirm = confirm(self, iter) + window_confirm = confirm_Window(self, iter) def on_status_changed(self, widget): """When we change our status""" if widget.name != 'online' and widget.name != 'offline': - w = away_msg() + w = awayMsg_Window() txt = w.run() else: txt = widget.name @@ -1071,30 +1105,31 @@ class roster: def on_prefs(self, widget): """When preferences is selected : - call the prefs class""" - window = prefs(self) + call the preference_Window class""" + window = preference_Window(self) def on_add(self, widget): """When add user is selected : call the add class""" - window_add = add(self) + window_add = addContact_Window(self) def on_about(self, widget): """When about is selected : call the about class""" - window_about = about() + window_about = about_Window() def on_accounts(self, widget): """When accounts is seleted : call the accounts class to modify accounts""" - global Waccounts - if not Waccounts: - Waccounts = accounts(self) + global accountsWindow + if not accountsWindow: + accountsWindow = accounts_Window(self) def on_quit(self, widget): """When we quit the gtk plugin : tell that to the core and exit gtk""" self.queueOUT.put(('QUIT','')) + print "plugin gtkgui stopped" gtk.mainquit() def on_row_activated(self, widget, path, col=0): @@ -1112,7 +1147,7 @@ class roster: if self.tab_messages.has_key(jid): self.tab_messages[jid].window.present() elif self.l_contact.has_key(jid): - self.tab_messages[jid] = message(self.l_contact[jid]['user'], self) + self.tab_messages[jid] = message_Window(self.l_contact[jid]['user'], self) if self.tab_queues.has_key(jid): self.tab_messages[jid].read_queue(self.tab_queues[jid]) @@ -1139,7 +1174,7 @@ class roster: if self.tab_messages.has_key(jid): self.tab_messages[jid].window.present() elif self.l_contact.has_key(jid): - self.tab_messages[jid] = message(self.l_contact[jid]['user'], self) + self.tab_messages[jid] = message_Window(self.l_contact[jid]['user'], self) if self.tab_queues.has_key(jid): self.tab_messages[jid].read_queue(self.tab_queues[jid]) else: @@ -1151,9 +1186,9 @@ class roster: def on_browse(self, widget): """When browse agent is selected : Call browse class""" - global Wbrowser - if not Wbrowser: - Wbrowser = browser(self) + global browserWindow + if not browserWindow: + browserWindow = browseAgent_Window(self) def mkpixbufs(self): """initialise pixbufs array""" @@ -1161,17 +1196,21 @@ class roster: self.pixbufs = {} for state in ('online', 'away', 'xa', 'dnd', 'offline', \ 'requested', 'message', 'opened', 'closed', 'not in list'): - #open an animated gif file if it exists oterelse a xpm file - if not os.path.exists(self.path + state + '.gif'): - if not os.path.exists(self.path + state + '.xpm'): - print 'No such file : ' + self.path + state + '.gif / xpm' - self.pixbufs[state] = None - else: - pix = gtk.gdk.pixbuf_new_from_file(self.path + state + '.xpm') - self.pixbufs[state] = pix - else: - pix = gtk.gdk.pixbufAnimation(self.path + state + '.gif') + # try to open a pixfile with the correct method + files = [] + files.append(self.path + state + '.gif') + files.append(self.path + state + '.png') + files.append(self.path + state + '.xpm') + self.pixbufs[state] = None + for file in files: + if not os.path.exists(file): + continue + fct = gtk.gdk.pixbuf_new_from_file + if file.find('.gif') != -1: + fct = gtk.gdk.pixbufAnimation + pix = fct(file) self.pixbufs[state] = pix + break def on_show_off(self, widget): """when show offline option is changed : @@ -1181,7 +1220,7 @@ class roster: def __init__(self, queueOUT, plug): # FIXME : handle no file ... - xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Gajim') + xml = gtk.glade.XML(GTKGUI_GLADE, 'Gajim') self.window = xml.get_widget('Gajim') self.tree = xml.get_widget('treeview') self.plugin = plug @@ -1268,17 +1307,25 @@ class plugin: """Class called by the core in a new thread""" def wait(self, what): """Wait for a message from Core""" - #TODO: timeout, save messages that don't fit + #TODO: timeout + temp_q = Queue.Queue(50) while 1: if not self.queueIN.empty(): ev = self.queueIN.get() - if ev[0] == what: - return ev[1] + if ev[0] == what and ev[1][0] == 'GtkGui': + #Restore messages + while not temp_q.empty(): + ev2 = temp_q.get() + self.queueIN.put(ev) + return ev[1][1] + else: + #Save messages + temp_q.put(ev) time.sleep(0.1) def read_queue(self): """Read queue from the core and execute commands from it""" - global Wbrowser + global browserWindow model = self.r.tree.get_model() while self.queueIN.empty() == 0: ev = self.queueIN.get() @@ -1287,7 +1334,7 @@ class plugin: self.r.mklists(ev[1]) self.r.draw_roster() elif ev[0] == 'WARNING': - warning(ev[1]) + warning_Window(ev[1]) elif ev[0] == 'STATUS': st = "" for i in range(7): @@ -1302,8 +1349,8 @@ class plugin: self.r.chg_status(j, 'offline', 'Disconnected') elif self.r.connected == 0: self.r.connected = 1 - self.sleeper = common.sleepy.Sleepy(\ - self.autoawaytime*60, self.autoxatime*60) + self.sleeper = None#common.sleepy.Sleepy(\ + #self.autoawaytime*60, self.autoxatime*60) elif ev[0] == 'NOTIFY': jid = string.split(ev[1][0], '/')[0] @@ -1366,12 +1413,12 @@ class plugin: if not self.r.tab_messages.has_key(jid): if self.r.l_contact.has_key(jid): self.r.tab_messages[jid] = \ - message(self.r.l_contact[jid]['user'], self.r) + message_Window(self.r.l_contact[jid]['user'], self.r) if self.r.tab_messages.has_key(jid): self.r.tab_messages[jid].print_conversation(ev[1][1]) elif ev[0] == 'SUBSCRIBE': - authorize(self.r, ev[1]) + authorize_Window(self.r, ev[1]) elif ev[0] == 'SUBSCRIBED': jid = ev[1]['jid'] if self.r.l_contact.has_key(jid): @@ -1383,25 +1430,25 @@ class plugin: user1 = user(jid, jid, ['general'], 'online', \ 'online', 'to', ev[1]['ressource']) self.r.add_user(user1) - warning("You are now authorized by " + jid) + warning_Window("You are now authorized by " + jid) elif ev[0] == 'UNSUBSCRIBED': - warning("You are now unsubscribed by " + jid) + warning_Window("You are now unsubscribed by " + jid) #TODO: change icon elif ev[0] == 'AGENTS': - if Wbrowser: - Wbrowser.agents(ev[1]) + if browserWindow: + browserWindow.agents(ev[1]) elif ev[0] == 'AGENT_INFO': if not ev[1][1].has_key('instructions'): - warning('error contacting %s' % ev[1][0]) + warning_Window('error contacting %s' % ev[1][0]) else: - Wreg = agent_reg(ev[1][0], ev[1][1], self.r) + Wreg = agentRegistration_Window(ev[1][0], ev[1][1], self.r) #('ACC_OK', (hostname, login, pasword, name, ressource)) elif ev[0] == 'ACC_OK': self.accounts[ev[1][3]] = {'ressource': ev[1][4], \ 'password': ev[1][2], 'hostname': ev[1][0], 'name': ev[1][1]} self.r.queueOUT.put(('CONFIG', ('accounts', self.r.plugin.accounts))) - if (Waccounts != 0): - Waccounts.init_accounts() + if (accountsWindow != 0): + accountsWindow.init_accounts() elif ev[0] == 'QUIT': self.r.on_quit(self) return 1 @@ -1436,12 +1483,12 @@ class plugin: gtk.threads_init() gtk.threads_enter() self.queueIN = quIN - quOUT.put(('ASK_CONFIG', 'GtkGui')) + quOUT.put(('ASK_CONFIG', ('GtkGui', 'GtkGui'))) self.config = self.wait('CONFIG') - quOUT.put(('ASK_CONFIG', 'accounts')) + quOUT.put(('ASK_CONFIG', ('GtkGui', 'accounts'))) self.accounts = self.wait('CONFIG') #TODO: if no config : default config and save it - self.r = roster(quOUT, self) + self.r = roster_Window(quOUT, self) if self.config.has_key('autoaway'): self.autoaway = self.config['autoaway'] else: diff --git a/plugins/gtkgui/icons/sun/away.xpm b/plugins/gtkgui/icons/sun/away.xpm new file mode 100644 index 000000000..6d7a131f4 --- /dev/null +++ b/plugins/gtkgui/icons/sun/away.xpm @@ -0,0 +1,125 @@ +/* XPM */ +static char * away_xpm[] = { +"16 16 106 2", +" c None", +". c #E3D244", +"+ c #EAD735", +"@ c #EDDA40", +"# c #ECDA43", +"$ c #ECDB47", +"% c #EDDA42", +"& c #EBD943", +"* c #EAD944", +"= c #EDDC41", +"- c #EFDD47", +"; c #EDDA3E", +"> c #EEDC45", +", c #FFEF98", +"' c #EEDD47", +") c #FFEE5C", +"! c #EFDD46", +"~ c #FFE849", +"{ c #E7D646", +"] c #E7D95E", +"^ c #E9D847", +"/ c #F7E653", +"( c #F1E486", +"_ c #F6EFA2", +": c #EFE48A", +"< c #EFEAAA", +"[ c #E8EEE3", +"} c #E9EFDC", +"| c #E2EBE8", +"1 c #E7EBD1", +"2 c #EAEED9", +"3 c #E8EDE6", +"4 c #E9E398", +"5 c #E1E7E9", +"6 c #BEC3C5", +"7 c #CED3D5", +"8 c #C3C8CA", +"9 c #EAECEE", +"0 c #E4E8E0", +"a c #E7EEE5", +"b c #E0E6E6", +"c c #DAE1E0", +"d c #DBE4E5", +"e c #E2EBE9", +"f c #E1E9E9", +"g c #E2E8E3", +"h c #E7EEEF", +"i c #E0E6E7", +"j c #C1C6C8", +"k c #D7DCDE", +"l c #C3C8C9", +"m c #F1F3F4", +"n c #E8EDEB", +"o c #E2E7E3", +"p c #E4ECE5", +"q c #DAE2E1", +"r c #D6DEDE", +"s c #D6DFDF", +"t c #E0E9EA", +"u c #E1EAEB", +"v c #E2EAEB", +"w c #E4EBEC", +"x c #DAE1E2", +"y c #E2E8E9", +"z c #E4EAEB", +"A c #CDD2D2", +"B c #EDF2ED", +"C c #E3E8E6", +"D c #E3EBE4", +"E c #DDE5E2", +"F c #D9E1E0", +"G c #DBE3E3", +"H c #E3EDEE", +"I c #E4EEEF", +"J c #E1E9EA", +"K c #DDE4E5", +"L c #DCE3E4", +"M c #E1E7E8", +"N c #E3EAEB", +"O c #CDD2D3", +"P c #C0C5C7", +"Q c #E5EDEE", +"R c #DEE4E1", +"S c #E0E7E3", +"T c #E6EDE7", +"U c #E6EDED", +"V c #E7F0F1", +"W c #E5EFF0", +"X c #E2E9EA", +"Y c #E6EDEE", +"Z c #D4DCDD", +"` c #D0D7D8", +" . c #BEC5C5", +".. c #C9D2D2", +"+. c #C4CECE", +"@. c #C6CECF", +"#. c #C9D0D1", +"$. c #E8F1F2", +"%. c #C3CACB", +"&. c #BFC5C6", +"*. c #D5DCDD", +"=. c #CACFD0", +"-. c #CCD1D2", +";. c #C4CBCC", +">. c #CBD2D2", +",. c #B7C0C2", +" ", +" . + ", +" @ # $ . ", +" % @ & * = - - ", +" ; > , , , , ' ) - ", +" ! , , ~ ~ , , { ", +"] ] , , ~ ~ ~ ~ , , ^ / - ", +" ] ( _ _ ~ ~ ~ ~ , ^ ", +" ] : < [ } | 1 2 3 4 5 6 7 ", +"8 9 ] 0 a b c d e f g h i j k l ", +"8 m n o p q r s t u v w x y z A ", +"8 8 B C D E F G H I J K L M N O ", +" P Q R S T U V W v X K N Y 6 ", +" 8 Z ` ...+.@.#.$.%.&.*.=. ", +" -.;. >.,. -. ", +" "}; diff --git a/plugins/gtkgui/icons/sun/closed.xpm b/plugins/gtkgui/icons/sun/closed.xpm new file mode 100644 index 000000000..a430bcb97 --- /dev/null +++ b/plugins/gtkgui/icons/sun/closed.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static char * closed_xpm[] = { +"16 16 2 1", +" c None", +". c #000000", +" ", +" ", +" .. ", +" ... ", +" ... ", +" ... ", +"............... ", +"................", +"............... ", +" ... ", +" ... ", +" ... ", +" .. ", +" ", +" ", +" "}; diff --git a/plugins/gtkgui/icons/sun/dnd.xpm b/plugins/gtkgui/icons/sun/dnd.xpm new file mode 100644 index 000000000..d1756c6e1 --- /dev/null +++ b/plugins/gtkgui/icons/sun/dnd.xpm @@ -0,0 +1,64 @@ +/* XPM */ +static char * dnd_xpm[] = { +"16 16 45 1", +" c None", +". c #717171", +"+ c #9E9E9E", +"@ c #9B9B9B", +"# c #9F9F9F", +"$ c #A1A1A1", +"% c #9C9C9C", +"& c #989898", +"* c #999999", +"= c #A3A3A3", +"- c #A2A2A2", +"; c #959595", +"> c #949494", +", c #8F8F8F", +"' c #898989", +") c #969696", +"! c #939393", +"~ c #888888", +"{ c #8C8C8C", +"] c #828282", +"^ c #7A7A7A", +"/ c #858585", +"( c #8A8A8A", +"_ c #868686", +": c #9D9D9D", +"< c #8D8D8D", +"[ c #8B8B8B", +"} c #9A9A9A", +"| c #AAAAAA", +"1 c #797979", +"2 c #909090", +"3 c #838383", +"4 c #7D7D7D", +"5 c #808080", +"6 c #B6A200", +"7 c #848484", +"8 c #979797", +"9 c #8E8E8E", +"0 c #878787", +"a c #B7AE5F", +"b c #FFE400", +"c c #FEFFA8", +"d c #B8AF61", +"e c #B7AE60", +"f c #FEF466", +" .... .... ", +" .+@+.....#$.. ", +" .%&*=.$-*;;$. ", +"..+>,')!&#;~{@..", +".-&]^/(_,:)<[}|.", +".-)1^2345;)6>@..", +".$)7,890.aab%%. ", +"..@8....abbca. ", +" ... bcaa ", +" abca ", +" abca ", +" aaabcd ", +" abbcce ", +" abfaa ", +" aba ", +" a "}; diff --git a/plugins/gtkgui/icons/sun/message.xpm b/plugins/gtkgui/icons/sun/message.xpm new file mode 100644 index 000000000..4bf250c1e --- /dev/null +++ b/plugins/gtkgui/icons/sun/message.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static char * message_xpm[] = { +"16 16 2 1", +" c None", +". c #000000", +" ", +" ", +" .... ... ", +" .... ... ", +" .... .... ", +" ..... . .. ", +" .. .. . .. ", +" .. .. . .. ", +" .. ... .. .. ", +" .. .. . .. ", +" .. .. . .. ", +" .. ... .. ", +" .. .. .. ", +" .. .. .. ", +" .... .....", +" "}; diff --git a/plugins/gtkgui/icons/sun/offline.xpm b/plugins/gtkgui/icons/sun/offline.xpm new file mode 100644 index 000000000..054edb083 --- /dev/null +++ b/plugins/gtkgui/icons/sun/offline.xpm @@ -0,0 +1,62 @@ +/* XPM */ +static char * offline2_xpm[] = { +"16 16 43 1", +" c None", +". c #887D1D", +"+ c #8A801D", +"@ c #92851D", +"# c #9C8D1D", +"$ c #AC9D25", +"% c #867B1D", +"& c #BFB445", +"* c #BFB863", +"= c #BFBA76", +"- c #C0B969", +"; c #93871D", +"> c #BFB23B", +", c #BFB342", +"' c #BFB85D", +") c #BFBA77", +"! c #BFAE26", +"~ c #BFB551", +"{ c #BFB866", +"] c #BFB86B", +"^ c #BFB973", +"/ c #BFB02D", +"( c #BFB134", +"_ c #BFB65B", +": c #BFB860", +"< c #BFB13A", +"[ c #BFB970", +"} c #BFB54F", +"| c #BFBA80", +"1 c #BFB975", +"2 c #BFB974", +"3 c #BFB33D", +"4 c #BFBA7A", +"5 c #BFB030", +"6 c #BFB136", +"7 c #BFB868", +"8 c #BFB450", +"9 c #BFB85E", +"0 c #BFB864", +"a c #BFB44E", +"b c #BFB96E", +"c c #BFB550", +"d c #C0B64D", +" .+@#$ ", +" %%&*=-; ", +" %%>,'))% ", +" %!!~{]^% ", +" %!!/'^)% ", +" %/(_:^)% ", +" %!<,^][% ", +" %!,}|12% ", +" %!3,422% ", +" %!56777% ", +" %!!8999% ", +" %!!/'90% ", +" %!!a9b=% ", +" %%!8b=^% ", +" %%c*:d; ", +" .+@#$ "}; diff --git a/plugins/gtkgui/icons/sun/online.xpm b/plugins/gtkgui/icons/sun/online.xpm new file mode 100644 index 000000000..42791668d --- /dev/null +++ b/plugins/gtkgui/icons/sun/online.xpm @@ -0,0 +1,81 @@ +/* XPM */ +static char * online_xpm[] = { +"16 16 62 1", +" c None", +". c #E6CB02", +"+ c #E6C104", +"@ c #E6CA02", +"# c #E6D101", +"$ c #E6C603", +"% c #FFDE03", +"& c #E6C902", +"* c #E6CD02", +"= c #E6BA05", +"- c #E6C004", +"; c #FFDA04", +"> c #FFDC04", +", c #FFDE04", +"' c #E6D001", +") c #E6BA06", +"! c #E6BC05", +"~ c #FFD305", +"{ c #FFD505", +"] c #FFD704", +"^ c #FFD904", +"/ c #FFDB04", +"( c #FFDD03", +"_ c #FFDF03", +": c #E6CC02", +"< c #FFD106", +"[ c #FFD306", +"} c #FFD506", +"| c #FFD705", +"1 c #FFDD04", +"2 c #E6B606", +"3 c #FFCD07", +"4 c #FFCF06", +"5 c #FFD405", +"6 c #FFD905", +"7 c #E6C903", +"8 c #E6B007", +"9 c #E6B207", +"0 c #FFC807", +"a c #FFCB07", +"b c #FFCC06", +"c c #FFCE07", +"d c #FFD007", +"e c #E6B307", +"f c #FFC808", +"g c #FFCA08", +"h c #FFCF07", +"i c #FFD206", +"j c #FFD605", +"k c #E6C404", +"l c #FFCC07", +"m c #FFD006", +"n c #FFD406", +"o c #E6AE08", +"p c #FFC608", +"q c #FFCE06", +"r c #E6BF04", +"s c #E6AA09", +"t c #E6B208", +"u c #E6B906", +"v c #E6BB05", +"w c #E6B506", +" . ", +" + @ # ", +" + $%& * ", +" = -+;>,&. ' ", +" )!~{]^/(_.: ", +" =<[}|^/1& ", +" 234<~5|6/(7 ", +"890abcd[}|6/(7@ ", +" efg3h c #DDDDDD", +", c #EBEBEB", +"' c #B1B1B1", +") c #B6B6B6", +"! c #A9A9A9", +"~ c #D7D7D7", +"{ c #D9D9D9", +"] c #E8E8E8", +"^ c #EFEFEF", +"/ c #E3E3E3", +"( c #E1E1E1", +"_ c #DADADA", +": c #F5F5F5", +"< c #E0E0E0", +"[ c #E7E7E7", +"} c #D6D6D6", +"| c #DFDFDF", +"1 c #E5E5E5", +"2 c #EDEDED", +"3 c #F1F1F1", +"4 c #B2B2B2", +"5 c #DEDEDE", +"6 c #E6E6E6", +"7 c #F0F0F0", +"8 c #F3F3F3", +"9 c #EEEEEE", +"0 c #ECECEC", +"a c #ACACAC", +"b c #E4E4E4", +"c c #F8F8F8", +"d c #DCDCDC", +"e c #D4D4D4", +"f c #ADADAD", +"g c #A2A2A2", +"h c #B4B4B4", +"i c #A3D7F9", +"j c #48B1F4", +" ... +@#$ ", +" %&*=$-;>,'.)## ", +".!~{]^/(_],:*<[=", +".]}{|1<[/123;>;4", +"4[5(//67^890]62#", +"a6b5~~<6ac923.. ", +"@!&d}e(,'.32f. ", +" #agg&+ h' ", +" ij ji ij ", +" ", +" ji ij ji ", +" ", +" ji ", +" ij ij ", +" ", +" "};