mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-04-25 09:29:23 -04:00
109 lines
4.3 KiB
C++
109 lines
4.3 KiB
C++
#include <QAbstractItemModel>
|
|
|
|
#include "RsCollection.h"
|
|
|
|
class RsCollectionModel: public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum Roles{ FileNameRole = Qt::UserRole+1, SortRole = Qt::UserRole+2, FilterRole = Qt::UserRole+3 };
|
|
|
|
RsCollectionModel(const RsCollection& col, QObject *parent = 0);
|
|
virtual ~RsCollectionModel() = default;
|
|
|
|
/* Callback from Core */
|
|
void preMods(); // always call this before updating the RsCollection!
|
|
void postMods(); // always call this after updating the RsCollection!
|
|
|
|
/* Callback from GUI */
|
|
|
|
void update() ;
|
|
void filterItems(const std::list<std::string>& keywords, uint32_t& found) ;
|
|
|
|
// Overloaded from QAbstractItemModel
|
|
virtual QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex() ) const override;
|
|
virtual QModelIndex parent ( const QModelIndex & index ) const override;
|
|
|
|
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
virtual bool hasChildren(const QModelIndex & parent = QModelIndex()) const override;
|
|
|
|
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
|
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
|
virtual bool setData(const QModelIndex& index,const QVariant& value,int role) override;
|
|
virtual Qt::ItemFlags flags ( const QModelIndex & index ) const override;
|
|
#ifdef TODO
|
|
virtual QStringList mimeTypes () const override;
|
|
virtual QMimeData * mimeData ( const QModelIndexList & indexes ) const override;
|
|
#if QT_VERSION >= QT_VERSION_CHECK (5, 0, 0)
|
|
virtual Qt::DropActions supportedDragActions() const override;
|
|
#endif
|
|
#endif
|
|
|
|
struct EntryIndex {
|
|
bool is_file; // false=dir, true=file
|
|
uint64_t index;
|
|
};
|
|
uint64_t totalSize() const { return mDirInfos[0].total_size; }
|
|
uint64_t totalSelected() const { return mDirInfos[0].total_count; }
|
|
|
|
void notifyFilesBeingHashed(const std::list<RsFileHash>& files);
|
|
void fileHashingFinished(const RsFileHash& hash);
|
|
bool isChecked(EntryIndex);
|
|
|
|
EntryIndex getIndex(const QModelIndex& i) const;
|
|
signals:
|
|
void sizesChanged(); // tells that the total size of the top level dir has changed (due to selection)
|
|
|
|
private:
|
|
static bool convertIndexToInternalId(const EntryIndex& e,quintptr& ref);
|
|
static bool convertInternalIdToIndex(quintptr ref, EntryIndex& e);
|
|
|
|
void recursUpdateLocalStructures(RsFileTree::DirIndex dir_index, int depth);
|
|
|
|
QVariant displayRole(const EntryIndex&,int col) const ;
|
|
QVariant sortRole(const EntryIndex&,int col) const ;
|
|
QVariant decorationRole(const EntryIndex&,int col) const ;
|
|
QVariant checkStateRole(const EntryIndex& i,int col) const;
|
|
QVariant textColorRole(const EntryIndex& i,int col) const;
|
|
//QVariant filterRole(const DirDetails& details,int coln) const;
|
|
|
|
void debugDump();
|
|
|
|
bool mUpdating ;
|
|
|
|
const RsCollection& mCollection;
|
|
|
|
enum DirCheckState: uint8_t {
|
|
UNSELECTED = 0x00,
|
|
PARTIALLY_SELECTED = 0x01,
|
|
SELECTED = 0x02,
|
|
};
|
|
|
|
struct ModelDirInfo {
|
|
ModelDirInfo() :parent_index(0),parent_row(0),check_state(SELECTED),total_size(0),total_count(0){}
|
|
|
|
RsFileTree::DirIndex parent_index; // index of the parent
|
|
RsFileTree::DirIndex parent_row; // row of that child, in this parent
|
|
DirCheckState check_state;
|
|
uint64_t total_size;
|
|
uint64_t total_count;
|
|
};
|
|
|
|
struct ModelFileInfo {
|
|
ModelFileInfo() :parent_index(0),parent_row(0),is_checked(true){}
|
|
|
|
RsFileTree::DirIndex parent_index; // index of the parent
|
|
RsFileTree::DirIndex parent_row; // row of that child, in this parent
|
|
bool is_checked;
|
|
};
|
|
|
|
std::vector<ModelFileInfo> mFileInfos;
|
|
std::vector<ModelDirInfo> mDirInfos;
|
|
|
|
std::set<RsFileHash> mFilesBeingHashed;
|
|
|
|
// std::set<void*> mFilteredPointers ;
|
|
};
|