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