1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: GTK toolbar
4 // Author: Robert Roebling
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "tbargtk.h"
16 #include "wx/toolbar.h"
18 //-----------------------------------------------------------------------------
20 //-----------------------------------------------------------------------------
22 IMPLEMENT_DYNAMIC_CLASS(wxToolBarTool
,wxObject
)
24 wxToolBarTool::wxToolBarTool( wxToolBar
*owner
, int theIndex
,
25 const wxBitmap
& bitmap1
, const wxBitmap
& bitmap2
,
26 bool toggle
, wxObject
*clientData
,
27 const wxString
& shortHelpString
, const wxString
& longHelpString
)
35 m_toggleState
= FALSE
;
36 m_shortHelpString
= shortHelpString
;
37 m_longHelpString
= longHelpString
;
38 m_isMenuCommand
= TRUE
;
39 m_clientData
= clientData
;
40 m_deleteSecondBitmap
= FALSE
;
43 wxToolBarTool::~wxToolBarTool(void)
47 //-----------------------------------------------------------------------------
49 //-----------------------------------------------------------------------------
51 static void gtk_toolbar_callback( GtkWidget
*WXUNUSED(widget
), wxToolBarTool
*tool
)
53 if (!tool
->m_enabled
) return;
55 if (tool
->m_isToggle
) tool
->m_toggleState
= !tool
->m_toggleState
;
57 tool
->m_owner
->OnLeftClick( tool
->m_index
, tool
->m_toggleState
);
60 //-----------------------------------------------------------------------------
62 IMPLEMENT_DYNAMIC_CLASS(wxToolBar
,wxControl
)
64 BEGIN_EVENT_TABLE(wxToolBar
, wxControl
)
67 wxToolBar::wxToolBar(void)
71 wxToolBar::wxToolBar( wxWindow
*parent
, wxWindowID id
,
72 const wxPoint
& pos
, const wxSize
& size
,
73 long style
, const wxString
& name
)
75 Create( parent
, id
, pos
, size
, style
, name
);
78 wxToolBar::~wxToolBar(void)
82 bool wxToolBar::Create( wxWindow
*parent
, wxWindowID id
,
83 const wxPoint
& pos
, const wxSize
& size
,
84 long style
, const wxString
& name
)
88 PreCreation( parent
, id
, pos
, size
, style
, name
);
90 m_tools
.DeleteContents( TRUE
);
92 m_widget
= gtk_handle_box_new();
94 m_toolbar
= GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL
, GTK_TOOLBAR_ICONS
) );
96 gtk_container_add( GTK_CONTAINER(m_widget
), GTK_WIDGET(m_toolbar
) );
98 gtk_widget_show( GTK_WIDGET(m_toolbar
) );
107 bool wxToolBar::OnLeftClick( int toolIndex
, bool toggleDown
)
109 wxCommandEvent
event( wxEVENT_TYPE_MENU_COMMAND
, toolIndex
);
110 event
.SetEventObject( this );
111 event
.SetInt( toolIndex
);
112 event
.SetExtraLong( (long) toggleDown
);
115 wxCommandEvent event(wxEVT_COMMAND_TOOL_CLICKED, toolIndex);
116 event.SetEventObject(this);
117 event.SetInt( toolIndex );
118 event.SetExtraLong((long) toggleDown);
121 GetEventHandler()->ProcessEvent(event
);
126 void wxToolBar::OnRightClick( int toolIndex
, float WXUNUSED(x
), float WXUNUSED(y
) )
128 wxCommandEvent
event( wxEVENT_TYPE_MENU_COMMAND
, toolIndex
);
129 event
.SetEventObject( this );
130 event
.SetInt( toolIndex
);
132 GetEventHandler()->ProcessEvent(event
);
135 void wxToolBar::OnMouseEnter( int toolIndex
)
137 wxCommandEvent
event(wxEVT_COMMAND_TOOL_ENTER
, toolIndex
);
138 event
.SetEventObject(this);
139 event
.SetInt( toolIndex
);
141 GetEventHandler()->ProcessEvent(event
);
144 wxToolBarTool
*wxToolBar::AddTool( int toolIndex
, const wxBitmap
& bitmap
,
145 const wxBitmap
& pushedBitmap
, bool toggle
,
146 float WXUNUSED(xPos
), float WXUNUSED(yPos
), wxObject
*clientData
,
147 const wxString
& helpString1
, const wxString
& helpString2
)
149 if (!bitmap
.Ok()) return NULL
;
151 wxToolBarTool
*tool
= new wxToolBarTool( this, toolIndex
, bitmap
, pushedBitmap
, toggle
,
152 clientData
, helpString1
, helpString2
);
154 GdkPixmap
*pixmap
= bitmap
.GetPixmap();
156 GdkBitmap
*mask
= NULL
;
157 if (bitmap
.GetMask()) mask
= bitmap
.GetMask()->GetBitmap();
159 GtkWidget
*tool_pixmap
= gtk_pixmap_new( pixmap
, mask
);
160 gtk_misc_set_alignment( GTK_MISC(tool_pixmap
), 0.5, 0.5 );
162 GtkToolbarChildType ctype
= GTK_TOOLBAR_CHILD_BUTTON
;
163 if (toggle
) ctype
= GTK_TOOLBAR_CHILD_TOGGLEBUTTON
;
165 gtk_toolbar_append_element( m_toolbar
,
166 ctype
, NULL
, NULL
, helpString1
, "", tool_pixmap
, (GtkSignalFunc
)gtk_toolbar_callback
, (gpointer
)tool
);
168 m_tools
.Append( tool
);
173 void wxToolBar::AddSeparator(void)
175 gtk_toolbar_append_space( m_toolbar
);
178 void wxToolBar::ClearTools(void)
182 void wxToolBar::Layout(void)
189 wxNode
*node
= m_tools
.First();
192 wxToolBarTool
*tool
= (wxToolBarTool
*)node
->Data();
193 if (tool
->m_bitmap1
.Ok())
195 int tool_height
= tool
->m_bitmap1
.GetHeight();
196 if (tool_height
> m_height
) m_height
= tool_height
;
205 void wxToolBar::EnableTool(int toolIndex
, bool enable
)
209 void wxToolBar::ToggleTool(int toolIndex
, bool toggle
)
213 void wxToolBar::SetToggle(int toolIndex
, bool toggle
)
217 wxObject
*wxToolBar::GetToolClientData(int index
) const
221 bool wxToolBar::GetToolState(int toolIndex
) const
225 bool wxToolBar::GetToolEnabled(int toolIndex
) const
229 void wxToolBar::SetMargins(int x
, int y
)
233 void wxToolBar::SetToolPacking(int packing
)
237 void wxToolBar::SetToolSeparation(int separation
)