#include "wx/frame.h"
-#include "glib.h"
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <glib.h>
+#include "wx/gtk/private.h"
extern GdkFont *GtkGetDefaultGuiFont();
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
// ----------------------------------------------------------------------------
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();
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;
}
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);
}
return FALSE;
}
- GtkOrientation orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL
- : GTK_ORIENTATION_HORIZONTAL;
- m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( orient, GTK_TOOLBAR_ICONS ) );
+#ifdef __WXGTK20__
+ m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
+ GtkSetStyle();
+#else
+ GtkOrientation orient;
+ GtkToolbarStyle gtkStyle;
+ GetGtkStyle(style, &orient, >kStyle);
+
+ m_toolbar = GTK_TOOLBAR( gtk_toolbar_new(orient, gtkStyle) );
+#endif
SetToolSeparation(7);
gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE );
+ // FIXME: there is no such function for toolbars in 2.0
+#ifndef __WXGTK20__
if (style & wxTB_FLAT)
gtk_toolbar_set_button_relief( GTK_TOOLBAR(m_toolbar), GTK_RELIEF_NONE );
+#endif
m_fg = new GdkColor;
GTK_TOOLBAR(m_toolbar)->tooltips->tip_window ) );
g_style->bg[GTK_STATE_NORMAL] = *m_bg;
- gdk_font_unref( g_style->font );
- g_style->font = gdk_font_ref( GtkGetDefaultGuiFont() );
+
+ SET_STYLE_FONT(g_style, GtkGetDefaultGuiFont());
+
gtk_widget_set_style( GTK_TOOLBAR(m_toolbar)->tooltips->tip_window, g_style );
m_parent->DoAddChild( this );
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;
if ( tool->IsButton() )
{
- wxBitmap bitmap = tool->GetBitmap1();
+ wxBitmap bitmap = tool->GetNormalBitmap();
wxCHECK_MSG( bitmap.Ok(), FALSE,
wxT("invalid bitmap for wxToolBar icon") );
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,
void wxToolBar::SetToolSeparation( int separation )
{
+ // FIXME: this function disappeared
+#ifndef __WXGTK20__
gtk_toolbar_set_space_size( m_toolbar, separation );
+#endif
+
m_toolSeparation = separation;
}