diff --git a/plugins/gtkgui/config.py b/plugins/gtkgui/config.py index 51e1713759664d824af64de77351a785b8ecf058..ebb9efe8c8f70f9d00f33ab83a1dc47db5ab135d 100644 --- a/plugins/gtkgui/config.py +++ b/plugins/gtkgui/config.py @@ -1,9 +1,9 @@ ## plugins/config.py ## ## Gajim Team: -## - Yann Le Boulanger <asterix@lagaule.org> -## - Vincent Hanquez <tab@snarc.org> -## - Nikos Kouremenos <kourem@gmail.com> +## - Yann Le Boulanger <asterix@lagaule.org> +## - Vincent Hanquez <tab@snarc.org> +## - Nikos Kouremenos <kourem@gmail.com> ## - Alex Podaras <bigpod@gmail.com> ## ## Copyright (C) 2003-2005 Gajim Team @@ -1125,11 +1125,9 @@ class Account_modification_window: for j in self.plugin.windows[name][kind]: self.plugin.windows[name][kind][j].account = name #upgrade account in systray - print self.plugin.systray.jids for list in self.plugin.systray.jids: if list[0] == self.account: list[0] = name - print self.plugin.systray.jids del self.plugin.windows[self.account] del self.plugin.queues[self.account] del self.plugin.connected[self.account] @@ -1488,7 +1486,7 @@ class agent_registration_window: class Service_discovery_window: """Class for Service Discovery Window : to know the agents on the selected server""" - def on_agent_browser_window_destroy(self, widget): + def on_service_discovery_window_destroy(self, widget): """close window""" del self.plugin.windows[self.account]['browser'] @@ -1496,9 +1494,9 @@ class Service_discovery_window: """When Close button is clicked""" widget.get_toplevel().destroy() - def browse(self): + def browse(self, jid): """Send a request to the core to know the available agents""" - self.plugin.send('REQ_AGENTS', self.account, None) + self.plugin.send('REQ_AGENTS', self.account, jid) def agents(self, agents): """When list of available agent arrive : @@ -1507,12 +1505,35 @@ class Service_discovery_window: for agent in agents: iter = model.append(None, (agent['name'], agent['jid'])) self.agent_infos[agent['jid']] = {'features' : []} + + def iter_is_visible(self, iter): + if not iter: + return False + model = self.agents_treeview.get_model() + iter = model.iter_parent(iter) + while iter: + if not self.agents_treeview.row_expanded(model.get_path(iter)): + return False + iter = model.iter_parent(iter) + return True + + def on_agents_treeview_row_expanded(self, widget, iter, path): + model = self.agents_treeview.get_model() + jid = model.get_value(iter, 1) + child = model.iter_children(iter) + while child: + child_jid = model.get_value(child, 1) + # We never requested its infos + if not self.agent_infos[child_jid].has_key('features'): + self.browse(child_jid) + child = model.iter_next(child) def agent_info(self, agent, identities, features, items): """When we recieve informations about an agent""" model = self.agents_treeview.get_model() iter = model.get_iter_root() expand = 0 + # We look if this agent is in the treeview while (iter): if agent == model.get_value(iter, 1): break @@ -1523,7 +1544,7 @@ class Service_discovery_window: iter = model.iter_parent(iter) if iter: iter = model.iter_next(iter) - if not iter: + if not iter: #If it is not we add it iter = model.append(None, (agent, agent)) self.agent_infos[agent] = {'features' : []} expand = 1 @@ -1535,8 +1556,17 @@ class Service_discovery_window: for item in items: if not item.has_key('name'): continue - model.append(iter, (item['name'], item['jid'])) + # We look if this item is already in the treeview + iter_child = model.iter_children(iter) + while iter_child: + if item['jid'] == model.get_value(iter_child, 1): + break + iter_child = model.iter_next(iter_child) + if not iter_child: # If it is not we add it + iter_child = model.append(iter, (item['name'], item['jid'])) self.agent_infos[item['jid']] = {'identities': [item]} + if self.iter_is_visible(iter_child) or expand: + self.browse(item['jid']) if expand: self.agents_treeview.expand_row((model.get_path(iter)), False) @@ -1544,7 +1574,8 @@ class Service_discovery_window: """When refresh button is clicked : refresh list : clear and rerequest it""" self.agents_treeview.get_model().clear() - self.browse() + jid = self.address_comboboxentry.child.get_text() + self.browse(jid) def on_agents_treeview_row_activated(self, widget, path, col=0): """When a row is activated : @@ -1592,6 +1623,19 @@ class Service_discovery_window: if self.agent_infos[jid]['identities'][0].has_key('category'): if self.agent_infos[jid]['identities'][0]['category'] == 'conference': self.join_button.set_sensitive(True) + + def on_go_button_clicked(self, widget): + jid = self.address_comboboxentry.child.get_text() + if jid in self.latest_addresses: + self.latest_addresses.remove(jid) + self.latest_addresses.insert(0, jid) + self.address_comboboxentry.get_model().clear() + for j in self.latest_addresses: + self.address_comboboxentry.append_text(j) + self.plugin.config['latest_disco_addresses'] = \ + ' '.join(self.latest_addresses) + self.agents_treeview.get_model().clear() + self.browse(jid) def __init__(self, plugin, account): if plugin.connected[account] < 2: @@ -1615,9 +1659,23 @@ class Service_discovery_window: self.agents_treeview.insert_column_with_attributes(-1, 'Service', \ renderer, text=1) + self.address_comboboxentry = xml.get_widget('address_comboboxentry') + liststore = gtk.ListStore(str) + self.address_comboboxentry.set_model(liststore) + self.address_comboboxentry.set_text_column(0) + self.latest_addresses = \ + self.plugin.config['latest_disco_addresses'].split() + jid = self.plugin.accounts[self.account]['hostname'] + if jid in self.latest_addresses: + self.latest_addresses.remove(jid) + self.latest_addresses.insert(0, jid) + for j in self.latest_addresses: + self.address_comboboxentry.append_text(j) + self.address_comboboxentry.child.set_text(jid) + self.register_button = xml.get_widget('register_button') self.register_button.set_sensitive(False) self.join_button = xml.get_widget('join_button') self.join_button.set_sensitive(False) xml.signal_autoconnect(self) - self.browse() + self.browse(jid) diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade index d0317272b79565fe10e4b52da5cb539a0dd4e179..6f59250acf0ffc9ad8ebfa1bd4d1be08ca06ccbf 100644 --- a/plugins/gtkgui/gtkgui.glade +++ b/plugins/gtkgui/gtkgui.glade @@ -2309,6 +2309,23 @@ <property name="fill">True</property> </packing> </child> + + <child> + <widget class="GtkButton" id="go_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Go</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_go_button_clicked" last_modification_time="Sun, 27 Mar 2005 08:47:16 GMT"/> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py index df2ba263757e092ef559416d0a03582eb76321ce..dbb3b229bc3e25e104eba1d663df02939a532566 100644 --- a/plugins/gtkgui/gtkgui.py +++ b/plugins/gtkgui/gtkgui.py @@ -806,11 +806,11 @@ class plugin: 'outmsgcolor': '#0000ff',\ 'statusmsgcolor':'#1eaa1e',\ 'hiddenlines':'',\ - 'accounttextcolor': '#ff0000',\ - 'accountbgcolor': '#9fdfff',\ + 'accounttextcolor': '#ff0000',\ #'#ffffff' + 'accountbgcolor': '#9fdfff',\ #'#94aa8c' 'accountfont': 'Sans Bold 10',\ 'grouptextcolor': '#0000ff',\ - 'groupbgcolor': '#ffffff',\ + 'groupbgcolor': '#ffffff',\ #'#eff3e7' 'groupfont': 'Sans Italic 10',\ 'usertextcolor': '#000000',\ 'userbgcolor': '#ffffff',\ @@ -838,7 +838,8 @@ class plugin: 'x-position': 0,\ 'y-position': 0,\ 'width': 150,\ - 'height': 400} + 'height': 400,\ + 'latest_disco_addresses': ''} self.send('ASK_CONFIG', None, ('GtkGui', 'GtkGui', self.default_config)) self.config = self.wait('CONFIG') self.send('ASK_CONFIG', None, ('GtkGui', 'accounts'))