X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6422ae393ed378f8dcde0bf35e1f8d67a5df2295..3da73183f86e9086a4e0611b08a7d7779bb5be49:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index eed6da4ea..5b8b11bc1 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -30,6 +30,7 @@ #include "infosidebarpage.h" #include "metadatawidget.h" #include "mainwindowadaptor.h" +#include "terminalsidebarpage.h" #include "treeviewsidebarpage.h" #include "kurlnavigator.h" #include "viewpropertiesdialog.h" @@ -67,17 +68,17 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include DolphinMainWindow::DolphinMainWindow(int id) : - KMainWindow(0), - m_newMenu(0), - m_splitter(0), - m_activeView(0), - m_id(id) + KXmlGuiWindow(0), + m_newMenu(0), + m_splitter(0), + m_activeView(0), + m_id(id) { setObjectName("Dolphin"); m_view[PrimaryIdx] = 0; @@ -205,38 +206,12 @@ void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl) void DolphinMainWindow::refreshViews() { - const bool split = DolphinSettings::instance().generalSettings()->splitView(); - const bool isPrimaryViewActive = (m_activeView == m_view[PrimaryIdx]); - KUrl url; - for (int i = PrimaryIdx; i <= SecondaryIdx; ++i) { - if (m_view[i] != 0) { - url = m_view[i]->url(); - - // delete view instance... - m_view[i]->close(); - m_view[i]->deleteLater(); - m_view[i] = 0; - } + Q_ASSERT(m_view[PrimaryIdx] != 0); + m_view[PrimaryIdx]->refresh(); - if (split || (i == PrimaryIdx)) { - // ... and recreate it - ViewProperties props(url); - m_view[i] = new DolphinView(this, - m_splitter, - url, - props.viewMode(), - props.showHiddenFiles()); - connectViewSignals(i); - m_view[i]->reload(); - m_view[i]->show(); - } + if (m_view[SecondaryIdx] != 0) { + m_view[SecondaryIdx]->refresh(); } - - m_activeView = isPrimaryViewActive ? m_view[PrimaryIdx] : m_view[SecondaryIdx]; - Q_ASSERT(m_activeView != 0); - - updateViewActions(); - emit activeViewChanged(); } void DolphinMainWindow::changeUrl(const KUrl& url) @@ -305,6 +280,8 @@ void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting) case DolphinView::SortByGroup: action = actionCollection()->action("by_group"); break; + case DolphinView::SortByType: + action = actionCollection()->action("by_type"); default: break; } @@ -394,18 +371,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) settings.save(); - // TODO: I assume there will be a generic way in KDE 4 to store the docks - // of the main window. In the meantime they are stored manually: - QString filename = KStandardDirs::locateLocal("data", KGlobal::mainComponent().componentName()); - filename.append("/panels_layout"); - QFile file(filename); - if (file.open(QIODevice::WriteOnly)) { - QByteArray data = saveState(); - file.write(data); - file.close(); - } - - KMainWindow::closeEvent(event); + KXmlGuiWindow::closeEvent(event); } void DolphinMainWindow::saveProperties(KConfig* config) @@ -538,7 +504,7 @@ void DolphinMainWindow::slotUndoAvailable(bool available) break; case KonqUndoManager::MKDIR: - statusBar->setMessage(i18n("Created directory."), + statusBar->setMessage(i18n("Created folder."), DolphinStatusBar::OperationCompleted); break; @@ -714,6 +680,11 @@ void DolphinMainWindow::sortByGroup() m_activeView->setSorting(DolphinView::SortByGroup); } +void DolphinMainWindow::sortByType() +{ + m_activeView->setSorting(DolphinView::SortByType); +} + void DolphinMainWindow::toggleSortOrder() { const Qt::SortOrder order = (m_activeView->sortOrder() == Qt::AscendingOrder) ? @@ -817,7 +788,7 @@ void DolphinMainWindow::toggleShowHiddenFiles() m_activeView->setShowHiddenFiles(show); } -void DolphinMainWindow::showFilterBar() +void DolphinMainWindow::toggleFilterBarVisibility() { const KToggleAction* showFilterBarAction = static_cast(actionCollection()->action("show_filter_bar")); @@ -883,18 +854,9 @@ void DolphinMainWindow::goHome() m_activeView->goHome(); } -void DolphinMainWindow::openTerminal() -{ - QString command("konsole --workdir \""); - command.append(m_activeView->url().path()); - command.append('\"'); - - KRun::runCommand(command, "Konsole", "konsole"); -} - void DolphinMainWindow::findFile() { - KRun::run("kfind", m_activeView->url()); + KRun::run("kfind", m_activeView->url(), this); } void DolphinMainWindow::compareFiles() @@ -948,15 +910,14 @@ void DolphinMainWindow::compareFiles() command.append("\" \""); command.append(urlB.pathOrUrl()); command.append('\"'); - KRun::runCommand(command, "Kompare", "kompare"); + KRun::runCommand(command, "Kompare", "kompare", this); } void DolphinMainWindow::editSettings() { - // TODO: make a static method for opening the settings dialog - DolphinSettingsDialog dlg(this); - dlg.exec(); + DolphinSettingsDialog dialog(this); + dialog.exec(); } void DolphinMainWindow::init() @@ -1031,17 +992,6 @@ void DolphinMainWindow::loadSettings() } updateViewActions(); - - // TODO: I assume there will be a generic way in KDE 4 to restore the docks - // of the main window. In the meantime they are restored manually (see also - // DolphinMainWindow::closeEvent() for more details): - QString filename = KStandardDirs::locateLocal("data", KGlobal::mainComponent().componentName()); filename.append("/panels_layout"); - QFile file(filename); - if (file.open(QIODevice::ReadOnly)) { - QByteArray data = file.readAll(); - restoreState(data); - file.close(); - } } void DolphinMainWindow::setupActions() @@ -1127,7 +1077,7 @@ void DolphinMainWindow::setupActions() KToggleAction* columnView = actionCollection()->add("columns"); columnView->setText(i18n("Columns")); columnView->setShortcut(Qt::CTRL | Qt::Key_3); - columnView->setIcon(KIcon("view-tree")); + columnView->setIcon(KIcon("fileview-column")); connect(columnView, SIGNAL(triggered()), this, SLOT(setColumnView())); QActionGroup* viewModeGroup = new QActionGroup(this); @@ -1159,6 +1109,10 @@ void DolphinMainWindow::setupActions() sortByGroup->setText(i18n("By Group")); connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup())); + KToggleAction* sortByType = actionCollection()->add("by_type"); + sortByType->setText(i18n("By Type")); + connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType())); + QActionGroup* sortGroup = new QActionGroup(this); sortGroup->addAction(sortByName); sortGroup->addAction(sortBySize); @@ -1166,13 +1120,14 @@ void DolphinMainWindow::setupActions() sortGroup->addAction(sortByPermissions); sortGroup->addAction(sortByOwner); sortGroup->addAction(sortByGroup); + sortGroup->addAction(sortByType); KToggleAction* sortDescending = actionCollection()->add("descending"); sortDescending->setText(i18n("Descending")); connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder())); KToggleAction* sortCategorized = actionCollection()->add("categorized"); - sortCategorized->setText(i18n("Categorized")); + sortCategorized->setText(i18n("Show in Groups")); connect(sortCategorized, SIGNAL(triggered()), this, SLOT(toggleSortCategorization())); KToggleAction* clearInfo = actionCollection()->add("clear_info"); @@ -1248,22 +1203,16 @@ void DolphinMainWindow::setupActions() KStandardAction::home(this, SLOT(goHome()), actionCollection()); // setup 'Tools' menu - QAction* openTerminal = actionCollection()->addAction("open_terminal"); - openTerminal->setText(i18n("Open Terminal")); - openTerminal->setShortcut(Qt::Key_F4); - openTerminal->setIcon(KIcon("konsole")); - connect(openTerminal, SIGNAL(triggered()), this, SLOT(openTerminal())); - QAction* findFile = actionCollection()->addAction("find_file"); findFile->setText(i18n("Find File...")); - findFile->setShortcut(Qt::Key_F); + findFile->setShortcut(Qt::CTRL | Qt::Key_F); findFile->setIcon(KIcon("file-find")); connect(findFile, SIGNAL(triggered()), this, SLOT(findFile())); KToggleAction* showFilterBar = actionCollection()->add("show_filter_bar"); showFilterBar->setText(i18n("Show Filter Bar")); - showFilterBar->setShortcut(Qt::Key_Slash); - connect(showFilterBar, SIGNAL(triggered()), this, SLOT(showFilterBar())); + showFilterBar->setShortcut(Qt::CTRL | Qt::Key_I); + connect(showFilterBar, SIGNAL(triggered()), this, SLOT(toggleFilterBarVisibility())); QAction* compareFiles = actionCollection()->addAction("compare_files"); compareFiles->setText(i18n("Compare Files")); @@ -1277,40 +1226,61 @@ void DolphinMainWindow::setupActions() void DolphinMainWindow::setupDockWidgets() { - // TODO: there's a lot copy/paste code here. Provide a generic approach - // after the dock concept has been finalized. - // setup "Information" - QDockWidget* infoDock = new QDockWidget(i18n("Information"), this); + QDockWidget* infoDock = new QDockWidget(i18n("Information")); infoDock->setObjectName("infoDock"); infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); SidebarPage* infoWidget = new InfoSidebarPage(infoDock); infoDock->setWidget(infoWidget); - - infoDock->toggleViewAction()->setText(i18n("Show Information Panel")); + infoDock->toggleViewAction()->setText(i18n("Information")); actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction()); addDockWidget(Qt::RightDockWidgetArea, infoDock); - connectSidebarPage(infoWidget); + connect(this, SIGNAL(urlChanged(KUrl)), + infoWidget, SLOT(setUrl(KUrl))); + connect(this, SIGNAL(selectionChanged(KFileItemList)), + infoWidget, SLOT(setSelection(KFileItemList))); // setup "Tree View" - QDockWidget* treeViewDock = new QDockWidget(i18n("Folders")); // TODO: naming? + QDockWidget* treeViewDock = new QDockWidget(i18n("Folders")); treeViewDock->setObjectName("treeViewDock"); treeViewDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); TreeViewSidebarPage* treeWidget = new TreeViewSidebarPage(treeViewDock); treeViewDock->setWidget(treeWidget); - treeViewDock->toggleViewAction()->setText(i18n("Show Folders Panel")); + treeViewDock->toggleViewAction()->setText(i18n("Folders")); actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction()); addDockWidget(Qt::LeftDockWidgetArea, treeViewDock); - connectSidebarPage(treeWidget); + connect(this, SIGNAL(urlChanged(KUrl)), + treeWidget, SLOT(setUrl(KUrl))); + connect(treeWidget, SIGNAL(changeUrl(KUrl)), + this, SLOT(changeUrl(KUrl))); + connect(treeWidget, SIGNAL(changeSelection(KFileItemList)), + this, SLOT(changeSelection(KFileItemList))); + connect(treeWidget, SIGNAL(urlsDropped(KUrl::List, KUrl)), + this, SLOT(dropUrls(KUrl::List, KUrl))); + + // setup "Terminal" + QDockWidget* terminalDock = new QDockWidget(i18n("Terminal")); + terminalDock->setObjectName("terminalDock"); + terminalDock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea); + SidebarPage* terminalWidget = new TerminalSidebarPage(terminalDock); + terminalDock->setWidget(terminalWidget); + + terminalDock->toggleViewAction()->setText(i18n("Terminal")); + actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction()); + + addDockWidget(Qt::RightDockWidgetArea, terminalDock); + connect(this, SIGNAL(urlChanged(KUrl)), + terminalWidget, SLOT(setUrl(KUrl))); const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun(); if (firstRun) { infoDock->hide(); treeViewDock->hide(); + terminalDock->hide(); } QDockWidget *placesDock = new QDockWidget(i18n("Places")); @@ -1319,6 +1289,10 @@ void DolphinMainWindow::setupDockWidgets() KFilePlacesView *listView = new KFilePlacesView(placesDock); placesDock->setWidget(listView); listView->setModel(DolphinSettings::instance().placesModel()); + + placesDock->toggleViewAction()->setText(i18n("Show Places Panel")); + actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction()); + addDockWidget(Qt::LeftDockWidgetArea, placesDock); connect(listView, SIGNAL(urlChanged(KUrl)), this, SLOT(changeUrl(KUrl))); @@ -1492,30 +1466,17 @@ void DolphinMainWindow::connectViewSignals(int viewIndex) connect(navigator, SIGNAL(historyChanged()), this, SLOT(slotHistoryChanged())); } -void DolphinMainWindow::connectSidebarPage(SidebarPage* page) -{ - connect(page, SIGNAL(changeUrl(KUrl)), - this, SLOT(changeUrl(KUrl))); - connect(page, SIGNAL(changeSelection(KFileItemList)), - this, SLOT(changeSelection(KFileItemList))); - connect(page, SIGNAL(urlsDropped(KUrl::List, KUrl)), - this, SLOT(dropUrls(KUrl::List, KUrl))); - - connect(this, SIGNAL(urlChanged(KUrl)), - page, SLOT(setUrl(KUrl))); - connect(this, SIGNAL(selectionChanged(KFileItemList)), - page, SLOT(setSelection(KFileItemList))); -} DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) : - KonqUndoManager::UiInterface(mainWin), - m_mainWin(mainWin) + KonqUndoManager::UiInterface(mainWin), + m_mainWin(mainWin) { Q_ASSERT(m_mainWin != 0); } DolphinMainWindow::UndoUiInterface::~UndoUiInterface() -{} +{ +} void DolphinMainWindow::UndoUiInterface::jobError(KIO::Job* job) {