┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/settings
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-03-11 19:02:45 +0100
committerPeter Penz <[email protected]>2012-03-11 19:05:56 +0100
commit2ba5c2cfc2cea534cccd860f94a7198530b83594 (patch)
tree787ee40d007b243a01ba581e778fc67aa179e361 /src/settings
parentd28081338577bfe0104f42c20e167bb0ce70e094 (diff)
First step to introduce dynamic roles
Currently Dolphin is only capable of showing a fixed number of roles (e.g. name, size, date, owner, ...). Dolphin 2.1 should support also other roles like rating, tags, comments or other meta-information of images or audio-files. To support this the sorting-type and additional-type from DolphinView has been replaced by a role-type represented as QByteArray.
Diffstat (limited to 'src/settings')
-rw-r--r--src/settings/additionalinfodialog.cpp28
-rw-r--r--src/settings/additionalinfodialog.h9
-rw-r--r--src/settings/applyviewpropsjob.cpp2
-rw-r--r--src/settings/dolphin_directoryviewpropertysettings.kcfg8
-rw-r--r--src/settings/viewpropertiesdialog.cpp50
5 files changed, 48 insertions, 49 deletions
diff --git a/src/settings/additionalinfodialog.cpp b/src/settings/additionalinfodialog.cpp
index 9b47e928f..6bcee4a1b 100644
--- a/src/settings/additionalinfodialog.cpp
+++ b/src/settings/additionalinfodialog.cpp
@@ -25,12 +25,12 @@
#include <QLabel>
#include <QVBoxLayout>
-#include "views/additionalinfoaccessor.h"
+#include "views/rolesaccessor.h"
AdditionalInfoDialog::AdditionalInfoDialog(QWidget* parent,
- const QList<DolphinView::AdditionalInfo>& infoList) :
+ const QList<QByteArray>& visibleRoles) :
KDialog(parent),
- m_infoList(infoList),
+ m_visibleRoles(visibleRoles),
m_checkBoxes()
{
setCaption(i18nc("@title:window", "Additional Information"));
@@ -48,11 +48,11 @@ AdditionalInfoDialog::AdditionalInfoDialog(QWidget* parent,
layout->addWidget(header);
// Add checkboxes
- const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
- const QList<DolphinView::AdditionalInfo> keys = infoAccessor.keys();
- foreach (DolphinView::AdditionalInfo info, keys) {
- QCheckBox* checkBox = new QCheckBox(infoAccessor.translation(info), mainWidget);
- checkBox->setChecked(infoList.contains(info));
+ const RolesAccessor& rolesAccessor = RolesAccessor::instance();
+ const QList<QByteArray> roles = rolesAccessor.roles();
+ foreach (const QByteArray& role, roles) {
+ QCheckBox* checkBox = new QCheckBox(rolesAccessor.translation(role), mainWidget);
+ checkBox->setChecked(visibleRoles.contains(role));
layout->addWidget(checkBox);
m_checkBoxes.append(checkBox);
}
@@ -75,20 +75,20 @@ AdditionalInfoDialog::~AdditionalInfoDialog()
saveDialogSize(dialogConfig, KConfigBase::Persistent);
}
-QList<DolphinView::AdditionalInfo> AdditionalInfoDialog::informationList() const
+QList<QByteArray> AdditionalInfoDialog::visibleRoles() const
{
- return m_infoList;
+ return m_visibleRoles;
}
void AdditionalInfoDialog::slotOk()
{
- m_infoList.clear();
+ m_visibleRoles.clear();
- const QList<DolphinView::AdditionalInfo> keys = AdditionalInfoAccessor::instance().keys();
+ const QList<QByteArray> roles = RolesAccessor::instance().roles();
int index = 0;
- foreach (DolphinView::AdditionalInfo info, keys) {
+ foreach (const QByteArray& role, roles) {
if (m_checkBoxes[index]->isChecked()) {
- m_infoList.append(info);
+ m_visibleRoles.append(role);
}
++index;
}
diff --git a/src/settings/additionalinfodialog.h b/src/settings/additionalinfodialog.h
index 6f38f617c..9048489cc 100644
--- a/src/settings/additionalinfodialog.h
+++ b/src/settings/additionalinfodialog.h
@@ -20,29 +20,28 @@
#ifndef ADDITIONALINFODIALOG_H
#define ADDITIONALINFODIALOG_H
-#include <views/dolphinview.h>
#include <KDialog>
#include <QList>
class QCheckBox;
/**
- * @brief Dialog for changing the additional information properties of a directory.
+ * @brief Dialog for changing the additional information shown in the view.
*/
class AdditionalInfoDialog : public KDialog
{
Q_OBJECT
public:
- AdditionalInfoDialog(QWidget* parent, const QList<DolphinView::AdditionalInfo>& infoList);
+ AdditionalInfoDialog(QWidget* parent, const QList<QByteArray>& visibleRoles);
virtual ~AdditionalInfoDialog();
- QList<DolphinView::AdditionalInfo> informationList() const;
+ QList<QByteArray> visibleRoles() const;
private slots:
void slotOk();
private:
- QList<DolphinView::AdditionalInfo> m_infoList;
+ QList<QByteArray> m_visibleRoles;
QList<QCheckBox*> m_checkBoxes;
};
diff --git a/src/settings/applyviewpropsjob.cpp b/src/settings/applyviewpropsjob.cpp
index 59f1c0b86..0c00783a0 100644
--- a/src/settings/applyviewpropsjob.cpp
+++ b/src/settings/applyviewpropsjob.cpp
@@ -34,7 +34,7 @@ ApplyViewPropsJob::ApplyViewPropsJob(const KUrl& dir,
m_viewProps->setViewMode(viewProps.viewMode());
m_viewProps->setPreviewsShown(viewProps.previewsShown());
m_viewProps->setHiddenFilesShown(viewProps.hiddenFilesShown());
- m_viewProps->setSorting(viewProps.sorting());
+ m_viewProps->setSortRole(viewProps.sortRole());
m_viewProps->setSortOrder(viewProps.sortOrder());
KIO::ListJob* listJob = KIO::listRecursive(dir, KIO::HideProgressInfo);
diff --git a/src/settings/dolphin_directoryviewpropertysettings.kcfg b/src/settings/dolphin_directoryviewpropertysettings.kcfg
index 64242f8a3..db1a5cdc0 100644
--- a/src/settings/dolphin_directoryviewpropertysettings.kcfg
+++ b/src/settings/dolphin_directoryviewpropertysettings.kcfg
@@ -40,10 +40,10 @@
<default>false</default>
</entry>
- <entry name="Sorting" type="Int" >
+ <entry name="SortRole" type="String" >
<label context="@label">Sort files by</label>
<whatsthis context="@info:whatsthis">This option defines which attribute (name, size, date, etc.) sorting is performed on.</whatsthis>
- <default code="true">DolphinView::SortByName</default>
+ <default code="true">"name"</default>
</entry>
<entry name="SortOrder" type="Int" >
@@ -58,8 +58,8 @@
<default>true</default>
</entry>
- <entry name="AdditionalInfo" type="StringList">
- <label context="@label">Additional information</label>
+ <entry name="VisibleRoles" type="StringList">
+ <label context="@label">Visible roles</label>
<default></default>
</entry>
diff --git a/src/settings/viewpropertiesdialog.cpp b/src/settings/viewpropertiesdialog.cpp
index c07c072d1..420daec8d 100644
--- a/src/settings/viewpropertiesdialog.cpp
+++ b/src/settings/viewpropertiesdialog.cpp
@@ -21,6 +21,7 @@
#include "viewpropertiesdialog.h"
#include "additionalinfodialog.h"
+#include "views/rolesaccessor.h"
#include "views/dolphinview.h"
#include "dolphin_generalsettings.h"
#include "dolphin_iconsmodesettings.h"
@@ -105,18 +106,12 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) :
m_sortOrder->addItem(i18nc("@item:inlistbox Sort", "Ascending"));
m_sortOrder->addItem(i18nc("@item:inlistbox Sort", "Descending"));
- // TODO: Provide a kind of SortingInfoAccessor similar to AdditionalInfoAccessor
- // to assure that adding a sort-role requires to change only one file
m_sorting = new KComboBox(sortingBox);
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Name"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Size"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Date"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Permissions"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Owner"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Group"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Type"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Link Destination"));
- m_sorting->addItem(i18nc("@item:inlistbox Sort", "By Path"));
+ const RolesAccessor& rolesAccessor = RolesAccessor::instance();
+ const QList<QByteArray> roles = rolesAccessor.roles();
+ foreach (const QByteArray& role, roles) {
+ m_sorting->addItem(rolesAccessor.translation(role), role);
+ }
m_sortFoldersFirst = new QCheckBox(i18nc("@option:check", "Show folders first"));
m_previewsShown = new QCheckBox(i18nc("@option:check", "Show preview"));
@@ -249,7 +244,8 @@ void ViewPropertiesDialog::slotViewModeChanged(int index)
void ViewPropertiesDialog::slotSortingChanged(int index)
{
- m_viewProps->setSorting(static_cast<DolphinView::Sorting>(index));
+ const QByteArray role = m_sorting->itemData(index).toByteArray();
+ m_viewProps->setSortRole(role);
markAsDirty(true);
}
@@ -295,22 +291,22 @@ void ViewPropertiesDialog::markAsDirty(bool isDirty)
void ViewPropertiesDialog::configureAdditionalInfo()
{
- QList<DolphinView::AdditionalInfo> infoList = m_viewProps->additionalInfoList();
- const bool useDefaultInfo = (m_viewProps->viewMode() == DolphinView::DetailsView) &&
- (infoList.isEmpty() || infoList.contains(DolphinView::NoInfo));
- if (useDefaultInfo) {
+ QList<QByteArray> visibleRoles = m_viewProps->visibleRoles();
+ const bool useDefaultRoles = (m_viewProps->viewMode() == DolphinView::DetailsView) && visibleRoles.isEmpty();
+ if (useDefaultRoles) {
// Using the details view without any additional information (-> additional column)
// makes no sense and leads to a usability problem as no viewport area is available
// anymore. Hence as fallback provide at least a size and date column.
- infoList.clear();
- infoList.append(DolphinView::SizeInfo);
- infoList.append(DolphinView::DateInfo);
- m_viewProps->setAdditionalInfoList(infoList);
+ visibleRoles.clear();
+ visibleRoles.append("name");
+ visibleRoles.append("size");
+ visibleRoles.append("date");
+ m_viewProps->setVisibleRoles(visibleRoles);
}
- QPointer<AdditionalInfoDialog> dialog = new AdditionalInfoDialog(this, infoList);
+ QPointer<AdditionalInfoDialog> dialog = new AdditionalInfoDialog(this, visibleRoles);
if (dialog->exec() == QDialog::Accepted) {
- m_viewProps->setAdditionalInfoList(dialog->informationList());
+ m_viewProps->setVisibleRoles(dialog->visibleRoles());
markAsDirty(true);
}
delete dialog;
@@ -370,11 +366,11 @@ void ViewPropertiesDialog::applyViewProperties()
}
m_dolphinView->setMode(m_viewProps->viewMode());
- m_dolphinView->setSorting(m_viewProps->sorting());
+ m_dolphinView->setSortRole(m_viewProps->sortRole());
m_dolphinView->setSortOrder(m_viewProps->sortOrder());
m_dolphinView->setSortFoldersFirst(m_viewProps->sortFoldersFirst());
m_dolphinView->setGroupedSorting(m_viewProps->groupedSorting());
- m_dolphinView->setAdditionalInfoList(m_viewProps->additionalInfoList());
+ m_dolphinView->setVisibleRoles(m_viewProps->visibleRoles());
m_dolphinView->setPreviewsShown(m_viewProps->previewsShown());
m_dolphinView->setHiddenFilesShown(m_viewProps->hiddenFilesShown());
@@ -396,7 +392,11 @@ void ViewPropertiesDialog::loadSettings()
// Load sort order and sorting
const int sortOrderIndex = (m_viewProps->sortOrder() == Qt::AscendingOrder) ? 0 : 1;
m_sortOrder->setCurrentIndex(sortOrderIndex);
- m_sorting->setCurrentIndex(m_viewProps->sorting());
+
+ const QList<QByteArray> roles = RolesAccessor::instance().roles();
+ const int sortRoleIndex = roles.indexOf(m_viewProps->sortRole());
+ m_sorting->setCurrentIndex(sortRoleIndex);
+
m_sortFoldersFirst->setChecked(m_viewProps->sortFoldersFirst());
// Load show preview, show in groups and show hidden files settings