]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/toolbar.cpp
wxSplitPath() bugs corrected and it's documented
[wxWidgets.git] / src / motif / toolbar.cpp
index ee33bfeea41374d981f8318876c5f5ec3610dfce..319e564d81774caacb3cd68e39269b186deb29a4 100644 (file)
@@ -16,7 +16,7 @@
 #include "wx/wx.h"
 #include "wx/app.h"
 #include "wx/timer.h"
-#include "wx/motif/toolbar.h"
+#include "wx/toolbar.h"
 
 #include <Xm/Xm.h>
 #include <Xm/PushBG.h>
@@ -167,6 +167,10 @@ bool wxToolBar::CreateTools()
                    NULL);
                 XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback,
                 (XtPointer) this);
+
+                XtVaSetValues ((Widget) button,
+                      XmNselectColor, m_backgroundColour.AllocColour(XtDisplay((Widget) button)),
+                      NULL);
             }
             else
             {
@@ -318,190 +322,6 @@ bool wxToolBar::CreateTools()
     return TRUE;
 }
 
-// Old version, assuming we use a form. Now we use
-// a bulletin board, so we can create controls on the toolbar.
-#if 0
-bool wxToolBar::CreateTools()
-{
-    if (m_tools.Number() == 0)
-        return FALSE;
-
-    // Separator spacing
-    const int separatorSize = GetToolSeparation(); // 8;
-
-    int currentSpacing = 0;
-
-    m_widgets.Clear();
-    Widget prevButton = (Widget) 0;
-    wxNode* node = m_tools.First();
-    while (node)
-    {
-        wxToolBarTool *tool = (wxToolBarTool *)node->Data();
-
-        if (tool->m_toolStyle == wxTOOL_STYLE_SEPARATOR)
-            currentSpacing = separatorSize;
-        else if (tool->m_bitmap1.Ok())
-        {
-            Widget button = (Widget) 0;
-
-            if (tool->m_isToggle)
-            {
-                button = XtVaCreateManagedWidget("toggleButton", 
-                   xmToggleButtonWidgetClass, (Widget) m_mainWidget,
-                   XmNleftAttachment, (prevButton == (Widget) 0) ? XmATTACH_FORM : XmATTACH_WIDGET,
-                   XmNleftWidget, (prevButton == (Widget) 0) ? NULL : prevButton,
-                   XmNleftOffset, currentSpacing,
-                   XmNtopAttachment, XmATTACH_FORM,
-                                                //                   XmNpushButtonEnabled, True,
-                   XmNmultiClick, XmMULTICLICK_KEEP,
-                   XmNlabelType, XmPIXMAP,
-                   NULL);
-                XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback,
-                (XtPointer) this);
-            }
-            else
-            {
-                button = XtVaCreateManagedWidget("button", 
-                   xmPushButtonWidgetClass, (Widget) m_mainWidget,
-                   XmNleftAttachment, (prevButton == (Widget) 0) ? XmATTACH_FORM : XmATTACH_WIDGET,
-                   XmNleftWidget, (prevButton == (Widget) 0) ? NULL : prevButton,
-                   XmNleftOffset, currentSpacing,
-                   XmNtopAttachment, XmATTACH_FORM,
-                   XmNpushButtonEnabled, True,
-                   XmNmultiClick, XmMULTICLICK_KEEP,
-                   XmNlabelType, XmPIXMAP,
-                   NULL);
-                XtAddCallback (button,
-                   XmNactivateCallback, (XtCallbackProc) wxToolButtonCallback,
-                   (XtPointer) this);
-            }
-
-            // For each button, if there is a mask, we must create
-            // a new wxBitmap that has the correct background colour
-            // for the button. Otherwise the background will just be
-            // e.g. black if a transparent XPM has been loaded.
-            wxBitmap originalBitmap = tool->m_bitmap1;
-
-            if (tool->m_bitmap1.GetMask())
-            {
-                int backgroundPixel;
-                XtVaGetValues(button, XmNbackground, &backgroundPixel,
-                             NULL);
-
-
-                wxColour col;
-                col.SetPixel(backgroundPixel);
-                
-                wxBitmap newBitmap = wxCreateMaskedBitmap(tool->m_bitmap1, col);
-
-                tool->m_bitmap1 = newBitmap;
-            }
-
-            // Create a selected/toggled bitmap. If there isn't a m_bitmap2,
-            // we need to create it (with a darker, selected background)
-            int backgroundPixel;
-            if (tool->m_isToggle)
-                XtVaGetValues(button, XmNselectColor, &backgroundPixel,
-                     NULL);
-            else
-                XtVaGetValues(button, XmNarmColor, &backgroundPixel,
-                     NULL);
-
-            wxColour col;
-            col.SetPixel(backgroundPixel);
-
-            if (tool->m_bitmap2.Ok() && tool->m_bitmap2.GetMask())
-            {
-                // Use what's there
-                wxBitmap newBitmap = wxCreateMaskedBitmap(tool->m_bitmap2, col);
-                tool->m_bitmap2 = newBitmap;
-            }
-            else
-            {
-                // Use unselected bitmap
-                if (originalBitmap.GetMask())
-                {
-                    wxBitmap newBitmap = wxCreateMaskedBitmap(originalBitmap, col);
-                    tool->m_bitmap2 = newBitmap;
-               }
-                else
-                    tool->m_bitmap2 = tool->m_bitmap1;
-            }
-
-            Pixmap pixmap = (Pixmap) tool->m_bitmap1.GetPixmap();
-            Pixmap insensPixmap = (Pixmap) tool->m_bitmap1.GetInsensPixmap();
-
-            if (tool->m_isToggle)
-            {
-                // Toggle button
-                Pixmap pixmap2 = (Pixmap) 0;
-                Pixmap insensPixmap2 = (Pixmap) 0;
-
-                // If there's a bitmap for the toggled state, use it,
-                // otherwise generate one.
-                if (tool->m_bitmap2.Ok())
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap2.GetPixmap();
-                    insensPixmap2 = (Pixmap) tool->m_bitmap2.GetInsensPixmap();
-                }
-                else
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap1.GetArmPixmap(button);
-                    insensPixmap2 = XCreateInsensitivePixmap((Display*) wxGetDisplay(), pixmap2);
-                    m_pixmaps.Append((wxObject*) insensPixmap2); // Store for later deletion
-                }
-                XtVaSetValues (button,
-                    XmNindicatorOn, False,
-                   XmNshadowThickness, 2,
-                              //                   XmNborderWidth, 0,
-                              //                   XmNspacing, 0,
-                   XmNmarginWidth, 0,
-                   XmNmarginHeight, 0,
-                    XmNfillOnSelect, True,
-                    XmNlabelPixmap, pixmap,
-                    XmNselectPixmap, pixmap2,
-                    XmNlabelInsensitivePixmap, insensPixmap,
-                    XmNselectInsensitivePixmap, insensPixmap2,
-                    XmNlabelType, XmPIXMAP,
-                    NULL);
-            }
-            else
-            {
-                Pixmap pixmap2 = (Pixmap) 0;
-
-                // If there's a bitmap for the armed state, use it,
-                // otherwise generate one.
-                if (tool->m_bitmap2.Ok())
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap2.GetPixmap();
-                }
-                else
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap1.GetArmPixmap(button);
-
-                }
-                // Normal button
-                XtVaSetValues(button,
-                   XmNlabelPixmap, pixmap,
-                   XmNlabelInsensitivePixmap, insensPixmap,
-                   XmNarmPixmap, pixmap2,
-                   NULL);
-            }
-
-            XtAddEventHandler (button, EnterWindowMask | LeaveWindowMask, 
-                       False, wxToolButtonPopupCallback, (XtPointer) this);
-            m_widgets.Append(tool->m_index, (wxObject*) button);
-
-            prevButton = button;
-            currentSpacing = 0;
-        }
-        node = node->Next();
-    }
-
-    return TRUE;
-}
-#endif
-
 void wxToolBar::SetToolBitmapSize(const wxSize& size)
 {
     // TODO not necessary?
@@ -605,7 +425,8 @@ wxToolBarTool *wxToolBar::AddTool(int index, const wxBitmap& bitmap, const wxBit
   else
     tool->m_y = m_yMargin;
 
-  tool->SetSize(GetDefaultButtonWidth(), GetDefaultButtonHeight());
+  wxSize size = GetToolSize();
+  tool->SetSize(size.x, size.y);
 
   m_tools.Append((long)index, tool);
   return tool;
@@ -662,7 +483,7 @@ void wxToolButtonCallback (Widget w, XtPointer clientData,
             return;
         wxToolBarTool *tool = (wxToolBarTool *)node->Data();
         if (tool->m_isToggle)
-            tool->m_toggleState = toolBar->GetToolState(index);
+            tool->m_toggleState = !tool->m_toggleState;
 
         (void) toolBar->OnLeftClick(index, tool->m_toggleState);
     }