From 39a278d43a5278e4243dae27c98b75233c974482 Mon Sep 17 00:00:00 2001 From: kh1 <qt-info@nokia.com> Date: Tue, 2 Mar 2010 16:48:49 +0100 Subject: [PATCH] Allow multiple docs to be reoved at once, also react on Delete key. Reviewed-by: ck --- src/plugins/help/docsettingspage.cpp | 54 ++++++++++++++++++++-------- src/plugins/help/docsettingspage.h | 4 +++ src/plugins/help/docsettingspage.ui | 6 +++- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/plugins/help/docsettingspage.cpp b/src/plugins/help/docsettingspage.cpp index 7a911e3e5da..084b516c6b0 100644 --- a/src/plugins/help/docsettingspage.cpp +++ b/src/plugins/help/docsettingspage.cpp @@ -30,9 +30,12 @@ #include "docsettingspage.h" #include "helpconstants.h" +#include <QtCore/QCoreApplication> + #include <QtGui/QFileDialog> +#include <QtGui/QKeyEvent> #include <QtGui/QMessageBox> -#include <QtCore/QCoreApplication> + #include <QtHelp/QHelpEngine> using namespace Help::Internal; @@ -73,6 +76,7 @@ QWidget *DocSettingsPage::createPage(QWidget *parent) connect(m_ui.removeButton, SIGNAL(clicked()), this, SLOT(removeDocumentation())); + m_ui.docsListWidget->installEventFilter(this); m_ui.docsListWidget->addItems(m_helpEngine->registeredDocumentations()); m_registeredDocs = false; m_removeDocs.clear(); @@ -108,19 +112,7 @@ void DocSettingsPage::addDocumentation() void DocSettingsPage::removeDocumentation() { - QListWidgetItem *item = m_ui.docsListWidget->currentItem(); - if (!item) - return; - - m_removeDocs.append(item->text()); - int row = m_ui.docsListWidget->currentRow(); - m_ui.docsListWidget->takeItem(row); - if (row > 0) - --row; - if (m_ui.docsListWidget->count()) - m_ui.docsListWidget->setCurrentRow(row); - - delete item; + removeDocumentation(m_ui.docsListWidget->selectedItems()); } void DocSettingsPage::apply() @@ -153,3 +145,37 @@ bool DocSettingsPage::applyChanges() return success; } + +bool DocSettingsPage::eventFilter(QObject *object, QEvent *event) +{ + if (object != m_ui.docsListWidget) + return Core::IOptionsPage::eventFilter(object, event); + + if (event->type() == QEvent::KeyPress) { + QKeyEvent *ke = static_cast<QKeyEvent*>(event); + switch (ke->key()) { + case Qt::Key_Delete: + removeDocumentation(m_ui.docsListWidget->selectedItems()); + break; + default: break; + } + } + + return Core::IOptionsPage::eventFilter(object, event); +} + +void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> items) +{ + if (items.isEmpty()) + return; + + int row = 0; + foreach (QListWidgetItem* item, items) { + m_removeDocs.append(item->text()); + row = m_ui.docsListWidget->row(item); + delete m_ui.docsListWidget->takeItem(row); + } + + m_ui.docsListWidget->setCurrentRow(qMax(row - 1, 0), + QItemSelectionModel::ClearAndSelect); +} diff --git a/src/plugins/help/docsettingspage.h b/src/plugins/help/docsettingspage.h index d744faf0c17..eccd42747b1 100644 --- a/src/plugins/help/docsettingspage.h +++ b/src/plugins/help/docsettingspage.h @@ -68,6 +68,10 @@ private slots: void addDocumentation(); void removeDocumentation(); +private: + bool eventFilter(QObject *object, QEvent *event); + void removeDocumentation(const QList<QListWidgetItem*> items); + private: QHelpEngine *m_helpEngine; bool m_registeredDocs; diff --git a/src/plugins/help/docsettingspage.ui b/src/plugins/help/docsettingspage.ui index 8429ce9a1fa..7f7905d8fb3 100644 --- a/src/plugins/help/docsettingspage.ui +++ b/src/plugins/help/docsettingspage.ui @@ -18,7 +18,11 @@ </property> <layout class="QHBoxLayout" name="horizontalLayout"> <item> - <widget class="QListWidget" name="docsListWidget"/> + <widget class="QListWidget" name="docsListWidget"> + <property name="selectionMode"> + <enum>QAbstractItemView::ContiguousSelection</enum> + </property> + </widget> </item> <item> <layout class="QVBoxLayout" name="_4"> -- GitLab