From c92ad7dcf86f2e5e71d71a68e24e79fbdeceb56d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 18 Aug 2013 20:52:17 +0200 Subject: Drag and Drop, mod management. --- gui/LegacyModEditDialog.cpp | 92 +++++++++++++++++++++++++++++++++++++++++++++ gui/LegacyModEditDialog.h | 9 +++-- gui/LegacyModEditDialog.ui | 40 ++++++++++---------- gui/ModListView.cpp | 32 ++++++++++++++++ gui/ModListView.h | 10 +++++ gui/mainwindow.cpp | 24 +----------- gui/mainwindow.ui | 3 -- 7 files changed, 161 insertions(+), 49 deletions(-) create mode 100644 gui/ModListView.cpp create mode 100644 gui/ModListView.h (limited to 'gui') diff --git a/gui/LegacyModEditDialog.cpp b/gui/LegacyModEditDialog.cpp index a6becd7d..61e3872e 100644 --- a/gui/LegacyModEditDialog.cpp +++ b/gui/LegacyModEditDialog.cpp @@ -15,6 +15,9 @@ #include "LegacyModEditDialog.h" #include "ui_LegacyModEditDialog.h" +#include +#include +#include LegacyModEditDialog::LegacyModEditDialog( LegacyInstance* inst, QWidget* parent ) : m_inst(inst), @@ -22,7 +25,22 @@ LegacyModEditDialog::LegacyModEditDialog( LegacyInstance* inst, QWidget* parent ui(new Ui::LegacyModEditDialog) { ui->setupUi(this); + ensurePathExists(m_inst->coreModsDir()); + ensurePathExists(m_inst->mlModsDir()); + ensurePathExists(m_inst->jarModsDir()); + m_mods = m_inst->loaderModList(); + m_coremods = m_inst->coreModList(); + m_jarmods = m_inst->jarModList(); + /* + m_mods->startWatching(); + m_coremods->startWatching(); + m_jarmods->startWatching(); + */ + + ui->jarModsTreeView->setModel(m_jarmods.data()); + ui->coreModsTreeView->setModel(m_coremods.data()); + ui->mlModTreeView->setModel(m_mods.data()); } LegacyModEditDialog::~LegacyModEditDialog() @@ -30,6 +48,80 @@ LegacyModEditDialog::~LegacyModEditDialog() delete ui; } +void LegacyModEditDialog::on_addCoreBtn_clicked() +{ + QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Core Mods"); + for(auto filename:fileNames) + { + m_coremods->installMod(QFileInfo(filename)); + } +} +void LegacyModEditDialog::on_addForgeBtn_clicked() +{ + +} +void LegacyModEditDialog::on_addJarBtn_clicked() +{ + +} +void LegacyModEditDialog::on_addModBtn_clicked() +{ + +} +void LegacyModEditDialog::on_addTexPackBtn_clicked() +{ + +} +void LegacyModEditDialog::on_moveJarDownBtn_clicked() +{ + +} +void LegacyModEditDialog::on_moveJarUpBtn_clicked() +{ + +} +void LegacyModEditDialog::on_rmCoreBtn_clicked() +{ + auto sm = ui->coreModsTreeView->selectionModel(); + auto selection = sm->selectedRows(); + if(!selection.size()) + return; + m_coremods->deleteMod(selection[0].row()); +} +void LegacyModEditDialog::on_rmJarBtn_clicked() +{ + auto sm = ui->jarModsTreeView->selectionModel(); + auto selection = sm->selectedRows(); + if(!selection.size()) + return; + m_jarmods->deleteMod(selection[0].row()); +} +void LegacyModEditDialog::on_rmModBtn_clicked() +{ + auto sm = ui->mlModTreeView->selectionModel(); + auto selection = sm->selectedRows(); + if(!selection.size()) + return; + m_mods->deleteMod(selection[0].row()); +} +void LegacyModEditDialog::on_rmTexPackBtn_clicked() +{ + +} +void LegacyModEditDialog::on_viewCoreBtn_clicked() +{ + openDirInDefaultProgram(m_inst->coreModsDir(), true); +} +void LegacyModEditDialog::on_viewModBtn_clicked() +{ + openDirInDefaultProgram(m_inst->mlModsDir(), true); +} +void LegacyModEditDialog::on_viewTexPackBtn_clicked() +{ + //openDirInDefaultProgram(m_inst->mlModsDir(), true); +} + + void LegacyModEditDialog::on_buttonBox_rejected() { close(); diff --git a/gui/LegacyModEditDialog.h b/gui/LegacyModEditDialog.h index 3af6c8d7..0654300f 100644 --- a/gui/LegacyModEditDialog.h +++ b/gui/LegacyModEditDialog.h @@ -31,9 +31,9 @@ public: ~LegacyModEditDialog(); private slots: - /* Mapped for implementation + void on_addJarBtn_clicked(); - void on_rmJarBtn_clicked(); + void on_rmJarBtn_clicked(); void on_addForgeBtn_clicked(); void on_moveJarUpBtn_clicked(); void on_moveJarDownBtn_clicked(); @@ -49,11 +49,14 @@ private slots: void on_addTexPackBtn_clicked(); void on_rmTexPackBtn_clicked(); void on_viewTexPackBtn_clicked(); - */ // Questionable: SettingsDialog doesn't need this for some reason? void on_buttonBox_rejected(); private: Ui::LegacyModEditDialog *ui; + QSharedPointer m_mods; + QSharedPointer m_coremods; + QSharedPointer m_jarmods; + QSharedPointer m_texturepacks; LegacyInstance * m_inst; }; diff --git a/gui/LegacyModEditDialog.ui b/gui/LegacyModEditDialog.ui index d55c3e1c..c219e7c2 100644 --- a/gui/LegacyModEditDialog.ui +++ b/gui/LegacyModEditDialog.ui @@ -16,9 +16,6 @@ - - false - 0 @@ -28,12 +25,12 @@ - - - true + + + Qt::ScrollBarAlwaysOn - - QAbstractItemView::DropOnly + + Qt::ScrollBarAlwaysOff @@ -55,6 +52,9 @@ + + false + MCForge @@ -97,10 +97,7 @@ - - - true - + QAbstractItemView::DropOnly @@ -152,7 +149,7 @@ - + true @@ -210,19 +207,13 @@ - + true - - false - QAbstractItemView::DropOnly - - Qt::IgnoreAction - @@ -270,12 +261,19 @@ - QDialogButtonBox::Close + QDialogButtonBox::Close|QDialogButtonBox::Reset + + + ModListView + QTreeView +
gui/ModListView.h
+
+
diff --git a/gui/ModListView.cpp b/gui/ModListView.cpp new file mode 100644 index 00000000..a9898851 --- /dev/null +++ b/gui/ModListView.cpp @@ -0,0 +1,32 @@ +#include "ModListView.h" +#include +#include + +ModListView::ModListView ( QWidget* parent ) + :QTreeView ( parent ) +{ + setAllColumnsShowFocus ( true ); + setExpandsOnDoubleClick ( false ); + setRootIsDecorated ( false ); + setSortingEnabled ( false ); + setAlternatingRowColors ( true ); + setSelectionMode ( QAbstractItemView::SingleSelection ); + setHeaderHidden ( false ); + setSelectionBehavior(QAbstractItemView::SelectRows); + setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOn ); + setHorizontalScrollBarPolicy ( Qt::ScrollBarAsNeeded ); + setDropIndicatorShown(true); + setDragEnabled(true); + setDragDropMode(QAbstractItemView::DragDrop); + viewport()->setAcceptDrops(true); +} + +void ModListView::setModel ( QAbstractItemModel* model ) +{ + QTreeView::setModel ( model ); + auto head = header(); + head->setStretchLastSection(false); + head->setSectionResizeMode(0, QHeaderView::Stretch); + head->setSectionResizeMode(1, QHeaderView::ResizeToContents); + dropIndicatorPosition(); +} diff --git a/gui/ModListView.h b/gui/ModListView.h new file mode 100644 index 00000000..1cbf86b7 --- /dev/null +++ b/gui/ModListView.h @@ -0,0 +1,10 @@ +#pragma once +#include + +class ModListView: public QTreeView +{ + Q_OBJECT +public: + explicit ModListView ( QWidget* parent = 0 ); + virtual void setModel ( QAbstractItemModel* model ); +}; \ No newline at end of file diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 5087b38f..ba7e135c 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -64,11 +64,6 @@ #include "instancedelegate.h" #include "IconPickerDialog.h" -// Opens the given file in the default application. -// TODO: Move this somewhere. -void openFileInDefaultProgram ( QString filename ); -void openDirInDefaultProgram ( QString dirpath, bool ensureExists = false ); - MainWindow::MainWindow ( QWidget *parent ) : QMainWindow ( parent ), ui ( new Ui::MainWindow ), @@ -376,7 +371,8 @@ void MainWindow::on_actionEditInstMods_triggered() if (inst) { auto dialog = inst->createModEditDialog(this); - dialog->exec(); + if(dialog) + dialog->exec(); } } @@ -537,22 +533,6 @@ void MainWindow::openWebPage ( QUrl url ) browser->exec(); } -void openDirInDefaultProgram ( QString path, bool ensureExists ) -{ - QDir parentPath; - QDir dir( path ); - if(!dir.exists()) - { - parentPath.mkpath(dir.absolutePath()); - } - QDesktopServices::openUrl ( "file:///" + dir.absolutePath() ); -} - -void openFileInDefaultProgram ( QString filename ) -{ - QDesktopServices::openUrl ( "file:///" + QFileInfo ( filename ).absolutePath() ); -} - void MainWindow::on_actionChangeInstMCVersion_triggered() { if (view->selectionModel()->selectedIndexes().count() < 1) diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui index ae34bf51..893062a5 100644 --- a/gui/mainwindow.ui +++ b/gui/mainwindow.ui @@ -347,9 +347,6 @@ - - false - Edit Mods -- cgit v1.2.3