r25048: From the archives (patch found in one of my old working trees):
[jelmer/samba4-debian.git] / webapps / qooxdoo-0.6.5-sdk / frontend / framework / source / class / qx / manager / selection / TreeSelectionManager.js
1 /* ************************************************************************
2
3    qooxdoo - the new era of web development
4
5    http://qooxdoo.org
6
7    Copyright:
8      2004-2007 1&1 Internet AG, Germany, http://www.1and1.org
9
10    License:
11      LGPL: http://www.gnu.org/licenses/lgpl.html
12      EPL: http://www.eclipse.org/org/documents/epl-v10.php
13      See the LICENSE file in the project's top-level directory for details.
14
15    Authors:
16      * Sebastian Werner (wpbasti)
17      * Andreas Ecker (ecker)
18
19 ************************************************************************ */
20
21 /* ************************************************************************
22
23 #module(ui_tree)
24
25 ************************************************************************ */
26
27 qx.OO.defineClass("qx.manager.selection.TreeSelectionManager", qx.manager.selection.SelectionManager,
28 function(vBoundedWidget) {
29   qx.manager.selection.SelectionManager.call(this, vBoundedWidget);
30 });
31
32 /*!
33 Should multiple selection be allowed?
34 */
35 qx.OO.changeProperty({ name : "multiSelection", type : "boolean", defaultValue : false });
36
37 /*!
38 Enable drag selection?
39 */
40 qx.OO.changeProperty({ name : "dragSelection", type : "boolean", defaultValue : false });
41
42
43
44
45
46 /*
47 ---------------------------------------------------------------------------
48   MAPPING TO BOUNDED WIDGET
49 ---------------------------------------------------------------------------
50 */
51
52 qx.Proto._getFirst = function() {
53   return qx.lang.Array.getFirst(this.getItems());
54 }
55
56 qx.Proto._getLast = function() {
57   return qx.lang.Array.getLast(this.getItems());
58 }
59
60 qx.Proto.getItems = function() {
61   return this.getBoundedWidget().getItems();
62 }
63
64 qx.Proto.getNext = function(vItem)
65 {
66   if (vItem)
67   {
68     if (qx.ui.tree.Tree.isOpenTreeFolder(vItem))
69     {
70       return vItem.getFirstVisibleChildOfFolder();
71     }
72     else if (vItem.isLastVisibleChild())
73     {
74       var vCurrent = vItem;
75
76       while(vCurrent && vCurrent.isLastVisibleChild()) {
77         vCurrent = vCurrent.getParentFolder();
78       }
79
80       if (vCurrent && vCurrent instanceof qx.ui.tree.AbstractTreeElement && vCurrent.getNextVisibleSibling() && vCurrent.getNextVisibleSibling() instanceof qx.ui.tree.AbstractTreeElement) {
81         return vCurrent.getNextVisibleSibling();
82       }
83     }
84     else
85     {
86       return vItem.getNextVisibleSibling();
87     }
88   }
89   else
90   {
91     return this.getBoundedWidget().getFirstTreeChild();
92   }
93 }
94
95 qx.Proto.getPrevious = function(vItem)
96 {
97   if (vItem)
98   {
99     if (vItem == this.getBoundedWidget())
100     {
101       return;
102     }
103     else if (vItem.isFirstVisibleChild())
104     {
105       if (vItem.getParentFolder() instanceof qx.ui.tree.TreeFolder) {
106         return vItem.getParentFolder();
107       }
108     }
109     else
110     {
111       var vPrev = vItem.getPreviousVisibleSibling();
112
113       while (vPrev instanceof qx.ui.tree.AbstractTreeElement)
114       {
115         if (qx.ui.tree.Tree.isOpenTreeFolder(vPrev))
116         {
117           vPrev = vPrev.getLastVisibleChildOfFolder();
118         }
119         else
120         {
121           break;
122         }
123       }
124
125       return vPrev;
126     }
127   }
128   else
129   {
130     return this.getBoundedWidget().getLastTreeChild();
131   }
132 }
133
134
135
136
137
138
139
140 /*
141 ---------------------------------------------------------------------------
142   MAPPING TO ITEM DIMENSIONS
143 ---------------------------------------------------------------------------
144 */
145
146 qx.Proto.getItemTop = function(vItem)
147 {
148   // Alternate method:
149   // return qx.html.Location.getPageBoxTop(vItem.getElement()) - qx.html.Location.getPageInnerTop(this.getBoundedWidget().getElement());
150
151   var vBoundedWidget = this.getBoundedWidget();
152   var vElement = vItem.getElement();
153   var vOffset = 0;
154
155   while (vElement && vElement.qx_Widget != vBoundedWidget)
156   {
157     vOffset += vElement.offsetTop;
158     vElement = vElement.parentNode;
159   }
160
161   return vOffset;
162 }
163
164 qx.Proto.getItemHeight = function(vItem)
165 {
166   if (vItem instanceof qx.ui.tree.TreeFolder && vItem._horizontalLayout)
167   {
168     return vItem._horizontalLayout.getOffsetHeight();
169   }
170   else
171   {
172     return vItem.getOffsetHeight();
173   }
174 }
175
176 qx.Proto.scrollItemIntoView = function(vItem)
177 {
178   if (vItem instanceof qx.ui.tree.TreeFolder && vItem._horizontalLayout)
179   {
180     return vItem._horizontalLayout.scrollIntoView();
181   }
182   else
183   {
184     return vItem.scrollIntoView();
185   }
186 }
187
188
189
190
191
192 /*
193 ---------------------------------------------------------------------------
194   ITEM STATE MANAGMENT
195 ---------------------------------------------------------------------------
196 */
197
198 qx.Proto.renderItemSelectionState = function(vItem, vIsSelected) {
199   vItem.setSelected(vIsSelected);
200 }