annotate kdiff3/src-QT4/fileaccess.h @ 77:1184fc843210

KDiff3-0.9.92
author joachim99
date Mon, 16 Apr 2007 21:26:08 +0000
parents 08ea9b86c12c
children fcd146072e0c
rev   line source
joachim99@8 1 /***************************************************************************
joachim99@77 2 * Copyright (C) 2003-2007 by Joachim Eibl *
joachim99@69 3 * joachim.eibl at gmx.de *
joachim99@8 4 * *
joachim99@8 5 * This program is free software; you can redistribute it and/or modify *
joachim99@8 6 * it under the terms of the GNU General Public License as published by *
joachim99@8 7 * the Free Software Foundation; either version 2 of the License, or *
joachim99@8 8 * (at your option) any later version. *
joachim99@8 9 ***************************************************************************/
joachim99@8 10
joachim99@8 11 #ifndef FILEACCESS_H
joachim99@8 12 #define FILEACCESS_H
joachim99@8 13
joachim99@75 14 #include <QDialog>
joachim99@75 15 #include <QDateTime>
joachim99@75 16
joachim99@8 17 #include <kprogress.h>
joachim99@8 18 #include <kio/job.h>
joachim99@8 19 #include <kio/jobclasses.h>
joachim99@8 20 #include <kurldrag.h>
joachim99@75 21
joachim99@8 22 #include <list>
joachim99@8 23
joachim99@69 24 bool wildcardMultiMatch( const QString& wildcard, const QString& testString, bool bCaseSensitive );
joachim99@69 25
joachim99@8 26 class t_DirectoryList;
joachim99@8 27
joachim99@8 28 class FileAccess
joachim99@8 29 {
joachim99@8 30 public:
joachim99@8 31 FileAccess();
joachim99@8 32 ~FileAccess();
joachim99@8 33 FileAccess( const QString& name, bool bWantToWrite=false ); // name: local file or dirname or url (when supported)
joachim99@8 34 void setFile( const QString& name, bool bWantToWrite=false );
joachim99@8 35
joachim99@8 36 bool isValid() const;
joachim99@8 37 bool isFile() const;
joachim99@8 38 bool isDir() const;
joachim99@8 39 bool isSymLink() const;
joachim99@8 40 bool exists() const;
joachim99@8 41 long size() const; // Size as returned by stat().
joachim99@8 42 long sizeForReading(); // If the size can't be determined by stat() then the file is copied to a local temp file.
joachim99@8 43 bool isReadable() const;
joachim99@8 44 bool isWritable() const;
joachim99@8 45 bool isExecutable() const;
joachim99@8 46 bool isHidden() const;
joachim99@8 47 QString readLink() const;
joachim99@8 48
joachim99@8 49 QDateTime created() const;
joachim99@8 50 QDateTime lastModified() const;
joachim99@8 51 QDateTime lastRead() const;
joachim99@8 52
joachim99@8 53 QString fileName() const; // Just the name-part of the path, without parent directories
joachim99@8 54 QString filePath() const; // The path-string that was used during construction
joachim99@8 55 QString prettyAbsPath() const;
joachim99@8 56 KURL url() const;
joachim99@8 57 QString absFilePath() const;
joachim99@8 58
joachim99@8 59 bool isLocal() const;
joachim99@8 60
joachim99@8 61 bool readFile(void* pDestBuffer, unsigned long maxLength );
joachim99@58 62 bool writeFile(const void* pSrcBuffer, unsigned long length );
joachim99@8 63 bool listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden,
joachim99@8 64 const QString& filePattern, const QString& fileAntiPattern,
joachim99@8 65 const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore );
joachim99@8 66 bool copyFile( const QString& destUrl );
joachim99@8 67 bool createBackup( const QString& bakExtension );
joachim99@8 68
joachim99@8 69 static QString tempFileName();
joachim99@73 70 static bool removeTempFile( const QString& );
joachim99@8 71 bool removeFile();
joachim99@8 72 static bool removeFile( const QString& );
joachim99@8 73 static bool makeDir( const QString& );
joachim99@8 74 static bool removeDir( const QString& );
joachim99@8 75 static bool exists( const QString& );
joachim99@8 76 static QString cleanDirPath( const QString& );
joachim99@8 77
joachim99@8 78 //bool chmod( const QString& );
joachim99@8 79 bool rename( const QString& );
joachim99@8 80 static bool symLink( const QString& linkTarget, const QString& linkLocation );
joachim99@8 81
joachim99@8 82 void addPath( const QString& txt );
joachim99@8 83 QString getStatusText();
joachim99@8 84 private:
joachim99@8 85 void setUdsEntry( const KIO::UDSEntry& e );
joachim99@8 86 KURL m_url;
joachim99@8 87 bool m_bLocal;
joachim99@8 88 bool m_bValidData;
joachim99@8 89
joachim99@8 90 unsigned long m_size;
joachim99@8 91 QDateTime m_modificationTime;
joachim99@8 92 QDateTime m_accessTime;
joachim99@8 93 QDateTime m_creationTime;
joachim99@8 94 bool m_bReadable;
joachim99@8 95 bool m_bWritable;
joachim99@8 96 bool m_bExecutable;
joachim99@8 97 bool m_bExists;
joachim99@8 98 bool m_bFile;
joachim99@8 99 bool m_bDir;
joachim99@8 100 bool m_bSymLink;
joachim99@8 101 bool m_bHidden;
joachim99@8 102 long m_fileType; // for testing only
joachim99@8 103
joachim99@8 104 QString m_linkTarget;
joachim99@8 105 QString m_user;
joachim99@8 106 QString m_group;
joachim99@8 107 QString m_name;
joachim99@8 108 QString m_path;
joachim99@8 109 QString m_absFilePath;
joachim99@8 110 QString m_localCopy;
joachim99@8 111 QString m_statusText; // Might contain an error string, when the last operation didn't succeed.
joachim99@8 112
joachim99@8 113 friend class FileAccessJobHandler;
joachim99@8 114 };
joachim99@8 115
joachim99@8 116 class t_DirectoryList : public std::list<FileAccess>
joachim99@8 117 {};
joachim99@8 118
joachim99@8 119
joachim99@8 120 class FileAccessJobHandler : public QObject
joachim99@8 121 {
joachim99@8 122 Q_OBJECT
joachim99@8 123 public:
joachim99@8 124 FileAccessJobHandler( FileAccess* pFileAccess );
joachim99@8 125
joachim99@8 126 bool get( void* pDestBuffer, long maxLength );
joachim99@58 127 bool put( const void* pSrcBuffer, long maxLength, bool bOverwrite, bool bResume=false, int permissions=-1 );
joachim99@8 128 bool stat(int detailLevel=2, bool bWantToWrite=false );
joachim99@8 129 bool copyFile( const QString& dest );
joachim99@8 130 bool rename( const QString& dest );
joachim99@8 131 bool listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden,
joachim99@8 132 const QString& filePattern, const QString& fileAntiPattern,
joachim99@8 133 const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore );
joachim99@8 134 bool mkDir( const QString& dirName );
joachim99@8 135 bool rmDir( const QString& dirName );
joachim99@8 136 bool removeFile( const QString& dirName );
joachim99@8 137 bool symLink( const QString& linkTarget, const QString& linkLocation );
joachim99@8 138
joachim99@8 139 private:
joachim99@8 140 FileAccess* m_pFileAccess;
joachim99@8 141 bool m_bSuccess;
joachim99@8 142
joachim99@8 143 // Data needed during Job
joachim99@8 144 long m_transferredBytes;
joachim99@8 145 char* m_pTransferBuffer; // Needed during get or put
joachim99@8 146 long m_maxLength;
joachim99@8 147
joachim99@8 148 QString m_filePattern;
joachim99@8 149 QString m_fileAntiPattern;
joachim99@8 150 QString m_dirAntiPattern;
joachim99@8 151 t_DirectoryList* m_pDirList;
joachim99@8 152 bool m_bFindHidden;
joachim99@8 153 bool m_bRecursive;
joachim99@8 154 bool m_bFollowDirLinks;
joachim99@8 155
joachim99@8 156 bool scanLocalDirectory( const QString& dirName, t_DirectoryList* dirList );
joachim99@8 157
joachim99@8 158 private slots:
joachim99@8 159 void slotStatResult( KIO::Job* );
joachim99@8 160 void slotSimpleJobResult( KIO::Job* pJob );
joachim99@8 161 void slotPutJobResult( KIO::Job* pJob );
joachim99@8 162
joachim99@8 163 void slotGetData(KIO::Job*,const QByteArray&);
joachim99@8 164 void slotPutData(KIO::Job*, QByteArray&);
joachim99@8 165
joachim99@8 166 void slotListDirInfoMessage( KIO::Job*, const QString& msg );
joachim99@8 167 void slotListDirProcessNewEntries( KIO::Job *, const KIO::UDSEntryList& l );
joachim99@8 168
joachim99@8 169 void slotPercent( KIO::Job* pJob, unsigned long percent );
joachim99@8 170 };
joachim99@8 171
joachim99@8 172 class ProgressDialog : public QDialog
joachim99@8 173 {
joachim99@8 174 Q_OBJECT
joachim99@8 175 public:
joachim99@8 176 ProgressDialog( QWidget* pParent );
joachim99@8 177
joachim99@77 178 void setStayHidden( bool bStayHidden );
joachim99@8 179 void setInformation( const QString& info, bool bRedrawUpdate=true );
joachim99@8 180 void setInformation( const QString& info, double dCurrent, bool bRedrawUpdate=true );
joachim99@66 181 void setCurrent( double dCurrent, bool bRedrawUpdate=true );
joachim99@66 182 void step( bool bRedrawUpdate=true );
joachim99@66 183 void setMaxNofSteps( int dMaxNofSteps );
joachim99@66 184 void push();
joachim99@66 185 void pop(bool bRedrawUpdate=true);
joachim99@8 186
joachim99@8 187 // The progressbar goes from 0 to 1 usually.
joachim99@8 188 // By supplying a subrange transformation the subCurrent-values
joachim99@8 189 // 0 to 1 will be transformed to dMin to dMax instead.
joachim99@8 190 // Requirement: 0 < dMin < dMax < 1
joachim99@66 191 void setRangeTransformation( double dMin, double dMax );
joachim99@8 192 void setSubRangeTransformation( double dMin, double dMax );
joachim99@8 193
joachim99@8 194 void exitEventLoop();
joachim99@51 195 void enterEventLoop( KIO::Job* pJob, const QString& jobInfo );
joachim99@8 196
joachim99@8 197 bool wasCancelled();
joachim99@8 198 void show();
joachim99@8 199 void hide();
joachim99@66 200
joachim99@51 201 virtual void timerEvent(QTimerEvent*);
joachim99@8 202 private:
joachim99@66 203
joachim99@66 204 struct ProgressLevelData
joachim99@66 205 {
joachim99@66 206 ProgressLevelData()
joachim99@66 207 {
joachim99@66 208 m_dCurrent=0; m_maxNofSteps=1; m_dRangeMin=0; m_dRangeMax=1;
joachim99@66 209 m_dSubRangeMin = 0; m_dSubRangeMax = 1;
joachim99@66 210 }
joachim99@66 211 double m_dCurrent;
joachim99@66 212 int m_maxNofSteps; // when step() is used.
joachim99@66 213 double m_dRangeMax;
joachim99@66 214 double m_dRangeMin;
joachim99@66 215 double m_dSubRangeMax;
joachim99@66 216 double m_dSubRangeMin;
joachim99@66 217 };
joachim99@66 218 std::list<ProgressLevelData> m_progressStack;
joachim99@69 219
joachim99@69 220 int m_progressDelayTimer;
joachim99@70 221 std::list<QEventLoop*> m_eventLoopStack;
joachim99@66 222
joachim99@8 223 KProgress* m_pProgressBar;
joachim99@8 224 KProgress* m_pSubProgressBar;
joachim99@8 225 QLabel* m_pInformation;
joachim99@8 226 QLabel* m_pSubInformation;
joachim99@51 227 QLabel* m_pSlowJobInfo;
joachim99@51 228 QPushButton* m_pAbortButton;
joachim99@8 229 void recalc(bool bRedrawUpdate);
joachim99@8 230 QTime m_t1;
joachim99@8 231 QTime m_t2;
joachim99@8 232 bool m_bWasCancelled;
joachim99@51 233 KIO::Job* m_pJob;
joachim99@51 234 QString m_currentJobInfo; // Needed if the job doesn't stop after a reasonable time.
joachim99@77 235 bool m_bStayHidden;
joachim99@8 236 protected:
joachim99@8 237 virtual void reject();
joachim99@8 238 private slots:
joachim99@8 239 void delayedHide();
joachim99@51 240 void slotAbort();
joachim99@8 241 };
joachim99@8 242
joachim99@66 243 // When using the ProgressProxy you need not take care of the push and pop, except when explicit.
joachim99@66 244 class ProgressProxy
joachim99@66 245 {
joachim99@66 246 public:
joachim99@66 247 ProgressProxy();
joachim99@66 248 ~ProgressProxy();
joachim99@66 249
joachim99@66 250 void setInformation( const QString& info, bool bRedrawUpdate=true );
joachim99@66 251 void setInformation( const QString& info, double dCurrent, bool bRedrawUpdate=true );
joachim99@66 252 void setCurrent( double dCurrent, bool bRedrawUpdate=true );
joachim99@66 253 void step( bool bRedrawUpdate=true );
joachim99@66 254 void setMaxNofSteps( int dMaxNofSteps );
joachim99@66 255 bool wasCancelled();
joachim99@66 256 void setRangeTransformation( double dMin, double dMax );
joachim99@66 257 void setSubRangeTransformation( double dMin, double dMax );
joachim99@66 258 private:
joachim99@66 259 };
joachim99@66 260
joachim99@8 261 extern ProgressDialog* g_pProgressDialog;
joachim99@8 262
joachim99@8 263
joachim99@8 264
joachim99@8 265 #endif
joachim99@8 266