#include <config-nepomuk.h>
#include "dolphinapplication.h"
-#include "dolphinfileplacesview.h"
#include "dolphinnewmenu.h"
-#include "dolphinsettings.h"
-#include "dolphinsettingsdialog.h"
+#include "settings/dolphinsettings.h"
+#include "settings/dolphinsettingsdialog.h"
+#include "dolphinsearchbox.h"
#include "dolphinstatusbar.h"
#include "dolphinviewcontainer.h"
-#include "infosidebarpage.h"
-#include "metadatawidget.h"
+#include "panels/folders/folderspanel.h"
+#include "panels/places/placespanel.h"
+#include "panels/information/informationpanel.h"
+#include "panels/information/metadatawidget.h"
#include "mainwindowadaptor.h"
-#include "treeviewsidebarpage.h"
#include "viewproperties.h"
#ifndef Q_OS_WIN
-#include "terminalsidebarpage.h"
+#include "panels/terminal/terminalpanel.h"
#endif
#include "dolphin_generalsettings.h"
#include <kfiledialog.h>
#include <kfileplacesmodel.h>
#include <kglobal.h>
+#include <klineedit.h>
+#include <ktoolbar.h>
#include <kicon.h>
#include <kiconloader.h>
#include <kio/netaccess.h>
m_tabBar(0),
m_activeViewContainer(0),
m_centralWidgetLayout(0),
+ m_searchBox(0),
m_id(id),
m_tabIndex(0),
m_viewTab(),
- m_actionHandler(0)
+ m_actionHandler(0),
+ m_settingsDialog(0)
{
setObjectName("Dolphin#");
emit selectionChanged(selection);
}
+void DolphinMainWindow::slotWheelMoved(int wheelDelta)
+{
+ if (wheelDelta > 0) {
+ activatePrevTab();
+ } else {
+ activateNextTab();
+ }
+}
+
void DolphinMainWindow::slotRequestItemInfo(const KFileItem& item)
{
emit requestItemInfo(item);
void DolphinMainWindow::editSettings()
{
- DolphinSettingsDialog dialog(this);
- dialog.exec();
+ if (m_settingsDialog == 0) {
+ const KUrl& url = activeViewContainer()->url();
+ m_settingsDialog = new DolphinSettingsDialog(url, this);
+ m_settingsDialog->setAttribute(Qt::WA_DeleteOnClose);
+ m_settingsDialog->show();
+ } else {
+ m_settingsDialog->raise();
+ }
}
void DolphinMainWindow::setActiveTab(int index)
canDecode = KUrl::List::canDecode(event->mimeData());
}
+void DolphinMainWindow::searchItems(const KUrl& url)
+{
+ m_activeViewContainer->setUrl(url);
+}
+
+
void DolphinMainWindow::init()
{
DolphinSettings& settings = DolphinSettings::instance();
this, SLOT(openNewTab()));
connect(m_tabBar, SIGNAL(testCanDecode(const QDragMoveEvent*, bool&)),
this, SLOT(slotTestCanDecode(const QDragMoveEvent*, bool&)));
+ connect(m_tabBar, SIGNAL(wheelDelta(int)),
+ this, SLOT(slotWheelMoved(int)));
+
m_tabBar->blockSignals(true); // signals get unblocked after at least 2 tabs are open
QWidget* centralWidget = new QWidget(this);
setupGUI(Keys | Save | Create | ToolBar);
+ m_searchBox->setParent(toolBar("searchToolBar"));
+ m_searchBox->show();
+
stateChanged("new_file");
QClipboard* clipboard = QApplication::clipboard();
KAction* newTab = actionCollection()->addAction("new_tab");
newTab->setIcon(KIcon("tab-new"));
newTab->setText(i18nc("@action:inmenu File", "New Tab"));
- newTab->setShortcut(KShortcut(Qt::CTRL | Qt::SHIFT | Qt::Key_N, Qt::CTRL | Qt::Key_T));
+ newTab->setShortcut(KShortcut(Qt::CTRL | Qt::Key_T, Qt::CTRL | Qt::SHIFT | Qt::Key_N));
connect(newTab, SIGNAL(triggered()), this, SLOT(openNewTab()));
- QAction* closeTab = new QAction(KIcon("tab-close"), i18nc("@action:inmenu File", "Close Tab"), this);
+ QAction* closeTab = actionCollection()->addAction("close_tab");
+ closeTab->setIcon(KIcon("tab-close"));
+ closeTab->setText(i18nc("@action:inmenu File", "Close Tab"));
closeTab->setShortcut(Qt::CTRL | Qt::Key_W);
closeTab->setEnabled(false);
connect(closeTab, SIGNAL(triggered()), this, SLOT(closeTab()));
- actionCollection()->addAction("close_tab", closeTab);
KStandardAction::quit(this, SLOT(quit()), actionCollection());
KStandardAction::home(this, SLOT(goHome()), actionCollection());
// setup 'Tools' menu
+ KToggleAction* showSearchBar = actionCollection()->add<KToggleAction>("show_search_bar");
+ showSearchBar->setText(i18nc("@action:inmenu Tools", "Show Search Bar"));
+ showSearchBar->setShortcut(Qt::CTRL | Qt::Key_S);
+ connect(showSearchBar, SIGNAL(triggered(bool)), this, SLOT(toggleFilterBarVisibility(bool)));
+
KToggleAction* showFilterBar = actionCollection()->add<KToggleAction>("show_filter_bar");
showFilterBar->setText(i18nc("@action:inmenu Tools", "Show Filter Bar"));
showFilterBar->setShortcut(Qt::CTRL | Qt::Key_I);
KStandardAction::preferences(this, SLOT(editSettings()), actionCollection());
// not in menu actions
- KAction* activateNextTab = actionCollection()->addAction("activatenexttab");
+ KAction* activateNextTab = actionCollection()->addAction("activate_next_tab");
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");
+ KAction* activatePrevTab = actionCollection()->addAction("activate_prev_tab");
activatePrevTab->setText(i18nc("@action:inmenu", "Activate Previous Tab"));
connect(activatePrevTab, SIGNAL(triggered()), SLOT(activatePrevTab()));
activatePrevTab->setShortcuts(QApplication::isRightToLeft() ? KStandardShortcut::tabNext() :
openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window"));
openInNewWindow->setIcon(KIcon("window-new"));
connect(openInNewWindow, SIGNAL(triggered()), this, SLOT(openInNewWindow()));
+
+ // 'Search' toolbar
+ m_searchBox = new DolphinSearchBox(this);
+ connect(m_searchBox, SIGNAL(search(KUrl)), this, SLOT(searchItems(KUrl)));
+
+ KAction* search = new KAction(this);
+ actionCollection()->addAction("search_bar", search);
+ search->setText(i18nc("@action:inmenu", "Search Bar"));
+ search->setDefaultWidget(m_searchBox);
+ search->setShortcutConfigurable(false);
}
void DolphinMainWindow::setupDockWidgets()
QDockWidget* infoDock = new QDockWidget(i18nc("@title:window", "Information"));
infoDock->setObjectName("infoDock");
infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
- SidebarPage* infoWidget = new InfoSidebarPage(infoDock);
- infoDock->setWidget(infoWidget);
+ Panel* infoPanel = new InformationPanel(infoDock);
+ infoDock->setWidget(infoPanel);
- infoDock->toggleViewAction()->setText(i18nc("@title:window", "Information"));
- infoDock->toggleViewAction()->setShortcut(Qt::Key_F11);
+ QAction* infoAction = infoDock->toggleViewAction();
+ infoAction->setText(i18nc("@title:window", "Information"));
+ infoAction->setShortcut(Qt::Key_F11);
+ infoAction->setIcon(KIcon("dialog-information"));
actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction());
addDockWidget(Qt::RightDockWidgetArea, infoDock);
connect(this, SIGNAL(urlChanged(KUrl)),
- infoWidget, SLOT(setUrl(KUrl)));
+ infoPanel, SLOT(setUrl(KUrl)));
connect(this, SIGNAL(selectionChanged(KFileItemList)),
- infoWidget, SLOT(setSelection(KFileItemList)));
+ infoPanel, SLOT(setSelection(KFileItemList)));
connect(this, SIGNAL(requestItemInfo(KFileItem)),
- infoWidget, SLOT(requestDelayedItemInfo(KFileItem)));
-
- // setup "Tree View"
- QDockWidget* treeViewDock = new QDockWidget(i18nc("@title:window", "Folders"));
- treeViewDock->setObjectName("treeViewDock");
- treeViewDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
- TreeViewSidebarPage* treeWidget = new TreeViewSidebarPage(treeViewDock);
- treeViewDock->setWidget(treeWidget);
-
- treeViewDock->toggleViewAction()->setText(i18nc("@title:window", "Folders"));
- treeViewDock->toggleViewAction()->setShortcut(Qt::Key_F7);
- actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction());
-
- addDockWidget(Qt::LeftDockWidgetArea, treeViewDock);
+ infoPanel, SLOT(requestDelayedItemInfo(KFileItem)));
+
+ // setup "Folders"
+ QDockWidget* foldersDock = new QDockWidget(i18nc("@title:window", "Folders"));
+ foldersDock->setObjectName("foldersDock");
+ foldersDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ FoldersPanel* foldersPanel = new FoldersPanel(foldersDock);
+ foldersDock->setWidget(foldersPanel);
+
+ QAction* foldersAction = foldersDock->toggleViewAction();
+ foldersAction->setText(i18nc("@title:window", "Folders"));
+ foldersAction->setShortcut(Qt::Key_F7);
+ foldersAction->setIcon(KIcon("folder"));
+ actionCollection()->addAction("show_folders_panel", foldersDock->toggleViewAction());
+
+ addDockWidget(Qt::LeftDockWidgetArea, foldersDock);
connect(this, SIGNAL(urlChanged(KUrl)),
- treeWidget, SLOT(setUrl(KUrl)));
- connect(treeWidget, SIGNAL(changeUrl(KUrl, Qt::MouseButtons)),
+ foldersPanel, SLOT(setUrl(KUrl)));
+ connect(foldersPanel, SIGNAL(changeUrl(KUrl, Qt::MouseButtons)),
this, SLOT(handlePlacesClick(KUrl, Qt::MouseButtons)));
- connect(treeWidget, SIGNAL(changeSelection(KFileItemList)),
+ connect(foldersPanel, SIGNAL(changeSelection(KFileItemList)),
this, SLOT(changeSelection(KFileItemList)));
// setup "Terminal"
QDockWidget* terminalDock = new QDockWidget(i18nc("@title:window Shell terminal", "Terminal"));
terminalDock->setObjectName("terminalDock");
terminalDock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
- SidebarPage* terminalWidget = new TerminalSidebarPage(terminalDock);
- terminalDock->setWidget(terminalWidget);
+ Panel* terminalPanel = new TerminalPanel(terminalDock);
+ terminalDock->setWidget(terminalPanel);
- connect(terminalWidget, SIGNAL(hideTerminalSidebarPage()), terminalDock, SLOT(hide()));
+ connect(terminalPanel, SIGNAL(hideTerminalPanel()), terminalDock, SLOT(hide()));
- terminalDock->toggleViewAction()->setText(i18nc("@title:window Shell terminal", "Terminal"));
- terminalDock->toggleViewAction()->setShortcut(Qt::Key_F4);
+ QAction* terminalAction = terminalDock->toggleViewAction();
+ terminalAction->setText(i18nc("@title:window Shell terminal", "Terminal"));
+ terminalAction->setShortcut(Qt::Key_F4);
+ terminalAction->setIcon(KIcon("terminal"));
actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction());
addDockWidget(Qt::BottomDockWidgetArea, terminalDock);
connect(this, SIGNAL(urlChanged(KUrl)),
- terminalWidget, SLOT(setUrl(KUrl)));
+ terminalPanel, SLOT(setUrl(KUrl)));
#endif
const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun();
if (firstRun) {
- treeViewDock->hide();
+ foldersDock->hide();
#ifndef Q_OS_WIN
terminalDock->hide();
#endif
placesDock->setObjectName("placesDock");
placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
- DolphinFilePlacesView* placesView = new DolphinFilePlacesView(placesDock);
- placesDock->setWidget(placesView);
- placesView->setModel(DolphinSettings::instance().placesModel());
- placesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ PlacesPanel* placesPanel = new PlacesPanel(placesDock);
+ placesDock->setWidget(placesPanel);
+ placesPanel->setModel(DolphinSettings::instance().placesModel());
+ placesPanel->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- placesDock->toggleViewAction()->setText(i18nc("@title:window", "Places"));
- placesDock->toggleViewAction()->setShortcut(Qt::Key_F9);
+ QAction* placesAction = placesDock->toggleViewAction();
+ placesAction->setText(i18nc("@title:window", "Places"));
+ placesAction->setShortcut(Qt::Key_F9);
+ placesAction->setIcon(KIcon("bookmarks"));
actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction());
addDockWidget(Qt::LeftDockWidgetArea, placesDock);
- connect(placesView, SIGNAL(urlChanged(KUrl, Qt::MouseButtons)),
+ connect(placesPanel, SIGNAL(urlChanged(KUrl, Qt::MouseButtons)),
this, SLOT(handlePlacesClick(KUrl, Qt::MouseButtons)));
connect(this, SIGNAL(urlChanged(KUrl)),
- placesView, SLOT(setUrl(KUrl)));
+ placesPanel, SLOT(setUrl(KUrl)));
}
void DolphinMainWindow::updateEditActions()
name = url.fileName();
if (name.isEmpty()) {
name = url.protocol();
+ } else {
+ // Make sure that a '&' inside the directory name is displayed correctly
+ // and not misinterpreted as a keyboard shortcut in QTabBar::setTabText()
+ name.replace('&', "&&");
}
}
return name;