]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/univ/toolbar.h
moved the rest of XPMs to /art
[wxWidgets.git] / include / wx / univ / toolbar.h
index ac130e9feb8db7bd8abfbe7f3c45792029f87661..823888bda40f264e01a0f8cc0fee93d457421a17 100644 (file)
     #pragma interface "univtoolbar.h"
 #endif
 
-#include "wx/window.h"
+#include "wx/button.h"      // for wxStdButtonInputHandler
+
+class WXDLLEXPORT wxToolBarTool;
 
 // ----------------------------------------------------------------------------
-// wxToolbar
+// the actions supported by this control
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxToolBarTool : public wxToolBarToolBase
-{
-public:
-    wxToolBarTool( wxToolBarBase *tbar = (wxToolBarBase *)NULL,
-                   int id = wxID_SEPARATOR,
-                   const wxBitmap& bitmap1 = wxNullBitmap,
-                   const wxBitmap& bitmap2 = wxNullBitmap,
-                   bool toggle = FALSE,
-                   wxObject *clientData = (wxObject *) NULL,
-                   const wxString& shortHelpString = wxEmptyString,
-                   const wxString& longHelpString = wxEmptyString ) :
-        wxToolBarToolBase( tbar, id, bitmap1, bitmap2, toggle, clientData,
-                           shortHelpString, longHelpString )
-    {
-        m_isDown = FALSE;
-        m_x = -1;
-        m_y = -1;
-    }
+#define wxACTION_TOOLBAR_TOGGLE  wxACTION_BUTTON_TOGGLE
+#define wxACTION_TOOLBAR_PRESS   wxACTION_BUTTON_PRESS
+#define wxACTION_TOOLBAR_RELEASE wxACTION_BUTTON_RELEASE
+#define wxACTION_TOOLBAR_CLICK   wxACTION_BUTTON_CLICK
+#define wxACTION_TOOLBAR_ENTER   _T("enter")     // highlight the tool
+#define wxACTION_TOOLBAR_LEAVE   _T("leave")     // unhighlight the tool
 
-public:
-    bool        m_isDown;
-    int         m_x;
-    int         m_y;
-};
+// ----------------------------------------------------------------------------
+// wxToolBar
+// ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxToolBar: public wxToolBarBase
+class WXDLLEXPORT wxToolBar : public wxToolBarBase
 {    
 public:
     // construction/destruction
     wxToolBar() { Init(); }
-    wxToolBar( wxWindow *parent,
-               wxWindowID id,
-               const wxPoint& pos = wxDefaultPosition,
-               const wxSize& size = wxDefaultSize,
-               long style = 0,
-               const wxString& name = wxToolBarNameStr )
+    wxToolBar(wxWindow *parent,
+              wxWindowID id,
+              const wxPoint& pos = wxDefaultPosition,
+              const wxSize& size = wxDefaultSize,
+              long style = 0,
+              const wxString& name = wxToolBarNameStr)
     {
         Init();
 
@@ -71,9 +59,7 @@ public:
                  long style = 0,
                  const wxString& name = wxToolBarNameStr );
                  
-#ifdef __DARWIN__
-    virtual ~wxToolBar() { }
-#endif
+    virtual ~wxToolBar();
 
     virtual bool Realize();
 
@@ -101,18 +87,76 @@ protected:
                                           const wxString& shortHelpString,
                                           const wxString& longHelpString);
     virtual wxToolBarToolBase *CreateTool(wxControl *control);
+
+    // implement wxUniversal methods
+    virtual bool PerformAction(const wxControlAction& action,
+                               long numArg = -1,
+                               const wxString& strArg = wxEmptyString);
+    virtual wxSize DoGetBestClientSize() const;
+    virtual void DoDraw(wxControlRenderer *renderer);
+
+    // get the bounding rect for the given tool
+    wxRect GetToolRect(wxToolBarToolBase *tool) const;
+
+    // redraw the given tool
+    void RefreshTool(wxToolBarToolBase *tool);
+
+    // (re)calculate the tool positions, should only be called if it is
+    // necessary to do it, i.e. m_needsLayout == TRUE
+    void DoLayout();
     
+    // get the rect limits depending on the orientation: top/bottom for a
+    // vertical toolbar, left/right for a horizontal one
+    void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const;
+
+    // wxButton actions: all these use m_toolPressed and can only be called if
+    // we have one
+    void Toggle();
+    void Press();
+    void Release();
+
+    // this one used m_toolCurrent
+    void Click();
+
 private:
-    wxToolBarTool    *m_captured;
+    // have we calculated the positions of our tools?
+    bool m_needsLayout;
+
+    // the width of a separator
+    wxCoord m_widthSeparator;
+
+    // the total size of all toolbar elements
+    wxCoord m_maxWidth,
+            m_maxHeight;
     
-private:
-    void OnMouse( wxMouseEvent &event );
-    void RefreshTool( wxToolBarTool *tool );
-    void DrawToolBarTool( wxToolBarTool *tool, wxDC &dc, bool down );
-    void OnPaint( wxPaintEvent &event );
+    // the tool over which the mouse currently is or NULL
+    wxToolBarToolBase *m_toolCurrent;
 
-private:
-    DECLARE_EVENT_TABLE()
+    // the tool which currently has the mouse capture (i.e. the one user is
+    // pressing) or NULL
+    wxToolBarTool *m_toolPressed;
+
+    DECLARE_DYNAMIC_CLASS(wxToolBar)
+};
+
+// ----------------------------------------------------------------------------
+// wxStdToolbarInputHandler: translates SPACE and ENTER keys and the left mouse
+// click into button press/release actions
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxStdToolbarInputHandler : public wxStdButtonInputHandler
+{
+public:
+    wxStdToolbarInputHandler(wxInputHandler *inphand);
+
+    virtual bool HandleKey(wxInputConsumer *consumer,
+                           const wxKeyEvent& event,
+                           bool pressed);
+    virtual bool HandleMouse(wxInputConsumer *consumer,
+                             const wxMouseEvent& event);
+    virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event);
+    virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event);
+    virtual bool HandleActivation(wxInputConsumer *consumer, bool activated);
 };
 
 #endif // _WX_UNIV_TOOLBAR_H_