#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include namespace Ui { class MainWindow; } class QStringList; struct FileEntry { enum EntryType { TYPE_UNKNOWN = 1<<0, TYPE_UNCHANGED = 1<<1, TYPE_EDITTED = 1<<2, TYPE_ADDED = 1<<3, TYPE_DELETED = 1<<4, TYPE_REPO_MODIFIED = TYPE_EDITTED|TYPE_ADDED|TYPE_DELETED, TYPE_REPO = TYPE_UNCHANGED|TYPE_REPO_MODIFIED, TYPE_ALL = TYPE_UNKNOWN|TYPE_REPO }; void set(QFileInfo &info, EntryType type, const QString &repoPath) { FileInfo = info; Type = type; Filename = getRelativeFilename(repoPath); } bool isType(EntryType t) const { return Type == t; } void setType(EntryType t) { Type = t; } EntryType getType() const { return Type; } QFileInfo getFileInfo() const { return FileInfo; } bool isRepo() const { return Type == TYPE_UNCHANGED || Type == TYPE_EDITTED; } const QString &getFilename() const { return Filename; } QString getRelativeFilename(const QString &path) { QString abs_base_dir = QDir(path).absolutePath(); QString relative = FileInfo.absoluteFilePath(); int index = relative.indexOf(abs_base_dir); if(index<0) return QString(""); return relative.right(relative.length() - abs_base_dir.length()-1); } private: QFileInfo FileInfo; EntryType Type; QString Filename; }; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: void refresh(); void scanWorkspace(); bool runFossil(QStringList &result, const QStringList &args, bool silent=false); bool runFossil(QStringList &result, const QStringList &args, int &exitCode, bool silent=false); void loadSettings(); void saveSettings(); const QString &getCurrentWorkspace() { Q_ASSERT(currentWorkspace filemap_t; filemap_t workspaceFiles; int currentWorkspace; QStringList commitMessages; class QLabel *statusLabel; }; #endif // MAINWINDOW_H