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
#include "wx/fswatcher.h"
#include "wx/listctrl.h"
#include "wx/fswatcher.h"
#include "wx/listctrl.h"
// Define a new frame type: this is going to be our main frame
class MyFrame : public wxFrame
// Define a new frame type: this is going to be our main frame
class MyFrame : public wxFrame
MyFrame(const wxString& title);
virtual ~MyFrame();
MyFrame(const wxString& title);
virtual ~MyFrame();
+ void AddDirectory(const wxString& dir);
+
+ bool CreateWatcherIfNecessary();
+
private:
// file system watcher creation
private:
// file system watcher creation
- void OnEventLoopEnter();
void CreateWatcher();
// event handlers
void CreateWatcher();
// event handlers
wxListView *m_filesList; // list of watched paths
wxFileSystemWatcher* m_watcher; // file system watcher
wxListView *m_filesList; // list of watched paths
wxFileSystemWatcher* m_watcher; // file system watcher
const static wxString LOG_FORMAT; // how to format events
};
const static wxString LOG_FORMAT; // how to format events
};
// 'Main program' equivalent: the program execution "starts" here
virtual bool OnInit()
{
// 'Main program' equivalent: the program execution "starts" here
virtual bool OnInit()
{
+ if ( !wxApp::OnInit() )
+ return false;
+
wxLog::AddTraceMask("EventSource");
wxLog::AddTraceMask(wxTRACE_FSWATCHER);
wxLog::AddTraceMask("EventSource");
wxLog::AddTraceMask(wxTRACE_FSWATCHER);
// create the file system watcher here, because it needs an active loop
virtual void OnEventLoopEnter(wxEventLoopBase* WXUNUSED(loop))
{
// 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;
}
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
};
// Create a new application object: this macro will allow wxWidgets to create
-void MyFrame::OnEventLoopEnter()
+bool MyFrame::CreateWatcherIfNecessary()
CreateWatcher();
Connect(wxEVT_FSWATCHER,
wxFileSystemWatcherEventHandler(MyFrame::OnFileSystemEvent));
CreateWatcher();
Connect(wxEVT_FSWATCHER,
wxFileSystemWatcherEventHandler(MyFrame::OnFileSystemEvent));
}
void MyFrame::CreateWatcher()
}
void MyFrame::CreateWatcher()
if ( dir.empty() )
return;
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))
wxLogDebug("Adding directory: '%s'", dir);
if (!m_watcher->Add(wxFileName::DirName(dir), wxFSW_EVENT_ALL))