The font settings have been ignored currently because of the transition to the new view-engine.
The patch is based on the work of Janardhan Reddy and has been extended by the helper class ViewModeSettings.
BUG: 288395
FIXED-IN: 4.8.0
kitemviews/kpixmapmodifier.cpp
settings/additionalinfodialog.cpp
settings/applyviewpropsjob.cpp
+ settings/viewmodes/viewmodesettings.cpp
settings/viewpropertiesdialog.cpp
settings/viewpropsprogressinfo.cpp
views/additionalinfoaccessor.cpp
settings/trash/trashsettingspage.cpp
settings/viewmodes/dolphinfontrequester.cpp
settings/viewmodes/viewsettingspage.cpp
+ settings/viewmodes/viewmodesettings.cpp
settings/viewmodes/viewsettingstab.cpp
statusbar/dolphinstatusbar.cpp
statusbar/statusbarspaceinfo.cpp
set(kcm_dolphinviewmodes_PART_SRCS
settings/kcm/kcmdolphinviewmodes.cpp
settings/viewmodes/dolphinfontrequester.cpp
+ settings/viewmodes/viewmodesettings.cpp
settings/viewmodes/viewsettingstab.cpp
views/zoomlevelinfo.cpp)
void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
- KItemListWidget::paint(painter, option, widget);
-
const_cast<KFileItemListWidget*>(this)->triggerCacheRefreshing();
+ KItemListWidget::paint(painter, option, widget);
+
// Draw expansion toggle '>' or 'V'
if (m_isDir && !m_expansionArea.isEmpty()) {
QStyleOption arrowOption;
m_text[Name].setTextWidth(maxWidth);
m_textPos[Name] = QPointF(option.margin, widgetHeight - textLinesCount * fontHeight - option.margin);
m_textRect = QRectF(option.margin + (maxWidth - requiredWidthForName) / 2,
- m_textPos[Name].y(),
- requiredWidthForName,
- m_text[Name].size().height());
+ m_textPos[Name].y(),
+ requiredWidthForName,
+ textLinesCountForName * fontHeight);
// Calculate the position for each additional information
qreal y = m_textPos[Name].y() + textLinesCountForName * fontHeight;
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
+ * *
+ * 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, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "viewmodesettings.h"
+
+#include "dolphin_iconsmodesettings.h"
+#include "dolphin_detailsmodesettings.h"
+#include "dolphin_compactmodesettings.h"
+
+#define VIEWMODESETTINGS_SET_VALUE(mode, setValue, value) \
+ switch (mode) { \
+ case ViewModeSettings::IconsMode: IconsModeSettings::setValue(value); break; \
+ case ViewModeSettings::CompactMode: CompactModeSettings::setValue(value); break; \
+ case ViewModeSettings::DetailsMode: DetailsModeSettings::setValue(value); break; \
+ default: Q_ASSERT(false); break; \
+ }
+
+#define VIEWMODESETTINGS_RETURN_VALUE(mode, getValue, type) \
+ type value; \
+ switch (m_mode) { \
+ case IconsMode: value = IconsModeSettings::getValue(); break; \
+ case CompactMode: value = CompactModeSettings::getValue(); break; \
+ case DetailsMode: value = DetailsModeSettings::getValue(); break; \
+ default: Q_ASSERT(false); break; \
+ } \
+ return value
+
+ViewModeSettings::ViewModeSettings(ViewMode mode) :
+ m_mode(mode)
+{
+}
+
+ViewModeSettings::~ViewModeSettings()
+{
+}
+
+void ViewModeSettings::setIconSize(int size) const
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setIconSize, size);
+}
+
+int ViewModeSettings::iconSize() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, iconSize, int);
+}
+
+void ViewModeSettings::setPreviewSize(int size) const
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setPreviewSize, size);
+}
+
+int ViewModeSettings::previewSize() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, previewSize, int);
+}
+
+void ViewModeSettings::setUseSystemFont(bool flag)
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setUseSystemFont, flag);
+}
+
+bool ViewModeSettings::useSystemFont() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, useSystemFont, bool);
+}
+
+void ViewModeSettings::setFontFamily(const QString& fontFamily)
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setFontFamily, fontFamily);
+}
+
+QString ViewModeSettings::fontFamily() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontFamily, QString);
+}
+
+void ViewModeSettings::setFontSize(qreal fontSize)
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setFontSize, fontSize);
+}
+
+qreal ViewModeSettings::fontSize() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontSize, qreal);
+}
+
+void ViewModeSettings::setItalicFont(bool italic)
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setItalicFont, italic);
+}
+
+bool ViewModeSettings::italicFont() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, italicFont, bool);
+}
+
+void ViewModeSettings::setFontWeight(int fontWeight)
+{
+ VIEWMODESETTINGS_SET_VALUE(m_mode, setFontWeight, fontWeight);
+}
+
+int ViewModeSettings::fontWeight() const
+{
+ VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontWeight, int);
+}
+
+void ViewModeSettings::readConfig()
+{
+ switch (m_mode) {
+ case ViewModeSettings::IconsMode: IconsModeSettings::self()->readConfig(); break;
+ case ViewModeSettings::CompactMode: CompactModeSettings::self()->readConfig(); break;
+ case ViewModeSettings::DetailsMode: DetailsModeSettings::self()->readConfig(); break;
+ default: Q_ASSERT(false); break;
+ }
+}
+
+void ViewModeSettings::writeConfig()
+{
+ switch (m_mode) {
+ case ViewModeSettings::IconsMode: IconsModeSettings::self()->writeConfig(); break;
+ case ViewModeSettings::CompactMode: CompactModeSettings::self()->writeConfig(); break;
+ case ViewModeSettings::DetailsMode: DetailsModeSettings::self()->writeConfig(); break;
+ default: Q_ASSERT(false); break;
+ }
+}
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
+ * *
+ * 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, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#ifndef VIEWMODESETTINGS_H
+#define VIEWMODESETTINGS_H
+
+#include <QString>
+
+/**
+ * @short Helper class for accessing similar properties of IconsModeSettings,
+ * CompactModeSettings and DetailsModeSettings.
+ */
+class ViewModeSettings
+{
+public:
+ enum ViewMode
+ {
+ IconsMode,
+ CompactMode,
+ DetailsMode
+ };
+
+ ViewModeSettings(ViewMode mode);
+ virtual ~ViewModeSettings();
+
+ void setIconSize(int size) const;
+ int iconSize() const;
+
+ void setPreviewSize(int size) const;
+ int previewSize() const;
+
+ void setUseSystemFont(bool flag);
+ bool useSystemFont() const;
+
+ void setFontFamily(const QString& fontFamily);
+ QString fontFamily() const;
+
+ void setFontSize(qreal fontSize);
+ qreal fontSize() const;
+
+ void setItalicFont(bool italic);
+ bool italicFont() const;
+
+ void setFontWeight(int fontWeight);
+ int fontWeight() const;
+
+ void readConfig();
+ void writeConfig();
+
+private:
+ ViewMode m_mode;
+};
+
+#endif
#include <views/zoomlevelinfo.h>
-template<class T>
-void apply(int iconSizeValue, int previewSizeValue, const QFont& font, bool useSystemFont)
-{
- const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(iconSizeValue);
- const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(previewSizeValue);
- T::setIconSize(iconSize);
- T::setPreviewSize(previewSize);
-
- T::setUseSystemFont(useSystemFont);
- T::setFontFamily(font.family());
- T::setFontSize(font.pointSizeF());
- T::setItalicFont(font.italic());
- T::setFontWeight(font.weight());
-
- T::self()->writeConfig();
-}
-
-template<class T>
-void load(int* iconSizeValue, int* previewSizeValue, QFont* font, bool* useSystemFont)
-{
- const QSize iconSize(T::iconSize(), T::iconSize());
- *iconSizeValue = ZoomLevelInfo::zoomLevelForIconSize(iconSize);
-
- const QSize previewSize(T::previewSize(), T::previewSize());
- *previewSizeValue = ZoomLevelInfo::zoomLevelForIconSize(previewSize);
-
- *useSystemFont = T::useSystemFont();
-
- *font = QFont(T::fontFamily(), qRound(T::fontSize()));
- font->setItalic(T::italicFont());
- font->setWeight(T::fontWeight());
- font->setPointSizeF(T::fontSize());
-}
-
-
ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
QWidget(parent),
m_mode(mode),
void ViewSettingsTab::applySettings()
{
- const int defaultSize = m_defaultSizeSlider->value();
- const int previewSize = m_previewSizeSlider->value();
const QFont font = m_fontRequester->currentFont();
const bool useSystemFont = (m_fontRequester->mode() == DolphinFontRequester::SystemFont);
- switch (m_mode) {
- case IconsMode:
+ if (m_mode == IconsMode) {
IconsModeSettings::setTextWidthIndex(m_textWidthBox->currentIndex());
- apply<IconsModeSettings>(defaultSize, previewSize, font, useSystemFont);
- break;
- case CompactMode:
- apply<CompactModeSettings>(defaultSize, previewSize, font, useSystemFont);
- break;
- case DetailsMode:
- apply<DetailsModeSettings>(defaultSize, previewSize, font, useSystemFont);
- break;
- default:
- Q_ASSERT(false);
- break;
}
+
+ ViewModeSettings settings(viewMode());
+
+ const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_defaultSizeSlider->value());
+ const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(m_previewSizeSlider->value());
+ settings.setIconSize(iconSize);
+ settings.setPreviewSize(previewSize);
+
+ settings.setUseSystemFont(useSystemFont);
+ settings.setFontFamily(font.family());
+ settings.setFontSize(font.pointSizeF());
+ settings.setItalicFont(font.italic());
+ settings.setFontWeight(font.weight());
+
+ settings.writeConfig();
}
void ViewSettingsTab::restoreDefaultSettings()
void ViewSettingsTab::loadSettings()
{
- int iconSizeValue = 0;
- int previewSizeValue = 0;
- QFont font;
- bool useSystemFont = false;
-
- switch (m_mode) {
- case IconsMode:
+ if (m_mode == IconsMode) {
m_textWidthBox->setCurrentIndex(IconsModeSettings::textWidthIndex());
- load<IconsModeSettings>(&iconSizeValue, &previewSizeValue, &font, &useSystemFont);
- break;
- case CompactMode:
- load<CompactModeSettings>(&iconSizeValue, &previewSizeValue, &font, &useSystemFont);
- break;
- case DetailsMode:
- load<DetailsModeSettings>(&iconSizeValue, &previewSizeValue, &font, &useSystemFont);
- break;
- default:
- Q_ASSERT(false);
- break;
}
- m_defaultSizeSlider->setValue(iconSizeValue);
- m_previewSizeSlider->setValue(previewSizeValue);
- m_fontRequester->setMode(useSystemFont ? DolphinFontRequester::SystemFont : DolphinFontRequester::CustomFont);
+ const ViewModeSettings settings(viewMode());
+ const QSize iconSize(settings.iconSize(), settings.iconSize());
+ m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize));
+
+ const QSize previewSize(settings.previewSize(), settings.previewSize());
+ m_previewSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(previewSize));
+
+ m_fontRequester->setMode(settings.useSystemFont()
+ ? DolphinFontRequester::SystemFont
+ : DolphinFontRequester::CustomFont);
+
+ QFont font(settings.fontFamily(), qRound(settings.fontSize()));
+ font.setItalic(settings.italicFont());
+ font.setWeight(settings.fontWeight());
+ font.setPointSizeF(settings.fontSize());
m_fontRequester->setCustomFont(font);
}
+ViewModeSettings::ViewMode ViewSettingsTab::viewMode() const
+{
+ ViewModeSettings::ViewMode mode;
+
+ switch (m_mode) {
+ case ViewSettingsTab::IconsMode: mode = ViewModeSettings::IconsMode; break;
+ case ViewSettingsTab::CompactMode: mode = ViewModeSettings::CompactMode; break;
+ case ViewSettingsTab::DetailsMode: mode = ViewModeSettings::DetailsMode; break;
+ default: Q_ASSERT(false); break;
+ }
+
+ return mode;
+}
+
+
#include "viewsettingstab.moc"
#define VIEWSETTINGSTAB_H
#include <QWidget>
+#include <settings/viewmodes/viewmodesettings.h>
class DolphinFontRequester;
class KComboBox;
private:
void loadSettings();
+ ViewModeSettings::ViewMode viewMode() const;
+
private:
Mode m_mode;
QSlider* m_defaultSizeSlider;
m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
controller()->setView(m_fileItemListView);
+ updateFont();
updateGridSize();
}
m_zoomLevel = level;
+ ViewModeSettings settings(viewMode());
if (previewsShown()) {
const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
-
- switch (itemLayout()) {
- case KFileItemListView::IconsLayout: IconsModeSettings::setPreviewSize(previewSize); break;
- case KFileItemListView::CompactLayout: CompactModeSettings::setPreviewSize(previewSize); break;
- case KFileItemListView::DetailsLayout: DetailsModeSettings::setPreviewSize(previewSize); break;
- default: Q_ASSERT(false); break;
- }
+ settings.setPreviewSize(previewSize);
} else {
const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
- switch (itemLayout()) {
- case KFileItemListView::IconsLayout: IconsModeSettings::setIconSize(iconSize); break;
- case KFileItemListView::CompactLayout: CompactModeSettings::setIconSize(iconSize); break;
- case KFileItemListView::DetailsLayout: DetailsModeSettings::setIconSize(iconSize); break;
- default: Q_ASSERT(false); break;
- }
+ settings.setIconSize(iconSize);
}
updateGridSize();
break;
}
+ updateFont();
updateGridSize();
endTransaction();
}
m_fileItemListView->endTransaction();
}
+void DolphinItemListContainer::refresh()
+{
+ ViewModeSettings settings(viewMode());
+ settings.readConfig();
+
+ updateFont();
+ updateGridSize();
+}
+
void DolphinItemListContainer::updateGridSize()
{
- // Calculate the size of the icon
- int iconSize;
- if (previewsShown()) {
- switch (itemLayout()) {
- case KFileItemListView::IconsLayout: iconSize = IconsModeSettings::previewSize(); break;
- case KFileItemListView::CompactLayout: iconSize = CompactModeSettings::previewSize(); break;
- case KFileItemListView::DetailsLayout: iconSize = DetailsModeSettings::previewSize(); break;
- default: Q_ASSERT(false); break;
- }
- } else {
- switch (itemLayout()) {
- case KFileItemListView::IconsLayout: iconSize = IconsModeSettings::iconSize(); break;
- case KFileItemListView::CompactLayout: iconSize = CompactModeSettings::iconSize(); break;
- case KFileItemListView::DetailsLayout: iconSize = DetailsModeSettings::iconSize(); break;
- default: Q_ASSERT(false); break;
- }
- }
+ const ViewModeSettings settings(viewMode());
+ // Calculate the size of the icon
+ const int iconSize = previewsShown() ? settings.previewSize() : settings.iconSize();
m_zoomLevel = ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize, iconSize));
KItemListStyleOption styleOption = m_fileItemListView->styleOption();
m_fileItemListView->setItemSize(QSizeF(itemWidth, itemHeight));
}
+void DolphinItemListContainer::updateFont()
+{
+ KItemListStyleOption styleOption = m_fileItemListView->styleOption();
+
+ const ViewModeSettings settings(viewMode());
+
+ QFont font(settings.fontFamily(), qRound(settings.fontSize()));
+ font.setItalic(settings.italicFont());
+ font.setWeight(settings.fontWeight());
+ font.setPointSizeF(settings.fontSize());
+
+ styleOption.font = font;
+ styleOption.fontMetrics = QFontMetrics(font);
+
+ m_fileItemListView->setStyleOption(styleOption);
+}
+
+ViewModeSettings::ViewMode DolphinItemListContainer::viewMode() const
+{
+ ViewModeSettings::ViewMode mode;
+
+ switch (itemLayout()) {
+ case KFileItemListView::IconsLayout: mode = ViewModeSettings::IconsMode; break;
+ case KFileItemListView::CompactLayout: mode = ViewModeSettings::CompactMode; break;
+ case KFileItemListView::DetailsLayout: mode = ViewModeSettings::DetailsMode; break;
+ default: Q_ASSERT(false); break;
+ }
+
+ return mode;
+}
+
#include "dolphinitemlistcontainer.moc"
#include <kitemviews/kfileitemlistview.h>
#include <kitemviews/kitemlistcontainer.h>
+#include <settings/viewmodes/viewmodesettings.h>
#include <libdolphin_export.h>
void beginTransaction();
void endTransaction();
+ /**
+ * Refreshs the view by reapplying the (changed) viewmode settings.
+ */
+ void refresh();
+
private:
void updateGridSize();
+ void updateFont();
+
+ ViewModeSettings::ViewMode viewMode() const;
private:
int m_zoomLevel;
void DolphinView::refresh()
{
- const bool oldActivationState = m_active;
- const int oldZoomLevel = zoomLevel();
- m_active = true;
-
+ m_container->refresh();
applyViewProperties();
reload();
-
- setActive(oldActivationState);
- updateZoomLevel(oldZoomLevel);
}
void DolphinView::setNameFilter(const QString& nameFilter)
KonqOperations::doPaste(this, url);
}
-void DolphinView::updateZoomLevel(int oldZoomLevel)
-{
- Q_UNUSED(oldZoomLevel);
- /* const int newZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(m_viewAccessor.itemView()->iconSize());
- if (oldZoomLevel != newZoomLevel) {
- m_viewModeController->setZoomLevel(newZoomLevel);
- emit zoomLevelChanged(newZoomLevel);
- }*/
-}
-
KUrl::List DolphinView::simplifiedSelectedUrls() const
{
KUrl::List urls;
*/
void pasteToUrl(const KUrl& url);
- /**
- * Checks whether the current item view has the same zoom level
- * as \a oldZoomLevel. If this is not the case, the zoom level
- * of the controller is updated and a zoomLevelChanged() signal
- * is emitted.
- */
- void updateZoomLevel(int oldZoomLevel);
-
/**
* Returns a list of URLs for all selected items. The list is
* simplified, so that when the URLs are part of different tree