/* * 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 #include #include #include #include #include #include #include "Macros.h" class FileTreeItem { Q_DECLARE_TR_FUNCTIONS(FileTreeItem) TR_DISABLE_COPY_MOVE(FileTreeItem) public: /* *INDENT-OFF* */ enum { LOW = (1 << 0), NORMAL = (1 << 1), HIGH = (1 << 2) }; /* *INDENT-ON* */ FileTreeItem(QString const& name = QString(), int file_index = -1, uint64_t size = 0) : name_(name), total_size_(size), file_index_(file_index) { } ~FileTreeItem(); void appendChild(FileTreeItem* child); FileTreeItem* child(QString const& filename); FileTreeItem* child(int row) { return children_.at(row); } int childCount() const { return children_.size(); } FileTreeItem* parent() { return parent_; } FileTreeItem const* parent() const { return parent_; } int row() const; QString const& name() const { return name_; } QVariant data(int column, int role) const; std::pair update(QString const& name, bool want, int priority, uint64_t have, bool update_fields); void setSubtreeWanted(bool, QSet& file_ids); void setSubtreePriority(int priority, QSet& file_ids); int fileIndex() const { return file_index_; } uint64_t totalSize() const { return total_size_; } 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 const& getMyChildRows(); FileTreeItem* parent_ = {}; QHash child_rows_; QList children_; QString name_; uint64_t const total_size_ = {}; uint64_t have_size_ = {}; int first_unhashed_row_ = {}; int const file_index_ = {}; int priority_ = {}; bool is_wanted_ = {}; };