annotate browser_side/base_widget.py @ 385:f2c380af7304 SàT v0.4.0

version update
author Goffi <goffi@goffi.org>
date Wed, 26 Feb 2014 14:13:02 +0100
parents 30d03d9f07e4
children a71fcc27f231
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/>.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
19
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
20 import pyjd # this is dummy in pyjs
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from pyjamas.ui.SimplePanel import SimplePanel
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
22 from pyjamas.ui.AbsolutePanel import AbsolutePanel
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from pyjamas.ui.VerticalPanel import VerticalPanel
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from pyjamas.ui.HorizontalPanel import HorizontalPanel
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from pyjamas.ui.ScrollPanel import ScrollPanel
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
26 from pyjamas.ui.FlexTable import FlexTable
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
27 from pyjamas.ui.TabPanel import TabPanel
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from pyjamas.ui.HTMLPanel import HTMLPanel
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
29 from pyjamas.ui.Label import Label
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
30 from pyjamas.ui.Button import Button
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
31 from pyjamas.ui.Image import Image
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
32 from pyjamas.ui.Widget import Widget
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
33 from pyjamas.ui.DragWidget import DragWidget
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
34 from pyjamas.ui.DropWidget import DropWidget
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
35 from pyjamas.ui.ClickListener import ClickHandler
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
36 from pyjamas.ui import HasAlignment
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
37 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
38 from pyjamas import Window
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 320
diff changeset
39 from __pyjamas__ import doc
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 320
diff changeset
40
48
153de5d461a4 added Social Contract \o. (in French only so far)
Goffi <goffi@goffi.org>
parents: 43
diff changeset
41 import dialog
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
42
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
43
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
44 class DragLabel(DragWidget):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
45
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
46 def __init__(self, text, _type):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
47 DragWidget.__init__(self)
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
48 self._text = text
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
49 self._type = _type
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
50
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
51 def onDragStart(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
52 dt = event.dataTransfer
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
53 dt.setData('text/plain', "%s\n%s" % (self._text, self._type))
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
54 dt.setDragImage(self.getElement(), 15, 15)
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
55
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
56
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
57 class LiberviaDragWidget(DragLabel):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
58 """ 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
59 current = None # widget currently dragged
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
60
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
61 def __init__(self, text, _type, widget):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
62 DragLabel.__init__(self, text, _type)
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
63 self.widget = widget
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
64
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
65 def onDragStart(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
66 LiberviaDragWidget.current = self.widget
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
67 DragLabel.onDragStart(self, event)
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
68
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
69 def onDragEnd(self, event):
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
70 LiberviaDragWidget.current = None
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
71
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
72
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
73 class DropCell(DropWidget):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
74 """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
75 drop_keys = {}
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
76
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
77 def __init__(self, host):
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
78 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
79 self.host = host
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
80 self.setStyleName('dropCell')
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
81
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
82 @classmethod
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
83 def addDropKey(cls, key, callback):
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
84 DropCell.drop_keys[key] = callback
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
85
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
86 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
87 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
88 return
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
89 self.addStyleName('dragover')
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
90 DOM.eventPreventDefault(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
91
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
92 def onDragLeave(self, event):
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
93 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
94 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
95 # 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
96 # 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
97 # don't want that
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
98 self.removeStyleName('dragover')
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
99
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
100 def onDragOver(self, event):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
101 DOM.eventPreventDefault(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
102
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
103 def _getCellAndRow(self, grid, event):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
104 """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
105 cell = grid.getEventTargetCell(event)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
106 row = DOM.getParent(cell)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
107 return (row.rowIndex, cell.cellIndex)
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
108
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
109 def onDrop(self, event):
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
110 DOM.eventPreventDefault(event)
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
111 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
112 # 'text', 'text/plain', and 'Text' are equivalent.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
113 try:
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
114 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
115 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
116 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
117 # item_type = dt.getData("type")
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
118 print "message: %s" % item
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
119 print "type: %s" % item_type
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
120 except:
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
121 print "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
122 item = '&nbsp;'
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
123 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
124 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
125 if not LiberviaDragWidget.current:
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
126 print "ERROR: No widget registered in LiberviaDragWidget !"
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
127 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
128 _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
129 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
130 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
131 # we need to remove the widget from the panel as it will be inserted elsewhere
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
132 widgets_panel = _new_panel.getWidgetsPanel()
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
133 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
134 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
135 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
136 # 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
137 # 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
138 self.removeStyleName('dragover')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
139 return
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
140 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
141 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
142 _new_panel = self.drop_keys[item_type](self.host, item)
254
28d3315a8003 browser_side: isolate the basic stuff of RecipientManager in a new class ListManager:
souliane <souliane@mailoo.org>
parents: 243
diff changeset
143 elif item_type == "CONTACT_TEXTBOX":
232
0ed09cc0566f browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents: 230
diff changeset
144 # eventually open a window?
0ed09cc0566f browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents: 230
diff changeset
145 pass
39
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
146 else:
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
147 print "WARNING: unmanaged item type"
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
148 return
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
149 if isinstance(self, LiberviaWidget):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
150 self.host.unregisterWidget(self)
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
151 self.onQuit()
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
152 if not isinstance(_new_panel, LiberviaWidget):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
153 print ('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
154 _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
155 _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
156 row_idx, cell_idx = self._getCellAndRow(_flextable, event)
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
157 if self.host.getSelected == self:
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
158 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
159 _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
160 """_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
161 _width = 90/float(len(_unempty_panels) or 1)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
162 #now we resize all the cell of the column
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
163 for panel in _unempty_panels:
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
164 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
165 DOM.setStyleAttribute(td_elt, "width", "%s%%" % _width)"""
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
166 #FIXME: delete object ? Check the right way with pyjamas
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
167
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
168
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
169 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
170
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
171 def __init__(self, parent, title):
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
172 AbsolutePanel.__init__(self)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
173 self.add(title)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
174 button_group_wrapper = SimplePanel()
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
175 button_group_wrapper.setStyleName('widgetHeader_buttonsWrapper')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
176 button_group = HorizontalPanel()
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
177 button_group.setStyleName('widgetHeader_buttonGroup')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
178 setting_button = Image("media/icons/misc/settings.png")
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
179 setting_button.setStyleName('widgetHeader_settingButton')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
180 setting_button.addClickListener(parent.onSetting)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
181 close_button = Image("media/icons/misc/close.png")
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
182 close_button.setStyleName('widgetHeader_closeButton')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
183 close_button.addClickListener(parent.onClose)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
184 button_group.add(setting_button)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
185 button_group.add(close_button)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
186 button_group_wrapper.setWidget(button_group)
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
187 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
188 self.addStyleName('widgetHeader')
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
189 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
190
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
191
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
192 class LiberviaWidget(DropCell, VerticalPanel, ClickHandler):
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
193 """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
194
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
195 def __init__(self, host, title='', selectable=False):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
196 """Init the widget
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
197 @param host: SatWebFrontend object
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
198 @param title: title show in the header of the widget
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
199 @param selectable: True is widget can be selected by user"""
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
200 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
201 DropCell.__init__(self, host)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
202 ClickHandler.__init__(self)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
203 self.__selectable = selectable
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
204 self.__title_id = HTMLPanel.createUniqueId()
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
205 self.__setting_button_id = HTMLPanel.createUniqueId()
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
206 self.__close_button_id = HTMLPanel.createUniqueId()
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
207 self.__title = Label(title)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
208 self.__title.setStyleName('widgetHeader_title')
294
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
209 self._close_listeners = []
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
210 header = WidgetHeader(self, self.__title)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
211 self.add(header)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
212 self.setSize('100%', '100%')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
213 self.addStyleName('widget')
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
214 if self.__selectable:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
215 self.addClickListener(self)
309
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
216
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
217 def onClose(sender):
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
218 """Check dynamically if the unibox is enable or not"""
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
219 if self.host.uni_box:
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
220 self.host.uni_box.onWidgetClosed(sender)
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
221
05e264e96a1c browser_side: make unibox optional
souliane <souliane@mailoo.org>
parents: 294
diff changeset
222 self.addCloseListener(onClose)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
223 self.host.registerWidget(self)
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
224
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
225 def getDebugName(self):
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
226 return "%s (%s)" % (self, self.__title.getText())
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
227
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
228 def getWidgetsPanel(self, verbose=True):
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
229 return self.getParent(WidgetsPanel, verbose)
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
230
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
231 def getParent(self, class_=None, verbose=True):
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
232 """
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
233 Note: this method overrides pyjamas.ui.Widget.getParent
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
234 @param class_: class of the ancestor to look for or None to return the first parent
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
235 @param verbose: set to True to log error messages
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
236 @return: the parent/ancestor or None if it has not been found
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
237 """
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
238 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
239 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
240 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
241 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
242 current = Widget.getParent(current)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
243 if current is None and verbose:
334
9c6be29c714a browser side: removed logging imports: it's not working correctly with pyjamas
Goffi <goffi@goffi.org>
parents: 323
diff changeset
244 print "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
245 return current
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
246
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
247 def onClick(self, sender):
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
248 self.host.setSelected(self)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
249
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
250 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
251 """ Called when the close button is pushed """
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
252 _widgetspanel = self.getWidgetsPanel()
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
253 _widgetspanel.removeWidget(self)
294
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
254 for callback in self._close_listeners:
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
255 callback(self)
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
256 self.onQuit()
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
257
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
258 def onQuit(self):
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
259 """ 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
260 pass
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
261
294
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
262 def addCloseListener(self, callback):
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
263 """Add a close listener to this widget
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
264 @param callback: function to be called from self.onClose"""
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
265 self._close_listeners.append(callback)
a6b3715f0bd6 browser_side: bug fixes for switching between unibox and rich text editor:
souliane <souliane@mailoo.org>
parents: 254
diff changeset
266
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
267 def refresh(self):
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
268 """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
269 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
270 """
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
271 pass
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
272
89
8d2c7be09eef browser side: CSS: removed useless z-indexes, and replaced tabs by spaces
Goffi <goffi@goffi.org>
parents: 88
diff changeset
273 def onSetting(self, sender):
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
274 widpanel = self.getWidgetsPanel()
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
275 row, col = widpanel.getIndex(self)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
276 body = VerticalPanel()
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
277
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
278 # colspan & rowspan
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
279 colspan = widpanel.getColSpan(row, col)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
280 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
281
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
282 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
283 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
284
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
285 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
286 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
287 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
288 colspan_setter.addValueChangeListener(onColSpanChange)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
289 colspan_setter.setWidth('100%')
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
290 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
291 rowspan_setter.addValueChangeListener(onRowSpanChange)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
292 rowspan_setter.setWidth('100%')
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
293 body.add(colspan_setter)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
294 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
295
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
296 # 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
297 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
298 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
299 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
300 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
301 width = 0
97
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
302 height_str = self.getHeight()
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
303 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
304 height = int(height_str[:-2])
97
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
305 else:
3cbbe5c05aa5 browser side: widgets' setting: height detection fix
Goffi <goffi@goffi.org>
parents: 96
diff changeset
306 height = 0
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
307
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
308 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
309 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
310 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
311 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
312 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
313
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
314 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
315 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
316 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
317 else:
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
318 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
319 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
320 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
321 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
322 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
323 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
324 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
325 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
326 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
327
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
328 # 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
329 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
330 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
331 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
332 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
333 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
334
92
dd54bc13ac81 browser side: widgets' width and height can now be fixed + tarot game position fix
Goffi <goffi@goffi.org>
parents: 90
diff changeset
335 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
336 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
337 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
338
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
339 _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
340 _dialog.show()
89
8d2c7be09eef browser side: CSS: removed useless z-indexes, and replaced tabs by spaces
Goffi <goffi@goffi.org>
parents: 88
diff changeset
341
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
342 def setTitle(self, text):
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
343 """change the title in the header of the widget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
344 @param text: text of the new title"""
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
345 self.__title.setText(text)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
346
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
347 def isSelectable(self):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
348 return self.__selectable
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
349
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
350 def setSelectable(self, selectable):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
351 if not self.__selectable:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
352 try:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
353 self.removeClickListener(self)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
354 except ValueError:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
355 pass
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
356 if self.selectable and not self in self._clickListeners:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
357 self.addClickListener(self)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
358 self.__selectable = selectable
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
359
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
360 def getWarningData(self):
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
361 """ 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
362 This method should be overriden by children
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
363 @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
364 - PUBLIC
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
365 - GROUP
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
366 - ONE2ONE
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
367 - MISC
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
368 - NONE
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
369 """
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
370 if not self.__selectable:
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
371 print "ERROR: getWarningLevel must not be called for an unselectable widget"
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
372 raise Exception
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
373 # TODO: cleaner warning types (more general constants)
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
374 return ("NONE", None)
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 198
diff changeset
375
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
376 def setWidget(self, widget, scrollable=True):
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
377 """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
378 @param widget: widget to put in the body
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
379 @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
380 if scrollable:
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
381 _scrollpanelwrapper = ScrollPanelWrapper()
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
382 _scrollpanelwrapper.setStyleName('widgetBody')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
383 _scrollpanelwrapper.setWidget(widget)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
384 body_wid = _scrollpanelwrapper
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
385 else:
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
386 body_wid = widget
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
387 self.add(body_wid)
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
388 self.setCellHeight(body_wid, '100%')
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
389
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
390 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
391 # 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
392 # for the same reason as doAttachChildren
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
393 VerticalPanel.doDetachChildren(self)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
394
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
395 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
396 # 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
397 # the event will not propagate to children
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
398 VerticalPanel.doAttachChildren(self)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
399
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
400 def matchEntity(self, entity):
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
401 """This method should be overwritten by child classes."""
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
402 raise NotImplementedError
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 225
diff changeset
403
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
404
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
405 class ScrollPanelWrapper(SimplePanel):
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
406 """Scroll Panel like component, wich use the full available space
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
407 to work around percent size issue, it use some of the ideas found
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
408 here: http://code.google.com/p/google-web-toolkit/issues/detail?id=316
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
409 specially in code given at comment #46, thanks to Stefan Bachert"""
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
410
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
411 def __init__(self, *args, **kwargs):
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
412 SimplePanel.__init__(self)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
413 self.spanel = ScrollPanel(*args, **kwargs)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
414 SimplePanel.setWidget(self, self.spanel)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
415 DOM.setStyleAttribute(self.getElement(), "position", "relative")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
416 DOM.setStyleAttribute(self.getElement(), "top", "0px")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
417 DOM.setStyleAttribute(self.getElement(), "left", "0px")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
418 DOM.setStyleAttribute(self.getElement(), "width", "100%")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
419 DOM.setStyleAttribute(self.getElement(), "height", "100%")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
420 DOM.setStyleAttribute(self.spanel.getElement(), "position", "absolute")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
421 DOM.setStyleAttribute(self.spanel.getElement(), "width", "100%")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
422 DOM.setStyleAttribute(self.spanel.getElement(), "height", "100%")
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
423
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
424 def setWidget(self, widget):
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
425 self.spanel.setWidget(widget)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
426
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
427 def setScrollPosition(self, position):
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
428 self.spanel.setScrollPosition(position)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
429
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
430 def scrollToBottom(self):
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
431 self.setScrollPosition(self.spanel.getElement().scrollHeight)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
432
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
433
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
434 class EmptyWidget(DropCell, SimplePanel):
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
435 """Empty dropable panel"""
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
436
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
437 def __init__(self, host):
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
438 SimplePanel.__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
439 DropCell.__init__(self, host)
96
d7a4bbaddfb0 browser side: removed &nbsp; in EmptyPanel
Goffi <goffi@goffi.org>
parents: 92
diff changeset
440 #self.setWidget(HTML(''))
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
441 self.setSize('100%', '100%')
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
442
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
443
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
444 class BorderWidget(EmptyWidget):
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
445 def __init__(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
446 EmptyWidget.__init__(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
447 self.addStyleName('borderPanel')
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
448
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
449
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
450 class LeftBorderWidget(BorderWidget):
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
451 def __init__(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
452 BorderWidget.__init__(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
453 self.addStyleName('leftBorderWidget')
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
454
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
455
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
456 class RightBorderWidget(BorderWidget):
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
457 def __init__(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
458 BorderWidget.__init__(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
459 self.addStyleName('rightBorderWidget')
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
460
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
461
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
462 class BottomBorderWidget(BorderWidget):
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
463 def __init__(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
464 BorderWidget.__init__(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
465 self.addStyleName('bottomBorderWidget')
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
466
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
467
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
468 class WidgetsPanel(ScrollPanelWrapper):
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
469
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
470 def __init__(self, host, locked=False):
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
471 ScrollPanelWrapper.__init__(self)
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
472 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
473 self.host = host
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
474 self.locked = locked # if True: tab will not be removed when there are no more widgets inside
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
475 self.selected = None
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
476 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
477 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
478 self.setWidget(self.flextable)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
479 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
480 _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
481 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
482 # 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
483 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
484 DOM.setStyleAttribute(td_elt, "height", "1px") # needed so the cell adapt to the size of the border (specially in webkit)
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
485 self._max_cols = 1 # give the maximum number of columns i a raw
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
486
184
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
487 def isLocked(self):
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
488 return self.locked
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
489
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
490 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
491 """Change the widget in the given location, add row or columns when necessary"""
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
492 print "changing widget:", wid.getDebugName(), row, col
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
493 last_row = max(0, self.flextable.getRowCount() - 1)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
494 try:
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
495 prev_wid = self.flextable.getWidget(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
496 except:
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
497 print "ERROR: Trying to change an unexisting widget !"
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
498 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
499
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
500 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
501
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
502 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
503 # 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
504 print "BORDER WIDGET"
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
505 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
506
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
507 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
508 # 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
509 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
510 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
511 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
512 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
513 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
514 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
515
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
516 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
517 if col != 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
518 print "ERROR: LeftBorderWidget must be on the first column !"
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
519 return
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
520 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
521 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
522
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
523 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
524 if col != self.flextable.getCellCount(row) - 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
525 print "ERROR: RightBorderWidget must be on the last column !"
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
526 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
527 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
528 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
529
a8f027738c16 browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents: 84
diff changeset
530 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
531 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
532 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
533
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
534 _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
535 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
536 self._max_cols = _max_cols
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
537 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
538
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
539 def _sizesAdjust(self):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
540 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
541 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
542
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
543 for row_idx in xrange(self.flextable.getRowCount()):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
544 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
545 _widget = self.flextable.getWidget(row_idx, col_idx)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
546 if not isinstance(_widget, BorderWidget):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
547 td_elt = _widget.getElement().parentNode
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
548 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
549
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
550 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
551 cellFormatter.setColSpan(last_row, 0, self._max_cols)
178
7a349be99a77 dummy commit, just for test
Goffi <goffi@goffi.org>
parents: 177
diff changeset
552
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
553 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
554 """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
555 last_row = max(0, self.flextable.getRowCount() - 1)
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
556 print "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
557 self.changeWidget(last_row, 0, wid)
83
68d360caeecb New widget system: first draft
Goffi <goffi@goffi.org>
parents: 78
diff changeset
558
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
559 def removeWidget(self, wid):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
560 """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
561 _row, _col = self.flextable.getIndex(wid)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
562 self.flextable.remove(wid)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
563 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
564 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
565 self.flextable.removeRow(_row)
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
566 _max_cols = 1
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
567 for row_idx in xrange(self.flextable.getRowCount()):
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
568 _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
569 if _max_cols != self._max_cols:
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
570 self._max_cols = _max_cols
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
571 self._sizesAdjust()
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
572 current = self
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
573
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
574 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
575
184
97d5e9de1106 browser side: contacts panel switch:
Goffi <goffi@goffi.org>
parents: 181
diff changeset
576 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
577 # 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
578 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
579 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
580 current.onWidgetPanelRemove(self)
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
581 return
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
582 current = current.getParent()
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
583 print "Error: no MainTabPanel found !"
86
6c3b3254605f browser side: widget removing is now managed
Goffi <goffi@goffi.org>
parents: 85
diff changeset
584
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
585 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
586 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
587
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
588 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
589 """ 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
590 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
591
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
592 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
593 """ 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
594 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
595 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
596 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
597 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
598 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
599
196
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
600 def getLiberviaWidgetsCount(self):
c2639c9f86ea Browser Side: Widgets can now be moved, header (title bar) is draggable:
Goffi <goffi@goffi.org>
parents: 195
diff changeset
601 """ 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
602 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
603
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
604 def getIndex(self, wid):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
605 return self.flextable.getIndex(wid)
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
606
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
607 def getColSpan(self, row, col):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
608 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
609 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
610
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
611 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
612 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
613 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
614
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
615 def getRowSpan(self, row, col):
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
616 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
617 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
618
90
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
619 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
620 cellFormatter = self.flextable.getFlexCellFormatter()
9729ed7171a6 browser side: Widgets' setting (col & row span can be changed
Goffi <goffi@goffi.org>
parents: 89
diff changeset
621 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
622
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
623
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
624 class DropTab(Label, DropWidget):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
625
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
626 def __init__(self, tab_panel, text):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
627 Label.__init__(self, text)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
628 DropWidget.__init__(self, tab_panel)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
629 self.tab_panel = tab_panel
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
630 self.setStyleName('dropCell')
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
631 self.setWordWrap(False)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
632 DOM.setStyleAttribute(self.getElement(), "min-width", "30px")
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
633
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
634 def _getIndex(self):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
635 """ get current index of the DropTab """
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
636 # XXX: awful hack, but seems the only way to get index
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
637 return self.tab_panel.tabBar.panel.getWidgetIndex(self.getParent().getParent()) - 1
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
638
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
639 def onDragEnter(self, event):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
640 #if self == LiberviaDragWidget.current:
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
641 # return
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
642 self.addStyleName('dragover')
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
643 DOM.eventPreventDefault(event)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
644
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
645 def onDragLeave(self, event):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
646 self.removeStyleName('dragover')
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
647
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
648 def onDragOver(self, event):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
649 DOM.eventPreventDefault(event)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
650
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
651 def onDrop(self, event):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
652 DOM.eventPreventDefault(event)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
653 self.removeStyleName('dragover')
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
654 if self._getIndex() == self.tab_panel.tabBar.getSelectedTab():
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
655 # the widget come from the DragTab, so nothing to do, we let it there
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
656 return
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
657
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
658 # FIXME: quite the same stuff as in DropCell, need some factorisation
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
659 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
660 # 'text', 'text/plain', and 'Text' are equivalent.
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
661 try:
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
662 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
663 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
664 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
665 # item_type = dt.getData("type")
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
666 print "message: %s" % item
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
667 print "type: %s" % item_type
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
668 except:
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
669 print "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
670 item = '&nbsp;'
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
671 item_type = None
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
672 if item_type == "WIDGET":
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
673 if not LiberviaDragWidget.current:
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
674 print "ERROR: No widget registered in LiberviaDragWidget !"
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
675 return
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
676 _new_panel = LiberviaDragWidget.current
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
677 _new_panel.getWidgetsPanel().removeWidget(_new_panel)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
678 elif item_type in DropCell.drop_keys:
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
679 _new_panel = DropCell.drop_keys[item_type](self.tab_panel.host, item)
254
28d3315a8003 browser_side: isolate the basic stuff of RecipientManager in a new class ListManager:
souliane <souliane@mailoo.org>
parents: 243
diff changeset
680 elif item_type == "CONTACT_TEXTBOX":
232
0ed09cc0566f browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents: 230
diff changeset
681 # eventually open a window?
0ed09cc0566f browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents: 230
diff changeset
682 pass
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
683 else:
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
684 print "WARNING: unmanaged item type"
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
685 return
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
686
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
687 widgets_panel = self.tab_panel.getWidget(self._getIndex())
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
688 widgets_panel.addWidget(_new_panel)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
689
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
690
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
691 class MainTabPanel(TabPanel):
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
692
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
693 def __init__(self, host):
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
694 TabPanel.__init__(self)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
695 self.host = host
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
696 self.tabBar.setVisible(False)
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
697 self.setStyleName('liberviaTabPanel')
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
698 self.addStyleName('mainTabPanel')
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
699 Window.addWindowResizeListener(self)
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
700
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
701 def getCurrentPanel(self):
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
702 """ Get the panel of the currently selected tab """
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
703 return self.deck.visibleWidget
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 191
diff changeset
704
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
705 def onWindowResized(self, width, height):
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
706 tab_panel_elt = self.getElement()
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
707 _elts = doc().getElementsByClassName('gwt-TabBar')
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
708 if not _elts.length:
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
709 print ("ERROR: no TabBar found, it should exist !")
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
710 tab_bar_h = 0
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
711 else:
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
712 tab_bar_h = _elts.item(0).offsetHeight
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 186
diff changeset
713 ideal_height = height - DOM.getAbsoluteTop(tab_panel_elt) - tab_bar_h - 5
185
40adfd4ee4d7 browser side: fixed MainTabPanel size
Goffi <goffi@goffi.org>
parents: 184
diff changeset
714 ideal_width = width - DOM.getAbsoluteLeft(tab_panel_elt) - 5
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
715 self.setWidth("%s%s" % (ideal_width, "px"))
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 232
diff changeset
716 self.setHeight("%s%s" % (ideal_height, "px"))
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
717
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
718 def add(self, widget, text=''):
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
719 tab = DropTab(self, text)
ab239b3b67b3 browser side: tabs are now dropable (i.e. we can now move widgets between tabs)
Goffi <goffi@goffi.org>
parents: 197
diff changeset
720 TabPanel.add(self, widget, tab, False)
225
9b93a21dc5e2 browser_side: display widget title in the debug info (LiberviaWidget method "getDebugName")
souliane <souliane@mailoo.org>
parents: 210
diff changeset
721 if self.getWidgetCount() > 1:
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
722 self.tabBar.setVisible(True)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
723 self.host.resize()
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
724
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
725 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
726 """ Called when a child WidgetsPanel is empty and need to be removed """
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
727 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
728 widgets_count = self.getWidgetCount()
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
729 if widgets_count == 1:
177
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
730 self.tabBar.setVisible(False)
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
731 self.host.resize()
ba95cd824e06 browser side: tab is removed if it doesn't contain widget anymore.
Goffi <goffi@goffi.org>
parents: 174
diff changeset
732 self.selectTab(0)
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
733 else:
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
734 self.selectTab(widgets_count - 1)