1/*
2 * Copyright 2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6#include "MenuBarTest.h"
7
8#include <MenuBar.h>
9#include <MenuItem.h>
10#include <Message.h>
11
12#include "CheckBox.h"
13
14
15enum {
16	MSG_THIRD_ITEM			= '3rdi',
17	MSG_CHILD_MENU			= 'chmn',
18	MSG_CHANGE_ITEM_TEXT	= 'chit'
19};
20
21
22MenuBarTest::MenuBarTest()
23	: Test("MenuBar", NULL),
24	  fMenuBar(new BMenuBar("The Menu"))
25
26{
27	SetView(fMenuBar);
28
29	// add a few items
30	fMenuBar->AddItem(fFirstItem = new BMenuItem("Menu item 1", NULL));
31	fMenuBar->AddItem(new BMenuItem("Menu item 2", NULL));
32	fThirdItem = new BMenuItem("Menu item 3", NULL);
33	fChildMenu = new BMenu("Child menu");
34}
35
36
37Test*
38MenuBarTest::CreateTest()
39{
40	return new MenuBarTest;
41}
42
43
44// ActivateTest
45void
46MenuBarTest::ActivateTest(View* controls)
47{
48	GroupView* group = new GroupView(B_VERTICAL);
49	group->SetFrame(controls->Bounds());
50	group->SetSpacing(0, 8);
51	controls->AddChild(group);
52
53	// third item
54	fThirdItemCheckBox = new LabeledCheckBox("Third item",
55		new BMessage(MSG_THIRD_ITEM), this);
56	group->AddChild(fThirdItemCheckBox);
57
58	// child menu
59	fChildMenuCheckBox = new LabeledCheckBox("Child menu",
60		new BMessage(MSG_CHILD_MENU), this);
61	group->AddChild(fChildMenuCheckBox);
62
63	// long text
64	fLongTextCheckBox = new LabeledCheckBox("Long label text",
65		new BMessage(MSG_CHANGE_ITEM_TEXT), this);
66	group->AddChild(fLongTextCheckBox);
67
68	group->AddChild(new Glue());
69
70	UpdateThirdItem();
71	UpdateLongText();
72}
73
74
75// DectivateTest
76void
77MenuBarTest::DectivateTest()
78{
79}
80
81
82// MessageReceived
83void
84MenuBarTest::MessageReceived(BMessage* message)
85{
86	switch (message->what) {
87		case MSG_THIRD_ITEM:
88			UpdateThirdItem();
89			break;
90		case MSG_CHILD_MENU:
91			UpdateChildMenu();
92			break;
93		case MSG_CHANGE_ITEM_TEXT:
94			UpdateLongText();
95			break;
96		default:
97			Test::MessageReceived(message);
98			break;
99	}
100}
101
102
103// UpdateThirdItem
104void
105MenuBarTest::UpdateThirdItem()
106{
107	if (!fThirdItemCheckBox || !fMenuBar)
108		return;
109
110	if (fThirdItemCheckBox->IsSelected() == (fThirdItem->Menu() != NULL))
111		return;
112
113	if (fThirdItemCheckBox->IsSelected())
114		fMenuBar->AddItem(fThirdItem);
115	else
116		fMenuBar->RemoveItem(fThirdItem);
117}
118
119
120// UpdateChildMenu
121void
122MenuBarTest::UpdateChildMenu()
123{
124	if (!fChildMenuCheckBox || !fMenuBar)
125		return;
126
127	if (fChildMenuCheckBox->IsSelected() == (fChildMenu->Supermenu() != NULL))
128		return;
129
130	if (fChildMenuCheckBox->IsSelected())
131		fMenuBar->AddItem(fChildMenu);
132	else
133		fMenuBar->RemoveItem(fChildMenu);
134}
135
136
137// 	UpdateLongText
138void
139MenuBarTest::UpdateLongText()
140{
141	if (!fLongTextCheckBox || !fMenuBar)
142		return;
143
144	fFirstItem->SetLabel(fLongTextCheckBox->IsSelected()
145		? "Very long text for a menu item"
146		: "Menu item 1");
147}
148