X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/a5473c0cf255b5846ad85eebc043ebb6551e72d0..87cd992e85effd14938f67c0671ef2e7cb93a8a7:/src/viewextensionsfactory.cpp diff --git a/src/viewextensionsfactory.cpp b/src/viewextensionsfactory.cpp index baaf3524a..e5638c03e 100644 --- a/src/viewextensionsfactory.cpp +++ b/src/viewextensionsfactory.cpp @@ -19,30 +19,40 @@ #include "viewextensionsfactory.h" -#include "dolphincontroller.h" #include "dolphinfileitemdelegate.h" #include "dolphinsortfilterproxymodel.h" #include "dolphinview.h" +#include "dolphinviewcontroller.h" #include "dolphinviewautoscroller.h" +#include "folderexpander.h" #include "selectionmanager.h" #include "settings/dolphinsettings.h" #include "tooltips/tooltipmanager.h" +#include "versioncontrol/versioncontrolobserver.h" +#include "viewmodecontroller.h" #include "dolphin_generalsettings.h" +#include +#include #include #include ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, - DolphinController* controller) : + DolphinViewController* dolphinViewController, + const ViewModeController* viewModeController) : QObject(view), - m_controller(controller), + m_view(view), + m_dolphinViewController(dolphinViewController), m_toolTipManager(0), 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 @@ -50,18 +60,19 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, DolphinSortFilterProxyModel* proxyModel = static_cast(view->model()); m_toolTipManager = new ToolTipManager(view, proxyModel); - connect(controller, SIGNAL(hideToolTip()), + connect(dolphinViewController, SIGNAL(hideToolTip()), m_toolTipManager, SLOT(hideTip())); } // initialize preview generator + Q_ASSERT(view->iconSize().isValid()); m_previewGenerator = new KFilePreviewGenerator(view); - m_previewGenerator->setPreviewShown(controller->dolphinView()->showPreview()); - connect(controller, SIGNAL(zoomLevelChanged(int)), + m_previewGenerator->setPreviewShown(dolphinViewController->view()->showPreview()); + connect(viewModeController, SIGNAL(zoomLevelChanged(int)), this, SLOT(slotZoomLevelChanged())); - connect(controller, SIGNAL(cancelPreviews()), + connect(viewModeController, SIGNAL(cancelPreviews()), this, SLOT(cancelPreviews())); - connect(controller->dolphinView(), SIGNAL(showPreviewChanged()), + connect(dolphinViewController->view(), SIGNAL(showPreviewChanged()), this, SLOT(slotShowPreviewChanged())); // initialize selection manager @@ -69,7 +80,7 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, m_selectionManager = new SelectionManager(view); connect(m_selectionManager, SIGNAL(selectionChanged()), this, SLOT(requestActivation())); - connect(controller, SIGNAL(urlChanged(const KUrl&)), + connect(viewModeController, SIGNAL(urlChanged(const KUrl&)), m_selectionManager, SLOT(reset())); } @@ -81,6 +92,40 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view, m_fileItemDelegate->setShowToolTipWhenElided(false); view->setItemDelegate(m_fileItemDelegate); + // initialize version control observer + const DolphinView* dolphinView = dolphinViewController->view(); + 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(dolphinViewController, 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)), + this, SLOT(slotSortingChanged(DolphinView::Sorting))); + connect(dolphinView, SIGNAL(sortOrderChanged(Qt::SortOrder)), + this, SLOT(slotSortOrderChanged(Qt::SortOrder))); + connect(dolphinView, SIGNAL(sortFoldersFirstChanged(bool)), + this, SLOT(slotSortFoldersFirstChanged(bool))); + + // 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&)), + dolphinViewController, SLOT(triggerItem(const QModelIndex&))); + + // react on namefilter changes + connect(viewModeController, SIGNAL(nameFilterChanged(const QString&)), + this, SLOT(slotNameFilterChanged(const QString&))); + view->viewport()->installEventFilter(this); } @@ -98,6 +143,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); @@ -122,13 +177,67 @@ void ViewExtensionsFactory::cancelPreviews() void ViewExtensionsFactory::slotShowPreviewChanged() { - const bool show = m_controller->dolphinView()->showPreview(); + const bool show = m_dolphinViewController->view()->showPreview(); m_previewGenerator->setPreviewShown(show); } +void ViewExtensionsFactory::slotShowHiddenFilesChanged() +{ + KDirModel* dirModel = static_cast(proxyModel()->sourceModel()); + KDirLister* dirLister = dirModel->dirLister(); + + dirLister->stop(); + + const bool show = m_dolphinViewController->view()->showHiddenFiles(); + dirLister->setShowingDotFiles(show); + + const KUrl url = dirLister->url(); + if (url.isValid()) { + dirLister->openUrl(url, KDirLister::NoFlags); + } +} + +void ViewExtensionsFactory::slotSortingChanged(DolphinView::Sorting sorting) +{ + proxyModel()->setSorting(sorting); +} + +void ViewExtensionsFactory::slotSortOrderChanged(Qt::SortOrder order) +{ + proxyModel()->setSortOrder(order); +} + +void ViewExtensionsFactory::slotSortFoldersFirstChanged(bool foldersFirst) +{ + proxyModel()->setSortFoldersFirst(foldersFirst); +} + +void ViewExtensionsFactory::slotNameFilterChanged(const QString& nameFilter) +{ + proxyModel()->setFilterFixedString(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_dolphinViewController->setVersionControlActions(actions); +} + void ViewExtensionsFactory::requestActivation() { - m_controller->requestActivation(); + m_dolphinViewController->requestActivation(); +} + +DolphinSortFilterProxyModel* ViewExtensionsFactory::proxyModel() const +{ + return static_cast(m_view->model()); } #include "viewextensionsfactory.moc"