Fix font settings issue

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
This commit is contained in:
Peter Penz 2011-12-08 23:08:01 +01:00
parent 2827b96d98
commit a237e085fc
10 changed files with 327 additions and 131 deletions

View file

@ -43,6 +43,7 @@ set(dolphinprivate_LIB_SRCS
kitemviews/kpixmapmodifier.cpp
settings/additionalinfodialog.cpp
settings/applyviewpropsjob.cpp
settings/viewmodes/viewmodesettings.cpp
settings/viewpropertiesdialog.cpp
settings/viewpropsprogressinfo.cpp
views/additionalinfoaccessor.cpp
@ -144,6 +145,7 @@ set(dolphin_SRCS
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
@ -204,6 +206,7 @@ install(TARGETS dolphin ${INSTALL_TARGETS_DEFAULT_ARGS})
set(kcm_dolphinviewmodes_PART_SRCS
settings/kcm/kcmdolphinviewmodes.cpp
settings/viewmodes/dolphinfontrequester.cpp
settings/viewmodes/viewmodesettings.cpp
settings/viewmodes/viewsettingstab.cpp
views/zoomlevelinfo.cpp)

View file

@ -90,10 +90,10 @@ KFileItemListWidget::Layout KFileItemListWidget::layout() const
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;
@ -638,9 +638,9 @@ void KFileItemListWidget::updateIconsLayoutTextCache()
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;

View file

@ -0,0 +1,141 @@
/***************************************************************************
* 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;
}
}

View file

@ -0,0 +1,70 @@
/***************************************************************************
* 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

View file

@ -34,41 +34,6 @@
#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),
@ -146,26 +111,27 @@ ViewSettingsTab::~ViewSettingsTab()
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()
@ -185,31 +151,41 @@ 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"

View file

@ -21,6 +21,7 @@
#define VIEWSETTINGSTAB_H
#include <QWidget>
#include <settings/viewmodes/viewmodesettings.h>
class DolphinFontRequester;
class KComboBox;
@ -53,6 +54,8 @@ signals:
private:
void loadSettings();
ViewModeSettings::ViewMode viewMode() const;
private:
Mode m_mode;
QSlider* m_defaultSizeSlider;

View file

@ -52,6 +52,7 @@ DolphinItemListContainer::DolphinItemListContainer(KDirLister* dirLister,
m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
controller()->setView(m_fileItemListView);
updateFont();
updateGridSize();
}
@ -104,23 +105,13 @@ void DolphinItemListContainer::setZoomLevel(int level)
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();
@ -158,6 +149,7 @@ void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout)
break;
}
updateFont();
updateGridSize();
endTransaction();
}
@ -177,26 +169,21 @@ void DolphinItemListContainer::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();
@ -236,4 +223,35 @@ void DolphinItemListContainer::updateGridSize()
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"

View file

@ -22,6 +22,7 @@
#include <kitemviews/kfileitemlistview.h>
#include <kitemviews/kitemlistcontainer.h>
#include <settings/viewmodes/viewmodesettings.h>
#include <libdolphin_export.h>
@ -63,8 +64,16 @@ public:
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;

View file

@ -445,15 +445,9 @@ void DolphinView::stopLoading()
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)
@ -1244,16 +1238,6 @@ void DolphinView::pasteToUrl(const KUrl& url)
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;

View file

@ -694,14 +694,6 @@ private:
*/
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