]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/toolbar.h
added wxXmlNode::InsertChildAfter and use it for (much) faster XML parsing (based...
[wxWidgets.git] / include / wx / os2 / toolbar.h
index 6fff034fd2b44de95d60d0d5d87e5e525f4221ff..ab156e37f11e123402b2d8943f92bd1abfab0550 100644 (file)
 #define _WX_TOOLBAR_H_
 
 #if wxUSE_TOOLBAR
+#include "wx/timer.h"
 #include "wx/tbarbase.h"
 
-WXDLLEXPORT_DATA(extern const wxChar*) wxToolBarNameStr;
+#define ID_TOOLTIMER                100
+#define ID_TOOLEXPTIMER             101
 
-class WXDLLEXPORT wxToolBar: public wxToolBarBase
+class WXDLLIMPEXP_CORE wxToolBar: public wxToolBarBase
 {
-  DECLARE_DYNAMIC_CLASS(wxToolBar)
- public:
-  /*
-   * Public interface
-   */
-
-  wxToolBar();
-
-  inline wxToolBar(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
-            long style = wxNO_BORDER|wxTB_HORIZONTAL,
-            const wxString& name = wxToolBarNameStr)
-  {
-    Create(parent, id, pos, size, style, name);
-  }
-  ~wxToolBar();
-
-  bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
-            long style = wxNO_BORDER|wxTB_HORIZONTAL,
-            const wxString& name = wxToolBarNameStr);
-
-  // Call default behaviour
-  void OnMouseEvent(wxMouseEvent& event);
-
-  // If pushedBitmap is NULL, a reversed version of bitmap is
-  // created and used as the pushed/toggled image.
-  // If toggle is TRUE, the button toggles between the two states.
-  wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap,
-               bool toggle = FALSE, long xPos = -1, long yPos = -1, wxObject *clientData = NULL,
-               const wxString& helpString1 = "", const wxString& helpString2 = "");
-  //Virtual function hiding suppression
-  inline wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap,
-                                bool toggle = FALSE, wxCoord xPos = -1, wxCoord yPos = -1, wxObject *clientData = NULL,
-                                const wxString& helpString1 = "", const wxString& helpString2 = "")
-  { return(AddTool(toolIndex, bitmap, pushedBitmap, toggle, (long)xPos, (long)yPos, clientData, helpString1, helpString2)); }
-
-  // Set default bitmap size
-  void SetToolBitmapSize(const wxSize& size);
-  void EnableTool(int toolIndex, bool enable); // additional drawing on enabling
-  void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on
-  void ClearTools();
-
-  // The button size is bigger than the bitmap size
-  wxSize GetToolSize() const;
-
-  wxSize GetMaxSize() const;
-
-  virtual bool GetToolState(int toolIndex) const;
-
-  // Add all the buttons
-  virtual bool CreateTools();
-  virtual void SetRows(int nRows);
-  virtual void LayoutButtons() {}
-
-  // The post-tool-addition call
-  bool Realize() { return CreateTools(); };
-
-  // IMPLEMENTATION
-  virtual bool OS2Command(WXUINT param, WXWORD id);
-  virtual bool OS2OnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
-
-  // Responds to colour changes
-  void OnSysColourChanged(wxSysColourChangedEvent& event);
+public:
+    /*
+     * Public interface
+     */
+
+    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
+                     ,const wxString& rName = wxToolBarNameStr
+                    ) : m_vToolTimer(this, ID_TOOLTIMER)
+                      , m_vToolExpTimer(this, ID_TOOLEXPTIMER)
+    {
+        Init();
+        Create( pParent
+               ,vId
+               ,rPos
+               ,rSize
+               ,lStyle
+               ,rName
+              );
+    }
+    virtual ~wxToolBar();
+
+    bool Create( wxWindow*       pParent
+                ,wxWindowID      vId
+                ,const wxPoint&  rPos = wxDefaultPosition
+                ,const wxSize&   rSize = wxDefaultSize
+                ,long            lStyle = wxNO_BORDER | wxTB_HORIZONTAL
+                ,const wxString& rName = wxToolBarNameStr
+               );
+
+
+    //
+    // 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);
+
+    //
+    // Event handlers
+    //
+    void OnPaint(wxPaintEvent& event);
+    void OnSize(wxSizeEvent& event);
+    void OnMouseEvent(wxMouseEvent& event);
+    void OnKillFocus(wxFocusEvent& event);
 
 protected:
-  WXHBITMAP         m_hBitmap;
-
-DECLARE_EVENT_TABLE()
+    //
+    // 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& rBmpNormal
+                                          ,const wxBitmap& rBmpDisabled
+                                          ,wxItemKind      eKind
+                                          ,wxObject*       pClientData
+                                          ,const wxString& rsShortHelp
+                                          ,const wxString& rsLongHelp
+                                         );
+    virtual wxToolBarToolBase* CreateTool(wxControl* pControl,
+                                          const wxString& label);
+
+    //
+    // 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)
 };
 
 #endif // wxUSE_TOOLBAR