Hi Dirk, Already Fix the problem cited by Miica. I believe it is all right, if not, please let me know.
From de869df273fb2341e340ae814ca024cf5ef5dc84 Mon Sep 17 00:00:00 2001 From: Edi Anderson Lobo <ediandersonl...@gmail.com> Date: Tue, 18 Oct 2016 18:34:55 -0200 Subject: [PATCH 2/4] Change menu name dynamically.
Associated an QAction *toggle_connection with the QMenu *connections to ensure that QAction don't be orphan. In this way, I can change the name of menu dynamically. In this way when user click on menu (Share on -> Connect to) it be changed to (Share on-> Disconnet to) and so on. Signed-off-by: Edi Anderson Lobo <ediandersonl...@gmail.com> --- desktop-widgets/mainwindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp index 33151ef..802f722 100644 --- a/desktop-widgets/mainwindow.cpp +++ b/desktop-widgets/mainwindow.cpp @@ -335,7 +335,7 @@ void MainWindow::setupSocialNetworkMenu() #ifdef FBSUPPORT QMenu *connections = new QMenu(tr("Connect to")); FacebookPlugin *facebookPlugin = new FacebookPlugin(); - QAction *toggle_connection = new QAction(this); + QAction *toggle_connection = new QAction(connections); QObject *obj = qobject_cast<QObject*>(facebookPlugin); toggle_connection->setText(facebookPlugin->socialNetworkName()); toggle_connection->setIcon(QIcon(facebookPlugin->socialNetworkIcon())); @@ -363,6 +363,7 @@ void MainWindow::socialNetworkRequestConnect() plugin->requestLogoff(); else plugin->requestLogin(); + qobject_cast<QMenu*>(action->parentWidget())->setTitle(plugin->isConnected() ? tr("Disconnect to") : tr("Connect to")); } void MainWindow::socialNetworkRequestUpload() -- 2.10.0
From 6498949e161d68481b95aff0166ed3e93eddd857 Mon Sep 17 00:00:00 2001 From: Edi Anderson Lobo <ediandersonl...@gmail.com> Date: Wed, 19 Oct 2016 02:48:47 -0200 Subject: [PATCH 4/4] Changes in facebookconnectwidget.(h,cpp) Moved the definition of FacebookManager class to bottom, because needed pass a pointer of type SocialNetworkDialog to sendDive method of FacebookManager class because SocialNetworkDialog class was defined after FacebookManager, so SocialNetworkDialog was unknown to FacebookManager. Added an method 'enableCheckboxes', to determine whether the checkboxes must be enabled. They will be enabled if the values associated with their respective fields are not null. In FacebookManager::sendDive replace the local SocialNetworkDialog dialog by an pointer for the object SocialNetworkDialog which had already been allocated in the constructor of the class FacebookPlugin, avoiding the creation of a new object. In FacebookConnectWidget::facebookLoggedIn, added an QMessageBox to inform how to disconnect subsurface from Facebook account, instead of hiding the dialog widgets to display the same message. In FacebookConnectWidget::facebookDisconnect, useless code removed after my changes. Created SocialNetworkDialog::enableCheckboxes for show checkboxes that dont have null data associated with them. Created SocialNetworkDialog::clearDialog slot, to clear it after be used. Signed-off-by: Edi Anderson Lobo <ediandersonl...@gmail.com> --- .../plugins/facebook/facebookconnectwidget.cpp | 83 +++++++++++++++++----- .../plugins/facebook/facebookconnectwidget.h | 52 +++++++------- 2 files changed, 92 insertions(+), 43 deletions(-) diff --git a/desktop-widgets/plugins/facebook/facebookconnectwidget.cpp b/desktop-widgets/plugins/facebook/facebookconnectwidget.cpp index e0d2aab..de5323b 100644 --- a/desktop-widgets/plugins/facebook/facebookconnectwidget.cpp +++ b/desktop-widgets/plugins/facebook/facebookconnectwidget.cpp @@ -157,13 +157,12 @@ void FacebookManager::setDesiredAlbumName(const QString& a) /* to be changed to export the currently selected dive as shown on the profile. * Much much easier, and its also good to people do not select all the dives * and send erroniously *all* of them to facebook. */ -void FacebookManager::sendDive() +void FacebookManager::sendDive(SocialNetworkDialog *dialog) { - SocialNetworkDialog dialog(qApp->activeWindow()); - if (dialog.exec() != QDialog::Accepted) + if (dialog->exec() != QDialog::Accepted) return; - setDesiredAlbumName(dialog.album()); + setDesiredAlbumName(dialog->album()); requestAlbumId(); ProfileWidget2 *profile = MainWindow::instance()->graphics(); @@ -177,7 +176,7 @@ void FacebookManager::sendDive() QUrl url("https://graph.facebook.com/v2.2/" + QString(prefs.facebook.album_id) + "/photos?" + "&access_token=" + QString(prefs.facebook.access_token) + "&source=image" + - "&message=" + dialog.text().replace(""", "%22")); + "&message=" + dialog->text().replace(""", "%22")); QNetworkAccessManager *am = new QNetworkAccessManager(this); QNetworkRequest request(url); @@ -226,6 +225,7 @@ FacebookConnectWidget::FacebookConnectWidget(QWidget *parent) : QDialog(parent), FacebookManager *fb = FacebookManager::instance(); facebookWebView = new QWebView(this); ui->fbWebviewContainer->layout()->addWidget(facebookWebView); + ui->FBLabel->setText(tr("To connect to Facebook, please log in. This enables Subsurface to publish dives to your timeline")); if (fb->loggedIn()) { facebookLoggedIn(); } else { @@ -233,22 +233,22 @@ FacebookConnectWidget::FacebookConnectWidget(QWidget *parent) : QDialog(parent), } connect(facebookWebView, &QWebView::urlChanged, fb, &FacebookManager::tryLogin); connect(fb, &FacebookManager::justLoggedIn, this, &FacebookConnectWidget::facebookLoggedIn); + connect(fb, &FacebookManager::justLoggedOut,this, &FacebookConnectWidget::facebookDisconnect); } void FacebookConnectWidget::facebookLoggedIn() { - ui->fbWebviewContainer->hide(); - ui->fbWebviewContainer->setEnabled(false); - ui->FBLabel->setText(tr("To disconnect Subsurface from your Facebook account, use the button below")); + close(); + QMessageBox::information(qApp->activeWindow(), + tr("Facebook account"), + tr("To disconnect Subsurface from your \n " + "account, use the menu \n" + "\"Share-on->Disconnect to->Facebook.\""), + QMessageBox::Ok); } void FacebookConnectWidget::facebookDisconnect() { - // remove the connect/disconnect button - // and instead add the login view - ui->fbWebviewContainer->show(); - ui->fbWebviewContainer->setEnabled(true); - ui->FBLabel->setText(tr("To connect to Facebook, please log in. This enables Subsurface to publish dives to your timeline")); if (facebookWebView) { facebookWebView->page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar()); facebookWebView->setUrl(FacebookManager::instance()->connectUrl()); @@ -260,6 +260,7 @@ SocialNetworkDialog::SocialNetworkDialog(QWidget *parent) : ui( new Ui::SocialnetworksDialog()) { ui->setupUi(this); + setFixedSize(size()); ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); connect(ui->date, SIGNAL(clicked()), this, SLOT(selectionChanged())); connect(ui->duration, SIGNAL(clicked()), this, SLOT(selectionChanged())); @@ -268,12 +269,54 @@ SocialNetworkDialog::SocialNetworkDialog(QWidget *parent) : connect(ui->Location, SIGNAL(clicked()), this, SLOT(selectionChanged())); connect(ui->Notes, SIGNAL(clicked()), this, SLOT(selectionChanged())); connect(ui->album, SIGNAL(textChanged(QString)), this, SLOT(albumChanged())); + connect(this, &QDialog::accepted, this, &SocialNetworkDialog::clearDialog); + connect(this, &QDialog::rejected, this, &SocialNetworkDialog::clearDialog); + clearDialog(); +} + +void SocialNetworkDialog::enableCheckboxes(bool enable) +{ + struct dive *d = current_dive; + if (d != NULL) { + ui->duration->setEnabled(enable); + if (get_short_dive_date_string(d->when) != "" ) { + ui->date->setEnabled(enable); + } + if (get_dive_location(d) != NULL) { + ui->Location->setEnabled(enable); + } + if (d->buddy != NULL) { + ui->Buddy->setEnabled(enable); + } + if (d->divemaster != NULL) { + ui->Divemaster->setEnabled(enable); + } + if ( d->notes != NULL) { + ui->Notes->setEnabled(enable); + } + } + + if (!enable) + ui->text->setDisabled(!enable); + else + ui->text->setEnabled(enable); } void SocialNetworkDialog::albumChanged() { QAbstractButton *button = ui->buttonBox->button(QDialogButtonBox::Ok); - button->setEnabled(!ui->album->text().isEmpty()); + bool enabled = !ui->album->text().isEmpty(); + button->setEnabled(enabled); + enableCheckboxes(enabled); + if (!enabled) { + ui->text->clear(); + ui->duration->setChecked(enabled); + ui->date->setChecked(enabled); + ui->Location->setChecked(enabled); + ui->Buddy->setChecked(enabled); + ui->Divemaster->setChecked(enabled); + ui->Notes->setChecked(enabled); + } } void SocialNetworkDialog::selectionChanged() @@ -303,12 +346,18 @@ void SocialNetworkDialog::selectionChanged() ui->text->setPlainText(fullText); } -QString SocialNetworkDialog::text() const { +QString SocialNetworkDialog::text() const +{ return ui->text->toPlainText().toHtmlEscaped(); } -QString SocialNetworkDialog::album() const { +QString SocialNetworkDialog::album() const +{ return ui->album->text().toHtmlEscaped(); } - +void SocialNetworkDialog::clearDialog() +{ + ui->album->clear(); + emit ui->album->textChanged(QString()); +} diff --git a/desktop-widgets/plugins/facebook/facebookconnectwidget.h b/desktop-widgets/plugins/facebook/facebookconnectwidget.h index e970978..e3b8b12 100644 --- a/desktop-widgets/plugins/facebook/facebookconnectwidget.h +++ b/desktop-widgets/plugins/facebook/facebookconnectwidget.h @@ -8,32 +8,8 @@ namespace Ui { class SocialnetworksDialog; } -class FacebookManager : public QObject +class FacebookConnectWidget : public QDialog { - Q_OBJECT -public: - static FacebookManager *instance(); - void requestAlbumId(); - void requestUserId(); - QUrl connectUrl(); - bool loggedIn(); -signals: - void justLoggedIn(bool triggererd); - void justLoggedOut(bool triggered); - -public slots: - void tryLogin(const QUrl& loginResponse); - void logout(); - void setDesiredAlbumName(const QString& albumName); - void sendDive(); - -private: - explicit FacebookManager(QObject *parent = 0); - QString albumName; -}; - - -class FacebookConnectWidget : public QDialog { Q_OBJECT public: explicit FacebookConnectWidget(QWidget* parent = 0); @@ -44,7 +20,8 @@ private: QWebView *facebookWebView; }; -class SocialNetworkDialog : public QDialog { +class SocialNetworkDialog : public QDialog +{ Q_OBJECT public: SocialNetworkDialog(QWidget *parent = 0); @@ -53,8 +30,31 @@ public: public slots: void selectionChanged(); void albumChanged(); + void clearDialog(); private: Ui::SocialnetworksDialog *ui; + void enableCheckboxes(bool enable); }; +class FacebookManager : public QObject +{ + Q_OBJECT +public: + static FacebookManager *instance(); + void requestAlbumId(); + void requestUserId(); + QUrl connectUrl(); + bool loggedIn(); +signals: + void justLoggedIn(bool triggererd); + void justLoggedOut(bool triggered); +public slots: + void tryLogin(const QUrl& loginResponse); + void logout(); + void setDesiredAlbumName(const QString& albumName); + void sendDive(SocialNetworkDialog *dialog); +private: + explicit FacebookManager(QObject *parent = 0); + QString albumName; +}; #endif -- 2.10.0
From 6e23d0e78e865bb89822db903f456d8a99c7f4ef Mon Sep 17 00:00:00 2001 From: Edi Anderson Lobo <ediandersonl...@gmail.com> Date: Tue, 18 Oct 2016 18:39:41 -0200 Subject: [PATCH 3/4] Removed call to widget. Removed call to widget (SocialNetworkDialog) because it was called twice, an in FacebookPlugin::requestUpload() and after this, was called again in FacebookManager::sendDive, method responsible by send data to facebook. So,I pass an pointer of type SocialNetworkDialog to FacebookManager::sendDive and call the widget SocialNetworkDialog inside it, to send data. Signed-off-by: Edi Anderson Lobo <ediandersonl...@gmail.com> --- desktop-widgets/plugins/facebook/facebook_integration.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/desktop-widgets/plugins/facebook/facebook_integration.cpp b/desktop-widgets/plugins/facebook/facebook_integration.cpp index 58d757e..6ae470d 100644 --- a/desktop-widgets/plugins/facebook/facebook_integration.cpp +++ b/desktop-widgets/plugins/facebook/facebook_integration.cpp @@ -39,6 +39,7 @@ QString FacebookPlugin::socialNetworkName() const void FacebookPlugin::requestUpload() { FacebookManager *instance = FacebookManager::instance(); - if (instance->loggedIn()) - fbUploadDialog->exec(); + if (instance->loggedIn()) { + instance->sendDive(fbUploadDialog); + } } -- 2.10.0
From 0ae9e7b1c67861f462f6ebc9cf671149be469001 Mon Sep 17 00:00:00 2001 From: Edi Anderson Lobo <ediandersonl...@gmail.com> Date: Tue, 18 Oct 2016 18:29:57 -0200 Subject: [PATCH 1/4] Checkboxes disabled by default. I disabled the checkbox to activate them during the runtime. So when the data associated with checkbox is not null, the checkbox is enabled. So null data will not be sent to facebook. Signed-off-by: Edi Anderson Lobo <ediandersonl...@gmail.com> --- .../plugins/facebook/socialnetworksdialog.ui | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/desktop-widgets/plugins/facebook/socialnetworksdialog.ui b/desktop-widgets/plugins/facebook/socialnetworksdialog.ui index e8953d1..e4b8c3a 100644 --- a/desktop-widgets/plugins/facebook/socialnetworksdialog.ui +++ b/desktop-widgets/plugins/facebook/socialnetworksdialog.ui @@ -87,6 +87,9 @@ </item> <item row="5" column="0"> <widget class="QCheckBox" name="date"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Date and time</string> </property> @@ -94,6 +97,9 @@ </item> <item row="6" column="0"> <widget class="QCheckBox" name="duration"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Duration</string> </property> @@ -101,6 +107,9 @@ </item> <item row="7" column="0"> <widget class="QCheckBox" name="Location"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Location</string> </property> @@ -108,6 +117,9 @@ </item> <item row="8" column="0"> <widget class="QCheckBox" name="Divemaster"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Divemaster</string> </property> @@ -115,6 +127,9 @@ </item> <item row="9" column="0"> <widget class="QCheckBox" name="Buddy"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Buddy</string> </property> @@ -122,6 +137,9 @@ </item> <item row="10" column="0"> <widget class="QCheckBox" name="Notes"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Notes</string> </property> -- 2.10.0
_______________________________________________ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface