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

View File

@ -109,6 +109,8 @@ var IMAGES_CREATED = false
var MARKED = []
var CROP_STACK = []
// NOTE: these are named: <mode>-<feature>
var SETTINGS = {
'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...
@ -1177,6 +1154,98 @@ function getPrevLocation(){
* 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 ***/
// 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???
saveFileMarks(name)

View File

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

View File

@ -16,7 +16,7 @@
// 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
// situations the cleanup is optional...
function loadMarkedOnlyData(cmp, no_cleanout_marks){
function cropMarkedImages(cmp, no_cleanout_marks){
cmp = cmp == null ? imageOrderCmp : cmp
var cur = DATA.current
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
}
// 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
@ -72,9 +57,9 @@ var toggleMarkedOnlyView = createCSSClassToggler(
},
function(action){
if(action == 'on'){
loadMarkedOnlyData()
cropMarkedImages()
} else {
loadAllImages()
uncropData()
}
})

View File

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