annotate urwid_satext/sat_widgets.py @ 107:ed2675f92f7c

menus management improvment
author Goffi <goffi@goffi.org>
date Wed, 10 Dec 2014 19:08:35 +0100
parents b2fee87c1d5a
children 5bb3b7e25bf6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
3
64
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
4 # Urwid SàT extensions
71
eddb8369ba06 dates udpate
Goffi <goffi@goffi.org>
parents: 70
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
64
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
6 #
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
7 # This program is free software: you can redistribute it and/or modify
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
8 # it under the terms of the GNU Lesser General Public License as published by
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
10 # (at your option) any later version.
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
11 #
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
12 # This program is distributed in the hope that it will be useful,
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
15 # GNU Lesser General Public License for more details.
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
16 #
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
17 # You should have received a copy of the GNU Lesser General Public License
5cef69971f23 headers fixes
Goffi <goffi@goffi.org>
parents: 59
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
19
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
20 import urwid
89
2141f07b5fdd primitivus: no more direct error/warning methods for logging
Goffi <goffi@goffi.org>
parents: 88
diff changeset
21 import logging as log
44
9fc778aab7f5 fix for urwid 1.0.0
Goffi <goffi@goffi.org>
parents: 30
diff changeset
22 import encodings
9fc778aab7f5 fix for urwid 1.0.0
Goffi <goffi@goffi.org>
parents: 30
diff changeset
23 utf8decode = lambda s: encodings.codecs.utf_8_decode(s)[0]
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
24
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
25 import uuid
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
26
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
27 import collections
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
28
59
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
29 from urwid.util import is_mouse_press #XXX: is_mouse_press is not included in urwid in 1.0.0
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
30 from .keys import action_key_map as a_key
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
31
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
32 FOCUS_KEYS = (a_key['FOCUS_SWITCH'], a_key['FOCUS_UP'], a_key['FOCUS_DOWN'])
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
33
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
34
94
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
35 def getFocusDirection(key, inversed=False):
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
36 """Return direction and rotate boolean depending on key
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
37 @param key: one of FOCUS_KEYS
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
38 @param inversed: inverse directions if True
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
39 @return (tuple): (direction, rotate) where
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
40 - direction is 1 or -1
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
41 - rotate is False if we should stop at the begin/end of the widgets list
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
42 """
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
43 if not inversed:
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
44 direction = 1 if key in (a_key['FOCUS_SWITCH'], a_key['FOCUS_UP']) else -1
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
45 else:
98
8bf5a35450f0 Fixed getFocusDirection direction when inversed, and FocusFrame focus order.
Goffi <goffi@goffi.org>
parents: 97
diff changeset
46 direction = -1 if key in (a_key['FOCUS_SWITCH'], a_key['FOCUS_UP']) else 1
94
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
47 rotate = key == a_key['FOCUS_SWITCH']
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
48 return direction, rotate
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
49
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
50
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
51 class AdvancedEdit(urwid.Edit):
7
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
52 """Edit box with some custom improvments
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
53 new chars:
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
54 - C-a: like 'home'
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
55 - C-e: like 'end'
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
56 - C-k: remove everything on the right of the cursor
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
57 - C-w: remove the word on the back
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
58 new behaviour: emit a 'click' signal when enter is pressed"""
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
59 signals = urwid.Edit.signals + ['click']
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
60
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
61 def setCompletionMethod(self, callback):
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
62 """Define method called when completion is asked
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
63 @callback: method with 2 arguments:
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
64 - the text to complete
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
65 - if there was already a completion, a dict with
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
66 - 'completed':last completion
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
67 - 'completion_pos': cursor position where the completion starts
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
68 - 'position': last completion cursor position
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
69 this dict must be used (and can be filled) to find next completion)
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
70 and which return the full text completed"""
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
71 self.completion_cb = callback
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
72 self.completion_data = {}
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
73
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
74 def keypress(self, size, key):
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
75 #TODO: insert mode is not managed yet
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
76 if key == a_key['EDIT_HOME']:
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
77 key = 'home'
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
78 elif key == a_key['EDIT_END']:
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
79 key = 'end'
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
80 elif key == a_key['EDIT_DELETE_TO_END']:
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
81 self._delete_highlighted()
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
82 self.set_edit_text(self.edit_text[:self.edit_pos])
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
83 elif key == a_key['EDIT_DELETE_LAST_WORD']:
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
84 before = self.edit_text[:self.edit_pos]
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
85 pos = before.rstrip().rfind(" ")+1
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
86 self.set_edit_text(before[:pos] + self.edit_text[self.edit_pos:])
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
87 self.set_edit_pos(pos)
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
88 elif key == a_key['EDIT_ENTER']:
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
89 self._emit('click')
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
90 elif key == a_key['EDIT_COMPLETE']:
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
91 try:
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
92 before = self.edit_text[:self.edit_pos]
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
93 if self.completion_data:
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
94 if (not self.completion_data['completed']
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
95 or self.completion_data['position'] != self.edit_pos
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
96 or not before.endswith(self.completion_data['completed'])):
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
97 self.completion_data.clear()
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
98 else:
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
99 before = before[:-len(self.completion_data['completed'])]
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
100 complet = self.completion_cb(before, self.completion_data)
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
101 self.completion_data['completed'] = complet[len(before):]
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
102 self.set_edit_text(complet+self.edit_text[self.edit_pos:])
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
103 self.set_edit_pos(len(complet))
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
104 self.completion_data['position'] = self.edit_pos
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
105 return
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
106 except AttributeError:
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
107 #No completion method defined
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
108 pass
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
109 return super(AdvancedEdit, self).keypress(size, key)
59
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
110
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
111
59
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
112 class Password(AdvancedEdit):
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
113 """Edit box which doesn't show what is entered (show '*' or other char instead)"""
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
114
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
115 def __init__(self, *args, **kwargs):
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
116 """Same args than Edit.__init__ with an additional keyword arg 'hidden_char'
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
117 @param hidden_char: char to show instead of what is actually entered: default '*'
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
118 """
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
119 self.hidden_char=kwargs['hidden_char'] if kwargs.has_key('hidden_char') else '*'
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
120 self.__real_text=''
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
121 super(Password, self).__init__(*args, **kwargs)
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
122
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
123 def set_edit_text(self, text):
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
124 self.__real_text = text
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
125 hidden_txt = len(text)*'*'
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
126 super(Password, self).set_edit_text(hidden_txt)
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
127
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
128 def get_edit_text(self):
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
129 return self.__real_text
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
130
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
131 def insert_text(self, text):
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
132 self._edit_text = self.__real_text
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
133 super(Password,self).insert_text(text)
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
134
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
135 def render(self, size, focus=False):
a99951c9ce2a Password now use AdvancedEdit to take advantage of shortcuts
Goffi <goffi@goffi.org>
parents: 57
diff changeset
136 return super(Password, self).render(size, focus)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
137
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
138
57
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
139 class ModalEdit(AdvancedEdit):
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
140 """AdvancedEdit with vi-like mode management
68
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
141 - there is a new 'mode' property which can be changed with properties
57
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
142 specified during init
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
143 - completion callback received a new 'mode' argument
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
144 """
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
145
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
146 def __init__(self, modes, *args, **kwargs):
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
147 """ first argument is "modes", others are the same paramaters as AdvancedEdit
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
148 @param modes: dictionnary in the form:
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
149 'key_to_change_mode': ('Mode', caption)
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
150 e.g.: 'i': ('INSERTION', '> ')
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
151 There *MUST* be a None key (for NORMAL mode)"""
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
152 assert(isinstance(modes, dict) and None in modes)
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
153 self._modes = modes
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
154 super(ModalEdit, self).__init__(*args, **kwargs)
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
155 self.mode = self._modes[None][0]
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
156
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
157 @property
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
158 def mode(self):
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
159 return self._mode
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
160
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
161 @mode.setter
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
162 def mode(self, value):
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
163 mode_key = None
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
164 for key in self._modes:
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
165 if self._modes[key][0] == value:
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
166 mode_key = key
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
167 break
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
168
57
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
169 mode, caption = self._modes[mode_key]
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
170 self._mode = mode
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
171 self.set_caption(caption)
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
172 if not mode_key: #we are in NORMAL mode
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
173 self.set_edit_text('')
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
174
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
175 def setCompletionMethod(self, callback):
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
176 """ Same as AdvancedEdit.setCompletionMethod, but with a third argument: current mode"""
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
177 super(ModalEdit, self).setCompletionMethod(lambda text,data: callback(text, data, self._mode))
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
178
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
179 def keypress(self, size, key):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
180 if key == a_key['MODAL_ESCAPE']:
57
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
181 self.mode = "NORMAL"
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
182 return
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
183 if self._mode == 'NORMAL' and key in self._modes:
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
184 self.mode = self._modes[key][0]
d493f95724a7 new ModalEdit for vi-like bahaviour
Goffi <goffi@goffi.org>
parents: 56
diff changeset
185 return
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
186 return super(ModalEdit, self).keypress(size, key)
4
c94cdbfdf3e8 primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents: 3
diff changeset
187
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
188
67
c270867a80f9 updated deprecated FlowWidget use
Goffi <goffi@goffi.org>
parents: 66
diff changeset
189 class SurroundedText(urwid.Widget):
7
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
190 """Text centered on a repeated character (like a Divider, but with a text in the center)"""
67
c270867a80f9 updated deprecated FlowWidget use
Goffi <goffi@goffi.org>
parents: 66
diff changeset
191 _sizing = frozenset(['flow'])
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
192
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
193 def __init__(self,text,car=utf8decode('─')):
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
194 self.text=text
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
195 self.car=car
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
196
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
197 def rows(self,size,focus=False):
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
198 return self.display_widget(size, focus).rows(size, focus)
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
199
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
200 def render(self, size, focus=False):
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
201 return self.display_widget(size, focus).render(size, focus)
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
202
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
203 def display_widget(self, size, focus):
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
204 (maxcol,) = size
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
205 middle = (maxcol-len(self.text))/2
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
206 render_text = middle * self.car + self.text + (maxcol - len(self.text) - middle) * self.car
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
207 return urwid.Text(render_text)
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
208
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
209
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
210 class AlwaysSelectableText(urwid.WidgetWrap):
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
211 """Text which can be selected with space"""
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
212 signals = ['change']
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
213
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
214 def __init__(self, text, align='left', header='', focus_attr='default_focus', selected_text=None, selected=False, data=None):
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
215 """
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
216 @param text: same as urwid.Text's text parameter
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
217 @param align: same as urwid.Text's align parameter
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
218 @select_attr: attrbute to use when selected
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
219 @param selected: is the text selected ?
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
220 """
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
221 self.focus_attr = focus_attr
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
222 self._selected = False
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
223 self._was_focused = False
69
b39c81cdd863 removed __valid_text: urwid now manage basestring subclasses, it's not necessary anymore
Goffi <goffi@goffi.org>
parents: 68
diff changeset
224 self.header = header
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
225 self.text = text
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
226 urwid.WidgetWrap.__init__(self, urwid.Text("",align=align))
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
227 self.setSelectedText(selected_text)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
228 self.setState(selected)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
229
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
230 def getValue(self):
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
231 if isinstance(self.text,basestring):
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
232 return self.text
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
233 list_attr = self.text if isinstance(self.text, list) else [self.text]
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
234 txt = ""
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
235 for attr in list_attr:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
236 if isinstance(attr,tuple):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
237 txt+=attr[1]
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
238 else:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
239 txt+=attr
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
240 return txt
9
6650747dfdcb primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 8
diff changeset
241
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
242 def get_text(self):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
243 """for compatibility with urwid.Text"""
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
244 return self.getValue()
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
245
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
246 def set_text(self, text):
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
247 """/!\ set_text doesn't change self.selected_txt !"""
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
248 self.text = text
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
249 self.setState(self._selected,invisible=True)
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
250
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
251 def setSelectedText(self, text=None):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
252 """Text to display when selected
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
253 @text: text as in urwid.Text or None for default value"""
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
254 if text == None:
27
d8def22e429a version change before release
Goffi <goffi@goffi.org>
parents: 26
diff changeset
255 text = ('selected',self.getValue())
69
b39c81cdd863 removed __valid_text: urwid now manage basestring subclasses, it's not necessary anymore
Goffi <goffi@goffi.org>
parents: 68
diff changeset
256 self.selected_txt = text
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
257 if self._selected:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
258 self.setState(self._selected)
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
259
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
260 def _set_txt(self):
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
261 txt_list = [self.header]
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
262 txt = self.selected_txt if self._selected else self.text
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
263 if isinstance(txt,list):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
264 txt_list.extend(txt)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
265 else:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
266 txt_list.append(txt)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
267 self._w.base_widget.set_text(txt_list)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
268
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
269
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
270 def setState(self, selected, invisible=False):
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
271 """Change state
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
272
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
273 @param selected: boolean state value
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
274 @param invisible: don't emit change signal if True
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
275 """
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
276 assert type(selected)==bool
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
277 self._selected=selected
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
278 self._set_txt()
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
279 self._was_focused = False
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
280 self._invalidate()
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
281 if not invisible:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
282 self._emit("change", self._selected)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
283
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
284 def getState(self):
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
285 return self._selected
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
286
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
287 def selectable(self):
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
288 return True
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
289
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
290 def keypress(self, size, key):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
291 if key in (a_key['TEXT_SELECT'], a_key['TEXT_SELECT2']):
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
292 self.setState(not self._selected)
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
293 else:
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
294 return key
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
295
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
296 def mouse_event(self, size, event, button, x, y, focus):
53
d34f2b0f68d3 urwid 1.0.0 update: fixed missing is_mouse_press
Goffi <goffi@goffi.org>
parents: 44
diff changeset
297 if is_mouse_press(event) and button == 1:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
298 self.setState(not self._selected)
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
299 return True
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
300
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
301 return False
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
302
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
303 def render(self, size, focus=False):
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
304 attr_list = self._w.base_widget._attrib
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
305 if not focus:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
306 if self._was_focused:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
307 self._set_txt()
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
308 self._was_focused = False
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
309 else:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
310 if not self._was_focused:
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
311 if not attr_list:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
312 attr_list.append((self.focus_attr,len(self._w.base_widget.text)))
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
313 else:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
314 for idx in range(len(attr_list)):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
315 attr,attr_len = attr_list[idx]
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
316 if attr == None:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
317 attr = self.focus_attr
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
318 attr_list[idx] = (attr,attr_len)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
319 else:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
320 if not attr.endswith('_focus'):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
321 attr+="_focus"
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
322 attr_list[idx] = (attr,attr_len)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
323 self._w.base_widget._invalidate()
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
324 self._was_focused = True #bloody ugly hack :)
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
325 return self._w.render(size, focus)
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
326
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
327
95
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
328 class SelectableText(AlwaysSelectableText):
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
329 """Like AlwaysSelectableText but not selectable when text is empty"""
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
330
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
331 def selectable(self):
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
332 return bool(self.text)
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
333
ca9a77f3b53e SelectableText is now unselectable if its text is empty, AlwaysSelectable class has the former behaviour.
Goffi <goffi@goffi.org>
parents: 94
diff changeset
334
9
6650747dfdcb primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 8
diff changeset
335 class ClickableText(SelectableText):
6650747dfdcb primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 8
diff changeset
336 signals = SelectableText.signals + ['click']
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
337
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
338 def setState(self, selected, invisible=False):
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
339 super(ClickableText,self).setState(False,True)
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
340 if not invisible:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
341 self._emit('click')
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
342
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
343
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
344 class CustomButton(ClickableText):
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
345
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
346 def __init__(self, label, on_press=None, user_data=None, left_border="[ ", right_border=" ]", align="left"):
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
347 self.label = label
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
348 self.left_border = left_border
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
349 self.right_border = right_border
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
350 super(CustomButton, self).__init__([left_border, label, right_border], align=align)
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
351 self.size = len(self.get_text())
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
352 if on_press:
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
353 urwid.connect_signal(self, 'click', on_press, user_data)
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
354
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
355 def getSize(self):
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
356 """Return representation size of the button"""
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
357 return self.size
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
358
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
359 def get_label(self):
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
360 return self.label[1] if isinstance(self.label,tuple) else self.label
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
361
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
362 def set_label(self, label):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
363 self.label = label
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
364 self.set_text([self.left_border, label, self.right_border])
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
365
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
366
68
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
367 class ListOption(unicode):
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
368 """Unicode which manage label and value
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
369
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
370 This class similar to unicode, but which make the difference between value and label
68
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
371 label is show when use as unicode, the .value attribute contain the actual value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
372 Can be initialised with:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
373 - basestring (label = value = given string)
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
374 - a tuple with (value, label)
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
375 XXX: comparaison is made against value, not the label which is the one displayed
68
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
376 """
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
377
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
378 def __new__(cls, option):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
379 if (isinstance(option, cls)):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
380 return option
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
381 elif isinstance(option, basestring):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
382 value = label = option
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
383 elif (isinstance(option, tuple) and len(option) == 2):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
384 value, label = option
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
385 else:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
386 raise NotImplementedError
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
387 if not label:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
388 label = value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
389 instance = super(ListOption, cls).__new__(cls, label)
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
390 instance._value = value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
391 return instance
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
392
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
393 def __eq__(self, other):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
394 # XXX: try to compare values, if other has no value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
395 # (e.g. unicode string) try to compare to other itself
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
396 try:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
397 return self._value == other._value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
398 except AttributeError:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
399 return self._value == other
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
400
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
401 def __ne__(self, other):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
402 # XXX: see __eq__
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
403 try:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
404 return self._value != other._value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
405 except AttributeError:
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
406 return self._value != other
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
407
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
408 @property
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
409 def value(self):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
410 """ return option value """
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
411 return self._value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
412
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
413 @value.setter
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
414 def value(self, value):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
415 self._value = value
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
416
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
417 @staticmethod
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
418 def fromOptions(options):
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
419 """ convert a list of string/tuple options to a list of listOption
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
420 @param options: list of managed option type (basestring, tuple)
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
421 return: list of ListOption
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
422 """
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
423 return [(ListOption(option)) for option in options]
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
424
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
425
91
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
426 class UnselectableListBox(urwid.ListBox):
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
427 """List box that can be unselectable if all widget are unselectable and visible"""
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
428
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
429 def __init__(self, body):
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
430 super(UnselectableListBox, self).__init__(body)
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
431 self.__size_cache = None
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
432
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
433 def selectable(self):
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
434 """Selectable that return False if everything is visible and nothing is selectable"""
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
435 if self.__size_cache is None:
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
436 return self._selectable
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
437 middle, top, bottom = self.calculate_visible(self.__size_cache, self.__focus_cache)
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
438 if top is None or bottom is None:
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
439 return True
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
440 if top[0] or bottom[0]:
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
441 # if not everything is visible, we can select
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
442 return True
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
443 for wid in self.body:
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
444 # if any widget is selectable, we can select
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
445 if wid.selectable():
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
446 return True
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
447 return False
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
448
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
449 def render(self, size, focus=False):
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
450 """Call ListBox render, but keep size and focus in cache"""
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
451 self.__size_cache = size
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
452 self.__focus_cache = focus
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
453 return super(UnselectableListBox, self).render(size, focus)
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
454
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
455
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
456 class GenericList(urwid.ListBox):
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
457 signals = ['click','change']
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
458
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
459 def __init__(self, options, style=None, align='left', option_type = SelectableText, on_click=None, on_change=None, user_data=None):
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
460 """Widget managing list of string and their selection
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
461
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
462 @param options: list of strings used for options
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
463 @param style: list of string:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
464 - 'single' if only one must be selected
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
465 - 'no_first_select' nothing selected when list is first displayed
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
466 - 'can_select_none' if we can select nothing
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
467 @param align: alignement of text inside the list
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
468 @param on_click: method called when click signal is emited
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
469 @param user_data: data sent to the callback for click signal
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
470 """
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
471 if style is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
472 style = []
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
473 self.single = 'single' in style
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
474 self.no_first_select = 'no_first_select' in style
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
475 self.can_select_none = 'can_select_none' in style
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
476 self.align = align
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
477 self.option_type = option_type
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
478 self.first_display = True
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
479
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
480 if on_click:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
481 urwid.connect_signal(self, 'click', on_click, user_data)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
482
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
483 if on_change:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
484 urwid.connect_signal(self, 'change', on_change, user_data)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
485
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
486 self.content = urwid.SimpleListWalker([])
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
487 super(GenericList, self).__init__(self.content)
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
488 self.changeValues(options)
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
489
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
490 def _onStateChange(self, widget, selected):
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
491 if self.single:
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
492 if not selected and not self.can_select_none:
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
493 #if in single mode, it's forbidden to unselect a value
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
494 widget.setState(True, invisible=True)
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
495 return
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
496 if selected:
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
497 self.unselectAll(invisible=True)
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
498 widget.setState(True, invisible=True)
56
22ab98a06492 GenericList: click/change signals fix
Goffi <goffi@goffi.org>
parents: 53
diff changeset
499 self._emit("change")
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
500
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
501 def _onClick(self, widget):
56
22ab98a06492 GenericList: click/change signals fix
Goffi <goffi@goffi.org>
parents: 53
diff changeset
502 self._emit("click", widget)
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
503
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
504 def unselectAll(self, invisible=False):
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
505 for widget in self.content:
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
506 if widget.getState():
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
507 widget.setState(False, invisible)
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
508 widget._invalidate()
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
509
2
07b7dcd314ff primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents: 1
diff changeset
510 def deleteValue(self, value):
07b7dcd314ff primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents: 1
diff changeset
511 """Delete the first value equal to the param given"""
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
512 for widget in self.content:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
513 if widget.getValue() == value:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
514 self.content.remove(widget)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
515 self._emit('change')
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
516 return
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
517 raise ValueError("%s ==> %s" % (str(value),str(self.content)))
2
07b7dcd314ff primitivus: basic contact list, connexion now work \o/
Goffi <goffi@goffi.org>
parents: 1
diff changeset
518
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
519 def getSelectedValue(self):
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
520 """Convenience method to get the value selected as a string in single mode, or None"""
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
521 values = self.getSelectedValues()
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
522 return values[0] if values else None
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
523
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
524 def getAllValues(self):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
525 """Return values of all items"""
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
526 return [widget.getValue() for widget in self.content]
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
527
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
528 def getSelectedValues(self):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
529 """Return values of selected items"""
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
530 result = []
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
531 for widget in self.content:
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
532 if widget.getState():
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
533 result.append(widget.getValue())
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
534 return result
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
535
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
536 def changeValues(self, new_values):
68
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
537 """Change all values in one shot"""
5c28bb50ae0d new ListOption class which work like unicode, but make the difference between value and label, so the displayed text can be different from the actual value.
Goffi <goffi@goffi.org>
parents: 67
diff changeset
538 new_values = ListOption.fromOptions(new_values)
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
539 if not self.first_display:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
540 old_selected = self.getSelectedValues()
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
541 widgets = []
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
542 for option in new_values:
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
543 widget = self.option_type(option, self.align)
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
544 if not self.first_display and option in old_selected:
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
545 widget.setState(True)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
546 widgets.append(widget)
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
547 for signal, callback in (('change', self._onStateChange), ('click', self._onClick)):
56
22ab98a06492 GenericList: click/change signals fix
Goffi <goffi@goffi.org>
parents: 53
diff changeset
548 try:
22ab98a06492 GenericList: click/change signals fix
Goffi <goffi@goffi.org>
parents: 53
diff changeset
549 urwid.connect_signal(widget, signal, callback)
22ab98a06492 GenericList: click/change signals fix
Goffi <goffi@goffi.org>
parents: 53
diff changeset
550 except NameError:
22ab98a06492 GenericList: click/change signals fix
Goffi <goffi@goffi.org>
parents: 53
diff changeset
551 pass #the widget given doesn't support the signal
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
552 self.content[:] = widgets
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
553 if self.first_display and self.single and new_values and not self.no_first_select:
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
554 self.content[0].setState(True)
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
555 self._emit('change')
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
556 self.first_display = False
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
557
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
558 def selectValue(self, value, move_focus=True):
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
559 """Select the first item which has the given value.
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
560
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
561 @param value
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
562 @param move_focus (bool):
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
563 - True to move the focus on the selected value,
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
564 - False to leave the focus position unchanged.
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
565
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
566 """
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
567 self.unselectAll()
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
568 idx = 0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
569 for widget in self.content:
28
654d31983f19 primitivus: fixed misnamed method in custom widget
Goffi <goffi@goffi.org>
parents: 27
diff changeset
570 if widget.getValue() == value:
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
571 widget.setState(True)
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
572 if move_focus:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
573 self.focus_position = idx
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
574 return
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
575 idx+=1
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
576
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
577 def selectValues(self, values, move_focus=True):
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
578 """Select all the given values.
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
579
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
580 @param values [set, list]
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
581 @param move_focus (boolean): True to move the focus on the last selected value,
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
582 False to leave the focus position unchanged.
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
583 """
78
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
584 if self.single:
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
585 if values:
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
586 self.selectValue(values[-1], move_focus)
78
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
587 return
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
588 self.unselectAll()
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
589 for value in values:
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
590 idx = 0
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
591 for widget in self.content:
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
592 if widget.getValue() == value:
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
593 widget.setState(True)
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
594 if move_focus:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
595 self.focus_position = idx
78
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
596 idx += 1
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
597
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
598
67
c270867a80f9 updated deprecated FlowWidget use
Goffi <goffi@goffi.org>
parents: 66
diff changeset
599 class List(urwid.Widget):
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
600 """FlowWidget list, same arguments as GenericList, with an additional one 'max_height'"""
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
601 signals = ['click','change']
67
c270867a80f9 updated deprecated FlowWidget use
Goffi <goffi@goffi.org>
parents: 66
diff changeset
602 _sizing = frozenset(['flow'])
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
603
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
604 def __init__(self, options, style=None, max_height=5, align='left', option_type = SelectableText, on_click=None, on_change=None, user_data=None):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
605 if style is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
606 style = []
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
607 self.genericList = GenericList(options, style, align, option_type, on_click, on_change, user_data)
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
608 urwid.connect_signal(self.genericList, 'change', self._onChange)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
609 urwid.connect_signal(self.genericList, 'click', self._onClick)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
610 self.max_height = max_height
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
611
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
612 def _onChange(self, widget):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
613 self._emit('change')
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
614
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
615 def _onClick(self, widget):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
616 self._emit('click')
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
617
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
618 def selectable(self):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
619 return True
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
620
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
621 def keypress(self, size, key):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
622 return self.displayWidget(size,True).keypress(size, key)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
623
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
624 def unselectAll(self, invisible=False):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
625 return self.genericList.unselectAll(invisible)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
626
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
627 def deleteValue(self, value):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
628 return self.genericList.deleteValue(value)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
629
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
630 def getSelectedValue(self):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
631 return self.genericList.getSelectedValue()
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
632
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
633 def getAllValues(self):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
634 return self.genericList.getAllValues()
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
635
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
636 def getSelectedValues(self):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
637 return self.genericList.getSelectedValues()
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
638
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
639 def changeValues(self, new_values):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
640 return self.genericList.changeValues(new_values)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
641
81
0ebd13729039 fixes default values for methods selectValue(s) of class List
souliane <souliane@mailoo.org>
parents: 80
diff changeset
642 def selectValue(self, value, move_focus=True):
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
643 return self.genericList.selectValue(value, move_focus)
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
644
81
0ebd13729039 fixes default values for methods selectValue(s) of class List
souliane <souliane@mailoo.org>
parents: 80
diff changeset
645 def selectValues(self, values, move_focus=True):
80
2d66ac0f4d75 add move_focus parameter to the methods selectValue(s) of list widgets
souliane <souliane@mailoo.org>
parents: 79
diff changeset
646 return self.genericList.selectValues(values, move_focus)
78
56c02f4731f9 added selectValues for lists widgets that support multi-selection
souliane <souliane@mailoo.org>
parents: 77
diff changeset
647
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
648 def render(self, size, focus=False):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
649 return self.displayWidget(size, focus).render(size, focus)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
650
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
651 def rows(self, size, focus=False):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
652 return self.displayWidget(size, focus).rows(size, focus)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
653
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
654 def displayWidget(self, size, focus):
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
655 list_size = sum([wid.rows(size, focus) for wid in self.genericList.content])
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
656 height = min(list_size,self.max_height) or 1
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
657 return urwid.BoxAdapter(self.genericList, height)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
658
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
659
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
660 ## MISC ##
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
661
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
662 class NotificationBar(urwid.WidgetWrap):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
663 """Bar used to show misc information to user"""
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
664 signals = ['change']
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
665
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
666 def __init__(self):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
667 self.waitNotifs = urwid.Text('')
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
668 self.message = ClickableText('')
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
669 urwid.connect_signal(self.message, 'click', lambda wid: self.showNext())
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
670 self.progress = ClickableText('')
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
671 self.columns = urwid.Columns([('fixed',6,self.waitNotifs),self.message,('fixed',4,self.progress)])
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
672 urwid.WidgetWrap.__init__(self, urwid.AttrMap(self.columns,'notifs'))
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
673 self.notifs = []
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
674
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
675 def __modQueue(self):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
676 """must be called each time the notifications queue is changed"""
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
677 self.waitNotifs.set_text(('notifs',"(%i)" % len(self.notifs) if self.notifs else ''))
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
678 self._emit('change')
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
679
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
680 def setProgress(self,percentage):
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
681 """Define the progression to show on the right side of the bar"""
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
682 if percentage == None:
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
683 self.progress.set_text('')
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
684 else:
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
685 self.progress.set_text(('notifs','%02i%%' % percentage))
97
8f5afab948a0 NotificationBar focus fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
686 if self.columns.focus != self.progress:
8f5afab948a0 NotificationBar focus fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
687 self.columns.focus_position = len(self.columns.contents)-1
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
688 self._emit('change')
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
689
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
690 def addPopUp(self, pop_up_widget):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
691 """Add a popup to the waiting queue"""
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
692 self.notifs.append(('popup',pop_up_widget))
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
693 self.__modQueue()
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
694
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
695 def addMessage(self, message):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
696 "Add a message to the notificatio bar"
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
697 if not self.message.get_text():
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
698 self.message.set_text(('notifs',message))
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
699 self._invalidate()
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
700 self._emit('change')
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
701 else:
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
702 self.notifs.append(('message',message))
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
703 self.__modQueue()
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
704
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
705 def showNext(self):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
706 """Show next message if any, else delete current message"""
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
707 found = None
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
708 for notif in self.notifs:
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
709 if notif[0] == "message":
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
710 found = notif
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
711 break
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
712 if found:
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
713 self.notifs.remove(found)
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
714 self.message.set_text(('notifs',found[1]))
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
715 self.__modQueue()
97
8f5afab948a0 NotificationBar focus fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
716 self.focus_possition = 1
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
717 else:
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
718 self.message.set_text('')
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
719 self._emit('change')
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
720
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
721 def getNextPopup(self):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
722 """Return next pop-up and remove it from the queue
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
723 @return: pop-up or None if there is no more in the queue"""
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
724 ret = None
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
725 for notif in self.notifs:
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
726 if notif[0] == 'popup':
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
727 ret = notif[1]
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
728 break
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
729 if ret:
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
730 self.notifs.remove(notif)
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
731 self.__modQueue()
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
732 return ret
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
733
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
734 def isQueueEmpty(self):
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
735 return not bool(self.notifs)
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
736
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
737 def canHide(self):
97
8f5afab948a0 NotificationBar focus fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
738 """Return True if there is no important information to show"""
22
dfabea6f73b5 Primitivus: AdvancedEdit and Notification bar improved
Goffi <goffi@goffi.org>
parents: 21
diff changeset
739 return self.isQueueEmpty() and not self.message.get_text() and not self.progress.get_text()
16
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
740
263fe4d067ad Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 15
diff changeset
741
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
742 class MenuBox(urwid.WidgetWrap):
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
743 """Show menu items of a category in a box"""
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
744 signals = ['click']
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
745
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
746 def __init__(self,parent,items):
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
747 self.parent = parent
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
748 self.selected = None
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
749 content = urwid.SimpleListWalker([ClickableText(('menuitem',text)) for text in items])
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
750 for wid in content:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
751 urwid.connect_signal(wid, 'click', self.onClick)
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
752
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
753 self.listBox = urwid.ListBox(content)
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
754 menubox = urwid.LineBox(urwid.BoxAdapter(self.listBox,len(items)))
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
755 urwid.WidgetWrap.__init__(self,menubox)
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
756
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
757 def getValue(self):
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
758 return self.selected
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
759
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
760 def keypress(self, size, key):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
761 if key==a_key['MENU_BOX_UP']:
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
762 if self.listBox.get_focus()[1] == 0:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
763 self.parent.keypress(size, key)
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
764 elif key in (a_key['MENU_BOX_LEFT'], a_key['MENU_BOX_RIGHT']):
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
765 self.parent.keypress(size,'up')
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
766 self.parent.keypress(size,key)
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
767 return super(MenuBox,self).keypress(size,key)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
768
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
769 def mouse_event(self, size, event, button, x, y, focus):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
770 if button == 3:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
771 self.parent.keypress(size,'up')
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
772 return True
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
773 return super(MenuBox,self).mouse_event(size, event, button, x, y, focus)
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
774
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
775 def onClick(self, wid):
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
776 self.selected = wid.getValue()
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
777 self._emit('click')
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
778
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
779
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
780 class Menu(urwid.WidgetWrap):
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
781
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
782 def __init__(self,loop, x_orig=0):
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
783 """Menu widget
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
784 @param loop: main loop of urwid
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
785 @param x_orig: absolute start of the abscissa
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
786 """
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
787 self.loop = loop
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
788 self.menu_keys = []
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
789 self.menu = {}
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
790 self.x_orig = x_orig
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
791 self.shortcuts = {} #keyboard shortcuts
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
792 self.save_bottom = None
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
793 col_rol = ColumnsRoller()
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
794 urwid.WidgetWrap.__init__(self, urwid.AttrMap(col_rol,'menubar'))
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
795
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
796 def selectable(self):
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
797 return True
13
8cccbaadb9c5 Primitivus: menu roller doesn't go anymore on a menu if it's empty
Goffi <goffi@goffi.org>
parents: 12
diff changeset
798
8cccbaadb9c5 Primitivus: menu roller doesn't go anymore on a menu if it's empty
Goffi <goffi@goffi.org>
parents: 12
diff changeset
799 def getMenuSize(self):
8cccbaadb9c5 Primitivus: menu roller doesn't go anymore on a menu if it's empty
Goffi <goffi@goffi.org>
parents: 12
diff changeset
800 """return the current number of categories in this menu"""
8cccbaadb9c5 Primitivus: menu roller doesn't go anymore on a menu if it's empty
Goffi <goffi@goffi.org>
parents: 12
diff changeset
801 return len(self.menu_keys)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
802
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
803 def setOrigX(self, orig_x):
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
804 self.x_orig = orig_x
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
805
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
806 def __buildOverlay(self, menu_key, columns):
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
807 """Build the overlay menu which show menuitems
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
808 @param menu_key: name of the category
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
809 @param columns: column number where the menubox must be displayed"""
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
810 max_len = 0
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
811 for item in self.menu[menu_key]:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
812 if len(item[0]) > max_len:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
813 max_len = len(item[0])
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
814
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
815 self.save_bottom = self.loop.widget
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
816 menu_box = MenuBox(self,[item[0] for item in self.menu[menu_key]])
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
817 urwid.connect_signal(menu_box, 'click', self.onItemClick)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
818
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
819 self.loop.widget = urwid.Overlay(urwid.AttrMap(menu_box,'menubar'),self.save_bottom,('fixed left', columns),max_len+2,('fixed top',1),None)
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
820
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
821 def keypress(self, size, key):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
822 if key == a_key['MENU_DOWN']:
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
823 key = 'enter'
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
824 elif key == a_key['MENU_UP']:
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
825 if self.save_bottom:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
826 self.loop.widget = self.save_bottom
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
827 self.save_bottom = None
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
828
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
829 return self._w.base_widget.keypress(size, key)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
830
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
831 def checkShortcuts(self, key):
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
832 for shortcut in self.shortcuts.keys():
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
833 if key == shortcut:
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
834 category, item, callback = self.shortcuts[shortcut]
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
835 callback((category, item))
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
836 return key
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
837
79
33677d99ebdf addMenu allows to add a new category without adding an item
souliane <souliane@mailoo.org>
parents: 78
diff changeset
838 def addMenu(self, category, item=None, callback=None, shortcut=None):
33677d99ebdf addMenu allows to add a new category without adding an item
souliane <souliane@mailoo.org>
parents: 78
diff changeset
839 """Create the category if new and add a menu item (if item is not None).
33677d99ebdf addMenu allows to add a new category without adding an item
souliane <souliane@mailoo.org>
parents: 78
diff changeset
840
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
841 @param category: category of the menu (e.g. File/Edit)
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
842 @param item: menu item (e.g. new/close/about)
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
843 @callback: method to call when item is selected"""
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
844 if not category in self.menu.keys():
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
845 self.menu_keys.append(category)
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
846 self.menu[category] = []
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
847 button = CustomButton(('menubar',category), self.onCategoryClick,
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
848 left_border = ('menubar',"[ "),
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
849 right_border = ('menubar'," ]"))
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
850 self._w.base_widget.addWidget(button,button.getSize())
79
33677d99ebdf addMenu allows to add a new category without adding an item
souliane <souliane@mailoo.org>
parents: 78
diff changeset
851 if not item:
33677d99ebdf addMenu allows to add a new category without adding an item
souliane <souliane@mailoo.org>
parents: 78
diff changeset
852 return
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
853 self.menu[category].append((item, callback))
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
854 if shortcut:
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
855 assert(shortcut not in self.shortcuts.keys())
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
856 self.shortcuts[shortcut] = (category, item, callback)
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
857
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
858 def onItemClick(self, widget):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
859 category = self._w.base_widget.getSelected().get_label()
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
860 item = widget.getValue()
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
861 callback = None
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
862 for menu_item in self.menu[category]:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
863 if item == menu_item[0]:
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
864 callback = menu_item[1]
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
865 break
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
866 if callback:
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
867 self.keypress(None, a_key['MENU_UP'])
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
868 callback((category, item))
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
869
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
870 def onCategoryClick(self, button):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
871 self.__buildOverlay(button.get_label(),
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
872 self.x_orig + self._w.base_widget.getStartCol(button))
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
873
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
874 MenuItem = collections.namedtuple('MenuItem', ('name', 'widget'))
11
983840425a55 Primitivus: menu is now working
Goffi <goffi@goffi.org>
parents: 10
diff changeset
875
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
876 class MenuRoller(urwid.WidgetWrap):
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
877
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
878 def __init__(self, menus_list):
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
879 """Create a MenuRoller
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
880
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
881 @param menus_list: list of tuples which can be either:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
882 - (name, Menu instance)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
883 - (name, Menu instance, id)
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
884 """
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
885 assert menus_list
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
886 self.selected = None
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
887 self.menu_items = collections.OrderedDict()
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
888
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
889 self.columns = urwid.Columns([urwid.Text(''),urwid.Text('')])
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
890 urwid.WidgetWrap.__init__(self, self.columns)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
891
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
892 for menu_tuple in menus_list:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
893 try:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
894 name, menu, id_ = menu_tuple
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
895 except ValueError:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
896 name, menu = menu_tuple
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
897 id_ = None
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
898 self.addMenu(name, menu, id_)
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
899
77
e1655ba45fae MenuRoller doesn't propagate key pressed anymore if it manage a 'up' or 'down' event
Goffi <goffi@goffi.org>
parents: 76
diff changeset
900 def _showSelected(self):
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
901 """show menu selected"""
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
902 if self.selected is None:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
903 self.columns.contents[0] = (urwid.Text(''), ('given', 0, False))
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
904 self.columns.contents[1] = (urwid.Text(''), ('weight', 1, False))
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
905 else:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
906 menu_item = self.menu_items[self.selected]
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
907 name_txt = u'\u21c9 ' + menu_item.name + u' \u21c7 '
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
908 current_name = ClickableText(name_txt)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
909 name_len = len(name_txt)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
910 current_menu = menu_item.widget
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
911 current_menu.setOrigX(name_len)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
912 self.columns.contents[0] = (current_name, ('given', name_len, False))
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
913 self.columns.contents[1] = (current_menu, ('weight', 1, False))
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
914
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
915 def keypress(self, size, key):
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
916 menu_ids = self.menu_items.keys()
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
917 try:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
918 idx = menu_ids.index(self.selected)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
919 except ValueError:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
920 return super(MenuRoller, self).keypress(size, key)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
921
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
922 if key==a_key['MENU_ROLLER_UP']:
88
c95462c21966 primitivus (menu): MENU_ROLLER_(UP,DOWN) are not transmitted to next widget anymore
Goffi <goffi@goffi.org>
parents: 84
diff changeset
923 if self.columns.get_focus_column()==0:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
924 if idx > 0:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
925 self.selected = menu_ids[idx-1]
88
c95462c21966 primitivus (menu): MENU_ROLLER_(UP,DOWN) are not transmitted to next widget anymore
Goffi <goffi@goffi.org>
parents: 84
diff changeset
926 self._showSelected()
77
e1655ba45fae MenuRoller doesn't propagate key pressed anymore if it manage a 'up' or 'down' event
Goffi <goffi@goffi.org>
parents: 76
diff changeset
927 return
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
928 elif key==a_key['MENU_ROLLER_DOWN']:
88
c95462c21966 primitivus (menu): MENU_ROLLER_(UP,DOWN) are not transmitted to next widget anymore
Goffi <goffi@goffi.org>
parents: 84
diff changeset
929 if self.columns.get_focus_column()==0:
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
930 if idx < len(menu_ids)-1:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
931 self.selected = menu_ids[idx+1]
88
c95462c21966 primitivus (menu): MENU_ROLLER_(UP,DOWN) are not transmitted to next widget anymore
Goffi <goffi@goffi.org>
parents: 84
diff changeset
932 self._showSelected()
77
e1655ba45fae MenuRoller doesn't propagate key pressed anymore if it manage a 'up' or 'down' event
Goffi <goffi@goffi.org>
parents: 76
diff changeset
933 return
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
934 elif key==a_key['MENU_ROLLER_RIGHT']:
13
8cccbaadb9c5 Primitivus: menu roller doesn't go anymore on a menu if it's empty
Goffi <goffi@goffi.org>
parents: 12
diff changeset
935 if self.columns.get_focus_column()==0 and \
65
090f3e0754d3 fix for recent urwid versions (> 1.1.0)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
936 (isinstance(self.columns.contents[1][0], urwid.Text) or \
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
937 self.menu_items[self.selected].widget.getMenuSize()==0):
13
8cccbaadb9c5 Primitivus: menu roller doesn't go anymore on a menu if it's empty
Goffi <goffi@goffi.org>
parents: 12
diff changeset
938 return #if we have no menu or the menu is empty, we don't go the right column
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
939
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
940 return super(MenuRoller, self).keypress(size, key)
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
941
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
942 def addMenu(self, name, widget, menu_id=None):
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
943 """Add a menu
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
944
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
945 @param name: name of the menu to add, it name already exists, menu is not added
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
946 @param widget: instance of Menu
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
947 @param menu_id: id to use of this menu, or None to generate
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
948 @return: menu_id
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
949 """
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
950 names = {menu_item.name: id_ for id_, menu_item in self.menu_items.iteritems()}
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
951
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
952 if name not in names:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
953 id_ = menu_id or str(uuid.uuid4())
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
954 if id_ in self.menu_items:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
955 raise ValueError('Conflict: the id [{}] is already used'.format(id_))
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
956 self.menu_items[id_] = MenuItem(name, widget)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
957 else:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
958 id_ = names[name]
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
959 menu_item = self.menu_items[id_]
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
960 if menu_item.widget is not widget:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
961 raise ValueError("The menu with id [{}] exists and doesn't contain the given instance. Use replaceMenu if you want to change the menu.".format(id_))
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
962 if self.selected is None:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
963 self.selected = id_
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
964 self._showSelected()
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
965 return id_
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
966
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
967 def replaceMenu(self, name, widget, menu_id):
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
968 """Add a menu or replace it if the id already exists
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
969
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
970 @param name: name of the menu to add, it name already exists, menu is not added
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
971 @param widget: instance of Menu
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
972 @param menu_id: id or the menu
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
973 """
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
974 assert menu_id is not None
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
975 if menu_id in self.menu_items:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
976 del self.menu_items[menu_id]
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
977 self.addMenu(name, widget, menu_id)
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
978 if self.selected == menu_id:
77
e1655ba45fae MenuRoller doesn't propagate key pressed anymore if it manage a 'up' or 'down' event
Goffi <goffi@goffi.org>
parents: 76
diff changeset
979 self._showSelected() #if we are on the menu, we update it
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
980
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
981 def removeMenu(self, menu_id):
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
982 del self.menu_items[menu_id]
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
983 if self.selected == menu_id:
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
984 self.selected = self.menu_items.items[0] if self.menu_items else None
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
985 self._showSelected()
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
986
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
987 def checkShortcuts(self, key):
107
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
988 for menu_item in self.menu_items.values():
ed2675f92f7c menus management improvment
Goffi <goffi@goffi.org>
parents: 99
diff changeset
989 key = menu_item.widget.checkShortcuts(key)
12
7e63429cc929 Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 11
diff changeset
990 return key
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
991
10
024b79b61a31 Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents: 9
diff changeset
992
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
993 ## DIALOGS ##
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
994
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
995 class GenericDialog(urwid.WidgetWrap):
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
996
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
997 def __init__(self, widgets_lst, title, style=None, **kwargs):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
998 if style is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
999 style = []
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1000 frame_header = urwid.AttrMap(urwid.Text(title,'center'),'title')
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1001
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1002 buttons = None
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1003
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1004 if "OK/CANCEL" in style:
24
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1005 cancel_arg = [kwargs['cancel_value']] if kwargs.has_key('cancel_value') else []
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1006 ok_arg = [kwargs['ok_value']] if kwargs.has_key('ok_value') else []
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1007 buttons = [urwid.Button(_("Cancel"), kwargs['cancel_cb'], *cancel_arg),
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1008 urwid.Button(_("Ok"), kwargs['ok_cb'], *ok_arg)]
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1009 elif "YES/NO" in style:
24
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1010 yes_arg = [kwargs['yes_value']] if kwargs.has_key('yes_value') else []
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1011 no_arg = [kwargs['no_value']] if kwargs.has_key('no_value') else []
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1012 buttons = [urwid.Button(_("Yes"), kwargs['yes_cb'], *yes_arg),
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1013 urwid.Button(_("No"), kwargs['no_cb'], *no_arg)]
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
1014 if "OK" in style:
24
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1015 ok_arg = [kwargs['ok_value']] if kwargs.has_key('ok_value') else []
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1016 buttons = [urwid.Button(_("Ok"), kwargs['ok_cb'], *ok_arg)]
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1017 if buttons:
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1018 buttons_flow = urwid.GridFlow(buttons, max([len(button.get_label()) for button in buttons])+4, 1, 1, 'center')
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1019 body_content = urwid.SimpleListWalker(widgets_lst)
91
b447a9c6f1d3 added UnselectableListBox which is a ListBox which can be unselectable when everything is not selectable and visible. Its is used in dialogs
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1020 frame_body = UnselectableListBox(body_content)
24
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1021 frame = FocusFrame(frame_body, frame_header, buttons_flow if buttons else None, 'footer' if buttons else 'body')
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1022 decorated_frame = urwid.LineBox(frame)
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1023 urwid.WidgetWrap.__init__(self, decorated_frame)
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1024
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1025
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1026 class InputDialog(GenericDialog):
7
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
1027 """Dialog with an edit box"""
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1028
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1029 def __init__(self, title, instrucions, style=None, default_txt = '', **kwargs):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1030 if style is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1031 style = ['OK/CANCEL']
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1032 instr_wid = urwid.Text(instrucions+':')
24
67a19cfeab8f Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 22
diff changeset
1033 edit_box = AdvancedEdit(edit_text=default_txt)
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1034 GenericDialog.__init__(self, [instr_wid,edit_box], title, style, ok_value=edit_box, **kwargs)
74
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1035 self._w.base_widget.focusposition = 'body'
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1036
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1037
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1038 class ConfirmDialog(GenericDialog):
7
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
1039 """Dialog with buttons for confirm or cancel an action"""
0
cb72fb2bfa0d Primitivus: profile manager
Goffi <goffi@goffi.org>
parents:
diff changeset
1040
82
c456beff1779 ConfirmDialog now manage a body message
Goffi <goffi@goffi.org>
parents: 81
diff changeset
1041 def __init__(self, title, message=None, style=None, **kwargs):
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1042 if style is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1043 style = ['YES/NO']
82
c456beff1779 ConfirmDialog now manage a body message
Goffi <goffi@goffi.org>
parents: 81
diff changeset
1044 GenericDialog.__init__(self,
c456beff1779 ConfirmDialog now manage a body message
Goffi <goffi@goffi.org>
parents: 81
diff changeset
1045 [urwid.Text(message, 'center')] if message is not None else [],
c456beff1779 ConfirmDialog now manage a body message
Goffi <goffi@goffi.org>
parents: 81
diff changeset
1046 title,
c456beff1779 ConfirmDialog now manage a body message
Goffi <goffi@goffi.org>
parents: 81
diff changeset
1047 style,
c456beff1779 ConfirmDialog now manage a body message
Goffi <goffi@goffi.org>
parents: 81
diff changeset
1048 **kwargs)
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
1049
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1050
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1051 class Alert(GenericDialog):
7
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
1052 """Dialog with just a message and a OK button"""
1
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
1053
a5c9603dac37 primitivus: added Alert widget
Goffi <goffi@goffi.org>
parents: 0
diff changeset
1054 def __init__(self, title, message, style=['OK'], **kwargs):
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1055 GenericDialog.__init__(self, [urwid.Text(message, 'center')], title, style, ok_value=None, **kwargs)
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1056
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1057 ## CONTAINERS ##
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1058
67
c270867a80f9 updated deprecated FlowWidget use
Goffi <goffi@goffi.org>
parents: 66
diff changeset
1059 class ColumnsRoller(urwid.Widget):
c270867a80f9 updated deprecated FlowWidget use
Goffi <goffi@goffi.org>
parents: 66
diff changeset
1060 _sizing = frozenset(['flow'])
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1061
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1062 def __init__(self, widget_list = None, focus_column=0):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1063 self.widget_list = widget_list or []
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1064 self.focus_column = focus_column
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1065 self.__start = 0
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1066 self.__next = False
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1067
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1068 def addWidget(self, widget, width):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1069 self.widget_list.append((width,widget))
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1070 if len(self.widget_list) == 1:
74
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1071 self.focus_position = 0
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1072
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1073 def getStartCol(self, widget):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1074 """Return the column of the left corner of the widget"""
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1075 start_col = 0
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1076 for wid in self.widget_list[self.__start:]:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1077 if wid[1] == widget:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1078 return start_col
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1079 start_col+=wid[0]
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1080 return None
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1081
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1082 def selectable(self):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1083 try:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1084 return self.widget_list[self.focus_column][1].selectable()
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1085 except IndexError:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1086 return False
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1087
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1088 def keypress(self, size, key):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
1089 if key==a_key['COLUMNS_ROLLER_LEFT']:
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1090 if self.focus_column>0:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1091 self.focus_column-=1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1092 self._invalidate()
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1093 return
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
1094 if key==a_key['COLUMNS_ROLLER_RIGHT']:
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1095 if self.focus_column<len(self.widget_list)-1:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1096 self.focus_column+=1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1097 self._invalidate()
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1098 return
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1099 if self.focus_column<len(self.widget_list):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1100 return self.widget_list[self.focus_column][1].keypress(size,key)
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1101 return key
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1102
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1103 def getSelected(self):
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1104 """Return selected widget"""
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1105 return self.widget_list[self.focus_column][1]
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1106
74
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1107 @property
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1108 def focus_position(self):
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1109 return self.focus_column
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1110
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1111 @focus_position.setter
0afff3c54b6e replaced deprecated set_focus by focus_position
Goffi <goffi@goffi.org>
parents: 71
diff changeset
1112 def focus_position(self, idx):
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1113 if idx>len(self.widget_list)-1:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1114 idx = len(self.widget_list)-1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1115 self.focus_column = idx
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1116
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1117 def rows(self,size,focus=False):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1118 return 1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1119
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1120 def __calculate_limits(self, size):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1121 (maxcol,) = size
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1122 _prev = _next = False
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1123 start_wid = 0
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1124 end_wid = len(self.widget_list)-1
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1125
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1126 total_wid = sum([w[0] for w in self.widget_list])
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1127 while total_wid > maxcol:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1128 if self.focus_column == end_wid:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1129 if not _prev:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1130 total_wid+=1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1131 _prev = True
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1132 total_wid-=self.widget_list[start_wid][0]
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1133 start_wid+=1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1134 else:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1135 if not _next:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1136 total_wid+=1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1137 _next = True
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1138 total_wid-=self.widget_list[end_wid][0]
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1139 end_wid-=1
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1140
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1141 cols_left = maxcol - total_wid
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1142 self.__start = start_wid #we need to keep it for getStartCol
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1143 return _prev,_next,start_wid,end_wid,cols_left
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1144
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1145
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1146 def mouse_event(self, size, event, button, x, y, focus):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1147 (maxcol,)=size
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1148
53
d34f2b0f68d3 urwid 1.0.0 update: fixed missing is_mouse_press
Goffi <goffi@goffi.org>
parents: 44
diff changeset
1149 if is_mouse_press(event) and button == 1:
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1150 _prev,_next,start_wid,end_wid,cols_left = self.__calculate_limits(size)
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1151 if x==0 and _prev:
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
1152 self.keypress(size, a_key['COLUMNS_ROLLER_LEFT'])
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1153 return True
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1154 if x==maxcol-1 and _next:
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
1155 self.keypress(size, a_key['COLUMNS_ROLLER_RIGHT'])
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1156 return True
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1157
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1158 current_pos = 1 if _prev else 0
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1159 idx = 0
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1160 while current_pos<x and idx<len(self.widget_list):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1161 width,widget = self.widget_list[idx]
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1162 if x<=current_pos+width:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1163 self.focus_column = idx
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1164 self._invalidate()
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1165 if not hasattr(widget,'mouse_event'):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1166 return False
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1167 return widget.mouse_event((width,0), event, button,
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1168 x-current_pos, 0, focus)
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1169
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1170 current_pos+=self.widget_list[idx][0]
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1171 idx+=1
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1172
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1173 return False
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1174
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1175 def render(self, size, focus=False):
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1176 if not self.widget_list:
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents: 82
diff changeset
1177 return urwid.SolidCanvas(" ", size[0], 1)
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1178
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1179 _prev,_next,start_wid,end_wid,cols_left = self.__calculate_limits(size)
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1180
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1181 idx=start_wid
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1182 render = []
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1183
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1184 for width,widget in self.widget_list[start_wid:end_wid+1]:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1185 _focus = idx == self.focus_column and focus
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1186 render.append((widget.render((width,),_focus),False,_focus,width))
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1187 idx+=1
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1188 if _prev:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1189 render.insert(0,(urwid.Text([u"◀"]).render((1,),False),False,False,1))
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1190 if _next:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1191 render.append((urwid.Text([u"▶"],align='right').render((1+cols_left,),False),False,False,1+cols_left))
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1192 else:
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1193 render.append((urwid.SolidCanvas(" "*cols_left, size[0], 1),False,False,cols_left))
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1194
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1195 return urwid.CanvasJoin(render)
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1196
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1197
96
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1198 class FocusPile(urwid.Pile):
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1199 """A Pile Widget which manage SàT Focus keys"""
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1200 _focus_inversed = False
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1201
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1202 def keypress(self, size, key):
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1203 ret = super(FocusPile, self).keypress(size, key)
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1204 if not ret:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1205 return
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1206
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1207 if key in FOCUS_KEYS:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1208 direction, rotate = getFocusDirection(key, inversed = self._focus_inversed)
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1209 max_pos = len(self.contents) - 1
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1210 new_pos = self.focus_position + direction
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1211 if rotate:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1212 if new_pos > max_pos:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1213 new_pos = 0
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1214 elif new_pos < 0:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1215 new_pos = max_pos
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1216 try:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1217 self.focus_position = new_pos
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1218 except IndexError:
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1219 pass
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1220
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1221 return key
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1222
44fc94b0fe18 new FocusPile widget: a Pile which manage FOCUS_KEYS
Goffi <goffi@goffi.org>
parents: 95
diff changeset
1223
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1224 class FocusFrame(urwid.Frame):
94
66b65ed9baf2 focus direction and rotate boolean are now gotten from getFocusDirection
Goffi <goffi@goffi.org>
parents: 91
diff changeset
1225 """Frame-like which manage SàT Focus Keys"""
98
8bf5a35450f0 Fixed getFocusDirection direction when inversed, and FocusFrame focus order.
Goffi <goffi@goffi.org>
parents: 97
diff changeset
1226 ordered_positions = ('footer', 'body', 'header')
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1227
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1228 def keypress(self, size, key):
75
8ff563825080 FocusFrame is now based on Pile instead of Frame, header, body and footer attributes can be used to change part at any time
Goffi <goffi@goffi.org>
parents: 74
diff changeset
1229 ret = super(FocusFrame, self).keypress(size, key)
19
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1230 if not ret:
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1231 return
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1232
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1233 if key in FOCUS_KEYS:
98
8bf5a35450f0 Fixed getFocusDirection direction when inversed, and FocusFrame focus order.
Goffi <goffi@goffi.org>
parents: 97
diff changeset
1234 direction, rotate = getFocusDirection(key)
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1235
98
8bf5a35450f0 Fixed getFocusDirection direction when inversed, and FocusFrame focus order.
Goffi <goffi@goffi.org>
parents: 97
diff changeset
1236 positions = [pos for pos in self.ordered_positions if pos in self]
8bf5a35450f0 Fixed getFocusDirection direction when inversed, and FocusFrame focus order.
Goffi <goffi@goffi.org>
parents: 97
diff changeset
1237 selectables = [pos for pos in positions if self.contents[pos][0].selectable()] # keep positions which exists and have a selectable widget
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1238 if not selectables:
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1239 # no widget is selectable, we just return
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1240 return
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1241 idx = selectables.index(self.focus_position) + direction
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1242 if not rotate and (idx < 0 or idx >= len(selectables)):
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1243 # if we don't rotate, we stay where we are on the first and last position
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1244 return
75
8ff563825080 FocusFrame is now based on Pile instead of Frame, header, body and footer attributes can be used to change part at any time
Goffi <goffi@goffi.org>
parents: 74
diff changeset
1245 try:
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1246 self.focus_position = selectables[idx]
75
8ff563825080 FocusFrame is now based on Pile instead of Frame, header, body and footer attributes can be used to change part at any time
Goffi <goffi@goffi.org>
parents: 74
diff changeset
1247 except IndexError:
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1248 # happen if idx > len(selectables)
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1249 self.focus_position = selectables[0]
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1250 return
5
592cd64933dd Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 4
diff changeset
1251
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1252 return ret
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1253
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1254 def get_cursor_coords(self, size):
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1255 """Return the cursor coordinates of the focus widget."""
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1256 if not self.selectable():
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1257 return None
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1258 if not hasattr(self.focus, 'get_cursor_coords'):
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1259 return None
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1260 maxcol, maxrow = size
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1261 try:
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1262 if self.focus_position != 'body':
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1263 # only body is a box widget
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1264 size = (maxcol,)
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1265 col, row = self.focus.get_cursor_coords(size)
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1266 except TypeError:
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1267 return None
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1268 if self.focus_position == 'header':
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1269 return (col, row)
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1270 if self.focus_position == 'body':
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1271 header_rows = self.header.rows((maxcol,))
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1272 return (col, row + header_rows)
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1273 if self.focus_position == 'footer':
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1274 footer_rows = self.footer.rows((maxcol,))
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1275 return (col, row + (maxrow - footer_rows))
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1276 raise Exception('This line should not be reached')
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1277
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1278
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1279 class TabsContainer(urwid.WidgetWrap):
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1280 """ Container which can contain multiple box widgets associated to named tabs """
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1281 signals = ['click']
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1282
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1283 def __init__(self):
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1284 self._current_tab = None
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1285 self._buttons_cont = ColumnsRoller()
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1286 self.tabs = []
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1287 self._frame = FocusFrame(urwid.Filler(urwid.Text('')),urwid.Pile([self._buttons_cont,urwid.Divider(u"─")]))
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1288 urwid.WidgetWrap.__init__(self, self._frame)
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1289
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1290 def keypress(self, size, key):
19
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1291 return self._w.keypress(size,key)
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1292
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1293 def _buttonClicked(self, button, invisible=False):
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1294 """Called when a button on the tab is changed,
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1295 change the page
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1296 @param button: button clicked
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1297 @param invisible: emit signal only if False"""
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1298 tab_name = button.get_label()
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1299 for tab in self.tabs:
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1300 if tab[0] == tab_name:
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1301 break
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1302 if tab[0] != tab_name:
89
2141f07b5fdd primitivus: no more direct error/warning methods for logging
Goffi <goffi@goffi.org>
parents: 88
diff changeset
1303 log.error(_("INTERNAL ERROR: Tab not found"))
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1304 assert(False)
90
f5992b2a0dbf FocusFrame refactoring:
Goffi <goffi@goffi.org>
parents: 89
diff changeset
1305 self._frame.body = tab[1]
26
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1306 button.set_label(('title',button.get_label()))
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1307 if self._current_tab:
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1308 self._current_tab.set_label(self._current_tab.get_label())
fcc20ac7b68a Primitivus: major changes in SelectableText, menu can now be used with mouse, TabsContainer show wich tab is selected
Goffi <goffi@goffi.org>
parents: 25
diff changeset
1309 self._current_tab = button
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1310 if not invisible:
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1311 self._emit('click')
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1312
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1313 def _appendButton(self, name):
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1314 """Append a button to the frame header,
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1315 and link it to the page change method"""
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1316 button = CustomButton(name, self._buttonClicked, left_border = '', right_border=' | ')
18
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1317 self._buttons_cont.addWidget(button, button.getSize())
bdc83e857093 Primitivus: new widget ColumnsRoller which show FlowWidgets on the same row, and can roll between them if there is not enough space
Goffi <goffi@goffi.org>
parents: 17
diff changeset
1318 if len(self._buttons_cont.widget_list) == 1:
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1319 #first button: we set the focus and the body
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1320 self._buttons_cont.focus_position = 0
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1321 self._buttonClicked(button,True)
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1322
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1323 def addTab(self,name,content=None):
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1324 """Add a page to the container
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1325 @param name: name of the page (what appear on the tab)
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1326 @param content: content of the page:
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1327 - if None create and empty Listbox
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1328 - if it is a list instance, create a ListBox with the list in a body
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1329 - else it must be a box widget which will be used instead of the ListBox
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1330 @return: ListBox (content of the page)"""
76
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1331 if content is None or isinstance(content, list):
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1332 tab = urwid.ListBox(urwid.SimpleListWalker(content or []))
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1333 else:
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1334 tab = content
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1335
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1336 self.tabs.append([name, tab])
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1337 self._appendButton(name)
6c2a1b349416 TabsContainer now accept any box widget as tab content
Goffi <goffi@goffi.org>
parents: 75
diff changeset
1338 return tab
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1339
19
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1340 def addFooter(self, widget):
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1341 """Add a widget on the bottom of the tab (will be displayed on all pages)
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1342 @param widget: FlowWidget"""
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1343 self._w.footer = widget
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1344
19
0b83dd2b15d1 Primitivus: misc improvments on TabsContainer/FocusFrame
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1345
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1346 class HighlightColumns(urwid.AttrMap):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1347 """ Decorated columns which highlight all or some columns """
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1348
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1349 def __init__(self, highlight_cols, highlight_attr, *args, **kwargs):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1350 """ Create the HighlightColumns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1351 @param highlight_cols: tuple of columns to highlight, () to highlight to whole row
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1352 @param highlight_attr: name of the attribute to use when focused
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1353 other parameter are passed to urwid Columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1354
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1355 """
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1356 columns = urwid.Columns(*args, **kwargs)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1357 self.highlight_cols = highlight_cols
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1358 self.highlight_attr = highlight_attr
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1359 self.has_focus = False
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1360 if highlight_cols == ():
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1361 super(HighlightColumns, self).__init__(columns, None, highlight_attr)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1362 self.highlight_cols = None
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1363 else:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1364 super(HighlightColumns, self).__init__(columns, None)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1365
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1366 @property
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1367 def options(self):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1368 return self.base_widget.options
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1369
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1370 @property
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1371 def contents(self):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1372 return self.base_widget.contents
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1373
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1374 @property
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1375 def focus_position(self):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1376 return self.base_widget.focus_position
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1377
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1378 @focus_position.setter
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1379 def focus_position(self, value):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1380 self.base_widget.focus_position = value
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1381
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1382 def addWidget(self, wid, options):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1383 """ Add a widget to the columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1384 Widget is wrapped with AttrMap, that's why Columns.contents should not be used directly for appending new widgets
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1385 @param wid: widget to add
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1386 @param options: result of Columns.options(...)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1387
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1388 """
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1389 wrapper = urwid.AttrMap(wid, None)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1390 self.base_widget.contents.append((wrapper, options))
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1391
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1392
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1393 def render(self, size, focus=False):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1394 if self.highlight_cols and focus != self.has_focus:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1395 self.has_focus = focus
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1396 for idx in self.highlight_cols:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1397 wid = self.base_widget.contents[idx][0]
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1398 wid.set_attr_map({None: self.highlight_attr if focus else None})
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1399
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1400 return super(HighlightColumns, self).render(size, focus)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1401
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1402
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1403 class TableContainer(urwid.WidgetWrap):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1404 """ Widgets are disposed in row and columns """
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1405 signals = ['click']
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1406
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1407 def __init__(self, items=None, columns=None, dividechars=1, row_selectable=False, select_key='enter', options=None):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1408 """ Create a TableContainer
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1409 @param items: iterable of widgets to add to this container
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1410 @param columns: nb of columns of this table
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1411 @param dividechars: same as dividechars param for urwid.Columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1412 @param row_selectable: if True, row are always selectable, even if they don't contain any selectable widget
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1413 @param options: dictionnary with the following keys:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1414 - ADAPT: tuple of columns for which the size must be adapted to its contents,
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1415 empty tuple for all columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1416 - HIGHLIGHT: tuple of columns which must be higlighted on focus,
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1417 empty tuple for the whole row
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1418 - FOCUS_ATTR: Attribute name to use when focused (see HIGHLIGHT). Default is "table_selected"
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1419
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1420 """
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1421 pile = urwid.Pile([])
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1422 super(TableContainer, self).__init__(pile)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1423 if items is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1424 items = []
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1425 if columns is None: # if columns is None, we suppose only one row is given in items
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1426 columns = len(items)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1427 assert columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1428 self._columns = columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1429 self._row_selectable = row_selectable
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1430 self.select_key = select_key
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1431 if options is None:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1432 options = {}
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1433 for opt in ['ADAPT', 'HIGHLIGHT']:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1434 if opt in options:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1435 try:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1436 options[opt] = tuple(options[opt])
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1437 except TypeError:
89
2141f07b5fdd primitivus: no more direct error/warning methods for logging
Goffi <goffi@goffi.org>
parents: 88
diff changeset
1438 log.warning('[%s] option is not a tuple' % opt)
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1439 options[opt] = ()
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1440 self._options = options
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1441 self._dividechars = dividechars
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1442 self._idx = 0
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1443 self._longuest = self._columns * [0]
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1444 self._next_row_idx = None
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1445 for item in items:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1446 self.addWidget(item)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1447
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1448 def _getIdealSize(self, widget):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1449 """ return preferred size for widget, or 0 if we can't find it """
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1450 try:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1451 return len(widget.text)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1452 except AttributeError:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1453 return 0
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1454
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1455 def keypress(self, size, key):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1456 if key == self.select_key and self._row_selectable:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1457 self._emit('click')
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1458 else:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1459 return super(TableContainer, self).keypress(size, key)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1460
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1461
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1462 def addWidget(self, widget):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1463 # TODO: use a contents property ?
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1464 pile = self._w
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1465 col_idx = self._idx % self._columns
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1466
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1467 options = None
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1468
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1469 if col_idx == 0:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1470 # we have a new row
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1471 columns = HighlightColumns(self._options.get('HIGHLIGHT'), self._options.get('FOCUS_ATTR', 'table_selected'), [], dividechars=self._dividechars)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1472 columns.row_idx = self._next_row_idx
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1473 pile.contents.append((columns, pile.options()))
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1474 else:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1475 columns = pile.contents[-1][0]
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1476
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1477 if 'ADAPT' in self._options and (col_idx in self._options['ADAPT']
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1478 or self._options['ADAPT'] == ()):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1479 current_len = self._getIdealSize(widget)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1480 longuest = self._longuest[col_idx]
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1481 max_len = max(longuest, current_len)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1482 if max_len > longuest:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1483 self._longuest[col_idx] = max_len
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1484 for wid,_ in pile.contents[:-1]:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1485 col = wid.base_widget
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1486 col.contents[col_idx] = (col.contents[col_idx][0], col.options('given', max_len))
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1487 options = columns.options('given', max_len) if max_len else columns.options()
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1488
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1489 columns.addWidget(widget, options or columns.options())
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1490
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1491 if self._row_selectable and col_idx == self._columns - 1:
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1492 columns.addWidget(urwid.SelectableIcon(''), columns.options('given', 0))
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1493
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1494 if not columns.selectable() and columns.contents[-1][0].base_widget.selectable():
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1495 columns.focus_position = len(columns.contents)-1
99
b2fee87c1d5a Fixed focus when first row is not selectable in TableContainer
Goffi <goffi@goffi.org>
parents: 98
diff changeset
1496 if not self.selectable() and columns.selectable():
b2fee87c1d5a Fixed focus when first row is not selectable in TableContainer
Goffi <goffi@goffi.org>
parents: 98
diff changeset
1497 pile.focus_position = len(pile.contents) - 1
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1498 self._idx += 1
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1499
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1500 def setRowIndex(self, idx):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1501 self._next_row_idx = idx
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1502
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1503 def getSelectedWidgets(self):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1504 columns = self._w.focus
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1505 return (wid for wid, _ in columns.contents)
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1506
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1507 def getSelectedIndex(self):
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1508 columns = self._w.focus
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1509 return columns.row_idx
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1510
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1511 ## DECORATORS ##
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1512 class LabelLine(urwid.LineBox):
7
94868f58850b misc documentation
Goffi <goffi@goffi.org>
parents: 6
diff changeset
1513 """Like LineBox, but with a Label centered in the top line"""
6
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1514
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1515 def __init__(self, original_widget, label_widget):
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1516 urwid.LineBox.__init__(self, original_widget)
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1517 top_columns = self._w.widget_list[0]
d586d06a9d8f primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 5
diff changeset
1518 top_columns.widget_list[1] = label_widget
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1519
70
24d49f1d735f added TableContainer + some bug fixes (bad default parameters)
Goffi <goffi@goffi.org>
parents: 69
diff changeset
1520
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1521 class VerticalSeparator(urwid.WidgetDecoration, urwid.WidgetWrap):
21
96a2c5904e35 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 20
diff changeset
1522 def __init__(self, original_widget, left_char = u"│", right_char = ''):
15
8241b3157699 Primitivus: custom_widgets imrpovments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
1523 """Draw a separator on left and/or right of original_widget."""
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1524
8
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1525 widgets = [original_widget]
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1526 if left_char:
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1527 widgets.insert(0, ('fixed', 1, urwid.SolidFill(left_char)))
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1528 if right_char:
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1529 widgets.append(('fixed', 1, urwid.SolidFill(right_char)))
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1530 columns = urwid.Columns(widgets, box_columns = [0,2], focus_column = 1)
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1531 urwid.WidgetDecoration.__init__(self, original_widget)
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1532 urwid.WidgetWrap.__init__(self, columns)
ec01505ec109 primitivus chat window
Goffi <goffi@goffi.org>
parents: 7
diff changeset
1533
66
287ff3e1edd1 removed trailing spaces
Goffi <goffi@goffi.org>
parents: 65
diff changeset
1534