#include "dolphinitemlistcontainer.h"
+#include "dolphin_generalsettings.h"
#include "dolphin_iconsmodesettings.h"
#include "dolphin_detailsmodesettings.h"
#include "dolphin_compactmodesettings.h"
#include <kitemviews/kitemlistcontroller.h>
#include <kitemviews/kitemliststyleoption.h>
-#include <KDirLister>
#include <KGlobalSettings>
#include <views/viewmodecontroller.h>
#include "zoomlevelinfo.h"
-DolphinItemListContainer::DolphinItemListContainer(KDirLister* dirLister,
- QWidget* parent) :
+DolphinItemListContainer::DolphinItemListContainer(QWidget* parent) :
KItemListContainer(parent),
m_zoomLevel(0),
m_fileItemListView(0)
{
- controller()->setModel(new KFileItemModel(dirLister, this));
+ controller()->setModel(new KFileItemModel(this));
m_fileItemListView = new KFileItemListView();
- m_fileItemListView->setWidgetCreator(new KItemListWidgetCreator<DolphinFileItemListWidget>());
controller()->setView(m_fileItemListView);
- KItemListStyleOption option;
-
- // TODO:
- option.font = parent->font();
- option.fontMetrics = QFontMetrics(parent->font());
+ m_fileItemListView->setWidgetCreator(new KItemListWidgetCreator<DolphinFileItemListWidget>());
+ m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+ m_fileItemListView->setEnlargeSmallPreviews(GeneralSettings::enlargeSmallPreviews());
+ updateAutoActivationDelay();
+ updateFont();
updateGridSize();
-/*
- connect(this, SIGNAL(clicked(QModelIndex)),
- dolphinViewController, SLOT(requestTab(QModelIndex)));*/
-/*
- connect(this, SIGNAL(entered(QModelIndex)),
- dolphinViewController, SLOT(emitItemEntered(QModelIndex)));
- connect(this, SIGNAL(viewportEntered()),
- dolphinViewController, SLOT(emitViewportEntered()));*/
-
- // apply the icons mode settings to the widget
- //const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
- //Q_ASSERT(settings);
-
- /*if (settings->useSystemFont()) {
- m_font = KGlobalSettings::generalFont();
- } else {
- m_font = QFont(settings->fontFamily(),
- qRound(settings->fontSize()),
- settings->fontWeight(),
- settings->italicFont());
- m_font.setPointSizeF(settings->fontSize());
- }
-
- setWordWrap(settings->numberOfTextlines() > 1);
-
- if (settings->arrangement() == QListView::TopToBottom) {
- setFlow(QListView::LeftToRight);
- m_decorationPosition = QStyleOptionViewItem::Top;
- m_displayAlignment = Qt::AlignHCenter;
- } else {
- setFlow(QListView::TopToBottom);
- m_decorationPosition = QStyleOptionViewItem::Left;
- m_displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
- }
-
- connect(m_categoryDrawer, SIGNAL(actionRequested(int,QModelIndex)), this, SLOT(categoryDrawerActionRequested(int,QModelIndex)));
- setCategoryDrawer(m_categoryDrawer);
-
- connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)),
- this, SLOT(slotGlobalSettingsChanged(int)));*/
-
- //updateGridSize(dolphinView->showPreview(), 0);
- /*m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController);*/
}
DolphinItemListContainer::~DolphinItemListContainer()
{
- IconsModeSettings::self()->writeConfig();
- CompactModeSettings::self()->writeConfig();
- DetailsModeSettings::self()->writeConfig();
+ writeSettings();
- KItemListView* view = controller()->view();
controller()->setView(0);
- delete view;
+ delete m_fileItemListView;
+ m_fileItemListView = 0;
}
void DolphinItemListContainer::setPreviewsShown(bool show)
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();
switch (layout) {
case KFileItemListView::IconsLayout:
+ m_fileItemListView->setScrollOrientation(Qt::Vertical);
+ m_fileItemListView->setHeaderVisible(false);
+ m_fileItemListView->setSupportsItemExpanding(false);
+ break;
case KFileItemListView::DetailsLayout:
m_fileItemListView->setScrollOrientation(Qt::Vertical);
+ m_fileItemListView->setHeaderVisible(true);
+ m_fileItemListView->setSupportsItemExpanding(DetailsModeSettings::expandableFolders());
+
break;
case KFileItemListView::CompactLayout:
m_fileItemListView->setScrollOrientation(Qt::Horizontal);
+ m_fileItemListView->setHeaderVisible(false);
+ m_fileItemListView->setSupportsItemExpanding(false);
break;
default:
Q_ASSERT(false);
break;
}
+ updateFont();
updateGridSize();
endTransaction();
}
m_fileItemListView->endTransaction();
}
+void DolphinItemListContainer::readSettings()
+{
+ ViewModeSettings settings(viewMode());
+ settings.readConfig();
+
+ beginTransaction();
+
+ m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+
+ const bool expandableFolders = (itemLayout() && KFileItemListView::DetailsLayout) &&
+ DetailsModeSettings::expandableFolders();
+ m_fileItemListView->setSupportsItemExpanding(expandableFolders);
+
+ updateAutoActivationDelay();
+ updateFont();
+ updateGridSize();
+
+ const KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings");
+ const QStringList plugins = globalConfig.readEntry("Plugins", QStringList()
+ << "directorythumbnail"
+ << "imagethumbnail"
+ << "jpegthumbnail");
+ m_fileItemListView->setEnabledPlugins(plugins);
+
+ endTransaction();
+}
+
+void DolphinItemListContainer::writeSettings()
+{
+ IconsModeSettings::self()->writeConfig();
+ CompactModeSettings::self()->writeConfig();
+ DetailsModeSettings::self()->writeConfig();
+}
+
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();
- const int innerMargin = (iconSize >= KIconLoader::SizeSmallMedium) ? 4 : 2;
+ const int padding = 2;
+ int horizontalMargin = 0;
+ int verticalMargin = 0;
// Calculate the item-width and item-height
int itemWidth;
int itemHeight;
+ QSize maxTextSize;
+
switch (itemLayout()) {
case KFileItemListView::IconsLayout: {
- const int minItemWidth = 64;
- itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64; // TODO:
- if (itemWidth < iconSize + innerMargin * 2) {
- itemWidth = iconSize + innerMargin * 2;
+ const int minItemWidth = 48;
+ itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64;
+
+ if (previewsShown()) {
+ // Optimize the width for previews with a 3:2 aspect ratio instead
+ // of a 1:1 ratio to avoid wasting too much vertical space when
+ // photos.
+ const int minWidth = iconSize * 3 / 2;
+ itemWidth = qMax(itemWidth, minWidth);
+ }
+
+ if (itemWidth < iconSize + padding * 2) {
+ itemWidth = iconSize + padding * 2;
+ }
+
+ itemHeight = padding * 3 + iconSize + styleOption.fontMetrics.lineSpacing();
+ if (IconsModeSettings::maximumTextLines() > 0) {
+ // A restriction is given for the maximum number of textlines (0 means
+ // having no restriction)
+ const int additionalInfoCount = m_fileItemListView->visibleRoles().count() - 1;
+ const int maxAdditionalLines = additionalInfoCount + IconsModeSettings::maximumTextLines();
+ maxTextSize.rheight() = styleOption.fontMetrics.lineSpacing() * maxAdditionalLines;
}
- itemHeight = innerMargin * 2 + iconSize + styleOption.fontMetrics.height();
+
+ horizontalMargin = 4;
+ verticalMargin = 8;
break;
}
case KFileItemListView::CompactLayout: {
- itemWidth = innerMargin * 2;
+ itemWidth = padding * 4 + iconSize + styleOption.fontMetrics.height() * 5;
const int textLinesCount = m_fileItemListView->visibleRoles().count();
- itemHeight = innerMargin * 2 + qMax(iconSize, textLinesCount * styleOption.fontMetrics.height());
+ itemHeight = padding * 2 + qMax(iconSize, textLinesCount * styleOption.fontMetrics.lineSpacing());
+
+ if (CompactModeSettings::maximumTextWidthIndex() > 0) {
+ // A restriction is given for the maximum width of the text (0 means
+ // having no restriction)
+ maxTextSize.rwidth() = styleOption.fontMetrics.height() * 10 *
+ CompactModeSettings::maximumTextWidthIndex();
+ }
+
+ horizontalMargin = 8;
break;
}
case KFileItemListView::DetailsLayout: {
itemWidth = -1;
- itemHeight = innerMargin * 2 + qMax(iconSize, styleOption.fontMetrics.height());
+ itemHeight = padding * 2 + qMax(iconSize, styleOption.fontMetrics.lineSpacing());
break;
}
- default: Q_ASSERT(false); break;
+ default:
+ itemWidth = -1;
+ itemHeight = -1;
+ Q_ASSERT(false);
+ break;
}
// Apply the calculated values
- styleOption.margin = innerMargin;
+ styleOption.padding = padding;
+ styleOption.horizontalMargin = horizontalMargin;
+ styleOption.verticalMargin = verticalMargin;
styleOption.iconSize = iconSize;
+ styleOption.maxTextSize = maxTextSize;
+ m_fileItemListView->beginTransaction();
m_fileItemListView->setStyleOption(styleOption);
m_fileItemListView->setItemSize(QSizeF(itemWidth, itemHeight));
+ m_fileItemListView->endTransaction();
+}
+
+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);
+}
+
+void DolphinItemListContainer::updateAutoActivationDelay()
+{
+ const int delay = GeneralSettings::autoExpandFolders() ? 750 : -1;
+ controller()->setAutoActivationDelay(delay);
+}
+
+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: mode = ViewModeSettings::IconsMode;
+ Q_ASSERT(false);
+ break;
+ }
+
+ return mode;
}
#include "dolphinitemlistcontainer.moc"