]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Add libkmetadata detection and minor fixes
[dolphin.git] / src / dolphinmainwindow.cpp
index e4fcc6a9718980df6d237c54a35f878942afa134..2585a7b82d9e9bad2cc97a4ea3da75e8c05b2793 100644 (file)
@@ -19,6 +19,7 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *\r
  ***************************************************************************/\r
 \r
+#include <config-kmetadata.h>\r
 #include "dolphinmainwindow.h"\r
 \r
 #include <assert.h>\r
 #include "dolphinsettings.h"\r
 #include "bookmarkssidebarpage.h"\r
 #include "infosidebarpage.h"\r
-#include "generalsettings.h"\r
+#include "dolphin_generalsettings.h"\r
 #include "viewpropertiesdialog.h"\r
 #include "viewproperties.h"\r
+#include "metadataloader.h"\r
+#include "mainwindowadaptor.h"\r
 \r
 #include <kaction.h>\r
 #include <kactioncollection.h>\r
@@ -48,6 +51,7 @@
 #include <kicon.h>\r
 #include <kiconloader.h>\r
 #include <kio/netaccess.h>\r
+#include <kio/deletejob.h>\r
 #include <kio/renamedialog.h>\r
 #include <kinputdialog.h>\r
 #include <klocale.h>\r
 #include <QSplitter>\r
 #include <QDockWidget>\r
 \r
-DolphinMainWindow::DolphinMainWindow() :\r
+DolphinMainWindow::DolphinMainWindow(int id) :\r
     KMainWindow(0),\r
     m_newMenu(0),\r
     m_splitter(0),\r
-    m_activeView(0)\r
+    m_activeView(0),\r
+    m_id(id)\r
 {\r
     setObjectName("Dolphin");\r
     m_view[PrimaryIdx] = 0;\r
     m_view[SecondaryIdx] = 0;\r
 \r
+    new MainWindowAdaptor(this);\r
+    QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this);\r
+\r
     KonqUndoManager::incRef();\r
 \r
     KonqUndoManager* undoManager = KonqUndoManager::self();\r
@@ -147,20 +155,20 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
         QString seq = QKeySequence(Qt::ShiftModifier).toString();\r
         seq.chop(1); // chop superfluous '+'\r
         QAction* moveAction = popup.addAction(KIcon("goto"),\r
-                                              i18n("&Move Here") + "\t" + seq);\r
+                                              i18n("&Move Here") + '\t' + seq);\r
 \r
         seq = QKeySequence(Qt::ControlModifier).toString();\r
         seq.chop(1);\r
         QAction* copyAction = popup.addAction(KIcon("editcopy"),\r
-                                              i18n("&Copy Here") + "\t" + seq);\r
+                                              i18n("&Copy Here") + '\t' + seq);\r
 \r
         seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString();\r
         seq.chop(1);\r
         QAction* linkAction = popup.addAction(KIcon("www"),\r
-                                              i18n("&Link Here") + "\t" + seq);\r
+                                              i18n("&Link Here") + '\t' + seq);\r
 \r
         popup.addSeparator();\r
-        QAction* cancelAction = popup.addAction(KIcon("stop"), i18n("Cancel"));\r
+        popup.addAction(KIcon("stop"), i18n("Cancel"));\r
 \r
         QAction* activatedAction = popup.exec(QCursor::pos());\r
         if (activatedAction == moveAction) {\r
@@ -172,7 +180,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
         else if (activatedAction == linkAction) {\r
             action = Qt::LinkAction;\r
         }\r
-        else if (activatedAction == cancelAction) {\r
+        else {\r
             return;\r
         }\r
     }\r
@@ -230,6 +238,13 @@ void DolphinMainWindow::refreshViews()
     emit activeViewChanged();\r
 }\r
 \r
+void DolphinMainWindow::changeUrl(const QString& url)\r
+{\r
+    if (activeView() != 0) {\r
+        activeView()->setUrl(KUrl(url));\r
+    }\r
+}\r
+\r
 void DolphinMainWindow::slotViewModeChanged()\r
 {\r
     updateViewActions();\r
@@ -255,6 +270,15 @@ void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting)
         case DolphinView::SortByDate:\r
             action = actionCollection()->action("by_date");\r
             break;\r
+        case DolphinView::SortByPermissions:\r
+            action = actionCollection()->action("by_permissions");\r
+            break;\r
+        case DolphinView::SortByOwner:\r
+            action = actionCollection()->action("by_owner");\r
+            break;\r
+        case DolphinView::SortByGroup:\r
+            action = actionCollection()->action("by_group");\r
+            break;\r
         default:\r
             break;\r
     }\r
@@ -324,7 +348,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
 \r
     // TODO: I assume there will be a generic way in KDE 4 to store the docks\r
     // of the main window. In the meantime they are stored manually:\r
-    QString filename = KStandardDirs::locateLocal("data", KGlobal::instance()->instanceName());\r
+    QString filename = KStandardDirs::locateLocal("data", KGlobal::mainComponent().componentName());\r
     filename.append("/panels_layout");\r
     QFile file(filename);\r
     if (file.open(QIODevice::WriteOnly)) {\r
@@ -338,28 +362,28 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
 \r
 void DolphinMainWindow::saveProperties(KConfig* config)\r
 {\r
-    config->setGroup("Primary view");\r
-    config->writeEntry("Url", m_view[PrimaryIdx]->url().url());\r
-    config->writeEntry("Editable Url", m_view[PrimaryIdx]->isUrlEditable());\r
+    KConfigGroup primaryView = config->group("Primary view");\r
+    primaryView.writeEntry("Url", m_view[PrimaryIdx]->url().url());\r
+    primaryView.writeEntry("Editable Url", m_view[PrimaryIdx]->isUrlEditable());\r
     if (m_view[SecondaryIdx] != 0) {\r
-        config->setGroup("Secondary view");\r
-        config->writeEntry("Url", m_view[SecondaryIdx]->url().url());\r
-        config->writeEntry("Editable Url", m_view[SecondaryIdx]->isUrlEditable());\r
+        KConfigGroup secondaryView = config->group("Secondary view");\r
+        secondaryView.writeEntry("Url", m_view[SecondaryIdx]->url().url());\r
+        secondaryView.writeEntry("Editable Url", m_view[SecondaryIdx]->isUrlEditable());\r
     }\r
 }\r
 \r
 void DolphinMainWindow::readProperties(KConfig* config)\r
 {\r
-    config->setGroup("Primary view");\r
-    m_view[PrimaryIdx]->setUrl(config->readEntry("Url"));\r
-    m_view[PrimaryIdx]->setUrlEditable(config->readEntry("Editable Url", false));\r
+    const KConfigGroup primaryView = config->group("Primary view");\r
+    m_view[PrimaryIdx]->setUrl(primaryView.readEntry("Url"));\r
+    m_view[PrimaryIdx]->setUrlEditable(primaryView.readEntry("Editable Url", false));\r
     if (config->hasGroup("Secondary view")) {\r
-        config->setGroup("Secondary view");\r
+        const KConfigGroup secondaryView = config->group("Secondary view");\r
         if (m_view[SecondaryIdx] == 0) {\r
             toggleSplitView();\r
         }\r
-        m_view[SecondaryIdx]->setUrl(config->readEntry("Url"));\r
-        m_view[SecondaryIdx]->setUrlEditable(config->readEntry("Editable Url", false));\r
+        m_view[SecondaryIdx]->setUrl(secondaryView.readEntry("Url"));\r
+        m_view[SecondaryIdx]->setUrlEditable(secondaryView.readEntry("Editable Url", false));\r
     }\r
     else if (m_view[SecondaryIdx] != 0) {\r
         toggleSplitView();\r
@@ -405,7 +429,7 @@ void DolphinMainWindow::deleteItems()
 \r
     const bool del = KMessageBox::warningContinueCancel(this,\r
                                                         text,\r
-                                                        QString::null,\r
+                                                        QString(),\r
                                                         KGuiItem(i18n("Delete"), KIcon("editdelete"))\r
                                                        ) == KMessageBox::Continue;\r
     if (del) {\r
@@ -488,6 +512,12 @@ void DolphinMainWindow::slotUndoTextChanged(const QString& text)
     }\r
 }\r
 \r
+void DolphinMainWindow::undo()\r
+{\r
+    clearStatusBar();\r
+    KonqUndoManager::self()->undo();\r
+}\r
+\r
 void DolphinMainWindow::cut()\r
 {\r
     QMimeData* mimeData = new QMimeData();\r
@@ -562,7 +592,7 @@ void DolphinMainWindow::updatePasteAction()
             pasteAction->setText(i18n("Paste 1 File"));\r
         }\r
         else {\r
-            pasteAction->setText(i18n("Paste %1 Files").arg(count));\r
+            pasteAction->setText(i18n("Paste %1 Files"count));\r
         }\r
     }\r
     else {\r
@@ -628,6 +658,21 @@ void DolphinMainWindow::sortByDate()
     m_activeView->setSorting(DolphinView::SortByDate);\r
 }\r
 \r
+void DolphinMainWindow::sortByPermissions()\r
+{\r
+    m_activeView->setSorting(DolphinView::SortByPermissions);\r
+}\r
+\r
+void DolphinMainWindow::sortByOwner()\r
+{\r
+    m_activeView->setSorting(DolphinView::SortByOwner);\r
+}\r
+\r
+void DolphinMainWindow::sortByGroup()\r
+{\r
+    m_activeView->setSorting(DolphinView::SortByGroup);\r
+}\r
+\r
 void DolphinMainWindow::toggleSortOrder()\r
 {\r
     const Qt::SortOrder order = (m_activeView->sortOrder() == Qt::Ascending) ?\r
@@ -671,6 +716,7 @@ void DolphinMainWindow::toggleSplitView()
             setActiveView(m_view[PrimaryIdx]);\r
         }\r
     }\r
+    emit activeViewChanged();\r
 }\r
 \r
 void DolphinMainWindow::reloadView()\r
@@ -735,8 +781,6 @@ void DolphinMainWindow::toggleEditLocation()
 \r
 void DolphinMainWindow::editLocation()\r
 {\r
-    KToggleAction* action = static_cast<KToggleAction*>(actionCollection()->action("editable_location"));\r
-    action->setChecked(true);\r
     m_activeView->setUrlEditable(true);\r
 }\r
 \r
@@ -853,6 +897,9 @@ void DolphinMainWindow::init()
     // a proper default window size is given at the end of DolphinMainWindow::init().\r
     GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();\r
     const bool firstRun = generalSettings->firstRun();\r
+    if (firstRun) {\r
+        generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime());\r
+    }\r
 \r
     setAcceptDrops(true);\r
 \r
@@ -907,6 +954,10 @@ void DolphinMainWindow::init()
         // assure a proper default size if Dolphin runs the first time\r
         resize(640, 480);\r
     }\r
+    #ifdef HAVE_KMETADATA\r
+    if (!DolphinApplication::app()->metadataLoader()->storageUp())\r
+        activeView()->statusBar()->setMessage(i18n("Failed to contact Nepomuk service, annotation and tagging are disabled."), DolphinStatusBar::Error);\r
+    #endif\r
 }\r
 \r
 void DolphinMainWindow::loadSettings()\r
@@ -924,8 +975,7 @@ void DolphinMainWindow::loadSettings()
     // TODO: I assume there will be a generic way in KDE 4 to restore the docks\r
     // of the main window. In the meantime they are restored manually (see also\r
     // DolphinMainWindow::closeEvent() for more details):\r
-    QString filename = KStandardDirs::locateLocal("data", KGlobal::instance()->instanceName());\r
-    filename.append("/panels_layout");\r
+    QString filename = KStandardDirs::locateLocal("data", KGlobal::mainComponent().componentName());   filename.append("/panels_layout");\r
     QFile file(filename);\r
     if (file.open(QIODevice::ReadOnly)) {\r
         QByteArray data = file.readAll();\r
@@ -967,14 +1017,14 @@ void DolphinMainWindow::setupActions()
     connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteItems()));\r
 \r
     QAction* properties = actionCollection()->addAction("properties");\r
-    properties->setText(i18n("Propert&ies"));\r
-    properties->setShortcut(Qt::Key_Alt | Qt::Key_Return);\r
+    properties->setText(i18n("Properties"));\r
+    properties->setShortcut(Qt::ALT | Qt::Key_Return);\r
     connect(properties, SIGNAL(triggered()), this, SLOT(properties()));\r
 \r
     KStandardAction::quit(this, SLOT(quit()), actionCollection());\r
 \r
     // setup 'Edit' menu\r
-    KStandardAction::undo(KonqUndoManager::self(),\r
+    KStandardAction::undo(this,\r
                           SLOT(undo()),\r
                           actionCollection());\r
 \r
@@ -1029,10 +1079,25 @@ void DolphinMainWindow::setupActions()
     sortByDate->setText(i18n("By Date"));\r
     connect(sortByDate, SIGNAL(triggered()), this, SLOT(sortByDate()));\r
 \r
+    KToggleAction* sortByPermissions = actionCollection()->add<KToggleAction>("by_permissions");\r
+    sortByPermissions->setText(i18n("By Permissions"));\r
+    connect(sortByPermissions, SIGNAL(triggered()), this, SLOT(sortByPermissions()));\r
+\r
+    KToggleAction* sortByOwner = actionCollection()->add<KToggleAction>("by_owner");\r
+    sortByOwner->setText(i18n("By Owner"));\r
+    connect(sortByOwner, SIGNAL(triggered()), this, SLOT(sortByOwner()));\r
+\r
+    KToggleAction* sortByGroup = actionCollection()->add<KToggleAction>("by_group");\r
+    sortByGroup->setText(i18n("By Group"));\r
+    connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup()));\r
+\r
     QActionGroup* sortGroup = new QActionGroup(this);\r
     sortGroup->addAction(sortByName);\r
     sortGroup->addAction(sortBySize);\r
     sortGroup->addAction(sortByDate);\r
+    sortGroup->addAction(sortByPermissions);\r
+    sortGroup->addAction(sortByOwner);\r
+    sortGroup->addAction(sortByGroup);\r
 \r
     KToggleAction* sortDescending = actionCollection()->add<KToggleAction>("descending");\r
     sortDescending->setText(i18n("Descending"));\r
@@ -1044,7 +1109,7 @@ void DolphinMainWindow::setupActions()
 \r
     KToggleAction* showHiddenFiles = actionCollection()->add<KToggleAction>("show_hidden_files");\r
     showHiddenFiles->setText(i18n("Show Hidden Files"));\r
-    //showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_      KDE4-TODO: what Qt-Key represents '.'?\r
+    showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_Period);\r
     connect(showHiddenFiles, SIGNAL(triggered()), this, SLOT(toggleShowHiddenFiles()));\r
 \r
     KToggleAction* split = actionCollection()->add<KToggleAction>("split_view");\r
@@ -1064,12 +1129,15 @@ void DolphinMainWindow::setupActions()
     stop->setIcon(KIcon("stop"));\r
     connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading()));\r
 \r
+    // TODO: the URL navigator must emit a signal if the editable state has been\r
+    // changed, so that the corresponding showFullLocation action is updated. Also\r
+    // the naming "Show full Location" is currently confusing...\r
     KToggleAction* showFullLocation = actionCollection()->add<KToggleAction>("editable_location");\r
     showFullLocation->setText(i18n("Show Full Location"));\r
     showFullLocation->setShortcut(Qt::CTRL | Qt::Key_L);\r
     connect(showFullLocation, SIGNAL(triggered()), this, SLOT(toggleEditLocation()));\r
 \r
-    KToggleAction* editLocation = actionCollection()->add<KToggleAction>("edit_location");\r
+    QAction* editLocation = actionCollection()->addAction("edit_location");\r
     editLocation->setText(i18n("Edit Location"));\r
     editLocation->setShortcut(Qt::Key_F6);\r
     connect(editLocation, SIGNAL(triggered()), this, SLOT(editLocation()));\r
@@ -1227,6 +1295,10 @@ void DolphinMainWindow::updateViewActions()
 \r
     KToggleAction* splitAction = static_cast<KToggleAction*>(actionCollection()->action("split_view"));\r
     splitAction->setChecked(m_view[SecondaryIdx] != 0);\r
+\r
+    KToggleAction* editableLocactionAction =\r
+        static_cast<KToggleAction*>(actionCollection()->action("editable_location"));\r
+    editableLocactionAction->setChecked(m_activeView->isUrlEditable());\r
 }\r
 \r
 void DolphinMainWindow::updateGoActions()\r