X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/58c95bc8d8cf07cb412e3adc0d677665aeb03557..bd7b4faa4aa54e8bbfeee345449cd9d29c8c16c3:/src/settings/previewssettingspage.cpp diff --git a/src/settings/previewssettingspage.cpp b/src/settings/previewssettingspage.cpp index 76a6e3c4d..c6ad08161 100644 --- a/src/settings/previewssettingspage.cpp +++ b/src/settings/previewssettingspage.cpp @@ -22,65 +22,85 @@ #include "dolphin_generalsettings.h" +#include +#include +#include +#include +#include +#include +#include + #include #include #include +#include #include +#include #include -#include -#include +#include -#include -#include -#include -#include -#include -#include +// default settings +namespace { + const bool UseThumbnails = true; + const int MaxLocalPreviewSize = 5; // 5 MB + const int MaxRemotePreviewSize = 0; // 0 MB +} PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) : SettingsPageBase(parent), - m_maxPreviewSize(0), - m_spinBox(0), - m_useFileThumbnails(0) + m_initialized(false), + m_previewPluginsList(0), + m_enabledPreviewPlugins(), + m_localFileSizeBox(0), + m_remoteFileSizeBox(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); + // Create group box "Show previews for:" + QGroupBox* listBox = new QGroupBox(i18nc("@title:group", "Show previews for"), this); - KHBox* hBox = new KHBox(vBox); - hBox->setSpacing(KDialog::spacingHint()); + m_previewPluginsList = new QListWidget(this); + m_previewPluginsList->setSortingEnabled(true); + m_previewPluginsList->setSelectionMode(QAbstractItemView::NoSelection); + connect(m_previewPluginsList, SIGNAL(itemClicked(QListWidgetItem*)), + this, SIGNAL(changed())); - new QLabel(i18nc("@label:slider", "Maximum file size:"), hBox); - m_maxPreviewSize = new QSlider(Qt::Horizontal, hBox); - m_maxPreviewSize->setPageStep(10); - m_maxPreviewSize->setSingleStep(1); - m_maxPreviewSize->setTickPosition(QSlider::TicksBelow); - m_maxPreviewSize->setRange(1, 100); /* MB */ + QVBoxLayout* listBoxLayout = new QVBoxLayout(listBox); + listBoxLayout->addWidget(m_previewPluginsList); - m_spinBox = new QSpinBox(hBox); - m_spinBox->setSingleStep(1); - m_spinBox->setSuffix(" MB"); - m_spinBox->setRange(1, 100); /* MB */ + // Create group box "Don't create previews for" + QGroupBox* fileSizeBox = new QGroupBox(i18nc("@title:group", "Do not create previews for"), this); - connect(m_maxPreviewSize, SIGNAL(valueChanged(int)), - m_spinBox, SLOT(setValue(int))); - connect(m_spinBox, SIGNAL(valueChanged(int)), - m_maxPreviewSize, SLOT(setValue(int))); + QLabel* localFileSizeLabel = new QLabel(i18nc("@label Don't create previews for: XX MByte", + "Local files above:"), this); - connect(m_maxPreviewSize, SIGNAL(valueChanged(int)), + m_localFileSizeBox = new KIntSpinBox(this); + m_localFileSizeBox->setSingleStep(1); + m_localFileSizeBox->setSuffix(QLatin1String(" MB")); + m_localFileSizeBox->setRange(0, 9999); /* MB */ + connect(m_localFileSizeBox, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); - connect(m_spinBox, SIGNAL(valueChanged(int)), + + QLabel* remoteFileSizeLabel = new QLabel(i18nc("@label Don't create previews for: XX MByte", + "Remote files above:"), this); + + m_remoteFileSizeBox = new KIntSpinBox(this); + m_remoteFileSizeBox->setSingleStep(1); + m_remoteFileSizeBox->setSuffix(QLatin1String(" MB")); + m_remoteFileSizeBox->setRange(0, 9999); /* MB */ + connect(m_remoteFileSizeBox, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); - m_useFileThumbnails = new QCheckBox(i18nc("@option:check", "Use thumbnails embedded in files"), vBox); - connect(m_useFileThumbnails, SIGNAL(toggled(bool)), this, SIGNAL(changed())); + QGridLayout* fileSizeBoxLayout = new QGridLayout(fileSizeBox); + fileSizeBoxLayout->addWidget(localFileSizeLabel, 0, 0, Qt::AlignRight); + fileSizeBoxLayout->addWidget(m_localFileSizeBox, 0, 1); + fileSizeBoxLayout->addWidget(remoteFileSizeLabel, 1, 0, Qt::AlignRight); + fileSizeBoxLayout->addWidget(m_remoteFileSizeBox, 1, 1); - // 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(listBox); + topLayout->addWidget(fileSizeBox); loadSettings(); } @@ -92,47 +112,73 @@ PreviewsSettingsPage::~PreviewsSettingsPage() void PreviewsSettingsPage::applySettings() { - KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings"); - const int byteCount = m_maxPreviewSize->value() * 1024 * 1024; // value() returns size in MB + 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(), QLatin1String("PreviewSettings")); + globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins); + globalConfig.writeEntry("MaximumSize", - byteCount, + m_localFileSizeBox->value() * 1024 * 1024, KConfigBase::Normal | KConfigBase::Global); - globalConfig.writeEntry("UseFileThumbnails", - m_useFileThumbnails->isChecked(), + globalConfig.writeEntry("RemoteMaximumSize", + m_remoteFileSizeBox->value() * 1024 * 1024, KConfigBase::Normal | KConfigBase::Global); globalConfig.sync(); } void PreviewsSettingsPage::restoreDefaults() { - GeneralSettings* settings = DolphinSettings::instance().generalSettings(); - settings->useDefaults(true); - loadSettings(); - settings->useDefaults(false); - m_maxPreviewSize->setValue(5); - m_useFileThumbnails->setChecked(true); + m_localFileSizeBox->setValue(MaxLocalPreviewSize); + m_remoteFileSizeBox->setValue(MaxRemotePreviewSize); } -void PreviewsSettingsPage::loadSettings() +void PreviewsSettingsPage::showEvent(QShowEvent* event) +{ + if (!event->spontaneous() && !m_initialized) { + QMetaObject::invokeMethod(this, "loadPreviewPlugins", Qt::QueuedConnection); + m_initialized = true; + } + SettingsPageBase::showEvent(event); +} + +void PreviewsSettingsPage::loadPreviewPlugins() { - const int min = 1; // MB - const int max = 100; // MB + const KService::List plugins = KServiceTypeTrader::self()->query(QLatin1String("ThumbCreator")); + foreach (const KSharedPtr& 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); + } +} +void PreviewsSettingsPage::loadSettings() +{ KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings"); + m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", QStringList() + << QLatin1String("directorythumbnail") + << QLatin1String("imagethumbnail") + << QLatin1String("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 maxByteSize = globalConfig.readEntry("MaximumSize", 5 * 1024 * 1024 /* 5 MB */); - int maxMByteSize = maxByteSize / (1024 * 1024); - if (maxMByteSize < min) { - maxMByteSize = min; - } else if (maxMByteSize > max) { - maxMByteSize = max; - } - m_maxPreviewSize->setValue(maxMByteSize); + const int maxLocalByteSize = globalConfig.readEntry("MaximumSize", MaxLocalPreviewSize * 1024 * 1024); + const int maxLocalMByteSize = maxLocalByteSize / (1024 * 1024); + m_localFileSizeBox->setValue(maxLocalMByteSize); - const bool useFileThumbnails = globalConfig.readEntry("UseFileThumbnails", true); - m_useFileThumbnails->setChecked(useFileThumbnails); + const int maxRemoteByteSize = globalConfig.readEntry("MaximumSize", MaxRemotePreviewSize * 1024 * 1024); + const int maxRemoteMByteSize = maxRemoteByteSize / (1024 * 1024); + m_localFileSizeBox->setValue(maxRemoteMByteSize); } #include "previewssettingspage.moc"