⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu_window.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: menu_window.hpp,v $ * PRODUCTION Revision 1000.0  2004/06/01 19:56:37  gouriano * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.5 * PRODUCTION * =========================================================================== */#ifndef GUI_WIDGETS_FL___MENU_WINDOW__HPP#define GUI_WIDGETS_FL___MENU_WINDOW__HPP/*  $Id: menu_window.hpp,v 1000.0 2004/06/01 19:56:37 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Andrey Yazhuk * *//// @file menu.hpp #include <corelib/ncbistd.hpp>#include <corelib/ncbi_tree.hpp>#include <gui/utils/command.hpp>#include <gui/utils/gui_event.hpp>#include <gui/widgets/fl/rect.hpp>#include <gui/widgets/fl/menu_item.hpp>#include <gui/widgets/fl/resource_manager.hpp>#include <gui/widgets/fl/tooltip.hpp>#include <gui/widgets/fl/fltk_timer.hpp>#include <FL/Fl_Menu_.H>#include <FL/Fl_Menu_Item.H>#include <FL/Fl_Double_Window.H>#include <FL/Fl_Image.H>/** @addtogroup GUI_FltkWidgets * * @{ */BEGIN_NCBI_SCOPE//////////////////////////////////////////////////////////////////////////////////class NCBI_GUIWIDGETS_FL_EXPORT IMenuHintListener{public:    virtual ~IMenuHintListener()    {};    virtual void    OnHint(const string& hint) = 0;};////////////////////////////////////////////////////////////////////////////////// class CMenu - base class for all menus////// Access key is underlined letter in the menu item label. When a menu is active,/// the user can select a menu item by pressing the key that corresponds to the /// item's underlined letter. /// Accelerator is a combination of key with a number of modifiers corresponding /// to a command. Menu shows accelerator labels next to corresponding command items.///class NCBI_GUIWIDGETS_FL_EXPORT CMenu : public IMenu{public:    enum    EColorType  {        eBack = 0,        eFocusedBack,        eCheckedBack,        ePushedBack,        ePopupBack,        eFrame,        eText,        eDisabledText,        eFocusedDisabledText,        ePushedText,        eFocusedFrame,        eIconArea,        eBorder,        eLast    };    /// CProperties holds common properties for all CMenu derived classes;    class CProperties    {        public:        CProperties(void);        inline  Fl_Color    GetColor(EColorType type)   const   {   return m_Colors[type];  }     public:        int m_FontType;        int m_FontSize;            Fl_Color    m_Colors[eLast];    };public:    CMenu(void);    virtual ~CMenu(void);    static  CRef<CResourceManager>      GetResourceManager(void);    static  void    SetResourceManager(CRef<CResourceManager> manager);        static  void    SetCmdHint(TCmdID cmd, const string& hint);    static  string  GetCmdHint(TCmdID cmd);    /// @name IMenu* implementation    /// @{    virtual void    SetCmdTarget(CCommandTarget* target);    virtual CCommandTarget*    GetCmdTarget(void);    /// @}    virtual void    SetItemImageSize(int size);    virtual void    SetItems(const SMenuItemRec* items);    virtual void    SetItems(CMenuItem* root_item); // takes ownership of the given structure    virtual void    SetHintListener(IMenuHintListener* listener);    virtual IMenuHintListener*  GetHintListener();        virtual CPoint  GetPreferredSize(void) const;    virtual void    SetSelected(CMenuItem* item);        CMenuItem*      GetRootItem(void);    int             GetBorder(void) const;    /// returns pointer to widget hosting CMenu instance    virtual Fl_Widget&        GetWidget(void) = 0;    virtual const Fl_Widget&  GetWidget(void) const = 0;        bool    x_IsSubMenuPushed() const   {   return m_PushedItem  && m_PushedItem->IsSubmenu();  }    bool    x_IsItemPushed() const   {   return m_PushedItem  && m_PushedItem->IsItem();  }protected:    struct  SItemEntry      {        CMenuItem*  m_Item;        CFLTKImageHandle    m_hIcon;        int         m_Size;        string      m_AccelLabel; // symbolic representation of accelerator    };    protected:        virtual bool    x_IsKeyActivated() const;    virtual void    x_SetItems(CMenuItem* root_item, bool take_ownership);    virtual void    x_Clear(void);    virtual void    x_Layout(void);    virtual void    x_UpdateItems(void);        virtual void    x_Draw(int x, int y);    virtual void    x_DrawItems(int x, int y);    virtual void    x_ExecuteCommand(const CMenuItem& item);        virtual bool    x_IsHorizontal(void)  const = 0;        virtual void    x_MeasureItem(const SItemEntry& entry, int& text_w) const;    virtual void    x_DrawItem(SItemEntry& entry, int x, int y, int w, int h);    virtual void    x_DrawItemText(const SItemEntry& entry, int x, int y, int w, int h);    virtual void    x_DrawItemIcon(SItemEntry& entry, int x, int y, Fl_Color back_color);    CMenuItem*      x_HitTest(int x, int y);    // returns rectangle used to position submenu    virtual CRect   x_GetPopupItemRect(const CMenuItem& item);    protected:      typedef vector<SItemEntry>      TEntries;    typedef map<char, CMenuItem*>   TAccessKeyToItemMap;     typedef map<TCmdID, string>     TCmdToHintMap;        static  CProperties         sm_Props; // common properties for all menus    static  CRef<CResourceManager>   sm_ResManager; // singleton Resource Manager    static  TCmdToHintMap       sm_CmdToHint;          CMenuItem*  m_RootItem;    bool        m_bOwnItems;  /// if "true" CMenu does not assume ownership of m_RootItem        CCommandTarget*     m_CmdTarget; /// root command target    IMenuHintListener*   m_Listener;    TEntries            m_Entries;  /// menu item entires    TAccessKeyToItemMap m_AccessKeyToItem; /// access key table        int     m_Width;  // total width including borders    int     m_Height; // total height including borders     int     m_Border; // width(height) of the border around menu items    int     m_IconSize;    int     m_MaxLabelW;    EColorType  m_BackColor;        CMenuItem*  m_Selected; // selected (focused) item    CMenuItem*  m_PushedItem; // item pushed by mouse or keyboard    bool        m_bKeyActivated; // menu was activated using keyboard        CFLTKImageHandle    m_hCheckIcon;    CFLTKImageHandle    m_hRadioIcon;};////////////////////////////////////////////////////////////////////////////////// CMenuCmdUIclass NCBI_GUIWIDGETS_FL_EXPORT CMenuCmdUI : public ICmdUI{public:    CMenuCmdUI(CMenuItem& item);    /// @name ICmdUI implementation    /// @{    virtual TCmdID  GetCommand() const;    virtual void    Enable(bool en);    virtual void    SetCheck(bool set);    virtual void    SetRadio(bool set);    virtual void    SetLabel(const string& label);    /// @}protected:    CMenuItem& m_Item;};////////////////////////////////////////////////////////////////////////////////// CPopupMenu1typedef Fl_Double_Window    TPopupMenuParent;class  NCBI_GUIWIDGETS_FL_EXPORT CPopupMenu1 :  public TPopupMenuParent,                                                public CMenu,                                                public ITimerListener {        friend class CMenuBar1;public:        CPopupMenu1(int x, int y, CMenuItem* root_item, CCommandTarget* target = NULL,                IMenuHintListener* listener = NULL);    CPopupMenu1(int x, int y, const SMenuItemRec* items, CCommandTarget* target = NULL,                IMenuHintListener* listener = NULL);protected:    /// Creates a child popup menu    CPopupMenu1(int x, int y, int left, int top, CMenuItem* root_item,                CCommandTarget* target, IMenuHintListener* listener);        /// Creates root popup menu stub for a menubar    CPopupMenu1(CMenuBar1& menubar, CMenuItem* root_item, CMenuItem* sel_item,                IMenuHintListener* listener);public:            virtual void    Popup(void); /// shows popup menu    /// @name FLTK overridables    /// @{    virtual void    show(void);    virtual void    draw(void);    virtual int     handle(int event);    /// @}        virtual void    OnTimeout(int timer_id);    virtual Fl_Widget&        GetWidget(void);    virtual const Fl_Widget&  GetWidget(void) const;protected:    virtual void    x_Init(int x, int y, int left, int top, CMenuItem* root_item,                           CCommandTarget* target, IMenuHintListener* listener, bool root_popup);    virtual bool    x_IsHorizontal() const;       virtual void    SetSelected(CMenuItem* item);    virtual CRect   x_GetPopupItemRect(const CMenuItem& item);    void    x_CollapseToCurrent(void);    void    x_ShowCurrItemSubmenu(bool b_select);    void    x_TogglePushItem();        int     x_HandleKeyboard(void);    int     x_HandleShortcuts(void);    void    x_OnLeftPressed(void);    void    x_OnRightPressed(void);    void    x_SelectNextItem(void);    void    x_SelectPrevItem(void);    void    x_SelectTopItem(void);    void    x_SelectBottomItem(void);        void    x_CloseItemSubmenu(void);    void    x_SetExecuteCommand(const CMenuItem& item);    void    x_UpdateListener();        void    x_AdjustRectangle(void); // adjust window size and position    bool    x_IsMenuBar() const {   return m_MenuBar != NULL;   }protected:    int     m_Left;    int     m_Top;    CMenuBar1*  m_MenuBar;    bool        m_bSkipFirstRelease;    TCmdID      m_Cmd; // choosen command    CFLTKTimer  m_Timer;    CGUIEvent   m_Event;protected:    enum    EState{         eIdle,         eTrack, // track item, do not expand submenus        eTrackSubmenus, // track item, show/hide submenus        eExpand, // selected item        eHide, // hide the last popup                eMenuPush, // push on submenu        ePush,     // push on command item                 eDone       };    typedef vector<CPopupMenu1*> TPopupVector;    static  TPopupVector    sm_Popups;    static  CMenuItem*      sm_CurrItem;    static  CPopupMenu1*    sm_CurrPopup;    static  EState          sm_State;    static  bool            sm_bMenubar;    };////////////////////////////////////////////////////////////////////////////////// CMenuBar1class NCBI_GUIWIDGETS_FL_EXPORT CMenuBar1 :         public Fl_Widget,         public CMenu,        public ITooltipClient        {    friend class CPopupMenu1;public:    CMenuBar1(int x, int y, int w, int h);    virtual void    EnableTooltips(bool b_en);    // update items state    virtual void    UpdateItems()   {   x_UpdateItems();    }    virtual void    Activate();    /// @name FLTK overridables    /// @{    virtual void    draw(void);    virtual int     handle(int event);    /// @}        CRect   GetPopupRect() const;    /// @name ITooltipClient implementation    /// @{    virtual bool    TC_NeedTooltip(int x, int y);      virtual string  TC_GetTooltip(int& x, int& y, int& w, int& h);    /// @}    virtual Fl_Widget&        GetWidget(void);    virtual const Fl_Widget&  GetWidget(void) const;protected:    virtual void    x_Draw(int x, int y);    virtual int     x_Handle(int event);        int     x_HandleShortcuts(void);    void    x_ShowSubMenu(void);    virtual bool    x_IsHorizontal() const;       virtual string  x_GetTooltip(const CMenuItem& item) const;protected:    CTooltip    m_Tooltip;    CMenuItem*  m_TooltipItem;    };END_NCBI_SCOPE/* @} *//* * =========================================================================== * $Log: menu_window.hpp,v $ * Revision 1000.0  2004/06/01 19:56:37  gouriano * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.5 * * Revision 1.5  2004/05/13 17:29:30  yazhuk * Added support for accelerators, keyboard activated menus * * Revision 1.4  2004/05/11 18:55:14  dicuccio * Added doxygen modules info * * Revision 1.3  2004/05/07 14:19:04  yazhuk * Added UpdateItems() * * Revision 1.2  2004/05/03 19:47:27  yazhuk * Refactoring; support for command updates * * Revision 1.1  2004/04/22 16:53:18  yazhuk * Initial revision: menu_window.hpp * * =========================================================================== */#endif  // GUI_WIDGETS_FL___MENU_WINDOW__HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -