From b78123166627139777fbd206866ee0d1c8bcd040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Wed, 21 Aug 2013 01:07:54 +0200 Subject: Contiguous selection and keyboard input for mod lists. Tweak console to take up the sides. You can reorder mods from the keyboard. --- gui/LegacyModEditDialog.cpp | 165 ++++++++++++++++++++++++++++++++++++++------ gui/LegacyModEditDialog.h | 6 +- gui/ModListView.cpp | 2 +- gui/ModListView.h | 2 + gui/consolewindow.ui | 12 ++++ 5 files changed, 165 insertions(+), 22 deletions(-) (limited to 'gui') diff --git a/gui/LegacyModEditDialog.cpp b/gui/LegacyModEditDialog.cpp index 9e0b7a46..51b21aa1 100644 --- a/gui/LegacyModEditDialog.cpp +++ b/gui/LegacyModEditDialog.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include LegacyModEditDialog::LegacyModEditDialog( LegacyInstance* inst, QWidget* parent ) : m_inst(inst), @@ -34,13 +36,13 @@ LegacyModEditDialog::LegacyModEditDialog( LegacyInstance* inst, QWidget* parent m_coremods = m_inst->coreModList(); m_jarmods = m_inst->jarModList(); - qDebug() << m_mods.data(); - qDebug() << m_coremods.data(); - qDebug() << m_jarmods.data(); - ui->jarModsTreeView->setModel(m_jarmods.data()); ui->coreModsTreeView->setModel(m_coremods.data()); ui->mlModTreeView->setModel(m_mods.data()); + + ui->jarModsTreeView->installEventFilter( this ); + ui->coreModsTreeView->installEventFilter( this ); + ui->mlModTreeView->installEventFilter( this ); } LegacyModEditDialog::~LegacyModEditDialog() @@ -48,6 +50,90 @@ LegacyModEditDialog::~LegacyModEditDialog() delete ui; } +bool LegacyModEditDialog::coreListFilter ( QKeyEvent* keyEvent ) +{ + switch(keyEvent->key()) + { + case Qt::Key_Delete: + on_rmCoreBtn_clicked(); + return true; + case Qt::Key_Plus: + on_addCoreBtn_clicked(); + return true; + default: + break; + } + return QDialog::eventFilter( ui->coreModsTreeView, keyEvent ); +} + +bool LegacyModEditDialog::jarListFilter ( QKeyEvent* keyEvent ) +{ + switch(keyEvent->key()) + { + case Qt::Key_Up: + { + if(keyEvent->modifiers() & Qt::ControlModifier) + { + on_moveJarUpBtn_clicked(); + return true; + } + break; + } + case Qt::Key_Down: + { + if(keyEvent->modifiers() & Qt::ControlModifier) + { + on_moveJarDownBtn_clicked(); + return true; + } + break; + } + case Qt::Key_Delete: + on_rmJarBtn_clicked(); + return true; + case Qt::Key_Plus: + on_addJarBtn_clicked(); + return true; + default: + break; + } + return QDialog::eventFilter( ui->jarModsTreeView, keyEvent ); +} + +bool LegacyModEditDialog::loaderListFilter ( QKeyEvent* keyEvent ) +{ + switch(keyEvent->key()) + { + case Qt::Key_Delete: + on_rmModBtn_clicked(); + return true; + case Qt::Key_Plus: + on_addModBtn_clicked(); + return true; + default: + break; + } + return QDialog::eventFilter( ui->mlModTreeView, keyEvent ); +} + + +bool LegacyModEditDialog::eventFilter ( QObject* obj, QEvent* ev ) +{ + if (ev->type() != QEvent::KeyPress) + { + return QDialog::eventFilter( obj, ev ); + } + QKeyEvent *keyEvent = static_cast(ev); + if(obj == ui->jarModsTreeView) + return jarListFilter(keyEvent); + if(obj == ui->coreModsTreeView) + return coreListFilter(keyEvent); + if(obj == ui->mlModTreeView) + return loaderListFilter(keyEvent); + return QDialog::eventFilter( obj, ev ); +} + + void LegacyModEditDialog::on_addCoreBtn_clicked() { QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Core Mods"); @@ -58,51 +144,90 @@ void LegacyModEditDialog::on_addCoreBtn_clicked() } void LegacyModEditDialog::on_addForgeBtn_clicked() { - + } void LegacyModEditDialog::on_addJarBtn_clicked() { - + QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Jar Mods"); + for(auto filename:fileNames) + { + m_jarmods->installMod(QFileInfo(filename)); + } } void LegacyModEditDialog::on_addModBtn_clicked() { - + QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Loader Mods"); + for(auto filename:fileNames) + { + m_mods->installMod(QFileInfo(filename)); + } } void LegacyModEditDialog::on_addTexPackBtn_clicked() { } + +bool lastfirst (QModelIndexList & list, int & first, int & last) +{ + if(!list.size()) + return false; + first = last = list[0].row(); + for(auto item: list) + { + int row = item.row(); + if(row < first) + first = row; + if(row > last) + last = row; + } + return true; +} + void LegacyModEditDialog::on_moveJarDownBtn_clicked() { + int first, last; + auto list = ui->jarModsTreeView->selectionModel()->selectedRows(); + + if(!lastfirst(list, first, last)) + return; + m_jarmods->moveModsDown(first, last); } void LegacyModEditDialog::on_moveJarUpBtn_clicked() { - + int first, last; + auto list = ui->jarModsTreeView->selectionModel()->selectedRows(); + + if(!lastfirst(list, first, last)) + return; + m_jarmods->moveModsUp(first, last); } void LegacyModEditDialog::on_rmCoreBtn_clicked() { - auto sm = ui->coreModsTreeView->selectionModel(); - auto selection = sm->selectedRows(); - if(!selection.size()) + int first, last; + auto list = ui->coreModsTreeView->selectionModel()->selectedRows(); + + if(!lastfirst(list, first, last)) return; - m_coremods->deleteMod(selection[0].row()); + m_coremods->deleteMods(first, last); } void LegacyModEditDialog::on_rmJarBtn_clicked() { - auto sm = ui->jarModsTreeView->selectionModel(); - auto selection = sm->selectedRows(); - if(!selection.size()) + int first, last; + auto list = ui->jarModsTreeView->selectionModel()->selectedRows(); + + if(!lastfirst(list, first, last)) return; - m_jarmods->deleteMod(selection[0].row()); + m_jarmods->deleteMods(first, last); } void LegacyModEditDialog::on_rmModBtn_clicked() { - auto sm = ui->mlModTreeView->selectionModel(); - auto selection = sm->selectedRows(); - if(!selection.size()) + int first, last; + auto list = ui->mlModTreeView->selectionModel()->selectedRows(); + + if(!lastfirst(list, first, last)) return; - m_mods->deleteMod(selection[0].row()); + m_mods->deleteMods(first, last); } void LegacyModEditDialog::on_rmTexPackBtn_clicked() { diff --git a/gui/LegacyModEditDialog.h b/gui/LegacyModEditDialog.h index 0654300f..536d402a 100644 --- a/gui/LegacyModEditDialog.h +++ b/gui/LegacyModEditDialog.h @@ -51,7 +51,11 @@ private slots: void on_viewTexPackBtn_clicked(); // Questionable: SettingsDialog doesn't need this for some reason? void on_buttonBox_rejected(); - +protected: + bool eventFilter(QObject *obj, QEvent *ev); + bool jarListFilter( QKeyEvent* ev ); + bool coreListFilter( QKeyEvent* ev ); + bool loaderListFilter( QKeyEvent* ev ); private: Ui::LegacyModEditDialog *ui; QSharedPointer m_mods; diff --git a/gui/ModListView.cpp b/gui/ModListView.cpp index dc63fcd9..34bd4af2 100644 --- a/gui/ModListView.cpp +++ b/gui/ModListView.cpp @@ -13,7 +13,7 @@ ModListView::ModListView ( QWidget* parent ) setRootIsDecorated ( false ); setSortingEnabled ( false ); setAlternatingRowColors ( true ); - setSelectionMode ( QAbstractItemView::SingleSelection ); + setSelectionMode ( QAbstractItemView::ContiguousSelection ); setHeaderHidden ( false ); setSelectionBehavior(QAbstractItemView::SelectRows); setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOn ); diff --git a/gui/ModListView.h b/gui/ModListView.h index 1cbf86b7..a9408fe7 100644 --- a/gui/ModListView.h +++ b/gui/ModListView.h @@ -1,6 +1,8 @@ #pragma once #include +class Mod; + class ModListView: public QTreeView { Q_OBJECT diff --git a/gui/consolewindow.ui b/gui/consolewindow.ui index f8c87aa0..9a766543 100644 --- a/gui/consolewindow.ui +++ b/gui/consolewindow.ui @@ -14,6 +14,15 @@ MultiMC Console + + 0 + + + 0 + + + 0 + @@ -30,6 +39,9 @@ + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + false -- cgit v1.2.3