]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Introduce KFilePlacesView which is a list view adding the navigation
authorKevin Ottens <ervin@kde.org>
Mon, 2 Apr 2007 08:51:57 +0000 (08:51 +0000)
committerKevin Ottens <ervin@kde.org>
Mon, 2 Apr 2007 08:51:57 +0000 (08:51 +0000)
logic. Suitable to interface it in Dolphin or the KFileDialog.

svn path=/trunk/KDE/kdebase/apps/; revision=649204

src/CMakeLists.txt
src/dolphinmainwindow.cpp
src/kfileplacesview.cpp [new file with mode: 0644]
src/kfileplacesview.h [new file with mode: 0644]

index 015c71ee55dc4cafb6c693ba18ef9ca51e538bfd..15fc3e5b505cbe302091fbf5b7c8d850cf00d0d1 100644 (file)
@@ -39,6 +39,7 @@ set(dolphin_SRCS
    applyviewpropsjob.cpp
    kfileplacesmodel.cpp
    kfileplacesitem.cpp
+   kfileplacesview.cpp
    bookmarkselector.cpp
    bookmarkssettingspage.cpp
    bookmarkssidebarpage.cpp
index 7485aa42dfff5f7ee0733b1adfde0a7191fab9d3..d5f50c6534adf6857b61762e13a75be3abce2f2f 100644 (file)
@@ -36,6 +36,7 @@
 #include "viewpropertiesdialog.h"
 #include "viewproperties.h"
 #include "kfileplacesmodel.h"
+#include "kfileplacesview.h"
 
 #include "dolphin_generalsettings.h"
 
@@ -1338,10 +1339,14 @@ void DolphinMainWindow::setupDockWidgets()
     QDockWidget *placesDock = new QDockWidget(i18n("Places"));
     placesDock->setObjectName("placesDock");
     placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
-    QListView *listView = new QListView(placesDock);
+    KFilePlacesView *listView = new KFilePlacesView(placesDock);
     placesDock->setWidget(listView);
     listView->setModel(new KFilePlacesModel(listView));
     addDockWidget(Qt::LeftDockWidgetArea, placesDock);
+    connect(listView, SIGNAL(urlChanged(KUrl)),
+            this, SLOT(changeUrl(KUrl)));
+    connect(this, SIGNAL(urlChanged(KUrl)),
+            listView, SLOT(setUrl(KUrl)));
 }
 
 void DolphinMainWindow::updateHistory()
diff --git a/src/kfileplacesview.cpp b/src/kfileplacesview.cpp
new file mode 100644 (file)
index 0000000..91cbd6d
--- /dev/null
@@ -0,0 +1,74 @@
+/*  This file is part of the KDE project
+    Copyright (C) 2007 Kevin Ottens <ervin@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+
+*/
+
+#include "kfileplacesview.h"
+
+#include <kdebug.h>
+
+#include "kfileplacesmodel.h"
+
+class KFilePlacesView::Private
+{
+public:
+    Private(KFilePlacesView *parent) : q(parent) { }
+
+    KFilePlacesView * const q;
+
+    void _k_placeClicked(const QModelIndex &index);
+};
+
+KFilePlacesView::KFilePlacesView(QWidget *parent)
+    : QListView(parent), d(new Private(this))
+{
+    connect(this, SIGNAL(clicked(const QModelIndex&)),
+            this, SLOT(_k_placeClicked(const QModelIndex&)));
+}
+
+KFilePlacesView::~KFilePlacesView()
+{
+    delete d;
+}
+
+void KFilePlacesView::setUrl(const KUrl &url)
+{
+    kDebug() << k_funcinfo << endl;
+    KFilePlacesModel *placesModel = qobject_cast<KFilePlacesModel*>(model());
+
+    if (placesModel==0) return;
+
+    QModelIndex index = placesModel->closestItem(url);
+
+    if (index.isValid()) {
+        selectionModel()->select(index, QItemSelectionModel::ClearAndSelect);
+    } else {
+        selectionModel()->clear();
+    }
+}
+
+void KFilePlacesView::Private::_k_placeClicked(const QModelIndex &index)
+{
+    kDebug() << k_funcinfo << endl;
+    KFilePlacesModel *placesModel = qobject_cast<KFilePlacesModel*>(q->model());
+
+    if (placesModel==0) return;
+
+    emit q->urlChanged(placesModel->url(index));
+}
+
+#include "kfileplacesview.moc"
diff --git a/src/kfileplacesview.h b/src/kfileplacesview.h
new file mode 100644 (file)
index 0000000..80ed4f6
--- /dev/null
@@ -0,0 +1,54 @@
+/*  This file is part of the KDE project
+    Copyright (C) 2007 Kevin Ottens <ervin@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+
+*/
+#ifndef KFILEPLACESVIEW_H
+#define KFILEPLACESVIEW_H
+
+#include <kdelibs_export.h>
+
+#include <QListView>
+
+#include <kurl.h>
+
+class QAbstractItemModel;
+
+/**
+ * This class allows to display a KFilePlacesModel.
+ */
+class KIO_EXPORT KFilePlacesView : public QListView
+{
+    Q_OBJECT
+public:
+    KFilePlacesView(QWidget *parent = 0);
+    ~KFilePlacesView();
+
+public Q_SLOTS:
+    void setUrl(const KUrl &url);
+
+Q_SIGNALS:
+    void urlChanged(const KUrl &url);
+
+private:
+    Q_PRIVATE_SLOT(d, void _k_placeClicked(const QModelIndex &))
+
+    class Private;
+    Private * const d;
+    friend class Private;
+};
+
+#endif