xref: /haiku/src/apps/mediaplayer/settings/SettingsWindow.cpp (revision a178983df66aad5957fbc82fb596c74fa4d02e45)
14d3ebaccSStephan Aßmus /*
2*a178983dSAxel Dörfler  * Copyright 2008-2011, 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 
10e65a6eb2SStephan 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>
17238df8fbSAdrien Destugues #include <Catalog.h>
18b6d5916aSStephan Aßmus #include <CheckBox.h>
1926e9cdb7SStephan Aßmus #include <GridLayoutBuilder.h>
2026e9cdb7SStephan Aßmus #include <GroupLayoutBuilder.h>
21238df8fbSAdrien Destugues #include <Locale.h>
22e65a6eb2SStephan Aßmus #include <OptionPopUp.h>
2326e9cdb7SStephan Aßmus #include <SpaceLayoutItem.h>
24b6d5916aSStephan Aßmus #include <String.h>
25b6d5916aSStephan Aßmus #include <StringView.h>
26b6d5916aSStephan Aßmus #include <RadioButton.h>
27b6d5916aSStephan Aßmus #include <View.h>
2826e9cdb7SStephan Aßmus 
29e65a6eb2SStephan Aßmus 
30238df8fbSAdrien Destugues #undef B_TRANSLATE_CONTEXT
31238df8fbSAdrien Destugues #define B_TRANSLATE_CONTEXT "MediaPlayer-SettingsWindow"
32238df8fbSAdrien Destugues 
33238df8fbSAdrien Destugues 
344d3ebaccSStephan Aßmus enum {
35e65a6eb2SStephan Aßmus 	M_SETTINGS_CHANGED = 0x3000,
3626e9cdb7SStephan Aßmus 
374d3ebaccSStephan Aßmus 	M_SETTINGS_SAVE,
384d3ebaccSStephan Aßmus 	M_SETTINGS_CANCEL,
3926e9cdb7SStephan Aßmus 	M_SETTINGS_REVERT
404d3ebaccSStephan Aßmus };
414d3ebaccSStephan Aßmus 
42e65a6eb2SStephan Aßmus 
434d3ebaccSStephan Aßmus #define SPACE 10
444d3ebaccSStephan Aßmus #define SPACEING 7
454d3ebaccSStephan Aßmus #define BUTTONHEIGHT 20
464d3ebaccSStephan Aßmus 
47e65a6eb2SStephan Aßmus 
484d3ebaccSStephan Aßmus SettingsWindow::SettingsWindow(BRect frame)
49e65a6eb2SStephan Aßmus  	:
50238df8fbSAdrien Destugues  	BWindow(frame, B_TRANSLATE("MediaPlayer settings"), B_FLOATING_WINDOW_LOOK,
514ddc254cSStephan Aßmus  		B_FLOATING_APP_WINDOW_FEEL,
5226e9cdb7SStephan Aßmus  		B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE
5326e9cdb7SStephan Aßmus  			| B_AUTO_UPDATE_SIZE_LIMITS)
544d3ebaccSStephan Aßmus {
5526e9cdb7SStephan Aßmus 	BBox* settingsBox = new BBox(B_PLAIN_BORDER, NULL);
5626e9cdb7SStephan Aßmus 	BGroupLayout* settingsLayout = new BGroupLayout(B_VERTICAL, 5);
5726e9cdb7SStephan Aßmus 	settingsBox->SetLayout(settingsLayout);
5826e9cdb7SStephan Aßmus 	BBox* buttonBox = new BBox(B_PLAIN_BORDER, NULL);
5926e9cdb7SStephan Aßmus 	BGroupLayout* buttonLayout = new BGroupLayout(B_HORIZONTAL, 5);
6026e9cdb7SStephan Aßmus 	buttonBox->SetLayout(buttonLayout);
6126e9cdb7SStephan Aßmus 
6226e9cdb7SStephan Aßmus 	BStringView* playModeLabel = new BStringView("stringViewPlayMode",
63238df8fbSAdrien Destugues 		B_TRANSLATE("Play mode"));
6426e9cdb7SStephan Aßmus 	BStringView* viewOptionsLabel = new BStringView("stringViewViewOpions",
65238df8fbSAdrien Destugues 		B_TRANSLATE("View options"));
6626e9cdb7SStephan Aßmus 	BStringView* bgMoviesModeLabel = new BStringView("stringViewPlayBackg",
6761698f2dSPhilippe Houdoin 		B_TRANSLATE("Volume of background clips"));
6826e9cdb7SStephan Aßmus 	BAlignment alignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER);
6926e9cdb7SStephan Aßmus 	playModeLabel->SetExplicitAlignment(alignment);
7026e9cdb7SStephan Aßmus 	playModeLabel->SetFont(be_bold_font);
7126e9cdb7SStephan Aßmus 	viewOptionsLabel->SetExplicitAlignment(alignment);
7226e9cdb7SStephan Aßmus 	viewOptionsLabel->SetFont(be_bold_font);
7326e9cdb7SStephan Aßmus 	bgMoviesModeLabel->SetExplicitAlignment(alignment);
7426e9cdb7SStephan Aßmus 	bgMoviesModeLabel->SetFont(be_bold_font);
7526e9cdb7SStephan Aßmus 
7626e9cdb7SStephan Aßmus 	fAutostartCB = new BCheckBox("chkboxAutostart",
77238df8fbSAdrien Destugues 		B_TRANSLATE("Automatically start playing"),
78238df8fbSAdrien Destugues 		new BMessage(M_SETTINGS_CHANGED));
7926e9cdb7SStephan Aßmus 
8026e9cdb7SStephan Aßmus 	fCloseWindowMoviesCB = new BCheckBox("chkBoxCloseWindowMovies",
81329daa44SJoachim Seemer 		B_TRANSLATE("Close window after playing video"),
82e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
8326e9cdb7SStephan Aßmus 	fCloseWindowSoundsCB = new BCheckBox("chkBoxCloseWindowSounds",
84329daa44SJoachim Seemer 		B_TRANSLATE("Close window after playing audio"),
85e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
8626e9cdb7SStephan Aßmus 
8726e9cdb7SStephan Aßmus 	fLoopMoviesCB = new BCheckBox("chkBoxLoopMovie",
88329daa44SJoachim Seemer 		B_TRANSLATE("Loop video"),
89238df8fbSAdrien Destugues 		new BMessage(M_SETTINGS_CHANGED));
9026e9cdb7SStephan Aßmus 	fLoopSoundsCB = new BCheckBox("chkBoxLoopSounds",
91329daa44SJoachim Seemer 		B_TRANSLATE("Loop audio"),
92238df8fbSAdrien Destugues 		new BMessage(M_SETTINGS_CHANGED));
9326e9cdb7SStephan Aßmus 
9426e9cdb7SStephan Aßmus 	fUseOverlaysCB = new BCheckBox("chkBoxUseOverlays",
95238df8fbSAdrien Destugues 		B_TRANSLATE("Use hardware video overlays if available"),
96e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
9726e9cdb7SStephan Aßmus 	fScaleBilinearCB = new BCheckBox("chkBoxScaleBilinear",
98238df8fbSAdrien Destugues 		B_TRANSLATE("Scale movies smoothly (non-overlay mode)"),
99e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
10026e9cdb7SStephan Aßmus 
101341ea11eSStephan Aßmus 	fScaleFullscreenControlsCB = new BCheckBox("chkBoxScaleControls",
102329daa44SJoachim Seemer 		B_TRANSLATE("Scale controls in full screen mode"),
103e65a6eb2SStephan Aßmus 		new BMessage(M_SETTINGS_CHANGED));
104e65a6eb2SStephan Aßmus 
105e65a6eb2SStephan Aßmus 	fSubtitleSizeOP = new BOptionPopUp("subtitleSize",
10661698f2dSPhilippe Houdoin 		B_TRANSLATE("Subtitle size:"), new BMessage(M_SETTINGS_CHANGED));
107238df8fbSAdrien Destugues 	fSubtitleSizeOP->AddOption(
108238df8fbSAdrien Destugues 		B_TRANSLATE("Small"), mpSettings::SUBTITLE_SIZE_SMALL);
109238df8fbSAdrien Destugues 	fSubtitleSizeOP->AddOption(
110238df8fbSAdrien Destugues 		B_TRANSLATE("Medium"), mpSettings::SUBTITLE_SIZE_MEDIUM);
111238df8fbSAdrien Destugues 	fSubtitleSizeOP->AddOption(
112238df8fbSAdrien Destugues 		B_TRANSLATE("Large"), mpSettings::SUBTITLE_SIZE_LARGE);
113e65a6eb2SStephan Aßmus 
114e65a6eb2SStephan Aßmus 	fSubtitlePlacementOP = new BOptionPopUp("subtitlePlacement",
11561698f2dSPhilippe Houdoin 		B_TRANSLATE("Subtitle placement:"), new BMessage(M_SETTINGS_CHANGED));
116238df8fbSAdrien Destugues 	fSubtitlePlacementOP->AddOption(B_TRANSLATE("Bottom of video"),
117e65a6eb2SStephan Aßmus 		mpSettings::SUBTITLE_PLACEMENT_BOTTOM_OF_VIDEO);
118238df8fbSAdrien Destugues 	fSubtitlePlacementOP->AddOption(B_TRANSLATE("Bottom of screen"),
119e65a6eb2SStephan Aßmus 		mpSettings::SUBTITLE_PLACEMENT_BOTTOM_OF_SCREEN);
120341ea11eSStephan Aßmus 
12126e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB = new BRadioButton("rdbtnfullvolume",
122238df8fbSAdrien Destugues 		B_TRANSLATE("Full volume"), new BMessage(M_SETTINGS_CHANGED));
12326e9cdb7SStephan Aßmus 
12426e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB = new BRadioButton("rdbtnhalfvolume",
125238df8fbSAdrien Destugues 		B_TRANSLATE("Low volume"), new BMessage(M_SETTINGS_CHANGED));
12626e9cdb7SStephan Aßmus 
12726e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB = new BRadioButton("rdbtnfullvolume",
128238df8fbSAdrien Destugues 		B_TRANSLATE("Muted"), new BMessage(M_SETTINGS_CHANGED));
12926e9cdb7SStephan Aßmus 
130238df8fbSAdrien Destugues 	fRevertB = new BButton("revert", B_TRANSLATE("Revert"),
13126e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_REVERT));
13226e9cdb7SStephan Aßmus 
133238df8fbSAdrien Destugues 	BButton* cancelButton = new BButton("cancel", B_TRANSLATE("Cancel"),
13426e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_CANCEL));
13526e9cdb7SStephan Aßmus 
136238df8fbSAdrien Destugues 	BButton* okButton = new BButton("ok", B_TRANSLATE("OK"),
13726e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_SAVE));
13826e9cdb7SStephan Aßmus 	okButton->MakeDefault(true);
13926e9cdb7SStephan Aßmus 
14026e9cdb7SStephan Aßmus 
14126e9cdb7SStephan Aßmus 	// Build the layout
14226e9cdb7SStephan Aßmus 	SetLayout(new BGroupLayout(B_HORIZONTAL));
14326e9cdb7SStephan Aßmus 
14426e9cdb7SStephan Aßmus 	AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
14526e9cdb7SStephan Aßmus 		.Add(BGroupLayoutBuilder(settingsLayout)
14626e9cdb7SStephan Aßmus 			.Add(playModeLabel)
14726e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
14826e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
14926e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
15026e9cdb7SStephan Aßmus 					.Add(fAutostartCB)
15126e9cdb7SStephan Aßmus 					.Add(BGridLayoutBuilder(5, 0)
15226e9cdb7SStephan Aßmus 						.Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 0, 0)
15326e9cdb7SStephan Aßmus 						.Add(fCloseWindowMoviesCB, 1, 0)
15426e9cdb7SStephan Aßmus 						.Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 0, 1)
15526e9cdb7SStephan Aßmus 						.Add(fCloseWindowSoundsCB, 1, 1)
15626e9cdb7SStephan Aßmus 					)
15726e9cdb7SStephan Aßmus 					.Add(fLoopMoviesCB)
15826e9cdb7SStephan Aßmus 					.Add(fLoopSoundsCB)
15926e9cdb7SStephan Aßmus 				)
16026e9cdb7SStephan Aßmus 			)
16126e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
16226e9cdb7SStephan Aßmus 
16326e9cdb7SStephan Aßmus 			.Add(viewOptionsLabel)
16426e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
16526e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
16626e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
16726e9cdb7SStephan Aßmus 					.Add(fUseOverlaysCB)
16826e9cdb7SStephan Aßmus 					.Add(fScaleBilinearCB)
169341ea11eSStephan Aßmus 					.Add(fScaleFullscreenControlsCB)
170e65a6eb2SStephan Aßmus 					.Add(fSubtitleSizeOP)
171e65a6eb2SStephan Aßmus 					.Add(fSubtitlePlacementOP)
17226e9cdb7SStephan Aßmus 				)
17326e9cdb7SStephan Aßmus 			)
17426e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
17526e9cdb7SStephan Aßmus 
17626e9cdb7SStephan Aßmus 			.Add(bgMoviesModeLabel)
17726e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
17826e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
17926e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
18026e9cdb7SStephan Aßmus 					.Add(fFullVolumeBGMoviesRB)
18126e9cdb7SStephan Aßmus 					.Add(fHalfVolumeBGMoviesRB)
18226e9cdb7SStephan Aßmus 					.Add(fMutedVolumeBGMoviesRB)
18326e9cdb7SStephan Aßmus 				)
18426e9cdb7SStephan Aßmus 			)
18526e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
18626e9cdb7SStephan Aßmus 
18726e9cdb7SStephan Aßmus 			.SetInsets(5, 5, 15, 5)
18826e9cdb7SStephan Aßmus 		)
18926e9cdb7SStephan Aßmus 		.Add(BGroupLayoutBuilder(buttonLayout)
190613ecaf5SStephan Aßmus 			.Add(fRevertB)
19126e9cdb7SStephan Aßmus 			.AddGlue()
19226e9cdb7SStephan Aßmus 			.Add(cancelButton)
19326e9cdb7SStephan Aßmus 			.Add(okButton)
19426e9cdb7SStephan Aßmus 			.SetInsets(5, 5, 5, 5)
19526e9cdb7SStephan Aßmus 		)
19626e9cdb7SStephan Aßmus 	);
1974d3ebaccSStephan Aßmus }
1984d3ebaccSStephan Aßmus 
1994d3ebaccSStephan Aßmus 
2004d3ebaccSStephan Aßmus SettingsWindow::~SettingsWindow()
2014d3ebaccSStephan Aßmus {
2024d3ebaccSStephan Aßmus }
2034d3ebaccSStephan Aßmus 
2044d3ebaccSStephan Aßmus 
2054d3ebaccSStephan Aßmus void
20626e9cdb7SStephan Aßmus SettingsWindow::Show()
2074d3ebaccSStephan Aßmus {
208ac6b0fc9SStephan Aßmus 	// The Settings that we want to be able to revert to is the state at which
209ac6b0fc9SStephan Aßmus 	// the SettingsWindow was shown. So the current settings are stored in
210ac6b0fc9SStephan Aßmus 	// fLastSettings.
211*a178983dSAxel Dörfler 	Settings::Default()->Get(fLastSettings);
21226e9cdb7SStephan Aßmus 	fSettings = fLastSettings;
21326e9cdb7SStephan Aßmus 	AdoptSettings();
21426e9cdb7SStephan Aßmus 
21526e9cdb7SStephan Aßmus 	BWindow::Show();
2164d3ebaccSStephan Aßmus }
2174d3ebaccSStephan Aßmus 
2184d3ebaccSStephan Aßmus 
2194d3ebaccSStephan Aßmus bool
2204d3ebaccSStephan Aßmus SettingsWindow::QuitRequested()
2214d3ebaccSStephan Aßmus {
2224d3ebaccSStephan Aßmus 	Hide();
2234d3ebaccSStephan Aßmus 	return false;
2244d3ebaccSStephan Aßmus }
2254d3ebaccSStephan Aßmus 
2264d3ebaccSStephan Aßmus 
2274d3ebaccSStephan Aßmus void
2284d3ebaccSStephan Aßmus SettingsWindow::MessageReceived(BMessage* message)
2294d3ebaccSStephan Aßmus {
2304d3ebaccSStephan Aßmus 	switch (message->what) {
231e65a6eb2SStephan Aßmus 		case M_SETTINGS_CHANGED:
23226e9cdb7SStephan Aßmus 			ApplySettings();
23326e9cdb7SStephan Aßmus 			break;
23426e9cdb7SStephan Aßmus 
2354d3ebaccSStephan Aßmus 		case B_KEY_DOWN:
2364d3ebaccSStephan Aßmus 			int32 index;
23726e9cdb7SStephan Aßmus 			if (message->FindInt32("key", &index) == B_OK && index == 1)
2384d3ebaccSStephan Aßmus 				PostMessage(B_QUIT_REQUESTED);
2394d3ebaccSStephan Aßmus 			break;
24026e9cdb7SStephan Aßmus 
24126e9cdb7SStephan Aßmus 		case M_SETTINGS_REVERT:
24226e9cdb7SStephan Aßmus 			Revert();
24326e9cdb7SStephan Aßmus 			break;
24426e9cdb7SStephan Aßmus 
2454d3ebaccSStephan Aßmus 		case M_SETTINGS_CANCEL:
24626e9cdb7SStephan Aßmus 			Revert();
24726e9cdb7SStephan Aßmus 			// fall through
24826e9cdb7SStephan Aßmus 		case M_SETTINGS_SAVE:
2494d3ebaccSStephan Aßmus 			PostMessage(B_QUIT_REQUESTED);
2504d3ebaccSStephan Aßmus 			break;
25126e9cdb7SStephan Aßmus 
2524d3ebaccSStephan Aßmus 		default:
2534d3ebaccSStephan Aßmus 			BWindow::MessageReceived(message);
2544d3ebaccSStephan Aßmus 			break;
2554d3ebaccSStephan Aßmus 	}
2564d3ebaccSStephan Aßmus }
25726e9cdb7SStephan Aßmus 
25826e9cdb7SStephan Aßmus 
25926e9cdb7SStephan Aßmus void
26026e9cdb7SStephan Aßmus SettingsWindow::AdoptSettings()
26126e9cdb7SStephan Aßmus {
26226e9cdb7SStephan Aßmus 	fAutostartCB->SetValue(fSettings.autostart);
26326e9cdb7SStephan Aßmus 	fCloseWindowMoviesCB->SetValue(fSettings.closeWhenDonePlayingMovie);
26426e9cdb7SStephan Aßmus 	fCloseWindowSoundsCB->SetValue(fSettings.closeWhenDonePlayingSound);
26526e9cdb7SStephan Aßmus 	fLoopMoviesCB->SetValue(fSettings.loopMovie);
26626e9cdb7SStephan Aßmus 	fLoopSoundsCB->SetValue(fSettings.loopSound);
26726e9cdb7SStephan Aßmus 
26826e9cdb7SStephan Aßmus 	fUseOverlaysCB->SetValue(fSettings.useOverlays);
26926e9cdb7SStephan Aßmus 	fScaleBilinearCB->SetValue(fSettings.scaleBilinear);
270341ea11eSStephan Aßmus 	fScaleFullscreenControlsCB->SetValue(fSettings.scaleFullscreenControls);
27126e9cdb7SStephan Aßmus 
272e65a6eb2SStephan Aßmus 	fSubtitleSizeOP->SetValue(fSettings.subtitleSize);
273e65a6eb2SStephan Aßmus 	fSubtitlePlacementOP->SetValue(fSettings.subtitlePlacement);
274e65a6eb2SStephan Aßmus 
27526e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
27626e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_FULL_VOLUME);
27726e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
27826e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_HALF_VLUME);
27926e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
28026e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_MUTED);
281613ecaf5SStephan Aßmus 
282613ecaf5SStephan Aßmus 	fRevertB->SetEnabled(IsRevertable());
28326e9cdb7SStephan Aßmus }
28426e9cdb7SStephan Aßmus 
28526e9cdb7SStephan Aßmus 
28626e9cdb7SStephan Aßmus void
28726e9cdb7SStephan Aßmus SettingsWindow::ApplySettings()
28826e9cdb7SStephan Aßmus {
28926e9cdb7SStephan Aßmus 	fSettings.autostart = fAutostartCB->Value() == B_CONTROL_ON;
29026e9cdb7SStephan Aßmus 	fSettings.closeWhenDonePlayingMovie
29126e9cdb7SStephan Aßmus 		= fCloseWindowMoviesCB->Value() == B_CONTROL_ON;
29226e9cdb7SStephan Aßmus 	fSettings.closeWhenDonePlayingSound
29326e9cdb7SStephan Aßmus 		= fCloseWindowSoundsCB->Value() == B_CONTROL_ON;
29426e9cdb7SStephan Aßmus 	fSettings.loopMovie = fLoopMoviesCB->Value() == B_CONTROL_ON;
29526e9cdb7SStephan Aßmus 	fSettings.loopSound = fLoopSoundsCB->Value() == B_CONTROL_ON;
29626e9cdb7SStephan Aßmus 
29726e9cdb7SStephan Aßmus 	fSettings.useOverlays = fUseOverlaysCB->Value() == B_CONTROL_ON;
29826e9cdb7SStephan Aßmus 	fSettings.scaleBilinear = fScaleBilinearCB->Value() == B_CONTROL_ON;
299341ea11eSStephan Aßmus 	fSettings.scaleFullscreenControls
300341ea11eSStephan Aßmus 		= fScaleFullscreenControlsCB->Value() == B_CONTROL_ON;
30126e9cdb7SStephan Aßmus 
302e65a6eb2SStephan Aßmus 	fSettings.subtitleSize = fSubtitleSizeOP->Value();
303e65a6eb2SStephan Aßmus 	fSettings.subtitlePlacement = fSubtitlePlacementOP->Value();
304e65a6eb2SStephan Aßmus 
30526e9cdb7SStephan Aßmus 	if (fFullVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
30626e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
30726e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_FULL_VOLUME;
30826e9cdb7SStephan Aßmus 	} else if (fHalfVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
30926e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
31026e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_HALF_VLUME;
31126e9cdb7SStephan Aßmus 	} else if (fMutedVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
31226e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
31326e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_MUTED;
31426e9cdb7SStephan Aßmus 	}
31526e9cdb7SStephan Aßmus 
316*a178983dSAxel Dörfler 	Settings::Default()->Update(fSettings);
317613ecaf5SStephan Aßmus 
318613ecaf5SStephan Aßmus 	fRevertB->SetEnabled(IsRevertable());
31926e9cdb7SStephan Aßmus }
32026e9cdb7SStephan Aßmus 
32126e9cdb7SStephan Aßmus 
32226e9cdb7SStephan Aßmus void
32326e9cdb7SStephan Aßmus SettingsWindow::Revert()
32426e9cdb7SStephan Aßmus {
32526e9cdb7SStephan Aßmus 	fSettings = fLastSettings;
32626e9cdb7SStephan Aßmus 	AdoptSettings();
327*a178983dSAxel Dörfler 	Settings::Default()->Update(fSettings);
32826e9cdb7SStephan Aßmus }
32926e9cdb7SStephan Aßmus 
330613ecaf5SStephan Aßmus 
331613ecaf5SStephan Aßmus bool
332613ecaf5SStephan Aßmus SettingsWindow::IsRevertable() const
333613ecaf5SStephan Aßmus {
334613ecaf5SStephan Aßmus 	return fSettings != fLastSettings;
335613ecaf5SStephan Aßmus }
336613ecaf5SStephan Aßmus 
337