moved workspace and config toggler to core...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2016-03-28 22:07:38 +03:00
parent 5fbea011b8
commit 14b2cab73d
6 changed files with 133 additions and 116 deletions

View File

@ -53,32 +53,6 @@ function(direction, dfl_tag){
} }
// NOTE: if not state is set this assumes that the first state is the
// default...
var makeConfigToggler =
module.makeConfigToggler =
function(attr, states, callback){
return toggler.Toggler(null,
function(_, action){
var lst = states.constructor === Array ? states : states.call(this)
//console.log('action', action)
if(action == null){
return this.config[attr] || lst[lst.indexOf('none')] || lst[0]
} else {
this.config[attr] = action
//this.focusImage()
}
},
states,
// XXX should we focus image by default here???
callback || function(action){ action != null && this.focusImage() })
}
/*********************************************************************/ /*********************************************************************/
// XXX split this into read and write actions... // XXX split this into read and write actions...
@ -184,7 +158,7 @@ actions.Actions({
}, },
toggleRibbonFocusMode : ['Interface/Toggle ribbon focus mode', toggleRibbonFocusMode : ['Interface/Toggle ribbon focus mode',
makeConfigToggler('ribbon-focus-mode', core.makeConfigToggler('ribbon-focus-mode',
function(){ return this.config['ribbon-focus-modes'] })], function(){ return this.config['ribbon-focus-modes'] })],

View File

@ -12,6 +12,36 @@ define(function(require){ var module = {}
var actions = require('lib/actions') var actions = require('lib/actions')
var features = require('lib/features') var features = require('lib/features')
var toggler = require('lib/toggler')
/*********************************************************************/
// NOTE: if not state is set this assumes that the first state is the
// default...
var makeConfigToggler =
module.makeConfigToggler =
function(attr, states, callback){
return toggler.Toggler(null,
function(_, action){
var lst = states.constructor === Array ? states : states.call(this)
//console.log('action', action)
if(action == null){
return this.config[attr] || lst[lst.indexOf('none')] || lst[0]
} else {
this.config[attr] = action
//this.focusImage()
}
},
states,
// XXX should we focus image by default here???
callback || function(action){ action != null && this.focusImage() })
}
@ -165,6 +195,101 @@ module.LifeCycle = ImageGridFeatures.Feature({
//---------------------------------------------------------------------
//
// Basic protocol:
// A participating feature should:
// - react to .saveWorkspace(..) by saving it's relevant state data to the
// object returned by the .saveWorkspace() action.
// NOTE: it is recommended that a feature save its relevant .config
// data as-is.
// - react to .loadWorkspace(..) by loading it's state from the returned
// object...
// - react to .toggleChrome(..) and switch on and off the chrome
// visibility... (XXX)
//
//
var WorkspaceActions =
module.WorkspaceActions = actions.Actions({
config: {
'workspace': 'default',
'chrome-visible': 'on',
'saved-workspaces': {},
},
get workspace(){
return this.config.workspace
},
set workspace(value){
this.loadWorkspace(value)
},
getWorkspace: ['- Workspace/',
function(){ return this.saveWorkspace(null) }],
// NOTE: these are mainly triggers for other features to save/load
// their specific states...
// NOTE: handlers should only set data on the workspace object passively,
// no activity is recommended.
// NOTE: if null is passed this will only get the data, but will
// save nothing. this us useful for introspection and temporary
// context storage.
//
// XXX for some reason this does not trigger a .config save...
saveWorkspace: ['Workspace/Save Workspace',
function(name){
this.config['saved-workspaces'] = this.config['saved-workspaces']
var res = {}
if(name !== null){
this.config['saved-workspaces'][name || this.config.workspace] = res
}
return res
}],
// NOTE: merging the state data is the responsibility of the feature
// ...this is done so as not to restrict the feature to one
// specific way to do stuff...
loadWorkspace: ['Workspace/Load Workspace',
function(name){
this.config.workspace = name
return this.config['saved-workspaces'][name] || {}
}],
// toggle chrome on and off...
toggleChrome: ['Workspace|Interface/Toggle chrome',
makeConfigToggler('chrome-visible', ['off', 'on'])],
toggleWorkspace: ['Workspace/Toggle Workspace',
makeConfigToggler('workspace',
function(){ return Object.keys(this.config['saved-workspaces']) },
function(state){ this.loadWorkspace(state) })],
})
var Workspace =
module.Workspace = ImageGridFeatures.Feature({
title: '',
tag: 'workspace',
depends: [
'lifecycle',
],
actions: WorkspaceActions,
handlers: [
['stop',
function(){ this.saveWorkspace() }],
],
})
/********************************************************************** /**********************************************************************
* vim:set ts=4 sw=4 : */ * vim:set ts=4 sw=4 : */

View File

@ -50,6 +50,7 @@ core.ImageGridFeatures.Feature('viewer-testing', [
'viewer-commandline', 'viewer-commandline',
'viewer-minimal', 'viewer-minimal',
'workspace',
'ui', 'ui',
'ui-ribbons-placement', 'ui-ribbons-placement',
@ -94,7 +95,6 @@ core.ImageGridFeatures.Feature('viewer-testing', [
'ui-external-editor', 'ui-external-editor',
// chrome... // chrome...
'ui-workspace',
'ui-status-log', 'ui-status-log',
'ui-scale', 'ui-scale',
'ui-animation', 'ui-animation',

View File

@ -278,7 +278,7 @@ var MetadataUIActions = actions.Actions({
}, },
toggleMetadataAutoSelect: ['Interface/Toggle metadata value auto-select', toggleMetadataAutoSelect: ['Interface/Toggle metadata value auto-select',
base.makeConfigToggler('metadata-auto-select-mode', core.makeConfigToggler('metadata-auto-select-mode',
function(){ return this.config['metadata-auto-select-modes'] })], function(){ return this.config['metadata-auto-select-modes'] })],
// XXX should we replace 'mode' with nested set of metadata??? // XXX should we replace 'mode' with nested set of metadata???

View File

@ -64,13 +64,13 @@ var SlideshowActions = actions.Actions({
// XXX add a custom setting... // XXX add a custom setting...
// XXX STUB // XXX STUB
selectSlideshowInterval: ['Slideshow/Interval', selectSlideshowInterval: ['Slideshow/Interval',
base.makeConfigToggler('ui-slideshow-interval', core.makeConfigToggler('ui-slideshow-interval',
function(){ return this.config['ui-slideshow-saved-intervals'] })], function(){ return this.config['ui-slideshow-saved-intervals'] })],
toggleSlideshowDirection: ['Slideshow/Direction', toggleSlideshowDirection: ['Slideshow/Direction',
base.makeConfigToggler('ui-slideshow-direction', ['forward', 'reverse'])], core.makeConfigToggler('ui-slideshow-direction', ['forward', 'reverse'])],
toggleSlideshowLooping: ['Slideshow/Looping', toggleSlideshowLooping: ['Slideshow/Looping',
base.makeConfigToggler('ui-slideshow-looping', ['on', 'off'])], core.makeConfigToggler('ui-slideshow-looping', ['on', 'off'])],
// XXX need to save/load state... // XXX need to save/load state...
toggleSlideshow: ['Slideshow/Start', toggleSlideshow: ['Slideshow/Start',
toggler.CSSClassToggler( toggler.CSSClassToggler(

View File

@ -751,88 +751,6 @@ module.Viewer = core.ImageGridFeatures.Feature({
//---------------------------------------------------------------------
//
// Basic protocol:
// A participating feature should:
// - react to .saveWorkspace(..) by saving it's relevant state data to the
// object returned by the .saveWorkspace() action.
// NOTE: it is recommended that a feature save its relevant .config
// data as-is.
// - react to .loadWorkspace(..) by loading it's state from the returned
// object...
// - react to .toggleChrome(..) and switch on and off the chrome
// visibility... (XXX)
//
//
var WorkspaceActions =
module.WorkspaceActions = actions.Actions({
config: {
'workspace': 'default',
'chrome-visible': 'on',
'saved-workspaces': {},
},
get workspace(){
return this.config.workspace
},
set workspace(value){
this.loadWorkspace(value)
},
// NOTE: these are mainly triggers for other features to save/load
// their specific states...
// XXX for some reason this does not trigger a .config save...
saveWorkspace: ['Workspace/Save Workspace',
function(name){
this.config['saved-workspaces'] = this.config['saved-workspaces']
var res = this.config['saved-workspaces'][name || this.config.workspace] = {}
return res
}],
// NOTE: merging the state data is the responsibility of the feature
// ...this is done so as not to restrict the feature to one
// specific way to do stuff...
loadWorkspace: ['Workspace/Load Workspace',
function(name){
this.config.workspace = name
return this.config['saved-workspaces'][name] || {}
}],
// toggle chrome on and off...
toggleChrome: ['Workspace|Interface/Toggle chrome',
base.makeConfigToggler('chrome-visible',
['off', 'on'])],
toggleWorkspace: ['Workspace/Toggle Workspace',
base.makeConfigToggler('workspace',
function(){ return Object.keys(this.config['saved-workspaces']) },
function(state){ this.loadWorkspace(state) })],
})
module.Workspace = core.ImageGridFeatures.Feature({
title: '',
tag: 'ui-workspace',
depends: [
'ui',
],
actions: WorkspaceActions,
handlers: [
['stop',
function(){ this.saveWorkspace() }],
],
})
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Format: // Format:
@ -2085,7 +2003,7 @@ module.AutoAlignRibbons = core.ImageGridFeatures.Feature({
actions: actions.Actions({ actions: actions.Actions({
toggleRibbonAlignMode : ['Interface/Toggle ribbon align mode', toggleRibbonAlignMode : ['Interface/Toggle ribbon align mode',
base.makeConfigToggler('ribbon-align-mode', core.makeConfigToggler('ribbon-align-mode',
function(){ return this.config['ribbon-align-modes'] })], function(){ return this.config['ribbon-align-modes'] })],
}), }),
@ -3126,7 +3044,7 @@ var UIScaleActions = actions.Actions({
// XXX should this be browser API??? // XXX should this be browser API???
// XXX this does not re-scale the ribbons correctly in nw0.13 // XXX this does not re-scale the ribbons correctly in nw0.13
toggleInterfaceScale: ['Interface/Toggle interface modes', toggleInterfaceScale: ['Interface/Toggle interface modes',
base.makeConfigToggler('ui-scale-mode', core.makeConfigToggler('ui-scale-mode',
function(){ return Object.keys(this.config['ui-scale-modes']) }, function(){ return Object.keys(this.config['ui-scale-modes']) },
function(state){ function(state){
var gui = requirejs('nw.gui') var gui = requirejs('nw.gui')