/********************************************************************** * * * **********************************************************************/ define(function(require){ var module = {} //var DEBUG = DEBUG != null ? DEBUG : true var actions = require('lib/actions') var features = require('lib/features') var core = require('features/core') var base = require('features/base') /*********************************************************************/ var AppControlActions = actions.Actions({ config: { 'application-window': null, 'window-title': 'ImageGrid.Viewer (${VERSION}): ${FILENAME}', // XXX 'ui-scale-modes': { desktop: 0, touch: 3, }, }, // XXX revise these... close: ['File|Interface/Close viewer', function(){ window.close() }], storeWindowGeometry: ['- Interface/Store window state', function(){ // store window parameters (size, state)... var gui = requirejs('nw.gui') var win = gui.Window.get() // fullscreen... // ...avoid overwriting size... if(win.isFullscreen){ this.config.window = this.config.window || {} this.config.window.fullscreen = true this.config.window.zoom = win.zoomLevel } else { this.config.window = { size: { width: win.width, height: win.height, }, fullscreen: false, zoom: win.zoomLevel , } } }], restoreWindowGeometry: ['- Interface/Restore window state', function(){ // or global.window.nwDispatcher.requireNwGui() // (see: https://github.com/rogerwang/node-webkit/issues/707) var gui = requirejs('nw.gui') var win = gui.Window.get() // XXX move this into .restoreWindowGeometry(..) // get window state from config and load it... var cfg = this.config.window if(cfg != null){ var W = screen.width var H = screen.height var w = 800 var h = 600 var s = cfg.scale if(cfg.size){ w = win.width = Math.min(cfg.size.width, screen.width) h = win.height = Math.min(cfg.size.height, screen.height) } // place on center of the screen... var x = win.x = (W - w)/2 var y = win.y = (H - h)/2 if(s){ win.zoomLevel = s } //console.log('GEOMETRY:', w, h, x, y) this.centerViewer() } win.show() if(cfg != null && cfg.fullscreen){ this.toggleFullScreen() } /* XXX still buggy.... // restore interface scale... this.toggleInterfaceScale( this.config['ui-scale-mode'] || this.toggleInterfaceScale('??')[0]) */ }], toggleFullScreen: ['Interface/Toggle full screen mode', function(){ var that = this this.ribbons.preventTransitions() // hide the viewer to hide any animation crimes... this.ribbons.viewer[0].style.visibility = 'hidden' // XXX where should toggleFullscreenMode(..) be defined... // ...this also toggles a fullscreen css class on body... toggleFullscreenMode() //requirejs('nw.gui').Window.get().toggleFullscreen() setTimeout(function(){ that .centerViewer() .focusImage() .ribbons .restoreTransitions() that.ribbons.viewer[0].style.visibility = '' }, 0) }], // XXX need to account for scale in PartialRibbons // XXX should this be browser API??? toggleInterfaceScale: ['Interface/Toggle interface modes', base.makeConfigToggler('ui-scale-mode', function(){ return Object.keys(this.config['ui-scale-modes']) }, function(state){ var gui = requirejs('nw.gui') var win = gui.Window.get() this.ribbons.preventTransitions() var w = this.screenwidth win.zoomLevel = this.config['ui-scale-modes'][state] || 0 this.screenwidth = w this.centerViewer() this.ribbons.restoreTransitions() })], showDevTools: ['Interface|Development/Show Dev Tools', function(){ if(window.showDevTools != null){ showDevTools() } }], }) // XXX this needs a better .isApplicable(..) // XXX store/load window state... // - size // - state (fullscreen/normal) var AppControl = module.AppControl = core.ImageGridFeatures.Feature({ title: '', doc: '', tag: 'ui-app-control', depends: [ 'ui', ], actions: AppControlActions, // XXX test if in: // - chrome app // - nw // - mobile isApplicable: function(){ return this.runtime == 'nw' }, // XXX show main window... handlers: [ ['start', function(){ // XXX this messes up ribbon scale... // ...to close/fast? //this.toggleInterfaceScale('!') this.restoreWindowGeometry() }], [[ 'close.pre', 'toggleFullScreen', ], function(){ this.storeWindowGeometry() }], ['focusImage', function(){ var gui = requirejs('nw.gui') var win = gui.Window.get() if(this.images){ var img = this.images[this.current] win.title = (this.config['window-title'] || 'ImageGrid.Viewer (${VERSION}): ${FILENAME}') // XXX get this from the viewer... .replace('${VERSION}', this.version || 'gen4') .replace('${FILENAME}', (img.name || img.path.replace(/\.[\\\/]/, ''))) .replace('${PATH}', (img.base_path || '.') +'/'+ img.path.replace(/\.[\\\/]/, '')) /* .replace('${DIR}', pathlib.dirname((img.base_path || '.') +'/'+ img.path.replace(/\.[\\\/]/, ''))) */ // XXX add ... } }], ], }) /********************************************************************** * vim:set ts=4 sw=4 : */ return module })