1/* 2 * Copyright 2015, Rene Gollent, rene@gollent.com. 3 * Distributed under the terms of the MIT License. 4 */ 5#include "TeamSignalSettings.h" 6 7 8static const char* skDefaultSignalFieldName = "signal:default_disposition"; 9static const char* skSignalNumberFieldName = "signal:number"; 10static const char* skSignalDispositionFieldName = "signal:disposition"; 11static const char* skSignalSettingName = "signal:setting"; 12 13 14TeamSignalSettings::TeamSignalSettings() 15 : 16 fValues() 17{ 18} 19 20 21TeamSignalSettings::~TeamSignalSettings() 22{ 23} 24 25 26TeamSignalSettings& 27TeamSignalSettings::operator=(const TeamSignalSettings& other) 28{ 29 fValues = other.fValues; 30 31 return *this; 32} 33 34 35const char* 36TeamSignalSettings::ID() const 37{ 38 return "Signals"; 39} 40 41 42status_t 43TeamSignalSettings::SetTo(const BMessage& archive) 44{ 45 try { 46 fValues = archive; 47 } catch (...) { 48 return B_NO_MEMORY; 49 } 50 51 return B_OK; 52} 53 54 55status_t 56TeamSignalSettings::WriteTo(BMessage& archive) const 57{ 58 try { 59 archive = fValues; 60 } catch (...) { 61 return B_NO_MEMORY; 62 } 63 64 return B_OK; 65} 66 67 68void 69TeamSignalSettings::Unset() 70{ 71 fValues.MakeEmpty(); 72} 73 74 75void 76TeamSignalSettings::SetDefaultSignalDisposition(int32 disposition) 77{ 78 fValues.SetInt32(skDefaultSignalFieldName, disposition); 79} 80 81 82int32 83TeamSignalSettings::DefaultSignalDisposition() const 84{ 85 return fValues.GetInt32(skDefaultSignalFieldName, 86 SIGNAL_DISPOSITION_IGNORE); 87} 88 89 90int32 91TeamSignalSettings::CountCustomSignalDispositions() const 92{ 93 type_code type; 94 int32 count = 0; 95 96 if (fValues.GetInfo(skSignalSettingName, &type, &count) == B_OK) 97 return count; 98 99 return 0; 100} 101 102 103status_t 104TeamSignalSettings::AddCustomSignalDisposition(int32 signal, int32 disposition) 105{ 106 BMessage setting; 107 if (setting.AddInt32(skSignalNumberFieldName, signal) != B_OK 108 || setting.AddInt32(skSignalDispositionFieldName, disposition) != B_OK 109 || fValues.AddMessage(skSignalSettingName, &setting) != B_OK) { 110 return B_NO_MEMORY; 111 } 112 113 return B_OK; 114} 115 116 117status_t 118TeamSignalSettings::RemoveCustomSignalDispositionAt(int32 index) 119{ 120 return fValues.RemoveData(skSignalSettingName, index); 121} 122 123 124status_t 125TeamSignalSettings::GetCustomSignalDispositionAt(int32 index, int32& signal, 126 int32& disposition) const 127{ 128 BMessage setting; 129 status_t error = fValues.FindMessage(skSignalSettingName, index, &setting); 130 if (error != B_OK) 131 return error; 132 133 error = setting.FindInt32(skSignalNumberFieldName, &signal); 134 if (error != B_OK) 135 return error; 136 137 return setting.FindInt32(skSignalDispositionFieldName, &disposition); 138} 139 140 141TeamSignalSettings* 142TeamSignalSettings::Clone() const 143{ 144 TeamSignalSettings* settings = new(std::nothrow) 145 TeamSignalSettings(); 146 147 if (settings == NULL) 148 return NULL; 149 150 if (settings->SetTo(fValues) != B_OK) { 151 delete settings; 152 return NULL; 153 } 154 155 return settings; 156} 157