]>
cloud.milkyroute.net Git - dolphin.git/blob - src/viewproperties.cpp
1 /***************************************************************************
2 * Copyright (C) 2006 by Peter Penz (<peter.penz@gmx.at>) *
3 * Copyright (C) 2006 by Aaron J. Seigo (<aseigo@kde.org>) *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
19 ***************************************************************************/
21 #include "viewproperties.h"
23 #include "dolphinsettings.h"
24 #include "dolphin_directoryviewpropertysettings.h"
25 #include "dolphin_generalsettings.h"
27 #include <kcomponentdata.h>
29 #include <kstandarddirs.h>
33 #include <nepomuk/resourcemanager.h>
40 bool ViewProperties::m_nepomukSupport
= false;
42 #define FILE_NAME "/.directory"
44 ViewProperties::ViewProperties(const KUrl
& url
) :
45 m_changedProps(false),
50 static bool checkedNepomukSupport
= false;
51 if (!checkedNepomukSupport
) {
52 m_nepomukSupport
= !Nepomuk::ResourceManager::instance()->init();
53 checkedNepomukSupport
= true;
59 m_filepath
= cleanUrl
.path();
61 if ((m_filepath
.length() < 1) || (m_filepath
.at(0) != QChar('/'))) {
62 m_node
= new ViewPropertySettings();
66 // We try and save it to a file in the directory being viewed.
67 // If the directory is not writable by the user or the directory is not local,
68 // we store the properties information in a local file.
69 GeneralSettings
* settings
= DolphinSettings::instance().generalSettings();
70 const bool useGlobalViewProps
= settings
->globalViewProps();
71 if (useGlobalViewProps
) {
72 m_filepath
= destinationDir("global");
73 } else if (cleanUrl
.isLocalFile()) {
74 const QFileInfo
info(m_filepath
);
75 if (!info
.isWritable()) {
76 m_filepath
= destinationDir("local") + m_filepath
;
79 m_filepath
= destinationDir("remote") + m_filepath
;
82 const QString
file(m_filepath
+ FILE_NAME
);
83 m_node
= new ViewPropertySettings(KSharedConfig::openConfig(file
));
85 const bool useDefaultProps
= !useGlobalViewProps
&&
86 (!QFileInfo(file
).exists() ||
87 (m_node
->timestamp() < settings
->viewPropsTimestamp()));
88 if (useDefaultProps
) {
89 // If the .directory file does not exist or the timestamp is too old,
90 // use the values from the global .directory file instead, which acts
91 // as default view for new folders in this case.
92 settings
->setGlobalViewProps(true);
94 ViewProperties
defaultProps(url
);
95 setDirProperties(defaultProps
);
97 settings
->setGlobalViewProps(false);
98 m_changedProps
= false;
102 ViewProperties::~ViewProperties()
104 if (m_changedProps
&& m_autoSave
) {
112 void ViewProperties::setViewMode(DolphinView::Mode mode
)
114 if (m_node
->viewMode() != mode
) {
115 m_node
->setViewMode(mode
);
120 DolphinView::Mode
ViewProperties::viewMode() const
122 return static_cast<DolphinView::Mode
>(m_node
->viewMode());
125 void ViewProperties::setShowPreview(bool show
)
127 if (m_node
->showPreview() != show
) {
128 m_node
->setShowPreview(show
);
133 bool ViewProperties::showPreview() const
135 return m_node
->showPreview();
139 void ViewProperties::setShowHiddenFiles(bool show
)
141 if (m_node
->showHiddenFiles() != show
) {
142 m_node
->setShowHiddenFiles(show
);
147 void ViewProperties::setCategorizedSorting(bool categorized
)
149 if (m_node
->categorizedSorting() != categorized
) {
150 m_node
->setCategorizedSorting(categorized
);
155 bool ViewProperties::categorizedSorting() const
157 return m_node
->categorizedSorting();
161 bool ViewProperties::showHiddenFiles() const
163 return m_node
->showHiddenFiles();
166 void ViewProperties::setSorting(DolphinView::Sorting sorting
)
168 if (m_node
->sorting() != sorting
) {
169 m_node
->setSorting(sorting
);
174 DolphinView::Sorting
ViewProperties::sorting() const
176 // If Nepomuk is not available, return SortByName as fallback if SortByRating
177 // or SortByTags is stored.
178 DolphinView::Sorting sorting
= static_cast<DolphinView::Sorting
>(m_node
->sorting());
179 const bool sortByName
= !m_nepomukSupport
&&
180 ((sorting
== DolphinView::SortByRating
) || (sorting
== DolphinView::SortByTags
));
182 sorting
= DolphinView::SortByName
;
187 void ViewProperties::setSortOrder(Qt::SortOrder sortOrder
)
189 if (m_node
->sortOrder() != sortOrder
) {
190 m_node
->setSortOrder(sortOrder
);
195 Qt::SortOrder
ViewProperties::sortOrder() const
197 return static_cast<Qt::SortOrder
>(m_node
->sortOrder());
200 void ViewProperties::setAdditionalInfo(KFileItemDelegate::InformationList list
)
203 foreach (KFileItemDelegate::Information currentInfo
, list
) {
204 switch (currentInfo
) {
205 case KFileItemDelegate::Size
:
206 info
= info
| SizeInfo
;
208 case KFileItemDelegate::ModificationTime
:
209 info
= info
| DateInfo
;
211 case KFileItemDelegate::Permissions
:
212 info
= info
| PermissionsInfo
;
214 case KFileItemDelegate::Owner
:
215 info
= info
| OwnerInfo
;
217 case KFileItemDelegate::OwnerAndGroup
:
218 info
= info
| GroupInfo
;
220 case KFileItemDelegate::FriendlyMimeType
:
221 info
= info
| TypeInfo
;
228 if (m_node
->additionalInfo() != info
) {
229 m_node
->setAdditionalInfo(info
);
234 KFileItemDelegate::InformationList
ViewProperties::additionalInfo() const
236 const int info
= m_node
->additionalInfo();
238 KFileItemDelegate::InformationList list
;
239 if (info
& SizeInfo
) {
240 list
.append(KFileItemDelegate::Size
);
242 if (info
& DateInfo
) {
243 list
.append(KFileItemDelegate::ModificationTime
);
245 if (info
& PermissionsInfo
) {
246 list
.append(KFileItemDelegate::Permissions
);
248 if (info
& OwnerInfo
) {
249 list
.append(KFileItemDelegate::Owner
);
251 if (info
& GroupInfo
) {
252 list
.append(KFileItemDelegate::OwnerAndGroup
);
254 if (info
& TypeInfo
) {
255 list
.append(KFileItemDelegate::FriendlyMimeType
);
262 void ViewProperties::setDirProperties(const ViewProperties
& props
)
264 setViewMode(props
.viewMode());
265 setShowPreview(props
.showPreview());
266 setShowHiddenFiles(props
.showHiddenFiles());
267 setCategorizedSorting(props
.categorizedSorting());
268 setSorting(props
.sorting());
269 setSortOrder(props
.sortOrder());
270 setAdditionalInfo(props
.additionalInfo());
273 void ViewProperties::setAutoSaveEnabled(bool autoSave
)
275 m_autoSave
= autoSave
;
278 bool ViewProperties::isAutoSaveEnabled() const
283 void ViewProperties::updateTimeStamp()
285 m_changedProps
= true;
286 m_node
->setTimestamp(QDateTime::currentDateTime());
289 void ViewProperties::save()
291 KStandardDirs::makeDir(m_filepath
);
292 m_node
->writeConfig();
293 m_changedProps
= false;
296 KUrl
ViewProperties::mirroredDirectory()
298 QString basePath
= KGlobal::mainComponent().componentName();
299 basePath
.append("/view_properties/");
300 return KUrl(KStandardDirs::locateLocal("data", basePath
));
303 QString
ViewProperties::destinationDir(const QString
& subDir
) const
305 QString basePath
= KGlobal::mainComponent().componentName();
306 basePath
.append("/view_properties/").append(subDir
);
307 return KStandardDirs::locateLocal("data", basePath
);