]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/tbargtk.cpp
Version 0.4 of wxPython for MSW.
[wxWidgets.git] / src / gtk1 / tbargtk.cpp
index a91334c3f03289fefa1c6e6bb156e5e42cbab53f..57bd59292ebfd74daad9eb3ca7993587c618aa32 100644 (file)
 #include "wx/toolbar.h"
 #include <wx/intl.h>
 
+//-----------------------------------------------------------------------------
+// data
+//-----------------------------------------------------------------------------
+
+extern bool   g_blockEventsOnDrag;
+
 //-----------------------------------------------------------------------------
 // wxToolBarTool
 //-----------------------------------------------------------------------------
@@ -48,11 +54,12 @@ wxToolBarTool::~wxToolBarTool()
 }
 
 //-----------------------------------------------------------------------------
-// wxToolBar
+// "clicked" (internal from gtk_toolbar)
 //-----------------------------------------------------------------------------
 
 static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *tool )
 {
+  if (g_blockEventsOnDrag) return;
   if (!tool->m_enabled) return;
 
   if (tool->m_isToggle) tool->m_toggleState = !tool->m_toggleState;
@@ -60,12 +67,25 @@ static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *to
   tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState );
 }
 
+//-----------------------------------------------------------------------------
+// "enter_notify_event"
 //-----------------------------------------------------------------------------
 
-IMPLEMENT_DYNAMIC_CLASS(wxToolBar,wxControl)
+static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget), 
+  GdkEventCrossing *WXUNUSED(gdk_event), wxToolBarTool *tool )
+{
+  if (g_blockEventsOnDrag) return TRUE;
+  
+  tool->m_owner->OnMouseEnter( tool->m_index );
+  
+  return FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// wxToolBar
+//-----------------------------------------------------------------------------
 
-BEGIN_EVENT_TABLE(wxToolBar, wxControl)
-END_EVENT_TABLE()
+IMPLEMENT_DYNAMIC_CLASS(wxToolBar,wxControl)
 
 wxToolBar::wxToolBar()
 {
@@ -130,10 +150,10 @@ void wxToolBar::OnRightClick( int toolIndex, float WXUNUSED(x), float WXUNUSED(y
 
 void wxToolBar::OnMouseEnter( int toolIndex )
 {
-  wxCommandEvent event( wxEVT_COMMAND_TOOL_ENTER, toolIndex );
+  wxCommandEvent event( wxEVT_COMMAND_TOOL_ENTER, GetId() );
   event.SetEventObject(this);
   event.SetInt( toolIndex );
-
+  
   GetEventHandler()->ProcessEvent(event);
 }
 
@@ -142,24 +162,38 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
   float WXUNUSED(xPos), float WXUNUSED(yPos), wxObject *clientData,
   const wxString& helpString1, const wxString& helpString2 )
 {
-  if (!bitmap.Ok()) return NULL;
+  if (!bitmap.Ok()) return (wxToolBarTool *) NULL;
 
   wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap, toggle,
     clientData, helpString1, helpString2 );
 
-  GdkPixmap *pixmap = bitmap.GetPixmap();
-
-  GdkBitmap *mask = NULL;
-  if (bitmap.GetMask()) mask = bitmap.GetMask()->GetBitmap();
+  GtkWidget *tool_pixmap = (GtkWidget *) NULL;
+  
+  wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL, "wxToolBar doesn't support GdkBitmap" )
+  
+  wxCHECK_MSG( bitmap.GetPixmap() != NULL, (wxToolBarTool *)NULL, "wxToolBar::Add needs a wxBitmap" )
+  
+  if (TRUE)
+  {
+    GdkPixmap *pixmap = bitmap.GetPixmap();
 
-  GtkWidget *tool_pixmap = gtk_pixmap_new( pixmap, mask );
+    GdkBitmap *mask = (GdkBitmap *) NULL;
+    if (bitmap.GetMask()) mask = bitmap.GetMask()->GetBitmap();
+    
+    tool_pixmap = gtk_pixmap_new( pixmap, mask );
+  }
+  
   gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
 
   GtkToolbarChildType ctype = GTK_TOOLBAR_CHILD_BUTTON;
   if (toggle) ctype = GTK_TOOLBAR_CHILD_TOGGLEBUTTON;
 
-  tool->m_item = gtk_toolbar_append_element( m_toolbar, ctype, NULL, NULL, helpString1, "", tool_pixmap, 
-                                             (GtkSignalFunc)gtk_toolbar_callback, (gpointer)tool );
+  tool->m_item = gtk_toolbar_append_element( 
+    m_toolbar, ctype, (GtkWidget *) NULL, (const char *) NULL,  helpString1, "",  
+    tool_pixmap,  (GtkSignalFunc)gtk_toolbar_callback, (gpointer)tool );
+
+  gtk_signal_connect( GTK_OBJECT(tool->m_item), "enter_notify_event", 
+      GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback), (gpointer)tool );
 
   m_tools.Append( tool );