]> cloud.milkyroute.net Git - dolphin.git/commitdiff
When switching from e. g. the icons view to the details view, additional information...
authorPeter Penz <peter.penz19@gmail.com>
Tue, 6 Nov 2007 07:16:23 +0000 (07:16 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Tue, 6 Nov 2007 07:16:23 +0000 (07:16 +0000)
BUG: 151891

svn path=/trunk/KDE/kdebase/apps/; revision=733313

src/dolphindetailsview.cpp
src/dolphindetailsview.h
src/dolphinview.cpp
src/dolphinview.h

index e55c2582d59c31e9426ec4c7e00a1e2980272ddd..af79d084572b85706bd48ff0ad97307723a51d19 100644 (file)
@@ -43,6 +43,7 @@
 DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
     QTreeView(parent),
     m_controller(controller),
 DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
     QTreeView(parent),
     m_controller(controller),
+    m_clearAdditionalInfo(false),
     m_dragging(false),
     m_showElasticBand(false),
     m_elasticBandOrigin(),
     m_dragging(false),
     m_showElasticBand(false),
     m_elasticBandOrigin(),
@@ -349,6 +350,20 @@ 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 = true;
+    }
+    QTreeView::closeEvent(event);
+}
+
 void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting)
 {
     QHeaderView* headerView = header();
 void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting)
 {
     QHeaderView* headerView = header();
@@ -457,17 +472,7 @@ void DolphinDetailsView::configureColumns(const QPoint& pos)
         const int columnIndex = activatedAction->data().toInt();
 
         KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
         const int columnIndex = activatedAction->data().toInt();
 
         KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
-        KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;
-        switch (columnIndex) {
-        case DolphinModel::Size:         info = KFileItemDelegate::Size; break;
-        case DolphinModel::ModifiedTime: info = KFileItemDelegate::ModificationTime; break;
-        case DolphinModel::Permissions:  info = KFileItemDelegate::Permissions; break;
-        case DolphinModel::Owner:        info = KFileItemDelegate::Owner; break;
-        case DolphinModel::Group:        info = KFileItemDelegate::OwnerAndGroup; break;
-        case DolphinModel::Type:         info = KFileItemDelegate::FriendlyMimeType; break;
-        default: break;
-        }
-
+        const KFileItemDelegate::Information info = infoForColumn(columnIndex);
         if (show) {
             Q_ASSERT(!list.contains(info));
             list.append(info);
         if (show) {
             Q_ASSERT(!list.contains(info));
             list.append(info);
@@ -485,7 +490,10 @@ void DolphinDetailsView::configureColumns(const QPoint& pos)
 void DolphinDetailsView::updateColumnVisibility()
 {
     KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
 void DolphinDetailsView::updateColumnVisibility()
 {
     KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
-    if (list.isEmpty() || list.contains(KFileItemDelegate::NoInformation)) {
+    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.
         // 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.
@@ -493,14 +501,17 @@ void DolphinDetailsView::updateColumnVisibility()
         list.append(KFileItemDelegate::Size);
         list.append(KFileItemDelegate::ModificationTime);
         m_controller->indicateAdditionalInfoChange(list);
         list.append(KFileItemDelegate::Size);
         list.append(KFileItemDelegate::ModificationTime);
         m_controller->indicateAdditionalInfoChange(list);
+        m_clearAdditionalInfo = true;
     }
 
     }
 
-    setColumnHidden(DolphinModel::Size,         !list.contains(KFileItemDelegate::Size));
-    setColumnHidden(DolphinModel::ModifiedTime, !list.contains(KFileItemDelegate::ModificationTime));
-    setColumnHidden(DolphinModel::Permissions,  !list.contains(KFileItemDelegate::Permissions));
-    setColumnHidden(DolphinModel::Owner,        !list.contains(KFileItemDelegate::Owner));
-    setColumnHidden(DolphinModel::Group,        !list.contains(KFileItemDelegate::OwnerAndGroup));
-    setColumnHidden(DolphinModel::Type,         !list.contains(KFileItemDelegate::FriendlyMimeType));
+    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;
+        }
+    }
 }
 
 bool DolphinDetailsView::isZoomInPossible() const
 }
 
 bool DolphinDetailsView::isZoomInPossible() const
@@ -553,4 +564,21 @@ KFileItem DolphinDetailsView::itemForIndex(const QModelIndex& index) const
     return dirModel->itemForIndex(dirIndex);
 }
 
     return dirModel->itemForIndex(dirIndex);
 }
 
+KFileItemDelegate::Information DolphinDetailsView::infoForColumn(int columnIndex) const
+{
+    KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;
+
+    switch (columnIndex) {
+    case DolphinModel::Size:         info = KFileItemDelegate::Size; break;
+    case DolphinModel::ModifiedTime: info = KFileItemDelegate::ModificationTime; break;
+    case DolphinModel::Permissions:  info = KFileItemDelegate::Permissions; break;
+    case DolphinModel::Owner:        info = KFileItemDelegate::Owner; break;
+    case DolphinModel::Group:        info = KFileItemDelegate::OwnerAndGroup; break;
+    case DolphinModel::Type:         info = KFileItemDelegate::FriendlyMimeType; break;
+    default: break;
+    }
+
+    return info;
+}
+
 #include "dolphindetailsview.moc"
 #include "dolphindetailsview.moc"
index 57fb98f2248149f3a5b394a01a781ecf6bbd1b66..ec98b0fafc1dd2de7a0561ff0a3cabc5fa473b8d 100644 (file)
@@ -58,6 +58,7 @@ protected:
     virtual void paintEvent(QPaintEvent* event);
     virtual void keyPressEvent(QKeyEvent* event);
     virtual void resizeEvent(QResizeEvent* event);
     virtual void paintEvent(QPaintEvent* event);
     virtual void keyPressEvent(QKeyEvent* event);
     virtual void resizeEvent(QResizeEvent* event);
+    virtual void closeEvent(QCloseEvent* event);
 
 private slots:
     /**
 
 private slots:
     /**
@@ -135,10 +136,14 @@ private:
 
     KFileItem itemForIndex(const QModelIndex& index) const;
 
 
     KFileItem itemForIndex(const QModelIndex& index) const;
 
+    KFileItemDelegate::Information infoForColumn(int columnIndex) const;
+
 private:
     DolphinController* m_controller;
     QStyleOptionViewItem m_viewOptions;
 
 private:
     DolphinController* m_controller;
     QStyleOptionViewItem m_viewOptions;
 
+    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
 
     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 004b158ed643b2c3cfc56a513c5bb451f80cf3be..fabda169e252f7b8a283426102d5dbcb93ba7c7c 100644 (file)
@@ -194,6 +194,11 @@ void DolphinView::setMode(Mode mode)
         m_controller->setUrl(root);
     }
 
         m_controller->setUrl(root);
     }
 
+    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);
     const KUrl viewPropsUrl = viewPropertiesUrl();
     ViewProperties props(viewPropsUrl);
     props.setViewMode(m_mode);
@@ -770,6 +775,7 @@ void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList&
 {
     ViewProperties props(viewPropertiesUrl());
     props.setAdditionalInfo(info);
 {
     ViewProperties props(viewPropertiesUrl());
     props.setAdditionalInfo(info);
+    props.save();
 
     m_fileItemDelegate->setShowInformation(info);
 
 
     m_fileItemDelegate->setShowInformation(info);
 
@@ -826,24 +832,12 @@ void DolphinView::clearHoverInformation()
 
 void DolphinView::createView()
 {
 
 void DolphinView::createView()
 {
-    // delete current view
-    QAbstractItemView* view = itemView();
-    if (view != 0) {
-        m_topLayout->removeWidget(view);
-        view->close();
-        view->deleteLater();
-        view = 0;
-        m_iconsView = 0;
-        m_detailsView = 0;
-        m_columnView = 0;
-        m_fileItemDelegate = 0;
-    }
-
+    deleteView();
     Q_ASSERT(m_iconsView == 0);
     Q_ASSERT(m_detailsView == 0);
     Q_ASSERT(m_columnView == 0);
 
     Q_ASSERT(m_iconsView == 0);
     Q_ASSERT(m_detailsView == 0);
     Q_ASSERT(m_columnView == 0);
 
-    // ... and recreate it representing the current mode
+    QAbstractItemView* view = 0;
     switch (m_mode) {
     case IconsView: {
         m_iconsView = new DolphinIconsView(this, m_controller);
     switch (m_mode) {
     case IconsView: {
         m_iconsView = new DolphinIconsView(this, m_controller);
@@ -881,6 +875,21 @@ void DolphinView::createView()
             this, SLOT(emitContentsMoved()));
 }
 
             this, SLOT(emitContentsMoved()));
 }
 
+void DolphinView::deleteView()
+{
+    QAbstractItemView* view = itemView();
+    if (view != 0) {
+        m_topLayout->removeWidget(view);
+        view->close();
+        view->deleteLater();
+        view = 0;
+        m_iconsView = 0;
+        m_detailsView = 0;
+        m_columnView = 0;
+        m_fileItemDelegate = 0;
+    }
+}
+
 QAbstractItemView* DolphinView::itemView() const
 {
     if (m_detailsView != 0) {
 QAbstractItemView* DolphinView::itemView() const
 {
     if (m_detailsView != 0) {
index 593209e064bae89ad84c010d83b1fb6ac2c6f796..abb82527e7f6b107aac6dd73435776aea0ff0318 100644 (file)
@@ -566,6 +566,8 @@ private:
      */
     void createView();
 
      */
     void createView();
 
+    void deleteView();
+
     /**
      * Returns a pointer to the currently used item view, which is either
      * a ListView or a TreeView.
     /**
      * Returns a pointer to the currently used item view, which is either
      * a ListView or a TreeView.