X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/8e68c4235daee7ab269f6b497a28ea15b11ac543..509464cce954f7fc4b00a9dafc2bc6355eb99ec6:/src/views/dolphinview.cpp diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index f738dc078..05849729f 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -88,6 +88,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_isFolderWritable(true), m_dragging(false), m_url(url), + m_viewPropertiesContext(), m_mode(DolphinView::IconsView), m_visibleRoles(), m_topLayout(0), @@ -97,8 +98,8 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_toolTipManager(0), m_selectionChangedTimer(0), m_currentItemUrl(), + m_scrollToCurrentItem(false), m_restoredContentsPosition(), - m_createdItemUrl(), m_selectedUrls(), m_versionControlObserver(0) { @@ -159,6 +160,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : connect(m_model, SIGNAL(infoMessage(QString)), this, SIGNAL(infoMessage(QString))); connect(m_model, SIGNAL(errorMessage(QString)), this, SIGNAL(errorMessage(QString))); connect(m_model, SIGNAL(directoryRedirection(KUrl,KUrl)), this, SLOT(slotDirectoryRedirection(KUrl,KUrl))); + connect(m_model, SIGNAL(urlIsFileError(KUrl)), this, SIGNAL(urlIsFileError(KUrl))); m_view->installEventFilter(this); connect(m_view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), @@ -236,7 +238,7 @@ bool DolphinView::isActive() const void DolphinView::setMode(Mode mode) { if (mode != m_mode) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setViewMode(mode); props.save(); @@ -255,11 +257,17 @@ void DolphinView::setPreviewsShown(bool show) return; } - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setPreviewsShown(show); + const int oldZoomLevel = m_view->zoomLevel(); m_view->setPreviewsShown(show); emit previewsShownChanged(show); + + const int newZoomLevel = m_view->zoomLevel(); + if (newZoomLevel != oldZoomLevel) { + emit zoomLevelChanged(newZoomLevel, oldZoomLevel); + } } bool DolphinView::previewsShown() const @@ -277,7 +285,7 @@ void DolphinView::setHiddenFilesShown(bool show) m_selectedUrls.clear(); m_selectedUrls = itemList.urlList(); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setHiddenFilesShown(show); m_model->setShowHiddenFiles(show); @@ -295,7 +303,7 @@ void DolphinView::setGroupedSorting(bool grouped) return; } - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setGroupedSorting(grouped); props.save(); @@ -355,6 +363,7 @@ void DolphinView::markUrlsAsSelected(const QList& urls) void DolphinView::markUrlAsCurrent(const KUrl& url) { m_currentItemUrl = url; + m_scrollToCurrentItem = true; } void DolphinView::selectItems(const QRegExp& pattern, bool enabled) @@ -381,6 +390,7 @@ void DolphinView::setZoomLevel(int level) const int oldZoomLevel = zoomLevel(); m_view->setZoomLevel(level); if (zoomLevel() != oldZoomLevel) { + hideToolTip(); emit zoomLevelChanged(zoomLevel(), oldZoomLevel); } } @@ -431,7 +441,7 @@ void DolphinView::setVisibleRoles(const QList& roles) { const QList previousRoles = roles; - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setVisibleRoles(roles); m_visibleRoles = roles; @@ -500,6 +510,16 @@ QString DolphinView::nameFilter() const return m_model->nameFilter(); } +void DolphinView::setMimeTypeFilters(const QStringList& filters) +{ + return m_model->setMimeTypeFilters(filters); +} + +QStringList DolphinView::mimeTypeFilters() const +{ + return m_model->mimeTypeFilters(); +} + QString DolphinView::statusBarText() const { QString summary; @@ -615,9 +635,9 @@ void DolphinView::renameSelectedItems() return; } - if (items.count() == 1) { + if (items.count() == 1 && GeneralSettings::renameInline()) { const int index = m_model->index(items.first()); - m_container->controller()->view()->editRole(index, "text"); + m_view->editRole(index, "text"); } else { RenameDialog* dialog = new RenameDialog(this, items); dialog->setAttribute(Qt::WA_DeleteOnClose); @@ -733,6 +753,20 @@ void DolphinView::hideEvent(QHideEvent* event) QWidget::hideEvent(event); } +bool DolphinView::event(QEvent* event) +{ + /* See Bug 297355 + * Dolphin leaves file preview tooltips open even when is not visible. + * + * Hide tool-tip when Dolphin loses focus. + */ + if (event->type() == QEvent::WindowDeactivate) { + hideToolTip(); + } + + return QWidget::event(event); +} + void DolphinView::activate() { setActive(true); @@ -758,6 +792,14 @@ void DolphinView::slotItemsActivated(const QSet& indexes) items.append(m_model->fileItem(index)); } + if (items.count() > 5) { + QString question = QString("Are you sure you want to open %1 items?").arg(items.count()); + const int answer = KMessageBox::warningYesNo(this, question); + if (answer != KMessageBox::Yes) { + return; + } + } + foreach (const KFileItem& item, items) { if (item.isDir()) { emit tabRequested(item.url()); @@ -788,7 +830,7 @@ void DolphinView::slotViewContextMenuRequested(const QPointF& pos) void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); QPointer menu = new KMenu(QApplication::activeWindow()); @@ -905,7 +947,7 @@ void DolphinView::slotHeaderColumnWidthChanged(const QByteArray& role, qreal cur const QList visibleRoles = m_view->visibleRoles(); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); QList columnWidths = props.headerColumnWidths(); if (columnWidths.count() != visibleRoles.count()) { columnWidths.clear(); @@ -1031,7 +1073,7 @@ void DolphinView::emitSelectionChangedSignal() void DolphinView::updateSortRole(const QByteArray& role) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortRole(role); KItemModelBase* model = m_container->controller()->model(); @@ -1042,7 +1084,7 @@ void DolphinView::updateSortRole(const QByteArray& role) void DolphinView::updateSortOrder(Qt::SortOrder order) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortOrder(order); m_model->setSortOrder(order); @@ -1052,7 +1094,7 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) void DolphinView::updateSortFoldersFirst(bool foldersFirst) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortFoldersFirst(foldersFirst); m_model->setSortDirectoriesFirst(foldersFirst); @@ -1121,27 +1163,20 @@ KFileItem DolphinView::rootItem() const return m_model->rootItem(); } -void DolphinView::observeCreatedItem(const KUrl& url) +void DolphinView::setViewPropertiesContext(const QString& context) { - m_createdItemUrl = url; - connect(m_model, SIGNAL(directoryLoadingCompleted()), - this, SLOT(selectAndScrollToCreatedItem())); + m_viewPropertiesContext = context; } -void DolphinView::selectAndScrollToCreatedItem() +QString DolphinView::viewPropertiesContext() const { - KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager(); - const int index = m_model->index(m_createdItemUrl); - if (index != -1) { - selectionManager->setCurrentItem(index); - selectionManager->clearSelection(); - selectionManager->setSelected(index); - m_view->scrollToItem(index); - } + return m_viewPropertiesContext; +} - disconnect(m_model, SIGNAL(directoryLoadingCompleted()), - this, SLOT(selectAndScrollToCreatedItem())); - m_createdItemUrl = KUrl(); +void DolphinView::observeCreatedItem(const KUrl& url) +{ + markUrlAsCurrent(url); + markUrlsAsSelected(QList() << url); } void DolphinView::slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl) @@ -1159,6 +1194,12 @@ void DolphinView::updateViewState() const int currentIndex = m_model->index(m_currentItemUrl); if (currentIndex != -1) { selectionManager->setCurrentItem(currentIndex); + + // scroll to current item and reset the state + if (m_scrollToCurrentItem) { + m_view->scrollToItem(currentIndex); + m_scrollToCurrentItem = false; + } } else { selectionManager->setCurrentItem(0); } @@ -1267,7 +1308,7 @@ void DolphinView::slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOr Q_UNUSED(previous); Q_ASSERT(m_model->sortOrder() == current); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortOrder(current); emit sortOrderChanged(current); @@ -1278,7 +1319,7 @@ void DolphinView::slotSortRoleChangedByHeader(const QByteArray& current, const Q Q_UNUSED(previous); Q_ASSERT(m_model->sortRole() == current); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortRole(current); emit sortRoleChanged(current); @@ -1294,7 +1335,7 @@ void DolphinView::slotVisibleRolesChangedByHeader(const QList& curre m_visibleRoles = current; - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setVisibleRoles(m_visibleRoles); emit visibleRolesChanged(m_visibleRoles, previousVisibleRoles); @@ -1302,11 +1343,21 @@ void DolphinView::slotVisibleRolesChangedByHeader(const QList& curre void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value) { + if (index < 0 || index >= m_model->count()) { + return; + } + if (role == "text") { - const KFileItem item = m_model->fileItem(index); + const KFileItem oldItem = m_model->fileItem(index); const QString newName = value.toString(); - if (!newName.isEmpty() && newName != item.text() && newName != QLatin1String(".") && newName != QLatin1String("..")) { - KonqOperations::rename(this, item.url(), newName); + if (!newName.isEmpty() && newName != oldItem.text() && newName != QLatin1String(".") && newName != QLatin1String("..")) { + const KUrl oldUrl = oldItem.url(); + + QHash data; + data.insert(role, value); + m_model->setData(index, data); + + KonqOperations::rename(this, oldUrl, newName); } } } @@ -1334,7 +1385,7 @@ void DolphinView::applyViewProperties() { m_view->beginTransaction(); - const ViewProperties props(url()); + const ViewProperties props(viewPropertiesUrl()); const Mode mode = props.viewMode(); if (m_mode != mode) { @@ -1447,7 +1498,7 @@ KUrl::List DolphinView::simplifiedSelectedUrls() const KUrl::List urls; const KFileItemList items = selectedItems(); - foreach (const KFileItem &item, items) { + foreach (const KFileItem& item, items) { urls.append(item.url()); } @@ -1472,7 +1523,7 @@ void DolphinView::markPastedUrlsAsSelected(const QMimeData* mimeData) const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData); KUrl::List destUrls; foreach (const KUrl& source, sourceUrls) { - KUrl destination(url().url() + "/" + source.fileName()); + KUrl destination(url().url() + '/' + source.fileName()); destUrls << destination; } markUrlsAsSelected(destUrls); @@ -1493,4 +1544,16 @@ void DolphinView::updateWritableState() } } +KUrl DolphinView::viewPropertiesUrl() const +{ + if (m_viewPropertiesContext.isEmpty()) { + return m_url; + } + + KUrl url; + url.setProtocol(m_url.protocol()); + url.setPath(m_viewPropertiesContext); + return url; +} + #include "dolphinview.moc"