1/*****************************************************************************/ 2// LiveSetting 3// Written by Michael Wilber 4// 5// LiveSetting.cpp 6// 7// This class stores the default value for an individual setting and provides 8// functions which read and write the setting to BMessages. 9// 10// 11// Copyright (C) Haiku 12// 13// Permission is hereby granted, free of charge, to any person obtaining a 14// copy of this software and associated documentation files (the "Software"), 15// to deal in the Software without restriction, including without limitation 16// the rights to use, copy, modify, merge, publish, distribute, sublicense, 17// and/or sell copies of the Software, and to permit persons to whom the 18// Software is furnished to do so, subject to the following conditions: 19// 20// The above copyright notice and this permission notice shall be included 21// in all copies or substantial portions of the Software. 22// 23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 29// DEALINGS IN THE SOFTWARE. 30/*****************************************************************************/ 31 32#include "LiveSetting.h" 33 34void 35LiveSetting::Init(uint32 id, const char *name, const LiveSettingType dataType) 36{ 37 fId = id; 38 fName = name; 39 fDataType = dataType; 40} 41 42LiveSetting::LiveSetting(uint32 id, const char *name, bool val) 43{ 44 Init(id, name, LIVE_SETTING_BOOL); 45 fBoolVal = val; 46} 47 48LiveSetting::LiveSetting(uint32 id, const char *name, int32 val) 49{ 50 Init(id, name, LIVE_SETTING_INT32); 51 fInt32Val = val; 52} 53 54LiveSetting::LiveSetting(uint32 id, const char *name, const char *val) 55{ 56 Init(id, name, LIVE_SETTING_STRING); 57 fCharpVal = val; 58} 59 60bool 61LiveSetting::AddReplaceValue(BMessage *msgTo, BMessage *msgFrom /*= NULL*/) const 62{ 63 bool bResult = false; 64 65 switch (fDataType) { 66 case LIVE_SETTING_BOOL: 67 { 68 bool bVal; 69 if (GetValue(msgFrom, bVal) == true) 70 return AddReplaceValue(msgTo, bVal); 71 } 72 case LIVE_SETTING_INT32: 73 { 74 int32 iVal; 75 if (GetValue(msgFrom, iVal) == true) 76 return AddReplaceValue(msgTo, iVal); 77 } 78 case LIVE_SETTING_STRING: 79 { 80 BString str; 81 if (GetValue(msgFrom, str) == true) 82 return AddReplaceValue(msgTo, str); 83 } 84 default: 85 break; 86 } 87 88 return bResult; 89} 90 91bool 92LiveSetting::AddReplaceValue(BMessage *msgTo, bool val) const 93{ 94 if (msgTo == NULL) 95 return false; 96 97 bool bResult = false; 98 bool dummy; 99 if (msgTo->FindBool(fName, &dummy) == B_OK) { 100 if (msgTo->ReplaceBool(fName, val) == B_OK) 101 bResult = true; 102 } else { 103 if (msgTo->AddBool(fName, val) == B_OK) 104 bResult = true; 105 } 106 107 return bResult; 108} 109 110bool 111LiveSetting::AddReplaceValue(BMessage *msgTo, int32 val) const 112{ 113 if (msgTo == NULL) 114 return false; 115 116 bool bResult = false; 117 int32 dummy; 118 if (msgTo->FindInt32(fName, &dummy) == B_OK) { 119 if (msgTo->ReplaceInt32(fName, val) == B_OK) 120 bResult = true; 121 } else { 122 if (msgTo->AddInt32(fName, val) == B_OK) 123 bResult = true; 124 } 125 126 return bResult; 127} 128 129bool 130LiveSetting::AddReplaceValue(BMessage *msgTo, const BString &val) const 131{ 132 if (msgTo == NULL) 133 return false; 134 135 bool bResult = false; 136 BString dummy; 137 if (msgTo->FindString(fName, &dummy) == B_OK) { 138 if (msgTo->ReplaceString(fName, val) == B_OK) 139 bResult = true; 140 } else { 141 if (msgTo->AddString(fName, val) == B_OK) 142 bResult = true; 143 } 144 145 return bResult; 146} 147 148bool 149LiveSetting::GetValue(BMessage *msgFrom, bool &val) const 150{ 151 if (fDataType != LIVE_SETTING_BOOL) 152 return false; 153 154 bool bResult = false; 155 if (msgFrom == NULL) { 156 val = fBoolVal; 157 bResult = true; 158 159 } else if (msgFrom->FindBool(fName, &val) == B_OK) 160 bResult = true; 161 162 return bResult; 163} 164 165bool 166LiveSetting::GetValue(BMessage *msgFrom, int32 &val) const 167{ 168 if (fDataType != LIVE_SETTING_INT32) 169 return false; 170 171 bool bResult = false; 172 if (msgFrom == NULL) { 173 val = fInt32Val; 174 bResult = true; 175 176 } else if (msgFrom->FindInt32(fName, &val) == B_OK) 177 bResult = true; 178 179 return bResult; 180} 181 182bool 183LiveSetting::GetValue(BMessage *msgFrom, BString &val) const 184{ 185 if (fDataType != LIVE_SETTING_STRING) 186 return false; 187 188 bool bResult = false; 189 if (msgFrom == NULL) { 190 val = fCharpVal; 191 bResult = true; 192 193 } else if (msgFrom->FindString(fName, &val) == B_OK) 194 bResult = true; 195 196 return bResult; 197} 198 199