PageRenderTime 28ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/qooxdoo/application/demobrowser/source/class/demobrowser/demo/virtual/Selection.js

https://github.com/Wkasel/qooxdoo
JavaScript | 392 lines | 296 code | 59 blank | 37 comment | 33 complexity | 1fa33fab18504638423693a9243b15be MD5 | raw file
  1. /* ************************************************************************
  2. qooxdoo - the new era of web development
  3. http://qooxdoo.org
  4. Copyright:
  5. 2004-2008 1&1 Internet AG, Germany, http://www.1und1.de
  6. License:
  7. LGPL: http://www.gnu.org/licenses/lgpl.html
  8. EPL: http://www.eclipse.org/org/documents/epl-v10.php
  9. See the LICENSE file in the project's top-level directory for details.
  10. Authors:
  11. * Fabian Jakobs (fjakobs)
  12. * Jonathan Weiß (jonathan_rass)
  13. ************************************************************************ */
  14. /**
  15. * @tag test
  16. */
  17. qx.Class.define("demobrowser.demo.virtual.Selection",
  18. {
  19. extend : qx.application.Standalone,
  20. /*
  21. *****************************************************************************
  22. MEMBERS
  23. *****************************************************************************
  24. */
  25. members :
  26. {
  27. /**
  28. * This method contains the initial application code and gets called
  29. * during startup of the application
  30. */
  31. main : function()
  32. {
  33. // Call super class
  34. this.base(arguments);
  35. var fontStyles = qx.theme.manager.Font.getInstance().resolve("default").getStyles();
  36. this._fontCss = qx.bom.element.Style.compile(fontStyles);
  37. var layout = new qx.ui.layout.Grid(5, 0);
  38. layout.setRowFlex(2, 1);
  39. layout.setColumnFlex(0, 1);
  40. layout.setColumnFlex(1, 1);
  41. layout.setColumnFlex(2, 1);
  42. layout.setColumnFlex(3, 1);
  43. var managers = [];
  44. var container = new qx.ui.container.Composite(layout);
  45. this.getRoot().add(container, {edge: 5});
  46. // Row selection
  47. container.add(new qx.ui.basic.Label("Row Selection").set({
  48. font: "bold",
  49. decorator: "table-scroller-header",
  50. padding: 3,
  51. allowGrowX: true
  52. }), {row: 1, column: 0});
  53. var scroller = this.createRowSelectionScroller();
  54. managers.push(scroller.getUserData("manager"));
  55. container.add(scroller, {row: 2, column: 0});
  56. // Column selection
  57. container.add(new qx.ui.basic.Label("Column Selection").set({
  58. font: "bold",
  59. decorator: "table-scroller-header",
  60. padding: 3,
  61. allowGrowX: true
  62. }), {row: 1, column: 1});
  63. var scroller = this.createColumnSelectionScroller();
  64. managers.push(scroller.getUserData("manager"));
  65. container.add(scroller, {row: 2, column: 1});
  66. // Cell rectangle selection
  67. container.add(new qx.ui.basic.Label("Cell Rectangle Selection").set({
  68. font: "bold",
  69. decorator: "table-scroller-header",
  70. padding: 3,
  71. allowGrowX: true
  72. }), {row: 1, column: 2});
  73. var scroller = this.createCellRectangleSelectionScroller();
  74. managers.push(scroller.getUserData("manager"));
  75. container.add(scroller, {row: 2, column: 2});
  76. // Cell line selection
  77. container.add(new qx.ui.basic.Label("Cell Line Selection").set({
  78. font: "bold",
  79. decorator: "table-scroller-header",
  80. padding: 3,
  81. allowGrowX: true
  82. }), {row: 1, column: 3});
  83. var scroller = this.createCellLineSelectionScroller();
  84. managers.push(scroller.getUserData("manager"));
  85. container.add(scroller, {row: 2, column: 3});
  86. // Controls
  87. var grid = new qx.ui.layout.Grid(20, 4);
  88. var controls = new qx.ui.container.Composite(grid).set({
  89. padding: 15,
  90. backgroundColor: "white"
  91. });
  92. container.add(controls, {row: 0, column: 0, colSpan: 4});
  93. controls.add(new qx.ui.basic.Label("Selection Mode").set({
  94. font: "bold",
  95. padding: 3
  96. }), {row: 0, column: 0});
  97. var mode1 = new qx.ui.form.RadioButton("Single Selection");
  98. mode1.setUserData("value", "single");
  99. controls.add(mode1, {row: 1, column: 0});
  100. var mode2 = new qx.ui.form.RadioButton("Multi Selection");
  101. mode2.setUserData("value", "multi");
  102. mode2.setValue(true);
  103. controls.add(mode2, {row: 2, column: 0});
  104. var mode3 = new qx.ui.form.RadioButton("Additive Selection");
  105. mode3.setUserData("value", "additive");
  106. controls.add(mode3, {row: 3, column: 0});
  107. var mode4 = new qx.ui.form.RadioButton("One Selection");
  108. mode4.setUserData("value", "one");
  109. controls.add(mode4, {row: 4, column: 0});
  110. var rbm1 = new qx.ui.form.RadioGroup(mode1, mode2, mode3, mode4);
  111. rbm1.addListener("changeSelection", function(e)
  112. {
  113. var value = e.getData()[0].getUserData("value");
  114. managers.forEach(function(manager) {
  115. manager.setMode(value);
  116. });
  117. if (value == "single" || value == "one")
  118. {
  119. dragCheck.setEnabled(false);
  120. quickCheck.setEnabled(true);
  121. }
  122. else if (value == "multi" || value == "addaptive")
  123. {
  124. dragCheck.setEnabled(true);
  125. quickCheck.setEnabled(false);
  126. }
  127. });
  128. controls.add(new qx.ui.basic.Label("Options").set({
  129. font: "bold",
  130. padding: 3
  131. }), {row: 0, column: 1});
  132. var dragCheck = new qx.ui.form.CheckBox("Enable drag selection");
  133. controls.add(dragCheck, {row: 1, column: 1});
  134. dragCheck.addListener("changeValue", function(e)
  135. {
  136. if (e.getData())
  137. {
  138. var mode = managers[0].getMode();
  139. if (mode == "single" || mode == "one") {
  140. this.debug("Drag selection is only available for the modes multi or additive");
  141. }
  142. }
  143. managers.forEach(function(manager) {
  144. manager.setDrag(e.getData());
  145. });
  146. });
  147. var quickCheck = new qx.ui.form.CheckBox("Enable quick selection").set({
  148. enabled : false
  149. });
  150. controls.add(quickCheck, {row: 2, column: 1});
  151. quickCheck.addListener("changeValue", function(e)
  152. {
  153. if (e.getData())
  154. {
  155. var mode = managers[0].getMode();
  156. if (mode == "multi" || mode == "additive") {
  157. this.debug("Quick selection is only available for the modes multi or additive");
  158. }
  159. }
  160. managers.forEach(function(manager) {
  161. manager.setQuick(e.getData());
  162. });
  163. });
  164. },
  165. createRowSelectionScroller : function()
  166. {
  167. var scroller = new qx.ui.virtual.core.Scroller(1000, 100, 20, 100);
  168. var rowLayer = new qx.ui.virtual.layer.Row("white", "#EEE");
  169. scroller.getPane().addLayer(rowLayer);
  170. scroller.getPane().addLayer(new qx.ui.virtual.layer.GridLines("horizontal"));
  171. var cellRenderer = new qx.ui.virtual.cell.Cell();
  172. var cellLayer = new qx.ui.virtual.layer.HtmlCell({
  173. getCellProperties : function(row, column)
  174. {
  175. var states = {};
  176. if (manager.isItemSelected(row)) {
  177. states.selected = true;
  178. }
  179. return cellRenderer.getCellProperties(row + " / " + column, states);
  180. }
  181. });
  182. scroller.getPane().addLayer(cellLayer);
  183. var manager = new qx.ui.virtual.selection.Row(scroller.getPane(), {
  184. styleSelectable : function(item, type, wasAdded)
  185. {
  186. if (type !== "selected") {
  187. return;
  188. }
  189. if (wasAdded) {
  190. rowLayer.setBackground(item, "selected");
  191. } else {
  192. rowLayer.setBackground(item, null);
  193. }
  194. cellLayer.updateLayerData();
  195. }
  196. });
  197. manager.attachMouseEvents(scroller.getPane());
  198. manager.attachKeyEvents(scroller);
  199. manager.set({
  200. mode: "multi"
  201. });
  202. manager.addItem(0);
  203. scroller.setUserData("manager", manager);
  204. return scroller;
  205. },
  206. createColumnSelectionScroller : function()
  207. {
  208. var scroller = new qx.ui.virtual.core.Scroller(1000, 100, 20, 100);
  209. scroller.getPane().addLayer(new qx.ui.virtual.layer.Row("white", "#EEE"));
  210. var columnLayer = new qx.ui.virtual.layer.Column();
  211. scroller.getPane().addLayer(columnLayer);
  212. scroller.getPane().addLayer(new qx.ui.virtual.layer.GridLines("horizontal"));
  213. var cellRenderer = new qx.ui.virtual.cell.Cell();
  214. var cellLayer = new qx.ui.virtual.layer.HtmlCell({
  215. getCellProperties : function(row, column)
  216. {
  217. var states = {};
  218. if (manager.isItemSelected(column)) {
  219. states.selected = true;
  220. }
  221. return cellRenderer.getCellProperties(row + " / " + column, states);
  222. }
  223. });
  224. scroller.getPane().addLayer(cellLayer);
  225. var manager = new qx.ui.virtual.selection.Column(scroller.getPane(), {
  226. styleSelectable : function(item, type, wasAdded)
  227. {
  228. if (type !== "selected") {
  229. return;
  230. }
  231. if (wasAdded) {
  232. columnLayer.setBackground(item, "selected");
  233. } else {
  234. columnLayer.setBackground(item, null);
  235. }
  236. cellLayer.updateLayerData();
  237. }
  238. });
  239. manager.attachMouseEvents(scroller.getPane());
  240. manager.attachKeyEvents(scroller);
  241. manager.set({
  242. mode: "multi"
  243. });
  244. manager.addItem(0);
  245. scroller.setUserData("manager", manager);
  246. return scroller;
  247. },
  248. createCellRectangleSelectionScroller : function()
  249. {
  250. var scroller = new qx.ui.virtual.core.Scroller(1000, 100, 20, 100);
  251. scroller.getPane().addLayer(new qx.ui.virtual.layer.Row("white", "#EEE"));
  252. var cellRenderer = new qx.ui.virtual.cell.Cell();
  253. var selectedCell = new qx.ui.virtual.cell.Cell().set({
  254. backgroundColor: "table-row-background-selected"
  255. });
  256. var cellLayer = new qx.ui.virtual.layer.HtmlCell({
  257. getCellProperties : function(row, column)
  258. {
  259. var states = {};
  260. if (manager.isItemSelected({row: row, column: column})) {
  261. states.selected = true;
  262. }
  263. if (states.selected) {
  264. return selectedCell.getCellProperties(row + " / " + column, states);
  265. } else {
  266. cellRenderer.resetBackgroundColor();
  267. return cellRenderer.getCellProperties(row + " / " + column, states);
  268. }
  269. }
  270. });
  271. scroller.getPane().addLayer(cellLayer);
  272. scroller.getPane().addLayer(new qx.ui.virtual.layer.GridLines("horizontal"));
  273. var manager = new qx.ui.virtual.selection.CellRectangle(scroller.getPane(), {
  274. styleSelectable : function(item, type, wasAdded) {
  275. cellLayer.updateLayerData();
  276. }
  277. });
  278. manager.attachMouseEvents(scroller.getPane());
  279. manager.attachKeyEvents(scroller);
  280. manager.set({
  281. mode: "multi"
  282. });
  283. manager.addItem({row: 0, column: 0});
  284. scroller.setUserData("manager", manager);
  285. return scroller;
  286. },
  287. createCellLineSelectionScroller : function()
  288. {
  289. var scroller = new qx.ui.virtual.core.Scroller(1000, 100, 20, 100);
  290. scroller.getPane().addLayer(new qx.ui.virtual.layer.Row("white", "#EEE"));
  291. var cellRenderer = new qx.ui.virtual.cell.Cell();
  292. var selectedCell = new qx.ui.virtual.cell.Cell().set({
  293. backgroundColor: "table-row-background-selected"
  294. });
  295. var cellLayer = new qx.ui.virtual.layer.HtmlCell({
  296. getCellProperties : function(row, column)
  297. {
  298. var states = {};
  299. if (manager.isItemSelected({row: row, column: column})) {
  300. states.selected = true;
  301. }
  302. if (states.selected) {
  303. return selectedCell.getCellProperties(row + " / " + column, states);
  304. } else {
  305. cellRenderer.resetBackgroundColor();
  306. return cellRenderer.getCellProperties(row + " / " + column, states);
  307. }
  308. }
  309. });
  310. scroller.getPane().addLayer(cellLayer);
  311. scroller.getPane().addLayer(new qx.ui.virtual.layer.GridLines("horizontal"));
  312. var manager = new qx.ui.virtual.selection.CellLines(scroller.getPane(), {
  313. styleSelectable : function(item, type, wasAdded) {
  314. cellLayer.updateLayerData();
  315. }
  316. });
  317. manager.attachMouseEvents(scroller.getPane());
  318. manager.attachKeyEvents(scroller);
  319. manager.set({
  320. mode: "multi"
  321. });
  322. manager.addItem({row: 0, column: 0});
  323. scroller.setUserData("manager", manager);
  324. return scroller;
  325. }
  326. }
  327. });