X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/be9746e87bb6a42e641dbf36c528a60fb564420a..123e5008ae1feba49a4a2d2ca5cf3bf97fda30ac:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ebc0bd43e..3e22ba1d3 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -21,7 +21,7 @@ #include "dolphinmainwindow.h" -#include +#include #include "dolphinapplication.h" #include "dolphinnewmenu.h" @@ -83,8 +83,8 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_id(id) { setObjectName("Dolphin"); - m_viewContainer[PrimaryIdx] = 0; - m_viewContainer[SecondaryIdx] = 0; + m_viewContainer[PrimaryView] = 0; + m_viewContainer[SecondaryView] = 0; new MainWindowAdaptor(this); QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this); @@ -98,6 +98,8 @@ DolphinMainWindow::DolphinMainWindow(int id) : this, SLOT(slotUndoAvailable(bool))); connect(undoManager, SIGNAL(undoTextChanged(const QString&)), this, SLOT(slotUndoTextChanged(const QString&))); + connect(DolphinSettings::instance().placesModel(), SIGNAL(errorMessage(const QString&)), + this, SLOT(slotHandlePlacesError(const QString&))); } DolphinMainWindow::~DolphinMainWindow() @@ -106,25 +108,43 @@ DolphinMainWindow::~DolphinMainWindow() DolphinApplication::app()->removeMainWindow(this); } -void DolphinMainWindow::setActiveView(DolphinViewContainer* view) +void DolphinMainWindow::toggleViews() { - Q_ASSERT((view == m_viewContainer[PrimaryIdx]) || (view == m_viewContainer[SecondaryIdx])); - if (m_activeViewContainer == view) { + if (m_viewContainer[SecondaryView] == 0) { return; } - m_activeViewContainer->setActive(false); - m_activeViewContainer = view; - m_activeViewContainer->setActive(true); + // move secondary view from the last position of the splitter + // to the first position + m_splitter->insertWidget(0, m_viewContainer[SecondaryView]); - updateHistory(); - updateEditActions(); - updateViewActions(); - updateGoActions(); + DolphinViewContainer* container = m_viewContainer[PrimaryView]; + m_viewContainer[PrimaryView] = m_viewContainer[SecondaryView]; + m_viewContainer[SecondaryView] = container; +} + +void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl) +{ + clearStatusBar(); + KonqOperations::rename(this, oldUrl, newUrl); + m_undoCommandTypes.append(KonqUndoManager::RENAME); +} + +void DolphinMainWindow::refreshViews() +{ + Q_ASSERT(m_viewContainer[PrimaryView] != 0); - setCaption(m_activeViewContainer->url().fileName()); + // remember the current active view, as because of + // the refreshing the active view might change to + // the secondary view + DolphinViewContainer* activeViewContainer = m_activeViewContainer; - emit activeViewChanged(); + m_viewContainer[PrimaryView]->view()->refresh(); + if (m_viewContainer[SecondaryView] != 0) { + m_viewContainer[SecondaryView]->view()->refresh(); + } + + setActiveViewContainer(activeViewContainer); } void DolphinMainWindow::dropUrls(const KUrl::List& urls, @@ -201,34 +221,11 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls, } } -void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl) -{ - clearStatusBar(); - KonqOperations::rename(this, oldUrl, newUrl); - m_undoCommandTypes.append(KonqUndoManager::RENAME); -} - -void DolphinMainWindow::refreshViews() -{ - Q_ASSERT(m_viewContainer[PrimaryIdx] != 0); - - // remember the current active view, as because of - // the refreshing the active view might change to - // the secondary view - DolphinViewContainer* activeViewContainer = m_activeViewContainer; - - m_viewContainer[PrimaryIdx]->view()->refresh(); - if (m_viewContainer[SecondaryIdx] != 0) { - m_viewContainer[SecondaryIdx]->view()->refresh(); - } - - setActiveView(activeViewContainer); -} - void DolphinMainWindow::changeUrl(const KUrl& url) { - if (activeViewContainer() != 0) { - activeViewContainer()->setUrl(url); + DolphinViewContainer* view = activeViewContainer(); + if (view != 0) { + view->setUrl(url); updateEditActions(); updateViewActions(); updateGoActions(); @@ -264,11 +261,11 @@ void DolphinMainWindow::slotShowHiddenFilesChanged() void DolphinMainWindow::slotCategorizedSortingChanged() { - KToggleAction* categorizedSortingAction = - static_cast(actionCollection()->action("categorized")); + KToggleAction* showInGroupsAction = + static_cast(actionCollection()->action("show_in_groups")); const DolphinView* view = m_activeViewContainer->view(); - categorizedSortingAction->setChecked(view->categorizedSorting()); - categorizedSortingAction->setEnabled(view->supportsCategorizedSorting()); + showInGroupsAction->setChecked(view->categorizedSorting()); + showInGroupsAction->setEnabled(view->supportsCategorizedSorting()); } void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting) @@ -295,6 +292,15 @@ void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting) break; case DolphinView::SortByType: action = actionCollection()->action("by_type"); + break; +#ifdef HAVE_NEPOMUK + case DolphinView::SortByRating: + action = actionCollection()->action("by_rating"); + break; + case DolphinView::SortByTags: + action = actionCollection()->action("by_tags"); + break; +#endif default: break; } @@ -346,10 +352,10 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) { updateEditActions(); - Q_ASSERT(m_viewContainer[PrimaryIdx] != 0); - int selectedUrlsCount = m_viewContainer[PrimaryIdx]->view()->selectedUrls().count(); - if (m_viewContainer[SecondaryIdx] != 0) { - selectedUrlsCount += m_viewContainer[SecondaryIdx]->view()->selectedUrls().count(); + Q_ASSERT(m_viewContainer[PrimaryView] != 0); + int selectedUrlsCount = m_viewContainer[PrimaryView]->view()->selectedUrls().count(); + if (m_viewContainer[SecondaryView] != 0) { + selectedUrlsCount += m_viewContainer[SecondaryView]->view()->selectedUrls().count(); } QAction* compareFilesAction = actionCollection()->action("compare_files"); @@ -384,11 +390,17 @@ void DolphinMainWindow::openNewMainWindow() void DolphinMainWindow::toggleActiveView() { - if (m_activeViewContainer == m_viewContainer[PrimaryIdx]) { - setActiveView(m_viewContainer[SecondaryIdx]); - } else { - setActiveView(m_viewContainer[PrimaryIdx]); + if (m_viewContainer[SecondaryView] == 0) { + // only one view is available + return; } + + Q_ASSERT(m_activeViewContainer != 0); + Q_ASSERT(m_viewContainer[PrimaryView] != 0); + + DolphinViewContainer* left = m_viewContainer[PrimaryView]; + DolphinViewContainer* right = m_viewContainer[SecondaryView]; + setActiveViewContainer(m_activeViewContainer == right ? left : right); } void DolphinMainWindow::closeEvent(QCloseEvent* event) @@ -405,31 +417,31 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) void DolphinMainWindow::saveProperties(KConfig* config) { KConfigGroup primaryView = config->group("Primary view"); - primaryView.writeEntry("Url", m_viewContainer[PrimaryIdx]->url().url()); - primaryView.writeEntry("Editable Url", m_viewContainer[PrimaryIdx]->isUrlEditable()); - if (m_viewContainer[SecondaryIdx] != 0) { + primaryView.writeEntry("Url", m_viewContainer[PrimaryView]->url().url()); + primaryView.writeEntry("Editable Url", m_viewContainer[PrimaryView]->isUrlEditable()); + if (m_viewContainer[SecondaryView] != 0) { KConfigGroup secondaryView = config->group("Secondary view"); - secondaryView.writeEntry("Url", m_viewContainer[SecondaryIdx]->url().url()); - secondaryView.writeEntry("Editable Url", m_viewContainer[SecondaryIdx]->isUrlEditable()); + secondaryView.writeEntry("Url", m_viewContainer[SecondaryView]->url().url()); + secondaryView.writeEntry("Editable Url", m_viewContainer[SecondaryView]->isUrlEditable()); } } void DolphinMainWindow::readProperties(KConfig* config) { const KConfigGroup primaryViewGroup = config->group("Primary view"); - m_viewContainer[PrimaryIdx]->setUrl(primaryViewGroup.readEntry("Url")); + m_viewContainer[PrimaryView]->setUrl(primaryViewGroup.readEntry("Url")); bool editable = primaryViewGroup.readEntry("Editable Url", false); - m_viewContainer[PrimaryIdx]->urlNavigator()->setUrlEditable(editable); + m_viewContainer[PrimaryView]->urlNavigator()->setUrlEditable(editable); if (config->hasGroup("Secondary view")) { const KConfigGroup secondaryViewGroup = config->group("Secondary view"); - if (m_viewContainer[PrimaryIdx] == 0) { + if (m_viewContainer[PrimaryView] == 0) { toggleSplitView(); } - m_viewContainer[PrimaryIdx]->setUrl(secondaryViewGroup.readEntry("Url")); + m_viewContainer[PrimaryView]->setUrl(secondaryViewGroup.readEntry("Url")); editable = secondaryViewGroup.readEntry("Editable Url", false); - m_viewContainer[PrimaryIdx]->urlNavigator()->setUrlEditable(editable); - } else if (m_viewContainer[SecondaryIdx] != 0) { + m_viewContainer[PrimaryView]->urlNavigator()->setUrlEditable(editable); + } else if (m_viewContainer[SecondaryView] != 0) { toggleSplitView(); } } @@ -485,6 +497,14 @@ void DolphinMainWindow::quit() close(); } +void DolphinMainWindow::slotHandlePlacesError(const QString &message) +{ + if (!message.isEmpty()) { + DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); + statusBar->setMessage(message, DolphinStatusBar::Error); + } +} + void DolphinMainWindow::slotHandleJobError(KJob* job) { if (job->error() != 0) { @@ -717,6 +737,20 @@ void DolphinMainWindow::sortByType() m_activeViewContainer->view()->setSorting(DolphinView::SortByType); } +void DolphinMainWindow::sortByRating() +{ +#ifdef HAVE_NEPOMUK + m_activeViewContainer->view()->setSorting(DolphinView::SortByRating); +#endif +} + +void DolphinMainWindow::sortByTags() +{ +#ifdef HAVE_NEPOMUK + m_activeViewContainer->view()->setSorting(DolphinView::SortByTags); +#endif +} + void DolphinMainWindow::toggleSortOrder() { DolphinView* view = m_activeViewContainer->view(); @@ -758,28 +792,28 @@ void DolphinMainWindow::showDateInfo() void DolphinMainWindow::toggleSplitView() { - if (m_viewContainer[SecondaryIdx] == 0) { - const int newWidth = (m_viewContainer[PrimaryIdx]->width() - m_splitter->handleWidth()) / 2; + if (m_viewContainer[SecondaryView] == 0) { + const int newWidth = (m_viewContainer[PrimaryView]->width() - m_splitter->handleWidth()) / 2; // create a secondary view - const DolphinView* view = m_viewContainer[PrimaryIdx]->view(); - m_viewContainer[SecondaryIdx] = new DolphinViewContainer(this, + const DolphinView* view = m_viewContainer[PrimaryView]->view(); + m_viewContainer[SecondaryView] = new DolphinViewContainer(this, 0, - view->rootUrl(), - view->mode(), - view->showHiddenFiles()); - connectViewSignals(SecondaryIdx); - m_splitter->addWidget(m_viewContainer[SecondaryIdx]); + view->rootUrl()); + connectViewSignals(SecondaryView); + m_splitter->addWidget(m_viewContainer[SecondaryView]); m_splitter->setSizes(QList() << newWidth << newWidth); - m_viewContainer[SecondaryIdx]->view()->reload(); - m_viewContainer[SecondaryIdx]->setActive(false); - m_viewContainer[SecondaryIdx]->show(); + m_viewContainer[SecondaryView]->view()->reload(); + m_viewContainer[SecondaryView]->setActive(false); + m_viewContainer[SecondaryView]->show(); } else { // remove secondary view - m_viewContainer[SecondaryIdx]->close(); - m_viewContainer[SecondaryIdx]->deleteLater(); - m_viewContainer[SecondaryIdx] = 0; + m_viewContainer[SecondaryView]->close(); + m_viewContainer[SecondaryView]->deleteLater(); + m_viewContainer[SecondaryView] = 0; } - setActiveView(m_viewContainer[PrimaryIdx]); + + setActiveViewContainer(m_viewContainer[PrimaryView]); + updateViewActions(); emit activeViewChanged(); } @@ -790,7 +824,8 @@ void DolphinMainWindow::reloadView() } void DolphinMainWindow::stopLoading() -{} +{ +} void DolphinMainWindow::togglePreview() { @@ -892,16 +927,16 @@ void DolphinMainWindow::compareFiles() // - both in the secondary view // - one in the primary view and the other in the secondary // view - Q_ASSERT(m_viewContainer[PrimaryIdx] != 0); + Q_ASSERT(m_viewContainer[PrimaryView] != 0); KUrl urlA; KUrl urlB; - KUrl::List urls = m_viewContainer[PrimaryIdx]->view()->selectedUrls(); + KUrl::List urls = m_viewContainer[PrimaryView]->view()->selectedUrls(); switch (urls.count()) { case 0: { - Q_ASSERT(m_viewContainer[SecondaryIdx] != 0); - urls = m_viewContainer[SecondaryIdx]->view()->selectedUrls(); + Q_ASSERT(m_viewContainer[SecondaryView] != 0); + urls = m_viewContainer[SecondaryView]->view()->selectedUrls(); Q_ASSERT(urls.count() == 2); urlA = urls[0]; urlB = urls[1]; @@ -910,8 +945,8 @@ void DolphinMainWindow::compareFiles() case 1: { urlA = urls[0]; - Q_ASSERT(m_viewContainer[SecondaryIdx] != 0); - urls = m_viewContainer[SecondaryIdx]->view()->selectedUrls(); + Q_ASSERT(m_viewContainer[SecondaryView] != 0); + urls = m_viewContainer[SecondaryView]->view()->selectedUrls(); Q_ASSERT(urls.count() == 1); urlB = urls[0]; break; @@ -966,16 +1001,14 @@ void DolphinMainWindow::init() const KUrl& homeUrl = settings.generalSettings()->homeUrl(); setCaption(homeUrl.fileName()); ViewProperties props(homeUrl); - m_viewContainer[PrimaryIdx] = new DolphinViewContainer(this, - m_splitter, - homeUrl, - props.viewMode(), - props.showHiddenFiles()); + m_viewContainer[PrimaryView] = new DolphinViewContainer(this, + m_splitter, + homeUrl); - m_activeViewContainer = m_viewContainer[PrimaryIdx]; - connectViewSignals(PrimaryIdx); - m_viewContainer[PrimaryIdx]->view()->reload(); - m_viewContainer[PrimaryIdx]->show(); + m_activeViewContainer = m_viewContainer[PrimaryView]; + connectViewSignals(PrimaryView); + m_viewContainer[PrimaryView]->view()->reload(); + m_viewContainer[PrimaryView]->show(); setCentralWidget(m_splitter); setupDockWidgets(); @@ -992,13 +1025,18 @@ void DolphinMainWindow::init() updatePasteAction(); updateGoActions(); - loadSettings(); + const bool split = generalSettings->splitView(); + if (split) { + toggleSplitView(); + } + updateSplitAction(split); + updateViewActions(); if (firstRun) { // assure a proper default size if Dolphin runs the first time resize(700, 500); } -#ifdef HAVE_KMETADATA +#ifdef HAVE_NEPOMUK if (!MetaDataWidget::metaDataAvailable()) activeViewContainer()->statusBar()->setMessage(i18n("Failed to contact Nepomuk service, annotation and tagging are disabled."), DolphinStatusBar::Error); #endif @@ -1006,11 +1044,28 @@ void DolphinMainWindow::init() emit urlChanged(homeUrl); } -void DolphinMainWindow::loadSettings() +void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* view) { - GeneralSettings* settings = DolphinSettings::instance().generalSettings(); - updateSplitAction(settings->splitView()); + Q_ASSERT(view != 0); + Q_ASSERT((view == m_viewContainer[PrimaryView]) || (view == m_viewContainer[SecondaryView])); + if (m_activeViewContainer == view) { + return; + } + + m_activeViewContainer->setActive(false); + m_activeViewContainer = view; + m_activeViewContainer->setActive(true); + + updateHistory(); + updateEditActions(); updateViewActions(); + updateGoActions(); + + const KUrl& url = m_activeViewContainer->url(); + setCaption(url.fileName()); + + emit activeViewChanged(); + emit urlChanged(url); } void DolphinMainWindow::setupActions() @@ -1132,6 +1187,26 @@ void DolphinMainWindow::setupActions() sortByType->setText(i18n("By Type")); connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType())); + KToggleAction* sortByRating = actionCollection()->add("by_rating"); + sortByRating->setText(i18n("By Rating")); + + KToggleAction* sortByTags = actionCollection()->add("by_tags"); + sortByTags->setText(i18n("By Tags")); + +#ifdef HAVE_NEPOMUK + if (MetaDataWidget::metaDataAvailable()) { + connect(sortByRating, SIGNAL(triggered()), this, SLOT(sortByRating())); + connect(sortByTags, SIGNAL(triggered()), this, SLOT(sortByTags())); + } + else { + sortByRating->setEnabled(false); + sortByTags->setEnabled(false); + } +#else + sortByRating->setEnabled(false); + sortByTags->setEnabled(false); +#endif + QActionGroup* sortGroup = new QActionGroup(this); sortGroup->addAction(sortByName); sortGroup->addAction(sortBySize); @@ -1140,14 +1215,16 @@ void DolphinMainWindow::setupActions() sortGroup->addAction(sortByOwner); sortGroup->addAction(sortByGroup); sortGroup->addAction(sortByType); + sortGroup->addAction(sortByRating); + sortGroup->addAction(sortByTags); KToggleAction* sortDescending = actionCollection()->add("descending"); sortDescending->setText(i18n("Descending")); connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder())); - KToggleAction* sortCategorized = actionCollection()->add("categorized"); - sortCategorized->setText(i18n("Show in Groups")); - connect(sortCategorized, SIGNAL(triggered()), this, SLOT(toggleSortCategorization())); + KToggleAction* showInGroups = actionCollection()->add("show_in_groups"); + showInGroups->setText(i18n("Show in Groups")); + connect(showInGroups, SIGNAL(triggered()), this, SLOT(toggleSortCategorization())); KToggleAction* clearInfo = actionCollection()->add("clear_info"); clearInfo->setText(i18n("No Information")); @@ -1419,7 +1496,7 @@ void DolphinMainWindow::updateViewActions() static_cast(actionCollection()->action("show_hidden_files")); showHiddenFilesAction->setChecked(view->showHiddenFiles()); - updateSplitAction(m_viewContainer[SecondaryIdx] != 0); + updateSplitAction(m_viewContainer[SecondaryView] != 0); KToggleAction* editableLocactionAction = static_cast(actionCollection()->action("editable_location"));