]> git.saurik.com Git - wxWidgets.git/commitdiff
Allow specifying the directory to watch on command line of fswatcher sample.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Oct 2010 22:41:13 +0000 (22:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Oct 2010 22:41:13 +0000 (22:41 +0000)
This makes it more convenient to run the sample repeatedly as the directory to
watch can be specified only once instead of having to choose it interactively
after the sample startup every time.

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

samples/fswatcher/fswatcher.cpp

index 907f46ceaf31ae7b8388a9e078e361d9958c6c42..bafc0d2db4bf4b118f7f163c7d99b045e622a025 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "wx/fswatcher.h"
 #include "wx/listctrl.h"
+#include "wx/cmdline.h"
 
 // Define a new frame type: this is going to be our main frame
 class MyFrame : public wxFrame
@@ -31,9 +32,12 @@ public:
     MyFrame(const wxString& title);
     virtual ~MyFrame();
 
+    void AddDirectory(const wxString& dir);
+
+    bool CreateWatcherIfNecessary();
+
 private:
     // file system watcher creation
-    void OnEventLoopEnter();
     void CreateWatcher();
 
     // event handlers
@@ -52,8 +56,6 @@ private:
     wxListView *m_filesList;          // list of watched paths
     wxFileSystemWatcher* m_watcher;   // file system watcher
 
-    friend class MyApp;
-
     const static wxString LOG_FORMAT; // how to format events
 };
 
@@ -66,6 +68,9 @@ public:
     // 'Main program' equivalent: the program execution "starts" here
     virtual bool OnInit()
     {
+        if ( !wxApp::OnInit() )
+            return false;
+
         wxLog::AddTraceMask("EventSource");
         wxLog::AddTraceMask(wxTRACE_FSWATCHER);
 
@@ -79,11 +84,37 @@ public:
     // create the file system watcher here, because it needs an active loop
     virtual void OnEventLoopEnter(wxEventLoopBase* WXUNUSED(loop))
     {
-        m_frame->OnEventLoopEnter();
+        if ( m_frame->CreateWatcherIfNecessary() )
+        {
+            if ( !m_dirToWatch.empty() )
+                m_frame->AddDirectory(m_dirToWatch);
+        }
+    }
+
+    virtual void OnInitCmdLine(wxCmdLineParser& parser)
+    {
+        wxApp::OnInitCmdLine(parser);
+        parser.AddParam("directory to watch",
+                        wxCMD_LINE_VAL_STRING,
+                        wxCMD_LINE_PARAM_OPTIONAL);
+    }
+
+    virtual bool OnCmdLineParsed(wxCmdLineParser& parser)
+    {
+        if ( !wxApp::OnCmdLineParsed(parser) )
+            return false;
+
+        if ( parser.GetParamCount() )
+            m_dirToWatch = parser.GetParam();
+
+        return true;
     }
 
 private:
     MyFrame *m_frame;
+
+    // The directory to watch if specified on the command line.
+    wxString m_dirToWatch;
 };
 
 // Create a new application object: this macro will allow wxWidgets to create
@@ -235,14 +266,16 @@ MyFrame::~MyFrame()
     delete m_watcher;
 }
 
-void MyFrame::OnEventLoopEnter()
+bool MyFrame::CreateWatcherIfNecessary()
 {
     if (m_watcher)
-        return;
+        return false;
 
     CreateWatcher();
     Connect(wxEVT_FSWATCHER,
             wxFileSystemWatcherEventHandler(MyFrame::OnFileSystemEvent));
+
+    return true;
 }
 
 void MyFrame::CreateWatcher()
@@ -293,6 +326,11 @@ void MyFrame::OnAdd(wxCommandEvent& WXUNUSED(event))
     if ( dir.empty() )
         return;
 
+    AddDirectory(dir);
+}
+
+void MyFrame::AddDirectory(const wxString& dir)
+{
     wxLogDebug("Adding directory: '%s'", dir);
 
     if (!m_watcher->Add(wxFileName::DirName(dir), wxFSW_EVENT_ALL))