]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxEvtHandler::Disconect()
authorRobert Roebling <robert@roebling.de>
Thu, 18 Nov 1999 15:58:35 +0000 (15:58 +0000)
committerRobert Roebling <robert@roebling.de>
Thu, 18 Nov 1999 15:58:35 +0000 (15:58 +0000)
  Added wxToolBar::DeleteTool()
  Removed the WXWIN_COMP... defines from the common setup.h
  Some tests,

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4615 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
include/wx/event.h
include/wx/gtk/tbargtk.h
include/wx/gtk1/tbargtk.h
include/wx/setup.h
samples/toolbar/test.cpp
src/common/event.cpp
src/common/tbarbase.cpp
src/generic/treectrl.cpp
src/gtk/stattext.cpp
src/gtk/tbargtk.cpp
src/gtk1/stattext.cpp
src/gtk1/tbargtk.cpp

index 0d90ca6b44cdf868aed8b67a569bccd574b706b4..93e2619606e2279c258c653e06e3303744938221 100644 (file)
@@ -1380,6 +1380,16 @@ public:
                   wxObject *userData = (wxObject *) NULL )
         { Connect(id, -1, eventType, func, userData); }
 
+    bool Disconnect( int id, int lastId = -1, wxEventType eventType = wxEVT_NULL,
+                  wxObjectEventFunction func = NULL,
+                  wxObject *userData = (wxObject *) NULL );
+
+    // Convenience function: take just one id
+    bool Disconnect( int id, wxEventType eventType = wxEVT_NULL,
+                  wxObjectEventFunction func = NULL,
+                  wxObject *userData = (wxObject *) NULL )
+        { return Disconnect(id, -1, eventType, func, userData); }
+       
     // implementation from now on
     virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
     bool SearchDynamicEventTable( wxEvent& event );
index beb2e04416dbe49ca51d81aa42cae3936875998a..3d7c30d434c9522e34e8bc7ddcec3b1fd3e4d042 100644 (file)
@@ -83,8 +83,13 @@ public:
     // Add space
     virtual void AddSeparator();
     
+    // Delete tool by index (=id)
+    virtual bool DeleteTool(int toolIndex);
+
+    // Delete all tools
     virtual void ClearTools();
     
+    // Has to be called after adding tools or changing something
     virtual bool Realize();
 
     virtual void EnableTool(int toolIndex, bool enable);
index beb2e04416dbe49ca51d81aa42cae3936875998a..3d7c30d434c9522e34e8bc7ddcec3b1fd3e4d042 100644 (file)
@@ -83,8 +83,13 @@ public:
     // Add space
     virtual void AddSeparator();
     
+    // Delete tool by index (=id)
+    virtual bool DeleteTool(int toolIndex);
+
+    // Delete all tools
     virtual void ClearTools();
     
+    // Has to be called after adding tools or changing something
     virtual bool Realize();
 
     virtual void EnableTool(int toolIndex, bool enable);
index 0969a450ea73bcd54b32cb3234ffb1e28b5ca67a..226b2d3ed6de9e1e86fc9444051ecd3aec1ff3f4 100644 (file)
 #include "wx/gtk/setup.h"
 #endif
 
-/*
- * Compatibility defines: note that, in general, there is a a reason for not
- * compatible changes, so you should try to avoid defining WXWIN_COMPATIBILITY
- * and do so only if your program really can't be compiled otherwise.
- */
-
-/*
- * Compatibility with 1.66 API.
- * Level 0: no backward compatibility, all new features
- * Level 1: wxDC, OnSize (etc.) compatibility, but
- * some new features such as event tables
- */
-#define WXWIN_COMPATIBILITY 0
-
-/*
- * wxWindows 2.0 API compatibility. Possible values are:
- * 0:   no backwards compatibility
- * 1:   some backwards compatibility, but if it conflicts with the new
- *      features, use the new code, not the old one
- * 2:   maximum backwards compatiblity: even if compatibility can only be
- *      achieved by disabling new features, do it.
- */
-#define WXWIN_COMPATIBILITY_2 1
-
-/*
- * wxWindows 2.0 uses long for wxPoint/wxRect/wxSize member fields and wxDC
- * method arguments, wxWindows 2.1 and later uses wxCoord typedef which is
- * usually int. Using long leads to (justified) warnings about long to int
- * conversions from some compilers and is, generally speaking, unneeded.
- */
-#define wxUSE_COMPATIBLE_COORD_TYPES 0
-
-/*
- * Maximum compatibility with 2.0 API
- */
-#if WXWIN_COMPATIBILITY_2 == 2
-#undef wxUSE_COMPATIBLE_COORD_TYPES
-#define wxUSE_COMPATIBLE_COORD_TYPES 1
-#endif /* WXWIN_COMPATIBILITY_2_MAX */
-
 #endif
        /* _WX_SETUP_H_BASE_ */
index f6278e43a8b1aa11abfa37c02cba0085d2430da7..e28ab1498155ffd8fee9befe86c7363675edee87 100644 (file)
@@ -76,12 +76,9 @@ public:
 
     void OnToggleToolbar(wxCommandEvent& event);
     void OnEnablePrint(wxCommandEvent& event) { DoEnablePrint(); }
+    void OnDeletePrint(wxCommandEvent& event) { DoDeletePrint(); }
     void OnToggleHelp(wxCommandEvent& event) { DoToggleHelp(); }
 
-    void OnAppendMenu(wxCommandEvent& event);
-    void OnDeleteMenu(wxCommandEvent& event);
-    void OnToggleMenu(wxCommandEvent& event);
-
     void OnToolLeftClick(wxCommandEvent& event);
     void OnToolEnter(wxCommandEvent& event);
 
@@ -89,6 +86,7 @@ public:
 
 private:
     void DoEnablePrint();
+    void DoDeletePrint();
     void DoToggleHelp();
 
     bool                m_smallToolbar;
@@ -107,6 +105,7 @@ enum
 {
     IDM_TOOLBAR_TOGGLETOOLBAR = 200,
     IDM_TOOLBAR_ENABLEPRINT,
+    IDM_TOOLBAR_DELETEPRINT,
     IDM_TOOLBAR_TOGGLEHELP,
 
     ID_COMBO = 1000
@@ -125,6 +124,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 
     EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBAR, MyFrame::OnToggleToolbar)
     EVT_MENU(IDM_TOOLBAR_ENABLEPRINT, MyFrame::OnEnablePrint)
+    EVT_MENU(IDM_TOOLBAR_DELETEPRINT, MyFrame::OnDeletePrint)
     EVT_MENU(IDM_TOOLBAR_TOGGLEHELP, MyFrame::OnToggleHelp)
 
     EVT_MENU(-1, MyFrame::OnToolLeftClick)
@@ -214,8 +214,6 @@ bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons)
   currentX += width + 5;
   toolBar->AddTool(wxID_SAVE, *(toolBarBitmaps[2]), wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Toggle button 1");
 
-  toolBar->AddSeparator();
-
   wxComboBox *combo = new wxComboBox(toolBar, ID_COMBO);
   combo->Append("This");
   combo->Append("is a");
@@ -224,8 +222,6 @@ bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons)
   combo->Append("toolbar");
   toolBar->AddControl(combo);
 
-  toolBar->AddSeparator();
-  
   if ( !smallicons )
   {
       currentX += width + 5;
@@ -235,8 +231,7 @@ bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons)
       currentX += width + 5;
       toolBar->AddTool(wxID_PASTE, *(toolBarBitmaps[5]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Paste");
       currentX += width + 5;
-      toolBar->AddSeparator();
-      toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Print");
+      toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Delete this tool");
       currentX += width + 5;
       toolBar->AddSeparator();
       toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Help button");
@@ -278,6 +273,7 @@ MyFrame::MyFrame(wxFrame* parent,
     wxMenu *tbarMenu = new wxMenu;
     tbarMenu->Append(IDM_TOOLBAR_TOGGLETOOLBAR, "&Toggle toolbar", "Change the toolbar kind");
     tbarMenu->Append(IDM_TOOLBAR_ENABLEPRINT, "&Enable print button", "");
+    tbarMenu->Append(IDM_TOOLBAR_DELETEPRINT, "&Delete print button", "");
     tbarMenu->Append(IDM_TOOLBAR_TOGGLEHELP, "Toggle &help button", "");
 
     wxMenu *fileMenu = new wxMenu;
@@ -353,6 +349,11 @@ void MyFrame::OnToolLeftClick(wxCommandEvent& event)
     {
         DoToggleHelp();
     }
+    
+    if (event.GetId() == wxID_PRINT)
+    {
+        DoDeletePrint();
+    }
 }
 
 void MyFrame::OnCombo(wxCommandEvent& event)
@@ -369,6 +370,12 @@ void MyFrame::DoEnablePrint()
         tb->EnableTool( wxID_PRINT, TRUE );
 }
 
+void MyFrame::DoDeletePrint()
+{
+    wxToolBar *tb = GetToolBar();
+    tb->DeleteTool( wxID_PRINT );
+}
+
 void MyFrame::DoToggleHelp()
 {
     wxToolBar *tb = GetToolBar();
index b41f00363abb460ae80b552b1c897180badd995b..d3abd577abd1a6c260444ee7b48f2a3b54e2b663 100644 (file)
@@ -760,6 +760,7 @@ bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
     }
     return FALSE;
 }
+
 void wxEvtHandler::Connect( int id, int lastId,
                             wxEventType eventType,
                             wxObjectEventFunction func,
@@ -778,6 +779,33 @@ void wxEvtHandler::Connect( int id, int lastId,
     m_dynamicEvents->Append( (wxObject*) entry );
 }
 
+bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
+                  wxObjectEventFunction func,
+                  wxObject *userData )
+{
+    if (!m_dynamicEvents)
+        return FALSE;
+       
+    wxNode *node = m_dynamicEvents->First();
+    while (node)
+    {
+        wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+        if ((entry->m_id == id) &&
+            ((entry->m_lastId == lastId) || (lastId == -1)) &&
+            ((entry->m_eventType == eventType) || (eventType == wxEVT_NULL)) &&
+            ((entry->m_fn == func) || (func == (wxObjectEventFunction)NULL)) &&
+            ((entry->m_callbackUserData == userData) || (userData == (wxObject*)NULL)))
+        {
+            if (entry->m_callbackUserData) delete entry->m_callbackUserData;
+            m_dynamicEvents->DeleteNode( node );
+            delete entry;
+            return TRUE;
+        }
+        node = node->Next();
+    }
+    return FALSE;
+}
+
 bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
 {
     wxCHECK_MSG( m_dynamicEvents, FALSE,
index 98eed8bbd5e43d0d81556219e0f62d4571eb4435..615d76c560c73209cf5d2637db44c8ed81c987bf 100644 (file)
@@ -90,6 +90,7 @@ wxToolBarTool::wxToolBarTool(int theIndex,
   }
   m_shortHelpString = helpS1;
   m_longHelpString = helpS2;
+  m_control = (wxControl*) NULL;
 }
 
 wxToolBarTool::wxToolBarTool(wxControl *control)
index bd47f172a7ea8559b41edfd4bdb63d05896d436f..aaaeeed06b3268ff9f7c6d213d7d27cadadf07d8 100644 (file)
@@ -945,32 +945,32 @@ void wxTreeCtrl::DeleteChildren(const wxTreeItemId& itemId)
 
 void wxTreeCtrl::Delete(const wxTreeItemId& itemId)
 {
-  wxGenericTreeItem *item = itemId.m_pItem;
-  wxGenericTreeItem *parent = item->GetParent();
+    wxGenericTreeItem *item = itemId.m_pItem;
+    wxGenericTreeItem *parent = item->GetParent();
 
-  if ( parent )
-  {
-    parent->GetChildren().Remove(item);
-  }
+    if ( parent )
+    {
+        parent->GetChildren().Remove( item );  // remove by value
+    }
 
-  item->DeleteChildren(this);
-  SendDeleteEvent(item);
-  delete item;
+    item->DeleteChildren(this);
+    SendDeleteEvent(item);
+    delete item;
 
-  m_dirty = TRUE;
+    m_dirty = TRUE;
 }
 
 void wxTreeCtrl::DeleteAllItems()
 {
-  if ( m_anchor )
-  {
-    m_anchor->DeleteChildren(this);
-    delete m_anchor;
+    if ( m_anchor )
+    {
+        m_anchor->DeleteChildren(this);
+        delete m_anchor;
 
-    m_anchor = NULL;
+        m_anchor = NULL;
 
-    m_dirty = TRUE;
-  }
+        m_dirty = TRUE;
+    }
 }
 
 void wxTreeCtrl::Expand(const wxTreeItemId& itemId)
index 011b4b21a678e42ee5a3e37690acdf289077a082..6816895a376b901859df451e4613891be1a4c53d 100644 (file)
@@ -61,6 +61,8 @@ bool wxStaticText::Create(wxWindow *parent,
     // effect of changing the control size which might not be desirable
     wxControl::SetLabel(label);
     m_widget = gtk_label_new( m_label.mbc_str() );
+    
+    gtk_label_set_line_wrap( GTK_LABEL(m_widget), FALSE );
 
     SetFont( parent->GetFont() );
 
@@ -79,7 +81,7 @@ bool wxStaticText::Create(wxWindow *parent,
 
     GtkRequisition req;
     (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
-
+    
     wxSize newSize = size;
     if (newSize.x == -1) newSize.x = req.width;
     if (newSize.y == -1) newSize.y = req.height;
index 9ee4df2deb4245b8ef17c4226853eafe0f32aab8..970873c7e291747307b2b1b155a26a8781143c7d 100644 (file)
@@ -178,6 +178,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
     m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL,
                                               GTK_TOOLBAR_ICONS ) );
 
+//    gtk_toolbar_set_space_style( m_toolbar, GTK_TOOLBAR_SPACE_LINE );
     m_separation = 5;
     gtk_toolbar_set_space_size( m_toolbar, m_separation );
     m_hasToolAlready = FALSE;
@@ -370,6 +371,28 @@ void wxToolBar::AddSeparator()
     gtk_toolbar_append_space( m_toolbar );
 }
 
+bool wxToolBar::DeleteTool(int toolIndex)
+{
+    wxNode *node = m_tools.First();
+    while (node)
+    {
+        wxToolBarTool *tool = (wxToolBarTool*)node->Data();
+        if (tool->m_index == toolIndex)
+        {
+            if (tool->m_control)
+                tool->m_control->Destroy();
+            else
+                gtk_widget_destroy( tool->m_item );
+            m_tools.DeleteNode( node );
+           
+            return TRUE;
+        }
+        node = node->Next();
+    }
+
+    return FALSE;
+}
+
 void wxToolBar::ClearTools()
 {
     wxFAIL_MSG( wxT("wxToolBar::ClearTools not implemented") );
index 011b4b21a678e42ee5a3e37690acdf289077a082..6816895a376b901859df451e4613891be1a4c53d 100644 (file)
@@ -61,6 +61,8 @@ bool wxStaticText::Create(wxWindow *parent,
     // effect of changing the control size which might not be desirable
     wxControl::SetLabel(label);
     m_widget = gtk_label_new( m_label.mbc_str() );
+    
+    gtk_label_set_line_wrap( GTK_LABEL(m_widget), FALSE );
 
     SetFont( parent->GetFont() );
 
@@ -79,7 +81,7 @@ bool wxStaticText::Create(wxWindow *parent,
 
     GtkRequisition req;
     (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
-
+    
     wxSize newSize = size;
     if (newSize.x == -1) newSize.x = req.width;
     if (newSize.y == -1) newSize.y = req.height;
index 9ee4df2deb4245b8ef17c4226853eafe0f32aab8..970873c7e291747307b2b1b155a26a8781143c7d 100644 (file)
@@ -178,6 +178,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
     m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL,
                                               GTK_TOOLBAR_ICONS ) );
 
+//    gtk_toolbar_set_space_style( m_toolbar, GTK_TOOLBAR_SPACE_LINE );
     m_separation = 5;
     gtk_toolbar_set_space_size( m_toolbar, m_separation );
     m_hasToolAlready = FALSE;
@@ -370,6 +371,28 @@ void wxToolBar::AddSeparator()
     gtk_toolbar_append_space( m_toolbar );
 }
 
+bool wxToolBar::DeleteTool(int toolIndex)
+{
+    wxNode *node = m_tools.First();
+    while (node)
+    {
+        wxToolBarTool *tool = (wxToolBarTool*)node->Data();
+        if (tool->m_index == toolIndex)
+        {
+            if (tool->m_control)
+                tool->m_control->Destroy();
+            else
+                gtk_widget_destroy( tool->m_item );
+            m_tools.DeleteNode( node );
+           
+            return TRUE;
+        }
+        node = node->Next();
+    }
+
+    return FALSE;
+}
+
 void wxToolBar::ClearTools()
 {
     wxFAIL_MSG( wxT("wxToolBar::ClearTools not implemented") );