/* * Copyright 2003-2015, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _MENU_BAR_H #define _MENU_BAR_H #include #include #include enum menu_bar_border { B_BORDER_FRAME, B_BORDER_CONTENTS, B_BORDER_EACH_ITEM }; class BMenu; class BWindow; class BMenuItem; class BMenuField; class BMenuBar : public BMenu { public: BMenuBar(BRect frame, const char* name, uint32 resizingMode = B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP, menu_layout layout = B_ITEMS_IN_ROW, bool resizeToFit = true); BMenuBar(const char* name, menu_layout layout = B_ITEMS_IN_ROW, uint32 flags = B_WILL_DRAW | B_FRAME_EVENTS); BMenuBar(BMessage* archive); virtual ~BMenuBar(); static BArchivable* Instantiate(BMessage* archive); virtual status_t Archive(BMessage* archive, bool deep = true) const; virtual void AttachedToWindow(); virtual void DetachedFromWindow(); virtual void AllAttached(); virtual void AllDetached(); virtual void WindowActivated(bool state); virtual void MakeFocus(bool state = true); virtual void ResizeToPreferred(); virtual void GetPreferredSize(float* _width, float* _height); virtual BSize MinSize(); virtual BSize MaxSize(); virtual BSize PreferredSize(); virtual void FrameMoved(BPoint newPosition); virtual void FrameResized(float newWidth, float newHeight); virtual void Show(); virtual void Hide(); virtual void Draw(BRect updateRect); virtual void MessageReceived(BMessage *message); virtual void MouseDown(BPoint where); virtual void MouseUp(BPoint where); virtual BHandler* ResolveSpecifier(BMessage* message, int32 index, BMessage* specifier, int32 form, const char* property); virtual status_t GetSupportedSuites(BMessage* data); virtual void SetBorder(menu_bar_border border); menu_bar_border Border() const; void SetBorders(uint32 borders); uint32 Borders() const; virtual status_t Perform(perform_code code, void* data); private: friend class BWindow; friend class BMenuField; friend class BMenu; virtual void _ReservedMenuBar1(); virtual void _ReservedMenuBar2(); virtual void _ReservedMenuBar3(); virtual void _ReservedMenuBar4(); BMenuBar &operator=(const BMenuBar &); // TODO: Tracker uses this function so we can't change // its signature without breaking it void StartMenuBar(int32 menuIndex, bool sticky = true, bool showMenu = false, BRect* special_rect = NULL); static int32 _TrackTask(void *arg); BMenuItem* _Track(int32 *action, int32 startIndex = -1, bool showMenu = false); void _StealFocus(); void _RestoreFocus(); void _InitData(menu_layout layout); menu_bar_border fBorder; thread_id fTrackingPID; int32 fPrevFocusToken; sem_id fMenuSem; BRect* fLastBounds; uint32 fBorders; uint32 _reserved[1]; bool fTracking; }; #endif /* _MENU_BAR_H */