From 22f1e659fa6c60d1ac848415a1ca5a333cdc1031 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Fri, 28 Apr 2017 16:05:19 -0300 Subject: [PATCH] Adding reset to defaults button --- .../client/classes/HotkeysContext.js | 3 +- .../client/classes/HotkeysManager.js | 68 +++++++++++++------ .../ohif-hotkeys/client/components/form.html | 5 +- .../ohif-hotkeys/client/components/form.js | 16 ++++- Packages/ohif-user/client/lib/data.js | 20 ++++-- .../textMarkerDialogs/textMarkerDialogs.styl | 20 +++--- .../ohif-viewerbase/client/lib/hotkeyUtils.js | 2 +- 7 files changed, 94 insertions(+), 40 deletions(-) diff --git a/Packages/ohif-hotkeys/client/classes/HotkeysContext.js b/Packages/ohif-hotkeys/client/classes/HotkeysContext.js index 88053c43e..38a59e537 100644 --- a/Packages/ohif-hotkeys/client/classes/HotkeysContext.js +++ b/Packages/ohif-hotkeys/client/classes/HotkeysContext.js @@ -3,12 +3,13 @@ import { OHIF } from 'meteor/ohif:core'; export class HotkeysContext { constructor(name, definitions, enabled) { this.name = name; - this.definitions = definitions; + this.definitions = Object.assign({}, definitions); this.enabled = enabled; } extend(definitions={}) { if (typeof definitions !== 'object') return; + this.definitions = Object.assign({}, definitions); Object.keys(definitions).forEach(command => { const hotkey = definitions[command]; this.unregister(command); diff --git a/Packages/ohif-hotkeys/client/classes/HotkeysManager.js b/Packages/ohif-hotkeys/client/classes/HotkeysManager.js index 27ee66972..5da83d2a9 100644 --- a/Packages/ohif-hotkeys/client/classes/HotkeysManager.js +++ b/Packages/ohif-hotkeys/client/classes/HotkeysManager.js @@ -8,10 +8,12 @@ import { HotkeysContext } from 'meteor/ohif:hotkeys/client/classes/HotkeysContex export class HotkeysManager { constructor(retrieveFunction, storeFunction) { this.contexts = {}; + this.defaults = {}; this.currentContextName = null; this.enabled = new ReactiveVar(true); this.retrieveFunction = retrieveFunction; this.storeFunction = storeFunction; + this.changeObserver = new Tracker.Dependency(); Tracker.autorun(() => { const contextName = OHIF.context.get(); @@ -21,24 +23,33 @@ export class HotkeysManager { store(contextName, definitions) { const storageKey = `hotkeysDefinitions.${contextName}`; - if (this.storeFunction) { - this.storeFunction(contextName, definitions); - } else if (Meteor.userId()) { - OHIF.user.setData(storageKey, definitions); - } else { - Session.setPersistent(storageKey, definitions); - } + return new Promise((resolve, reject) => { + if (this.storeFunction) { + this.storeFunction(contextName, definitions).then(resolve).catch(reject); + } else if (Meteor.userId()) { + OHIF.user.setData(storageKey, definitions).then(resolve).catch(reject); + } else { + Session.setPersistent(storageKey, definitions); + resolve(); + } + }); } retrieve(contextName) { const storageKey = `hotkeysDefinitions.${contextName}`; - if (this.retrieveFunction) { - return this.retrieveFunction(contextName); - } else if (Meteor.userId()) { - return OHIF.user.getData(storageKey); - } else { - return Session.get(storageKey); - } + return new Promise((resolve, reject) => { + if (this.retrieveFunction) { + this.retrieveFunction(contextName).then(resolve).catch(reject); + } else if (Meteor.userId()) { + try { + resolve(OHIF.user.getData(storageKey)); + } catch(error) { + reject(error); + } + } else { + resolve(Session.get(storageKey)); + } + }); } disable() { @@ -58,14 +69,19 @@ export class HotkeysManager { } load(contextName) { - const context = this.getContext(contextName); - if (!context) return; - const definitions = this.retrieve(contextName); - if (!definitions) return; - context.extend(definitions); + return new Promise((resolve, reject) => { + const context = this.getContext(contextName); + if (!context) return; + this.retrieve(contextName).then(definitions => { + if (!definitions) return reject(); + context.extend(definitions); + this.changeObserver.changed(); + resolve(definitions); + }).catch(reject); + }); } - set(contextName, contextDefinitions) { + set(contextName, contextDefinitions, isDefaultDefinitions=false) { const enabled = this.enabled; const context = new HotkeysContext(contextName, contextDefinitions, enabled); const currentContext = this.getCurrentContext(); @@ -75,6 +91,9 @@ export class HotkeysManager { } this.contexts[contextName] = context; + if (isDefaultDefinitions) { + this.defaults[contextName] = contextDefinitions; + } } register(contextName, command, hotkey) { @@ -93,6 +112,15 @@ export class HotkeysManager { } delete this.contexts[contextName]; + delete this.defaults[contextName]; + } + + resetDefauls(contextName) { + const context = this.getContext(contextName); + const definitions = this.defaults[contextName]; + if (!context || !definitions) return; + context.extend(definitions); + return this.store(contextName, definitions).then(this.changeObserver.changed); } switchToContext(contextName) { diff --git a/Packages/ohif-hotkeys/client/components/form.html b/Packages/ohif-hotkeys/client/components/form.html index dce350f60..04a008ebb 100644 --- a/Packages/ohif-hotkeys/client/components/form.html +++ b/Packages/ohif-hotkeys/client/components/form.html @@ -4,6 +4,9 @@ {{>inputText (extend hotkeyInputInformation class='hotkey')}} {{/each}}
- {{#button class='btn btn-primary' action='save'}}Save{{/button}} +
+ {{#button class='btn btn-primary pull-right' action='save'}}Save{{/button}} + {{#button class='btn btn-secondary pull-right m-r-1' action='resetDefaults'}}Reset to Defaults{{/button}} +
{{/form}} diff --git a/Packages/ohif-hotkeys/client/components/form.js b/Packages/ohif-hotkeys/client/components/form.js index 48266b09b..fabbcc1eb 100644 --- a/Packages/ohif-hotkeys/client/components/form.js +++ b/Packages/ohif-hotkeys/client/components/form.js @@ -12,7 +12,19 @@ Template.hotkeysForm.onCreated(() => { const { contextName } = instance.data; const form = instance.$('form').first().data('component'); const definitions = form.value(); - OHIF.hotkeys.store(contextName, definitions); + return OHIF.hotkeys.store(contextName, definitions); + }, + + resetDefaults() { + const { contextName } = instance.data; + const dialogOptions = { + title: 'Reset Shortcuts to Default', + message: 'Are you sure you want to reset all the shortcuts to their defaults?' + }; + + return OHIF.ui.showDialog('dialogConfirm', dialogOptions).then(() => { + return OHIF.hotkeys.resetDefauls(contextName); + }); } }; @@ -100,7 +112,7 @@ Template.hotkeysForm.events({ Template.hotkeysForm.helpers({ getHotkeyInputInformationList() { - OHIF.context.dep.depend(); + OHIF.hotkeys.changeObserver.depend(); const instance = Template.instance(); const { contextName } = instance.data; const hotkeysInputInformation = []; diff --git a/Packages/ohif-user/client/lib/data.js b/Packages/ohif-user/client/lib/data.js index 3a5748442..e45291f21 100644 --- a/Packages/ohif-user/client/lib/data.js +++ b/Packages/ohif-user/client/lib/data.js @@ -26,9 +26,21 @@ OHIF.user.getData = key => { // Store the persistent data by giving a key and a value to store OHIF.user.setData = (key, value) => { - // Check if there is an user logged in - OHIF.user.validate(); + return new Promise((resolve, reject) => { + try { + // Check if there is an user logged in + OHIF.user.validate(); + } catch(error) { + reject(error); + } - // Call the update method on server-side - Meteor.call('ohif.user.data.set', key, value); + // Call the update method on server-side + Meteor.call('ohif.user.data.set', key, value, error => { + if (error) { + reject(error); + } + + resolve(); + }); + }); }; diff --git a/Packages/ohif-viewerbase/client/components/viewer/textMarkerDialogs/textMarkerDialogs.styl b/Packages/ohif-viewerbase/client/components/viewer/textMarkerDialogs/textMarkerDialogs.styl index 60ed22579..c8ad48808 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/textMarkerDialogs/textMarkerDialogs.styl +++ b/Packages/ohif-viewerbase/client/components/viewer/textMarkerDialogs/textMarkerDialogs.styl @@ -85,13 +85,21 @@ border-bottom-color: #23557f border-width: 10px + button.btn-secondary + background-color: #CFE3F5; + border: 1px solid #E5F3FF; + font-size: 12px !important; + color:#0D416D + &:hover + color:#0D416D + #textMarkerRelabelDialog margin: 0 .relabelOptions padding: 15px 0px 0px 0px .relabelSelect margin-left: 5px - + #textMarkerOptionsDialog .optionsDiv padding-top: 10px @@ -112,14 +120,6 @@ button.viewerBtn &:hover color:#FFF -button.btn-secondary - background-color: #CFE3F5; - border: 1px solid #E5F3FF; - font-size: 12px !important; - color:#0D416D - &:hover - color:#0D416D - .iconSwitch margin:0px 5px .btn @@ -145,5 +145,3 @@ button.btn-secondary display:block .off display: none - - diff --git a/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js b/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js index f00f1b877..4302fb8a9 100644 --- a/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js +++ b/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js @@ -248,7 +248,7 @@ function setOHIFHotkeys(hotkeys) { */ function enableHotkeys(hotkeys) { const definitions = hotkeys || OHIF.viewer.hotkeys; - OHIF.hotkeys.set('viewer', definitions); + OHIF.hotkeys.set('viewer', definitions, true); OHIF.context.set('viewer'); }