X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/baaab6d17beb78e3209c2d6fa87c04f7b97abfe2..ab39a5952001cdb3d1b9ca693da7f8e246558fb8:/src/viewextensionsfactory.cpp diff --git a/src/viewextensionsfactory.cpp b/src/viewextensionsfactory.cpp index 90517f614..86311e28d 100644 --- a/src/viewextensionsfactory.cpp +++ b/src/viewextensionsfactory.cpp @@ -24,9 +24,11 @@ #include "dolphinsortfilterproxymodel.h" #include "dolphinview.h" #include "dolphinviewautoscroller.h" +#include "folderexpander.h" #include "selectionmanager.h" #include "settings/dolphinsettings.h" #include "tooltips/tooltipmanager.h" +#include "versioncontrol/versioncontrolobserver.h" #include "dolphin_generalsettings.h" @@ -44,8 +46,11 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, m_previewGenerator(0), m_selectionManager(0), m_autoScroller(0), - m_fileItemDelegate(0) -{ + m_fileItemDelegate(0), + m_versionControlObserver(0) +{ + view->setSelectionMode(QAbstractItemView::ExtendedSelection); + GeneralSettings* settings = DolphinSettings::instance().generalSettings(); // initialize tooltips @@ -58,6 +63,7 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, } // initialize preview generator + Q_ASSERT(view->iconSize().isValid()); m_previewGenerator = new KFilePreviewGenerator(view); m_previewGenerator->setPreviewShown(controller->dolphinView()->showPreview()); connect(controller, SIGNAL(zoomLevelChanged(int)), @@ -84,8 +90,19 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, m_fileItemDelegate->setShowToolTipWhenElided(false); view->setItemDelegate(m_fileItemDelegate); - // react on view property changes + // initialize version control observer const DolphinView* dolphinView = controller->dolphinView(); + m_versionControlObserver = new VersionControlObserver(view); + connect(m_versionControlObserver, SIGNAL(infoMessage(const QString&)), + dolphinView, SIGNAL(infoMessage(const QString&))); + connect(m_versionControlObserver, SIGNAL(errorMessage(const QString&)), + dolphinView, SIGNAL(errorMessage(const QString&))); + connect(m_versionControlObserver, SIGNAL(operationCompletedMessage(const QString&)), + dolphinView, SIGNAL(operationCompletedMessage(const QString&))); + connect(controller, SIGNAL(requestVersionControlActions(const KFileItemList&)), + this, SLOT(slotRequestVersionControlActions(const KFileItemList&))); + + // react on view property changes connect(dolphinView, SIGNAL(showHiddenFilesChanged()), this, SLOT(slotShowHiddenFilesChanged())); connect(dolphinView, SIGNAL(sortingChanged(DolphinView::Sorting)), @@ -94,6 +111,23 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, this, SLOT(slotSortOrderChanged(Qt::SortOrder))); connect(dolphinView, SIGNAL(sortFoldersFirstChanged(bool)), this, SLOT(slotSortFoldersFirstChanged(bool))); + + // inform the controller about selection changes + connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), + controller, SLOT(emitSelectionChanged())); + + // Give the view the ability to auto-expand its directories on hovering + // (the column view takes care about this itself). If the details view + // uses expandable folders, the auto-expanding should be used always. + m_folderExpander = new FolderExpander(view, proxyModel()); + m_folderExpander->setEnabled(settings->autoExpandFolders()); + connect(m_folderExpander, SIGNAL(enterDir(const QModelIndex&)), + controller, SLOT(triggerItem(const QModelIndex&))); + + // react on namefilter changes + connect(controller, SIGNAL(nameFilterChanged(const QString&)), + this, SLOT(slotNameFilterChanged(const QString&))); + view->viewport()->installEventFilter(this); } @@ -111,6 +145,16 @@ DolphinFileItemDelegate* ViewExtensionsFactory::fileItemDelegate() const return m_fileItemDelegate; } +void ViewExtensionsFactory::setAutoFolderExpandingEnabled(bool enabled) +{ + m_folderExpander->setEnabled(enabled); +} + +bool ViewExtensionsFactory::autoFolderExpandingEnabled() const +{ + return m_folderExpander->enabled(); +} + bool ViewExtensionsFactory::eventFilter(QObject* watched, QEvent* event) { Q_UNUSED(watched); @@ -170,6 +214,24 @@ void ViewExtensionsFactory::slotSortFoldersFirstChanged(bool foldersFirst) proxyModel()->setSortFoldersFirst(foldersFirst); } +void ViewExtensionsFactory::slotNameFilterChanged(const QString& nameFilter) +{ + proxyModel()->setFilterRegExp(nameFilter); +} + +void ViewExtensionsFactory::slotRequestVersionControlActions(const KFileItemList& items) +{ + QList actions; + if (items.isEmpty()) { + const KDirModel* dirModel = static_cast(proxyModel()->sourceModel()); + const KUrl url = dirModel->dirLister()->url(); + actions = m_versionControlObserver->contextMenuActions(url.path(KUrl::AddTrailingSlash)); + } else { + actions = m_versionControlObserver->contextMenuActions(items); + } + m_controller->setVersionControlActions(actions); +} + void ViewExtensionsFactory::requestActivation() { m_controller->requestActivation();