Mercurial > libervia-backend
annotate frontends/src/primitivus/contact_list.py @ 500:00d3679976ab
primitivus: keep focus position in contacts list on redraw
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 05 Sep 2012 00:19:32 +0200 |
parents | 28f4ce741ae5 |
children | e9634d2e7b38 |
rev | line source |
---|---|
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 """ |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 Primitivus: a SAT frontend |
459 | 6 Copyright (C) 2009, 2010, 2011, 2012 Jérôme Poisson (goffi@goffi.org) |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 This program is free software: you can redistribute it and/or modify |
480
2a072735e459
Licence modification: the full project is now under AGPL v3+ instead of GPL v3+
Goffi <goffi@goffi.org>
parents:
459
diff
changeset
|
9 it under the terms of the GNU Affero General Public License as published by |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 (at your option) any later version. |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 This program is distributed in the hope that it will be useful, |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
480
2a072735e459
Licence modification: the full project is now under AGPL v3+ instead of GPL v3+
Goffi <goffi@goffi.org>
parents:
459
diff
changeset
|
16 GNU Affero General Public License for more details. |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 |
480
2a072735e459
Licence modification: the full project is now under AGPL v3+ instead of GPL v3+
Goffi <goffi@goffi.org>
parents:
459
diff
changeset
|
18 You should have received a copy of the GNU Affero General Public License |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 along with this program. If not, see <http://www.gnu.org/licenses/>. |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 """ |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 import urwid |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
201
diff
changeset
|
23 from urwid_satext import sat_widgets |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
24 from sat_frontends.quick_frontend.quick_contact_list import QuickContactList |
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
25 from sat.tools.jid import JID |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 class ContactList(urwid.WidgetWrap, QuickContactList): |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
29 signals = ['click','change'] |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
31 def __init__(self, host, CM, on_click=None, on_change=None, user_data=None): |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 self.host = host |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
33 self.selected = None |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
34 self.groups={} |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
35 self.alert_jid=set() |
497
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
36 self.show_status = False |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
37 |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 #we now build the widget |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
39 self.frame = urwid.Frame(self.__buildList()) |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
201
diff
changeset
|
40 self.main_widget = sat_widgets.LabelLine(self.frame, sat_widgets.SurroundedText(_("Contacts"))) |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 urwid.WidgetWrap.__init__(self, self.main_widget) |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
42 if on_click: |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
43 urwid.connect_signal(self, 'click', on_click, user_data) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
44 if on_change: |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
45 urwid.connect_signal(self, 'change', on_change, user_data) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
46 QuickContactList.__init__(self, CM) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
47 |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
48 def _update(self): |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
49 """Update display, keep focus""" |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
50 widget, position = self.frame.body.get_focus() |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
51 self.frame.body = self.__buildList() |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
52 if position: |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
53 self.frame.body.set_focus(position) |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
54 self.host.redraw() |
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
55 |
497
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
56 def keypress(self, size, key): |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
57 if key == "meta s": #user wants to (un)hide contacts' statuses |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
58 self.show_status = not self.show_status |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
59 self._update() |
497
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
60 return super(ContactList, self).keypress(size, key) |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
61 |
124 | 62 def __contains__(self, jid): |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
63 for group in self.groups: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
64 if jid.short in self.groups[group][1]: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
65 return True |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
66 return False |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
67 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
68 def setFocus(self, name): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
69 """give focus to the first group or contact with the given name""" |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
70 idx = 0 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
71 for widget in self.frame.body.body: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
72 if widget.getValue() == name: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
73 self.frame.body.set_focus(idx) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
74 return |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
75 idx+=1 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
76 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
77 def putAlert(self, jid): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
78 """Put an alert on the jid to get attention from user (e.g. for new message)""" |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
79 self.alert_jid.add(jid.short) |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
80 self._update() |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
81 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
82 def __groupClicked(self, group_wid): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
83 group = self.groups[group_wid.getValue()] |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
84 group[0] = not group[0] |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
85 self._update() |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
86 self.setFocus(group_wid.getValue()) |
124 | 87 |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
88 def __contactClicked(self, contact_wid, selected): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
89 self.selected = contact_wid.data |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
90 for widget in self.frame.body.body: |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
201
diff
changeset
|
91 if widget.__class__ == sat_widgets.SelectableText: |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
92 widget.setState(widget.data == self.selected, invisible=True) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
93 if self.selected in self.alert_jid: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
94 self.alert_jid.remove(self.selected) |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
95 self._update() |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
96 self._emit('click') |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
97 |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
98 def __buildContact(self, content, param_contacts): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
99 """Add contact representation in widget list |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
100 @param content: widget list, e.g. SimpleListWalker |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
101 @param contacts: list of JID""" |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
102 contacts = list(param_contacts) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
103 contacts.sort() |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
104 for contact in contacts: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
105 jid=JID(contact) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
106 name = self.CM.getAttr(jid,'name') |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
107 nick = self.CM.getAttr(jid,'nick') |
497
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
108 status = self.CM.getAttr(jid, 'status') |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
109 show = self.CM.getAttr(jid, 'show') |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
110 show_icon, show_attr = const_SHOW_ICON.get(show,('','default')) |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
111 contact_disp = ('alert' if contact in self.alert_jid else show_attr, nick or name or jid.node or jid.short) |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
112 display = [ show_icon + " " , contact_disp] |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
113 if self.show_status: |
499
28f4ce741ae5
primitivus: fixed display for selected entity in contacts list + added indentation for status message
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
114 status_disp = ('status',"\n " + status) if status else "" |
497
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
115 display.append(status_disp) |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
116 header = '(*) ' if contact in self.alert_jid else '' |
497
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
117 widget = sat_widgets.SelectableText(display, |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
118 selected = contact==self.selected, |
50dd2a0196c0
primitivus: contacts list improvments:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
119 header=header) |
192
879beacb8e16
Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents:
184
diff
changeset
|
120 widget.data = contact |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
121 content.append(widget) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
122 urwid.connect_signal(widget, 'change', self.__contactClicked) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
123 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
124 def __buildList(self): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
125 """Build the main contact list widget""" |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
126 content = urwid.SimpleListWalker([]) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
127 group_keys = self.groups.keys() |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
128 group_keys.sort() |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
129 for key in group_keys: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
130 unfolded = self.groups[key][0] |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
131 if key!=None: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
132 header = '[-]' if unfolded else '[+]' |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
201
diff
changeset
|
133 widget = sat_widgets.ClickableText(key,header=header+' ') |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
134 content.append(widget) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
135 urwid.connect_signal(widget, 'click', self.__groupClicked) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
136 if unfolded: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
137 self.__buildContact(content, self.groups[key][1]) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
138 return urwid.ListBox(content) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
139 |
164
5d7a011d78ba
Primitivus: contact list: new method UnselectAll
Goffi <goffi@goffi.org>
parents:
153
diff
changeset
|
140 def unselectAll(self): |
5d7a011d78ba
Primitivus: contact list: new method UnselectAll
Goffi <goffi@goffi.org>
parents:
153
diff
changeset
|
141 """Unselect all contacts""" |
168 | 142 self.selected = None |
164
5d7a011d78ba
Primitivus: contact list: new method UnselectAll
Goffi <goffi@goffi.org>
parents:
153
diff
changeset
|
143 for widget in self.frame.body.body: |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
201
diff
changeset
|
144 if widget.__class__ == sat_widgets.SelectableText: |
164
5d7a011d78ba
Primitivus: contact list: new method UnselectAll
Goffi <goffi@goffi.org>
parents:
153
diff
changeset
|
145 widget.setState(False, invisible=True) |
5d7a011d78ba
Primitivus: contact list: new method UnselectAll
Goffi <goffi@goffi.org>
parents:
153
diff
changeset
|
146 |
5d7a011d78ba
Primitivus: contact list: new method UnselectAll
Goffi <goffi@goffi.org>
parents:
153
diff
changeset
|
147 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
148 def get_contact(self): |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
149 """Return contact currently selected""" |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
150 return self.selected |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 def clear_contacts(self): |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 """clear all the contact list""" |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
154 self.groups={} |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
155 self.selected = None |
184
8ea1510d474b
Primitivus: fixed contact list clear
Goffi <goffi@goffi.org>
parents:
168
diff
changeset
|
156 self.unselectAll() |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
157 self._update() |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
159 def replace(self, jid, groups=[None]): |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
160 """add a contact to the list if doesn't exist, else update it""" |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
161 assert isinstance(groups, list) |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
162 assert isinstance(jid, JID) |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
163 if not groups: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
164 groups=[None] |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
165 for group in groups: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
166 if not self.groups.has_key(group): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
167 self.groups[group] = [True,set()] #[unfold,list_of_contacts] |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
168 self.groups[group][1].add(jid.short) |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
169 self._update() |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
170 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
171 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
172 """contacts = self.list_wid.getAllValues() |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
173 if jid.short not in contacts: |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
174 contacts.append(jid.short) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
175 contacts.sort() |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
116
diff
changeset
|
176 self.list_wid.changeValues(contacts) |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
177 self._emit('change')""" |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
178 |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
179 def disconnect(self, jid): |
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
180 """mark a contact disconnected""" |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
181 self.remove(jid.short) |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 |
128
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
183 def remove(self, param_jid): |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 """remove a contact from the list""" |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
185 groups_to_remove = [] |
128
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
186 jid = JID(param_jid) |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
187 for group in self.groups: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
188 contacts = self.groups[group][1] |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
189 if jid.short in contacts: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
190 contacts.remove(jid.short) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
191 if not len(contacts): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
192 groups_to_remove.append(group) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
193 for group in groups_to_remove: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
194 del self.groups[group] |
500
00d3679976ab
primitivus: keep focus position in contacts list on redraw
Goffi <goffi@goffi.org>
parents:
499
diff
changeset
|
195 self._update() |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
197 def add(self, jid, param_groups=[None]): |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 """add a contact to the list""" |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
199 self.replace(jid,param_groups) |
116
7c482ecac0ff
primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 |