[kde-doc-english] [amarok] src: Diagnostics Dialog for Amarok.
Andrzej J. R. Hunt
andrzej at ahunt.org
Tue Apr 3 18:51:27 UTC 2012
Git commit ce15c154eb7f641c3ce6a273660edb11a2bdcab1 by Andrzej J. R. Hunt.
Committed on 03/04/2012 at 20:46.
Pushed by andrzejhunt into branch 'master'.
Diagnostics Dialog for Amarok.
FEATURE: 296415
REVIEW: 104449
GUI:
M +1 -0 src/CMakeLists.txt
M +14 -0 src/MainWindow.cpp
M +1 -0 src/MainWindow.h
M +1 -1 src/PluginManager.cpp
M +1 -1 src/PluginManager.h
A +123 -0 src/dialogs/DiagnosticDialog.cpp [License: GPL (v2+)]
A +45 -0 src/dialogs/DiagnosticDialog.h [License: GPL (v2+)]
http://commits.kde.org/amarok/ce15c154eb7f641c3ce6a273660edb11a2bdcab1
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 956b3da..43bda90 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -680,6 +680,7 @@ set(amaroklib_LIB_SRCS
databaseimporter/sqlbatch/SqlBatchImporterConfig.cpp
dialogs/CollectionSetup.cpp
dialogs/DatabaseImporterDialog.cpp
+ dialogs/DiagnosticDialog.cpp
dialogs/EditFilterDialog.cpp
dialogs/EqualizerDialog.cpp
dialogs/FilenameLayoutDialog.cpp
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 98b1c77..773f9b0 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -42,6 +42,7 @@
#include "context/ContextDock.h"
#include "core-impl/collections/support/CollectionManager.h"
#include "covermanager/CoverManager.h" // for actions
+#include "dialogs/DiagnosticDialog.h"
#include "dialogs/EqualizerDialog.h"
#include "likeback/LikeBack.h"
#include "moodbar/MoodbarManager.h"
@@ -533,6 +534,13 @@ MainWindow::slotShowCoverManager() const //SLOT
CoverManager::showOnce();
}
+void
+MainWindow::slotShowDiagnosticsDialog() const
+{
+ DiagnosticDialog dialog( KGlobal::mainComponent().aboutData() );
+ dialog.exec();
+}
+
void MainWindow::slotShowBookmarkManager() const
{
The::bookmarkManager()->showOnce();
@@ -938,6 +946,10 @@ MainWindow::createActions()
ac->addAction( "extendedAbout", action );
connect( action, SIGNAL( triggered() ), SLOT( showAbout() ) );
+ action = new KAction ( KIcon( "info-amarok" ), i18n( "&Diagnostics" ), this );
+ ac->addAction( "diagnosticDialog", action );
+ connect( action, SIGNAL( triggered() ), SLOT( slotShowDiagnosticsDialog() ) );
+
action = new KAction( KIcon( "tools-report-bug" ), i18n("&Report Bug..."), this );
ac->addAction( "reportBug", action );
connect( action, SIGNAL( triggered() ), SLOT( showReportBug() ) );
@@ -1089,6 +1101,8 @@ MainWindow::createMenus()
Amarok::actionCollection()->action( "reportBug" ) );
helpMenu->insertAction( helpMenu->actions().last(),
Amarok::actionCollection()->action( "extendedAbout" ) );
+ helpMenu->insertAction( helpMenu->actions().last(),
+ Amarok::actionCollection()->action( "diagnosticDialog" ) );
helpMenu->insertAction( helpMenu->actions().at( 4 ),
Amarok::actionCollection()->action( "likeBackSendComment" ) );
helpMenu->insertAction( helpMenu->actions().at( 5 ),
diff --git a/src/MainWindow.h b/src/MainWindow.h
index b149cb9..d497764 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -140,6 +140,7 @@ class AMAROK_EXPORT MainWindow : public KMainWindow
void slotShowBookmarkManager() const;
void slotShowEqualizer() const;
void slotShowCoverManager() const;
+ void slotShowDiagnosticsDialog() const;
void slotShowMenuBar();
void slotPlayMedia();
void slotAddLocation( bool directPlay = false );
diff --git a/src/PluginManager.cpp b/src/PluginManager.cpp
index c46b12f..9b34565 100644
--- a/src/PluginManager.cpp
+++ b/src/PluginManager.cpp
@@ -141,7 +141,7 @@ Plugins::PluginManager::checkPluginEnabledStates()
}
KPluginInfo::List
-Plugins::PluginManager::plugins( const QString &category )
+Plugins::PluginManager::plugins( const QString &category ) const
{
return m_pluginInfos.value( category );
}
diff --git a/src/PluginManager.h b/src/PluginManager.h
index 6b9f3ca..242409e 100644
--- a/src/PluginManager.h
+++ b/src/PluginManager.h
@@ -46,7 +46,7 @@ class AMAROK_EXPORT PluginManager : public QObject
QList<PluginFactory*> factories( const QString &category ) const;
- KPluginInfo::List plugins( const QString &category );
+ KPluginInfo::List plugins( const QString &category ) const;
ServicePluginManager *servicePluginManager();
diff --git a/src/dialogs/DiagnosticDialog.cpp b/src/dialogs/DiagnosticDialog.cpp
new file mode 100644
index 0000000..fc0c9da
--- /dev/null
+++ b/src/dialogs/DiagnosticDialog.cpp
@@ -0,0 +1,123 @@
+/****************************************************************************************
+ * Copyright (c) 2012 Andrzej J. R. Hunt <andrzej at ahunt.org> *
+ * *
+ * This program is free software; you can redistribute it and/or modify it under *
+ * the terms of the GNU General Public License as published by the Free Software *
+ * Foundation; either version 2 of the License, or (at your option) any later *
+ * version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License along with *
+ * this program. If not, see <http://www.gnu.org/licenses/>. *
+ ****************************************************************************************/
+
+#include "DiagnosticDialog.h"
+
+#include "PluginManager.h"
+#include "ScriptManager.h"
+
+#include <kapplication.h>
+#include <KDE/KService>
+#include <KDE/KServiceTypeTrader>
+#include <kglobal.h>
+#include "kplugininfo.h"
+#include <Phonon/Global>
+
+#include <QClipboard>
+
+
+DiagnosticDialog::DiagnosticDialog( const KAboutData *aboutData, QWidget *parent )
+ : KDialog( parent )
+{
+ if ( aboutData == 0 )
+ aboutData = KGlobal::mainComponent().aboutData();
+
+
+ m_textBox = new QPlainTextEdit( generateReport( aboutData ), this );
+
+ setPlainCaption( i18n( "%1 Diagnostics", aboutData->programName() ) );
+
+ setButtons( Close | User1 );
+ setButtonText( User1, i18n( "Copy to Clipboard" ) );
+
+ m_textBox->setReadOnly( true );
+
+ setMainWidget( m_textBox );
+ setInitialSize( QSize( 480, 460 ) );
+
+ connect( this, SIGNAL( user1Clicked() ), SLOT( slotCopyToClipboard() ) );
+}
+
+DiagnosticDialog::~DiagnosticDialog()
+{
+ delete m_textBox;
+}
+
+const QString
+DiagnosticDialog::generateReport( const KAboutData *aboutData )
+{
+
+ // Get scripts -- we have to assemble 3 lists into one
+ KPluginInfo::List aScripts;
+ const ScriptManager *aScriptManager = ScriptManager::instance();
+ aScripts.append( aScriptManager->scripts( QLatin1String( "Generic" ) ) );
+ aScripts.append( aScriptManager->scripts( QLatin1String( "Lyrics" ) ) );
+ aScripts.append( aScriptManager->scripts( QLatin1String( "Scriptable Service" ) ) );
+
+ // Format the data to be readable
+ QString aScriptString;
+ foreach( KPluginInfo aInfo, aScripts )
+ {
+ aScriptString = aScriptString % aInfo.name() % " " % aInfo.version() %
+ ( aInfo.isPluginEnabled() ? " (running)" : " (stopped)" ) % "\n ";
+ }
+
+
+ // Get plugins -- we have to assemble a list again.
+ KPluginInfo::List aPlugins;
+ const Plugins::PluginManager *aPluginManager = Plugins::PluginManager::instance();
+ aPlugins.append( aPluginManager->plugins( QLatin1String( "Collection" ) ) );
+ aPlugins.append( aPluginManager->plugins( QLatin1String( "Service" ) ) );
+ aPlugins.append( aPluginManager->plugins( QLatin1String( "Device" ) ) );
+
+ QString aPluginString;
+ foreach( KPluginInfo aInfo, aPlugins )
+ {
+ aPluginString = aPluginString % aInfo.name() % // " " % aInfo.version() %
+ ( aInfo.isPluginEnabled() ? " (enabled)" : " (disabled)" ) % "\n ";
+ }
+
+
+ const KService::Ptr aPhononBackend =
+ KServiceTypeTrader::self()->preferredService( "PhononBackend" );
+
+ return i18n(
+ "%1-Diagnostics\n\n%1 Version: %2\n"
+ "KDE Version: %3\n"
+ "Qt Version: %4\n"
+ "Phonon Version: %5\n"
+ "Phonon Backend: %6 (%7)\n\n"
+ "Amarok Scripts:\n %8\n"
+ "Amarok Plugins:\n %9\n",
+
+ aboutData->programName(), aboutData->version(), // Amarok
+ KDE::versionString(), // KDE
+ qVersion(), // QT
+ Phonon::phononVersion(), // Phonon
+ aPhononBackend.data()->name(),
+ aPhononBackend.data()->property( "X-KDE-PhononBackendInfo-Version",
+ QVariant::String).toString(), // & Backend
+ aScriptString, aPluginString
+ );
+
+}
+
+void
+DiagnosticDialog::slotCopyToClipboard() const
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ clipboard->setText( m_textBox->toPlainText() );
+}
diff --git a/src/dialogs/DiagnosticDialog.h b/src/dialogs/DiagnosticDialog.h
new file mode 100644
index 0000000..d32b00b
--- /dev/null
+++ b/src/dialogs/DiagnosticDialog.h
@@ -0,0 +1,45 @@
+/****************************************************************************************
+ * Copyright (c) 2012 Andrzej J. R. Hunt <andrzej at ahunt.org> *
+ * *
+ * This program is free software; you can redistribute it and/or modify it under *
+ * the terms of the GNU General Public License as published by the Free Software *
+ * Foundation; either version 2 of the License, or (at your option) any later *
+ * version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License along with *
+ * this program. If not, see <http://www.gnu.org/licenses/>. *
+ ****************************************************************************************/
+#ifndef AMAROK_DIAGNOSTICDIALOG_H
+#define AMAROK_DIAGNOSTICDIALOG_H
+
+#include "amarok_export.h"
+
+#include <KAboutData>
+#include <kdialog.h>
+#include <QPlainTextEdit>
+#include <QWeakPointer>
+
+class AMAROK_EXPORT DiagnosticDialog : public KDialog
+{
+ Q_OBJECT
+public:
+ explicit DiagnosticDialog( const KAboutData *aboutData, QWidget *parent = 0 );
+ virtual ~DiagnosticDialog();
+
+private:
+ QPlainTextEdit *m_textBox;
+
+ const QString generateReport( const KAboutData *aboutData );
+
+private slots:
+ void slotCopyToClipboard() const;
+};
+
+
+
+
+#endif //AMAROK_DIAGNOSTICDIALOG_H
\ No newline at end of file
More information about the kde-doc-english
mailing list