* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-#include <config-kmetadata.h>
#include "dolphinmainwindow.h"
+#include <config-kmetadata.h>
+
#include "dolphinapplication.h"
#include "dolphinnewmenu.h"
#include "dolphinsettings.h"
#include "infosidebarpage.h"
#include "metadatawidget.h"
#include "mainwindowadaptor.h"
+#include "terminalsidebarpage.h"
#include "treeviewsidebarpage.h"
#include "kurlnavigator.h"
#include "viewpropertiesdialog.h"
#include <kstandardaction.h>
#include <kurl.h>
-#include <QCloseEvent>
-#include <QClipboard>
-#include <QSplitter>
-#include <QDockWidget>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QClipboard>
+#include <QtGui/QSplitter>
+#include <QtGui/QDockWidget>
DolphinMainWindow::DolphinMainWindow(int id) :
KXmlGuiWindow(0),
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);
- 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();
- }
- }
+ // remember the current active view, as because of
+ // the refreshing the active view might change to
+ // the secondary view
+ DolphinView* activeView = m_activeView;
- m_activeView = isPrimaryViewActive ? m_view[PrimaryIdx] : m_view[SecondaryIdx];
- Q_ASSERT(m_activeView != 0);
+ m_view[PrimaryIdx]->refresh();
+ if (m_view[SecondaryIdx] != 0) {
+ m_view[SecondaryIdx]->refresh();
+ }
- updateViewActions();
- emit activeViewChanged();
+ setActiveView(activeView);
}
void DolphinMainWindow::changeUrl(const KUrl& url)
emit selectionChanged(selection);
}
+void DolphinMainWindow::slotRequestItemInfo(const KUrl& url)
+{
+ emit requestItemInfo(url);
+}
+
void DolphinMainWindow::slotHistoryChanged()
{
updateHistory();
void DolphinMainWindow::properties()
{
const KFileItemList list = m_activeView->selectedItems();
- new KPropertiesDialog(list, this);
+ KPropertiesDialog dialog(list, this);
+ dialog.exec();
}
void DolphinMainWindow::quit()
// create a secondary view
m_view[SecondaryIdx] = new DolphinView(this,
0,
- m_view[PrimaryIdx]->url(),
+ m_view[PrimaryIdx]->rootUrl(),
m_view[PrimaryIdx]->mode(),
m_view[PrimaryIdx]->showHiddenFiles());
connectViewSignals(SecondaryIdx);
m_view[SecondaryIdx]->show();
} else {
// remove secondary view
- if (m_activeView == m_view[PrimaryIdx]) {
- m_view[SecondaryIdx]->close();
- m_view[SecondaryIdx]->deleteLater();
- m_view[SecondaryIdx] = 0;
- setActiveView(m_view[PrimaryIdx]);
- } else {
- // The secondary view is active, hence from the users point of view
- // the content of the secondary view should be moved to the primary view.
- // From an implementation point of view it is more efficient to close
- // the primary view and exchange the internal pointers afterwards.
- m_view[PrimaryIdx]->close();
- delete m_view[PrimaryIdx];
- m_view[PrimaryIdx] = m_view[SecondaryIdx];
- m_view[SecondaryIdx] = 0;
- setActiveView(m_view[PrimaryIdx]);
- }
+ m_view[SecondaryIdx]->close();
+ m_view[SecondaryIdx]->deleteLater();
+ m_view[SecondaryIdx] = 0;
}
+ setActiveView(m_view[PrimaryIdx]);
emit activeViewChanged();
}
m_activeView->setShowHiddenFiles(show);
}
-void DolphinMainWindow::showFilterBar()
+void DolphinMainWindow::toggleFilterBarVisibility()
{
const KToggleAction* showFilterBarAction =
static_cast<KToggleAction*>(actionCollection()->action("show_filter_bar"));
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()
command.append("\" \"");
command.append(urlB.pathOrUrl());
command.append('\"');
- KRun::runCommand(command, "Kompare", "kompare");
+ KRun::runCommand(command, "Kompare", "kompare", this);
}
void DolphinMainWindow::loadSettings()
{
GeneralSettings* settings = DolphinSettings::instance().generalSettings();
-
- KToggleAction* splitAction = static_cast<KToggleAction*>(actionCollection()->action("split_view"));
- if (settings->splitView()) {
- splitAction->setChecked(true);
- toggleSplitView();
- }
-
+ updateSplitAction(settings->splitView());
updateViewActions();
}
KToggleAction* iconsView = actionCollection()->add<KToggleAction>("icons");
iconsView->setText(i18n("Icons"));
iconsView->setShortcut(Qt::CTRL | Qt::Key_1);
- iconsView->setIcon(KIcon("view-icon"));
+ iconsView->setIcon(KIcon("fileview-icon"));
connect(iconsView, SIGNAL(triggered()), this, SLOT(setIconsView()));
KToggleAction* detailsView = actionCollection()->add<KToggleAction>("details");
detailsView->setText(i18n("Details"));
detailsView->setShortcut(Qt::CTRL | Qt::Key_2);
- detailsView->setIcon(KIcon("fileview-text"));
+ detailsView->setIcon(KIcon("fileview-detailed"));
connect(detailsView, SIGNAL(triggered()), this, SLOT(setDetailsView()));
KToggleAction* columnView = actionCollection()->add<KToggleAction>("columns");
connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder()));
KToggleAction* sortCategorized = actionCollection()->add<KToggleAction>("categorized");
- sortCategorized->setText(i18n("Categorized"));
+ sortCategorized->setText(i18n("Show in Groups"));
connect(sortCategorized, SIGNAL(triggered()), this, SLOT(toggleSortCategorization()));
KToggleAction* clearInfo = actionCollection()->add<KToggleAction>("clear_info");
KToggleAction* showPreview = actionCollection()->add<KToggleAction>("show_preview");
showPreview->setText(i18n("Preview"));
- showPreview->setIcon(KIcon("thumbnail-show"));
+ showPreview->setIcon(KIcon("fileview-preview"));
connect(showPreview, SIGNAL(triggered()), this, SLOT(togglePreview()));
KToggleAction* showHiddenFiles = actionCollection()->add<KToggleAction>("show_hidden_files");
showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_Period);
connect(showHiddenFiles, SIGNAL(triggered()), this, SLOT(toggleShowHiddenFiles()));
- KToggleAction* split = actionCollection()->add<KToggleAction>("split_view");
- split->setText(i18n("Split"));
+ QAction* split = actionCollection()->addAction("split_view");
split->setShortcut(Qt::Key_F10);
- split->setIcon(KIcon("view-left-right"));
+ updateSplitAction(false);
connect(split, SIGNAL(triggered()), this, SLOT(toggleSplitView()));
QAction* reload = actionCollection()->addAction("reload");
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::CTRL | Qt::Key_F);
KToggleAction* showFilterBar = actionCollection()->add<KToggleAction>("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"));
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);
infoWidget, SLOT(setUrl(KUrl)));
connect(this, SIGNAL(selectionChanged(KFileItemList)),
infoWidget, SLOT(setSelection(KFileItemList)));
+ connect(this, SIGNAL(requestItemInfo(KUrl)),
+ infoWidget, SLOT(requestDelayedItemInfo(KUrl)));
// setup "Tree View"
QDockWidget* treeViewDock = new QDockWidget(i18n("Folders"));
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);
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"));
static_cast<KToggleAction*>(actionCollection()->action("show_hidden_files"));
showHiddenFilesAction->setChecked(m_activeView->showHiddenFiles());
- KToggleAction* splitAction = static_cast<KToggleAction*>(actionCollection()->action("split_view"));
- splitAction->setChecked(m_view[SecondaryIdx] != 0);
+ updateSplitAction(m_view[SecondaryIdx] != 0);
KToggleAction* editableLocactionAction =
static_cast<KToggleAction*>(actionCollection()->action("editable_location"));
this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation)));
connect(view, SIGNAL(selectionChanged(KFileItemList)),
this, SLOT(slotSelectionChanged(KFileItemList)));
+ connect(view, SIGNAL(requestItemInfo(KUrl)),
+ this, SLOT(slotRequestItemInfo(KUrl)));
connect(view, SIGNAL(showFilterBarChanged(bool)),
this, SLOT(updateFilterBarAction(bool)));
connect(view, SIGNAL(urlChanged(KUrl)),
this, SLOT(slotHistoryChanged()));
}
+void DolphinMainWindow::updateSplitAction(bool isSplit)
+{
+ QAction* splitAction = actionCollection()->action("split_view");
+ if (isSplit) {
+ splitAction->setText(i18n("Join"));
+ splitAction->setIcon(KIcon("fileview-join"));
+ } else {
+ splitAction->setText(i18n("Split"));
+ splitAction->setIcon(KIcon("fileview-split"));
+ }
+}
+
DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) :
KonqUndoManager::UiInterface(mainWin),
m_mainWin(mainWin)