GH-1121 select instance after creating it
This commit is contained in:
parent
0a187d0ad3
commit
b107617112
@ -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;
|
InstancePtr newInstance;
|
||||||
|
|
||||||
@ -1067,7 +1067,7 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin
|
|||||||
ProgressDialog dlDialog(this);
|
ProgressDialog dlDialog(this);
|
||||||
if (dlDialog.exec(&job) != QDialog::Accepted)
|
if (dlDialog.exec(&job) != QDialog::Accepted)
|
||||||
{
|
{
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
archivePath = entry->getFullPath();
|
archivePath = entry->getFullPath();
|
||||||
}
|
}
|
||||||
@ -1079,18 +1079,18 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin
|
|||||||
{
|
{
|
||||||
CustomMessageBox::selectable(this, tr("Error"),
|
CustomMessageBox::selectable(this, tr("Error"),
|
||||||
tr("Failed to extract modpack"), QMessageBox::Warning)->show();
|
tr("Failed to extract modpack"), QMessageBox::Warning)->show();
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
const QFileInfo instanceCfgFile = findRecursive(extractDir.absolutePath(), "instance.cfg");
|
const QFileInfo instanceCfgFile = findRecursive(extractDir.absolutePath(), "instance.cfg");
|
||||||
if (!instanceCfgFile.isFile() || !instanceCfgFile.exists())
|
if (!instanceCfgFile.isFile() || !instanceCfgFile.exists())
|
||||||
{
|
{
|
||||||
CustomMessageBox::selectable(this, tr("Error"), tr("Archive does not contain instance.cfg"))->show();
|
CustomMessageBox::selectable(this, tr("Error"), tr("Archive does not contain instance.cfg"))->show();
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!copyPath(instanceCfgFile.absoluteDir().absolutePath(), instDir))
|
if (!copyPath(instanceCfgFile.absoluteDir().absolutePath(), instDir))
|
||||||
{
|
{
|
||||||
CustomMessageBox::selectable(this, tr("Error"), tr("Unable to copy instance"))->show();
|
CustomMessageBox::selectable(this, tr("Error"), tr("Unable to copy instance"))->show();
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto error = MMC->instances()->loadInstance(newInstance, instDir);
|
auto error = MMC->instances()->loadInstance(newInstance, instDir);
|
||||||
@ -1100,11 +1100,11 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin
|
|||||||
case InstanceList::UnknownLoadError:
|
case InstanceList::UnknownLoadError:
|
||||||
errorMsg += tr("Unkown error");
|
errorMsg += tr("Unkown error");
|
||||||
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
||||||
return;
|
return nullptr;
|
||||||
case InstanceList::NotAnInstance:
|
case InstanceList::NotAnInstance:
|
||||||
errorMsg += tr("Not an instance");
|
errorMsg += tr("Not an instance");
|
||||||
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
||||||
return;
|
return nullptr;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1136,9 +1136,10 @@ void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QStrin
|
|||||||
MMC->instances()->saveGroupList();
|
MMC->instances()->saveGroupList();
|
||||||
|
|
||||||
finalizeInstance(newInstance);
|
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;
|
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.");
|
errorMsg += tr("An instance with the given directory name already exists.");
|
||||||
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
case InstanceList::CantCreateDir:
|
case InstanceList::CantCreateDir:
|
||||||
{
|
{
|
||||||
errorMsg += tr("Failed to create the instance directory.");
|
errorMsg += tr("Failed to create the instance directory.");
|
||||||
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
errorMsg += tr("Unknown instance loader error %1").arg(error);
|
errorMsg += tr("Unknown instance loader error %1").arg(error);
|
||||||
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
CustomMessageBox::selectable(this, tr("Error"), errorMsg, QMessageBox::Warning)->show();
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newInstance->setName(instName);
|
newInstance->setName(instName);
|
||||||
@ -1179,10 +1180,13 @@ void MainWindow::instanceFromVersion(QString instName, QString instGroup, QStrin
|
|||||||
MMC->instances()->add(InstancePtr(newInstance));
|
MMC->instances()->add(InstancePtr(newInstance));
|
||||||
MMC->instances()->saveGroupList();
|
MMC->instances()->saveGroupList();
|
||||||
finalizeInstance(newInstance);
|
finalizeInstance(newInstance);
|
||||||
|
return newInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::finalizeInstance(InstancePtr inst)
|
void MainWindow::finalizeInstance(InstancePtr inst)
|
||||||
{
|
{
|
||||||
|
view->updateGeometries();
|
||||||
|
setSelectedInstanceById(inst->id());
|
||||||
if (MMC->accounts()->anyAccountIsValid())
|
if (MMC->accounts()->anyAccountIsValid())
|
||||||
{
|
{
|
||||||
ProgressDialog loadDialog(this);
|
ProgressDialog loadDialog(this);
|
||||||
|
@ -57,6 +57,8 @@ public:
|
|||||||
|
|
||||||
private
|
private
|
||||||
slots:
|
slots:
|
||||||
|
void setSelectedInstanceById(const QString &id);
|
||||||
|
|
||||||
void onCatToggled(bool);
|
void onCatToggled(bool);
|
||||||
|
|
||||||
void on_actionAbout_triggered();
|
void on_actionAbout_triggered();
|
||||||
@ -162,11 +164,9 @@ protected:
|
|||||||
void setCatBackground(bool enabled);
|
void setCatBackground(bool enabled);
|
||||||
void updateInstanceToolIcon(QString new_icon);
|
void updateInstanceToolIcon(QString new_icon);
|
||||||
|
|
||||||
void setSelectedInstanceById(const QString &id);
|
|
||||||
|
|
||||||
void waitForMinecraftVersions();
|
void waitForMinecraftVersions();
|
||||||
void instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version);
|
InstancePtr instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version);
|
||||||
void instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url);
|
InstancePtr instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url);
|
||||||
void finalizeInstance(InstancePtr inst);
|
void finalizeInstance(InstancePtr inst);
|
||||||
void launch(InstancePtr instance, bool online = true, BaseProfilerFactory *profiler = nullptr);
|
void launch(InstancePtr instance, bool online = true, BaseProfilerFactory *profiler = nullptr);
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ void GroupView::mousePressEvent(QMouseEvent *event)
|
|||||||
|
|
||||||
QPoint visualPos = event->pos();
|
QPoint visualPos = event->pos();
|
||||||
QPoint geometryPos = event->pos() + offset();
|
QPoint geometryPos = event->pos() + offset();
|
||||||
|
|
||||||
QPersistentModelIndex index = indexAt(visualPos);
|
QPersistentModelIndex index = indexAt(visualPos);
|
||||||
|
|
||||||
m_pressedIndex = index;
|
m_pressedIndex = index;
|
||||||
@ -697,95 +697,6 @@ bool GroupView::isDragEventAccepted(QDropEvent *event)
|
|||||||
QPair<VisualGroup *, int> GroupView::rowDropPos(const QPoint &pos)
|
QPair<VisualGroup *, int> GroupView::rowDropPos(const QPoint &pos)
|
||||||
{
|
{
|
||||||
return qMakePair<VisualGroup*, int>(nullptr, -1);
|
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
|
QPoint GroupView::offset() const
|
||||||
|
@ -50,13 +50,15 @@ public:
|
|||||||
{
|
{
|
||||||
return m_spacing;
|
return m_spacing;
|
||||||
};
|
};
|
||||||
protected
|
|
||||||
slots:
|
public slots:
|
||||||
|
virtual void updateGeometries() override;
|
||||||
|
|
||||||
|
protected slots:
|
||||||
virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
|
virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
|
||||||
const QVector<int> &roles) override;
|
const QVector<int> &roles) override;
|
||||||
virtual void rowsInserted(const QModelIndex &parent, int start, int end) 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 rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override;
|
||||||
virtual void updateGeometries() override;
|
|
||||||
void modelReset();
|
void modelReset();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -388,7 +388,8 @@ QModelIndex InstanceList::getInstanceIndexById(const QString &id) const
|
|||||||
|
|
||||||
int InstanceList::getInstIndex(BaseInstance *inst) 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())
|
if (inst == m_instances[i].get())
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user