#ifndef XDIRCOMP_H #define XDIRCOMP_H //$Id: XDirComp.h,v 1.38 2006/06/05 16:46:02 markus Rel $ // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include #include #ifdef ENABLE_THREADS # include # include #endif #include #include #include #include "CompDir.h" #include "DCFileList.h" // Forward declarations namespace YGP { #ifndef ENABLE_THREADS typedef void Thread; #endif class IDirectorySearch; } namespace Gtk { class CheckMenuItem; } // Class to display the result of CompareDirs class XCompareDirs : public CompareDirs { public: XCompareDirs (DCFileList& destination, Gtk::Statusbar& statusbar #ifdef ENABLE_THREADS , YGP::Thread* thrd #endif ) : cChangedFiles (0), cNewFiles (0), cAllFiles (0), list (destination), info (statusbar) #ifdef ENABLE_THREADS , thread (thrd) #endif { } virtual ~XCompareDirs () { } int getChangedFiles () const { return cChangedFiles; } int getNewFiles () const { return cNewFiles; } int getNumFiles () const { return cAllFiles; } void reset (); #ifdef ENABLE_THREADS void lock () { mxAccess.lock (); } void unlock () { mxAccess.unlock (); } #endif protected: virtual void showFile (const Status diff, const YGP::File* pFileOrig, const YGP::File* pFileComp = NULL); virtual void enterDirectory (const std::string& path); private: unsigned int cChangedFiles; unsigned int cNewFiles; unsigned int cAllFiles; DCFileList& list; Gtk::Statusbar& info; #ifdef ENABLE_THREADS YGP::Thread* thread; YGP::Mutex mxAccess; #endif }; // Class with the graphical interface to DirComp class XDirComp : public XGP::XApplication { public: // Manager functions XDirComp (); ~XDirComp () { } protected: virtual const char* getHelpfile () { return DOCUDIR "/XDirComp.html"; } private: // Protected manager functions XDirComp (const XDirComp&); const XDirComp& operator= (const XDirComp&); // Event-handling void startCompare (); void endCompare (); void save (); void print (); void quit (); void toggleOption (XCompareDirs::Options option); void searchSubdirs (); void searchEqualSubdirs (); void compareAlways (); void selectFiles (); void selectDirectories (); void selectDate (bool upper); void dirChanged (); void saveToFile (const std::string& file); void writeToStream (FILE* file); virtual void showAboutbox (); void menuInSearch (bool search = false); Gtk::Table tblInput; XGP::XFileEntry inDirComp; XGP::XFileEntry inDirOrig; Gtk::Label lblDirOrig; Gtk::Label lblDirComp; DCFileList listFiles; Gtk::Statusbar status; Gtk::ScrolledWindow scroll; XCompareDirs dc; #ifdef ENABLE_THREADS YGP::OThread* childSearch; #endif void* compare (YGP::Thread* pArgs); std::string getDifferentFiles () const; static const char* pTitles[]; static const char* xpmAuthor[]; static const char* xpmXDirComp[]; std::string files; std::string dirInExcl; YGP::ATimestamp dateStart, dateEnd; enum { START = 0, STOP, SAVE, PRINT, SUBDIRS, EQUALSUBDIRS, COMPARE, LAST }; Glib::RefPtr apMenus[LAST]; }; #endif