1/* 2 * Copyright 2021, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#include "SettingsWindow.h" 6 7#include <Button.h> 8#include <Catalog.h> 9#include <CheckBox.h> 10#include <LayoutBuilder.h> 11#include <Locker.h> 12#include <SeparatorView.h> 13 14#include "Logger.h" 15#include "Model.h" 16#include "UserUsageConditionsWindow.h" 17#include "ServerHelper.h" 18#include "WebAppInterface.h" 19 20 21#undef B_TRANSLATION_CONTEXT 22#define B_TRANSLATION_CONTEXT "SettingsWindow" 23 24#define WINDOW_FRAME BRect(0, 0, 500, 280) 25 26 27enum { 28 MSG_APPLY = 'aply', 29}; 30 31 32SettingsWindow::SettingsWindow(BWindow* parent, Model* model) 33 : 34 BWindow(WINDOW_FRAME, B_TRANSLATE("Settings"), 35 B_FLOATING_WINDOW_LOOK, B_MODAL_SUBSET_WINDOW_FEEL, 36 B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS 37 | B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_NOT_CLOSABLE ), 38 fModel(model) 39{ 40 AddToSubset(parent); 41 _InitUiControls(); 42 _UpdateUiFromModel(); 43 44 BLayoutBuilder::Group<>(this, B_VERTICAL, 0) 45 .AddGroup(B_VERTICAL, 0) 46 .SetInsets(B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING, 47 B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING) 48 .Add(fCanShareAnonymousUsageDataCheckBox) 49 .End() 50 .Add(new BSeparatorView(B_HORIZONTAL)) 51 // rule off 52 .AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING) 53 .SetInsets(0, B_USE_DEFAULT_SPACING, 54 B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING) 55 .AddGlue() 56 .Add(fCancelButton) 57 .Add(fApplyButton) 58 .End(); 59 60 CenterOnScreen(); 61} 62 63 64SettingsWindow::~SettingsWindow() 65{ 66} 67 68 69void 70SettingsWindow::_InitUiControls() 71{ 72 fCanShareAnonymousUsageDataCheckBox = new BCheckBox( 73 "share anonymous usage data", 74 B_TRANSLATE("Share anonymous usage data with HaikuDepotServer"), NULL); 75 76 fApplyButton = new BButton("apply", B_TRANSLATE("Apply"), 77 new BMessage(MSG_APPLY)); 78 fCancelButton = new BButton("cancel", B_TRANSLATE("Cancel"), 79 new BMessage(B_QUIT_REQUESTED)); 80} 81 82 83void 84SettingsWindow::_UpdateUiFromModel() 85{ 86 fCanShareAnonymousUsageDataCheckBox->SetValue( 87 fModel->CanShareAnonymousUsageData() ? 1 : 0); 88} 89 90 91void 92SettingsWindow::_UpdateModelFromUi() 93{ 94 fModel->SetCanShareAnonymousUsageData( 95 0 != fCanShareAnonymousUsageDataCheckBox->Value()); 96} 97 98 99void 100SettingsWindow::MessageReceived(BMessage* message) 101{ 102 switch (message->what) { 103 case MSG_APPLY: 104 _UpdateModelFromUi(); 105 BMessenger(this).SendMessage(B_QUIT_REQUESTED); 106 break; 107 default: 108 BWindow::MessageReceived(message); 109 break; 110 } 111} 112