#pragma implementation "toolbar.h"
#endif
+#ifdef __VMS
+#define XtDisplay XTDISPLAY
+#endif
+
#include "wx/wx.h"
#include "wx/app.h"
#include "wx/timer.h"
// ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
+IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase)
#endif
// ----------------------------------------------------------------------------
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();
}
// 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 wxString& label,
+ const wxBitmap& bmpNormal,
+ const wxBitmap& bmpToggled,
+ wxItemKind kind,
+ wxObject *clientData,
+ const wxString& shortHelp,
+ const wxString& longHelp)
{
- return new wxToolBarTool(tbar, id, bitmap1, bitmap2, toggle,
- clientData, shortHelpString, longHelpString);
+ return new wxToolBarTool(this, id, label, bmpNormal, bmpToggled, kind,
+ clientData, shortHelp, longHelp);
}
-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()
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);
}
// ----------------------------------------------------------------------------
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,
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;
// Separator spacing
const int separatorSize = GetToolSeparation(); // 8;
wxSize margins = GetToolMargins();
+ int packing = GetToolPacking();
int marginX = margins.x;
int marginY = margins.y;
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();
+ // 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;
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);
// 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;
wxColour col;
col.SetPixel(backgroundPixel);
- wxBitmap newBitmap = wxCreateMaskedBitmap(bmp, col);
+ bmp = wxCreateMaskedBitmap(bmp, col);
- tool->SetBitmap1(newBitmap);
+ tool->SetNormalBitmap(bmp);
}
// Create a selected/toggled bitmap. If there isn't a 2nd
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
{
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();
// 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
{
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,
// 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
{
pixmap2 = (Pixmap) bmp.GetArmPixmap(button);
}
+
+ tool->SetPixmap(pixmap2);
+
// Normal button
XtVaSetValues(button,
XmNlabelPixmap, pixmap,
XmNarmPixmap, pixmap2,
NULL);
}
+
XtManageChild(button);
{
XmNwidth, &width,
XmNheight, & height,
NULL);
- currentX += width + marginX;
+ currentX += width + packing;
buttonHeight = wxMax(buttonHeight, height);
}
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 )
node = node->GetNext();
}
- return (wxToolBarTool *)NULL;
+ return (wxToolBarToolBase *)NULL;
}
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;
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;