]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxWakeUpIdle() to wxGTK,
authorRobert Roebling <robert@roebling.de>
Sun, 14 Nov 1999 15:14:23 +0000 (15:14 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 14 Nov 1999 15:14:23 +0000 (15:14 +0000)
  Changed wxFindFile to detect hidden files (but not "." and ".." as before),
  Added "show hidden files" to file dialog,
  Added controls to wxToolBar,
  doc view now uses pretty file dialogs as per MSW.

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

15 files changed:
include/wx/app.h
include/wx/generic/filedlgg.h
include/wx/gtk/tbargtk.h
include/wx/gtk1/tbargtk.h
samples/toolbar/test.cpp
src/common/docview.cpp
src/common/event.cpp
src/common/filefn.cpp
src/generic/filedlgg.cpp
src/gtk/app.cpp
src/gtk/bmpbuttn.cpp
src/gtk/tbargtk.cpp
src/gtk1/app.cpp
src/gtk1/bmpbuttn.cpp
src/gtk1/tbargtk.cpp

index b3715a2c8a0f76e5474da8400a685729d44b6496..cad0b662644015d65f531f19d906c6d5ccd94030 100644 (file)
@@ -310,6 +310,11 @@ extern void WXDLLEXPORT wxExit();
 // Yield to other apps/messages
 extern bool WXDLLEXPORT wxYield();
 
+#ifdef __WXGTK__
+// Yield to other apps/messages
+extern void WXDLLEXPORT wxWakeUpIdle();
+#endif
+
 // Post a message to the given eventhandler which will be processed during the
 // next event loop iteration
 inline void WXDLLEXPORT wxPostEvent(wxEvtHandler *dest, wxEvent& event)
index 6724c6bb544255aba4c09b1edb6396aea86efb96..59f717de5c66002a6e6ff992b589e7af28595f8b 100644 (file)
@@ -166,6 +166,7 @@ public:
     void OnNew( wxCommandEvent &event );
     void OnChoice( wxCommandEvent &event );
     void OnTextEnter( wxCommandEvent &event );
+    void OnCheck( wxCommandEvent &event );
     
     void HandleAction( const wxString &fn );
 
index 5c59c3814d385a897af42a4169534a2e18715904..beb2e04416dbe49ca51d81aa42cae3936875998a 100644 (file)
@@ -49,11 +49,11 @@ extern const wxChar *wxToolBarNameStr;
 class wxToolBar: public wxControl
 {
 public:
-    wxToolBar(void);
+    wxToolBar();
     wxToolBar( wxWindow *parent, wxWindowID id, 
       const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
       long style = 0, const wxString& name = wxToolBarNameStr );
-   ~wxToolBar(void);
+   ~wxToolBar();
 
    bool Create( wxWindow *parent, wxWindowID id, 
      const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
@@ -76,10 +76,16 @@ public:
       const wxBitmap& pushedBitmap = wxNullBitmap, bool toggle = FALSE,
       wxCoord xPos = -1, wxCoord yPos = -1, wxObject *clientData = (wxObject *)NULL,
       const wxString& helpString1 = "", const wxString& helpString2 = "");
-    virtual void AddSeparator(void);
-    virtual void ClearTools(void);
     
-    virtual bool Realize(void);
+    // Add arbitrary control
+    virtual bool AddControl(wxControl *control);
+      
+    // Add space
+    virtual void AddSeparator();
+    
+    virtual void ClearTools();
+    
+    virtual bool Realize();
 
     virtual void EnableTool(int toolIndex, bool enable);
     virtual void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on
index 5c59c3814d385a897af42a4169534a2e18715904..beb2e04416dbe49ca51d81aa42cae3936875998a 100644 (file)
@@ -49,11 +49,11 @@ extern const wxChar *wxToolBarNameStr;
 class wxToolBar: public wxControl
 {
 public:
-    wxToolBar(void);
+    wxToolBar();
     wxToolBar( wxWindow *parent, wxWindowID id, 
       const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
       long style = 0, const wxString& name = wxToolBarNameStr );
-   ~wxToolBar(void);
+   ~wxToolBar();
 
    bool Create( wxWindow *parent, wxWindowID id, 
      const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
@@ -76,10 +76,16 @@ public:
       const wxBitmap& pushedBitmap = wxNullBitmap, bool toggle = FALSE,
       wxCoord xPos = -1, wxCoord yPos = -1, wxObject *clientData = (wxObject *)NULL,
       const wxString& helpString1 = "", const wxString& helpString2 = "");
-    virtual void AddSeparator(void);
-    virtual void ClearTools(void);
     
-    virtual bool Realize(void);
+    // Add arbitrary control
+    virtual bool AddControl(wxControl *control);
+      
+    // Add space
+    virtual void AddSeparator();
+    
+    virtual void ClearTools();
+    
+    virtual bool Realize();
 
     virtual void EnableTool(int toolIndex, bool enable);
     virtual void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on
index 03ca8fa7a3feabb19efe93af4e4d096e832ff9c8..f6278e43a8b1aa11abfa37c02cba0085d2430da7 100644 (file)
@@ -224,6 +224,8 @@ bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons)
   combo->Append("toolbar");
   toolBar->AddControl(combo);
 
+  toolBar->AddSeparator();
+  
   if ( !smallicons )
   {
       currentX += width + 5;
@@ -238,11 +240,6 @@ bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons)
       currentX += width + 5;
       toolBar->AddSeparator();
       toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Help button");
-
-      toolBar->ToggleTool( wxID_SAVE, TRUE );
-      toolBar->ToggleTool( wxID_COPY, TRUE );
-      toolBar->ToggleTool( wxID_COPY, FALSE );
-      toolBar->EnableTool( wxID_PRINT, FALSE );
   }
 
   toolBar->Realize();
@@ -303,7 +300,7 @@ MyFrame::MyFrame(wxFrame* parent,
                                     wxTB_FLAT | wxTB_DOCKABLE,
                                     ID_TOOLBAR);
 
-    tbar->SetMargins( 2, 2 );
+    tbar->SetMargins( 4, 4 );
 
     wxGetApp().InitToolbar(tbar);
 }
index 3d582f88072f9f36c62f038ba95e166a4f181ff6..a2863a485c926bb488deca460b5fed12bdc1233e 100644 (file)
@@ -1191,7 +1191,7 @@ wxDocTemplate *wxDocManager::FindTemplateForPath(const wxString& path)
 // template extension.
 
 wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXGTK__)
                                                 int noTemplates,
 #else
                                                 int WXUNUSED(noTemplates),
@@ -1200,8 +1200,8 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
                                                 long WXUNUSED(flags),
                                                 bool WXUNUSED(save))
 {
-    // We can only have multiple filters in Windows
-#ifdef __WXMSW__
+    // We can only have multiple filters in Windows and GTK
+#if defined(__WXMSW__) || defined(__WXGTK__)
     wxString descrBuf;
 
     int i;
index 1b71ae091290f6de885dfd848a8067281bdaa1f9..13a9a70e52161bc12f5a9f8375d1d81c669ff2dd 100644 (file)
@@ -611,10 +611,7 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
 
     // TODO: Wake up idle handler for the other platforms.
 #ifdef __WXGTK__
-    extern bool g_isIdle;
-    extern void wxapp_install_idle_handler();
-    if ( g_isIdle )
-        wxapp_install_idle_handler();
+    wxWakeUpIdle();
 #elif wxUSE_GUI // this works for wxMSW, but may be for others too?
     // might also send a dummy message to the top level window, this would
     // probably be cleaner?
index f4a1e78bcacff53f22efcafa80b9ac590610a41d..88d201fa0311b95bf010c9161f2d205b32a2b5c8 100644 (file)
@@ -1304,7 +1304,9 @@ wxString wxFindNextFile()
           nextDir != NULL;
           nextDir = readdir(gs_dirStream) )
     {
-        if (wxMatchWild(name, nextDir->d_name))
+        if (wxMatchWild(name, nextDir->d_name, FALSE) &&   // RR: added FALSE to find hidden files
+           strcmp(nextDir->d_name, ".") && 
+           strcmp(nextDir->d_name, "..") )
         {
             result.Empty();
             if ( !path.IsEmpty() )
index 87b1f4f31d0681857d0aa180c8bfa8e168ac4ab1..9f1eaee5c0b22d159bdd44b2b1ff1bf265910562 100644 (file)
@@ -543,6 +543,7 @@ void wxFileCtrl::OnListEndLabelEdit( wxListEvent &event )
 #define  ID_TEXT          wxID_FILEDLGG + 9
 #define  ID_LIST_CTRL     wxID_FILEDLGG + 10
 #define  ID_ACTIVATED     wxID_FILEDLGG + 11
+#define  ID_CHECK         wxID_FILEDLGG + 12
 
 IMPLEMENT_DYNAMIC_CLASS(wxFileDialog,wxDialog)
 
@@ -557,6 +558,7 @@ BEGIN_EVENT_TABLE(wxFileDialog,wxDialog)
         EVT_LIST_ITEM_ACTIVATED(ID_LIST_CTRL, wxFileDialog::OnActivated)
         EVT_CHOICE(ID_CHOICE,wxFileDialog::OnChoice)
         EVT_TEXT_ENTER(ID_TEXT,wxFileDialog::OnTextEnter)
+        EVT_CHECKBOX(ID_CHECK,wxFileDialog::OnCheck)
 END_EVENT_TABLE()
 
 wxFileDialog::wxFileDialog(wxWindow *parent,
@@ -668,6 +670,9 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
     wxBoxSizer *choicesizer = new wxBoxSizer( wxHORIZONTAL );
     m_choice = new wxChoice( this, ID_CHOICE );
     choicesizer->Add( m_choice, 1, wxCENTER|wxALL, 10 );
+    m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden files") );
+    m_check->SetValue( FALSE );
+    choicesizer->Add( m_check, 0, wxCENTER|wxALL, 10 );
     choicesizer->Add( new wxButton( this, wxID_CANCEL, _("Cancel") ), 0, wxCENTER | wxALL, 10 );
     mainsizer->Add( choicesizer, 0, wxEXPAND );
 
@@ -706,6 +711,11 @@ void wxFileDialog::OnChoice( wxCommandEvent &event )
     m_list->SetWild( *str );
 }
 
+void wxFileDialog::OnCheck( wxCommandEvent &event )
+{
+    m_list->ShowHidden( event.GetInt() );
+}
+
 void wxFileDialog::OnActivated( wxListEvent &event )
 {
     HandleAction( event.m_item.m_text );
index b307cdd8e3d9c5e0f6aefc9eeab8ae590dc018e8..4cd16593da2dcf5f29a81d6ec499bbaf3db8ebac 100644 (file)
@@ -124,8 +124,13 @@ unsigned char g_palette[64*3] =
 
 extern void wxFlushResources();
 
+/* forward declaration */
+gint        wxapp_idle_callback( gpointer WXUNUSED(data) );
+void        wxapp_install_idle_handler();
+static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
+
 //-----------------------------------------------------------------------------
-// global functions
+// wxExit
 //-----------------------------------------------------------------------------
 
 void wxExit()
@@ -133,8 +138,9 @@ void wxExit()
     gtk_main_quit();
 }
 
-/* forward declaration */
-gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+//-----------------------------------------------------------------------------
+// wxYield
+//-----------------------------------------------------------------------------
 
 bool wxYield()
 {
@@ -165,6 +171,20 @@ bool wxYield()
     return TRUE;
 }
 
+//-----------------------------------------------------------------------------
+// wxWakeUpIdle
+//-----------------------------------------------------------------------------
+
+void wxWakeUpIdle()
+{
+    if (g_isIdle) 
+        wxapp_install_idle_handler();
+}
+
+//-----------------------------------------------------------------------------
+// local functions
+//-----------------------------------------------------------------------------
+
 gint wxapp_idle_callback( gpointer WXUNUSED(data) )
 {
     if (!wxTheApp) return TRUE;
@@ -213,9 +233,6 @@ void wxapp_install_idle_handler()
 
 #if wxUSE_THREADS
 
-/* forward declaration */
-static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
-
 void wxapp_install_thread_wakeup()
 {
     if (wxTheApp->m_wakeUpTimerTag) return;
index 691e6912d7b7fc982903e1a49f89386766a0a2a5..81f655e070f7d3fe4520e39d610106bf321e89a2 100644 (file)
@@ -43,7 +43,8 @@ extern bool   g_blockEventsOnDrag;
 
 static void gtk_bmpbutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxBitmapButton *button )
 {
-    if (g_isIdle) wxapp_install_idle_handler();
+    if (g_isIdle) 
+        wxapp_install_idle_handler();
 
     if (!button->m_hasVMT) return;
     if (g_blockEventsOnDrag) return;
index c23fc6e6fbe2820b91756a89c60500a857d174f7..9ee4df2deb4245b8ef17c4226853eafe0f32aab8 100644 (file)
@@ -122,6 +122,15 @@ static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget),
     return FALSE;
 }
 
+//-----------------------------------------------------------------------------
+// InsertChild callback for wxToolBar
+//-----------------------------------------------------------------------------
+
+static void wxInsertChildInToolBar( wxToolBar* WXUNUSED(parent), wxWindow* WXUNUSED(child) )
+{
+    /* we don't do anything here but pray */
+}
+
 //-----------------------------------------------------------------------------
 // wxToolBar
 //-----------------------------------------------------------------------------
@@ -155,6 +164,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
 {
     m_needParent = TRUE;
     m_blockNextEvent = FALSE;
+    m_insertCallback = (wxInsertChildFunction)wxInsertChildInToolBar;
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
@@ -304,7 +314,7 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
 
     GtkWidget *item = gtk_toolbar_append_element
                      (
-                      GTK_TOOLBAR(m_toolbar),
+                      m_toolbar,
                       ctype,
                       (GtkWidget *)NULL,
                       (const char *)NULL,
@@ -332,6 +342,29 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
     return tool;
 }
 
+bool wxToolBar::AddControl(wxControl *control)
+{
+    wxCHECK_MSG( control, FALSE, wxT("toolbar: can't insert NULL control") );
+
+    wxCHECK_MSG( control->GetParent() == this, FALSE,
+                 wxT("control must have toolbar as parent") );
+
+    m_hasToolAlready = TRUE;
+    
+    wxToolBarTool *tool = new wxToolBarTool(control);
+    
+    gtk_toolbar_append_widget( m_toolbar, control->m_widget, (const char *) NULL, (const char *) NULL );
+    
+    GtkRequisition req;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    m_width = req.width;
+    m_height = req.height;
+
+    m_tools.Append( tool );
+    
+    return TRUE;
+}
+
 void wxToolBar::AddSeparator()
 {
     gtk_toolbar_append_space( m_toolbar );
@@ -635,12 +668,12 @@ void wxToolBar::OnInternalIdle()
        while (node)
         {
            wxToolBarTool *tool = (wxToolBarTool*)node->Data();
-           if (!tool->m_item->window)
-               break;
+           node = node->Next();
+           
+           if (!tool->m_item || !tool->m_item->window)
+               continue;
            else
                gdk_window_set_cursor( tool->m_item->window, cursor.GetCursor() );
-               
-           node = node->Next();
         }
     }
 
index b307cdd8e3d9c5e0f6aefc9eeab8ae590dc018e8..4cd16593da2dcf5f29a81d6ec499bbaf3db8ebac 100644 (file)
@@ -124,8 +124,13 @@ unsigned char g_palette[64*3] =
 
 extern void wxFlushResources();
 
+/* forward declaration */
+gint        wxapp_idle_callback( gpointer WXUNUSED(data) );
+void        wxapp_install_idle_handler();
+static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
+
 //-----------------------------------------------------------------------------
-// global functions
+// wxExit
 //-----------------------------------------------------------------------------
 
 void wxExit()
@@ -133,8 +138,9 @@ void wxExit()
     gtk_main_quit();
 }
 
-/* forward declaration */
-gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+//-----------------------------------------------------------------------------
+// wxYield
+//-----------------------------------------------------------------------------
 
 bool wxYield()
 {
@@ -165,6 +171,20 @@ bool wxYield()
     return TRUE;
 }
 
+//-----------------------------------------------------------------------------
+// wxWakeUpIdle
+//-----------------------------------------------------------------------------
+
+void wxWakeUpIdle()
+{
+    if (g_isIdle) 
+        wxapp_install_idle_handler();
+}
+
+//-----------------------------------------------------------------------------
+// local functions
+//-----------------------------------------------------------------------------
+
 gint wxapp_idle_callback( gpointer WXUNUSED(data) )
 {
     if (!wxTheApp) return TRUE;
@@ -213,9 +233,6 @@ void wxapp_install_idle_handler()
 
 #if wxUSE_THREADS
 
-/* forward declaration */
-static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
-
 void wxapp_install_thread_wakeup()
 {
     if (wxTheApp->m_wakeUpTimerTag) return;
index 691e6912d7b7fc982903e1a49f89386766a0a2a5..81f655e070f7d3fe4520e39d610106bf321e89a2 100644 (file)
@@ -43,7 +43,8 @@ extern bool   g_blockEventsOnDrag;
 
 static void gtk_bmpbutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxBitmapButton *button )
 {
-    if (g_isIdle) wxapp_install_idle_handler();
+    if (g_isIdle) 
+        wxapp_install_idle_handler();
 
     if (!button->m_hasVMT) return;
     if (g_blockEventsOnDrag) return;
index c23fc6e6fbe2820b91756a89c60500a857d174f7..9ee4df2deb4245b8ef17c4226853eafe0f32aab8 100644 (file)
@@ -122,6 +122,15 @@ static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget),
     return FALSE;
 }
 
+//-----------------------------------------------------------------------------
+// InsertChild callback for wxToolBar
+//-----------------------------------------------------------------------------
+
+static void wxInsertChildInToolBar( wxToolBar* WXUNUSED(parent), wxWindow* WXUNUSED(child) )
+{
+    /* we don't do anything here but pray */
+}
+
 //-----------------------------------------------------------------------------
 // wxToolBar
 //-----------------------------------------------------------------------------
@@ -155,6 +164,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
 {
     m_needParent = TRUE;
     m_blockNextEvent = FALSE;
+    m_insertCallback = (wxInsertChildFunction)wxInsertChildInToolBar;
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
@@ -304,7 +314,7 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
 
     GtkWidget *item = gtk_toolbar_append_element
                      (
-                      GTK_TOOLBAR(m_toolbar),
+                      m_toolbar,
                       ctype,
                       (GtkWidget *)NULL,
                       (const char *)NULL,
@@ -332,6 +342,29 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
     return tool;
 }
 
+bool wxToolBar::AddControl(wxControl *control)
+{
+    wxCHECK_MSG( control, FALSE, wxT("toolbar: can't insert NULL control") );
+
+    wxCHECK_MSG( control->GetParent() == this, FALSE,
+                 wxT("control must have toolbar as parent") );
+
+    m_hasToolAlready = TRUE;
+    
+    wxToolBarTool *tool = new wxToolBarTool(control);
+    
+    gtk_toolbar_append_widget( m_toolbar, control->m_widget, (const char *) NULL, (const char *) NULL );
+    
+    GtkRequisition req;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    m_width = req.width;
+    m_height = req.height;
+
+    m_tools.Append( tool );
+    
+    return TRUE;
+}
+
 void wxToolBar::AddSeparator()
 {
     gtk_toolbar_append_space( m_toolbar );
@@ -635,12 +668,12 @@ void wxToolBar::OnInternalIdle()
        while (node)
         {
            wxToolBarTool *tool = (wxToolBarTool*)node->Data();
-           if (!tool->m_item->window)
-               break;
+           node = node->Next();
+           
+           if (!tool->m_item || !tool->m_item->window)
+               continue;
            else
                gdk_window_set_cursor( tool->m_item->window, cursor.GetCursor() );
-               
-           node = node->Next();
         }
     }