Allow specifying the directory to watch on command line of fswatcher sample.

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
This commit is contained in:
Vadim Zeitlin 2010-10-24 22:41:13 +00:00
parent 942f40ca24
commit 5fc3e6d448

View 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))