diff options
-rw-r--r-- | application/MainWindow.cpp | 26 | ||||
-rw-r--r-- | application/MainWindow.h | 8 | ||||
-rw-r--r-- | application/groupview/GroupView.cpp | 91 | ||||
-rw-r--r-- | application/groupview/GroupView.h | 8 | ||||
-rw-r--r-- | logic/InstanceList.cpp | 3 |
5 files changed, 27 insertions, 109 deletions
diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index b50d0160..c7626e54 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -1041,7 +1041,7 @@ void MainWindow::waitForMinecraftVersions() } } -void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url) +InstancePtr MainWindow::instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url) { InstancePtr newInstance; @@ -1067,7 +1067,7 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin ProgressDialog dlDialog(this); if (dlDialog.exec(&job) != QDialog::Accepted) { - return; + return nullptr; } archivePath = entry->getFullPath(); } @@ -1079,18 +1079,18 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin { CustomMessageBox::selectable(this, tr("Error"), tr("Failed to extract modpack"), QMessageBox::Warning)->show(); - return; + return nullptr; } const QFileInfo instanceCfgFile = findRecursive(extractDir.absolutePath(), "instance.cfg"); if (!instanceCfgFile.isFile() || !instanceCfgFile.exists()) { CustomMessageBox::selectable(this, tr("Error"), tr("Archive does not contain instance.cfg"))->show(); - return; + return nullptr; } if (!copyPath(instanceCfgFile.absoluteDir().absolutePath(), instDir)) { CustomMessageBox::selectable(this, tr("Error"), tr("Unable to copy instance"))->show(); - return; + return nullptr; } auto error = MMC->instances()->loadInstance(newInstance, instDir); @@ -1100,11 +1100,11 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin case InstanceList::UnknownLoadError: errorMsg += tr("Unkown error"); CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show(); - return; + return nullptr; case InstanceList::NotAnInstance: errorMsg += tr("Not an instance"); CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show(); - return; + return nullptr; default: break; } @@ -1136,9 +1136,10 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin MMC->instances()->saveGroupList(); finalizeInstance(newInstance); + return newInstance; } -void MainWindow::instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version) +InstancePtr MainWindow::instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version) { InstancePtr newInstance; @@ -1156,21 +1157,21 @@ void MainWindow::instanceFromVersion(QString instName, QString instGroup, QStrin { errorMsg += tr("An instance with the given directory name already exists."); CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show(); - return; + return nullptr; } case InstanceList::CantCreateDir: { errorMsg += tr("Failed to create the instance directory."); CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show(); - return; + return nullptr; } default: { errorMsg += tr("Unknown instance loader error %1").arg(error); CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show(); - return; + return nullptr; } } newInstance->setName(instName); @@ -1179,10 +1180,13 @@ void MainWindow::instanceFromVersion(QString instName, QString instGroup, QStrin MMC->instances()->add(InstancePtr(newInstance)); MMC->instances()->saveGroupList(); finalizeInstance(newInstance); + return newInstance; } void MainWindow::finalizeInstance(InstancePtr inst) { + view->updateGeometries(); + setSelectedInstanceById(inst->id()); if (MMC->accounts()->anyAccountIsValid()) { ProgressDialog loadDialog(this); diff --git a/application/MainWindow.h b/application/MainWindow.h index 7ef277db..639405c0 100644 --- a/application/MainWindow.h +++ b/application/MainWindow.h @@ -57,6 +57,8 @@ public: private slots: + void setSelectedInstanceById(const QString &id); + void onCatToggled(bool); void on_actionAbout_triggered(); @@ -162,11 +164,9 @@ protected: void setCatBackground(bool enabled); void updateInstanceToolIcon(QString new_icon); - void setSelectedInstanceById(const QString &id); - void waitForMinecraftVersions(); - void instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version); - void instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url); + InstancePtr instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version); + InstancePtr instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url); void finalizeInstance(InstancePtr inst); void launch(InstancePtr instance, bool online = true, BaseProfilerFactory *profiler = nullptr); diff --git a/application/groupview/GroupView.cpp b/application/groupview/GroupView.cpp index 89694b87..ab9e71cf 100644 --- a/application/groupview/GroupView.cpp +++ b/application/groupview/GroupView.cpp @@ -221,7 +221,7 @@ void GroupView::mousePressEvent(QMouseEvent *event) QPoint visualPos = event->pos(); QPoint geometryPos = event->pos() + offset(); - + QPersistentModelIndex index = indexAt(visualPos); m_pressedIndex = index; @@ -697,95 +697,6 @@ bool GroupView::isDragEventAccepted(QDropEvent *event) QPair<VisualGroup *, int> GroupView::rowDropPos(const QPoint &pos) { return qMakePair<VisualGroup*, int>(nullptr, -1); - // FIXME: PIXIE DUST. - /* - // check that we aren't on a category header and calculate which category we're in - VisualGroup *category = 0; - { - int y = 0; - for (auto cat : m_groups) - { - if (pos.y() > y && pos.y() < (y + cat->headerHeight())) - { - return qMakePair<VisualGroup*, int>(nullptr, -1); - } - y += cat->totalHeight() + m_categoryMargin; - if (pos.y() < y) - { - category = cat; - break; - } - } - if (category == 0) - { - return qMakePair<VisualGroup*, int>(nullptr, -1); - } - } - - QList<QModelIndex> indices = category->items(); - - // calculate the internal column - int internalColumn = -1; - { - const int itemWidth = this->itemWidth(); - if (pos.x() >= (itemWidth * itemsPerRow())) - { - internalColumn = itemsPerRow(); - } - else - { - for (int i = 0, c = 0; i < contentWidth(); i += itemWidth + 10 , ++c) - { - if (pos.x() > (i - itemWidth / 2) && pos.x() <= (i + itemWidth / 2)) - { - internalColumn = c; - break; - } - } - } - if (internalColumn == -1) - { - return qMakePair<VisualGroup*, int>(nullptr, -1); - } - } - - // calculate the internal row - int internalRow = -1; - { - // FIXME rework the drag and drop code - const int top = category->verticalPosition(); - for (int r = 0, h = top; r < category->numRows(); - h += itemHeightForCategoryRow(category, r), ++r) - { - if (pos.y() > h && pos.y() < (h + itemHeightForCategoryRow(category, r))) - { - internalRow = r; - break; - } - } - if (internalRow == -1) - { - return qMakePair<VisualGroup*, int>(nullptr, -1); - } - // this happens if we're in the margin between a one category and another - // categories header - if (internalRow > (indices.size() / itemsPerRow())) - { - return qMakePair<VisualGroup*, int>(nullptr, -1); - } - } - - // flaten the internalColumn/internalRow to one row - int categoryRow = internalRow * itemsPerRow() + internalColumn; - - // this is used if we're past the last item - if (categoryRow >= indices.size()) - { - return qMakePair(category, indices.last().row() + 1); - } - - return qMakePair(category, indices.at(categoryRow).row()); - */ } QPoint GroupView::offset() const diff --git a/application/groupview/GroupView.h b/application/groupview/GroupView.h index 93e45ed7..b97d3a3c 100644 --- a/application/groupview/GroupView.h +++ b/application/groupview/GroupView.h @@ -50,13 +50,15 @@ public: { return m_spacing; }; -protected -slots: + +public slots: + virtual void updateGeometries() override; + +protected slots: virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) override; virtual void rowsInserted(const QModelIndex &parent, int start, int end) override; virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override; - virtual void updateGeometries() override; void modelReset(); protected: diff --git a/logic/InstanceList.cpp b/logic/InstanceList.cpp index 3bdceb51..2ff0c913 100644 --- a/logic/InstanceList.cpp +++ b/logic/InstanceList.cpp @@ -388,7 +388,8 @@ QModelIndex InstanceList::getInstanceIndexById(const QString &id) const int InstanceList::getInstIndex(BaseInstance *inst) const { - for (int i = 0; i < m_instances.count(); i++) + int count = m_instances.count(); + for (int i = 0; i < count; i++) { if (inst == m_instances[i].get()) { |