xref: /haiku/src/apps/mediaplayer/settings/SettingsWindow.cpp (revision 7974d3dcf39ce78e5885b481eee12e561ad6e096)
14d3ebaccSStephan Aßmus /*
2*7974d3dcSStephan Aßmus  * Copyright 2008-2009, 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>
74d3ebaccSStephan Aßmus  */
84d3ebaccSStephan Aßmus 
94d3ebaccSStephan Aßmus #include "SettingsWindow.h"
104d3ebaccSStephan Aßmus 
114d3ebaccSStephan Aßmus #include <stdio.h>
124d3ebaccSStephan Aßmus 
134d3ebaccSStephan Aßmus #include <Box.h>
144d3ebaccSStephan Aßmus #include <CheckBox.h>
154d3ebaccSStephan Aßmus #include <StringView.h>
164d3ebaccSStephan Aßmus #include <RadioButton.h>
174d3ebaccSStephan Aßmus #include <View.h>
184d3ebaccSStephan Aßmus #include <Button.h>
194d3ebaccSStephan Aßmus #include <String.h>
204d3ebaccSStephan Aßmus 
2126e9cdb7SStephan Aßmus #ifdef __HAIKU__
2226e9cdb7SStephan Aßmus #	include <GridLayoutBuilder.h>
2326e9cdb7SStephan Aßmus #	include <GroupLayoutBuilder.h>
2426e9cdb7SStephan Aßmus #	include <SpaceLayoutItem.h>
2526e9cdb7SStephan Aßmus #endif
2626e9cdb7SStephan Aßmus 
274d3ebaccSStephan Aßmus enum {
284d3ebaccSStephan Aßmus 	M_AUTOSTART = 0x3000,
294d3ebaccSStephan Aßmus 	M_CLOSE_WINDOW_MOVIE,
304d3ebaccSStephan Aßmus 	M_CLOSE_WINDOW_SOUNDS,
314d3ebaccSStephan Aßmus 	M_LOOP_MOVIE,
324d3ebaccSStephan Aßmus 	M_LOOP_SOUND,
3326e9cdb7SStephan Aßmus 	M_USE_OVERLAYS,
3426e9cdb7SStephan Aßmus 	M_SCALE_BILINEAR,
354d3ebaccSStephan Aßmus 	M_START_FULL_VOLUME,
364d3ebaccSStephan Aßmus 	M_START_HALF_VOLUME,
374d3ebaccSStephan Aßmus 	M_START_MUTE_VOLUME,
3826e9cdb7SStephan Aßmus 
394d3ebaccSStephan Aßmus 	M_SETTINGS_SAVE,
404d3ebaccSStephan Aßmus 	M_SETTINGS_CANCEL,
4126e9cdb7SStephan Aßmus 	M_SETTINGS_REVERT
424d3ebaccSStephan Aßmus };
434d3ebaccSStephan Aßmus 
444d3ebaccSStephan Aßmus #define SPACE 10
454d3ebaccSStephan Aßmus #define SPACEING 7
464d3ebaccSStephan Aßmus #define BUTTONHEIGHT 20
474d3ebaccSStephan Aßmus 
484d3ebaccSStephan Aßmus SettingsWindow::SettingsWindow(BRect frame)
49*7974d3dcSStephan Aßmus  	: BWindow(frame, "MediaPlayer settings", B_FLOATING_WINDOW_LOOK,
504ddc254cSStephan Aßmus  		B_FLOATING_APP_WINDOW_FEEL,
5126e9cdb7SStephan Aßmus  		B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE
5226e9cdb7SStephan Aßmus #ifdef __HAIKU__
5326e9cdb7SStephan Aßmus  			| B_AUTO_UPDATE_SIZE_LIMITS)
5426e9cdb7SStephan Aßmus #else
5526e9cdb7SStephan Aßmus  			)
5626e9cdb7SStephan Aßmus #endif
574d3ebaccSStephan Aßmus {
5826e9cdb7SStephan Aßmus #ifdef __HAIKU__
594d3ebaccSStephan Aßmus 
6026e9cdb7SStephan Aßmus 	BBox* settingsBox = new BBox(B_PLAIN_BORDER, NULL);
6126e9cdb7SStephan Aßmus 	BGroupLayout* settingsLayout = new BGroupLayout(B_VERTICAL, 5);
6226e9cdb7SStephan Aßmus 	settingsBox->SetLayout(settingsLayout);
6326e9cdb7SStephan Aßmus 	BBox* buttonBox = new BBox(B_PLAIN_BORDER, NULL);
6426e9cdb7SStephan Aßmus 	BGroupLayout* buttonLayout = new BGroupLayout(B_HORIZONTAL, 5);
6526e9cdb7SStephan Aßmus 	buttonBox->SetLayout(buttonLayout);
6626e9cdb7SStephan Aßmus 
6726e9cdb7SStephan Aßmus 	BStringView* playModeLabel = new BStringView("stringViewPlayMode",
6826e9cdb7SStephan Aßmus 		"Play mode");
6926e9cdb7SStephan Aßmus 	BStringView* viewOptionsLabel = new BStringView("stringViewViewOpions",
7026e9cdb7SStephan Aßmus 		"View options");
7126e9cdb7SStephan Aßmus 	BStringView* bgMoviesModeLabel = new BStringView("stringViewPlayBackg",
724ddc254cSStephan Aßmus 		"Play background clips at");
7326e9cdb7SStephan Aßmus 	BAlignment alignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER);
7426e9cdb7SStephan Aßmus 	playModeLabel->SetExplicitAlignment(alignment);
7526e9cdb7SStephan Aßmus 	playModeLabel->SetFont(be_bold_font);
7626e9cdb7SStephan Aßmus 	viewOptionsLabel->SetExplicitAlignment(alignment);
7726e9cdb7SStephan Aßmus 	viewOptionsLabel->SetFont(be_bold_font);
7826e9cdb7SStephan Aßmus 	bgMoviesModeLabel->SetExplicitAlignment(alignment);
7926e9cdb7SStephan Aßmus 	bgMoviesModeLabel->SetFont(be_bold_font);
8026e9cdb7SStephan Aßmus 
8126e9cdb7SStephan Aßmus 	fAutostartCB = new BCheckBox("chkboxAutostart",
8226e9cdb7SStephan Aßmus 		"Automatically start playing", new BMessage(M_AUTOSTART));
8326e9cdb7SStephan Aßmus 
8426e9cdb7SStephan Aßmus 	fCloseWindowMoviesCB = new BCheckBox("chkBoxCloseWindowMovies",
8526e9cdb7SStephan Aßmus 		"Close window when done playing movies",
8626e9cdb7SStephan Aßmus 		new BMessage(M_CLOSE_WINDOW_MOVIE));
8726e9cdb7SStephan Aßmus 	fCloseWindowSoundsCB = new BCheckBox("chkBoxCloseWindowSounds",
8826e9cdb7SStephan Aßmus 		"Close window when done playing sounds",
8926e9cdb7SStephan Aßmus 		new BMessage(M_CLOSE_WINDOW_SOUNDS));
9026e9cdb7SStephan Aßmus 
9126e9cdb7SStephan Aßmus 	fLoopMoviesCB = new BCheckBox("chkBoxLoopMovie",
9226e9cdb7SStephan Aßmus 		"Loop movies by default", new BMessage(M_LOOP_MOVIE));
9326e9cdb7SStephan Aßmus 	fLoopSoundsCB = new BCheckBox("chkBoxLoopSounds",
9426e9cdb7SStephan Aßmus 		"Loop sounds by default", new BMessage(M_LOOP_SOUND));
9526e9cdb7SStephan Aßmus 
9626e9cdb7SStephan Aßmus 	fUseOverlaysCB = new BCheckBox("chkBoxUseOverlays",
9726e9cdb7SStephan Aßmus 		"Use hardware video overlays if available",
9826e9cdb7SStephan Aßmus 		new BMessage(M_USE_OVERLAYS));
9926e9cdb7SStephan Aßmus 	fScaleBilinearCB = new BCheckBox("chkBoxScaleBilinear",
10026e9cdb7SStephan Aßmus 		"Scale movies smoothly (non-overlay mode)",
10126e9cdb7SStephan Aßmus 		new BMessage(M_SCALE_BILINEAR));
10226e9cdb7SStephan Aßmus 
10326e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB = new BRadioButton("rdbtnfullvolume",
10426e9cdb7SStephan Aßmus 		"Full volume", new BMessage(M_START_FULL_VOLUME));
10526e9cdb7SStephan Aßmus 
10626e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB = new BRadioButton("rdbtnhalfvolume",
1074ddc254cSStephan Aßmus 		"Low volume", new BMessage(M_START_HALF_VOLUME));
10826e9cdb7SStephan Aßmus 
10926e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB = new BRadioButton("rdbtnfullvolume",
11026e9cdb7SStephan Aßmus 		"Muted", new BMessage(M_START_MUTE_VOLUME));
11126e9cdb7SStephan Aßmus 
112613ecaf5SStephan Aßmus 	fRevertB = new BButton("revert", "Revert",
11326e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_REVERT));
11426e9cdb7SStephan Aßmus 
11526e9cdb7SStephan Aßmus 	BButton* cancelButton = new BButton("cancel", "Cancel",
11626e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_CANCEL));
11726e9cdb7SStephan Aßmus 
118*7974d3dcSStephan Aßmus 	BButton* okButton = new BButton("ok", "OK",
11926e9cdb7SStephan Aßmus 		new BMessage(M_SETTINGS_SAVE));
12026e9cdb7SStephan Aßmus 	okButton->MakeDefault(true);
12126e9cdb7SStephan Aßmus 
12226e9cdb7SStephan Aßmus 
12326e9cdb7SStephan Aßmus 	// Build the layout
12426e9cdb7SStephan Aßmus 	SetLayout(new BGroupLayout(B_HORIZONTAL));
12526e9cdb7SStephan Aßmus 
12626e9cdb7SStephan Aßmus 	AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
12726e9cdb7SStephan Aßmus 		.Add(BGroupLayoutBuilder(settingsLayout)
12826e9cdb7SStephan Aßmus 			.Add(playModeLabel)
12926e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
13026e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
13126e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
13226e9cdb7SStephan Aßmus 					.Add(fAutostartCB)
13326e9cdb7SStephan Aßmus 					.Add(BGridLayoutBuilder(5, 0)
13426e9cdb7SStephan Aßmus 						.Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 0, 0)
13526e9cdb7SStephan Aßmus 						.Add(fCloseWindowMoviesCB, 1, 0)
13626e9cdb7SStephan Aßmus 						.Add(BSpaceLayoutItem::CreateHorizontalStrut(10), 0, 1)
13726e9cdb7SStephan Aßmus 						.Add(fCloseWindowSoundsCB, 1, 1)
13826e9cdb7SStephan Aßmus 					)
13926e9cdb7SStephan Aßmus 					.Add(fLoopMoviesCB)
14026e9cdb7SStephan Aßmus 					.Add(fLoopSoundsCB)
14126e9cdb7SStephan Aßmus 				)
14226e9cdb7SStephan Aßmus 			)
14326e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
14426e9cdb7SStephan Aßmus 
14526e9cdb7SStephan Aßmus 			.Add(viewOptionsLabel)
14626e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
14726e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
14826e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
14926e9cdb7SStephan Aßmus 					.Add(fUseOverlaysCB)
15026e9cdb7SStephan Aßmus 					.Add(fScaleBilinearCB)
15126e9cdb7SStephan Aßmus 				)
15226e9cdb7SStephan Aßmus 			)
15326e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
15426e9cdb7SStephan Aßmus 
15526e9cdb7SStephan Aßmus 			.Add(bgMoviesModeLabel)
15626e9cdb7SStephan Aßmus 			.Add(BGroupLayoutBuilder(B_HORIZONTAL, 0)
15726e9cdb7SStephan Aßmus 				.Add(BSpaceLayoutItem::CreateHorizontalStrut(10))
15826e9cdb7SStephan Aßmus 				.Add(BGroupLayoutBuilder(B_VERTICAL, 0)
15926e9cdb7SStephan Aßmus 					.Add(fFullVolumeBGMoviesRB)
16026e9cdb7SStephan Aßmus 					.Add(fHalfVolumeBGMoviesRB)
16126e9cdb7SStephan Aßmus 					.Add(fMutedVolumeBGMoviesRB)
16226e9cdb7SStephan Aßmus 				)
16326e9cdb7SStephan Aßmus 			)
16426e9cdb7SStephan Aßmus 			.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
16526e9cdb7SStephan Aßmus 
16626e9cdb7SStephan Aßmus 			.SetInsets(5, 5, 15, 5)
16726e9cdb7SStephan Aßmus 		)
16826e9cdb7SStephan Aßmus 		.Add(BGroupLayoutBuilder(buttonLayout)
169613ecaf5SStephan Aßmus 			.Add(fRevertB)
17026e9cdb7SStephan Aßmus 			.AddGlue()
17126e9cdb7SStephan Aßmus 			.Add(cancelButton)
17226e9cdb7SStephan Aßmus 			.Add(okButton)
17326e9cdb7SStephan Aßmus 			.SetInsets(5, 5, 5, 5)
17426e9cdb7SStephan Aßmus 		)
17526e9cdb7SStephan Aßmus 	);
17626e9cdb7SStephan Aßmus 
17726e9cdb7SStephan Aßmus #else
178613ecaf5SStephan Aßmus 
1794d3ebaccSStephan Aßmus 	frame = Bounds();
1804d3ebaccSStephan Aßmus 	BView* view = new BView(frame,"SettingsView",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
1814d3ebaccSStephan Aßmus 	view->SetViewColor(216, 216, 216);
1824d3ebaccSStephan Aßmus 
183ca75aaadSFrançois Revol 	BRect btnRect(80.00, frame.bottom - (SPACE + BUTTONHEIGHT), 145.00,
1844d3ebaccSStephan Aßmus 		frame.bottom-SPACE);
185ca75aaadSFrançois Revol 
186ca75aaadSFrançois Revol 	fRevertB = new BButton(btnRect, "revert", "Revert",
187ca75aaadSFrançois Revol 		new BMessage(M_SETTINGS_REVERT));
188ca75aaadSFrançois Revol 	view->AddChild(fRevertB);
189ca75aaadSFrançois Revol 
190ca75aaadSFrançois Revol 	btnRect.OffsetBy(btnRect.Width() + SPACE, 0);
1914d3ebaccSStephan Aßmus 	BButton* btn = new BButton(btnRect, "btnCancel", "Cancel",
1924d3ebaccSStephan Aßmus 		new BMessage(M_SETTINGS_CANCEL));
1934d3ebaccSStephan Aßmus 	view->AddChild(btn);
1944d3ebaccSStephan Aßmus 
1954d3ebaccSStephan Aßmus 	btnRect.OffsetBy(btnRect.Width() + SPACE, 0);
1964d3ebaccSStephan Aßmus 	btn = new BButton(btnRect, "btnOK", "OK", new BMessage(M_SETTINGS_SAVE));
1974d3ebaccSStephan Aßmus 	view->AddChild(btn);
1984d3ebaccSStephan Aßmus 
1994d3ebaccSStephan Aßmus 	BRect rectBox(frame.left + SPACE, frame.top + SPACE, frame.right - SPACE,
2004d3ebaccSStephan Aßmus 		btnRect.top- SPACE);
2014d3ebaccSStephan Aßmus 	BBox* bbox = new BBox(rectBox, "box1", B_FOLLOW_ALL_SIDES,B_WILL_DRAW | B_NAVIGABLE,
2024d3ebaccSStephan Aßmus 		B_FANCY_BORDER);
2034d3ebaccSStephan Aßmus 	bbox->SetLabel("MediaPlayer Settings");
2044d3ebaccSStephan Aßmus 
2054d3ebaccSStephan Aßmus 	BFont font;
2064d3ebaccSStephan Aßmus 	font_height fh1;
2074d3ebaccSStephan Aßmus 	font.GetHeight(&fh1);
2084d3ebaccSStephan Aßmus 
2094d3ebaccSStephan Aßmus 	BString str("Play Mode:");
2104d3ebaccSStephan Aßmus 	BRect rect(rectBox.left, rectBox.top + SPACE, rectBox.right - (12*2),
2114d3ebaccSStephan Aßmus 		rectBox.top + fh1.leading + fh1.ascent + 10);
2124d3ebaccSStephan Aßmus 	bbox->AddChild(new BStringView(rect, "stringViewPlayMode", str.String()));
2134d3ebaccSStephan Aßmus 
2144d3ebaccSStephan Aßmus 	rect.OffsetBy(0, rect.Height());
21526e9cdb7SStephan Aßmus 	bbox->AddChild(fAutostartCB = new BCheckBox(rect, "chkboxAutostart",
2164d3ebaccSStephan Aßmus 		"Automatically start playing", new BMessage(M_AUTOSTART)));
2174d3ebaccSStephan Aßmus 
2184d3ebaccSStephan Aßmus 	rect.OffsetBy(SPACE, rect.Height() + SPACEING);
21926e9cdb7SStephan Aßmus 	bbox->AddChild(fCloseWindowMoviesCB = new BCheckBox(rect, "chkBoxCloseWindowMovies",
2204d3ebaccSStephan Aßmus 		"Close window when done playing movies", new BMessage(M_CLOSE_WINDOW_MOVIE)));
2214d3ebaccSStephan Aßmus 
2224d3ebaccSStephan Aßmus 	rect.OffsetBy(0, rect.Height() + SPACEING);
22326e9cdb7SStephan Aßmus 	bbox->AddChild(fCloseWindowSoundsCB = new BCheckBox(rect, "chkBoxCloseWindowSounds",
2244d3ebaccSStephan Aßmus 		"Close window when done playing sounds", new BMessage(M_CLOSE_WINDOW_SOUNDS)));
2254d3ebaccSStephan Aßmus 
2264d3ebaccSStephan Aßmus 	rect.OffsetBy(-SPACE, rect.Height() + SPACEING);
22726e9cdb7SStephan Aßmus 	bbox->AddChild(fLoopMoviesCB = new BCheckBox(rect, "chkBoxLoopMovie", "Loop movies by default",
2284d3ebaccSStephan Aßmus 		new BMessage(M_LOOP_MOVIE)));
2294d3ebaccSStephan Aßmus 
2304d3ebaccSStephan Aßmus 	rect.OffsetBy(0, rect.Height() + SPACEING);
23126e9cdb7SStephan Aßmus 	bbox->AddChild(fLoopSoundsCB = new BCheckBox(rect, "chkBoxLoopSounds", "Loop sounds by default",
2324d3ebaccSStephan Aßmus 		new BMessage(M_LOOP_SOUND)));
2334d3ebaccSStephan Aßmus 
234ca75aaadSFrançois Revol 	rect.OffsetBy(0, rect.Height() + SPACEING);
235ca75aaadSFrançois Revol 	bbox->AddChild(fUseOverlaysCB = new BCheckBox(rect, "chkBoxUseOverlays", "Use hardware video overlays if available",
236ca75aaadSFrançois Revol 		new BMessage(M_USE_OVERLAYS)));
237ca75aaadSFrançois Revol 
238ca75aaadSFrançois Revol 	rect.OffsetBy(0, rect.Height() + SPACEING);
239ca75aaadSFrançois Revol 	bbox->AddChild(fScaleBilinearCB = new BCheckBox(rect, "chkBoxScaleBilinear", "Scale movies smoothly (non-overlay mode)",
240ca75aaadSFrançois Revol 		new BMessage(M_SCALE_BILINEAR)));
241ca75aaadSFrançois Revol 
2424d3ebaccSStephan Aßmus 	rect.OffsetBy(0, rect.Height() + SPACE + SPACEING);
2434d3ebaccSStephan Aßmus 	bbox->AddChild(new BStringView(rect, "stringViewPlayBackg",
2444ddc254cSStephan Aßmus 		"Play backgrounds clips at:"));
2454d3ebaccSStephan Aßmus 
2464d3ebaccSStephan Aßmus 	rect.OffsetBy(SPACE, rect.Height() + SPACEING);
24726e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB = new BRadioButton(rect, "rdbtnfullvolume",
2484d3ebaccSStephan Aßmus 		"Full Volume", new BMessage(M_START_FULL_VOLUME));
24926e9cdb7SStephan Aßmus 	bbox->AddChild(fFullVolumeBGMoviesRB);
2504d3ebaccSStephan Aßmus 
2514d3ebaccSStephan Aßmus 	rect.OffsetBy(0, rect.Height() + SPACEING);
25226e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB = new BRadioButton(rect, "rdbtnhalfvolume",
2534ddc254cSStephan Aßmus 		"Low Volume", new BMessage(M_START_HALF_VOLUME));
25426e9cdb7SStephan Aßmus 	bbox->AddChild(fHalfVolumeBGMoviesRB);
2554d3ebaccSStephan Aßmus 
2564d3ebaccSStephan Aßmus 	rect.OffsetBy(0, rect.Height() + SPACEING);
25726e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB = new BRadioButton(rect, "rdbtnfullvolume", "Muted",
2584d3ebaccSStephan Aßmus 		new BMessage(M_START_MUTE_VOLUME));
25926e9cdb7SStephan Aßmus 	bbox->AddChild(fMutedVolumeBGMoviesRB);
2604d3ebaccSStephan Aßmus 
2614d3ebaccSStephan Aßmus 	view->AddChild(bbox);
2624d3ebaccSStephan Aßmus 	AddChild(view);
26326e9cdb7SStephan Aßmus #endif
26426e9cdb7SStephan Aßmus 
26526e9cdb7SStephan Aßmus 	// disable currently unsupported features
26626e9cdb7SStephan Aßmus 	fLoopMoviesCB->SetEnabled(false);
26726e9cdb7SStephan Aßmus 	fLoopSoundsCB->SetEnabled(false);
2684d3ebaccSStephan Aßmus }
2694d3ebaccSStephan Aßmus 
2704d3ebaccSStephan Aßmus 
2714d3ebaccSStephan Aßmus SettingsWindow::~SettingsWindow()
2724d3ebaccSStephan Aßmus {
2734d3ebaccSStephan Aßmus }
2744d3ebaccSStephan Aßmus 
2754d3ebaccSStephan Aßmus 
2764d3ebaccSStephan Aßmus void
27726e9cdb7SStephan Aßmus SettingsWindow::Show()
2784d3ebaccSStephan Aßmus {
279ac6b0fc9SStephan Aßmus 	// The Settings that we want to be able to revert to is the state at which
280ac6b0fc9SStephan Aßmus 	// the SettingsWindow was shown. So the current settings are stored in
281ac6b0fc9SStephan Aßmus 	// fLastSettings.
28226e9cdb7SStephan Aßmus 	Settings::Default()->LoadSettings(fLastSettings);
28326e9cdb7SStephan Aßmus 	fSettings = fLastSettings;
28426e9cdb7SStephan Aßmus 	AdoptSettings();
28526e9cdb7SStephan Aßmus 
28626e9cdb7SStephan Aßmus 	BWindow::Show();
2874d3ebaccSStephan Aßmus }
2884d3ebaccSStephan Aßmus 
2894d3ebaccSStephan Aßmus 
2904d3ebaccSStephan Aßmus bool
2914d3ebaccSStephan Aßmus SettingsWindow::QuitRequested()
2924d3ebaccSStephan Aßmus {
2934d3ebaccSStephan Aßmus 	Hide();
2944d3ebaccSStephan Aßmus 	return false;
2954d3ebaccSStephan Aßmus }
2964d3ebaccSStephan Aßmus 
2974d3ebaccSStephan Aßmus 
2984d3ebaccSStephan Aßmus void
2994d3ebaccSStephan Aßmus SettingsWindow::MessageReceived(BMessage* message)
3004d3ebaccSStephan Aßmus {
3014d3ebaccSStephan Aßmus 	switch (message->what) {
3024d3ebaccSStephan Aßmus 		case M_AUTOSTART:
3034d3ebaccSStephan Aßmus 		case M_CLOSE_WINDOW_MOVIE:
3044d3ebaccSStephan Aßmus 		case M_CLOSE_WINDOW_SOUNDS:
3054d3ebaccSStephan Aßmus 		case M_LOOP_MOVIE:
3064d3ebaccSStephan Aßmus 		case M_LOOP_SOUND:
30726e9cdb7SStephan Aßmus 		case M_USE_OVERLAYS:
30826e9cdb7SStephan Aßmus 		case M_SCALE_BILINEAR:
3094d3ebaccSStephan Aßmus 		case M_START_FULL_VOLUME:
3104d3ebaccSStephan Aßmus 		case M_START_HALF_VOLUME:
3114d3ebaccSStephan Aßmus 		case M_START_MUTE_VOLUME:
31226e9cdb7SStephan Aßmus 			ApplySettings();
31326e9cdb7SStephan Aßmus 			break;
31426e9cdb7SStephan Aßmus 
3154d3ebaccSStephan Aßmus 		case B_KEY_DOWN:
3164d3ebaccSStephan Aßmus 			int32 index;
31726e9cdb7SStephan Aßmus 			if (message->FindInt32("key", &index) == B_OK && index == 1)
3184d3ebaccSStephan Aßmus 				PostMessage(B_QUIT_REQUESTED);
3194d3ebaccSStephan Aßmus 			break;
32026e9cdb7SStephan Aßmus 
32126e9cdb7SStephan Aßmus 		case M_SETTINGS_REVERT:
32226e9cdb7SStephan Aßmus 			Revert();
32326e9cdb7SStephan Aßmus 			break;
32426e9cdb7SStephan Aßmus 
3254d3ebaccSStephan Aßmus 		case M_SETTINGS_CANCEL:
32626e9cdb7SStephan Aßmus 			Revert();
32726e9cdb7SStephan Aßmus 			// fall through
32826e9cdb7SStephan Aßmus 		case M_SETTINGS_SAVE:
3294d3ebaccSStephan Aßmus 			PostMessage(B_QUIT_REQUESTED);
3304d3ebaccSStephan Aßmus 			break;
33126e9cdb7SStephan Aßmus 
3324d3ebaccSStephan Aßmus 		default:
3334d3ebaccSStephan Aßmus 			BWindow::MessageReceived(message);
3344d3ebaccSStephan Aßmus 			break;
3354d3ebaccSStephan Aßmus 	}
3364d3ebaccSStephan Aßmus }
33726e9cdb7SStephan Aßmus 
33826e9cdb7SStephan Aßmus 
33926e9cdb7SStephan Aßmus void
34026e9cdb7SStephan Aßmus SettingsWindow::AdoptSettings()
34126e9cdb7SStephan Aßmus {
34226e9cdb7SStephan Aßmus 	fAutostartCB->SetValue(fSettings.autostart);
34326e9cdb7SStephan Aßmus 	fCloseWindowMoviesCB->SetValue(fSettings.closeWhenDonePlayingMovie);
34426e9cdb7SStephan Aßmus 	fCloseWindowSoundsCB->SetValue(fSettings.closeWhenDonePlayingSound);
34526e9cdb7SStephan Aßmus 	fLoopMoviesCB->SetValue(fSettings.loopMovie);
34626e9cdb7SStephan Aßmus 	fLoopSoundsCB->SetValue(fSettings.loopSound);
34726e9cdb7SStephan Aßmus 
34826e9cdb7SStephan Aßmus 	fUseOverlaysCB->SetValue(fSettings.useOverlays);
34926e9cdb7SStephan Aßmus 	fScaleBilinearCB->SetValue(fSettings.scaleBilinear);
35026e9cdb7SStephan Aßmus 
35126e9cdb7SStephan Aßmus 	fFullVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
35226e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_FULL_VOLUME);
35326e9cdb7SStephan Aßmus 	fHalfVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
35426e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_HALF_VLUME);
35526e9cdb7SStephan Aßmus 	fMutedVolumeBGMoviesRB->SetValue(fSettings.backgroundMovieVolumeMode
35626e9cdb7SStephan Aßmus 		== mpSettings::BG_MOVIES_MUTED);
357613ecaf5SStephan Aßmus 
358613ecaf5SStephan Aßmus 	fRevertB->SetEnabled(IsRevertable());
35926e9cdb7SStephan Aßmus }
36026e9cdb7SStephan Aßmus 
36126e9cdb7SStephan Aßmus 
36226e9cdb7SStephan Aßmus void
36326e9cdb7SStephan Aßmus SettingsWindow::ApplySettings()
36426e9cdb7SStephan Aßmus {
36526e9cdb7SStephan Aßmus 	fSettings.autostart = fAutostartCB->Value() == B_CONTROL_ON;
36626e9cdb7SStephan Aßmus 	fSettings.closeWhenDonePlayingMovie
36726e9cdb7SStephan Aßmus 		= fCloseWindowMoviesCB->Value() == B_CONTROL_ON;
36826e9cdb7SStephan Aßmus 	fSettings.closeWhenDonePlayingSound
36926e9cdb7SStephan Aßmus 		= fCloseWindowSoundsCB->Value() == B_CONTROL_ON;
37026e9cdb7SStephan Aßmus 	fSettings.loopMovie = fLoopMoviesCB->Value() == B_CONTROL_ON;
37126e9cdb7SStephan Aßmus 	fSettings.loopSound = fLoopSoundsCB->Value() == B_CONTROL_ON;
37226e9cdb7SStephan Aßmus 
37326e9cdb7SStephan Aßmus 	fSettings.useOverlays = fUseOverlaysCB->Value() == B_CONTROL_ON;
37426e9cdb7SStephan Aßmus 	fSettings.scaleBilinear = fScaleBilinearCB->Value() == B_CONTROL_ON;
37526e9cdb7SStephan Aßmus 
37626e9cdb7SStephan Aßmus 	if (fFullVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
37726e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
37826e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_FULL_VOLUME;
37926e9cdb7SStephan Aßmus 	} else if (fHalfVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
38026e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
38126e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_HALF_VLUME;
38226e9cdb7SStephan Aßmus 	} else if (fMutedVolumeBGMoviesRB->Value() == B_CONTROL_ON) {
38326e9cdb7SStephan Aßmus 		fSettings.backgroundMovieVolumeMode
38426e9cdb7SStephan Aßmus 			= mpSettings::BG_MOVIES_MUTED;
38526e9cdb7SStephan Aßmus 	}
38626e9cdb7SStephan Aßmus 
38726e9cdb7SStephan Aßmus 	Settings::Default()->SaveSettings(fSettings);
388613ecaf5SStephan Aßmus 
389613ecaf5SStephan Aßmus 	fRevertB->SetEnabled(IsRevertable());
39026e9cdb7SStephan Aßmus }
39126e9cdb7SStephan Aßmus 
39226e9cdb7SStephan Aßmus 
39326e9cdb7SStephan Aßmus void
39426e9cdb7SStephan Aßmus SettingsWindow::Revert()
39526e9cdb7SStephan Aßmus {
39626e9cdb7SStephan Aßmus 	fSettings = fLastSettings;
39726e9cdb7SStephan Aßmus 	AdoptSettings();
39826e9cdb7SStephan Aßmus 	Settings::Default()->SaveSettings(fSettings);
39926e9cdb7SStephan Aßmus }
40026e9cdb7SStephan Aßmus 
401613ecaf5SStephan Aßmus 
402613ecaf5SStephan Aßmus bool
403613ecaf5SStephan Aßmus SettingsWindow::IsRevertable() const
404613ecaf5SStephan Aßmus {
405613ecaf5SStephan Aßmus 	return fSettings != fLastSettings;
406613ecaf5SStephan Aßmus }
407613ecaf5SStephan Aßmus 
408