xref: /haiku/headers/os/interface/PopUpMenu.h (revision 0562493379cd52eb7103531f895f10bb8e77c085)
1 /*
2  * Copyright 2007-2008, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _POP_UP_MENU_H
6 #define _POP_UP_MENU_H
7 
8 
9 #include <BeBuild.h>
10 #include <Menu.h>
11 
12 
13 class BPopUpMenu : public BMenu {
14 public:
15 						BPopUpMenu(const char* title, bool radioMode = true,
16 							bool autoRename = true,
17 							menu_layout layout = B_ITEMS_IN_COLUMN);
18 						BPopUpMenu(BMessage* data);
19 	virtual				~BPopUpMenu();
20 
21 	virtual status_t	Archive(BMessage* data, bool deep = true) const;
22 	static BArchivable*	Instantiate(BMessage* data);
23 
24 			BMenuItem*	Go(BPoint where, bool autoInvoke = false,
25 							bool keepOpen = false, bool async = false);
26 			BMenuItem*	Go(BPoint where, bool autoInvoke, bool keepOpen,
27 							BRect openRect, bool async = false);
28 
29 	virtual void		MessageReceived(BMessage* message);
30 	virtual	void		MouseDown(BPoint point);
31 	virtual	void		MouseUp(BPoint point);
32 	virtual	void		MouseMoved(BPoint point, uint32 code,
33 							const BMessage* message);
34 	virtual	void		AttachedToWindow();
35 	virtual	void		DetachedFromWindow();
36 	virtual	void		FrameMoved(BPoint newPosition);
37 	virtual	void		FrameResized(float newWidth, float newHeight);
38 
39 	virtual BHandler*	ResolveSpecifier(BMessage* message, int32 index,
40 							BMessage* specifier, int32 form,
41 							const char* property);
42 	virtual status_t	GetSupportedSuites(BMessage* data);
43 
44 	virtual status_t	Perform(perform_code code, void* arg);
45 
46 	virtual void		ResizeToPreferred();
47 	virtual void		GetPreferredSize(float* _width, float* _height);
48 	virtual void		MakeFocus(bool state = true);
49 	virtual void		AllAttached();
50 	virtual void		AllDetached();
51 
52 			void		SetAsyncAutoDestruct(bool state);
53 			bool		AsyncAutoDestruct() const;
54 
55 protected:
56 	virtual	BPoint		ScreenLocation();
57 
58 	virtual	void		_ReservedPopUpMenu1();
59 	virtual	void		_ReservedPopUpMenu2();
60 	virtual	void		_ReservedPopUpMenu3();
61 
62 			BPopUpMenu&	operator=(const BPopUpMenu& other);
63 
64 private:
65 			BMenuItem*	_Go(BPoint where, bool autoInvoke, bool startOpened,
66 							BRect* specialRect, bool async);
67 			BMenuItem*	_StartTrack(BPoint where, bool autoInvoke,
68 							bool startOpened, BRect* specialRect);
69 			BMenuItem*	_WaitMenu(void* data);
70 
71 	static	int32		_thread_entry(void* data);
72 
73 	BPoint				fWhere;
74 	bool				fUseWhere;
75 	bool				fAutoDestruct;
76 	bool				_fUnusedBool1;
77 	bool				_fUnusedBool2;
78 	thread_id			fTrackThread;
79 	uint32				_reserved[3];
80 };
81 
82 #endif	// _POP_UP_MENU_H
83