module.exports = 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.compileFile('forms/'+ this.formInfo.path +'/ui.xml'); var scope = this.builder = builder.load(null, this); scope.link({conn: this.conn}); this.node = scope.$('form'); var models = scope.getByTagName('db-model'); for (var i = 0; i < models.length; i++) models[i].conn = this.conn; var queries = scope.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(scope.$('title')); this.gui.setActions(scope.$('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(); } });