From caaf3706601bc0d05d8597b89d2b6c2c3ecbb434 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 29 Jun 2017 22:03:25 +0300 Subject: [PATCH] Gerrit: Store also remote name in remote chooser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Separate name/server data from the combo box. Task-number: QTCREATORBUG-16367 Change-Id: Ie7bfbe19a07b948f5d170846909092be53e617bd Reviewed-by: André Hartmann --- .../git/gerrit/gerritremotechooser.cpp | 19 ++++++++++--------- src/plugins/git/gerrit/gerritremotechooser.h | 7 ++++++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/plugins/git/gerrit/gerritremotechooser.cpp b/src/plugins/git/gerrit/gerritremotechooser.cpp index cc8e82e83dd..0ab8bc1f343 100644 --- a/src/plugins/git/gerrit/gerritremotechooser.cpp +++ b/src/plugins/git/gerrit/gerritremotechooser.cpp @@ -35,8 +35,6 @@ #include #include -Q_DECLARE_METATYPE(Gerrit::Internal::GerritServer); - namespace Gerrit { namespace Internal { @@ -78,8 +76,9 @@ void GerritRemoteChooser::setParameters(QSharedPointer paramet bool GerritRemoteChooser::updateRemotes(bool forceReload) { - QTC_ASSERT(!m_repository.isEmpty(), return false); + QTC_ASSERT(!m_repository.isEmpty() || !m_parameters, return false); m_remoteComboBox->clear(); + m_remotes.clear(); m_updatingRemotes = true; QString errorMessage; // Mute errors. We'll just fallback to the defaults QMap remotesList = @@ -100,24 +99,26 @@ bool GerritRemoteChooser::updateRemotes(bool forceReload) void GerritRemoteChooser::addRemote(const GerritServer &server, const QString &name) { - for (int i = 0, total = m_remoteComboBox->count(); i < total; ++i) { - const GerritServer s = m_remoteComboBox->itemData(i).value(); - if (s == server) + for (auto remote : m_remotes) { + if (remote.second == server) return; } - m_remoteComboBox->addItem(server.host + QString(" (%1)").arg(name), QVariant::fromValue(server)); + m_remoteComboBox->addItem(server.host + QString(" (%1)").arg(name)); + m_remotes.push_back({ name, server }); if (name == "gerrit") m_remoteComboBox->setCurrentIndex(m_remoteComboBox->count() - 1); } GerritServer GerritRemoteChooser::currentServer() const { - return m_remoteComboBox->currentData().value(); + const int index = m_remoteComboBox->currentIndex(); + QTC_ASSERT(index >= 0 && index < int(m_remotes.size()), return GerritServer()); + return m_remotes[index].second; } void GerritRemoteChooser::handleRemoteChanged() { - if (m_updatingRemotes || m_remoteComboBox->count() == 0) + if (m_updatingRemotes || m_remotes.empty()) return; emit remoteChanged(); } diff --git a/src/plugins/git/gerrit/gerritremotechooser.h b/src/plugins/git/gerrit/gerritremotechooser.h index a9eda955350..c69ab9e62a1 100644 --- a/src/plugins/git/gerrit/gerritremotechooser.h +++ b/src/plugins/git/gerrit/gerritremotechooser.h @@ -25,15 +25,18 @@ #pragma once +#include "gerritserver.h" + #include #include #include #include +#include + namespace Gerrit { namespace Internal { -class GerritServer; class GerritParameters; class GerritRemoteChooser : public QWidget @@ -60,6 +63,8 @@ private: QComboBox *m_remoteComboBox = nullptr; QToolButton *m_resetRemoteButton = nullptr; bool m_updatingRemotes = false; + using NameAndServer = std::pair; + std::vector m_remotes; }; } // namespace Internal