]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Allow to configure which preview plugins should be enabled. Per default previews...
authorPeter Penz <peter.penz19@gmail.com>
Fri, 10 Apr 2009 18:58:21 +0000 (18:58 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 10 Apr 2009 18:58:21 +0000 (18:58 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=952049

src/settings/previewssettingspage.cpp
src/settings/previewssettingspage.h

index e0e07b64fe428425e1955ba8fedd30332282957f..d5c518b005241cda586d8258b5127b3a35616bc6 100644 (file)
 #include "dolphin_generalsettings.h"
 
 #include <QCheckBox>
+#include <QEvent>
 #include <QGroupBox>
 #include <QLabel>
+#include <QListWidget>
 #include <QRadioButton>
 #include <QSlider>
 #include <QSpinBox>
@@ -35,6 +37,8 @@
 #include <kglobal.h>
 #include <klocale.h>
 #include <khbox.h>
+#include <kservicetypetrader.h>
+#include <kservice.h>
 #include <kvbox.h>
 
 // default settings
@@ -43,17 +47,26 @@ const int MAX_PREVIEW_SIZE = 5; // 5 MB
 
 PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
     SettingsPageBase(parent),
+    m_initialized(false),
+    m_previewPluginsList(0),
+    m_enabledPreviewPlugins(),
     m_maxPreviewSize(0),
     m_spinBox(0),
     m_useFileThumbnails(0)
 {
-    KVBox* vBox = new KVBox(this);
-    vBox->setSpacing(KDialog::spacingHint());
-    vBox->setMargin(KDialog::marginHint());
+    QVBoxLayout* topLayout = new QVBoxLayout(this);
+    topLayout->setSpacing(KDialog::spacingHint());
+    topLayout->setMargin(KDialog::marginHint());
 
-    new QLabel("TODO: a major rewrite of this dialog will be done in 4.3", vBox);
+    QLabel* listDescription = new QLabel(i18nc("@label", "Show previews for:"), this);
 
-    KHBox* hBox = new KHBox(vBox);
+    m_previewPluginsList = new QListWidget(this);
+    m_previewPluginsList->setSortingEnabled(true);
+    m_previewPluginsList->setSelectionMode(QAbstractItemView::NoSelection);
+    connect(m_previewPluginsList, SIGNAL(itemClicked(QListWidgetItem*)),
+            this, SIGNAL(changed()));
+
+    KHBox* hBox = new KHBox(this);
     hBox->setSpacing(KDialog::spacingHint());
 
     new QLabel(i18nc("@label:slider", "Maximum file size:"), hBox);
@@ -78,13 +91,13 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) :
     connect(m_spinBox, SIGNAL(valueChanged(int)),
             this, SIGNAL(changed()));
 
-    m_useFileThumbnails = new QCheckBox(i18nc("@option:check", "Use thumbnails embedded in files"), vBox);
+    m_useFileThumbnails = new QCheckBox(i18nc("@option:check", "Use thumbnails embedded in files"), this);
     connect(m_useFileThumbnails, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
 
-    // Add a dummy widget with no restriction regarding
-    // a vertical resizing. This assures that the dialog layout
-    // is not stretched vertically.
-    new QWidget(vBox);
+    topLayout->addWidget(listDescription);
+    topLayout->addWidget(m_previewPluginsList);
+    topLayout->addWidget(hBox);
+    topLayout->addWidget(m_useFileThumbnails);
 
     loadSettings();
 }
@@ -96,7 +109,19 @@ PreviewsSettingsPage::~PreviewsSettingsPage()
 
 void PreviewsSettingsPage::applySettings()
 {
+    m_enabledPreviewPlugins.clear();
+    const int count = m_previewPluginsList->count();
+    for (int i = 0; i < count; ++i) {
+        const QListWidgetItem* item = m_previewPluginsList->item(i);
+        if (item->checkState() == Qt::Checked) {
+            const QString enabledPlugin = item->data(Qt::UserRole).toString();
+            m_enabledPreviewPlugins.append(enabledPlugin);
+        }
+    }
+
     KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings");
+    globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins);
+
     const int byteCount = m_maxPreviewSize->value() * 1024 * 1024; // value() returns size in MB
     globalConfig.writeEntry("MaximumSize",
                             byteCount,
@@ -113,15 +138,38 @@ void PreviewsSettingsPage::restoreDefaults()
     m_useFileThumbnails->setChecked(USE_THUMBNAILS);
 }
 
-void PreviewsSettingsPage::loadSettings()
+bool PreviewsSettingsPage::event(QEvent* event)
 {
-    const int min = 1;   // MB
-    const int max = 100; // MB
+    if ((event->type() == QEvent::Polish) && !m_initialized) {
+        // load all available plugins for previews
+        const KService::List plugins = KServiceTypeTrader::self()->query("ThumbCreator");
+        foreach (const KSharedPtr<KService> service, plugins) {
+            QListWidgetItem* item = new QListWidgetItem(service->name(),
+                                                        m_previewPluginsList);
+            item->setData(Qt::UserRole, service->desktopEntryName());
+            const bool show = m_enabledPreviewPlugins.contains(service->desktopEntryName());
+            item->setCheckState(show ? Qt::Checked : Qt::Unchecked);
+        }
+
+        m_initialized = true;
+    }
+    return SettingsPageBase::event(event);
+}
 
+void PreviewsSettingsPage::loadSettings()
+{
     KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings");
+    m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", QStringList()
+                                                                << "directorythumbnail"
+                                                                << "imagethumbnail"
+                                                                << "jpegthumbnail");
+
     // TODO: The default value of 5 MB must match with the default value inside
     // kdelibs/kio/kio/previewjob.cpp. Maybe a static getter method in PreviewJob
     // should be added for getting the default size?
+    const int min = 1;   // MB
+    const int max = 100; // MB
+
     const int maxByteSize = globalConfig.readEntry("MaximumSize", MAX_PREVIEW_SIZE * 1024 * 1024);
     int maxMByteSize = maxByteSize / (1024 * 1024);
     if (maxMByteSize < min) {
index 5833a3db574abfe64f58a671a238ef9843f6c78d..bce1f5be5792d0f2cf5a65775a44b668324caacc 100644 (file)
@@ -25,6 +25,7 @@
 
 class DolphinMainWindow;
 class QCheckBox;
+class QListWidget;
 class QRadioButton;
 class QSlider;
 class QSpinBox;
@@ -50,10 +51,16 @@ public:
     /** Restores the settings to default values. */
     virtual void restoreDefaults();
 
+protected:
+    virtual bool event(QEvent* event);
+
 private:
     void loadSettings();
 
 private:
+    bool m_initialized;
+    QListWidget* m_previewPluginsList;
+    QStringList m_enabledPreviewPlugins;
     QSlider* m_maxPreviewSize;
     QSpinBox* m_spinBox;
     QCheckBox* m_useFileThumbnails;