annotate src/browser/sat_browser/libervia_widget.py @ 707:dfe4b0291daa

server_side: remove unwanted "target" property in the HTTP to HTTPS link + use "<p>" instead of "<br>"
author souliane <souliane@mailoo.org>
date Sun, 07 Jun 2015 13:17:05 +0200
parents b395d1309936
children 26046f13e93b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
3
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
4 # Libervia: a Salut à Toi frontend
685
9877607c719a 2015 copyright dates update
Goffi <goffi@goffi.org>
parents: 676
diff changeset
5 # Copyright (C) 2011, 2012, 2013, 2014, 2015 Jérôme Poisson <goffi@goffi.org>
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
6
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
7 # This program is free software: you can redistribute it and/or modify
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
10 # (at your option) any later version.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
11
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
12 # This program is distributed in the hope that it will be useful,
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
15 # GNU Affero General Public License for more details.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
16
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
19 """Libervia base widget"""
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
20
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
21 import pyjd # this is dummy in pyjs
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
22 from sat.core.log import getLogger
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
23 log = getLogger(__name__)
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
24
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
25 from sat.core.i18n import _
635
40c3c6aaafaa browser side (LiberviaWidget): an error is raised when expect is True on getParent
Goffi <goffi@goffi.org>
parents: 632
diff changeset
26 from sat.core import exceptions
598
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
27 from sat_frontends.quick_frontend import quick_widgets
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
28
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
29 from pyjamas.ui.FlexTable import FlexTable
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
30 from pyjamas.ui.TabPanel import TabPanel
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from pyjamas.ui.SimplePanel import SimplePanel
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
32 from pyjamas.ui.AbsolutePanel import AbsolutePanel
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
33 from pyjamas.ui.VerticalPanel import VerticalPanel
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
34 from pyjamas.ui.HorizontalPanel import HorizontalPanel
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from pyjamas.ui.HTMLPanel import HTMLPanel
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
36 from pyjamas.ui.Label import Label
543
d02335553b5d browser_side (plugin OTR): display OTR states with icons instead of a text
souliane <souliane@mailoo.org>
parents: 536
diff changeset
37 from pyjamas.ui.HTML import HTML
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
38 from pyjamas.ui.Button import Button
320
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
39 from pyjamas.ui.Widget import Widget
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
40 from pyjamas.ui.ClickListener import ClickHandler
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
41 from pyjamas.ui import HasAlignment
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
42 from pyjamas.ui.DragWidget import DragWidget
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
43 from pyjamas.ui.DropWidget import DropWidget
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
44 from pyjamas import DOM
323
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 320
diff changeset
45 from pyjamas import Window
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 320
diff changeset
46
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 439
diff changeset
47 import dialog
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
48 import base_menu
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
49 import base_widget
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
50 import base_panel
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
51
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
52
662
ebb602d8b3f2 browser_side: replace all instances of 'str' with 'unicode'
souliane <souliane@mailoo.org>
parents: 659
diff changeset
53 unicode = str # FIXME: pyjamas workaround
ebb602d8b3f2 browser_side: replace all instances of 'str' with 'unicode'
souliane <souliane@mailoo.org>
parents: 659
diff changeset
54
ebb602d8b3f2 browser_side: replace all instances of 'str' with 'unicode'
souliane <souliane@mailoo.org>
parents: 659
diff changeset
55
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
56 # FIXME: we need to group several unrelated panels/widgets in this module because of isinstance tests and other references to classes (e.g. if we separate Drag n Drop classes in a separate module, we'll have cyclic import because of the references to LiberviaWidget in DropCell).
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
57 # TODO: use a more generic method (either use duck typing, or register classes in a generic way, without hard references), then split classes in separate modules
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
58
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
59
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
60 ### Drag n Drop ###
603
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
61
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
62
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
63 class DragLabel(DragWidget):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
64
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
65 def __init__(self, text, type_, host=None):
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
66 """Base of Drag n Drop mecanism in Libervia
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
67
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
68 @param text: data embedded with in drag n drop operation
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
69 @param type_: type of data that we are dragging
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
70 @param host: if not None, the host will be use to highlight BorderWidgets
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
71 """
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
72 DragWidget.__init__(self)
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
73 self.host = host
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
74 self._text = text
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
75 self.type_ = type_
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
76
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
77 def onDragStart(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
78 dt = event.dataTransfer
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
79 dt.setData('text/plain', "%s\n%s" % (self._text, self.type_))
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
80 dt.setDragImage(self.getElement(), 15, 15)
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
81 if self.host is not None:
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
82 current_panel = self.host.tab_panel.getCurrentPanel()
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
83 for widget in current_panel.widgets:
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
84 if isinstance(widget, BorderWidget):
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
85 widget.addStyleName('borderWidgetOnDrag')
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
86
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
87 def onDragEnd(self, event):
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
88 if self.host is not None:
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
89 current_panel = self.host.tab_panel.getCurrentPanel()
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
90 for widget in current_panel.widgets:
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
91 if isinstance(widget, BorderWidget):
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
92 widget.removeStyleName('borderWidgetOnDrag')
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
93
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
94
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
95 class LiberviaDragWidget(DragLabel):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
96 """ A DragLabel which keep the widget being dragged as class value """
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
97 current = None # widget currently dragged
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
98
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
99 def __init__(self, text, type_, widget):
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
100 DragLabel.__init__(self, text, type_, widget.host)
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
101 self.widget = widget
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
102
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
103 def onDragStart(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
104 LiberviaDragWidget.current = self.widget
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
105 DragLabel.onDragStart(self, event)
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
106
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
107 def onDragEnd(self, event):
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 589
diff changeset
108 DragLabel.onDragEnd(self, event)
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
109 LiberviaDragWidget.current = None
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
110
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
111
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
112 class DropCell(DropWidget):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
113 """Cell in the middle grid which replace itself with the dropped widget on DnD"""
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
114 drop_keys = {}
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
115
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
116 def __init__(self, host):
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
117 DropWidget.__init__(self)
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
118 self.host = host
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
119 self.setStyleName('dropCell')
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
120
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
121 @classmethod
598
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
122 def addDropKey(cls, key, cb):
603
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
123 """Add a association between a key and a class to create on drop.
598
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
124
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
125 @param key: key to be associated (e.g. "CONTACT", "CHAT")
603
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
126 @param cb: a callable (either a class or method) returning a
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
127 LiberviaWidget instance
598
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
128 """
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
129 DropCell.drop_keys[key] = cb
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 596
diff changeset
130
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
131 def onDragEnter(self, event):
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
132 if self == LiberviaDragWidget.current:
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
133 return
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
134 self.addStyleName('dragover')
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
135 DOM.eventPreventDefault(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
136
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
137 def onDragLeave(self, event):
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
138 if event.clientX <= self.getAbsoluteLeft() or event.clientY <= self.getAbsoluteTop() or\
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
139 event.clientX >= self.getAbsoluteLeft() + self.getOffsetWidth() - 1 or event.clientY >= self.getAbsoluteTop() + self.getOffsetHeight() - 1:
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
140 # We check that we are inside widget's box, and we don't remove the style in this case because
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
141 # if the mouse is over a widget inside the DropWidget, if will leave the DropWidget, and we
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
142 # don't want that
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
143 self.removeStyleName('dragover')
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
144
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
145 def onDragOver(self, event):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
146 DOM.eventPreventDefault(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
147
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
148 def _getCellAndRow(self, grid, event):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
149 """Return cell and row index where the event is occuring"""
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
150 cell = grid.getEventTargetCell(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
151 row = DOM.getParent(cell)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
152 return (row.rowIndex, cell.cellIndex)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
153
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
154 def onDrop(self, event):
603
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
155 """
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
156 @raise NoLiberviaWidgetException: something else than a LiberviaWidget
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
157 has been returned by the callback.
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
158 """
396
a71fcc27f231 browser_side: small improvements for ListManager
souliane <souliane@mailoo.org>
parents: 370
diff changeset
159 self.removeStyleName('dragover')
198
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
160 DOM.eventPreventDefault(event)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
161 dt = event.dataTransfer
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
162 # 'text', 'text/plain', and 'Text' are equivalent.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
163 try:
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
164 item, item_type = dt.getData("text/plain").split('\n') # Workaround for webkit, only text/plain seems to be managed
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
165 if item_type and item_type[-1] == '\0': # Workaround for what looks like a pyjamas bug: the \0 should not be there, and
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
166 item_type = item_type[:-1] # .strip('\0') and .replace('\0','') don't work. TODO: check this and fill a bug report
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
167 # item_type = dt.getData("type")
694
82123705474b massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 685
diff changeset
168 log.debug(u"message: %s" % item)
82123705474b massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 685
diff changeset
169 log.debug(u"type: %s" % item_type)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
170 except:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
171 log.debug("no message found")
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
172 item = '&nbsp;'
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
173 item_type = None
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
174 if item_type == "WIDGET":
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
175 if not LiberviaDragWidget.current:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
176 log.error("No widget registered in LiberviaDragWidget !")
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
177 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
178 _new_panel = LiberviaDragWidget.current
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
179 if self == _new_panel: # We can't drop on ourself
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
180 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
181 # we need to remove the widget from the panel as it will be inserted elsewhere
636
86ae737da6f3 browser side (widgets management): removed getWidgetsPanel: we use directly getParent which do the same thing + displayWidget now detect hidden widgets (widgets without parent WidgetsPanel)
Goffi <goffi@goffi.org>
parents: 635
diff changeset
182 widgets_panel = _new_panel.getParent(WidgetsPanel, expect=True)
197
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
183 wid_row = widgets_panel.getWidgetCoords(_new_panel)[0]
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
184 row_wids = widgets_panel.getLiberviaRowWidgets(wid_row)
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
185 if len(row_wids) == 1 and wid_row == widgets_panel.getWidgetCoords(self)[0]:
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
186 # the dropped widget is the only one in the same row
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
187 # as the target widget (self), we don't do anything
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
188 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
189 widgets_panel.removeWidget(_new_panel)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
190 elif item_type in self.drop_keys:
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
191 _new_panel = self.drop_keys[item_type](self.host, item)
603
462d0458e679 browser_side: base_widget.DropCell raises an exception if the callback doesn't return a LiberviaWidget instance
souliane <souliane@mailoo.org>
parents: 598
diff changeset
192 if not isinstance(_new_panel, LiberviaWidget):
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
193 raise base_widget.NoLiberviaWidgetException
39
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
194 else:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
195 log.warning("unmanaged item type")
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
196 return
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
197 if isinstance(self, LiberviaWidget):
596
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
198 # self.host.unregisterWidget(self) # FIXME
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
199 self.onQuit()
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
200 if not isinstance(_new_panel, LiberviaWidget):
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
201 log.warning("droping an object which is not a class of LiberviaWidget")
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
202 _flextable = self.getParent()
88
50b480fd0605 browser side: widgetsPanel is now scrollable when there are too many widgets, and widgets have a minimum size
Goffi <goffi@goffi.org>
parents: 86
diff changeset
203 _widgetspanel = _flextable.getParent().getParent()
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
204 row_idx, cell_idx = self._getCellAndRow(_flextable, event)
650
7e3cdc39c3e7 browser_side: fixes misc issues (forgotten parenthesis and wrong argument)
souliane <souliane@mailoo.org>
parents: 649
diff changeset
205 if self.host.getSelected() == self:
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
206 self.host.setSelected(None)
88
50b480fd0605 browser side: widgetsPanel is now scrollable when there are too many widgets, and widgets have a minimum size
Goffi <goffi@goffi.org>
parents: 86
diff changeset
207 _widgetspanel.changeWidget(row_idx, cell_idx, _new_panel)
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
208 """_unempty_panels = filter(lambda wid:not isinstance(wid,EmptyWidget),list(_flextable))
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
209 _width = 90/float(len(_unempty_panels) or 1)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
210 #now we resize all the cell of the column
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
211 for panel in _unempty_panels:
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
212 td_elt = panel.getElement().parentNode
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
213 DOM.setStyleAttribute(td_elt, "width", "%s%%" % _width)"""
596
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
214 if isinstance(self, quick_widgets.QuickWidget):
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
215 self.host.widgets.deleteWidget(self)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
216
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
217
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
218 class EmptyWidget(DropCell, SimplePanel):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
219 """Empty dropable panel"""
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
220
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
221 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
222 SimplePanel.__init__(self)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
223 DropCell.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
224 #self.setWidget(HTML(''))
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
225 self.setSize('100%', '100%')
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
226
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
227
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
228 class BorderWidget(EmptyWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
229 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
230 EmptyWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
231 self.addStyleName('borderPanel')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
232
617
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
233
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
234 class LeftBorderWidget(BorderWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
235 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
236 BorderWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
237 self.addStyleName('leftBorderWidget')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
238
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
239
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
240 class RightBorderWidget(BorderWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
241 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
242 BorderWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
243 self.addStyleName('rightBorderWidget')
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
244
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
245
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
246 class BottomBorderWidget(BorderWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
247 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
248 BorderWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
249 self.addStyleName('bottomBorderWidget')
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
250
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
251
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
252 class DropTab(Label, DropWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
253
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
254 def __init__(self, tab_panel, text):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
255 Label.__init__(self, text)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
256 DropWidget.__init__(self, tab_panel)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
257 self.tab_panel = tab_panel
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
258 self.setStyleName('dropCell')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
259 self.setWordWrap(False)
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
260
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
261 def _getIndex(self):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
262 """ get current index of the DropTab """
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
263 # XXX: awful hack, but seems the only way to get index
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
264 return self.tab_panel.tabBar.panel.getWidgetIndex(self.getParent().getParent()) - 1
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
265
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
266 def onDragEnter(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
267 #if self == LiberviaDragWidget.current:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
268 # return
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
269 self.parent.addStyleName('dragover')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
270 DOM.eventPreventDefault(event)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
271
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
272 def onDragLeave(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
273 self.parent.removeStyleName('dragover')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
274
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
275 def onDragOver(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
276 DOM.eventPreventDefault(event)
617
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
277
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
278 def onDrop(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
279 DOM.eventPreventDefault(event)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
280 self.parent.removeStyleName('dragover')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
281 if self._getIndex() == self.tab_panel.tabBar.getSelectedTab():
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
282 # the widget comes from the same tab, so nothing to do, we let it there
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
283 return
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
284
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
285 # FIXME: quite the same stuff as in DropCell, need some factorisation
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
286 dt = event.dataTransfer
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
287 # 'text', 'text/plain', and 'Text' are equivalent.
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
288 try:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
289 item, item_type = dt.getData("text/plain").split('\n') # Workaround for webkit, only text/plain seems to be managed
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
290 if item_type and item_type[-1] == '\0': # Workaround for what looks like a pyjamas bug: the \0 should not be there, and
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
291 item_type = item_type[:-1] # .strip('\0') and .replace('\0','') don't work. TODO: check this and fill a bug report
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
292 # item_type = dt.getData("type")
694
82123705474b massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 685
diff changeset
293 log.debug(u"message: %s" % item)
82123705474b massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 685
diff changeset
294 log.debug(u"type: %s" % item_type)
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
295 except:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
296 log.debug("no message found")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
297 item = '&nbsp;'
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
298 item_type = None
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
299
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
300 if item_type == "WIDGET":
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
301 if not LiberviaDragWidget.current:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
302 log.error("No widget registered in LiberviaDragWidget !")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
303 return
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
304 _new_panel = LiberviaDragWidget.current
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
305 elif item_type in DropCell.drop_keys:
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
306 pass # create the widget when we are sure there's a tab for it
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
307 else:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
308 log.warning("unmanaged item type")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
309 return
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
310
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
311 # XXX: when needed, new tab creation must be done exactly here to not mess up with LiberviaDragWidget.onDragEnd
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
312 try:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
313 widgets_panel = self.tab_panel.getWidget(self._getIndex())
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
314 except IndexError: # widgets panel doesn't exist, e.g. user dropped in "+" tab
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
315 widgets_panel = self.tab_panel.addWidgetsTab(None)
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
316 if widgets_panel is None: # user cancelled
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
317 return
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
318
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
319 if item_type == "WIDGET":
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
320 _new_panel.getParent(WidgetsPanel, expect=True).removeWidget(_new_panel)
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
321 else:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
322 _new_panel = DropCell.drop_keys[item_type](self.tab_panel.host, item)
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
323
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
324 widgets_panel.addWidget(_new_panel)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
325
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
326
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
327 ### Libervia Widget ###
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
328
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
329
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
330 class WidgetHeader(AbsolutePanel, LiberviaDragWidget):
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
331
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
332 def __init__(self, parent, host, title, info=None):
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
333 """
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
334 @param parent (LiberviaWidget): LiberWidget instance
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
335 @param host (SatWebFrontend): SatWebFrontend instance
543
d02335553b5d browser_side (plugin OTR): display OTR states with icons instead of a text
souliane <souliane@mailoo.org>
parents: 536
diff changeset
336 @param title (Label, HTML): text widget instance
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
337 @param info (Widget): text widget instance
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
338 """
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
339 AbsolutePanel.__init__(self)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
340 self.add(title)
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
341 if info:
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
342 # FIXME: temporary design to display the info near the menu
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
343 button_group_wrapper = HorizontalPanel()
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
344 button_group_wrapper.add(info)
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
345 else:
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
346 button_group_wrapper = SimplePanel()
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
347 button_group_wrapper.setStyleName('widgetHeader_buttonsWrapper')
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
348 button_group = base_widget.WidgetMenuBar(parent, host)
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
349 button_group.addItem('<img src="media/icons/misc/settings.png"/>', True, base_menu.SimpleCmd(parent.onSetting))
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
350 button_group.addItem('<img src="media/icons/misc/close.png"/>', True, base_menu.SimpleCmd(parent.onClose))
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
351 button_group_wrapper.add(button_group)
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
352 self.add(button_group_wrapper)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
353 self.addStyleName('widgetHeader')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
354 LiberviaDragWidget.__init__(self, "", "WIDGET", parent)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
355
210
3092f6b1710c browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 201
diff changeset
356
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
357 class LiberviaWidget(DropCell, VerticalPanel, ClickHandler):
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
358 """Libervia's widget which can replace itself with a dropped widget on DnD"""
210
3092f6b1710c browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 201
diff changeset
359
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
360 def __init__(self, host, title='', info=None, selectable=False, plugin_menu_context=None):
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
361 """Init the widget
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
362
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
363 @param host (SatWebFrontend): SatWebFrontend instance
662
ebb602d8b3f2 browser_side: replace all instances of 'str' with 'unicode'
souliane <souliane@mailoo.org>
parents: 659
diff changeset
364 @param title (unicode): title shown in the header of the widget
663
423182fea41c browser_side: fixes OTR using the new resource system and proper triggers (send and receive message) or listener (presence update)
souliane <souliane@mailoo.org>
parents: 662
diff changeset
365 @param info (unicode): info shown in the header of the widget
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
366 @param selectable (bool): True is widget can be selected by user
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
367 @param plugin_menu_context (iterable): contexts of menus to have (list of C.MENU_* constant)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
368 """
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
369 VerticalPanel.__init__(self)
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
370 DropCell.__init__(self, host)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
371 ClickHandler.__init__(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
372 self._selectable = selectable
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
373 self._plugin_menu_context = [] if plugin_menu_context is None else plugin_menu_context
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
374 self._title_id = HTMLPanel.createUniqueId()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
375 self._setting_button_id = HTMLPanel.createUniqueId()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
376 self._close_button_id = HTMLPanel.createUniqueId()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
377 self._title = Label(title)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
378 self._title.setStyleName('widgetHeader_title')
559
77372641e05d browser_side (plugin OTR): display the correct icons on opening the window + auto-open on accepted invitation
souliane <souliane@mailoo.org>
parents: 543
diff changeset
379 if info is not None:
663
423182fea41c browser_side: fixes OTR using the new resource system and proper triggers (send and receive message) or listener (presence update)
souliane <souliane@mailoo.org>
parents: 662
diff changeset
380 self._info = HTML(info)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
381 self._info.setStyleName('widgetHeader_info')
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
382 else:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
383 self._info = None
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
384 header = WidgetHeader(self, host, self._title, self._info)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
385 self.add(header)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
386 self.setSize('100%', '100%')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
387 self.addStyleName('widget')
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
388 if self._selectable:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
389 self.addClickListener(self)
309
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
390
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
391 @property
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
392 def plugin_menu_context(self):
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
393 return self._plugin_menu_context
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 663
diff changeset
394
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
395 def getDebugName(self):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
396 return "%s (%s)" % (self, self._title.getText())
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
397
458
1eeed8028199 browser side: rename parameter of getParent / getWidgetPanel from 'verbose' to 'expect'
souliane <souliane@mailoo.org>
parents: 449
diff changeset
398 def getParent(self, class_=None, expect=True):
1eeed8028199 browser side: rename parameter of getParent / getWidgetPanel from 'verbose' to 'expect'
souliane <souliane@mailoo.org>
parents: 449
diff changeset
399 """Return the closest ancestor of the specified class.
1eeed8028199 browser side: rename parameter of getParent / getWidgetPanel from 'verbose' to 'expect'
souliane <souliane@mailoo.org>
parents: 449
diff changeset
400
320
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
401 Note: this method overrides pyjamas.ui.Widget.getParent
458
1eeed8028199 browser side: rename parameter of getParent / getWidgetPanel from 'verbose' to 'expect'
souliane <souliane@mailoo.org>
parents: 449
diff changeset
402
320
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
403 @param class_: class of the ancestor to look for or None to return the first parent
635
40c3c6aaafaa browser side (LiberviaWidget): an error is raised when expect is True on getParent
Goffi <goffi@goffi.org>
parents: 632
diff changeset
404 @param expect: set to True if the parent is expected (raise an error if not found)
320
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
405 @return: the parent/ancestor or None if it has not been found
635
40c3c6aaafaa browser side (LiberviaWidget): an error is raised when expect is True on getParent
Goffi <goffi@goffi.org>
parents: 632
diff changeset
406 @raise exceptions.InternalError: expect is True and no parent is found
320
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
407 """
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
408 current = Widget.getParent(self)
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
409 if class_ is None:
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
410 return current # this is the default behavior
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
411 while current is not None and not isinstance(current, class_):
a0ded7df30f7 browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
souliane <souliane@mailoo.org>
parents: 309
diff changeset
412 current = Widget.getParent(current)
458
1eeed8028199 browser side: rename parameter of getParent / getWidgetPanel from 'verbose' to 'expect'
souliane <souliane@mailoo.org>
parents: 449
diff changeset
413 if current is None and expect:
635
40c3c6aaafaa browser side (LiberviaWidget): an error is raised when expect is True on getParent
Goffi <goffi@goffi.org>
parents: 632
diff changeset
414 raise exceptions.InternalError("Can't find parent %s for %s" % (class_, self))
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
415 return current
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
416
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
417 def onClick(self, sender):
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
418 self.host.setSelected(self)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
419
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
420 def onClose(self, sender):
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
421 """ Called when the close button is pushed """
636
86ae737da6f3 browser side (widgets management): removed getWidgetsPanel: we use directly getParent which do the same thing + displayWidget now detect hidden widgets (widgets without parent WidgetsPanel)
Goffi <goffi@goffi.org>
parents: 635
diff changeset
422 widgets_panel = self.getParent(WidgetsPanel, expect=True)
86ae737da6f3 browser side (widgets management): removed getWidgetsPanel: we use directly getParent which do the same thing + displayWidget now detect hidden widgets (widgets without parent WidgetsPanel)
Goffi <goffi@goffi.org>
parents: 635
diff changeset
423 widgets_panel.removeWidget(self)
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
424 self.onQuit()
610
5b19fb5eae7e browser side: widget is deleted by default when close button is clicked in LiberviaWidget
Goffi <goffi@goffi.org>
parents: 609
diff changeset
425 self.host.widgets.deleteWidget(self)
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
426
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
427 def onQuit(self):
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
428 """ Called when the widget is actually ending """
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
429 pass
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
430
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
431 def refresh(self):
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
432 """This can be overwritten by a child class to refresh the display when,
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
433 instead of creating a new one, an existing widget is found and reused.
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
434 """
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
435 pass
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
436
89
8d2c7be09eef browser side: CSS: removed useless z-indexes, and replaced tabs by spaces
Goffi <goffi@goffi.org>
parents: 88
diff changeset
437 def onSetting(self, sender):
636
86ae737da6f3 browser side (widgets management): removed getWidgetsPanel: we use directly getParent which do the same thing + displayWidget now detect hidden widgets (widgets without parent WidgetsPanel)
Goffi <goffi@goffi.org>
parents: 635
diff changeset
438 widpanel = self.getParent(WidgetsPanel, expect=True)
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
439 row, col = widpanel.getIndex(self)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
440 body = VerticalPanel()
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
441
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
442 # colspan & rowspan
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
443 colspan = widpanel.getColSpan(row, col)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
444 rowspan = widpanel.getRowSpan(row, col)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
445
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
446 def onColSpanChange(value):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
447 widpanel.setColSpan(row, col, value)
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
448
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
449 def onRowSpanChange(value):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
450 widpanel.setRowSpan(row, col, value)
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
451 colspan_setter = dialog.IntSetter("Columns span", colspan)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
452 colspan_setter.addValueChangeListener(onColSpanChange)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
453 colspan_setter.setWidth('100%')
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
454 rowspan_setter = dialog.IntSetter("Rows span", rowspan)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
455 rowspan_setter.addValueChangeListener(onRowSpanChange)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
456 rowspan_setter.setWidth('100%')
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
457 body.add(colspan_setter)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
458 body.add(rowspan_setter)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
459
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
460 # size
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
461 width_str = self.getWidth()
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
462 if width_str.endswith('px'):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
463 width = int(width_str[:-2])
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
464 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
465 width = 0
97
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
466 height_str = self.getHeight()
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
467 if height_str.endswith('px'):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
468 height = int(height_str[:-2])
97
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
469 else:
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
470 height = 0
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
471
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
472 def onWidthChange(value):
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
473 if not value:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
474 self.setWidth('100%')
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
475 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
476 self.setWidth('%dpx' % value)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
477
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
478 def onHeightChange(value):
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
479 if not value:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
480 self.setHeight('100%')
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
481 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
482 self.setHeight('%dpx' % value)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
483 width_setter = dialog.IntSetter("width (0=auto)", width)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
484 width_setter.addValueChangeListener(onWidthChange)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
485 width_setter.setWidth('100%')
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
486 height_setter = dialog.IntSetter("height (0=auto)", height)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
487 height_setter.addValueChangeListener(onHeightChange)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
488 height_setter.setHeight('100%')
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
489 body.add(width_setter)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
490 body.add(height_setter)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
491
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
492 # reset
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
493 def onReset(sender):
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
494 colspan_setter.setValue(1)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
495 rowspan_setter.setValue(1)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
496 width_setter.setValue(0)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
497 height_setter.setValue(0)
210
3092f6b1710c browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 201
diff changeset
498
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
499 reset_bt = Button("Reset", onReset)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
500 body.add(reset_bt)
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
501 body.setCellHorizontalAlignment(reset_bt, HasAlignment.ALIGN_CENTER)
210
3092f6b1710c browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 201
diff changeset
502
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
503 _dialog = dialog.GenericDialog("Widget setting", body)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
504 _dialog.show()
89
8d2c7be09eef browser side: CSS: removed useless z-indexes, and replaced tabs by spaces
Goffi <goffi@goffi.org>
parents: 88
diff changeset
505
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
506 def setTitle(self, text):
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
507 """change the title in the header of the widget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
508 @param text: text of the new title"""
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
509 self._title.setText(text)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
510
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
511 def setHeaderInfo(self, text):
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
512 """change the info in the header of the widget
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
513 @param text: text of the new title"""
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
514 try:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
515 self._info.setHTML(text)
559
77372641e05d browser_side (plugin OTR): display the correct icons on opening the window + auto-open on accepted invitation
souliane <souliane@mailoo.org>
parents: 543
diff changeset
516 except TypeError:
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
517 log.error("LiberviaWidget.setInfo: info widget has not been initialized!")
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
518
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
519 def isSelectable(self):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
520 return self._selectable
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
521
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
522 def setSelectable(self, selectable):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
523 if not self._selectable:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
524 try:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
525 self.removeClickListener(self)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
526 except ValueError:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
527 pass
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
528 if self.selectable and not self in self._clickListeners:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
529 self.addClickListener(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
530 self._selectable = selectable
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
531
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
532 def getWarningData(self):
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
533 """ Return exposition warning level when this widget is selected and something is sent to it
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
534 This method should be overriden by children
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
535 @return: tuple (warning level type/HTML msg). Type can be one of:
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
536 - PUBLIC
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
537 - GROUP
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
538 - ONE2ONE
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
539 - MISC
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
540 - NONE
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
541 """
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
542 if not self._selectable:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
543 log.error("getWarningLevel must not be called for an unselectable widget")
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
544 raise Exception
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
545 # TODO: cleaner warning types (more general constants)
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
546 return ("NONE", None)
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
547
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
548 def setWidget(self, widget, scrollable=True):
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
549 """Set the widget that will be in the body of the LiberviaWidget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
550 @param widget: widget to put in the body
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
551 @param scrollable: if true, the widget will be in a ScrollPanelWrapper"""
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
552 if scrollable:
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
553 _scrollpanelwrapper = base_panel.ScrollPanelWrapper()
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
554 _scrollpanelwrapper.setStyleName('widgetBody')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
555 _scrollpanelwrapper.setWidget(widget)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
556 body_wid = _scrollpanelwrapper
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
557 else:
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
558 body_wid = widget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
559 self.add(body_wid)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
560 self.setCellHeight(body_wid, '100%')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
561
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
562 def doDetachChildren(self):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
563 # We need to force the use of a panel subclass method here,
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
564 # for the same reason as doAttachChildren
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
565 VerticalPanel.doDetachChildren(self)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
566
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
567 def doAttachChildren(self):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
568 # We need to force the use of a panel subclass method here, else
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
569 # the event will not propagate to children
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
570 VerticalPanel.doAttachChildren(self)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
571
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
572
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
573 # XXX: WidgetsPanel and MainTabPanel are both here to avoir cyclic import
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
574
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
575
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
576 class WidgetsPanel(base_panel.ScrollPanelWrapper):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
577 """The panel wanaging the widgets indide a tab"""
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
578
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
579 def __init__(self, host, locked=False):
620
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
580 """
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
581
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
582 @param host (SatWebFrontend): host instance
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
583 @param locked (bool): If True, the tab containing self will not be
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
584 removed when there are no more widget inside self. If False, the
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
585 tab will be removed with self's last widget.
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
586 """
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
587 base_panel.ScrollPanelWrapper.__init__(self)
88
50b480fd0605 browser side: widgetsPanel is now scrollable when there are too many widgets, and widgets have a minimum size
Goffi <goffi@goffi.org>
parents: 86
diff changeset
588 self.setSize('100%', '100%')
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
589 self.host = host
620
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
590 self.locked = locked
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
591 self.selected = None
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
592 self.flextable = FlexTable()
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
593 self.flextable.setSize('100%', '100%')
88
50b480fd0605 browser side: widgetsPanel is now scrollable when there are too many widgets, and widgets have a minimum size
Goffi <goffi@goffi.org>
parents: 86
diff changeset
594 self.setWidget(self.flextable)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
595 self.setStyleName('widgetsPanel')
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
596 _bottom = BottomBorderWidget(self.host)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
597 self.flextable.setWidget(0, 0, _bottom) # There will be always an Empty widget on the last row,
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
598 # dropping a widget there will add a new row
101
ad0696615768 browser side: bottomBorderWidget size fix (for webkit)
Goffi <goffi@goffi.org>
parents: 97
diff changeset
599 td_elt = _bottom.getElement().parentNode
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
600 DOM.setStyleAttribute(td_elt, "height", "1px") # needed so the cell adapt to the size of the border (specially in webkit)
596
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
601 self._max_cols = 1 # give the maximum number of columns in a raw
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
602
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
603 @property
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
604 def widgets(self):
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
605 return iter(self.flextable)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
606
184
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
607 def isLocked(self):
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
608 return self.locked
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
609
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
610 def changeWidget(self, row, col, wid):
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
611 """Change the widget in the given location, add row or columns when necessary"""
694
82123705474b massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 685
diff changeset
612 log.debug(u"changing widget: %s %s %s" % (wid.getDebugName(), row, col))
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
613 last_row = max(0, self.flextable.getRowCount() - 1)
596
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
614 # try: # FIXME: except without exception specified !
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
615 prev_wid = self.flextable.getWidget(row, col)
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
616 # except:
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
617 # log.error("Trying to change an unexisting widget !")
9054793ab60d browser side (base widget): added an iterator on WidgetsPanel to iterate throught contained widgets, fixed widget deletion, commented a base try/catch (without exception specified), should be uncommented once a good Exception is here
Goffi <goffi@goffi.org>
parents: 594
diff changeset
618 # return
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
619
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
620 cellFormatter = self.flextable.getFlexCellFormatter()
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
621
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
622 if isinstance(prev_wid, BorderWidget):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
623 # We are on a border, we must create a row and/or columns
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
624 prev_wid.removeStyleName('dragover')
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
625
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
626 if isinstance(prev_wid, BottomBorderWidget):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
627 # We are on the bottom border, we create a new row
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
628 self.flextable.insertRow(last_row)
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
629 self.flextable.setWidget(last_row, 0, LeftBorderWidget(self.host))
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
630 self.flextable.setWidget(last_row, 1, wid)
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
631 self.flextable.setWidget(last_row, 2, RightBorderWidget(self.host))
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
632 cellFormatter.setHorizontalAlignment(last_row, 2, HasAlignment.ALIGN_RIGHT)
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
633 row = last_row
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
634
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
635 elif isinstance(prev_wid, LeftBorderWidget):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
636 if col != 0:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
637 log.error("LeftBorderWidget must be on the first column !")
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
638 return
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
639 self.flextable.insertCell(row, col + 1)
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
640 self.flextable.setWidget(row, 1, wid)
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
641
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
642 elif isinstance(prev_wid, RightBorderWidget):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
643 if col != self.flextable.getCellCount(row) - 1:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
644 log.error("RightBorderWidget must be on the last column !")
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
645 return
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
646 self.flextable.insertCell(row, col)
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
647 self.flextable.setWidget(row, col, wid)
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
648
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
649 else:
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
650 prev_wid.removeFromParent()
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
651 self.flextable.setWidget(row, col, wid)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
652
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
653 _max_cols = max(self._max_cols, self.flextable.getCellCount(row))
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
654 if _max_cols != self._max_cols:
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
655 self._max_cols = _max_cols
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
656 self._sizesAdjust()
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
657
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
658 def _sizesAdjust(self):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
659 cellFormatter = self.flextable.getFlexCellFormatter()
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
660 width = 100.0 / max(1, self._max_cols - 2) # we don't count the borders
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
661
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
662 for row_idx in xrange(self.flextable.getRowCount()):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
663 for col_idx in xrange(self.flextable.getCellCount(row_idx)):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
664 _widget = self.flextable.getWidget(row_idx, col_idx)
649
ccf95ec87005 browser_side: fixes issue when placing a LiberviaWidget and some cells of the WidgetsPanel are empty
souliane <souliane@mailoo.org>
parents: 648
diff changeset
665 if _widget and not isinstance(_widget, BorderWidget):
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
666 td_elt = _widget.getElement().parentNode
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
667 DOM.setStyleAttribute(td_elt, "width", "%.2f%%" % width)
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
668
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
669 last_row = max(0, self.flextable.getRowCount() - 1)
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
670 cellFormatter.setColSpan(last_row, 0, self._max_cols)
178
7a349be99a77 dummy commit, just for test
Goffi <goffi@goffi.org>
parents: 177
diff changeset
671
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
672 def addWidget(self, wid):
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
673 """Add a widget to a new cell on the next to last row"""
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
674 last_row = max(0, self.flextable.getRowCount() - 1)
694
82123705474b massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 685
diff changeset
675 log.debug(u"putting widget %s at %d, %d" % (wid.getDebugName(), last_row, 0))
85
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
676 self.changeWidget(last_row, 0, wid)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
677
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
678 def removeWidget(self, wid):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
679 """Remove a widget and the cell where it is"""
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
680 _row, _col = self.flextable.getIndex(wid)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
681 self.flextable.remove(wid)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
682 self.flextable.removeCell(_row, _col)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
683 if not self.getLiberviaRowWidgets(_row): # we have no more widgets, we remove the row
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
684 self.flextable.removeRow(_row)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
685 _max_cols = 1
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
686 for row_idx in xrange(self.flextable.getRowCount()):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
687 _max_cols = max(_max_cols, self.flextable.getCellCount(row_idx))
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
688 if _max_cols != self._max_cols:
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
689 self._max_cols = _max_cols
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
690 self._sizesAdjust()
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
691 current = self
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
692
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
693 blank_page = self.getLiberviaWidgetsCount() == 0 # do we still have widgets on the page ?
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
694
184
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
695 if blank_page and not self.isLocked():
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
696 # we now notice the MainTabPanel that the WidgetsPanel is empty and need to be removed
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
697 while current is not None:
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
698 if isinstance(current, MainTabPanel):
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
699 current.onWidgetPanelRemove(self)
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
700 return
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
701 current = current.getParent()
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
702 log.error("no MainTabPanel found !")
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
703
197
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
704 def getWidgetCoords(self, wid):
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
705 return self.flextable.getIndex(wid)
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
706
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
707 def getLiberviaRowWidgets(self, row):
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
708 """ Return all the LiberviaWidget in the row """
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
709 return [wid for wid in self.getRowWidgets(row) if isinstance(wid, LiberviaWidget)]
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
710
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
711 def getRowWidgets(self, row):
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
712 """ Return all the widgets in the row """
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
713 widgets = []
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
714 cols = self.flextable.getCellCount(row)
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
715 for col in xrange(cols):
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
716 widgets.append(self.flextable.getWidget(row, col))
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
717 return widgets
0fc32122a877 browser side: dropped widget's row is now checked, to avoid the drop on a removed BorderWidget. This finish the previous commit.
Goffi <goffi@goffi.org>
parents: 196
diff changeset
718
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
719 def getLiberviaWidgetsCount(self):
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
720 """ Get count of contained widgets """
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
721 return len([wid for wid in self.flextable if isinstance(wid, LiberviaWidget)])
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
722
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
723 def getIndex(self, wid):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
724 return self.flextable.getIndex(wid)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
725
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
726 def getColSpan(self, row, col):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
727 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
728 return cellFormatter.getColSpan(row, col)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
729
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
730 def setColSpan(self, row, col, value):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
731 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
732 return cellFormatter.setColSpan(row, col, value)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
733
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
734 def getRowSpan(self, row, col):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
735 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
736 return cellFormatter.getRowSpan(row, col)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
737
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
738 def setRowSpan(self, row, col, value):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
739 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
740 return cellFormatter.setRowSpan(row, col, value)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
741
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
742
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
743 class MainTabPanel(TabPanel, ClickHandler):
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
744 """The panel managing the tabs"""
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
745
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
746 def __init__(self, host):
654
40c72f3b7638 browser_side: MainPanel is now based on a DockPanel, which allows to use less tables and also to remove some "window resized" listeners
souliane <souliane@mailoo.org>
parents: 652
diff changeset
747 TabPanel.__init__(self, FloatingTab=True)
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
748 ClickHandler.__init__(self)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
749 self.host = host
148
8635bc9db9bf added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents: 139
diff changeset
750 self.setStyleName('liberviaTabPanel')
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
751 self.tabBar.addTab(DropTab(self, u'✚'), asHTML=False)
657
0b7e4226378d browser_side: hide the tab bar and contact list's toggle button until the profile is connected
souliane <souliane@mailoo.org>
parents: 656
diff changeset
752 self.tabBar.setVisible(False) # set to True when profile is logged
656
4dbd99de3aaa browser_side: only display "+" button when the tab bar contains only 1 tab, and display it over the contact list to not use vertical space
souliane <souliane@mailoo.org>
parents: 654
diff changeset
753 self.tabBar.addStyleDependentName('oneTab')
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
754
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
755 def onTabSelected(self, sender, tabIndex):
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
756 if tabIndex < self.getWidgetCount():
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
757 TabPanel.onTabSelected(self, sender, tabIndex)
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
758 return
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
759 # user clicked the "+" tab
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
760 self.addWidgetsTab(None, select=True)
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
761
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
762 def getCurrentPanel(self):
617
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
763 """ Get the panel of the currently selected tab
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
764
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
765 @return: WidgetsPanel
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
766 """
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
767 return self.deck.visibleWidget
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
768
620
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
769 def addTab(self, widget, label, select=False):
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
770 """Create a new tab for the given widget.
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
771
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
772 @param widget (Widget): widget to associate to the tab
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
773 @param label (unicode): label of the tab
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
774 @param select (bool): True to select the added tab
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
775 """
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
776 TabPanel.add(self, widget, DropTab(self, label), False)
656
4dbd99de3aaa browser_side: only display "+" button when the tab bar contains only 1 tab, and display it over the contact list to not use vertical space
souliane <souliane@mailoo.org>
parents: 654
diff changeset
777 if self.getWidgetCount() > 1:
4dbd99de3aaa browser_side: only display "+" button when the tab bar contains only 1 tab, and display it over the contact list to not use vertical space
souliane <souliane@mailoo.org>
parents: 654
diff changeset
778 self.tabBar.removeStyleDependentName('oneTab')
658
476d8d9973d3 browser_side: the contact list's height needs a window resize after it's been added or when the tab bar display is changed
souliane <souliane@mailoo.org>
parents: 657
diff changeset
779 self.host.resize()
620
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
780 if select:
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
781 self.selectTab(self.getWidgetCount() - 1)
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
782
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
783 def addWidgetsTab(self, label, select=False, locked=False):
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
784 """Create a new tab for containing LiberviaWidgets.
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
785
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
786 @param label (unicode): label of the tab (None or '' for user prompt)
620
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
787 @param select (bool): True to select the added tab
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
788 @param locked (bool): If True, the tab will not be removed when there
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
789 are no more widget inside. If False, the tab will be removed with
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
790 the last widget.
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
791 @return: WidgetsPanel
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
792 """
650
7e3cdc39c3e7 browser_side: fixes misc issues (forgotten parenthesis and wrong argument)
souliane <souliane@mailoo.org>
parents: 649
diff changeset
793 widgets_panel = WidgetsPanel(self.host, locked=locked)
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
794
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
795 if not label:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
796 default_label = _(u'new tab')
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
797 try:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
798 label = Window.prompt(_(u'Name of the new tab'), default_label)
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
799 if not label: # empty label or user pressed "cancel"
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
800 return None
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
801 except: # this happens when the user prevents the page to open the prompt dialog
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
802 label = default_label
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
803
621
b77e1070035c browser_side: fixes previous patch, forgot to pass an argument
souliane <souliane@mailoo.org>
parents: 620
diff changeset
804 self.addTab(widgets_panel, label, select)
620
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
805 return widgets_panel
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
806
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
807 def onWidgetPanelRemove(self, panel):
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
808 """ Called when a child WidgetsPanel is empty and need to be removed """
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
809 widget_index = self.getWidgetIndex(panel)
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
810 self.remove(panel)
194
6198be95a39c browser side: new tab is automatically selected, if a tab is removed, the last one is automatically selected
Goffi <goffi@goffi.org>
parents: 193
diff changeset
811 widgets_count = self.getWidgetCount()
656
4dbd99de3aaa browser_side: only display "+" button when the tab bar contains only 1 tab, and display it over the contact list to not use vertical space
souliane <souliane@mailoo.org>
parents: 654
diff changeset
812 if widgets_count == 1:
4dbd99de3aaa browser_side: only display "+" button when the tab bar contains only 1 tab, and display it over the contact list to not use vertical space
souliane <souliane@mailoo.org>
parents: 654
diff changeset
813 self.tabBar.addStyleDependentName('oneTab')
658
476d8d9973d3 browser_side: the contact list's height needs a window resize after it's been added or when the tab bar display is changed
souliane <souliane@mailoo.org>
parents: 657
diff changeset
814 self.host.resize()
618
698bdb84f6a7 browser_side: always display the main tab bar with a "+" button to add a new tab
souliane <souliane@mailoo.org>
parents: 617
diff changeset
815 self.selectTab(widget_index if widget_index < widgets_count else widgets_count - 1)