120 lines
2.4 KiB
C++
120 lines
2.4 KiB
C++
/*
|
|
* This file Copyright (C) 2009-2015 Mnemosyne LLC
|
|
*
|
|
* It may be used under the GNU GPL versions 2 or 3
|
|
* or any future license endorsed by Mnemosyne LLC.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
#include <QCoreApplication>
|
|
#include <QHash>
|
|
#include <QList>
|
|
#include <QSet>
|
|
#include <QString>
|
|
#include <QVariant>
|
|
|
|
class FileTreeItem
|
|
{
|
|
Q_DECLARE_TR_FUNCTIONS(FileTreeItem)
|
|
Q_DISABLE_COPY(FileTreeItem)
|
|
|
|
public:
|
|
enum
|
|
{
|
|
LOW = (1 << 0),
|
|
NORMAL = (1 << 1),
|
|
HIGH = (1 << 2)
|
|
};
|
|
|
|
public:
|
|
FileTreeItem(QString const& name = QString(), int fileIndex = -1, uint64_t size = 0) :
|
|
myName(name),
|
|
myFileIndex(fileIndex),
|
|
myTotalSize(size),
|
|
myParent(nullptr),
|
|
myPriority(0),
|
|
myIsWanted(false),
|
|
myHaveSize(0),
|
|
myFirstUnhashedRow(0)
|
|
{
|
|
}
|
|
|
|
~FileTreeItem();
|
|
|
|
public:
|
|
void appendChild(FileTreeItem* child);
|
|
FileTreeItem* child(QString const& filename);
|
|
|
|
FileTreeItem* child(int row)
|
|
{
|
|
return myChildren.at(row);
|
|
}
|
|
|
|
int childCount() const
|
|
{
|
|
return myChildren.size();
|
|
}
|
|
|
|
FileTreeItem* parent()
|
|
{
|
|
return myParent;
|
|
}
|
|
|
|
FileTreeItem const* parent() const
|
|
{
|
|
return myParent;
|
|
}
|
|
|
|
int row() const;
|
|
|
|
QString const& name() const
|
|
{
|
|
return myName;
|
|
}
|
|
|
|
QVariant data(int column, int role) const;
|
|
std::pair<int, int> update(QString const& name, bool want, int priority, uint64_t have, bool updateFields);
|
|
void setSubtreeWanted(bool, QSet<int>& fileIds);
|
|
void setSubtreePriority(int priority, QSet<int>& fileIds);
|
|
|
|
int fileIndex() const
|
|
{
|
|
return myFileIndex;
|
|
}
|
|
|
|
uint64_t totalSize() const
|
|
{
|
|
return myTotalSize;
|
|
}
|
|
|
|
QString path() const;
|
|
bool isComplete() const;
|
|
int priority() const;
|
|
int isSubtreeWanted() const;
|
|
|
|
private:
|
|
QString priorityString() const;
|
|
QString sizeString() const;
|
|
void getSubtreeWantedSize(uint64_t& have, uint64_t& total) const;
|
|
double progress() const;
|
|
uint64_t size() const;
|
|
QHash<QString, int> const& getMyChildRows();
|
|
|
|
private:
|
|
QString myName;
|
|
int const myFileIndex;
|
|
uint64_t const myTotalSize;
|
|
|
|
FileTreeItem* myParent;
|
|
QList<FileTreeItem*> myChildren;
|
|
QHash<QString, int> myChildRows;
|
|
int myPriority;
|
|
bool myIsWanted;
|
|
uint64_t myHaveSize;
|
|
size_t myFirstUnhashedRow;
|
|
};
|