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)
|
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[] fChannelMin;
|
||||||
delete[] fChannelMax;
|
delete[] fChannelMax;
|
||||||
delete[] fChannelValues;
|
delete[] fChannelValues;
|
||||||
|
delete fModificationMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -55,14 +94,14 @@ status_t
|
|||||||
BChannelControl::Archive(BMessage *message, bool deep) const
|
BChannelControl::Archive(BMessage *message, bool deep) const
|
||||||
{
|
{
|
||||||
status_t status = BControl::Archive(message, deep);
|
status_t status = BControl::Archive(message, deep);
|
||||||
|
|
||||||
status = message->AddInt32("be:_m_channel_count", fChannelCount);
|
|
||||||
if (status == B_OK)
|
if (status == B_OK)
|
||||||
message->AddInt32("be:_m_value_channel", fCurrentChannel);
|
status = message->AddInt32("be:_m_channel_count", fChannelCount);
|
||||||
if (status == B_OK)
|
if (status == B_OK)
|
||||||
message->AddString("be:_m_min_label", fMinLabel.String());
|
status = message->AddInt32("be:_m_value_channel", fCurrentChannel);
|
||||||
if (status == B_OK)
|
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
|
if (status == B_OK && fChannelValues != NULL
|
||||||
&& fChannelMax != NULL && fChannelMin != NULL) {
|
&& fChannelMax != NULL && fChannelMin != NULL) {
|
||||||
|
|||||||
@@ -100,8 +100,6 @@ BChannelSlider::~BChannelSlider()
|
|||||||
delete fLeftKnob;
|
delete fLeftKnob;
|
||||||
delete fMidKnob;
|
delete fMidKnob;
|
||||||
delete fRightKnob;
|
delete fRightKnob;
|
||||||
delete fBacking;
|
|
||||||
delete fBackingView;
|
|
||||||
delete fInitialValues;
|
delete fInitialValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,8 +371,12 @@ BHandler *
|
|||||||
BChannelSlider::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
|
BChannelSlider::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
|
||||||
int32 form, const char *property)
|
int32 form, const char *property)
|
||||||
{
|
{
|
||||||
// TODO: Implement
|
BHandler *target = this;
|
||||||
return NULL;
|
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