Fixed a crash on exit (Attached views are deleted automatically), finished some missing stuff, corrected some issues.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11609 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -37,8 +37,46 @@ BChannelControl::BChannelControl(BRect frame, const char *name, const char *labe
|
||||
|
||||
|
||||
BChannelControl::BChannelControl(BMessage *archive)
|
||||
: BControl(archive)
|
||||
: BControl(archive),
|
||||
fChannelCount(0),
|
||||
fCurrentChannel(0),
|
||||
fChannelMin(NULL),
|
||||
fChannelMax(NULL),
|
||||
fChannelValues(NULL),
|
||||
fMultiLabels(NULL),
|
||||
fModificationMsg(NULL)
|
||||
{
|
||||
archive->FindInt32("be:_m_channel_count", &fChannelCount);
|
||||
archive->FindInt32("be:_m_value_channel", &fCurrentChannel);
|
||||
|
||||
if (fChannelCount > 0) {
|
||||
fChannelMin = new int32[fChannelCount];
|
||||
memset(fChannelMin, 0, sizeof(int32) * fChannelCount);
|
||||
|
||||
fChannelMax = new int32[fChannelCount];
|
||||
memset(fChannelMax, 100, sizeof(int32) * fChannelCount);
|
||||
|
||||
fChannelValues = new int32[fChannelCount];
|
||||
memset(fChannelValues, 0, sizeof(int32) * fChannelCount);
|
||||
|
||||
for (int32 c = 0; c < fChannelCount; c++) {
|
||||
archive->FindInt32("be:_m_channel_min", c, &fChannelMin[c]);
|
||||
archive->FindInt32("be:_m_channel_max", c, &fChannelMax[c]);
|
||||
archive->FindInt32("be:_m_channel_val", c, &fChannelValues[c]);
|
||||
}
|
||||
}
|
||||
|
||||
const char *label = NULL;
|
||||
if (archive->FindString("be:_m_min_*label", &label) == B_OK)
|
||||
fMinLabel = label;
|
||||
if (archive->FindString("be:_m_max_label", &label) == B_OK)
|
||||
fMaxLabel = label;
|
||||
|
||||
BMessage *modificationMessage = new BMessage;
|
||||
if (archive->FindMessage("_mod_msg", modificationMessage) == B_OK)
|
||||
fModificationMsg = modificationMessage;
|
||||
else
|
||||
delete modificationMessage;
|
||||
|
||||
}
|
||||
|
||||
@@ -48,6 +86,7 @@ BChannelControl::~BChannelControl()
|
||||
delete[] fChannelMin;
|
||||
delete[] fChannelMax;
|
||||
delete[] fChannelValues;
|
||||
delete fModificationMsg;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,14 +94,14 @@ status_t
|
||||
BChannelControl::Archive(BMessage *message, bool deep) const
|
||||
{
|
||||
status_t status = BControl::Archive(message, deep);
|
||||
|
||||
status = message->AddInt32("be:_m_channel_count", fChannelCount);
|
||||
if (status == B_OK)
|
||||
message->AddInt32("be:_m_value_channel", fCurrentChannel);
|
||||
status = message->AddInt32("be:_m_channel_count", fChannelCount);
|
||||
if (status == B_OK)
|
||||
message->AddString("be:_m_min_label", fMinLabel.String());
|
||||
status = message->AddInt32("be:_m_value_channel", fCurrentChannel);
|
||||
if (status == B_OK)
|
||||
message->AddString("be:_m_max_label", fMaxLabel.String());
|
||||
status = message->AddString("be:_m_min_label", fMinLabel.String());
|
||||
if (status == B_OK)
|
||||
status = message->AddString("be:_m_max_label", fMaxLabel.String());
|
||||
|
||||
if (status == B_OK && fChannelValues != NULL
|
||||
&& fChannelMax != NULL && fChannelMin != NULL) {
|
||||
|
||||
@@ -100,8 +100,6 @@ BChannelSlider::~BChannelSlider()
|
||||
delete fLeftKnob;
|
||||
delete fMidKnob;
|
||||
delete fRightKnob;
|
||||
delete fBacking;
|
||||
delete fBackingView;
|
||||
delete fInitialValues;
|
||||
}
|
||||
|
||||
@@ -373,8 +371,12 @@ BHandler *
|
||||
BChannelSlider::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
|
||||
int32 form, const char *property)
|
||||
{
|
||||
// TODO: Implement
|
||||
return NULL;
|
||||
BHandler *target = this;
|
||||
BPropertyInfo propertyInfo(sPropertyInfo);
|
||||
if (propertyInfo.FindMatch(msg, index, specifier, form, property) < B_OK)
|
||||
target = BChannelControl::ResolveSpecifier(msg, index, specifier, form, property);
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user