]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
change shortcut from the information sidebar to F11 for having a common setting like...
[dolphin.git] / src / dolphinmainwindow.cpp
index ddf7b19b11aa52e7b8c3f441711b64e7b7263bd4..ce505ea3f69c0bafacb4542b368f2d439b9cb1d3 100644 (file)
@@ -176,17 +176,20 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
         QString seq = QKeySequence(Qt::ShiftModifier).toString();
         seq.chop(1); // chop superfluous '+'
         QAction* moveAction = popup.addAction(KIcon("goto-page"),
-                                              i18nc("@action:inmenu", "&Move Here") + '\t' + seq);
+                                              i18nc("@action:inmenu",
+                                                    "&Move Here\t<shortcut>%1</shortcut>", seq));
 
         seq = QKeySequence(Qt::ControlModifier).toString();
         seq.chop(1);
         QAction* copyAction = popup.addAction(KIcon("edit-copy"),
-                                              i18nc("@action:inmenu", "&Copy Here") + '\t' + seq);
+                                              i18nc("@action:inmenu",
+                                                    "&Copy Here\t<shortcut>%1</shortcut>", seq));
 
         seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString();
         seq.chop(1);
         QAction* linkAction = popup.addAction(KIcon("www"),
-                                              i18nc("@action:inmenu", "&Link Here") + '\t' + seq);
+                                              i18nc("@action:inmenu",
+                                                    "&Link Here\t<shortcut>%1</shortcut>", seq));
 
         popup.addSeparator();
         popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel"));
@@ -234,7 +237,7 @@ void DolphinMainWindow::changeUrl(const KUrl& url)
     }
 }
 
-void DolphinMainWindow::changeSelection(const KFileItemList& selection)
+void DolphinMainWindow::changeSelection(const QList<KFileItem>& selection)
 {
     activeViewContainer()->view()->changeSelection(selection);
 }
@@ -273,32 +276,32 @@ void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting)
     QAction* action = 0;
     switch (sorting) {
     case DolphinView::SortByName:
-        action = actionCollection()->action("by_name");
+        action = actionCollection()->action("sort_by_name");
         break;
     case DolphinView::SortBySize:
-        action = actionCollection()->action("by_size");
+        action = actionCollection()->action("sort_by_size");
         break;
     case DolphinView::SortByDate:
-        action = actionCollection()->action("by_date");
+        action = actionCollection()->action("sort_by_date");
         break;
     case DolphinView::SortByPermissions:
-        action = actionCollection()->action("by_permissions");
+        action = actionCollection()->action("sort_by_permissions");
         break;
     case DolphinView::SortByOwner:
-        action = actionCollection()->action("by_owner");
+        action = actionCollection()->action("sort_by_owner");
         break;
     case DolphinView::SortByGroup:
-        action = actionCollection()->action("by_group");
+        action = actionCollection()->action("sort_by_group");
         break;
     case DolphinView::SortByType:
-        action = actionCollection()->action("by_type");
+        action = actionCollection()->action("sort_by_type");
         break;
 #ifdef HAVE_NEPOMUK
     case DolphinView::SortByRating:
-        action = actionCollection()->action("by_rating");
+        action = actionCollection()->action("sort_by_rating");
         break;
     case DolphinView::SortByTags:
-        action = actionCollection()->action("by_tags");
+        action = actionCollection()->action("sort_by_tags");
         break;
 #endif
     default:
@@ -348,7 +351,7 @@ void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::AdditionalI
     }
 }
 
-void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
+void DolphinMainWindow::slotSelectionChanged(const QList<KFileItem>& selection)
 {
     updateEditActions();
 
@@ -366,9 +369,9 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
     emit selectionChanged(selection);
 }
 
-void DolphinMainWindow::slotRequestItemInfo(const KUrl& url)
+void DolphinMainWindow::slotRequestItemInfo(const KFileItem& item)
 {
-    emit requestItemInfo(url);
+    emit requestItemInfo(item);
 }
 
 void DolphinMainWindow::slotHistoryChanged()
@@ -487,8 +490,14 @@ void DolphinMainWindow::deleteItems()
 
 void DolphinMainWindow::properties()
 {
-    const KFileItemList list = m_activeViewContainer->view()->selectedItems();
-    KPropertiesDialog dialog(list, this);
+    QList<KFileItem> list = m_activeViewContainer->view()->selectedItems();
+    // ### KPropertiesDialog still uses pointer-based KFileItemList
+    KFileItemList lst;
+    // Can't be a const_iterator :(
+    for ( QList<KFileItem>::iterator it = list.begin(), end = list.end() ; it != end ; ++it ) {
+        lst << & *it; // ugly!
+    }
+    KPropertiesDialog dialog(lst, this);
     dialog.exec();
 }
 
@@ -649,7 +658,7 @@ void DolphinMainWindow::updatePasteAction()
     if (!urls.isEmpty()) {
         pasteAction->setEnabled(true);
 
-        pasteAction->setText(i18np("Paste One File", "Paste %1 Files", urls.count()));
+        pasteAction->setText(i18ncp("@action:inmenu", "Paste One File", "Paste %1 Files", urls.count()));
     } else {
         pasteAction->setEnabled(false);
         pasteAction->setText(i18nc("@action:inmenu", "Paste"));
@@ -793,23 +802,31 @@ void DolphinMainWindow::showDateInfo()
 void DolphinMainWindow::toggleSplitView()
 {
     if (m_viewContainer[SecondaryView] == 0) {
-        const int newWidth = (m_viewContainer[PrimaryView]->width() - m_splitter->handleWidth()) / 2;
         // create a secondary view
+        const int newWidth = (m_viewContainer[PrimaryView]->width() - m_splitter->handleWidth()) / 2;
+
         const DolphinView* view = m_viewContainer[PrimaryView]->view();
-        m_viewContainer[SecondaryView] = new DolphinViewContainer(this,
-                                                                 0,
-                                                                 view->rootUrl());
+        m_viewContainer[SecondaryView] = new DolphinViewContainer(this, 0, view->rootUrl());
         connectViewSignals(SecondaryView);
         m_splitter->addWidget(m_viewContainer[SecondaryView]);
         m_splitter->setSizes(QList<int>() << newWidth << newWidth);
         m_viewContainer[SecondaryView]->view()->reload();
         m_viewContainer[SecondaryView]->setActive(false);
         m_viewContainer[SecondaryView]->show();
-    } else {
+    } else if (m_activeViewContainer == m_viewContainer[PrimaryView]) {
         // remove secondary view
         m_viewContainer[SecondaryView]->close();
         m_viewContainer[SecondaryView]->deleteLater();
         m_viewContainer[SecondaryView] = 0;
+    } else {
+        // The secondary view is active, hence from a 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_viewContainer[PrimaryView]->close();
+        m_viewContainer[PrimaryView]->deleteLater();
+        m_viewContainer[PrimaryView] = m_viewContainer[SecondaryView];
+        m_viewContainer[SecondaryView] = 0;
     }
 
     setActiveViewContainer(m_viewContainer[PrimaryView]);
@@ -1025,11 +1042,9 @@ void DolphinMainWindow::init()
     updatePasteAction();
     updateGoActions();
 
-    const bool split = generalSettings->splitView();
-    if (split) {
+    if (generalSettings->splitView()) {
         toggleSplitView();
     }
-    updateSplitAction(split);
     updateViewActions();
 
     if (firstRun) {
@@ -1163,39 +1178,39 @@ void DolphinMainWindow::setupActions()
     viewModeGroup->addAction(detailsView);
     viewModeGroup->addAction(columnView);
 
-    KToggleAction* sortByName = actionCollection()->add<KToggleAction>("by_name");
-    sortByName->setText(i18nc("@action:inmenu Sort", "By Name"));
+    KToggleAction* sortByName = actionCollection()->add<KToggleAction>("sort_by_name");
+    sortByName->setText(i18nc("@action:inmenu Sort By", "Name"));
     connect(sortByName, SIGNAL(triggered()), this, SLOT(sortByName()));
 
-    KToggleAction* sortBySize = actionCollection()->add<KToggleAction>("by_size");
-    sortBySize->setText(i18nc("@action:inmenu Sort", "By Size"));
+    KToggleAction* sortBySize = actionCollection()->add<KToggleAction>("sort_by_size");
+    sortBySize->setText(i18nc("@action:inmenu Sort By", "Size"));
     connect(sortBySize, SIGNAL(triggered()), this, SLOT(sortBySize()));
 
-    KToggleAction* sortByDate = actionCollection()->add<KToggleAction>("by_date");
-    sortByDate->setText(i18nc("@action:inmenu Sort", "By Date"));
+    KToggleAction* sortByDate = actionCollection()->add<KToggleAction>("sort_by_date");
+    sortByDate->setText(i18nc("@action:inmenu Sort By", "Date"));
     connect(sortByDate, SIGNAL(triggered()), this, SLOT(sortByDate()));
 
-    KToggleAction* sortByPermissions = actionCollection()->add<KToggleAction>("by_permissions");
-    sortByPermissions->setText(i18nc("@action:inmenu Sort", "By Permissions"));
+    KToggleAction* sortByPermissions = actionCollection()->add<KToggleAction>("sort_by_permissions");
+    sortByPermissions->setText(i18nc("@action:inmenu Sort By", "Permissions"));
     connect(sortByPermissions, SIGNAL(triggered()), this, SLOT(sortByPermissions()));
 
-    KToggleAction* sortByOwner = actionCollection()->add<KToggleAction>("by_owner");
-    sortByOwner->setText(i18nc("@action:inmenu Sort", "By Owner"));
+    KToggleAction* sortByOwner = actionCollection()->add<KToggleAction>("sort_by_owner");
+    sortByOwner->setText(i18nc("@action:inmenu Sort By", "Owner"));
     connect(sortByOwner, SIGNAL(triggered()), this, SLOT(sortByOwner()));
 
-    KToggleAction* sortByGroup = actionCollection()->add<KToggleAction>("by_group");
-    sortByGroup->setText(i18nc("@action:inmenu Sort", "By Group"));
+    KToggleAction* sortByGroup = actionCollection()->add<KToggleAction>("sort_by_group");
+    sortByGroup->setText(i18nc("@action:inmenu Sort By", "Group"));
     connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup()));
 
-    KToggleAction* sortByType = actionCollection()->add<KToggleAction>("by_type");
-    sortByType->setText(i18nc("@action:inmenu Sort", "By Type"));
+    KToggleAction* sortByType = actionCollection()->add<KToggleAction>("sort_by_type");
+    sortByType->setText(i18nc("@action:inmenu Sort By", "Type"));
     connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType()));
 
-    KToggleAction* sortByRating = actionCollection()->add<KToggleAction>("by_rating");
-    sortByRating->setText(i18nc("@action:inmenu Sort", "By Rating"));
+    KToggleAction* sortByRating = actionCollection()->add<KToggleAction>("sort_by_rating");
+    sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating"));
 
-    KToggleAction* sortByTags = actionCollection()->add<KToggleAction>("by_tags");
-    sortByTags->setText(i18nc("@action:inmenu Sort", "By Tags"));
+    KToggleAction* sortByTags = actionCollection()->add<KToggleAction>("sort_by_tags");
+    sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags"));
 
 #ifdef HAVE_NEPOMUK
     if (MetaDataWidget::metaDataAvailable()) {
@@ -1264,7 +1279,7 @@ void DolphinMainWindow::setupActions()
 
     QAction* split = actionCollection()->addAction("split_view");
     split->setShortcut(Qt::Key_F10);
-    updateSplitAction(false);
+    updateSplitAction();
     connect(split, SIGNAL(triggered()), this, SLOT(toggleSplitView()));
 
     QAction* reload = actionCollection()->addAction("reload");
@@ -1333,15 +1348,16 @@ void DolphinMainWindow::setupDockWidgets()
     infoDock->setWidget(infoWidget);
 
     infoDock->toggleViewAction()->setText(i18nc("@title:window", "Information"));
+    infoDock->toggleViewAction()->setShortcut(Qt::Key_F11);
     actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction());
 
     addDockWidget(Qt::RightDockWidgetArea, infoDock);
     connect(this, SIGNAL(urlChanged(KUrl)),
             infoWidget, SLOT(setUrl(KUrl)));
-    connect(this, SIGNAL(selectionChanged(KFileItemList)),
-            infoWidget, SLOT(setSelection(KFileItemList)));
-    connect(this, SIGNAL(requestItemInfo(KUrl)),
-            infoWidget, SLOT(requestDelayedItemInfo(KUrl)));
+    connect(this, SIGNAL(selectionChanged(QList<KFileItem>)),
+            infoWidget, SLOT(setSelection(QList<KFileItem>)));
+    connect(this, SIGNAL(requestItemInfo(KFileItem)),
+            infoWidget, SLOT(requestDelayedItemInfo(KFileItem)));
 
     // setup "Tree View"
     QDockWidget* treeViewDock = new QDockWidget(i18nc("@title:window", "Folders"));
@@ -1351,6 +1367,7 @@ void DolphinMainWindow::setupDockWidgets()
     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);
@@ -1358,8 +1375,8 @@ void DolphinMainWindow::setupDockWidgets()
             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(changeSelection(QList<KFileItem>)),
+            this, SLOT(changeSelection(QList<KFileItem>)));
     connect(treeWidget, SIGNAL(urlsDropped(KUrl::List, KUrl)),
             this, SLOT(dropUrls(KUrl::List, KUrl)));
 
@@ -1371,9 +1388,10 @@ void DolphinMainWindow::setupDockWidgets()
     terminalDock->setWidget(terminalWidget);
 
     terminalDock->toggleViewAction()->setText(i18nc("@title:window", "Terminal"));
+    terminalDock->toggleViewAction()->setShortcut(Qt::Key_F4);
     actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction());
 
-    addDockWidget(Qt::RightDockWidgetArea, terminalDock);
+    addDockWidget(Qt::BottomDockWidgetArea, terminalDock);
     connect(this, SIGNAL(urlChanged(KUrl)),
             terminalWidget, SLOT(setUrl(KUrl)));
 
@@ -1392,6 +1410,7 @@ void DolphinMainWindow::setupDockWidgets()
     listView->setModel(DolphinSettings::instance().placesModel());
 
     placesDock->toggleViewAction()->setText(i18nc("@title:window", "Places"));
+    placesDock->toggleViewAction()->setShortcut(Qt::Key_F9);
     actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction());
 
     addDockWidget(Qt::LeftDockWidgetArea, placesDock);
@@ -1419,7 +1438,7 @@ void DolphinMainWindow::updateHistory()
 
 void DolphinMainWindow::updateEditActions()
 {
-    const KFileItemList list = m_activeViewContainer->view()->selectedItems();
+    const QList<KFileItem> list = m_activeViewContainer->view()->selectedItems();
     if (list.isEmpty()) {
         stateChanged("has_no_selection");
     } else {
@@ -1432,11 +1451,10 @@ void DolphinMainWindow::updateEditActions()
 
         bool enableMoveToTrash = true;
 
-        KFileItemList::const_iterator it = list.begin();
-        const KFileItemList::const_iterator end = list.end();
+        QList<KFileItem>::const_iterator it = list.begin();
+        const QList<KFileItem>::const_iterator end = list.end();
         while (it != end) {
-            KFileItem* item = *it;
-            const KUrl& url = item->url();
+            const KUrl& url = (*it).url();
             // only enable the 'Move to Trash' action for local files
             if (!url.isLocalFile()) {
                 enableMoveToTrash = false;
@@ -1500,7 +1518,7 @@ void DolphinMainWindow::updateViewActions()
         static_cast<KToggleAction*>(actionCollection()->action("show_hidden_files"));
     showHiddenFilesAction->setChecked(view->showHiddenFiles());
 
-    updateSplitAction(m_viewContainer[SecondaryView] != 0);
+    updateSplitAction();
 
     KToggleAction* editableLocactionAction =
         static_cast<KToggleAction*>(actionCollection()->action("editable_location"));
@@ -1559,10 +1577,10 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
             this, SLOT(slotSortOrderChanged(Qt::SortOrder)));
     connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::AdditionalInformation)),
             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(selectionChanged(QList<KFileItem>)),
+            this, SLOT(slotSelectionChanged(QList<KFileItem>)));
+    connect(view, SIGNAL(requestItemInfo(KFileItem)),
+            this, SLOT(slotRequestItemInfo(KFileItem)));
     connect(view, SIGNAL(activated()),
             this, SLOT(toggleActiveView()));
 
@@ -1573,12 +1591,17 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
             this, SLOT(slotHistoryChanged()));
 }
 
-void DolphinMainWindow::updateSplitAction(bool isSplit)
+void DolphinMainWindow::updateSplitAction()
 {
     QAction* splitAction = actionCollection()->action("split_view");
-    if (isSplit) {
-        splitAction->setText(i18nc("@action:intoolbar Join views", "Join"));
-        splitAction->setIcon(KIcon("fileview-join"));
+    if (m_viewContainer[SecondaryView] != 0) {
+        if (m_activeViewContainer == m_viewContainer[PrimaryView]) {
+            splitAction->setText(i18nc("@action:intoolbar Close right view", "Close"));
+            splitAction->setIcon(KIcon("fileview-close-right"));
+        } else {
+            splitAction->setText(i18nc("@action:intoolbar Close left view", "Close"));
+            splitAction->setIcon(KIcon("fileview-close-left"));
+        }
     } else {
         splitAction->setText(i18nc("@action:intoolbar Split view", "Split"));
         splitAction->setIcon(KIcon("fileview-split"));