implemented (but it doesn't work yet) the radio buttons and text in the buttons for the GTK toolbars

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14777 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-03-25 21:38:18 +00:00
parent 4072ec3546
commit e76c0b5fc5
8 changed files with 411 additions and 163 deletions

View File

@@ -54,6 +54,8 @@ public:
virtual void SetToolShortHelp(int id, const wxString& helpString);
virtual void SetWindowStyleFlag( long style );
// implementation from now on
// --------------------------
@@ -70,6 +72,9 @@ protected:
// common part of all ctors
void Init();
// set the GTK toolbar style and orientation
void GtkSetStyle();
// implement base class pure virtuals
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
@@ -79,9 +84,10 @@ protected:
virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString);

View File

@@ -54,6 +54,8 @@ public:
virtual void SetToolShortHelp(int id, const wxString& helpString);
virtual void SetWindowStyleFlag( long style );
// implementation from now on
// --------------------------
@@ -70,6 +72,9 @@ protected:
// common part of all ctors
void Init();
// set the GTK toolbar style and orientation
void GtkSetStyle();
// implement base class pure virtuals
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
@@ -79,9 +84,10 @@ protected:
virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
virtual wxToolBarToolBase *CreateTool(int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString);

View File

@@ -66,23 +66,26 @@ public:
wxToolBarToolBase(wxToolBarBase *tbar = (wxToolBarBase *)NULL,
int id = wxID_SEPARATOR,
const wxBitmap& bitmap1 = wxNullBitmap,
const wxBitmap& bitmap2 = wxNullBitmap,
bool toggle = FALSE,
const wxString& label = wxEmptyString,
const wxBitmap& bmpNormal = wxNullBitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
wxObject *clientData = (wxObject *) NULL,
const wxString& shortHelpString = wxEmptyString,
const wxString& longHelpString = wxEmptyString)
: m_shortHelpString(shortHelpString),
: m_label(label),
m_shortHelpString(shortHelpString),
m_longHelpString(longHelpString)
{
m_tbar = tbar;
m_id = id;
m_clientData = clientData;
m_bitmap1 = bitmap1;
m_bitmap2 = bitmap2;
m_bmpNormal = bmpNormal;
m_bmpDisabled = bmpDisabled;
m_kind = kind;
m_isToggle = toggle;
m_enabled = TRUE;
m_toggled = FALSE;
@@ -96,7 +99,8 @@ public:
m_control = control;
m_id = control->GetId();
m_isToggle = FALSE;
m_kind = wxITEM_MAX; // invalid value
m_enabled = TRUE;
m_toggled = FALSE;
@@ -125,15 +129,22 @@ public:
bool IsControl() const { return m_toolStyle == wxTOOL_STYLE_CONTROL; }
bool IsSeparator() const { return m_toolStyle == wxTOOL_STYLE_SEPARATOR; }
int GetStyle() const { return m_toolStyle; }
wxItemKind GetKind() const
{
wxASSERT_MSG( IsButton(), _T("only makes sense for buttons") );
return m_kind;
}
// state
bool IsEnabled() const { return m_enabled; }
bool IsToggled() const { return m_toggled; }
bool CanBeToggled() const { return m_isToggle; }
bool CanBeToggled() const
{ return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; }
// attributes
const wxBitmap& GetNormalBitmap() const { return m_bitmap1; }
const wxBitmap& GetDisabledBitmap() const { return m_bitmap2; }
const wxBitmap& GetNormalBitmap() const { return m_bmpNormal; }
const wxBitmap& GetDisabledBitmap() const { return m_bmpDisabled; }
const wxBitmap& GetBitmap() const
{ return IsEnabled() ? GetNormalBitmap() : GetDisabledBitmap(); }
@@ -164,8 +175,8 @@ public:
void Toggle() { Toggle(!IsToggled()); }
void SetNormalBitmap(const wxBitmap& bmp) { m_bitmap1 = bmp; }
void SetDisabledBitmap(const wxBitmap& bmp) { m_bitmap2 = bmp; }
void SetNormalBitmap(const wxBitmap& bmp) { m_bmpNormal = bmp; }
void SetDisabledBitmap(const wxBitmap& bmp) { m_bmpDisabled = bmp; }
void SetLabel(const wxString& label) { m_label = label; }
@@ -197,8 +208,10 @@ public:
protected:
wxToolBarBase *m_tbar; // the toolbar to which we belong (may be NULL)
int m_toolStyle; // see enum wxToolBarToolStyle
int m_id; // the tool id, wxID_SEPARATOR for separator
// tool parameters
int m_toolStyle; // see enum wxToolBarToolStyle
int m_id; // the tool id, wxID_SEPARATOR for separator
wxItemKind m_kind; // for normal buttons may be wxITEM_NORMAL/CHECK/RADIO
// as controls have their own client data, no need to waste memory
union
@@ -209,12 +222,11 @@ protected:
// tool state
bool m_toggled;
bool m_isToggle;
bool m_enabled;
// normal and disabled bitmaps
wxBitmap m_bitmap1;
wxBitmap m_bitmap2;
// normal and disabled bitmaps for the tool, both can be invalid
wxBitmap m_bmpNormal;
wxBitmap m_bmpDisabled;
// the button label
wxString m_label;
@@ -240,44 +252,60 @@ public:
// toolbar construction
// --------------------
// the most commonly used version of AddTool()
// the full AddTool() function
//
// If bmpDisabled is wxNullBitmap, a shadowed version of the normal bitmap
// is created and used as the disabled image.
wxToolBarToolBase *AddTool(int id,
const wxString& label,
const wxBitmap& bitmap,
const wxString& shortHelpString = wxEmptyString,
const wxString& longHelpString = wxEmptyString)
const wxBitmap& bmpDisabled,
wxItemKind kind = wxITEM_NORMAL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *data = NULL)
{
return AddTool(id, bitmap, wxNullBitmap, FALSE, NULL,
shortHelpString, longHelpString);
return DoAddTool(id, label, bitmap, bmpDisabled, kind,
shortHelp, longHelp, data);
}
// If pushedBitmap is NULL, a reversed version of bitmap is created and
// used as the pushed/toggled image. If toggle is TRUE, the button toggles
// between the two states.
// the most common AddTool() version
wxToolBarToolBase *AddTool(int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap,
bool toggle = FALSE,
wxObject *clientData = NULL,
const wxString& shortHelpString = wxEmptyString,
const wxString& longHelpString = wxEmptyString)
const wxString& shortHelp = wxEmptyString,
wxItemKind kind = wxITEM_NORMAL)
{
return AddTool(id, bitmap, pushedBitmap, toggle,
-1, -1, clientData, shortHelpString, longHelpString);
return AddTool(id, label, bitmap, wxNullBitmap, kind, shortHelp);
}
// add a check tool, i.e. a tool which can be toggled
wxToolBarToolBase *AddCheckTool(int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *data = NULL)
{
return AddTool(id, label, bitmap, bmpDisabled, wxITEM_CHECK,
shortHelp, longHelp, data);
}
// add a radio tool, i.e. a tool which can be toggled and releases any
// other toggled radio tools in the same group when it happens
wxToolBarToolBase *AddRadioTool(int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *data = NULL)
{
return AddTool(id, label, bitmap, bmpDisabled, wxITEM_RADIO,
shortHelp, longHelp, data);
}
// the old version of AddTool() kept for compatibility
virtual wxToolBarToolBase *AddTool
(
int id,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap,
bool toggle,
wxCoord xPos,
wxCoord yPos = -1,
wxObject *clientData = NULL,
const wxString& helpString1 = wxEmptyString,
const wxString& helpString2 = wxEmptyString
);
// insert the new tool at the given position, if pos == GetToolsCount(), it
// is equivalent to AddTool()
@@ -285,12 +313,13 @@ public:
(
size_t pos,
int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap = wxNullBitmap,
bool toggle = FALSE,
wxObject *clientData = NULL,
const wxString& help1 = wxEmptyString,
const wxString& help2 = wxEmptyString
const wxBitmap& bmpDisabled = wxNullBitmap,
wxItemKind kind = wxITEM_NORMAL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *clientData = NULL
);
// add an arbitrary control to the toolbar, return TRUE if ok (notice that
@@ -354,12 +383,9 @@ public:
virtual void SetToolSeparation(int separation)
{ m_toolSeparation = separation; }
virtual wxSize GetToolMargins() { return GetMargins(); }
virtual int GetToolPacking() { return m_toolPacking; }
virtual int GetToolSeparation() { return m_toolSeparation; }
// for compatibility
wxSize GetMargins() const { return wxSize(m_xMargin, m_yMargin); }
virtual wxSize GetToolMargins() const { return wxSize(m_xMargin, m_yMargin); }
virtual int GetToolPacking() const { return m_toolPacking; }
virtual int GetToolSeparation() const { return m_toolSeparation; }
// toolbar geometry
// ----------------
@@ -393,6 +419,64 @@ public:
// return TRUE if this is a vertical toolbar, otherwise FALSE
bool IsVertical() const { return HasFlag(wxTB_VERTICAL); }
// the old versions of the various methods kept for compatibility
// don't use in the new code!
// --------------------------------------------------------------
wxToolBarToolBase *AddTool(int id,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
bool toggle = FALSE,
wxObject *clientData = NULL,
const wxString& shortHelpString = wxEmptyString,
const wxString& longHelpString = wxEmptyString)
{
return AddTool(id, wxEmptyString,
bitmap, bmpDisabled,
toggle ? wxITEM_CHECK : wxITEM_NORMAL,
shortHelpString, longHelpString, clientData);
}
wxToolBarToolBase *AddTool(int id,
const wxBitmap& bitmap,
const wxString& shortHelpString = wxEmptyString,
const wxString& longHelpString = wxEmptyString)
{
return AddTool(id, wxEmptyString,
bitmap, wxNullBitmap, wxITEM_NORMAL,
shortHelpString, longHelpString, NULL);
}
wxToolBarToolBase *AddTool(int id,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
bool toggle,
wxCoord xPos,
wxCoord yPos = -1,
wxObject *clientData = NULL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString)
{
return DoAddTool(id, wxEmptyString, bitmap, bmpDisabled,
toggle ? wxITEM_CHECK : wxITEM_NORMAL,
shortHelp, longHelp, clientData, xPos, yPos);
}
wxToolBarToolBase *InsertTool(size_t pos,
int id,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled = wxNullBitmap,
bool toggle = FALSE,
wxObject *clientData = NULL,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString)
{
return InsertTool(pos, id, wxEmptyString, bitmap, bmpDisabled,
toggle ? wxITEM_CHECK : wxITEM_NORMAL,
shortHelp, longHelp, clientData);
}
// event handlers
// --------------
@@ -422,6 +506,9 @@ public:
virtual wxSize GetDefaultButtonSize() const { return GetToolSize(); }
#endif // WXWIN_COMPATIBILITY
// use GetToolMargins() instead
wxSize GetMargins() const { return GetToolMargins(); }
// implementation only from now on
// -------------------------------
@@ -439,6 +526,22 @@ protected:
// to implement in derived classes
// -------------------------------
// create a new toolbar tool and add it to the toolbar, this is typically
// implemented by just calling InsertTool()
virtual wxToolBarToolBase *DoAddTool
(
int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *clientData = NULL,
wxCoord xPos = -1,
wxCoord yPos = -1
);
// the tool is not yet inserted into m_tools list when this function is
// called and will only be added to it if this function succeeds
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool) = 0;
@@ -458,12 +561,14 @@ protected:
// the functions to create toolbar tools
virtual wxToolBarToolBase *CreateTool(int id,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString) = 0;
const wxString& shortHelp,
const wxString& longHelp) = 0;
virtual wxToolBarToolBase *CreateTool(wxControl *control) = 0;
// helper functions

View File

@@ -54,19 +54,6 @@ public:
virtual ~wxToolBarSimple();
// override/implement base class virtuals
virtual wxToolBarToolBase *AddTool
(
int id,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap,
bool toggle,
wxCoord xPos,
wxCoord yPos = -1,
wxObject *clientData = NULL,
const wxString& helpString1 = wxEmptyString,
const wxString& helpString2 = wxEmptyString
);
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
virtual bool Realize();
@@ -119,6 +106,20 @@ protected:
void Init();
// implement base class pure virtuals
virtual wxToolBarToolBase *DoAddTool
(
int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp = wxEmptyString,
const wxString& longHelp = wxEmptyString,
wxObject *clientData = NULL,
wxCoord xPos = -1,
wxCoord yPos = -1
);
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
@@ -127,12 +128,13 @@ protected:
virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
virtual wxToolBarToolBase *CreateTool(int id,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString);
const wxString& shortHelp,
const wxString& longHelp);
virtual wxToolBarToolBase *CreateTool(wxControl *control);
// helpers

View File

@@ -74,7 +74,7 @@ bool wxToolBarToolBase::Enable(bool enable)
bool wxToolBarToolBase::Toggle(bool toggle)
{
wxASSERT_MSG( m_isToggle, _T("can't toggle this tool") );
wxASSERT_MSG( CanBeToggled(), _T("can't toggle this tool") );
if ( m_toggled == toggle )
return FALSE;
@@ -86,10 +86,11 @@ bool wxToolBarToolBase::Toggle(bool toggle)
bool wxToolBarToolBase::SetToggle(bool toggle)
{
if ( m_isToggle == toggle )
wxItemKind kind = toggle ? wxITEM_CHECK : wxITEM_NORMAL;
if ( m_kind == kind )
return FALSE;
m_isToggle = toggle;
m_kind = kind;
return TRUE;
}
@@ -132,34 +133,36 @@ wxToolBarBase::wxToolBarBase()
m_maxRows = m_maxCols = 0;
}
wxToolBarToolBase *wxToolBarBase::AddTool(int id,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap,
bool toggle,
wxCoord WXUNUSED(xPos),
wxCoord WXUNUSED(yPos),
wxObject *clientData,
const wxString& helpString1,
const wxString& helpString2)
wxToolBarToolBase *wxToolBarBase::DoAddTool(int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp,
const wxString& longHelp,
wxObject *clientData,
wxCoord WXUNUSED(xPos),
wxCoord WXUNUSED(yPos))
{
return InsertTool(GetToolsCount(), id, bitmap, pushedBitmap,
toggle, clientData, helpString1, helpString2);
return InsertTool(GetToolsCount(), id, label, bitmap, bmpDisabled,
kind, shortHelp, longHelp, clientData);
}
wxToolBarToolBase *wxToolBarBase::InsertTool(size_t pos,
int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap,
bool toggle,
wxObject *clientData,
const wxString& helpString1,
const wxString& helpString2)
const wxBitmap& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp,
const wxString& longHelp,
wxObject *clientData)
{
wxCHECK_MSG( pos <= GetToolsCount(), (wxToolBarToolBase *)NULL,
_T("invalid position in wxToolBar::InsertTool()") );
wxToolBarToolBase *tool = CreateTool(id, bitmap, pushedBitmap, toggle,
clientData, helpString1, helpString2);
wxToolBarToolBase *tool = CreateTool(id, label, bitmap, bmpDisabled, kind,
clientData, shortHelp, longHelp);
if ( !tool || !DoInsertTool(pos, tool) )
{
@@ -214,8 +217,9 @@ wxToolBarToolBase *wxToolBarBase::InsertSeparator(size_t pos)
_T("invalid position in wxToolBar::InsertSeparator()") );
wxToolBarToolBase *tool = CreateTool(wxID_SEPARATOR,
wxEmptyString,
wxNullBitmap, wxNullBitmap,
FALSE, (wxObject *)NULL,
wxITEM_SEPARATOR, (wxObject *)NULL,
wxEmptyString, wxEmptyString);
if ( !tool || !DoInsertTool(pos, tool) )

View File

@@ -48,14 +48,15 @@ class WXDLLEXPORT wxToolBarToolSimple : public wxToolBarToolBase
public:
wxToolBarToolSimple(wxToolBarSimple *tbar,
int id,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
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, bmpDisabled, kind,
clientData, shortHelp, longHelp)
{
}
@@ -73,10 +74,10 @@ public:
wxCoord GetWidth() const { return m_width; }
wxCoord GetHeight() const { return m_height; }
wxCoord m_x;
wxCoord m_y;
wxCoord m_width;
wxCoord m_height;
wxCoord m_x;
wxCoord m_y;
wxCoord m_width;
wxCoord m_height;
};
// ----------------------------------------------------------------------------
@@ -108,15 +109,16 @@ END_EVENT_TABLE()
// ----------------------------------------------------------------------------
wxToolBarToolBase *wxToolBarSimple::CreateTool(int id,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString)
const wxString& shortHelp,
const wxString& longHelp)
{
return new wxToolBarToolSimple(this, id, bitmap1, bitmap2, toggle,
clientData, shortHelpString, longHelpString);
return new wxToolBarToolSimple(this, id, label, bmpNormal, bmpDisabled,
kind, clientData, shortHelp, longHelp);
}
wxToolBarToolBase *wxToolBarSimple::CreateTool(wxControl *control)
@@ -162,23 +164,24 @@ void wxToolBarSimple::Init()
m_yScrollLinesPerPage = 0;
}
wxToolBarToolBase *wxToolBarSimple::AddTool(int id,
const wxBitmap& bitmap,
const wxBitmap& pushedBitmap,
bool toggle,
wxCoord xPos,
wxCoord yPos,
wxObject *clientData,
const wxString& helpString1,
const wxString& helpString2)
wxToolBarToolBase *wxToolBarSimple::DoAddTool(int id,
const wxString& label,
const wxBitmap& bitmap,
const wxBitmap& bmpDisabled,
wxItemKind kind,
const wxString& shortHelp,
const wxString& longHelp,
wxObject *clientData,
wxCoord xPos,
wxCoord yPos)
{
// rememeber the position for DoInsertTool()
m_xPos = xPos;
m_yPos = yPos;
return wxToolBarBase::AddTool(id, bitmap, pushedBitmap, toggle,
xPos, yPos, clientData,
helpString1, helpString2);
return wxToolBarBase::DoAddTool(id, label, bitmap, bmpDisabled, kind,
shortHelp, longHelp,
clientData, xPos, yPos);
}
bool wxToolBarSimple::DoInsertTool(size_t WXUNUSED(pos),

View File

@@ -43,6 +43,28 @@ extern bool g_isIdle;
extern bool g_blockEventsOnDrag;
extern wxCursor g_globalCursor;
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
// translate wxWindows toolbar style flags to GTK orientation and style
static void GetGtkStyle(long style,
GtkOrientation *orient, GtkToolbarStyle *gtkStyle)
{
*orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL
: GTK_ORIENTATION_HORIZONTAL;
if ( style & wxTB_TEXT )
{
*gtkStyle = style & wxTB_NOICONS ? GTK_TOOLBAR_TEXT : GTK_TOOLBAR_BOTH;
}
else // no text, hence we must have the icons or what would we show?
{
*gtkStyle = GTK_TOOLBAR_ICONS;
}
}
// ----------------------------------------------------------------------------
// wxToolBarTool
// ----------------------------------------------------------------------------
@@ -52,13 +74,14 @@ class wxToolBarTool : public wxToolBarToolBase
public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString)
: wxToolBarToolBase(tbar, id, bitmap1, bitmap2, toggle,
: wxToolBarToolBase(tbar, id, label, bitmap1, bitmap2, kind,
clientData, shortHelpString, longHelpString)
{
Init();
@@ -70,6 +93,27 @@ public:
Init();
}
// this is only called for the normal buttons, i.e. not separators nor
// controls
GtkToolbarChildType GetGtkChildType() const
{
switch ( GetKind() )
{
case wxITEM_CHECK:
return GTK_TOOLBAR_CHILD_TOGGLEBUTTON;
case wxITEM_RADIO:
return GTK_TOOLBAR_CHILD_RADIOBUTTON;
default:
wxFAIL_MSG( _T("unknown toolbar child type") );
// fall through
case wxITEM_NORMAL:
return GTK_TOOLBAR_CHILD_BUTTON;
}
}
GtkWidget *m_item;
GtkWidget *m_pixmap;
@@ -167,14 +211,15 @@ void wxToolBarTool::Init()
}
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& text,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString)
{
return new wxToolBarTool(this, id, bitmap1, bitmap2, toggle,
return new wxToolBarTool(this, id, text, bitmap1, bitmap2, kind,
clientData, shortHelpString, longHelpString);
}
@@ -219,15 +264,15 @@ bool wxToolBar::Create( wxWindow *parent,
return FALSE;
}
GtkOrientation orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL
: GTK_ORIENTATION_HORIZONTAL;
#ifdef __WXGTK20__
m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
gtk_toolbar_set_orientation(m_toolbar, orient);
gtk_toolbar_set_style(m_toolbar, GTK_TOOLBAR_ICONS);
GtkSetStyle();
#else
m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( orient, GTK_TOOLBAR_ICONS ) );
GtkOrientation orient;
GtkToolbarStyle gtkStyle;
GetGtkStyle(style, &orient, &gtkStyle);
m_toolbar = GTK_TOOLBAR( gtk_toolbar_new(orient, gtkStyle) );
#endif
SetToolSeparation(7);
@@ -293,6 +338,24 @@ bool wxToolBar::Create( wxWindow *parent,
return TRUE;
}
void wxToolBar::GtkSetStyle()
{
GtkOrientation orient;
GtkToolbarStyle style;
GetGtkStyle(GetWindowStyle(), &orient, &style);
gtk_toolbar_set_orientation(m_toolbar, orient);
gtk_toolbar_set_style(m_toolbar, style);
}
void wxToolBar::SetWindowStyleFlag( long style )
{
wxToolBarBase::SetWindowStyleFlag(style);
if ( m_toolbar )
GtkSetStyle();
}
bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
{
wxToolBarTool *tool = (wxToolBarTool *)toolBase;
@@ -337,11 +400,9 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
tool->m_item = gtk_toolbar_insert_element
(
m_toolbar,
tool->CanBeToggled()
? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
: GTK_TOOLBAR_CHILD_BUTTON,
tool->GetGtkChildType(),
(GtkWidget *)NULL,
(const char *)NULL,
tool->GetLabel().mbc_str(),
tool->GetShortHelp().mbc_str(),
"", // tooltip_private_text (?)
tool->m_pixmap,

View File

@@ -43,6 +43,28 @@ extern bool g_isIdle;
extern bool g_blockEventsOnDrag;
extern wxCursor g_globalCursor;
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
// translate wxWindows toolbar style flags to GTK orientation and style
static void GetGtkStyle(long style,
GtkOrientation *orient, GtkToolbarStyle *gtkStyle)
{
*orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL
: GTK_ORIENTATION_HORIZONTAL;
if ( style & wxTB_TEXT )
{
*gtkStyle = style & wxTB_NOICONS ? GTK_TOOLBAR_TEXT : GTK_TOOLBAR_BOTH;
}
else // no text, hence we must have the icons or what would we show?
{
*gtkStyle = GTK_TOOLBAR_ICONS;
}
}
// ----------------------------------------------------------------------------
// wxToolBarTool
// ----------------------------------------------------------------------------
@@ -52,13 +74,14 @@ class wxToolBarTool : public wxToolBarToolBase
public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString)
: wxToolBarToolBase(tbar, id, bitmap1, bitmap2, toggle,
: wxToolBarToolBase(tbar, id, label, bitmap1, bitmap2, kind,
clientData, shortHelpString, longHelpString)
{
Init();
@@ -70,6 +93,27 @@ public:
Init();
}
// this is only called for the normal buttons, i.e. not separators nor
// controls
GtkToolbarChildType GetGtkChildType() const
{
switch ( GetKind() )
{
case wxITEM_CHECK:
return GTK_TOOLBAR_CHILD_TOGGLEBUTTON;
case wxITEM_RADIO:
return GTK_TOOLBAR_CHILD_RADIOBUTTON;
default:
wxFAIL_MSG( _T("unknown toolbar child type") );
// fall through
case wxITEM_NORMAL:
return GTK_TOOLBAR_CHILD_BUTTON;
}
}
GtkWidget *m_item;
GtkWidget *m_pixmap;
@@ -167,14 +211,15 @@ void wxToolBarTool::Init()
}
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& text,
const wxBitmap& bitmap1,
const wxBitmap& bitmap2,
bool toggle,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelpString,
const wxString& longHelpString)
{
return new wxToolBarTool(this, id, bitmap1, bitmap2, toggle,
return new wxToolBarTool(this, id, text, bitmap1, bitmap2, kind,
clientData, shortHelpString, longHelpString);
}
@@ -219,15 +264,15 @@ bool wxToolBar::Create( wxWindow *parent,
return FALSE;
}
GtkOrientation orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL
: GTK_ORIENTATION_HORIZONTAL;
#ifdef __WXGTK20__
m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
gtk_toolbar_set_orientation(m_toolbar, orient);
gtk_toolbar_set_style(m_toolbar, GTK_TOOLBAR_ICONS);
GtkSetStyle();
#else
m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( orient, GTK_TOOLBAR_ICONS ) );
GtkOrientation orient;
GtkToolbarStyle gtkStyle;
GetGtkStyle(style, &orient, &gtkStyle);
m_toolbar = GTK_TOOLBAR( gtk_toolbar_new(orient, gtkStyle) );
#endif
SetToolSeparation(7);
@@ -293,6 +338,24 @@ bool wxToolBar::Create( wxWindow *parent,
return TRUE;
}
void wxToolBar::GtkSetStyle()
{
GtkOrientation orient;
GtkToolbarStyle style;
GetGtkStyle(GetWindowStyle(), &orient, &style);
gtk_toolbar_set_orientation(m_toolbar, orient);
gtk_toolbar_set_style(m_toolbar, style);
}
void wxToolBar::SetWindowStyleFlag( long style )
{
wxToolBarBase::SetWindowStyleFlag(style);
if ( m_toolbar )
GtkSetStyle();
}
bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
{
wxToolBarTool *tool = (wxToolBarTool *)toolBase;
@@ -337,11 +400,9 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
tool->m_item = gtk_toolbar_insert_element
(
m_toolbar,
tool->CanBeToggled()
? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
: GTK_TOOLBAR_CHILD_BUTTON,
tool->GetGtkChildType(),
(GtkWidget *)NULL,
(const char *)NULL,
tool->GetLabel().mbc_str(),
tool->GetShortHelp().mbc_str(),
"", // tooltip_private_text (?)
tool->m_pixmap,