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