annotate src/browser/sat_browser/libervia_widget.py @ 661:2664fe93ceb3 frontends_multi_profiles

browser_side: implements collections.OrderedDict.__contains__ to fix an error while doing "presence in C.PRESENCE"
author souliane <souliane@mailoo.org>
date Tue, 03 Mar 2015 06:24:27 +0100
parents 8e7d4de56e75
children ebb602d8b3f2
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
340
ce5b33f499c5 dates update
Goffi <goffi@goffi.org>
parents: 339
diff changeset
5 # Copyright (C) 2011, 2012, 2013, 2014 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
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
53 # 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
54 # 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
55
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
56
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
57 ### 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
58
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
59
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
60 class DragLabel(DragWidget):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
61
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
62 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
63 """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
64
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 @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
66 @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
67 @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
68 """
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
69 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
70 self.host = host
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
71 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
72 self.type_ = type_
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
73
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
74 def onDragStart(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
75 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
76 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
77 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
78 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
79 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
80 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
81 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
82 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
83
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 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
85 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
86 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
87 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
88 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
89 widget.removeStyleName('borderWidgetOnDrag')
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
90
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
91
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
92 class LiberviaDragWidget(DragLabel):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
93 """ 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
94 current = None # widget currently dragged
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
95
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
96 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
97 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
98 self.widget = widget
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
99
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
100 def onDragStart(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
101 LiberviaDragWidget.current = self.widget
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
102 DragLabel.onDragStart(self, event)
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
103
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
104 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
105 DragLabel.onDragEnd(self, event)
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
106 LiberviaDragWidget.current = None
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
107
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
108
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
109 class DropCell(DropWidget):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
110 """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
111 drop_keys = {}
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
112
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
113 def __init__(self, host):
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
114 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
115 self.host = host
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
116 self.setStyleName('dropCell')
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
117
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
118 @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
119 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
120 """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
121
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 @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
123 @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
124 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
125 """
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
126 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
127
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
128 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
129 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
130 return
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
131 self.addStyleName('dragover')
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
132 DOM.eventPreventDefault(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
133
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
134 def onDragLeave(self, event):
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
135 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
136 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
137 # 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
138 # 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
139 # don't want that
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
140 self.removeStyleName('dragover')
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
141
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
142 def onDragOver(self, event):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
143 DOM.eventPreventDefault(event)
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 _getCellAndRow(self, grid, event):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
146 """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
147 cell = grid.getEventTargetCell(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
148 row = DOM.getParent(cell)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
149 return (row.rowIndex, cell.cellIndex)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
150
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
151 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
152 """
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
153 @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
154 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
155 """
396
a71fcc27f231 browser_side: small improvements for ListManager
souliane <souliane@mailoo.org>
parents: 370
diff changeset
156 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
157 DOM.eventPreventDefault(event)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
158 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
159 # 'text', 'text/plain', and 'Text' are equivalent.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
160 try:
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
161 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
162 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
163 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
164 # item_type = dt.getData("type")
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
165 log.debug("message: %s" % item)
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
166 log.debug("type: %s" % item_type)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
167 except:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
168 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
169 item = '&nbsp;'
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
170 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
171 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
172 if not LiberviaDragWidget.current:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
173 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
174 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
175 _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
176 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
177 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
178 # 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
179 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
180 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
181 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
182 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
183 # 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
184 # 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
185 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
186 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
187 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
188 _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
189 if not isinstance(_new_panel, LiberviaWidget):
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
190 raise base_widget.NoLiberviaWidgetException
39
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
191 else:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
192 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
193 return
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
194 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
195 # 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
196 self.onQuit()
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
197 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
198 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
199 _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
200 _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
201 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
202 if self.host.getSelected() == self:
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
203 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
204 _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
205 """_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
206 _width = 90/float(len(_unempty_panels) or 1)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
207 #now we resize all the cell of the column
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
208 for panel in _unempty_panels:
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
209 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
210 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
211 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
212 self.host.widgets.deleteWidget(self)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
213
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
214
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
215 class EmptyWidget(DropCell, SimplePanel):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
216 """Empty dropable panel"""
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
217
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
218 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
219 SimplePanel.__init__(self)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
220 DropCell.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
221 #self.setWidget(HTML(''))
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
222 self.setSize('100%', '100%')
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
223
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
224
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
225 class BorderWidget(EmptyWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
226 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
227 EmptyWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
228 self.addStyleName('borderPanel')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
229
617
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
230
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
231 class LeftBorderWidget(BorderWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
232 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
233 BorderWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
234 self.addStyleName('leftBorderWidget')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
235
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
236
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
237 class RightBorderWidget(BorderWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
238 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
239 BorderWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
240 self.addStyleName('rightBorderWidget')
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
241
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
242
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
243 class BottomBorderWidget(BorderWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
244 def __init__(self, host):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
245 BorderWidget.__init__(self, host)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
246 self.addStyleName('bottomBorderWidget')
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
247
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
248
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
249 class DropTab(Label, DropWidget):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
250
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
251 def __init__(self, tab_panel, text):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
252 Label.__init__(self, text)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
253 DropWidget.__init__(self, tab_panel)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
254 self.tab_panel = tab_panel
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
255 self.setStyleName('dropCell')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
256 self.setWordWrap(False)
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
257
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
258 def _getIndex(self):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
259 """ get current index of the DropTab """
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
260 # XXX: awful hack, but seems the only way to get index
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
261 return self.tab_panel.tabBar.panel.getWidgetIndex(self.getParent().getParent()) - 1
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
262
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
263 def onDragEnter(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
264 #if self == LiberviaDragWidget.current:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
265 # return
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
266 self.parent.addStyleName('dragover')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
267 DOM.eventPreventDefault(event)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
268
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
269 def onDragLeave(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
270 self.parent.removeStyleName('dragover')
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 onDragOver(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
273 DOM.eventPreventDefault(event)
617
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
274
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
275 def onDrop(self, event):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
276 DOM.eventPreventDefault(event)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
277 self.parent.removeStyleName('dragover')
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
278 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
279 # 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
280 return
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
281
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
282 # FIXME: quite the same stuff as in DropCell, need some factorisation
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
283 dt = event.dataTransfer
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
284 # 'text', 'text/plain', and 'Text' are equivalent.
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
285 try:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
286 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
287 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
288 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
289 # item_type = dt.getData("type")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
290 log.debug("message: %s" % item)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
291 log.debug("type: %s" % item_type)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
292 except:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
293 log.debug("no message found")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
294 item = '&nbsp;'
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
295 item_type = None
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
296
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
297 if item_type == "WIDGET":
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
298 if not LiberviaDragWidget.current:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
299 log.error("No widget registered in LiberviaDragWidget !")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
300 return
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
301 _new_panel = LiberviaDragWidget.current
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
302 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
303 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
304 else:
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
305 log.warning("unmanaged item type")
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
306 return
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
307
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
308 # 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
309 try:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
310 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
311 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
312 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
313 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
314 return
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
315
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
316 if item_type == "WIDGET":
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
317 _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
318 else:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
319 _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
320
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
321 widgets_panel.addWidget(_new_panel)
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
322
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
323
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
324 ### Libervia Widget ###
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
325
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
326
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
327 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
328
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
329 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
330 """
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
331 @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
332 @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
333 @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
334 @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
335 """
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
336 AbsolutePanel.__init__(self)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
337 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
338 if info:
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
339 # 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
340 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
341 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
342 else:
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 = SimplePanel()
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
344 button_group_wrapper.setStyleName('widgetHeader_buttonsWrapper')
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
345 button_group = base_widget.WidgetMenuBar(parent, host)
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
346 button_group.addItem('<img src="media/icons/misc/settings.png"/>', True, base_menu.MenuCmd(parent, 'onSetting'))
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
347 button_group.addItem('<img src="media/icons/misc/close.png"/>', True, base_menu.MenuCmd(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
348 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
349 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
350 self.addStyleName('widgetHeader')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
351 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
352
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
353
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
354 class LiberviaWidget(DropCell, VerticalPanel, ClickHandler):
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
355 """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
356
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
357 def __init__(self, host, title='', info=None, selectable=False):
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
358 """Init the widget
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
359
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
360 @param host (SatWebFrontend): SatWebFrontend instance
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
361 @param title (str): title shown in the header of the widget
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
362 @param info (str, callable): 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
363 @param selectable (bool): True is widget can be selected by user
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
364 """
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
365 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
366 DropCell.__init__(self, host)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
367 ClickHandler.__init__(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
368 self._selectable = selectable
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
369 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
370 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
371 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
372 self._title = Label(title)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
373 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
374 if info is not None:
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
375 if isinstance(info, str):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
376 self._info = HTML(info)
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
377 else: # the info will be set by a callback
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
378 assert callable(info)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
379 self._info = HTML()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
380 info(self._info.setHTML)
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
609
ec77c2bc18d3 brower side: removed close listener for LiberviaWidget
Goffi <goffi@goffi.org>
parents: 608
diff changeset
391 # FIXME
ec77c2bc18d3 brower side: removed close listener for LiberviaWidget
Goffi <goffi@goffi.org>
parents: 608
diff changeset
392 # def onClose(sender):
ec77c2bc18d3 brower side: removed close listener for LiberviaWidget
Goffi <goffi@goffi.org>
parents: 608
diff changeset
393 # """Check dynamically if the unibox is enable or not"""
ec77c2bc18d3 brower side: removed close listener for LiberviaWidget
Goffi <goffi@goffi.org>
parents: 608
diff changeset
394 # if self.host.uni_box:
ec77c2bc18d3 brower side: removed close listener for LiberviaWidget
Goffi <goffi@goffi.org>
parents: 608
diff changeset
395 # self.host.uni_box.onWidgetClosed(sender)
309
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
396
609
ec77c2bc18d3 brower side: removed close listener for LiberviaWidget
Goffi <goffi@goffi.org>
parents: 608
diff changeset
397 # self.addCloseListener(onClose)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
398 # self.host.registerWidget(self) # FIXME
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
399
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
400 def getDebugName(self):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
401 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
402
458
1eeed8028199 browser side: rename parameter of getParent / getWidgetPanel from 'verbose' to 'expect'
souliane <souliane@mailoo.org>
parents: 449
diff changeset
403 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
404 """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
405
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
406 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
407
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
408 @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
409 @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
410 @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
411 @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
412 """
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
413 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
414 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
415 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
416 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
417 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
418 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
419 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
420 return current
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
421
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
422 def onClick(self, sender):
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
423 self.host.setSelected(self)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
424
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
425 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
426 """ 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
427 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
428 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
429 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
430 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
431
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
432 def onQuit(self):
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
433 """ 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
434 pass
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
435
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
436 def refresh(self):
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
437 """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
438 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
439 """
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
440 pass
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
441
89
8d2c7be09eef browser side: CSS: removed useless z-indexes, and replaced tabs by spaces
Goffi <goffi@goffi.org>
parents: 88
diff changeset
442 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
443 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
444 row, col = widpanel.getIndex(self)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
445 body = VerticalPanel()
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
446
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
447 # colspan & rowspan
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
448 colspan = widpanel.getColSpan(row, col)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
449 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
450
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
451 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
452 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
453
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
454 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
455 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
456 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
457 colspan_setter.addValueChangeListener(onColSpanChange)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
458 colspan_setter.setWidth('100%')
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
459 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
460 rowspan_setter.addValueChangeListener(onRowSpanChange)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
461 rowspan_setter.setWidth('100%')
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
462 body.add(colspan_setter)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
463 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
464
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
465 # 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
466 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
467 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
468 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
469 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
470 width = 0
97
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
471 height_str = self.getHeight()
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
472 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
473 height = int(height_str[:-2])
97
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
474 else:
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
475 height = 0
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
476
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
477 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
478 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
479 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
480 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
481 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
482
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
483 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
484 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
485 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
486 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
487 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
488 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
489 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
490 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
491 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
492 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
493 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
494 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
495 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
496
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
497 # 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
498 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
499 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
500 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
501 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
502 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
503
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
504 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
505 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
506 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
507
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
508 _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
509 _dialog.show()
89
8d2c7be09eef browser side: CSS: removed useless z-indexes, and replaced tabs by spaces
Goffi <goffi@goffi.org>
parents: 88
diff changeset
510
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
511 def setTitle(self, text):
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
512 """change the title in the header of the widget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
513 @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
514 self._title.setText(text)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
515
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 527
diff changeset
516 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
517 """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
518 @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
519 try:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
520 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
521 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
522 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
523
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
524 def isSelectable(self):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
525 return self._selectable
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
526
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
527 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
528 if not self._selectable:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
529 try:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
530 self.removeClickListener(self)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
531 except ValueError:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
532 pass
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
533 if self.selectable and not self in self._clickListeners:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
534 self.addClickListener(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
535 self._selectable = selectable
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
536
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
537 def getWarningData(self):
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
538 """ 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
539 This method should be overriden by children
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
540 @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
541 - PUBLIC
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
542 - GROUP
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
543 - ONE2ONE
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
544 - MISC
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
545 - NONE
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
546 """
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 574
diff changeset
547 if not self._selectable:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
548 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
549 raise Exception
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
550 # TODO: cleaner warning types (more general constants)
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
551 return ("NONE", None)
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
552
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
553 def setWidget(self, widget, scrollable=True):
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
554 """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
555 @param widget: widget to put in the body
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
556 @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
557 if scrollable:
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
558 _scrollpanelwrapper = base_panel.ScrollPanelWrapper()
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
559 _scrollpanelwrapper.setStyleName('widgetBody')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
560 _scrollpanelwrapper.setWidget(widget)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
561 body_wid = _scrollpanelwrapper
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
562 else:
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
563 body_wid = widget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
564 self.add(body_wid)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
565 self.setCellHeight(body_wid, '100%')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
566
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
567 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
568 # 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
569 # for the same reason as doAttachChildren
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
570 VerticalPanel.doDetachChildren(self)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
571
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
572 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
573 # 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
574 # the event will not propagate to children
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
575 VerticalPanel.doAttachChildren(self)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
576
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
577 def addMenus(self, menu_bar):
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 494
diff changeset
578 """Add menus to the header.
494
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
579
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
580 This method can be overwritten by child classes.
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
581 @param menu_bar (GenericMenuBar): menu bar of the widget's header
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
582 """
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
583 pass
5d8632a7bfde browser_side: refactorisation of menus and LiberviaWidget's header
souliane <souliane@mailoo.org>
parents: 467
diff changeset
584
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
585
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
586 # 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
587
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
588
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
589 class WidgetsPanel(base_panel.ScrollPanelWrapper):
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
590 """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
591
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
592 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
593 """
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
594
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
595 @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
596 @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
597 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
598 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
599 """
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
600 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
601 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
602 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
603 self.locked = locked
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
604 self.selected = None
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
605 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
606 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
607 self.setWidget(self.flextable)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
608 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
609 _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
610 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
611 # 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
612 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
613 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
614 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
615
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 @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
617 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
618 return iter(self.flextable)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
619
184
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
620 def isLocked(self):
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
621 return self.locked
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
622
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
623 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
624 """Change the widget in the given location, add row or columns when necessary"""
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
625 log.debug("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
626 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
627 # 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
628 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
629 # 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
630 # 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
631 # 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
632
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 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
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 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
636 # 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
637 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
638
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
639 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
640 # 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
641 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
642 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
643 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
644 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
645 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
646 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
647
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 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
649 if col != 0:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
650 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
651 return
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
652 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
653 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
654
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 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
656 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
657 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
658 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
659 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
660 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
661
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
662 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
663 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
664 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
665
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
666 _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
667 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
668 self._max_cols = _max_cols
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
669 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
670
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
671 def _sizesAdjust(self):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
672 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
673 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
674
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
675 for row_idx in xrange(self.flextable.getRowCount()):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
676 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
677 _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
678 if _widget and not isinstance(_widget, BorderWidget):
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
679 td_elt = _widget.getElement().parentNode
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
680 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
681
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
682 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
683 cellFormatter.setColSpan(last_row, 0, self._max_cols)
178
7a349be99a77 dummy commit, just for test
Goffi <goffi@goffi.org>
parents: 177
diff changeset
684
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
685 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
686 """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
687 last_row = max(0, self.flextable.getRowCount() - 1)
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
688 log.debug("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
689 self.changeWidget(last_row, 0, wid)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
690
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
691 def removeWidget(self, wid):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
692 """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
693 _row, _col = self.flextable.getIndex(wid)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
694 self.flextable.remove(wid)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
695 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
696 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
697 self.flextable.removeRow(_row)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
698 _max_cols = 1
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
699 for row_idx in xrange(self.flextable.getRowCount()):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
700 _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
701 if _max_cols != self._max_cols:
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
702 self._max_cols = _max_cols
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
703 self._sizesAdjust()
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
704 current = self
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
705
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
706 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
707
184
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
708 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
709 # 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
710 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
711 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
712 current.onWidgetPanelRemove(self)
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
713 return
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
714 current = current.getParent()
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 432
diff changeset
715 log.error("no MainTabPanel found !")
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
716
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
717 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
718 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
719
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
720 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
721 """ 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
722 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
723
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
724 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
725 """ 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
726 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
727 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
728 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
729 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
730 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
731
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
732 def getLiberviaWidgetsCount(self):
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
733 """ 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
734 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
735
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
736 def getIndex(self, wid):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
737 return self.flextable.getIndex(wid)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
738
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
739 def getColSpan(self, row, col):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
740 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
741 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
742
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
743 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
744 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
745 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
746
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
747 def getRowSpan(self, row, col):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
748 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
749 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
750
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
751 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
752 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
753 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
754
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
755
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
756 class MainTabPanel(TabPanel, ClickHandler):
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 647
diff changeset
757 """The panel managing the tabs"""
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
758
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
759 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
760 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
761 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
762 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
763 self.setStyleName('liberviaTabPanel')
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
764 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
765 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
766 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
767
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
768 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
769 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
770 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
771 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
772 # user clicked the "+" tab
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
773 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
774
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
775 def getCurrentPanel(self):
617
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
776 """ Get the panel of the currently selected tab
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
777
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
778 @return: WidgetsPanel
5baca9d46c34 browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents: 610
diff changeset
779 """
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
780 return self.deck.visibleWidget
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
781
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
782 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
783 """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
784
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 @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
786 @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
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 """
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 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
790 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
791 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
792 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
793 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
794 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
795
ac5881d683d3 browser_side: move SatWebFrontend.addTab to MainTabPanel.addWidgetsTab and rename MainTabPanel.add to MainTabPanel.addTab
souliane <souliane@mailoo.org>
parents: 619
diff changeset
796 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
797 """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
798
659
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
799 @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
800 @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
801 @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
802 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
803 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
804 @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
805 """
650
7e3cdc39c3e7 browser_side: fixes misc issues (forgotten parenthesis and wrong argument)
souliane <souliane@mailoo.org>
parents: 649
diff changeset
806 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
807
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
808 if not label:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
809 default_label = _(u'new tab')
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
810 try:
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
811 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
812 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
813 return None
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
814 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
815 label = default_label
8e7d4de56e75 browser_side: allow to drop a widget in the "+" tab
souliane <souliane@mailoo.org>
parents: 658
diff changeset
816
621
b77e1070035c browser_side: fixes previous patch, forgot to pass an argument
souliane <souliane@mailoo.org>
parents: 620
diff changeset
817 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
818 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
819
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
820 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
821 """ 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
822 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
823 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
824 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
825 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
826 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
827 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
828 self.selectTab(widget_index if widget_index < widgets_count else widgets_count - 1)