X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8a0681f9338345d0ef32b2ad809d49fd20861119..942285dcfa083d114cf519d15099ce204b9895e8:/src/motif/toolbar.cpp diff --git a/src/motif/toolbar.cpp b/src/motif/toolbar.cpp index 56c79abbcc..b38f1c3929 100644 --- a/src/motif/toolbar.cpp +++ b/src/motif/toolbar.cpp @@ -21,6 +21,10 @@ #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 // ---------------------------------------------------------------------------- @@ -130,22 +134,21 @@ wxString wxToolBarTimer::helpString; // wxToolBarTool // ---------------------------------------------------------------------------- -wxToolBarToolBase *wxToolBarToolBase::New(wxToolBar *tbar, - int id, - const wxBitmap& bitmap1, - const wxBitmap& bitmap2, - bool toggle, - wxObject *clientData, - const wxString& shortHelpString, - const wxString& longHelpString) +wxToolBarToolBase *wxToolBar::CreateTool(int id, + const wxBitmap& bitmap1, + const wxBitmap& bitmap2, + bool toggle, + wxObject *clientData, + const wxString& shortHelpString, + const wxString& longHelpString) { - return new wxToolBarTool(tbar, id, bitmap1, bitmap2, toggle, + return new wxToolBarTool(this, id, bitmap1, bitmap2, toggle, clientData, shortHelpString, longHelpString); } -wxToolBarToolBase *wxToolBarToolBase::New(wxToolBar *tbar, wxControl *control) +wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control) { - return new wxToolBarTool(tbar, control); + return new wxToolBarTool(this, control); } void wxToolBarTool::Init() @@ -156,8 +159,11 @@ void wxToolBarTool::Init() wxToolBarTool::~wxToolBarTool() { - XtDestroyWidget(m_widget); - XmDestroyPixmap(DefaultScreenOfDisplay((Display*)wxGetDisplay()), m_pixmap); + if ( m_widget ) + XtDestroyWidget(m_widget); + if ( m_pixmap ) + XmDestroyPixmap(DefaultScreenOfDisplay((Display*)wxGetDisplay()), + m_pixmap); } // ---------------------------------------------------------------------------- @@ -170,6 +176,12 @@ void wxToolBar::Init() m_maxHeight = -1; m_defaultWidth = 24; m_defaultHeight = 22; + m_toolPacking = 2; + m_toolSeparation = 8; + m_xMargin = 2; + m_yMargin = 2; + m_maxRows = 100; + m_maxCols = 100; } bool wxToolBar::Create(wxWindow *parent, @@ -243,6 +255,7 @@ bool wxToolBar::Realize() // Separator spacing const int separatorSize = GetToolSeparation(); // 8; wxSize margins = GetToolMargins(); + int packing = GetToolPacking(); int marginX = margins.x; int marginY = margins.y; @@ -265,9 +278,15 @@ bool wxToolBar::Realize() switch ( tool->GetStyle() ) { case wxTOOL_STYLE_CONTROL: - wxFAIL_MSG( _T("not implemented") ); - break; + { + wxControl* control = tool->GetControl(); + wxSize sz = control->GetSize(); + wxPoint pos = control->GetPosition(); + control->Move(currentX, pos.y); + currentX += sz.x + packing; + break; + } case wxTOOL_STYLE_SEPARATOR: currentX += separatorSize; break; @@ -280,7 +299,12 @@ bool wxToolBar::Realize() button = XtVaCreateWidget("toggleButton", xmToggleButtonWidgetClass, (Widget) m_mainWidget, XmNx, currentX, XmNy, currentY, - // XmNpushButtonEnabled, True, + XmNindicatorOn, False, + XmNshadowThickness, 2, + XmNborderWidth, 0, + XmNspacing, 0, + XmNmarginWidth, 0, + XmNmarginHeight, 0, XmNmultiClick, XmMULTICLICK_KEEP, XmNlabelType, XmPIXMAP, NULL); @@ -323,9 +347,9 @@ bool wxToolBar::Realize() wxColour col; col.SetPixel(backgroundPixel); - wxBitmap newBitmap = wxCreateMaskedBitmap(bmp, col); + bmp = wxCreateMaskedBitmap(bmp, col); - tool->SetBitmap1(newBitmap); + tool->SetBitmap1(bmp); } // Create a selected/toggled bitmap. If there isn't a 2nd @@ -383,13 +407,9 @@ bool wxToolBar::Realize() insensPixmap2 = XCreateInsensitivePixmap((Display*) wxGetDisplay(), pixmap2); } + tool->SetPixmap(pixmap2); + XtVaSetValues (button, - XmNindicatorOn, False, - XmNshadowThickness, 2, - // XmNborderWidth, 0, - // XmNspacing, 0, - XmNmarginWidth, 0, - XmNmarginHeight, 0, XmNfillOnSelect, True, XmNlabelPixmap, pixmap, XmNselectPixmap, pixmap2, @@ -413,6 +433,9 @@ bool wxToolBar::Realize() pixmap2 = (Pixmap) bmp.GetArmPixmap(button); } + + tool->SetPixmap(pixmap2); + // Normal button XtVaSetValues(button, XmNlabelPixmap, pixmap, @@ -420,6 +443,7 @@ bool wxToolBar::Realize() XmNarmPixmap, pixmap2, NULL); } + XtManageChild(button); { @@ -428,7 +452,7 @@ bool wxToolBar::Realize() XmNwidth, &width, XmNheight, & height, NULL); - currentX += width + marginX; + currentX += width + packing; buttonHeight = wxMax(buttonHeight, height); } @@ -447,48 +471,53 @@ bool wxToolBar::Realize() return TRUE; } -wxToolBarTool *wxToolBar::FindToolForPosition(wxCoord WXUNUSED(x), - wxCoord WXUNUSED(y)) const +wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord WXUNUSED(x), + wxCoord WXUNUSED(y)) const { wxFAIL_MSG( _T("TODO") ); - return (wxToolBarTool *)NULL; + return (wxToolBarToolBase *)NULL; } -bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarTool *tool) +bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool) { tool->Attach(this); return TRUE; } -bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarTool *tool) +bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool) { tool->Detach(); return TRUE; } -void wxToolBar::DoEnableTool(wxToolBarTool *tool, bool enable) +void wxToolBar::DoEnableTool(wxToolBarToolBase *toolBase, bool enable) { + wxToolBarTool *tool = (wxToolBarTool *)toolBase; + XtSetSensitive(tool->GetButtonWidget(), (Boolean) enable); } -void wxToolBar::DoToggleTool(wxToolBarTool *tool, bool toggle) +void wxToolBar::DoToggleTool(wxToolBarToolBase *toolBase, bool toggle) { + wxToolBarTool *tool = (wxToolBarTool *)toolBase; + XmToggleButtonSetState(tool->GetButtonWidget(), (Boolean) toggle, False); } -void wxToolBar::DoSetToggle(wxToolBarTool *tool, bool toggle) +void wxToolBar::DoSetToggle(wxToolBarToolBase * WXUNUSED(tool), + bool WXUNUSED(toggle)) { - wxFAIL_MSG( _T("TODO") ); + // nothing to do } // ---------------------------------------------------------------------------- // Motif callbacks // ---------------------------------------------------------------------------- -wxToolBarTool *wxToolBar::FindToolByWidget(WXWidget w) const +wxToolBarToolBase *wxToolBar::FindToolByWidget(WXWidget w) const { wxToolBarToolsList::Node* node = m_tools.GetFirst(); while ( node ) @@ -502,7 +531,7 @@ wxToolBarTool *wxToolBar::FindToolByWidget(WXWidget w) const node = node->GetNext(); } - return (wxToolBarTool *)NULL; + return (wxToolBarToolBase *)NULL; } static void wxToolButtonCallback(Widget w, @@ -510,7 +539,7 @@ static void wxToolButtonCallback(Widget w, XtPointer WXUNUSED(ptr)) { wxToolBar *toolBar = (wxToolBar *) clientData; - wxToolBarTool *tool = toolBar->FindToolByWidget((WXWidget) w); + wxToolBarToolBase *tool = toolBar->FindToolByWidget((WXWidget) w); if ( !tool ) return; @@ -534,7 +563,7 @@ static void wxToolButtonPopupCallback(Widget w, static const int delayMilli = 800; wxToolBar* toolBar = (wxToolBar*) client_data; - wxToolBarTool *tool = toolBar->FindToolByWidget((WXWidget) w); + wxToolBarToolBase *tool = toolBar->FindToolByWidget((WXWidget) w); if ( !tool ) return;