Use tray icon from system theme only if option is set
[qBittorrent.git] / src / gui / torrentcontentwidget.h
blob35620ee42934773eeba293a40435abfb9cd91cf3
1 /*
2 * Bittorrent Client using Qt and libtorrent.
3 * Copyright (C) 2022 Vladimir Golovnev <glassez@yandex.ru>
4 * Copyright (C) 2014 Ivan Sorokin <vanyacpp@gmail.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 * In addition, as a special exception, the copyright holders give permission to
21 * link this program with the OpenSSL project's "OpenSSL" library (or with
22 * modified versions of it that use the same license as the "OpenSSL" library),
23 * and distribute the linked executables. You must obey the GNU General Public
24 * License in all respects for all of the code used other than "OpenSSL". If you
25 * modify file(s), you may extend this exception to your version of the file(s),
26 * but you are not obligated to do so. If you do not wish to do so, delete this
27 * exception statement from your version.
30 #pragma once
32 #include <QTreeView>
34 #include "base/bittorrent/downloadpriority.h"
35 #include "base/pathfwd.h"
37 namespace BitTorrent
39 class Torrent;
40 class TorrentContentHandler;
41 class TorrentInfo;
44 class TorrentContentFilterModel;
45 class TorrentContentModel;
47 class TorrentContentWidget final : public QTreeView
49 Q_OBJECT
50 Q_DISABLE_COPY_MOVE(TorrentContentWidget)
52 public:
53 enum Column
55 Name,
56 Size,
57 Progress,
58 Priority,
59 Remaining,
60 Availability
63 enum class DoubleClickAction
65 Open,
66 Rename
69 enum class ColumnsVisibilityMode
71 Editable,
72 Locked
75 explicit TorrentContentWidget(QWidget *parent = nullptr);
77 void setContentHandler(BitTorrent::TorrentContentHandler *contentHandler);
78 BitTorrent::TorrentContentHandler *contentHandler() const;
79 void refresh();
81 DoubleClickAction doubleClickAction() const;
82 void setDoubleClickAction(DoubleClickAction action);
84 ColumnsVisibilityMode columnsVisibilityMode() const;
85 void setColumnsVisibilityMode(ColumnsVisibilityMode mode);
87 int getFileIndex(const QModelIndex &index) const;
88 Path getItemPath(const QModelIndex &index) const;
90 void setFilterPattern(const QString &patternText);
92 void checkAll();
93 void checkNone();
95 signals:
96 void stateChanged();
98 private:
99 void setModel(QAbstractItemModel *model) override;
100 void keyPressEvent(QKeyEvent *event) override;
101 void wheelEvent(QWheelEvent *event) override;
102 QModelIndex currentNameCell() const;
103 void displayColumnHeaderMenu();
104 void displayContextMenu();
105 void openItem(const QModelIndex &index) const;
106 void openParentFolder(const QModelIndex &index) const;
107 void openSelectedFile();
108 void renameSelectedFile();
109 void applyPriorities(BitTorrent::DownloadPriority priority);
110 void applyPrioritiesByOrder();
111 Path getFullPath(const QModelIndex &index) const;
112 void onItemDoubleClicked(const QModelIndex &index);
113 // Expand single-item folders recursively.
114 // This will trigger sorting and filtering so do it after all relevant data is loaded.
115 void expandRecursively();
117 TorrentContentModel *m_model;
118 TorrentContentFilterModel *m_filterModel;
119 DoubleClickAction m_doubleClickAction = DoubleClickAction::Rename;
120 ColumnsVisibilityMode m_columnsVisibilityMode = ColumnsVisibilityMode::Editable;