1/* 2 * Copyright 2007, Haiku Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Axel Dörfler, axeld@pinc-software.de 7 */ 8 9 10#include <stdio.h> 11 12#include <Application.h> 13#include <Menu.h> 14#include <MenuBar.h> 15#include <MenuItem.h> 16#include <View.h> 17#include <Window.h> 18 19 20class MenuItem : public BMenuItem { 21 public: 22 MenuItem(const char* name); 23 virtual ~MenuItem(); 24 25 virtual void DrawContent(); 26}; 27 28 29MenuItem::MenuItem(const char* name) 30 : BMenuItem(name, NULL) 31{ 32} 33 34 35MenuItem::~MenuItem() 36{ 37} 38 39 40void 41MenuItem::DrawContent() 42{ 43 *(uint32*)0 = 0; 44} 45 46 47// #pragma mark - 48 49 50class Window : public BWindow { 51 public: 52 Window(); 53 virtual ~Window(); 54 55 virtual bool QuitRequested(); 56}; 57 58 59Window::Window() 60 : BWindow(BRect(100, 100, 400, 400), "MenuCrash-Test", 61 B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS) 62{ 63 BMenuBar* menuBar = new BMenuBar(Bounds(), "menu"); 64 AddChild(menuBar); 65 66 // add menu 67 68 BMenu* menu = new BMenu("File"); 69 BMenu* crashMenu = new BMenu("Crash"); 70 crashMenu->AddItem(new MenuItem("Crash")); 71 menu->AddItem(crashMenu); 72 73 menu->AddSeparatorItem(); 74 75 menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 76 'Q', B_COMMAND_KEY)); 77 menu->SetTargetForItems(this); 78 menuBar->AddItem(menu); 79} 80 81Window::~Window() 82{ 83} 84 85 86bool 87Window::QuitRequested() 88{ 89 be_app->PostMessage(B_QUIT_REQUESTED); 90 return true; 91} 92 93 94// #pragma mark - 95 96 97class Application : public BApplication { 98 public: 99 Application(); 100 101 virtual void ReadyToRun(void); 102}; 103 104 105Application::Application() 106 : BApplication("application/x-vnd.haiku-menu_crash") 107{ 108} 109 110 111void 112Application::ReadyToRun(void) 113{ 114 Window *window = new Window(); 115 window->Show(); 116} 117 118 119// #pragma mark - 120 121 122int 123main(int argc, char **argv) 124{ 125 Application app; 126 127 app.Run(); 128 return 0; 129} 130