#include <config-kmetadata.h>\r
#include "dolphinmainwindow.h"\r
\r
-#include <assert.h>\r
-\r
#include "bookmarkssidebarpage.h"\r
#include "dolphinapplication.h"\r
#include "dolphinnewmenu.h"\r
#include "dolphinsettingsdialog.h"\r
#include "dolphinstatusbar.h"\r
#include "infosidebarpage.h"\r
-#include "metadataloader.h"\r
+#include "metadatawidget.h"\r
#include "mainwindowadaptor.h"\r
#include "treeviewsidebarpage.h"\r
#include "urlnavigator.h"\r
#include <kmenu.h>\r
#include <kmessagebox.h>\r
#include <konqmimedata.h>\r
+#include <konq_operations.h>\r
#include <kpropertiesdialog.h>\r
#include <kprotocolinfo.h>\r
#include <ktoggleaction.h>\r
\r
void DolphinMainWindow::setActiveView(DolphinView* view)\r
{\r
- assert((view == m_view[PrimaryIdx]) || (view == m_view[SecondaryIdx]));\r
+ Q_ASSERT((view == m_view[PrimaryIdx]) || (view == m_view[SecondaryIdx]));\r
if (m_activeView == view) {\r
return;\r
}\r
}\r
}\r
\r
+void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl)\r
+{\r
+ clearStatusBar();\r
+ KonqOperations::rename(this, oldUrl, newUrl);\r
+ m_undoCommandTypes.append(KonqUndoManager::RENAME);\r
+}\r
+\r
void DolphinMainWindow::refreshViews()\r
{\r
const bool split = DolphinSettings::instance().generalSettings()->splitView();\r
}\r
\r
m_activeView = isPrimaryViewActive ? m_view[PrimaryIdx] : m_view[SecondaryIdx];\r
- assert(m_activeView != 0);\r
+ Q_ASSERT(m_activeView != 0);\r
\r
updateViewActions();\r
emit activeViewChanged();\r
}\r
\r
-void DolphinMainWindow::changeUrl(const QString& url)\r
+void DolphinMainWindow::changeUrl(const KUrl& url)\r
{\r
if (activeView() != 0) {\r
- activeView()->setUrl(KUrl(url));\r
+ activeView()->setUrl(url);\r
+ updateEditActions();\r
+ updateViewActions();\r
+ updateGoActions();\r
+ setCaption(url.fileName());\r
+ emit urlChanged(url);\r
}\r
}\r
\r
+void DolphinMainWindow::changeSelection(const KFileItemList& selection)\r
+{\r
+ activeView()->changeSelection(selection);\r
+}\r
+\r
void DolphinMainWindow::slotViewModeChanged()\r
{\r
updateViewActions();\r
descending->setChecked(sortDescending);\r
}\r
\r
-void DolphinMainWindow::slotSelectionChanged()\r
+void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation info)\r
+{\r
+ QAction* action = 0;\r
+ switch (info) {\r
+ case KFileItemDelegate::FriendlyMimeType:\r
+ action = actionCollection()->action("show_mime_info");\r
+ break;\r
+ case KFileItemDelegate::Size:\r
+ action = actionCollection()->action("show_size_info");\r
+ break;\r
+ case KFileItemDelegate::ModificationTime:\r
+ action = actionCollection()->action("show_date_info");\r
+ break;\r
+ case KFileItemDelegate::NoInformation:\r
+ default:\r
+ action = actionCollection()->action("clear_info");\r
+ break;\r
+ }\r
+\r
+ if (action != 0) {\r
+ KToggleAction* toggleAction = static_cast<KToggleAction*>(action);\r
+ toggleAction->setChecked(true);\r
+\r
+ QActionGroup* group = toggleAction->actionGroup();\r
+ Q_ASSERT(group != 0);\r
+ group->setEnabled(m_activeView->mode() == DolphinView::IconsView);\r
+ }\r
+}\r
+\r
+void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)\r
{\r
updateEditActions();\r
\r
- assert(m_view[PrimaryIdx] != 0);\r
+ Q_ASSERT(m_view[PrimaryIdx] != 0);\r
int selectedUrlsCount = m_view[PrimaryIdx]->selectedUrls().count();\r
if (m_view[SecondaryIdx] != 0) {\r
selectedUrlsCount += m_view[SecondaryIdx]->selectedUrls().count();\r
\r
m_activeView->updateStatusBar();\r
\r
- emit selectionChanged();\r
+ emit selectionChanged(selection);\r
}\r
\r
void DolphinMainWindow::slotHistoryChanged()\r
updateHistory();\r
}\r
\r
-void DolphinMainWindow::slotUrlChanged(const KUrl& url)\r
-{\r
- updateEditActions();\r
- updateViewActions();\r
- updateGoActions();\r
- setCaption(url.fileName());\r
-}\r
-\r
void DolphinMainWindow::updateFilterBarAction(bool show)\r
{\r
KToggleAction* showFilterBarAction =\r
clearStatusBar();\r
const KUrl::List selectedUrls = m_activeView->selectedUrls();\r
KonqOperations::del(this, KonqOperations::TRASH, selectedUrls);\r
- m_undoOperations.append(KonqOperations::TRASH);\r
+ m_undoCommandTypes.append(KonqUndoManager::TRASH);\r
}\r
\r
void DolphinMainWindow::deleteItems()\r
{\r
clearStatusBar();\r
\r
+ // TODO: if KonqOperations::askDeleteConfirmation() would indicate when\r
+ // the operation has been finished, this method should be used.\r
+\r
KUrl::List list = m_activeView->selectedUrls();\r
const uint itemCount = list.count();\r
- assert(itemCount >= 1);\r
+ Q_ASSERT(itemCount >= 1);\r
\r
QString text;\r
if (itemCount > 1) {\r
- text = i18n("Do you really want to delete the %1 selected items?",itemCount);\r
+ text = i18n("Do you really want to delete the %1 selected items?", itemCount);\r
}\r
else {\r
const KUrl& url = list.first();\r
- text = i18n("Do you really want to delete '%1'?",url.fileName());\r
+ QString itemName;\r
+ if (url.protocol() == "trash" ) {\r
+ itemName = url.path();\r
+ // TODO: check comment in konq_undo.cc in the method askDeleteConfirmation()\r
+ itemName.remove(QRegExp("^/[0-9]*-"));\r
+ }\r
+ else {\r
+ itemName = url.pathOrUrl();\r
+ }\r
+ text = i18n("Do you really want to delete '%1'?", itemName);\r
}\r
\r
const bool del = KMessageBox::warningContinueCancel(this,\r
undoAction->setEnabled(available);\r
}\r
\r
- if (available && (m_undoOperations.count() > 0)) {\r
- const KonqOperations::Operation op = m_undoOperations.takeFirst();\r
+ if (available && (m_undoCommandTypes.count() > 0)) {\r
+ const KonqUndoManager::CommandType command = m_undoCommandTypes.takeFirst();\r
DolphinStatusBar* statusBar = m_activeView->statusBar();\r
- switch (op) {\r
- case KonqOperations::COPY:\r
+ switch (command) {\r
+ case KonqUndoManager::COPY:\r
statusBar->setMessage(i18n("Copy operation completed."),\r
DolphinStatusBar::OperationCompleted);\r
break;\r
- case KonqOperations::MOVE:\r
+ case KonqUndoManager::MOVE:\r
statusBar->setMessage(i18n("Move operation completed."),\r
DolphinStatusBar::OperationCompleted);\r
break;\r
- case KonqOperations::LINK:\r
+ case KonqUndoManager::LINK:\r
statusBar->setMessage(i18n("Link operation completed."),\r
DolphinStatusBar::OperationCompleted);\r
break;\r
- case KonqOperations::TRASH:\r
+ case KonqUndoManager::TRASH:\r
statusBar->setMessage(i18n("Move to trash operation completed."),\r
DolphinStatusBar::OperationCompleted);\r
break;\r
+ case KonqUndoManager::RENAME:\r
+ statusBar->setMessage(i18n("Renaming operation completed."),\r
+ DolphinStatusBar::OperationCompleted);\r
+ break;\r
+\r
+ case KonqUndoManager::MKDIR:\r
+ statusBar->setMessage(i18n("Created directory."),\r
+ DolphinStatusBar::OperationCompleted);\r
+ break;\r
+\r
default:\r
break;\r
}\r
if (!urls.isEmpty()) {\r
pasteAction->setEnabled(true);\r
\r
- const int count = urls.count();\r
- if (count == 1) {\r
- pasteAction->setText(i18n("Paste 1 File"));\r
- }\r
- else {\r
- pasteAction->setText(i18n("Paste %1 Files", count));\r
- }\r
+ pasteAction->setText(i18np("Paste One File", "Paste %1 Files", urls.count()));\r
}\r
else {\r
pasteAction->setEnabled(false);\r
m_activeView->setSortOrder(order);\r
}\r
\r
+void DolphinMainWindow::clearInfo()\r
+{\r
+ m_activeView->setAdditionalInfo(KFileItemDelegate::NoInformation);\r
+}\r
+\r
+void DolphinMainWindow::showMimeInfo()\r
+{\r
+ clearStatusBar();\r
+ m_activeView->setAdditionalInfo(KFileItemDelegate::FriendlyMimeType);\r
+}\r
+\r
+void DolphinMainWindow::showSizeInfo()\r
+{\r
+ clearStatusBar();\r
+ m_activeView->setAdditionalInfo(KFileItemDelegate::Size);\r
+}\r
+\r
+void DolphinMainWindow::showDateInfo()\r
+{\r
+ clearStatusBar();\r
+ m_activeView->setAdditionalInfo(KFileItemDelegate::ModificationTime);\r
+}\r
+\r
void DolphinMainWindow::toggleSplitView()\r
{\r
if (m_view[SecondaryIdx] == 0) {\r
connectViewSignals(SecondaryIdx);\r
m_splitter->addWidget(m_view[SecondaryIdx]);\r
m_splitter->setSizes(QList<int>() << newWidth << newWidth);\r
+ m_view[SecondaryIdx]->reload();\r
m_view[SecondaryIdx]->show();\r
}\r
else {\r
// - both in the secondary view\r
// - one in the primary view and the other in the secondary\r
// view\r
- assert(m_view[PrimaryIdx] != 0);\r
+ Q_ASSERT(m_view[PrimaryIdx] != 0);\r
\r
KUrl urlA;\r
KUrl urlB;\r
\r
switch (urls.count()) {\r
case 0: {\r
- assert(m_view[SecondaryIdx] != 0);\r
+ Q_ASSERT(m_view[SecondaryIdx] != 0);\r
urls = m_view[SecondaryIdx]->selectedUrls();\r
- assert(urls.count() == 2);\r
+ Q_ASSERT(urls.count() == 2);\r
urlA = urls[0];\r
urlB = urls[1];\r
break;\r
\r
case 1: {\r
urlA = urls[0];\r
- assert(m_view[SecondaryIdx] != 0);\r
+ Q_ASSERT(m_view[SecondaryIdx] != 0);\r
urls = m_view[SecondaryIdx]->selectedUrls();\r
- assert(urls.count() == 1);\r
+ Q_ASSERT(urls.count() == 1);\r
urlB = urls[0];\r
break;\r
}\r
default: {\r
// may not happen: compareFiles may only get invoked if 2\r
// files are selected\r
- assert(false);\r
+ Q_ASSERT(false);\r
}\r
}\r
\r
DolphinSettings& settings = DolphinSettings::instance();\r
\r
KBookmarkManager* manager = settings.bookmarkManager();\r
- assert(manager != 0);\r
+ Q_ASSERT(manager != 0);\r
KBookmarkGroup root = manager->root();\r
if (root.first().isNull()) {\r
root.addBookmark(manager, i18n("Home"), settings.generalSettings()->homeUrl(), "folder-home");\r
homeUrl,\r
props.viewMode(),\r
props.showHiddenFiles());\r
- connectViewSignals(PrimaryIdx);\r
- m_view[PrimaryIdx]->show();\r
\r
m_activeView = m_view[PrimaryIdx];\r
+ connectViewSignals(PrimaryIdx);\r
+ m_view[PrimaryIdx]->reload();\r
+ m_view[PrimaryIdx]->show();\r
\r
setCentralWidget(m_splitter);\r
setupDockWidgets();\r
resize(640, 480);\r
}\r
#ifdef HAVE_KMETADATA\r
- if (!DolphinApplication::app()->metadataLoader()->storageUp())\r
+ if ( !MetaDataWidget::metaDataAvailable() )\r
activeView()->statusBar()->setMessage(i18n("Failed to contact Nepomuk service, annotation and tagging are disabled."), DolphinStatusBar::Error);\r
#endif\r
+\r
+ emit urlChanged(homeUrl);\r
}\r
\r
void DolphinMainWindow::loadSettings()\r
sortDescending->setText(i18n("Descending"));\r
connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder()));\r
\r
+ KToggleAction* clearInfo = actionCollection()->add<KToggleAction>("clear_info");\r
+ clearInfo->setText(i18n("No Information"));\r
+ connect(clearInfo, SIGNAL(triggered()), this, SLOT(clearInfo()));\r
+\r
+ KToggleAction* showMimeInfo = actionCollection()->add<KToggleAction>("show_mime_info");\r
+ showMimeInfo->setText(i18n("Type"));\r
+ connect(showMimeInfo, SIGNAL(triggered()), this, SLOT(showMimeInfo()));\r
+\r
+ KToggleAction* showSizeInfo = actionCollection()->add<KToggleAction>("show_size_info");\r
+ showSizeInfo->setText(i18n("Size"));\r
+ connect(showSizeInfo, SIGNAL(triggered()), this, SLOT(showSizeInfo()));\r
+\r
+ KToggleAction* showDateInfo = actionCollection()->add<KToggleAction>("show_date_info");\r
+ showDateInfo->setText(i18n("Date"));\r
+ connect(showDateInfo, SIGNAL(triggered()), this, SLOT(showDateInfo()));\r
+\r
+ QActionGroup* infoGroup = new QActionGroup(this);\r
+ infoGroup->addAction(clearInfo);\r
+ infoGroup->addAction(showMimeInfo);\r
+ infoGroup->addAction(showSizeInfo);\r
+ infoGroup->addAction(showDateInfo);\r
+\r
KToggleAction* showPreview = actionCollection()->add<KToggleAction>("show_preview");\r
showPreview->setText(i18n("Preview"));\r
showPreview->setIcon(KIcon("thumbnail-show"));\r
// after the dock concept has been finalized.\r
\r
// setup "Bookmarks"\r
- QDockWidget* shortcutsDock = new QDockWidget(i18n("Bookmarks"));\r
+ QDockWidget* shortcutsDock = new QDockWidget(i18n("Bookmarks"), this);\r
shortcutsDock->setObjectName("bookmarksDock");\r
shortcutsDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
- shortcutsDock->setWidget(new BookmarksSidebarPage(this));\r
+ SidebarPage* shortcutsWidget = new BookmarksSidebarPage(shortcutsDock);\r
+ shortcutsDock->setWidget(shortcutsWidget);\r
+\r
\r
shortcutsDock->toggleViewAction()->setText(i18n("Show Bookmarks Panel"));\r
actionCollection()->addAction("show_bookmarks_panel", shortcutsDock->toggleViewAction());\r
\r
addDockWidget(Qt::LeftDockWidgetArea, shortcutsDock);\r
+ connectSidebarPage(shortcutsWidget);\r
\r
// setup "Information"\r
- QDockWidget* infoDock = new QDockWidget(i18n("Information"));\r
+ QDockWidget* infoDock = new QDockWidget(i18n("Information"), this);\r
infoDock->setObjectName("infoDock");\r
infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
- infoDock->setWidget(new InfoSidebarPage(this));\r
+ SidebarPage* infoWidget = new InfoSidebarPage(infoDock);\r
+ infoDock->setWidget(infoWidget);\r
+\r
\r
infoDock->toggleViewAction()->setText(i18n("Show Information Panel"));\r
actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction());\r
\r
addDockWidget(Qt::RightDockWidgetArea, infoDock);\r
+ connectSidebarPage(infoWidget);\r
\r
// setup "Tree View"\r
QDockWidget* treeViewDock = new QDockWidget(i18n("Folders")); // TODO: naming?\r
treeViewDock->setObjectName("treeViewDock");\r
treeViewDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
- treeViewDock->setWidget(new TreeViewSidebarPage(this));\r
+ TreeViewSidebarPage* treeWidget = new TreeViewSidebarPage(treeViewDock);\r
+ treeViewDock->setWidget(treeWidget);\r
\r
treeViewDock->toggleViewAction()->setText(i18n("Show Folders Panel"));\r
actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction());\r
\r
addDockWidget(Qt::LeftDockWidgetArea, treeViewDock);\r
+ connectSidebarPage(treeWidget);\r
\r
const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun();\r
if (firstRun) {\r
void DolphinMainWindow::updateHistory()\r
{\r
int index = 0;\r
- const QLinkedList<UrlNavigator::HistoryElem> list = m_activeView->urlHistory(index);\r
\r
QAction* backAction = actionCollection()->action("go_back");\r
if (backAction != 0) {\r
- backAction->setEnabled(index < static_cast<int>(list.count()) - 1);\r
+ backAction->setEnabled(index < m_activeView->urlNavigator()->historySize() - 1);\r
}\r
\r
QAction* forwardAction = actionCollection()->action("go_forward");\r
\r
slotSortingChanged(m_activeView->sorting());\r
slotSortOrderChanged(m_activeView->sortOrder());\r
+ slotAdditionalInfoChanged(m_activeView->additionalInfo());\r
\r
KToggleAction* showFilterBarAction =\r
static_cast<KToggleAction*>(actionCollection()->action("show_filter_bar"));\r
void DolphinMainWindow::copyUrls(const KUrl::List& source, const KUrl& dest)\r
{\r
KonqOperations::copy(this, KonqOperations::COPY, source, dest);\r
- m_undoOperations.append(KonqOperations::COPY);\r
+ m_undoCommandTypes.append(KonqUndoManager::COPY);\r
}\r
\r
void DolphinMainWindow::moveUrls(const KUrl::List& source, const KUrl& dest)\r
{\r
KonqOperations::copy(this, KonqOperations::MOVE, source, dest);\r
- m_undoOperations.append(KonqOperations::MOVE);\r
+ m_undoCommandTypes.append(KonqUndoManager::MOVE);\r
}\r
\r
void DolphinMainWindow::linkUrls(const KUrl::List& source, const KUrl& dest)\r
{\r
KonqOperations::copy(this, KonqOperations::LINK, source, dest);\r
- m_undoOperations.append(KonqOperations::LINK);\r
+ m_undoCommandTypes.append(KonqUndoManager::LINK);\r
}\r
\r
void DolphinMainWindow::clearStatusBar()\r
this, SLOT(slotSortingChanged(DolphinView::Sorting)));\r
connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)),\r
this, SLOT(slotSortOrderChanged(Qt::SortOrder)));\r
- connect(view, SIGNAL(selectionChanged()),\r
- this, SLOT(slotSelectionChanged()));\r
+ connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::AdditionalInformation)),\r
+ this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation)));\r
+ connect(view, SIGNAL(selectionChanged(KFileItemList)),\r
+ this, SLOT(slotSelectionChanged(KFileItemList)));\r
connect(view, SIGNAL(showFilterBarChanged(bool)),\r
this, SLOT(updateFilterBarAction(bool)));\r
+ connect(view, SIGNAL(urlChanged(KUrl)),\r
+ this, SLOT(changeUrl(KUrl)));\r
\r
const UrlNavigator* navigator = view->urlNavigator();\r
connect(navigator, SIGNAL(urlChanged(const KUrl&)),\r
- this, SLOT(slotUrlChanged(const KUrl&)));\r
+ this, SLOT(changeUrl(const KUrl&)));\r
connect(navigator, SIGNAL(historyChanged()),\r
this, SLOT(slotHistoryChanged()));\r
+}\r
+void DolphinMainWindow::connectSidebarPage(SidebarPage* page)\r
+{\r
+ connect(page, SIGNAL(changeUrl(KUrl)),\r
+ this, SLOT(changeUrl(KUrl)));\r
+ connect(page, SIGNAL(changeSelection(KFileItemList)),\r
+ this, SLOT(changeSelection(KFileItemList)));\r
+ connect(page, SIGNAL(urlsDropped(KUrl::List,KUrl)),\r
+ this, SLOT(dropUrls(KUrl::List,KUrl)));\r
\r
+ connect(this, SIGNAL(urlChanged(KUrl)),\r
+ page, SLOT(setUrl(KUrl)));\r
+ connect(this, SIGNAL(selectionChanged(KFileItemList)),\r
+ page, SLOT(setSelection(KFileItemList)));\r
}\r
\r
DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) :\r
KonqUndoManager::UiInterface(mainWin),\r
m_mainWin(mainWin)\r
{\r
- assert(m_mainWin != 0);\r
+ Q_ASSERT(m_mainWin != 0);\r
}\r
\r
DolphinMainWindow::UndoUiInterface::~UndoUiInterface()\r