From 4c4e55f8903804ade22fbcafe4831cf95de89614 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Thu, 23 Jul 2020 10:56:07 +0200 Subject: [PATCH] dbhub: Add context menu actions to all tree views This adds context menus and some context menu actions to all the tree views in the Remote dock. No new features are added. This just adds a new way to trigger existing features but also establishes a place for future actions for new features. --- src/RemoteDock.cpp | 33 +++++++++++++++++++++- src/RemoteDock.ui | 69 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 92 insertions(+), 10 deletions(-) diff --git a/src/RemoteDock.cpp b/src/RemoteDock.cpp index 9c90cef5..6b0c4ff3 100644 --- a/src/RemoteDock.cpp +++ b/src/RemoteDock.cpp @@ -72,18 +72,49 @@ RemoteDock::RemoteDock(MainWindow* parent) ui->treeDatabaseCommits->expandAll(); }); + // Prepare context menu for list of remote databases + connect(ui->treeRemote->selectionModel(), &QItemSelectionModel::currentChanged, [this](const QModelIndex& index, const QModelIndex&) { + // Only enable database actions when a database was selected + bool enable = index.isValid() && + remoteModel->modelIndexToItem(index)->value(RemoteModelColumnType).toString() == "database"; + ui->actionCloneDatabaseDoubleClick->setEnabled(enable); + }); + ui->treeRemote->selectionModel()->currentChanged(QModelIndex(), QModelIndex()); // Enable/disable all action initially + connect(ui->actionCloneDatabaseDoubleClick, &QAction::triggered, [this]() { + fetchDatabase(ui->treeRemote->currentIndex()); + }); + ui->treeRemote->addAction(ui->actionCloneDatabaseDoubleClick); + // Prepare context menu for list of local clones connect(ui->treeLocal->selectionModel(), &QItemSelectionModel::currentChanged, [this](const QModelIndex& index, const QModelIndex&) { // Only enable database actions when a database was selected bool enable = index.isValid() && !index.sibling(index.row(), RemoteLocalFilesModel::ColumnFile).data().isNull(); + ui->actionOpenLocalDatabase->setEnabled(enable); ui->actionDeleteDatabase->setEnabled(enable); }); + ui->treeLocal->selectionModel()->currentChanged(QModelIndex(), QModelIndex()); // Enable/disable all action initially + connect(ui->actionOpenLocalDatabase, &QAction::triggered, [this]() { + openLocalFile(ui->treeLocal->currentIndex()); + }); connect(ui->actionDeleteDatabase, &QAction::triggered, [this]() { deleteLocalDatabase(ui->treeLocal->currentIndex()); }); + ui->treeLocal->addAction(ui->actionOpenLocalDatabase); ui->treeLocal->addAction(ui->actionDeleteDatabase); + // Prepare context menu for list of commits + connect(ui->treeDatabaseCommits->selectionModel(), &QItemSelectionModel::currentChanged, [this](const QModelIndex& index, const QModelIndex&) { + // Only enable database actions when a commit was selected + bool enable = index.isValid(); + ui->actionFetchCommit->setEnabled(enable); + }); + ui->treeDatabaseCommits->selectionModel()->currentChanged(QModelIndex(), QModelIndex()); // Enable/disable all action initially + connect(ui->actionFetchCommit, &QAction::triggered, [this]() { + fetchCommit(ui->treeDatabaseCommits->currentIndex()); + }); + ui->treeDatabaseCommits->addAction(ui->actionFetchCommit); + // Initial setup reloadSettings(); } @@ -213,7 +244,7 @@ void RemoteDock::enableButtons() bool logged_in = !remoteModel->currentClientCertificate().isEmpty(); ui->buttonPushDatabase->setEnabled(db_opened && logged_in); - ui->actionCloneDatabase->setEnabled(logged_in); + ui->actionCloneDatabaseLink->setEnabled(logged_in); ui->actionDatabaseOpenBrowser->setEnabled(db_opened && logged_in); ui->actionRefresh->setEnabled(logged_in); } diff --git a/src/RemoteDock.ui b/src/RemoteDock.ui index 625bc4c3..8ac7a6b5 100644 --- a/src/RemoteDock.ui +++ b/src/RemoteDock.ui @@ -126,12 +126,15 @@ false - + + + Qt::ActionsContextMenu + <html><head/><body><p>In this pane, remote databases from dbhub.io website can be added to DB Browser for SQLite. First you need an identity:</p><ol style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Login to the dbhub.io website (use your GitHub credentials or whatever you want)</li><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click the button to &quot;Generate client certificate&quot; (that's your identity). That'll give you a certificate file (save it to your local disk).</li><li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Go to the Remote tab in DB Browser for SQLite Preferences. Click the button to add a new certificate to DB Browser for SQLite and choose the just downloaded certificate file.</li></ol><p>Now the Remote panel shows your identity and you can add remote databases.</p></body></html> @@ -290,7 +293,11 @@ - + + + Qt::ActionsContextMenu + + @@ -398,9 +405,6 @@ - - false - :/icons/close:/icons/close @@ -418,19 +422,19 @@ :/icons/browser_open:/icons/browser_open - Open in web browser + Open in Web Browser Open the web page for the current database in your browser - + :/icons/clone_database:/icons/clone_database - Clone from link + Clone from Link Use this to download a remote database for local editing using a URL as provided on the web page of the database. @@ -451,6 +455,53 @@ F5 + + + + :/icons/clone_database:/icons/clone_database + + + Clone Database + + + + 75 + true + + + + + + + :/icons/db_open:/icons/db_open + + + Open Database + + + Open the local copy of this database + + + + 75 + true + + + + + + Check out Commit + + + Download and open this specific commit + + + + 75 + true + + + comboUser @@ -547,7 +598,7 @@ - actionCloneDatabase + actionCloneDatabaseLink triggered() RemoteDock fetchDatabase()