/* * 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 "Torrent.h" // FileList class QAction; class QMenu; class QSortFilterProxyModel; class FileTreeDelegate; class FileTreeModel; class FileTreeView : public QTreeView { Q_OBJECT public: FileTreeView(QWidget* parent = nullptr, bool editable = true); void clear(); void update(const FileList& files, bool updateProperties = true); void setEditable(bool editable); signals: void priorityChanged(const QSet& fileIndices, int priority); void wantedChanged(const QSet& fileIndices, bool wanted); void pathEdited(const QString& oldpath, const QString& newname); void openRequested(const QString& path); protected: // QWidget virtual void resizeEvent(QResizeEvent* event); virtual void keyPressEvent(QKeyEvent* event); virtual void mouseDoubleClickEvent(QMouseEvent* event); virtual void contextMenuEvent(QContextMenuEvent* event); // QAbstractItemView virtual bool edit(const QModelIndex& index, EditTrigger trigger, QEvent* event); private slots: void onClicked(const QModelIndex& index); void checkSelectedItems(); void uncheckSelectedItems(); void onlyCheckSelectedItems(); void setSelectedItemsPriority(); bool openSelectedItem(); void renameSelectedItem(); void refreshContextMenuActionsSensitivity(); private: void initContextMenu(); QModelIndexList selectedSourceRows(int column = 0) const; static Qt::CheckState getCumulativeCheckState(const QModelIndexList& indices); private: FileTreeModel* myModel; QSortFilterProxyModel* myProxy; FileTreeDelegate* myDelegate; QMenu* myContextMenu = nullptr; QMenu* myPriorityMenu = nullptr; QAction* myCheckSelectedAction = nullptr; QAction* myUncheckSelectedAction = nullptr; QAction* myOnlyCheckSelectedAction = nullptr; QAction* myHighPriorityAction = nullptr; QAction* myNormalPriorityAction = nullptr; QAction* myLowPriorityAction = nullptr; QAction* myOpenAction = nullptr; QAction* myRenameAction = nullptr; };