Merge pull request #2172 from sorokin/fix-space-key

Implement sane behavior of space key in torrent content list. Closes #140.
This commit is contained in:
sledgehammer999 2014-12-15 17:09:56 +02:00
commit ba054f34c8
5 changed files with 143 additions and 2 deletions

View File

@ -166,7 +166,7 @@
</layout>
</item>
<item>
<widget class="QTreeView" name="content_tree">
<widget class="TorrentContentTreeView" name="content_tree">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
@ -262,6 +262,13 @@
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>TorrentContentTreeView</class>
<extends>QTreeView</extends>
<header>torrentcontenttreeview.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>

View File

@ -702,7 +702,7 @@
</layout>
</item>
<item>
<widget class="QTreeView" name="filesList">
<widget class="TorrentContentTreeView" name="filesList">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
@ -753,6 +753,13 @@
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>TorrentContentTreeView</class>
<extends>QTreeView</extends>
<header location="global">torrentcontenttreeview.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -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 \

View File

@ -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 <QKeyEvent>
#include <QModelIndexList>
#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<Qt::CheckState>(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());
}

View File

@ -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 <QTreeView>
class TorrentContentTreeView : public QTreeView {
Q_OBJECT
public:
explicit TorrentContentTreeView(QWidget *parent = 0);
void keyPressEvent(QKeyEvent *event);
private:
QModelIndex currentNameCell();
};
#endif