From 1170417ceeb8c49a46cda522a38eaa71c9cae30c Mon Sep 17 00:00:00 2001 From: Derrell Lipman Date: Sat, 30 Dec 2006 05:09:59 +0000 Subject: r20414: Start to make SWAT usable by others. This is just a start... (This used to be commit 26a34037a7ca6fbd05c5a6f7c2d5973e34bc6918) --- .../frontend/framework/source/class/qx/OO.js | 749 +++ .../frontend/framework/source/class/qx/Settings.js | 167 + .../framework/source/class/qx/client/Builder.js | 478 ++ .../framework/source/class/qx/client/Command.js | 288 + .../framework/source/class/qx/client/History.js | 137 + .../source/class/qx/client/NativeWindow.js | 639 +++ .../framework/source/class/qx/client/Timer.js | 183 + .../class/qx/component/AbstractApplication.js | 28 + .../source/class/qx/component/AbstractComponent.js | 66 + .../source/class/qx/component/DummyApplication.js | 41 + .../qx/component/init/AbstractInitComponent.js | 65 + .../class/qx/component/init/BasicInitComponent.js | 53 + .../qx/component/init/InterfaceInitComponent.js | 181 + .../framework/source/class/qx/core/Init.js | 327 ++ .../framework/source/class/qx/core/Object.js | 525 ++ .../framework/source/class/qx/core/Target.js | 299 + .../framework/source/class/qx/core/Version.js | 67 + .../framework/source/class/qx/dev/Pollution.js | 249 + .../framework/source/class/qx/dev/TimeTracker.js | 320 ++ .../source/class/qx/dev/log/AlertAppender.js | 65 + .../framework/source/class/qx/dev/log/Appender.js | 181 + .../source/class/qx/dev/log/DefaultFilter.js | 57 + .../source/class/qx/dev/log/DivAppender.js | 164 + .../framework/source/class/qx/dev/log/Filter.js | 51 + .../source/class/qx/dev/log/FireBugAppender.js | 72 + .../source/class/qx/dev/log/ForwardAppender.js | 41 + .../source/class/qx/dev/log/LogEventProcessor.js | 141 + .../framework/source/class/qx/dev/log/Logger.js | 374 ++ .../source/class/qx/dev/log/RingBufferAppender.js | 122 + .../source/class/qx/dev/log/WindowAppender.js | 225 + .../framework/source/class/qx/dom/Dimension.js | 222 + .../framework/source/class/qx/dom/Element.js | 74 + .../source/class/qx/dom/ElementFromPoint.js | 122 + .../source/class/qx/dom/EventRegistration.js | 47 + .../framework/source/class/qx/dom/Iframe.js | 87 + .../framework/source/class/qx/dom/Location.js | 259 + .../frontend/framework/source/class/qx/dom/Node.js | 38 + .../framework/source/class/qx/dom/Offset.js | 119 + .../framework/source/class/qx/dom/Scroll.js | 53 + .../source/class/qx/dom/ScrollIntoView.js | 175 + .../framework/source/class/qx/dom/Style.js | 122 + .../framework/source/class/qx/dom/StyleSheet.js | 308 ++ .../framework/source/class/qx/dom/Window.js | 102 + .../class/qx/event/handler/DragAndDropHandler.js | 846 +++ .../source/class/qx/event/handler/EventHandler.js | 1172 ++++ .../source/class/qx/event/handler/FocusHandler.js | 342 ++ .../class/qx/event/handler/KeyEventHandler.js | 725 +++ .../source/class/qx/event/type/DataEvent.js | 48 + .../source/class/qx/event/type/DomEvent.js | 227 + .../source/class/qx/event/type/DragEvent.js | 155 + .../framework/source/class/qx/event/type/Event.js | 88 + .../source/class/qx/event/type/FocusEvent.js | 46 + .../source/class/qx/event/type/KeyEvent.js | 152 + .../source/class/qx/event/type/MouseEvent.js | 309 ++ .../frontend/framework/source/class/qx/io/Json.js | 385 ++ .../source/class/qx/io/image/Preloader.js | 197 + .../source/class/qx/io/image/PreloaderSystem.js | 187 + .../source/class/qx/io/local/CookieApi.js | 139 + .../source/class/qx/io/local/CookieTransport.js | 181 + .../class/qx/io/remote/AbstractRemoteTransport.js | 328 ++ .../source/class/qx/io/remote/Exchange.js | 704 +++ .../source/class/qx/io/remote/IframeTransport.js | 472 ++ .../framework/source/class/qx/io/remote/Request.js | 545 ++ .../source/class/qx/io/remote/RequestQueue.js | 392 ++ .../source/class/qx/io/remote/Response.js | 110 + .../framework/source/class/qx/io/remote/Rpc.js | 572 ++ .../source/class/qx/io/remote/ScriptTransport.js | 360 ++ .../source/class/qx/io/remote/XmlHttpTransport.js | 819 +++ .../framework/source/class/qx/lang/Array.js | 158 + .../framework/source/class/qx/lang/Core.js | 238 + .../framework/source/class/qx/lang/Generics.js | 142 + .../framework/source/class/qx/lang/MshtmlEmu.js | 348 ++ .../framework/source/class/qx/lang/Number.js | 48 + .../framework/source/class/qx/lang/Object.js | 121 + .../framework/source/class/qx/lang/Prototypes.js | 69 + .../framework/source/class/qx/lang/String.js | 158 + .../framework/source/class/qx/lang/XmlEmu.js | 188 + .../source/class/qx/manager/object/AliasManager.js | 172 + .../class/qx/manager/object/AppearanceManager.js | 139 + .../source/class/qx/manager/object/ColorManager.js | 227 + .../class/qx/manager/object/IframeManager.js | 75 + .../source/class/qx/manager/object/ImageManager.js | 305 ++ .../qx/manager/object/ImagePreloaderManager.js | 82 + .../source/class/qx/manager/object/MenuManager.js | 92 + .../class/qx/manager/object/ObjectManager.js | 117 + .../source/class/qx/manager/object/PopupManager.js | 77 + .../class/qx/manager/object/ToolTipManager.js | 191 + .../class/qx/manager/object/WindowManager.js | 158 + .../qx/manager/selection/DomSelectionManager.js | 242 + .../class/qx/manager/selection/RadioManager.js | 292 + .../class/qx/manager/selection/SelectionManager.js | 1433 +++++ .../selection/TreeFullControlSelectionManager.js | 206 + .../qx/manager/selection/TreeSelectionManager.js | 198 + .../manager/selection/VirtualSelectionManager.js | 143 + .../frontend/framework/source/class/qx/net/Http.js | 31 + .../framework/source/class/qx/net/Protocol.js | 35 + .../source/class/qx/renderer/border/Border.js | 1184 ++++ .../source/class/qx/renderer/border/BorderCache.js | 62 + .../class/qx/renderer/border/BorderObject.js | 149 + .../class/qx/renderer/border/BorderPresets.js | 71 + .../source/class/qx/renderer/color/Color.js | 542 ++ .../source/class/qx/renderer/color/ColorCache.js | 83 + .../source/class/qx/renderer/color/ColorObject.js | 154 + .../source/class/qx/renderer/font/Font.js | 218 + .../source/class/qx/renderer/font/FontCache.js | 70 + .../source/class/qx/renderer/font/FontObject.js | 93 + .../class/qx/renderer/layout/CanvasLayoutImpl.js | 297 + .../class/qx/renderer/layout/DockLayoutImpl.js | 488 ++ .../class/qx/renderer/layout/FlowLayoutImpl.js | 426 ++ .../class/qx/renderer/layout/GridLayoutImpl.js | 300 + .../qx/renderer/layout/HorizontalBoxLayoutImpl.js | 863 +++ .../source/class/qx/renderer/layout/LayoutImpl.js | 442 ++ .../qx/renderer/layout/MenuButtonLayoutImpl.js | 183 + .../class/qx/renderer/layout/MenuLayoutImpl.js | 100 + .../qx/renderer/layout/VerticalBoxLayoutImpl.js | 866 +++ .../class/qx/renderer/theme/AppearanceTheme.js | 164 + .../source/class/qx/renderer/theme/ColorTheme.js | 132 + .../source/class/qx/renderer/theme/IconTheme.js | 34 + .../source/class/qx/renderer/theme/WidgetTheme.js | 34 + .../framework/source/class/qx/sys/Client.js | 394 ++ .../source/class/qx/theme/appearance/Classic.js | 2219 ++++++++ .../source/class/qx/theme/color/System.js | 54 + .../source/class/qx/theme/color/WindowsClassic.js | 98 + .../source/class/qx/theme/color/WindowsLunaBlue.js | 96 + .../class/qx/theme/color/WindowsLunaGreen.js | 94 + .../class/qx/theme/color/WindowsLunaSilver.js | 94 + .../source/class/qx/theme/color/WindowsRoyale.js | 95 + .../source/class/qx/theme/icon/CrystalSvg.js | 68 + .../framework/source/class/qx/theme/icon/Nuvola.js | 66 + .../source/class/qx/theme/widget/Windows.js | 68 + .../framework/source/class/qx/type/Range.js | 87 + .../framework/source/class/qx/type/Selection.js | 120 + .../source/class/qx/type/StringBuilder.js | 146 + .../framework/source/class/qx/type/Version.js | 118 + .../framework/source/class/qx/ui/basic/Atom.js | 397 ++ .../source/class/qx/ui/basic/HorizontalSpacer.js | 31 + .../framework/source/class/qx/ui/basic/Image.js | 611 +++ .../framework/source/class/qx/ui/basic/Inline.js | 37 + .../framework/source/class/qx/ui/basic/Label.js | 546 ++ .../source/class/qx/ui/basic/Terminator.js | 187 + .../source/class/qx/ui/basic/VerticalSpacer.js | 31 + .../source/class/qx/ui/component/ColorPopup.js | 387 ++ .../source/class/qx/ui/component/ColorSelector.js | 1312 +++++ .../source/class/qx/ui/component/DateChooser.js | 518 ++ .../source/class/qx/ui/core/ClientDocument.js | 450 ++ .../class/qx/ui/core/ClientDocumentBlocker.js | 39 + .../framework/source/class/qx/ui/core/Parent.js | 1207 +++++ .../framework/source/class/qx/ui/core/ScrollBar.js | 260 + .../framework/source/class/qx/ui/core/Widget.js | 5703 ++++++++++++++++++++ .../framework/source/class/qx/ui/embed/Flash.js | 468 ++ .../framework/source/class/qx/ui/embed/Gallery.js | 556 ++ .../source/class/qx/ui/embed/GalleryList.js | 400 ++ .../source/class/qx/ui/embed/HtmlEmbed.js | 112 + .../source/class/qx/ui/embed/IconHtmlEmbed.js | 134 + .../framework/source/class/qx/ui/embed/Iframe.js | 430 ++ .../source/class/qx/ui/embed/LinkEmbed.js | 88 + .../source/class/qx/ui/embed/NodeEmbed.js | 48 + .../source/class/qx/ui/embed/TextEmbed.js | 121 + .../framework/source/class/qx/ui/form/Button.js | 200 + .../framework/source/class/qx/ui/form/CheckBox.js | 210 + .../framework/source/class/qx/ui/form/ComboBox.js | 826 +++ .../source/class/qx/ui/form/ComboBoxEx.js | 1044 ++++ .../source/class/qx/ui/form/InputCheckSymbol.js | 93 + .../framework/source/class/qx/ui/form/List.js | 383 ++ .../framework/source/class/qx/ui/form/ListItem.js | 115 + .../source/class/qx/ui/form/PasswordField.js | 31 + .../source/class/qx/ui/form/RadioButton.js | 185 + .../source/class/qx/ui/form/RepeatButton.js | 127 + .../framework/source/class/qx/ui/form/Spinner.js | 683 +++ .../framework/source/class/qx/ui/form/TextArea.js | 53 + .../framework/source/class/qx/ui/form/TextField.js | 538 ++ .../source/class/qx/ui/groupbox/CheckGroupBox.js | 39 + .../source/class/qx/ui/groupbox/GroupBox.js | 156 + .../source/class/qx/ui/groupbox/RadioGroupBox.js | 39 + .../source/class/qx/ui/layout/BoxLayout.js | 273 + .../source/class/qx/ui/layout/CanvasLayout.js | 45 + .../source/class/qx/ui/layout/DockLayout.js | 116 + .../source/class/qx/ui/layout/FlowLayout.js | 106 + .../source/class/qx/ui/layout/GridLayout.js | 864 +++ .../class/qx/ui/layout/HorizontalBoxLayout.js | 29 + .../source/class/qx/ui/layout/VerticalBoxLayout.js | 29 + .../source/class/qx/ui/listview/ContentCellHtml.js | 37 + .../class/qx/ui/listview/ContentCellIconHtml.js | 39 + .../class/qx/ui/listview/ContentCellImage.js | 57 + .../source/class/qx/ui/listview/ContentCellLink.js | 40 + .../source/class/qx/ui/listview/ContentCellText.js | 40 + .../source/class/qx/ui/listview/Header.js | 294 + .../source/class/qx/ui/listview/HeaderCell.js | 255 + .../source/class/qx/ui/listview/HeaderSeparator.js | 30 + .../source/class/qx/ui/listview/ListView.js | 373 ++ .../source/class/qx/ui/listview/ListViewPane.js | 556 ++ .../framework/source/class/qx/ui/menu/Button.js | 354 ++ .../framework/source/class/qx/ui/menu/CheckBox.js | 85 + .../framework/source/class/qx/ui/menu/Layout.js | 56 + .../framework/source/class/qx/ui/menu/Menu.js | 907 ++++ .../source/class/qx/ui/menu/RadioButton.js | 118 + .../framework/source/class/qx/ui/menu/Separator.js | 76 + .../framework/source/class/qx/ui/menubar/Button.js | 28 + .../source/class/qx/ui/menubar/MenuBar.js | 28 + .../source/class/qx/ui/pageview/AbstractBar.js | 129 + .../source/class/qx/ui/pageview/AbstractButton.js | 219 + .../source/class/qx/ui/pageview/AbstractPage.js | 75 + .../class/qx/ui/pageview/AbstractPageView.js | 84 + .../source/class/qx/ui/pageview/AbstractPane.js | 27 + .../source/class/qx/ui/pageview/buttonview/Bar.js | 75 + .../class/qx/ui/pageview/buttonview/Button.js | 120 + .../class/qx/ui/pageview/buttonview/ButtonView.js | 98 + .../source/class/qx/ui/pageview/buttonview/Page.js | 30 + .../source/class/qx/ui/pageview/buttonview/Pane.js | 51 + .../source/class/qx/ui/pageview/tabview/Bar.js | 33 + .../source/class/qx/ui/pageview/tabview/Button.js | 189 + .../source/class/qx/ui/pageview/tabview/Page.js | 30 + .../source/class/qx/ui/pageview/tabview/Pane.js | 33 + .../source/class/qx/ui/pageview/tabview/TabView.js | 86 + .../framework/source/class/qx/ui/popup/Popup.js | 329 ++ .../source/class/qx/ui/popup/PopupAtom.js | 51 + .../framework/source/class/qx/ui/popup/ToolTip.js | 255 + .../source/class/qx/ui/resizer/Resizer.js | 417 ++ .../class/qx/ui/splitpane/HorizontalSplitPane.js | 58 + .../source/class/qx/ui/splitpane/SplitPane.js | 759 +++ .../class/qx/ui/splitpane/VerticalSplitPane.js | 58 + .../class/qx/ui/table/AbstractDataCellRenderer.js | 127 + .../source/class/qx/ui/table/AbstractTableModel.js | 150 + .../class/qx/ui/table/BooleanDataCellRenderer.js | 48 + .../source/class/qx/ui/table/CellEditorFactory.js | 62 + .../class/qx/ui/table/CheckBoxCellEditorFactory.js | 43 + .../source/class/qx/ui/table/DataCellRenderer.js | 80 + .../source/class/qx/ui/table/DataRowRenderer.js | 54 + .../class/qx/ui/table/DefaultDataCellRenderer.js | 189 + .../class/qx/ui/table/DefaultDataRowRenderer.js | 106 + .../class/qx/ui/table/DefaultHeaderCellRenderer.js | 63 + .../source/class/qx/ui/table/HeaderCellRenderer.js | 69 + .../class/qx/ui/table/IconDataCellRenderer.js | 182 + .../class/qx/ui/table/IconHeaderCellRenderer.js | 84 + .../source/class/qx/ui/table/RemoteTableModel.js | 435 ++ .../source/class/qx/ui/table/SelectionManager.js | 163 + .../source/class/qx/ui/table/SelectionModel.js | 427 ++ .../source/class/qx/ui/table/SimpleTableModel.js | 335 ++ .../framework/source/class/qx/ui/table/Table.js | 1062 ++++ .../source/class/qx/ui/table/TableColumnModel.js | 399 ++ .../source/class/qx/ui/table/TableModel.js | 243 + .../source/class/qx/ui/table/TablePane.js | 486 ++ .../source/class/qx/ui/table/TablePaneHeader.js | 276 + .../source/class/qx/ui/table/TablePaneModel.js | 179 + .../source/class/qx/ui/table/TablePaneScroller.js | 1331 +++++ .../qx/ui/table/TextFieldCellEditorFactory.js | 58 + .../framework/source/class/qx/ui/toolbar/Button.js | 47 + .../source/class/qx/ui/toolbar/CheckBox.js | 86 + .../source/class/qx/ui/toolbar/MenuButton.js | 258 + .../framework/source/class/qx/ui/toolbar/Part.js | 82 + .../source/class/qx/ui/toolbar/PartHandle.js | 35 + .../source/class/qx/ui/toolbar/RadioButton.js | 116 + .../source/class/qx/ui/toolbar/Separator.js | 35 + .../source/class/qx/ui/toolbar/ToolBar.js | 242 + .../source/class/qx/ui/tree/AbstractTreeElement.js | 502 ++ .../framework/source/class/qx/ui/tree/Tree.js | 398 ++ .../framework/source/class/qx/ui/tree/TreeFile.js | 62 + .../source/class/qx/ui/tree/TreeFolder.js | 605 +++ .../qx/ui/treefullcontrol/AbstractTreeElement.js | 529 ++ .../source/class/qx/ui/treefullcontrol/Tree.js | 539 ++ .../source/class/qx/ui/treefullcontrol/TreeFile.js | 81 + .../class/qx/ui/treefullcontrol/TreeFolder.js | 651 +++ .../qx/ui/treefullcontrol/TreeRowStructure.js | 260 + .../framework/source/class/qx/ui/window/Window.js | 1441 +++++ .../framework/source/class/qx/util/ColorUtil.js | 162 + .../framework/source/class/qx/util/Compare.js | 86 + .../framework/source/class/qx/util/FormUtil.js | 109 + .../source/class/qx/util/Normalization.js | 56 + .../framework/source/class/qx/util/Return.js | 74 + .../framework/source/class/qx/util/Textile.js | 178 + .../framework/source/class/qx/util/Validation.js | 172 + .../source/class/qx/util/format/DateFormat.js | 614 +++ .../source/class/qx/util/format/Format.js | 51 + .../source/class/qx/util/format/NumberFormat.js | 216 + .../source/class/qx/util/fsm/FiniteStateMachine.js | 1386 +++++ .../framework/source/class/qx/util/fsm/State.js | 613 +++ .../source/class/qx/util/fsm/Transition.js | 384 ++ .../framework/source/class/qx/util/fsm/example.txt | 210 + .../frontend/framework/source/class/qx/xml/Core.js | 77 + .../framework/source/class/qx/xml/Namespace.js | 51 + 280 files changed, 77936 insertions(+) create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/OO.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/Settings.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Builder.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Command.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/History.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/NativeWindow.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Timer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/DummyApplication.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Init.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Object.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Target.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Version.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/Pollution.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/TimeTracker.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/AlertAppender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Appender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DefaultFilter.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DivAppender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Filter.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/FireBugAppender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/ForwardAppender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/LogEventProcessor.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Logger.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/RingBufferAppender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/WindowAppender.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Element.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ElementFromPoint.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/EventRegistration.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Iframe.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Location.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Node.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Offset.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Scroll.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Style.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/StyleSheet.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Window.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/EventHandler.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/FocusHandler.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/KeyEventHandler.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/DataEvent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/DomEvent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/DragEvent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/Event.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/FocusEvent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/KeyEvent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/type/MouseEvent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/Json.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/image/Preloader.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/image/PreloaderSystem.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/local/CookieApi.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/local/CookieTransport.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/AbstractRemoteTransport.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/Exchange.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/Request.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/RequestQueue.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/Response.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/Rpc.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/ScriptTransport.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/XmlHttpTransport.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/Array.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/Core.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/Generics.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/Number.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/Object.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/Prototypes.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/String.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/XmlEmu.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/AliasManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/AppearanceManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/ColorManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/IframeManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/ImageManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/ImagePreloaderManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/MenuManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/ObjectManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/PopupManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/ToolTipManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/object/WindowManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/selection/DomSelectionManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/selection/RadioManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/selection/SelectionManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/selection/TreeFullControlSelectionManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/selection/TreeSelectionManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/manager/selection/VirtualSelectionManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/net/Http.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/net/Protocol.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/border/Border.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/border/BorderCache.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/border/BorderObject.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/border/BorderPresets.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/ColorCache.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/ColorObject.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/font/Font.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/font/FontCache.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/font/FontObject.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/CanvasLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/DockLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/FlowLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/GridLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/HorizontalBoxLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/LayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/MenuButtonLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/MenuLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/layout/VerticalBoxLayoutImpl.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/theme/AppearanceTheme.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/theme/ColorTheme.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/theme/IconTheme.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/theme/WidgetTheme.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/appearance/Classic.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/color/System.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/color/WindowsClassic.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaBlue.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaGreen.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaSilver.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/color/WindowsRoyale.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/icon/CrystalSvg.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/icon/Nuvola.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/theme/widget/Windows.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/type/Range.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/type/Selection.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/type/StringBuilder.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/type/Version.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/Atom.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/HorizontalSpacer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/Image.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/Inline.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/Label.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/Terminator.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/basic/VerticalSpacer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/core/ClientDocument.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/core/ClientDocumentBlocker.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/core/Parent.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/core/ScrollBar.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/core/Widget.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/Flash.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/Gallery.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/GalleryList.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/HtmlEmbed.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/IconHtmlEmbed.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/Iframe.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/LinkEmbed.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/NodeEmbed.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/embed/TextEmbed.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/Button.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/CheckBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/ComboBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/InputCheckSymbol.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/List.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/ListItem.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/PasswordField.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/RadioButton.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/RepeatButton.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/Spinner.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/TextArea.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/form/TextField.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/groupbox/CheckGroupBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/groupbox/GroupBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/groupbox/RadioGroupBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/BoxLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/CanvasLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/DockLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/FlowLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/GridLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/HorizontalBoxLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/layout/VerticalBoxLayout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellHtml.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellIconHtml.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellImage.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellLink.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellText.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/Header.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/HeaderCell.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/HeaderSeparator.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ListView.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/listview/ListViewPane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menu/Button.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menu/CheckBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menu/Layout.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menu/Menu.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menu/RadioButton.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menu/Separator.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menubar/Button.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/menubar/MenuBar.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractBar.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractButton.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPage.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPageView.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Bar.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Button.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/ButtonView.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Page.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Pane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Bar.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Button.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Page.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Pane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/TabView.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/popup/Popup.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/popup/PopupAtom.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/popup/ToolTip.js create mode 100755 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/resizer/Resizer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/splitpane/HorizontalSplitPane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/splitpane/SplitPane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/splitpane/VerticalSplitPane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/AbstractDataCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/AbstractTableModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/BooleanDataCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/CellEditorFactory.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/CheckBoxCellEditorFactory.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/DataCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/DataRowRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataRowRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/DefaultHeaderCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/HeaderCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/IconDataCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/IconHeaderCellRenderer.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/RemoteTableModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/SelectionManager.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/SelectionModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/SimpleTableModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/Table.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TableColumnModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TableModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TablePane.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TablePaneHeader.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TablePaneModel.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TablePaneScroller.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/table/TextFieldCellEditorFactory.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/Button.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/CheckBox.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/MenuButton.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/Part.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/PartHandle.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/RadioButton.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/Separator.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/toolbar/ToolBar.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/tree/AbstractTreeElement.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/tree/Tree.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/tree/TreeFile.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/tree/TreeFolder.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/AbstractTreeElement.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/Tree.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFile.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFolder.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeRowStructure.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/ui/window/Window.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/ColorUtil.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/Compare.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/FormUtil.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/Normalization.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/Return.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/Textile.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/Validation.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/format/DateFormat.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/format/Format.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/format/NumberFormat.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/FiniteStateMachine.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/State.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/util/fsm/example.txt create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/xml/Core.js create mode 100644 webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/xml/Namespace.js (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class') diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/OO.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/OO.js new file mode 100644 index 0000000000..f4e25452b5 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/OO.js @@ -0,0 +1,749 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#id(qx.OO) +#module(core) +#after(qx.Settings) +#load(qx.lang.Core) +#load(qx.util.Return) +#optional(qx.event.type.DataEvent) + +************************************************************************ */ + +// Usage of this hacky construct to make qx.OO available inside the API viewer +qx.OO = {}; +qx.OO.defineClass = function() {}; +qx.Class = qx.OO; +qx.OO.defineClass("qx.OO"); + +qx.Class.classes = {}; +qx.Class.setter = {}; +qx.Class.getter = {}; +qx.Class.resetter = {}; +qx.Class.values = {}; +qx.Class.propertyNumber = 0; + + + + +/* +--------------------------------------------------------------------------- + DEFINE CLASS IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +/** + * define a new qooxdoo class + * All classes should be defined in this way. + * + * @param vClassName {string} fully qualified class name (e.g. "qx.ui.form.Button") + * @param vSuper {Object} super class + * @param vConstructor {Function} the constructor of the new class + */ +qx.Class.defineClass = function(vClassName, vSuper, vConstructor) +{ + var vSplitName = vClassName.split("."); + var vNameLength = vSplitName.length-1; + var vTempObject = window; + + // Setting up namespace + for (var i=0; i 4 || arguments.length == 0) { + throw new Error("Invalid number of arguments for property " + p.name + ": " + arguments); + } + + try + { + var ret = qx.lang.Array.fromShortHand(arguments); + } + catch(ex) + { + throw new Error("Invalid shorthand values for property " + p.name + ": " + arguments + ": " + ex); + } + + var s = p.setter; + var l = s.length; + + for (var i=0; i 1) { + newValue = qx.lang.Array.fromArguments(arguments); + } + + // support converter methods + if (p.hasConvert) + { + try + { + newValue = p.convert.call(this, newValue, p); + } + catch(ex) + { + throw new Error("Attention! Could not convert new value for " + p.name + ": " + newValue + ": " + ex); + } + } + + var oldValue = this[valueKey]; + + if (newValue === oldValue) { + return newValue; + } + + if (!(p.allowNull && newValue == null)) + { + if (p.hasType && typeof newValue !== p.type) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be typeof \"" + p.type + "\" but is typeof \"" + typeof newValue + "\"!", new Error()); + } + + if (p.hasInstance && !(newValue instanceof qx.OO.classes[p.instance])) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an instance of \"" + p.instance + "\"!", new Error()); + } + + if (p.hasClassName && newValue.classname != p.classname) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an object with the classname \"" + p.classname + "\"!", new Error()); + } + + if (p.hasPossibleValues && newValue != null && !qx.lang.Array.contains(p.possibleValues, newValue)) { + return this.error("Failed to save value for " + p.name + ". '" + newValue + "' is not a possible value!", new Error()); + } + } + + // Allow to check and transform the new value before storage + if (this[checkKey]) + { + try + { + newValue = this[checkKey](newValue, p); + + // Don't do anything if new value is indentical to old value + if (newValue === oldValue) { + return newValue; + } + } + catch(ex) + { + return this.error("Failed to check property " + p.name, ex); + } + } + + // Store new value + this[valueKey] = newValue; + + // Check if there is a modifier implementation + if (this[modifyKey]) + { + try + { + var r = this[modifyKey](newValue, oldValue, p); + if (!r) { + return this.error("Modification of property \"" + p.name + "\" failed without exception (" + r + ")", new Error()); + } + } + catch(ex) + { + return this.error("Modification of property \"" + p.name + "\" failed with exception", ex); + } + } + + // Unit detection support + if (p.hasUnitDetection) { + this[unitDetectionKey](p, newValue); + } + + // Auto queue addition support + if (p.addToQueue) { + this.addToQueue(p.name); + } + else if (p.addToQueueRuntime) { + this.addToQueueRuntime(p.name); + } + + // Auto state queue addition support + if (p.addToStateQueue) { + this.addToStateQueue(); + } + + // Create Event + if (this.hasEventListeners && this.hasEventListeners(changeKey)) + { + try + { + this.createDispatchDataEvent(changeKey, newValue); + } + catch(ex) + { + throw new Error("Property " + p.name + " modified: Failed to dispatch change event: " + ex); + } + } + + return newValue; + }; + } + else + { + // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ... + pp["set" + p.method] = function(newValue) + { + // this.debug("Fast Setter: " + p.name); + + var oldValue = this[valueKey]; + + if (newValue === oldValue) { + return newValue; + } + + if (!(p.allowNull && newValue == null)) + { + if (p.hasType && typeof newValue !== p.type) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be typeof \"" + p.type + "\" but is typeof \"" + typeof newValue + "\"!", new Error()); + } + } + + // Allow to check and transform the new value before storage + if (this[checkKey]) + { + try + { + newValue = this[checkKey](newValue, p); + + // Don't do anything if new value is indentical to old value + if (newValue === oldValue) { + return newValue; + } + } + catch(ex) + { + return this.error("Failed to check property " + p.name, ex); + } + } + + // Store new value + this[valueKey] = newValue; + + // Check if there is a modifier implementation + if (this[modifyKey]) + { + try + { + var r = this[modifyKey](newValue, oldValue, p); + if (!r) { + var valueStr = new String(newValue).substring(0, 50); + return this.error("Setting property \"" + p.name + "\" to \"" + valueStr + "\" failed without exception (" + r + ")", new Error()); + } + } + catch(ex) + { + var valueStr = new String(newValue).substring(0, 50); + return this.error("Setting property \"" + p.name + "\" to \"" + valueStr + "\" failed with exception", ex); + } + } + + // Create Event + if (this.hasEventListeners && this.hasEventListeners(changeKey)) + { + var vEvent = new qx.event.type.DataEvent(changeKey, newValue, oldValue, false); + + vEvent.setTarget(this); + + try + { + this.dispatchEvent(vEvent, true); + } + catch(ex) + { + throw new Error("Property " + p.name + " modified: Failed to dispatch change event: " + ex); + } + } + + return newValue; + }; + } + + // building user configured get alias for property + if (typeof p.getAlias === "string") { + pp[p.getAlias] = pp["get" + p.method]; + } + + // building user configured set alias for property + if (typeof p.setAlias === "string") { + pp[p.setAlias] = pp["set" + p.method]; + } +} + +qx.Class.changeProperty = qx.OO._createProperty; + +qx.Class.addProperty = function(p) +{ + qx.OO.propertyNumber++; + + qx.OO._createProperty(p); + + // add property to (all) property list + if (typeof qx.Proto._properties !== "string") { + qx.Proto._properties = p.name; + } else { + qx.Proto._properties += "," + p.name; + } + + // add property to object property list + switch(p.type) + { + case undefined: + case "object": + case "function": + if (typeof qx.Proto._objectproperties !== "string") { + qx.Proto._objectproperties = p.name; + } else { + qx.Proto._objectproperties += "," + p.name; + } + } +} + +qx.Class.inheritField = function(vField, vData) +{ + qx.lang.Object.carefullyMergeWith(vData, qx.Super.prototype[vField]); + qx.Proto[vField] = vData; +} + +qx.Class.isAvailable = function(vClassName) { + return typeof qx.OO.classes[vClassName] !== "undefined"; +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/Settings.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/Settings.js new file mode 100644 index 0000000000..d75a0d5810 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/Settings.js @@ -0,0 +1,167 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#id(qx.Settings) +#module(core) + +************************************************************************ */ + + + +/* +--------------------------------------------------------------------------- + CREATE NAMESPACE HIERARCHY +--------------------------------------------------------------------------- +*/ + +if (!window.qx) { + qx = {}; +} + +if (!qx.Settings) { + qx.Settings = {}; +} + +if (!qx.Settings._customSettings) { + qx.Settings._customSettings = {}; +} + +/** the default settings */ +qx.Settings._defaultSettings = {}; + + + + +/* +--------------------------------------------------------------------------- + ATTACH GLOBAL DATA +--------------------------------------------------------------------------- +*/ + +qx._LOADSTART = (new Date).valueOf(); + + + + + + +/* +--------------------------------------------------------------------------- + UTILITES METHODS +--------------------------------------------------------------------------- +*/ + +qx.Settings.substitute = function(vTemplate) +{ + if (typeof vTemplate !== "string") { + return vTemplate; + } + + return vTemplate.replace(/\%\{(.+)\}/g, function(vMatch, vKey) { + return eval(vKey); + }); +}; + + + + + + +/* +--------------------------------------------------------------------------- + ACCESS METHODS +--------------------------------------------------------------------------- +*/ + +qx.Settings.getValue = function(vKey) { + return qx.Settings.getValueOfClass(qx.Class.classname, vKey); +} + +qx.Settings.getValueOfClass = function(vClassName, vKey) +{ + var vCustomObject = qx.Settings._customSettings[vClassName]; + if (vCustomObject && vCustomObject[vKey] != null) { + return vCustomObject[vKey]; + } + + var vDefaultObject = qx.Settings._defaultSettings[vClassName]; + if (vDefaultObject && vDefaultObject[vKey] != null) { + return vDefaultObject[vKey]; + } + + return null; +} + +qx.Settings.setDefault = function(vKey, vValue) { + return qx.Settings.setDefaultOfClass(qx.Class.classname, vKey, vValue); +} + +qx.Settings.setDefaultOfClass = function(vClassName, vKey, vValue) +{ + var vDefaultObject = qx.Settings._defaultSettings[vClassName]; + + if (!vDefaultObject) { + vDefaultObject = qx.Settings._defaultSettings[vClassName] = {}; + } + + // default values doesn't support substitution + vDefaultObject[vKey] = vValue; +} + +qx.Settings.setCustom = function(vKey, vValue) { + return qx.Settings.setCustomOfClass(qx.Class.classname, vKey, vValue); +} + +qx.Settings.setCustomOfClass = function(vClassName, vKey, vValue) +{ + var vCustomObject = qx.Settings._customSettings[vClassName]; + + if (!vCustomObject) { + vCustomObject = qx.Settings._customSettings[vClassName] = {}; + } + + vCustomObject[vKey] = qx.Settings.substitute(vValue); +} + + + + + + + +/* +--------------------------------------------------------------------------- + IMPORT VARIABLES OF CUSTOM SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.init = function() +{ + for (var vClass in qx.Settings._customSettings) + { + var vSettings = qx.Settings._customSettings[vClass]; + + for (var vKey in vSettings) { + qx.Settings.setCustomOfClass(vClass, vKey, vSettings[vKey]); + } + } +} + +qx.Settings.init(); diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Builder.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Builder.js new file mode 100644 index 0000000000..03156282f5 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Builder.js @@ -0,0 +1,478 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/*! + A class to generate a widget hierarchy from XML + + qx.client.Builder is not thread safe by design + - state information is stored at the instance level + - only use it from a single thread +*/ +qx.OO.defineClass("qx.client.Builder", qx.core.Target, +function(flags) +{ + qx.core.Target.call(this); + + // map> + this._propertyEditors = {}; + + this._registerDefaultPropertyEditors(); + + this._flags = flags || {}; + + // ensure the default flags are setup + if (this._flags.strict == null) { + // strick mode throws exceptions when + // * widget setters don't exist + this._flags.strict = true; + } + +}); + +/* +------------------------------------------------------------------------------------ + BUILD +------------------------------------------------------------------------------------ +*/ + +/*! + Asynchronous method - fetches XML data from the URL then delegates to build to process the xml + Dispatches a qx.event.type.Event("done") after the hierarchy is built +*/ +qx.Proto.buildFromUrl = function(parent, url) { + var req = new qx.io.remote.Request(url, "GET", "application/xml"); + var self = this; + req.addEventListener("completed", function(e) { + self.build(parent, e.getData().getContent()); + qx.ui.core.Widget.flushGlobalQueues(); + }); + req.send(); +} + +/*! + parse the children of the xml and appending all widgets to the parent widget + @param parent can either be the application instance, or a widget to append the xml toplevel widgets to + @param node can be either a xml string, or a xml dom document or fragment +*/ +qx.Proto.build = function(parent, node) { + // support embedding of an XML string within a textarea + if (typeof node == "object" && node.nodeName == 'TEXTAREA') { + node = node.value; + } + + // parse strings in to XML DOM + if (typeof node == "string") { + var parser = new DOMParser(); + node = parser.parseFromString(node, "text/xml"); + // TODO handle parse errors + } + this._buildNodes(parent, node.childNodes); +} + +qx.Proto._buildNodes = function(parent, nodes) { + var x = 0; + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + // 1 = ELEMENT_NODE + if (n.nodeType == 1) { + this._buildWidgetFromNode(parent, n); + } + } +} + +qx.Proto._buildEventListener = function(widget, args, text) { + if (qx.util.Validation.isInvalidString(args.type)) { + throw this._newError('eventListener requires a string type attribute'); + } + + var self = this; + + // are we delegating ? + if (qx.util.Validation.isValidString(args.delegate)) { + + if (args.delegate.indexOf('.') > -1) { + // delegation to a global method + var p = args.delegate.split('.'); + var o = p[0]; + var m = p[1]; + widget.addEventListener(args.type, function(e) { + + if (!window[o]) { + throw self._newError('delegate not found', {delegate:args.delegate}); + } + + if (!window[o][m]) { + throw self._newError('delegate not found', {delegate:args.delegate}); + } + + window[o][m].apply(window[o], [e]); + }); + } + else { + + // delegation to a global method + widget.addEventListener(args.type, function(e) { + + if (!window[args.delegate]) { + throw self._newError('delegate not found', {delegate:args.delegate}); + } + + window[args.delegate].apply(null, [e]); + }); + } + } + else { + + // build a function object using text as the function body + // + // the args attribute indicates the name of the event argument + // if not provided - use 'event' as the name + if (!args.args) { + args.args = "event"; + } + + var f = new Function(args.args, text); + widget.addEventListener(args.type, f); + } +} + + +/* + a node builder that will be used if no node builder is declared for a nodeName +*/ +qx.Proto._buildWidgetFromNode = function(parent, node) { + + var className = this._extractClassName(node); + + if (!className) { + throw this._newError("unrecognised node", {nodeName:node.nodeName}); + } + + if (className == "qx.client.builder.Container") { + // generic container node to allow xml to contain multiple toplevel nodes + this._buildNodes(parent, node.childNodes); + return; + } + + if (className == "qx.client.builder.Script") { + var e = document.createElement("script"); + var attribs = this._mapXmlAttribToObject(node); + if (attribs.type) { + e.type = attribs.type; + } + else { + e.type='text/javascript'; + } + + // e.innerHTML = node.firstChild.nodeValue; + + // fix for Internet Explorer by Cristian Bica + if (qx.sys.Client.getInstance().isMshtml()) + { + e.innerHTML = eval(node.firstChild.nodeValue); + } + else + { + e.innerHTML = node.firstChild.nodeValue; + } + + document.body.appendChild(e); + return; + } + + if (className == "qx.client.builder.EventListener") { + var attribs = this._mapXmlAttribToObject(node); + var text; + if (node.firstChild) { + text = node.firstChild.nodeValue; + } + this._buildEventListener(parent, attribs, text); + return; + } + + + var classConstructor = qx.OO.classes[className]; + if (!classConstructor) { + throw this._newError("constructor not found", {className:className}); + } + + // construct the widget instance - using the default constructor + var widget = new classConstructor(); + var attribs = this._mapXmlAttribToObject(node, widget); + delete attribs['qxtype']; + + var dummyWidget = attribs.id && attribs.id.indexOf("_") == 0; + + if (attribs.id) { + // register a global refrence for this widget + window[attribs.id] = widget; + delete attribs.id; + } + + // convert any on?? attribs into event listeners + for (var a in attribs) { + + if (a.toLowerCase().indexOf('on') == 0 && a.length > 2) { + + // there may be issues here for XHTML based attributes - due to their case + var type = a.substring(2); + type = type.charAt(0) + type.substring(1); + + this._buildEventListener(widget, {type:type,args:'event'}, attribs[a]); + + delete attribs[a]; + } + } + + for (var n in attribs) { + this._setWidgetProperty(widget, n, attribs[n]); + } + + if(!dummyWidget) { + parent.add(widget); + } + + // recurse to all of the nodes children, using the newly created widget as the parent + this._buildNodes(widget, node.childNodes); +} + +/* +------------------------------------------------------------------------------------ + WIDGET PROPERTIES +------------------------------------------------------------------------------------ +*/ + + +/*! + Set a widget's property using a propertyEditor +*/ +qx.Proto._setWidgetProperty = function(widget, name, value) { + var editor = this._findPropertyEditor(widget.classname, name); + if (!editor) { + editor = this._coercePropertyEditor; + } + editor.set(widget, name, value); +} + +qx.Proto._findPropertyEditor = function(className, propertyName) { + // get all defined propertyEditors for this widget's prototype + var m = this._propertyEditors[className]; + // lookup the converter for this property name + if (m && m[propertyName]) { + return m[propertyName]; + } + + // try the widget's superclass + var w = qx.OO.classes[className]; + if (w && w.superclass && w.superclass.prototype.classname) { + return this._findPropertyEditor(w.superclass.prototype.classname, propertyName); + } + + return null; +} + +qx.Proto.registerPropertyEditor = function(className, propertyName, editor) { + if (!this._propertyEditors[className]) this._propertyEditors[className] = {}; + this._propertyEditors[className][propertyName] = editor; +} + +qx.Proto._registerDefaultPropertyEditors = function() { + var self = this; + + // a property editor that splits the values on a comma and coerces each one into a suitable type + var commaDelimitedPropertyEditor = {}; + commaDelimitedPropertyEditor.set = function(widget, name, value) { + if (value == null || value == "") { + self._setProperty(widget, name, null); + return; + } + + var s = value.split(","); + var v = []; + for (var i = 0; i < s.length; i++) { + v[i] = self._coerce(s[i]); + } + + self._setProperties(widget, name, v); + } + + var evalPropertyEditor = {}; + evalPropertyEditor.set = function(widget, name, value) { + if (value == null || value == "") { + self._setProperty(widget, name, null); + return; + } + + self._setProperty(widget, name, eval(value)); + } + + var referencePropertyEditor = {}; + referencePropertyEditor.set = function(widget, name, value) { + self._setProperty(widget, name, window[value]); + } + + this.registerPropertyEditor('qx.ui.core.Widget', 'location', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'dimension', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'space', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'edge', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'padding', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'margin', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'heights', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'widths', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'align', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'stretch', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'clipLocation', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'clipDimension', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'clip', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'backgroundColor', evalPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'color', evalPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'border', evalPropertyEditor); + + + this.registerPropertyEditor('qx.ui.menu.Button', 'menu', referencePropertyEditor); + this.registerPropertyEditor('qx.ui.form.RadioButton', 'manager', referencePropertyEditor); + this.registerPropertyEditor('qx.ui.menu.RadioButton', 'group', referencePropertyEditor); + + + // a property editor that just tries to coerce the string value into a suitable type + this._coercePropertyEditor = {}; + this._coercePropertyEditor.set = function(widget, name, value) { + self._setProperty(widget, name, self._coerce(value)); + } + +} + + +qx.Proto._coerce = function(value) { + + // don't really care if its null + if (value == null) return value; + + // is it alreay a javascript type + if (typeof value == 'object') return value; + if (typeof value == 'function') return value; + if (typeof value == 'number') return value; + if (typeof value == 'boolean') return value; + if (typeof value == 'date') return value; + if (typeof value == 'array') return value; + + // is it a number ? + var n = new Number(value); + if (!isNaN(n)) return n.valueOf(); + + // is it a boolean ? + if (value == "true") return true; + if (value == "false") return false; + + // is it a date ? + var d = Date.parse(value); + if (d != null && !isNaN(d)) return d; + + // leave it as a string + if (typeof value == 'string') { + // convert empty string into null + if (value == "") return null; + } + + return value; +} + +qx.Proto._setProperty = function(widget, name, value) { + this._setProperties(widget, name, [value]); +} + +qx.Proto._setProperties = function(widget, name, value) { + + // TODO : find a cheaper way to find the setter + // NOTE : the name is LOWERCASE - hence we iterate all properties of the widget + // to try and find a matching one + var n = "set" + name; + for (var a in widget) { + if (n == a.toLowerCase()) { + var setter = widget[a]; + break; + } + } + if (!setter && this._flags.strict) throw this._newError('no setter defined on widget instance', {widget:widget, property:name}); + setter.apply(widget, value); +} + + +/* +------------------------------------------------------------------------------------ + UTILS +------------------------------------------------------------------------------------ +*/ + +/* +2 format +1. +3.
+*/ +qx.Proto._extractClassName = function(node) { + if (node.nodeName.toLowerCase() == "div") { + if (!node.attributes['qxtype']) + return null; + return node.attributes['qxtype'].value; + } else { + return node.nodeName; + } +} + +qx.Proto._mapXmlAttribToObject = function(node) { + var r = {}; + var c = node.attributes; + for (var i=0; i= "A" && this._key <= "Z") || + (this._key >= "0" && this._key <= "9") + ) { + this.warn("A shortcut containing Alt and a letter or number will not work under OS X!"); + } + } + qx.event.handler.EventHandler.getInstance().addCommand(this); +}); + + +/** the command shortcut */ +qx.OO.addProperty({ name : "shortcut", type : "string" }); + +/** + * keyCode (Deprecated) + * Still there for compatibility with the old key handler/commands + */ +qx.OO.addProperty({ name : "keyCode", type : "number" }); + +/** KeyIdentifier */ +qx.OO.addProperty({ name : "keyIdentifier", type : "string" }); + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Fire the "execute" event on this command. + * + * @param vTarget (Object) + */ +qx.Proto.execute = function(vTarget) +{ + if (this.hasEventListeners("execute")) { + this.dispatchEvent(new qx.event.type.DataEvent("execute", vTarget), true); + } + + return false; +}; + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyShortcut = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._modifier = {}; + this._key = null; + + // split string to get each key which must be pressed + // build a hash with active keys + var a = propValue.split(/[-+\s]+/); + var al = a.length; + + for (var i=0; i + * Adds entries to the browser history and fires a "request" event when one of + * the entries was requested by the user (e.g. by clicking on the back button). + *

+ * + * @event request {qx.event.type.DataEvent} Fired when the user moved in the + * history. The data property of the event holds the command, which was + * passed to {@link #addToHistory}. + */ +qx.OO.defineClass("qx.client.History", qx.core.Target, +function() { + qx.core.Target.call(this); + + this._pageFlag = true; +}); + + +/** + * Initializes the History. This method has to called by applications using this + * class once during initialization. Subsequent calls have no (negative) effect. + */ +qx.Proto.init = function() { + if (this._iframe == null) { + this._iframe = document.createElement("iframe"); + this._iframe.style.visibility = "hidden"; + document.body.appendChild(this._iframe); + } +} + + +/** + * Adds an entry to the browser history. + * + * @param command {string} a string representing the old state of the + * application. This command will be delivered in the data property of + * the "request" event. + * @param newTitle {string ? null} the page title to set after the history entry + * is done. This title should represent the new state of the application. + */ +qx.Proto.addToHistory = function(command, newTitle) { + if (command == this._currentCommand) { + document.title = newTitle; + } else { + if (this._iframe == null) { + throw new Error("You have to call init first!"); + } + + this._pageFlag = !this._pageFlag; + this._currentCommand = command; + this._newTitle = newTitle; + + // NOTE: We need the command attribute to enforce a loading of the page + // (Otherwise we don't get an onload event). + // The browser will still cache commands loaded once. + // Without the onload-problem anchors would work, too. + // (Anchors would have the advantage that the helper is only loaded once) + this._iframe.src = this.getSetting("helperFile") + "?c=" + command; + } +} + + +/** + * Event handler. Called when the history helper page was loaded. + * + * @param location {Map} the location property of the window object of the + * helper page. + */ +qx.Proto._onHistoryLoad = function(location) +{ + try { + var equalsPos = location.search.indexOf("="); + var command = location.search.substring(equalsPos + 1); + + if (this._newTitle) { + document.title = this._newTitle; + this._newTitle = null; + } + + if (command != this._currentCommand) { + this._currentCommand = command; + + this.createDispatchDataEvent("request", command); + } + } catch (exc) { + this.error("Handling history load failed", exc); + } + + qx.ui.core.Widget.flushGlobalQueues(); +} + + +/** The URL to the helper page. */ +qx.Settings.setDefault("helperFile", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "staticUri") + "/history/historyHelper.html"); + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.util.Return.returnInstance; diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/NativeWindow.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/NativeWindow.js new file mode 100644 index 0000000000..69e9c2a87c --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/NativeWindow.js @@ -0,0 +1,639 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.dom.Window) + +************************************************************************ */ + +qx.OO.defineClass("qx.client.NativeWindow", qx.core.Target, +function(vUrl, vName) +{ + qx.core.Target.call(this); + + + // ************************************************************************ + // TIMER + // ************************************************************************ + + this._timer = new qx.client.Timer(100); + this._timer.addEventListener("interval", this._oninterval, this); + + + // ************************************************************************ + // INITIAL PROPERTIES + // ************************************************************************ + + if (qx.util.Validation.isValidString(vUrl)) { + this.setUrl(vUrl); + } + + if (qx.util.Validation.isValidString(vName)) { + this.setName(vName); + } +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + If the window is open or closed +*/ +qx.OO.addProperty({ name : "open", type : "boolean", defaultValue : false }); + +/*! + The outer width of the window. +*/ +qx.OO.addProperty({ name : "width", type : "number", defaultValue : 400, impl : "dimension" }); + +/*! + The outer height of the window. +*/ +qx.OO.addProperty({ name : "height", type : "number", defaultValue : 250, impl : "dimension" }); + +/*! + The left screen coordinate of the window. +*/ +qx.OO.addProperty({ name : "left", type : "number", defaultValue : 100, impl : "position" }); + +/*! + The top screen coordinate of the window. +*/ +qx.OO.addProperty({ name : "top", type : "number", defaultValue : 200, impl : "position" }); + +/*! + Should be window be modal +*/ +qx.OO.addProperty({ name : "modal", type : "boolean", defaultValue : false }); + +/*! + Should be window be dependent on this application window +*/ +qx.OO.addProperty({ name : "dependent", type : "boolean", defaultValue : true }); + +/*! + The url +*/ +qx.OO.addProperty({ name : "url", type : "string" }); + +/*! + The window name +*/ +qx.OO.addProperty({ name : "name", type : "string" }); + +/*! + The text of the statusbar +*/ +qx.OO.addProperty({ name : "status", type : "string", defaultValue : "Ready" }); + +/*! + Should the statusbar be shown +*/ +qx.OO.addProperty({ name : "showStatusbar", type : "boolean", defaultValue : false }); + +/*! + Should the menubar be shown +*/ +qx.OO.addProperty({ name : "showMenubar", type : "boolean", defaultValue : false }); + +/*! + Should the location(bar) be shown +*/ +qx.OO.addProperty({ name : "showLocation", type : "boolean", defaultValue : false }); + +/*! + Should the toolbar be shown +*/ +qx.OO.addProperty({ name : "showToolbar", type : "boolean", defaultValue : false }); + +/*! + If the window is resizeable +*/ +qx.OO.addProperty({ name : "resizeable", type : "boolean", defaultValue : true }); + +/*! + If the window is able to scroll and has visible scrollbars if needed +*/ +qx.OO.addProperty({ name : "allowScrollbars", type : "boolean", defaultValue : true }); + + + +/* +--------------------------------------------------------------------------- + STATE +--------------------------------------------------------------------------- +*/ + +qx.Proto._loaded = false; + + + + +/* +--------------------------------------------------------------------------- + PROPERTY GROUPS +--------------------------------------------------------------------------- +*/ + +qx.OO.addPropertyGroup({ name : "location", members : [ "left", "top" ]}); +qx.OO.addPropertyGroup({ name : "dimension", members : [ "width", "height" ]}); + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyPosition = function(propValue, propOldValue, propName) +{ + /* + http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx + Changes to Functionality in Microsoft Windows XP Service Pack 2 + Part 5: Enhanced Browsing Security + URLACTION_FEATURE_WINDOW_RESTRICTIONS + Allow script-initiated windows without size or position constraints + Code: 2102 + */ + + if (!this.isClosed()) + { + try + { + this._window.moveTo(this.getLeft(), this.getTop()); + } + catch(ex) + { + this.error("Cross-Domain Scripting problem: Could not move window!", ex); + } + } + + return true; +} + +qx.Proto._modifyDimension = function(propValue, propOldValue, propName) +{ + /* + http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx + Changes to Functionality in Microsoft Windows XP Service Pack 2 + Part 5: Enhanced Browsing Security + URLACTION_FEATURE_WINDOW_RESTRICTIONS + Allow script-initiated windows without size or position constraints + Code: 2102 + */ + + if (!this.isClosed()) + { + try + { + this._window.resizeTo(this.getWidth(), this.getHeight()); + } + catch(ex) + { + this.error("Cross-Domain Scripting problem: Could not resize window!", ex); + } + } + + return true; +} + +qx.Proto._modifyName = function(propValue, propOldValue, propName) +{ + if (!this.isClosed()) { + this._window.name = propValue; + } + + return true; +} + +qx.Proto._modifyUrl = function(propValue, propOldValue, propName) +{ + // String hack needed for old compressor (compile.py) + if(!this.isClosed()) { + this._window.location.replace(qx.util.Validation.isValidString(propValue) ? propValue : ("javascript:/" + "/")); + } + + return true; +} + +qx.Proto._modifyOpen = function(propValue, propOldValue, propData) +{ + propValue ? this._open() : this._close(); + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + NAME +--------------------------------------------------------------------------- +*/ + +qx.Proto.getName = function() +{ + if (!this.isClosed()) + { + try + { + var vName = this._window.name; + } + catch(ex) + { + return this._valueName; + } + + if (vName == this._valueName) + { + return vName; + } + else + { + throw new Error("window name and name property are not identical"); + } + } + else + { + return this._valueName; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto.isClosed = function() +{ + var vClosed = true; + + if (this._window) + { + try { + vClosed = this._window.closed; + } catch(ex) {} + } + + return vClosed; +} + +qx.Proto.open = function() { + this.setOpen(true); +} + +qx.Proto.close = function() { + this.setOpen(false); +} + +qx.Proto.isLoaded = function() { + return this._loaded; +} + + + + + + + +/* +--------------------------------------------------------------------------- + OPEN METHOD +--------------------------------------------------------------------------- +*/ + +qx.Proto._open = function() +{ + var vConf = []; + + + /* + ------------------------------------------------------------------------------ + PRE CONFIGURE WINDOW + ------------------------------------------------------------------------------ + */ + + if (qx.util.Validation.isValidNumber(this.getWidth())) + { + vConf.push("width"); + vConf.push("="); + vConf.push(this.getWidth()); + vConf.push(","); + } + + if (qx.util.Validation.isValidNumber(this.getHeight())) + { + vConf.push("height"); + vConf.push("="); + vConf.push(this.getHeight()); + vConf.push(","); + } + + if (qx.util.Validation.isValidNumber(this.getLeft())) + { + vConf.push("left"); + vConf.push("="); + vConf.push(this.getLeft()); + vConf.push(","); + } + + if (qx.util.Validation.isValidNumber(this.getTop())) + { + vConf.push("top"); + vConf.push("="); + vConf.push(this.getTop()); + vConf.push(","); + } + + + + vConf.push("dependent"); + vConf.push("="); + vConf.push(this.getDependent() ? "yes" : "no"); + vConf.push(","); + + vConf.push("resizable"); + vConf.push("="); + vConf.push(this.getResizeable() ? "yes" : "no"); + vConf.push(","); + + vConf.push("status"); + vConf.push("="); + vConf.push(this.getShowStatusbar() ? "yes" : "no"); + vConf.push(","); + + vConf.push("location"); + vConf.push("="); + vConf.push(this.getShowLocation() ? "yes" : "no"); + vConf.push(","); + + vConf.push("menubar"); + vConf.push("="); + vConf.push(this.getShowMenubar() ? "yes" : "no"); + vConf.push(","); + + vConf.push("toolbar"); + vConf.push("="); + vConf.push(this.getShowToolbar() ? "yes" : "no"); + vConf.push(","); + + vConf.push("scrollbars"); + vConf.push("="); + vConf.push(this.getAllowScrollbars() ? "yes" : "no"); + vConf.push(","); + + vConf.push("modal"); + vConf.push("="); + vConf.push(this.getModal() ? "yes" : "no"); + vConf.push(","); + + + + + + + /* + ------------------------------------------------------------------------------ + OPEN WINDOW + ------------------------------------------------------------------------------ + */ + + if (qx.util.Validation.isInvalidString(this.getName())) { + this.setName("qx_NativeWindow" + this.toHashCode()); + } + + this._window = window.open(this.getUrl(), this.getName(), vConf.join("")); + + if (this.isClosed()) + { + this.error("Window could not be opened. It seems, there is a popup blocker active!"); + } + else + { + // This try-catch is needed because of cross domain issues (access rights) + try + { + this._window._native = this; + this._window.onload = this._onload; + } + catch(ex) {} + + // start timer for close detection + this._timer.start(); + + // block original document + if (this.getModal()) { + qx.ui.core.ClientDocument.getInstance().block(this); + } + } +} + +qx.Proto._close = function() +{ + if (!this._window) { + return; + } + + // stop timer for close detection + this._timer.stop(); + + // release window again + if (this.getModal()){ + qx.ui.core.ClientDocument.getInstance().release(this); + } + + // finally close window + if (!this.isClosed()) { + this._window.close(); + } + + try + { + this._window._native = null; + this._window.onload = null; + } + catch(ex) {}; + + this._window = null; + this._loaded = false; + + this.createDispatchEvent("close"); +} + + + + + + +/* +--------------------------------------------------------------------------- + CENTER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.centerToScreen = function() { + return this._centerHelper((screen.width - this.getWidth()) / 2, (screen.height - this.getHeight()) / 2); +} + +qx.Proto.centerToScreenArea = function() { + return this._centerHelper((screen.availWidth - this.getWidth()) / 2, (screen.availHeight - this.getHeight()) / 2); +} + +qx.Proto.centerToOpener = function() { + return this._centerHelper(((qx.dom.Window.getInnerWidth(window) - this.getWidth()) / 2) + qx.dom.Location.getScreenBoxLeft(window.document.body), ((qx.dom.Window.getInnerHeight(window) - this.getHeight()) / 2) + qx.dom.Location.getScreenBoxTop(window.document.body)); +} + +qx.Proto._centerHelper = function(l, t) +{ + // set new values + this.setLeft(l); + this.setTop(t); + + // focus window if opened + if (!this.isClosed()) { + this.focus(); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + FOCUS HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.focus = function() +{ + if (!this.isClosed()) { + this._window.focus(); + } +} + +qx.Proto.blur = function() +{ + if (!this.isClosed()) { + this._window.blur(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._oninterval = function(e) +{ + if (this.isClosed()) { + this.setOpen(false); + } + else if (!this._loaded) + { + // This try-catch is needed because of cross domain issues (access rights) + try + { + if (this._window.document && this._window.document.readyState == "complete") + { + this._loaded = true; + this.createDispatchEvent("load"); + } + } + catch(ex) {}; + } +} + +qx.Proto._onload = function(e) +{ + var obj = this._native; + + if (!obj._loaded) + { + obj._loaded = true; + obj.createDispatchEvent("load"); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this.getDependent()) { + this.close(); + } + + if (this._timer) + { + this._timer.stop(); + this._timer = null; + } + + if (this._window) + { + try + { + this._window._native = null; + this._window.onload = null; + } + catch(ex) {}; + + this._window = null; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Timer.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Timer.js new file mode 100644 index 0000000000..674bbdb154 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/client/Timer.js @@ -0,0 +1,183 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Global timer support. Simplifies javascript intervals for objects. + * + * @event interval {qx.event.type.Event} + */ +qx.OO.defineClass("qx.client.Timer", qx.core.Target, +function(vInterval) +{ + qx.core.Target.call(this); + + this.setEnabled(false); + + if (qx.util.Validation.isValidNumber(vInterval)) { + this.setInterval(vInterval); + } + + // Object wrapper to timer event + var o = this; + this.__oninterval = function() { o._oninterval(); } +}); + +qx.OO.addProperty({ name : "interval", type : "number", defaultValue : 1000 }); + +qx.Proto._intervalHandle = null; + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + window.clearInterval(this._intervalHandle); + this._intervalHandle = null; + } + else if (propValue) + { + this._intervalHandle = window.setInterval(this.__oninterval, this.getInterval()); + } + + return true; +} + + + + +/* +--------------------------------------------------------------------------- + USER-ACCESS +--------------------------------------------------------------------------- +*/ + +qx.Proto.start = function() { + this.setEnabled(true); +} + +qx.Proto.startWith = function(vInterval) +{ + this.setInterval(vInterval); + this.start(); +} + +qx.Proto.stop = function() { + this.setEnabled(false); +} + +qx.Proto.restart = function() +{ + this.stop(); + this.start(); +} + +qx.Proto.restartWith = function(vInterval) +{ + this.stop(); + this.startWith(vInterval); +} + + + + +/* +--------------------------------------------------------------------------- + EVENT-MAPPER +--------------------------------------------------------------------------- +*/ + +qx.Proto._oninterval = function() +{ + if (this.getEnabled()) { + this.createDispatchEvent("interval"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + // Stop interval + this.stop(); + + // Clear handle + if (this._intervalHandler) + { + window.clearInterval(this._intervalHandle); + this._intervalHandler = null; + } + + // Clear object wrapper function + this.__oninterval = null; + + // Call qx.core.Target to do the other dispose work + return qx.core.Target.prototype.dispose.call(this); +} + + + + + +/* +--------------------------------------------------------------------------- + HELPER +--------------------------------------------------------------------------- +*/ + +qx.client.Timer.once = function(vFunction, vObject, vTimeout) +{ + // Create time instance + var vTimer = new qx.client.Timer(vTimeout); + + // Add event listener to interval + vTimer.addEventListener("interval", function(e) + { + vFunction.call(vObject, e); + vTimer.dispose(); + + vObject = null; + }, vObject); + + // Directly start timer + vTimer.start(); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js new file mode 100644 index 0000000000..50c96e1654 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js @@ -0,0 +1,28 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.AbstractApplication", qx.component.AbstractComponent, +function() { + qx.component.AbstractComponent.call(this); +}); diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js new file mode 100644 index 0000000000..b48eb3acb3 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js @@ -0,0 +1,66 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.AbstractComponent", qx.core.Target, +function() +{ + qx.core.Target.call(this); + +}); + + +/*! + Run initialisation part of component creation. +*/ +qx.Proto.initialize = function() {}; + +/*! + Run main part of component creation. +*/ +qx.Proto.main = function() {}; + +/*! + Run finalization part of component creation. +*/ +qx.Proto.finalize = function() {}; + +/*! + Terminate this component. +*/ +qx.Proto.close = function() {}; + +/*! + Terminate this component. +*/ +qx.Proto.terminate = function() {}; + + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/DummyApplication.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/DummyApplication.js new file mode 100644 index 0000000000..dfdcb3f0d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/DummyApplication.js @@ -0,0 +1,41 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.DummyApplication", qx.component.AbstractApplication, +function() { + qx.component.AbstractApplication.call(this); +}); + + + +/* +--------------------------------------------------------------------------- + DIRECT SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.util.Return.returnInstance; diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js new file mode 100644 index 0000000000..917315be34 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js @@ -0,0 +1,65 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.init.AbstractInitComponent", qx.component.AbstractComponent, +function() { + qx.component.AbstractComponent.call(this); +}); + + + +/*! + Run initialisation part of component creation. +*/ +qx.Proto.initialize = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().initialize(e); +} + +/*! + Run main part of component creation. +*/ +qx.Proto.main = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().main(e); +} + +/*! + Run finalization part of component creation. +*/ +qx.Proto.finalize = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().finalize(e); +} + +/*! + Terminate this component. +*/ +qx.Proto.close = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().close(e); +} + +/*! + Terminate this component. +*/ +qx.Proto.terminate = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().terminate(e); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js new file mode 100644 index 0000000000..4138cede33 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js @@ -0,0 +1,53 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.init.BasicInitComponent", qx.component.init.AbstractInitComponent, +function() { + qx.component.init.AbstractInitComponent.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onload = function(e) +{ + this.initialize(e); + this.main(e); + this.finalize(e); +} + +qx.Proto._onbeforeunload = function(e) { + this.close(e); +} + +qx.Proto._onunload = function(e) { + this.terminate(e); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js new file mode 100644 index 0000000000..5e7b818a40 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js @@ -0,0 +1,181 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.init.InterfaceInitComponent", qx.component.init.BasicInitComponent, +function() { + qx.component.init.BasicInitComponent.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + READY STATE +--------------------------------------------------------------------------- +*/ + +qx.Proto._uiReady = false; + +qx.Proto.isUiReady = function() { + return this._uiReady; +} + + + + + + +/* +--------------------------------------------------------------------------- + STATE MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto.initialize = function() +{ + // Force creation of event handler + qx.event.handler.EventHandler.getInstance(); + + // Force creation of client document + qx.ui.core.ClientDocument.getInstance(); + + // Start real initialisation + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.initialize.call(this); + this.info("initialize runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + +qx.Proto.main = function() +{ + // Start real main process + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.main.call(this); + this.info("main runtime: " + ((new Date).valueOf() - start) + "ms"); + + this.debug("preloading visible images..."); + new qx.io.image.PreloaderSystem(qx.manager.object.ImageManager.getInstance().getPreloadImageList(), this.finalize, this); +}; + + +qx.Proto.finalize = function() +{ + var start = (new Date).valueOf(); + + this._printPreloadComplete(); + this._uiReady = true; + + // Show initial widgets + qx.ui.core.Widget.flushGlobalQueues(); + + // Finally attach event to make the GUI ready for the user + qx.event.handler.EventHandler.getInstance().attachEvents(); + + qx.component.init.BasicInitComponent.prototype.finalize.call(this); + + this.info("finalize runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + +qx.Proto.close = function() +{ + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.close.call(this); + + this.info("close runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + +qx.Proto.terminate = function() +{ + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.terminate.call(this); + + this.info("terminate runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + + + + + +/* +--------------------------------------------------------------------------- + PRELOAD UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.preload = function() +{ + if (!this._preloadDone) + { + this.debug("preloading hidden images..."); + new qx.io.image.PreloaderSystem(qx.manager.object.ImageManager.getInstance().getPostPreloadImageList(), this._printPreloadComplete, this); + this._preloadDone = true; + } +} + +qx.Proto._printPreloadComplete = function() { + this.debug("preloading complete"); +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onload = function(e) +{ + this.initialize(); + this.main(); + + // Note: finalize will be called through image preloader +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._preloadDone = null; + this._uiReady = null; + + return qx.component.init.BasicInitComponent.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Init.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Init.js new file mode 100644 index 0000000000..aae3ea1ac8 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Init.js @@ -0,0 +1,327 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#require(qx.dom.EventRegistration) +#optional(qx.component.init.InterfaceInitComponent) + +************************************************************************ */ + +/** + * Initialize qooxdoo. + * + * Attaches qooxdoo callbacks to the load events (onload, onunload, onbeforeunload) + * and initializes the qooxdoo application. The initializations starts automatically. + * + * Make shure you set the application to your application before the load event is fired: + *
qx.core.Init.getInstance().setApplication(YourApplication)
+ */ +qx.OO.defineClass("qx.core.Init", qx.core.Target, +function() +{ + qx.core.Target.call(this, false); + + // Object Wrapper to Events (Needed for DOM-Events) + var o = this; + + /** + * private + * @param e {Object} + */ + this.__onload = function(e) { return o._onload(e); } + /** + * private + * @param e {Object} + */ + this.__onbeforeunload = function(e) { return o._onbeforeunload(e); } + /** + * private + * @param e {Object} + */ + this.__onunload = function(e) { return o._onunload(e); } + + // Attach events + qx.dom.EventRegistration.addEventListener(window, "load", this.__onload); + qx.dom.EventRegistration.addEventListener(window, "beforeunload", this.__onbeforeunload); + qx.dom.EventRegistration.addEventListener(window, "unload", this.__onunload); +}); + + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("component", "qx.component.init.InterfaceInitComponent"); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * Instance of the component initializer. + */ +qx.OO.addProperty({ name : "component", type : "object", instance : "qx.component.init.BasicInitComponent" }); + +/** + * Reference to the constructor of the main application. + * + * Set this before the onload event is fired. + */ +qx.OO.addProperty({ name : "application", type : "function" }); + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyApplication = function(propValue, propOldValue, propData) +{ + if (propValue) { + this._applicationInstance = new propValue; + } + + return true; +}; + + + + + + +/* +--------------------------------------------------------------------------- + INTERNAL PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * Rreturns an instance of the current qooxdoo Application + * + * @return {qx.component.AbstractApplication} instance of the current qooxdoo application + */ +qx.Proto.getApplicationInstance = function() +{ + if (!this.getApplication()) { + this.setApplication(qx.component.DummyApplication); + } + + return this._applicationInstance; +}; + + + + + + +/* +--------------------------------------------------------------------------- + COMPONENT BINDING +--------------------------------------------------------------------------- +*/ + +/** + * define the initialisation function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineInitialize = function(vFunc) { + this.getApplicationInstance().initialize = vFunc; +} + +/** + * define the main function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineMain = function(vFunc) { + this.getApplicationInstance().main = vFunc; +} + +/** + * define the finalize function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineFinalize = function(vFunc) { + this.getApplicationInstance().finalize = vFunc; +} + +/** + * define the close function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineClose = function(vFunc) { + this.getApplicationInstance().close = vFunc; +} + +/** + * define the terminate function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineTerminate = function(vFunc) { + this.getApplicationInstance().terminate = vFunc; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +/** + * load event handler + * + * @param e {Object} + */ +qx.Proto._onload = function(e) +{ + this.debug("qooxdoo " + qx.core.Version.toString()); + + // Print out class information + this.debug("loaded " + qx.lang.Object.getLength(qx.OO.classes) + " classes"); + + // Print browser information + var cl = qx.sys.Client.getInstance(); + this.debug("client: " + cl.getEngine() + "-" + cl.getMajor() + "." + + cl.getMinor() + "/" + cl.getPlatform() + "/" + cl.getLocale()); + + if (cl.isMshtml() && !cl.isInQuirksMode()) { + this.warn("Wrong box sizing: Please modify the document's DOCTYPE!"); + } + + // Init component from settings + this.setComponent(new qx.OO.classes[this.getSetting("component")](this)); + + // Send onload + return this.getComponent()._onload(e); +} + + +/** + * beforeunload event handler + * + * @param e {Object} + */ +qx.Proto._onbeforeunload = function(e) +{ + // Send onbeforeunload event (can be cancelled) + return this.getComponent()._onbeforeunload(e); +} + + +/** + * unload event handler + * + * @param e {Object} + */ +qx.Proto._onunload = function(e) +{ + // Send onunload event (last event) + this.getComponent()._onunload(e); + + // Dispose all qooxdoo objects + qx.core.Object.dispose(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Destructor + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Detach Events + qx.dom.EventRegistration.removeEventListener(window, "load", this.__onload); + qx.dom.EventRegistration.removeEventListener(window, "beforeunload", this.__onbeforeunload); + qx.dom.EventRegistration.removeEventListener(window, "unload", this.__onunload); + + // Reset inline functions + this.__onload = this.__onbeforeunload = this.__onunload = null; + + if (this._applicationInstance) { + this._applicationInstance.dispose(); + this._applicationInstance = null; + } + + qx.core.Target.prototype.dispose.call(this); +} + + + + +/* +--------------------------------------------------------------------------- + DIRECT SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.util.Return.returnInstance; + +// Force direct creation +qx.Class.getInstance(); diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Object.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Object.js new file mode 100644 index 0000000000..26453f82a2 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/core/Object.js @@ -0,0 +1,525 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#load(qx.core.Init) + +************************************************************************ */ + +/** + * The qooxdoo base object. All qooxdoo classes extend this one + * + * This class contains functions for: + *
    + *
  • logging
  • + *
  • common getter/setter
  • + *
  • user data
  • + *
  • object destruction
  • + *
+ * + * @param vAutoDispose {boolean ? true} wether the object should be disposed automatically by qooxdoo + */ +qx.OO.defineClass("qx.core.Object", Object, +function(vAutoDispose) +{ + this._hashCode = qx.core.Object._counter++; + + if (vAutoDispose !== false) { + qx.core.Object._db.push(this); + } +}); + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("enableDisposerDebug", false); + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +qx.Class._counter = 0; +qx.Class._db = []; + +/** + * Generate an unique key for the given object and return it. + * Sets object._hashCode to the generated key. + * + * @param o {Object} + * @return {int} unique key for the given object + */ +qx.Class.toHashCode = function(o) +{ + if(o._hashCode != null) { + return o._hashCode; + } + + return o._hashCode = qx.core.Object._counter++; +} + + +/** + * Class function which returns an object given its hash code + * + * @param hash {string} hash code of an object + * + * @returns {Object} the object whose hash is specified + */ +qx.Class.fromHashCode = function(hash) { + return qx.core.Object._db[hash]; +} + + +/** + * Destructor. This method is called by qooxdoo on object destruction. + * + * Any class that holds ressources like links to DOM nodes must overwrite + * this method and free theese ressources. + */ +qx.Class.dispose = function() +{ + // var logger = qx.dev.log.Logger.getClassLogger(qx.core.Object); + // logger.debug("Disposing Application"); + + // var vStart = (new Date).valueOf(); + var vObject; + + for (var i=qx.core.Object._db.length-1; i>=0; i--) + { + vObject = qx.core.Object._db[i]; + + if (vObject && vObject._disposed === false) + { + // logger.debug("Disposing: " + vObject); + vObject.dispose(); + } + } + + // logger.debug("Done in: " + ((new Date).valueOf() - vStart) + "ms"); +} + + +/** + * Summary of allocated objects + * + * @return {string} summary of allocated objects. + */ +qx.Class.summary = function() +{ + var vData = {}; + var vCounter = 0; + + for (var i=qx.core.Object._db.length-1; i>=0; i--) + { + vObject = qx.core.Object._db[i]; + + if (vObject && vObject._disposed === false) + { + if (vData[vObject.classname] == null) + { + vData[vObject.classname] = 1; + } + else + { + vData[vObject.classname]++; + } + + vCounter++; + } + } + + var vArrData = []; + + for (var vClassName in vData) { + vArrData.push({ classname : vClassName, number : vData[vClassName] }); + } + + vArrData.sort(function(a, b) { + return b.number - a.number; + }); + + var vMsg = "Summary: (" + vCounter + " Objects)\n\n"; + + for (var i=0; i"); + + var ext = this.extract(object); + + for (var i=0; i"); + + return all.join(""); +} + +qx.Class.getTextList = function(object) +{ + var all = []; + + var cellSplit = ": "; + var rowEnd = "\n"; + + var ext = this.extract(object); + + for (var i=0; iMeasured Values"); + + vHtmlMeasured.push(""); + + vHtmlMeasured.push(""); + + vHtmlMeasured.push(""); + + vHtmlMeasured.push(""); + + for (var j=0; jMethod " + (j+1) + ""); + } + + vHtmlMeasured.push(""); + + for (var i=0; i"); + + for (var j=0; j" + vLocalTimes[j] + ""); + } + + vHtmlMeasured.push(""); + vAllTimes.push(vLocalTimes); + } + + vHtmlMeasured.push("
 
Round " + i + "
"); + + + + + + var vSum, vMeanValue, vMeanAll=[], vMeanMin=1e7, vMeanMax=0; + + for (var j=0; jResults Summary"); + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + for (var j=0; jMethod " + (j+1) + ""); + } + + vHtmlResults.push(""); + + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + for (var j=0; j" + vMedianAll[j] + ""); + } + + vHtmlResults.push(""); + + + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + for (var j=0; j"); + vHtmlResults.push(vMedianMin > 0 ? Math.round(vMedianAll[j] / vMedianMin) : "1"); + vHtmlResults.push("x"); + } + + vHtmlResults.push(""); + + + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + for (var j=0; j" + vMeanAll[j] + ""); + } + + vHtmlResults.push(""); + + + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + for (var j=0; j"); + vHtmlResults.push(vMeanMin > 0 ? Math.round(vMeanAll[j] / vMeanMin) : 1); + vHtmlResults.push("x"); + } + + vHtmlResults.push(""); + + + + vHtmlResults.push(""); + + vHtmlResults.push(""); + + for (var j=0; j"); + + if (vMedianMin == vMedianAll[j] && vMeanMin == vMeanAll[j]) + { + vHtmlResults.push("BOTH"); + } + + else if (vMedianMin == vMedianAll[j]) + { + vHtmlResults.push("MEDIAN"); + } + + else if (vMeanMin == vMeanAll[j]) + { + vHtmlResults.push("MEAN"); + } + + vHtmlResults.push(""); + } + + vHtmlResults.push(""); + + vHtmlResults.push("
 
Median
Median Factor
Mean
Mean Factor
Winner
"); + + this._output.setHtml(vHtmlResults.join("") + vHtmlMeasured.join("")); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._functions = null; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/AlertAppender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/AlertAppender.js new file mode 100644 index 0000000000..d800ac13ae --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/AlertAppender.js @@ -0,0 +1,65 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Andreas Ecker (ecker) + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that writes each message to a native alert(). + *

+ * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + *

+ * It allows to go through the log messages step-by-step, since the alert + * window temporarily halts the regular program execution. That way even + * the dispose process can easily be debugged. + */ +qx.OO.defineClass("qx.dev.log.AlertAppender", qx.dev.log.Appender, +function() { + qx.dev.log.Appender.call(this); +}); + + +// overridden +qx.OO.changeProperty({ name:"useLongFormat", type:"boolean", defaultValue:false, allowNull:false }); + +// overridden +qx.Proto.appendLogEvent = function(evt) { + + // Append the message + var text = evt.logger.getName(); + if (evt.instanceId != null) { + text += " (" + evt.instanceId + ")"; + } + + alert("\n" + text + "\n" + this.formatLogEvent(evt)); +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.dev.log.Appender.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Appender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Appender.js new file mode 100644 index 0000000000..b1645a87fd --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Appender.js @@ -0,0 +1,181 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * An appender. Does the actual logging. + */ +qx.OO.defineClass("qx.dev.log.Appender", qx.dev.log.LogEventProcessor, +function() { + qx.dev.log.LogEventProcessor.call(this); +}); + + +/** Whether the logger name and log level should be included in the formatted log message. */ +qx.OO.addProperty({ name:"useLongFormat", type:"boolean", defaultValue:true, allowNull:false }); + + +// overridden +qx.Proto.handleLogEvent = function(evt) { + if (this.decideLogEvent(evt) != qx.dev.log.Filter.DENY) { + this.appendLogEvent(evt); + } +} + + +/** + * Appends a log event to the log. + * + * @param evt {Map} The event to append. + */ +qx.Proto.appendLogEvent = function(evt) { + throw new Error("appendLogEvent is abstract"); +} + + +/** + * Formats a log event. + * + * @param evt {Map} The log event to format. + * @return {string} The formatted event. + */ +qx.Proto.formatLogEvent = function(evt) { + var Logger = qx.dev.log.Logger; + + var text = ""; + + // Append the time stamp + var time = new String(new Date().getTime() - qx._LOADSTART); + while (time.length < 6) { + time = "0" + time; + } + text += time; + + // Append the level + if (this.getUseLongFormat()) { + switch (evt.level) { + case Logger.LEVEL_DEBUG: text += " DEBUG: "; break; + case Logger.LEVEL_INFO: text += " INFO: "; break; + case Logger.LEVEL_WARN: text += " WARN: "; break; + case Logger.LEVEL_ERROR: text += " ERROR: "; break; + case Logger.LEVEL_FATAL: text += " FATAL: "; break; + } + } else { + text += ": "; + } + + // Append the indent + var indent = ""; + for (var i = 0; i < evt.indent; i++) { + indent += " "; + } + text += indent; + + // Append the logger name and instance + if (this.getUseLongFormat()) { + text += evt.logger.getName(); + if (evt.instanceId != null) { + text += "[" + evt.instanceId + "]"; + } + text += ": "; + } + + // Append the message + if (typeof evt.message == "string") { + text += evt.message; + } else { + // The message is an object -> Log a dump of the object + var obj = evt.message; + if (obj == null) { + text += "Object is null"; + } else { + text += "--- Object: " + obj + " ---\n"; + var attrArr = new Array(); + try { + for (var attr in obj) { + attrArr.push(attr); + } + } catch (exc) { + text += indent + " [not readable: " + exc + "]\n"; + } + attrArr.sort(); + for (var i = 0; i < attrArr.length; i++) { + try { + text += indent + " " + attrArr[i] + "=" + obj[attrArr[i]] + "\n"; + } + catch (exc) { + text += indent + " " + attrArr[i] + "=[not readable: " + exc + "]\n"; + } + } + text += indent + "--- End of object ---"; + } + } + + // Append the throwable + if (evt.throwable != null) { + var thr = evt.throwable; + + if (thr.name == null) { + text += ": " + thr; + } else { + text += ": " + thr.name; + } + if (thr.message != null) { + text += " - " + thr.message; + } + if (thr.number != null) { + text += " (#" + thr.number + ")"; + } + + if (thr.stack != null) { + text += "\n" + this._beautyStackTrace(thr.stack); + } + } + + return text; +} + + +/** + * Beautifies a stack trace. + * + * @param stack {string} the stack trace to beautify. + * @return {string} the beautified stack trace. + */ +qx.Proto._beautyStackTrace = function(stack) { + // e.g. "()@http://localhost:8080/webcomponent-test-SNAPSHOT/webcomponent/js/com/ptvag/webcomponent/common/log/Logger:253" + var lineRe = /@(.+):(\d+)$/gm; + var hit; + var out = ""; + var scriptDir = "/script/"; + while ((hit = lineRe.exec(stack)) != null) { + var url = hit[1]; + + var jsPos = url.indexOf(scriptDir); + var className = (jsPos == -1) ? url : url.substring(jsPos + scriptDir.length).replace(/\//g, "."); + + var lineNumber = hit[2]; + out += " at " + className + ":" + lineNumber + "\n"; + } + return out; +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DefaultFilter.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DefaultFilter.js new file mode 100644 index 0000000000..411a631ecd --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DefaultFilter.js @@ -0,0 +1,57 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * The default filter. Has a minimum level and can be enabled or disabled. + */ +qx.OO.defineClass("qx.dev.log.DefaultFilter", qx.dev.log.Filter, +function() { + qx.dev.log.Filter.call(this); +}); + + +/** + * Whether the filter should be enabled. If set to false all log events + * will be denied. + */ +qx.OO.addProperty({ name:"enabled", type:"boolean", defaultValue:true, allowNull:false, getAlias:"isEnabled" }); + +/** + * The minimum log level. If set only log messages with a level greater or equal + * to the set level will be accepted. + */ +qx.OO.addProperty({ name:"minLevel", type:"number", defaultValue:null }); + + +// overridden +qx.Proto.decide = function(evt) { + var Filter = qx.dev.log.Filter; + if (! this.isEnabled()) { + return Filter.DENY; + } else if (this.getMinLevel() == null) { + return Filter.NEUTRAL; + } else { + return (evt.level >= this.getMinLevel()) ? Filter.ACCEPT : Filter.DENY; + } +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DivAppender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DivAppender.js new file mode 100644 index 0000000000..1f7376fa64 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/DivAppender.js @@ -0,0 +1,164 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to a div element. + * + * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + * + * @param divId {string ? "qx_log"} the ID of the div element to write the + * messages to. + */ +qx.OO.defineClass("qx.dev.log.DivAppender", qx.dev.log.Appender, +function(divId) { + qx.dev.log.Appender.call(this); + + this._divId = divId ? divId : "qx_log"; +}); + + +/** + * The maximum number of messages to show. If null the number of messages is not + * limited. + */ +qx.OO.addProperty({ name:"maxMessages", type:"number", defaultValue:500 }); + +// overridden +qx.OO.changeProperty({ name:"useLongFormat", type:"boolean", defaultValue:false, allowNull:false }); + +/** The CSS class name for the head div {containing the clear button}. */ +qx.OO.addProperty({ name:"headClassName", type:"string", defaultValue:"log-head" }); + +/** The CSS class name for the body div {containing the log messages}. */ +qx.OO.addProperty({ name:"bodyClassName", type:"string", defaultValue:"log-body" }); + +/** The CSS class name for a div showing the name of the current group. */ +qx.OO.addProperty({ name:"groupClassName", type:"string", defaultValue:"log-group" }); + +/** The CSS class name for a div showing a debug message. */ +qx.OO.addProperty({ name:"debugClassName", type:"string", defaultValue:"log-debug" }); + +/** The CSS class name for a div showing a info message. */ +qx.OO.addProperty({ name:"infoClassName", type:"string", defaultValue:"log-info" }); + +/** The CSS class name for a div showing a warn message. */ +qx.OO.addProperty({ name:"warnClassName", type:"string", defaultValue:"log-warn" }); + +/** The CSS class name for a div showing a error message. */ +qx.OO.addProperty({ name:"errorClassName", type:"string", defaultValue:"log-error" }); + + +/** + * Creates an onclick handler that clears a div element. This method is used to + * create a minimum closure. + * + * @param logElem {Element} the element to clear when the handler is called. + * @return {Function} the handler. + */ +qx.Proto._createClearButtonHandler = function(logElem) { + return function(evt) { + logElem.innerHTML = ""; + } +} + + +// overridden +qx.Proto.appendLogEvent = function(evt) { + var Logger = qx.dev.log.Logger; + + // Initialize the log element if nessesary + if (this._logElem == null) { + var divElem = document.getElementById(this._divId); + if (divElem == null) { + throw new Error("Logging div with ID " + this._divId + " not found"); + } + divElem.innerHTML = '

' + + '
'; + + this._clearBt = divElem.firstChild.firstChild; + this._logElem = divElem.lastChild; + + this._clearBt.onclick = this._createClearButtonHandler(this._logElem); + } + + // Append the group when needed + var group = evt.logger.getName(); + if (evt.instanceId != null) { + group += "[" + evt.instanceId + "]"; + } + + if (group != this._lastGroup) { + var elem = document.createElement("div"); + elem.className = this.getGroupClassName(); + elem.innerHTML = group; + + this._logElem.appendChild(elem); + this._lastGroup = group; + } + + // Append the message + var elem = document.createElement("div"); + switch (evt.level) { + case Logger.LEVEL_DEBUG: elem.className = this.getDebugClassName(); break; + case Logger.LEVEL_INFO: elem.className = this.getInfoClassName(); break; + case Logger.LEVEL_WARN: elem.className = this.getWarnClassName(); break; + case Logger.LEVEL_ERROR: elem.className = this.getErrorClassName(); break; + } + elem.innerHTML = this.formatLogEvent(evt).replace(/&/g, "&") + .replace(/"); + this._logElem.appendChild(elem); + + // Remove superflous messages + while (this._logElem.childNodes.length > this.getMaxMessages()) { + this._logElem.removeChild(this._logElem.firstChild); + + if (this._removedMessageCount == null) { + this._removedMessageCount = 1; + } else { + this._removedMessageCount++; + } + } + + if (this._removedMessageCount != null) { + this._logElem.firstChild.className = ""; + this._logElem.firstChild.innerHTML = "(" + this._removedMessageCount + + " messages removed)"; + } +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + if (this._clearBt) { + this._clearBt.onclick = null; + this._clearBt = null; + } + this._logElem = null; + + return qx.dev.log.Appender.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Filter.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Filter.js new file mode 100644 index 0000000000..60cee7ad6e --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Filter.js @@ -0,0 +1,51 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * A filter for log events. + */ +qx.OO.defineClass("qx.dev.log.Filter", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + +/** + * Decidies whether a log event is accepted. + * + * @param evt {Map} The event to check. + * @return {int} {@link #ACCEPT}, {@link #DENY} or {@link #NEUTRAL}. + */ +qx.Proto.decide = function(evt) { + throw new Error("decide is abstract"); +} + + +/** {int} Specifies that the log event is accepted. */ +qx.Class.ACCEPT = 1; + +/** {int} Specifies that the log event is denied. */ +qx.Class.DENY = 2; + +/** {int} Specifies that the filter is neutral to the log event. */ +qx.Class.NEUTRAL = 3; diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/FireBugAppender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/FireBugAppender.js new file mode 100644 index 0000000000..34d66234c2 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/FireBugAppender.js @@ -0,0 +1,72 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by David Perez + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * David Perez (david-perez) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to FireBug, a nice extension for debugging and developing under Firefox. + *

+ * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + *

+ */ +qx.OO.defineClass('qx.dev.log.FireBugAppender', qx.dev.log.Appender, function() { + qx.dev.log.Appender.call(this); +}); + +qx.Proto.appendLogEvent = function(evt) +{ + if (typeof console != 'undefined') + { + var log = qx.dev.log.Logger; + var msg = this.formatLogEvent(evt); + + switch (evt.level) + { + case log.LEVEL_DEBUG: + if (console.debug) { + console.debug(msg); + } + break; + case log.LEVEL_INFO: + if (console.info) { + console.info(msg); + } + break; + case log.LEVEL_WARN: + if (console.warn) { + console.warn(msg); + } + break; + default: + if (console.error) { + console.error(msg); + } + break; + } + // Force a stack dump, for helping locating the error + if (evt.level > log.LEVEL_WARN && (!evt.throwable || !evt.throwable.stack) && console.trace) + { + console.trace(); + } + } +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/ForwardAppender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/ForwardAppender.js new file mode 100644 index 0000000000..5268f87989 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/ForwardAppender.js @@ -0,0 +1,41 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that forwards all log events to a log event processor. + * + * @param targetProcessor {LogEventProcessor} The log event processor Where to + * pass the log events. + */ +qx.OO.defineClass("qx.dev.log.ForwardAppender", qx.dev.log.Appender, +function(targetProcessor) { + qx.dev.log.Appender.call(this); + + this._targetProcessor = targetProcessor; +}); + + +// overridden +qx.Proto.appendLogEvent = function(evt) { + this._targetProcessor.handleLogEvent(evt); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/LogEventProcessor.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/LogEventProcessor.js new file mode 100644 index 0000000000..c6c4a8ed33 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/LogEventProcessor.js @@ -0,0 +1,141 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Processes log events. May be configured with filters in order to specify + * which log events should be processed. + */ +qx.OO.defineClass("qx.dev.log.LogEventProcessor", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * Appends a filter to the filter chain. + * + * @param filter {Filter} The filter to append. + */ +qx.Proto.addFilter = function(filter) { + if (this._filterArr == null) { + this._filterArr = [] + } + this._filterArr.push(filter); +} + + +/** + * Clears the filter chain. + */ +qx.Proto.clearFilters = function() { + this._filterArr = null; +} + + +/** + * Returns the head filter from the chain. Returns null if there are no filters. + * + * @return {Filter} the head filter from the chain. + */ +qx.Proto.getHeadFilter = function() { + return (this._filterArr == null || this._filterArr.length == 0) ? null : this._filterArr[0]; +} + + +/** + * Returns the default filter from the chain. If the head filter is no default + * filter, the chain will be cleared and a default filter will be created. + * + * @return {Filter} the default filter. + */ +qx.Proto._getDefaultFilter = function() { + var headFilter = this.getHeadFilter(); + if (! (headFilter instanceof qx.dev.log.DefaultFilter)) { + // The head filter of the appender is no DefaultFilter + // (or the appender has no filters at all) + // -> Create a default handler and append it + this.clearFilters(); + headFilter = new qx.dev.log.DefaultFilter(); + this.addFilter(headFilter); + } + + return headFilter; +} + + +/** + * Sets whether event processing should be enabled. + *

+ * Note: This will clear all custom filters. + * + * @param enabled {boolean} whether event processing should be enabled. + */ +qx.Proto.setEnabled = function(enabled) { + this._getDefaultFilter().setEnabled(enabled); +} + + +/** + * Sets the min level an event must have in order to be processed. + *

+ * Note: This will clear all custom filters. + * + * @param minLevel {int} the new min level. + */ +qx.Proto.setMinLevel = function(minLevel) { + this._getDefaultFilter().setMinLevel(minLevel); +} + + +/** + * Decides whether a log event is processed. + * + * @param evt {Map} the event to check. + * @return {int} {@link Filter#ACCEPT}, {@link Filter#DENY} or + * {@link Filter#NEUTRAL}. + */ +qx.Proto.decideLogEvent = function(evt) { + var NEUTRAL = qx.dev.log.Filter.NEUTRAL; + + if (this._filterArr != null) { + for (var i = 0; i < this._filterArr.length; i++) { + var decision = this._filterArr[i].decide(evt); + if (decision != NEUTRAL) { + return decision; + } + } + } + + // All filters are neutral, so are we + return NEUTRAL; +} + + +/** + * Processes a log event. + * + * @param evt {Map} The log event to process. + */ +qx.Proto.handleLogEvent = function(evt) { + throw new Error("handleLogEvent is abstract"); +} diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Logger.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Logger.js new file mode 100644 index 0000000000..b5cd3d6705 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/Logger.js @@ -0,0 +1,374 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) +#require(qx.dev.log.WindowAppender) + +************************************************************************ */ + +/** + * A logger. Logs messages of one log category. + * + * @param name {string} The category name of this logger. (Normally a class or + * package name) + * @param parentLogger {Logger} The parent logger. + */ +qx.OO.defineClass("qx.dev.log.Logger", qx.dev.log.LogEventProcessor, +function(name, parentLogger) { + qx.dev.log.LogEventProcessor.call(this); + + this._name = name; + this._parentLogger = parentLogger; +}); + + +/** + * Returns the name of this logger. (Normally a class or package name) + * + * @return {string} the name. + */ +qx.Proto.getName = function() { + return this._name; +} + + +/** + * Returns the parent logger. + * + * @return {Logger} the parent logger. + */ +qx.Proto.getParentLogger = function() { + return this._parentLogger; +} + + +/** + * Indents all following log messages by one. + *

+ * This affects all log messages. Even those of other loggers. + */ +qx.Proto.indent = function() { + qx.dev.log.Logger._indent++; +} + + +/** + * Unindents all following log messages by one. + *

+ * This affects all log messages. Even those of other loggers. + */ +qx.Proto.unindent = function() { + qx.dev.log.Logger._indent--; +} + + +/** + * Adds an appender. + *

+ * If a logger has an appender, log events will not be passed to the + * appenders of parent loggers. If you want this behaviour, also append a + * {@link ForwardAppender}. + * + * @param appender {Appender} the appender to add. + */ +qx.Proto.addAppender = function(appender) { + if (this._appenderArr == null) { + this._appenderArr = []; + } + + this._appenderArr.push(appender); +} + + +/** + * Removes an appender. + * + * @param appender {Appender} the appender to remove. + */ +qx.Proto.removeAppender = function(appender) { + if (this._appenderArr != null) { + this._appenderArr.remove(appender); + } +} + + +/** + * Removes all appenders. + */ +qx.Proto.removeAllAppenders = function() { + this._appenderArr = null; +} + + +// overridden +qx.Proto.handleLogEvent = function(evt) { + var Filter = qx.dev.log.Filter; + + var decision = Filter.NEUTRAL; + var logger = this; + while (decision == Filter.NEUTRAL && logger != null) { + decision = logger.decideLogEvent(evt); + logger = logger.getParentLogger(); + } + + if (decision != Filter.DENY) { + this.appendLogEvent(evt); + } +} + + +/** + * Passes a log event to the appenders. If the logger has no appenders the + * event will be passed to the appenders of the parent logger, and so on. + * + * @param evt {Map} The event to append. + */ +qx.Proto.appendLogEvent = function(evt) { + if (this._appenderArr != null && this._appenderArr.length != 0) { + for (var i = 0; i < this._appenderArr.length; i++) { + this._appenderArr[i].handleLogEvent(evt); + } + } else if (this._parentLogger != null) { + this._parentLogger.appendLogEvent(evt); + } +} + + +/** + * Logs a message. + * + * @param level {int} the log level. + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.log = function(level, msg, instanceId, exc) { + var evt = { logger:this, level:level, message:msg, throwable:exc, + indent:qx.dev.log.Logger._indent, instanceId:instanceId } + this.handleLogEvent(evt); +} + + +/** + * Logs a debug message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.debug = function(msg, instanceId, exc) { + this.log(qx.dev.log.Logger.LEVEL_DEBUG, msg, instanceId, exc); +} + + +/** + * Logs an info message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.info = function(msg, instanceId, exc) { + this.log(qx.dev.log.Logger.LEVEL_INFO, msg, instanceId, exc); +} + + +/** + * Logs a warning message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.warn = function(msg, instanceId, exc) { + this.log(qx.dev.log.Logger.LEVEL_WARN, msg, instanceId, exc); +} + + +/** + * Logs an error message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.error = function(msg, instanceId, exc) { + this.log(qx.dev.log.Logger.LEVEL_ERROR, msg, instanceId, exc); +} + + +/** + * Logs a fatal message. + * + * @param msg {var} the message to log. If this is not a string, its + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.fatal = function(msg, instanceId, exc) { + this.log(qx.dev.log.Logger.LEVEL_FATAL, msg, instanceId, exc); +} + + +/** + * Resets the measure timer. + * + * @see #measure{} + */ +qx.Proto.measureReset = function() { + if (this._totalMeasureTime != null) { + this.debug("Measure reset. Total measure time: " + this._totalMeasureTime + " ms"); + } + + this._lastMeasureTime = null; + this._totalMeasureTime = null; +} + + +/** + * Logs a debug message and measures the time since the last call of measure. + * + * @param msg {string} the message to log. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.measure = function(msg, instanceId, exc) { + if (this._lastMeasureTime == null) { + msg = "(measure start) " + msg; + } else { + var delta = new Date().getTime() - this._lastMeasureTime; + + if (this._totalMeasureTime == null) { + this._totalMeasureTime = 0; + } + + this._totalMeasureTime += delta; + msg = "(passed time: " + delta + " ms) " + msg; + } + + this.debug(msg, instanceId, exc); + + this._lastMeasureTime = new Date().getTime(); +} + + +/** + * Logs the current stack trace as a debug message. + */ +qx.Proto.printStackTrace = function() { + try { + forced_exception.go; + } catch (exc) { + this.debug("Current stack trace", "", exc); + } +} + + +/** + * Returns the logger of a class. + * + * @param clazz {Function} The class of which to return the logger. + */ +qx.Class.getClassLogger = function(clazz) { + var logger = clazz._logger; + if (logger == null) { + // Get the parent logger + var classname = clazz.classname; + var splits = classname.split("."); + var currPackage = window; + var currPackageName = ""; + var parentLogger = qx.dev.log.Logger.ROOT_LOGGER; + for (var i = 0; i < splits.length - 1; i++) { + currPackage = currPackage[splits[i]]; + currPackageName += ((i != 0) ? "." : "") + splits[i]; + + if (currPackage._logger == null) { + // This package has no logger -> Create one + currPackage._logger = new qx.dev.log.Logger(currPackageName, parentLogger); + } + parentLogger = currPackage._logger; + } + + // Create the class logger + logger = new qx.dev.log.Logger(classname, parentLogger); + clazz._logger = logger; + } + return logger; +} + + +/** {int} The current indent. */ +qx.Class._indent = 0; + +/** + * (int) The ALL level has the lowest possible rank and is intended to turn on + * all logging. + */ +qx.Class.LEVEL_ALL = 0; + +/** + * (int) The DEBUG Level designates fine-grained informational events that are + * most useful to debug an application. + */ +qx.Class.LEVEL_DEBUG = 200; + +/** + * (int) The INFO level designates informational messages that highlight the + * progress of the application at coarse-grained level. + */ +qx.Class.LEVEL_INFO = 500; + +/** {int} The WARN level designates potentially harmful situations. */ +qx.Class.LEVEL_WARN = 600; + +/** + * (int) The ERROR level designates error events that might still allow the + * application to continue running. + */ +qx.Class.LEVEL_ERROR = 700; + +/** + * (int) The FATAL level designates very severe error events that will + * presumably lead the application to abort. + */ +qx.Class.LEVEL_FATAL = 800; + +/** + * (int) The OFF has the highest possible rank and is intended to turn off + * logging. + */ +qx.Class.LEVEL_OFF = 1000; + + +/** + * {Logger} The root logger. This is the root of the logger tree. All loggers + * should be a child or grand child of this root logger. + *

+ * This logger logs by default everything greater than level INFO to a log + * window. + */ +qx.Class.ROOT_LOGGER = new qx.dev.log.Logger("root", null); +qx.Class.ROOT_LOGGER.setMinLevel(qx.dev.log.Logger.LEVEL_DEBUG); +qx.Class.ROOT_LOGGER.addAppender(new qx.dev.log.WindowAppender); diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/RingBufferAppender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/RingBufferAppender.js new file mode 100644 index 0000000000..32d24c6636 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/RingBufferAppender.js @@ -0,0 +1,122 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Carsten Lergenmueller (carstenl) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to a memory container. The messages + * can be retrieved later, f. i. when an error dialog pops up and the question + * arises what actions have caused the error. + * + */ +qx.OO.defineClass("qx.dev.log.RingBufferAppender", qx.dev.log.Appender, +function() { + qx.dev.log.Appender.call(this); + + this._history = []; + this._nextIndexToStoreTo = 0; + this._appenderToFormatStrings = null; +}); + + +/** + * The maximum number of messages to hold. If null the number of messages is not + * limited. Warning: Changing this property will clear the events logged so far. + */ +qx.OO.addProperty({ name:"maxMessages", type:"number", defaultValue:50 }); + +qx.Proto._modifyMaxMessages = function(propValue, propOldValue, propData){ + this._history = []; + this._nextIndexToStoreTo = 0; +}; + +// overridden +qx.Proto.appendLogEvent = function(evt) { + var maxMessages = this.getMaxMessages(); + if (this._history.length < maxMessages){ + this._history.push(evt); + } else { + this._history[this._nextIndexToStoreTo++] = evt; + if (this._nextIndexToStoreTo >= maxMessages){ + this._nextIndexToStoreTo = 0; + } + } +}; + +/** + * Returns log events which have been logged previously. + * + * @param count {int} The number of events to retreive. If there are more events than the + * given count, the oldest ones will not be returned. + * @return {array} array of stored log events + */ +qx.Proto.retrieveLogEvents = function(count) { + if (count > this._history.length){ + count = this._history.length; + } + + var indexOfYoungestElementInHistory + = this._history.length == this.getMaxMessages() ? this._nextIndexToStoreTo - 1 + : this._history.length - 1; + var startIndex = indexOfYoungestElementInHistory - count + 1; + if (startIndex < 0){ + startIndex += this._history.length; + } + + var result; + if (startIndex <= indexOfYoungestElementInHistory){ + result = this._history.slice(startIndex, indexOfYoungestElementInHistory + 1); + } else { + result = this._history.slice(startIndex, this._history.length).concat( + this._history.slice(0, indexOfYoungestElementInHistory + 1) + ); + } + return result; +}; + +/** + * Returns a string holding the information of log events which have been logged previously. + * + * @param count {int} The number of events to retreive. If there are more events than the + * given count, the oldest ones will not be returned. + * @return {string} string + */ +qx.Proto.formatLogEvents = function(count) { + if (this._appenderToFormatStrings == null){ + this._appenderToFormatStrings = new qx.dev.log.Appender(); + } + + var events = this.retrieveLogEvents(count); + var string = ""; + for(var idx=0; idx < events.length; idx++) { + string += this._appenderToFormatStrings.formatLogEvent(events[idx]) + "\n"; + } + return string; +}; + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.dev.log.Appender.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/WindowAppender.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/WindowAppender.js new file mode 100644 index 0000000000..e62efe4c37 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dev/log/WindowAppender.js @@ -0,0 +1,225 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 by STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to a log window. + *

+ * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + * + * @param name {string ? "qx_log"} the name of the log window. + */ +qx.OO.defineClass("qx.dev.log.WindowAppender", qx.dev.log.Appender, +function(name) { + qx.dev.log.Appender.call(this); + + this._id = qx.dev.log.WindowAppender.register(this); + this._name = (name == null) ? "qx_log" : name; + + this._logWindowOpened = false; +}); + + +/** + * The maximum number of messages to show. If null the number of messages is not + * limited. + */ +qx.OO.addProperty({ name:"maxMessages", type:"number", defaultValue:500 }); + +/** Whether the window should appear under the main window. */ +qx.OO.addProperty({ name:"popUnder", type:"boolean", defaultValue:false, allowNull:false }); + + +/** + * Creates and opens the log window if it doesn't alread exist. + */ +qx.Proto.openWindow = function() { + if (this._logWindowOpened) { + // The window is already open -> Nothing to do + return; + } + + // Open the logger window + var winWidth = 600; + var winHeight = 350; + var winLeft = window.screen.width - winWidth; + var winTop = window.screen.height - winHeight; + var params = "toolbar=no,scrollbars=yes,resizable=yes," + + "width=" + winWidth + ",height=" + winHeight + + ",left=" + winLeft + ",top=" + winTop; + + // NOTE: In window.open the browser will process the event queue. + // Which means that other log events may arrive during this time. + // The log window is then in an inconsistent state, because the + // this._logElem is not created yet. These events will be added to the + // this._logEventQueue and logged after this._logElem is created. + this._logWindow = window.open("", this._name, params); + + if (!this._logWindow || this._logWindow.closed) + { + if (!this._popupBlockerWarning) { + alert("Couldn't open debug window. Please disable your popup blocker!"); + } + + this._popupBlockerWarning = true; + return; + } + + // Seems to be OK now. + this._popupBlockerWarning = false; + + // Store that window is open + this._logWindowOpened = true; + + if (this.getPopUnder()) { + this._logWindow.blur(); + window.focus(); + } + + var logDocument = this._logWindow.document; + // NOTE: We have to use a static onunload handler, because an onunload + // that is set later using DOM is ignored completely. + // (at least in Firefox, but maybe in IE, too) + logDocument.open(); + logDocument.write("" + this._name + "" + + '' + + '

');
+  logDocument.close();
+
+  this._logElem = logDocument.getElementById("log");
+
+  // Log the events from the queue
+  if (this._logEventQueue != null) {
+    for (var i = 0; i < this._logEventQueue.length; i++) {
+      this.appendLogEvent(this._logEventQueue[i]);
+    }
+    this._logEventQueue = null;
+  }
+}
+
+
+/**
+ * Closes the log window.
+ */
+qx.Proto.closeWindow = function() {
+  if (this._logWindow != null) {
+    this._logWindow.close();
+    this._logWindow = null;
+    this._logElem = null;
+    this._logWindowOpened = false;
+  }
+}
+
+
+// overridden
+qx.Proto.appendLogEvent = function(evt) {
+  if (!this._logWindowOpened) {
+    this._logEventQueue = [];
+    this._logEventQueue.push(evt);
+
+    this.openWindow();
+
+    // Popup-Blocker was active!
+    if (!this._logWindowOpened) {
+      return;
+    }
+  } else if (this._logElem == null) {
+    // The window is currenlty opening, but not yet finished
+    // -> Put the event in the queue
+    this._logEventQueue.push(evt);
+  } else {
+    var divElem = this._logWindow.document.createElement("div");
+    if (evt.level == qx.dev.log.Logger.LEVEL_ERROR) {
+      divElem.style.backgroundColor = "#FFEEEE";
+    } else if (evt.level == qx.dev.log.Logger.LEVEL_DEBUG) {
+      divElem.style.color = "gray";
+    }
+    divElem.innerHTML = this.formatLogEvent(evt).replace(/&/g, "&")
+      .replace(/");
+    this._logElem.appendChild(divElem);
+
+    while (this._logElem.childNodes.length > this.getMaxMessages()) {
+      this._logElem.removeChild(this._logElem.firstChild);
+
+      if (this._removedMessageCount == null) {
+        this._removedMessageCount = 1;
+      } else {
+        this._removedMessageCount++;
+      }
+    }
+
+    if (this._removedMessageCount != null) {
+      this._logElem.firstChild.innerHTML = "(" + this._removedMessageCount
+        + " messages removed)";
+    }
+
+    // Scroll to bottom
+    this._logWindow.scrollTo(0, this._logElem.offsetHeight);
+  }
+}
+
+
+// overridden
+qx.Proto.dispose = function() {
+  if (this.getDisposed()) {
+    return true;
+  }
+
+  this.closeWindow();
+
+  return qx.dev.log.Appender.prototype.dispose.call(this);
+}
+
+
+qx.Class._nextId = 1;
+qx.Class._registeredAppenders = {};
+
+
+/**
+ * Registers a WindowAppender. This is used by the WindowAppender internally.
+ * You don't have to call this.
+ *
+ * @param appender {WindowAppender} the WindowAppender to register.
+ * @return {int} the ID.
+ */
+qx.Class.register = function(appender) {
+  var WindowAppender = qx.dev.log.WindowAppender;
+
+  var id = WindowAppender._nextId++;
+  WindowAppender._registeredAppenders[id] = appender;
+
+  return id;
+}
+
+
+/**
+ * Returns a prviously registered WindowAppender.
+ *
+ * @param id {int} the ID of the wanted WindowAppender.
+ * @return {WindowAppender} the WindowAppender or null if no
+ *     WindowAppender with this ID is registered.
+ */
+qx.Class.getAppender = function(id) {
+  return qx.dev.log.WindowAppender._registeredAppenders[id];
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js
new file mode 100644
index 0000000000..7b6b6c7daf
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js
@@ -0,0 +1,222 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Dimension");
+
+/*
++-Outer----------------------------------------+
+|  Margin                                      |
+|  +-Box------------------------------+        |
+|  |  Border (+ Scrollbar)            |        |
+|  |  +-Area--------------------+     |        |
+|  |  |  Padding                |     |        |
+|  |  |  +-Inner----------+     |     |        |
+|  |  |  |                |     |     |        |
+|  |  |  +----------------+     |     |        |
+|  |  +-------------------------+     |        |
+|  +----------------------------------+        |
++----------------------------------------------+
+*/
+
+// Dimensions
+qx.dom.Dimension.getOuterWidth  = function(el) { return qx.dom.Dimension.getBoxWidth(el)  + qx.dom.Style.getMarginLeft(el) + qx.dom.Style.getMarginRight(el); }
+qx.dom.Dimension.getOuterHeight = function(el) { return qx.dom.Dimension.getBoxHeight(el) + qx.dom.Style.getMarginTop(el)  + qx.dom.Style.getMarginBottom(el); }
+
+qx.dom.Dimension.getBoxWidthForZeroHeight = function(el)
+{
+  var h = el.offsetHeight;
+  if (h == 0) {
+    var o = el.style.height;
+    el.style.height = "1px";
+  }
+
+  var v = el.offsetWidth;
+
+  if (h == 0) {
+    el.style.height = o;
+  }
+
+  return v;
+}
+
+qx.dom.Dimension.getBoxHeightForZeroWidth = function(el)
+{
+  var w = el.offsetWidth;
+  if (w == 0) {
+    var o = el.style.width;
+    el.style.width = "1px";
+  }
+
+  var v = el.offsetHeight;
+
+  if (w == 0) {
+    el.style.width = o;
+  }
+
+  return v;
+}
+
+qx.dom.Dimension.getBoxWidth = function(el) {
+  return el.offsetWidth;
+}
+
+qx.dom.Dimension.getBoxHeight = function(el) {
+  return el.offsetHeight;
+}
+
+if (qx.sys.Client.getInstance().isGecko())
+{
+  qx.dom.Dimension.getAreaWidth = function(el)
+  {
+    // 0 in clientWidth could mean both: That it is really 0 or
+    // that the element is not rendered by the browser and
+    // therefore it is 0, too
+
+    // In Gecko based browsers there is sometimes another
+    // behaviour: The clientHeight is equal to the border
+    // sum. This is normally not correct and so we
+    // fix this value with a more complex calculation.
+
+    // (Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050223 Firefox/1.0.1)
+
+    if (el.clientWidth != 0 && el.clientWidth != (qx.dom.Style.getBorderLeft(el) + qx.dom.Style.getBorderRight(el)))
+    {
+      return el.clientWidth;
+    }
+    else
+    {
+      return qx.dom.Dimension.getBoxWidth(el) - qx.dom.Dimension.getInsetLeft(el) - qx.dom.Dimension.getInsetRight(el);
+    }
+  }
+
+  qx.dom.Dimension.getAreaHeight = function(el)
+  {
+    // 0 in clientHeight could mean both: That it is really 0 or
+    // that the element is not rendered by the browser and
+    // therefore it is 0, too
+
+    // In Gecko based browsers there is sometimes another
+    // behaviour: The clientHeight is equal to the border
+    // sum. This is normally not correct and so we
+    // fix this value with a more complex calculation.
+
+    // (Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050223 Firefox/1.0.1)
+
+    if (el.clientHeight != 0 && el.clientHeight != (qx.dom.Style.getBorderTop(el) + qx.dom.Style.getBorderBottom(el)))
+    {
+      return el.clientHeight;
+    }
+    else
+    {
+      return qx.dom.Dimension.getBoxHeight(el) - qx.dom.Dimension.getInsetTop(el) - qx.dom.Dimension.getInsetBottom(el);
+    }
+  }
+}
+else
+{
+  qx.dom.Dimension.getAreaWidth = function(el)
+  {
+    // 0 in clientWidth could mean both: That it is really 0 or
+    // that the element is not rendered by the browser and
+    // therefore it is 0, too
+
+    return el.clientWidth != 0 ? el.clientWidth : (qx.dom.Dimension.getBoxWidth(el) - qx.dom.Dimension.getInsetLeft(el) - qx.dom.Dimension.getInsetRight(el));
+  }
+
+  qx.dom.Dimension.getAreaHeight = function(el)
+  {
+    // 0 in clientHeight could mean both: That it is really 0 or
+    // that the element is not rendered by the browser and
+    // therefore it is 0, too
+
+    return el.clientHeight != 0 ? el.clientHeight : (qx.dom.Dimension.getBoxHeight(el) - qx.dom.Dimension.getInsetTop(el) - qx.dom.Dimension.getInsetBottom(el));
+  }
+}
+
+qx.dom.Dimension.getInnerWidth  = function(el) { return qx.dom.Dimension.getAreaWidth(el) - qx.dom.Style.getPaddingLeft(el) - qx.dom.Style.getPaddingRight(el); }
+qx.dom.Dimension.getInnerHeight = function(el) { return qx.dom.Dimension.getAreaHeight(el) - qx.dom.Style.getPaddingTop(el)  - qx.dom.Style.getPaddingBottom(el); }
+
+
+
+
+// Insets
+if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.Dimension.getInsetLeft   = function(el) { return el.clientLeft; }
+  qx.dom.Dimension.getInsetTop    = function(el) { return el.clientTop; }
+  qx.dom.Dimension.getInsetRight  = function(el) {
+    if(qx.dom.Style.getStyleProperty(el, "overflowY") == "hidden" || el.clientWidth == 0) {
+      return qx.dom.Style.getBorderRight(el);
+    }
+
+    return Math.max(0, el.offsetWidth - el.clientLeft - el.clientWidth);
+  }
+
+  qx.dom.Dimension.getInsetBottom = function(el) {
+    if(qx.dom.Style.getStyleProperty(el, "overflowX") == "hidden" || el.clientHeight == 0) {
+      return qx.dom.Style.getBorderBottom(el);
+    }
+
+    return Math.max(0, el.offsetHeight - el.clientTop - el.clientHeight);
+  }
+}
+else
+{
+  qx.dom.Dimension.getInsetLeft   = function(el) { return qx.dom.Style.getBorderLeft(el); }
+  qx.dom.Dimension.getInsetTop    = function(el) { return qx.dom.Style.getBorderTop(el); }
+
+  qx.dom.Dimension.getInsetRight  = function(el) {
+    // Alternative method if clientWidth is unavailable
+    // clientWidth == 0 could mean both: unavailable or really 0
+    if (el.clientWidth == 0) {
+      var ov = qx.dom.Style.getStyleProperty(el, "overflow");
+      var sbv = ov == "scroll" || ov == "-moz-scrollbars-vertical" ? 16 : 0;
+      return Math.max(0, qx.dom.Style.getBorderRight(el) + sbv);
+    }
+
+    return Math.max(0, el.offsetWidth - el.clientWidth - qx.dom.Style.getBorderLeft(el));
+  }
+
+  qx.dom.Dimension.getInsetBottom = function(el) {
+    // Alternative method if clientHeight is unavailable
+    // clientHeight == 0 could mean both: unavailable or really 0
+    if (el.clientHeight == 0) {
+      var ov = qx.dom.Style.getStyleProperty(el, "overflow");
+      var sbv = ov == "scroll" || ov == "-moz-scrollbars-horizontal" ? 16 : 0;
+      return Math.max(0, qx.dom.Style.getBorderBottom(el) + sbv);
+    }
+
+    return Math.max(0, el.offsetHeight - el.clientHeight - qx.dom.Style.getBorderTop(el));
+  }
+}
+
+
+// Scrollbar
+qx.dom.Dimension.getScrollBarSizeLeft   = function(el) { return 0; }
+qx.dom.Dimension.getScrollBarSizeTop    = function(el) { return 0; }
+qx.dom.Dimension.getScrollBarSizeRight  = function(el) { return qx.dom.Dimension.getInsetRight(el)  - qx.dom.Style.getBorderRight(el); }
+qx.dom.Dimension.getScrollBarSizeBottom = function(el) { return qx.dom.Dimension.getInsetBottom(el) - qx.dom.Style.getBorderBottom(el); }
+
+qx.dom.Dimension.getScrollBarVisibleX   = function(el) { return qx.dom.Dimension.getScrollBarSizeRight(el)  > 0; }
+qx.dom.Dimension.getScrollBarVisibleY   = function(el) { return qx.dom.Dimension.getScrollBarSizeBottom(el) > 0; }
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Element.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Element.js
new file mode 100644
index 0000000000..fa851e1434
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Element.js
@@ -0,0 +1,74 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/**
+ * Crossbrowser operations on DOM Nodes
+ */
+qx.OO.defineClass("qx.dom.Element");
+
+
+/**
+ * Removes whitespace-only text node children
+ *
+ * @param vElement {Element} DOM element
+ */
+qx.dom.Element.cleanWhitespace = function(vElement)
+{
+  for (var i=0; i xstart)
+  {
+    ystart = qx.dom.Offset.getTop(chc);
+    if (y > ystart)
+    {
+      xstop = xstart + chc.offsetWidth;
+
+      if (x < xstop)
+      {
+        ystop = ystart + chc.offsetHeight;
+        if (y < ystop)
+        {
+          return [ xstart, xstop, ystart, ystop ];
+        }
+      }
+    }
+  }
+
+  return false;
+}
+
+qx.dom.ElementFromPoint.getElementAbsolutePointChecker = function(chc, x, y)
+{
+  var xstart, ystart, xstop, ystop;
+
+  if (!chc || chc.nodeType != 1) {
+    return false;
+  }
+
+  xstart = qx.dom.Location.getPageBoxLeft(chc);
+  if (x > xstart)
+  {
+    ystart = qx.dom.Location.getPageBoxTop(chc);
+    if (y > ystart)
+    {
+      xstop = xstart + chc.offsetWidth;
+
+      if (x < xstop)
+      {
+        ystop = ystart + chc.offsetHeight;
+        if (y < ystop)
+        {
+          return [ xstart, xstop, ystart, ystop ];
+        }
+      }
+    }
+  }
+
+  return false;
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/EventRegistration.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/EventRegistration.js
new file mode 100644
index 0000000000..9f42b2e1b6
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/EventRegistration.js
@@ -0,0 +1,47 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(core)
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.EventRegistration");
+
+if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.EventRegistration.addEventListener = function(vElement, vType, vFunction) {
+    vElement.attachEvent("on" + vType, vFunction);
+  }
+
+  qx.dom.EventRegistration.removeEventListener = function(vElement, vType, vFunction) {
+    vElement.detachEvent("on" + vType, vFunction);
+  }
+}
+else
+{
+  qx.dom.EventRegistration.addEventListener = function(vElement, vType, vFunction) {
+    vElement.addEventListener(vType, vFunction, false);
+  }
+
+  qx.dom.EventRegistration.removeEventListener = function(vElement, vType, vFunction) {
+    vElement.removeEventListener(vType, vFunction, false);
+  }
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Iframe.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Iframe.js
new file mode 100644
index 0000000000..51cd67346a
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Iframe.js
@@ -0,0 +1,87 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(io_remote)
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Iframe");
+
+if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.Iframe.getWindow = function(vIframe)
+  {
+    try
+    {
+      return vIframe.contentWindow;
+    }
+    catch(ex)
+    {
+      return null;
+    }
+  }
+
+  qx.dom.Iframe.getDocument = function(vIframe)
+  {
+    try
+    {
+      var vWin = qx.dom.Iframe.getWindow(vIframe);
+      return vWin ? vWin.document : null;
+    }
+    catch(ex)
+    {
+      return null;
+    }
+  }
+}
+else
+{
+  qx.dom.Iframe.getWindow = function(vIframe)
+  {
+    try
+    {
+      var vDoc = qx.dom.Iframe.getDocument(vIframe);
+      return vDoc ? vDoc.defaultView : null;
+    }
+    catch(ex)
+    {
+      return null;
+    }
+  }
+
+  qx.dom.Iframe.getDocument = function(vIframe)
+  {
+    try
+    {
+      return vIframe.contentDocument;
+    }
+    catch(ex)
+    {
+      return null;
+    }
+  }
+}
+
+qx.dom.Iframe.getBody = function(vIframe)
+{
+  var vDoc = qx.dom.Iframe.getDocument(vIframe);
+  return vDoc ? vDoc.getElementsByTagName("body")[0] : null;
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Location.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Location.js
new file mode 100644
index 0000000000..479a3aaba8
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Location.js
@@ -0,0 +1,259 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Location");
+
+qx.dom.Location.getPageOuterLeft     = function(el) { return qx.dom.Location.getPageBoxLeft(el)     - qx.dom.Style.getMarginLeft(el); }
+qx.dom.Location.getPageOuterTop      = function(el) { return qx.dom.Location.getPageBoxTop(el)      - qx.dom.Style.getMarginTop(el); }
+qx.dom.Location.getPageOuterRight    = function(el) { return qx.dom.Location.getPageBoxRight(el)    + qx.dom.Style.getMarginRight(el); }
+qx.dom.Location.getPageOuterBottom   = function(el) { return qx.dom.Location.getPageBoxBottom(el)   + qx.dom.Style.getMarginBottom(el); }
+
+qx.dom.Location.getClientOuterLeft   = function(el) { return qx.dom.Location.getClientBoxLeft(el)   - qx.dom.Style.getMarginLeft(el); }
+qx.dom.Location.getClientOuterTop    = function(el) { return qx.dom.Location.getClientBoxTop(el)    - qx.dom.Style.getMarginTop(el); }
+qx.dom.Location.getClientOuterRight  = function(el) { return qx.dom.Location.getClientBoxRight(el)  + qx.dom.Style.getMarginRight(el); }
+qx.dom.Location.getClientOuterBottom = function(el) { return qx.dom.Location.getClientBoxBottom(el) + qx.dom.Style.getMarginBottom(el); }
+
+
+if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.Location.getClientBoxLeft   = function(el) { return el.getBoundingClientRect().left; }
+  qx.dom.Location.getClientBoxTop    = function(el) { return el.getBoundingClientRect().top; }
+
+  qx.dom.Location.getPageBoxLeft     = function(el) { return qx.dom.Location.getClientBoxLeft(el)  + qx.dom.Scroll.getLeftSum(el); }
+  qx.dom.Location.getPageBoxTop      = function(el) { return qx.dom.Location.getClientBoxTop(el)   + qx.dom.Scroll.getTopSum(el); }
+}
+else if (qx.sys.Client.getInstance().isGecko())
+{
+  qx.dom.Location.getClientBoxLeft   = function(el) { return qx.dom.Location.getClientAreaLeft(el) - qx.dom.Style.getBorderLeft(el); }
+  qx.dom.Location.getClientBoxTop    = function(el) { return qx.dom.Location.getClientAreaTop(el)  - qx.dom.Style.getBorderTop(el); }
+
+  qx.dom.Location.getPageBoxLeft     = function(el) { return qx.dom.Location.getPageAreaLeft(el)   - qx.dom.Style.getBorderLeft(el); }
+  qx.dom.Location.getPageBoxTop      = function(el) { return qx.dom.Location.getPageAreaTop(el)    - qx.dom.Style.getBorderTop(el); }
+}
+else
+{
+  qx.dom.Location.getPageBoxLeft = function(el)
+  {
+    var sum = el.offsetLeft;
+    while (el.tagName.toLowerCase() != "body")
+    {
+      el = el.offsetParent;
+      sum += el.offsetLeft;
+    }
+
+    return sum;
+  }
+
+  qx.dom.Location.getPageBoxTop = function(el)
+  {
+    var sum = el.offsetTop;
+    while (el.tagName.toLowerCase() != "body")
+    {
+      el = el.offsetParent;
+      sum += el.offsetTop;
+    }
+
+    return sum;
+  }
+
+  qx.dom.Location.getClientBoxLeft = function(el)
+  {
+    var sum = el.offsetLeft;
+    while (el.tagName.toLowerCase() != "body")
+    {
+      el = el.offsetParent;
+      sum += el.offsetLeft - el.scrollLeft;
+    }
+
+    return sum;
+  }
+
+  qx.dom.Location.getClientBoxTop = function(el)
+  {
+    var sum = el.offsetTop;
+    while (el.tagName.toLowerCase() != "body")
+    {
+      el = el.offsetParent;
+      sum += el.offsetTop - el.scrollTop;
+    }
+
+    return sum;
+  }
+}
+
+if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.Location.getClientBoxRight  = function(el) { return el.getBoundingClientRect().right; }
+  qx.dom.Location.getClientBoxBottom = function(el) { return el.getBoundingClientRect().bottom; }
+
+  qx.dom.Location.getPageBoxRight    = function(el) { return qx.dom.Location.getClientBoxRight(el)  + qx.dom.Scroll.getLeftSum(el); }
+  qx.dom.Location.getPageBoxBottom   = function(el) { return qx.dom.Location.getClientBoxBottom(el) + qx.dom.Scroll.getTopSum(el);  }
+}
+else
+{
+  qx.dom.Location.getClientBoxRight  = function(el) { return qx.dom.Location.getClientBoxLeft(el) + qx.dom.Dimension.getBoxWidth(el); }
+  qx.dom.Location.getClientBoxBottom = function(el) { return qx.dom.Location.getClientBoxTop(el)  + qx.dom.Dimension.getBoxHeight(el); }
+
+  qx.dom.Location.getPageBoxRight    = function(el) { return qx.dom.Location.getPageBoxLeft(el)   + qx.dom.Dimension.getBoxWidth(el); }
+  qx.dom.Location.getPageBoxBottom   = function(el) { return qx.dom.Location.getPageBoxTop(el)    + qx.dom.Dimension.getBoxHeight(el); }
+}
+
+if (qx.sys.Client.getInstance().isGecko())
+{
+  qx.dom.Location.getPageAreaLeft = function(el) {
+    return el.ownerDocument.getBoxObjectFor(el).x;
+  }
+
+  qx.dom.Location.getPageAreaTop = function(el) {
+    return el.ownerDocument.getBoxObjectFor(el).y;
+  }
+
+  // We need to subtract the scroll position of all parent containers (bug #186229).
+  qx.dom.Location.getClientAreaLeft = function(el) {
+    return qx.dom.Location.getPageAreaLeft(el) - qx.dom.Scroll.getLeftSum(el);
+  }
+
+  // We need to subtract the scroll position of all parent containers (bug #186229).
+  qx.dom.Location.getClientAreaTop = function(el) {
+    return qx.dom.Location.getPageAreaTop(el) - qx.dom.Scroll.getTopSum(el);
+  }
+}
+else
+{
+  qx.dom.Location.getClientAreaLeft = function(el) { return qx.dom.Location.getClientBoxLeft(el) + qx.dom.Style.getBorderLeft(el); }
+  qx.dom.Location.getClientAreaTop  = function(el) { return qx.dom.Location.getClientBoxTop(el)  + qx.dom.Style.getBorderTop(el); }
+
+  qx.dom.Location.getPageAreaLeft = function(el) { return qx.dom.Location.getPageBoxLeft(el) + qx.dom.Style.getBorderLeft(el); }
+  qx.dom.Location.getPageAreaTop  = function(el) { return qx.dom.Location.getPageBoxTop(el)  + qx.dom.Style.getBorderTop(el); }
+}
+
+
+
+qx.dom.Location.getClientAreaRight   = function(el) { return qx.dom.Location.getClientAreaLeft(el)  + qx.dom.Dimension.getAreaWidth(el);  }
+qx.dom.Location.getClientAreaBottom  = function(el) { return qx.dom.Location.getClientAreaTop(el)   + qx.dom.Dimension.getAreaHeight(el); }
+
+qx.dom.Location.getPageAreaRight     = function(el) { return qx.dom.Location.getPageAreaLeft(el)    + qx.dom.Dimension.getAreaWidth(el);  }
+qx.dom.Location.getPageAreaBottom    = function(el) { return qx.dom.Location.getPageAreaTop(el)     + qx.dom.Dimension.getAreaHeight(el); }
+
+
+
+
+qx.dom.Location.getClientInnerLeft   = function(el) { return qx.dom.Location.getClientAreaLeft(el)  + qx.dom.Style.getPaddingLeft(el); }
+qx.dom.Location.getClientInnerTop    = function(el) { return qx.dom.Location.getClientAreaTop(el)   + qx.dom.Style.getPaddingTop(el);  }
+qx.dom.Location.getClientInnerRight  = function(el) { return qx.dom.Location.getClientInnerLeft(el) + qx.dom.Dimension.getInnerWidth(el);  }
+qx.dom.Location.getClientInnerBottom = function(el) { return qx.dom.Location.getClientInnerTop(el)  + qx.dom.Dimension.getInnerHeight(el); }
+
+qx.dom.Location.getPageInnerLeft     = function(el) { return qx.dom.Location.getPageAreaLeft(el)    + qx.dom.Style.getPaddingLeft(el); }
+qx.dom.Location.getPageInnerTop      = function(el) { return qx.dom.Location.getPageAreaTop(el)     + qx.dom.Style.getPaddingTop(el);  }
+qx.dom.Location.getPageInnerRight    = function(el) { return qx.dom.Location.getPageInnerLeft(el)   + qx.dom.Dimension.getInnerWidth(el);  }
+qx.dom.Location.getPageInnerBottom   = function(el) { return qx.dom.Location.getPageInnerTop(el)    + qx.dom.Dimension.getInnerHeight(el); }
+
+
+// Screen
+if (qx.sys.Client.getInstance().isGecko())
+{
+  /*
+    screenX and screenY seem to return the distance to the box
+    and not to the area. Confusing, especially as the x and y properties
+    of the BoxObject return the distance to the area.
+  */
+
+  qx.dom.Location.getScreenBoxLeft = function(el)
+  {
+    // We need to subtract the scroll position of all
+    // parent containers (bug #186229).
+    var sum = 0;
+    var p = el.parentNode;
+    while (p.nodeType == 1) {
+      sum += p.scrollLeft;
+      p = p.parentNode;
+    }
+
+    return el.ownerDocument.getBoxObjectFor(el).screenX - sum;
+  }
+
+  qx.dom.Location.getScreenBoxTop = function(el)
+  {
+    // We need to subtract the scroll position of all
+    // parent containers (bug #186229).
+    var sum = 0;
+    var p = el.parentNode;
+    while (p.nodeType == 1) {
+      sum += p.scrollTop;
+      p = p.parentNode;
+    }
+
+    return el.ownerDocument.getBoxObjectFor(el).screenY - sum;
+  }
+}
+else
+{
+  // Hope this works in khtml, too (opera 7.6p3 seems to be ok)
+  qx.dom.Location.getScreenBoxLeft = function(el) { return qx.dom.Location.getScreenDocumentLeft(el) + qx.dom.Location.getPageBoxLeft(el); }
+  qx.dom.Location.getScreenBoxTop  = function(el) { return qx.dom.Location.getScreenDocumentTop(el) + qx.dom.Location.getPageBoxTop(el); }
+}
+
+qx.dom.Location.getScreenBoxRight    = function(el) { return qx.dom.Location.getScreenBoxLeft(el)    + qx.dom.Dimension.getBoxWidth(el); }
+qx.dom.Location.getScreenBoxBottom   = function(el) { return qx.dom.Location.getScreenBoxTop(el)     + qx.dom.Dimension.getBoxHeight(el); }
+
+qx.dom.Location.getScreenOuterLeft   = function(el) { return qx.dom.Location.getScreenBoxLeft(el)    - qx.dom.Style.getMarginLeft(el); }
+qx.dom.Location.getScreenOuterTop    = function(el) { return qx.dom.Location.getScreenBoxTop(el)     - qx.dom.Style.getMarginTop(el); }
+qx.dom.Location.getScreenOuterRight  = function(el) { return qx.dom.Location.getScreenBoxRight(el)   + qx.dom.Style.getMarginRight(el); }
+qx.dom.Location.getScreenOuterBottom = function(el) { return qx.dom.Location.getScreenBoxBottom(el)  + qx.dom.Style.getMarginBottom(el); }
+
+qx.dom.Location.getScreenAreaLeft    = function(el) { return qx.dom.Location.getScreenBoxLeft(el)    + qx.dom.Dimension.getInsetLeft(el); }
+qx.dom.Location.getScreenAreaTop     = function(el) { return qx.dom.Location.getScreenBoxTop(el)     + qx.dom.Dimension.getInsetTop(el); }
+qx.dom.Location.getScreenAreaRight   = function(el) { return qx.dom.Location.getScreenBoxRight(el)   - qx.dom.Dimension.getInsetRight(el); }
+qx.dom.Location.getScreenAreaBottom  = function(el) { return qx.dom.Location.getScreenBoxBottom(el)  - qx.dom.Dimension.getInsetBottom(el); }
+
+qx.dom.Location.getScreenInnerLeft   = function(el) { return qx.dom.Location.getScreenAreaLeft(el)   + qx.dom.Style.getPaddingLeft(el); }
+qx.dom.Location.getScreenInnerTop    = function(el) { return qx.dom.Location.getScreenAreaTop(el)    + qx.dom.Style.getPaddingTop(el); }
+qx.dom.Location.getScreenInnerRight  = function(el) { return qx.dom.Location.getScreenAreaRight(el)  - qx.dom.Style.getPaddingRight(el); }
+qx.dom.Location.getScreenInnerBottom = function(el) { return qx.dom.Location.getScreenAreaBottom(el) - qx.dom.Style.getPaddingBottom(el); }
+
+
+if (qx.sys.Client.getInstance().isGecko())
+{
+  /*
+    Notice:
+      This doesn't work like the mshtml method:
+      el.ownerDocument.defaultView.screenX;
+  */
+
+  // Tested in Gecko 1.7.5
+  qx.dom.Location.getScreenDocumentLeft = function(el) { return qx.dom.Location.getScreenOuterLeft(el.ownerDocument.body); }
+  qx.dom.Location.getScreenDocumentTop = function(el) { return qx.dom.Location.getScreenOuterTop(el.ownerDocument.body); }
+  qx.dom.Location.getScreenDocumentRight = function(el) { return qx.dom.Location.getScreenOuterRight(el.ownerDocument.body); }
+  qx.dom.Location.getScreenDocumentBottom = function(el) { return qx.dom.Location.getScreenOuterBottom(el.ownerDocument.body); }
+}
+else
+{
+  // Tested in Opera 7.6b3 and Mshtml 6.0 (XP-SP2)
+  // What's up with khtml (Safari/Konq)?
+  qx.dom.Location.getScreenDocumentLeft = function(el) { return el.document.parentWindow.screenLeft; }
+  qx.dom.Location.getScreenDocumentTop = function(el) { return el.document.parentWindow.screenTop; }
+  qx.dom.Location.getScreenDocumentRight = function(el) {}
+  qx.dom.Location.getScreenDocumentBottom = function(el) {}
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Node.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Node.js
new file mode 100644
index 0000000000..c4b02ea16e
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Node.js
@@ -0,0 +1,38 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Node",
+{
+  ELEMENT : 1,
+  ATTRIBUTE : 2,
+  TEXT : 3,
+  CDATA_SECTION : 4,
+  ENTITY_REFERENCE : 5,
+  ENTITY : 6,
+  PROCESSING_INSTRUCTION : 7,
+  COMMENT : 8,
+  DOCUMENT : 9,
+  DOCUMENT_TYPE : 10,
+  DOCUMENT_FRAGMENT : 11,
+  NOTATION : 12
+});
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Offset.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Offset.js
new file mode 100644
index 0000000000..74e653b279
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Offset.js
@@ -0,0 +1,119 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Offset");
+
+/*
+Mozilla seems to be a little buggy here.
+Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1.0
+
+It calculates some borders and/or paddings to the offsetProperties.
+*/
+if (qx.sys.Client.getInstance().isGecko())
+{
+  qx.dom.Offset.getLeft = function(el)
+  {
+    var val = el.offsetLeft;
+    var pa = el.parentNode;
+
+    var pose = qx.dom.Style.getStyleProperty(el, "position");
+    var posp = qx.dom.Style.getStyleProperty(pa, "position");
+
+    // If element is positioned non-static: Substract the border of the element
+    if (pose != "absolute" && pose != "fixed") {
+      val -= qx.dom.Style.getBorderLeft(pa);
+    }
+
+    // If parent is positioned static: Substract the border of the first
+    // parent element which is ab positioned non-static.
+    if (posp != "absolute" && posp != "fixed")
+    {
+      while(pa)
+      {
+        pa = pa.parentNode;
+
+        if (!pa || qx.util.Validation.isInvalidString(pa.tagName)) {
+          break;
+        }
+
+        var posi = qx.dom.Style.getStyleProperty(pa, "position");
+
+        if (posi == "absolute" || posi == "fixed") {
+          val -= qx.dom.Style.getBorderLeft(pa) + qx.dom.Style.getPaddingLeft(pa);
+          break;
+        }
+      }
+    }
+
+    return val;
+  }
+
+  qx.dom.Offset.getTop = function(el)
+  {
+    var val = el.offsetTop;
+    var pa = el.parentNode;
+
+    var pose = qx.dom.Style.getStyleProperty(el, "position");
+    var posp = qx.dom.Style.getStyleProperty(pa, "position");
+
+    // If element is positioned non-static: Substract the border of the element
+    if (pose != "absolute" && pose != "fixed") {
+      val -= qx.dom.Style.getBorderTop(pa);
+    }
+
+    // If parent is positioned static: Substract the border of the first
+    // parent element which is ab positioned non-static.
+    if (posp != "absolute" && posp != "fixed")
+    {
+      while(pa)
+      {
+        pa = pa.parentNode;
+
+        if (!pa || qx.util.Validation.isInvalidString(pa.tagName)) {
+          break;
+        }
+
+        var posi = qx.dom.Style.getStyleProperty(pa, "position");
+
+        if (posi == "absolute" || posi == "fixed") {
+          val -= qx.dom.Style.getBorderTop(pa) + qx.dom.Style.getPaddingTop(pa);
+          break;
+        }
+      }
+    }
+
+    return val;
+  }
+}
+else
+{
+  qx.dom.Offset.getLeft = function(el) {
+    return el.offsetLeft;
+  }
+
+  qx.dom.Offset.getTop = function(el) {
+    return el.offsetTop;
+  }
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Scroll.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Scroll.js
new file mode 100644
index 0000000000..5c3808489d
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Scroll.js
@@ -0,0 +1,53 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Scroll");
+
+qx.dom.Scroll.getLeftSum = function(el)
+{
+  var sum = 0;
+  var p = el.parentNode;
+
+  while (p.nodeType == 1)
+  {
+    sum += p.scrollLeft;
+    p = p.parentNode;
+  }
+
+  return sum;
+}
+
+qx.dom.Scroll.getTopSum = function(el)
+{
+  var sum = 0;
+  var p = el.parentNode;
+
+  while (p.nodeType == 1)
+  {
+    sum += p.scrollTop;
+    p = p.parentNode;
+  }
+
+  return sum;
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js
new file mode 100644
index 0000000000..d045524d29
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/ScrollIntoView.js
@@ -0,0 +1,175 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.dom.Style)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.ScrollIntoView");
+
+// Internet Explorer has invented scrollIntoView, but does not behave the same like in Mozilla (which would be better)
+// Mozilla has a native well working method scrollIntoView
+// Safari does not support scrollIntoView (but it can be found in Webkit since May 2005)
+// Opera does not support scrollIntoView
+
+qx.dom.BODY_TAG_NAME = "body";
+
+qx.dom.ScrollIntoView.scrollX = function(vElement, vAlignLeft)
+{
+  var vParentWidth, vParentScrollLeft, vWidth, vHasScroll;
+
+  var vParent = vElement.parentNode;
+  var vOffset = vElement.offsetLeft;
+  var vWidth = vElement.offsetWidth;
+
+  while(vParent)
+  {
+    switch(qx.dom.Style.getStyleProperty(vParent, "overflow"))
+    {
+      case "scroll":
+      case "auto":
+      case "-moz-scrollbars-horizontal":
+        vHasScroll = true;
+        break;
+
+      default:
+        switch(qx.dom.Style.getStyleProperty(vParent, "overflowX"))
+        {
+          case "scroll":
+          case "auto":
+            vHasScroll = true;
+            break;
+
+          default:
+            vHasScroll = false;
+        }
+    }
+
+    if (vHasScroll)
+    {
+      vParentWidth = vParent.clientWidth;
+      vParentScrollLeft = vParent.scrollLeft;
+
+      if (vAlignLeft)
+      {
+        vParent.scrollLeft = vOffset;
+      }
+      else if (vAlignLeft == false)
+      {
+        vParent.scrollLeft = vOffset + vWidth - vParentWidth;
+      }
+      else if (vWidth > vParentWidth || vOffset < vParentScrollLeft)
+      {
+        vParent.scrollLeft = vOffset;
+      }
+      else if ((vOffset + vWidth) > (vParentScrollLeft + vParentWidth))
+      {
+        vParent.scrollLeft = vOffset + vWidth - vParentWidth;
+      }
+
+      vOffset = vParent.offsetLeft;
+      vWidth = vParent.offsetWidth;
+    }
+    else
+    {
+      vOffset += vParent.offsetLeft;
+    }
+
+    if (vParent.tagName.toLowerCase() == qx.dom.BODY_TAG_NAME) {
+      break;
+    }
+
+    vParent = vParent.parentNode;
+  }
+
+  return true;
+}
+
+qx.dom.ScrollIntoView.scrollY = function(vElement, vAlignTop)
+{
+  var vParentHeight, vParentScrollTop, vHeight, vHasScroll;
+
+  var vParent = vElement.parentNode;
+  var vOffset = vElement.offsetTop;
+  var vHeight = vElement.offsetHeight;
+
+  while(vParent)
+  {
+    switch(qx.dom.Style.getStyleProperty(vParent, "overflow"))
+    {
+      case "scroll":
+      case "auto":
+      case "-moz-scrollbars-vertical":
+        vHasScroll = true;
+        break;
+
+      default:
+        switch(qx.dom.Style.getStyleProperty(vParent, "overflowY"))
+        {
+          case "scroll":
+          case "auto":
+            vHasScroll = true;
+            break;
+
+          default:
+            vHasScroll = false;
+        }
+    }
+
+    if (vHasScroll)
+    {
+      vParentHeight = vParent.clientHeight;
+      vParentScrollTop = vParent.scrollTop;
+
+      if (vAlignTop)
+      {
+        vParent.scrollTop = vOffset;
+      }
+      else if (vAlignTop == false)
+      {
+        vParent.scrollTop = vOffset + vHeight - vParentHeight;
+      }
+      else if (vHeight > vParentHeight || vOffset < vParentScrollTop)
+      {
+        vParent.scrollTop = vOffset;
+      }
+      else if ((vOffset + vHeight) > (vParentScrollTop + vParentHeight))
+      {
+        vParent.scrollTop = vOffset + vHeight - vParentHeight;
+      }
+
+      vOffset = vParent.offsetTop;
+      vHeight = vParent.offsetHeight;
+    }
+    else
+    {
+      vOffset += vParent.offsetTop;
+    }
+
+    if (vParent.tagName.toLowerCase() == qx.dom.BODY_TAG_NAME) {
+      break;
+    }
+
+    vParent = vParent.parentNode;
+  }
+
+  return true;
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Style.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Style.js
new file mode 100644
index 0000000000..b003f0e18a
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Style.js
@@ -0,0 +1,122 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Style");
+
+if (Boolean(document.defaultView) && Boolean(document.defaultView.getComputedStyle))
+{
+  qx.dom.Style.getStylePropertySure = function(el, prop) { return !el ? null : el.ownerDocument ? el.ownerDocument.defaultView.getComputedStyle(el, "")[prop] : el.style[prop]; }
+
+  qx.dom.Style.getStyleProperty = function(el, prop)
+  {
+    try
+    {
+      return el.ownerDocument.defaultView.getComputedStyle(el, "")[prop];
+    }
+    catch(ex)
+    {
+      throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
+    }
+  }
+}
+else if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.Style.getStyleProperty = function(el, prop)
+  {
+    try
+    {
+      return el.currentStyle[prop];
+    }
+    catch(ex)
+    {
+      throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
+    }
+  }
+
+  qx.dom.Style.getStylePropertySure = function(el, prop)
+  {
+    try
+    {
+      if (!el) {
+        return null;
+      }
+
+      if (el.parentNode && el.currentStyle)
+      {
+        return el.currentStyle[prop];
+      }
+      else
+      {
+        var v1 = el.runtimeStyle[prop];
+
+        if (v1 != null && typeof v1 != "undefined" && v1 != "") {
+          return v1;
+        }
+
+        return el.style[prop];
+      }
+    }
+    catch(ex)
+    {
+      throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex);
+    }
+  }
+}
+else
+{
+  qx.dom.Style.getStylePropertySure = function(el, prop) { return !el ? null : el.style[prop]; }
+
+  qx.dom.Style.getStyleProperty = function(el, prop)
+  {
+    try
+    {
+      return el.style[prop];
+    }
+    catch(ex)
+    {
+      throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]");
+    }
+  }
+}
+
+
+qx.dom.Style.getStyleSize = function(el, prop) { return parseInt(qx.dom.Style.getStyleProperty(el, prop)) || 0; }
+
+
+// Properties
+qx.dom.Style.getMarginLeft    = function(el) { return qx.dom.Style.getStyleSize(el, "marginLeft"); }
+qx.dom.Style.getMarginTop     = function(el) { return qx.dom.Style.getStyleSize(el, "marginTop"); }
+qx.dom.Style.getMarginRight   = function(el) { return qx.dom.Style.getStyleSize(el, "marginRight"); }
+qx.dom.Style.getMarginBottom  = function(el) { return qx.dom.Style.getStyleSize(el, "marginBottom"); }
+
+qx.dom.Style.getPaddingLeft   = function(el) { return qx.dom.Style.getStyleSize(el, "paddingLeft"); }
+qx.dom.Style.getPaddingTop    = function(el) { return qx.dom.Style.getStyleSize(el, "paddingTop"); }
+qx.dom.Style.getPaddingRight  = function(el) { return qx.dom.Style.getStyleSize(el, "paddingRight"); }
+qx.dom.Style.getPaddingBottom = function(el) { return qx.dom.Style.getStyleSize(el, "paddingBottom"); }
+
+qx.dom.Style.getBorderLeft    = function(el) { return qx.dom.Style.getStyleProperty(el, "borderLeftStyle")   == "none" ? 0 : qx.dom.Style.getStyleSize(el, "borderLeftWidth"); }
+qx.dom.Style.getBorderTop     = function(el) { return qx.dom.Style.getStyleProperty(el, "borderTopStyle")    == "none" ? 0 : qx.dom.Style.getStyleSize(el, "borderTopWidth"); }
+qx.dom.Style.getBorderRight   = function(el) { return qx.dom.Style.getStyleProperty(el, "borderRightStyle")  == "none" ? 0 : qx.dom.Style.getStyleSize(el, "borderRightWidth"); }
+qx.dom.Style.getBorderBottom  = function(el) { return qx.dom.Style.getStyleProperty(el, "borderBottomStyle") == "none" ? 0 : qx.dom.Style.getStyleSize(el, "borderBottomWidth"); }
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/StyleSheet.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/StyleSheet.js
new file mode 100644
index 0000000000..be51ad58be
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/StyleSheet.js
@@ -0,0 +1,308 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+     2006 by STZ-IDA, Germany, http://www.stz-ida.de
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+     * Andreas Junghans (lucidcake)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.StyleSheet");
+
+
+/**
+ * create a new Stylesheet node and append it to the document
+ *
+ * @param vCssText {string} optional string of css rules
+ */
+qx.dom.StyleSheet.createElement = function(vCssText) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.createElement = function(vCssText)
+  {
+    var vSheet = document.createStyleSheet();
+
+    if (vCssText) {
+      vSheet.cssText = vCssText;
+    }
+
+    return vSheet;
+  }
+}
+else // FF, Opera, Safari
+{
+  qx.dom.StyleSheet.createElement = function(vCssText)
+  {
+    var vElement = document.createElement("style");
+    vElement.type = "text/css";
+
+    // Safari 2.0 doesn't like empty stylesheets
+    vElement.appendChild(document.createTextNode(vCssText || "body {}"));
+
+    document.getElementsByTagName("head")[0].appendChild(vElement);
+
+    if (vElement.sheet) {
+      return vElement.sheet;
+    } else {
+      // Safari 2.0 doesn't support element.sheet so we neet a workaround
+      var styles = document.styleSheets;
+      for (var i=styles.length-1; i>=0; i--) {
+        if (styles[i].ownerNode == vElement) {
+          return styles[i];
+        }
+      }
+    }
+    throw "Error: Could not get a reference to the sheet object";
+  }
+}
+
+
+/**
+ * insert a new CSS rule into a given Stylesheet
+ *
+ * @param vSheet     {Object} the target Stylesheet object
+ * @param vSelector {string}
+ * @param vStyle     {string}
+ */
+qx.dom.StyleSheet.addRule = function(vSheet, vSelector, vStyle) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.addRule = function(vSheet, vSelector, vStyle) {
+    vSheet.addRule(vSelector, vStyle);
+  };
+}
+else if (qx.sys.Client.getInstance().isSafari2()) // insertRule in Safari 2 doesn't work
+{
+  qx.dom.StyleSheet.addRule = function(vSheet, vSelector, vStyle) {
+    if (!vSheet._qxRules) {
+      vSheet._qxRules = {};
+    }
+    if (!vSheet._qxRules[vSelector]) {
+      var ruleNode = document.createTextNode(vSelector + "{" + vStyle + "}");
+      vSheet.ownerNode.appendChild(ruleNode);
+      vSheet._qxRules[vSelector] = ruleNode;
+    }
+  };
+}
+else // FF, Opera
+{
+  qx.dom.StyleSheet.addRule = function(vSheet, vSelector, vStyle) {
+    vSheet.insertRule(vSelector + "{" + vStyle + "}", vSheet.cssRules.length);
+  };
+}
+
+
+/**
+ * remove a CSS rule from a stylesheet
+ *
+ * @param vSheet     {Object} the Stylesheet
+ * @param vSelector {string} the Selector of the rule to remove
+ */
+qx.dom.StyleSheet.removeRule = function(vSheet, vSelector) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.removeRule = function(vSheet, vSelector)
+  {
+    var vRules = vSheet.rules;
+    var vLength = vRules.length;
+
+    for (var i=vLength-1; i>=0; i--)
+    {
+      if (vRules[i].selectorText == vSelector) {
+        vSheet.removeRule(i);
+      }
+    }
+  }
+}
+else if (qx.sys.Client.getInstance().isSafari2()) // removeRule in Safari 2 doesn't work
+{
+  qx.dom.StyleSheet.removeRule = function(vSheet, vSelector)
+  {
+    var warn = function() {
+      qx.dev.log.Logger.ROOT_LOGGER.warn("In Safari/Webkit you can only remove rules that are created using qx.dom.StyleSheet.addRule");
+    }
+    if (!vSheet._qxRules) {
+      warn();
+    }
+    var ruleNode = vSheet._qxRules[vSelector];
+    if (ruleNode) {
+      vSheet.ownerNode.removeChild(ruleNode);
+      vSheet._qxRules[vSelector] = null;
+    } else {
+      warn();
+    }
+  }
+}
+else
+{
+  qx.dom.StyleSheet.removeRule = function(vSheet, vSelector)
+  {
+    var vRules = vSheet.cssRules;
+    var vLength = vRules.length;
+
+    for (var i=vLength-1; i>=0; i--)
+    {
+      if (vRules[i].selectorText == vSelector) {
+        vSheet.deleteRule(i);
+      }
+    }
+  }
+}
+
+
+/**
+ * remove all CSS rules from a stylesheet
+ *
+ * @param vSheet {Object}
+ */
+qx.dom.StyleSheet.removeAllRules = function(vSheet) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.removeAllRules = function(vSheet)
+  {
+    var vRules = vSheet.rules;
+    var vLength = vRules.length;
+
+    for (var i=vLength-1; i>=0; i--) {
+      vSheet.removeRule(i);
+    }
+  }
+}
+else if (qx.sys.Client.getInstance().isSafari2()) // removeRule in Safari 2 doesn't work
+{
+  qx.dom.StyleSheet.removeAllRules = function(vSheet)
+  {
+    var node = vSheet.ownerNode;
+    var rules = node.childNodes;
+    while (rules.length > 0) {
+      node.removeChild(rules[0]);
+    }
+  }
+}
+else // FF, etc
+{
+  qx.dom.StyleSheet.removeAllRules = function(vSheet)
+  {
+    var vRules = vSheet.cssRules;
+    var vLength = vRules.length;
+
+    for (var i=vLength-1; i>=0; i--) {
+      vSheet.deleteRule(i);
+    }
+  }
+}
+
+
+
+// TODO import functions are not working crossbrowser (Safari) !!
+// see CSS_1.html test
+
+/**
+ * add an import of an external CSS file to a stylesheet
+ * @param vSheet {Object}
+ * @param vUrl   {string}
+ */
+qx.dom.StyleSheet.addImport = function(vSheet, vUrl) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.addImport = function(vSheet, vUrl) {
+    vSheet.addImport(vUrl);
+  }
+}
+else  if (qx.sys.Client.getInstance().isSafari2()) // insertRule in Safari 2 doesn't work
+{
+  qx.dom.StyleSheet.addImport = function(vSheet, vUrl) {
+    vSheet.ownerNode.appendChild(document.createTextNode('@import "' + vUrl + '";'));
+  }
+}
+else // FF, etc
+{
+  qx.dom.StyleSheet.addImport = function(vSheet, vUrl) {
+    vSheet.insertRule('@import "' + vUrl + '";', vSheet.cssRules.length);
+  }
+}
+
+
+/**
+ * removes an import from a stylesheet
+ *
+ * @param vSheet {Object}
+ * @param vUrl    {string}  URL of the importet CSS file
+ */
+qx.dom.StyleSheet.removeImport = function(vSheet, vUrl) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.removeImport = function(vSheet, vUrl) {
+    var vImports = vSheet.imports;
+    var vLength = vImports.length;
+
+    for (var i=vLength-1; i>=0; i--) {
+      if (vImports[i].href == vUrl) {
+        vSheet.removeImport(i);
+      }
+    }
+  }
+}
+else // FF, etc
+{
+  qx.dom.StyleSheet.removeImport = function(vSheet, vUrl) {
+    var vRules = vSheet.cssRules;
+    var vLength = vRules.length;
+
+    for (var i=vLength-1; i>=0; i--) {
+      if (vRules[i].href == vUrl) {
+        vSheet.deleteRule(i);
+      }
+    }
+  }
+}
+
+
+/**
+ * remove all imports from a stylesheet
+ *
+ * @param vSheet {Object}
+ */
+qx.dom.StyleSheet.removeAllImports = function(vSheet) {};
+if (document.createStyleSheet) // IE 4+
+{
+  qx.dom.StyleSheet.removeAllImports = function(vSheet) {
+    var vImports = vSheet.imports;
+    var vLength = vImports.length;
+
+    for (var i=vLength-1; i>=0; i--) {
+      vSheet.removeImport(i);
+    }
+  }
+}
+else // FF, etc
+{
+  qx.dom.StyleSheet.removeAllImports = function(vSheet) {
+    var vRules = vSheet.cssRules;
+    var vLength = vRules.length;
+
+    for (var i=vLength-1; i>=0; i--) {
+      if (vRules[i].type == vRules[i].IMPORT_RULE) {
+        vSheet.deleteRule(i);
+      }
+    }
+  }
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Window.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Window.js
new file mode 100644
index 0000000000..21f94d1171
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Window.js
@@ -0,0 +1,102 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#require(qx.sys.Client)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Window");
+
+if (qx.sys.Client.getInstance().isMshtml())
+{
+  qx.dom.Window.getInnerWidth = function(w)
+  {
+    if (w.document.documentElement && w.document.documentElement.clientWidth)
+    {
+      return w.document.documentElement.clientWidth;
+    }
+    else if (w.document.body)
+    {
+      return w.document.body.clientWidth;
+    }
+
+    return 0;
+  }
+
+  qx.dom.Window.getInnerHeight = function(w)
+  {
+    if (w.document.documentElement && w.document.documentElement.clientHeight)
+    {
+      return w.document.documentElement.clientHeight;
+    }
+    else if (w.document.body)
+    {
+      return w.document.body.clientHeight;
+    }
+
+    return 0;
+  }
+
+  qx.dom.Window.getScrollLeft = function(w)
+  {
+    if (w.document.documentElement && w.document.documentElement.scrollLeft)
+    {
+      return w.document.documentElement.scrollLeft;
+    }
+    else if (w.document.body)
+    {
+      return w.document.body.scrollTop;
+    }
+
+    return 0;
+  }
+
+  qx.dom.Window.getScrollTop = function(w)
+  {
+    if (w.document.documentElement && w.document.documentElement.scrollTop)
+    {
+      return w.document.documentElement.scrollTop;
+    }
+    else if (w.document.body)
+    {
+      return w.document.body.scrollTop;
+    }
+
+    return 0;
+  }
+}
+else
+{
+  qx.dom.Window.getInnerWidth = function(w) {
+    return w.innerWidth;
+  }
+
+  qx.dom.Window.getInnerHeight = function(w) {
+    return w.innerHeight;
+  }
+
+  qx.dom.Window.getScrollLeft = function(w) {
+    return w.document.body.scrollLeft;
+  }
+
+  qx.dom.Window.getScrollTop = function(w) {
+    return w.document.body.scrollTop;
+  }
+}
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js
new file mode 100644
index 0000000000..d1f5ba4c22
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js
@@ -0,0 +1,846 @@
+/* ************************************************************************
+
+   qooxdoo - the new era of web development
+
+   http://qooxdoo.org
+
+   Copyright:
+     2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+   License:
+     LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+   Authors:
+     * Sebastian Werner (wpbasti)
+     * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_dragdrop)
+
+************************************************************************ */
+
+/**
+ * This manager (singleton) manage all drag and drop handling of a qx.core.Init instance.
+ *
+ * @event dragdrop {qx.event.type.DragEvent}
+ * @event dragout {qx.event.type.DragEvent}
+ * @event dragover {qx.event.type.DragEvent}
+ * @event dragmove {qx.event.type.DragEvent}
+ * @event dragstart {qx.event.type.DragEvent}
+ * @event dragend {qx.event.type.DragEvent}
+ */
+qx.OO.defineClass("qx.event.handler.DragAndDropHandler", qx.manager.object.ObjectManager,
+function()
+{
+  qx.core.Target.call(this);
+
+  this._data = {};
+  this._actions = {};
+  this._cursors = {};
+
+  var vCursor;
+  for (var vAction in this._actionNames)
+  {
+    vCursor = this._cursors[vAction] = new qx.ui.basic.Image(this._cursorPath + vAction + "." + this._cursorFormat);
+    vCursor.setZIndex(1e8);
+  }
+});
+
+qx.OO.addProperty({ name : "sourceWidget", type : "object" });
+qx.OO.addProperty({ name : "destinationWidget", type : "object" });
+qx.OO.addProperty({ name : "cursor", type : "object" });
+qx.OO.addProperty({ name : "currentAction", type : "string" });
+
+qx.Proto._actionNames =
+{
+  move : "move",
+  copy : "copy",
+  alias : "alias",
+  nodrop : "nodrop"
+}
+
+qx.Proto._cursorPath = "widget/cursors/";
+qx.Proto._cursorFormat = "gif";
+qx.Proto._lastDestinationEvent = null;
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  COMMON MODIFIER
+---------------------------------------------------------------------------
+*/
+
+qx.Proto._modifyDestinationWidget = function(propValue, propOldValue, propData)
+{
+  if (propValue)
+  {
+    propValue.dispatchEvent(new qx.event.type.DragEvent("dragdrop", this._lastDestinationEvent, propValue, this.getSourceWidget()));
+    this._lastDestinationEvent = null;
+  }
+
+  return true;
+}
+
+
+
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  DATA HANDLING
+---------------------------------------------------------------------------
+*/
+
+/*!
+Add data of mimetype.
+
+#param vMimeType[String]: A valid mimetype
+#param vData[Any]: Any value for the mimetype
+*/
+qx.Proto.addData = function(vMimeType, vData) {
+  this._data[vMimeType] = vData;
+}
+
+qx.Proto.getData = function(vMimeType) {
+  return this._data[vMimeType];
+}
+
+qx.Proto.clearData = function() {
+  this._data = {};
+}
+
+
+
+
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  MIME TYPE HANDLING
+---------------------------------------------------------------------------
+*/
+
+qx.Proto.getDropDataTypes = function()
+{
+  var vDestination = this.getDestinationWidget();
+  var vDropTypes = [];
+
+  // If there is not any destination, simple return
+  if (!vDestination) {
+    return vDropTypes;
+  }
+
+  // Search for matching mimetypes
+  var vDropDataTypes = vDestination.getDropDataTypes();
+
+  for (var i=0, l=vDropDataTypes.length; i 5 || Math.abs(e.getScreenY() - this._dragCache.startScreenY) > 5)
+    {
+      // Fire dragstart event to finally allow the above if to handle next events
+      this._dragCache.sourceWidget.dispatchEvent(new qx.event.type.DragEvent("dragstart", e, this._dragCache.sourceWidget), true);
+
+      // Update status flag
+      this._dragCache.hasFiredDragStart = true;
+
+      // Look if handler become active
+      if (this._dragCache.dragHandlerActive)
+      {
+        // Fire first user events
+        this._fireUserEvents(this._dragCache.currentDropWidget, this._dragCache.sourceWidget, e);
+
+        // Update status flags
+        this._dragCache.currentDropWidget = this._dragCache.sourceWidget;
+
+        // Activate capture for clientDocument
+        qx.ui.core.ClientDocument.getInstance().setCapture(true);
+      }
+    }
+  }
+}
+
+/*!
+Handle mouse up event. Normally this finalize the drag and drop event.
+*/
+qx.Proto._handleMouseUp = function(e)
+{
+  // Return if dragCache was not filled before
+  if (!this._dragCache) {
+    return;
+  }
+
+  if (this._dragCache.dragHandlerActive)
+  {
+    this._endDrag(this.getDropTarget(e), e);
+  }
+  else
+  {
+    // Clear drag cache
+    this._dragCache = null;
+  }
+}
+
+
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  HANDLER FOR KEY EVENTS
+---------------------------------------------------------------------------
+*/
+
+/*!
+This wraps the key events to custom handlers.
+*/
+qx.Proto.handleKeyEvent = function(e)
+{
+  if (!this._dragCache) {
+    return;
+  }
+
+  switch (e.getType())
+  {
+    case "keydown":
+      this._handleKeyDown(e);
+      return;
+
+    case "keyup":
+      this._handleKeyUp(e);
+      return;
+  }
+}
+
+qx.Proto._handleKeyDown = function(e)
+{
+  // Stop Drag on Escape
+  if (e.getKeyIdentifier() == "Escape")
+  {
+    this.cancelDrag(e);
+  }
+
+  // Update cursor and action on press of modifier keys
+  else if (this.getCurrentAction() != null)
+  {
+    // TODO this doesn't work in WebKit because WebKit doesn't fire keyevents for modifier keys
+    switch(e.getKeyIdentifier())
+    {
+      case "Shift":
+      case "Control":
+      case "Alt":
+        this.setAction(this._evalNewAction(e.getShiftKey(), e.getCtrlKey(), e.getAltKey()));
+        this._renderCursor();
+
+        e.preventDefault();
+    }
+  }
+}
+
+qx.Proto._handleKeyUp = function(e)
+{
+  // TODO this doesn't work in WebKit because WebKit doesn't fire keyevents for modifier keys
+  var bShiftPressed = e.getKeyIdentifier() == "Shift";
+  var bCtrlPressed = e.getKeyIdentifier() == "Control";
+  var bAltPressed = e.getKeyIdentifier() == "Alt";
+
+  if (bShiftPressed || bCtrlPressed || bAltPressed)
+  {
+    if (this.getCurrentAction() != null)
+    {
+      this.setAction(this._evalNewAction(!bShiftPressed && e.getShiftKey(), ! bCtrlPressed && e.getCtrlKey(), !bAltPressed && e.getAltKey()));
+      this._renderCursor();
+
+      e.preventDefault();
+    }
+  }
+}
+
+
+
+
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  IMPLEMENTATION OF DRAG&DROP SESSION FINALISATION
+---------------------------------------------------------------------------
+*/
+
+/*!
+  Cancel current drag and drop session
+*/
+qx.Proto.cancelDrag = function(e) {
+  this._endDrag(null, e);
+}
+
+qx.Proto.globalCancelDrag = function()
+{
+  if (this._dragCache && this._dragCache.dragHandlerActive) {
+    this._endDragCore();
+  }
+}
+
+/*!
+  This will be called to the end of each drag and drop session
+*/
+qx.Proto._endDrag = function(currentDestinationWidget, e)
+{
+  // Use given destination widget
+  if (currentDestinationWidget)
+  {
+    this._lastDestinationEvent = e;
+    this.setDestinationWidget(currentDestinationWidget);
+  }
+
+  // Dispatch dragend event
+  this.getSourceWidget().dispatchEvent(new qx.event.type.DragEvent("dragend", e, this.getSourceWidget(), currentDestinationWidget), true);
+
+  // Fire dragout event
+  this._fireUserEvents(this._dragCache && this._dragCache.currentDropWidget, null, e);
+
+  // Call helper
+  this._endDragCore();
+}
+
+qx.Proto._endDragCore = function()
+{
+  // Remove cursor
+  var oldCursor = this.getCursor();
+  if (oldCursor)
+  {
+    oldCursor._style.display = "none";
+    this.forceCursor(null);
+  }
+
+  // Reset drag cache for next drag and drop session
+  if (this._dragCache)
+  {
+    this._dragCache.currentDropWidget = null;
+    this._dragCache = null;
+  }
+
+  // Deactivate capture for clientDocument
+  qx.ui.core.ClientDocument.getInstance().setCapture(false);
+
+  // Cleanup data and actions
+  this.clearData();
+  this.clearActions();
+
+  // Cleanup widgets
+  this.setSourceWidget(null);
+  this.setDestinationWidget(null);
+}
+
+
+
+
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  IMPLEMENTATION OF CURSOR UPDATES
+---------------------------------------------------------------------------
+*/
+
+/*!
+  Select and setup the current used cursor
+*/
+qx.Proto._renderCursor = function()
+{
+  var vNewCursor;
+  var vOldCursor = this.getCursor();
+
+  switch(this.getCurrentAction())
+  {
+    case this._actionNames.move:
+      vNewCursor = this._cursors.move;
+      break;
+
+    case this._actionNames.copy:
+      vNewCursor = this._cursors.copy;
+      break;
+
+    case this._actionNames.alias:
+      vNewCursor = this._cursors.alias;
+      break;
+
+    default:
+      vNewCursor = this._cursors.nodrop;
+  }
+
+  // Hide old cursor
+  if (vNewCursor != vOldCursor && vOldCursor != null) {
+    vOldCursor._style.display = "none";
+  }
+
+  // Ensure that the cursor is created
+  if (!vNewCursor._initialLayoutDone)
+  {
+    qx.ui.core.ClientDocument.getInstance().add(vNewCursor);
+    qx.ui.core.Widget.flushGlobalQueues();
+  }
+
+  // Apply position with runtime style (fastest qooxdoo method)
+  vNewCursor._applyRuntimeLeft(this._dragCache.pageX + 5);
+  vNewCursor._applyRuntimeTop(this._dragCache.pageY + 15);
+
+  // Finally show new cursor
+  if (vNewCursor != vOldCursor) {
+    vNewCursor._style.display = "";
+  }
+
+  // Store new cursor
+  this.forceCursor(vNewCursor);
+}
+
+
+
+
+
+
+
+
+/*
+---------------------------------------------------------------------------
+  IMPLEMENTATION OF DROP TARGET VALIDATION
+---------------------------------------------------------------------------
+*/
+
+qx.Proto.supportsDrop = function(vWidget)
+{
+  var vTypes = vWidget.getDropDataTypes();
+
+  if (!vTypes) {
+    return false;
+  }
+
+  for (var i=0; i