instanceLabel : {\r
init:"Xml Editor",\r
event : "changeInstanceLabel"\r
+ },\r
+ dataModel : {\r
+ \r
}\r
},\r
\r
construct : function(){\r
this.base(arguments);\r
- this.setLayout(new qx.ui.layout.VBox());\r
- this.htmlPane = new qx.ui.embed.Html();\r
- this.htmlPane.setOverflow("auto", "auto");\r
- this.add(this.htmlPane, {flex:1});\r
},\r
\r
members : {\r
* @param data {Mixed} Any object or data passed by the initiator of the view\r
* @return {Boolean}\r
*/\r
- init : function(viewPane, data){\r
+ init : function(viewPane, dataModel){\r
this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId())); \r
+ this.setLayout(new qx.ui.layout.VBox());\r
+ this.setDataModel(dataModel);\r
+ \r
+ this.input = new qx.ui.form.TextField();\r
+ this.add(this.input);\r
+ \r
+ this._attachInputToDM();\r
+ \r
+ this.htmlPane = new qx.ui.embed.Html();\r
+ this.htmlPane.setOverflow("auto", "auto");\r
+ this.add(this.htmlPane, {flex:1});\r
+ \r
},\r
/**\r
* The implementation should contain the real data loading (i.o. query...)\r
* @return {Boolean}\r
*/\r
- load : function(rootNode){\r
- rootNode.load();\r
- rootNode.addListener("changeLoadState", function(){\r
- var xmlString = rootNode.toXmlString(true);\r
+ load : function(){\r
+ var dataModel = this.getDataModel();\r
+ dataModel.addListener("changeContextNode", function(event){\r
+ var xmlString = event.getData().toXmlString(true);\r
var TAG_START_PATTERN = new RegExp("<([0-9a-zA-Z\.]+)([^>]*)>", "gi");\r
var TAG_END_PATTERN = new RegExp("</([0-9a-zA-Z\.]+)>", "gi");\r
var TAG_CLOSE_PATTERN = new RegExp("(/?>)", "gi");\r
xmlString = xmlString.replace(TAG_ATTRIBUTE, ' xml_attname_begin$1xml_attname_end="xml_attvalue_begin$2xml_attvalue_end"');\r
\r
//xmlString = qx.xml.String.escape(xmlString);\r
- xmlString = xmlString.replace(new RegExp("(xml_div_begin)", "g"), '<div style="padding-top:2px;padding-left:15px;">');\r
+ xmlString = xmlString.replace(new RegExp("(xml_div_begin)", "g"), '<div style="padding:1px;line-height:17px;padding-left:15px;">');\r
xmlString = xmlString.replace(new RegExp("(xml_div_end)", "g"), '</div>');\r
xmlString = xmlString.replace(new RegExp("(xml_tagname_begin)", "g"), '<b style="color:rgb(63,127,127);">');\r
xmlString = xmlString.replace(new RegExp("(xml_tagname_end)", "g"), '</b>');\r
xmlString = xmlString.replace(new RegExp("(xml_attvalue_end)", "g"), '</span>');\r
xmlString = '<div style="margin-left:-10px;">' + xmlString + '</div>';\r
this.htmlPane.setHtml(xmlString);\r
+ /*\r
+ var call = new qx.util.DeferredCall(function(){\r
+ var htmlDom = this.htmlPane.getContentElement().getDomElement();\r
+ var spans = qx.bom.Selector.query("span", htmlDom);\r
+ for(var i=0;i<spans.length;i++){\r
+ var oThis = this;\r
+ spans[i].onclick = function(){oThis._setAttributesSpanEditable(this)};\r
+ }\r
+ }, this);\r
+ call.schedule();\r
+ */\r
}, this);\r
+ dataModel.requireContextChange(); \r
+ },\r
+ \r
+ _setAttributesSpanEditable : function(span){\r
+ var width = qx.bom.element.Dimension.getWidth(span);\r
+ var value = span.innerHTML;\r
+ qx.bom.element.Style.set(span, "display", "none");\r
+ var input = qx.bom.Element.create("input", {value:value, style:'width:'+width+'px;'});\r
+ qx.dom.Element.insertAfter(input, span); \r
+ },\r
+ \r
+ _attachInputToDM : function(){\r
+ var dm = this.getDataModel();\r
+ this.input.addListener("keypress", function(event){\r
+ if(event.getKeyIdentifier() != "Enter") return;\r
+ var path = this.input.getValue();\r
+ dm.requireContextChange(path);\r
+ }, this);\r
+ dm.addListener("changeContextNode", function(event){\r
+ var ctxtNode = event.getData();\r
+ this.input.setValue(ctxtNode.getPath());\r
+ }, this);\r
+ \r
},\r
+ \r
/**\r
* Whether this component is already contained in a scroller (return false) or not (return true).\r
* @return {Boolean}\r