diff --git a/fsl/fsleyes/controls/lightboxtoolbar.py b/fsl/fsleyes/controls/lightboxtoolbar.py index f9b6a4854f461fceac1ea5ce2736dc60c0528850..67b6f7b5bb870504715ffb3a345c9642fbd5d3b2 100644 --- a/fsl/fsleyes/controls/lightboxtoolbar.py +++ b/fsl/fsleyes/controls/lightboxtoolbar.py @@ -31,6 +31,7 @@ class LightBoxToolBar(fsltoolbar.FSLEyesToolBar): icons = { 'screenshot' : fslicons.findImageFile('camera24'), + 'movieMode' : fslicons.findImageFile('movie24'), 'more' : fslicons.findImageFile('gear24'), 'zax' : { @@ -44,6 +45,7 @@ class LightBoxToolBar(fsltoolbar.FSLEyesToolBar): 'more' : fsltooltips.actions[ self, 'more'], 'screenshot' : fsltooltips.actions[ lb, 'screenshot'], + 'movieMode' : fsltooltips.properties[lb, 'movieMode'], 'zax' : fsltooltips.properties[lbOpts, 'zax'], 'sliceSpacing' : fsltooltips.properties[lbOpts, 'sliceSpacing'], 'zrange' : fsltooltips.properties[lbOpts, 'zrange'], @@ -60,6 +62,11 @@ class LightBoxToolBar(fsltoolbar.FSLEyesToolBar): 'screenshot', icon=icons['screenshot'], tooltip=tooltips['screenshot']), + + 'movieMode' : props.Widget( + 'movieMode', + icon=icons['movieMode'], + tooltip=tooltips['movieMode']), 'zax' : props.Widget( 'zax', @@ -94,6 +101,7 @@ class LightBoxToolBar(fsltoolbar.FSLEyesToolBar): more = props.buildGUI(self, self, specs['more']) screenshot = props.buildGUI(self, lb, specs['screenshot']) + movieMode = props.buildGUI(self, lb, specs['movieMode']) zax = props.buildGUI(self, lbOpts, specs['zax']) zrange = props.buildGUI(self, lbOpts, specs['zrange']) zoom = props.buildGUI(panel, lbOpts, specs['zoom']) @@ -109,7 +117,7 @@ class LightBoxToolBar(fsltoolbar.FSLEyesToolBar): sizer.Add(spacingLabel) sizer.Add(spacing, flag=wx.EXPAND) - tools = [more, screenshot, zax, zrange, panel] + tools = [more, screenshot, zax, movieMode, zrange, panel] self.SetTools(tools) diff --git a/fsl/fsleyes/controls/orthotoolbar.py b/fsl/fsleyes/controls/orthotoolbar.py index c9c18502a65093f7149c3fdbaa3a483bf35ef8f5..7e5655dc84d2df1a720fb52748590892937b99d6 100644 --- a/fsl/fsleyes/controls/orthotoolbar.py +++ b/fsl/fsleyes/controls/orthotoolbar.py @@ -46,6 +46,7 @@ class OrthoToolBar(fsltoolbar.FSLEyesToolBar): icons = { 'screenshot' : fslicons.findImageFile('camera24'), + 'movieMode' : fslicons.findImageFile('movie24'), 'showXCanvas' : fslicons.findImageFile('sagittalSlice24'), 'showYCanvas' : fslicons.findImageFile('coronalSlice24'), 'showZCanvas' : fslicons.findImageFile('axialSlice24'), @@ -63,6 +64,7 @@ class OrthoToolBar(fsltoolbar.FSLEyesToolBar): tooltips = { 'screenshot' : fsltooltips.actions[ ortho, 'screenshot'], + 'movieMode' : fsltooltips.properties[ortho, 'movieMode'], 'zoom' : fsltooltips.properties[orthoOpts, 'zoom'], 'layout' : fsltooltips.properties[orthoOpts, 'layout'], 'showXCanvas' : fsltooltips.properties[orthoOpts, 'showXCanvas'], @@ -74,6 +76,7 @@ class OrthoToolBar(fsltoolbar.FSLEyesToolBar): } targets = {'screenshot' : ortho, + 'movieMode' : ortho, 'zoom' : orthoOpts, 'layout' : orthoOpts, 'showXCanvas' : orthoOpts, @@ -104,6 +107,9 @@ class OrthoToolBar(fsltoolbar.FSLEyesToolBar): props .Widget( 'layout', icons=icons['layout'], tooltip=tooltips['layout']), + props .Widget( 'movieMode', + icon=icons['movieMode'], + tooltip=tooltips['movieMode']), actions.ActionButton('resetZoom', icon=icons['resetZoom'], tooltip=tooltips['resetZoom']), diff --git a/fsl/fsleyes/icons/movie24.png b/fsl/fsleyes/icons/movie24.png new file mode 100644 index 0000000000000000000000000000000000000000..b710e44d0c71ddb8f30f0f05ad7af3cf2b11fb22 Binary files /dev/null and b/fsl/fsleyes/icons/movie24.png differ diff --git a/fsl/fsleyes/icons/movie24@2x.png b/fsl/fsleyes/icons/movie24@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..385ebdf90140af30fd8ce707936a9b1f4f89a8aa Binary files /dev/null and b/fsl/fsleyes/icons/movie24@2x.png differ diff --git a/fsl/fsleyes/icons/sources/movie.xcf b/fsl/fsleyes/icons/sources/movie.xcf new file mode 100644 index 0000000000000000000000000000000000000000..a0ee9daf4b901adb82218b4d1881761f11c8cdff Binary files /dev/null and b/fsl/fsleyes/icons/sources/movie.xcf differ diff --git a/fsl/fsleyes/views/canvaspanel.py b/fsl/fsleyes/views/canvaspanel.py index c56dceeea8f53a914ed11f0beb13c1e0e213fab2..b422a36aa4cae831cbffbefce24782aa58e04764 100644 --- a/fsl/fsleyes/views/canvaspanel.py +++ b/fsl/fsleyes/views/canvaspanel.py @@ -44,9 +44,13 @@ class CanvasPanel(viewpanel.ViewPanel): syncOverlayOrder = props.Boolean(default=True) syncOverlayDisplay = props.Boolean(default=True) movieMode = props.Boolean(default=False) + + # Movie update rate in milliseconds - this is + # inverted so that a high value corresponds to + # a fast rate. movieRate = props.Int(minval=100, maxval=1000, - default=250, + default=750, clamped=True) @@ -271,10 +275,16 @@ class CanvasPanel(viewpanel.ViewPanel): if not self.movieMode: return + + rate = self.movieRate + rateMin = self.getConstraint('movieRate', 'minval') + rateMax = self.getConstraint('movieRate', 'maxval') + + rate = rateMin + (rateMax - rate) self.__movieTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.__movieUpdate) - self.__movieTimer.Start(self.movieRate) + self.__movieTimer.Start(rate) def __movieRateChanged(self, *a):