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; } ,loadUi: function() { if (!this.isOpen) return; const conn = this.conn; const hash = this.hash; const builder = new Vn.Builder(); builder.compileFile('forms/'+ this.formInfo.path +'/ui.xml'); const scope = this.builder = builder.load(null, this); this.$ = scope.$; scope.link(null, {conn, hash}); this.node = scope.$.form; const paramsLot = this.$.params; if (paramsLot) { paramsLot.source = hash; this.params = paramsLot; } function setConnection(tagName) { const objects = scope.getByTagName(tagName); for (let i = 0; i < objects.length; i++) objects[i].conn = conn; } const tags = ['db-model', 'db-query', 'db-lot']; for (let i = 0; i < tags.length; i++) setConnection(tags[i]); 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(); } });