You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.9 KiB
132 lines
3.9 KiB
10 years ago
|
/*
|
||
|
|
||
|
Copyright (C) 2013 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
|
||
|
|
||
|
This program is free software; you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation; either version 2 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program 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 General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License along
|
||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef FM_PLACESMODEL_H
|
||
|
#define FM_PLACESMODEL_H
|
||
|
|
||
|
#include "libfmqtglobals.h"
|
||
|
#include <QStandardItemModel>
|
||
|
#include <QStandardItem>
|
||
|
#include <QList>
|
||
|
#include <QAction>
|
||
|
#include <libfm/fm.h>
|
||
|
|
||
|
namespace Fm {
|
||
|
|
||
|
class PlacesModelItem;
|
||
|
class PlacesModelVolumeItem;
|
||
|
class PlacesModelMountItem;
|
||
|
class PlacesModelBookmarkItem;
|
||
|
|
||
|
class LIBFM_QT_API PlacesModel : public QStandardItemModel {
|
||
|
Q_OBJECT
|
||
|
friend class PlacesView;
|
||
|
public:
|
||
|
|
||
|
// QAction used for popup menus
|
||
|
class ItemAction : public QAction {
|
||
|
public:
|
||
|
ItemAction(const QModelIndex& index, QString text, QObject* parent = 0):
|
||
|
QAction(text, parent),
|
||
|
index_(index) {
|
||
|
}
|
||
|
|
||
|
QPersistentModelIndex& index() {
|
||
|
return index_;
|
||
|
}
|
||
|
private:
|
||
|
QPersistentModelIndex index_;
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
explicit PlacesModel(QObject* parent = 0);
|
||
|
virtual ~PlacesModel();
|
||
|
|
||
|
bool showTrash() {
|
||
|
return trashItem_ != NULL;
|
||
|
}
|
||
|
void setShowTrash(bool show);
|
||
|
|
||
|
bool showApplications() {
|
||
|
return showApplications_;
|
||
|
}
|
||
|
void setShowApplications(bool show);
|
||
|
|
||
|
bool showDesktop() {
|
||
|
return showDesktop_;
|
||
|
}
|
||
|
void setShowDesktop(bool show);
|
||
|
|
||
|
public Q_SLOTS:
|
||
|
void updateIcons();
|
||
|
void updateTrash();
|
||
|
|
||
|
protected:
|
||
|
|
||
|
PlacesModelItem* itemFromPath(FmPath* path);
|
||
|
PlacesModelItem* itemFromPath(QStandardItem* rootItem, FmPath* path);
|
||
|
PlacesModelVolumeItem* itemFromVolume(GVolume* volume);
|
||
|
PlacesModelMountItem* itemFromMount(GMount* mount);
|
||
|
PlacesModelBookmarkItem* itemFromBookmark(FmBookmarkItem* bkitem);
|
||
|
|
||
|
virtual Qt::ItemFlags flags(const QModelIndex& index) const;
|
||
|
virtual QStringList mimeTypes() const;
|
||
|
virtual QMimeData* mimeData(const QModelIndexList& indexes) const;
|
||
|
virtual bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent);
|
||
|
Qt::DropActions supportedDropActions() const;
|
||
|
|
||
|
void createTrashItem();
|
||
|
|
||
|
private:
|
||
|
void loadBookmarks();
|
||
|
|
||
|
static void onVolumeAdded(GVolumeMonitor* monitor, GVolume* volume, PlacesModel* pThis);
|
||
|
static void onVolumeRemoved(GVolumeMonitor* monitor, GVolume* volume, PlacesModel* pThis);
|
||
|
static void onVolumeChanged(GVolumeMonitor* monitor, GVolume* volume, PlacesModel* pThis);
|
||
|
static void onMountAdded(GVolumeMonitor* monitor, GMount* mount, PlacesModel* pThis);
|
||
|
static void onMountRemoved(GVolumeMonitor* monitor, GMount* mount, PlacesModel* pThis);
|
||
|
static void onMountChanged(GVolumeMonitor* monitor, GMount* mount, PlacesModel* pThis);
|
||
|
|
||
|
static void onBookmarksChanged(FmBookmarks* bookmarks, PlacesModel* pThis);
|
||
|
|
||
|
static void onTrashChanged(GFileMonitor *monitor, GFile *gf, GFile *other, GFileMonitorEvent evt, PlacesModel* pThis);
|
||
|
private:
|
||
|
FmBookmarks* bookmarks;
|
||
|
GVolumeMonitor* volumeMonitor;
|
||
|
QList<FmJob*> jobs;
|
||
|
bool showApplications_;
|
||
|
bool showDesktop_;
|
||
|
QStandardItem* placesRoot;
|
||
|
QStandardItem* devicesRoot;
|
||
|
QStandardItem* bookmarksRoot;
|
||
|
PlacesModelItem* trashItem_;
|
||
|
GFileMonitor* trashMonitor_;
|
||
|
PlacesModelItem* desktopItem;
|
||
|
PlacesModelItem* homeItem;
|
||
|
PlacesModelItem* computerItem;
|
||
|
PlacesModelItem* networkItem;
|
||
|
PlacesModelItem* applicationsItem;
|
||
|
QIcon ejectIcon_;
|
||
|
};
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif // FM_PLACESMODEL_H
|