- Add class TeamSignalSettings for storing signal disposition settings, and add instance to TeamSettings. - Adjust TeamDebugger to load signal settings.
157 lines
2.7 KiB
C++
157 lines
2.7 KiB
C++
/*
|
|
* Copyright 2015, Rene Gollent, [email protected].
|
|
* 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;
|
|
}
|