]> cloud.milkyroute.net Git - dolphin.git/commitdiff
move handling of SelectionManager and AutoScroller to ViewExtensionsFactory
authorPeter Penz <peter.penz19@gmail.com>
Sat, 29 Aug 2009 11:36:22 +0000 (11:36 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 29 Aug 2009 11:36:22 +0000 (11:36 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1016927

src/dolphincolumnview.cpp
src/dolphincolumnview.h
src/dolphindetailsview.cpp
src/dolphindetailsview.h
src/dolphiniconsview.cpp
src/dolphiniconsview.h
src/dolphinview.cpp
src/viewextensionsfactory.cpp
src/viewextensionsfactory.h

index c3cf10f383f719b124d005c311e9b354ccad7433..05544405bac54e402600a0d68e2eb54817f31481 100644 (file)
@@ -30,7 +30,6 @@
 #include "dolphin_generalsettings.h"
 #include "draganddrophelper.h"
 #include "folderexpander.h"
-#include "selectionmanager.h"
 #include "tooltips/tooltipmanager.h"
 #include "versioncontrolobserver.h"
 #include "viewextensionsfactory.h"
@@ -56,8 +55,7 @@ DolphinColumnView::DolphinColumnView(QWidget* parent,
     QListView(parent),
     m_active(false),
     m_container(container),
-    m_selectionManager(0),
-    m_autoScroller(0),
+    m_extensionsFactory(0),
     m_url(url),
     m_childUrl(),
     m_font(),
@@ -80,8 +78,6 @@ DolphinColumnView::DolphinColumnView(QWidget* parent,
     setVerticalScrollMode(QListView::ScrollPerPixel);
     setHorizontalScrollMode(QListView::ScrollPerPixel);
 
-    m_autoScroller = new DolphinViewAutoScroller(this);
-
     // apply the column mode settings to the widget
     const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
     Q_ASSERT(settings != 0);
@@ -139,14 +135,6 @@ DolphinColumnView::DolphinColumnView(QWidget* parent,
 
     setModel(m_proxyModel);
 
-    if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
-        m_selectionManager = new SelectionManager(this);
-        connect(m_selectionManager, SIGNAL(selectionChanged()),
-                this, SLOT(requestActivation()));
-        connect(m_container->m_controller, SIGNAL(urlChanged(const KUrl&)),
-                m_selectionManager, SLOT(reset()));
-    }
-
     //m_dirLister->openUrl(url, KDirLister::NoFlags);
 
     connect(KGlobalSettings::self(), SIGNAL(kdisplayFontChanged()),
@@ -172,7 +160,7 @@ DolphinColumnView::DolphinColumnView(QWidget* parent,
 
     updateDecorationSize(dolphinView->showPreview());
 
-    new ViewExtensionsFactory(this, controller);
+    m_extensionsFactory = new ViewExtensionsFactory(this, controller);
 }
 
 DolphinColumnView::~DolphinColumnView()
@@ -409,10 +397,6 @@ void DolphinColumnView::contextMenuEvent(QContextMenuEvent* event)
 
 void DolphinColumnView::wheelEvent(QWheelEvent* event)
 {
-    if (m_selectionManager != 0) {
-        m_selectionManager->reset();
-    }
-
     // let Ctrl+wheel events propagate to the DolphinView for icon zooming
     if (event->modifiers() & Qt::ControlModifier) {
         event->ignore();
@@ -447,7 +431,7 @@ void DolphinColumnView::selectionChanged(const QItemSelection& selected, const Q
 void DolphinColumnView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
 {
     QListView::currentChanged(current, previous);
-    m_autoScroller->handleCurrentIndexChange(current, previous);
+    m_extensionsFactory->handleCurrentIndexChange(current, previous);
 }
 
 void DolphinColumnView::setNameFilter(const QString& nameFilter)
@@ -548,10 +532,6 @@ void DolphinColumnView::updateDecorationSize(bool showPreview)
 
     m_decorationSize = size;
 
-    if (m_selectionManager != 0) {
-        m_selectionManager->reset();
-    }
-
     doItemsLayout();
 }
 
index 1dc154358369872ccad3f73a0483edd438abb9c4..3d7432bd4d3c09f38e6776891d26756d1443acd1 100644 (file)
@@ -33,10 +33,10 @@ class DolphinColumnViewContainer;
 class DolphinModel;
 class DolphinSortFilterProxyModel;
 class DolphinDirLister;
-class DolphinViewAutoScroller;
 class KFileItem;
 class KFileItemList;
 class SelectionManager;
+class ViewExtensionsFactory;
 
 /**
  * Represents one column inside the DolphinColumnViewContainer.
@@ -124,7 +124,7 @@ private:
     bool m_active;
     DolphinColumnViewContainer* m_container;
     SelectionManager* m_selectionManager;
-    DolphinViewAutoScroller* m_autoScroller;
+    ViewExtensionsFactory* m_extensionsFactory;
     KUrl m_url;      // URL of the directory that is shown
     KUrl m_childUrl; // URL of the next column that is shown
 
index 83bc7cdd348036bd07edb590b514b0c8766fb030..460afd359067dc602bf699a17a7e1d81703eaa1a 100644 (file)
@@ -27,7 +27,6 @@
 #include "dolphinsortfilterproxymodel.h"
 #include "dolphinviewautoscroller.h"
 #include "draganddrophelper.h"
-#include "selectionmanager.h"
 #include "viewextensionsfactory.h"
 #include "viewproperties.h"
 #include "zoomlevelinfo.h"
@@ -56,8 +55,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
     m_useDefaultIndexAt(true),
     m_ignoreScrollTo(false),
     m_controller(controller),
-    m_selectionManager(0),
-    m_autoScroller(0),
+    m_extensionsFactory(0),
     m_expandableFoldersAction(0),
     m_font(),
     m_decorationSize(),
@@ -81,7 +79,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
     setModel(proxyModel);
 
     setMouseTracking(true);
-    m_autoScroller = new DolphinViewAutoScroller(this);
 
     const ViewProperties props(controller->url());
     setSortIndicatorSection(props.sorting());
@@ -113,14 +110,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
                 controller, SLOT(triggerItem(const QModelIndex&)));
     }
 
-    if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
-        m_selectionManager = new SelectionManager(this);
-        connect(m_selectionManager, SIGNAL(selectionChanged()),
-                this, SLOT(requestActivation()));
-        connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
-                m_selectionManager, SLOT(reset()));
-    }
-
     connect(this, SIGNAL(entered(const QModelIndex&)),
             this, SLOT(slotEntered(const QModelIndex&)));
     connect(this, SIGNAL(viewportEntered()),
@@ -165,7 +154,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
     connect(m_expandableFoldersAction, SIGNAL(toggled(bool)),
             this, SLOT(setFoldersExpandable(bool)));
 
-    new ViewExtensionsFactory(this, controller);
+    m_extensionsFactory = new ViewExtensionsFactory(this, controller);
 }
 
 DolphinDetailsView::~DolphinDetailsView()
@@ -411,10 +400,6 @@ void DolphinDetailsView::resizeEvent(QResizeEvent* event)
 
 void DolphinDetailsView::wheelEvent(QWheelEvent* event)
 {
-    if (m_selectionManager != 0) {
-        m_selectionManager->reset();
-    }
-
     // let Ctrl+wheel events propagate to the DolphinView for icon zooming
     if (event->modifiers() & Qt::ControlModifier) {
         event->ignore();
@@ -430,7 +415,7 @@ void DolphinDetailsView::wheelEvent(QWheelEvent* event)
 void DolphinDetailsView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
 {
     QTreeView::currentChanged(current, previous);
-    m_autoScroller->handleCurrentIndexChange(current, previous);
+    m_extensionsFactory->handleCurrentIndexChange(current, previous);
 
     // Stay consistent with QListView: When changing the current index by key presses,
     // also change the selection.
@@ -900,10 +885,6 @@ void DolphinDetailsView::updateDecorationSize(bool showPreview)
     setIconSize(QSize(iconSize, iconSize));
     m_decorationSize = QSize(iconSize, iconSize);
 
-    if (m_selectionManager != 0) {
-        m_selectionManager->reset();
-    }
-
     doItemsLayout();
 }
 
index 562b6d264c22273a7d25318e79452a7cda6e6e57..a099d96e7dd21013f4c9c52c85885a82885a8ff1 100644 (file)
@@ -26,9 +26,8 @@
 #include <libdolphin_export.h>
 
 class DolphinController;
-class SelectionManager;
 class DolphinSortFilterProxyModel;
-class DolphinViewAutoScroller;
+class ViewExtensionsFactory;
 
 /**
  * @brief Represents the details view which shows the name, size,
@@ -203,8 +202,7 @@ private:
     bool m_ignoreScrollTo : 1;    // true if calls to scrollTo(...) should do nothing.
 
     DolphinController* m_controller;
-    SelectionManager* m_selectionManager;
-    DolphinViewAutoScroller* m_autoScroller;
+    ViewExtensionsFactory* m_extensionsFactory;
     QAction* m_expandableFoldersAction;
 
     QFont m_font;
index 2670aab822cc3d524fdf900e528f24573e10c993..efbcfd6fb460a77194572898851680e2ce35a718 100644 (file)
@@ -23,7 +23,6 @@
 #include "dolphincontroller.h"
 #include "settings/dolphinsettings.h"
 #include "dolphinsortfilterproxymodel.h"
-#include "dolphinviewautoscroller.h"
 #include "dolphin_iconsmodesettings.h"
 #include "dolphin_generalsettings.h"
 #include "draganddrophelper.h"
@@ -45,9 +44,8 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
                                    DolphinSortFilterProxyModel* proxyModel) :
     KCategorizedView(parent),
     m_controller(controller),
-    m_selectionManager(0),
-    m_autoScroller(0),
     m_categoryDrawer(0),
+    m_extensionsFactory(0),
     m_font(),
     m_decorationSize(),
     m_decorationPosition(QStyleOptionViewItem::Top),
@@ -66,7 +64,6 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
     viewport()->setAcceptDrops(true);
 
     setMouseTracking(true);
-    m_autoScroller = new DolphinViewAutoScroller(this);
 
     connect(this, SIGNAL(clicked(const QModelIndex&)),
             controller, SLOT(requestTab(const QModelIndex&)));
@@ -78,14 +75,6 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
                 controller, SLOT(triggerItem(const QModelIndex&)));
     }
 
-    if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
-        m_selectionManager = new SelectionManager(this);
-        connect(m_selectionManager, SIGNAL(selectionChanged()),
-                this, SLOT(requestActivation()));
-        connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
-                m_selectionManager, SLOT(reset()));
-    }
-
     connect(this, SIGNAL(entered(const QModelIndex&)),
             controller, SLOT(emitItemEntered(const QModelIndex&)));
     connect(this, SIGNAL(viewportEntered()),
@@ -135,7 +124,7 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
     connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)),
             this, SLOT(slotGlobalSettingsChanged(int)));
 
-    new ViewExtensionsFactory(this, controller);
+    m_extensionsFactory = new ViewExtensionsFactory(this, controller);
 }
 
 DolphinIconsView::~DolphinIconsView()
@@ -328,10 +317,6 @@ void DolphinIconsView::keyPressEvent(QKeyEvent* event)
 
 void DolphinIconsView::wheelEvent(QWheelEvent* event)
 {
-    if (m_selectionManager != 0) {
-        m_selectionManager->reset();
-    }
-
     // let Ctrl+wheel events propagate to the DolphinView for icon zooming
     if (event->modifiers() & Qt::ControlModifier) {
         event->ignore();
@@ -377,7 +362,7 @@ void DolphinIconsView::leaveEvent(QEvent* event)
 void DolphinIconsView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
 {
     KCategorizedView::currentChanged(current, previous);
-    m_autoScroller->handleCurrentIndexChange(current, previous);
+    m_extensionsFactory->handleCurrentIndexChange(current, previous);
 }
 
 void DolphinIconsView::resizeEvent(QResizeEvent* event)
@@ -521,10 +506,6 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount)
     if (delegate != 0) {
         delegate->setMaximumSize(m_itemSize);
     }
-
-    if (m_selectionManager != 0) {
-        m_selectionManager->reset();
-    }
 }
 
 int DolphinIconsView::additionalInfoCount() const
index d94a00e7164df871b5d168aa9446107886d8d6fb..5c939242514ea3be8a12ef03ed20bc8f92047579 100644 (file)
 #include <libdolphin_export.h>
 
 class DolphinController;
-class SelectionManager;
 class DolphinCategoryDrawer;
 class DolphinSortFilterProxyModel;
-class DolphinViewAutoScroller;
+class ViewExtensionsFactory;
 
 /**
  * @brief Represents the view, where each item is shown as an icon.
@@ -96,9 +95,8 @@ private:
 
 private:
     DolphinController* m_controller;
-    SelectionManager* m_selectionManager;
-    DolphinViewAutoScroller* m_autoScroller;
     DolphinCategoryDrawer* m_categoryDrawer;
+    ViewExtensionsFactory* m_extensionsFactory;
 
     QFont m_font;
     QSize m_decorationSize;
index 42305be1f6669727219656171d9661d1fb35038e..2af260f24f4bab1af5ac211308f743f6de2fe733 100644 (file)
@@ -92,7 +92,6 @@ DolphinView::DolphinView(QWidget* parent,
     m_controller(0),
     m_fileItemDelegate(0),
     m_viewAccessor(proxyModel),
-    m_selectionModel(0),
     m_selectionChangedTimer(0),
     m_versionControlObserver(0),
     m_rootUrl(),
@@ -1366,12 +1365,13 @@ void DolphinView::initializeView()
     m_fileItemDelegate->setMinimizedNameColumn(m_mode == DetailsView);
     view->setItemDelegate(m_fileItemDelegate);
 
-    view->setModel(m_viewAccessor.proxyModel());
+    // TODO: reactivate selection model
+    /*view->setModel(m_viewAccessor.proxyModel());
     if (m_selectionModel != 0) {
         view->setSelectionModel(m_selectionModel);
     } else {
         m_selectionModel = view->selectionModel();
-    }
+    }*/
 
     m_selectionChangedTimer = new QTimer(this);
     m_selectionChangedTimer->setSingleShot(true);
@@ -1381,7 +1381,7 @@ void DolphinView::initializeView()
 
     // reparent the selection model, as it should not be deleted
     // when deleting the model
-    m_selectionModel->setParent(this);
+    //m_selectionModel->setParent(this);
 
     view->setSelectionMode(QAbstractItemView::ExtendedSelection);
 
index 91f9ff466771442adda015b321d37539a58afb3f..b4b37983b04f9d2e1650055acf51fcfb2ee9b26a 100644 (file)
@@ -22,6 +22,8 @@
 #include "dolphincontroller.h"
 #include "dolphinsortfilterproxymodel.h"
 #include "dolphinview.h"
+#include "dolphinviewautoscroller.h"
+#include "selectionmanager.h"
 #include "settings/dolphinsettings.h"
 #include "tooltips/tooltipmanager.h"
 
@@ -35,9 +37,14 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
     QObject(view),
     m_controller(controller),
     m_toolTipManager(0),
-    m_previewGenerator(0)
+    m_previewGenerator(0),
+    m_selectionManager(0),
+    m_autoScroller(0)
 {
-    if (DolphinSettings::instance().generalSettings()->showToolTips()) {
+    GeneralSettings* settings = DolphinSettings::instance().generalSettings();
+
+    // initialize tooltips
+    if (settings->showToolTips()) {
         DolphinSortFilterProxyModel* proxyModel = static_cast<DolphinSortFilterProxyModel*>(view->model());
         m_toolTipManager = new ToolTipManager(view, proxyModel);
 
@@ -45,23 +52,57 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
                 m_toolTipManager, SLOT(hideTip()));
     }
 
+    // initialize preview generator
     m_previewGenerator = new KFilePreviewGenerator(view);
     m_previewGenerator->setPreviewShown(controller->dolphinView()->showPreview());
     connect(controller, SIGNAL(zoomLevelChanged(int)),
-            this, SLOT(updateIcons()));
+            this, SLOT(slotZoomLevelChanged()));
     connect(controller, SIGNAL(cancelPreviews()),
             this, SLOT(cancelPreviews()));
     connect(controller->dolphinView(), SIGNAL(showPreviewChanged()),
             this, SLOT(slotShowPreviewChanged()));
+
+    // initialize selection manager
+    if (settings->showSelectionToggle()) {
+        m_selectionManager = new SelectionManager(view);
+        connect(m_selectionManager, SIGNAL(selectionChanged()),
+                this, SLOT(requestActivation()));
+        connect(controller, SIGNAL(urlChanged(const KUrl&)),
+                m_selectionManager, SLOT(reset()));
+    }
+
+    // initialize auto scroller
+    m_autoScroller = new DolphinViewAutoScroller(view);
+    connect(controller, SIGNAL(currentIndexChanged(QModelIndex, QModelIndex)),
+            m_autoScroller, SLOT(handleCurrentIndexChanged(QModelIndex, QModelIndex)));
+
+    view->viewport()->installEventFilter(this);
 }
 
 ViewExtensionsFactory::~ViewExtensionsFactory()
 {
 }
 
-void ViewExtensionsFactory::updateIcons()
+void ViewExtensionsFactory::handleCurrentIndexChange(const QModelIndex& current, const QModelIndex& previous)
+{
+    m_autoScroller->handleCurrentIndexChange(current, previous);
+}
+
+bool ViewExtensionsFactory::eventFilter(QObject* watched, QEvent* event)
+{
+    Q_UNUSED(watched);
+    if ((event->type() == QEvent::Wheel) && (m_selectionManager != 0)) {
+        m_selectionManager->reset();
+    }
+    return false;
+}
+
+void ViewExtensionsFactory::slotZoomLevelChanged()
 {
     m_previewGenerator->updateIcons();
+    if (m_selectionManager != 0) {
+        m_selectionManager->reset();
+    }
 }
 
 void ViewExtensionsFactory::cancelPreviews()
@@ -75,5 +116,10 @@ void ViewExtensionsFactory::slotShowPreviewChanged()
     m_previewGenerator->setPreviewShown(show);
 }
 
+void ViewExtensionsFactory::requestActivation()
+{
+    m_controller->requestActivation();
+}
+
 #include "viewextensionsfactory.moc"
 
index e89a7ce368af8b6ff2536d11722f3f78032d435a..e5e8056b733ebf890cf5ea2d94cd8db09f6af4c0 100644 (file)
 #include <QObject>
 
 class DolphinController;
+class DolphinViewAutoScroller;
 class KFilePreviewGenerator;
+class QModelIndex;
+class SelectionManager;
 class ToolTipManager;
 class QAbstractItemView;
 
@@ -40,28 +43,33 @@ class ViewExtensionsFactory : public QObject
 {
     Q_OBJECT
 
-    public:
-        explicit ViewExtensionsFactory(QAbstractItemView* view,
-                                       DolphinController* controller);
-        virtual ~ViewExtensionsFactory();
+public:
+    explicit ViewExtensionsFactory(QAbstractItemView* view,
+                                   DolphinController* controller);
+    virtual ~ViewExtensionsFactory();
 
-    private slots:
-        /**
-         * Tells the preview generator to update all icons.
-         */
-        void updateIcons();
+    /**
+     * Must be invoked by the item view, when QAbstractItemView::currentChanged()
+     * has been called. Assures that the current item stays visible when it has been
+     * changed by the keyboard.
+     */
+    void handleCurrentIndexChange(const QModelIndex& current, const QModelIndex& previous);
 
-        /**
-         * Tells the preview generator to cancel all pending previews.
-         */
-        void cancelPreviews();
+protected:
+    virtual bool eventFilter(QObject* watched, QEvent* event);
 
-        void slotShowPreviewChanged();
+private slots:
+    void slotZoomLevelChanged();
+    void cancelPreviews();
+    void slotShowPreviewChanged();
+    void requestActivation();
 
-    private:
-        DolphinController* m_controller;
-        ToolTipManager* m_toolTipManager;        
-        KFilePreviewGenerator* m_previewGenerator;
+private:
+    DolphinController* m_controller;
+    ToolTipManager* m_toolTipManager;
+    KFilePreviewGenerator* m_previewGenerator;
+    SelectionManager* m_selectionManager;
+    DolphinViewAutoScroller* m_autoScroller;
 };
 
 #endif