X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a3ac83faf3338cd289023345e63df9fa24400a9..86fdd27b451ec92f4573f125fec73c44421ee744:/src/motif/toolbar.cpp diff --git a/src/motif/toolbar.cpp b/src/motif/toolbar.cpp index 903b69be33..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 @@ -40,8 +40,6 @@ static void wxToolButtonCallback (Widget w, XtPointer clientData, static void wxToolButtonPopupCallback (Widget w, XtPointer client_data, XEvent *event, Boolean *continue_to_dispatch); -wxBitmap wxCreateMaskedBitmap(wxBitmap& bitmap, wxColour& colour); - class wxToolBarTimer: public wxTimer { public: @@ -88,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, @@ -97,13 +102,16 @@ bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, cons XmNmarginWidth, 0, XmNmarginHeight, 0, NULL); +*/ m_mainWidget = (WXWidget) toolbar; + m_windowFont = parent->GetFont(); + ChangeFont(FALSE); + SetCanAddEventHandler(TRUE); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); - SetFont(* parent->GetFont()); ChangeBackgroundColour(); return TRUE; @@ -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,25 +317,29 @@ bool wxToolBar::CreateTools() node = node->Next(); } + SetSize(-1, -1, currentX, buttonHeight + 2*marginY); + return TRUE; } void wxToolBar::SetToolBitmapSize(const wxSize& size) { + // TODO not necessary? m_defaultWidth = size.x; m_defaultHeight = size.y; - // TODO } wxSize wxToolBar::GetMaxSize() const { - // TODO - return wxSize(0, 0); + int w, h; + GetSize(& w, & h); + + return wxSize(w, h); } // The button size is bigger than the bitmap size wxSize wxToolBar::GetToolSize() const { - // TODO + // TODO not necessary? return wxSize(m_defaultWidth + 8, m_defaultHeight + 7); } @@ -385,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) @@ -398,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; @@ -411,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; @@ -426,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) { @@ -439,34 +483,13 @@ 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); } } -// Creates a bitmap with transparent areas drawn in -// the given colour. -wxBitmap wxCreateMaskedBitmap(wxBitmap& bitmap, wxColour& colour) -{ - wxBitmap newBitmap(bitmap.GetWidth(), - bitmap.GetHeight(), - bitmap.GetDepth()); - wxMemoryDC destDC; - wxMemoryDC srcDC; - srcDC.SelectObject(bitmap); - destDC.SelectObject(newBitmap); - - wxBrush brush(colour, wxSOLID); - destDC.SetOptimization(FALSE); - destDC.SetBackground(brush); - destDC.Clear(); - destDC.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), & srcDC, 0, 0, wxCOPY, TRUE); - - return newBitmap; -} - static void wxToolButtonPopupCallback (Widget w, XtPointer client_data, XEvent *event, Boolean *continue_to_dispatch)