You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(10) |
Jul
(24) |
Aug
(93) |
Sep
(261) |
Oct
(257) |
Nov
(218) |
Dec
(95) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(184) |
Feb
(87) |
Mar
(155) |
Apr
(398) |
May
(201) |
Jun
(35) |
Jul
(68) |
Aug
(92) |
Sep
(52) |
Oct
(111) |
Nov
(135) |
Dec
(116) |
2009 |
Jan
(225) |
Feb
(204) |
Mar
(113) |
Apr
(137) |
May
(220) |
Jun
(199) |
Jul
(196) |
Aug
(98) |
Sep
(100) |
Oct
(179) |
Nov
(164) |
Dec
(72) |
2010 |
Jan
(59) |
Feb
(61) |
Mar
(64) |
Apr
(159) |
May
(107) |
Jun
(252) |
Jul
(180) |
Aug
(96) |
Sep
(82) |
Oct
(58) |
Nov
(43) |
Dec
(53) |
2011 |
Jan
(39) |
Feb
(18) |
Mar
(33) |
Apr
(66) |
May
(48) |
Jun
(124) |
Jul
(112) |
Aug
(62) |
Sep
(45) |
Oct
(102) |
Nov
(47) |
Dec
(37) |
2012 |
Jan
(22) |
Feb
(18) |
Mar
(1) |
Apr
(5) |
May
(18) |
Jun
(13) |
Jul
(9) |
Aug
(38) |
Sep
(3) |
Oct
(7) |
Nov
(24) |
Dec
(6) |
2013 |
Jan
(1) |
Feb
(14) |
Mar
(1) |
Apr
(2) |
May
(3) |
Jun
(4) |
Jul
(9) |
Aug
(4) |
Sep
(7) |
Oct
|
Nov
(1) |
Dec
(4) |
2014 |
Jan
(9) |
Feb
(2) |
Mar
|
Apr
|
May
(4) |
Jun
(2) |
Jul
|
Aug
|
Sep
(6) |
Oct
|
Nov
(1) |
Dec
|
2015 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <de...@us...> - 2011-07-27 20:03:03
|
Revision: 21355 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21355&view=rev Author: derrell Date: 2011-07-27 20:02:57 +0000 (Wed, 27 Jul 2011) Log Message: ----------- qx.lang.Type.getClass() fails to identify null and undefined in Rhino Modified Paths: -------------- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/appengine/Dbif.js Modified: trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/appengine/Dbif.js =================================================================== --- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/appengine/Dbif.js 2011-07-27 18:24:29 UTC (rev 21354) +++ trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/appengine/Dbif.js 2011-07-27 20:02:57 UTC (rev 21355) @@ -384,10 +384,17 @@ fields = entity.getDatabaseProperties().fields; // If there's no key yet... - switch(qx.lang.Type.getClass(key)) + + // Note: Rhino (and thus App Engine which uses Rhino-compiled code) + // causes "global" to returned by qx.lang.Type.getClass(key) if key is + // null or undefined. Without knowing whether it returns "global" in any + // other case, we test for those two cases explicitly. + switch(key === null || key === undefined + ? "Null" + : qx.lang.Type.getClass(key)) { - case "Undefined": case "Null": + case "Undefined": // Never occurs due to explicit test above // Generate a new key. Determine what type of key to use. switch(fields[keyProperty]) { @@ -421,6 +428,9 @@ case "String": // nothing special to do break; + + default: + break; } // Create the database key value This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-27 18:24:38
|
Revision: 21354 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21354&view=rev Author: spackers Date: 2011-07-27 18:24:29 +0000 (Wed, 27 Jul 2011) Log Message: ----------- first release of file-uploader contrib Added Paths: ----------- trunk/qooxdoo-contrib/file-uploader/trunk/Manifest.json trunk/qooxdoo-contrib/file-uploader/trunk/config.json trunk/qooxdoo-contrib/file-uploader/trunk/generate.py trunk/qooxdoo-contrib/file-uploader/trunk/readme.txt trunk/qooxdoo-contrib/file-uploader/trunk/source/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/AbstractHandler.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Application.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/File.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/FormHandler.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/MUploadButton.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/UploadButton.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Uploader.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/XhrHandler.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/simulation/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/simulation/DemoSimulation.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/test/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/test/DemoTest.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Appearance.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Color.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Decoration.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Font.js trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Theme.js trunk/qooxdoo-contrib/file-uploader/trunk/source/index.html trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/ trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/ trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/zenesis/ trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/zenesis/qx/ trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/zenesis/qx/upload/ trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/zenesis/qx/upload/test.png trunk/qooxdoo-contrib/file-uploader/trunk/source/script/ trunk/qooxdoo-contrib/file-uploader/trunk/source/script/uploader.js trunk/qooxdoo-contrib/file-uploader/trunk/source/translation/ trunk/qooxdoo-contrib/file-uploader/trunk/source/translation/readme.txt Added: trunk/qooxdoo-contrib/file-uploader/trunk/Manifest.json =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/Manifest.json (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/Manifest.json 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,34 @@ +{ + "info" : + { + "name" : "com.zenesis.qx.upload", + + "summary" : "Uploader widget", + "description" : "Library for uploading files, with progress feedback and doesn't block UI", + + "homepage" : "http://www.zeensis.com/", + + "license" : "LGPL and EPL (see http://qooxdoo.org)", + "authors" : + [ + { + "name" : "John Spackman", + "email" : "joh...@ze..." + } + ], + + "version" : "trunk", + "qooxdoo-versions": ["1.5"] + }, + + "provides" : + { + "namespace" : "com.zenesis.qx.upload", + "encoding" : "utf-8", + "class" : "source/class", + "resource" : "source/resource", + "translation" : "source/translation", + "type" : "application" + } +} + Added: trunk/qooxdoo-contrib/file-uploader/trunk/config.json =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/config.json (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/config.json 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,85 @@ +{ + "name" : "com.zenesis.qx.upload", + + "include" : + [ + { + "path" : "${QOOXDOO_PATH}/tool/data/config/application.json" + } + ], + + "export" : + [ + "api", + "api-data", + "build", + "clean", + "distclean", + "fix", + "info", + "inspector", + "lint", + "migration", + "pretty", + "profiling", + "source", + "source-all", + "source-hybrid", + "simulation-build", + "simulation-run", + "test", + "test-source", + "translation" + ], + + "default-job" : "source", + + "let" : + { + "APPLICATION" : "com.zenesis.qx.upload", + "QOOXDOO_PATH" : "../../../../../../Local/WebContent/public/grasshopper/qooxdoo-1.5-sdk", + "QXTHEME" : "com.zenesis.qx.upload.theme.Theme", + "API_EXCLUDE" : ["qx.test.*", "${APPLICATION}.theme.*", "${APPLICATION}.test.*", "${APPLICATION}.simulation.*"], + "LOCALES" : [ "en" ], + "CACHE" : "${TMPDIR}/qx${QOOXDOO_VERSION}/cache", + "ROOT" : "." + }, + + // You only need to edit the remainder of this file, if you want to customize + // specific jobs, or add own job definitions. + + "jobs" : + { + // Uncomment the following entry to add a contrib or library to your + // project; make sure to adapt the path to the Manifest.json; if you are + // using a contrib: library, it will be downloaded into the path specified + // by the 'cache/downloads' config key + /* + "libraries" : + { + "library" : + [ + { + "manifest" : "contrib://SkeletonApplication/trunk/Manifest.json" + } + ] + } + */ + + // If you want to tweak a job setting, see the following sample where + // the "format" feature of the "build-script" job is overridden. + // To see a list of available jobs, invoke 'generate.py x'. + /* + ,"build-script" : + { + "compile-options" : + { + "code" : + { + "format" : false + } + } + } + */ + } +} Added: trunk/qooxdoo-contrib/file-uploader/trunk/generate.py =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/generate.py (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/generate.py 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,72 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2008 - 2010 1&1 Internet AG, Germany, http://www.1und1.de +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Thomas Herchenroeder (thron7) +# +################################################################################ + +## +# This is a stub proxy for the real generator.py +## + +import sys, os, re, subprocess + +CMD_PYTHON = sys.executable +QOOXDOO_PATH = '../../../../../../Local/WebContent/public/grasshopper/qooxdoo-1.5-sdk' + +def getQxPath(): + path = QOOXDOO_PATH + # try updating from config file + if os.path.exists('config.json'): + # "using QOOXDOO_PATH from config.json" + qpathr=re.compile(r'"QOOXDOO_PATH"\s*:\s*"([^"]*)"\s*,?') + conffile = open('config.json') + aconffile = conffile.readlines() + for line in aconffile: + mo = qpathr.search(line) + if mo: + path = mo.group(1) + break # assume first occurrence is ok + path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), path)) + + return path + +os.chdir(os.path.dirname(os.path.abspath(sys.argv[0]))) # switch to skeleton dir +qxpath = getQxPath() +REAL_GENERATOR = os.path.join(qxpath, 'tool', 'bin', 'generator.py') + +if not os.path.exists(REAL_GENERATOR): + print "Cannot find real generator script under: \"%s\"; aborting" % REAL_GENERATOR + sys.exit(1) + +argList = [] +argList.append(CMD_PYTHON) +argList.append(REAL_GENERATOR) +argList.extend(sys.argv[1:]) +if sys.platform == "win32": + argList1=[] + for arg in argList: + if arg.find(' ')>-1: + argList1.append('"%s"' % arg) + else: + argList1.append(arg) + argList = argList1 +else: + argList = ['"%s"' % x for x in argList] # quote argv elements + +cmd = " ".join(argList) +retval = subprocess.call(cmd, shell=True) +sys.exit(retval) Property changes on: trunk/qooxdoo-contrib/file-uploader/trunk/generate.py ___________________________________________________________________ Added: svn:executable + * Added: trunk/qooxdoo-contrib/file-uploader/trunk/readme.txt =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/readme.txt (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/readme.txt 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,10 @@ +GUI Skeleton - A qooxdoo Application Template +============================================= + +This is a qooxdoo application skeleton which is used as a template. The +'create-application.py' script (usually under tool/bin/create-application.py) +will use this and expand it into a self-contained qooxdoo application which +can then be further extended. Please refer to the script and other documentation +for further information. + +short:: is a standard qooxdoo GUI application \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/AbstractHandler.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/AbstractHandler.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/AbstractHandler.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,237 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * Base class for upload implementations; operates a queue of pending and + * current uploads, and restricts the number of simultaneous uploads. + */ +qx.Class.define("com.zenesis.qx.upload.AbstractHandler", { + extend: qx.core.Object, + + /** + * Constructor + * @param uploader {com.zenesis.qx.upload.Uploader} controller for uploading + */ + construct: function(uploader) { + this.base(arguments); + qx.core.Assert.assertNotNull(uploader); + this.__queue = []; + this.__current = []; + this.__params = {}; + this.__uploader = uploader; + }, + + properties: { + /** + * Maximum number of simultaneous uploads + */ + maxConnections: { + check: "Integer", + init: 5, + nullable: false, + event: "changeMaxConnections" + } + }, + + members: { + // Last unique ID used + __lastId: 0, + + // Uploader instance + __uploader: null, + + // Queue of com.zenesis.qx.upload.File's to send + __queue: null, + + // List of com.zenesis.qx.upload.File's currently being sent + __current: null, + + // Parameters to post with the file + __params: null, + + /** + * Adds a file to the upload queue; this does not start uploading until + * beginUploads is called. + * @param input {DOM} either one input[type=file] or an array of input[type=file] + */ + addFile: function(input) { + var files = this._createFile(input); + if (!qx.lang.Type.isArray(files)) + this._addFile(files); + else + for (var i = 0; i < files.length; i++) + this._addFile(files[i]); + }, + + /** + * Adds a file to the outbound queue + * @param file {com.zenesis.qx.upload.File} the file to add + */ + _addFile: function(file) { + this.__queue.push(file); + this.__uploader.fireDataEvent("addFile", file); + }, + + /** + * Begins spooling uploads to the server, up to the maxConnections + */ + beginUploads: function() { + while (this.__queue.length > 0 && this.__current.length < this.getMaxConnections()) { + var file = this.__queue.shift(); + this.__current.push(file); + this.__uploader.fireDataEvent("beginUpload", file); + file.setState("uploading"); + this._doUpload(file); + } + }, + + /** + * Cancels a file + * @param file {com.zenesis.qx.upload.File} the file to cancel + */ + cancel: function(file) { + this.debug("cancelled: id=" + file.getId() + ", fileName=" + file.getFilename()); + var inCurrent = false; + for (var current = this.__current, i = 0; i < current.length; i++) + if (current[i] == file) { + current.splice(i, 1); + inCurrent = true; + break; + } + if (inCurrent) { + this._cancel(file); + } else { + for (var queue = this.__queue, i = 0; i < queue.length; i++) + if (queue[i] == file) { + queue.splice(i, 1); + break; + } + } + this.beginUploads(); + }, + + /** + * Cancels all uploads + */ + cancelAll: function() { + for (var current = this.__current, i = 0; i < current.length; i++) + this._cancel(current[i]); + this.__current.splice(0, this.__current.length); + this.__queue.splice(0, this.__queue.length); + }, + + /** + * Cancels a file + * @param file {com.zenesis.qx.upload.File} the file to cancel + */ + _cancel: function(file) { + file.setState("cancelled"); + this._doCancel(file); + this.__uploader.fireDataEvent("cancelUpload", file); + }, + + /** + * Called by derived classes when a file has completed + * @param file {com.zenesis.qx.upload.File} the file which has finsihed uploading + * @param response + */ + _onCompleted: function(file, response) { + this.debug("completed: id=" + file.getId() + ", fileName=" + file.getFilename() + ", response=" + response); + var current = this.__current; + for (var i = 0; i < current.length; i++) + if (current[i] == file) { + current.splice(i, 1); + break; + } + + // File state should be uploading or cancelled + if (file.getState() == "uploading") { + file.setState("uploaded"); + this.__uploader.fireDataEvent("completeUpload", file); + } + + // Start the next one + this.beginUploads(); + }, + + /** + * Returns the uploader + * @returns {com.zenesis.qx.upload.Uploader} + */ + _getUploader: function() { + return this.__uploader; + }, + + /** + * Allocates a unique ID + * @returns {Number} + */ + _getUniqueFileId: function() { + return ++this.__lastId; + }, + + /** + * Adds a parameter to send to the client + * @param key {String} the name of the parameter + * @param value {String} the value of the parameter + */ + addParam: function(key, value) { + this.__params[key] = value; + }, + + /** + * Returns the paramaters map + * @returns {Map} + */ + getParams: function() { + return this.__params; + }, + + /** + * Implementation must create a com.zenesis.qx.upload.File or array of com.zenesis.qx.upload.File + * @param input {DOM} the DOM input[type=file] + * @return {com.zenesis.qx.upload.File|com.zenesis.qx.upload.File[]} + */ + _createFile: function(input) { + /* abstract */ + }, + + /** + * Called to do the real work of uploading the file + * @param file {com.zenesis.qx.upload.File} + */ + _doUpload: function(file) { + /* abstract */ + }, + + /** + * Called to cancel the upload + * @param file {com.zenesis.qx.upload.File} file to cancel uploading + */ + _doCancel: function(file) { + /* abstract */ + } + + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Application.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Application.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Application.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,154 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/* ************************************************************************ + + #asset(com/zenesis/qx/upload/*) +#asset(qx/icon/Oxygen/22/actions/*) + + ************************************************************************ */ + +/** + * This is the main application class of your custom application "com.zenesis.qx.upload" + */ +qx.Class.define("com.zenesis.qx.upload.Application", { + extend : qx.application.Standalone, + + /* + * **************************************************************************** + * MEMBERS + * **************************************************************************** + */ + + members : { + /** + * This method contains the initial application code and gets called + * during startup of the application + * + * @lint ignoreDeprecated(alert) + */ + main : function() { + // Call super class + this.base(arguments); + + // Enable logging in debug variant + if (qx.core.Environment.get("qx.debug")) { + // support native logging capabilities, e.g. Firebug for Firefox + qx.log.appender.Native; + // support additional cross-browser console. Press F7 to toggle + // visibility + qx.log.appender.Console; + } + + /* + * ------------------------------------------------------------------------- + * Below is your actual application code... + * ------------------------------------------------------------------------- + */ + // Document is the application root + var doc = this.getRoot(); + + var btn = new com.zenesis.qx.upload.UploadButton("Add File(s)", "com/zenesis/qx/upload/test.png"); + var lst = new qx.ui.form.List(); + + /* + * Uploader controls the upload process; btn is the widget that will have the input[type=file] + * attached, and "/demoupload" is the path files will be uploaded to (i.e. it's the value used + * for the form's action attribute) + */ + var uploader = new com.zenesis.qx.upload.Uploader(btn, "/demoupload"); + uploader.addListener("addFile", function(evt) { + var file = evt.getData(), + item = new qx.ui.form.ListItem(file.getFilename(), null, file); + lst.add(item); + + // On modern browsers (ie not IE) we will get progress updates + var listenerId = file.addListener("changeProgress", function(evt) { + this.debug("Upload " + file.getFilename() + ": " + evt.getData() + " / " + file.getSize() + " - " + + Math.round(evt.getData() / file.getSize() * 100) + "%"); + item.setLabel(file.getFilename() + ": " + evt.getData() + " / " + file.getSize() + " - " + + Math.round(evt.getData() / file.getSize() * 100) + "%"); + }, this); + + // All browsers can at least get changes in state (ie "uploading", "cancelled", and "uploaded") + file.addListener("changeState", function(evt) { + var state = evt.getData(); + + this.debug(file.getFilename() + ": state=" + state + ", file size=" + file.getSize() + ", progress=" + file.getProgress()); + + if (state == "uploading") + item.setLabel(file.getFilename() + " (Uploading...)"); + else if (state == "uploaded") + item.setLabel(file.getFilename() + " (Complete)"); + else if (state == "cancelled") + item.setLabel(file.getFilename() + " (Cancelled)"); + + if (state == "uploaded" || state == "cancelled") + file.removeListenerById(listenerId); + + }, this); + + this.debug("Added file " + file.getFilename()); + }, this); + + doc.add(btn, { left: 50, top: 50 }); + + /* + * Create a button to cancel the upload selected in the list + */ + var btnCancel = new qx.ui.form.Button("Cancel download", "qx/icon/Oxygen/22/actions/process-stop.png"); + btnCancel.set({ enabled: false }); + lst.addListener("changeSelection", function(evt) { + var sel = evt.getData(), + item = sel.length ? sel[0] : null, + file = item ? item.getModel() : null; + btnCancel.setEnabled(file != null && file.getState() == "uploading"); + }, this); + btnCancel.addListener("execute", function(evt) { + var sel = lst.getSelection(), + item = sel[0], + file = item.getModel(); + if (file.getState() == "uploading") + uploader.cancel(file); + }, this); + + /* + * Auto upload? (default=true) + */ + var cbx = new qx.ui.form.CheckBox("Automatically Upload"); + cbx.setValue(true); + cbx.addListener("changeValue", function(evt) { + uploader.setAutoUpload(evt.getData()); + }, this); + + /* + * add them to the UI + */ + lst.set({ width: 350 }); + doc.add(cbx, { left: 170, top: 50 }); + doc.add(lst, { left: 170, top: 65 }); + doc.add(btnCancel, { left: 540, top: 50 }); + } + } +}); Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/File.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/File.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/File.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,124 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * Represents a file that is to be or has been uploaded; this should be instantiated + * by the _createFile method of AbstractHandler implementations and is not expected + * to be used separately + */ +qx.Class.define("com.zenesis.qx.upload.File", { + extend: qx.core.Object, + + /** + * Constructor + * @param browserObject {DOM} Anythign the AbstractHandler wants to store, typically an input[type=file] or a File + * @param filename {String} the name of the file + * @param id {String} the unique id of the file + */ + construct: function(browserObject, filename, id) { + this.base(arguments); + qx.core.Assert.assertNotNull(browserObject); + qx.core.Assert.assertNotNull(filename); + qx.core.Assert.assertNotNull(id); + this.__browserObject = browserObject; + this.setFilename(filename); + this.setId(id); + }, + + properties: { + /** + * The filename + */ + filename: { + check: "String", + nullable: false, + event: "changeFilename" + }, + + /** + * A unique ID for the upload + */ + id: { + check: "String", + nullable: false, + event: "changeId" + }, + + /** + * Size of the file, if known (not available on older browsers) + */ + size: { + check: "Integer", + nullable: false, + init: -1, + event: "changeSize" + }, + + /** + * Progress of the upload, if known (not available on older browsers) + */ + progress: { + check: "Integer", + nullable: false, + init: 0, + event: "changeProgress" + }, + + /** + * State of the file, re: uploading + */ + state: { + check: [ "not-started", "uploading", "cancelled", "uploaded" ], + nullable: false, + init: "not-started", + event: "changeState", + apply: "_applyState" + } + }, + + members: { + __browserObject: null, + + /** + * Returns the browser object + * @returns {DOM} + */ + getBrowserObject: function() { + return this.__browserObject; + }, + + /** + * Called for changes to the state + * @param value + * @param oldValue + */ + _applyState: function(value, oldValue) { + qx.core.Assert.assertTrue( + (!oldValue && value == "not-started") || + (oldValue == "not-started" && value == "uploading") || + (oldValue == "uploading" && (value == "cancelled" || value == "uploaded")) + ); + } + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/FormHandler.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/FormHandler.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/FormHandler.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,191 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Parts of this code is based on the work by Andrew Valums (an...@va...) + and is covered by the GNU GPL and GNU LGPL2 licenses; please see + http://valums.com/ajax-upload/. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * Implementation of AbstractHandler that uses iframe and form DOM elements + * to send the file. + */ + +qx.Class.define("com.zenesis.qx.upload.FormHandler", { + extend: com.zenesis.qx.upload.AbstractHandler, + + members: { + + /* + * @Override + */ + _createFile: function(input) { + var id = "upload-" + this._getUniqueFileId(), + filename = input.value.replace(/.*(\/|\\)/, ""), + file = new com.zenesis.qx.upload.File(input, filename, id); + return file; + }, + + /* + * @Override + */ + _doUpload: function(file) { + var iframe = this._createIframe(file.getId()), + form = this._createForm(iframe, file.getId()); + + form.appendChild(file.getBrowserObject()); + + var self = this; + + qx.bom.Event.addNativeListener(iframe, "load", function(evt) { + // when we remove iframe from dom the request stops, but in IE load event fires + if (!iframe.parentNode) + return; + + // fixing Opera 10.53 + if (iframe.contentDocument && iframe.contentDocument.body && + iframe.contentDocument.body.innerHTML == "false") { + // In Opera event is fired second time when body.innerHTML changed from false + // to server response approx. after 1 sec when we upload file with iframe + return; + } + + self.debug('iframe loaded'); + + var response = self._getIframeContentJSON(iframe); + + self._onCompleted(file, response); + + // timeout added to fix busy state in FF3.6 + setTimeout(function(){ + iframe.parentNode.removeChild(iframe); + form.parentNode.removeChild(form); + }, 1); + }); + form.submit(); + }, + + /* + * @Override + */ + _doCancel: function(file) { + var data = file.getUserData("com.zenesis.qx.upload.FormHandler"); + if (!data) + return; + var iframe = document.getElementById("upload-iframe-" + file.getId()), + form = document.getElementById("upload-form-" + file.getId()); + + if (iframe != null) { + // to cancel request set src to something else + // we use src="javascript:false;" because it doesn't + // trigger ie6 prompt on https + iframe.setAttribute('src', 'javascript:false;'); + iframe.parentNode.removeChild(iframe); + } + if (form != null) + form.parentNode.removeChild(form); + }, + + /** + * Returns json object received by iframe from server. + * @return {Object} + */ + _getIframeContentJSON: function(iframe){ + // iframe.contentWindow.document - for IE<7 + var doc = iframe.contentDocument ? iframe.contentDocument: iframe.contentWindow.document, + response; + + this.debug("converting iframe's innerHTML to JSON"); + this.debug("innerHTML = " + doc.body.innerHTML); + + try { + response = eval("(" + doc.body.innerHTML + ")"); + } catch(err){ + response = {}; + } + + return response; + }, + + /** + * Creates iframe with unique name + * @return {DOMElement} the iframe + */ + _createIframe: function(id){ + // We can't use following code as the name attribute + // won't be properly registered in IE6, and new window + // on form submit will open + // var iframe = document.createElement('iframe'); + // iframe.setAttribute('name', id); + + var iframe = qx.bom.Element.create("iframe", { + src: "javascript:false;", // src="javascript:false;" removes ie6 prompt on https + name: id, + id: "upload-iframe-" + id + }); + + qx.bom.element.Style.setStyles(iframe, { + display: 'none' + }); + document.body.appendChild(iframe); + + return iframe; + }, + + /** + * Creates form, that will be submitted to iframe + * @return {DOMElement} the form + */ + _createForm: function(iframe, id){ + // We can't use the following code in IE6 + // var form = document.createElement('form'); + // form.setAttribute('method', 'post'); + // form.setAttribute('enctype', 'multipart/form-data'); + // Because in this case file won't be attached to request + var form = qx.bom.Element.create("form", { + enctype: "multipart/form-data", + encoding: "multipart/form-data", + action: this._getUploader().getUploadUrl(), + method: "POST", + target: iframe.name, + id: "upload-form-" + id + }); + + qx.bom.element.Style.setStyles(form, { + display: 'none' + }); + var params = this.getParams(); + for (var name in params) { + var el = qx.bom.Element.create('input', { + type: "hidden", + value: params[name] + }); + form.appendChild(el); + } + document.body.appendChild(form); + + return form; + } + + } +}); Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/MUploadButton.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/MUploadButton.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/MUploadButton.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,38 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * This mixin provides a trivial way to make any widget suitable as a widget + * for Uploader - the only trick is that the capture and releaseCapture methods + * in qx.ui.core.Widget must not be fired. + */ +qx.Mixin.define("com.zenesis.qx.upload.MUploadButton", { + members: { + // overridden + capture : qx.lang.Function.empty, + + // overridden + releaseCapture : qx.lang.Function.empty + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/UploadButton.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/UploadButton.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/UploadButton.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,35 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * Implementation of an UploadButton + */ +qx.Class.define("com.zenesis.qx.upload.UploadButton", { + extend: qx.ui.form.Button, + include: [ com.zenesis.qx.upload.MUploadButton ], + + members: { + + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Uploader.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Uploader.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/Uploader.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,259 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * Manages uploading of files to the server; this class can use any suitable + * widget to attach the input[type=file] to, provided the widget includes + * com.zenesis.qx.upload.MUploadButton. + * + * Uploader will use XhrHandler to upload via XMLHttpRequest if supported or + * will fall back to FormHandler. + */ +qx.Class.define("com.zenesis.qx.upload.Uploader", { + extend: qx.core.Object, + + construct: function(widget, uploadUrl) { + this.base(arguments); + if (widget) + this.setWidget(widget); + if (uploadUrl) + this.setUploadUrl(uploadUrl); + if (com.zenesis.qx.upload.XhrHandler.isSupported()) + this.__uploadHandler = new com.zenesis.qx.upload.XhrHandler(this); + else + this.__uploadHandler = new com.zenesis.qx.upload.FormHandler(this); + }, + + events: { + /** + * Fired when a file is added to the queue; data is the com.zenesis.qx.upload.File + */ + "addFile": "qx.event.type.Data", + + /** + * Fired when a file starts to be uploaded; data is the com.zenesis.qx.upload.File + */ + "beginUpload": "qx.event.type.Data", + + /** + * Fired when a file has been uploaded; data is the com.zenesis.qx.upload.File + */ + "completeUpload": "qx.event.type.Data", + + /** + * Fired when a file upload has been cancelled; data is the com.zenesis.qx.upload.File + */ + "cancelUpload": "qx.event.type.Data" + }, + + properties: { + /** + * The widget to add the input[type=file] to; this would typically be an instance + * of com.zenesis.qx.upload.UploadButton (see com.zenesis.qx.upload.MUploadButton + * for implementing for other widgets) + */ + widget: { + check: "qx.ui.core.Widget", + init: null, + nullable: true, + apply: "_applyWidget", + event: "changeWidget" + }, + + /** + * The URL to upload to + */ + uploadUrl: { + check: "String", + nullable: false, + init: "", + event: "changeUploadUrl" + }, + + /** + * Whether to automatically start uploading when a file is added (default=true) + */ + autoUpload: { + check: "Boolean", + init: true, + nullable: false, + event: "changeAutoUpload", + apply: "_applyAutoUpload" + }, + + /** + * Whether to support multiple files (default=true); this is not supported on + * older browsers + */ + multiple: { + check: "Boolean", + init: true, + nullable: false, + event: "changeMultiple", + apply: "_applyMultiple" + } + }, + + members: { + __appearListenerId: null, + __inputElement: null, + __uploadHandler: null, + + /** + * Callback for changes to the widget property + * @param value + * @param oldValue + * @param name + */ + _applyWidget: function(value, oldValue, name) { + if (oldValue && this.__appearListenerId) { + oldValue.removeListener(this.__appearListenerId); + } + this.__appearListenerId = null; + if (value) { + this.__appearListenerId = value.addListenerOnce("appear", function(evt) { + value.getContainerElement().addAt(this._createInputElement(), 0); + }, this); + } + }, + + /** + * Callback for changes to the autoUpload property + * @param value + * @param oldValue + */ + _applyAutoUpload: function(value, oldValue) { + this.__uploadHandler.beginUploads(); + }, + + /** + * Callback for changes to the multiple property + * @param value + * @param oldValue + */ + _applyMultiple: function(value, oldValue) { + if (this.__inputElement) { + if (value) + this.__inputElement.setAttribute("multiple", "multiple"); + else + this.__inputElement.removeAttribute("multiple"); + } + }, + + /** + * Cancels a file being uploaded + * @param file + */ + cancel: function(file) { + this.__uploadHandler.cancel(file); + }, + + /** + * Cancels all files being uploaded + * @param file + */ + cancelAll: function() { + this.__uploadHandler.cancelAll(); + }, + + /** + * Creates the input[type=file] element + * @returns + */ + _createInputElement: function() { + var control; + // styling the input[type=file] + // element is a bit tricky. Some browsers just ignore the normal + // css style input. Firefox is especially tricky in this regard. + // since we are providing our one look via the underlying qooxdoo + // button anyway, all we have todo is position the ff upload + // button over the button element. This is tricky in itself + // as the ff upload button consists of a text and a button element + // which are not css accessible themselfes. So the best we can do, + // is align to the top right corner of the upload widget and set its + // font so large that it will cover even realy large underlying buttons. + var css = { + position : "absolute", + cursor : "pointer", + hideFocus : "true", + zIndex: this.getWidget().getZIndex() + 11, + opacity: 0, + // align to the top right hand corner + top: '0px', + right: '0px', + // ff ignores the width setting pick a realy large font size to get + // a huge button that covers the area of the upload button + fontFamily: 'Arial', + // from valums.com/ajax-upload: 4 persons reported this, the max values that worked for them were 243, 236, 236, 118 + fontSize: '118px' + }; + if ((qx.core.Environment && qx.core.Environment.get('browser.name') == 'ie' && qx.core.Environment.get('browser.version') < 9 ) + || ( ! qx.core.Environment && qx.bom.client.Engine.MSHTML && qx.bom.client.Engine.VERSION < 9.0)) { + css.filter = 'alpha(opacity=0)'; + css.width = '200%'; + css.height = '100%'; + } + + control = new qx.html.Element('input',css,{ + type : 'file', + name : 'myinput' + }); + if (this.getMultiple()) + control.setAttribute("multiple", "multiple"); + control.addListener("change", this._onInputChange, this); + this.__inputElement = control; + + return control; + }, + + /** + * Resets the input element - ie discards the current one (which presumably has already + * been queued for uploading) and creates a new one + */ + _resetInputElement: function() { + var el = this.__inputElement, + widget = this.getWidget(); + if (!el) + return; + el.removeListener("change", this._onInputChange, this); + widget.getContainerElement().remove(el); + widget.getContainerElement().addAt(this._createInputElement(), 0); + }, + + /** + * Callback for changes to the input[ty=file]'s value, ie this is called when the user + * has selected a file to upload + * @param evt + */ + _onInputChange: function(evt) { + var el = this.__inputElement; + this._resetInputElement(); + + this.__uploadHandler.addFile(el.getDomElement()); + if (this.getAutoUpload()) + this.__uploadHandler.beginUploads(); + this._resetInputElement(); + } + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/XhrHandler.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/XhrHandler.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/XhrHandler.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,153 @@ +/* *********************************************************************** + + com.zenesis.qx.upload contrib - provides an API for uploading one or multiple files + with progress feedback (on modern browsers), does not block the user + interface during uploads, supports cancelling uploads. + + http://qooxdoo.org + + Copyright: + 2011 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Parts of this code is based on the work by Andrew Valums (an...@va...) + and is covered by the GNU GPL and GNU LGPL2 licenses; please see + http://valums.com/ajax-upload/. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************/ + +/** + * Implementation of AbstractHandler that uses XMLHttpRequest; this is based on work + * at http://valums.com/ajax-upload/. + * + * Call com.zenesis.qx.upload.XhrHandler.isSupported() to check whether this class + * can be used (otherwise use FormHandler) + */ +qx.Class.define("com.zenesis.qx.upload.XhrHandler", { + extend: com.zenesis.qx.upload.AbstractHandler, + + members: { + /* + * @Override + */ + _createFile: function(input) { + var bomFiles = input.files; + if (!bomFiles || !bomFiles.length) + this.debug("No files found to upload via XhrHandler"); + + var files = []; + for (var i = 0; i < bomFiles.length; i++) { + var bomFile = bomFiles[i]; + var id = "upload-" + this._getUniqueFileId(), + // fix missing name in Safari 4 + filename = bomFile.fileName != null ? bomFile.fileName : bomFile.name, + file = new com.zenesis.qx.upload.File(bomFile, filename, id), + fileSize = bomFile.fileSize != null ? bomFile.fileSize : bomFile.size; + file.setSize(fileSize); + files.push(file); + } + + return files; + }, + + /* + * @Override + */ + _doUpload: function(file) { + var xhr = new XMLHttpRequest(); + var self = this; + + file.setUserData("com.zenesis.qx.upload.XhrHandler", xhr); + + xhr.upload.onprogress = function(e){ + self.debug("onprogress: lengthComputable=" + e.lengthComputable + ", total=" + e.total + ", loaded=" + e.loaded); + if (e.lengthComputable) { + file.setSize(e.total); + file.setProgress(e.loaded); + } + }; + + xhr.onreadystatechange = function(){ + if (xhr.readyState == 4) { + var response = {}; + if (xhr.status == 200){ + self.debug("xhr server responseText = " + xhr.responseText); + + try { + response = qx.lang.Json.parse(xhr.responseText); + } catch(err){ + } + } + file.setUserData("com.zenesis.qx.upload.XhrHandler", null); + self._onCompleted(file, response); + } + }; + + // build query string + var action = this._getUploader().getUploadUrl(), + params = this.getParams(), + pos = action.indexOf('?'), + addAmpersand = true; + if (pos < 0) { + action += "?"; + addAmpersand = false; + } + for (var name in params) { + if (addAmpersand) + action += "&"; + else + addAmpersand = true; + action += name + "=" + encodeUriComponent(params[name]); + } + xhr.open("POST", action, true); + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + xhr.setRequestHeader("X-File-Name", encodeURIComponent(file.getFilename())); + xhr.setRequestHeader("Content-Type", "application/octet-stream"); + xhr.send(file.getBrowserObject()); + }, + + /* + * @Override + */ + _doCancel: function(file) { + var xhr = file.getUserData("com.zenesis.qx.upload.XhrHandler"); + if (xhr) { + xhr.abort(); + file.setUserData("com.zenesis.qx.upload.XhrHandler", null); + } + } + }, + + statics: { + __isSupported: null, + + /** + * Detects whether this handler is support on the current browser + * @returns {Boolean} + */ + isSupported: function() { + if (this.__isSupported !== null) + return this.__isSupported; + + var input = document.createElement('input'); + input.type = 'file'; + + this.__isSupported = + 'multiple' in input && + typeof File != "undefined" && + typeof (new XMLHttpRequest()).upload != "undefined"; + + return this.__isSupported; + } + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/simulation/DemoSimulation.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/simulation/DemoSimulation.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/simulation/DemoSimulation.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,44 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +/** + * This class demonstrates how to define simulated interaction tests for your + * application. See the manual for details: + * {@link http://manual.qooxdoo.org/1.5/pages/development/simulator.html} + * + * @lint ignoreUndefined(simulator) + */ +qx.Class.define("com.zenesis.qx.upload.simulation.DemoSimulation", { + + extend : simulator.unit.TestCase, + + members : + { + /* + --------------------------------------------------------------------------- + TESTS + --------------------------------------------------------------------------- + */ + + /** Check if a widget is present (part of the DOM) */ + testButtonPresent : function() + { + this.assertNotNull(this.getSimulation().getWidgetOrNull("qxh=qx.ui.form.Button"), "Button widget not present!"); + }, + + /** Click a button and check if an alert box pops up */ + testButtonClick : function() + { + this.getQxSelenium().qxClick("qxh=qx.ui.form.Button"); + this.assertEquals("true", String(this.getQxSelenium().isAlertPresent())); + } + } + +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/test/DemoTest.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/test/DemoTest.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/test/DemoTest.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,55 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +/** + * This class demonstrates how to define unit tests for your application. + * + * Execute <code>generate.py test</code> to generate a testrunner application + * and open it from <tt>test/index.html</tt> + * + * The methods that contain the tests are instance methods with a + * <code>test</code> prefix. You can create an arbitrary number of test + * classes like this one. They can be organized in a regular class hierarchy, + * i.e. using deeper namespaces and a corresponding file structure within the + * <tt>test</tt> folder. + */ +qx.Class.define("com.zenesis.qx.upload.test.DemoTest", +{ + extend : qx.dev.unit.TestCase, + + members : + { + /* + --------------------------------------------------------------------------- + TESTS + --------------------------------------------------------------------------- + */ + + /** + * Here are some simple tests + */ + testSimple : function() + { + this.assertEquals(4, 3+1, "This should never fail!"); + this.assertFalse(false, "Can false be true?!"); + }, + + /** + * Here are some more advanced tests + */ + testAdvanced: function () + { + var a = 3; + var b = a; + this.assertIdentical(a, b, "A rose by any other name is still a rose"); + this.assertInRange(3, 1, 10, "You must be kidding, 3 can never be outside [1,10]!"); + } + } +}); Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Appearance.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Appearance.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Appearance.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,18 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +qx.Theme.define("com.zenesis.qx.upload.theme.Appearance", +{ + extend : qx.theme.modern.Appearance, + + appearances : + { + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Color.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Color.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Color.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,18 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +qx.Theme.define("com.zenesis.qx.upload.theme.Color", +{ + extend : qx.theme.modern.Color, + + colors : + { + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Decoration.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Decoration.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Decoration.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,18 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +qx.Theme.define("com.zenesis.qx.upload.theme.Decoration", +{ + extend : qx.theme.modern.Decoration, + + decorations : + { + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Font.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Font.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Font.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,18 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +qx.Theme.define("com.zenesis.qx.upload.theme.Font", +{ + extend : qx.theme.modern.Font, + + fonts : + { + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Theme.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Theme.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/class/com/zenesis/qx/upload/theme/Theme.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,21 @@ +/* ************************************************************************ + + Copyright: + + License: + + Authors: + +************************************************************************ */ + +qx.Theme.define("com.zenesis.qx.upload.theme.Theme", +{ + meta : + { + color : com.zenesis.qx.upload.theme.Color, + decoration : com.zenesis.qx.upload.theme.Decoration, + font : com.zenesis.qx.upload.theme.Font, + icon : qx.theme.icon.Tango, + appearance : com.zenesis.qx.upload.theme.Appearance + } +}); \ No newline at end of file Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/index.html =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/index.html (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/index.html 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>uploader</title> + <script type="text/javascript" src="script/uploader.js"></script> +</head> +<body></body> +</html> Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/zenesis/qx/upload/test.png =================================================================== (Binary files differ) Property changes on: trunk/qooxdoo-contrib/file-uploader/trunk/source/resource/com/zenesis/qx/upload/test.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/qooxdoo-contrib/file-uploader/trunk/source/script/uploader.js =================================================================== --- trunk/qooxdoo-contrib/file-uploader/trunk/source/script/uploader.js (rev 0) +++ trunk/qooxdoo-contrib/file-uploader/trunk/source/script/uploader.js 2011-07-27 18:24:29 UTC (rev 21354) @@ -0,0 +1,20 @@ +/* + * This is mock content and will be overwritten with the first 'generate.py source'. + */ +function inform(){ + var message = + "<div style='font-family: Verdana'>" + + "<h2>Application not yet ready!</h2>" + + "<div>Please use the generator ... [truncated message content] |
From: <spa...@us...> - 2011-07-27 18:21:47
|
Revision: 21353 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21353&view=rev Author: spackers Date: 2011-07-27 18:21:41 +0000 (Wed, 27 Jul 2011) Log Message: ----------- new contrib file-uploader Added Paths: ----------- trunk/qooxdoo-contrib/file-uploader/trunk/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-27 18:21:35
|
Revision: 21352 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21352&view=rev Author: spackers Date: 2011-07-27 18:21:29 +0000 (Wed, 27 Jul 2011) Log Message: ----------- new contrib file-uploader Added Paths: ----------- trunk/qooxdoo-contrib/file-uploader/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <d_w...@us...> - 2011-07-27 08:35:25
|
Revision: 21351 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21351&view=rev Author: d_wagner Date: 2011-07-27 08:35:19 +0000 (Wed, 27 Jul 2011) Log Message: ----------- Corrected version number Modified Paths: -------------- trunk/qooxdoo-contrib/DarkTheme/0.1/Manifest.json Modified: trunk/qooxdoo-contrib/DarkTheme/0.1/Manifest.json =================================================================== --- trunk/qooxdoo-contrib/DarkTheme/0.1/Manifest.json 2011-07-26 23:50:00 UTC (rev 21350) +++ trunk/qooxdoo-contrib/DarkTheme/0.1/Manifest.json 2011-07-27 08:35:19 UTC (rev 21351) @@ -17,7 +17,7 @@ } ], - "version" : "trunk", + "version" : "0.1", "qooxdoo-versions": ["1.0", "1.1", "1.2", "1.3"] }, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <de...@us...> - 2011-07-26 23:50:07
|
Revision: 21350 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21350&view=rev Author: derrell Date: 2011-07-26 23:50:00 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Add function to retrieve the parameter names to an RPC Modified Paths: -------------- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/sim/Dbif.js trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/ServerTest.js Added Paths: ----------- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/DbifSimTest.js Modified: trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/sim/Dbif.js =================================================================== --- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/sim/Dbif.js 2011-07-26 18:53:42 UTC (rev 21349) +++ trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/sim/Dbif.js 2011-07-26 23:50:00 UTC (rev 21350) @@ -465,6 +465,45 @@ this.__services[this.__rpcKey].features[serviceName] = f; }, + + /** + * Retrieve the parameter names for a registered service. + * + * @param serviceName {String} + * The name of this service within the <rpcKey>.features namespace. + * + * @return {Array|null|undefined} + * If the specified service exists and parameter names have been + * provided for it, then an array of parameter names is returned. + * + * If the service exists but no parameter names were provided in the + * registration of the service, null is returned. + * + * If the service does not exist, undefined is returned. + */ + getServiceParamNames : function(serviceName) + { + // Get the stored service function + var f = this.__services[this.__rpcKey].features[serviceName]; + + // Did we find it? + if (! f) + { + // No, it is not a registered function. + return undefined; + } + + // Were parameter names registered with the function? + if (f.parameterNames) + { + // Yup. Return a copy of the parameter name array + return qx.lang.Array.clone(f.parameterNames); + } + + // The function was registered, but not its parameter names. + return null; + }, + /** The top-level RPC key, used to index into this.__services */ __rpcKey : null, Added: trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/DbifSimTest.js =================================================================== --- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/DbifSimTest.js (rev 0) +++ trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/DbifSimTest.js 2011-07-26 23:50:00 UTC (rev 21350) @@ -0,0 +1,215 @@ +/* + * Copyright: + * 2011 Derrell Lipman + * + * License: + * LGPL: http://www.gnu.org/licenses/lgpl.html + * EPL: http://www.eclipse.org/org/documents/epl-v10.php + * See the LICENSE file in the project's top-level directory for details. + * + * Authors: + * * Derrell Lipman (derrell) + */ + + +/** + * Unit tests for the simulation database interface + */ +qx.Class.define("rpcjs.test.DbifSimTest", +{ + extend : qx.dev.unit.TestCase, + + construct : function() + { + this.base(arguments); + + this.params = {}; + + // Register our RPC services + this.params["subtract"] = [ "minuend", "subtrahend" ]; + this.registerService("subtract", + this.subtract, + this.params["subtract"]); + + this.params["sum"] = [ ]; + this.registerService("sum", + this.sum, + this.params["sum"]); + + this.params["update"] = [ "p1", "p2", "p3", "p4", "p5" ]; + this.registerService("update", + this.update, + this.params["update"]); + + this.params["hello"] = [ "p1" ]; + this.registerService("hello", + this.hello, + this.params["hello"]); + + this.params["get_data"] = [ ]; + this.registerService("get_data", + this.get_data, + this.params["get_data"]); + + // Start up our RPC server + this.__server = new rpcjs.rpc.Server( + qx.lang.Function.bind(this._serviceFactory, this)); + }, + + members : + { + /** Map of parameter name lists */ + params : null, + + /** The services map, containing each of the available RPC services */ + __services : {}, + + /** The instantiated RPC server */ + __server : null, + + /** Test getServiceParamNames */ + "test: getServiceParamNames" : function() + { + // For each function we're testing... + qx.lang.Object.getKeys(this.params).forEach( + function(funcName) + { + console.log("Checking function name " + funcName); + + // Get the expected and retrieved parameter name arrays + var expected = this.params[funcName]; + var got = this.getServiceParamNames(funcName); + + // Their lengths must be the same + this.assertEquals(expected.length, got.length, funcName); + + // For each expected parameter name... + expected.forEach( + function(paramName, i) + { + // ... assert that it matches its peer in the retrieved list + console.log("Checking param name " + paramName); + this.assertEquals(paramName, got[i], funcName + ": " + paramName); + }, + this); + }, + this); + }, + + /** + * The service factory takes a method name and attempts to produce a + * service method that corresponds to that name. + * + * @param methodName {String} + * The name of the method to be called. + * + * @param protocol {String} + * The JSON-RPC protocol being used ("qx1", "1.0", "2.0") + * + * @param error {rpcjs.rpc.error.Error} + * An error object to be set if an error is encountered in instantiating + * the requested serviced method. + * + * @return {Function} + * The service method associated with the specified method name. + */ + _serviceFactory : function(methodName, protocol, error) + { + return this.__services[methodName]; + }, + + /** + * Register a service name and function. + * + * @param serviceName {String} + * The name of this service within the <rpcKey>.features namespace. + * + * @param fService {Function} + * The function which implements the given service name. + * + * @param paramNames {Array} + * The names of the formal parameters, in order. + */ + registerService : function(serviceName, fService, paramNames) + { + var f; + + // Use this object as the context for the service + f = qx.lang.Function.bind(fService, this); + + // Save the parameter names as a property of the function object + f.parameterNames = paramNames; + + // Save the service + this.__services[serviceName] = f; + }, + + /** + * Retrieve the parameter names for a registered service. + * + * @param serviceName {String} + * The name of this service within the <rpcKey>.features namespace. + * + * @return {Array|null|undefined} + * If the specified service exists and parameter names have been + * provided for it, then an array of parameter names is returned. + * + * If the service exists but no parameter names were provided in the + * registration of the service, null is returned. + * + * If the service does not exist, undefined is returned. + */ + getServiceParamNames : function(serviceName) + { + // Get the stored service function + var f = this.__services[serviceName]; + + // Did we find it? + if (! f) + { + // No, it is not a registered function. + return undefined; + } + + // Were parameter names registered with the function? + if (f.parameterNames) + { + // Yup. Return a copy of the parameter name array + return qx.lang.Array.clone(f.parameterNames); + } + + // The function was registered, but not its parameter names. + return null; + }, + + subtract : function(minuend, subtrahend) + { + return minuend - subtrahend; + }, + + sum : function() + { + var sum = 0; + qx.lang.Array.fromArguments(arguments).forEach( + function(arg) + { + sum += arg; + }); + return sum; + }, + + update : function(p1, p2, p3, p4, p5) + { + return true; + }, + + hello : function(p1) + { + }, + + get_data : function() + { + return [ "hello", 5 ]; + } + } +}); Modified: trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/ServerTest.js =================================================================== --- trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/ServerTest.js 2011-07-26 18:53:42 UTC (rev 21349) +++ trunk/qooxdoo-contrib/RpcJs/trunk/source/class/rpcjs/test/ServerTest.js 2011-07-26 23:50:00 UTC (rev 21350) @@ -424,7 +424,18 @@ */ _serviceFactory : function(methodName, protocol, error) { - return this.__services[methodName]; + var f = this.__services[methodName]; + + if (! f) + { + error.setCode( + { + "qx1" : qx.io.remote.RpcError.qx1.error.server.MethodNotFound, + "2.0" : qx.io.remote.RpcError.v2.error.MethodNotFound + }[protocol]); + } + + return f; }, /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-26 18:53:48
|
Revision: 21349 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21349&view=rev Author: cboulanger Date: 2011-07-26 18:53:42 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Updated dragdroptree demo Modified Paths: -------------- trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/Manifest.json trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/config.json trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/source/class/dragdroptree/Application.js Modified: trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/Manifest.json =================================================================== --- trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/Manifest.json 2011-07-26 18:40:52 UTC (rev 21348) +++ trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/Manifest.json 2011-07-26 18:53:42 UTC (rev 21349) @@ -3,8 +3,8 @@ { "name" : "dragdroptree", - "summary" : "Custom Application", - "description" : "This is a skeleton for a custom application with qooxdoo.", + "summary" : "A demo for the qcl.ui.treevirtual.DragDropTree widget", + "description" : "", "homepage" : "http://some.homepage.url/", @@ -18,7 +18,7 @@ ], "version" : "trunk", - "qooxdoo-versions": ["1.2-pre"] + "qooxdoo-versions": ["1.2","1.3","1.4","1.5"] }, "provides" : Modified: trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/config.json =================================================================== --- trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/config.json 2011-07-26 18:40:52 UTC (rev 21348) +++ trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/config.json 2011-07-26 18:53:42 UTC (rev 21349) @@ -23,6 +23,7 @@ "profiling", "source", "source-all", + "source-hybrid", "test", "test-source", "translation" @@ -31,11 +32,10 @@ "let" : { "APPLICATION" : "dragdroptree", - "QOOXDOO_PATH" : "../../../../../qooxdoo-trunk", + "QOOXDOO_PATH" : "../../../../qooxdoo/1.5", "QXTHEME" : "dragdroptree.theme.Theme", "API_EXCLUDE" : ["qx.test.*", "${APPLICATION}.theme.*", "${APPLICATION}.test.*"], "LOCALES" : [ "en" ], - "CACHE" : "${TMPDIR}/cache", "ROOT" : "." }, Modified: trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/source/class/dragdroptree/Application.js =================================================================== --- trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/source/class/dragdroptree/Application.js 2011-07-26 18:40:52 UTC (rev 21348) +++ trunk/qooxdoo-contrib/qcl/trunk/demo/dragdroptree/source/class/dragdroptree/Application.js 2011-07-26 18:53:42 UTC (rev 21349) @@ -52,20 +52,10 @@ // Call super class this.base(arguments); - // Enable logging in debug variant - if (qx.core.Variant.isSet("qx.debug", "on")) - { - // support native logging capabilities, e.g. Firebug for Firefox - qx.log.appender.Native; - // support additional cross-browser console. Press F7 to toggle visibility - qx.log.appender.Console; - } - - /* - ------------------------------------------------------------------------- - Below is your actual application code... - ------------------------------------------------------------------------- - */ + // support native logging capabilities, e.g. Firebug for Firefox + qx.log.appender.Native; + // support additional cross-browser console. Press F7 to toggle visibility + qx.log.appender.Console; /* * main layout @@ -223,7 +213,7 @@ vbox.setWidth(300); hbox1.add(vbox); - label = new qx.ui.basic.Label("<h2>TreeVirtual Drag & Drop</h2>"); + var label = new qx.ui.basic.Label("<h2>TreeVirtual Drag & Drop</h2>"); label.setRich(true); vbox.add( label ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-26 18:40:58
|
Revision: 21348 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21348&view=rev Author: cboulanger Date: 2011-07-26 18:40:52 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Removing unused helloworld demo Removed Paths: ------------- trunk/qooxdoo-contrib/qcl/trunk/demo/helloworld/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-26 17:46:28
|
Revision: 21347 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21347&view=rev Author: cboulanger Date: 2011-07-26 17:46:22 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Internet Explorer is making trouble (as always) when positioning the popup, workaround with try/catch Modified Paths: -------------- trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/ui/MLoadingPopup.js Modified: trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/ui/MLoadingPopup.js =================================================================== --- trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/ui/MLoadingPopup.js 2011-07-26 11:40:40 UTC (rev 21346) +++ trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/ui/MLoadingPopup.js 2011-07-26 17:46:22 UTC (rev 21347) @@ -74,13 +74,15 @@ _centerPopup :function() { var bounds = this.__popup.getBounds(); + try{ if ( this.__target && ( "left" in this.__target.getLayoutProperties() ) ) { var l = this.__target.getLayoutProperties(); + this.__popup.placeToPoint({ left: Math.round( l.left + ( l.width / 2) - ( bounds.width / 2) ), top : Math.round( l.top + ( l.height / 2 ) - ( bounds.height / 2) ) - }); + }); } else { @@ -89,6 +91,7 @@ marginLeft : Math.round( ( qx.bom.Document.getWidth() -bounds.width) / 2) }); } + }catch(e){} }, /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2011-07-26 11:40:46
|
Revision: 21346 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21346&view=rev Author: martinwittemann Date: 2011-07-26 11:40:40 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Updated the text mate bundle: better folding. Modified Paths: -------------- trunk/qooxdoo-contrib/TextMate/trunk/qooxdoo.tmbundle/Syntaxes/JavaScript.tmLanguage Modified: trunk/qooxdoo-contrib/TextMate/trunk/qooxdoo.tmbundle/Syntaxes/JavaScript.tmLanguage =================================================================== --- trunk/qooxdoo-contrib/TextMate/trunk/qooxdoo.tmbundle/Syntaxes/JavaScript.tmLanguage 2011-07-25 18:13:45 UTC (rev 21345) +++ trunk/qooxdoo-contrib/TextMate/trunk/qooxdoo.tmbundle/Syntaxes/JavaScript.tmLanguage 2011-07-26 11:40:40 UTC (rev 21346) @@ -3,16 +3,17 @@ <plist version="1.0"> <dict> <key>comment</key> - <string>JavaScript Syntax: version 2.0</string> + <string>JavaScript Syntax, qooxdoo style</string> <key>fileTypes</key> <array> <string>js</string> <string>htc</string> + <string>jsx</string> </array> <key>foldingStartMarker</key> - <string>(^.*\bfunction\s*(\w+\s*)?\([^\)]*\)(\s*\{[^\}]*)?\s*$)|(^\s*\/\*)|(^\s*\bstatics\b\s*:)|(^\s*\bmembers\b\s*:)|(^\s*\bsettings\b\s*:)|(^\s*\bevents\b\s*:)|(^\s*\bproperties\b\s*:)|({)</string> + <string>(^.*\bfunction\s*(\w+\s*)?\([^\)]*\)|(^\s*\bstatics\b\s*:)|(^\s*\bmembers\b\s*:)|(^\s*\bsettings\b\s*:)|(^\s*\bevents\b\s*:)|(^\s*\bproperties\b\s*:))(\s*\{[^\}]*)?\s*$</string> <key>foldingStopMarker</key> - <string>(\*\/)|(^\s*\})|(})</string> + <string>^\s*\}</string> <key>keyEquivalent</key> <string>^~J</string> <key>name</key> @@ -32,11 +33,16 @@ <key>name</key> <string>support.constant.js</string> </dict> + <key>3</key> + <dict> + <key>name</key> + <string>keyword.operator.js</string> + </dict> </dict> <key>comment</key> <string>match stuff like: Sound.prototype = { … } when extending an object</string> <key>match</key> - <string>([a-zA-Z_?\.$]+\w*)\.(prototype)\s*=\s*</string> + <string>([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*(=)\s*</string> <key>name</key> <string>meta.class.js</string> </dict> @@ -61,28 +67,33 @@ <key>4</key> <dict> <key>name</key> - <string>storage.type.function.js</string> + <string>keyword.operator.js</string> </dict> <key>5</key> <dict> <key>name</key> - <string>punctuation.definition.parameters.begin.js</string> + <string>storage.type.function.js</string> </dict> <key>6</key> <dict> <key>name</key> - <string>variable.parameter.function.js</string> + <string>punctuation.definition.parameters.begin.js</string> </dict> <key>7</key> <dict> <key>name</key> + <string>variable.parameter.function.js</string> + </dict> + <key>8</key> + <dict> + <key>name</key> <string>punctuation.definition.parameters.end.js</string> </dict> </dict> <key>comment</key> <string>match stuff like: Sound.prototype.play = function() { … }</string> <key>match</key> - <string>([a-zA-Z_?\.$]+\w*)\.(prototype)\.([a-zA-Z_?\.$]+\w*)\s*=\s*(function)?\s*(\()(.*?)(\))</string> + <string>([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*(=)\s*(function)?\s*(\()(.*?)(\))</string> <key>name</key> <string>meta.function.prototype.js</string> </dict> @@ -104,11 +115,16 @@ <key>name</key> <string>entity.name.function.js</string> </dict> + <key>4</key> + <dict> + <key>name</key> + <string>keyword.operator.js</string> + </dict> </dict> <key>comment</key> <string>match stuff like: Sound.prototype.play = myfunc</string> <key>match</key> - <string>([a-zA-Z_?\.\$]+\w*)\.(prototype)\.([a-zA-Z_?\.$]+\w*)\s*=\s*</string> + <string>([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*(=)\s*</string> <key>name</key> <string>meta.function.js</string> </dict> @@ -125,11 +141,36 @@ <key>name</key> <string>entity.name.function.js</string> </dict> + <key>3</key> + <dict> + <key>name</key> + <string>keyword.operator.js</string> + </dict> + <key>4</key> + <dict> + <key>name</key> + <string>storage.type.function.js</string> + </dict> + <key>5</key> + <dict> + <key>name</key> + <string>punctuation.definition.parameters.begin.js</string> + </dict> + <key>6</key> + <dict> + <key>name</key> + <string>variable.parameter.function.js</string> + </dict> + <key>7</key> + <dict> + <key>name</key> + <string>punctuation.definition.parameters.end.js</string> + </dict> </dict> <key>comment</key> - <string>match stuff like: Sound.play = { … }</string> + <string>match stuff like: Sound.play = function() { … }</string> <key>match</key> - <string>([a-zA-Z_?\.$]+\w*)?\.([a-zA-Z_?\.$]+\w*)\s*=\s*</string> + <string>([a-zA-Z_?.$][\w?.$]*)\.([a-zA-Z_?.$][\w?.$]*)\s*(=)\s*(function)\s*(\()(.*?)(\))</string> <key>name</key> <string>meta.function.js</string> </dict> @@ -139,38 +180,38 @@ <key>1</key> <dict> <key>name</key> - <string>support.class.js</string> + <string>entity.name.function.js</string> </dict> <key>2</key> <dict> <key>name</key> - <string>entity.name.function.js</string> + <string>keyword.operator.js</string> </dict> - <key>4</key> + <key>3</key> <dict> <key>name</key> <string>storage.type.function.js</string> </dict> - <key>5</key> + <key>4</key> <dict> <key>name</key> <string>punctuation.definition.parameters.begin.js</string> </dict> - <key>6</key> + <key>5</key> <dict> <key>name</key> <string>variable.parameter.function.js</string> </dict> - <key>7</key> + <key>6</key> <dict> <key>name</key> <string>punctuation.definition.parameters.end.js</string> </dict> </dict> <key>comment</key> - <string>match stuff like: Sound.play = function() { … } or play = function() { … }</string> + <string>match stuff like: play = function() { … }</string> <key>match</key> - <string>([a-zA-Z_?\.\$]+\w*)(\.([a-zA-Z_?\.\$]+\w*))?\s*=\s*(function)?\s*(\()(.*?)(\))</string> + <string>([a-zA-Z_?$][\w?$]*)\s*(=)\s*(function)\s*(\()(.*?)(\))</string> <key>name</key> <string>meta.function.js</string> </dict> @@ -242,7 +283,7 @@ <key>comment</key> <string>match stuff like: foobar: function() { … }</string> <key>match</key> - <string>\b([a-zA-Z_?\.$]+\w*)\s*:\s*\b(function)?\s*(\()(.*?)(\))</string> + <string>\b([a-zA-Z_?.$][\w?.$]*)\s*:\s*\b(function)?\s*(\()(.*?)(\))</string> <key>name</key> <string>meta.function.json.js</string> </dict> @@ -277,7 +318,7 @@ <key>3</key> <dict> <key>name</key> - <string>object.property.function.js</string> + <string>entity.name.function.js</string> </dict> <key>4</key> <dict> @@ -297,7 +338,7 @@ <key>7</key> <dict> <key>name</key> - <string>object.property.function.js</string> + <string>entity.name.function.js</string> </dict> <key>8</key> <dict> @@ -332,7 +373,7 @@ </dict> </dict> <key>match</key> - <string>(new)\s+(\w+\.?\w*)</string> + <string>(new)\s+(\w+(?:\.\w*)?)</string> <key>name</key> <string>meta.class.instance.constructor</string> </dict> @@ -365,8 +406,6 @@ <string>punctuation.definition.string.begin.js</string> </dict> </dict> - <key>contentName</key> - <string>string.quoted.single.js</string> <key>end</key> <string>'</string> <key>endCaptures</key> @@ -377,6 +416,8 @@ <string>punctuation.definition.string.end.js</string> </dict> </dict> + <key>name</key> + <string>string.quoted.single.js</string> <key>patterns</key> <array> <dict> @@ -422,6 +463,22 @@ </dict> <dict> <key>begin</key> + <string>/\*\*(?!/)</string> + <key>captures</key> + <dict> + <key>0</key> + <dict> + <key>name</key> + <string>punctuation.definition.comment.js</string> + </dict> + </dict> + <key>end</key> + <string>\*/</string> + <key>name</key> + <string>comment.block.documentation.js</string> + </dict> + <dict> + <key>begin</key> <string>/\*</string> <key>captures</key> <dict> @@ -567,19 +624,19 @@ </dict> <dict> <key>match</key> - <string>!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^=|\b(in|instanceof|new|delete|typeof|void)\b</string> + <string>!|\$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\b(in|instanceof|new|delete|typeof|void)\b</string> <key>name</key> <string>keyword.operator.js</string> </dict> <dict> <key>match</key> - <string>\b(Infinity|NaN|Undefined)\b</string> + <string>\b(Infinity|NaN|undefined)\b</string> <key>name</key> <string>constant.language.js</string> </dict> <dict> <key>begin</key> - <string>(?<=[=(:]|^)\s*(/)(?![/*+{}?])</string> + <string>(?<=[=(:]|^|return)\s*(/)(?![/*+{}?])</string> <key>beginCaptures</key> <dict> <key>1</key> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-25 18:13:51
|
Revision: 21345 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21345&view=rev Author: cboulanger Date: 2011-07-25 18:13:45 +0000 (Mon, 25 Jul 2011) Log Message: ----------- Closes http://bugzilla.qooxdoo.org/show_bug.cgi?id=5168 Modified Paths: -------------- trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/access/AccessManager.js Modified: trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/access/AccessManager.js =================================================================== --- trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/access/AccessManager.js 2011-07-22 20:42:47 UTC (rev 21344) +++ trunk/qooxdoo-contrib/qcl/trunk/source/class/qcl/access/AccessManager.js 2011-07-25 18:13:45 UTC (rev 21345) @@ -183,7 +183,7 @@ { this.error("Method signature change: connect() must be called with the session id as first parameter "); } - this.getStore().load("authenticate",[ sessionId ], callback, context ); + this.getStore().load("authenticate",[ sessionId, null ], callback, context ); }, /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-22 20:42:54
|
Revision: 21344 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21344&view=rev Author: cboulanger Date: 2011-07-22 20:42:47 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Downgrading to r. 20800 since current state was not compatible with qcl-js 0.2 Modified Paths: -------------- trunk/qooxdoo-contrib/qcl-php/trunk/services/class/qcl/event/message/Bus.php Modified: trunk/qooxdoo-contrib/qcl-php/trunk/services/class/qcl/event/message/Bus.php =================================================================== --- trunk/qooxdoo-contrib/qcl-php/trunk/services/class/qcl/event/message/Bus.php 2011-07-22 20:38:36 UTC (rev 21343) +++ trunk/qooxdoo-contrib/qcl-php/trunk/services/class/qcl/event/message/Bus.php 2011-07-22 20:42:47 UTC (rev 21344) @@ -17,7 +17,6 @@ */ qcl_import("qcl_core_Object"); -qcl_import("qcl_data_store_keyvalue_Session"); /** * Message Bus @@ -68,6 +67,7 @@ * initialized during runtime. Filtering not yet supported, i.e. message name must * match the one that has been used when subscribing the message, i.e. no wildcards! * + * * @param string $filter * @param qcl_core_Object $subscriber * @param string $method Callback method of the subscriber @@ -78,13 +78,8 @@ { $this->raiseError("Invalid parameter."); } - - if ( ! method_exists( $subscriber, $method ) ) - { - throw new BadMethodCallException("Method $method does not exist on given object"); - } - $message_db =& $this->messages; + $message_db = $this->messages; /* * object id @@ -152,29 +147,17 @@ { return true; } - + /** - * Publishes a message. Filtering not yet supported, i.e. message name must + * Dispatches a message. Filtering not yet supported, i.e. message name must * match the one that has been used when subscribing the message, i.e. no wildcards! * * @param qcl_event_message_Message $message Message * @param mixed $data Data dispatched with message * @return void - * @deprecated Renamed to "publish" */ - public function dispatch ( qcl_event_message_Message $message ) + public function dispatch ( qcl_event_message_Message $message ) { - return $this->publish( $message ); - } - - /** - * Publishes a message. Wildcard support exists for local listeners only. - * @param qcl_event_message_Message $message Message - * @param mixed $data Data dispatched with message - * @return void - */ - public function publish( qcl_event_message_Message $message ) - { /* * message data */ @@ -200,50 +183,22 @@ * search message database */ $message_db = $this->messages; - if ( count ( $message_db['filters'] ) ) + $index = array_search ( $name, $message_db['filters'] ); + + /* + * call registered subscriber methods + */ + if ( $index !== false ) { - - $index = array_search ( $name, $message_db['filters'] ); - - /* - * call registered subscriber methods if found - */ - if ( $index !== false ) + foreach ( $message_db['data'][$index] as $subscriberData ) { - foreach ( $message_db['data'][$index] as $subscriberData ) - { - list( $subscriberId, $method ) = $subscriberData; - $subscriber = $this->getObjectById( $subscriberId ); - $subscriber->$method( $message ); - } + list( $subscriberId, $method ) = $subscriberData; + $subscriber = $this->getObjectById( $subscriberId ); + $subscriber->$method( $message ); } - - /* - * otherwise try the wildcard matching - */ - else - { - $index = 0; - foreach( $message_db['filters'] as $filter ) - { - $pos = strpos( $filter, "*" ); - if( substr( $name, 0, $pos ) == substr( $filter, 0, $pos ) ) - { - /* - * found, call subscribers - */ - foreach ( $message_db['data'][$index] as $subscriberData ) - { - list( $subscriberId, $method ) = $subscriberData; - $subscriber = $this->getObjectById( $subscriberId ); - $subscriber->$method( $message ); - } - } - $index++; - } - } + return true; } - + /** * Broadcast message to connected clients */ @@ -263,8 +218,7 @@ { /* * check if user of this session exists, otherwise - * delete the session. This cleans up the session/user data - * on-the-fly. + * delete the session */ try { @@ -286,15 +240,6 @@ continue; } - /* - * do not dispatch if the message should not go to anonymous users - * the client itself - */ - if( $message->isExcludeAnonymousUsers() and $userModel->isAnonymous() ) - { - continue; - } - /* * do not dispatch the message when one of the registered * callbacks returns false @@ -360,7 +305,6 @@ * @param string $name * @param mixed $data * @return bool Whether message was dispatched - * FIXME rename to "publishMessage" or remove */ public function dispatchMessage( $sender, $name, $data ) { @@ -380,7 +324,6 @@ * @param string $name * @param mixed $data * @return bool Whether message was dispatched - * @deprecated use publishClientMessage() instead */ public function dispatchClientMessage( $sender, $name, $data ) { @@ -390,23 +333,8 @@ { $message->setSender( $sender ); } - return $this->publish( $message ); + return $this->dispatch( $message ); } - - /** - * Shorthand method for publishing a message that will be forwarded - * to the client. - * @param qcl_core_Object $sender - * @param string $name - * @param mixed $data - * @return bool Whether message was dispatched - */ - public function publishClientMessage( $name, $data ) - { - qcl_import( "qcl_event_message_ClientMessage" ); - $message = new qcl_event_message_ClientMessage( $name, $data ); - return $this->publish( $message ); - } /** * Broadcasts a message to all connected clients. @@ -418,8 +346,6 @@ * @param bool $excludeOwnSession * Whether the current session should be excluded from the broadcast (Default: false). * @todo use into qcl_server_Response object - * @deprecated Use broadcast() instead - */ public function broadcastClientMessage ( $sender, $name, $data, $excludeOwnSession=false ) { @@ -433,32 +359,11 @@ } return $this->dispatch( $message ); } - - /** - * Broadcasts a message to all connected clients. - * @param mixed $message - * Message name or hash map of messages - * @param mixed $data - * Data dispatched with message - * @param mixed $acl - * Access control data - * @param bool $excludeOwnSession - * Whether the current session should be excluded from the broadcast (Default: false). - */ - public function broadcast( $name, $data, $aclData=null, $excludeOwnSession=false ) - { - qcl_import( "qcl_event_message_ClientMessage" ); - $message = new qcl_event_message_ClientMessage( $name, $data ); - $message->setBroadcast( true ); - $message->setExcludeOwnSession( $excludeOwnSession ); - $message->setAcl( $aclData ); - return $this->publish( $message ); - } /** * Returns broadcasted messages for the client with the given session * id. - * @param string $sessionId + * @param int $sessionId * @return array * */ @@ -484,31 +389,12 @@ * get name and data and delete message */ $messages = array(); - $channels = $this->getChannels(); - while ( $msgModel->loadNext() ) { - $channel = $msgModel->get( "name" ); - $data = $msgModel->get("data"); - /* - * check if channel is subscribed - * @todo this should be checked while dispatching and not - * while fetching! But the way it is set up requires the - * session active (since the subscribed channels are stored in - * the session). - */ - if ( array_search( $channel, $channels ) !== false ) - { - //$this->debug( "Sending message to $sessionId, channel $channel", __CLASS__, __LINE__ ); - $messages[] = array( - 'name' => $channel, - 'data' => unserialize( stripslashes( $data ) ) - ); - } - else - { - //$this->debug( "NOT sending message to $sessionId, channel $channel not in channel list " . implode(",",$channels), __CLASS__, __LINE__ ); - } + $messages[] = array( + 'name' => $msgModel->get( "name" ), + 'data' => unserialize( stripslashes( $msgModel->get("data") ) ) + ); $msgModel->delete(); } @@ -517,66 +403,5 @@ */ return $messages; } - - /** - * Get a list of channels that the client is subscribed to - * @return array - */ - public function getChannels() - { - $store = new qcl_data_store_keyvalue_Session(); - $key = __CLASS__ . "_channels"; - $channels = $store->has( $key ) ? $store->get($key) : array(); - return $channels; - } - - /** - * Adds the given channel to the list of channels that the - * client is listening to - * @param $name - */ - public function addChannel( $name ) - { - $store = new qcl_data_store_keyvalue_Session(); - $key = __CLASS__ . "_channels"; - $channels = $this->getChannels(); - $channels[] = $name; - $store->set($key, array_unique( $channels ) ); - //$this->debug( "Added channel $name for session " . $this->getApplication()->getAccessController()->getSessionId(), __CLASS__, __LINE__ ); - } - - /** - * Returns true if the channel of the given name is subscribed - * by the current user. - * @param string $name - * @return boolean - */ - public function isSubscribedChannel( $name ) - { - return in_array($name, $this->getChannels() ); - } - - /** - * Removes the given channel from the list of channels that the - * client is listening to - * @param $name - */ - public function removeChannel( $name ) - { - $store = new qcl_data_store_keyvalue_Session(); - $key = __CLASS__ . "_channels"; - $store->set($key, array_diff( $this->getChannels(), array( $name ) ) ); - //$this->debug( "Removed channel $name for session " . $this->getApplication()->getAccessController()->getSessionId(), __CLASS__, __LINE__ ); - } - - /** - * Removes all channels - */ - public function removeAllChannels() - { - $store = new qcl_data_store_keyvalue_Session(); - $key = __CLASS__ . "_channels"; - $store->delete($key); - } } ?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-22 20:38:42
|
Revision: 21343 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21343&view=rev Author: cboulanger Date: 2011-07-22 20:38:36 +0000 (Fri, 22 Jul 2011) Log Message: ----------- fix to make code compatible with qx > 1.4 Modified Paths: -------------- trunk/qooxdoo-contrib/qcl/0.2/source/class/qcl/data/store/JsonRpc.js Modified: trunk/qooxdoo-contrib/qcl/0.2/source/class/qcl/data/store/JsonRpc.js =================================================================== --- trunk/qooxdoo-contrib/qcl/0.2/source/class/qcl/data/store/JsonRpc.js 2011-07-22 18:51:50 UTC (rev 21342) +++ trunk/qooxdoo-contrib/qcl/0.2/source/class/qcl/data/store/JsonRpc.js 2011-07-22 20:38:36 UTC (rev 21343) @@ -558,16 +558,17 @@ /* * server messages */ - if( data.messages && data.messages instanceof Array ){ + if( data.messages && qx.lang.Type.isArray(data.messages) ){ data.messages.forEach( function(message){ - qx.event.message.Bus.dispatch( message.name, message.data ); + var msg = new qx.event.message.Message(message.name, message.data ); + qx.event.message.Bus.dispatch( msg ); }); } /* * server events */ - if( data.events && data.events instanceof Array ) + if( data.events && qx.lang.Type.isArray(data.events) ) { data.events.forEach( function(event) { if (event.data) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-22 18:51:57
|
Revision: 21342 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21342&view=rev Author: cboulanger Date: 2011-07-22 18:51:50 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Updated manifest for release Modified Paths: -------------- trunk/qooxdoo-contrib/Dialog/0.5/Manifest.json trunk/qooxdoo-contrib/Dialog/0.5/demo/default/Manifest.json Modified: trunk/qooxdoo-contrib/Dialog/0.5/Manifest.json =================================================================== --- trunk/qooxdoo-contrib/Dialog/0.5/Manifest.json 2011-07-22 18:42:19 UTC (rev 21341) +++ trunk/qooxdoo-contrib/Dialog/0.5/Manifest.json 2011-07-22 18:51:50 UTC (rev 21342) @@ -17,7 +17,7 @@ } ], - "version" : "trunk", + "version" : "0.5", "qooxdoo-versions": ["1.0","1.1","1.2","1.3","1.4","1.5"] }, Modified: trunk/qooxdoo-contrib/Dialog/0.5/demo/default/Manifest.json =================================================================== --- trunk/qooxdoo-contrib/Dialog/0.5/demo/default/Manifest.json 2011-07-22 18:42:19 UTC (rev 21341) +++ trunk/qooxdoo-contrib/Dialog/0.5/demo/default/Manifest.json 2011-07-22 18:51:50 UTC (rev 21342) @@ -17,7 +17,7 @@ } ], - "version" : "trunk", + "version" : "0.5", "qooxdoo-versions": ["1.0","1.2","1.3","1.4","1.5"] }, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-22 18:42:25
|
Revision: 21341 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21341&view=rev Author: cboulanger Date: 2011-07-22 18:42:19 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Creating Dialog 0.5 branch Added Paths: ----------- trunk/qooxdoo-contrib/Dialog/0.5/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cbo...@us...> - 2011-07-22 18:39:48
|
Revision: 21340 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21340&view=rev Author: cboulanger Date: 2011-07-22 18:39:41 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Added french translation Modified Paths: -------------- trunk/qooxdoo-contrib/Dialog/trunk/source/translation/fr.po Modified: trunk/qooxdoo-contrib/Dialog/trunk/source/translation/fr.po =================================================================== --- trunk/qooxdoo-contrib/Dialog/trunk/source/translation/fr.po 2011-07-22 16:38:53 UTC (rev 21339) +++ trunk/qooxdoo-contrib/Dialog/trunk/source/translation/fr.po 2011-07-22 18:39:41 UTC (rev 21340) @@ -4,8 +4,8 @@ "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: yo...@yo...\n" "POT-Creation-Date: 2011-07-21 20:11+0100\n" -"PO-Revision-Date: 2011-07-21 20:11+0100\n" -"Last-Translator: you <yo...@yo...>\n" +"PO-Revision-Date: 2011-07-22 01:44+0100\n" +"Last-Translator: Apertio SAS <co...@ap...>\n" "Language-Team: Team <you...@yo...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -17,19 +17,19 @@ #: dialog/Confirm.js:166 msgid "no" -msgstr "No" +msgstr "Non" #: dialog/Dialog.js:494 msgid "OK" -msgstr "D'accord" +msgstr "OK" #: dialog/Dialog.js:508 msgid "Cancel" -msgstr "Aborter" +msgstr "Annuler" #: dialog/Login.js:171 msgid "Name" -msgstr "Nom" +msgstr "Identifiant" #: dialog/Login.js:171 msgid "Password" @@ -41,12 +41,12 @@ #: dialog/Wizard.js:183 msgid "Back" -msgstr "A l'arrière" +msgstr "Précédent" #: dialog/Wizard.js:192 msgid "Next" -msgstr "Avant" +msgstr "Suivant" #: dialog/Wizard.js:206 msgid "Finish" -msgstr "Finir" +msgstr "Terminer" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:39:01
|
Revision: 21339 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21339&view=rev Author: spackers Date: 2011-07-22 16:38:53 +0000 (Fri, 22 Jul 2011) Log Message: ----------- update to qx1.5 Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.f54b9f86cd40.js Added: trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.f54b9f86cd40.js =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.f54b9f86cd40.js (rev 0) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.f54b9f86cd40.js 2011-07-22 16:38:53 UTC (rev 21339) @@ -0,0 +1 @@ +qx.$$packageData['0']={"locales":{"C":{"alternateQuotationEnd":"’","alternateQuotationStart":"‘","cldr_am":"AM","cldr_date_format_full":"EEEE, MMMM d, y","cldr_date_format_long":"MMMM d, y","cldr_date_format_medium":"MMM d, y","cldr_date_format_short":"M/d/yy","cldr_date_time_format_EEEd":"d EEE","cldr_date_time_format_Hm":"HH:mm","cldr_date_time_format_Hms":"HH:mm:ss","cldr_date_time_format_M":"L","cldr_date_time_format_MEd":"E, M/d","cldr_date_time_format_MMM":"LLL","cldr_date_time_format_MMMEd":"E, MMM d","cldr_date_time_format_MMMd":"MMM d","cldr_date_time_format_Md":"M/d","cldr_date_time_format_d":"d","cldr_date_time_format_hm":"h:mm a","cldr_date_time_format_hms":"h:mm:ss a","cldr_date_time_format_ms":"mm:ss","cldr_date_time_format_y":"y","cldr_date_time_format_yM":"M/y","cldr_date_time_format_yMEd":"EEE, M/d/y","cldr_date_time_format_yMMM":"MMM y","cldr_date_time_format_yMMMEd":"EEE, MMM d, y","cldr_date_time_format_yMMMd":"MMM d, y","cldr_date_time_format_yMd":"M/d/y","cldr_date_time_format_yQ":"Q y","cldr_date_time_format_yQQQ":"QQQ y","cldr_day_format_abbreviated_fri":"Fri","cldr_day_format_abbreviated_mon":"Mon","cldr_day_format_abbreviated_sat":"Sat","cldr_day_format_abbreviated_sun":"Sun","cldr_day_format_abbreviated_thu":"Thu","cldr_day_format_abbreviated_tue":"Tue","cldr_day_format_abbreviated_wed":"Wed","cldr_day_format_wide_fri":"Friday","cldr_day_format_wide_mon":"Monday","cldr_day_format_wide_sat":"Saturday","cldr_day_format_wide_sun":"Sunday","cldr_day_format_wide_thu":"Thursday","cldr_day_format_wide_tue":"Tuesday","cldr_day_format_wide_wed":"Wednesday","cldr_day_stand-alone_narrow_fri":"F","cldr_day_stand-alone_narrow_mon":"M","cldr_day_stand-alone_narrow_sat":"S","cldr_day_stand-alone_narrow_sun":"S","cldr_day_stand-alone_narrow_thu":"T","cldr_day_stand-alone_narrow_tue":"T","cldr_day_stand-alone_narrow_wed":"W","cldr_month_format_abbreviated_1":"Jan","cldr_month_format_abbreviated_10":"Oct","cldr_month_format_abbreviated_11":"Nov","cldr_month_format_abbreviated_12":"Dec","cldr_month_format_abbreviated_2":"Feb","cldr_month_format_abbreviated_3":"Mar","cldr_month_format_abbreviated_4":"Apr","cldr_month_format_abbreviated_5":"May","cldr_month_format_abbreviated_6":"Jun","cldr_month_format_abbreviated_7":"Jul","cldr_month_format_abbreviated_8":"Aug","cldr_month_format_abbreviated_9":"Sep","cldr_month_format_wide_1":"January","cldr_month_format_wide_10":"October","cldr_month_format_wide_11":"November","cldr_month_format_wide_12":"December","cldr_month_format_wide_2":"February","cldr_month_format_wide_3":"March","cldr_month_format_wide_4":"April","cldr_month_format_wide_5":"May","cldr_month_format_wide_6":"June","cldr_month_format_wide_7":"July","cldr_month_format_wide_8":"August","cldr_month_format_wide_9":"September","cldr_month_stand-alone_narrow_1":"J","cldr_month_stand-alone_narrow_10":"O","cldr_month_stand-alone_narrow_11":"N","cldr_month_stand-alone_narrow_12":"D","cldr_month_stand-alone_narrow_2":"F","cldr_month_stand-alone_narrow_3":"M","cldr_month_stand-alone_narrow_4":"A","cldr_month_stand-alone_narrow_5":"M","cldr_month_stand-alone_narrow_6":"J","cldr_month_stand-alone_narrow_7":"J","cldr_month_stand-alone_narrow_8":"A","cldr_month_stand-alone_narrow_9":"S","cldr_number_decimal_separator":".","cldr_number_group_separator":",","cldr_number_percent_format":"#,##0%","cldr_pm":"PM","cldr_time_format_full":"h:mm:ss a zzzz","cldr_time_format_long":"h:mm:ss a z","cldr_time_format_medium":"h:mm:ss a","cldr_time_format_short":"h:mm a","day":"Day","dayperiod":"AM/PM","era":"Era","hour":"Hour","minute":"Minute","month":"Month","quotationEnd":"”","quotationStart":"“","second":"Second","week":"Week","weekday":"Day of the Week","year":"Year","zone":"Time Zone"},"en":{"alternateQuotationEnd":"’","alternateQuotationStart":"‘","cldr_am":"AM","cldr_date_format_full":"EEEE, MMMM d, y","cldr_date_format_long":"MMMM d, y","cldr_date_format_medium":"MMM d, y","cldr_date_format_short":"M/d/yy","cldr_date_time_format_EEEd":"d EEE","cldr_date_time_format_Hm":"HH:mm","cldr_date_time_format_Hms":"HH:mm:ss","cldr_date_time_format_M":"L","cldr_date_time_format_MEd":"E, M/d","cldr_date_time_format_MMM":"LLL","cldr_date_time_format_MMMEd":"E, MMM d","cldr_date_time_format_MMMd":"MMM d","cldr_date_time_format_Md":"M/d","cldr_date_time_format_d":"d","cldr_date_time_format_hm":"h:mm a","cldr_date_time_format_hms":"h:mm:ss a","cldr_date_time_format_ms":"mm:ss","cldr_date_time_format_y":"y","cldr_date_time_format_yM":"M/y","cldr_date_time_format_yMEd":"EEE, M/d/y","cldr_date_time_format_yMMM":"MMM y","cldr_date_time_format_yMMMEd":"EEE, MMM d, y","cldr_date_time_format_yMMMd":"MMM d, y","cldr_date_time_format_yMd":"M/d/y","cldr_date_time_format_yQ":"Q y","cldr_date_time_format_yQQQ":"QQQ y","cldr_day_format_abbreviated_fri":"Fri","cldr_day_format_abbreviated_mon":"Mon","cldr_day_format_abbreviated_sat":"Sat","cldr_day_format_abbreviated_sun":"Sun","cldr_day_format_abbreviated_thu":"Thu","cldr_day_format_abbreviated_tue":"Tue","cldr_day_format_abbreviated_wed":"Wed","cldr_day_format_wide_fri":"Friday","cldr_day_format_wide_mon":"Monday","cldr_day_format_wide_sat":"Saturday","cldr_day_format_wide_sun":"Sunday","cldr_day_format_wide_thu":"Thursday","cldr_day_format_wide_tue":"Tuesday","cldr_day_format_wide_wed":"Wednesday","cldr_day_stand-alone_narrow_fri":"F","cldr_day_stand-alone_narrow_mon":"M","cldr_day_stand-alone_narrow_sat":"S","cldr_day_stand-alone_narrow_sun":"S","cldr_day_stand-alone_narrow_thu":"T","cldr_day_stand-alone_narrow_tue":"T","cldr_day_stand-alone_narrow_wed":"W","cldr_month_format_abbreviated_1":"Jan","cldr_month_format_abbreviated_10":"Oct","cldr_month_format_abbreviated_11":"Nov","cldr_month_format_abbreviated_12":"Dec","cldr_month_format_abbreviated_2":"Feb","cldr_month_format_abbreviated_3":"Mar","cldr_month_format_abbreviated_4":"Apr","cldr_month_format_abbreviated_5":"May","cldr_month_format_abbreviated_6":"Jun","cldr_month_format_abbreviated_7":"Jul","cldr_month_format_abbreviated_8":"Aug","cldr_month_format_abbreviated_9":"Sep","cldr_month_format_wide_1":"January","cldr_month_format_wide_10":"October","cldr_month_format_wide_11":"November","cldr_month_format_wide_12":"December","cldr_month_format_wide_2":"February","cldr_month_format_wide_3":"March","cldr_month_format_wide_4":"April","cldr_month_format_wide_5":"May","cldr_month_format_wide_6":"June","cldr_month_format_wide_7":"July","cldr_month_format_wide_8":"August","cldr_month_format_wide_9":"September","cldr_month_stand-alone_narrow_1":"J","cldr_month_stand-alone_narrow_10":"O","cldr_month_stand-alone_narrow_11":"N","cldr_month_stand-alone_narrow_12":"D","cldr_month_stand-alone_narrow_2":"F","cldr_month_stand-alone_narrow_3":"M","cldr_month_stand-alone_narrow_4":"A","cldr_month_stand-alone_narrow_5":"M","cldr_month_stand-alone_narrow_6":"J","cldr_month_stand-alone_narrow_7":"J","cldr_month_stand-alone_narrow_8":"A","cldr_month_stand-alone_narrow_9":"S","cldr_number_decimal_separator":".","cldr_number_group_separator":",","cldr_number_percent_format":"#,##0%","cldr_pm":"PM","cldr_time_format_full":"h:mm:ss a zzzz","cldr_time_format_long":"h:mm:ss a z","cldr_time_format_medium":"h:mm:ss a","cldr_time_format_short":"h:mm a","day":"Day","dayperiod":"AM/PM","era":"Era","hour":"Hour","minute":"Minute","month":"Month","quotationEnd":"”","quotationStart":"“","second":"Second","week":"Week","weekday":"Day of the Week","year":"Year","zone":"Time Zone"}},"resources":{"demoapp/test.png":[32,32,"png","demoapp"],"qx/decoration/Modern/app-header.png":[110,20,"png","qx"],"qx/decoration/Modern/arrows-combined.png":[87,8,"png","qx"],"qx/decoration/Modern/arrows/down-invert.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-74,0],"qx/decoration/Modern/arrows/down-small-invert.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-69,0],"qx/decoration/Modern/arrows/down-small.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-49,0],"qx/decoration/Modern/arrows/down.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-20,0],"qx/decoration/Modern/arrows/forward.png":[10,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-59,0],"qx/decoration/Modern/arrows/left-invert.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",0,0],"qx/decoration/Modern/arrows/left.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-44,0],"qx/decoration/Modern/arrows/rewind.png":[10,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-10,0],"qx/decoration/Modern/arrows/right-invert.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-5,0],"qx/decoration/Modern/arrows/right.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-54,0],"qx/decoration/Modern/arrows/up-invert.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-28,0],"qx/decoration/Modern/arrows/up-small.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-82,0],"qx/decoration/Modern/arrows/up.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-36,0],"qx/decoration/Modern/button-lr-combined.png":[72,52,"png","qx"],"qx/decoration/Modern/button-tb-combined.png":[4,216,"png","qx"],"qx/decoration/Modern/checkradio-combined.png":[504,14,"png","qx"],"qx/decoration/Modern/colorselector-combined.gif":[46,11,"gif","qx"],"qx/decoration/Modern/colorselector/brightness-field.png":[19,256,"png","qx"],"qx/decoration/Modern/colorselector/brightness-handle.gif":[35,11,"gif","qx","qx/decoration/Modern/colorselector-combined.gif",0,0],"qx/decoration/Modern/colorselector/huesaturation-field.jpg":[256,256,"jpeg","qx"],"qx/decoration/Modern/colorselector/huesaturation-handle.gif":[11,11,"gif","qx","qx/decoration/Modern/colorselector-combined.gif",-35,0],"qx/decoration/Modern/cursors-combined.gif":[71,20,"gif","qx"],"qx/decoration/Modern/cursors/alias.gif":[19,15,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-52,0],"qx/decoration/Modern/cursors/copy.gif":[19,15,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-33,0],"qx/decoration/Modern/cursors/move.gif":[13,9,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-20,0],"qx/decoration/Modern/cursors/nodrop.gif":[20,20,"gif","qx","qx/decoration/Modern/cursors-combined.gif",0,0],"qx/decoration/Modern/form/button-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-72],"qx/decoration/Modern/form/button-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-204],"qx/decoration/Modern/form/button-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-188],"qx/decoration/Modern/form/button-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-36],"qx/decoration/Modern/form/button-checked-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-84],"qx/decoration/Modern/form/button-checked-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-184],"qx/decoration/Modern/form/button-checked-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-156],"qx/decoration/Modern/form/button-checked-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-208],"qx/decoration/Modern/form/button-checked-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-160],"qx/decoration/Modern/form/button-checked-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-40,0],"qx/decoration/Modern/form/button-checked-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-32,0],"qx/decoration/Modern/form/button-checked-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-28],"qx/decoration/Modern/form/button-checked-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-24],"qx/decoration/Modern/form/button-checked-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-48],"qx/decoration/Modern/form/button-checked-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-checked-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-16,0],"qx/decoration/Modern/form/button-checked-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-60,0],"qx/decoration/Modern/form/button-checked-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-140],"qx/decoration/Modern/form/button-checked-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-56],"qx/decoration/Modern/form/button-checked-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-112],"qx/decoration/Modern/form/button-checked.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-disabled-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-40],"qx/decoration/Modern/form/button-disabled-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-136],"qx/decoration/Modern/form/button-disabled-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-16],"qx/decoration/Modern/form/button-disabled-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-disabled-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-68,0],"qx/decoration/Modern/form/button-disabled-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-4,0],"qx/decoration/Modern/form/button-disabled-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-116],"qx/decoration/Modern/form/button-disabled-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-168],"qx/decoration/Modern/form/button-disabled-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-60],"qx/decoration/Modern/form/button-disabled.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-68],"qx/decoration/Modern/form/button-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-144],"qx/decoration/Modern/form/button-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-8],"qx/decoration/Modern/form/button-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-24,0],"qx/decoration/Modern/form/button-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-44,0],"qx/decoration/Modern/form/button-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-192],"qx/decoration/Modern/form/button-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-148],"qx/decoration/Modern/form/button-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-104],"qx/decoration/Modern/form/button-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-hovered-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-108],"qx/decoration/Modern/form/button-hovered-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-32],"qx/decoration/Modern/form/button-hovered-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-128],"qx/decoration/Modern/form/button-hovered-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-hovered-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-20,0],"qx/decoration/Modern/form/button-hovered-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-48,0],"qx/decoration/Modern/form/button-hovered-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-44],"qx/decoration/Modern/form/button-hovered-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-76],"qx/decoration/Modern/form/button-hovered-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-88],"qx/decoration/Modern/form/button-hovered.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-56,0],"qx/decoration/Modern/form/button-preselected-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-124],"qx/decoration/Modern/form/button-preselected-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-176],"qx/decoration/Modern/form/button-preselected-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-200],"qx/decoration/Modern/form/button-preselected-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-preselected-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,0],"qx/decoration/Modern/form/button-preselected-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-4],"qx/decoration/Modern/form/button-preselected-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-152],"qx/decoration/Modern/form/button-preselected-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-preselected-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-28,0],"qx/decoration/Modern/form/button-preselected-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-36,0],"qx/decoration/Modern/form/button-preselected-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-196],"qx/decoration/Modern/form/button-preselected-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-164],"qx/decoration/Modern/form/button-preselected-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-212],"qx/decoration/Modern/form/button-preselected-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-preselected-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-8,0],"qx/decoration/Modern/form/button-preselected-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-64,0],"qx/decoration/Modern/form/button-preselected-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-96],"qx/decoration/Modern/form/button-preselected-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-80],"qx/decoration/Modern/form/button-preselected-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-132],"qx/decoration/Modern/form/button-preselected.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-pressed-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-12],"qx/decoration/Modern/form/button-pressed-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-52],"qx/decoration/Modern/form/button-pressed-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-20],"qx/decoration/Modern/form/button-pressed-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-pressed-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-52,0],"qx/decoration/Modern/form/button-pressed-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-12,0],"qx/decoration/Modern/form/button-pressed-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-100],"qx/decoration/Modern/form/button-pressed-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-172],"qx/decoration/Modern/form/button-pressed-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-64],"qx/decoration/Modern/form/button-pressed.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",0,0],"qx/decoration/Modern/form/button-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-92],"qx/decoration/Modern/form/button-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-120],"qx/decoration/Modern/form/button-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-180],"qx/decoration/Modern/form/button.png":[80,60,"png","qx"],"qx/decoration/Modern/form/checkbox-checked-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-126,0],"qx/decoration/Modern/form/checkbox-checked-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-322,0],"qx/decoration/Modern/form/checkbox-checked-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-294,0],"qx/decoration/Modern/form/checkbox-checked-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-364,0],"qx/decoration/Modern/form/checkbox-checked-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-490,0],"qx/decoration/Modern/form/checkbox-checked-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-224,0],"qx/decoration/Modern/form/checkbox-checked-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-378,0],"qx/decoration/Modern/form/checkbox-checked-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-84,0],"qx/decoration/Modern/form/checkbox-checked.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-182,0],"qx/decoration/Modern/form/checkbox-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-42,0],"qx/decoration/Modern/form/checkbox-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-392,0],"qx/decoration/Modern/form/checkbox-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-210,0],"qx/decoration/Modern/form/checkbox-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-14,0],"qx/decoration/Modern/form/checkbox-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-238,0],"qx/decoration/Modern/form/checkbox-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-462,0],"qx/decoration/Modern/form/checkbox-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-112,0],"qx/decoration/Modern/form/checkbox-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-448,0],"qx/decoration/Modern/form/checkbox-undetermined-disabled.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-focused-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-focused.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-hovered-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-hovered.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-140,0],"qx/decoration/Modern/form/checked-disabled.png":[6,6,"png","qx"],"qx/decoration/Modern/form/checked.png":[6,6,"png","qx"],"qx/decoration/Modern/form/input-focused.png":[40,12,"png","qx"],"qx/decoration/Modern/form/input.png":[84,12,"png","qx"],"qx/decoration/Modern/form/radiobutton-checked-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-196,0],"qx/decoration/Modern/form/radiobutton-checked-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-168,0],"qx/decoration/Modern/form/radiobutton-checked-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-98,0],"qx/decoration/Modern/form/radiobutton-checked-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-308,0],"qx/decoration/Modern/form/radiobutton-checked-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-406,0],"qx/decoration/Modern/form/radiobutton-checked-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-28,0],"qx/decoration/Modern/form/radiobutton-checked-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-350,0],"qx/decoration/Modern/form/radiobutton-checked-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-266,0],"qx/decoration/Modern/form/radiobutton-checked.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-252,0],"qx/decoration/Modern/form/radiobutton-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-336,0],"qx/decoration/Modern/form/radiobutton-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-476,0],"qx/decoration/Modern/form/radiobutton-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-420,0],"qx/decoration/Modern/form/radiobutton-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-56,0],"qx/decoration/Modern/form/radiobutton-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",0,0],"qx/decoration/Modern/form/radiobutton-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-154,0],"qx/decoration/Modern/form/radiobutton-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-434,0],"qx/decoration/Modern/form/radiobutton-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-280,0],"qx/decoration/Modern/form/radiobutton.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-70,0],"qx/decoration/Modern/form/tooltip-error-arrow.png":[11,14,"png","qx"],"qx/decoration/Modern/form/tooltip-error-b.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-30],"qx/decoration/Modern/form/tooltip-error-bl.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-24],"qx/decoration/Modern/form/tooltip-error-br.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,0],"qx/decoration/Modern/form/tooltip-error-c.png":[40,18,"png","qx"],"qx/decoration/Modern/form/tooltip-error-l.png":[6,18,"png","qx","qx/decoration/Modern/tooltip-error-lr-combined.png",-6,0],"qx/decoration/Modern/form/tooltip-error-r.png":[6,18,"png","qx","qx/decoration/Modern/tooltip-error-lr-combined.png",0,0],"qx/decoration/Modern/form/tooltip-error-t.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-6],"qx/decoration/Modern/form/tooltip-error-tl.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-18],"qx/decoration/Modern/form/tooltip-error-tr.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-12],"qx/decoration/Modern/form/tooltip-error.png":[127,30,"png","qx"],"qx/decoration/Modern/form/undetermined-disabled.png":[6,2,"png","qx"],"qx/decoration/Modern/form/undetermined.png":[6,2,"png","qx"],"qx/decoration/Modern/group-item.png":[110,20,"png","qx"],"qx/decoration/Modern/groupbox-lr-combined.png":[8,51,"png","qx"],"qx/decoration/Modern/groupbox-tb-combined.png":[4,24,"png","qx"],"qx/decoration/Modern/groupbox/groupbox-b.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-12],"qx/decoration/Modern/groupbox/groupbox-bl.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-16],"qx/decoration/Modern/groupbox/groupbox-br.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-8],"qx/decoration/Modern/groupbox/groupbox-c.png":[40,51,"png","qx"],"qx/decoration/Modern/groupbox/groupbox-l.png":[4,51,"png","qx","qx/decoration/Modern/groupbox-lr-combined.png",-4,0],"qx/decoration/Modern/groupbox/groupbox-r.png":[4,51,"png","qx","qx/decoration/Modern/groupbox-lr-combined.png",0,0],"qx/decoration/Modern/groupbox/groupbox-t.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-4],"qx/decoration/Modern/groupbox/groupbox-tl.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,0],"qx/decoration/Modern/groupbox/groupbox-tr.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-20],"qx/decoration/Modern/groupbox/groupbox.png":[255,59,"png","qx"],"qx/decoration/Modern/menu-background-combined.png":[80,49,"png","qx"],"qx/decoration/Modern/menu-checkradio-combined.gif":[64,7,"gif","qx"],"qx/decoration/Modern/menu/background.png":[40,49,"png","qx","qx/decoration/Modern/menu-background-combined.png",-40,0],"qx/decoration/Modern/menu/bar-background.png":[40,20,"png","qx","qx/decoration/Modern/menu-background-combined.png",0,0],"qx/decoration/Modern/menu/checkbox-invert.gif":[16,7,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-16,0],"qx/decoration/Modern/menu/checkbox.gif":[16,7,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-48,0],"qx/decoration/Modern/menu/radiobutton-invert.gif":[16,5,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-32,0],"qx/decoration/Modern/menu/radiobutton.gif":[16,5,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",0,0],"qx/decoration/Modern/pane-lr-combined.png":[12,238,"png","qx"],"qx/decoration/Modern/pane-tb-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/pane/pane-b.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-30],"qx/decoration/Modern/pane/pane-bl.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-18],"qx/decoration/Modern/pane/pane-br.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-12],"qx/decoration/Modern/pane/pane-c.png":[40,238,"png","qx"],"qx/decoration/Modern/pane/pane-l.png":[6,238,"png","qx","qx/decoration/Modern/pane-lr-combined.png",0,0],"qx/decoration/Modern/pane/pane-r.png":[6,238,"png","qx","qx/decoration/Modern/pane-lr-combined.png",-6,0],"qx/decoration/Modern/pane/pane-t.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,0],"qx/decoration/Modern/pane/pane-tl.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-24],"qx/decoration/Modern/pane/pane-tr.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-6],"qx/decoration/Modern/pane/pane.png":[185,250,"png","qx"],"qx/decoration/Modern/scrollbar-combined.png":[54,12,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-horizontal.png":[76,15,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-pressed-horizontal.png":[19,10,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-pressed-vertical.png":[10,19,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-vertical.png":[15,76,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-button-bg-horizontal.png":[12,10,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-34,0],"qx/decoration/Modern/scrollbar/scrollbar-button-bg-vertical.png":[10,12,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-6,0],"qx/decoration/Modern/scrollbar/scrollbar-down.png":[6,4,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-28,0],"qx/decoration/Modern/scrollbar/scrollbar-left.png":[4,6,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-50,0],"qx/decoration/Modern/scrollbar/scrollbar-right.png":[4,6,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-46,0],"qx/decoration/Modern/scrollbar/scrollbar-up.png":[6,4,"png","qx","qx/decoration/Modern/scrollbar-combined.png",0,0],"qx/decoration/Modern/scrollbar/slider-knob-background.png":[12,10,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-16,0],"qx/decoration/Modern/selection.png":[110,20,"png","qx"],"qx/decoration/Modern/shadow-lr-combined.png":[30,382,"png","qx"],"qx/decoration/Modern/shadow-small-lr-combined.png":[10,136,"png","qx"],"qx/decoration/Modern/shadow-small-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/shadow-tb-combined.png":[15,90,"png","qx"],"qx/decoration/Modern/shadow/shadow-b.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-30],"qx/decoration/Modern/shadow/shadow-bl.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-15],"qx/decoration/Modern/shadow/shadow-br.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-45],"qx/decoration/Modern/shadow/shadow-c.png":[40,382,"png","qx"],"qx/decoration/Modern/shadow/shadow-l.png":[15,382,"png","qx","qx/decoration/Modern/shadow-lr-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-r.png":[15,382,"png","qx","qx/decoration/Modern/shadow-lr-combined.png",-15,0],"qx/decoration/Modern/shadow/shadow-small-b.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-20],"qx/decoration/Modern/shadow/shadow-small-bl.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-15],"qx/decoration/Modern/shadow/shadow-small-br.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-10],"qx/decoration/Modern/shadow/shadow-small-c.png":[40,136,"png","qx"],"qx/decoration/Modern/shadow/shadow-small-l.png":[5,136,"png","qx","qx/decoration/Modern/shadow-small-lr-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-small-r.png":[5,136,"png","qx","qx/decoration/Modern/shadow-small-lr-combined.png",-5,0],"qx/decoration/Modern/shadow/shadow-small-t.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-5],"qx/decoration/Modern/shadow/shadow-small-tl.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-small-tr.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-25],"qx/decoration/Modern/shadow/shadow-small.png":[114,146,"png","qx"],"qx/decoration/Modern/shadow/shadow-t.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-60],"qx/decoration/Modern/shadow/shadow-tl.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-75],"qx/decoration/Modern/shadow/shadow-tr.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,0],"qx/decoration/Modern/shadow/shadow.png":[381,412,"png","qx"],"qx/decoration/Modern/splitpane-knobs-combined.png":[8,9,"png","qx"],"qx/decoration/Modern/splitpane/knob-horizontal.png":[1,8,"png","qx","qx/decoration/Modern/splitpane-knobs-combined.png",0,-1],"qx/decoration/Modern/splitpane/knob-vertical.png":[8,1,"png","qx","qx/decoration/Modern/splitpane-knobs-combined.png",0,0],"qx/decoration/Modern/table-combined.png":[94,18,"png","qx"],"qx/decoration/Modern/table/ascending.png":[8,5,"png","qx","qx/decoration/Modern/table-combined.png",0,0],"qx/decoration/Modern/table/boolean-false.png":[14,14,"png","qx","qx/decoration/Modern/table-combined.png",-80,0],"qx/decoration/Modern/table/boolean-true.png":[14,14,"png","qx","qx/decoration/Modern/table-combined.png",-26,0],"qx/decoration/Modern/table/descending.png":[8,5,"png","qx","qx/decoration/Modern/table-combined.png",-18,0],"qx/decoration/Modern/table/header-cell.png":[40,18,"png","qx","qx/decoration/Modern/table-combined.png",-40,0],"qx/decoration/Modern/table/select-column-order.png":[10,9,"png","qx","qx/decoration/Modern/table-combined.png",-8,0],"qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png":[10,14,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png":[6,15,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-left-active-lr-combined.png":[10,37,"png","qx"],"qx/decoration/Modern/tabview-button-left-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png":[6,39,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-right-active-lr-combined.png":[10,37,"png","qx"],"qx/decoration/Modern/tabview-button-right-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png":[6,39,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-top-active-lr-combined.png":[10,12,"png","qx"],"qx/decoration/Modern/tabview-button-top-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png":[6,15,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-pane-lr-combined.png":[60,2,"png","qx"],"qx/decoration/Modern/tabview-pane-tb-combined.png":[30,180,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-bottom-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-bottom-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-bottom-active-c.png":[40,14,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-active-l.png":[5,14,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-active-r.png":[5,14,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-bottom-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-bottom-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-bottom-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-active.png":[49,24,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-c.png":[40,15,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-l.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-r.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-bottom-inactive.png":[45,21,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-left-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-left-active-c.png":[40,37,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-active-l.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-left-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-active-r.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-left-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-left-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-left-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-left-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-left-active.png":[22,47,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-left-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-left-inactive-c.png":[40,39,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-inactive-l.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-r.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-left-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-left-inactive.png":[20,45,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-right-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-right-active-c.png":[40,37,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-active-l.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-right-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-active-r.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-right-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-right-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-right-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-right-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-right-active.png":[22,47,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-right-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-right-inactive-c.png":[40,39,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-inactive-l.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-r.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-right-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-right-inactive.png":[20,45,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-top-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-top-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-top-active-c.png":[40,14,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-active-l.png":[5,12,"png","qx","qx/decoration/Modern/tabview-button-top-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-active-r.png":[5,12,"png","qx","qx/decoration/Modern/tabview-button-top-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-top-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-top-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-top-active.png":[48,22,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-top-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-top-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-c.png":[40,15,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-inactive-l.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-r.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-top-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-top-inactive.png":[45,21,"png","qx"],"qx/decoration/Modern/tabview/tabview-pane-b.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-60],"qx/decoration/Modern/tabview/tabview-pane-bl.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tabview-pane-br.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-120],"qx/decoration/Modern/tabview/tabview-pane-c.png":[40,120,"png","qx"],"qx/decoration/Modern/tabview/tabview-pane-l.png":[30,2,"png","qx","qx/decoration/Modern/tabview-pane-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tabview-pane-r.png":[30,2,"png","qx","qx/decoration/Modern/tabview-pane-lr-combined.png",-30,0],"qx/decoration/Modern/tabview/tabview-pane-t.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-150],"qx/decoration/Modern/tabview/tabview-pane-tl.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-30],"qx/decoration/Modern/tabview/tabview-pane-tr.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-90],"qx/decoration/Modern/tabview/tabview-pane.png":[185,250,"png","qx"],"qx/decoration/Modern/toolbar-combined.png":[80,130,"png","qx"],"qx/decoration/Modern/toolbar/toolbar-gradient-blue.png":[40,130,"png","qx","qx/decoration/Modern/toolbar-combined.png",-40,0],"qx/decoration/Modern/toolbar/toolbar-gradient.png":[40,130,"png","qx","qx/decoration/Modern/toolbar-combined.png",0,0],"qx/decoration/Modern/toolbar/toolbar-handle-knob.gif":[1,8,"gif","qx"],"qx/decoration/Modern/toolbar/toolbar-part.gif":[7,1,"gif","qx"],"qx/decoration/Modern/tooltip-error-lr-combined.png":[12,18,"png","qx"],"qx/decoration/Modern/tooltip-error-tb-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/tree-combined.png":[32,8,"png","qx"],"qx/decoration/Modern/tree/closed-selected.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-24,0],"qx/decoration/Modern/tree/closed.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-16,0],"qx/decoration/Modern/tree/open-selected.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-8,0],"qx/decoration/Modern/tree/open.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",0,0],"qx/decoration/Modern/window-captionbar-buttons-combined.png":[108,9,"png","qx"],"qx/decoration/Modern/window-captionbar-lr-active-combined.png":[12,9,"png","qx"],"qx/decoration/Modern/window-captionbar-lr-inactive-combined.png":[12,9,"png","qx"],"qx/decoration/Modern/window-captionbar-tb-active-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/window-captionbar-tb-inactive-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/window-statusbar-lr-combined.png":[8,7,"png","qx"],"qx/decoration/Modern/window-statusbar-tb-combined.png":[4,24,"png","qx"],"qx/decoration/Modern/window/captionbar-active-b.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-18],"qx/decoration/Modern/window/captionbar-active-bl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-24],"qx/decoration/Modern/window/captionbar-active-br.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-12],"qx/decoration/Modern/window/captionbar-active-c.png":[40,9,"png","qx"],"qx/decoration/Modern/window/captionbar-active-l.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-active-combined.png",-6,0],"qx/decoration/Modern/window/captionbar-active-r.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-active-combined.png",0,0],"qx/decoration/Modern/window/captionbar-active-t.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-6],"qx/decoration/Modern/window/captionbar-active-tl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,0],"qx/decoration/Modern/window/captionbar-active-tr.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-30],"qx/decoration/Modern/window/captionbar-active.png":[69,21,"png","qx"],"qx/decoration/Modern/window/captionbar-inactive-b.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-24],"qx/decoration/Modern/window/captionbar-inactive-bl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-6],"qx/decoration/Modern/window/captionbar-inactive-br.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-30],"qx/decoration/Modern/window/captionbar-inactive-c.png":[40,9,"png","qx"],"qx/decoration/Modern/window/captionbar-inactive-l.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-inactive-combined.png",0,0],"qx/decoration/Modern/window/captionbar-inactive-r.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-inactive-combined.png",-6,0],"qx/decoration/Modern/window/captionbar-inactive-t.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,0],"qx/decoration/Modern/window/captionbar-inactive-tl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-12],"qx/decoration/Modern/window/captionbar-inactive-tr.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-18],"qx/decoration/Modern/window/captionbar-inactive.png":[69,21,"png","qx"],"qx/decoration/Modern/window/close-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-27,0],"qx/decoration/Modern/window/close-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-9,0],"qx/decoration/Modern/window/close-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-90,0],"qx/decoration/Modern/window/maximize-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-18,0],"qx/decoration/Modern/window/maximize-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-81,0],"qx/decoration/Modern/window/maximize-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-54,0],"qx/decoration/Modern/window/minimize-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-63,0],"qx/decoration/Modern/window/minimize-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-72,0],"qx/decoration/Modern/window/minimize-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-36,0],"qx/decoration/Modern/window/restore-active-hovered.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",0,0],"qx/decoration/Modern/window/restore-active.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-99,0],"qx/decoration/Modern/window/restore-inactive.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-45,0],"qx/decoration/Modern/window/statusbar-b.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-16],"qx/decoration/Modern/window/statusbar-bl.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-20],"qx/decoration/Modern/window/statusbar-br.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-4],"qx/decoration/Modern/window/statusbar-c.png":[40,7,"png","qx"],"qx/decoration/Modern/window/statusbar-l.png":[4,7,"png","qx","qx/decoration/Modern/window-statusbar-lr-combined.png",-4,0],"qx/decoration/Modern/window/statusbar-r.png":[4,7,"png","qx","qx/decoration/Modern/window-statusbar-lr-combined.png",0,0],"qx/decoration/Modern/window/statusbar-t.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,0],"qx/decoration/Modern/window/statusbar-tl.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-8],"qx/decoration/Modern/window/statusbar-tr.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-12],"qx/decoration/Modern/window/statusbar.png":[369,15,"png","qx"],"qx/icon/Tango/16/actions/dialog-cancel.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/dialog-ok.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/view-refresh.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/window-close.png":[16,16,"png","qx"],"qx/icon/Tango/16/apps/office-calendar.png":[16,16,"png","qx"],"qx/icon/Tango/16/apps/utilities-color-chooser.png":[16,16,"png","qx"],"qx/icon/Tango/16/mimetypes/office-document.png":[16,16,"png","qx"],"qx/icon/Tango/16/places/folder-open.png":[16,16,"png","qx"],"qx/icon/Tango/16/places/folder.png":[16,16,"png","qx"],"qx/icon/Tango/22/mimetypes/office-document.png":[22,22,"png","qx"],"qx/icon/Tango/22/places/folder-open.png":[22,22,"png","qx"],"qx/icon/Tango/22/places/folder.png":[22,22,"png","qx"],"qx/icon/Tango/32/mimetypes/office-document.png":[32,32,"png","qx"],"qx/icon/Tango/32/places/folder-open.png":[32,32,"png","qx"],"qx/icon/Tango/32/places/folder.png":[32,32,"png","qx"],"qx/static/blank.gif":[1,1,"gif","qx"]},"translations":{}}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:38:43
|
Revision: 21338 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21338&view=rev Author: spackers Date: 2011-07-22 16:38:31 +0000 (Fri, 22 Jul 2011) Log Message: ----------- update to qx1.5 Modified Paths: -------------- trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/config.json trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.js trunk/qooxdoo-contrib/ServerObjects/trunk/demo-webapp/.classpath trunk/qooxdoo-contrib/ServerObjects/trunk/demo-webapp/.project Modified: trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/config.json =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/config.json 2011-07-22 16:27:08 UTC (rev 21337) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/config.json 2011-07-22 16:38:31 UTC (rev 21338) @@ -11,6 +11,7 @@ "export" : [ "api", + "api-data", "build", "clean", "distclean", @@ -23,19 +24,24 @@ "profiling", "source", "source-all", + "source-hybrid", + "simulation-build", + "simulation-run", "test", "test-source", "translation" ], + + "default-job" : "source", "let" : { "APPLICATION" : "demoapp", - "QOOXDOO_PATH" : "/Users/john/os/qooxdoo-1.4.1-sdk", + "QOOXDOO_PATH" : "/Users/john/os/qooxdoo-1.5-sdk", "QXTHEME" : "demoapp.theme.Theme", - "API_EXCLUDE" : ["qx.test.*", "${APPLICATION}.theme.*", "${APPLICATION}.test.*"], + "API_EXCLUDE" : ["qx.test.*", "${APPLICATION}.theme.*", "${APPLICATION}.test.*", "${APPLICATION}.simulation.*"], "LOCALES" : [ "en" ], - "CACHE" : "../../qooxdoo/cache", + "CACHE" : "${TMPDIR}/qx${QOOXDOO_VERSION}/cache", "ROOT" : "." }, Modified: trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.js =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.js 2011-07-22 16:27:08 UTC (rev 21337) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/client/demoapp/source/script/demoapp.js 2011-07-22 16:38:31 UTC (rev 21338) @@ -4,32 +4,24 @@ qx.$$start = new Date(); -if (!window.qxsettings) qxsettings = {}; -var settings = {"qx.application":"demoapp.Application","qx.revision":"21302:21319","qx.theme":"demoapp.theme.Theme","qx.version":"1.4.1"}; -for (var k in settings) qxsettings[k] = settings[k]; - -if (!window.qxvariants) qxvariants = {}; -var variants = {}; -for (var k in variants) qxvariants[k] = variants[k]; - if (!qx.$$environment) qx.$$environment = {}; -var envinfo = {"qx.application":"demoapp.Application","qx.revision":"21302:21319","qx.theme":"demoapp.theme.Theme","qx.version":"1.4.1"}; +var envinfo = {"qx.application":"demoapp.Application","qx.revision":"21333M","qx.theme":"demoapp.theme.Theme","qx.version":"1.5"}; for (var k in envinfo) qx.$$environment[k] = envinfo[k]; if (!qx.$$libraries) qx.$$libraries = {}; -var libinfo = {"__out__":{"sourceUri":"script"},"com.zenesis.qx.remote":{"resourceUri":"/qso-lib/source/resource","sourceUri":"/qso-lib/source/class","version":"trunk"},"demoapp":{"resourceUri":"../source/resource","sourceUri":"../source/class","version":"trunk"},"qx":{"resourceUri":"/qooxdoo/framework/source/resource","sourceUri":"/qooxdoo/framework/source/class","version":"1.4.1"}}; +var libinfo = {"__out__":{"sourceUri":"script"},"com.zenesis.qx.remote":{"resourceUri":"/qso-lib/source/resource","sourceUri":"/qso-lib/source/class","version":"trunk"},"demoapp":{"resourceUri":"../source/resource","sourceUri":"../source/class","version":"trunk"},"qx":{"resourceUri":"/qooxdoo/framework/source/resource","sourceUri":"/qooxdoo/framework/source/class","version":"1.5"}}; for (var k in libinfo) qx.$$libraries[k] = libinfo[k]; qx.$$resources = {"demoapp/test.png":[32,32,"png","demoapp"],"qx/decoration/Modern/app-header.png":[110,20,"png","qx"],"qx/decoration/Modern/arrows-combined.png":[87,8,"png","qx"],"qx/decoration/Modern/arrows/down-invert.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-74,0],"qx/decoration/Modern/arrows/down-small-invert.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-69,0],"qx/decoration/Modern/arrows/down-small.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-49,0],"qx/decoration/Modern/arrows/down.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-20,0],"qx/decoration/Modern/arrows/forward.png":[10,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-59,0],"qx/decoration/Modern/arrows/left-invert.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",0,0],"qx/decoration/Modern/arrows/left.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-44,0],"qx/decoration/Modern/arrows/rewind.png":[10,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-10,0],"qx/decoration/Modern/arrows/right-invert.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-5,0],"qx/decoration/Modern/arrows/right.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-54,0],"qx/decoration/Modern/arrows/up-invert.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-28,0],"qx/decoration/Modern/arrows/up-small.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-82,0],"qx/decoration/Modern/arrows/up.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-36,0],"qx/decoration/Modern/button-lr-combined.png":[72,52,"png","qx"],"qx/decoration/Modern/button-tb-combined.png":[4,216,"png","qx"],"qx/decoration/Modern/checkradio-combined.png":[504,14,"png","qx"],"qx/decoration/Modern/colorselector-combined.gif":[46,11,"gif","qx"],"qx/decoration/Modern/colorselector/brightness-field.png":[19,256,"png","qx"],"qx/decoration/Modern/colorselector/brightness-handle.gif":[35,11,"gif","qx","qx/decoration/Modern/colorselector-combined.gif",0,0],"qx/decoration/Modern/colorselector/huesaturation-field.jpg":[256,256,"jpeg","qx"],"qx/decoration/Modern/colorselector/huesaturation-handle.gif":[11,11,"gif","qx","qx/decoration/Modern/colorselector-combined.gif",-35,0],"qx/decoration/Modern/cursors-combined.gif":[71,20,"gif","qx"],"qx/decoration/Modern/cursors/alias.gif":[19,15,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-52,0],"qx/decoration/Modern/cursors/copy.gif":[19,15,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-33,0],"qx/decoration/Modern/cursors/move.gif":[13,9,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-20,0],"qx/decoration/Modern/cursors/nodrop.gif":[20,20,"gif","qx","qx/decoration/Modern/cursors-combined.gif",0,0],"qx/decoration/Modern/form/button-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-72],"qx/decoration/Modern/form/button-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-204],"qx/decoration/Modern/form/button-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-188],"qx/decoration/Modern/form/button-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-36],"qx/decoration/Modern/form/button-checked-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-84],"qx/decoration/Modern/form/button-checked-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-184],"qx/decoration/Modern/form/button-checked-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-156],"qx/decoration/Modern/form/button-checked-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-208],"qx/decoration/Modern/form/button-checked-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-160],"qx/decoration/Modern/form/button-checked-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-40,0],"qx/decoration/Modern/form/button-checked-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-32,0],"qx/decoration/Modern/form/button-checked-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-28],"qx/decoration/Modern/form/button-checked-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-24],"qx/decoration/Modern/form/button-checked-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-48],"qx/decoration/Modern/form/button-checked-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-checked-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-16,0],"qx/decoration/Modern/form/button-checked-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-60,0],"qx/decoration/Modern/form/button-checked-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-140],"qx/decoration/Modern/form/button-checked-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-56],"qx/decoration/Modern/form/button-checked-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-112],"qx/decoration/Modern/form/button-checked.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-disabled-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-40],"qx/decoration/Modern/form/button-disabled-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-136],"qx/decoration/Modern/form/button-disabled-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-16],"qx/decoration/Modern/form/button-disabled-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-disabled-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-68,0],"qx/decoration/Modern/form/button-disabled-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-4,0],"qx/decoration/Modern/form/button-disabled-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-116],"qx/decoration/Modern/form/button-disabled-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-168],"qx/decoration/Modern/form/button-disabled-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-60],"qx/decoration/Modern/form/button-disabled.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-68],"qx/decoration/Modern/form/button-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-144],"qx/decoration/Modern/form/button-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-8],"qx/decoration/Modern/form/button-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-24,0],"qx/decoration/Modern/form/button-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-44,0],"qx/decoration/Modern/form/button-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-192],"qx/decoration/Modern/form/button-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-148],"qx/decoration/Modern/form/button-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-104],"qx/decoration/Modern/form/button-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-hovered-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-108],"qx/decoration/Modern/form/button-hovered-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-32],"qx/decoration/Modern/form/button-hovered-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-128],"qx/decoration/Modern/form/button-hovered-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-hovered-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-20,0],"qx/decoration/Modern/form/button-hovered-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-48,0],"qx/decoration/Modern/form/button-hovered-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-44],"qx/decoration/Modern/form/button-hovered-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-76],"qx/decoration/Modern/form/button-hovered-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-88],"qx/decoration/Modern/form/button-hovered.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-56,0],"qx/decoration/Modern/form/button-preselected-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-124],"qx/decoration/Modern/form/button-preselected-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-176],"qx/decoration/Modern/form/button-preselected-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-200],"qx/decoration/Modern/form/button-preselected-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-preselected-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,0],"qx/decoration/Modern/form/button-preselected-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-4],"qx/decoration/Modern/form/button-preselected-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-152],"qx/decoration/Modern/form/button-preselected-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-preselected-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-28,0],"qx/decoration/Modern/form/button-preselected-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-36,0],"qx/decoration/Modern/form/button-preselected-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-196],"qx/decoration/Modern/form/button-preselected-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-164],"qx/decoration/Modern/form/button-preselected-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-212],"qx/decoration/Modern/form/button-preselected-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-preselected-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-8,0],"qx/decoration/Modern/form/button-preselected-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-64,0],"qx/decoration/Modern/form/button-preselected-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-96],"qx/decoration/Modern/form/button-preselected-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-80],"qx/decoration/Modern/form/button-preselected-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-132],"qx/decoration/Modern/form/button-preselected.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-pressed-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-12],"qx/decoration/Modern/form/button-pressed-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-52],"qx/decoration/Modern/form/button-pressed-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-20],"qx/decoration/Modern/form/button-pressed-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-pressed-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-52,0],"qx/decoration/Modern/form/button-pressed-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-12,0],"qx/decoration/Modern/form/button-pressed-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-100],"qx/decoration/Modern/form/button-pressed-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-172],"qx/decoration/Modern/form/button-pressed-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-64],"qx/decoration/Modern/form/button-pressed.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",0,0],"qx/decoration/Modern/form/button-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-92],"qx/decoration/Modern/form/button-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-120],"qx/decoration/Modern/form/button-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-180],"qx/decoration/Modern/form/button.png":[80,60,"png","qx"],"qx/decoration/Modern/form/checkbox-checked-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-126,0],"qx/decoration/Modern/form/checkbox-checked-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-322,0],"qx/decoration/Modern/form/checkbox-checked-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-294,0],"qx/decoration/Modern/form/checkbox-checked-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-364,0],"qx/decoration/Modern/form/checkbox-checked-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-490,0],"qx/decoration/Modern/form/checkbox-checked-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-224,0],"qx/decoration/Modern/form/checkbox-checked-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-378,0],"qx/decoration/Modern/form/checkbox-checked-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-84,0],"qx/decoration/Modern/form/checkbox-checked.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-182,0],"qx/decoration/Modern/form/checkbox-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-42,0],"qx/decoration/Modern/form/checkbox-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-392,0],"qx/decoration/Modern/form/checkbox-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-210,0],"qx/decoration/Modern/form/checkbox-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-14,0],"qx/decoration/Modern/form/checkbox-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-238,0],"qx/decoration/Modern/form/checkbox-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-462,0],"qx/decoration/Modern/form/checkbox-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-112,0],"qx/decoration/Modern/form/checkbox-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-448,0],"qx/decoration/Modern/form/checkbox-undetermined-disabled.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-focused-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-focused.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-hovered-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-hovered.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-140,0],"qx/decoration/Modern/form/checked-disabled.png":[6,6,"png","qx"],"qx/decoration/Modern/form/checked.png":[6,6,"png","qx"],"qx/decoration/Modern/form/input-focused.png":[40,12,"png","qx"],"qx/decoration/Modern/form/input.png":[84,12,"png","qx"],"qx/decoration/Modern/form/radiobutton-checked-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-196,0],"qx/decoration/Modern/form/radiobutton-checked-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-168,0],"qx/decoration/Modern/form/radiobutton-checked-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-98,0],"qx/decoration/Modern/form/radiobutton-checked-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-308,0],"qx/decoration/Modern/form/radiobutton-checked-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-406,0],"qx/decoration/Modern/form/radiobutton-checked-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-28,0],"qx/decoration/Modern/form/radiobutton-checked-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-350,0],"qx/decoration/Modern/form/radiobutton-checked-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-266,0],"qx/decoration/Modern/form/radiobutton-checked.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-252,0],"qx/decoration/Modern/form/radiobutton-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-336,0],"qx/decoration/Modern/form/radiobutton-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-476,0],"qx/decoration/Modern/form/radiobutton-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-420,0],"qx/decoration/Modern/form/radiobutton-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-56,0],"qx/decoration/Modern/form/radiobutton-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",0,0],"qx/decoration/Modern/form/radiobutton-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-154,0],"qx/decoration/Modern/form/radiobutton-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-434,0],"qx/decoration/Modern/form/radiobutton-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-280,0],"qx/decoration/Modern/form/radiobutton.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-70,0],"qx/decoration/Modern/form/tooltip-error-arrow.png":[11,14,"png","qx"],"qx/decoration/Modern/form/tooltip-error-b.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-30],"qx/decoration/Modern/form/tooltip-error-bl.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-24],"qx/decoration/Modern/form/tooltip-error-br.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,0],"qx/decoration/Modern/form/tooltip-error-c.png":[40,18,"png","qx"],"qx/decoration/Modern/form/tooltip-error-l.png":[6,18,"png","qx","qx/decoration/Modern/tooltip-error-lr-combined.png",-6,0],"qx/decoration/Modern/form/tooltip-error-r.png":[6,18,"png","qx","qx/decoration/Modern/tooltip-error-lr-combined.png",0,0],"qx/decoration/Modern/form/tooltip-error-t.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-6],"qx/decoration/Modern/form/tooltip-error-tl.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-18],"qx/decoration/Modern/form/tooltip-error-tr.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-12],"qx/decoration/Modern/form/tooltip-error.png":[127,30,"png","qx"],"qx/decoration/Modern/form/undetermined-disabled.png":[6,2,"png","qx"],"qx/decoration/Modern/form/undetermined.png":[6,2,"png","qx"],"qx/decoration/Modern/group-item.png":[110,20,"png","qx"],"qx/decoration/Modern/groupbox-lr-combined.png":[8,51,"png","qx"],"qx/decoration/Modern/groupbox-tb-combined.png":[4,24,"png","qx"],"qx/decoration/Modern/groupbox/groupbox-b.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-12],"qx/decoration/Modern/groupbox/groupbox-bl.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-16],"qx/decoration/Modern/groupbox/groupbox-br.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-8],"qx/decoration/Modern/groupbox/groupbox-c.png":[40,51,"png","qx"],"qx/decoration/Modern/groupbox/groupbox-l.png":[4,51,"png","qx","qx/decoration/Modern/groupbox-lr-combined.png",-4,0],"qx/decoration/Modern/groupbox/groupbox-r.png":[4,51,"png","qx","qx/decoration/Modern/groupbox-lr-combined.png",0,0],"qx/decoration/Modern/groupbox/groupbox-t.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-4],"qx/decoration/Modern/groupbox/groupbox-tl.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,0],"qx/decoration/Modern/groupbox/groupbox-tr.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-20],"qx/decoration/Modern/groupbox/groupbox.png":[255,59,"png","qx"],"qx/decoration/Modern/menu-background-combined.png":[80,49,"png","qx"],"qx/decoration/Modern/menu-checkradio-combined.gif":[64,7,"gif","qx"],"qx/decoration/Modern/menu/background.png":[40,49,"png","qx","qx/decoration/Modern/menu-background-combined.png",-40,0],"qx/decoration/Modern/menu/bar-background.png":[40,20,"png","qx","qx/decoration/Modern/menu-background-combined.png",0,0],"qx/decoration/Modern/menu/checkbox-invert.gif":[16,7,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-16,0],"qx/decoration/Modern/menu/checkbox.gif":[16,7,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-48,0],"qx/decoration/Modern/menu/radiobutton-invert.gif":[16,5,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-32,0],"qx/decoration/Modern/menu/radiobutton.gif":[16,5,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",0,0],"qx/decoration/Modern/pane-lr-combined.png":[12,238,"png","qx"],"qx/decoration/Modern/pane-tb-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/pane/pane-b.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-30],"qx/decoration/Modern/pane/pane-bl.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-18],"qx/decoration/Modern/pane/pane-br.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-12],"qx/decoration/Modern/pane/pane-c.png":[40,238,"png","qx"],"qx/decoration/Modern/pane/pane-l.png":[6,238,"png","qx","qx/decoration/Modern/pane-lr-combined.png",0,0],"qx/decoration/Modern/pane/pane-r.png":[6,238,"png","qx","qx/decoration/Modern/pane-lr-combined.png",-6,0],"qx/decoration/Modern/pane/pane-t.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,0],"qx/decoration/Modern/pane/pane-tl.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-24],"qx/decoration/Modern/pane/pane-tr.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-6],"qx/decoration/Modern/pane/pane.png":[185,250,"png","qx"],"qx/decoration/Modern/scrollbar-combined.png":[54,12,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-horizontal.png":[76,15,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-pressed-horizontal.png":[19,10,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-pressed-vertical.png":[10,19,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-vertical.png":[15,76,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-button-bg-horizontal.png":[12,10,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-34,0],"qx/decoration/Modern/scrollbar/scrollbar-button-bg-vertical.png":[10,12,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-6,0],"qx/decoration/Modern/scrollbar/scrollbar-down.png":[6,4,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-28,0],"qx/decoration/Modern/scrollbar/scrollbar-left.png":[4,6,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-50,0],"qx/decoration/Modern/scrollbar/scrollbar-right.png":[4,6,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-46,0],"qx/decoration/Modern/scrollbar/scrollbar-up.png":[6,4,"png","qx","qx/decoration/Modern/scrollbar-combined.png",0,0],"qx/decoration/Modern/scrollbar/slider-knob-background.png":[12,10,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-16,0],"qx/decoration/Modern/selection.png":[110,20,"png","qx"],"qx/decoration/Modern/shadow-lr-combined.png":[30,382,"png","qx"],"qx/decoration/Modern/shadow-small-lr-combined.png":[10,136,"png","qx"],"qx/decoration/Modern/shadow-small-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/shadow-tb-combined.png":[15,90,"png","qx"],"qx/decoration/Modern/shadow/shadow-b.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-30],"qx/decoration/Modern/shadow/shadow-bl.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-15],"qx/decoration/Modern/shadow/shadow-br.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-45],"qx/decoration/Modern/shadow/shadow-c.png":[40,382,"png","qx"],"qx/decoration/Modern/shadow/shadow-l.png":[15,382,"png","qx","qx/decoration/Modern/shadow-lr-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-r.png":[15,382,"png","qx","qx/decoration/Modern/shadow-lr-combined.png",-15,0],"qx/decoration/Modern/shadow/shadow-small-b.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-20],"qx/decoration/Modern/shadow/shadow-small-bl.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-15],"qx/decoration/Modern/shadow/shadow-small-br.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-10],"qx/decoration/Modern/shadow/shadow-small-c.png":[40,136,"png","qx"],"qx/decoration/Modern/shadow/shadow-small-l.png":[5,136,"png","qx","qx/decoration/Modern/shadow-small-lr-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-small-r.png":[5,136,"png","qx","qx/decoration/Modern/shadow-small-lr-combined.png",-5,0],"qx/decoration/Modern/shadow/shadow-small-t.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-5],"qx/decoration/Modern/shadow/shadow-small-tl.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-small-tr.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-25],"qx/decoration/Modern/shadow/shadow-small.png":[114,146,"png","qx"],"qx/decoration/Modern/shadow/shadow-t.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-60],"qx/decoration/Modern/shadow/shadow-tl.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-75],"qx/decoration/Modern/shadow/shadow-tr.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,0],"qx/decoration/Modern/shadow/shadow.png":[381,412,"png","qx"],"qx/decoration/Modern/splitpane-knobs-combined.png":[8,9,"png","qx"],"qx/decoration/Modern/splitpane/knob-horizontal.png":[1,8,"png","qx","qx/decoration/Modern/splitpane-knobs-combined.png",0,-1],"qx/decoration/Modern/splitpane/knob-vertical.png":[8,1,"png","qx","qx/decoration/Modern/splitpane-knobs-combined.png",0,0],"qx/decoration/Modern/table-combined.png":[94,18,"png","qx"],"qx/decoration/Modern/table/ascending.png":[8,5,"png","qx","qx/decoration/Modern/table-combined.png",0,0],"qx/decoration/Modern/table/boolean-false.png":[14,14,"png","qx","qx/decoration/Modern/table-combined.png",-80,0],"qx/decoration/Modern/table/boolean-true.png":[14,14,"png","qx","qx/decoration/Modern/table-combined.png",-26,0],"qx/decoration/Modern/table/descending.png":[8,5,"png","qx","qx/decoration/Modern/table-combined.png",-18,0],"qx/decoration/Modern/table/header-cell.png":[40,18,"png","qx","qx/decoration/Modern/table-combined.png",-40,0],"qx/decoration/Modern/table/select-column-order.png":[10,9,"png","qx","qx/decoration/Modern/table-combined.png",-8,0],"qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png":[10,14,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png":[6,15,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-left-active-lr-combined.png":[10,37,"png","qx"],"qx/decoration/Modern/tabview-button-left-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png":[6,39,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-right-active-lr-combined.png":[10,37,"png","qx"],"qx/decoration/Modern/tabview-button-right-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png":[6,39,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-top-active-lr-combined.png":[10,12,"png","qx"],"qx/decoration/Modern/tabview-button-top-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png":[6,15,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-pane-lr-combined.png":[60,2,"png","qx"],"qx/decoration/Modern/tabview-pane-tb-combined.png":[30,180,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-bottom-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-bottom-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-bottom-active-c.png":[40,14,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-active-l.png":[5,14,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-active-r.png":[5,14,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-bottom-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-bottom-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-bottom-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-active.png":[49,24,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-c.png":[40,15,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-l.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-r.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-bottom-inactive.png":[45,21,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-left-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-left-active-c.png":[40,37,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-active-l.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-left-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-active-r.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-left-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-left-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-left-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-left-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-left-active.png":[22,47,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-left-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-left-inactive-c.png":[40,39,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-inactive-l.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-r.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-left-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-left-inactive.png":[20,45,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-right-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-right-active-c.png":[40,37,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-active-l.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-right-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-active-r.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-right-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-right-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-right-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-right-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-right-active.png":[22,47,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-right-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-right-inactive-c.png":[40,39,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-inactive-l.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-r.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-right-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-right-inactive.png":[20,45,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-top-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-top-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-top-active-c.png":[40,14,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-active-l.png":[5,12,"png","qx","qx/decoration/Modern/tabview-button-top-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-active-r.png":[5,12,"png","qx","qx/decoration/Modern/tabview-button-top-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-top-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-top-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-top-active.png":[48,22,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-top-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-top-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-c.png":[40,15,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-inactive-l.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-r.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-top-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-top-inactive.png":[45,21,"png","qx"],"qx/decoration/Modern/tabview/tabview-pane-b.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-60],"qx/decoration/Modern/tabview/tabview-pane-bl.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tabview-pane-br.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-120],"qx/decoration/Modern/tabview/tabview-pane-c.png":[40,120,"png","qx"],"qx/decoration/Modern/tabview/tabview-pane-l.png":[30,2,"png","qx","qx/decoration/Modern/tabview-pane-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tabview-pane-r.png":[30,2,"png","qx","qx/decoration/Modern/tabview-pane-lr-combined.png",-30,0],"qx/decoration/Modern/tabview/tabview-pane-t.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-150],"qx/decoration/Modern/tabview/tabview-pane-tl.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-30],"qx/decoration/Modern/tabview/tabview-pane-tr.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-90],"qx/decoration/Modern/tabview/tabview-pane.png":[185,250,"png","qx"],"qx/decoration/Modern/toolbar-combined.png":[80,130,"png","qx"],"qx/decoration/Modern/toolbar/toolbar-gradient-blue.png":[40,130,"png","qx","qx/decoration/Modern/toolbar-combined.png",-40,0],"qx/decoration/Modern/toolbar/toolbar-gradient.png":[40,130,"png","qx","qx/decoration/Modern/toolbar-combined.png",0,0],"qx/decoration/Modern/toolbar/toolbar-handle-knob.gif":[1,8,"gif","qx"],"qx/decoration/Modern/toolbar/toolbar-part.gif":[7,1,"gif","qx"],"qx/decoration/Modern/tooltip-error-lr-combined.png":[12,18,"png","qx"],"qx/decoration/Modern/tooltip-error-tb-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/tree-combined.png":[32,8,"png","qx"],"qx/decoration/Modern/tree/closed-selected.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-24,0],"qx/decoration/Modern/tree/closed.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-16,0],"qx/decoration/Modern/tree/open-selected.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-8,0],"qx/decoration/Modern/tree/open.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",0,0],"qx/decoration/Modern/window-captionbar-buttons-combined.png":[108,9,"png","qx"],"qx/decoration/Modern/window-captionbar-lr-active-combined.png":[12,9,"png","qx"],"qx/decoration/Modern/window-captionbar-lr-inactive-combined.png":[12,9,"png","qx"],"qx/decoration/Modern/window-captionbar-tb-active-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/window-captionbar-tb-inactive-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/window-statusbar-lr-combined.png":[8,7,"png","qx"],"qx/decoration/Modern/window-statusbar-tb-combined.png":[4,24,"png","qx"],"qx/decoration/Modern/window/captionbar-active-b.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-18],"qx/decoration/Modern/window/captionbar-active-bl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-24],"qx/decoration/Modern/window/captionbar-active-br.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-12],"qx/decoration/Modern/window/captionbar-active-c.png":[40,9,"png","qx"],"qx/decoration/Modern/window/captionbar-active-l.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-active-combined.png",-6,0],"qx/decoration/Modern/window/captionbar-active-r.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-active-combined.png",0,0],"qx/decoration/Modern/window/captionbar-active-t.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-6],"qx/decoration/Modern/window/captionbar-active-tl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,0],"qx/decoration/Modern/window/captionbar-active-tr.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-30],"qx/decoration/Modern/window/captionbar-active.png":[69,21,"png","qx"],"qx/decoration/Modern/window/captionbar-inactive-b.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-24],"qx/decoration/Modern/window/captionbar-inactive-bl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-6],"qx/decoration/Modern/window/captionbar-inactive-br.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-30],"qx/decoration/Modern/window/captionbar-inactive-c.png":[40,9,"png","qx"],"qx/decoration/Modern/window/captionbar-inactive-l.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-inactive-combined.png",0,0],"qx/decoration/Modern/window/captionbar-inactive-r.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-inactive-combined.png",-6,0],"qx/decoration/Modern/window/captionbar-inactive-t.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,0],"qx/decoration/Modern/window/captionbar-inactive-tl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-12],"qx/decoration/Modern/window/captionbar-inactive-tr.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-18],"qx/decoration/Modern/window/captionbar-inactive.png":[69,21,"png","qx"],"qx/decoration/Modern/window/close-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-27,0],"qx/decoration/Modern/window/close-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-9,0],"qx/decoration/Modern/window/close-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-90,0],"qx/decoration/Modern/window/maximize-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-18,0],"qx/decoration/Modern/window/maximize-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-81,0],"qx/decoration/Modern/window/maximize-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-54,0],"qx/decoration/Modern/window/minimize-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-63,0],"qx/decoration/Modern/window/minimize-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-72,0],"qx/decoration/Modern/window/minimize-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-36,0],"qx/decoration/Modern/window/restore-active-hovered.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",0,0],"qx/decoration/Modern/window/restore-active.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-99,0],"qx/decoration/Modern/window/restore-inactive.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-45,0],"qx/decoration/Modern/window/statusbar-b.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-16],"qx/decoration/Modern/window/statusbar-bl.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-20],"qx/decoration/Modern/window/statusbar-br.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-4],"qx/decoration/Modern/window/statusbar-c.png":[40,7,"png","qx"],"qx/decoration/Modern/window/statusbar-l.png":[4,7,"png","qx","qx/decoration/Modern/window-statusbar-lr-combined.png",-4,0],"qx/decoration/Modern/window/statusbar-r.png":[4,7,"png","qx","qx/decoration/Modern/window-statusbar-lr-combined.png",0,0],"qx/decoration/Modern/window/statusbar-t.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,0],"qx/decoration/Modern/window/statusbar-tl.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-8],"qx/decoration/Modern/window/statusbar-tr.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-12],"qx/decoration/Modern/window/statusbar.png":[369,15,"png","qx"],"qx/icon/Tango/16/actions/dialog-cancel.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/dialog-ok.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/view-refresh.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/window-close.png":[16,16,"png","qx"],"qx/icon/Tango/16/apps/office-calendar.png":[16,16,"png","qx"],"qx/icon/Tango/16/apps/utilities-color-chooser.png":[16,16,"png","qx"],"qx/icon/Tango/16/mimetypes/office-document.png":[16,16,"png","qx"],"qx/icon/Tango/16/places/folder-open.png":[16,16,"png","qx"],"qx/icon/Tango/16/places/folder.png":[16,16,"png","qx"],"qx/icon/Tango/22/mimetypes/office-document.png":[22,22,"png","qx"],"qx/icon/Tango/22/places/folder-open.png":[22,22,"png","qx"],"qx/icon/Tango/22/places/folder.png":[22,22,"png","qx"],"qx/icon/Tango/32/mimetypes/office-document.png":[32,32,"png","qx"],"qx/icon/Tango/32/places/folder-open.png":[32,32,"png","qx"],"qx/icon/Tango/32/places/folder.png":[32,32,"png","qx"],"qx/static/blank.gif":[1,1,"gif","qx"]}; qx.$$translations = {}; -qx.$$locales = {"C":{"alternateQuotationEnd":"’","alternateQuotationStart":"‘","cldr_am":"AM","cldr_date_format_full":"EEEE, MMMM d, y","cldr_date_format_long":"MMMM d, y","cldr_date_format_medium":"MMM d, y","cldr_date_format_short":"M/d/yy","cldr_date_time_format_EEEd":"d EEE","cldr_date_time_format_Hm":"HH:mm","cldr_date_time_format_Hms":"HH:mm:ss","cldr_date_time_format_M":"L","cldr_date_time_format_MEd":"E, M/d","cldr_date_time_format_MMM":"LLL","cldr_date_time_format_MMMEd":"E, MMM d","cldr_date_time_format_MMMd":"MMM d","cldr_date_time_format_Md":"M/d","cldr_date_time_format_d":"d","cldr_date_time_format_hm":"h:mm a","cldr_date_time_format_hms":"h:mm:ss a","cldr_date_time_format_ms":"mm:ss","cldr_date_time_format_y":"y","cldr_date_time_format_yM":"M/y","cldr_date_time_format_yMEd":"EEE, M/d/y","cldr_date_time_format_yMMM":"MMM y","cldr_date_time_format_yMMMEd":"EEE, MMM d, y","cldr_date_time_format_yQ":"Q y","cldr_date_time_format_yQQQ":"QQQ y","cldr_day_format_abbreviated_fri":"Fri","cldr_day_format_abbreviated_mon":"Mon","cldr_day_format_abbreviated_sat":"Sat","cldr_day_format_abbreviated_sun":"Sun","cldr_day_format_abbreviated_thu":"Thu","cldr_day_format_abbreviated_tue":"Tue","cldr_day_format_abbreviated_wed":"Wed","cldr_day_format_wide_fri":"Friday","cldr_day_format_wide_mon":"Monday","cldr_day_format_wide_sat":"Saturday","cldr_day_format_wide_sun":"Sunday","cldr_day_format_wide_thu":"Thursday","cldr_day_format_wide_tue":"Tuesday","cldr_day_format_wide_wed":"Wednesday","cldr_day_stand-alone_narrow_fri":"F","cldr_day_stand-alone_narrow_mon":"M","cldr_day_stand-alone_narrow_sat":"S","cldr_day_stand-alone_narrow_sun":"S","cldr_day_stand-alone_narrow_thu":"T","cldr_day_stand-alone_narrow_tue":"T","cldr_day_stand-alone_narrow_wed":"W","cldr_month_format_abbreviated_1":"Jan","cldr_month_format_abbreviated_10":"Oct","cldr_month_format_abbreviated_11":"Nov","cldr_month_format_abbreviated_12":"Dec","cldr_month_format_abbreviated_2":"Feb","cldr_month_format_abbreviated_3":"Mar","cldr_month_format_abbreviated_4":"Apr","cldr_month_format_abbreviated_5":"May","cldr_month_format_abbreviated_6":"Jun","cldr_month_format_abbreviated_7":"Jul","cldr_month_format_abbreviated_8":"Aug","cldr_month_format_abbreviated_9":"Sep","cldr_month_format_wide_1":"January","cldr_month_format_wide_10":"October","cldr_month_format_wide_11":"November","cldr_month_format_wide_12":"December","cldr_month_format_wide_2":"February","cldr_month_format_wide_3":"March","cldr_month_format_wide_4":"April","cldr_month_format_wide_5":"May","cldr_month_format_wide_6":"June","cldr_month_format_wide_7":"July","cldr_month_format_wide_8":"August","cldr_month_format_wide_9":"September","cldr_month_stand-alone_narrow_1":"J","cldr_month_stand-alone_narrow_10":"O","cldr_month_stand-alone_narrow_11":"N","cldr_month_stand-alone_narrow_12":"D","cldr_month_stand-alone_narrow_2":"F","cldr_month_stand-alone_narrow_3":"M","cldr_month_stand-alone_narrow_4":"A","cldr_month_stand-alone_narrow_5":"M","cldr_month_stand-alone_narrow_6":"J","cldr_month_stand-alone_narrow_7":"J","cldr_month_stand-alone_narrow_8":"A","cldr_month_stand-alone_narrow_9":"S","cldr_number_decimal_separator":".","cldr_number_group_separator":",","cldr_number_percent_format":"#,##0%","cldr_pm":"PM","cldr_time_format_full":"h:mm:ss a zzzz","cldr_time_format_long":"h:mm:ss a z","cldr_time_format_medium":"h:mm:ss a","cldr_time_format_short":"h:mm a","day":"Day","dayperiod":"AM/PM","era":"Era","hour":"Hour","minute":"Minute","month":"Month","quotationEnd":"”","quotationStart":"“","second":"Second","week":"Week","weekday":"Day of the Week","year":"Year","zone":"Zone"},"en":{"alternateQuotationEnd":"’","alternateQuotationStart":"‘","cldr_am":"AM","cldr_date_format_full":"EEEE, MMMM d, y","cldr_date_format_long":"MMMM d, y","cldr_date_format_medium":"MMM d, y","cldr_date_format_short":"M/d/yy","cldr_date_time_format_EEEd":"d EEE","cldr_date_time_format_Hm":"HH:mm","cldr_date_time_format_Hms":"HH:mm:ss","cldr_date_time_format_M":"L","cldr_date_time_format_MEd":"E, M/d","cldr_date_time_format_MMM":"LLL","cldr_date_time_format_MMMEd":"E, MMM d","cldr_date_time_format_MMMd":"MMM d","cldr_date_time_format_Md":"M/d","cldr_date_time_format_d":"d","cldr_date_time_format_hm":"h:mm a","cldr_date_time_format_hms":"h:mm:ss a","cldr_date_time_format_ms":"mm:ss","cldr_date_time_format_y":"y","cldr_date_time_format_yM":"M/y","cldr_date_time_format_yMEd":"EEE, M/d/y","cldr_date_time_format_yMMM":"MMM y","cldr_date_time_format_yMMMEd":"EEE, MMM d, y","cldr_date_time_format_yQ":"Q y","cldr_date_time_format_yQQQ":"QQQ y","cldr_day_format_abbreviated_fri":"Fri","cldr_day_format_abbreviated_mon":"Mon","cldr_day_format_abbreviated_sat":"Sat","cldr_day_format_abbreviated_sun":"Sun","cldr_day_format_abbreviated_thu":"Thu","cldr_day_format_abbreviated_tue":"Tue","cldr_day_format_abbreviated_wed":"Wed","cldr_day_format_wide_fri":"Friday","cldr_day_format_wide_mon":"Monday","cldr_day_format_wide_sat":"Saturday","cldr_day_format_wide_sun":"Sunday","cldr_day_format_wide_thu":"Thursday","cldr_day_format_wide_tue":"Tuesday","cldr_day_format_wide_wed":"Wednesday","cldr_day_stand-alone_narrow_fri":"F","cldr_day_stand-alone_narrow_mon":"M","cldr_day_stand-alone_narrow_sat":"S","cldr_day_stand-alone_narrow_sun":"S","cldr_day_stand-alone_narrow_thu":"T","cldr_day_stand-alone_narrow_tue":"T","cldr_day_stand-alone_narrow_wed":"W","cldr_month_format_abbreviated_1":"Jan","cldr_month_format_abbreviated_10":"Oct","cldr_month_format_abbreviated_11":"Nov","cldr_month_format_abbreviated_12":"Dec","cldr_month_format_abbreviated_2":"Feb","cldr_month_format_abbreviated_3":"Mar","cldr_month_format_abbreviated_4":"Apr","cldr_month_format_abbreviated_5":"May","cldr_month_format_abbreviated_6":"Jun","cldr_month_format_abbreviated_7":"Jul","cldr_month_format_abbreviated_8":"Aug","cldr_month_format_abbreviated_9":"Sep","cldr_month_format_wide_1":"January","cldr_month_format_wide_10":"October","cldr_month_format_wide_11":"November","cldr_month_format_wide_12":"December","cldr_month_format_wide_2":"February","cldr_month_format_wide_3":"March","cldr_month_format_wide_4":"April","cldr_month_format_wide_5":"May","cldr_month_format_wide_6":"June","cldr_month_format_wide_7":"July","cldr_month_format_wide_8":"August","cldr_month_format_wide_9":"September","cldr_month_stand-alone_narrow_1":"J","cldr_month_stand-alone_narrow_10":"O","cldr_month_stand-alone_narrow_11":"N","cldr_month_stand-alone_narrow_12":"D","cldr_month_stand-alone_narrow_2":"F","cldr_month_stand-alone_narrow_3":"M","cldr_month_stand-alone_narrow_4":"A","cldr_month_stand-alone_narrow_5":"M","cldr_month_stand-alone_narrow_6":"J","cldr_month_stand-alone_narrow_7":"J","cldr_month_stand-alone_narrow_8":"A","cldr_month_stand-alone_narrow_9":"S","cldr_number_decimal_separator":".","cldr_number_group_separator":",","cldr_number_percent_format":"#,##0%","cldr_pm":"PM","cldr_time_format_full":"h:mm:ss a zzzz","cldr_time_format_long":"h:mm:ss a z","cldr_time_format_medium":"h:mm:ss a","cldr_time_format_short":"h:mm a","day":"Day","dayperiod":"AM/PM","era":"Era","hour":"Hour","minute":"Minute","month":"Month","quotationEnd":"”","quotationStart":"“","second":"Second","week":"Week","weekday":"Day of the Week","year":"Year","zo... [truncated message content] |
From: <spa...@us...> - 2011-07-22 16:27:16
|
Revision: 21337 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21337&view=rev Author: spackers Date: 2011-07-22 16:27:08 +0000 (Fri, 22 Jul 2011) Log Message: ----------- upgrade to qx1.5 Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/Proxy.js trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/ProxyManager.js Removed Paths: ------------- trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/com.zenesis.qx.remote/ Copied: trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/Proxy.js (from rev 21336, trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/com.zenesis.qx.remote/Proxy.js) =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/Proxy.js (rev 0) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/Proxy.js 2011-07-22 16:27:08 UTC (rev 21337) @@ -0,0 +1,276 @@ +/* ************************************************************************ + + server-objects - a contrib to the Qooxdoo project (http://qooxdoo.org/) + + http://qooxdoo.org + + Copyright: + 2010 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************ */ + +/** + * Proxy class + * + * Base class for proxy objects to mirror Proxied objects on the server + */ +qx.Class.define("com.zenesis.qx.remote.Proxy", { + extend: qx.core.Object, + + construct: function(serverId) { + qx.core.Assert.assertTrue(!serverId || serverId > 0, "Invalid use of Proxy - invalid serverId " + (serverId||"null") + " specified"); + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + this.__serverClass = PM.getClassInfo(this.classname); + if (serverId == undefined || serverId == null) { + this.__isPending = true; + this.__serverId = PM.registerClientObject(this); + } else { + this.__isPending = false; + this.__serverId = serverId; + } + }, + + members: { + __serverId: null, + __serverClass: null, + __isPending: false, + + /** + * Returns the server ID for this object + */ + getServerId: function() { + return this.__serverId; + }, + + /** + * Sets the server ID - used when the object was created on the client and the server + * has returned a new server ID for it; to be called by ProxyManager only + */ + setServerId: function(serverId) { + qx.core.Assert.assert(this.__serverId < 0); + this.__serverId = serverId; + }, + + /** + * Called by ProxyManager when a Proxy instance that was created on the client has + * been sent to the server + */ + setSentToServer: function() { + qx.core.Assert.assertTrue(this.__isPending); + this.__isPending = false; + }, + + /** + * Detects whether this object has already been sent to the server + */ + getSentToServer: function() { + return !this.__isPending; + }, + + /** + * Called by methods to invoke the server method call + */ + _callServer: function(name, args) { + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + var result = PM.callServerMethod(this, name, args); + var ex = PM.clearException(); + if (ex) + throw ex; + return result; + }, + + /** + * Called when a property value is applied + * @param propertyName {String} the name of the property + * @param value {Object} the new value + * @param oldValue {Object?} the previous value, only applicable to onDemand properties + */ + _applyProperty: function(propertyName, value, oldValue) { + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + var propDef = this.getPropertyDef(propertyName); + if (propDef.array == "wrap" && !propDef.noArrayEdits) { + if (oldValue) + oldValue.removeListenerById(propDef.changeListenerId); + if (value) + propDef.changeListenerId = value.addListener("change", function(evt) { + PM.onWrappedArrayChange(evt, this, propDef); + }, this); + else + propDef.changeListenerId = null; + } + + // We mustn't tell the server anything if it does not yet know about this object + if (this.__isPending) + return; + PM.setPropertyValue(this, propertyName, value, oldValue); + var ex = PM.clearException(); + if (ex) + throw ex; + }, + + /** + * Called when an on-demand property's get method is called + */ + _getPropertyOnDemand: function(propName) { + // Check the cache + if (this.$$proxyUser) { + var value = this.$$proxyUser[propName]; + if (value != undefined) + return value; + } else + this.$$proxyUser = {}; + + // Call the server + var upname = qx.lang.String.firstUp(propName); + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + var propDef = this.getPropertyDef(propName); + var value = PM.callServerMethod(this, "get" + upname, []); + var ex = PM.clearException(); + if (ex) + throw ex; + + // Update the cache and done + return this.__storePropertyOnDemand(propDef, value); + }, + + /** + * Stores a value for an on-demand property, adding and removing listeners as required + * @param propDef + * @param value + * @returns + */ + __storePropertyOnDemand: function(propDef, value) { + var oldValue; + if (this.$$proxyUser && (oldValue = this.$$proxyUser[propDef.name])) { + if (propDef.array = "wrap") { + oldValue.removeListenerById(propDef.changeListenerId); + delete propDef.changeListenerId; + } + delete this.$$proxyUser[propDef.name]; + } + if (value !== undefined) { + if (value && propDef.array == "wrap") { + if (!qx.Class.isSubClassOf(value.constructor, qx.data.Array)) + value = new qx.data.Array(value); + propDef.changeListenerId = value.addListener("change", function(evt) { + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + PM.onWrappedArrayChange(evt, this, propDef); + }, this); + } + this.$$proxyUser[propDef.name] = value; + } + return value; + }, + + /** + * Called when an on-demand property's expire method is called + */ + _expirePropertyOnDemand: function(propName, sendToServer) { + var oldValue; + if (this.$$proxyUser && (oldValue = this.$$proxyUser[propName])) + this.__storePropertyOnDemand(this.getPropertyDef(propName), undefined); + + if (sendToServer === undefined || sendToServer) { + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + PM.expireProperty(this, propName); + } + }, + + /** + * Called when an on-demand property's set method is called + */ + _setPropertyOnDemand: function(propName, value) { + // Update the cache + var oldValue; + if (!this.$$proxyUser) + this.$$proxyUser = {}; + else + oldValue = this.$$proxyUser[propName]; + + // Don't use __storePropertyOnDemand here - use _applyProperty instead + var propDef = this.getPropertyDef(propName); + if (propDef.array == "wrap") + value = new qx.data.Array(value); + + this.$$proxyUser[propName] = value; + this._applyProperty(propName, value, oldValue); + }, + + /** + * Used as the transform property for arrays to make sure that the value is always a qx.data.Array + */ + _transformToDataArray: function(value) { + if (!value) + return new qx.data.Array(); + if (qx.Class.isSubClassOf(value.constructor, qx.data.Array)) + return value; + return new qx.data.Array(value); + }, + + /* + * @Override + */ + addListener: function(name, listener, context, capture) { + var result = this.base(arguments, name, listener, context, capture); + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + PM.addServerListener(this, name); + return result; + }, + + /* + * @Override + */ + removeListener: function(name, listener, context, capture) { + var existed = this.base(arguments, name, listener, context, capture); + if (!existed) + return; + var PM = com.zenesis.qx.remote.ProxyManager.getInstance(); + PM.removeServerListener(this, name); + return existed; + }, + + /** + * Gets the proxy property definition for a named property + * @param propertyName {String} the name of the property + * @return {Map} the property definition received from the server + */ + getPropertyDef: function(propertyName) { + for (var $$proxyDef = this.$$proxyDef; $$proxyDef; $$proxyDef = $$proxyDef.extend) { + if ($$proxyDef.properties) { + var propDef = $$proxyDef.properties[propertyName]; + if (propDef) + return propDef; + } + } + return null; + }, + + /** + * Gets the proxy event definition for a named event + * @param name {String} the name of the event + * @return {Map} the event definition received from the server + */ + getEventDef: function(name) { + for (var $$proxyDef = this.$$proxyDef; $$proxyDef; $$proxyDef = $$proxyDef.extend) { + if ($$proxyDef.events) { + var eventDef = $$proxyDef.events[name]; + if (eventDef) + return eventDef; + } + } + return null; + } + } + +}); Copied: trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/ProxyManager.js (from rev 21336, trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/com.zenesis.qx.remote/ProxyManager.js) =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/ProxyManager.js (rev 0) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/ProxyManager.js 2011-07-22 16:27:08 UTC (rev 21337) @@ -0,0 +1,1073 @@ +/* ************************************************************************ + + server-objects - a contrib to the Qooxdoo project (http://qooxdoo.org/) + + http://qooxdoo.org + + Copyright: + 2010 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************ */ + +/** + * ProxyManager + * + * The client must provide an implementation of this class so that the proxy classes + * have an implementation-neutral means to send data to the server + * + * Matches the server-side c.z.g.af.remote.ProxyManager. + * + * @author John Spackman [joh...@ze...] + */ +qx.Class.define("com.zenesis.qx.remote.ProxyManager", { + extend: qx.core.Object, + + statics: { + __instance: null, + + /** + * Called to set the singleton global instance that will be used to send data + */ + setInstance: function(instance) { + if (this.__instance && instance) + this.warn("Overwriting existing instance " + this.__instance + " with " + instance); + this.__instance = instance; + }, + + /** + * Returns the current instance + */ + getInstance: function() { + return this.__instance; + } + }, + + construct: function(proxyUrl) { + if (this.constructor.__instance) + this.warn("Not setting ProxyManager instance because one is already defined"); + else + com.zenesis.qx.remote.ProxyManager.setInstance(this); + + this.__serverObjects = []; + this.setProxyUrl(proxyUrl); + + /* + * Qooxdoo 0.8.2 compatability + */ + if (!qx.lang.Type) { + qx.lang.Type = { + getClass: function(value) { + var classString = Object.prototype.toString.call(value); + return classString.slice(8, -1); + }, + isArray: qx.lang.Array.isArray, + isDate: function(value) { + // Added "value !== null" because IE throws an exception "Object expected" + // by executing "value instanceof Array" if value is a DOM element that + // doesn't exist. It seems that there is a internal different between a + // JavaScript null and a null returned from calling DOM. + // e.q. by document.getElementById("ReturnedNull"). + return ( + value !== null && ( + this.getClass(value) == "Date" || + value instanceof Date) + ); + } + }; + } + }, + + properties: { + proxyUrl: { + init: null, + nullable: false, + check: "String" + } + }, + + events: { + "exception": "qx.event.type.Data" + }, + + members: { + + // Server object array and hash lookup + __serverObjects: null, + + // Client-created server objects and hash lookup + __clientObjects: null, + + // Dirty arrays + __dirtyArrays: null, + + // Extra class information + __classInfo: {}, + + // Classes currently being defined + __classesBeingDefined: {}, + + // Queue of commands to send to the server at the next flush + __queue: null, + + // The property currently being set, if any (used to prevent recursive sets) + __setPropertyObject: null, + __setPropertyName: null, + + // The number of call backs to the server + __numberOfCalls: 0, + + // Exception returned from the server, to be thrown at end of current function call + __exception: null, + + /** + * The Servlet at the other end is configured to return an initial object for this + * session; it can be any arbitrary object because QRJO will instantiate it correctly + * at this end. That becomes the entry point for the application from here on in. + * + * Can be called multiple times, the first object is always returned. + */ + getBootstrapObject: function() { + if (this.__serverObjects.length) + return this.__serverObjects[0]; + var result = null; + var msg = { cmd: "bootstrap" }; + this._sendCommandToServer(msg, function(evt) { + result = this._processResponse(evt, true); + }, this); + var ex = this.clearException(); + if (ex) + throw ex; + return result; + }, + + /** + * Detects whether the connection has ever been made, i.e. whether getBootstrapObject() has + * already been called. + * @return true if connected + */ + hasConnected: function() { + return this.__serverObjects.length > 0; + }, + + /** + * Registers a client object + * @return the new ID for this object + */ + registerClientObject: function(obj) { + if (!this.__clientObjects) + this.__clientObjects = [ "invalid" ]; + var index = this.__clientObjects.length; + this.__clientObjects[index] = obj; + return 0 - index; + }, + + /** + * Handles the "completed" event from the Request + * @param evt {Response} the response event + */ + _processResponse: function(evt) { + var txt = evt.getContent(); + var statusCode = evt.getStatusCode(); + + if (statusCode == 200) { + txt = qx.lang.String.trim(txt); + try { + //this.debug("received: txt=" + txt); + if (!txt.length) + return null; + var data = eval("(" + txt + ")"); + return this._processData(data); + } catch(e) { + this.debug("Exception during receive: " + this.__describeException(e)); + this._setException(e); + } + + } else { + this.debug("Error returned by server, code=" + statusCode); + this._setException(new Error("statusCode=" + statusCode)); + } + }, + + /** + * Called to handle the response from an upload + */ + uploadResponse: function(txt) { + txt = qx.lang.String.trim(txt); + try { + //this.debug("received: txt=" + txt); + if (!txt.length) + return null; + var data = eval("(" + txt + ")"); + return this._processData(data); + } catch(e) { + this.debug("Exception during uploadResponse: " + this.__describeException(e)); + throw e; + } + }, + + /** + * Called to interpret the text returned by the server and perform any commands + * @param data {Object} the response compiled from JSON + */ + _processData: function(data) { + var result = null; + for (var i = 0, l = data.length; i < l; i++) { + var elem = data[i]; + var type = elem.type; + + // Init or Function return + if (type == "bootstrap" || type == "return") { + qx.core.Assert.assertNull(result, "Multiple function returns in data from server"); + result = this._readProxyObject(elem.data); + + // An exception was thrown + } else if (type == "exception") { + this._handleServerException(elem.data, "function"); + + // A client-created object has been registered on the server, update the IDs to server IDs + } else if (type == "mapClientId") { + var index = 0 - elem.data.clientId; + var clientObject = this.__clientObjects[index]; + this.__clientObjects[index] = null; + qx.core.Assert.assertEquals(elem.data.clientId, clientObject.getServerId()); + + clientObject.setServerId(elem.data.serverId); + qx.core.Assert.assertEquals(elem.data.serverId, this.__serverObjects.length); + this.__serverObjects[elem.data.serverId] = clientObject; + + // Setting a property failed with an exception - change the value back and handle the exception + } else if (type == "restore") { + var obj = this._readProxyObject(elem.object); + try { + var value = this._readProxyObject(elem.data.oldValue); + this.setPropertyValueFromServer(obj, elem.name, value); + } catch(e) { + // Ignore it - we were only trying to recover from a server exception + } + this._handleServerException(elem.data, "property"); + + // A server property value changed, update the client + } else if (type == "set") { + var obj = this._readProxyObject(elem.object); + var value = this._readProxyObject(elem.data); + this.setPropertyValueFromServer(obj, elem.name, value); + + // An on demand server property value changed, clear the cache + } else if (type == "expire") { + var obj = this._readProxyObject(elem.object); + var upname = qx.lang.String.firstUp(elem.name); + obj["expire" + upname](false); + + // The server has sent a class definition + } else if (type == "define") { + this.getClassOrCreate(elem.object); + + // An event was fired on the server + } else if (type == "fire") { + var obj = this._readProxyObject(elem.object); + var eventData = elem.data ? this._readProxyObject(elem.data) : null; + obj.fireDataEvent(elem.name, eventData); + + // Explicitly load a type onto the client + } else if (type == "load-type") { + var clazz = this.getClassOrCreate(elem.object); + + // Unknown! + } else + qx.core.Assert.assertTrue(false, "Unexpected type of command from server: " + type); + } + + // Once all client objects are processed, the __clientObjects array should be full of + // nulls and therefore all client IDs are disposed of (and replaced with server IDs); + // when this is the case, we can reset the client ids array + var cos = this.__clientObjects; + if (cos && cos.length > 1) { + var isEmpty = true; + for (var i = 1; i < cos.length; i++) + if (cos[i] != null) { + isEmpty = false; + break; + } + if (isEmpty) + this.__clientObjects = null; + } + + return result; + }, + + /** + * Reads a proxy object from the server and either creates a new + * object (creating classes as required) or returns an existing one + */ + _readProxyObject: function(data) { + if (typeof data == "undefined" || data === null) + return null; + var result = null; + + // Array - unpack individual elements + if (qx.lang.Type.isArray(data)) { + // Do we really have to process each element? + var ok = true; + for (var i = 0; ok && i < data.length; i++) + if (typeof data[i] == "object") + ok = false; + + // All simple values, just use the parsed data + if (ok) + result = data; + + // Copy values by hand + else { + result = []; + for (var i = 0; i < data.length; i++) + result[i] = this._readProxyObject(data[i]); + } + + // Object - is it a server object or a map? + } else if (typeof data == "object") { + + // It's a server object + if (data.serverId != undefined) { + var serverId = data.serverId; + + // Get or create it + result = this.getServerObject(serverId); + if (!result) { + var clazz = this.getClassOrCreate(data.clazz); + result = this.__serverObjects[serverId] = new clazz(serverId); + } + + // Assign any values + if (data.order) { + for (var i = 0; i < data.order.length; i++) { + var propName = data.order[i]; + var propValue = data.values[propName]; +// if (propName == "resources" || propName == "questions") +// debugger; + if (propValue) + propValue = this._readProxyObject(propValue); + this.setPropertyValueFromServer(result, propName, propValue); + } + } + /* Cannot cycle through the names in "values" because the order is not guaranteed, + * and ordering is important if we're going to be able to recreate the objects because + * only the first reference contains the class and object definition - thereafter, + * just a serverId is sent + if (data.values) { + for (var propName in data.values) { + var propValue = data.values[propName]; + if (propValue) + propValue = this._readProxyObject(propValue); + this.setPropertyValueFromServer(result, propName, propValue); + } + } + */ + + // Prefetched method return values + if (data.prefetch) { + for (var methodName in data.prefetch) { + var value = data.prefetch[methodName]; + if (!result.$$proxy.cachedResults) + result.$$proxy.cachedResults = {}; + if (value) + value = this._readProxyObject(value); + result.$$proxy.cachedResults[methodName] = value; + } + } + + // Must be a map + } else { + // Do we really have to process every value? + var ok = true; + for (var propName in data) + if (typeof data[propName] == "object") { + ok = false; + break; + } + + // All simple values? then just use the already parsed data + if (ok) + result = data; + + // Copy one by one, recursively + else { + /* Note that ordering is not defined and if server objects with recursive + * references are passed for the first time in a map, they may fail to create. + */ + result = {}; + for (var propName in data) { + var propValue = data[propName]; + if (propValue) + propValue = this._readProxyObject(propValue); + result[propName] = propValue; + } + } + } + + // Scalar value, just use it direct + } else + result = data; + + return result; + }, + + /** + * Reads a "clazz" and interprets it to return a class, creating new + * class definitions as required + */ + getClassOrCreate: function(data) { + // If it's a string, then it's an existing class we need to create + if (typeof data == "string") { + if (this.__classesBeingDefined[data]) + return null; + var clazz = eval(data); + return clazz; + } + + this.__classesBeingDefined[data.className] = true; + try { + // Create the JSON definition for qx.Class + var def; + if (data.isInterface) + def = { members: { } }; + else { + def = { + construct: /*function(serverId) { + this.base(arguments, serverId); + },*/ new Function('serverId', 'this.base(arguments, serverId); this.$$proxy = {};'), + members: { } + }; + if (data.extend) { + def.extend = this.getClassOrCreate(data.extend); + data.extend = def.extend.prototype.$$proxyDef; + } else + def.extend = com.zenesis.qx.remote.Proxy; + } + + // Add interfaces + if (data.interfaces) { + var interfaces = data.interfaces; + for (var i = 0; i < data.interfaces.length; i++) + interfaces[i] = this.getClassOrCreate(interfaces[i]); + if (interfaces.length) { + if (data.isInterface) + def.extend = interfaces; + else + def.implement = interfaces; + } + } + + // Add methods + if (data.methods) + for (var methodName in data.methods) { + var method = data.methods[methodName]; + method.name = methodName; + if (data.isInterface) + def.members[methodName] = new Function(''); + else + def.members[methodName] = new Function('return this._callServer("' + methodName + '", qx.lang.Array.fromArguments(arguments));'); + + if (method.returnType) + this.getClassOrCreate(method.returnType); +// if (methodName == "addQuestion") +// debugger; + + var params = method.parameters; + if (params) + for (var i = 0; i < params.length; i++) { + if (params[i]) + params[i] = this.getClassOrCreate(params[i]); + } + } + + // Add properties + var onDemandProperties = []; + if (data.properties) { + def.properties = {}; + for (var propName in data.properties) { + var fromDef = data.properties[propName]; + fromDef.name = propName; + + var propClass = null; + if (fromDef.clazz) + propClass = this.getClassOrCreate(fromDef.clazz); + + var toDef = def.properties[propName] = {}; + + // Define the property + toDef.nullable = fromDef.nullable; + if (fromDef.event) + toDef.event = fromDef.event; + + // Handle arrays + if (fromDef.array) { + if (fromDef.array == "wrap") { + toDef.transform = "_transformToDataArray"; + toDef.check = "qx.data.Array"; + } else + toDef.check = "Array"; + + // Other checks + } else if (fromDef.check) + toDef.check = fromDef.check||fromDef.clazz; + + // Create an apply method + var applyName = "_apply" + qx.lang.String.firstUp(propName); + toDef.apply = applyName; + def.members[applyName] = new Function('value', 'this._applyProperty("' + propName + '", value);'); + + // onDemand properties - patch it later + if (fromDef.onDemand) + onDemandProperties[onDemandProperties.length] = fromDef; + } + } + + // Add events + if (data.events) { + def.events = {}; + for (var eventName in data.events) { + var fromDef = data.events[eventName]; + if (!fromDef.isProperty) + def.events[eventName] = "qx.event.type.Data"; + } + } + + // Define the class + var clazz; + if (data.isInterface) { + clazz = qx.Interface.define(data.className, def)||qx.Interface.getByName(data.className); + clazz.$$proxyDef = data; + } else { + clazz = qx.Class.define(data.className, def)||qx.Class.getByName(data.className); + clazz.prototype.$$proxyDef = data; + } + this.__classInfo[data.className] = data; + + // Patch on demand properties + for (var i = 0; i < onDemandProperties.length; i++) { + var propDef = onDemandProperties[i]; + this.__addOnDemandProperty(clazz, propDef.name, propDef.readOnly||false); + } + + // Done + return clazz; + }finally { + delete this.__classesBeingDefined[data.className]; + } + }, + + /** + * Adds an on-demand property + */ + __addOnDemandProperty: function(clazz, propName, readOnly) { + var upname = qx.lang.String.firstUp(propName); + clazz.prototype["get" + upname] = function() { + return this._getPropertyOnDemand(propName); + }; + clazz.prototype["expire" + upname] = function(sendToServer) { + return this._expirePropertyOnDemand(propName, sendToServer); + }; + if (!readOnly) + clazz.prototype["set" + upname] = function(value) { + return this._setPropertyOnDemand(propName, value); + }; + }, + + /** + * Returns the class definition received from the server for a named class + */ + getClassInfo: function(className) { + var info = this.__classInfo[className]; + qx.core.Assert.assertNotNull(info); + return info; + }, + + /** + * Serialises a value for sending to the server + */ + serializeValue: function(value) { + if (!value) + return value; + + if (qx.lang.Type.isArray(value)) { + var send = []; + for (var j = 0; j < value.length; j++) { + if (typeof value[j] === "undefined" || value[j] === null) + send[j] = null; + else + send[j] = this.serializeValue(value[j]); + } + return send; + } + + if (qx.lang.Type.isDate(value)) { + return value.getTime(); + } + + if (!value.classname) + return value; + + if (qx.Class.isSubClassOf(value.constructor, com.zenesis.qx.remote.Proxy)) + return value.getServerId(); + + if (qx.Class.isSubClassOf(value.constructor, qx.data.Array)) + return value.toArray(); + + if (qx.Class.isSubClassOf(value.constructor, qx.core.Object)) { + this.debug("Cannot serialize a Qooxdoo object to the server unless it implements com.zenesis.qx.remote.Proxied"); + return null; + } + + return value; + }, + + /** + * Called by Proxy to call a server method on a server object - not to be invoked directly + * @param serverObject {Object} the server object + * @param method {Object} method definition + * @param args {Array} the arguments passed to the method + */ + callServerMethod: function(serverObject, methodName, args) { + // Can we get it from the cache? + var methodDef = this._getMethodDef(serverObject, methodName); + if (methodDef && methodDef.cacheResult && serverObject.$$proxy.cachedResults && serverObject.$$proxy.cachedResults[methodName]) + return serverObject.$$proxy.cachedResults[methodName]; + + // Serialise the request + var parameters = []; + var notify = []; + for (var i = 0; i < args.length; i++) { + if (typeof args[i] == "function") + notify.push(args[i]); + else + parameters.push(this.serializeValue(args[i])); + } + var data = { + cmd: "call", + serverId: serverObject.getServerId(), + methodName: methodName, + parameters: parameters + }; + + // Call the server + var result = undefined; + this._sendCommandToServer(data, function(evt) { + result = this._processResponse(evt); + if (!this.getException()) { + var array = methodDef && methodDef.returnArray; // On-Demand property accessors don't have a method definition + if (array == "wrap") + result = new qx.data.Array(result||[]); + } + for (var i = 0; i < notify.length; i++) + notify[i].call(serverObject, result); + return result; + }, this, notify.length != 0); + + // Store in the cache and return + if (methodDef && methodDef.cacheResult) { + if (!serverObject.$$proxy.cachedResults) + serverObject.$$proxy.cachedResults = {}; + serverObject.$$proxy.cachedResults[methodName] = result; + } + return result; + }, + + /** + * Handler for "change" event on properties with arrays wrapped by qx.data.Array. For use only + * by Proxy. + * @param evt {Data} original "change" event for the array + * @param serverObject {Object} the Proxy instance for a server object + * @param propDef {Map} the property definition + */ + onWrappedArrayChange: function(evt, serverObject, propDef) { + var data = evt.getData(); + + // The change event for qx.data.Array doesn't give enough information to replicate + // the change, so for now we just hack it by remembering the array is dirty and + // copying the whole thing on the next server flush + if (!this.__dirtyArrays) + this.__dirtyArrays = {}; + var array = evt.getTarget(); + this.__dirtyArrays[array.toHashCode()] = { + array: array, + serverObject: serverObject, + propertyName: propDef.name + }; + }, + + /** + * Queues all the dirty arrays ready to flush them to the server + */ + _queueDirtyArrays: function() { + if (!this.__dirtyArrays) + return; + for (var arrHash in this.__dirtyArrays) { + var arrData = this.__dirtyArrays[arrHash]; + var data = { + cmd: "edit-array", + serverId: arrData.serverObject.getServerId(), + propertyName: arrData.propertyName, + type: "replaceAll", + items: this.serializeValue(arrData.array.toArray()) + }; + this._queueCommandToServer(data); + } + this.__dirtyArrays = null; + }, + + /** + * Called by Proxy when a property value is changed - do not invoke directly + * @param serverObject {Object} the server object Proxy implementation + * @param propertyName {Object} property name + * @param value {Object?} the value to set the property to + */ + setPropertyValue: function(serverObject, propertyName, value, oldValue) { + if (this.isSettingProperty(serverObject, propertyName)) + return; + + var data = { + cmd: "set", + serverId: serverObject.getServerId(), + propertyName: propertyName, + value: this.serializeValue(value) + }; + var def = this.__classInfo[serverObject.classname]; + var pd = serverObject.getPropertyDef(propertyName); + if (pd.sync == "queue") { + var queue = this.__queue; + if (queue) + for (var i = 0; i < queue.length; i++) { + var qd = queue[i]; + if (qd.cmd == "set" && qd.serverId == serverObject.getServerId() && qd.propertyName == propertyName) { + queue.splice(i, 1); + break; + } + } + this._queueCommandToServer(data); + } else + this._sendCommandToServer(data); + + // OnDemand properties need to have their event fired for them + if (pd.onDemand && pd.event) + serverObject.fireDataEvent(pd.event, value, oldValue); + }, + + /** + * Called by Proxy when cached property value is expired; causes the + * expire method to be queued to the server + */ + expireProperty: function(serverObject, propertyName) { + var data = { + cmd: "expire", + serverId: serverObject.getServerId(), + propertyName: propertyName + }; + this._queueCommandToServer(data); + }, + + /** + * Called internally to set a property value that has been received from the server; + * this must suppress property-set events being triggered + */ + setPropertyValueFromServer: function(serverObject, propertyName, value) { + this.__setPropertyObject = serverObject; + this.__setPropertyName = propertyName; + try { + var def = serverObject.getPropertyDef(propertyName); + var upname = qx.lang.String.firstUp(propertyName); + if (def) { + if (def.check && def.check == "Date") + value = value != null ? new Date(value) : null; + else if (def.array && def.array == "wrap") { + var current = serverObject["get" + upname](); + if (value != null) + value = qx.lang.Array.toArray(value); + if (current == null) { + var arr = new qx.data.Array(); + arr.append(value); + serverObject["set" + upname](arr); + } else { + value.unshift(0, current.getLength()); + current.splice.apply(current, value); + //current.removeAll(); + //current.append(value); + } + return; + } + } + serverObject["set" + upname](value); + }catch(e) { + this.debug(e); + throw e; + }finally { + this.__setPropertyObject = null; + this.__setPropertyName = null; + } + }, + + /** + * Detects whether the property is currently being set (i.e. from the server) + */ + isSettingProperty: function(serverObject, propertyName) { + return this.__setPropertyObject == serverObject && this.__setPropertyName == propertyName; + }, + + /** + * Called by Proxy when an event listener is added; this queues a command to the server + * @param serverObject {Object} the server object Proxy implementation + * @param eventName {Object} event name + */ + addServerListener: function(serverObject, eventName) { + var className = serverObject.classname; + var def = this.__classInfo[className]; + var event = serverObject.getEventDef(eventName); + + // If the event is not a server event, or it's for a property, or there is already + // a server based listener, then skip (property change events will be triggered + // automatically by Qx when the property change is synchronised) + if (!event || event.isProperty || event.numListeners) + return; + + // Queue the addListener to the server + event.numListeners = (event.numListeners||0) + 1; + var data = { + cmd: "listen", + serverId: serverObject.getServerId(), + eventName: eventName + }; + this._queueCommandToServer(data); + }, + + /** + * Called by Proxy when an event listener is removed; this queues a command to the server + * @param serverObject {Object} the server object Proxy implementation + * @param eventName {Object} event name + */ + removeServerListener: function(serverObject, eventName) { + var className = serverObject.classname; + var def = this.__classInfo[className]; + var event = def.events[eventName]; + + // If the event is not a server event or it's for a property then skip (property change + // events will be triggered automatically by Qx when the property change is synchronised) + if (!event || event.isProperty) + return; + + // Queue the removeListener to the server + event.numListeners--; + qx.core.Assert.assertTrue(event.numListeners >= 0); + var data = { + cmd: "unlisten", + serverId: serverObject.getServerId(), + eventName: eventName + }; + this._queueCommandToServer(data); + }, + + /** + * Method called to send data to the server; this is to be implemented by the host + * framework on the client. + * + * @param obj {Object} object to be turned into a JSON string and sent to the server + * @param callback {function} callback + * @param context {Object?} context for the callback + * @param aync {Boolean?} whether to make it an asynch call (default is synchronous) + * @return {String} the server response + */ + _sendCommandToServer: function(obj, callback, context, async) { + // Queue any client-created object which need to be sent to the server + this._queueClientObjects(); + + // Queue any dirty arrays + this._queueDirtyArrays(); + + // Consume the queue + var queue = this.__queue; + if (queue && queue.length) { + this.__queue = null; + if (obj) + queue[queue.length] = obj; + obj = queue; + } + if (!obj) + return; + + // Set the data + var text = qx.util.Json.stringify(obj); + var req = new qx.io.remote.Request(this.getProxyUrl(), "POST", "text/plain"); + req.setAsynchronous(!!async); + req.setData(text); + + // Send it + this.debug("Sending to server: " + text); + req.addListener("completed", callback||this._processResponse, context||this); + req.addListener("failed", callback||this._processResponse, context||this); + req.send(); + this.__numberOfCalls++; + }, + + /** + * Flushes the outbound queue, but does nothing if there is nothing to send + * @returns + */ + flushQueue: function() { + this._sendCommandToServer(); + }, + + /** + * Queues a command to the server + */ + _queueCommandToServer: function(obj) { + var queue = this.__queue; + if (!queue) + this.__queue = queue = []; + this._queueClientObjects(); + queue[queue.length] = obj; + }, + + /** + * Takes any objects created on the client which have not yet been delivered to + * the server and adds them to the queue (i.e. processes all pendingClientObject's). + */ + _queueClientObjects: function() { + var pco = this.__clientObjects; + if (!pco || pco.length < 2) + return; + var queue = this.__queue; + if (!queue) + this.__queue = queue = []; + for (var i = 1; i < pco.length; i++) { + var clientObject = pco[i]; + + // Array index is set to null when received back from the server + if (!clientObject || clientObject.getSentToServer()) + continue; + + // Send it + var className = clientObject.classname; + var def = this.__classInfo[className]; + var data = { + cmd: "new", + className: className, + clientId: clientObject.getServerId(), + properties: {} + }; + if (def.properties) + for (var propName in def.properties) { + var pd = def.properties[propName]; + if (!pd.readOnly && !pd.onDemand) { + var value = clientObject.get(propName); + if (value !== undefined) + data.properties[propName] = this.serializeValue(value); + } + } + queue[queue.length] = data; + clientObject.setSentToServer(); + } + }, + + /** + * Returns the number of calls to the server + */ + getNumberOfCalls: function() { + return this.__numberOfCalls; + }, + + /** + * Returns the server object with a given ID + */ + getServerObject: function(serverId) { + if (serverId < 0) + return this.__clientObjects(0 - serverId); + + return this.__serverObjects[serverId]; + }, + + /** + * Returns the proxy definition for a named method + * @param serverObject the object to get the method from + * @param methodName {String} the name of the method + */ + _getMethodDef: function(serverObject, methodName) { + for (var def = serverObject.$$proxyDef; def != null; def = def.extend) { + if (def.methods) { + var methodDef = def.methods[methodName]; + if (methodDef) + return methodDef; + } + } + return null; + }, + + /** + * Called when the server reports an exception to be handled by the client; stores the + * exception to be obtained later by calling clearException or getException + * @param data {Map} the details from the server + * @param cause {String} the cause: "property" or "function" + */ + _handleServerException: function(data, cause) { + //this.error("Exception from server: " + data.exceptionClass + ": " + data.message); + this._setException(new Error("Exception at server: " + cause + " " + data)); + }, + + _setException: function(e) { + this.__exception = e; + this.fireDataEvent("exception", e); + }, + + /** + * Clears the last known exception and returns it + * @return {Error?} null if there is no exception to return + */ + clearException: function() { + var ex = this.__exception; + this.__exception = null; + return ex; + }, + + /** + * Returns the last known exception + * @return {Error?} null if there is no exception to return + */ + getException: function() { + return this.__exception; + }, + + /** + * Utility method to describe an exception + */ + __describeException: function(e) { + var desc = ""; + if (typeof e == "string") + return e; + if (e.name) + desc = e.name; + if (e.number) + desc += "[#" + (e.number & 0xFFFF) + "]"; + if (desc.length == 0) + desc = "typeof Exception == " + (typeof e) + " " + e; + desc += ": "; + if (e.message) + desc += e.message; + if (e.description && e.description != e.message) + desc += e.description; + if (e.fileName) + desc += " in file " + e.fileName; + if (e.lineNumber) + desc += " on line " + e.lineNumber; + return desc; + } + } + +}); \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:26:21
|
Revision: 21336 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21336&view=rev Author: spackers Date: 2011-07-22 16:26:14 +0000 (Fri, 22 Jul 2011) Log Message: ----------- upgrade to qx1.5 Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/ trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/ trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/ trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/ trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com/zenesis/qx/remote/com.zenesis.qx.remote/ Removed Paths: ------------- trunk/qooxdoo-contrib/ServerObjects/trunk/client/qso-lib/source/class/com.zenesis.qx.remote/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:23:25
|
Revision: 21335 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21335&view=rev Author: spackers Date: 2011-07-22 16:23:19 +0000 (Fri, 22 Jul 2011) Log Message: ----------- switch to trunk/branches layout to support Qxv1.4 and 1.5 Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/branches/qx-1.4/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:22:13
|
Revision: 21334 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21334&view=rev Author: spackers Date: 2011-07-22 16:22:07 +0000 (Fri, 22 Jul 2011) Log Message: ----------- switch to trunk/branches layout to support Qxv1.4 and 1.5 Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/branches/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:20:06
|
Revision: 21333 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21333&view=rev Author: spackers Date: 2011-07-22 16:19:59 +0000 (Fri, 22 Jul 2011) Log Message: ----------- switch to trunk/branches layout to support Qxv1.4 and 1.5 Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/trunk/Documentation.doc trunk/qooxdoo-contrib/ServerObjects/trunk/LICENSE.txt trunk/qooxdoo-contrib/ServerObjects/trunk/client/ trunk/qooxdoo-contrib/ServerObjects/trunk/demo-webapp/ trunk/qooxdoo-contrib/ServerObjects/trunk/server/ Removed Paths: ------------- trunk/qooxdoo-contrib/ServerObjects/Documentation.doc trunk/qooxdoo-contrib/ServerObjects/LICENSE.txt trunk/qooxdoo-contrib/ServerObjects/client/ trunk/qooxdoo-contrib/ServerObjects/demo-webapp/ trunk/qooxdoo-contrib/ServerObjects/server/ Deleted: trunk/qooxdoo-contrib/ServerObjects/Documentation.doc =================================================================== (Binary files differ) Deleted: trunk/qooxdoo-contrib/ServerObjects/LICENSE.txt =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/LICENSE.txt 2011-07-22 16:12:15 UTC (rev 21332) +++ trunk/qooxdoo-contrib/ServerObjects/LICENSE.txt 2011-07-22 16:19:59 UTC (rev 21333) @@ -1,25 +0,0 @@ -************************************************************************ - - server-objects - a contrib to the Qooxdoo project that makes server - and client objects operate seamlessly; like Qooxdoo, server objects - have properties, events, and methods all of which can be access from - either server or client, regardless of where the original object was - created. - - http://qooxdoo.org - - Copyright: - 2010 Zenesis Limited, http://www.zenesis.com - - License: - LGPL: http://www.gnu.org/licenses/lgpl.html - EPL: http://www.eclipse.org/org/documents/epl-v10.php - - This software is provided under the same licensing terms as Qooxdoo, - please see the LICENSE file in the Qooxdoo project's top-level directory - for details. - - Authors: - * John Spackman (joh...@ze...) - -************************************************************************ Copied: trunk/qooxdoo-contrib/ServerObjects/trunk/Documentation.doc (from rev 21332, trunk/qooxdoo-contrib/ServerObjects/Documentation.doc) =================================================================== (Binary files differ) Copied: trunk/qooxdoo-contrib/ServerObjects/trunk/LICENSE.txt (from rev 21332, trunk/qooxdoo-contrib/ServerObjects/LICENSE.txt) =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/LICENSE.txt (rev 0) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/LICENSE.txt 2011-07-22 16:19:59 UTC (rev 21333) @@ -0,0 +1,25 @@ +************************************************************************ + + server-objects - a contrib to the Qooxdoo project that makes server + and client objects operate seamlessly; like Qooxdoo, server objects + have properties, events, and methods all of which can be access from + either server or client, regardless of where the original object was + created. + + http://qooxdoo.org + + Copyright: + 2010 Zenesis Limited, http://www.zenesis.com + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + + This software is provided under the same licensing terms as Qooxdoo, + please see the LICENSE file in the Qooxdoo project's top-level directory + for details. + + Authors: + * John Spackman (joh...@ze...) + +************************************************************************ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:12:22
|
Revision: 21332 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21332&view=rev Author: spackers Date: 2011-07-22 16:12:15 +0000 (Fri, 22 Jul 2011) Log Message: ----------- last update before 1.5 Modified Paths: -------------- trunk/qooxdoo-contrib/ServerObjects/client/demoapp/source/script/demoapp.js Property Changed: ---------------- trunk/qooxdoo-contrib/ServerObjects/demo-webapp/WebContent/ Modified: trunk/qooxdoo-contrib/ServerObjects/client/demoapp/source/script/demoapp.js =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/client/demoapp/source/script/demoapp.js 2011-07-22 16:10:49 UTC (rev 21331) +++ trunk/qooxdoo-contrib/ServerObjects/client/demoapp/source/script/demoapp.js 2011-07-22 16:12:15 UTC (rev 21332) @@ -5,7 +5,7 @@ qx.$$start = new Date(); if (!window.qxsettings) qxsettings = {}; -var settings = {"qx.application":"demoapp.Application","qx.revision":"21302:21307M","qx.theme":"demoapp.theme.Theme","qx.version":"1.4.1"}; +var settings = {"qx.application":"demoapp.Application","qx.revision":"21302:21319","qx.theme":"demoapp.theme.Theme","qx.version":"1.4.1"}; for (var k in settings) qxsettings[k] = settings[k]; if (!window.qxvariants) qxvariants = {}; @@ -13,7 +13,7 @@ for (var k in variants) qxvariants[k] = variants[k]; if (!qx.$$environment) qx.$$environment = {}; -var envinfo = {"qx.application":"demoapp.Application","qx.revision":"21302:21307M","qx.theme":"demoapp.theme.Theme","qx.version":"1.4.1"}; +var envinfo = {"qx.application":"demoapp.Application","qx.revision":"21302:21319","qx.theme":"demoapp.theme.Theme","qx.version":"1.4.1"}; for (var k in envinfo) qx.$$environment[k] = envinfo[k]; if (!qx.$$libraries) qx.$$libraries = {}; @@ -27,7 +27,7 @@ qx.$$loader = { parts : {"boot":[0]}, - uris : [["qx:qx/Bootstrap.js","qx:qx/bom/client/OperatingSystem.js","qx:qx/bom/client/Locale.js","qx:qx/bom/client/Html.js","qx:qx/bom/client/Transport.js","qx:qx/bom/client/Plugin.js","qx:qx/bom/client/Engine.js","qx:qx/bom/client/Browser.js","qx:qx/bom/client/Css.js","qx:qx/bom/client/PhoneGap.js","qx:qx/bom/client/Flash.js","qx:qx/bom/client/EcmaScript.js","qx:qx/bom/client/Device.js","qx:qx/bom/client/Event.js","qx:qx/core/Environment.js","qx:qx/Mixin.js","qx:qx/core/Setting.js","qx:qx/Interface.js","qx:qx/core/Aspect.js","qx:qx/lang/Core.js","qx:qx/core/Property.js","qx:qx/Class.js","qx:qx/core/Variant.js","qx:qx/locale/MTranslation.js","qx:qx/data/IListData.js","qx:qx/application/IApplication.js","qx:qx/lang/Array.js","qx:qx/lang/Function.js","qx:qx/dev/StackTrace.js","qx:qx/lang/String.js","qx:qx/lang/RingBuffer.js","qx:qx/log/appender/RingBuffer.js","qx:qx/log/Logger.js","qx:qx/core/ObjectRegistry.js","qx:qx/bom/Event.js","qx:qx/event/Manager.js","qx:qx/dom/Node.js","qx:qx/core/GlobalError.js","qx:qx/event/GlobalError.js","qx:qx/lang/Type.js","qx:qx/core/Assert.js","qx:qx/event/Registration.js","qx:qx/type/BaseError.js","qx:qx/core/AssertionError.js","qx:qx/lang/JsonImpl.js","qx:qx/data/MBinding.js","qx:qx/core/MAssert.js","qx:qx/core/Object.js","qx:qx/lang/Json.js","qx:qx/event/IEventHandler.js","qx:qx/event/type/Event.js","qx:qx/event/type/Native.js","qx:qx/util/ObjectPool.js","qx:qx/event/Pool.js","qx:qx/event/handler/Window.js","qx:qx/event/handler/Application.js","qx:qx/event/IEventDispatcher.js","qx:qx/event/dispatch/Direct.js","qx:qx/core/Init.js","qx:qx/application/AbstractGui.js","qx:qx/application/Standalone.js","demoapp:demoapp/Application.js","qx:qx/event/type/Data.js","qx:qx/data/SingleValueBinding.js","qx:qx/core/WindowError.js","qx:qx/core/ValidationError.js","qx:qx/util/DisposeUtil.js","qx:qx/event/handler/Object.js","qx:qx/lang/Generics.js","qx:qx/lang/Date.js","qx:qx/theme/manager/Meta.js","qx:qx/util/ValueManager.js","qx:qx/theme/manager/Color.js","qx:qx/util/ColorUtil.js","qx:qx/theme/manager/Decoration.js","qx:qx/ui/decoration/IDecorator.js","qx:qx/ui/decoration/Abstract.js","qx:qx/ui/decoration/DynamicDecorator.js","qx:qx/bom/element/Overflow.js","qx:qx/bom/element/Cursor.js","qx:qx/bom/element/BoxSizing.js","qx:qx/bom/element/Clip.js","qx:qx/bom/element/Opacity.js","qx:qx/bom/element/Style.js","qx:qx/bom/Document.js","qx:qx/bom/Viewport.js","qx:qx/util/AliasManager.js","qx:qx/theme/manager/Font.js","qx:qx/bom/Font.js","qx:qx/lang/Object.js","qx:qx/theme/manager/Icon.js","qx:qx/theme/manager/Appearance.js","qx:qx/Theme.js","qx:qx/ui/tooltip/Manager.js","qx:qx/event/Timer.js","qx:qx/ui/core/MLayoutHandling.js","qx:qx/ui/core/DecoratorFactory.js","qx:qx/ui/core/LayoutItem.js","qx:qx/ui/core/Widget.js","qx:qx/ui/core/MChildrenHandling.js","qx:qx/ui/container/Composite.js","qx:qx/ui/core/MPlacement.js","qx:qx/ui/popup/Popup.js","qx:qx/ui/tooltip/ToolTip.js","qx:qx/util/DeferredCallManager.js","qx:qx/util/DeferredCall.js","qx:qx/html/Element.js","qx:qx/html/Decorator.js","qx:qx/event/handler/Appear.js","qx:qx/event/dispatch/AbstractBubbling.js","qx:qx/event/dispatch/DomBubbling.js","qx:qx/event/handler/Element.js","qx:qx/event/handler/UserAction.js","qx:qx/event/handler/Mouse.js","qx:qx/event/handler/Keyboard.js","qx:qx/event/handler/Orientation.js","qx:qx/event/handler/Touch.js","qx:qx/event/handler/Capture.js","qx:qx/event/handler/DragDrop.js","qx:qx/bom/Element.js","qx:qx/event/type/Dom.js","qx:qx/event/type/Mouse.js","qx:qx/event/type/MouseWheel.js","qx:qx/dom/Hierarchy.js","qx:qx/event/type/KeyInput.js","qx:qx/event/type/KeySequence.js","qx:qx/event/handler/Focus.js","qx:qx/bom/Selection.js","qx:qx/bom/Range.js","qx:qx/util/StringSplit.js","qx:qx/event/type/Focus.js","qx:qx/bom/element/Attribute.js","qx:qx/event/type/Orientation.js","qx:qx/event/type/Touch.js","qx:qx/event/type/Tap.js","qx:qx/event/type/Swipe.js","qx:qx/event/type/Drag.js","qx:qx/event/dispatch/MouseCapture.js","qx:qx/bom/Selector.js","qx:qx/xml/Document.js","qx:qx/bom/element/Scroll.js","qx:qx/bom/element/Location.js","qx:qx/ui/core/queue/Layout.js","qx:qx/ui/core/queue/Manager.js","qx:qx/ui/core/queue/Widget.js","qx:qx/ui/core/queue/Visibility.js","qx:qx/ui/core/queue/Appearance.js","qx:qx/ui/core/queue/Dispose.js","qx:qx/ui/core/EventHandler.js","qx:qx/ui/layout/Abstract.js","qx:qx/util/ResourceManager.js","qx:qx/type/BaseString.js","qx:qx/locale/LocalizedString.js","qx:qx/locale/Manager.js","qx:qx/bom/element/Decoration.js","qx:qx/io/ImageLoader.js","qx:qx/bom/element/Background.js","qx:qx/html/Image.js","qx:qx/ui/basic/Image.js","qx:qx/ui/core/DragDropCursor.js","qx:qx/event/Idle.js","qx:qx/util/placement/Placement.js","qx:qx/util/placement/AbstractAxis.js","qx:qx/util/placement/DirectAxis.js","qx:qx/util/placement/KeepAlignAxis.js","qx:qx/util/placement/BestFitAxis.js","qx:qx/ui/popup/Manager.js","qx:qx/ui/layout/Grow.js","qx:qx/ui/basic/Atom.js","qx:qx/ui/layout/Atom.js","qx:qx/ui/layout/Util.js","qx:qx/ui/form/IStringForm.js","qx:qx/ui/basic/Label.js","qx:qx/html/Label.js","qx:qx/bom/Label.js","qx:qx/bom/element/Dimension.js","qx:qx/ui/form/IForm.js","qx:qx/ui/window/MDesktop.js","qx:qx/ui/core/MBlocker.js","qx:qx/ui/root/Abstract.js","qx:qx/ui/root/Application.js","qx:qx/ui/core/Blocker.js","qx:qx/html/Blocker.js","qx:qx/ui/core/FocusHandler.js","qx:qx/bom/Stylesheet.js","qx:qx/ui/layout/Canvas.js","qx:qx/html/Root.js","qx:qx/log/appender/Util.js","qx:qx/log/appender/Native.js","qx:qx/log/appender/Console.js","com.zenesis.qx.remote:com.zenesis.qx.remote/ProxyManager.js","com.zenesis.qx.remote:com.zenesis.qx.remote/Proxy.js","qx:qx/data/marshal/MEventBubbling.js","qx:qx/data/Array.js","qx:qx/util/format/IFormat.js","qx:qx/util/format/NumberFormat.js","qx:qx/util/Json.js","qx:qx/locale/Number.js","qx:qx/io/remote/Request.js","qx:qx/io/remote/RequestQueue.js","qx:qx/io/remote/Exchange.js","qx:qx/io/remote/transport/Abstract.js","qx:qx/io/remote/transport/Iframe.js","qx:qx/event/handler/Iframe.js","qx:qx/bom/Iframe.js","qx:qx/dom/Element.js","qx:qx/io/remote/transport/Script.js","qx:qx/io/remote/transport/XmlHttp.js","qx:qx/io/remote/Response.js","qx:qx/ui/core/MExecutable.js","qx:qx/ui/form/IExecutable.js","qx:qx/ui/form/Button.js","qx:qx/theme/modern/Appearance.js","demoapp:demoapp/theme/Appearance.js","qx:qx/theme/modern/Color.js","demoapp:demoapp/theme/Color.js","qx:qx/theme/modern/Font.js","demoapp:demoapp/theme/Font.js","qx:qx/theme/icon/Tango.js","qx:qx/ui/decoration/MBoxShadow.js","qx:qx/ui/decoration/MBackgroundColor.js","qx:qx/ui/decoration/MBackgroundImage.js","qx:qx/ui/decoration/MSingleBorder.js","qx:qx/ui/decoration/Single.js","qx:qx/ui/decoration/Background.js","qx:qx/ui/decoration/Uniform.js","qx:qx/ui/decoration/MDoubleBorder.js","qx:qx/ui/decoration/Beveled.js","qx:qx/ui/decoration/MLinearBackgroundGradient.js","qx:qx/ui/decoration/Grid.js","qx:qx/ui/decoration/MBorderRadius.js","qx:qx/theme/modern/Decoration.js","demoapp:demoapp/theme/Decoration.js","demoapp:demoapp/theme/Theme.js","qx:qx/ui/decoration/css3/BorderImage.js","qx:qx/ui/decoration/GridDiv.js"]], + uris : [["qx:qx/Bootstrap.js","qx:qx/bom/client/OperatingSystem.js","qx:qx/bom/client/Locale.js","qx:qx/bom/client/Html.js","qx:qx/bom/client/Transport.js","qx:qx/bom/client/Plugin.js","qx:qx/bom/client/Engine.js","qx:qx/bom/client/Browser.js","qx:qx/bom/client/Css.js","qx:qx/bom/client/PhoneGap.js","qx:qx/bom/client/Flash.js","qx:qx/bom/client/EcmaScript.js","qx:qx/bom/client/Device.js","qx:qx/bom/client/Event.js","qx:qx/core/Environment.js","qx:qx/Mixin.js","qx:qx/core/Setting.js","qx:qx/Interface.js","qx:qx/core/Aspect.js","qx:qx/lang/Core.js","qx:qx/core/Property.js","qx:qx/Class.js","qx:qx/core/Variant.js","qx:qx/locale/MTranslation.js","qx:qx/data/IListData.js","qx:qx/application/IApplication.js","qx:qx/lang/Array.js","qx:qx/lang/Function.js","qx:qx/dev/StackTrace.js","qx:qx/lang/String.js","qx:qx/lang/RingBuffer.js","qx:qx/log/appender/RingBuffer.js","qx:qx/log/Logger.js","qx:qx/core/ObjectRegistry.js","qx:qx/bom/Event.js","qx:qx/event/Manager.js","qx:qx/dom/Node.js","qx:qx/core/GlobalError.js","qx:qx/event/GlobalError.js","qx:qx/lang/Type.js","qx:qx/core/Assert.js","qx:qx/event/Registration.js","qx:qx/type/BaseError.js","qx:qx/core/AssertionError.js","qx:qx/lang/JsonImpl.js","qx:qx/data/MBinding.js","qx:qx/core/MAssert.js","qx:qx/core/Object.js","qx:qx/lang/Json.js","qx:qx/event/IEventHandler.js","qx:qx/event/type/Event.js","qx:qx/event/type/Native.js","qx:qx/util/ObjectPool.js","qx:qx/event/Pool.js","qx:qx/event/handler/Window.js","qx:qx/event/handler/Application.js","qx:qx/event/IEventDispatcher.js","qx:qx/event/dispatch/Direct.js","qx:qx/core/Init.js","qx:qx/application/AbstractGui.js","qx:qx/application/Standalone.js","demoapp:demoapp/Application.js","qx:qx/event/type/Data.js","qx:qx/data/SingleValueBinding.js","qx:qx/core/WindowError.js","qx:qx/core/ValidationError.js","qx:qx/util/DisposeUtil.js","qx:qx/event/handler/Object.js","qx:qx/lang/Generics.js","qx:qx/lang/Date.js","qx:qx/theme/manager/Meta.js","qx:qx/util/ValueManager.js","qx:qx/theme/manager/Color.js","qx:qx/util/ColorUtil.js","qx:qx/theme/manager/Decoration.js","qx:qx/ui/decoration/IDecorator.js","qx:qx/ui/decoration/Abstract.js","qx:qx/ui/decoration/DynamicDecorator.js","qx:qx/bom/element/Overflow.js","qx:qx/bom/element/Cursor.js","qx:qx/bom/element/BoxSizing.js","qx:qx/bom/element/Clip.js","qx:qx/bom/element/Opacity.js","qx:qx/bom/element/Style.js","qx:qx/bom/Document.js","qx:qx/bom/Viewport.js","qx:qx/util/AliasManager.js","qx:qx/theme/manager/Font.js","qx:qx/bom/Font.js","qx:qx/lang/Object.js","qx:qx/theme/manager/Icon.js","qx:qx/theme/manager/Appearance.js","qx:qx/Theme.js","qx:qx/ui/tooltip/Manager.js","qx:qx/event/Timer.js","qx:qx/ui/core/MLayoutHandling.js","qx:qx/ui/core/DecoratorFactory.js","qx:qx/ui/core/LayoutItem.js","qx:qx/ui/core/Widget.js","qx:qx/ui/core/MChildrenHandling.js","qx:qx/ui/container/Composite.js","qx:qx/ui/core/MPlacement.js","qx:qx/ui/popup/Popup.js","qx:qx/ui/tooltip/ToolTip.js","qx:qx/util/DeferredCallManager.js","qx:qx/util/DeferredCall.js","qx:qx/html/Element.js","qx:qx/html/Decorator.js","qx:qx/event/handler/Appear.js","qx:qx/event/dispatch/AbstractBubbling.js","qx:qx/event/dispatch/DomBubbling.js","qx:qx/event/handler/Element.js","qx:qx/event/handler/UserAction.js","qx:qx/event/handler/Mouse.js","qx:qx/event/handler/Keyboard.js","qx:qx/event/handler/Orientation.js","qx:qx/event/handler/Touch.js","qx:qx/event/handler/Capture.js","qx:qx/event/handler/DragDrop.js","qx:qx/bom/Element.js","qx:qx/event/type/Dom.js","qx:qx/event/type/Mouse.js","qx:qx/event/type/MouseWheel.js","qx:qx/dom/Hierarchy.js","qx:qx/event/type/KeyInput.js","qx:qx/event/type/KeySequence.js","qx:qx/event/handler/Focus.js","qx:qx/bom/Selection.js","qx:qx/bom/Range.js","qx:qx/util/StringSplit.js","qx:qx/event/type/Focus.js","qx:qx/bom/element/Attribute.js","qx:qx/event/type/Orientation.js","qx:qx/event/type/Touch.js","qx:qx/event/type/Tap.js","qx:qx/event/type/Swipe.js","qx:qx/event/type/Drag.js","qx:qx/event/dispatch/MouseCapture.js","qx:qx/bom/Selector.js","qx:qx/xml/Document.js","qx:qx/bom/element/Scroll.js","qx:qx/bom/element/Location.js","qx:qx/ui/core/queue/Layout.js","qx:qx/ui/core/queue/Manager.js","qx:qx/ui/core/queue/Widget.js","qx:qx/ui/core/queue/Visibility.js","qx:qx/ui/core/queue/Appearance.js","qx:qx/ui/core/queue/Dispose.js","qx:qx/ui/core/EventHandler.js","qx:qx/ui/layout/Abstract.js","qx:qx/util/ResourceManager.js","qx:qx/type/BaseString.js","qx:qx/locale/LocalizedString.js","qx:qx/locale/Manager.js","qx:qx/bom/element/Decoration.js","qx:qx/io/ImageLoader.js","qx:qx/bom/element/Background.js","qx:qx/html/Image.js","qx:qx/ui/basic/Image.js","qx:qx/ui/core/DragDropCursor.js","qx:qx/event/Idle.js","qx:qx/util/placement/Placement.js","qx:qx/util/placement/AbstractAxis.js","qx:qx/util/placement/DirectAxis.js","qx:qx/util/placement/KeepAlignAxis.js","qx:qx/util/placement/BestFitAxis.js","qx:qx/ui/popup/Manager.js","qx:qx/ui/layout/Grow.js","qx:qx/ui/basic/Atom.js","qx:qx/ui/layout/Atom.js","qx:qx/ui/layout/Util.js","qx:qx/ui/form/IStringForm.js","qx:qx/ui/basic/Label.js","qx:qx/html/Label.js","qx:qx/bom/Label.js","qx:qx/bom/element/Dimension.js","qx:qx/ui/form/IForm.js","qx:qx/ui/window/MDesktop.js","qx:qx/ui/core/MBlocker.js","qx:qx/ui/root/Abstract.js","qx:qx/ui/root/Application.js","qx:qx/ui/core/Blocker.js","qx:qx/html/Blocker.js","qx:qx/ui/core/FocusHandler.js","qx:qx/bom/Stylesheet.js","qx:qx/ui/layout/Canvas.js","qx:qx/html/Root.js","qx:qx/log/appender/Util.js","qx:qx/log/appender/Native.js","qx:qx/log/appender/Console.js","com.zenesis.qx.remote:com/zenesis/qx/remote/ProxyManager.js","com.zenesis.qx.remote:com/zenesis/qx/remote/Proxy.js","qx:qx/data/marshal/MEventBubbling.js","qx:qx/data/Array.js","qx:qx/util/format/IFormat.js","qx:qx/util/format/NumberFormat.js","qx:qx/util/Json.js","qx:qx/locale/Number.js","qx:qx/io/remote/Request.js","qx:qx/io/remote/RequestQueue.js","qx:qx/io/remote/Exchange.js","qx:qx/io/remote/transport/Abstract.js","qx:qx/io/remote/transport/Iframe.js","qx:qx/event/handler/Iframe.js","qx:qx/bom/Iframe.js","qx:qx/dom/Element.js","qx:qx/io/remote/transport/Script.js","qx:qx/io/remote/transport/XmlHttp.js","qx:qx/io/remote/Response.js","qx:qx/ui/core/MExecutable.js","qx:qx/ui/form/IExecutable.js","qx:qx/ui/form/Button.js","qx:qx/theme/modern/Appearance.js","demoapp:demoapp/theme/Appearance.js","qx:qx/theme/modern/Color.js","demoapp:demoapp/theme/Color.js","qx:qx/theme/modern/Font.js","demoapp:demoapp/theme/Font.js","qx:qx/theme/icon/Tango.js","qx:qx/ui/decoration/MBoxShadow.js","qx:qx/ui/decoration/MBackgroundColor.js","qx:qx/ui/decoration/MBackgroundImage.js","qx:qx/ui/decoration/MSingleBorder.js","qx:qx/ui/decoration/Single.js","qx:qx/ui/decoration/Background.js","qx:qx/ui/decoration/Uniform.js","qx:qx/ui/decoration/MDoubleBorder.js","qx:qx/ui/decoration/Beveled.js","qx:qx/ui/decoration/MLinearBackgroundGradient.js","qx:qx/ui/decoration/Grid.js","qx:qx/ui/decoration/MBorderRadius.js","qx:qx/theme/modern/Decoration.js","demoapp:demoapp/theme/Decoration.js","demoapp:demoapp/theme/Theme.js","qx:qx/ui/decoration/css3/BorderImage.js","qx:qx/ui/decoration/GridDiv.js"]], urisBefore : [], packageHashes : {"0":"0"}, boot : "boot", Property changes on: trunk/qooxdoo-contrib/ServerObjects/demo-webapp/WebContent ___________________________________________________________________ Added: svn:ignore + simone This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spa...@us...> - 2011-07-22 16:10:56
|
Revision: 21331 http://qooxdoo-contrib.svn.sourceforge.net/qooxdoo-contrib/?rev=21331&view=rev Author: spackers Date: 2011-07-22 16:10:49 +0000 (Fri, 22 Jul 2011) Log Message: ----------- Added Paths: ----------- trunk/qooxdoo-contrib/ServerObjects/trunk/README.txt Removed Paths: ------------- trunk/qooxdoo-contrib/ServerObjects/README.txt Deleted: trunk/qooxdoo-contrib/ServerObjects/README.txt =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/README.txt 2011-07-22 16:10:13 UTC (rev 21330) +++ trunk/qooxdoo-contrib/ServerObjects/README.txt 2011-07-22 16:10:49 UTC (rev 21331) @@ -1,95 +0,0 @@ -*** NOTE *** - -I'm currently reorganising the directory structure for simplicity and to match a getting started -guide. I don't think anyone's using this contrib, but if you are this should only take a few hours -and if you get stuck email me. - -jo...@ze... - - - - -QSO - Getting Started -====================== - -This guide assumes you are using Eclipse 3.4 and that you are familiar with creating -Dynamic Web Projects and deploying them to a test Apache Tomcat 6 Server. - -Any problems please contact me through the Qooxdoo mailing list, although feel free -to CC me at joh...@ze... to make sure I don't miss your mail. - - -1. Get Qooxdoo and add it to the demo project ---------------------------------------------- -Because Qooxdoo is a large download it is not included in the QSO .zip file and you have -to add it yourself; download Qooxdoo v1.0.1 (or the latest version) and unpack it into -a folder called qooxdoo in the same place you unpacked QSO. - -For example, if you unpacked to "d:\dev\qso" your directory structure should now look -like this: - - D:\ - dev\ - qso\ - src\ - qooxdoo\ - WebContent\ - .classpath - .project - LICENSE.txt - README.bat - zip.bat - - -2. Import the project ---------------------- -In Eclipse, choose "File" -> "Import..", then "Existing Projects into Workspace"; set the -root directory to the folder you unzipped to (E.G. d:\dev\qso) and click finish. - - -3. Configure directories ------------------------- -If you unpacked into d:\dev\qso (I.E. the example folder layout above) you can skip this -step and go to step 4. - -Eclipse will automatically publish everything in the WebContent folder to your virtual -Tomcat Server and you need your qooxdoo folder and your application folder to be part of the -WebContent folder, but this has two disadvantages during development: - -a) refreshing the code or changing directory structure etc causes Eclipse to recopy the -entire tree and that takes a while for the qooxdoo folder to be copied; - -b) when you edit a JS file you have to wait for Eclipse to "catch up" and finish replicating -changes to the virtual server before you can refresh your browser. - -To work around these problems there is a custom URL filter included that intercepts URLs -from the browser and redirects them to your code - EG, a request for "demoapp/source/index.html" -is mapped to "D:\dev\qso\WebContent\demoapp\source\index.html". - -Open the file WebContent\WEB-INF\web.xml and change the three <init-param> entries to -refer to your path instead of "D:/dev/qso". **NOTE** You must use Unix-style paths even on -Windows, I.E. use forward slashes instead of back slashes. - -Open the file WebContent\WEB-INF\demoapp\config.json and change line 35 that sets the "CACHE" -variable to something suitable, E.G. inside your Qooxdoo installation. - - -4. Build the demo app ---------------------- -In a command prompt cd to "D:\dev\qso\WebContent\demoapp" and type ".\generate source" and/or -".\generate build" and hit return. - -When the generator has finished, go back to Eclipse and right click the project and choose -"Refresh" and then add your imported project into an instance of Apache Tomcat 6 server, and -then start the server. - - -5. Run the demo app -------------------- -You should now be able to browse to http://localhost/demoapp/source/index.html or to -http://localhost/demoapp/build/index.html depending on which generator function you -chose and you should get an alert box pop up which says "All tests passed!" - - - - Copied: trunk/qooxdoo-contrib/ServerObjects/trunk/README.txt (from rev 21330, trunk/qooxdoo-contrib/ServerObjects/README.txt) =================================================================== --- trunk/qooxdoo-contrib/ServerObjects/trunk/README.txt (rev 0) +++ trunk/qooxdoo-contrib/ServerObjects/trunk/README.txt 2011-07-22 16:10:49 UTC (rev 21331) @@ -0,0 +1,95 @@ +*** NOTE *** + +I'm currently reorganising the directory structure for simplicity and to match a getting started +guide. I don't think anyone's using this contrib, but if you are this should only take a few hours +and if you get stuck email me. + +jo...@ze... + + + + +QSO - Getting Started +====================== + +This guide assumes you are using Eclipse 3.4 and that you are familiar with creating +Dynamic Web Projects and deploying them to a test Apache Tomcat 6 Server. + +Any problems please contact me through the Qooxdoo mailing list, although feel free +to CC me at joh...@ze... to make sure I don't miss your mail. + + +1. Get Qooxdoo and add it to the demo project +--------------------------------------------- +Because Qooxdoo is a large download it is not included in the QSO .zip file and you have +to add it yourself; download Qooxdoo v1.0.1 (or the latest version) and unpack it into +a folder called qooxdoo in the same place you unpacked QSO. + +For example, if you unpacked to "d:\dev\qso" your directory structure should now look +like this: + + D:\ + dev\ + qso\ + src\ + qooxdoo\ + WebContent\ + .classpath + .project + LICENSE.txt + README.bat + zip.bat + + +2. Import the project +--------------------- +In Eclipse, choose "File" -> "Import..", then "Existing Projects into Workspace"; set the +root directory to the folder you unzipped to (E.G. d:\dev\qso) and click finish. + + +3. Configure directories +------------------------ +If you unpacked into d:\dev\qso (I.E. the example folder layout above) you can skip this +step and go to step 4. + +Eclipse will automatically publish everything in the WebContent folder to your virtual +Tomcat Server and you need your qooxdoo folder and your application folder to be part of the +WebContent folder, but this has two disadvantages during development: + +a) refreshing the code or changing directory structure etc causes Eclipse to recopy the +entire tree and that takes a while for the qooxdoo folder to be copied; + +b) when you edit a JS file you have to wait for Eclipse to "catch up" and finish replicating +changes to the virtual server before you can refresh your browser. + +To work around these problems there is a custom URL filter included that intercepts URLs +from the browser and redirects them to your code - EG, a request for "demoapp/source/index.html" +is mapped to "D:\dev\qso\WebContent\demoapp\source\index.html". + +Open the file WebContent\WEB-INF\web.xml and change the three <init-param> entries to +refer to your path instead of "D:/dev/qso". **NOTE** You must use Unix-style paths even on +Windows, I.E. use forward slashes instead of back slashes. + +Open the file WebContent\WEB-INF\demoapp\config.json and change line 35 that sets the "CACHE" +variable to something suitable, E.G. inside your Qooxdoo installation. + + +4. Build the demo app +--------------------- +In a command prompt cd to "D:\dev\qso\WebContent\demoapp" and type ".\generate source" and/or +".\generate build" and hit return. + +When the generator has finished, go back to Eclipse and right click the project and choose +"Refresh" and then add your imported project into an instance of Apache Tomcat 6 server, and +then start the server. + + +5. Run the demo app +------------------- +You should now be able to browse to http://localhost/demoapp/source/index.html or to +http://localhost/demoapp/build/index.html depending on which generator function you +chose and you should get an alert box pop up which says "All tests passed!" + + + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |