1/* 2 * Copyright 2003-2005, Waldemar Kornewald <wkornew@gmx.net> 3 * Distributed under the terms of the MIT License. 4 */ 5 6//----------------------------------------------------------------------- 7// ConnectionOptionsAddon saves the loaded settings. 8// ConnectionOptionsView saves the current settings. 9//----------------------------------------------------------------------- 10 11#include "ConnectionOptionsAddon.h" 12 13#include "MessageDriverSettingsUtils.h" 14 15#include <PPPDefs.h> 16#include <settings_tools.h> 17 18 19// message constants 20static const uint32 kMsgUpdateControls = 'UCTL'; 21 22// labels 23static const char *kLabelConnectionOptions = "Options"; 24static const char *kLabelAskBeforeConnecting = "Ask Before Connecting"; 25static const char *kLabelAutoReconnect = "Reconnect Automatically"; 26 27 28ConnectionOptionsAddon::ConnectionOptionsAddon(BMessage *addons) 29 : DialUpAddon(addons), 30 fSettings(NULL), 31 fConnectionOptionsView(NULL) 32{ 33 CreateView(BPoint(0,0)); 34 fDeleteView = true; 35} 36 37 38ConnectionOptionsAddon::~ConnectionOptionsAddon() 39{ 40 if(fDeleteView) 41 delete fConnectionOptionsView; 42} 43 44 45bool 46ConnectionOptionsAddon::LoadSettings(BMessage *settings, bool isNew) 47{ 48 fIsNew = isNew; 49 fAskBeforeConnecting = fDoesAutoReconnect = false; 50 fSettings = settings; 51 52 fConnectionOptionsView->Reload(); 53 // reset all views (empty settings) 54 55 if(!settings || isNew) 56 return true; 57 58 BMessage parameter; 59 int32 index = 0; 60 const char *value; 61 if(FindMessageParameter(PPP_ASK_BEFORE_CONNECTING_KEY, *fSettings, ¶meter, 62 &index) && parameter.FindString(MDSU_VALUES, &value) == B_OK) { 63 if(get_boolean_value(value, false)) 64 fAskBeforeConnecting = true; 65 66 parameter.AddBool(MDSU_VALID, true); 67 fSettings->ReplaceMessage(MDSU_PARAMETERS, index, ¶meter); 68 } 69 70 index = 0; 71 if(FindMessageParameter(PPP_AUTO_RECONNECT_KEY, *fSettings, ¶meter, &index) 72 && parameter.FindString(MDSU_VALUES, &value) == B_OK) { 73 if(get_boolean_value(value, false)) 74 fDoesAutoReconnect = true; 75 76 parameter.AddBool(MDSU_VALID, true); 77 fSettings->ReplaceMessage(MDSU_PARAMETERS, index, ¶meter); 78 } 79 80 fConnectionOptionsView->Reload(); 81 // reload new settings 82 83 return true; 84} 85 86 87void 88ConnectionOptionsAddon::IsModified(bool *settings) const 89{ 90 *settings = false; 91 92 if(!fSettings || !fConnectionOptionsView) 93 return; 94 95 *settings = AskBeforeConnecting() != fConnectionOptionsView->AskBeforeConnecting() 96 || DoesAutoReconnect() != fConnectionOptionsView->DoesAutoReconnect(); 97} 98 99 100bool 101ConnectionOptionsAddon::SaveSettings(BMessage *settings) 102{ 103 if(!fSettings || !settings) 104 return false; 105 106 BMessage parameter; 107 if(fConnectionOptionsView->DoesAutoReconnect()) { 108 parameter.MakeEmpty(); 109 parameter.AddString(MDSU_NAME, PPP_AUTO_RECONNECT_KEY); 110 parameter.AddString(MDSU_VALUES, "enabled"); 111 settings->AddMessage(MDSU_PARAMETERS, ¶meter); 112 } 113 114 return true; 115} 116 117 118bool 119ConnectionOptionsAddon::GetPreferredSize(float *width, float *height) const 120{ 121 BRect rect; 122 if(Addons()->FindRect(DUN_TAB_VIEW_RECT, &rect) != B_OK) 123 rect.Set(0, 0, 200, 300); 124 // set default values 125 126 if(width) 127 *width = rect.Width(); 128 if(height) 129 *height = rect.Height(); 130 131 return true; 132} 133 134 135BView* 136ConnectionOptionsAddon::CreateView(BPoint leftTop) 137{ 138 if(!fConnectionOptionsView) { 139 BRect rect; 140 Addons()->FindRect(DUN_TAB_VIEW_RECT, &rect); 141 fConnectionOptionsView = new ConnectionOptionsView(this, rect); 142 } 143 144 fDeleteView = false; 145 146 fConnectionOptionsView->MoveTo(leftTop); 147 fConnectionOptionsView->Reload(); 148 return fConnectionOptionsView; 149} 150 151 152ConnectionOptionsView::ConnectionOptionsView(ConnectionOptionsAddon *addon, BRect frame) 153 : BView(frame, kLabelConnectionOptions, B_FOLLOW_NONE, 0), 154 fAddon(addon) 155{ 156 BRect rect = Bounds(); 157 rect.InsetBy(10, 10); 158 rect.bottom = rect.top + 15; 159 fAskBeforeConnecting = new BCheckBox(rect, "AskBeforeConnecting", 160 kLabelAskBeforeConnecting, NULL); 161 rect.top = rect.bottom + 5; 162 rect.bottom = rect.top + 15; 163 fAutoReconnect = new BCheckBox(rect, "AutoReconnect", kLabelAutoReconnect, NULL); 164 165 AddChild(fAskBeforeConnecting); 166 AddChild(fAutoReconnect); 167} 168 169 170void 171ConnectionOptionsView::Reload() 172{ 173 fAskBeforeConnecting->SetValue(Addon()->AskBeforeConnecting()); 174 fAutoReconnect->SetValue(Addon()->DoesAutoReconnect()); 175 176 if(!Addon()->Settings()) 177 return; 178} 179 180 181void 182ConnectionOptionsView::AttachedToWindow() 183{ 184 SetViewColor(Parent()->ViewColor()); 185} 186