X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/25349096ae7fe344613d35e5548cac1a91b60fd1..d6488887ecf69d7f192b94de8dce34fae0b7eb76:/src/iconsviewsettingspage.cpp diff --git a/src/iconsviewsettingspage.cpp b/src/iconsviewsettingspage.cpp index 8c02ba0b5..bfe23ffa5 100644 --- a/src/iconsviewsettingspage.cpp +++ b/src/iconsviewsettingspage.cpp @@ -21,28 +21,23 @@ #include "dolphinsettings.h" #include "iconsizedialog.h" -#include "pixmapviewer.h" #include "dolphin_iconsmodesettings.h" -#include -#include -#include -#include -#include -#include - -#include #include +#include +#include #include #include -#include -#include -#include - -#define GRID_SPACING_BASE 8 -#define GRID_SPACING_INC 24 +#include +#include +#include +#include +#include +#include +#include +#include IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent) : @@ -52,8 +47,7 @@ IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, m_previewSize(0), m_iconSizeButton(0), m_textWidthBox(0), - m_fontFamilyBox(0), - m_fontSizeBox(0), + m_fontRequester(0), m_textlinesCountBox(0), m_arrangementBox(0), m_gridSpacingBox(0) @@ -65,110 +59,116 @@ IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, setSpacing(spacing); setMargin(margin); - IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - Q_ASSERT(settings != 0); - m_iconSize = settings->iconSize(); - m_previewSize = settings->previewSize(); - - KHBox* sizesLayout = new KHBox(this); - sizesLayout->setSpacing(spacing); - sizesLayout->setSizePolicy(sizePolicy); - - m_iconSizeButton = new QPushButton(i18n("Change icon and preview size..."), this); + m_iconSizeButton = new QPushButton(i18nc("@action:button", "Change Icon && Preview Size..."), this); connect(m_iconSizeButton, SIGNAL(clicked()), this, SLOT(openIconSizeDialog())); - Q3GroupBox* textGroup = new Q3GroupBox(2, Qt::Horizontal, i18n("Text"), this); + // create 'Text' group for selecting the font, the number of lines + // and the text width + QGroupBox* textGroup = new QGroupBox(i18nc("@title:group", "Text"), this); textGroup->setSizePolicy(sizePolicy); - textGroup->setMargin(margin); - new QLabel(i18n("Font family:"), textGroup); - m_fontFamilyBox = new QFontComboBox(textGroup); - m_fontFamilyBox->setCurrentFont(settings->fontFamily()); + QLabel* fontLabel = new QLabel(i18nc("@label:listbox", "Font:"), textGroup); + m_fontRequester = new KFontRequester(textGroup); - new QLabel(i18n("Font size:"), textGroup); - m_fontSizeBox = new QSpinBox(6, 99, 1, textGroup); - m_fontSizeBox->setValue(settings->fontSize()); + QLabel* textlinesCountLabel = new QLabel(i18nc("@label:textbox", "Number of lines:"), textGroup); + m_textlinesCountBox = new QSpinBox(textGroup); + m_textlinesCountBox->setMinimum(1); + m_textlinesCountBox->setMaximum(5); - new QLabel(i18n("Number of lines:"), textGroup); - m_textlinesCountBox = new QSpinBox(1, 5, 1, textGroup); - m_textlinesCountBox->setValue(settings->numberOfTextlines()); - - new QLabel(i18n("Text width:"), textGroup); + QLabel* textWidthLabel = new QLabel(i18nc("@label:listbox", "Text width:"), textGroup); m_textWidthBox = new QComboBox(textGroup); - m_textWidthBox->addItem(i18n("Small")); - m_textWidthBox->addItem(i18n("Medium")); - m_textWidthBox->addItem(i18n("Large")); - - Q3GroupBox* gridGroup = new Q3GroupBox(2, Qt::Horizontal, i18n("Grid"), this); + m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Small")); + m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Medium")); + m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Large")); + + QGridLayout* textGroupLayout = new QGridLayout(textGroup); + textGroupLayout->addWidget(fontLabel, 0, 0); + textGroupLayout->addWidget(m_fontRequester, 0, 1); + textGroupLayout->addWidget(textlinesCountLabel, 1, 0); + textGroupLayout->addWidget(m_textlinesCountBox, 1, 1); + textGroupLayout->addWidget(textWidthLabel, 2, 0); + textGroupLayout->addWidget(m_textWidthBox, 2, 1); + + // create the 'Grid' group for selecting the arrangement and the grid spacing + QGroupBox* gridGroup = new QGroupBox(i18nc("@title:group", "Grid"), this); gridGroup->setSizePolicy(sizePolicy); - gridGroup->setMargin(margin); - const bool leftToRightArrangement = (settings->arrangement() == QListView::LeftToRight); - new QLabel(i18n("Arrangement:"), gridGroup); + QLabel* arrangementLabel = new QLabel(i18nc("@label:listbox", "Arrangement:"), gridGroup); m_arrangementBox = new QComboBox(gridGroup); - m_arrangementBox->addItem(i18n("Left to right")); - m_arrangementBox->addItem(i18n("Top to bottom")); - m_arrangementBox->setCurrentIndex(leftToRightArrangement ? 0 : 1); + m_arrangementBox->addItem(i18nc("@item:inlistbox Arrangement", "Left to Right")); + m_arrangementBox->addItem(i18nc("@item:inlistbox Arrangement", "Top to Bottom")); - new QLabel(i18n("Grid spacing:"), gridGroup); + QLabel* gridSpacingLabel = new QLabel(i18nc("@label:listbox", "Grid spacing:"), gridGroup); m_gridSpacingBox = new QComboBox(gridGroup); - m_gridSpacingBox->addItem(i18n("Small")); - m_gridSpacingBox->addItem(i18n("Medium")); - m_gridSpacingBox->addItem(i18n("Large")); - m_gridSpacingBox->setCurrentIndex((settings->gridSpacing() - GRID_SPACING_BASE) / GRID_SPACING_INC); + m_gridSpacingBox->addItem(i18nc("@item:inlistbox Grid spacing", "Small")); + m_gridSpacingBox->addItem(i18nc("@item:inlistbox Grid spacing", "Medium")); + m_gridSpacingBox->addItem(i18nc("@item:inlistbox Grid spacing", "Large")); + + QGridLayout* gridGroupLayout = new QGridLayout(gridGroup); + gridGroupLayout->addWidget(arrangementLabel, 0, 0); + gridGroupLayout->addWidget(m_arrangementBox, 0, 1); + gridGroupLayout->addWidget(gridSpacingLabel, 1, 0); + gridGroupLayout->addWidget(m_gridSpacingBox, 1, 1); // Add a dummy widget with no restriction regarding // a vertical resizing. This assures that the dialog layout // is not stretched vertically. new QWidget(this); - adjustTextWidthSelection(); + loadSettings(); } IconsViewSettingsPage::~IconsViewSettingsPage() -{ -} +{} void IconsViewSettingsPage::applySettings() { IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - Q_ASSERT(settings != 0); settings->setIconSize(m_iconSize); settings->setPreviewSize(m_previewSize); - const int fontSize = m_fontSizeBox->value(); + const QFont font = m_fontRequester->font(); + const int fontHeight = QFontMetrics(font).height(); const int arrangement = (m_arrangementBox->currentIndex() == 0) ? QListView::LeftToRight : QListView::TopToBottom; - settings->setArrangement(arrangement); - // TODO: this is just a very rough testing code to calculate the grid - // width and height + const int numberOfTextlines = m_textlinesCountBox->value(); + const int defaultSize = settings->iconSize(); - int gridWidth = defaultSize; - int gridHeight = defaultSize; + int itemWidth = defaultSize; + int itemHeight = defaultSize; const int textSizeIndex = m_textWidthBox->currentIndex(); if (arrangement == QListView::TopToBottom) { - gridWidth += 96 + textSizeIndex * 32; - gridHeight += 64; - } - else { - gridWidth += 128 + textSizeIndex * 64; + itemWidth += TopToBottomBase + textSizeIndex * TopToBottomInc; + itemHeight += fontHeight * numberOfTextlines + 10; + } else { + itemWidth += LeftToRightBase + textSizeIndex * LeftToRightInc; } - settings->setGridWidth(gridWidth); - settings->setGridHeight(gridHeight); + settings->setItemWidth(itemWidth); + settings->setItemHeight(itemHeight); + + settings->setFontFamily(font.family()); + settings->setFontSize(font.pointSize()); + settings->setItalicFont(font.italic()); + settings->setBoldFont(font.bold()); - settings->setFontFamily(m_fontFamilyBox->currentFont().family()); - settings->setFontSize(fontSize); - settings->setNumberOfTextlines(m_textlinesCountBox->value()); + settings->setNumberOfTextlines(numberOfTextlines); - settings->setGridSpacing(GRID_SPACING_BASE + - m_gridSpacingBox->currentIndex() * GRID_SPACING_INC); + settings->setGridSpacing(GridSpacingBase + + m_gridSpacingBox->currentIndex() * GridSpacingInc); +} + +void IconsViewSettingsPage::restoreDefaults() +{ + IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); + settings->setDefaults(); + loadSettings(); } void IconsViewSettingsPage::openIconSizeDialog() @@ -180,13 +180,36 @@ void IconsViewSettingsPage::openIconSizeDialog() } } - - -void IconsViewSettingsPage::adjustTextWidthSelection() +void IconsViewSettingsPage::loadSettings() { IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - Q_ASSERT(settings != 0); - //m_textWidthBox->setCurrentIndex(DolphinSettings::instance().textWidthHint()); + + m_iconSize = settings->iconSize(); + m_previewSize = settings->previewSize(); + + QFont font(settings->fontFamily(), + settings->fontSize()); + font.setItalic(settings->italicFont()); + font.setBold(settings->boldFont()); + m_fontRequester->setFont(font); + + m_textlinesCountBox->setValue(settings->numberOfTextlines()); + + const bool leftToRightArrangement = (settings->arrangement() == QListView::LeftToRight); + int textWidthIndex = 0; + const int remainingWidth = settings->itemWidth() - settings->iconSize(); + if (leftToRightArrangement) { + textWidthIndex = (remainingWidth - LeftToRightBase) / LeftToRightInc; + } else { + textWidthIndex = (remainingWidth - TopToBottomBase) / TopToBottomInc; + } + // ensure that chosen index is always valid + textWidthIndex = qMax(textWidthIndex, 0); + textWidthIndex = qMin(textWidthIndex, m_textWidthBox->count() - 1); + + m_textWidthBox->setCurrentIndex(textWidthIndex); + m_arrangementBox->setCurrentIndex(leftToRightArrangement ? 0 : 1); + m_gridSpacingBox->setCurrentIndex((settings->gridSpacing() - GridSpacingBase) / GridSpacingInc); } #include "iconsviewsettingspage.moc"