diff --git a/MainWindow.cpp b/MainWindow.cpp index f630902..f756699 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -374,26 +374,33 @@ void MainWindow::scanWorkspace() QFileInfoList all_files; QString wkdir = getCurrentWorkspace(); - RecurseDirectory(all_files, wkdir, wkdir); - workspaceFiles.clear(); - for(QFileInfoList::iterator it=all_files.begin(); it!=all_files.end(); ++it) - { - QString filename = it->fileName(); - - // Skip fossil files - if(filename == "_FOSSIL_" || (!repositoryFile.isEmpty() && it->absoluteFilePath()==repositoryFile)) - continue; - - RepoFile e; - e.set(*it, RepoFile::TYPE_UNKNOWN, wkdir); - workspaceFiles.insert(e.getFilename(), e); - } - // Retrieve the status of files tracked by fossil QStringList res; if(!runFossil(QStringList() << "ls" << "-l", &res, SILENT_STATUS)) return; + bool scan_files = ui->actionViewUnknown->isChecked(); + + workspaceFiles.clear(); + if(scan_files) + { + RecurseDirectory(all_files, wkdir, wkdir); + + for(QFileInfoList::iterator it=all_files.begin(); it!=all_files.end(); ++it) + { + QString filename = it->fileName(); + + // Skip fossil files + if(filename == "_FOSSIL_" || (!repositoryFile.isEmpty() && it->absoluteFilePath()==repositoryFile)) + continue; + + RepoFile e; + e.set(*it, RepoFile::TYPE_UNKNOWN, wkdir); + workspaceFiles.insert(e.getFilename(), e); + } + } + + for(QStringList::iterator it=res.begin(); it!=res.end(); ++it) { QString line = (*it).trimmed(); @@ -404,7 +411,9 @@ void MainWindow::scanWorkspace() QString fname = line.right(line.length() - 10).trimmed(); RepoFile::EntryType type = RepoFile::TYPE_UNKNOWN; - bool add_missing = false; + // Generate a RepoFile for all non-existant fossil files + // or for all files if we skipped scanning the workspace + bool add_missing = !scan_files; if(status_text=="EDITED") type = RepoFile::TYPE_EDITTED; @@ -425,6 +434,14 @@ void MainWindow::scanWorkspace() else if(status_text=="UNCHANGED") type = RepoFile::TYPE_UNCHANGED; + // Filter unwanted file types + if( ((type & RepoFile::TYPE_MODIFIED) && !ui->actionViewModified->isChecked()) || + ((type & RepoFile::TYPE_UNCHANGED) && !ui->actionViewUnchanged->isChecked() )) + { + workspaceFiles.remove(fname); + continue; + } + filemap_t::iterator it = workspaceFiles.find(fname); if(add_missing && it==workspaceFiles.end()) @@ -785,6 +802,14 @@ void MainWindow::loadSettings() _size.setHeight(qsettings.value("WindowHeight").toInt()); resize(_size); } + + if(qsettings.contains("ViewUnknown")) + ui->actionViewUnknown->setChecked(qsettings.value("ViewUnknown").toBool()); + if(qsettings.contains("ViewModified")) + ui->actionViewModified->setChecked(qsettings.value("ViewModified").toBool()); + if(qsettings.contains("ViewUnchanged")) + ui->actionViewUnchanged->setChecked(qsettings.value("ViewUnchanged").toBool()); + } //------------------------------------------------------------------------------ @@ -812,7 +837,9 @@ void MainWindow::saveSettings() qsettings.setValue("WindowY", y()); qsettings.setValue("WindowWidth", width()); qsettings.setValue("WindowHeight", height()); - + qsettings.setValue("ViewUnknown", ui->actionViewUnknown->isChecked()); + qsettings.setValue("ViewModified", ui->actionViewModified->isChecked()); + qsettings.setValue("ViewUnchanged", ui->actionViewUnchanged->isChecked()); } //------------------------------------------------------------------------------ @@ -974,7 +1001,7 @@ void MainWindow::on_actionPull_triggered() void MainWindow::on_actionCommit_triggered() { QStringList modified_files; - getSelectionFilenames(modified_files, RepoFile::TYPE_REPO_MODIFIED, true); + getSelectionFilenames(modified_files, RepoFile::TYPE_MODIFIED, true); if(modified_files.empty()) return; @@ -1334,3 +1361,21 @@ void MainWindow::on_actionSyncSettings_triggered() runFossil(QStringList() << "remote-url" << QuotePath(url.toString()), 0, true); } + +//------------------------------------------------------------------------------ +void MainWindow::on_actionViewModified_triggered() +{ + refresh(); +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionViewUnchanged_triggered() +{ + refresh(); +} + +//------------------------------------------------------------------------------ +void MainWindow::on_actionViewUnknown_triggered() +{ + refresh(); +} diff --git a/MainWindow.h b/MainWindow.h index f0ab4cf..9409551 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -27,8 +27,8 @@ struct RepoFile TYPE_DELETED = 1<<4, TYPE_MISSING = 1<<5, TYPE_RENAMED = 1<<6, - TYPE_REPO_MODIFIED = TYPE_EDITTED|TYPE_ADDED|TYPE_DELETED|TYPE_MISSING|TYPE_RENAMED, - TYPE_REPO = TYPE_UNCHANGED|TYPE_REPO_MODIFIED, + TYPE_MODIFIED = TYPE_EDITTED|TYPE_ADDED|TYPE_DELETED|TYPE_MISSING|TYPE_RENAMED, + TYPE_REPO = TYPE_UNCHANGED|TYPE_MODIFIED, TYPE_ALL = TYPE_UNKNOWN|TYPE_REPO }; @@ -158,6 +158,9 @@ private slots: void on_actionUpdate_triggered(); void on_actionSettings_triggered(); void on_actionSyncSettings_triggered(); + void on_actionViewUnchanged_triggered(); + void on_actionViewModified_triggered(); + void on_actionViewUnknown_triggered(); private: enum diff --git a/MainWindow.ui b/MainWindow.ui index fdad44b..09e6a4c 100644 --- a/MainWindow.ui +++ b/MainWindow.ui @@ -109,7 +109,16 @@ + + + View + + + + + + @@ -455,6 +464,39 @@ Set remote synchronization settings + + + true + + + true + + + Modified + + + + + true + + + true + + + Unchanged + + + + + true + + + true + + + Unknown + + diff --git a/manifest b/manifest index 3758639..ec72d81 100644 --- a/manifest +++ b/manifest @@ -1,14 +1,14 @@ -C Remove\sinvalid\sworkspaces\sstored\sin\sthe\ssettings -D 2011-08-29T14:43:46.790 +C Added\ssupport\sfor\sfiltering\sfiles\sbased\son\srepository\sstatus +D 2011-08-29T15:33:36.209 F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154 F FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 -F MainWindow.cpp 93472d3e2f24070ac4738927cc3e55e865ece6c9 -F MainWindow.h 104f575b6fffe43880849c9ce8c8b986292e4d6c -F MainWindow.ui 2f08596fe34f5496af90f6d355d4de857e77ad8a +F MainWindow.cpp 99bc7ba0623dd6c651006edc8ff91256d7e1f8b3 +F MainWindow.h 21fbbabd8b827d0b49fe3d40763b71042205fc3d +F MainWindow.ui 5d10c04ab0f19f9b38a4da0abb0b36a00ff12efc F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e F RepoDialog.h a958c5f98f1e6882bf41dbdd2e4df3cb89700802 F RepoDialog.ui be7b18199c04a3003f3c7534a616cd7441b7bb0c @@ -173,7 +173,7 @@ F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F main.cpp 083845039c167badd57a4abf482dd3d5e77aab35 F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 -P f00132a6072016db6840e2059bc8d332e760ecdb -R cfe9e1ab63d013dd1b81a63a9d466db8 +P aa301610ecdf98433193c01c5ab7dfe32daf7227 +R 0ee9d30b0bebbccc0cc2d50826a5dbb5 U kostas -Z 5c2c25a81b23778f84b13b0b6bda4982 +Z 1621170487fad36927e9b07f1f884622 diff --git a/manifest.uuid b/manifest.uuid index ead6c94..7ea3435 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -aa301610ecdf98433193c01c5ab7dfe32daf7227 \ No newline at end of file +63e7632f4e844c0915cb4ae6cce07ee173e7926b \ No newline at end of file