***************************************************************************/
#include "dolphinviewcontainer.h"
-#include <KProtocolManager>
-#include <QDropEvent>
-#include <QTimer>
-#include <QMimeData>
-#include <QVBoxLayout>
+#include "dolphin_generalsettings.h"
+#include "dolphinplacesmodelsingleton.h"
+#include "dolphindebug.h"
+#include "filterbar/filterbar.h"
+#include "global.h"
+#include "search/dolphinsearchbox.h"
+#include "statusbar/dolphinstatusbar.h"
+#include "trash/dolphintrash.h"
+#include "views/viewmodecontroller.h"
+#include "views/viewproperties.h"
#include <KFileItemActions>
-#include <KFilePlacesModel>
-#include <KLocalizedString>
#include <KIO/PreviewJob>
-#include <kio_version.h>
+#include <KLocalizedString>
#include <KMessageWidget>
+#include <KProtocolManager>
+#include <KRun>
#include <KShell>
-#include <QUrl>
#include <KUrlComboBox>
#include <KUrlNavigator>
-#include <KRun>
-
-#ifdef KActivities_FOUND
-#endif
+#include <kio_version.h>
-#include "global.h"
-#include "dolphin_generalsettings.h"
-#include "filterbar/filterbar.h"
-#include "search/dolphinsearchbox.h"
-#include "statusbar/dolphinstatusbar.h"
-#include "views/viewmodecontroller.h"
-#include "views/viewproperties.h"
+#include <QDropEvent>
+#include <QLoggingCategory>
+#include <QMimeData>
+#include <QTimer>
+#include <QUrl>
+#include <QVBoxLayout>
DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) :
QWidget(parent),
- m_topLayout(0),
- m_urlNavigator(0),
- m_searchBox(0),
- m_messageWidget(0),
- m_view(0),
- m_filterBar(0),
- m_statusBar(0),
- m_statusBarTimer(0),
+ m_topLayout(nullptr),
+ m_navigatorWidget(nullptr),
+ m_urlNavigator(nullptr),
+ m_emptyTrashButton(nullptr),
+ m_searchBox(nullptr),
+ m_messageWidget(nullptr),
+ m_view(nullptr),
+ m_filterBar(nullptr),
+ m_statusBar(nullptr),
+ m_statusBarTimer(nullptr),
m_statusBarTimestamp(),
m_autoGrabFocus(true)
#ifdef KActivities_FOUND
m_topLayout->setSpacing(0);
m_topLayout->setMargin(0);
- m_urlNavigator = new KUrlNavigator(new KFilePlacesModel(this), url, this);
+ m_navigatorWidget = new QWidget(this);
+ QHBoxLayout* navigatorLayout = new QHBoxLayout(m_navigatorWidget);
+ navigatorLayout->setSpacing(0);
+ navigatorLayout->setMargin(0);
+
+ m_urlNavigator = new KUrlNavigator(DolphinPlacesModelSingleton::instance().placesModel(), url, this);
connect(m_urlNavigator, &KUrlNavigator::activated,
this, &DolphinViewContainer::activate);
connect(m_urlNavigator->editor(), &KUrlComboBox::completionModeChanged,
KUrlComboBox* editor = m_urlNavigator->editor();
editor->setCompletionMode(KCompletion::CompletionMode(settings->urlCompletionMode()));
+ m_emptyTrashButton = new QPushButton(QIcon::fromTheme(QStringLiteral("user-trash")), i18nc("@action:button", "Empty Trash"), this);
+ m_emptyTrashButton->setFlat(true);
+ connect(m_emptyTrashButton, &QPushButton::clicked, this, [this]() { Trash::empty(this); });
+ connect(&Trash::instance(), &Trash::emptinessChanged, m_emptyTrashButton, &QPushButton::setDisabled);
+ m_emptyTrashButton->setDisabled(Trash::isEmpty());
+ m_emptyTrashButton->hide();
+
m_searchBox = new DolphinSearchBox(this);
m_searchBox->hide();
connect(m_searchBox, &DolphinSearchBox::activated, this, &DolphinViewContainer::activate);
m_messageWidget->setCloseButtonVisible(true);
m_messageWidget->hide();
+#ifndef Q_OS_WIN
+ if (getuid() == 0) {
+
+ // We must be logged in as the root user; show a big scary warning
+ showMessage(i18n("Running Dolphin as root can be dangerous. Please be careful."), Warning);
+ }
+#endif
+
m_view = new DolphinView(url, this);
connect(m_view, &DolphinView::urlChanged,
m_urlNavigator, &KUrlNavigator::setLocationUrl);
this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged);
connect(m_urlNavigator, &KUrlNavigator::urlChanged,
this, &DolphinViewContainer::slotUrlNavigatorLocationChanged);
+ connect(m_urlNavigator, &KUrlNavigator::urlSelectionRequested,
+ this, &DolphinViewContainer::slotUrlSelectionRequested);
connect(m_urlNavigator, &KUrlNavigator::returnPressed,
this, &DolphinViewContainer::slotReturnPressed);
connect(m_urlNavigator, &KUrlNavigator::urlsDropped, this, [=](const QUrl &destination, QDropEvent *event) {
-#if KIO_VERSION >= QT_VERSION_CHECK(5, 37, 0)
m_view->dropUrls(destination, event, m_urlNavigator->dropWidget());
-#else
- // TODO: remove as soon as we can hard-depend of KF5 >= 5.37
- m_view->dropUrls(destination, event, m_view);
-#endif
+ });
+
+ connect(m_view, &DolphinView::directoryLoadingCompleted, this, [this]() {
+ m_emptyTrashButton->setVisible(m_view->url().scheme() == QLatin1String("trash"));
});
// Initialize status bar
connect(m_view, &DolphinView::urlChanged,
m_filterBar, &FilterBar::slotUrlChanged);
- m_topLayout->addWidget(m_urlNavigator);
+ navigatorLayout->addWidget(m_urlNavigator);
+ navigatorLayout->addWidget(m_emptyTrashButton);
+
+ m_topLayout->addWidget(m_navigatorWidget);
m_topLayout->addWidget(m_searchBox);
m_topLayout->addWidget(m_messageWidget);
m_topLayout->addWidget(m_view);
return m_autoGrabFocus;
}
+QString DolphinViewContainer::currentSearchText() const
+{
+ return m_searchBox->text();
+}
+
const DolphinStatusBar* DolphinViewContainer::statusBar() const
{
return m_statusBar;
}
m_searchBox->setVisible(enabled);
- m_urlNavigator->setVisible(!enabled);
+ m_navigatorWidget->setVisible(!enabled);
if (enabled) {
const QUrl& locationUrl = m_urlNavigator->locationUrl();
QString text;
if (isSearchModeEnabled()) {
- text = m_searchBox->searchPath().fileName() + QLatin1String(": ") + m_searchBox->text();
+ text = i18n("Search for %1 in %2", m_searchBox->text(), m_searchBox->searchPath().fileName());
} else {
text = url().fileName();
if (text.isEmpty()) {
}
}
+void DolphinViewContainer::slotUrlSelectionRequested(const QUrl& url)
+{
+ qCDebug(DolphinDebug) << "slotUrlSelectionRequested: " << url;
+ m_view->markUrlsAsSelected({url});
+ m_view->markUrlAsCurrent(url); // makes the item scroll into view
+}
+
void DolphinViewContainer::redirect(const QUrl& oldUrl, const QUrl& newUrl)
{
Q_UNUSED(oldUrl);