/////////////////////////////////////////////////////////////////////////////
-// Name: motif/toolbar.cpp
+// Name: src/motif/toolbar.cpp
// Purpose: wxToolBar
// Author: Julian Smart
// Modified by: 13.12.99 by VZ during toolbar classes reorganization
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
- #pragma implementation "toolbar.h"
-#endif
-
-#ifdef __VMS
-#define XtDisplay XTDISPLAY
-#endif
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
-#include "wx/settings.h"
-#include "wx/app.h"
-#include "wx/timer.h"
#include "wx/toolbar.h"
-#include "wx/frame.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+ #include "wx/frame.h"
+ #include "wx/timer.h"
+ #include "wx/settings.h"
+#endif
#ifdef __VMS__
#pragma message disable nosimpint
// wxWin macros
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase)
-#endif
+IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
// ----------------------------------------------------------------------------
// private functions
Init();
}
- wxToolBarTool(wxToolBar *tbar, wxControl *control)
- : wxToolBarToolBase(tbar, control)
+ wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label)
+ : wxToolBarToolBase(tbar, control, label)
{
Init();
}
}
-wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control)
+wxToolBarToolBase *
+wxToolBar::CreateTool(wxControl *control, const wxString& label)
{
- return new wxToolBarTool(this, control);
+ return new wxToolBarTool(this, control, label);
}
void wxToolBarTool::Init()
{
if( !wxControl::CreateControl( parent, id, pos, size, style,
wxDefaultValidator, name ) )
- return FALSE;
+ return false;
+ PreCreation();
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+ FixupStyle();
Widget parentWidget = (Widget) parent->GetClientWidget();
m_mainWidget = (WXWidget) toolbar;
- ChangeFont(FALSE);
-
wxPoint rPos = pos;
wxSize rSize = size;
if( rSize.x == -1 && GetParent() )
rSize.x = GetParent()->GetSize().x;
- SetCanAddEventHandler(TRUE);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
rPos.x, rPos.y, rSize.x, rSize.y);
- ChangeBackgroundColour();
-
- return TRUE;
+ return true;
}
wxToolBar::~wxToolBar()
if ( m_tools.GetCount() == 0 )
{
// nothing to do
- return TRUE;
+ return true;
}
bool isVertical = GetWindowStyle() & wxTB_VERTICAL;
int buttonHeight = 0, buttonWidth = 0;
- int currentSpacing = 0;
-
Widget button;
Pixmap pixmap, insensPixmap;
wxBitmap bmp, insensBmp;
- wxToolBarToolsList::Node *node = m_tools.GetFirst();
+ wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
while ( node )
{
wxToolBarTool *tool = (wxToolBarTool *)node->GetData();
if( !tool->GetButtonWidget() )
{
- DoChangeBackgroundColour((WXWidget) button,
- m_backgroundColour, TRUE);
+ wxDoChangeBackgroundColour((WXWidget) button,
+ m_backgroundColour, true);
tool->SetWidget(button);
}
insensBmp = tool->GetDisabledBitmap();
if ( bmp.GetMask() || insensBmp.GetMask() )
{
- int backgroundPixel;
+ WXPixel backgroundPixel;
XtVaGetValues(button, XmNbackground, &backgroundPixel,
NULL);
wxColour col;
col.SetPixel(backgroundPixel);
- if( bmp.GetMask() )
+ if( bmp.Ok() && bmp.GetMask() )
{
bmp = wxCreateMaskedBitmap(bmp, col);
tool->SetNormalBitmap(bmp);
}
- if( insensBmp.GetMask() )
+ if( insensBmp.Ok() && insensBmp.GetMask() )
{
insensBmp = wxCreateMaskedBitmap(insensBmp, col);
tool->SetDisabledBitmap(insensBmp);
// Create a selected/toggled bitmap. If there isn't a 2nd
// bitmap, we need to create it (with a darker, selected
// background)
- int backgroundPixel;
+ WXPixel backgroundPixel;
if ( tool->CanBeToggled() )
XtVaGetValues(button, XmNselectColor, &backgroundPixel,
NULL);
wxColour col;
col.SetPixel(backgroundPixel);
- pixmap = (Pixmap) bmp.GetPixmap();
+ pixmap = (Pixmap) bmp.GetDrawable();
{
wxBitmap tmp = tool->GetDisabledBitmap();
insensPixmap = tmp.Ok() ?
- (Pixmap)tmp.GetPixmap() :
+ (Pixmap)tmp.GetDrawable() :
tool->GetInsensPixmap();
}
-
+
if (tool->CanBeToggled())
{
// Toggle button
XtAddEventHandler (button, EnterWindowMask | LeaveWindowMask,
False, wxToolButtonPopupCallback, (XtPointer) this);
- currentSpacing = 0;
break;
}
isVertical ? buttonWidth + 2 * marginX : -1,
isVertical ? -1 : buttonHeight + 2*marginY );
- return TRUE;
+ return true;
}
wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord WXUNUSED(x),
{
tool->Attach(this);
- return TRUE;
+ return true;
}
-bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool)
+bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
{
tool->Detach();
int packing = GetToolPacking();
int offset = 0;
- for( wxToolBarToolsList::Node *node = m_tools.GetFirst();
+ for( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
node; node = node->GetNext() )
{
wxToolBarTool *t = (wxToolBarTool*)node->GetData();
offset = isVertical ? size.y : size.x;
offset += packing;
break;
- }
+ }
case wxTOOL_STYLE_SEPARATOR:
offset = isVertical ? 0 : separatorSize;
break;
{
case wxTOOL_STYLE_CONTROL:
{
- wxPoint pos = t->GetControl()->GetPosition();
+ wxPoint location = t->GetControl()->GetPosition();
if( isVertical )
- pos.y -= offset;
+ location.y -= offset;
else
- pos.x -= offset;
+ location.x -= offset;
- t->GetControl()->Move( pos );
+ t->GetControl()->Move( location );
break;
}
case wxTOOL_STYLE_SEPARATOR:
NULL );
if( isVertical )
- y -= offset;
+ y = (Dimension)(y - offset);
else
- x -= offset;
+ x = (Dimension)(x - offset);
XtVaSetValues( t->GetButtonWidget(),
XmNx, x,
}
}
- return TRUE;
+ return true;
}
void wxToolBar::DoEnableTool(wxToolBarToolBase *toolBase, bool enable)
{
wxToolBarTool *tool = (wxToolBarTool *)toolBase;
-
- XtSetSensitive(tool->GetButtonWidget(), (Boolean) enable);
+ if (tool->GetButtonWidget()){
+ XtSetSensitive(tool->GetButtonWidget(), (Boolean) enable);
+ } else if (wxTOOL_STYLE_CONTROL == tool->GetStyle()){
+ // Controls (such as wxChoice) do not have button widgets
+ tool->GetControl()->Enable(enable);
+ }
}
void wxToolBar::DoToggleTool(wxToolBarToolBase *toolBase, bool toggle)
}
wxToolBarBase::DoSetSize(x, y, width, height, sizeFlags);
-
+
// We must refresh the frame size when the toolbar changes size
// otherwise the toolbar can be shown incorrectly
if ( old_width != width || old_height != height )
{
- // But before we send the size event check it
+ // But before we send the size event check it
// we have a frame that is not being deleted.
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
if ( frame && !frame->IsBeingDeleted() )
wxToolBarToolBase *wxToolBar::FindToolByWidget(WXWidget w) const
{
- wxToolBarToolsList::Node* node = m_tools.GetFirst();
+ wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
while ( node )
{
wxToolBarTool *tool = (wxToolBarTool *)node->GetData();
wxToolBarTimer::help_popup = (Widget) 0;
// One shot
- wxTheToolBarTimer->Start(delayMilli, TRUE);
+ wxTheToolBarTimer->Start(delayMilli, true);
}
/************************************************************/
// Move the tooltip more or less above the button
int yOffset = 20; // TODO: What should be really?
- y -= yOffset;
+ y = (Position)(y - yOffset);
if (y < yOffset) y = 0;
/************************************************************/
/************************************************************/
XtPopup (help_popup, XtGrabNone);
}
-