xref: /haiku/src/apps/mediaplayer/settings/SettingsWindow.cpp (revision e65a6eb2e02c3b50ee594733f16b313562eaaf9c)
14d3ebaccSStephan Aßmus /*
2c5f8afb9SStephan Aßmus  * Copyright 2008-2010, Haiku, Inc. All rights reserved.
34d3ebaccSStephan Aßmus  * Distributed under the terms of the MIT License.
44d3ebaccSStephan Aßmus  *
54d3ebaccSStephan Aßmus  * Authors:
64d3ebaccSStephan Aßmus  *		Fredrik Modéen <fredrik@modeen.se>
7c5f8afb9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
84d3ebaccSStephan Aßmus  */
94d3ebaccSStephan Aßmus 
10*e65a6eb2SStephan Aßmus 
114d3ebaccSStephan Aßmus #include "SettingsWindow.h"
124d3ebaccSStephan Aßmus 
134d3ebaccSStephan Aßmus #include <stdio.h>
144d3ebaccSStephan Aßmus 
154d3ebaccSStephan Aßmus #include <Box.h>
164d3ebaccSStephan Aßmus #include <Button.h>
17b6d5916aSStephan Aßmus #include <CheckBox.h>
1826e9cdb7SStephan Aßmus #include <GridLayoutBuilder.h>
1926e9cdb7SStephan Aßmus #include <GroupLayoutBuilder.h>
20*e65a6eb2SStephan Aßmus #include <OptionPopUp.h>
2126e9cdb7SStephan Aßmus #include <SpaceLayoutItem.h>
22b6d5916aSStephan Aßmus #include <String.h>
23b6d5916aSStephan Aßmus #include <StringView.h>
24b6d5916aSStephan Aßmus #include <RadioButton.h>
25b6d5916aSStephan Aßmus #include <View.h>
2626e9cdb7SStephan Aßmus 
27*e65a6eb2SStephan Aßmus 
284d3ebaccSStephan Aßmus enum {
29*e65a6eb2SStephan Aßmus 	M_SETTINGS_CHANGED = 0x3000,
3026e9cdb7SStephan Aßmus 
314d3ebaccSStephan Aßmus 	M_SETTINGS_SAVE,
324d3ebaccSStephan Aßmus 	M_SETTINGS_CANCEL,
3326e9cdb7SStephan Aßmus 	M_SETTINGS_REVERT
344d3ebaccSStephan Aßmus };
354d3ebaccSStephan Aßmus 
36*e65a6eb2SStephan Aßmus 
374d3ebaccSStephan Aßmus #define SPACE 10
384d3ebaccSStephan Aßmus #define SPACEING 7
394d3ebaccSStephan Aßmus #define BUTTONHEIGHT 20
404d3ebaccSStephan Aßmus 
41*e65a6eb2SStephan Aßmus 
424d3ebaccSStephan Aßmus SettingsWindow::SettingsWindow(BRect frame)
43*e65a6eb2SStephan Aßmus  	:
44*e65a6eb2SStephan Aßmus  	BWindow(frame, "MediaPlayer settings", B_FLOATING_WINDOW_LOOK,
454ddc254cSStephan Aßmus  		B_FLOATING_APP_WINDOW_FEEL,
4626e9cdb7SStephan Aßmus  		B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE
4726e9cdb7SStephan Aßmus  			| B_AUTO_UPDATE_SIZE_LIMITS)
484d3ebaccSStephan Aßmus {
4926e9cdb7SStephan Aßmus 	BBox* settingsBox = new BBox(B_PLAIN_BORDER, NULL);
5026e9cdb7SStephan Aßmus 	BGroupLayout* settingsLayout = new BGroupLayout(B_VERTICAL, 5);
5126e9cdb7SStephan Aßmus 	settingsBox->SetLayout(settingsLayout);
5226e9cdb7SStephan Aßmus 	BBox* buttonBox = new BBox(B_PLAIN_BORDER, NULL);
5326e9cdb7SStephan Aßmus 	BGroupLayout* buttonLayout = new BGroupLayout(B_HORIZONTAL, 5);
5426e9cdb7SStephan Aßmus 	buttonBox->SetLayout(buttonLayout);
5526e9cdb7SStephan Aßmus 
5626e9cdb7SStephan Aßmus 	BStringView* playModeLabel = new BStringView("stringViewPlayMode",
5726e9cdb7SStephan Aßmus 		"Play mode");
5826e9cdb7SStephan Aßmus 	BStringView* viewOptionsLabel = new BStringView("stringViewViewOpions",
5926e9cdb7SStephan Aßmus 		"View options");
6026e9cdb7SStephan Aßmus 	BStringView* bgMoviesModeLabel = new BStringView("stringViewPlayBackg",
614ddc254cSStephan Aßmus 		"Play background clips at");
6226e9cdb7SStephan Aßmus 	BAlignment alignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER);
6326e9cdb7SStephan Aßmus 	playModeLabel->SetExplicitAlignment(alignment);
6426e9cdb7SStephan Aßmus 	playModeLabel->SetFont(be_bold_font);
6526e9cdb7SStephan Aßmus 	viewOptionsLabel->SetExplicitAlignment(alignment);
6626e9cdb7SStephan Aßmus 	viewOptionsLabel->SetFont(be_bold_font);
6726e9cdb7SStephan Aßmus 	bgMoviesModeLabel->SetExplicitAlignment(alignment);
6826e9cdb7SStephan Aßmus 	bgMoviesModeLabel->SetFont(be_bold_font);
6926e9cdb7SStephan Aßmus 
7026e9cdb7SStephan Aßmus 	fAutostartCB = new BCheckBox("chkboxAutostart",
71*e65a6eb2SStephan Aßmus 		"Automatically start playing", new BMessage(M_SETTINGS_CHANGED));
7226e9cdb7SStephan Aßmus 
7326e9cdb7SStephan Aßmus 	fCloseWindowMoviesCB = new BCheckBox("chkBoxCloseWindowMovies",
7426e9cdb7SStephan Aßmus 		"Close window when done playing movies",
75*e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
7626e9cdb7SStephan Aßmus 	fCloseWindowSoundsCB = new BCheckBox("chkBoxCloseWindowSounds",
7726e9cdb7SStephan Aßmus 		"Close window when done playing sounds",
78*e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
7926e9cdb7SStephan Aßmus 
8026e9cdb7SStephan Aßmus 	fLoopMoviesCB = new BCheckBox("chkBoxLoopMovie",
81*e65a6eb2SStephan Aßmus 		"Loop movies by default", new BMessage(M_SETTINGS_CHANGED));
8226e9cdb7SStephan Aßmus 	fLoopSoundsCB = new BCheckBox("chkBoxLoopSounds",
83*e65a6eb2SStephan Aßmus 		"Loop sounds by default", new BMessage(M_SETTINGS_CHANGED));
8426e9cdb7SStephan Aßmus 
8526e9cdb7SStephan Aßmus 	fUseOverlaysCB = new BCheckBox("chkBoxUseOverlays",
8626e9cdb7SStephan Aßmus 		"Use hardware video overlays if available",
87*e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
8826e9cdb7SStephan Aßmus 	fScaleBilinearCB = new BCheckBox("chkBoxScaleBilinear",
8926e9cdb7SStephan Aßmus 		"Scale movies smoothly (non-overlay mode)",
90*e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
9126e9cdb7SStephan Aßmus 
92341ea11eSStephan Aßmus 	fScaleFullscreenControlsCB = new BCheckBox("chkBoxScaleControls",
93341ea11eSStephan Aßmus 		"Scale controls in full-screen mode",
94*e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
95*e65a6eb2SStephan Aßmus 
96*e65a6eb2SStephan Aßmus 	fSubtitleSizeOP = new BOptionPopUp("subtitleSize",
97*e65a6eb2SStephan Aßmus 		"Subtitle size", new BMessage(M_SETTINGS_CHANGED));
98*e65a6eb2SStephan Aßmus 	fSubtitleSizeOP->AddOption("Small", mpSettings::SUBTITLE_SIZE_SMALL);
99*e65a6eb2SStephan Aßmus 	fSubtitleSizeOP->AddOption("Medium", mpSettings::SUBTITLE_SIZE_MEDIUM);
100*e65a6eb2SStephan Aßmus 	fSubtitleSizeOP->AddOption("Large", mpSettings::SUBTITLE_SIZE_LARGE);
101*e65a6eb2SStephan Aßmus 
102*e65a6eb2SStephan Aßmus 	fSubtitlePlacementOP = new BOptionPopUp("subtitlePlacement",
103*e65a6eb2SStephan Aßmus 		"Subtitle placement", new BMessage(M_SETTINGS_CHANGED));
104*e65a6eb2SStephan Aßmus 	fSubtitlePlacementOP->AddOption("Bottom of video",
105*e65a6eb2SStephan Aßmus 		mpSettings::SUBTITLE_PLACEMENT_BOTTOM_OF_VIDEO);
106*e65a6eb2SStephan Aßmus 	fSubtitlePlacementOP->AddOption("Bottom of screen",
107*e65a6eb2SStephan Aßmus 		mpSettings::SUBTITLE_PLACEMENT_BOTTOM_OF_SCREEN);
108341ea11eSStephan Aßmus 
10926e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB = new BRadioButton("rdbtnfullvolume",
110*e65a6eb2SStephan Aßmus 		"Full volume", new BMessage(M_SETTINGS_CHANGED));
11126e9cdb7SStephan Aßmus 
11226e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB = new BRadioButton("rdbtnhalfvolume",
113*e65a6eb2SStephan Aßmus 		"Low volume", new BMessage(M_SETTINGS_CHANGED));
11426e9cdb7SStephan Aßmus 
11526e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB = new BRadioButton("rdbtnfullvolume",
116*e65a6eb2SStephan Aßmus 		"Muted", new BMessage(M_SETTINGS_CHANGED));
11726e9cdb7SStephan Aßmus 
118613ecaf5SStephan Aßmus 	fRevertB = new BButton("revert", "Revert",
11926e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_REVERT));
12026e9cdb7SStephan Aßmus 
12126e9cdb7SStephan Aßmus 	BButton* cancelButton = new BButton("cancel", "Cancel",
12226e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_CANCEL));
12326e9cdb7SStephan Aßmus 
1247974d3dcSStephan Aßmus 	BButton* okButton = new BButton("ok", "OK",
12526e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_SAVE));
12626e9cdb7SStephan Aßmus 	okButton->MakeDefault(true);
12726e9cdb7SStephan Aßmus 
12826e9cdb7SStephan Aßmus 
12926e9cdb7SStephan Aßmus 	// Build the layout
13026e9cdb7SStephan Aßmus 	SetLayout(new BGroupLayout(B_HORIZONTAL));
13126e9cdb7SStephan Aßmus 
13226e9cdb7SStephan Aßmus 	AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
13326e9cdb7SStephan Aßmus 		.Add(BGroupLayoutBuilder(settingsLayout)
13426e9cdb7SStephan Aßmus 			.Add(playModeLabel)
13526e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
13626e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
13726e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
13826e9cdb7SStephan Aßmus 					.Add(fAutostartCB)
13926e9cdb7SStephan Aßmus 					.Add(BGridLayoutBuilder(5, 0)
14026e9cdb7SStephan Aßmus 						.Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 0, 0)
14126e9cdb7SStephan Aßmus 						.Add(fCloseWindowMoviesCB, 1, 0)
14226e9cdb7SStephan Aßmus 						.Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 0, 1)
14326e9cdb7SStephan Aßmus 						.Add(fCloseWindowSoundsCB, 1, 1)
14426e9cdb7SStephan Aßmus 					)
14526e9cdb7SStephan Aßmus 					.Add(fLoopMoviesCB)
14626e9cdb7SStephan Aßmus 					.Add(fLoopSoundsCB)
14726e9cdb7SStephan Aßmus 				)
14826e9cdb7SStephan Aßmus 			)
14926e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
15026e9cdb7SStephan Aßmus 
15126e9cdb7SStephan Aßmus 			.Add(viewOptionsLabel)
15226e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
15326e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
15426e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
15526e9cdb7SStephan Aßmus 					.Add(fUseOverlaysCB)
15626e9cdb7SStephan Aßmus 					.Add(fScaleBilinearCB)
157341ea11eSStephan Aßmus 					.Add(fScaleFullscreenControlsCB)
158*e65a6eb2SStephan Aßmus 					.Add(fSubtitleSizeOP)
159*e65a6eb2SStephan Aßmus 					.Add(fSubtitlePlacementOP)
16026e9cdb7SStephan Aßmus 				)
16126e9cdb7SStephan Aßmus 			)
16226e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
16326e9cdb7SStephan Aßmus 
16426e9cdb7SStephan Aßmus 			.Add(bgMoviesModeLabel)
16526e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
16626e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
16726e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
16826e9cdb7SStephan Aßmus 					.Add(fFullVolumeBGMoviesRB)
16926e9cdb7SStephan Aßmus 					.Add(fHalfVolumeBGMoviesRB)
17026e9cdb7SStephan Aßmus 					.Add(fMutedVolumeBGMoviesRB)
17126e9cdb7SStephan Aßmus 				)
17226e9cdb7SStephan Aßmus 			)
17326e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
17426e9cdb7SStephan Aßmus 
17526e9cdb7SStephan Aßmus 			.SetInsets(5, 5, 15, 5)
17626e9cdb7SStephan Aßmus 		)
17726e9cdb7SStephan Aßmus 		.Add(BGroupLayoutBuilder(buttonLayout)
178613ecaf5SStephan Aßmus 			.Add(fRevertB)
17926e9cdb7SStephan Aßmus 			.AddGlue()
18026e9cdb7SStephan Aßmus 			.Add(cancelButton)
18126e9cdb7SStephan Aßmus 			.Add(okButton)
18226e9cdb7SStephan Aßmus 			.SetInsets(5, 5, 5, 5)
18326e9cdb7SStephan Aßmus 		)
18426e9cdb7SStephan Aßmus 	);
1854d3ebaccSStephan Aßmus }
1864d3ebaccSStephan Aßmus 
1874d3ebaccSStephan Aßmus 
1884d3ebaccSStephan Aßmus SettingsWindow::~SettingsWindow()
1894d3ebaccSStephan Aßmus {
1904d3ebaccSStephan Aßmus }
1914d3ebaccSStephan Aßmus 
1924d3ebaccSStephan Aßmus 
1934d3ebaccSStephan Aßmus void
19426e9cdb7SStephan Aßmus SettingsWindow::Show()
1954d3ebaccSStephan Aßmus {
196ac6b0fc9SStephan Aßmus 	// The Settings that we want to be able to revert to is the state at which
197ac6b0fc9SStephan Aßmus 	// the SettingsWindow was shown. So the current settings are stored in
198ac6b0fc9SStephan Aßmus 	// fLastSettings.
19926e9cdb7SStephan Aßmus 	Settings::Default()->LoadSettings(fLastSettings);
20026e9cdb7SStephan Aßmus 	fSettings = fLastSettings;
20126e9cdb7SStephan Aßmus 	AdoptSettings();
20226e9cdb7SStephan Aßmus 
20326e9cdb7SStephan Aßmus 	BWindow::Show();
2044d3ebaccSStephan Aßmus }
2054d3ebaccSStephan Aßmus 
2064d3ebaccSStephan Aßmus 
2074d3ebaccSStephan Aßmus bool
2084d3ebaccSStephan Aßmus SettingsWindow::QuitRequested()
2094d3ebaccSStephan Aßmus {
2104d3ebaccSStephan Aßmus 	Hide();
2114d3ebaccSStephan Aßmus 	return false;
2124d3ebaccSStephan Aßmus }
2134d3ebaccSStephan Aßmus 
2144d3ebaccSStephan Aßmus 
2154d3ebaccSStephan Aßmus void
2164d3ebaccSStephan Aßmus SettingsWindow::MessageReceived(BMessage* message)
2174d3ebaccSStephan Aßmus {
2184d3ebaccSStephan Aßmus 	switch (message->what) {
219*e65a6eb2SStephan Aßmus 		case M_SETTINGS_CHANGED:
22026e9cdb7SStephan Aßmus 			ApplySettings();
22126e9cdb7SStephan Aßmus 			break;
22226e9cdb7SStephan Aßmus 
2234d3ebaccSStephan Aßmus 		case B_KEY_DOWN:
2244d3ebaccSStephan Aßmus 			int32 index;
22526e9cdb7SStephan Aßmus 			if (message->FindInt32("key", &index) == B_OK && index == 1)
2264d3ebaccSStephan Aßmus 				PostMessage(B_QUIT_REQUESTED);
2274d3ebaccSStephan Aßmus 			break;
22826e9cdb7SStephan Aßmus 
22926e9cdb7SStephan Aßmus 		case M_SETTINGS_REVERT:
23026e9cdb7SStephan Aßmus 			Revert();
23126e9cdb7SStephan Aßmus 			break;
23226e9cdb7SStephan Aßmus 
2334d3ebaccSStephan Aßmus 		case M_SETTINGS_CANCEL:
23426e9cdb7SStephan Aßmus 			Revert();
23526e9cdb7SStephan Aßmus 			// fall through
23626e9cdb7SStephan Aßmus 		case M_SETTINGS_SAVE:
2374d3ebaccSStephan Aßmus 			PostMessage(B_QUIT_REQUESTED);
2384d3ebaccSStephan Aßmus 			break;
23926e9cdb7SStephan Aßmus 
2404d3ebaccSStephan Aßmus 		default:
2414d3ebaccSStephan Aßmus 			BWindow::MessageReceived(message);
2424d3ebaccSStephan Aßmus 			break;
2434d3ebaccSStephan Aßmus 	}
2444d3ebaccSStephan Aßmus }
24526e9cdb7SStephan Aßmus 
24626e9cdb7SStephan Aßmus 
24726e9cdb7SStephan Aßmus void
24826e9cdb7SStephan Aßmus SettingsWindow::AdoptSettings()
24926e9cdb7SStephan Aßmus {
25026e9cdb7SStephan Aßmus 	fAutostartCB->SetValue(fSettings.autostart);
25126e9cdb7SStephan Aßmus 	fCloseWindowMoviesCB->SetValue(fSettings.closeWhenDonePlayingMovie);
25226e9cdb7SStephan Aßmus 	fCloseWindowSoundsCB->SetValue(fSettings.closeWhenDonePlayingSound);
25326e9cdb7SStephan Aßmus 	fLoopMoviesCB->SetValue(fSettings.loopMovie);
25426e9cdb7SStephan Aßmus 	fLoopSoundsCB->SetValue(fSettings.loopSound);
25526e9cdb7SStephan Aßmus 
25626e9cdb7SStephan Aßmus 	fUseOverlaysCB->SetValue(fSettings.useOverlays);
25726e9cdb7SStephan Aßmus 	fScaleBilinearCB->SetValue(fSettings.scaleBilinear);
258341ea11eSStephan Aßmus 	fScaleFullscreenControlsCB->SetValue(fSettings.scaleFullscreenControls);
25926e9cdb7SStephan Aßmus 
260*e65a6eb2SStephan Aßmus 	fSubtitleSizeOP->SetValue(fSettings.subtitleSize);
261*e65a6eb2SStephan Aßmus 	fSubtitlePlacementOP->SetValue(fSettings.subtitlePlacement);
262*e65a6eb2SStephan Aßmus 
26326e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
26426e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_FULL_VOLUME);
26526e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
26626e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_HALF_VLUME);
26726e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
26826e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_MUTED);
269613ecaf5SStephan Aßmus 
270613ecaf5SStephan Aßmus 	fRevertB->SetEnabled(IsRevertable());
27126e9cdb7SStephan Aßmus }
27226e9cdb7SStephan Aßmus 
27326e9cdb7SStephan Aßmus 
27426e9cdb7SStephan Aßmus void
27526e9cdb7SStephan Aßmus SettingsWindow::ApplySettings()
27626e9cdb7SStephan Aßmus {
27726e9cdb7SStephan Aßmus 	fSettings.autostart = fAutostartCB->Value() == B_CONTROL_ON;
27826e9cdb7SStephan Aßmus 	fSettings.closeWhenDonePlayingMovie
27926e9cdb7SStephan Aßmus 		= fCloseWindowMoviesCB->Value() == B_CONTROL_ON;
28026e9cdb7SStephan Aßmus 	fSettings.closeWhenDonePlayingSound
28126e9cdb7SStephan Aßmus 		= fCloseWindowSoundsCB->Value() == B_CONTROL_ON;
28226e9cdb7SStephan Aßmus 	fSettings.loopMovie = fLoopMoviesCB->Value() == B_CONTROL_ON;
28326e9cdb7SStephan Aßmus 	fSettings.loopSound = fLoopSoundsCB->Value() == B_CONTROL_ON;
28426e9cdb7SStephan Aßmus 
28526e9cdb7SStephan Aßmus 	fSettings.useOverlays = fUseOverlaysCB->Value() == B_CONTROL_ON;
28626e9cdb7SStephan Aßmus 	fSettings.scaleBilinear = fScaleBilinearCB->Value() == B_CONTROL_ON;
287341ea11eSStephan Aßmus 	fSettings.scaleFullscreenControls
288341ea11eSStephan Aßmus 		= fScaleFullscreenControlsCB->Value() == B_CONTROL_ON;
28926e9cdb7SStephan Aßmus 
290*e65a6eb2SStephan Aßmus 	fSettings.subtitleSize = fSubtitleSizeOP->Value();
291*e65a6eb2SStephan Aßmus 	fSettings.subtitlePlacement = fSubtitlePlacementOP->Value();
292*e65a6eb2SStephan Aßmus 
29326e9cdb7SStephan Aßmus 	if (fFullVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
29426e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
29526e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_FULL_VOLUME;
29626e9cdb7SStephan Aßmus 	} else if (fHalfVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
29726e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
29826e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_HALF_VLUME;
29926e9cdb7SStephan Aßmus 	} else if (fMutedVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
30026e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
30126e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_MUTED;
30226e9cdb7SStephan Aßmus 	}
30326e9cdb7SStephan Aßmus 
30426e9cdb7SStephan Aßmus 	Settings::Default()->SaveSettings(fSettings);
305613ecaf5SStephan Aßmus 
306613ecaf5SStephan Aßmus 	fRevertB->SetEnabled(IsRevertable());
30726e9cdb7SStephan Aßmus }
30826e9cdb7SStephan Aßmus 
30926e9cdb7SStephan Aßmus 
31026e9cdb7SStephan Aßmus void
31126e9cdb7SStephan Aßmus SettingsWindow::Revert()
31226e9cdb7SStephan Aßmus {
31326e9cdb7SStephan Aßmus 	fSettings = fLastSettings;
31426e9cdb7SStephan Aßmus 	AdoptSettings();
31526e9cdb7SStephan Aßmus 	Settings::Default()->SaveSettings(fSettings);
31626e9cdb7SStephan Aßmus }
31726e9cdb7SStephan Aßmus 
318613ecaf5SStephan Aßmus 
319613ecaf5SStephan Aßmus bool
320613ecaf5SStephan Aßmus SettingsWindow::IsRevertable() const
321613ecaf5SStephan Aßmus {
322613ecaf5SStephan Aßmus 	return fSettings != fLastSettings;
323613ecaf5SStephan Aßmus }
324613ecaf5SStephan Aßmus 
325