From 0f0302a45fc1a4ef5a38650a8269575da6d3e3ff Mon Sep 17 00:00:00 2001 From: kostas Date: Sun, 22 Apr 2012 09:08:38 +0000 Subject: [PATCH] Added support for using a user specified folder for workpaces instead the fossil repository folder FossilOrigin-Name: 5cd50b0577298e1b73d16c1f74a086911f870839 --- MainWindow.cpp | 136 ++++++++++++++++++++++++++++--------------------- manifest | 12 ++--- manifest.uuid | 2 +- 3 files changed, 86 insertions(+), 64 deletions(-) diff --git a/MainWindow.cpp b/MainWindow.cpp index fe04e27..fdd165f 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -90,10 +90,10 @@ static QStringMap MakeKeyValues(QStringList lines) /////////////////////////////////////////////////////////////////////////////// MainWindow::MainWindow(QWidget *parent, QString *workspacePath) : - QMainWindow(parent), - ui(new Ui::MainWindow) + QMainWindow(parent), + ui(new Ui::MainWindow) { - ui->setupUi(this); + ui->setupUi(this); QAction *separator = new QAction(this); separator->setSeparator(true); @@ -136,7 +136,7 @@ MainWindow::MainWindow(QWidget *parent, QString *workspacePath) : ui->tableViewStash->addAction(ui->actionApplyStash); ui->tableViewStash->addAction(ui->actionDiffStash); ui->tableViewStash->addAction(ui->actionDeleteStash); - ui->tableViewStash->horizontalHeader()->setSortIndicatorShown(false); + ui->tableViewStash->horizontalHeader()->setSortIndicatorShown(false); // Recent Workspaces // Locate a sequence of two separator actions in file menu @@ -176,7 +176,7 @@ MainWindow::MainWindow(QWidget *parent, QString *workspacePath) : loadSettings(); // Apply any explict workspace path if available - if(workspacePath && !workspacePath->isEmpty()) + if(workspacePath && !workspacePath->isEmpty()) openWorkspace(*workspacePath); refresh(); @@ -264,8 +264,16 @@ bool MainWindow::openWorkspace(const QString &path) if(!(QFileInfo(checkout_file1).exists() || QFileInfo(checkout_file2).exists()) ) { if(QMessageBox::Yes !=DialogQuery(this, tr("Open Fossil"), "A workspace does not exist in this folder.\nWould you like to create one here?")) - return false; - + { + wkspace = QFileDialog::getExistingDirectory( + this, + tr("Select Workspace Folder"), + wkspace); + + if(wkspace.isEmpty() || !QDir(wkspace).exists()) + return false; + } + // Ok open the fossil setCurrentWorkspace(wkspace); if(!QDir::setCurrent(wkspace)) @@ -335,29 +343,52 @@ void MainWindow::on_actionNewRepository_triggered() { QString filter(tr("Repositories (*.fossil)")); - QString path = QFileDialog::getSaveFileName( + // Get Repository file + QString repo_path = QFileDialog::getSaveFileName( this, tr("New Fossil Repository"), QDir::currentPath(), filter, &filter); - if(path.isEmpty()) + if(repo_path.isEmpty()) return; - if(QFile::exists(path)) + if(QFile::exists(repo_path)) { QMessageBox::critical(this, tr("Error"), tr("A repository file already exists.\nRepository creation aborted."), QMessageBox::Ok ); return; } - stopUI(); + QFileInfo repo_path_info(repo_path); + Q_ASSERT(repo_path_info.dir().exists()); + + // Get Workspace path + QString wkdir = repo_path_info.absoluteDir().absolutePath(); + if(QMessageBox::Yes != DialogQuery(this, tr("Create Workspace"), "Would you like to create a workspace in the same folder?")) + { + wkdir = QFileDialog::getExistingDirectory( + this, + tr("Select Workspace Folder"), + wkdir); + + if(wkdir.isEmpty() || !QDir(wkdir).exists()) + return; + } + + stopUI(); on_actionClearLog_triggered(); - QFileInfo path_info(path); - Q_ASSERT(path_info.dir().exists()); - QString wkdir = path_info.absoluteDir().absolutePath(); + repositoryFile = repo_path_info.absoluteFilePath(); + // Create repository + if(!runFossil(QStringList() << "new" << QuotePath(repositoryFile))) + { + QMessageBox::critical(this, tr("Error"), tr("Could not create repository."), QMessageBox::Ok ); + return; + } + + // Create workspace setCurrentWorkspace(wkdir); if(!QDir::setCurrent(wkdir)) { @@ -365,18 +396,9 @@ void MainWindow::on_actionNewRepository_triggered() return; } - repositoryFile = path_info.absoluteFilePath(); - - // Create repo - if(!runFossil(QStringList() << "new" << QuotePath(repositoryFile))) - { - QMessageBox::critical(this, tr("Error"), tr("Could not create repository."), QMessageBox::Ok ); - return; - } - - // Disable unknown file filter - if(!ui->actionViewUnknown->isChecked()) - ui->actionViewUnknown->setChecked(true); + // Disable unknown file filter + if(!ui->actionViewUnknown->isChecked()) + ui->actionViewUnknown->setChecked(true); // Open repo if(!runFossil(QStringList() << "open" << QuotePath(repositoryFile))) @@ -395,7 +417,7 @@ void MainWindow::on_actionCloseRepository_triggered() if(QMessageBox::Yes !=DialogQuery(this, tr("Close Workspace"), "Are you sure want to close this workspace?")) return; - + // Close Repo if(!runFossil(QStringList() << "close")) { @@ -787,12 +809,12 @@ void MainWindow::updateFileView() struct { RepoFile::EntryType type; const char *tag; const char *tooltip; const char *icon; } stats[] = { - { RepoFile::TYPE_EDITTED, "E", "Editted", ":icons/icons/Button Blank Yellow-01.png" }, - { RepoFile::TYPE_UNCHANGED, "U", "Unchanged", ":icons/icons/Button Blank Green-01.png" }, - { RepoFile::TYPE_ADDED, "A", "Added", ":icons/icons/Button Add-01.png" }, - { RepoFile::TYPE_DELETED, "D", "Deleted", ":icons/icons/Button Close-01.png" }, - { RepoFile::TYPE_RENAMED, "R", "Renamed", ":icons/icons/Button Reload-01.png" }, - { RepoFile::TYPE_MISSING, "M", "Missing", ":icons/icons/Button Help-01.png" }, + { RepoFile::TYPE_EDITTED, "E", "Editted", ":icons/icons/Button Blank Yellow-01.png" }, + { RepoFile::TYPE_UNCHANGED, "U", "Unchanged", ":icons/icons/Button Blank Green-01.png" }, + { RepoFile::TYPE_ADDED, "A", "Added", ":icons/icons/Button Add-01.png" }, + { RepoFile::TYPE_DELETED, "D", "Deleted", ":icons/icons/Button Close-01.png" }, + { RepoFile::TYPE_RENAMED, "R", "Renamed", ":icons/icons/Button Reload-01.png" }, + { RepoFile::TYPE_MISSING, "M", "Missing", ":icons/icons/Button Help-01.png" }, }; QFileIconProvider icon_provider; @@ -850,13 +872,13 @@ void MainWindow::updateFileView() ++item_id; } - ui->tableView->horizontalHeader()->setResizeMode(COLUMN_STATUS, QHeaderView::ResizeToContents); - ui->tableView->horizontalHeader()->setResizeMode(COLUMN_FILENAME, QHeaderView::Stretch); - ui->tableView->horizontalHeader()->setResizeMode(COLUMN_EXTENSION, QHeaderView::ResizeToContents); - ui->tableView->horizontalHeader()->setResizeMode(COLUMN_MODIFIED, QHeaderView::ResizeToContents); - ui->tableView->horizontalHeader()->setResizeMode(COLUMN_PATH, QHeaderView::ResizeToContents); - ui->tableView->horizontalHeader()->setSortIndicatorShown(true); - ui->tableView->resizeRowsToContents(); + ui->tableView->horizontalHeader()->setResizeMode(COLUMN_STATUS, QHeaderView::ResizeToContents); + ui->tableView->horizontalHeader()->setResizeMode(COLUMN_FILENAME, QHeaderView::Stretch); + ui->tableView->horizontalHeader()->setResizeMode(COLUMN_EXTENSION, QHeaderView::ResizeToContents); + ui->tableView->horizontalHeader()->setResizeMode(COLUMN_MODIFIED, QHeaderView::ResizeToContents); + ui->tableView->horizontalHeader()->setResizeMode(COLUMN_PATH, QHeaderView::ResizeToContents); + ui->tableView->horizontalHeader()->setSortIndicatorShown(true); + ui->tableView->resizeRowsToContents(); } //------------------------------------------------------------------------------ @@ -865,7 +887,7 @@ MainWindow::RepoStatus MainWindow::getRepoStatus() QStringList res; int exit_code = EXIT_FAILURE; - // We need to determine the reason why fossil has failed + // We need to determine the reason why fossil has failed // so we delay processing of the exit_code if(!runFossilRaw(QStringList() << "info", &res, &exit_code, RUNGLAGS_SILENT_ALL)) return REPO_NOT_FOUND; @@ -1273,8 +1295,8 @@ void MainWindow::saveSettings() qsettings.setValue("Path", workspaceHistory[i]); if(getCurrentWorkspace() == workspaceHistory[i]) qsettings.setValue("Active", true); - else - qsettings.remove("Active"); + else + qsettings.remove("Active"); } qsettings.endArray(); @@ -1905,7 +1927,7 @@ void MainWindow::on_actionSettings_triggered() { const QString &name = it.key(); Settings::Setting::SettingType type = it.value().Type; - + // Internal types are handled explicitly if(type == Settings::Setting::TYPE_INTERNAL) continue; @@ -1917,7 +1939,7 @@ void MainWindow::on_actionSettings_triggered() runFossil(QStringList() << "remote-url" << QuotePath(it.value().Value.toString()), 0, RUNGLAGS_SILENT_INPUT); continue; } - + Q_ASSERT(type == Settings::Setting::TYPE_FOSSIL_GLOBAL || type == Settings::Setting::TYPE_FOSSIL_LOCAL); QString value = it.value().Value.toString(); @@ -2197,7 +2219,7 @@ void MainWindow::on_actionNewStash_triggered() if(stashed_files.empty()) return; - + QString stash_name; bool revert = false; QString checkbox_text = tr("Revert stashed files"); @@ -2217,7 +2239,7 @@ void MainWindow::on_actionNewStash_triggered() { if(stash_name == it.key()) { - QMessageBox::critical(this, tr("Error"), tr("This stash already exists")); + QMessageBox::critical(this, tr("Error"), tr("This stash already exists")); return; } } @@ -2253,7 +2275,7 @@ void MainWindow::on_actionApplyStash_triggered() return; } } - + // Delete stashes for(QStringList::iterator it=stashes.begin(); delete_stashes && it!=stashes.end(); ++it) { @@ -2306,10 +2328,10 @@ void MainWindow::on_actionDiffStash_triggered() if(stashes.length() != 1) return; - + stashmap_t::iterator id_it = stashMap.find(*stashes.begin()); Q_ASSERT(id_it!=stashMap.end()); - + // Run diff runFossil(QStringList() << "stash" << "diff" << *id_it, 0); } @@ -2330,16 +2352,16 @@ void MainWindow::onFileViewDragOut() QMimeData *mime_data = new QMimeData; mime_data->setData("text/uri-list", uris.toUtf8()); - QDrag *drag = new QDrag(this); - drag->setMimeData(mime_data); - drag->exec(Qt::CopyAction); + QDrag *drag = new QDrag(this); + drag->setMimeData(mime_data); + drag->exec(Qt::CopyAction); } //------------------------------------------------------------------------------ void MainWindow::on_textBrowser_customContextMenuRequested(const QPoint &pos) { - QMenu *menu = ui->textBrowser->createStandardContextMenu(); - menu->addSeparator(); - menu->addAction(ui->actionClearLog); - menu->popup(ui->textBrowser->mapToGlobal(pos)); + QMenu *menu = ui->textBrowser->createStandardContextMenu(); + menu->addSeparator(); + menu->addAction(ui->actionClearLog); + menu->popup(ui->textBrowser->mapToGlobal(pos)); } diff --git a/manifest b/manifest index a665f07..ff1f566 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\screating\sa\snew\srepository\salways\sshow\sunknown\sfiles\nMoved\sthe\sclear\slog\saction\sto\sthe\slog\scontext\smenu\nThe\sfile\sview\snow\sdisplays\sthe\sactual\sfiletype\sicons\nBetter\sresizing\sfor\scolumns\sin\sthe\sfileview\nFixed\scrash\sin\sdrag\sand\sdrop\sin\sLinux\n -D 2012-04-21T08:36:13.808 +C Added\ssupport\sfor\susing\sa\suser\sspecified\sfolder\sfor\sworkpaces\sinstead\sthe\sfossil\srepository\sfolder\n +D 2012-04-22T09:08:38.880 F CommitDialog.cpp a46020a9361151d8d286a2670257d01d8967bf69 F CommitDialog.h f1ee8db92103164e7db55a8407ccdcff24571b72 F CommitDialog.ui 813d7cba316e226de1a22b7e480bb969fbe9b0c4 @@ -8,7 +8,7 @@ F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 F FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F MainWindow.cpp e81955c1902fb6a7ac33c830a425dd1baad5ccc1 +F MainWindow.cpp daacedbfdbe8d4160f4f0edcea40a89dc49788a3 F MainWindow.h 1f6d8db9cf25a89fbbb1e0b33cc63a0e43cfe7ff F MainWindow.ui 6c12a0b141b86c6994d5835618acba19a9ff1976 F SettingsDialog.cpp e1fad18cc020d08b82c6d35dc94f6624deec9a3b @@ -176,7 +176,7 @@ F installer/fuel.iss 13b6a938bcdf273cbd3649d2549887baa1577214 F installer/license.txt 4cc77b90af91e615a64ae04893fdffa7939db84c F main.cpp 69c1f9e873c016ef466d20298a67c3bc4c2b2f3a F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 -P e42f476b1c07959ee224b1abbd60f811893d0717 -R d8b3609a9646f748b8ef5737cc97987c +P 03c02e59f350369dd0a66f24fda209f4ab50137d +R 42b9b12104a524ef4b427fe73065af06 U kostas -Z 8c32e736b7ba845d81c6fe59d1e8d0a9 +Z 9796c88ed9d1107c3536f179fdb2c4ca diff --git a/manifest.uuid b/manifest.uuid index cde9de6..7fd8e0a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -03c02e59f350369dd0a66f24fda209f4ab50137d \ No newline at end of file +5cd50b0577298e1b73d16c1f74a086911f870839 \ No newline at end of file