1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-30 19:46:56 +00:00
transmission/qt/FileTreeItem.h
Mike Gelfand ddb0df51d4 #5608: Enter file renaming mode with keyboard only, not on mouse double-click (Qt client)
Since double-click is usually used to open things, don't use it to enter
edit mode, use platform-specific keyboard shortcut instead (Return, F2,
etc).
Add context menu duplicating available actions, resembling that of Mac
client. This includes new "only check selected" action.
Speed up DND/priority change for large numbers of files at once. Make
DND/priority toggling more natural: if both parent and its child are
selected, only act on parent (with all its children following).
2015-08-10 19:40:58 +00:00

89 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.
*
* $Id$
*/
#ifndef QTR_FILE_TREE_ITEM_H
#define QTR_FILE_TREE_ITEM_H
#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 (const QString& 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 (const QString& filename);
FileTreeItem * child (int row) { return myChildren.at (row); }
int childCount () const { return myChildren.size (); }
FileTreeItem * parent () { return myParent; }
const FileTreeItem * parent () const { return myParent; }
int row () const;
const QString& name () const { return myName; }
QVariant data (int column, int role) const;
std::pair<int, int> update (const QString& 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;
const QHash<QString,int>& getMyChildRows();
private:
QString myName;
const int myFileIndex;
const uint64_t myTotalSize;
FileTreeItem * myParent;
QList<FileTreeItem*> myChildren;
QHash<QString,int> myChildRows;
int myPriority;
bool myIsWanted;
uint64_t myHaveSize;
size_t myFirstUnhashedRow;
};
#endif // QTR_FILE_TREE_ITEM_H