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