]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/toolbar.h
added wxMenu::AppendSubMenu() to avoid having to specify a dummy id when adding a...
[wxWidgets.git] / include / wx / os2 / toolbar.h
index 12d177e51e18be785f9dc5f9294f322adc9f1134..24adde3e98f1d7ffe18230ab60686bb11cd018ed 100644 (file)
 #define _WX_TOOLBAR_H_
 
 #if wxUSE_TOOLBAR
+#include "wx/timer.h"
 #include "wx/tbarbase.h"
 
+#define ID_TOOLTIMER                100
+#define ID_TOOLEXPTIMER             101
+
 class WXDLLEXPORT wxToolBar: public wxToolBarBase
 {
 public:
@@ -22,16 +26,21 @@ public:
      * Public interface
      */
 
-    wxToolBar() { Init(); }
+    wxToolBar()
+    : m_vToolTimer(this, ID_TOOLTIMER)
+    , m_vToolExpTimer(this, ID_TOOLEXPTIMER)
+    { Init(); }
 
     inline wxToolBar( wxWindow*       pParent
                      ,wxWindowID      vId
                      ,const wxPoint&  rPos = wxDefaultPosition
                      ,const wxSize&   rSize = wxDefaultSize
-                     ,long            lStyle = wxNO_BORDER|wxTB_HORIZONTAL
+                     ,long            lStyle = wxNO_BORDER | wxTB_HORIZONTAL
                      ,const wxString& rName = wxToolBarNameStr
-                    )
+                    ) : m_vToolTimer(this, ID_TOOLTIMER)
+                      , m_vToolExpTimer(this, ID_TOOLEXPTIMER)
     {
+        Init();
         Create( pParent
                ,vId
                ,rPos
@@ -40,77 +49,171 @@ public:
                ,rName
               );
     }
+    virtual ~wxToolBar();
+
     bool Create( wxWindow*       pParent
                 ,wxWindowID      vId
                 ,const wxPoint&  rPos = wxDefaultPosition
                 ,const wxSize&   rSize = wxDefaultSize
-                ,long            lStyle = wxNO_BORDER|wxTB_HORIZONTAL
+                ,long            lStyle = wxNO_BORDER | wxTB_HORIZONTAL
                 ,const wxString& rName = wxToolBarNameStr
                );
 
-    virtual ~wxToolBar();
 
-    // override/implement base class virtuals
-    virtual wxToolBarToolBase* FindToolForPosition( wxCoord x
-                                                   ,wxCoord y
+    //
+    // Override/implement base class virtuals
+    //
+    virtual wxToolBarToolBase* FindToolForPosition( wxCoord vX
+                                                   ,wxCoord vY
                                                   ) const;
+    virtual bool               Realize(void);
+    virtual void               SetRows(int nRows);
+
+    //
+    // Special overrides for OS/2
+    //
+    virtual wxToolBarToolBase* InsertControl( size_t     nPos
+                                             ,wxControl* pControl
+                                            );
+    virtual wxToolBarToolBase* InsertSeparator(size_t nPos);
+    virtual wxToolBarToolBase* InsertTool( size_t          nPos
+                                          ,int             nId
+                                          ,const wxString& rsLabel
+                                          ,const wxBitmap& rBitmap
+                                          ,const wxBitmap& rBmpDisabled = wxNullBitmap
+                                          ,wxItemKind      eKind = wxITEM_NORMAL
+                                          ,const wxString& rsShortHelp = wxEmptyString
+                                          ,const wxString& rsLongHelp = wxEmptyString
+                                          ,wxObject*       pClientData = NULL
+                                         );
+    wxToolBarToolBase*         InsertTool( size_t          nPos
+                                          ,int             nId
+                                          ,const wxBitmap& rBitmap
+                                          ,const wxBitmap& rBmpDisabled = wxNullBitmap
+                                          ,bool            bToggle = FALSE
+                                          ,wxObject*       pClientData = NULL
+                                          ,const wxString& rsShortHelp = wxEmptyString
+                                          ,const wxString& rsLongHelp = wxEmptyString
+                                         )
+    {
+        return InsertTool( nPos
+                          ,nId
+                          ,wxEmptyString
+                          ,rBitmap
+                          ,rBmpDisabled
+                          ,bToggle ? wxITEM_CHECK : wxITEM_NORMAL
+                          ,rsShortHelp
+                          ,rsLongHelp
+                          ,pClientData
+                         );
+    }
+    virtual bool               DeleteTool(int nId);
+    virtual bool               DeleteToolByPos(size_t nPos);
 
-    // The post-tool-addition call
-    virtual bool Realize(void);
-
-    virtual void SetToolBitmapSize(const wxSize& rSize);
-    virtual wxSize GetToolSize(void) const;
-
-    virtual void SetRows(int nRows);
-
-    // IMPLEMENTATION
-    virtual bool OS2Command( WXUINT uParam
-                            ,WXWORD wId
-                           );
-    virtual bool OS2OnNotify( int       nCtrl
-                             ,WXLPARAM  lParam
-                             ,WXLPARAM* pResult
-                            );
-    void OnMouseEvent(wxMouseEvent& rEvent);
-    void OnSysColourChanged(wxSysColourChangedEvent& rEvent);
+    //
+    // Event handlers
+    //
+    void OnPaint(wxPaintEvent& event);
+    void OnSize(wxSizeEvent& event);
+    void OnMouseEvent(wxMouseEvent& event);
+    void OnKillFocus(wxFocusEvent& event);
 
 protected:
-    void Init(void);
-    // implement base class pure virtuals
-    virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
-    virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
-
-    virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable);
-    virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle);
-    virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
+    //
+    // Common part of all ctors
+    //
+    void Init();
+
+    //
+    // Implement base class pure virtuals
+    //
+    virtual wxToolBarToolBase* DoAddTool( int id
+                                         ,const wxString& label
+                                         ,const wxBitmap& bitmap
+                                         ,const wxBitmap& bmpDisabled
+                                         ,wxItemKind kind
+                                         ,const wxString& shortHelp = wxEmptyString
+                                         ,const wxString& longHelp = wxEmptyString
+                                         ,wxObject *clientData = NULL
+                                         ,wxCoord xPos = -1
+                                         ,wxCoord yPos = -1
+                                        );
+
+    virtual bool DoInsertTool( size_t             nPos
+                              ,wxToolBarToolBase* pTool
+                             );
+    virtual bool DoDeleteTool( size_t              nPos
+                              , wxToolBarToolBase* pTool
+                             );
+
+    virtual void DoEnableTool( wxToolBarToolBase* pTool
+                              ,bool               bEnable
+                             );
+    virtual void DoToggleTool( wxToolBarToolBase* pTool
+                              ,bool               bToggle
+                             );
+    virtual void DoSetToggle( wxToolBarToolBase* pTool
+                             ,bool               bToggle
+                            );
 
     virtual wxToolBarToolBase* CreateTool( int             vId
                                           ,const wxString& rsLabel
-                                          ,const wxBitmap& rBitmapNormal
-                                          ,const wxBitmap& rBitmapDisabled
-                                          ,wxItemKind      vKind
+                                          ,const wxBitmap& rBmpNormal
+                                          ,const wxBitmap& rBmpDisabled
+                                          ,wxItemKind      eKind
                                           ,wxObject*       pClientData
-                                          ,const wxString& rShortHelpString
-                                          ,const wxString& rLongHelpString
+                                          ,const wxString& rsShortHelp
+                                          ,const wxString& rsLongHelp
                                          );
     virtual wxToolBarToolBase* CreateTool(wxControl* pControl);
 
-    // should be called whenever the toolbar size changes
-    void UpdateSize(void);
-
-    // override WndProc to process WM_SIZE
-    virtual MRESULT OS2WindowProc( WXUINT   ulMsg
-                                  ,WXWPARAM wParam
-                                  ,WXLPARAM lParam
-                                 );
-
-    // the big bitmap containing all bitmaps of the toolbar buttons
-    WXHBITMAP                       m_hBitmap;
-
-    // the total number of toolbar elements
-    size_t                          m_nButtons;
+    //
+    // Helpers
+    //
+    void         DrawTool(wxToolBarToolBase *tool);
+    virtual void DrawTool( wxDC&              rDC
+                          ,wxToolBarToolBase* pTool
+                         );
+    virtual void SpringUpButton(int nIndex);
+
+    int                             m_nCurrentRowsOrColumns;
+    int                             m_nPressedTool;
+    int                             m_nCurrentTool;
+    wxCoord                         m_vLastX;
+    wxCoord                         m_vLastY;
+    wxCoord                         m_vMaxWidth;
+    wxCoord                         m_vMaxHeight;
+    wxCoord                         m_vXPos;
+    wxCoord                         m_vYPos;
+    wxCoord                         m_vTextX;
+    wxCoord                         m_vTextY;
 
 private:
+    void LowerTool( wxToolBarToolBase* pTool
+                   ,bool               bLower = TRUE
+                  );
+    void RaiseTool( wxToolBarToolBase* pTool
+                   ,bool               bRaise = TRUE
+                  );
+    void OnTimer(wxTimerEvent& rEvent);
+
+    static bool                     m_bInitialized;
+
+    wxTimer                         m_vToolTimer;
+    wxTimer                         m_vToolExpTimer;
+    wxToolTip*                      m_pToolTip;
+    wxCoord                         m_vXMouse;
+    wxCoord                         m_vYMouse;
+
+    //
+    // Virtual function hiding supression
+    virtual wxToolBarToolBase *InsertTool (size_t nPos, wxToolBarToolBase* pTool)
+    {
+        return( wxToolBarBase::InsertTool( nPos
+                                          ,pTool
+                                         ));
+    }
+
     DECLARE_EVENT_TABLE()
     DECLARE_DYNAMIC_CLASS(wxToolBar)
 };