diff --git a/src/plugins/cpaster/cpaster.pro b/src/plugins/cpaster/cpaster.pro index 6abf90914cf2f2c24bd7d7da040c8d51748724bf..38c0a6e9d13aa097231450d0a33f9eaf8ada4d63 100644 --- a/src/plugins/cpaster/cpaster.pro +++ b/src/plugins/cpaster/cpaster.pro @@ -15,7 +15,9 @@ HEADERS += cpasterplugin.h \ pastebindotcaprotocol.h \ settings.h \ pasteselectdialog.h \ - columnindicatortextedit.h + columnindicatortextedit.h \ + fileshareprotocol.h \ + fileshareprotocolsettingspage.h SOURCES += cpasterplugin.cpp \ settingspage.cpp \ protocol.cpp \ @@ -27,9 +29,12 @@ SOURCES += cpasterplugin.cpp \ pastebindotcaprotocol.cpp \ settings.cpp \ pasteselectdialog.cpp \ - columnindicatortextedit.cpp + columnindicatortextedit.cpp \ + fileshareprotocol.cpp \ + fileshareprotocolsettingspage.cpp FORMS += settingspage.ui \ pasteselect.ui \ pasteview.ui \ - pastebindotcomsettings.ui + pastebindotcomsettings.ui \ + fileshareprotocolsettingswidget.ui include(../../shared/cpaster/cpaster.pri) diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp index 104008a8f0070483033d9f75d1eb650c36517b21..71b3e6af482f41ad3f30179c99408928fcd59fc0 100644 --- a/src/plugins/cpaster/cpasterplugin.cpp +++ b/src/plugins/cpaster/cpasterplugin.cpp @@ -34,6 +34,7 @@ #include "codepasterprotocol.h" #include "pastebindotcomprotocol.h" #include "pastebindotcaprotocol.h" +#include "fileshareprotocol.h" #include "pasteselectdialog.h" #include "settingspage.h" #include "settings.h" @@ -94,7 +95,8 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m const QSharedPointer<NetworkAccessManagerProxy> networkAccessMgrProxy(new NetworkAccessManagerProxy); Protocol *protos[] = { new PasteBinDotComProtocol(networkAccessMgrProxy), new PasteBinDotCaProtocol(networkAccessMgrProxy), - new CodePasterProtocol(networkAccessMgrProxy) + new CodePasterProtocol(networkAccessMgrProxy), + new FileShareProtocol }; const int count = sizeof(protos) / sizeof(Protocol *); for(int i = 0; i < count; ++i) { @@ -221,7 +223,8 @@ void CodepasterPlugin::post(QString data, const QString &mimeType) foreach(Protocol *protocol, m_protocols) { if (protocol->name() == protocolName) { const Protocol::ContentType ct = Protocol::contentType(mimeType); - protocol->paste(data, ct, username, comment, description); + if (Protocol::ensureConfiguration(protocol)) + protocol->paste(data, ct, username, comment, description); break; } } @@ -237,7 +240,9 @@ void CodepasterPlugin::fetch() const QString pasteID = dialog.pasteId(); if (pasteID.isEmpty()) return; - m_protocols[dialog.protocolIndex()]->fetch(pasteID); + Protocol *protocol = m_protocols[dialog.protocolIndex()]; + if (Protocol::ensureConfiguration(protocol)) + protocol->fetch(pasteID); } void CodepasterPlugin::finishPost(const QString &link) diff --git a/src/plugins/cpaster/pastebindotcomprotocol.cpp b/src/plugins/cpaster/pastebindotcomprotocol.cpp index 6ca770871bc268c9bc8bd471fb1a9cb8681c5e9d..2e7876b9eb004d4aac925b09c59b5d074e4aa417 100644 --- a/src/plugins/cpaster/pastebindotcomprotocol.cpp +++ b/src/plugins/cpaster/pastebindotcomprotocol.cpp @@ -320,7 +320,7 @@ void PasteBinDotComProtocol::listFinished() m_listReply = 0; } -Core::IOptionsPage *PasteBinDotComProtocol::settingsPage() +Core::IOptionsPage *PasteBinDotComProtocol::settingsPage() const { return m_settings; } diff --git a/src/plugins/cpaster/pastebindotcomprotocol.h b/src/plugins/cpaster/pastebindotcomprotocol.h index 5545e15ab7047659bf5bdd974c96876b79b967f3..e137bc14b2a65f9182e506014424413f380c5d54 100644 --- a/src/plugins/cpaster/pastebindotcomprotocol.h +++ b/src/plugins/cpaster/pastebindotcomprotocol.h @@ -46,7 +46,7 @@ public: virtual unsigned capabilities() const; bool hasSettings() const { return true; } - Core::IOptionsPage *settingsPage(); + Core::IOptionsPage *settingsPage() const; virtual void fetch(const QString &id); virtual void paste(const QString &text, diff --git a/src/plugins/cpaster/pasteselectdialog.cpp b/src/plugins/cpaster/pasteselectdialog.cpp index 8f19b77637081a5b4965e6b8da7f4ea7f073c1a2..3bc643d51b85059e6b059c87b7443e602e3371e0 100644 --- a/src/plugins/cpaster/pasteselectdialog.cpp +++ b/src/plugins/cpaster/pasteselectdialog.cpp @@ -114,11 +114,14 @@ void PasteSelectDialog::list() { const int index = protocolIndex(); - QTC_ASSERT((m_protocols.at(index)->capabilities() & Protocol::ListCapability), return); + Protocol *protocol = m_protocols[index]; + QTC_ASSERT((protocol->capabilities() & Protocol::ListCapability), return); m_ui.listWidget->clear(); - m_ui.listWidget->addItem(new QListWidgetItem(tr("Waiting for items"))); - m_protocols[index]->list(); + if (Protocol::ensureConfiguration(protocol, this)) { + m_ui.listWidget->addItem(new QListWidgetItem(tr("Waiting for items"))); + protocol->list(); + } } void PasteSelectDialog::protocolChanged(int i) diff --git a/src/plugins/cpaster/protocol.cpp b/src/plugins/cpaster/protocol.cpp index 42429a383670cdd53825e18c4c6d7b89d2a316f5..68aca2f58c714d7f999e07f7128bd0e0226fb9d0 100644 --- a/src/plugins/cpaster/protocol.cpp +++ b/src/plugins/cpaster/protocol.cpp @@ -30,11 +30,16 @@ #include <cpptools/cpptoolsconstants.h> #include <qmljseditor/qmljseditorconstants.h> +#include <coreplugin/icore.h> +#include <coreplugin/dialogs/ioptionspage.h> #include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkRequest> #include <QtCore/QUrl> +#include <QtGui/QMessageBox> +#include <QtGui/QMainWindow> +#include <QtGui/QPushButton> namespace CodePaster { @@ -47,22 +52,17 @@ Protocol::~Protocol() { } -bool Protocol::canFetch() const +bool Protocol::hasSettings() const { - return true; + return false; } -bool Protocol::canPost() const +bool Protocol::checkConfiguration(QString *) const { return true; } -bool Protocol::hasSettings() const -{ - return false; -} - -Core::IOptionsPage *Protocol::settingsPage() +Core::IOptionsPage *Protocol::settingsPage() const { return 0; } @@ -115,6 +115,46 @@ QString Protocol::textFromHtml(QString data) return data; } +bool Protocol::ensureConfiguration(const Protocol *p, QWidget *parent) +{ + QString errorMessage; + bool ok = false; + while (true) { + if (p->checkConfiguration(&errorMessage)) { + ok = true; + break; + } + if (!showConfigurationError(p, errorMessage, parent)) + break; + } + return ok; +} + +bool Protocol::showConfigurationError(const Protocol *p, + const QString &message, + QWidget *parent, + bool showConfig) +{ + if (!p->settingsPage()) + showConfig = false; + + if (!parent) + parent = Core::ICore::instance()->mainWindow(); + const QString title = tr("%1 - Configuration Error").arg(p->name()); + QMessageBox mb(QMessageBox::Warning, title, message, QMessageBox::Cancel, parent); + QPushButton *settingsButton = 0; + if (showConfig) + settingsButton = mb.addButton(tr("Settings..."), QMessageBox::AcceptRole); + mb.exec(); + bool rc = false; + if (mb.clickedButton() == settingsButton) + rc = Core::ICore::instance()->showOptionsDialog(p->settingsPage()->category(), + p->settingsPage()->id(), + parent); + return rc; +} + + // ------------ NetworkAccessManagerProxy NetworkAccessManagerProxy::NetworkAccessManagerProxy() { diff --git a/src/plugins/cpaster/protocol.h b/src/plugins/cpaster/protocol.h index 6ee95f9fdd61204b00b42e0df73b38b8d12e8289..43ecc6a823c17609912ddefbf9315d41f7491620 100644 --- a/src/plugins/cpaster/protocol.h +++ b/src/plugins/cpaster/protocol.h @@ -37,6 +37,7 @@ QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkReply; +class QWidget; QT_END_NAMESPACE namespace Core { @@ -62,14 +63,11 @@ public: virtual QString name() const = 0; - bool canFetch() const; - bool canPost() const; - - virtual unsigned capabilities() const = 0; virtual bool hasSettings() const; - virtual Core::IOptionsPage *settingsPage(); + virtual Core::IOptionsPage *settingsPage() const; + virtual bool checkConfiguration(QString *errorMessage = 0) const; virtual void fetch(const QString &id) = 0; virtual void list(); virtual void paste(const QString &text, @@ -81,6 +79,16 @@ public: // Convenience to determine content type from mime type static ContentType contentType(const QString &mimeType); + // Show a configuration error and point user to settings. + // Return true when settings changed. + static bool showConfigurationError(const Protocol *p, + const QString &message, + QWidget *parent = 0, + bool showConfig = true); + // Ensure configuration is correct + static bool ensureConfiguration(const Protocol *p, + QWidget *parent = 0); + signals: void pasteDone(const QString &link); void fetchDone(const QString &titleDescription,