X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4b5f3fe655deeb91d5d3abe8fad30c4a1cae63dc..7e2c43b8551c394d790e416ae52a4476c759683e:/src/motif/toolbar.cpp diff --git a/src/motif/toolbar.cpp b/src/motif/toolbar.cpp index 75c7b30d36..319e564d81 100644 --- a/src/motif/toolbar.cpp +++ b/src/motif/toolbar.cpp @@ -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 #include @@ -86,7 +86,14 @@ bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, cons Widget parentWidget = (Widget) parent->GetClientWidget(); Widget toolbar = XtVaCreateManagedWidget("toolbar", - xmFormWidgetClass, parentWidget, + xmBulletinBoardWidgetClass, (Widget) parentWidget, + XmNmarginWidth, 0, + XmNmarginHeight, 0, + XmNresizePolicy, XmRESIZE_NONE, + NULL); +/* + Widget toolbar = XtVaCreateManagedWidget("toolbar", + xmFormWidgetClass, (Widget) m_clientWidget, XmNtraversalOn, False, XmNhorizontalSpacing, 0, XmNverticalSpacing, 0, @@ -95,6 +102,7 @@ bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, cons XmNmarginWidth, 0, XmNmarginHeight, 0, NULL); +*/ m_mainWidget = (WXWidget) toolbar; @@ -124,6 +132,14 @@ bool wxToolBar::CreateTools() // Separator spacing const int separatorSize = GetToolSeparation(); // 8; + wxSize margins = GetToolMargins(); + int marginX = margins.x; + int marginY = margins.y; + + int currentX = marginX; + int currentY = marginY; + + int buttonHeight = 0; int currentSpacing = 0; @@ -135,34 +151,32 @@ bool wxToolBar::CreateTools() wxToolBarTool *tool = (wxToolBarTool *)node->Data(); if (tool->m_toolStyle == wxTOOL_STYLE_SEPARATOR) - currentSpacing = separatorSize; + currentX += separatorSize; else if (tool->m_bitmap1.Ok()) { Widget button = (Widget) 0; if (tool->m_isToggle) { - button = XtVaCreateManagedWidget("toggleButton", + button = XtVaCreateWidget("toggleButton", xmToggleButtonWidgetClass, (Widget) m_mainWidget, - XmNleftAttachment, (prevButton == (Widget) 0) ? XmATTACH_FORM : XmATTACH_WIDGET, - XmNleftWidget, (prevButton == (Widget) 0) ? NULL : prevButton, - XmNleftOffset, currentSpacing, - XmNtopAttachment, XmATTACH_FORM, + XmNx, currentX, XmNy, currentY, // XmNpushButtonEnabled, True, XmNmultiClick, XmMULTICLICK_KEEP, XmNlabelType, XmPIXMAP, NULL); XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback, (XtPointer) this); + + XtVaSetValues ((Widget) button, + XmNselectColor, m_backgroundColour.AllocColour(XtDisplay((Widget) button)), + NULL); } else { - button = XtVaCreateManagedWidget("button", + button = XtVaCreateWidget("button", xmPushButtonWidgetClass, (Widget) m_mainWidget, - XmNleftAttachment, (prevButton == (Widget) 0) ? XmATTACH_FORM : XmATTACH_WIDGET, - XmNleftWidget, (prevButton == (Widget) 0) ? NULL : prevButton, - XmNleftOffset, currentSpacing, - XmNtopAttachment, XmATTACH_FORM, + XmNx, currentX, XmNy, currentY, XmNpushButtonEnabled, True, XmNmultiClick, XmMULTICLICK_KEEP, XmNlabelType, XmPIXMAP, @@ -172,6 +186,8 @@ bool wxToolBar::CreateTools() (XtPointer) this); } + DoChangeBackgroundColour((WXWidget) button, m_backgroundColour, TRUE); + // 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 @@ -283,6 +299,13 @@ bool wxToolBar::CreateTools() XmNarmPixmap, pixmap2, NULL); } + XtManageChild(button); + + Dimension width, height; + XtVaGetValues(button, XmNwidth, & width, XmNheight, & height, + NULL); + currentX += width + marginX; + buttonHeight = wxMax(buttonHeight, height); XtAddEventHandler (button, EnterWindowMask | LeaveWindowMask, False, wxToolButtonPopupCallback, (XtPointer) this); @@ -294,6 +317,8 @@ bool wxToolBar::CreateTools() node = node->Next(); } + SetSize(-1, -1, currentX, buttonHeight + 2*marginY); + return TRUE; } @@ -387,7 +412,7 @@ void wxToolBar::DestroyPixmaps() wxToolBarTool *wxToolBar::AddTool(int index, const wxBitmap& bitmap, const wxBitmap& pushedBitmap, bool toggle, long xPos, long yPos, wxObject *clientData, const wxString& helpString1, const wxString& helpString2) { - wxToolBarTool *tool = new wxToolBarTool(index, bitmap, (wxBitmap *)NULL, toggle, xPos, yPos, helpString1, helpString2); + wxToolBarTool *tool = new wxToolBarTool(index, bitmap, wxNullBitmap, toggle, xPos, yPos, helpString1, helpString2); tool->m_clientData = clientData; if (xPos > -1) @@ -400,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; @@ -413,7 +439,7 @@ int wxToolBar::FindIndexForWidget(WXWidget w) { WXWidget widget = (WXWidget) node->Data(); if (widget == w) - return (int) node->key.integer; + return (int) node->GetKeyInteger(); node = node->Next(); } return -1; @@ -428,6 +454,22 @@ WXWidget wxToolBar::FindWidgetForIndex(int index) return (WXWidget) node->Data(); } +WXWidget wxToolBar::GetTopWidget() const +{ + return m_mainWidget; +} + +WXWidget wxToolBar::GetClientWidget() const +{ + return m_mainWidget; +} + +WXWidget wxToolBar::GetMainWidget() const +{ + return m_mainWidget; +} + + void wxToolButtonCallback (Widget w, XtPointer clientData, XtPointer ptr) { @@ -441,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); }