Index: strings.txt
===================================================================
--- share/jive/applets/SqueezeboxFab4/strings.txt	(revision 9626)
+++ share/jive/applets/SqueezeboxFab4/strings.txt	(working copy)
@@ -169,19 +169,19 @@
 	SV	Manuell ljusstyrka
 
 BSP_BRIGHTNESS_MIN
-	CS	Minimální jas (Auto)
-	DA	Mindste lysstyrke (automatisk)
-	DE	Minimale Helligkeit (automatisch)
-	EN	Minimal Brightness (Auto)
-	ES	Brillo mínimo (automático)
-	FI	Vähimmäiskirkkaus (autom.)
-	FR	Luminosité minimale (Auto)
-	IT	Luminosità minima (auto)
-	NL	Minimale helderheid (automatisch)
-	NO	Minimal lysstyrke (Automatisk)
-	PL	Minimalna jasność (automatycznie)
-	RU	Минимальная яркость (Авто)
-	SV	Minsta ljusstyrka (auto)
+	CS	Minimální jas
+	DA	Mindste lysstyrke
+	DE	Minimale Helligkeit
+	EN	Minimal Brightness
+	ES	Brillo mínimo
+	FI	Vähimmäiskirkkaus
+	FR	Luminosité minimale
+	IT	Luminosità minima
+	NL	Minimale helderheid
+	NO	Minimal lysstyrke
+	PL	Minimalna jasność
+	RU	Минимальная яркость
+	SV	Minsta ljusstyrka
 
 BSP_BRIGHTNESS_ADJUST_HELP
 	CS	K nastavení jasu použijte kolečko.
@@ -227,4 +227,138 @@
 	PL	Lokalna usługa muzyczna została zatrzymana ze względu na problem.
 	RU	Локальная музыкальная служба остановлена из-за неполадок.
 	SV	Lokal musiktjänst har stoppats på grund av problem.
+	
+BSP_BRIGHTNESS_SCREENSAVER
+	CS	Reduce on screen saver
+	DA	Reduce on screen saver
+	DE	Reduce on screen saver
+	EN	Reduce on screen saver
+	ES	Reduce on screen saver
+	FI	Reduce on screen saver
+	FR	Reduce on screen saver
+	IT	Reduce on screen saver
+	NL	Verminder bij schermbeveiliging
+	NO	Reduce on screen saver
+	PL	Reduce on screen saver
+	RU	Reduce on screen saver
+	SV	Reduce on screen saver
 
+BSP_BRIGHTNESS_DIMWHENPLAYING
+	CS	Při přehrávání
+	DA	Under afspilning
+	DE	Bei Wiedergabe
+	EN	When playing
+	ES	Al reproducir
+	FI	Toistettaessa
+	FR	Pendant la lecture
+	IT	Durante la riproduzione
+	NL	Tijdens afspelen
+	NO	Under avspilling
+	PL	Podczas odtwarzania
+	RU	При воспроизведении
+	SV	Vid uppspelning
+
+BSP_BRIGHTNESS_DIMWHENSTOPPED
+	CS	Při zastavení
+	DA	Når den er stoppet
+	DE	Wenn angehalten
+	EN	When stopped
+	ES	Al detener
+	FI	Keskeytettynä
+	FR	A l'arrêt
+	IT	Quando la riproduzione è interrotta
+	NL	Wanneer gestopt
+	NO	Ved stopp
+	PL	Po zatrzymaniu
+	RU	При остановке
+	SV	I stoppat läge
+
+BSP_BRIGHTNESS_DIMWHENOFF
+	CS	Při vypnutí
+	DA	Når den er slukket
+	DE	Wenn aus
+	EN	When off
+	ES	Al apagar
+	FI	Laitteen ollessa pois päältä
+	FR	En état éteint
+	IT	Se disattivato
+	NL	Wanneer uit
+	NO	Av
+	PL	Po wyłączeniu
+	RU	При выкл.
+	SV	I avstängt läge
+
+BSP_BRIGHTNESS_ACTIVE_MAXIMUM
+	CS	Maximum brightness (active)
+	DA	Maximum brightness (active)
+	DE	Maximum brightness (active)
+	EN	Maximum brightness (active)
+	ES	Maximum brightness (active)
+	FI	Maximum brightness (active)
+	FR	Maximum brightness (active)
+	IT	Maximum brightness (active)
+	NL	Maximale helderheid (actief)
+	NO	Maximum brightness (active)
+	PL	Maximum brightness (active)
+	RU	Maximum brightness (active)
+	SV	Maximum brightness (active)
+	
+BSP_BRIGHTNESS_ACTIVE_MINIMUM
+	CS	Minimum brightness (active)
+	DA	Minimum brightness (active)
+	DE	Minimum brightness (active)
+	EN	Minimum brightness (active)
+	ES	Minimum brightness (active)
+	FI	Minimum brightness (active)
+	FR	Minimum brightness (active)
+	IT	Minimum brightness (active)
+	NL	Minimale helderheid (actief)
+	NO	Minimum brightness (active)
+	PL	Minimum brightness (active)
+	RU	Minimum brightness (active)
+	SV	Minimum brightness (active)
+	
+BSP_BRIGHTNESS_SCREENSAVER_MAXIMUM
+	CS	Maximum brightness (screen saver)
+	DA	Maximum brightness (screen saver)
+	DE	Maximum brightness (screen saver)
+	EN	Maximum brightness (screen saver)
+	ES	Maximum brightness (screen saver)
+	FI	Maximum brightness (screen saver)
+	FR	Maximum brightness (screen saver)
+	IT	Maximum brightness (screen saver)
+	NL	Maximale helderheid (schermbeveiliging)
+	NO	Maximum brightness (screen saver)
+	PL	Maximum brightness (screen saver)
+	RU	Maximum brightness (screen saver)
+	SV	Maximum brightness (screen saver)
+	
+BSP_BRIGHTNESS_SCREENSAVER_MINIMUM
+	CS	Minimum brightness (screen saver)
+	DA	Minimum brightness (screen saver)
+	DE	Minimum brightness (screen saver)
+	EN	Minimum brightness (screen saver)
+	ES	Minimum brightness (screen saver)
+	FI	Minimum brightness (screen saver)
+	FR	Minimum brightness (screen saver)
+	IT	Minimum brightness (screen saver)
+	NL	Minimale helderheid (schermbeveiliging)
+	NO	Minimum brightness (screen saver)
+	PL	Minimum brightness (screen saver)
+	RU	Minimum brightness (screen saver)
+	SV	Minimum brightness (screen saver)
+	
+BSP_BRIGHTNESS_ACTIVE_WHEN_PLAYING
+	CS	Use active brightness when playing
+	DA	Use active brightness when playing
+	DE	Use active brightness when playing
+	EN	Use active brightness when playing
+	ES	Use active brightness when playing
+	FI	Use active brightness when playing
+	FR	Use active brightness when playing
+	IT	Use active brightness when playing
+	NL	Gebruik actieve helderheid bij afspelen
+	NO	Use active brightness when playing
+	PL	Use active brightness when playing
+	RU	Use active brightness when playing
+	SV	Use active brightness when playing
Index: SqueezeboxFab4Applet.lua
===================================================================
--- share/jive/applets/SqueezeboxFab4/SqueezeboxFab4Applet.lua	(revision 9626)
+++ share/jive/applets/SqueezeboxFab4/SqueezeboxFab4Applet.lua	(working copy)
@@ -34,6 +34,7 @@
 local RadioGroup             = require("jive.ui.RadioGroup")
 local RadioButton            = require("jive.ui.RadioButton")
 local Window                 = require("jive.ui.Window")
+local Checkbox               = require("jive.ui.Checkbox")
 
 local debug                  = require("jive.utils.debug")
 
@@ -153,6 +154,9 @@
 		end)
 	brightnessTimer:start()
 	
+	-- reduce brightness on screensaver
+	self:initReduceBrightnessOnScreenSaver()
+	
 	-- status bar updates
 	local updateTask = Task("statusbar", self, _updateTask)
 	updateTask:addTask(UPDATE_WIRELESS)
@@ -237,7 +241,11 @@
 			-- Set to >0 means we're ACTIVE
 			brightOverride = BRIGHTNESS_OVERRIDE
 			-- ACTIVE: Increase brightness
-			self:setBrightness( self:getBrightness())
+			if settings.brightnessControl == "manual" then
+				self:setBrightness( settings.brightness)
+			else
+				self:setBrightness( self:getBrightness())
+			end
 			return EVENT_UNUSED
 		end
 		,true)		
@@ -379,17 +387,34 @@
 	end
 
 	-- Make sure bright Cur stays above minimum
-	if brightMin > brightCur then
-		brightCur = brightMin
-	end
+	--if brightMin > brightCur then
+	--	brightCur = brightMin
+	--end
 
 	-- ACTIVE mode
 	-- As long as the user is touching the screen don't do anything more
 	if brightOverride > 0 then
 		-- count down once per cycle
 		brightOverride = brightOverride - 1
-		return
+		--return
 	end
+	
+	-- Screen saver is not active active OR playing and the always active setting is on
+	-- use active brightness settings
+	if appletManager:callService("isScreensaverActive") == false or (_getMode() == "whenPlaying" and settings.brightnessActiveScreenSaver == true) then
+		if brightCur > settings.brightnessActive then
+			brightCur = settings.brightnessActive
+		elseif brightCur < settings.brightnessMinimumActive then
+			brightCur = settings.brightnessMinimumActive
+		end
+		
+	else
+		if brightCur > settings.brightnessScreenSaver then
+			brightCur = settings.brightnessScreenSaver
+		elseif brightCur < settings.brightnessMinimumScreenSaver then
+			brightCur = settings.brightnessMinimumScreenSaver
+		end
+	end
 
 	-- Set Brightness
 	self:setBrightness( brightCur )
@@ -606,7 +631,7 @@
 --					log:info("Value: " .. value)
 
 					-- Set to automatic when changing minimal brightness
-					settings.brightnessControl = "automatic"
+					--settings.brightnessControl = "automatic"
 					-- Prepare setting to store later
 					settings.brightnessMinimal = value
 					-- Update min value for timer loop
@@ -690,7 +715,7 @@
 	local slider = Slider('brightness_slider', 1, 100, level,
 				function(slider, value, done)
 					
-					settings.brightnessControl = "manual"
+					--settings.brightnessControl = "manual"
 					
 					settings.brightness = value
 
@@ -781,6 +806,7 @@
 			style = "item_choice",
 			check = RadioButton("radio", group, function(event, menuItem)
 						settings.brightnessControl = "automatic"
+						screensaverTimer:stop()
 					end,
 					settings.brightnessControl == "automatic")
 		},	
@@ -789,6 +815,7 @@
 			style = "item_choice",
 			check = RadioButton("radio", group, function(event, menuItem)
 						settings.brightnessControl = "manual"
+						screensaverTimer:start()
 						self:setBrightness(settings.brightness)
 					end,
 					settings.brightnessControl == "manual")
@@ -891,7 +918,553 @@
 	return false
 end
 
+--[[
 
+Reduce brightness when screensaver is active
+Patch by Daniel Vijge (daniel@vijge.net)
+Version 0.4
+
+
+Version history:
+
+version 0.4 (29-02-2012):
+Added automatic brightness control options
+version 0.3 (24-11-2011):
+WhenOff mode did not work
+version 0.2 (31-03-2011):
+Increase brightness when play is started through external controller
+version 0.1 (27-03-2011): 
+Initial release
+
+]]--
+
+function initReduceBrightnessOnScreenSaver(self)
+	-- initial settings
+	settings.dimWhenPlaying = settings.dimWhenPlaying or false
+	settings.dimWhenStopped = settings.dimWhenStopped or true
+	settings.dimWhenOff = settings.dimWhenOff or true
+	settings.brightnessActiveScreenSaver = settings.brightnessActiveScreenSaver or true
+	
+	settings.brightnessActive = settings.brightnessActive or settings.brightness
+	settings.brightnessMinimumActive = settings.brightnessMinimumActive or settings.brightnessMinimal
+	settings.brightnessScreenSaver = settings.brightnessScreenSaver or settings.brightness
+	settings.brightnessMinimumScreenSaver = settings.brightnessMinimumScreenSaver or settings.brightnessMinimal
+	
+	-- this is the timer for manual brightness control
+	screensaverTimer = Timer(5000, 
+		function()
+			if appletManager:callService("isScreensaverActive") then
+				if self:getBrightness() > settings.brightnessMinimal then	
+					if getReduceBrightnessOnScreenSaverSetting() then					
+						self:setBrightness( settings.brightnessMinimal )
+					end
+				end
+			end
+
+			-- this is weird, but we need this to increase the brightness when
+			-- a play command is given using a external interface (controller, web,
+			-- phone, CLI). Those do not register an action event that addListener()
+			-- on line 221 responds to.
+			if _getMode() == "whenPlaying" then
+				if not settings.dimWhenPlaying then
+					if self:getBrightness() == settings.brightnessMinimal then
+						self:setBrightness( settings.brightness )
+					end
+				end
+			end
+		end)
+	
+	-- if brightness control is manual, start the timer
+	if settings.brightnessControl == "manual" then
+		screensaverTimer:start()
+	end
+end
+		
+-- get the state of the squeezebox, taken from ScreenSaver applet
+function _getMode(self)
+	local player = appletManager:callService("getCurrentPlayer")
+	if jiveMain:getSoftPowerState() == "off" and System:hasSoftPower() then
+		return 'whenOff'
+	else
+		if player and player:getPlayMode() == "play" then
+			return 'whenPlaying'
+		end
+	end
+	return 'whenStopped'
+end
+
+-- should the brightness be reduced in the current playing state?
+function getReduceBrightnessOnScreenSaverSetting(self)
+	local mode = _getMode()
+	if mode == "whenPlaying" then
+		return settings.dimWhenPlaying
+	elseif mode == "whenStopped" then
+		return settings.dimWhenStopped
+	elseif mode == "whenOff" then
+		return settings.dimWhenOff
+	else
+		-- this should not happen, but just to be safe...
+		return false
+	end
+end
+
+function menuAutomaticBrightness(self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_AUTOMATIC"), squeezeboxjiveTitleStyle)
+	
+	local settings = self:getSettings()
+	
+	local menu = SimpleMenu( "menu", {
+					{
+						text = self:string("BSP_BRIGHTNESS_ACTIVE_MAXIMUM"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:settingsBrightnessSliderActive(menuItem)
+						end 
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_ACTIVE_MINIMUM"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:settingsBrightnessSliderActiveMinimum(menuItem)
+						end 
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_SCREENSAVER_MAXIMUM"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:settingsBrightnessSliderScreenSaver(menuItem)
+						end 
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_SCREENSAVER_MINIMUM"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:settingsBrightnessSliderScreenSaverMinimum(menuItem)
+						end 
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_ACTIVE_WHEN_PLAYING"),
+						style = 'item_choice',
+						check = Checkbox( "checkbox",
+								function( _, isSelected)
+									if isSelected then
+										settings.brightnessActiveScreenSaver = true
+									else
+										settings.brightnessActiveScreenSaver = false
+									end
+								end,
+								settings.brightnessActiveScreenSaver
+							)
+					},
+					
+				})
+	window:addWidget(menu)
+	window:show()
+end
+
+function menuManualBrightness(self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_MANUAL"), squeezeboxjiveTitleStyle)
+	
+	local menu = SimpleMenu( "menu", {
+					{
+						text = self:string("BSP_BRIGHTNESS_MANUAL"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:settingsBrightnessShow(menuItem)
+						end 
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_MIN"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:settingsMinBrightnessShow(menuItem)
+						end 
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_SCREENSAVER"),
+						sound = "WINDOWSHOW",
+						callback = function(event, menuItem)
+							self:menuReduceBrightness()
+						end 
+					},
+				})
+	window:addWidget(menu)
+	window:show()
+end
+
+function menuReduceBrightness(self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_SCREENSAVER"), squeezeboxjiveTitleStyle)
+	local settings = self:getSettings()
+
+	local menu = SimpleMenu( "menu", {
+					{
+						text = self:string("BSP_BRIGHTNESS_DIMWHENPLAYING"),
+						style = 'item_choice',
+						check = Checkbox( "checkbox",
+								function( _, isSelected)
+									if isSelected then
+										settings.dimWhenPlaying = true
+									else
+										settings.dimWhenPlaying = false
+									end
+								end,
+								settings.dimWhenPlaying
+							)
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_DIMWHENSTOPPED"),
+						style = 'item_choice',
+						check = Checkbox( "checkbox",
+								function( _, isSelected)
+									if isSelected then
+										settings.dimWhenStopped = true
+									else
+										settings.dimWhenStopped = false
+									end
+								end,
+								settings.dimWhenStopped
+							)
+					},
+					{
+						text = self:string("BSP_BRIGHTNESS_DIMWHENOFF"),
+						style = 'item_choice',
+						check = Checkbox( "checkbox",
+								function( _, isSelected)
+									if isSelected then
+										settings.dimWhenOff = true
+									else
+										settings.dimWhenOff = false
+									end
+								end,
+								settings.dimWhenOff
+							)
+					},
+				})
+
+
+	window:addListener(EVENT_WINDOW_POP,
+		function()
+			self:storeSettings()
+		end
+	)
+
+	window:addWidget(menu)
+	window:show()
+
+end
+
+function settingsBrightnessSliderActive (self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_ACTIVE_MAXIMUM"), squeezeboxjiveTitleStyle)
+
+	local settings = self:getSettings()
+	local level = settings.brightnessActive
+
+	local slider = Slider('brightness_slider', 1, 75, level,
+				function(slider, value, done)
+					--log:info("Value: " .. value)
+
+					settings.brightnessActive = value
+					
+					-- Make sure preview min brightness does
+					--  not go below actual brightness
+					if value > brightTarget then
+						self:setBrightness( value)
+					else
+						self:setBrightness( math.floor( brightTarget))
+					end
+					
+					-- done is true for 'go' and 'play' but we do not want to leave
+					if done then
+						window:playSound("BUMP")
+						window:bumpRight()
+					end
+				end)
+	slider.jumpOnDown = false
+	slider.dragThreshold = 5
+
+--	window:addWidget(Textarea("help_text", self:string("BSP_BRIGHTNESS_ADJUST_HELP")))
+	window:addWidget(Group('brightness_group', {
+				div1 = Icon('div1'),
+				div2 = Icon('div2'),
+
+
+				down  = Button(
+					Icon('down'),
+					function()
+						local e = Event:new(EVENT_SCROLL, -1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				up  = Button(
+					Icon('up'),
+					function()
+						local e = Event:new(EVENT_SCROLL, 1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				slider = slider,
+			}))
+
+	window:addActionListener("page_down", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, 1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+	window:addActionListener("page_up", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, -1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+
+
+	window:addListener(EVENT_WINDOW_POP,
+		function()			
+			self:storeSettings()
+		end
+	)
+
+	window:show()
+	return window
+end
+
+function settingsBrightnessSliderActiveMinimum (self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_ACTIVE_MINIMUM"), squeezeboxjiveTitleStyle)
+
+	local settings = self:getSettings()
+	local level = settings.brightnessMinimumActive
+
+	local slider = Slider('brightness_slider', 1, 75, level,
+				function(slider, value, done)
+					--log:info("Value: " .. value)
+
+					settings.brightnessMinimumActive = value
+					
+					-- Make sure preview min brightness does
+					--  not go below actual brightness
+					if value > brightTarget then
+						self:setBrightness( value)
+					else
+						self:setBrightness( math.floor( brightTarget))
+					end
+					
+					-- done is true fsettingsBrightnessSliderScreenSaverMinimumor 'go' and 'play' but we do not want to leave
+					if done then
+						window:playSound("BUMP")
+						window:bumpRight()
+					end
+				end)
+	slider.jumpOnDown = false
+	slider.dragThreshold = 5
+
+--	window:addWidget(Textarea("help_text", self:string("BSP_BRIGHTNESS_ADJUST_HELP")))
+	window:addWidget(Group('brightness_group', {
+				div1 = Icon('div1'),
+				div2 = Icon('div2'),
+
+
+				down  = Button(
+					Icon('down'),
+					function()
+						local e = Event:new(EVENT_SCROLL, -1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				up  = Button(
+					Icon('up'),
+					function()
+						local e = Event:new(EVENT_SCROLL, 1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				slider = slider,
+			}))
+
+	window:addActionListener("page_down", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, 1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+	window:addActionListener("page_up", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, -1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+
+
+	window:addListener(EVENT_WINDOW_POP,
+		function()			
+			self:storeSettings()
+		end
+	)
+
+	window:show()
+	return window
+end
+
+function settingsBrightnessSliderScreenSaver (self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_SCREENSAVER_MAXIMUM"), squeezeboxjiveTitleStyle)
+
+	local settings = self:getSettings()
+	local level = settings.brightnessScreenSaver
+
+	local slider = Slider('brightness_slider', 1, 75, level,
+				function(slider, value, done)
+					--log:info("Value: " .. value)
+
+					settings.brightnessScreenSaver = value
+					
+					-- Make sure preview min brightness does
+					--  not go below actual brightness
+					if value > brightTarget then
+						self:setBrightness( value)
+					else
+						self:setBrightness( math.floor( brightTarget))
+					end
+					
+					-- done is true for 'go' and 'play' but we do not want to leave
+					if done then
+						window:playSound("BUMP")
+						window:bumpRight()
+					end
+				end)
+	slider.jumpOnDown = false
+	slider.dragThreshold = 5
+
+--	window:addWidget(Textarea("help_text", self:string("BSP_BRIGHTNESS_ADJUST_HELP")))
+	window:addWidget(Group('brightness_group', {
+				div1 = Icon('div1'),
+				div2 = Icon('div2'),
+
+
+				down  = Button(
+					Icon('down'),
+					function()
+						local e = Event:new(EVENT_SCROLL, -1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				up  = Button(
+					Icon('up'),
+					function()
+						local e = Event:new(EVENT_SCROLL, 1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				slider = slider,
+			}))
+
+	window:addActionListener("page_down", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, 1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+	window:addActionListener("page_up", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, -1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+
+
+	window:addListener(EVENT_WINDOW_POP,
+		function()			
+			self:storeSettings()
+		end
+	)
+
+	window:show()
+	return window
+end
+
+function settingsBrightnessSliderScreenSaverMinimum (self, menuItem)
+	local window = Window("text_list", self:string("BSP_BRIGHTNESS_SCREENSAVER_MINIMUM"), squeezeboxjiveTitleStyle)
+
+	local settings = self:getSettings()
+	local level = settings.brightnessMinimumScreenSaver
+
+	local slider = Slider('brightness_slider', 1, 75, level,
+				function(slider, value, done)
+					--log:info("Value: " .. value)
+
+					settings.brightnessMinimumScreenSaver = value
+					
+					-- Make sure preview min brightness does
+					--  not go below actual brightness
+					if value > brightTarget then
+						self:setBrightness( value)
+					else
+						self:setBrightness( math.floor( brightTarget))
+					end
+					
+					-- done is true for 'go' and 'play' but we do not want to leave
+					if done then
+						window:playSound("BUMP")
+						window:bumpRight()
+					end
+				end)
+	slider.jumpOnDown = false
+	slider.dragThreshold = 5
+
+--	window:addWidget(Textarea("help_text", self:string("BSP_BRIGHTNESS_ADJUST_HELP")))
+	window:addWidget(Group('brightness_group', {
+				div1 = Icon('div1'),
+				div2 = Icon('div2'),
+
+
+				down  = Button(
+					Icon('down'),
+					function()
+						local e = Event:new(EVENT_SCROLL, -1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				up  = Button(
+					Icon('up'),
+					function()
+						local e = Event:new(EVENT_SCROLL, 1)
+						Framework:dispatchEvent(slider, e)
+						return EVENT_CONSUME
+					end
+				),
+				slider = slider,
+			}))
+
+	window:addActionListener("page_down", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, 1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+	window:addActionListener("page_up", self,
+				function()
+					local e = Event:new(EVENT_SCROLL, -1)
+					Framework:dispatchEvent(self.volSlider, e)
+					return EVENT_CONSUME
+				end)
+
+
+	window:addListener(EVENT_WINDOW_POP,
+		function()			
+			self:storeSettings()
+		end
+	)
+
+	window:show()
+	return window
+end
+
 --[[
 
 =head1 LICENSE
Index: SqueezeboxFab4Meta.lua
===================================================================
--- share/jive/applets/SqueezeboxFab4/SqueezeboxFab4Meta.lua	(revision 9626)
+++ share/jive/applets/SqueezeboxFab4/SqueezeboxFab4Meta.lua	(working copy)
@@ -82,10 +82,10 @@
 	jiveMain:setDefaultSkin("WQVGAsmallSkin")
 
 	-- settings
-	jiveMain:addItem(meta:menuItem('brightnessSetting', 'settingsBrightness', "BSP_BRIGHTNESS_MANUAL", function(applet, ...) applet:settingsBrightnessShow(...) end))
-	jiveMain:addItem(meta:menuItem('minBrightnessSetting', 'settingsBrightness', "BSP_BRIGHTNESS_MIN", function(applet, ...) applet:settingsMinBrightnessShow(...) end))
 	jiveMain:addItem(meta:menuItem('brightnessSettingControl', 'settingsBrightness', "BSP_BRIGHTNESS_CTRL", function(applet, ...) applet:settingsBrightnessControlShow(...) end))
-
+	jiveMain:addItem(meta:menuItem('menuAutomaticBrightness', 'settingsBrightness', "BSP_BRIGHTNESS_AUTOMATIC", function(applet, ...) applet:menuAutomaticBrightness(...) end))
+	jiveMain:addItem(meta:menuItem('menuManualBrightness', 'settingsBrightness', "BSP_BRIGHTNESS_MANUAL", function(applet, ...) applet:menuManualBrightness(...) end))
+	
 	-- services
 	meta:registerService("getBrightness")
 	meta:registerService("setBrightness")
