]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/tbarbase.cpp
Committing in .
[wxWidgets.git] / src / common / tbarbase.cpp
index d50620d33fee2d59235e1ee81607acd09d4f0e2e..98eed8bbd5e43d0d81556219e0f62d4571eb4435 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
@@ -24,6 +24,8 @@
 #include "wx/wx.h"
 #endif
 
+#include "wx/frame.h"
+
 // For ::UpdateWindow
 #ifdef __WXMSW__
 #include <windows.h>
@@ -48,20 +50,37 @@ END_EVENT_TABLE()
 // is still valid: a tool may have quit the toolbar.
 static wxList gs_ToolBars;
 
+#ifdef __WXGTK__
+wxToolBarTool::wxToolBarTool(wxToolBar *owner, int theIndex,
+                    const wxBitmap& theBitmap1, const  wxBitmap& theBitmap2,
+            bool toggle, wxObject *clientData,
+                 const wxString& helpS1, const wxString& helpS2,
+                    GtkWidget *pixmap  )
+#else
 wxToolBarTool::wxToolBarTool(int theIndex,
                     const wxBitmap& theBitmap1, const wxBitmap& theBitmap2, bool toggle,
                     long xPos, long yPos, const wxString& helpS1, const wxString& helpS2)
+#endif
 {
   m_toolStyle = wxTOOL_STYLE_BUTTON;
+#ifdef __WXGTK__
+  m_owner = owner;
+  m_pixmap = pixmap;
+  m_item = (GtkWidget*) NULL;
+  m_clientData = clientData;
+  m_x = 0;
+  m_y = 0;
+#else
   m_clientData = NULL;
+  m_x = xPos;
+  m_y = yPos;
+#endif
   m_index = theIndex;
   m_isToggle = toggle;
   m_toggleState = FALSE;
   m_enabled = TRUE;
   m_bitmap1 = theBitmap1;
   m_bitmap2 = theBitmap2;
-  m_x = xPos;
-  m_y = yPos;
   m_width = m_height = 0;
   m_deleteSecondBitmap = FALSE;
   if (m_bitmap1.Ok())
@@ -73,7 +92,14 @@ wxToolBarTool::wxToolBarTool(int theIndex,
   m_longHelpString = helpS2;
 }
 
-wxToolBarTool::~wxToolBarTool(void)
+wxToolBarTool::wxToolBarTool(wxControl *control)
+{
+    m_toolStyle = wxTOOL_STYLE_CONTROL;
+    m_control = control;
+    m_index = control->GetId();
+}
+
+wxToolBarTool::~wxToolBarTool()
 {
 /*
   if (m_deleteSecondBitmap && m_bitmap2)
@@ -131,13 +157,16 @@ bool wxToolBarBase::OnLeftClick(int toolIndex, bool toggleDown)
     event.SetEventObject(this);
     event.SetExtraLong((long) toggleDown);
 
+    // Send events to this toolbar instead (and thence up the window hierarchy)
     GetEventHandler()->ProcessEvent(event);
 
     return TRUE;
 }
 
 // Call when right button down.
-void wxToolBarBase::OnRightClick(int toolIndex, long x, long y)
+void wxToolBarBase::OnRightClick(int toolIndex,
+                                 long WXUNUSED(x),
+                                 long WXUNUSED(y))
 {
     wxCommandEvent event(wxEVT_COMMAND_TOOL_RCLICKED, toolIndex);
     event.SetEventObject(this);
@@ -164,10 +193,15 @@ void wxToolBarBase::OnMouseEnter ( int toolIndex )
 // created and used as the pushed/toggled image.
 // If toggle is TRUE, the button toggles between the two states.
 wxToolBarTool *wxToolBarBase::AddTool(int index, const wxBitmap& bitmap, const wxBitmap& pushedBitmap,
-             bool toggle, long xPos, long yPos, wxObject *clientData,
+             bool toggle, wxCoord xPos, wxCoord yPos, wxObject *clientData,
              const wxString& helpString1, const wxString& helpString2)
 {
+#ifdef __WXGTK__
+  wxToolBarTool *tool = new wxToolBarTool( (wxToolBar*)this, index, bitmap, pushedBitmap, toggle,
+                                           (wxObject*) NULL, helpString1, helpString2);
+#else
   wxToolBarTool *tool = new wxToolBarTool(index, bitmap, pushedBitmap, toggle, xPos, yPos, helpString1, helpString2);
+#endif
   tool->m_clientData = clientData;
 
   if (xPos > -1)
@@ -179,7 +213,7 @@ wxToolBarTool *wxToolBarBase::AddTool(int index, const wxBitmap& bitmap, const w
     tool->m_y = yPos;
   else
     tool->m_y = m_yMargin;
-  
+
   // Calculate reasonable max size in case Layout() not called
   if ((tool->m_x + bitmap.GetWidth() + m_xMargin) > m_maxWidth)
     m_maxWidth = (tool->m_x + bitmap.GetWidth() + m_xMargin);
@@ -194,11 +228,12 @@ wxToolBarTool *wxToolBarBase::AddTool(int index, const wxBitmap& bitmap, const w
 void wxToolBarBase::AddSeparator ()
 {
   wxToolBarTool *tool = new wxToolBarTool;
+  tool->m_index = -1;
   tool->m_toolStyle = wxTOOL_STYLE_SEPARATOR;
   m_tools.Append(-1, tool);
 }
 
-void wxToolBarBase::ClearTools(void)
+void wxToolBarBase::ClearTools()
 {
   m_pressedTool = m_currentTool = -1;
   wxNode *node = m_tools.First();
@@ -223,7 +258,8 @@ void wxToolBarBase::EnableTool(int index, bool enable)
   }
 }
 
-void wxToolBarBase::ToggleTool(int index, bool toggle)
+void wxToolBarBase::ToggleTool(int WXUNUSED(index),
+                               bool WXUNUSED(toggle))
 {
 }
 
@@ -366,11 +402,11 @@ void wxToolBarBase::SetToolSeparation(int separation)
   m_toolSeparation = separation;
 }
 
-void wxToolBarBase::Command(wxCommandEvent& event)
+void wxToolBarBase::Command(wxCommandEvent& WXUNUSED(event))
 {
 }
 
-void wxToolBarBase::Layout(void)
+void wxToolBarBase::LayoutTools()
 {
 }
 
@@ -382,8 +418,8 @@ void wxToolBarBase::Layout(void)
  * noUnitsX/noUnitsY:        : no. units per scrollbar
  */
 void wxToolBarBase::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
-              int noUnitsX, int noUnitsY,
-              int xPos, int yPos)
+           int noUnitsX, int noUnitsY,
+           int xPos, int yPos)
 {
       m_xScrollPixelsPerLine = pixelsPerUnitX;
       m_yScrollPixelsPerLine = pixelsPerUnitY;
@@ -395,27 +431,27 @@ void wxToolBarBase::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
 
       // Recalculate scroll bar range and position
     if (m_xScrollLines > 0)
-       {
-         m_xScrollPosition = xPos;
-         SetScrollPos (wxHORIZONTAL, m_xScrollPosition, TRUE);
-       }
+    {
+      m_xScrollPosition = xPos;
+      SetScrollPos (wxHORIZONTAL, m_xScrollPosition, TRUE);
+    }
     else
     {
-         SetScrollbar(wxHORIZONTAL, 0, 0, 0, FALSE);
+      SetScrollbar(wxHORIZONTAL, 0, 0, 0, FALSE);
       m_xScrollPosition = 0;
     }
 
     if (m_yScrollLines > 0)
-       {
-         m_yScrollPosition = yPos;
-         SetScrollPos (wxVERTICAL, m_yScrollPosition, TRUE);
-       }
+    {
+      m_yScrollPosition = yPos;
+      SetScrollPos (wxVERTICAL, m_yScrollPosition, TRUE);
+    }
     else
     {
-         SetScrollbar(wxVERTICAL, 0, 0, 0, FALSE);
+      SetScrollbar(wxVERTICAL, 0, 0, 0, FALSE);
       m_yScrollPosition = 0;
     }
-       AdjustScrollbars();
+    AdjustScrollbars();
     Refresh();
 #ifdef __WXMSW__
     ::UpdateWindow ((HWND) GetHWND());
@@ -534,41 +570,41 @@ int wxToolBarBase::CalcScrollInc(wxScrollEvent& event)
   if (orient == wxHORIZONTAL)
   {
         int w, h;
-               GetClientSize(&w, &h);
+        GetClientSize(&w, &h);
 
-       int nMaxWidth = m_xScrollLines*m_xScrollPixelsPerLine;
-       int noPositions = (int) ( ((nMaxWidth - w)/(float)m_xScrollPixelsPerLine) + 0.5 );
-       if (noPositions < 0)
-               noPositions = 0;
+        int nMaxWidth = m_xScrollLines*m_xScrollPixelsPerLine;
+        int noPositions = (int) ( ((nMaxWidth - w)/(float)m_xScrollPixelsPerLine) + 0.5 );
+        if (noPositions < 0)
+              noPositions = 0;
 
-               if ( (m_xScrollPosition + nScrollInc) < 0 )
-                       nScrollInc = -m_xScrollPosition; // As -ve as we can go
-               else if ( (m_xScrollPosition + nScrollInc) > noPositions )
-                       nScrollInc = noPositions - m_xScrollPosition; // As +ve as we can go
+        if ( (m_xScrollPosition + nScrollInc) < 0 )
+            nScrollInc = -m_xScrollPosition; // As -ve as we can go
+        else if ( (m_xScrollPosition + nScrollInc) > noPositions )
+            nScrollInc = noPositions - m_xScrollPosition; // As +ve as we can go
 
         return nScrollInc;
   }
   else
   {
         int w, h;
-               GetClientSize(&w, &h);
+        GetClientSize(&w, &h);
 
-       int nMaxHeight = m_yScrollLines*m_yScrollPixelsPerLine;
-       int noPositions = (int) ( ((nMaxHeight - h)/(float)m_yScrollPixelsPerLine) + 0.5 );
-       if (noPositions < 0)
-               noPositions = 0;
+        int nMaxHeight = m_yScrollLines*m_yScrollPixelsPerLine;
+        int noPositions = (int) ( ((nMaxHeight - h)/(float)m_yScrollPixelsPerLine) + 0.5 );
+        if (noPositions < 0)
+              noPositions = 0;
 
-               if ( (m_yScrollPosition + nScrollInc) < 0 )
-                       nScrollInc = -m_yScrollPosition; // As -ve as we can go
-               else if ( (m_yScrollPosition + nScrollInc) > noPositions )
-                       nScrollInc = noPositions - m_yScrollPosition; // As +ve as we can go
+        if ( (m_yScrollPosition + nScrollInc) < 0 )
+            nScrollInc = -m_yScrollPosition; // As -ve as we can go
+        else if ( (m_yScrollPosition + nScrollInc) > noPositions )
+            nScrollInc = noPositions - m_yScrollPosition; // As +ve as we can go
 
         return nScrollInc;
   }
 }
 
 // Adjust the scrollbars - new version.
-void wxToolBarBase::AdjustScrollbars(void)
+void wxToolBarBase::AdjustScrollbars()
 {
   int w, h;
   GetClientSize(&w, &h);
@@ -583,8 +619,8 @@ void wxToolBarBase::AdjustScrollbars(void)
 
     m_xScrollPosition = wxMin(newRange, m_xScrollPosition);
 
-       // Calculate page size i.e. number of scroll units you get on the
-       // current client window
+    // Calculate page size i.e. number of scroll units you get on the
+    // current client window
     int noPagePositions = (int) ( (w/(float)m_xScrollPixelsPerLine) + 0.5 );
     if (noPagePositions < 1)
       noPagePositions = 1;
@@ -601,8 +637,8 @@ void wxToolBarBase::AdjustScrollbars(void)
 
     m_yScrollPosition = wxMin(newRange, m_yScrollPosition);
 
-       // Calculate page size i.e. number of scroll units you get on the
-       // current client window
+    // Calculate page size i.e. number of scroll units you get on the
+    // current client window
     int noPagePositions = (int) ( (h/(float)m_yScrollPixelsPerLine) + 0.5 );
     if (noPagePositions < 1)
       noPagePositions = 1;
@@ -613,7 +649,7 @@ void wxToolBarBase::AdjustScrollbars(void)
 }
 
 // Default OnSize resets scrollbars, if any
-void wxToolBarBase::OnSize(wxSizeEvent& event)
+void wxToolBarBase::OnSize(wxSizeEvent& WXUNUSED(event))
 {
 #if wxUSE_CONSTRAINTS
   if (GetAutoLayout())
@@ -626,7 +662,7 @@ void wxToolBarBase::OnSize(wxSizeEvent& event)
 // Prepare the DC by translating it according to the current scroll position
 void wxToolBarBase::PrepareDC(wxDC& dc)
 {
-       dc.SetDeviceOrigin(- m_xScrollPosition * m_xScrollPixelsPerLine, - m_yScrollPosition * m_yScrollPixelsPerLine);
+    dc.SetDeviceOrigin(- m_xScrollPosition * m_xScrollPixelsPerLine, - m_yScrollPosition * m_yScrollPixelsPerLine);
 }
 
 void wxToolBarBase::GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const
@@ -696,46 +732,48 @@ void wxToolBarBase::ViewStart (int *x, int *y) const
   *y = m_yScrollPosition;
 }
 
-void wxToolBarBase::OnIdle(wxIdleEvent& event)
+void wxToolBarBase::OnIdle(wxIdleEvent&
+#ifdef __WXGTK__
+                            WXUNUSED(event)
+#else
+                            event
+#endif
+                          )
 {
+#ifndef __WXGTK__
     wxWindow::OnIdle(event);
+#endif
 
-       DoToolbarUpdates();
+    DoToolbarUpdates();
 }
 
 // Do the toolbar button updates (check for EVT_UPDATE_UI handlers)
-void wxToolBarBase::DoToolbarUpdates(void)
-{
-       wxNode* node = GetTools().First();
-       while (node)
-       {
-               wxToolBarTool* tool = (wxToolBarTool* ) node->Data();
-
-               wxUpdateUIEvent event(tool->m_index);
-               event.SetEventObject(this);
-
-               if (GetEventHandler()->ProcessEvent(event))
-               {
-                       if (event.GetSetEnabled())
-                               EnableTool(tool->m_index, event.GetEnabled());
-                       if (event.GetSetChecked())
-                               ToggleTool(tool->m_index, event.GetChecked());
+void wxToolBarBase::DoToolbarUpdates()
+{
+    wxEvtHandler* evtHandler = GetEventHandler() ;
+
+    wxNode* node = GetTools().First();
+    while (node)
+    {
+        wxToolBarTool* tool = (wxToolBarTool* ) node->Data();
+
+        wxUpdateUIEvent event(tool->m_index);
+        event.SetEventObject(this);
+
+        if (evtHandler->ProcessEvent(event))
+        {
+            if (event.GetSetEnabled())
+                EnableTool(tool->m_index, event.GetEnabled());
+            if (event.GetSetChecked())
+                ToggleTool(tool->m_index, event.GetChecked());
 /*
-                       if (event.GetSetText())
-                               // Set tooltip?
+            if (event.GetSetText())
+                // Set tooltip?
 */
-               }
-
-               node = node->Next();
-       }
-}
+        }
 
-#ifdef __WXMSW__
-// Circumvent wxControl::MSWOnMouseMove which doesn't set the cursor.
-void wxToolBarBase::MSWOnMouseMove(int x, int y, WXUINT flags)
-{
-    wxWindow::MSWOnMouseMove(x, y, flags);
+        node = node->Next();
+    }
 }
-#endif
 
 #endif