Mercurial > libervia-web
annotate browser_side/dialog.py @ 216:9827cda1a6b0
browser_side: added key listener to login and register panels
- pressing enter set the focus to the next field or validate the form
fix bug 29
author | souliane <souliane@mailoo.org> |
---|---|
date | Sun, 08 Sep 2013 13:40:01 +0200 |
parents | a05e16f4a343 |
children | f3898fbb00c3 |
rev | line source |
---|---|
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 """ |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 Libervia: a Salut à Toi frontend |
165 | 6 Copyright (C) 2011, 2012, 2013 Jérôme Poisson <goffi@goffi.org> |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 This program is free software: you can redistribute it and/or modify |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 it under the terms of the GNU Affero General Public License as published by |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 (at your option) any later version. |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 This program is distributed in the hope that it will be useful, |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 GNU Affero General Public License for more details. |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 You should have received a copy of the GNU Affero General Public License |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 along with this program. If not, see <http://www.gnu.org/licenses/>. |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 """ |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from pyjamas.ui.VerticalPanel import VerticalPanel |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from pyjamas.ui.HorizontalPanel import HorizontalPanel |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
24 from pyjamas.ui.PopupPanel import PopupPanel |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from pyjamas.ui.DialogBox import DialogBox |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 from pyjamas.ui.ListBox import ListBox |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 from pyjamas.ui.Button import Button |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
28 from pyjamas.ui.TextBox import TextBox |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
29 from pyjamas.ui.Label import Label |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
30 from pyjamas.ui.HTML import HTML |
62 | 31 from pyjamas.ui.Frame import Frame |
48
153de5d461a4
added Social Contract \o. (in French only so far)
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
32 from pyjamas.ui import HasAlignment |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
33 from pyjamas.ui.KeyboardListener import KEY_ESCAPE, KEY_ENTER |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
34 from pyjamas.ui.MouseListener import MouseWheelHandler |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
35 from pyjamas import DOM |
211
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
36 from pyjamas import Window |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
37 |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
38 # List here the patterns that are not allowed in contact group names |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
39 FORBIDDEN_PATTERNS_IN_GROUP = () |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 class ContactsChooser(DialogBox): |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 def __init__(self, host, callback, nb_contact=None, text='Please select contacts'): |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 """ |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 ContactsChooser allow to select one or several connected contacts |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 @param host: SatWebFrontend instance |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 @param callback: method to call when contacts have been choosed |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 @param nb_contact: number of contacts that have to be selected, None for no limit |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 """ |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 self.host = host |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 self.callback = callback |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 self.nb_contact = nb_contact |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 DialogBox.__init__(self, centered=True) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 content = VerticalPanel() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 content.setWidth('100%') |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 self.contacts_list = ListBox() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 self.contacts_list.setVisibleItemCount(10) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 self.contacts_list.setMultipleSelect(True) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 self.contacts_list.setWidth("100%") |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 self.contacts_list.setStyleName('contactsChooser') |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 self.contacts_list.addChangeListener(self.onChange) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 content.add(self.contacts_list) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 button_panel = HorizontalPanel() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 self.choose_button = Button("Choose", self.onChoose) |
125
f9d63624699f
radio collective integration, first draft
Goffi <goffi@goffi.org>
parents:
95
diff
changeset
|
66 if (nb_contact): |
f9d63624699f
radio collective integration, first draft
Goffi <goffi@goffi.org>
parents:
95
diff
changeset
|
67 self.choose_button.setEnabled(False) |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 button_panel.add(self.choose_button) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 button_panel.add(Button("Cancel", self.onCancel)) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 content.add(button_panel) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 self.setHTML(text) |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
72 self.setWidget(content) |
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
73 |
62 | 74 def onChange(self, sender): |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 if self.nb_contact: |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 if len(self.contacts_list.getSelectedValues()) == self.nb_contact: |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 self.choose_button.setEnabled(True) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 else: |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 self.choose_button.setEnabled(False) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 def getContacts(self): |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 """ |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 Actually ask to choose the contacts |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 """ |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 self.contacts_list.clear() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 for contact in self.host.contact_panel.getConnected(): |
32
6b8da70b0799
browser_side: contactsChooser now discard MUC rooms
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
87 if contact not in [room.bare for room in self.host.room_list]: |
6b8da70b0799
browser_side: contactsChooser now discard MUC rooms
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
88 self.contacts_list.addItem(contact) |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 self.show() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 |
62 | 91 def onChoose(self, sender): |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 self.hide() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 self.callback(self.contacts_list.getSelectedValues()) |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 |
62 | 95 def onCancel(self, sender): |
26
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 self.hide() |
824516b247e6
browser side: added ContactsChooser dialog
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
98 class GenericConfirmDialog(DialogBox): |
39
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
99 |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
100 def __init__(self, widgets, callback, title='Confirmation'): |
39
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
101 """ |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
102 Dialog to confirm an action |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
103 @param callback: method to call when contacts have been choosed |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
104 """ |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
105 self.callback = callback |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
106 DialogBox.__init__(self, centered=True) |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
107 |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
108 content = VerticalPanel() |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
109 content.setWidth('100%') |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
110 for wid in widgets: |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
111 content.add(wid) |
39
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
112 button_panel = HorizontalPanel() |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
113 self.confirm_button = Button("OK", self.onConfirm) |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
114 button_panel.add(self.confirm_button) |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
115 button_panel.add(Button("Cancel", self.onCancel)) |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
116 content.add(button_panel) |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
117 self.setHTML(title) |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
118 self.setWidget(content) |
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
119 |
62 | 120 def onConfirm(self, sender): |
39
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
121 self.hide() |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
122 self.callback(True) |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
123 |
62 | 124 def onCancel(self, sender): |
39
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
125 self.hide() |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
126 self.callback(False) |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
127 |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
128 |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
129 class ConfirmDialog(GenericConfirmDialog): |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
130 |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
131 def __init__(self, callback, text='Are you sure ?', title='Confirmation'): |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
132 GenericConfirmDialog.__init__(self, [HTML(text)], callback, title) |
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
133 |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
134 |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
135 class GenericDialog(DialogBox): |
48
153de5d461a4
added Social Contract \o. (in French only so far)
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
136 """Dialog which just show a widget and a close button""" |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
137 |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
138 def __init__(self, title, main_widget, callback=None, options=None): |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
139 """Simple notice dialog box |
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
140 @param title: HTML put in the header |
145
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
141 @param main_widget: widget put in the body |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
142 @param callback: method to call on closing |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
143 @param options: one or more of the following options: |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
144 - NO_CLOSE: don't add a close button""" |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
145 DialogBox.__init__(self, centered=True) |
42 | 146 self.callback = callback |
145
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
147 if not options: |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
148 options = [] |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
149 _body = VerticalPanel() |
48
153de5d461a4
added Social Contract \o. (in French only so far)
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
150 _body.setSize('100%','100%') |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
151 _body.setSpacing(4) |
145
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
152 _body.add(main_widget) |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
153 _body.setCellWidth(main_widget, '100%') |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
154 _body.setCellHeight(main_widget, '100%') |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
155 if not 'NO_CLOSE' in options: |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
156 _close_button = Button("Close", self.onClose) |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
157 _body.add(_close_button) |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
158 _body.setCellHorizontalAlignment(_close_button, HasAlignment.ALIGN_CENTER) |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
159 self.setHTML(title) |
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
160 self.setWidget(_body) |
145
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
161 self.panel.setSize('100%', '100%') #Need this hack to have correct size in Gecko & Webkit |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
162 |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
163 def close(self): |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
164 """Same effect as clicking the close button""" |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
165 self.onClose(None) |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
166 |
62 | 167 def onClose(self, sender): |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
168 self.hide() |
42 | 169 if self.callback: |
170 self.callback() | |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
171 |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
172 class InfoDialog(GenericDialog): |
48
153de5d461a4
added Social Contract \o. (in French only so far)
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
173 |
145
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
174 def __init__(self, title, body, callback = None, options = None): |
c0035e5e2d08
browser side: misc dialog improvment:
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
175 GenericDialog.__init__(self, title, HTML(body), callback, options) |
48
153de5d461a4
added Social Contract \o. (in French only so far)
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
176 |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
177 class PopupPanelWrapper(PopupPanel): |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
178 """This wrapper catch Escape event to avoid request cancellation by Firefox""" |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
179 |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
180 def onEventPreview(self, event): |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
181 if event.type in ["keydown", "keypress", "keyup"] and event.keyCode == KEY_ESCAPE: |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
182 #needed to prevent request cancellation in Firefox |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
183 event.preventDefault() |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
184 return PopupPanel.onEventPreview(self, event) |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
185 |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
186 class ExtTextBox(TextBox): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
187 """Extended TextBox""" |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
188 |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
189 def __init__(self, *args, **kwargs): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
190 if 'enter_cb' in kwargs: |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
191 self.enter_cb = kwargs['enter_cb'] |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
192 del kwargs['enter_cb'] |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
193 TextBox.__init__(self, *args, **kwargs) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
194 self.addKeyboardListener(self) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
195 |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
196 def onKeyUp(self, sender, keycode, modifiers): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
197 pass |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
198 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
199 def onKeyDown(self, sender, keycode, modifiers): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
200 pass |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
201 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
202 def onKeyPress(self, sender, keycode, modifiers): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
203 if self.enter_cb and keycode == KEY_ENTER: |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
204 self.enter_cb(self) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
205 |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
206 class GroupSelector(DialogBox): |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
207 |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
208 def __init__(self, top_widgets, initial_groups, selected_groups, |
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
209 ok_title, ok_cb = None, cancel_cb = None): |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
210 DialogBox.__init__(self, centered = True) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
211 main_panel = VerticalPanel() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
212 self.ok_cb = ok_cb |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
213 self.cancel_cb = cancel_cb |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
214 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
215 for wid in top_widgets: |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
216 main_panel.add(wid) |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
217 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
218 main_panel.add(Label('Select in which groups your contact is:')) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
219 self.list_box = ListBox() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
220 self.list_box.setMultipleSelect(True) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
221 self.list_box.setVisibleItemCount(5) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
222 self.setAvailableGroups(initial_groups) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
223 self.setGroupsSelected(selected_groups) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
224 main_panel.add(self.list_box) |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
225 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
226 add_group_panel = HorizontalPanel() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
227 add_group_lb = Label('Add group:') |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
228 add_group_tb = ExtTextBox(enter_cb = self.onGroupInput) |
208
bbcad87585eb
browser side: added "add" button in GroupSelector's add group dialog
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
229 add_group_bt = Button("add", lambda sender: self.onGroupInput(add_group_tb)) |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
230 add_group_panel.add(add_group_lb) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
231 add_group_panel.add(add_group_tb) |
208
bbcad87585eb
browser side: added "add" button in GroupSelector's add group dialog
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
232 add_group_panel.add(add_group_bt) |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
233 main_panel.add(add_group_panel) |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
234 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
235 button_panel = HorizontalPanel() |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
236 button_panel.add(Button(ok_title, self.onOK)) |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
237 button_panel.add(Button("Cancel", self.onCancel)) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
238 main_panel.add(button_panel) |
216
9827cda1a6b0
browser_side: added key listener to login and register panels
souliane <souliane@mailoo.org>
parents:
212
diff
changeset
|
239 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
240 self.setWidget(main_panel) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
241 |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
242 def getSelectedGroups(self): |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
243 """Return a list of selected groups""" |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
244 return self.list_box.getSelectedValues() |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
245 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
246 def setAvailableGroups(self, groups): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
247 _groups = list(set(groups)) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
248 _groups.sort() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
249 self.list_box.clear() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
250 for group in _groups: |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
251 self.list_box.addItem(group) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
252 |
57
e552a67b933d
Contact update + add dedication in About dialog
Goffi <goffi@goffi.org>
parents:
55
diff
changeset
|
253 def setGroupsSelected(self, selected_groups): |
209
4564c7bc06a7
browser side: fixed setGroupsSelected in GroupSelector
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
254 self.list_box.setItemTextSelection(selected_groups) |
211
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
255 |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
256 def onOK(self, sender): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
257 self.hide() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
258 if self.ok_cb: |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
259 self.ok_cb(self) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
260 |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
261 def onCancel(self, sender): |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
262 self.hide() |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
263 if self.cancel_cb: |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
264 self.cancel_cb(self) |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
265 |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
266 def onGroupInput(self, sender): |
211
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
267 text = sender.getText() |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
268 for pattern in FORBIDDEN_PATTERNS_IN_GROUP: |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
269 if pattern in text: |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
270 Window.alert("The pattern '%s' is not allowed in group names." % pattern) |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
271 return |
49920d76aa6a
browser side: added a mechanism to define forbidden patterns during new contact group creation
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
272 self.list_box.addItem(text) |
52
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
273 sender.setText('') |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
274 self.list_box.setItemSelected(self.list_box.getItemCount()-1, "selected") |
4419ef07bb2b
browser side: adding contact, first draft
Goffi <goffi@goffi.org>
parents:
49
diff
changeset
|
275 |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
209
diff
changeset
|
276 |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
277 class WheelTextBox(TextBox, MouseWheelHandler): |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
278 |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
279 def __init__(self, *args, **kwargs): |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
280 TextBox.__init__(self, *args, **kwargs) |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
281 MouseWheelHandler.__init__(self) |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
282 |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
283 |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
284 class IntSetter(HorizontalPanel): |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
285 """This class show a bar with button to set an int value""" |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
286 |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
287 def __init__(self, label, value=0, value_max=None, visible_len=3): |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
288 """initialize the intSetter |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
289 @param label: text shown in front of the setter |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
290 @param value: initial value |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
291 @param value_max: limit value, None or 0 for unlimited""" |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
292 HorizontalPanel.__init__(self) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
293 self.value = value |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
294 self.value_max = value_max |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
295 _label = Label(label) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
296 self.add(_label) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
297 self.setCellWidth(_label, "100%") |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
298 minus_button = Button("-", self.onMinus) |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
299 self.box = WheelTextBox() |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
300 self.box.setVisibleLength(visible_len) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
301 self.box.setText(str(value)) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
302 self.box.addInputListener(self) |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
303 self.box.addMouseWheelListener(self) |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
304 plus_button = Button("+", self.onPlus) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
305 self.add(minus_button) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
306 self.add(self.box) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
307 self.add(plus_button) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
308 self.valueChangedListener = [] |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
309 |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
310 def addValueChangeListener(self, listener): |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
311 self.valueChangedListener.append(listener) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
312 |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
313 def removeValueChangeListener(self, listener): |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
314 if listener in self.valueChangedListener: |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
315 self.valueChangedListener.remove(listener) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
316 |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
317 def _callListeners(self): |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
318 for listener in self.valueChangedListener: |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
319 listener(self.value) |
92
dd54bc13ac81
browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents:
90
diff
changeset
|
320 |
dd54bc13ac81
browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents:
90
diff
changeset
|
321 def setValue(self, value): |
dd54bc13ac81
browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents:
90
diff
changeset
|
322 """Change the value and fire valueChange listeners""" |
dd54bc13ac81
browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents:
90
diff
changeset
|
323 self.value = value |
94
8f9d30672225
browser side: widgets' setting reset button update fix
Goffi <goffi@goffi.org>
parents:
93
diff
changeset
|
324 self.box.setText(str(value)) |
92
dd54bc13ac81
browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents:
90
diff
changeset
|
325 self._callListeners() |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
326 |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
327 def onMinus(self, sender, step=1): |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
328 self.value = max(0, self.value - step) |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
329 self.box.setText(str(self.value)) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
330 self._callListeners() |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
331 |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
332 def onPlus(self, sender, step=1): |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
333 self.value += step |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
334 if self.value_max: |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
335 self.value = min(self.value, self.value_max) |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
336 self.box.setText(str(self.value)) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
337 self._callListeners() |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
338 |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
339 def onInput(self, sender): |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
340 """Accept only valid integer && normalize print (no leading 0)""" |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
341 try: |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
342 self.value = int(self.box.getText()) if self.box.getText() else 0 |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
343 except ValueError: |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
344 pass |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
345 if self.value_max: |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
346 self.value = min(self.value, self.value_max) |
90
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
347 self.box.setText(str(self.value)) |
9729ed7171a6
browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
348 self._callListeners() |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
349 |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
350 def onMouseWheel(self, sender, velocity): |
212
a05e16f4a343
browser side: bug fix (missing "self." before value_max)
souliane <souliane@mailoo.org>
parents:
211
diff
changeset
|
351 if velocity > 0: |
95
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
352 self.onMinus(sender, 10) |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
353 else: |
1c75fd97baf9
browser side: widgets' setting: mouse wheel can now be used to change values
Goffi <goffi@goffi.org>
parents:
94
diff
changeset
|
354 self.onPlus(sender, 10) |