]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/toolbar.cpp
Calss interface updates (wxMotif-only).
[wxWidgets.git] / src / motif / toolbar.cpp
index 9a79f005ba8d06e89f7ee903536388319e68e3b8..f62b739ad04f07d0afe70b4d83944ccd22d49007 100644 (file)
     #pragma implementation "toolbar.h"
 #endif
 
+#ifdef __VMS
+#define XtDisplay XTDISPLAY
+#endif
+
 #include "wx/wx.h"
 #include "wx/app.h"
 #include "wx/timer.h"
@@ -47,7 +51,7 @@
 // ----------------------------------------------------------------------------
 
 #if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
+IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase)
 #endif
 
 // ----------------------------------------------------------------------------
@@ -78,14 +82,15 @@ class wxToolBarTool : public wxToolBarToolBase
 public:
     wxToolBarTool(wxToolBar *tbar,
                   int id,
-                  const wxBitmap& bitmap1,
-                  const wxBitmap& bitmap2,
-                  bool toggle,
+                  const wxString& label,
+                  const wxBitmap& bmpNormal,
+                  const wxBitmap& bmpToggled,
+                  wxItemKind kind,
                   wxObject *clientData,
-                  const wxString& shortHelpString,
-                  const wxString& longHelpString)
-        : wxToolBarToolBase(tbar, id, bitmap1, bitmap2, toggle,
-                            clientData, shortHelpString, longHelpString)
+                  const wxString& shortHelp,
+                  const wxString& longHelp)
+        : wxToolBarToolBase(tbar, id, label, bmpNormal, bmpToggled, kind,
+                            clientData, shortHelp, longHelp)
     {
         Init();
     }
@@ -131,17 +136,19 @@ wxString wxToolBarTimer::helpString;
 // ----------------------------------------------------------------------------
 
 wxToolBarToolBase *wxToolBar::CreateTool(int id,
-                                         const wxBitmap& bitmap1,
-                                         const wxBitmap& bitmap2,
-                                         bool toggle,
+                                         const wxString& label,
+                                         const wxBitmap& bmpNormal,
+                                         const wxBitmap& bmpToggled,
+                                         wxItemKind kind,
                                          wxObject *clientData,
-                                         const wxString& shortHelpString,
-                                         const wxString& longHelpString)
+                                         const wxString& shortHelp,
+                                         const wxString& longHelp)
 {
-    return new wxToolBarTool(this, id, bitmap1, bitmap2, toggle,
-                             clientData, shortHelpString, longHelpString);
+    return new wxToolBarTool(this, id, label, bmpNormal, bmpToggled, kind,
+                             clientData, shortHelp, longHelp);
 }
 
+
 wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control)
 {
     return new wxToolBarTool(this, control);
@@ -192,7 +199,7 @@ bool wxToolBar::Create(wxWindow *parent,
     m_windowId = id;
 
     SetName(name);
-    m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
+    m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
     m_foregroundColour = parent->GetForegroundColour();
     m_windowStyle = style;
 
@@ -251,7 +258,7 @@ bool wxToolBar::Realize()
     // Separator spacing
     const int separatorSize = GetToolSeparation(); // 8;
     wxSize margins = GetToolMargins();
-    wxSize packing = GetToolPacking();
+    int packing = GetToolPacking();
     int marginX = margins.x;
     int marginY = margins.y;
 
@@ -274,14 +281,18 @@ bool wxToolBar::Realize()
         switch ( tool->GetStyle() )
         {
             case wxTOOL_STYLE_CONTROL:
+            {
                 wxControl* control = tool->GetControl();
                 wxSize sz = control->GetSize();
-                wxSize pos = control->GetPosition();
-                control->Move(currentX, pos.y);
-                currentX += sz.x + packing.x;
+                wxPoint pos = control->GetPosition();
+                // Allow a control to specify a y-offset by setting its initial position,
+                // but still don't allow it to position itself above the top margin.
+                int controlY = (pos.y > 0) ? currentY + pos.y : currentY;
+                control->Move(currentX, controlY);
+                currentX += sz.x + packing;
 
                 break;
-
+            }
             case wxTOOL_STYLE_SEPARATOR:
                 currentX += separatorSize;
                 break;
@@ -332,7 +343,7 @@ bool wxToolBar::Realize()
                 // 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.
-                bmp = tool->GetBitmap1();
+                bmp = tool->GetNormalBitmap();
                 if ( bmp.GetMask() )
                 {
                     int backgroundPixel;
@@ -344,7 +355,7 @@ bool wxToolBar::Realize()
 
                     bmp = wxCreateMaskedBitmap(bmp, col);
 
-                    tool->SetBitmap1(bmp);
+                    tool->SetNormalBitmap(bmp);
                 }
 
                 // Create a selected/toggled bitmap. If there isn't a 2nd
@@ -361,11 +372,14 @@ bool wxToolBar::Realize()
                 wxColour col;
                 col.SetPixel(backgroundPixel);
 
-                if (tool->GetBitmap2().Ok() && tool->GetBitmap2().GetMask())
+                // FIXME: we use disabled bitmap as the bitmap for the toggled
+                //        state, we probably need a GetToggledBitmap() instead
+                wxBitmap bmpToggled = tool->GetDisabledBitmap();
+                if ( bmpToggled.Ok() && bmpToggled.GetMask())
                 {
                     // Use what's there
-                    wxBitmap newBitmap = wxCreateMaskedBitmap(tool->GetBitmap2(), col);
-                    tool->SetBitmap2(newBitmap);
+                    wxBitmap newBitmap = wxCreateMaskedBitmap(bmpToggled, col);
+                    tool->SetDisabledBitmap(newBitmap);
                 }
                 else
                 {
@@ -373,12 +387,13 @@ bool wxToolBar::Realize()
                     if ( bmp.GetMask() )
                     {
                         wxBitmap newBitmap = wxCreateMaskedBitmap(bmp, col);
-                        tool->SetBitmap2(newBitmap);
+                        tool->SetDisabledBitmap(newBitmap);
                     }
                     else
-                        tool->SetBitmap2(bmp);
+                        tool->SetDisabledBitmap(bmp);
                 }
 
+                // FIXME: and here we should use GetDisabledBitmap()...
                 pixmap = (Pixmap) bmp.GetPixmap();
                 insensPixmap = (Pixmap) bmp.GetInsensPixmap();
 
@@ -390,11 +405,12 @@ bool wxToolBar::Realize()
 
                     // If there's a bitmap for the toggled state, use it,
                     // otherwise generate one.
-                    if (tool->GetBitmap2().Ok())
+                    //
+                    // FIXME: see above
+                    if ( bmpToggled.Ok() )
                     {
-                        wxBitmap bmp2 = tool->GetBitmap2();
-                        pixmap2 = (Pixmap) bmp2.GetPixmap();
-                        insensPixmap2 = (Pixmap) bmp2.GetInsensPixmap();
+                        pixmap2 = (Pixmap) bmpToggled.GetPixmap();
+                        insensPixmap2 = (Pixmap) bmpToggled.GetInsensPixmap();
                     }
                     else
                     {
@@ -419,9 +435,9 @@ bool wxToolBar::Realize()
 
                     // If there's a bitmap for the armed state, use it,
                     // otherwise generate one.
-                    if (tool->GetBitmap2().Ok())
+                    if ( bmpToggled.Ok() )
                     {
-                        pixmap2 = (Pixmap) tool->GetBitmap2().GetPixmap();
+                        pixmap2 = (Pixmap) bmpToggled.GetPixmap();
                     }
                     else
                     {
@@ -447,7 +463,7 @@ bool wxToolBar::Realize()
                                   XmNwidth, &width,
                                   XmNheight, & height,
                                   NULL);
-                    currentX += width + packing.x;
+                    currentX += width + packing;
                     buttonHeight = wxMax(buttonHeight, height);
                 }