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