| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 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) | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 	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: '', | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-31 10:37:21 +03:00
										 |  |  | 	tag: 'ui-app-control', | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | 	depends: [ | 
					
						
							|  |  |  | 		'ui', | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	actions: AppControlActions, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX test if in:
 | 
					
						
							|  |  |  | 	// 	- chrome app
 | 
					
						
							|  |  |  | 	// 	- nw
 | 
					
						
							|  |  |  | 	// 	- mobile
 | 
					
						
							| 
									
										
										
										
											2015-12-31 10:37:21 +03:00
										 |  |  | 	isApplicable: function(){ return this.runtime == 'nw' }, | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// 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 }) |