Roadmap
	[_] 44% Pre-Alpha - limited preview
		[_] 75% navigation
			[X] image next/prev
			[X] ribbon next/prev
			[X] screen next/prev
			[_] marks next/prev
		[_] 26% editing
			[_] 0% ribbon
				[_] merge up/down
				[_] flatten
				[_] sort
			[_] 57% image
				[X] shift up/down
				[_] shift left/right
				[X] mark/unmark (selection)
				[X] rotate left/right
				[_] crop
				[_] 0% metadata
					[_] tag
					[_] note
				[X] open with external software
			[_] 14% marked (selected) set
				[X] crop (marked only mode)
				[_] tag
				[_] shift up/down
				[_] shift left/right
				[_] group
				[_] note
				[_] save as set
			[_] 33% crop selection via
				[X] marked
				[_] tag
				[_] date
		[_] 39% storage and loading
			[_] 75% ImageGrid cache
				[X] generate
				[X] load
				[X] save
				[_] update
				| needs revision...
			[_] 25% fav tree
				[X] generate
				[_] load
				[_] save
				[_] update
			[_] 25% xmp files
				[X] generate
				[_] load
				[_] save
				[_] update
			[_] 33% raw directory tree
				[X] load
				[_] save
				[_] update
		[_] 36% UI
			[_] 40% modes
				[_] cropped mode
				| show only selected images
				[X] single image
				[_] slideshow (single image)
				[X] ribbon
				[_] single ribbon
			[_] 33% other
				[_] load/open
				[_] select saved set
				[X] keyboard help
				[_] general help
				[_] settings
				[X] image info
	[_] 0% Alpha - limited preview
	[_] 0% Beta - public?
	[_] 0% 1.0 - public
	


[_] 23% Gen 3 current todo
	[_] 46% High priority
		[_] BUG: aligning still sometimes gets off...
		| ...after rotating a number of images
		|
		| happens when:
		| 	- getScreenWidthInImages() < 2
		| 	- looking through images in one direction and back, some get misaligned
		| 		...this is stable behaviour by centerRibbon(...), 
		| 		calling it again will not fix this.
		| 		moving next/prev will fix the issue until it comes back again
		| 	- affected by LOAD_SCREENS and number of images in ribbon
		| 		current figures:
		| 			Ribbon: 18
		| 			Position going forward: 4
		| 			Position going back: 1
		| 			LOAD_SCREENS: 6
		| 	NOTE: changing LOAD_SCREENS moves the affected positions.
		| 	NOTE: had a similar bug where some images still kept their 
		| 			prior sizing after recycling...
		| 			...check if centerRibbon(...) and correctImageProportionsForRotation(...)
		| 			are called in right sequence...
		[_] BUG: changing window size in single image modes messes things up...
		| until we cycle to ribbon mode and back...
		[_] BUG: sometimes duplicate images get loaded...
		| this happens when jumping back and forth on the mid ribbon until
		| the last element shows up and then moving left until the frame
		| around the image disappears...
		| at this point, this will return 2:
		|
		| 	$('[order='+$('.current.image').attr('order')+']').length
		|
		[_] BUG: jumping screen images does not load the adjacent ribbons...
		| positioning is OK but ribbons are not fully visible...
		[_] ASAP: test on Android...
		[_] slideshow mode...
		[_] single ribbon mode
		| should this have up/down navigation?
		|
		| something like showGidsAsRibbon(gids) would be generic and logical...
		[_] image sorting (reverse/date/name/...)
		[_] add ability to save/load ranges of images and the structures around them
		| e.g.load image 100 to current ribbon -> will load 100 images
		| for current ribbon and all the in between images from other
		| ribbons above and below...
		[_] build cache in background...
		| this must be done while updating IMAGES live...
		[_] 6% mark-based operations
			[_] 33% cropping selection
				[X] marked
				[_] by tag/collection
				[_] by group
			[_] shift up/down
			[_] tag
			[_] group
			| a group should behave as a single image but is 
			| viewable/expandable as a ribbon...
			|
			| should be two types of groups:
			| 	- strict - always as a single image
			| 		like a set of versions, processed and processing 
			| 		versions of the same image.
			| 		(auto-group?)
			| 	- loose - similar images, could be named collections
			| 		viewed individually, but can be accessed either from 
			| 		a list or a member image (primary).
			[_] collection
			| make or add to existing collection
		[_] 50% Undo/Redo
			[X] basic one step (revert to last save)
			[_] push/pop state stack
		[_] 0% grouping / meta-image
			[_] versions w. label image
			| a set of images that is represented by one of the group
			[_] collection
		[_] 75% UI elements
			[X] indicators
			[X] image info
			[X] stub info dialog
			[_] detailed image info
		[_] 0% gesture support
			[_] up/down - shift
			[_] left/right - navigate
		[_] 0% CSS
			[_] cleanup
			[_] split themes and layout
		[_] 0% manual ordering
		[_] 0% tweak loader
			[_] thresholds and frame size
			[_] remove extra and repetitive actions
			[_] caching config
		[X] import fav dirs (wo. index)...
		[X] ASAP: load/view un-cached directories...
		[X] ASAP: support relative paths in cache...
		[X] ASAP: account for image rotation with screen proportions while positioning
		| getRelativeVisualPosition(...) gives an odd position when:
		| 	- image is rotated
		| 	- image is screen-proportioned
		[X] NOTE: rotating might still produce alignment errors
		| this is due:
		| 	- most outerWidth/outerHeight being used do not account for margins...
		[X] ASAP: rotate images in the viewer...
		| This is a tad complicated by:
		| 	- marks
		| 	- image elem proportions that can change
		[X] 100% themes
			[X] light
			[X] gray
			[X] dark
		[X] make focus up/down chose a closest independently of direction...
		| navigation should be stable and moving up then down should yield 
		| exactly the same result...
		[X] ASAP: rewrite binSearch!! 
		| linSearch obviously is not usable for large sets of data...
		[X] split saving/loading into files and localStorage
		| DATA
		| 	- stored in localStorage
		| 	- stored in file
		| IMAGES
		| 	- stored only in files (does not change)
		|
		[X] 100% modes
			[X] ribbon
			[X] single-image
		[X] Save/load state
		[X] 100% action visual indication
			[X] first/last image
			[X] shift up/down
	[_] Low priority
		[_] Help
		[_] Keyboard config
		[_] general config
		


[_] 58% Gen 3 UI implementation
	[X] 100% Infinite ribbon (lib)
		[X] cyclic ribbon
		[X] image block generation
		[X] image block update
		[X] ribbon head/tail management
		| must be adaptive to current user scroll speed...
		|
		| at least a couple of screens at current zoom level...
	[_] Partial save/load
	| save only a block or changed data...
	[X] Adaptive preview size (lib)
	[X] Multiple ribbon (reuse)
	[_] 0% User actions
	| see [[controls.otl]] for basic actions...
	|
	| additional actions:
		[X] 100% toggle mark image
			[X] mark between
			| mark all images between closest marks
			[X] mark all/none
			[X] mark invert
		[X] show marked only in ribbon (crop selection)
		[_] crop image
		| shows a red/blue rectangle around image
		|
		| can be:
		| 	turned +/- 90 deg
		| 	turned arbitrarily
		| 	scaled with constrained proportions
			[_] show crop as red rectangle
			[_] show only cropped area
			[_] show crop as black veil
		[_] add note to image
		| a-la flickr notes...
		[_] edit IPCT
		[X] rotate image
	[_] 66% UI modes
		[_] 0% single ribbon
			[_] show images shifted (all / above only / below only) in current ribbon
			[_] show marked only
		[X] 100% multiple ribbons
			[X] show images above/below
			[X] show marked only
		[X] 100% single image


.
| vim:set spell :
