***************************************************************************/
#include "dolphinmainwindow.h"
+#include "dolphindropcontroller.h"
#include <config-nepomuk.h>
#include "kfileplacesview.h"
#include "dolphin_generalsettings.h"
+#include "dolphin_iconsmodesettings.h"
#include <kaction.h>
#include <kactioncollection.h>
#include <kmenubar.h>
#include <kmessagebox.h>
#include <konqmimedata.h>
-#include <konq_operations.h>
#include <kpropertiesdialog.h>
#include <kprotocolinfo.h>
#include <ktoggleaction.h>
#include <kstatusbar.h>
#include <kstandardaction.h>
#include <kurl.h>
+#include <kurlcombobox.h>
-#include <QtGui/QKeyEvent>
-#include <QtGui/QClipboard>
-#include <QtGui/QSplitter>
-#include <QtGui/QDockWidget>
+#include <QKeyEvent>
+#include <QClipboard>
+#include <QLineEdit>
+#include <QSplitter>
+#include <QDockWidget>
DolphinMainWindow::DolphinMainWindow(int id) :
KXmlGuiWindow(0),
void DolphinMainWindow::dropUrls(const KUrl::List& urls,
const KUrl& destination)
{
- kDebug() << "Source" << urls;
- kDebug() << "Destination:" << destination;
-
- Qt::DropAction action = Qt::CopyAction;
-
- Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers();
- const bool shiftPressed = modifier & Qt::ShiftModifier;
- const bool controlPressed = modifier & Qt::ControlModifier;
- if (shiftPressed && controlPressed) {
- // shortcut for 'Link Here' is used
- action = Qt::LinkAction;
- } else if (shiftPressed) {
- // shortcut for 'Move Here' is used
- action = Qt::MoveAction;
- } else if (controlPressed) {
- // shortcut for 'Copy Here' is used
- action = Qt::CopyAction;
- } else {
- // open a context menu which offers the following actions:
- // - Move Here
- // - Copy Here
- // - Link Here
- // - Cancel
-
- KMenu popup(this);
-
- QString seq = QKeySequence(Qt::ShiftModifier).toString();
- seq.chop(1); // chop superfluous '+'
- QAction* moveAction = popup.addAction(KIcon("go-jump"),
- i18nc("@action:inmenu",
- "&Move Here\t<shortcut>%1</shortcut>", seq));
-
- seq = QKeySequence(Qt::ControlModifier).toString();
- seq.chop(1);
- QAction* copyAction = popup.addAction(KIcon("edit-copy"),
- i18nc("@action:inmenu",
- "&Copy Here\t<shortcut>%1</shortcut>", seq));
-
- seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString();
- seq.chop(1);
- QAction* linkAction = popup.addAction(KIcon("insert-link"),
- i18nc("@action:inmenu",
- "&Link Here\t<shortcut>%1</shortcut>", seq));
-
- popup.addSeparator();
- popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel"));
-
- QAction* activatedAction = popup.exec(QCursor::pos());
- if (activatedAction == moveAction) {
- action = Qt::MoveAction;
- } else if (activatedAction == copyAction) {
- action = Qt::CopyAction;
- } else if (activatedAction == linkAction) {
- action = Qt::LinkAction;
- } else {
- return;
- }
- }
-
- switch (action) {
- case Qt::MoveAction:
- KonqOperations::copy(this, KonqOperations::MOVE, urls, destination);
- m_undoCommandTypes.append(KonqFileUndoManager::MOVE);
- break;
-
- case Qt::CopyAction:
- KonqOperations::copy(this, KonqOperations::COPY, urls, destination);
- m_undoCommandTypes.append(KonqFileUndoManager::COPY);
- break;
-
- case Qt::LinkAction:
- KonqOperations::copy(this, KonqOperations::LINK, urls, destination);
- m_undoCommandTypes.append(KonqFileUndoManager::LINK);
- break;
-
- default:
- break;
- }
+ DolphinDropController dropController(this);
+ connect(&dropController, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)),
+ this, SLOT(slotDoingOperation(KonqFileUndoManager::CommandType)));
+ dropController.dropUrls(urls, destination);
}
void DolphinMainWindow::changeUrl(const KUrl& url)
const DolphinView* view = m_activeViewContainer->view();
- // currently the column view does not support additional information
- const bool enable = (view->mode() != DolphinView::ColumnView);
+ const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
+ const bool enable = (view->mode() == DolphinView::DetailsView) ||
+ ((view->mode() == DolphinView::IconsView) && settings->showAdditionalInfo());
+
showSizeInfo->setEnabled(enable);
showDateInfo->setEnabled(enable);
showPermissionsInfo->setEnabled(enable);
}
QAction* compareFilesAction = actionCollection()->action("compare_files");
- compareFilesAction->setEnabled(selectedUrlsCount == 2);
+ if (selectedUrlsCount == 2) {
+ const bool kompareInstalled = !KGlobal::dirs()->findExe("kompare").isEmpty();
+ compareFilesAction->setEnabled(selectedUrlsCount == 2 && kompareInstalled);
+ } else {
+ compareFilesAction->setEnabled(false);
+ }
m_activeViewContainer->updateStatusBar();
{
const KFileItemList list = m_activeViewContainer->view()->selectedItems();
- KPropertiesDialog dialog(list, this);
- dialog.exec();
+ KPropertiesDialog *dialog = new KPropertiesDialog(list, this);
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->show();
+ dialog->raise();
+ dialog->activateWindow();
}
void DolphinMainWindow::quit()
void DolphinMainWindow::selectAll()
{
clearStatusBar();
- m_activeViewContainer->view()->selectAll();
+
+ // if the URL navigator is editable and focused, select the whole
+ // URL instead of all items of the view
+
+ KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
+ QLineEdit* lineEdit = urlNavigator->editor()->lineEdit();
+ const bool selectUrl = urlNavigator->isUrlEditable() &&
+ lineEdit->hasFocus();
+ if (selectUrl) {
+ lineEdit->selectAll();
+ } else {
+ m_activeViewContainer->view()->selectAll();
+ }
}
void DolphinMainWindow::invertSelection()
sortByType->setText(i18nc("@action:inmenu Sort By", "Type"));
connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType()));
- KToggleAction* sortByRating = actionCollection()->add<KToggleAction>("sort_by_rating");
- sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating"));
-
- KToggleAction* sortByTags = actionCollection()->add<KToggleAction>("sort_by_tags");
- sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags"));
-
+ // TODO: Hided "sort by rating" and "sort by tags" as without caching the performance
+ // is too slow currently (Nepomuk will support caching in future releases).
+ //
+ // KToggleAction* sortByRating = actionCollection()->add<KToggleAction>("sort_by_rating");
+ // sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating"));
+ //
+ // KToggleAction* sortByTags = actionCollection()->add<KToggleAction>("sort_by_tags");
+ // sortByTags->setText(i18nc("@action:inmenu Sort 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);
- }
+ // 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);
+ // sortByRating->setEnabled(false);
+ // sortByTags->setEnabled(false);
#endif
QActionGroup* sortGroup = new QActionGroup(this);
sortGroup->addAction(sortByOwner);
sortGroup->addAction(sortByGroup);
sortGroup->addAction(sortByType);
- sortGroup->addAction(sortByRating);
- sortGroup->addAction(sortByTags);
+
+ // TODO: Hided "sort by rating" and "sort by tags" as without caching the performance
+ // is too slow currently (Nepomuk will support caching in future releases).
+ //sortGroup->addAction(sortByRating);
+ //sortGroup->addAction(sortByTags);
KToggleAction* sortDescending = actionCollection()->add<KToggleAction>("descending");
sortDescending->setText(i18nc("@action:inmenu Sort", "Descending"));
SidebarPage* terminalWidget = new TerminalSidebarPage(terminalDock);
terminalDock->setWidget(terminalWidget);
+ connect(terminalWidget, SIGNAL(hideTerminalSidebarPage()), terminalDock, SLOT(hide()));
+
terminalDock->toggleViewAction()->setText(i18nc("@title:window", "Terminal"));
terminalDock->toggleViewAction()->setShortcut(Qt::Key_F4);
actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction());