From c1a42e5d5af4e126f2da88fbdb1a3daed4c75a4a Mon Sep 17 00:00:00 2001 From: Xelio Date: Mon, 9 Sep 2013 00:25:31 +0800 Subject: [PATCH] Plugin Draw Resonators: Add dialog for changing the zoom level which resonators start to display. --- plugins/draw-resonators.user.js | 131 +++++++++++++++++++++++++++++--- 1 file changed, 119 insertions(+), 12 deletions(-) diff --git a/plugins/draw-resonators.user.js b/plugins/draw-resonators.user.js index fa2841e1..0bf73ff7 100644 --- a/plugins/draw-resonators.user.js +++ b/plugins/draw-resonators.user.js @@ -322,6 +322,8 @@ window.plugin.drawResonators.Styler.prototype.defaultConnectorStyle = function(r //////// Options for storing and loading options //////// + + window.plugin.drawResonators.Options = function() { this._options = {}; this._callbacks = {}; @@ -335,7 +337,7 @@ window.plugin.drawResonators.Options.prototype.addCallback = function(name, call } window.plugin.drawResonators.Options.prototype.newOption = function(name, defaultValue) { - this._options[name] = this.loadLocal(this.getStorageKey, defaultValue) + this._options[name] = this.loadLocal(this.getStorageKey(name), defaultValue) } window.plugin.drawResonators.Options.prototype.getOption = function(name) { @@ -347,7 +349,7 @@ window.plugin.drawResonators.Options.prototype.changeOption = function(name, val if(value === this._options[name]) return false; this._options[name] = value; - this.storeLocal(name, this._options[name]); + this.storeLocal(this.getStorageKey(name), this._options[name]); if (this._callbacks[name] !== null) { for(var i in this._callbacks[name]) { @@ -379,23 +381,128 @@ window.plugin.drawResonators.Options.prototype.storeLocal = function(key, value) +//////// Dialog + +window.plugin.drawResonators.Dialog = function() { + this._dialogEntries = {}; +} + +window.plugin.drawResonators.Dialog.prototype.addLink = function() { + $('#toolbox').append('Resonators '); +} + +window.plugin.drawResonators.Dialog.prototype.addEntry = function(dialogEntry) { + this._dialogEntries[dialogEntry.name] = dialogEntry; +} + + +window.plugin.drawResonators.Dialog.prototype.show = function() { + window.dialog({html: this.getDialogHTML(), title: 'Resonators', modal: true, id: 'draw-reso-setting'}); + + // Attach entries event + for(var name in this._dialogEntries) { + var events = this._dialogEntries[name].getOnEvents(); + for(var i in events) { + var event = events[i]; + $('#draw-reso-dialog').on(event.event, '#' + event.id, event.callback); + } + } +} + +window.plugin.drawResonators.Dialog.prototype.getDialogHTML = function() { + var html = '
' + for(var name in this._dialogEntries) { + html += this._dialogEntries[name].getHTML(); + } + html += '
'; + return html; +} + + + +//////// ListDialogEntry + + + +window.plugin.drawResonators.ListDialogEntry = function(options) { + this._name = options['name']; + this._label = options['label']; + this._valueFunc = options['valueFunc']; + this._valuesList = options['valuesList']; + this._valuesListFunc = options['valuesListFunc']; + this._onChangeCallback = options['onChangeCallback']; +} + +window.plugin.drawResonators.ListDialogEntry.prototype.getHTML = function() { + var curValue = this._valueFunc(); + var valuesList = this._valuesList ? this._valuesList : this._valuesListFunc(); + var html = '' + + ''; + return html; +} + +window.plugin.drawResonators.ListDialogEntry.prototype.getOnEvents = function() { + return [{'event': 'change', + 'id': this.getSelectId(), + 'callback': this._onChangeCallback + }]; +} + +window.plugin.drawResonators.ListDialogEntry.prototype.getSelectId = function() { + return 'draw-reso-option-' + this._name; +} + + + var setup = function() { - window.plugin.drawResonators.options = new window.plugin.drawResonators.Options(); - window.plugin.drawResonators.options.newOption('enableZoomLevel', 17); - window.plugin.drawResonators.options.newOption('useStyler', 'default'); + var thisPlugin = window.plugin.drawResonators; + // Initialize options + thisPlugin.options = new thisPlugin.Options(); + thisPlugin.options.newOption('enableZoomLevel', 17); + thisPlugin.options.newOption('useStyler', 'default'); + + // Initialize render var renderOptions = { - 'enableZoomLevel': window.plugin.drawResonators.options.getOption('enableZoomLevel'), - 'useStyler': window.plugin.drawResonators.options.getOption('useStyler')}; + 'enableZoomLevel': thisPlugin.options.getOption('enableZoomLevel'), + 'useStyler': thisPlugin.options.getOption('useStyler')}; - window.plugin.drawResonators.render = new window.plugin.drawResonators.Render(renderOptions); - window.plugin.drawResonators.render.registerHook(); - window.addLayerGroup('Resonators', window.plugin.drawResonators.render.resonatorLayerGroup, true); + thisPlugin.render = new thisPlugin.Render(renderOptions); + thisPlugin.render.registerHook(); + window.addLayerGroup('Resonators', thisPlugin.render.resonatorLayerGroup, true); - window.plugin.drawResonators.options.addCallback('enableZoomLevel', window.plugin.drawResonators.render.handleEnableZoomLevelChange); + thisPlugin.options.addCallback('enableZoomLevel', thisPlugin.render.handleEnableZoomLevelChange); - // TODO: add options dialog to change options + // Initialize dialog + thisPlugin.dialog = new thisPlugin.Dialog(); + + var enableZoomLevelDialogEntryOptions = { + name: 'enable-zoom-level', + label: 'Enable zoom level', + valueFunc: function() {return thisPlugin.options.getOption('enableZoomLevel')}, + valuesList: {'15':15, '16':16, '17':17, '18':18, '19':19, '20':20, 'none':99}, + onChangeCallback: function(event) {thisPlugin.options.changeOption('enableZoomLevel', parseInt(event.target.value));} + }; + var enableZoomLevelDialogEntry = new thisPlugin.ListDialogEntry(enableZoomLevelDialogEntryOptions); + thisPlugin.dialog.addEntry(enableZoomLevelDialogEntry); + + thisPlugin.dialog.addLink(); + + // TODO: Add dialog entry for styler } // PLUGIN END //////////////////////////////////////////////////////////