#include "dolphinmainwindow.h"
#include "dolphinviewactionhandler.h"
-#include "dolphindropcontroller.h"
#include <config-nepomuk.h>
#include <kio/netaccess.h>
#include <kinputdialog.h>
#include <klocale.h>
+#include <kprotocolmanager.h>
#include <kmenu.h>
#include <kmenubar.h>
#include <kmessagebox.h>
#include <QSplitter>
#include <QDockWidget>
+#include <kdebug.h>
+
DolphinMainWindow::DolphinMainWindow(int id) :
KXmlGuiWindow(0),
m_newMenu(0),
this, SLOT(slotUndoAvailable(bool)));
connect(undoManager, SIGNAL(undoTextChanged(const QString&)),
this, SLOT(slotUndoTextChanged(const QString&)));
+ connect(undoManager, SIGNAL(jobRecordingStarted(CommandType)),
+ this, SLOT(clearStatusBar()));
+ connect(undoManager, SIGNAL(jobRecordingFinished(CommandType)),
+ this, SLOT(showCommand(CommandType)));
connect(DolphinSettings::instance().placesModel(), SIGNAL(errorMessage(const QString&)),
this, SLOT(slotHandlePlacesError(const QString&)));
}
m_viewTab[m_tabIndex].secondaryView = container;
}
-void DolphinMainWindow::slotDoingOperation(KIO::FileUndoManager::CommandType commandType)
+void DolphinMainWindow::showCommand(CommandType command)
{
- clearStatusBar();
- m_undoCommandTypes.append(commandType);
+ DolphinStatusBar* statusBar = m_activeViewContainer->statusBar();
+ switch (command) {
+ case KIO::FileUndoManager::Copy:
+ statusBar->setMessage(i18nc("@info:status", "Copy operation completed."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+ case KIO::FileUndoManager::Move:
+ statusBar->setMessage(i18nc("@info:status", "Move operation completed."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+ case KIO::FileUndoManager::Link:
+ statusBar->setMessage(i18nc("@info:status", "Link operation completed."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+ case KIO::FileUndoManager::Trash:
+ statusBar->setMessage(i18nc("@info:status", "Move to trash operation completed."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+ case KIO::FileUndoManager::Rename:
+ statusBar->setMessage(i18nc("@info:status", "Renaming operation completed."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+
+ case KIO::FileUndoManager::Mkdir:
+ statusBar->setMessage(i18nc("@info:status", "Created folder."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+
+ default:
+ break;
+ }
}
void DolphinMainWindow::refreshViews()
// the secondary view
DolphinViewContainer* activeViewContainer = m_activeViewContainer;
- m_viewTab[m_tabIndex].primaryView->view()->refresh();
- if (m_viewTab[m_tabIndex].secondaryView != 0) {
- m_viewTab[m_tabIndex].secondaryView->view()->refresh();
+ const int tabCount = m_viewTab.count();
+ for (int i = 0; i < tabCount; ++i) {
+ m_viewTab[i].primaryView->refresh();
+ if (m_viewTab[i].secondaryView != 0) {
+ m_viewTab[i].secondaryView->refresh();
+ }
}
setActiveViewContainer(activeViewContainer);
}
-void DolphinMainWindow::dropUrls(const KUrl::List& urls,
- const KUrl& destination)
-{
- DolphinDropController dropController(this);
- connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
- this, SLOT(slotDoingOperation(KIO::FileUndoManager::CommandType)));
- dropController.dropUrls(urls, destination);
-}
-
void DolphinMainWindow::pasteIntoFolder()
{
m_activeViewContainer->view()->pasteIntoFolder();
void DolphinMainWindow::changeUrl(const KUrl& url)
{
+ if (!KProtocolManager::supportsListing(url)) {
+ // The URL navigator only checks for validity, not
+ // if the URL can be listed. An error message is
+ // shown due to DolphinViewContainer::restoreView().
+ return;
+ }
+
DolphinViewContainer* view = activeViewContainer();
if (view != 0) {
view->setUrl(url);
viewTab.primaryView->view()->reload();
m_viewTab.append(viewTab);
-
+
actionCollection()->action("close_tab")->setEnabled(true);
}
+void DolphinMainWindow::activateNextTab()
+{
+ if (m_viewTab.count() == 1 || m_tabBar->count() < 2) {
+ return;
+ }
+
+ const int tabIndex = (m_tabBar->currentIndex() + 1) % m_tabBar->count();
+ m_tabBar->setCurrentIndex(tabIndex);
+}
+
+void DolphinMainWindow::activatePrevTab()
+{
+ if (m_viewTab.count() == 1 || m_tabBar->count() < 2) {
+ return;
+ }
+
+ int tabIndex = m_tabBar->currentIndex() - 1;
+ if (tabIndex == -1) {
+ tabIndex = m_tabBar->count() - 1;
+ }
+ m_tabBar->setCurrentIndex(tabIndex);
+}
+
+void DolphinMainWindow::openInNewTab()
+{
+ const KFileItemList list = m_activeViewContainer->view()->selectedItems();
+ if ((list.count() == 1) && list[0].isDir()) {
+ openNewTab(m_activeViewContainer->view()->selectedUrls()[0]);
+ m_tabBar->setCurrentIndex(m_viewTab.count() - 1);
+ }
+}
+
+void DolphinMainWindow::openInNewWindow()
+{
+ const KFileItemList list = m_activeViewContainer->view()->selectedItems();
+ if ((list.count() == 1) && list[0].isDir()) {
+ DolphinMainWindow* window = DolphinApplication::app()->createMainWindow();
+ window->changeUrl(m_activeViewContainer->view()->selectedUrls()[0]);
+ window->show();
+ }
+}
+
void DolphinMainWindow::toggleActiveView()
{
if (m_viewTab[m_tabIndex].secondaryView == 0) {
if (undoAction != 0) {
undoAction->setEnabled(available);
}
-
- if (available && (m_undoCommandTypes.count() > 0)) {
- const KIO::FileUndoManager::CommandType command = m_undoCommandTypes.takeFirst();
- DolphinStatusBar* statusBar = m_activeViewContainer->statusBar();
- switch (command) {
- case KIO::FileUndoManager::Copy:
- statusBar->setMessage(i18nc("@info:status", "Copy operation completed."),
- DolphinStatusBar::OperationCompleted);
- break;
- case KIO::FileUndoManager::Move:
- statusBar->setMessage(i18nc("@info:status", "Move operation completed."),
- DolphinStatusBar::OperationCompleted);
- break;
- case KIO::FileUndoManager::Link:
- statusBar->setMessage(i18nc("@info:status", "Link operation completed."),
- DolphinStatusBar::OperationCompleted);
- break;
- case KIO::FileUndoManager::Trash:
- statusBar->setMessage(i18nc("@info:status", "Move to trash operation completed."),
- DolphinStatusBar::OperationCompleted);
- break;
- case KIO::FileUndoManager::Rename:
- statusBar->setMessage(i18nc("@info:status", "Renaming operation completed."),
- DolphinStatusBar::OperationCompleted);
- break;
-
- case KIO::FileUndoManager::Mkdir:
- statusBar->setMessage(i18nc("@info:status", "Created folder."),
- DolphinStatusBar::OperationCompleted);
- break;
-
- default:
- break;
- }
-
- }
}
void DolphinMainWindow::slotUndoTextChanged(const QString& text)
urlNavigator->setUrlEditable(action->isChecked());
}
-void DolphinMainWindow::editLocation()
+void DolphinMainWindow::replaceLocation()
{
KUrlNavigator* navigator = m_activeViewContainer->urlNavigator();
navigator->setUrlEditable(true);
m_centralWidgetLayout->addWidget(m_tabBar);
m_centralWidgetLayout->addWidget(m_viewTab[m_tabIndex].splitter);
-
setCentralWidget(centralWidget);
setupDockWidgets();
+ emit urlChanged(homeUrl);
setupGUI(Keys | Save | Create | ToolBar);
- createGUI();
stateChanged("new_file");
- setAutoSaveSettings();
QClipboard* clipboard = QApplication::clipboard();
connect(clipboard, SIGNAL(dataChanged()),
resize(750, 500);
}
- emit urlChanged(homeUrl);
+ m_showMenuBar->setChecked(!menuBar()->isHidden()); // workaround for bug #171080
}
void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContainer)
stop->setIcon(KIcon("process-stop"));
connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading()));
- // TODO: the naming "Show full Location" is currently confusing...
KToggleAction* showFullLocation = actionCollection()->add<KToggleAction>("editable_location");
- showFullLocation->setText(i18nc("@action:inmenu Navigation Bar", "Show Full Location"));
+ showFullLocation->setText(i18nc("@action:inmenu Navigation Bar", "Editable Location"));
showFullLocation->setShortcut(Qt::CTRL | Qt::Key_L);
connect(showFullLocation, SIGNAL(triggered()), this, SLOT(toggleEditLocation()));
- KAction* editLocation = actionCollection()->addAction("edit_location");
- editLocation->setText(i18nc("@action:inmenu Navigation Bar", "Edit Location"));
- editLocation->setShortcut(Qt::Key_F6);
- connect(editLocation, SIGNAL(triggered()), this, SLOT(editLocation()));
+ KAction* replaceLocation = actionCollection()->addAction("replace_location");
+ replaceLocation->setText(i18nc("@action:inmenu Navigation Bar", "Replace Location"));
+ replaceLocation->setShortcut(Qt::Key_F6);
+ connect(replaceLocation, SIGNAL(triggered()), this, SLOT(replaceLocation()));
// setup 'Go' menu
KAction* backAction = KStandardAction::back(this, SLOT(goBack()), actionCollection());
KAction* quickView = actionCollection()->addAction("quick_view");
quickView->setText(i18nc("@action:inmenu Tools", "Quick View"));
quickView->setIcon(KIcon("view-preview"));
- quickView->setShortcut(Qt::Key_Space);
+ quickView->setShortcut(Qt::CTRL + Qt::Key_Return);
quickView->setEnabled(false);
connect(quickView, SIGNAL(triggered()), this, SLOT(quickView()));
// setup 'Settings' menu
m_showMenuBar = KStandardAction::showMenubar(this, SLOT(toggleShowMenuBar()), actionCollection());
KStandardAction::preferences(this, SLOT(editSettings()), actionCollection());
+
+ // not in menu actions
+ KAction* activateNextTab = actionCollection()->addAction("activatenexttab");
+ activateNextTab->setText(i18nc("@action:inmenu", "Activate Next Tab"));
+ connect(activateNextTab, SIGNAL(triggered()), SLOT(activateNextTab()));
+ activateNextTab->setShortcuts(QApplication::isRightToLeft() ? KStandardShortcut::tabPrev() :
+ KStandardShortcut::tabNext());
+
+ KAction* activatePrevTab = actionCollection()->addAction("activateprevtab");
+ activatePrevTab->setText(i18nc("@action:inmenu", "Activate Previous Tab"));
+ connect(activatePrevTab, SIGNAL(triggered()), SLOT(activatePrevTab()));
+ activatePrevTab->setShortcuts(QApplication::isRightToLeft() ? KStandardShortcut::tabNext() :
+ KStandardShortcut::tabPrev());
+
+ // for context menu
+ KAction* openInNewTab = actionCollection()->addAction("open_in_new_tab");
+ openInNewTab->setText(i18nc("@action:inmenu", "Open in New Tab"));
+ openInNewTab->setIcon(KIcon("tab-new"));
+ connect(openInNewTab, SIGNAL(triggered()), this, SLOT(openInNewTab()));
+
+ KAction* openInNewWindow = actionCollection()->addAction("open_in_new_window");
+ openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window"));
+ openInNewWindow->setIcon(KIcon("window-new"));
+ connect(openInNewWindow, SIGNAL(triggered()), this, SLOT(openInNewWindow()));
}
void DolphinMainWindow::setupDockWidgets()
this, SLOT(handlePlacesClick(KUrl, Qt::MouseButtons)));
connect(treeWidget, SIGNAL(changeSelection(KFileItemList)),
this, SLOT(changeSelection(KFileItemList)));
- connect(treeWidget, SIGNAL(urlsDropped(KUrl::List, KUrl)),
- this, SLOT(dropUrls(KUrl::List, KUrl)));
// setup "Terminal"
#ifndef Q_OS_WIN
this, SLOT(slotRequestItemInfo(KFileItem)));
connect(view, SIGNAL(activated()),
this, SLOT(toggleActiveView()));
- connect(view, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
- this, SLOT(slotDoingOperation(KIO::FileUndoManager::CommandType)));
connect(view, SIGNAL(tabRequested(const KUrl&)),
this, SLOT(openNewTab(const KUrl&)));