diff --git a/src/plugins/help/docsettingspage.cpp b/src/plugins/help/docsettingspage.cpp index 7a911e3e5da70f661bc07db996d1e6c2c333210e..084b516c6b0c616ea9fb16192779fc59914358d0 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 d744faf0c1786af80d9bc15dd0b4d4479ea32e70..eccd42747b10f89a6c7c166ebf500cbb8f5c428f 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 8429ce9a1fa83454481450df2386987634cf3768..7f7905d8fb341b166b0a0d52bdcc8a650a82e284 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">