X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fa36c3fd1f53a223f43bb57d7c28e431a889a7c2..89a7b316d1a15aec405656ce4dca49463e803bff:/src/panels/information/informationpanel.cpp diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index 4ad1276a5..23e7f1922 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -20,28 +20,36 @@ #include "informationpanel.h" #include "informationpanelcontent.h" + #include #include #include #include +#include + +#include + #include #include #include #include +#include + +#include "dolphin_informationpanelsettings.h" InformationPanel::InformationPanel(QWidget* parent) : Panel(parent), m_initialized(false), - m_infoTimer(0), - m_urlChangedTimer(0), - m_resetUrlTimer(0), + m_infoTimer(nullptr), + m_urlChangedTimer(nullptr), + m_resetUrlTimer(nullptr), m_shownUrl(), m_urlCandidate(), m_invalidUrlCandidate(), m_fileItem(), m_selection(), - m_folderStatJob(0), - m_content(0) + m_folderStatJob(nullptr), + m_content(nullptr) { } @@ -89,7 +97,7 @@ void InformationPanel::requestDelayedItemInfo(const KFileItem& item) if (item.isNull()) { // The cursor is above the viewport. If files are selected, // show information regarding the selection. - if (m_selection.size() > 0) { + if (!m_selection.isEmpty()) { m_fileItem = KFileItem(); m_infoTimer->start(); } @@ -155,11 +163,67 @@ void InformationPanel::resizeEvent(QResizeEvent* event) void InformationPanel::contextMenuEvent(QContextMenuEvent* event) { - // TODO: Move code from InformationPanelContent::configureSettings() here - m_content->configureSettings(customContextMenuActions()); + showContextMenu(event->globalPos()); Panel::contextMenuEvent(event); } +void InformationPanel::showContextMenu(const QPoint &pos) +{ + QMenu popup(this); + + QAction* previewAction = popup.addAction(i18nc("@action:inmenu", "Preview")); + previewAction->setIcon(QIcon::fromTheme(QStringLiteral("view-preview"))); + previewAction->setCheckable(true); + previewAction->setChecked(InformationPanelSettings::previewsShown()); + + QAction* previewAutoPlayAction = popup.addAction(i18nc("@action:inmenu", "Auto-Play media files")); + previewAutoPlayAction->setIcon(QIcon::fromTheme(QStringLiteral("media-playback-start"))); + previewAutoPlayAction->setCheckable(true); + previewAutoPlayAction->setChecked(InformationPanelSettings::previewsAutoPlay()); + + QAction* configureAction = popup.addAction(i18nc("@action:inmenu", "Configure...")); + configureAction->setIcon(QIcon::fromTheme(QStringLiteral("configure"))); + if (m_inConfigurationMode) { + configureAction->setEnabled(false); + } + + QAction* dateformatAction = popup.addAction(i18nc("@action:inmenu", "Condensed Date")); + dateformatAction->setIcon(QIcon::fromTheme(QStringLiteral("change-date-symbolic"))); + dateformatAction->setCheckable(true); + dateformatAction->setChecked(InformationPanelSettings::dateFormat() == static_cast(Baloo::DateFormats::ShortFormat)); + + popup.addSeparator(); + const auto actions = customContextMenuActions(); + for (QAction *action : actions) { + popup.addAction(action); + } + + // Open the popup and adjust the settings for the + // selected action. + QAction* action = popup.exec(pos); + if (!action) { + return; + } + + const bool isChecked = action->isChecked(); + if (action == previewAction) { + InformationPanelSettings::setPreviewsShown(isChecked); + m_content->refreshPreview(); + } else if (action == configureAction) { + m_inConfigurationMode = true; + m_content->configureShownProperties(); + } + if (action == dateformatAction) { + int dateFormat = static_cast(isChecked ? Baloo::DateFormats::ShortFormat : Baloo::DateFormats::LongFormat); + + InformationPanelSettings::setDateFormat(dateFormat); + m_content->refreshMetaData(); + } else if (action == previewAutoPlayAction) { + InformationPanelSettings::setPreviewsAutoPlay(isChecked); + m_content->setPreviewAutoPlay(isChecked); + } +} + void InformationPanel::showItemInfo() { if (!isVisible()) { @@ -185,7 +249,7 @@ void InformationPanel::showItemInfo() // No item is hovered and no selection has been done: provide // an item for the currently shown directory. m_folderStatJob = KIO::stat(url(), KIO::HideProgressInfo); - if (m_folderStatJob->ui()) { + if (m_folderStatJob->uiDelegate()) { KJobWidgets::setWindow(m_folderStatJob, this); } connect(m_folderStatJob, &KIO::Job::result, @@ -198,7 +262,7 @@ void InformationPanel::showItemInfo() void InformationPanel::slotFolderStatFinished(KJob* job) { - m_folderStatJob = 0; + m_folderStatJob = nullptr; const KIO::UDSEntry entry = static_cast(job)->statResult(); m_content->showItem(KFileItem(entry, m_shownUrl)); } @@ -213,7 +277,7 @@ void InformationPanel::slotInfoTimeout() void InformationPanel::reset() { if (m_invalidUrlCandidate == m_shownUrl) { - m_invalidUrlCandidate = KUrl(); + m_invalidUrlCandidate = QUrl(); // The current URL is still invalid. Reset // the content to show the directory URL. @@ -226,11 +290,11 @@ void InformationPanel::reset() void InformationPanel::slotFileRenamed(const QString& source, const QString& dest) { - if (m_shownUrl == KUrl(source)) { - m_shownUrl = KUrl(dest); - m_fileItem = KFileItem(KFileItem::Unknown, KFileItem::Unknown, m_shownUrl); + if (m_shownUrl == QUrl::fromUserInput(source)) { + m_shownUrl = QUrl::fromUserInput(dest); + m_fileItem = KFileItem(m_shownUrl); - if ((m_selection.count() == 1) && (m_selection[0].url() == KUrl(source))) { + if ((m_selection.count() == 1) && (m_selection[0].url() == QUrl::fromLocalFile(source))) { m_selection[0] = m_fileItem; // Implementation note: Updating the selection is only required if exactly one // item is selected, as the name of the item is shown. If this should change @@ -244,18 +308,18 @@ void InformationPanel::slotFileRenamed(const QString& source, const QString& des void InformationPanel::slotFilesAdded(const QString& directory) { - if (m_shownUrl == KUrl(directory)) { + if (m_shownUrl == QUrl::fromUserInput(directory)) { // If the 'trash' icon changes because the trash has been emptied or got filled, // the signal filesAdded("trash:/") will be emitted. - KFileItem item(KFileItem::Unknown, KFileItem::Unknown, KUrl(directory)); + KFileItem item(QUrl::fromUserInput(directory)); requestDelayedItemInfo(item); } } void InformationPanel::slotFilesChanged(const QStringList& files) { - foreach (const QString& fileName, files) { - if (m_shownUrl == KUrl(fileName)) { + for (const QString& fileName : files) { + if (m_shownUrl == QUrl::fromUserInput(fileName)) { showItemInfo(); break; } @@ -264,8 +328,8 @@ void InformationPanel::slotFilesChanged(const QStringList& files) void InformationPanel::slotFilesRemoved(const QStringList& files) { - foreach (const QString& fileName, files) { - if (m_shownUrl == KUrl(fileName)) { + for (const QString& fileName : files) { + if (m_shownUrl == QUrl::fromUserInput(fileName)) { // the currently shown item has been removed, show // the parent directory as fallback markUrlAsInvalid(); @@ -276,15 +340,15 @@ void InformationPanel::slotFilesRemoved(const QStringList& files) void InformationPanel::slotEnteredDirectory(const QString& directory) { - if (m_shownUrl == KUrl(directory)) { - KFileItem item(KFileItem::Unknown, KFileItem::Unknown, KUrl(directory)); + if (m_shownUrl == QUrl::fromUserInput(directory)) { + KFileItem item(QUrl::fromUserInput(directory)); requestDelayedItemInfo(item); } } void InformationPanel::slotLeftDirectory(const QString& directory) { - if (m_shownUrl == KUrl(directory)) { + if (m_shownUrl == QUrl::fromUserInput(directory)) { // The signal 'leftDirectory' is also emitted when a media // has been unmounted. In this case no directory change will be // done in Dolphin, but the Information Panel must be updated to @@ -296,7 +360,7 @@ void InformationPanel::slotLeftDirectory(const QString& directory) void InformationPanel::cancelRequest() { delete m_folderStatJob; - m_folderStatJob = 0; + m_folderStatJob = nullptr; m_infoTimer->stop(); m_resetUrlTimer->stop(); @@ -308,9 +372,9 @@ void InformationPanel::cancelRequest() m_urlCandidate.clear(); } -bool InformationPanel::isEqualToShownUrl(const KUrl& url) const +bool InformationPanel::isEqualToShownUrl(const QUrl& url) const { - return m_shownUrl.equals(url, KUrl::CompareWithoutTrailingSlash); + return m_shownUrl.matches(url, QUrl::StripTrailingSlash); } void InformationPanel::markUrlAsInvalid() @@ -353,6 +417,7 @@ void InformationPanel::init() m_content = new InformationPanelContent(this); connect(m_content, &InformationPanelContent::urlActivated, this, &InformationPanel::urlActivated); + connect(m_content, &InformationPanelContent::configurationFinished, this, [this]() { m_inConfigurationMode = false; }); QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); @@ -361,4 +426,3 @@ void InformationPanel::init() m_initialized = true; } -#include "informationpanel.moc"