diff options
| author | Peter Penz <[email protected]> | 2008-01-07 07:38:09 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2008-01-07 07:38:09 +0000 |
| commit | 0e58c734c16a0de5981d7a0dc40cb9bd1cd91ae2 (patch) | |
| tree | 958cf123e3ef1a7417659d19f56e51124a8297fc /src | |
| parent | df94e72262e2312f2e39a605c0f2efa1a5196266 (diff) | |
Backport of bugfix 154434 (trunk revision 757791): Remember the additional-info property (size, date, type, ...) for each view mode (icons view, details view, column view) individually.
svn path=/branches/KDE/4.0/kdebase/apps/; revision=758210
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphin_iconsmodesettings.kcfg | 4 | ||||
| -rw-r--r-- | src/dolphindetailsview.cpp | 32 | ||||
| -rw-r--r-- | src/dolphindetailsview.h | 3 | ||||
| -rw-r--r-- | src/dolphiniconsview.cpp | 8 | ||||
| -rw-r--r-- | src/dolphinmainwindow.cpp | 3 | ||||
| -rw-r--r-- | src/dolphinview.cpp | 3 | ||||
| -rw-r--r-- | src/iconsviewsettingspage.cpp | 15 | ||||
| -rw-r--r-- | src/iconsviewsettingspage.h | 1 | ||||
| -rw-r--r-- | src/viewproperties.cpp | 54 | ||||
| -rw-r--r-- | src/viewproperties.h | 31 | ||||
| -rw-r--r-- | src/viewpropertiesdialog.cpp | 3 |
11 files changed, 86 insertions, 71 deletions
diff --git a/src/dolphin_iconsmodesettings.kcfg b/src/dolphin_iconsmodesettings.kcfg index 0524f7d20..fa1467b19 100644 --- a/src/dolphin_iconsmodesettings.kcfg +++ b/src/dolphin_iconsmodesettings.kcfg @@ -26,10 +26,6 @@ <label context="@label">Bold</label> <default>false</default> </entry> - <entry name="ShowAdditionalInfo" type="Bool"> - <label context="@label">Allow showing of additional information</label> - <default>true</default> - </entry> <entry name="ItemHeight" type="Int"> <label context="@label">Item height</label> <!-- diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 886f3f9a6..4fdb76e1a 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -46,7 +46,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr m_controller(controller), m_font(), m_decorationSize(), - m_clearAdditionalInfo(false), m_dragging(false), m_showElasticBand(false), m_elasticBandOrigin(), @@ -357,20 +356,6 @@ void DolphinDetailsView::resizeEvent(QResizeEvent* event) } } -void DolphinDetailsView::closeEvent(QCloseEvent* event) -{ - if (m_clearAdditionalInfo) { - disconnect(m_controller->dolphinView(), SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)), - this, SLOT(updateColumnVisibility())); - - KFileItemDelegate::InformationList info; - info.append(KFileItemDelegate::NoInformation); - m_controller->indicateAdditionalInfoChange(info); - m_clearAdditionalInfo = false; - } - QTreeView::closeEvent(event); -} - void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting) { QHeaderView* headerView = header(); @@ -497,27 +482,12 @@ void DolphinDetailsView::configureColumns(const QPoint& pos) void DolphinDetailsView::updateColumnVisibility() { - KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo(); - const bool useDefaultColumns = !isVisible() && - (list.isEmpty() || - list.contains(KFileItemDelegate::NoInformation)); - if (useDefaultColumns) { - // Using the details view without any additional information (-> additional column) - // makes no sense and leads to a usability problem as no viewport area is available - // anymore. Hence as fallback provide at least a size and date column. - list.clear(); - list.append(KFileItemDelegate::Size); - list.append(KFileItemDelegate::ModificationTime); - m_controller->indicateAdditionalInfoChange(list); - m_clearAdditionalInfo = true; - } - + const KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo(); for (int i = DolphinModel::Size; i <= DolphinModel::Type; ++i) { const KFileItemDelegate::Information info = infoForColumn(i); const bool hide = !list.contains(info); if (isColumnHidden(i) != hide) { setColumnHidden(i, hide); - m_clearAdditionalInfo = false; } } diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index cfa5062b7..086121f7a 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -58,7 +58,6 @@ protected: virtual void paintEvent(QPaintEvent* event); virtual void keyPressEvent(QKeyEvent* event); virtual void resizeEvent(QResizeEvent* event); - virtual void closeEvent(QCloseEvent* event); private slots: /** @@ -149,8 +148,6 @@ private: QFont m_font; QSize m_decorationSize; - bool m_clearAdditionalInfo; - bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4 QRect m_dropRect; // TODO: remove this property when the issue #160611 is solved in Qt 4.4 diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index de0aaec97..553cdcfe6 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -303,11 +303,6 @@ void DolphinIconsView::slotShowPreviewChanged() void DolphinIconsView::slotAdditionalInfoChanged(const KFileItemDelegate::InformationList& info) { - const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - if (!settings->showAdditionalInfo()) { - return; - } - const bool showPreview = m_controller->dolphinView()->showPreview(); updateGridSize(showPreview, info.count()); } @@ -468,8 +463,7 @@ KFileItem DolphinIconsView::itemForIndex(const QModelIndex& index) const int DolphinIconsView::additionalInfoCount() const { const DolphinView* view = m_controller->dolphinView(); - const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - return settings->showAdditionalInfo() ? view->additionalInfo().count() : 0; + return view->additionalInfo().count(); } #include "dolphiniconsview.moc" diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 02e99c472..e40166e99 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -273,9 +273,8 @@ void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::Information const DolphinView* view = m_activeViewContainer->view(); - const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); const bool enable = (view->mode() == DolphinView::DetailsView) || - ((view->mode() == DolphinView::IconsView) && settings->showAdditionalInfo()); + (view->mode() == DolphinView::IconsView); showSizeInfo->setEnabled(enable); showDateInfo->setEnabled(enable); diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 7418997d9..ddb7185f0 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -206,9 +206,6 @@ void DolphinView::setMode(Mode mode) deleteView(); - // It is important to read the view properties _after_ deleting the view, - // as e. g. the detail view might adjust the additional information properties - // after getting closed: const KUrl viewPropsUrl = viewPropertiesUrl(); ViewProperties props(viewPropsUrl); props.setViewMode(m_mode); diff --git a/src/iconsviewsettingspage.cpp b/src/iconsviewsettingspage.cpp index 56e75ac10..6bcc78ae8 100644 --- a/src/iconsviewsettingspage.cpp +++ b/src/iconsviewsettingspage.cpp @@ -50,7 +50,6 @@ IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, m_textWidthBox(0), m_fontRequester(0), m_textlinesCountBox(0), - m_showAdditionalInfo(0), m_arrangementBox(0), m_gridSpacingBox(0) { @@ -84,12 +83,7 @@ IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Medium")); m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Large")); - m_showAdditionalInfo = new QCheckBox(i18nc("@option:check", - "Allow showing of additional information"), textGroup); - - QVBoxLayout* textVBoxLayout = new QVBoxLayout(textGroup); - - QGridLayout* textGroupLayout = new QGridLayout(); + QGridLayout* textGroupLayout = new QGridLayout(textGroup); textGroupLayout->addWidget(fontLabel, 0, 0); textGroupLayout->addWidget(m_fontRequester, 0, 1); textGroupLayout->addWidget(textlinesCountLabel, 1, 0); @@ -97,9 +91,6 @@ IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, textGroupLayout->addWidget(textWidthLabel, 2, 0); textGroupLayout->addWidget(m_textWidthBox, 2, 1); - textVBoxLayout->addLayout(textGroupLayout); - textVBoxLayout->addWidget(m_showAdditionalInfo); - // create the 'Grid' group for selecting the arrangement and the grid spacing QGroupBox* gridGroup = new QGroupBox(i18nc("@title:group", "Grid"), this); gridGroup->setSizePolicy(sizePolicy); @@ -171,8 +162,6 @@ void IconsViewSettingsPage::applySettings() settings->setNumberOfTextlines(numberOfTextlines); - settings->setShowAdditionalInfo(m_showAdditionalInfo->isChecked()); - settings->setGridSpacing(GridSpacingBase + m_gridSpacingBox->currentIndex() * GridSpacingInc); } @@ -208,8 +197,6 @@ void IconsViewSettingsPage::loadSettings() m_textlinesCountBox->setValue(settings->numberOfTextlines()); - m_showAdditionalInfo->setChecked(settings->showAdditionalInfo()); - const bool leftToRightArrangement = (settings->arrangement() == QListView::LeftToRight); int textWidthIndex = 0; const int remainingWidth = settings->itemWidth() - settings->iconSize(); diff --git a/src/iconsviewsettingspage.h b/src/iconsviewsettingspage.h index bfc0c63c1..f45a14fd6 100644 --- a/src/iconsviewsettingspage.h +++ b/src/iconsviewsettingspage.h @@ -88,7 +88,6 @@ private: QComboBox* m_textWidthBox; KFontRequester* m_fontRequester; QSpinBox* m_textlinesCountBox; - QCheckBox* m_showAdditionalInfo; QComboBox* m_arrangementBox; QComboBox* m_gridSpacingBox; diff --git a/src/viewproperties.cpp b/src/viewproperties.cpp index b46ecb87e..2de807273 100644 --- a/src/viewproperties.cpp +++ b/src/viewproperties.cpp @@ -226,16 +226,17 @@ void ViewProperties::setAdditionalInfo(KFileItemDelegate::InformationList list) } } - if (m_node->additionalInfo() != info) { - m_node->setAdditionalInfo(info); + const int encodedInfo = encodedAdditionalInfo(info); + if (m_node->additionalInfo() != encodedInfo) { + m_node->setAdditionalInfo(encodedInfo); updateTimeStamp(); } } KFileItemDelegate::InformationList ViewProperties::additionalInfo() const { - const int info = m_node->additionalInfo(); - + const int info = decodedAdditionalInfo(); + KFileItemDelegate::InformationList list; if (info & SizeInfo) { list.append(KFileItemDelegate::Size); @@ -307,3 +308,48 @@ QString ViewProperties::destinationDir(const QString& subDir) const basePath.append("/view_properties/").append(subDir); return KStandardDirs::locateLocal("data", basePath); } + +int ViewProperties::encodedAdditionalInfo(int info) const +{ + int encodedInfo = m_node->additionalInfo(); + + switch (viewMode()) { + case DolphinView::DetailsView: + encodedInfo = (encodedInfo & 0xFFFF00) | info; + break; + case DolphinView::IconsView: + encodedInfo = (encodedInfo & 0xFF00FF) | (info << 8); + break; + case DolphinView::ColumnView: + encodedInfo = (encodedInfo & 0x00FFFF) | (info << 16); + break; + default: break; + } + + return encodedInfo; +} + +int ViewProperties::decodedAdditionalInfo() const +{ + int decodedInfo = m_node->additionalInfo(); + + switch (viewMode()) { + case DolphinView::DetailsView: + decodedInfo = decodedInfo & 0xFF; + if (decodedInfo == NoInfo) { + // a details view without any additional info makes no sense, hence + // provide at least a size-info and date-info as fallback + decodedInfo = SizeInfo | DateInfo; + } + break; + case DolphinView::IconsView: + decodedInfo = (decodedInfo >> 8) & 0xFF; + break; + case DolphinView::ColumnView: + decodedInfo = (decodedInfo >> 16) & 0xFF; + break; + default: break; + } + + return decodedInfo; +} diff --git a/src/viewproperties.h b/src/viewproperties.h index b4d6ac724..3237686c7 100644 --- a/src/viewproperties.h +++ b/src/viewproperties.h @@ -71,7 +71,18 @@ public: void setSortOrder(Qt::SortOrder sortOrder); Qt::SortOrder sortOrder() const; + /** + * Sets the additional information for the current set view-mode. + * Note that the additional-info property is the only property where + * the value is dependent from another property (in this case the view-mode). + */ void setAdditionalInfo(KFileItemDelegate::InformationList info); + + /** + * Returns the additional information for the current set view-mode. + * Note that the additional-info property is the only property where + * the value is dependent from another property (in this case the view-mode). + */ KFileItemDelegate::InformationList additionalInfo() const; /** @@ -117,6 +128,26 @@ private: */ QString destinationDir(const QString& subDir) const; + /** + * Returns the encoded additional information that can be stored + * in the .directory file. See ViewProperties::decodedAdditionalInfo() + * for the coding format. + * @param info Additional information for the current view mode. + */ + int encodedAdditionalInfo(int info) const; + + /** + * Returns the decoded additional information from the .directory + * file by respecting the current set view mode. The additional + * information from the .directory file is an integer value, where: + * - Byte 0 stores the additional info for the details view + * - Byte 1 stores the additional info for the icons view + * - Byte 2 stores the additional info for the column view + * The additional information property is the only property that is + * dependent from another property (in this case the view-mode). + */ + int decodedAdditionalInfo() const; + Q_DISABLE_COPY(ViewProperties) private: diff --git a/src/viewpropertiesdialog.cpp b/src/viewpropertiesdialog.cpp index faf17d48b..c5d0ec510 100644 --- a/src/viewpropertiesdialog.cpp +++ b/src/viewpropertiesdialog.cpp @@ -381,9 +381,8 @@ void ViewPropertiesDialog::loadSettings() m_sortOrder->setCurrentIndex(sortOrderIndex); m_sorting->setCurrentIndex(m_viewProps->sorting()); - const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); const bool enabled = (index == DolphinView::DetailsView) || - ((index == DolphinView::IconsView) && settings->showAdditionalInfo()); + (index == DolphinView::IconsView); m_additionalInfo->setEnabled(enabled); // load show preview, show in groups and show hidden files settings |
