1795a2888SStefano Ceccherini/*
229c26d1eSStephan Aßmus * Copyright 2007-2009, Haiku, Inc. All rights reserved.
3795a2888SStefano Ceccherini * Distributed under the terms of the MIT License.
4795a2888SStefano Ceccherini */
5d734a8ceSbeveloper#ifndef _POP_UP_MENU_H
6d734a8ceSbeveloper#define _POP_UP_MENU_H
7d734a8ceSbeveloper
8b6c3ddcfSAxel Dörfler
9d734a8ceSbeveloper#include <Menu.h>
10d734a8ceSbeveloper
11b6c3ddcfSAxel Dörfler
12795a2888SStefano Ceccheriniclass BPopUpMenu : public BMenu {
13b6c3ddcfSAxel Dörflerpublic:
146f33360fSJohn Scipione								BPopUpMenu(const char* name,
1529c26d1eSStephan Aßmus									bool radioMode = true,
166f33360fSJohn Scipione									bool labelFromMarked = true,
1729c26d1eSStephan Aßmus									menu_layout layout = B_ITEMS_IN_COLUMN);
1829c26d1eSStephan Aßmus								BPopUpMenu(BMessage* data);
1929c26d1eSStephan Aßmus	virtual						~BPopUpMenu();
2029c26d1eSStephan Aßmus
2129c26d1eSStephan Aßmus	virtual	status_t			Archive(BMessage* archive,
2229c26d1eSStephan Aßmus									bool deep = true) const;
2329c26d1eSStephan Aßmus	static	BArchivable*		Instantiate(BMessage* archive);
2429c26d1eSStephan Aßmus
2529c26d1eSStephan Aßmus			BMenuItem*			Go(BPoint where, bool autoInvoke = false,
2629c26d1eSStephan Aßmus									bool keepOpen = false, bool async = false);
2729c26d1eSStephan Aßmus			BMenuItem*			Go(BPoint where, bool autoInvoke,
2829c26d1eSStephan Aßmus									bool keepOpen, BRect openRect,
2929c26d1eSStephan Aßmus									bool async = false);
3029c26d1eSStephan Aßmus
3129c26d1eSStephan Aßmus	virtual void				MessageReceived(BMessage* message);
3229c26d1eSStephan Aßmus	virtual	void				MouseDown(BPoint where);
3329c26d1eSStephan Aßmus	virtual	void				MouseUp(BPoint where);
3429c26d1eSStephan Aßmus	virtual	void				MouseMoved(BPoint where, uint32 transit,
3529c26d1eSStephan Aßmus									const BMessage* dragMessage);
3629c26d1eSStephan Aßmus	virtual	void				AttachedToWindow();
3729c26d1eSStephan Aßmus	virtual	void				DetachedFromWindow();
3829c26d1eSStephan Aßmus	virtual	void				FrameMoved(BPoint newPosition);
3929c26d1eSStephan Aßmus	virtual	void				FrameResized(float newWidth, float newHeight);
4029c26d1eSStephan Aßmus
4129c26d1eSStephan Aßmus	virtual BHandler*			ResolveSpecifier(BMessage* message,
4229c26d1eSStephan Aßmus									int32 index, BMessage* specifier,
4329c26d1eSStephan Aßmus									int32 form, const char* property);
4429c26d1eSStephan Aßmus	virtual status_t			GetSupportedSuites(BMessage* data);
4529c26d1eSStephan Aßmus
4601b1b8bdSJohn Scipione	virtual status_t			Perform(perform_code code, void* _data);
4729c26d1eSStephan Aßmus
4829c26d1eSStephan Aßmus	virtual void				ResizeToPreferred();
4929c26d1eSStephan Aßmus	virtual void				GetPreferredSize(float* _width,
5029c26d1eSStephan Aßmus									float* _height);
5129c26d1eSStephan Aßmus	virtual void				MakeFocus(bool state = true);
5229c26d1eSStephan Aßmus	virtual void				AllAttached();
5329c26d1eSStephan Aßmus	virtual void				AllDetached();
5429c26d1eSStephan Aßmus
556f33360fSJohn Scipione			void				SetAsyncAutoDestruct(bool on);
5629c26d1eSStephan Aßmus			bool				AsyncAutoDestruct() const;
57b6c3ddcfSAxel Dörfler
58b6c3ddcfSAxel Dörflerprotected:
5929c26d1eSStephan Aßmus	virtual	BPoint				ScreenLocation();
60b6c3ddcfSAxel Dörfler
6129c26d1eSStephan Aßmus	virtual	void				_ReservedPopUpMenu1();
6229c26d1eSStephan Aßmus	virtual	void				_ReservedPopUpMenu2();
6329c26d1eSStephan Aßmus	virtual	void				_ReservedPopUpMenu3();
64b6c3ddcfSAxel Dörfler
6529c26d1eSStephan Aßmus			BPopUpMenu&			operator=(const BPopUpMenu& other);
66b6c3ddcfSAxel Dörfler
67b6c3ddcfSAxel Dörflerprivate:
6829c26d1eSStephan Aßmus			BMenuItem*			_Go(BPoint where, bool autoInvoke,
6901b1b8bdSJohn Scipione									bool startOpened, BRect* _specialRect,
7029c26d1eSStephan Aßmus									bool async);
7129c26d1eSStephan Aßmus			BMenuItem*			_StartTrack(BPoint where, bool autoInvoke,
7201b1b8bdSJohn Scipione									bool startOpened, BRect* _specialRect);
7301b1b8bdSJohn Scipione			BMenuItem*			_WaitMenu(void* _data);
7429c26d1eSStephan Aßmus
7501b1b8bdSJohn Scipione	static	int32				_thread_entry(void* menuData);
7629c26d1eSStephan Aßmus
7729c26d1eSStephan Aßmusprivate:
7829c26d1eSStephan Aßmus			BPoint				fWhere;
7929c26d1eSStephan Aßmus			bool				fUseWhere;
8029c26d1eSStephan Aßmus			bool				fAutoDestruct;
8129c26d1eSStephan Aßmus
8229c26d1eSStephan Aßmus			bool				_fUnusedBool1;
8329c26d1eSStephan Aßmus			bool				_fUnusedBool2;
8429c26d1eSStephan Aßmus
8529c26d1eSStephan Aßmus			thread_id			fTrackThread;
8629c26d1eSStephan Aßmus
8729c26d1eSStephan Aßmus			uint32				_reserved[3];
88d734a8ceSbeveloper};
89d734a8ceSbeveloper
9029c26d1eSStephan Aßmus#endif // _POP_UP_MENU_H
91