Blob Blame History Raw
From 725524d8e23fbc5fad9aab00cbaa3d66589baf14 Mon Sep 17 00:00:00 2001
From: David Rosca <nowrep@gmail.com>
Date: Wed, 31 Dec 2014 12:07:56 +0100
Subject: [PATCH 07/20] wizard: Add Success page

Instead of closing the wizard, show a final page
to user to indicate the pairing was completed successfully.
---
 src/wizard/CMakeLists.txt      |  2 ++
 src/wizard/bluewizard.cpp      |  2 ++
 src/wizard/bluewizard.h        |  2 +-
 src/wizard/pages/fail.cpp      |  2 ++
 src/wizard/pages/fail.ui       | 10 +++++++
 src/wizard/pages/nopairing.cpp | 46 +++++++++++-----------------
 src/wizard/pages/nopairing.h   | 10 +++----
 src/wizard/pages/success.cpp   | 64 +++++++++++++++++++++++++++++++++++++++
 src/wizard/pages/success.h     | 46 ++++++++++++++++++++++++++++
 src/wizard/pages/success.ui    | 68 ++++++++++++++++++++++++++++++++++++++++++
 10 files changed, 216 insertions(+), 36 deletions(-)
 create mode 100644 src/wizard/pages/success.cpp
 create mode 100644 src/wizard/pages/success.h
 create mode 100644 src/wizard/pages/success.ui

diff --git a/src/wizard/CMakeLists.txt b/src/wizard/CMakeLists.txt
index 847e672..f2ada0f 100644
--- a/src/wizard/CMakeLists.txt
+++ b/src/wizard/CMakeLists.txt
@@ -10,6 +10,7 @@ set(wizard_SRCS
     pages/keyboardpairing.cpp
     pages/ssppairing.cpp
     pages/fail.cpp
+    pages/success.cpp
 )
 
 kde4_add_ui_files(wizard_SRCS
@@ -19,6 +20,7 @@ kde4_add_ui_files(wizard_SRCS
             pages/keyboardpairing.ui
             pages/ssppairing.ui
             pages/fail.ui
+            pages/success.ui
 )
 
 kde4_add_executable(bluedevil-wizard ${wizard_SRCS})
diff --git a/src/wizard/bluewizard.cpp b/src/wizard/bluewizard.cpp
index de241b0..91cb28f 100644
--- a/src/wizard/bluewizard.cpp
+++ b/src/wizard/bluewizard.cpp
@@ -24,6 +24,7 @@
 #include "pages/legacypairingdatabase.h"
 #include "pages/keyboardpairing.h"
 #include "pages/ssppairing.h"
+#include "pages/success.h"
 #include "pages/fail.h"
 
 #include <QApplication>
@@ -57,6 +58,7 @@ BlueWizard::BlueWizard(const KUrl &url) : QWizard(), m_device(0), m_manualPin(fa
     setPage(LegacyPairingDatabase, new LegacyPairingPageDatabase(this));
     setPage(KeyboardPairing, new KeyboardPairingPage(this));
     setPage(SSPPairing, new SSPPairingPage(this));
+    setPage(Success, new SuccessPage(this));
     setPage(Fail, new FailPage(this));
 
     setButton(QWizard::BackButton, new KPushButton(KStandardGuiItem::back(KStandardGuiItem::UseRTL)));
diff --git a/src/wizard/bluewizard.h b/src/wizard/bluewizard.h
index fcb2015..4685aca 100644
--- a/src/wizard/bluewizard.h
+++ b/src/wizard/bluewizard.h
@@ -53,7 +53,7 @@ public:
 
     WizardAgent* agent() const;
 
-    enum {Discover, NoPairing, LegacyPairing, LegacyPairingDatabase, KeyboardPairing, SSPPairing, Fail, Connect};
+    enum {Discover, NoPairing, LegacyPairing, LegacyPairingDatabase, KeyboardPairing, SSPPairing, Success, Fail, Connect};
 
 public Q_SLOTS:
     void restartWizard();
diff --git a/src/wizard/pages/fail.cpp b/src/wizard/pages/fail.cpp
index f7c065e..e9f44ef 100644
--- a/src/wizard/pages/fail.cpp
+++ b/src/wizard/pages/fail.cpp
@@ -37,6 +37,8 @@ FailPage::FailPage(BlueWizard* parent) : QWizardPage(parent)
 , m_wizard(parent)
 {
     setupUi(this);
+
+    failIcon->setPixmap(KIcon("task-reject").pixmap(48));
 }
 
 void FailPage::initializePage()
diff --git a/src/wizard/pages/fail.ui b/src/wizard/pages/fail.ui
index 0470e8f..375a4fb 100644
--- a/src/wizard/pages/fail.ui
+++ b/src/wizard/pages/fail.ui
@@ -30,6 +30,16 @@
       </spacer>
      </item>
      <item>
+      <widget class="QLabel" name="failIcon">
+       <property name="maximumSize">
+        <size>
+         <width>48</width>
+         <height>48</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QLabel" name="failLbl">
        <property name="text">
         <string/>
diff --git a/src/wizard/pages/nopairing.cpp b/src/wizard/pages/nopairing.cpp
index 65be653..c169a49 100644
--- a/src/wizard/pages/nopairing.cpp
+++ b/src/wizard/pages/nopairing.cpp
@@ -32,9 +32,10 @@
 
 using namespace BlueDevil;
 
-NoPairingPage::NoPairingPage(BlueWizard* parent) : QWizardPage(parent)
-, m_validPage(false)
-, m_wizard(parent)
+NoPairingPage::NoPairingPage(BlueWizard *parent)
+    : QWizardPage(parent)
+    , m_success(false)
+    , m_wizard(parent)
 {
     setupUi(this);
     m_working = new KPixmapSequenceOverlayPainter(this);
@@ -42,6 +43,14 @@ NoPairingPage::NoPairingPage(BlueWizard* parent) : QWizardPage(parent)
     m_working->start();
 }
 
+int NoPairingPage::nextId() const
+{
+    if (m_success) {
+        return BlueWizard::Success;
+    }
+    return BlueWizard::Fail;
+}
+
 void NoPairingPage::initializePage()
 {
     kDebug();
@@ -49,10 +58,6 @@ void NoPairingPage::initializePage()
 
     connecting->setText(connecting->text().append(m_wizard->device()->name()));
 
-    //It can happen that the device is technically connected and trusted but we are not connected
-    //to the profile. We have no way to know if the profile was activated or not so we have to relay
-    //on a timeout (10s)
-    QTimer::singleShot(10000, this, SLOT(timeout()));
     connect(m_wizard->device(), SIGNAL(connectedChanged(bool)), SLOT(connectedChanged(bool)));
     connect(m_wizard->device(), SIGNAL(trustedChanged(bool)), SLOT(connectedChanged(bool)));
 
@@ -60,30 +65,14 @@ void NoPairingPage::initializePage()
     m_wizard->device()->setTrusted(true);
 }
 
-void NoPairingPage::timeout()
-{
-    connectedChanged(true);
-}
-
 void NoPairingPage::connectedChanged(bool connected)
 {
-    kDebug();
-
-    m_validPage = connected;
-    if (m_validPage) {
-        kDebug() << "Done";
-        m_wizard->done(0);
-    }
-}
-
-bool NoPairingPage::validatePage()
-{
-    return m_validPage;
-}
+    kDebug() << "Connect finished" << connected;
 
-int NoPairingPage::nextId() const
-{
-    return -1;
+    // Connect may fail but that doesn't really mean the device was setup incorrectly
+    // Device::connectDevice will fail eg. when A2DP profile could not be connected due to missing pulseaudio plugin
+    m_success = true;
+    QTimer::singleShot(500, m_wizard, SLOT(next()));
 }
 
 QList<QWizard::WizardButton> NoPairingPage::wizardButtonsLayout() const
@@ -91,6 +80,5 @@ QList<QWizard::WizardButton> NoPairingPage::wizardButtonsLayout() const
     QList <QWizard::WizardButton> list;
     list << QWizard::Stretch;
     list << QWizard::CancelButton;
-
     return list;
 }
diff --git a/src/wizard/pages/nopairing.h b/src/wizard/pages/nopairing.h
index 9b9f4bf..ca03fb8 100644
--- a/src/wizard/pages/nopairing.h
+++ b/src/wizard/pages/nopairing.h
@@ -46,21 +46,19 @@ Q_OBJECT
 public:
     NoPairingPage(BlueWizard* parent = 0);
 
-    virtual void initializePage();
-    virtual bool validatePage();
     virtual int nextId() const;
+    virtual void initializePage();
 
 protected:
     QList <QWizard::WizardButton> wizardButtonsLayout() const;
 
 private Q_SLOTS:
-    void timeout();
     void connectedChanged(bool connected);
 
 private:
-    bool                          m_validPage;
-    BlueWizard                    *m_wizard;
+    bool m_success;
+    BlueWizard *m_wizard;
     KPixmapSequenceOverlayPainter *m_working;
 };
 
-#endif // NOPAIRING_H
\ No newline at end of file
+#endif // NOPAIRING_H
diff --git a/src/wizard/pages/success.cpp b/src/wizard/pages/success.cpp
new file mode 100644
index 0000000..44b70fa
--- /dev/null
+++ b/src/wizard/pages/success.cpp
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * This file is part of the KDE project                                      *
+ *                                                                           *
+ * Copyright (C) 2010 Alejandro Fiestas Olivares <afiestas@kde.org>          *
+ * Copyright (C) 2010-2011 UFO Coders <info@ufocoders.com>                   *
+ * Copyright (C) 2014 David Rosca <nowrep@gmail.com>                         *
+ *                                                                           *
+ * This library is free software; you can redistribute it and/or             *
+ * modify it under the terms of the GNU Library General Public               *
+ * License as published by the Free Software Foundation; either              *
+ * version 2 of the License, or (at your option) any later version.          *
+ *                                                                           *
+ * This library is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
+ * Library General Public License for more details.                          *
+ *                                                                           *
+ * You should have received a copy of the GNU Library General Public License *
+ * along with this library; see the file COPYING.LIB.  If not, write to      *
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,      *
+ * Boston, MA 02110-1301, USA.                                               *
+ *****************************************************************************/
+
+#include "success.h"
+#include "bluewizard.h"
+
+#include <KDebug>
+#include <KLocalizedString>
+
+#include <bluedevil/bluedevildevice.h>
+
+SuccessPage::SuccessPage(BlueWizard *parent)
+    : QWizardPage(parent)
+    , m_wizard(parent)
+{
+    setupUi(this);
+
+    successIcon->setPixmap(KIcon("task-complete").pixmap(48));
+}
+
+void SuccessPage::initializePage()
+{
+    kDebug() << "Initialize Success Page";
+
+    QList<QWizard::WizardButton> list;
+    list << QWizard::Stretch;
+    list << QWizard::FinishButton;
+
+    m_wizard->setButtonLayout(list);
+
+    setFinalPage(true);
+
+    QString deviceName = m_wizard->device()->name();
+    if (deviceName.isEmpty()) {
+        successLbl->setText(i18nc("This string is shown when the wizard succeeds", "The setup of the device has succeeded"));
+    } else {
+        successLbl->setText(i18n("The setup of %1 has succeeded", deviceName));
+    }
+}
+
+int SuccessPage::nextId() const
+{
+    return -1;
+}
diff --git a/src/wizard/pages/success.h b/src/wizard/pages/success.h
new file mode 100644
index 0000000..a41f73e
--- /dev/null
+++ b/src/wizard/pages/success.h
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * This file is part of the KDE project                                      *
+ *                                                                           *
+ * Copyright (C) 2010 Alejandro Fiestas Olivares <afiestas@kde.org>          *
+ * Copyright (C) 2010-2011 UFO Coders <info@ufocoders.com>                   *
+ * Copyright (C) 2014 David Rosca <nowrep@gmail.com>                         *
+ *                                                                           *
+ * This library is free software; you can redistribute it and/or             *
+ * modify it under the terms of the GNU Library General Public               *
+ * License as published by the Free Software Foundation; either              *
+ * version 2 of the License, or (at your option) any later version.          *
+ *                                                                           *
+ * This library is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
+ * Library General Public License for more details.                          *
+ *                                                                           *
+ * You should have received a copy of the GNU Library General Public License *
+ * along with this library; see the file COPYING.LIB.  If not, write to      *
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,      *
+ * Boston, MA 02110-1301, USA.                                               *
+ *****************************************************************************/
+
+#ifndef SUCCESS_H
+#define SUCCESS_H
+
+#include "ui_success.h"
+#include <QWizardPage>
+
+class BlueWizard;
+
+class SuccessPage : public QWizardPage, Ui::Success
+{
+    Q_OBJECT
+
+public:
+    SuccessPage(BlueWizard *parent = 0);
+
+    virtual void initializePage();
+    virtual int nextId() const;
+
+private:
+    BlueWizard *m_wizard;
+};
+
+#endif // SUCCESS_H
diff --git a/src/wizard/pages/success.ui b/src/wizard/pages/success.ui
new file mode 100644
index 0000000..3630db3
--- /dev/null
+++ b/src/wizard/pages/success.ui
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Success</class>
+ <widget class="QWidget" name="Success">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Fixed</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>10</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="successIcon">
+       <property name="maximumSize">
+        <size>
+         <width>48</width>
+         <height>48</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="successLbl">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
-- 
2.1.0