Vn.Form = new Class ({ Extends: Vn.Object ,isOpen: false ,uiLoaded: false ,initialize: function (gui, formInfo) { this.gui = gui; this.conn = gui.conn; this.hash = gui.hash; this.formInfo = formInfo; } /** * Gets an object from the builder associated to this form. * * @param {string} objectId The object identifier * @return {Object} The object, or %null if not found **/ ,$: function (objectId) { if (this.builder) return this.builder.getById (objectId); return null; } ,loadUi: function () { if (!this.isOpen) return; var builder = new Vn.Builder (); builder.signalData = this; builder.add ('conn', this.conn); builder.loadXml ('forms/'+ this.formInfo.path +'/ui.xml'); var res = this.builder = builder.load (); this.node = res.$('form'); res.link (); var models = res.getByTagName ('db-model'); for (var i = 0; i < models.length; i++) models[i].conn = this.conn; var queries = res.getByTagName ('db-query'); for (var i = 0; i < queries.length; i++) queries[i].conn = this.conn; if (this.node) { this.gui.setForm (this.node); this.gui.setTitle (res.$('title')); this.gui.setActions (res.$('actions')); this.activate (); } this.uiLoaded = true; } ,unloadUi: function () { if (!this.uiLoaded) return; if (this.node) { this.deactivate (); this.gui.setTitle (null); this.gui.setActions (null); Vn.Node.remove (this.node); this.deactivate (); this.node = null; } if (this.builder) { this.builder.unref (); this.builder = null; } } /** * Called when the form is opened. **/ ,open: function () { this.close (); this.isOpen = true; this.loadUi (); } /** * Called when the form is closed. **/ ,close: function () { if (!this.isOpen) return; this.isOpen = false; this.unloadUi (); } /** * Called when the form is activated. **/ ,activate: function () {} /** * Called when the form is deactivated. **/ ,deactivate: function () {} ,_destroy: function () { this.close (); this.parent (); } });