diff --git a/src/addnewtorrentdialog.ui b/src/addnewtorrentdialog.ui index 22f0b13d8..dfa1af1ea 100644 --- a/src/addnewtorrentdialog.ui +++ b/src/addnewtorrentdialog.ui @@ -166,7 +166,7 @@ - + Qt::CustomContextMenu @@ -262,6 +262,13 @@ + + + TorrentContentTreeView + QTreeView +
torrentcontenttreeview.h
+
+
diff --git a/src/properties/propertieswidget.ui b/src/properties/propertieswidget.ui index 62e0006b9..609f44899 100644 --- a/src/properties/propertieswidget.ui +++ b/src/properties/propertieswidget.ui @@ -685,7 +685,7 @@
- + Qt::CustomContextMenu @@ -780,6 +780,13 @@ + + + TorrentContentTreeView + QTreeView +
torrentcontenttreeview.h
+
+
diff --git a/src/src.pro b/src/src.pro index 34eb13e7b..9d59fb2fc 100644 --- a/src/src.pro +++ b/src/src.pro @@ -133,6 +133,7 @@ nox { torrentcontentmodelfolder.h \ torrentcontentmodelfile.h \ torrentcontentfiltermodel.h \ + torrentcontenttreeview.h \ deletionconfirmationdlg.h \ statusbar.h \ reverseresolution.h \ @@ -167,6 +168,7 @@ nox { torrentcontentmodelfolder.cpp \ torrentcontentmodelfile.cpp \ torrentcontentfiltermodel.cpp \ + torrentcontenttreeview.cpp \ sessionapplication.cpp \ torrentimportdlg.cpp \ executionlog.cpp \ diff --git a/src/torrentcontenttreeview.cpp b/src/torrentcontenttreeview.cpp new file mode 100644 index 000000000..c98e5154f --- /dev/null +++ b/src/torrentcontenttreeview.cpp @@ -0,0 +1,78 @@ +/* + * Bittorrent Client using Qt4 and libtorrent. + * Copyright (C) 2014 Ivan Sorokin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + * + * Contact : vanyacpp@gmail.com + */ + +#include "torrentcontenttreeview.h" + +#include +#include + +#include "torrentcontentmodelitem.h" + +TorrentContentTreeView::TorrentContentTreeView(QWidget* parent) + : QTreeView(parent) +{} + +void TorrentContentTreeView::keyPressEvent(QKeyEvent *event) { + if (event->key() != Qt::Key_Space && event->key() != Qt::Key_Select) { + QTreeView::keyPressEvent(event); + return; + } + + event->accept(); + + QModelIndex current = currentNameCell(); + + QVariant value = current.data(Qt::CheckStateRole); + if (!value.isValid()) { + Q_ASSERT(false); + return; + } + + Qt::CheckState state = (static_cast(value.toInt()) == Qt::Checked + ? Qt::Unchecked : Qt::Checked); + + QModelIndexList selection = selectionModel()->selectedRows(TorrentContentModelItem::COL_NAME); + + for (QModelIndexList::const_iterator i = selection.begin(); i != selection.end(); ++i) { + QModelIndex index = *i; + Q_ASSERT(i->column() == TorrentContentModelItem::COL_NAME); + model()->setData(index, state, Qt::CheckStateRole); + } +} + +QModelIndex TorrentContentTreeView::currentNameCell() { + QModelIndex current = currentIndex(); + if (!current.isValid()) { + Q_ASSERT(false); + return QModelIndex(); + } + + return model()->index(current.row(), TorrentContentModelItem::COL_NAME, current.parent()); +} diff --git a/src/torrentcontenttreeview.h b/src/torrentcontenttreeview.h new file mode 100644 index 000000000..db233b2f4 --- /dev/null +++ b/src/torrentcontenttreeview.h @@ -0,0 +1,47 @@ +/* + * Bittorrent Client using Qt4 and libtorrent. + * Copyright (C) 2014 Ivan Sorokin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + * + * Contact : vanyacpp@gmail.com + */ + +#ifndef TORRENTCONTENTTREEVIEW_H +#define TORRENTCONTENTTREEVIEW_H + +#include + +class TorrentContentTreeView : public QTreeView { + Q_OBJECT + +public: + explicit TorrentContentTreeView(QWidget *parent = 0); + void keyPressEvent(QKeyEvent *event); + +private: + QModelIndex currentNameCell(); +}; + +#endif