* Copyright 2015, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
#include "TeamSignalSettings.h"
static const char* skDefaultSignalFieldName = "signal:default_disposition";
static const char* skSignalNumberFieldName = "signal:number";
static const char* skSignalDispositionFieldName = "signal:disposition";
static const char* skSignalSettingName = "signal:setting";
TeamSignalSettings::TeamSignalSettings()
:
fValues()
{
}
TeamSignalSettings::~TeamSignalSettings()
{
}
TeamSignalSettings&
TeamSignalSettings::operator=(const TeamSignalSettings& other)
{
fValues = other.fValues;
return *this;
}
const char*
TeamSignalSettings::ID() const
{
return "Signals";
}
status_t
TeamSignalSettings::SetTo(const BMessage& archive)
{
try {
fValues = archive;
} catch (...) {
return B_NO_MEMORY;
}
return B_OK;
}
status_t
TeamSignalSettings::WriteTo(BMessage& archive) const
{
try {
archive = fValues;
} catch (...) {
return B_NO_MEMORY;
}
return B_OK;
}
void
TeamSignalSettings::Unset()
{
fValues.MakeEmpty();
}
void
TeamSignalSettings::SetDefaultSignalDisposition(int32 disposition)
{
fValues.SetInt32(skDefaultSignalFieldName, disposition);
}
int32
TeamSignalSettings::DefaultSignalDisposition() const
{
return fValues.GetInt32(skDefaultSignalFieldName,
SIGNAL_DISPOSITION_IGNORE);
}
int32
TeamSignalSettings::CountCustomSignalDispositions() const
{
type_code type;
int32 count = 0;
if (fValues.GetInfo(skSignalSettingName, &type, &count) == B_OK)
return count;
return 0;
}
status_t
TeamSignalSettings::AddCustomSignalDisposition(int32 signal, int32 disposition)
{
BMessage setting;
if (setting.AddInt32(skSignalNumberFieldName, signal) != B_OK
|| setting.AddInt32(skSignalDispositionFieldName, disposition) != B_OK
|| fValues.AddMessage(skSignalSettingName, &setting) != B_OK) {
return B_NO_MEMORY;
}
return B_OK;
}
status_t
TeamSignalSettings::RemoveCustomSignalDispositionAt(int32 index)
{
return fValues.RemoveData(skSignalSettingName, index);
}
status_t
TeamSignalSettings::GetCustomSignalDispositionAt(int32 index, int32& signal,
int32& disposition) const
{
BMessage setting;
status_t error = fValues.FindMessage(skSignalSettingName, index, &setting);
if (error != B_OK)
return error;
error = setting.FindInt32(skSignalNumberFieldName, &signal);
if (error != B_OK)
return error;
return setting.FindInt32(skSignalDispositionFieldName, &disposition);
}
TeamSignalSettings*
TeamSignalSettings::Clone() const
{
TeamSignalSettings* settings = new(std::nothrow)
TeamSignalSettings();
if (settings == NULL)
return NULL;
if (settings->SetTo(fValues) != B_OK) {
delete settings;
return NULL;
}
return settings;
}