]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Backport of bugfix 154434 (trunk revision 757791): Remember the additional-info prope...
authorPeter Penz <peter.penz19@gmail.com>
Mon, 7 Jan 2008 07:38:09 +0000 (07:38 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Mon, 7 Jan 2008 07:38:09 +0000 (07:38 +0000)
svn path=/branches/KDE/4.0/kdebase/apps/; revision=758210

src/dolphin_iconsmodesettings.kcfg
src/dolphindetailsview.cpp
src/dolphindetailsview.h
src/dolphiniconsview.cpp
src/dolphinmainwindow.cpp
src/dolphinview.cpp
src/iconsviewsettingspage.cpp
src/iconsviewsettingspage.h
src/viewproperties.cpp
src/viewproperties.h
src/viewpropertiesdialog.cpp

index 0524f7d201068daa1f170c96653a2c7f21f14b56..fa1467b1997c43fc94200fe18d051984f693044f 100644 (file)
             <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>
             <!--
index 886f3f9a66637a69b338e58793e08c5d91039302..4fdb76e1a777785690be48b194dcf027a88a73b7 100644 (file)
@@ -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;
         }
     }
 
index cfa5062b78d3abad41017d80a85b01775bc6a335..086121f7ab78ca60264af9100be44163fd8097ca 100644 (file)
@@ -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
 
index de0aaec97c1ed7391982a236efa4a117d3eb95f6..553cdcfe62e8a84630aaa945a222f0f76dc1282b 100644 (file)
@@ -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"
index 02e99c4720d8426ce1e913ebfdcb954abe9666f7..e40166e991e840359c84d4c9a0a9908e6538f15d 100644 (file)
@@ -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);
index 7418997d94dc16fcbc025c736eda5dd9920c38b3..ddb7185f0201409bb714b7b8886e60ddec08d1e0 100644 (file)
@@ -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);
index 56e75ac10b3e8851c4a774712ba76ec7a06f1bb9..6bcc78ae82dce03725062a250d8abe56ccbb1161 100644 (file)
@@ -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();
index bfc0c63c13f04790162bc9eef7731b2cd637e877..f45a14fd6989184cccf33df8d15a1e6d8c45241d 100644 (file)
@@ -88,7 +88,6 @@ private:
     QComboBox* m_textWidthBox;
     KFontRequester* m_fontRequester;
     QSpinBox* m_textlinesCountBox;
-    QCheckBox* m_showAdditionalInfo;
 
     QComboBox* m_arrangementBox;
     QComboBox* m_gridSpacingBox;
index b46ecb87e13cad8cc6c35159cdc8ab278d801ebf..2de807273d3aa2a34b57a4fbd9c33292bbb8c2a4 100644 (file)
@@ -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;
+}
index b4d6ac724c48d5ad91da900b391a9ff53d6d6b33..3237686c7f8ab428bb9dc4cadebe2b31b9a2faf4 100644 (file)
@@ -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:
index faf17d48b1e3551f58ce87776f7712f82534f652..c5d0ec5101ee4cb84755814e337ed8881f8d9872 100644 (file)
@@ -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