added slideshow hold + some tweaking...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2017-11-27 07:22:08 +03:00
parent a8e095c09d
commit 27845d02da
2 changed files with 64 additions and 7 deletions

View File

@ -37,6 +37,7 @@ var SlideshowActions = actions.Actions({
'slideshow-direction': 'forward', 'slideshow-direction': 'forward',
'slideshow-interval': '3s', 'slideshow-interval': '3s',
'slideshow-interval-max-count': 7, 'slideshow-interval-max-count': 7,
'slideshow-hold': 'on',
'slideshow-intervals': [ 'slideshow-intervals': [
'0.2s', '0.2s',
@ -47,7 +48,7 @@ var SlideshowActions = actions.Actions({
], ],
}, },
toggleSlideshow: ['Slideshow/Slideshow quick toggle', toggleSlideshow: ['Slideshow/$Slideshow quick toggle',
toggler.CSSClassToggler( toggler.CSSClassToggler(
function(){ return this.dom }, function(){ return this.dom },
'slideshow-running', 'slideshow-running',
@ -183,7 +184,9 @@ var SlideshowActions = actions.Actions({
})], })],
// settings... // settings...
slideshowIntervalDialog: ['Slideshow/Slideshow interval...', // NOTE: these are disabled as they are repeated in the slideshow dialog...
// XXX do we need both these and the dialog???
slideshowIntervalDialog: ['- Slideshow/Slideshow $interval...',
widgets.makeUIDialog(function(parent){ widgets.makeUIDialog(function(parent){
var that = this var that = this
var dialog = widgets.makeConfigListEditor( var dialog = widgets.makeConfigListEditor(
@ -219,12 +222,14 @@ var SlideshowActions = actions.Actions({
}) })
return dialog return dialog
})], })],
toggleSlideshowDirection: ['- Slideshow/Slideshow direction', toggleSlideshowDirection: ['- Slideshow/Slideshow $direction',
core.makeConfigToggler('slideshow-direction', ['forward', 'reverse'])], core.makeConfigToggler('slideshow-direction', ['forward', 'reverse'])],
toggleSlideshowLooping: ['- Slideshow/Slideshow looping', toggleSlideshowLooping: ['- Slideshow/Slideshow $looping',
core.makeConfigToggler('slideshow-looping', ['on', 'off'])], core.makeConfigToggler('slideshow-looping', ['on', 'off'])],
// NOTE: these can be used as pause and resume... toggleSlideshowLooping: ['Interface|Slideshow/Slideshow $hold',
core.makeConfigToggler('slideshow-hold', ['on', 'off'])],
resetSlideshowTimer: ['- Slideshow/Reset slideshow timer', resetSlideshowTimer: ['- Slideshow/Reset slideshow timer',
function(){ function(){
this.__slideshow_timer && this.toggleSlideshow('on') this.__slideshow_timer && this.toggleSlideshow('on')
@ -333,7 +338,59 @@ module.Slideshow = core.ImageGridFeatures.Feature({
// do not leave the viewer in slideshow mode... // do not leave the viewer in slideshow mode...
['stop', ['stop',
function(){ this.toggleSlideshow('off') }] function(){ this.toggleSlideshow('off') }],
// slideshow hold...
//
// Holding down a key or mouse button will suspend the slideshow
// and resume it when the key/button is released...
//
// XXX experimental, needs more testing...
['toggleSlideshow',
function(){
var that = this
if(!this.dom){
return
}
var hold = this.__slideshow_hold_handler
= this.__slideshow_hold_handler
|| function(){
var h = that.__slideshow_holding
if(h == null && that.toggleSlideshowTimer('?') == 'running'){
that.__slideshow_holding = 1
that.suspendSlideshowTimer()
// handle multiple events stacked...
} else {
that.__slideshow_holding += 1
}
}
var release = this.__slideshow_release_handler
= this.__slideshow_release_handler
|| function(){
var h = that.__slideshow_holding =
// unstack multiple events...
(that.__slideshow_holding || -1) - 1
if(h == 0){
that.resetSlideshowTimer()
delete that.__slideshow_holding
}
}
if(this.toggleSlideshow('?') == 'on'){
this.dom.on('keydown mousedown', hold)
this.dom.on('keydown mouseup', release)
} else {
this.dom.off('keyup mousedown', hold)
this.dom.off('keyup mouseup', release)
}
}]
//*/
], ],
}) })

View File

@ -1977,7 +1977,7 @@ var ButtonsActions = actions.Actions({
//'&#9636;<sub/>': ['collections', 'browseCollections -- Collections...'], //'&#9636;<sub/>': ['collections', 'browseCollections -- Collections...'],
//'&#9974;': ['view', 'toggleSingleImage -- Single image / ribbon toggle'], //'&#9974;': ['view', 'toggleSingleImage -- Single image / ribbon toggle'],
'&#9655;': ['slideshow', [ '&#9655;': ['slideshow', [
'toggleSlideshow -- Toggle slideshow', 'toggleSlideshow -- Slideshow',
'slideshowDialog -- Slideshow menu...', 'slideshowDialog -- Slideshow menu...',
]], ]],
}, },