]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Fix issue that selection is not cleared when clicking on another column than the...
[dolphin.git] / src / dolphinview.cpp
index 4c2c5f02db17037ea127ab4facd213f79a006a11..1a33668e01dec3167dbfd747834478a40be82ae5 100644 (file)
 
 #include "dolphinview.h"
 
-#include <QApplication>
-#include <QClipboard>
-#include <QDropEvent>
-#include <QItemSelectionModel>
-#include <QMouseEvent>
-#include <QVBoxLayout>
-#include <QTimer>
-#include <QScrollBar>
+#include <QtGui/QApplication>
+#include <QtGui/QClipboard>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QItemSelection>
+#include <QtGui/QBoxLayout>
+#include <QtCore/QTimer>
+#include <QtGui/QScrollBar>
 
 #include <kdirmodel.h>
 #include <kfileitemdelegate.h>
 #include <kfileplacesmodel.h>
+#include <kglobalsettings.h>
 #include <klocale.h>
 #include <kiconeffect.h>
 #include <kio/netaccess.h>
@@ -67,6 +67,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
     QWidget(parent),
     m_showProgress(false),
     m_blockContentsMovedSignal(false),
+    m_initializeColumnView(false),
     m_mode(mode),
     m_iconSize(0),
     m_folderCount(0),
@@ -99,8 +100,11 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
             this, SLOT(updateCutItems()));
 
     m_urlNavigator = new KUrlNavigator(DolphinSettings::instance().placesModel(), url, this);
-    m_urlNavigator->setUrlEditable(DolphinSettings::instance().generalSettings()->editableUrl());
-    m_urlNavigator->setHomeUrl(DolphinSettings::instance().generalSettings()->homeUrl());
+
+    const GeneralSettings* settings = DolphinSettings::instance().generalSettings();
+    m_urlNavigator->setUrlEditable(settings->editableUrl());
+    m_urlNavigator->setHomeUrl(settings->homeUrl());
+
     connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)),
             this, SLOT(changeDirectory(const KUrl&)));
     connect(m_urlNavigator, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&)),
@@ -157,13 +161,17 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
             this, SLOT(emitSelectionChangedSignal()));
     connect(m_controller, SIGNAL(activated()),
             this, SLOT(requestActivation()));
+    connect(m_controller, SIGNAL(itemEntered(const QModelIndex&)),
+            this, SLOT(showHoverInformation(const QModelIndex&)));
+    connect(m_controller, SIGNAL(viewportEntered()),
+            this, SLOT(clearHoverInformation()));
 
     createView();
 
     m_iconSize = K3Icon::SizeMedium;
 
     m_filterBar = new FilterBar(this);
-    m_filterBar->hide();
+    m_filterBar->setVisible(settings->filterBar());
     connect(m_filterBar, SIGNAL(filterChanged(const QString&)),
             this, SLOT(changeNameFilter(const QString&)));
     connect(m_filterBar, SIGNAL(closeRequest()),
@@ -192,6 +200,11 @@ const KUrl& DolphinView::url() const
     return m_urlNavigator->url();
 }
 
+KUrl DolphinView::rootUrl() const
+{
+    return isColumnViewActive() ? m_dirLister->url() : url();
+}
+
 bool DolphinView::isActive() const
 {
     return m_mainWindow->activeView() == this;
@@ -396,11 +409,6 @@ int DolphinView::contentsY() const
     return itemView()->verticalScrollBar()->value();
 }
 
-void DolphinView::emitRequestItemInfo(const KUrl& url)
-{
-    emit requestItemInfo(url);
-}
-
 bool DolphinView::isFilterBarVisible() const
 {
     return m_filterBar->isVisible();
@@ -460,6 +468,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::AdditionalInformation inf
     ViewProperties props(m_urlNavigator->url());
     props.setAdditionalInfo(info);
 
+    m_controller->setShowAdditionalInfo(info != KFileItemDelegate::NoInformation);
     m_fileItemDelegate->setAdditionalInformation(info);
 
     emit additionalInfoChanged(info);
@@ -617,6 +626,12 @@ void DolphinView::reload()
     startDirLister(url, true);
 }
 
+void DolphinView::refresh()
+{
+    createView();
+    reload();
+}
+
 void DolphinView::mouseReleaseEvent(QMouseEvent* event)
 {
     QWidget::mouseReleaseEvent(event);
@@ -650,6 +665,14 @@ void DolphinView::changeDirectory(const KUrl& url)
         m_mode = mode;
         createView();
         emit modeChanged();
+
+        if (m_mode == ColumnView) {
+            // The mode has been changed to the Column View. When starting the dir
+            // lister with DolphinView::startDirLister() it is important to give a
+            // hint that the dir lister may not keep the current directory
+            // although this is the default for showing a hierarchy.
+            m_initializeColumnView = true;
+        }
     }
 
     const bool showHiddenFiles = props.showHiddenFiles();
@@ -688,8 +711,8 @@ void DolphinView::changeDirectory(const KUrl& url)
 
     KFileItemDelegate::AdditionalInformation info = props.additionalInfo();
     if (info != m_fileItemDelegate->additionalInformation()) {
+        m_controller->setShowAdditionalInfo(info != KFileItemDelegate::NoInformation);
         m_fileItemDelegate->setAdditionalInformation(info);
-
         emit additionalInfoChanged(info);
     }
 
@@ -708,6 +731,8 @@ void DolphinView::changeDirectory(const KUrl& url)
 void DolphinView::triggerItem(const QModelIndex& index)
 {
     if (!isValidNameIndex(index)) {
+        clearSelection();
+        showHoverInformation(index);
         return;
     }
 
@@ -896,7 +921,9 @@ void DolphinView::startDirLister(const KUrl& url, bool reload)
     m_dirLister->stop();
 
     bool openDir = true;
-    bool keepOldDirs = isColumnViewActive();
+    bool keepOldDirs = isColumnViewActive() && !m_initializeColumnView;
+    m_initializeColumnView = false;
+
     if (keepOldDirs) {
         if (reload) {
             keepOldDirs = false;
@@ -1138,10 +1165,23 @@ void DolphinView::emitContentsMoved()
 void DolphinView::updateActivationState()
 {
     m_urlNavigator->setActive(isActive());
+
+    QColor color = KGlobalSettings::baseColor();
     if (isActive()) {
         emit urlChanged(url());
         emit selectionChanged(selectedItems());
+    } else {
+        // darken the background if the view is inactive
+        // TODO: does not work for a black background
+        color = color.darker(105);
     }
+
+    QWidget* viewport = itemView()->viewport();
+    QPalette palette;
+    palette.setColor(viewport->backgroundRole(), color);
+    viewport->setPalette(palette);
+
+    update();
 }
 
 void DolphinView::updateCutItems()
@@ -1163,6 +1203,26 @@ void DolphinView::updateCutItems()
     applyCutItemEffect();
 }
 
+void DolphinView::showHoverInformation(const QModelIndex& index)
+{
+    if (hasSelection()) {
+        return;
+    }
+
+    const KFileItem* item = fileItem(index);
+    if (item != 0) {
+        m_statusBar->setMessage(item->getStatusBarInfo(), DolphinStatusBar::Default);
+        emit requestItemInfo(item->url());
+    }
+}
+
+void DolphinView::clearHoverInformation()
+{
+    m_statusBar->clear();
+    emit requestItemInfo(KUrl());
+}
+
+
 void DolphinView::createView()
 {
     // delete current view