Extended the BBox test. One can now play with label and child view.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21361 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -8,15 +8,21 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <Box.h>
|
#include <Box.h>
|
||||||
|
#include <Button.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
|
|
||||||
|
#include "CheckBox.h"
|
||||||
#include "GroupView.h"
|
#include "GroupView.h"
|
||||||
#include "RadioButton.h"
|
#include "RadioButton.h"
|
||||||
|
#include "TestView.h"
|
||||||
|
|
||||||
|
|
||||||
// messages
|
// messages
|
||||||
enum {
|
enum {
|
||||||
MSG_BORDER_STYLE_CHANGED = 'bstc',
|
MSG_BORDER_STYLE_CHANGED = 'bstc',
|
||||||
|
MSG_LABEL_CHANGED = 'lbch',
|
||||||
|
MSG_LONG_LABEL_CHANGED = 'llch',
|
||||||
|
MSG_CHILD_CHANGED = 'chch'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -33,12 +39,31 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// LabelRadioButton
|
||||||
|
class BoxTest::LabelRadioButton : public LabeledRadioButton {
|
||||||
|
public:
|
||||||
|
LabelRadioButton(const char* label, const char* boxLabel,
|
||||||
|
bool labelView = false)
|
||||||
|
: LabeledRadioButton(label),
|
||||||
|
fLabel(boxLabel),
|
||||||
|
fLabelView(labelView)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* fLabel;
|
||||||
|
bool fLabelView;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
BoxTest::BoxTest()
|
BoxTest::BoxTest()
|
||||||
: Test("Box", NULL),
|
: Test("Box", NULL),
|
||||||
fBox(new BBox(BRect(0, 0, 9, 9), "test box", B_FOLLOW_NONE)),
|
fBox(new BBox("test box")),
|
||||||
fBorderStyleRadioGroup(NULL)
|
fChild(NULL),
|
||||||
// TODO: Layout-friendly constructor
|
fBorderStyleRadioGroup(NULL),
|
||||||
|
fLabelRadioGroup(NULL),
|
||||||
|
fLongLabelCheckBox(NULL),
|
||||||
|
fChildCheckBox(NULL)
|
||||||
{
|
{
|
||||||
SetView(fBox);
|
SetView(fBox);
|
||||||
}
|
}
|
||||||
@@ -48,6 +73,7 @@ BoxTest::BoxTest()
|
|||||||
BoxTest::~BoxTest()
|
BoxTest::~BoxTest()
|
||||||
{
|
{
|
||||||
delete fBorderStyleRadioGroup;
|
delete fBorderStyleRadioGroup;
|
||||||
|
delete fLabelRadioGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -67,6 +93,7 @@ BoxTest::ActivateTest(View* controls)
|
|||||||
controls->AddChild(group);
|
controls->AddChild(group);
|
||||||
|
|
||||||
// the radio button group for selecting the border style
|
// the radio button group for selecting the border style
|
||||||
|
|
||||||
fBorderStyleRadioGroup = new RadioButtonGroup(
|
fBorderStyleRadioGroup = new RadioButtonGroup(
|
||||||
new BMessage(MSG_BORDER_STYLE_CHANGED), this);
|
new BMessage(MSG_BORDER_STYLE_CHANGED), this);
|
||||||
|
|
||||||
@@ -89,6 +116,47 @@ BoxTest::ActivateTest(View* controls)
|
|||||||
// default to no border
|
// default to no border
|
||||||
fBorderStyleRadioGroup->SelectButton(0L);
|
fBorderStyleRadioGroup->SelectButton(0L);
|
||||||
|
|
||||||
|
// spacing
|
||||||
|
group->AddChild(new VStrut(10));
|
||||||
|
|
||||||
|
// the radio button group for selecting the label
|
||||||
|
|
||||||
|
fLabelRadioGroup = new RadioButtonGroup(new BMessage(MSG_LABEL_CHANGED),
|
||||||
|
this);
|
||||||
|
|
||||||
|
// no label
|
||||||
|
button = new LabelRadioButton("No label", NULL);
|
||||||
|
group->AddChild(button);
|
||||||
|
fLabelRadioGroup->AddButton(button->GetRadioButton());
|
||||||
|
|
||||||
|
// label string
|
||||||
|
button = new LabelRadioButton("Label string", "");
|
||||||
|
group->AddChild(button);
|
||||||
|
fLabelRadioGroup->AddButton(button->GetRadioButton());
|
||||||
|
|
||||||
|
// label view
|
||||||
|
button = new LabelRadioButton("Label view", NULL, true);
|
||||||
|
group->AddChild(button);
|
||||||
|
fLabelRadioGroup->AddButton(button->GetRadioButton());
|
||||||
|
|
||||||
|
// default to no border
|
||||||
|
fLabelRadioGroup->SelectButton(0L);
|
||||||
|
|
||||||
|
// spacing
|
||||||
|
group->AddChild(new VStrut(10));
|
||||||
|
|
||||||
|
// long label
|
||||||
|
fLongLabelCheckBox = new LabeledCheckBox("Long label",
|
||||||
|
new BMessage(MSG_LONG_LABEL_CHANGED), this);
|
||||||
|
group->AddChild(fLongLabelCheckBox);
|
||||||
|
|
||||||
|
// child
|
||||||
|
fChildCheckBox = new LabeledCheckBox("Child",
|
||||||
|
new BMessage(MSG_CHILD_CHANGED), this);
|
||||||
|
group->AddChild(fChildCheckBox);
|
||||||
|
|
||||||
|
|
||||||
|
// glue
|
||||||
group->AddChild(new Glue());
|
group->AddChild(new Glue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,6 +176,15 @@ BoxTest::MessageReceived(BMessage* message)
|
|||||||
case MSG_BORDER_STYLE_CHANGED:
|
case MSG_BORDER_STYLE_CHANGED:
|
||||||
_UpdateBorderStyle();
|
_UpdateBorderStyle();
|
||||||
break;
|
break;
|
||||||
|
case MSG_LABEL_CHANGED:
|
||||||
|
_UpdateLabel();
|
||||||
|
break;
|
||||||
|
case MSG_LONG_LABEL_CHANGED:
|
||||||
|
_UpdateLongLabel();
|
||||||
|
break;
|
||||||
|
case MSG_CHILD_CHANGED:
|
||||||
|
_UpdateChild();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Test::MessageReceived(message);
|
Test::MessageReceived(message);
|
||||||
break;
|
break;
|
||||||
@@ -132,3 +209,62 @@ BoxTest::_UpdateBorderStyle()
|
|||||||
fBox->SetBorder(button->fBorderStyle);
|
fBox->SetBorder(button->fBorderStyle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// _UpdateLabel
|
||||||
|
void
|
||||||
|
BoxTest::_UpdateLabel()
|
||||||
|
{
|
||||||
|
if (fLabelRadioGroup) {
|
||||||
|
// We need to get the parent of the actually selected button, since
|
||||||
|
// that is the labeled radio button we've derived our
|
||||||
|
// BorderStyleRadioButton from.
|
||||||
|
AbstractButton* selectedButton = fLabelRadioGroup->SelectedButton();
|
||||||
|
View* parent = (selectedButton ? selectedButton->Parent() : NULL);
|
||||||
|
LabelRadioButton* button = dynamic_cast<LabelRadioButton*>(parent);
|
||||||
|
if (button) {
|
||||||
|
if (button->fLabelView)
|
||||||
|
fBox->SetLabel(new BButton("", NULL));
|
||||||
|
else
|
||||||
|
fBox->SetLabel(button->fLabel);
|
||||||
|
|
||||||
|
_UpdateLongLabel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// _UpdateLongLabel
|
||||||
|
void
|
||||||
|
BoxTest::_UpdateLongLabel()
|
||||||
|
{
|
||||||
|
if (!fLongLabelCheckBox)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const char* label = (fLongLabelCheckBox->IsSelected()
|
||||||
|
? "Quite Long Label for a BBox"
|
||||||
|
: "Label");
|
||||||
|
|
||||||
|
if (BView* labelView = fBox->LabelView()) {
|
||||||
|
if (BButton* button = dynamic_cast<BButton*>(labelView))
|
||||||
|
button->SetLabel(label);
|
||||||
|
} else if (fBox->Label())
|
||||||
|
fBox->SetLabel(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// _UpdateChild
|
||||||
|
void
|
||||||
|
BoxTest::_UpdateChild()
|
||||||
|
{
|
||||||
|
if (!fChildCheckBox || fChildCheckBox->IsSelected() == (fChild != NULL))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (fChild) {
|
||||||
|
fBox->RemoveChild(fChild);
|
||||||
|
fChild = NULL;
|
||||||
|
} else {
|
||||||
|
fChild = new TestView(BSize(20, 10), BSize(350, 200), BSize(100, 70));
|
||||||
|
fBox->AddChild(fChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
|
|
||||||
class BBox;
|
class BBox;
|
||||||
|
class LabeledCheckBox;
|
||||||
class RadioButtonGroup;
|
class RadioButtonGroup;
|
||||||
|
|
||||||
|
|
||||||
@@ -25,12 +26,20 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void _UpdateBorderStyle();
|
void _UpdateBorderStyle();
|
||||||
|
void _UpdateLabel();
|
||||||
|
void _UpdateLongLabel();
|
||||||
|
void _UpdateChild();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class BorderStyleRadioButton;
|
class BorderStyleRadioButton;
|
||||||
|
class LabelRadioButton;
|
||||||
|
|
||||||
BBox* fBox;
|
BBox* fBox;
|
||||||
|
BView* fChild;
|
||||||
RadioButtonGroup* fBorderStyleRadioGroup;
|
RadioButtonGroup* fBorderStyleRadioGroup;
|
||||||
|
RadioButtonGroup* fLabelRadioGroup;
|
||||||
|
LabeledCheckBox* fLongLabelCheckBox;
|
||||||
|
LabeledCheckBox* fChildCheckBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user