]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/tbargtk.cpp
wxLog fix as for wxMSW
[wxWidgets.git] / src / gtk1 / tbargtk.cpp
index 671fa18e002f48c83467cc734492e71e6eb4f924..78e4e339ac8bffd99ebcf34d6f5a5c62221049de 100644 (file)
 
 #include "wx/toolbar.h"
 
+#include "glib.h"
+#include "gdk/gdk.h"
+#include "gtk/gtk.h"
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
 
 extern bool   g_blockEventsOnDrag;
 
-//-----------------------------------------------------------------------------
-// wxToolBarTool
-//-----------------------------------------------------------------------------
-
-IMPLEMENT_DYNAMIC_CLASS(wxToolBarTool,wxObject)
-
-wxToolBarTool::wxToolBarTool( wxToolBar *owner, int theIndex,
-                              const wxBitmap& bitmap1, const  wxBitmap& bitmap2,
-                              bool toggle, 
-                              wxObject *clientData,
-                              const wxString& shortHelpString,
-                              const wxString& longHelpString,
-                              GtkWidget *item  )
-{
-    m_owner = owner;
-    m_index = theIndex;
-    m_bitmap1 = bitmap1;
-    m_bitmap2 = bitmap2;
-    m_isToggle = toggle;
-    m_enabled = TRUE;
-    m_toggleState = FALSE;
-    m_shortHelpString = shortHelpString;
-    m_longHelpString = longHelpString;
-    m_isMenuCommand = TRUE;
-    m_clientData = clientData;
-    m_deleteSecondBitmap = FALSE;
-    m_item = item;
-}
-
-wxToolBarTool::~wxToolBarTool()
-{
-}
-
 //-----------------------------------------------------------------------------
 // "clicked" (internal from gtk_toolbar)
 //-----------------------------------------------------------------------------
@@ -74,8 +45,37 @@ static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget),
   GdkEventCrossing *WXUNUSED(gdk_event), wxToolBarTool *tool )
 {
     if (g_blockEventsOnDrag) return TRUE;
+    
+    /* we grey-out the tip text of disabled tool */
+    
+    wxToolBar *tb = tool->m_owner;
+    
+    if (tool->m_enabled)
+    {
+        if (tb->m_fg->red != 0)
+       {
+            tb->m_fg->red = 0;
+            tb->m_fg->green = 0;
+            tb->m_fg->blue = 0;
+            gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(tb->m_toolbar) ), tb->m_fg );
+            gtk_tooltips_set_colors( GTK_TOOLBAR(tb->m_toolbar)->tooltips, tb->m_bg, tb->m_fg );
+       }
+    }
+    else
+    {
+        if (tb->m_fg->red == 0)
+       {
+            tb->m_fg->red = 33000;
+            tb->m_fg->green = 33000;
+            tb->m_fg->blue = 33000;
+            gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(tb->m_toolbar) ), tb->m_fg );
+            gtk_tooltips_set_colors( GTK_TOOLBAR(tb->m_toolbar)->tooltips, tb->m_bg, tb->m_fg );
+       }
+    }
+    
+    /* emit the event */
   
-    tool->m_owner->OnMouseEnter( tool->m_index );
+    tb->OnMouseEnter( tool->m_index );
   
     return FALSE;
 }
@@ -99,6 +99,8 @@ wxToolBar::wxToolBar( wxWindow *parent, wxWindowID id,
 
 wxToolBar::~wxToolBar()
 {
+    delete m_fg;
+    delete m_bg;
 }
 
 bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
@@ -117,22 +119,33 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
     m_separation = 5;
     gtk_toolbar_set_space_size( m_toolbar, m_separation );
     m_hasToolAlready = FALSE;
-                                             
-    m_widget = GTK_WIDGET(m_toolbar);                                      
+
+    if (style & wxTB_DOCKABLE)
+    {
+        m_widget = gtk_handle_box_new();
+       gtk_container_add( GTK_CONTAINER(m_widget), GTK_WIDGET(m_toolbar) );
+       gtk_widget_show( GTK_WIDGET(m_toolbar) );
+    }
+    else
+    {     
+        m_widget = GTK_WIDGET(m_toolbar);
+    }
                                            
     gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE );
+
+    m_fg = new GdkColor;
+    m_fg->red = 0;
+    m_fg->green = 0;
+    m_fg->blue = 0;
+    gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), m_fg );
   
-    m_fg.red = 0;
-    m_fg.green = 0;
-    m_fg.blue = 0;
-    gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_fg );
-  
-    m_bg.red = 65535;
-    m_bg.green = 65535;
-    m_bg.blue = 50000;
-    gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_bg );
+    m_bg = new GdkColor;
+    m_bg->red = 65535;
+    m_bg->green = 65535;
+    m_bg->blue = 50000;
+    gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), m_bg );
   
-    gtk_tooltips_set_colors( GTK_TOOLBAR(m_toolbar)->tooltips, &m_bg, &m_fg );
+    gtk_tooltips_set_colors( GTK_TOOLBAR(m_toolbar)->tooltips, m_bg, m_fg );
 
     m_xMargin = 0;
     m_yMargin = 0;
@@ -188,10 +201,6 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
     wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL,
                  "invalid bitmap for wxToolBar icon" );
 
-    wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
-                                             toggle, clientData,
-                                             helpString1, helpString2 );
-
     wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL,
                  "wxToolBar doesn't support GdkBitmap" );
 
@@ -210,6 +219,11 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
   
     gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
 
+    wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
+                                             toggle, clientData,
+                                             helpString1, helpString2,
+                                            tool_pixmap );
+
     GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
                                        : GTK_TOOLBAR_CHILD_BUTTON;
 
@@ -280,8 +294,16 @@ void wxToolBar::EnableTool(int toolIndex, bool enable)
     {
         wxToolBarTool *tool = (wxToolBarTool*)node->Data();
         if (tool->m_index == toolIndex)
-        { 
+        {
             tool->m_enabled = enable;
+           
+/*   we don't disable the tools for now as the bitmaps don't get
+     greyed anyway and this also disables tooltips
+
+           if (tool->m_item)
+               gtk_widget_set_sensitive( tool->m_item, enable );
+*/
+               
             return;
         }
         node = node->Next();