added full crop interface and migrated cropping modes to use in (marked-only, single ribbon); fixed a save in cropped mode bug...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-08-08 22:48:24 +04:00
parent 4a2b37b67e
commit e8a18b2a55
6 changed files with 106 additions and 54 deletions

View File

@ -93,11 +93,12 @@ Roadmap
[_] 30% Gen 3 current todo [_] 29% Gen 3 current todo
[_] 61% High priority [_] 59% High priority
[_] add indicator to ribbon up/down navigation in full screen... [_] add indicator to ribbon up/down navigation in full screen...
| this might be a number or some kind of animation... | this might be a number or some kind of animation...
[_] BUG: sometimes images.json folder is created... [_] BUG: sometimes images.json folder is created...
[_] rework the marks.js/modes.js to enable multi-level cropping...
[_] 0% Priority tasks [_] 0% Priority tasks
[_] full archive index [_] full archive index
[_] segmented loading of images and data [_] segmented loading of images and data
@ -272,6 +273,7 @@ Roadmap
[_] remove extra and repetitive actions [_] remove extra and repetitive actions
[_] caching config [_] caching config
[_] side-by side view... [_] side-by side view...
[X] BUG: cropping in cropped mode will not save the whole data...
[X] 100% BUG: sometimes the previews are not updated... [X] 100% BUG: sometimes the previews are not updated...
[X] wrong resolution preview is loaded [X] wrong resolution preview is loaded
| when coming out of single-image-mode after moving to a | when coming out of single-image-mode after moving to a

View File

@ -109,6 +109,8 @@ var IMAGES_CREATED = false
var MARKED = [] var MARKED = []
var CROP_STACK = []
// NOTE: these are named: <mode>-<feature> // NOTE: these are named: <mode>-<feature>
var SETTINGS = { var SETTINGS = {
'global-theme': null, 'global-theme': null,
@ -1077,31 +1079,6 @@ function loadSettings(){
} }
// Crop view to only given gids
//
// XXX make keep_ribbons option work...
function cropDataToGIDs(gids, keep_ribbons){
var cur = DATA.current
var old_data = DATA
DATA = {
varsion: '2.0',
current: null,
ribbons: [
gids
],
order: DATA.order.slice(),
}
cur = getGIDBefore(cur, 0)
cur = cur == null ? gids[0] : cur
DATA.current = cur
reloadViewer()
updateImages()
return old_data
}
/********************************************************************** /**********************************************************************
* Image caching... * Image caching...
@ -1177,6 +1154,98 @@ function getPrevLocation(){
* Actions... * Actions...
*/ */
/******************************************************* Crop Data ***/
function isViewCropped(){
return !(CROP_STACK.length == 0)
}
function getAllData(){
if(!isViewCropped()){
return DATA
} else {
return CROP_STACK[0]
}
}
// XXX make keep_ribbons option work...
function makeCroppedData(gids, keep_ribbons){
var cur = DATA.current
var old_data = DATA
var res = {
varsion: '2.0',
current: null,
ribbons: [],
order: DATA.order.slice(),
}
// flat single ribbon crop...
if(!keep_ribbons){
res.ribbons[0] = gids
// keep the ribbon structure...
} else {
$.each(DATA.ribbons, function(_, e){
e = e.filter(function(ee){ return gids.indexOf(ee) >= 0 })
// skip empty ribbons...
if(e.length != 0){
res.ribbons.push(e)
}
})
}
cur = getGIDBefore(cur, 0)
cur = cur == null ? gids[0] : cur
res.current = cur
return res
}
function cropDataTo(gids, keep_ribbons){
var prev_state = DATA
CROP_STACK.push(prev_state)
DATA = makeCroppedData(gids, keep_ribbons)
reloadViewer()
updateImages()
return prev_state
}
function uncropData(){
if(!isViewCropped()){
return DATA
}
var prev_state = DATA
DATA = CROP_STACK.pop()
reloadViewer()
updateImages()
return prev_state
}
function showAllData(){
var prev_state = DATA
DATA = getAllData()
CROP_STACK = []
reloadViewer()
updateImages()
return prev_state
}
/********************************************************* Workers ***/ /********************************************************* Workers ***/
// get/create a named worker queue... // get/create a named worker queue...

View File

@ -438,7 +438,7 @@ function saveFileState(name, no_normalize_path){
} }
} }
dumpJSON(name + '-data.json', DATA) dumpJSON(name + '-data.json', getAllData())
// XXX do we need to do this??? // XXX do we need to do this???
saveFileMarks(name) saveFileMarks(name)

View File

@ -48,7 +48,7 @@ function loadLocalStorageData(attr){
} }
function saveLocalStorageData(attr){ function saveLocalStorageData(attr){
attr = attr == null ? DATA_ATTR : attr attr = attr == null ? DATA_ATTR : attr
localStorage[attr] = JSON.stringify(DATA) localStorage[attr] = JSON.stringify(getAllData())
saveLocalStorageBaseURL(attr) saveLocalStorageBaseURL(attr)
} }

View File

@ -16,7 +16,7 @@
// NOTE: MARKED may contain both gids that are not loaded and that do // NOTE: MARKED may contain both gids that are not loaded and that do
// not exist, as there is no way to distinguish between the two // not exist, as there is no way to distinguish between the two
// situations the cleanup is optional... // situations the cleanup is optional...
function loadMarkedOnlyData(cmp, no_cleanout_marks){ function cropMarkedImages(cmp, no_cleanout_marks){
cmp = cmp == null ? imageOrderCmp : cmp cmp = cmp == null ? imageOrderCmp : cmp
var cur = DATA.current var cur = DATA.current
var marked = MARKED.slice().sort(cmp) var marked = MARKED.slice().sort(cmp)
@ -34,27 +34,12 @@ function loadMarkedOnlyData(cmp, no_cleanout_marks){
} }
} }
ALL_DATA = cropDataToGIDs(marked) ALL_DATA = cropDataTo(marked)
return DATA return DATA
} }
// XXX name this in a better way...
function loadAllImages(){
var cur = DATA.current
DATA = ALL_DATA
// NOTE: if we do not do this the user will lose context every time
// returning from marks only view...
DATA.current = cur
reloadViewer()
// XXX FIX: for some reason not all previews get updated to the
// right size...
updateImages()
return DATA
}
/********************************************************************** /**********************************************************************
* Modes * Modes
@ -72,9 +57,9 @@ var toggleMarkedOnlyView = createCSSClassToggler(
}, },
function(action){ function(action){
if(action == 'on'){ if(action == 'on'){
loadMarkedOnlyData() cropMarkedImages()
} else { } else {
loadAllImages() uncropData()
} }
}) })

View File

@ -184,13 +184,9 @@ var toggleSingleRibbonMode = createCSSClassToggler(
}, },
function(action){ function(action){
if(action == 'on'){ if(action == 'on'){
ALL_DATA = cropDataToGIDs(DATA.ribbons[getRibbonIndex()].slice()) cropDataTo(DATA.ribbons[getRibbonIndex()].slice())
} else { } else {
var cur = DATA.current uncropData()
DATA = ALL_DATA
DATA.current = cur
reloadViewer()
updateImages()
} }
}) })