From: Peter Penz Date: Sat, 29 Aug 2009 11:36:22 +0000 (+0000) Subject: move handling of SelectionManager and AutoScroller to ViewExtensionsFactory X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/95f0ba76ae26e45a6ff9f1ec51db7d270ca278c0 move handling of SelectionManager and AutoScroller to ViewExtensionsFactory svn path=/trunk/KDE/kdebase/apps/; revision=1016927 --- diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index c3cf10f38..05544405b 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -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(); } diff --git a/src/dolphincolumnview.h b/src/dolphincolumnview.h index 1dc154358..3d7432bd4 100644 --- a/src/dolphincolumnview.h +++ b/src/dolphincolumnview.h @@ -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 diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 83bc7cdd3..460afd359 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -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(); } diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index 562b6d264..a099d96e7 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -26,9 +26,8 @@ #include 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; diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 2670aab82..efbcfd6fb 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -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 diff --git a/src/dolphiniconsview.h b/src/dolphiniconsview.h index d94a00e71..5c9392425 100644 --- a/src/dolphiniconsview.h +++ b/src/dolphiniconsview.h @@ -32,10 +32,9 @@ #include 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; diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 42305be1f..2af260f24 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -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); diff --git a/src/viewextensionsfactory.cpp b/src/viewextensionsfactory.cpp index 91f9ff466..b4b37983b 100644 --- a/src/viewextensionsfactory.cpp +++ b/src/viewextensionsfactory.cpp @@ -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(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" diff --git a/src/viewextensionsfactory.h b/src/viewextensionsfactory.h index e89a7ce36..e5e8056b7 100644 --- a/src/viewextensionsfactory.h +++ b/src/viewextensionsfactory.h @@ -23,7 +23,10 @@ #include 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