NOISSUE Show Version page while the instancer is running.
All controls are disabled.
This commit is contained in:
parent
80b3efff11
commit
6fde775b90
@ -43,6 +43,8 @@ ComponentList::ComponentList(MinecraftInstance * instance)
|
|||||||
d->m_instance = instance;
|
d->m_instance = instance;
|
||||||
d->m_saveTimer.setSingleShot(true);
|
d->m_saveTimer.setSingleShot(true);
|
||||||
d->m_saveTimer.setInterval(5000);
|
d->m_saveTimer.setInterval(5000);
|
||||||
|
d->interactionDisabled = instance->isRunning();
|
||||||
|
connect(d->m_instance, &BaseInstance::runningStatusChanged, this, &ComponentList::disableInteraction);
|
||||||
connect(&d->m_saveTimer, &QTimer::timeout, this, &ComponentList::save_internal);
|
connect(&d->m_saveTimer, &QTimer::timeout, this, &ComponentList::save_internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -765,8 +767,9 @@ QVariant ComponentList::data(const QModelIndex &index, int role) const
|
|||||||
{
|
{
|
||||||
switch (column)
|
switch (column)
|
||||||
{
|
{
|
||||||
case NameColumn:
|
case NameColumn: {
|
||||||
return d->components.at(row)->isEnabled() ? Qt::Checked : Qt::Unchecked;
|
return patch->isEnabled() ? Qt::Checked : Qt::Unchecked;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
@ -776,7 +779,7 @@ QVariant ComponentList::data(const QModelIndex &index, int role) const
|
|||||||
switch (column)
|
switch (column)
|
||||||
{
|
{
|
||||||
case NameColumn:
|
case NameColumn:
|
||||||
return d->components.at(row)->getName();
|
return patch->getName();
|
||||||
case VersionColumn:
|
case VersionColumn:
|
||||||
{
|
{
|
||||||
if(patch->isCustom())
|
if(patch->isCustom())
|
||||||
@ -856,21 +859,25 @@ QVariant ComponentList::headerData(int section, Qt::Orientation orientation, int
|
|||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: zero precision mess
|
||||||
Qt::ItemFlags ComponentList::flags(const QModelIndex &index) const
|
Qt::ItemFlags ComponentList::flags(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
if (!index.isValid())
|
if (!index.isValid()) {
|
||||||
return Qt::NoItemFlags;
|
return Qt::NoItemFlags;
|
||||||
|
}
|
||||||
|
|
||||||
Qt::ItemFlags outFlags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
Qt::ItemFlags outFlags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
||||||
|
|
||||||
int row = index.row();
|
int row = index.row();
|
||||||
|
|
||||||
if (row < 0 || row >= d->components.size())
|
if (row < 0 || row >= d->components.size()) {
|
||||||
return Qt::NoItemFlags;
|
return Qt::NoItemFlags;
|
||||||
|
}
|
||||||
|
|
||||||
auto patch = d->components.at(row);
|
auto patch = d->components.at(row);
|
||||||
// TODO: this will need fine-tuning later...
|
// TODO: this will need fine-tuning later...
|
||||||
if(patch->canBeDisabled())
|
if(patch->canBeDisabled() && !d->interactionDisabled)
|
||||||
{
|
{
|
||||||
outFlags |= Qt::ItemIsUserCheckable;
|
outFlags |= Qt::ItemIsUserCheckable;
|
||||||
}
|
}
|
||||||
@ -1205,3 +1212,14 @@ QString ComponentList::getComponentVersion(const QString& uid) const
|
|||||||
}
|
}
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ComponentList::disableInteraction(bool disable)
|
||||||
|
{
|
||||||
|
if(d->interactionDisabled != disable) {
|
||||||
|
d->interactionDisabled = disable;
|
||||||
|
auto size = d->components.size();
|
||||||
|
if(size) {
|
||||||
|
emit dataChanged(index(0), index(size - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -134,6 +134,7 @@ private slots:
|
|||||||
void updateSucceeded();
|
void updateSucceeded();
|
||||||
void updateFailed(const QString & error);
|
void updateFailed(const QString & error);
|
||||||
void componentDataChanged();
|
void componentDataChanged();
|
||||||
|
void disableInteraction(bool disable);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool load();
|
bool load();
|
||||||
|
@ -38,5 +38,6 @@ struct ComponentListData
|
|||||||
QTimer m_saveTimer;
|
QTimer m_saveTimer;
|
||||||
shared_qobject_ptr<Task> m_updateTask;
|
shared_qobject_ptr<Task> m_updateTask;
|
||||||
bool loaded = false;
|
bool loaded = false;
|
||||||
|
bool interactionDisabled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ QIcon VersionPage::icon() const
|
|||||||
}
|
}
|
||||||
bool VersionPage::shouldDisplay() const
|
bool VersionPage::shouldDisplay() const
|
||||||
{
|
{
|
||||||
return !m_inst->isRunning();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMenu * VersionPage::createPopupMenu()
|
QMenu * VersionPage::createPopupMenu()
|
||||||
@ -140,9 +140,11 @@ VersionPage::VersionPage(MinecraftInstance *inst, QWidget *parent)
|
|||||||
auto smodel = ui->packageView->selectionModel();
|
auto smodel = ui->packageView->selectionModel();
|
||||||
connect(smodel, &QItemSelectionModel::currentChanged, this, &VersionPage::packageCurrent);
|
connect(smodel, &QItemSelectionModel::currentChanged, this, &VersionPage::packageCurrent);
|
||||||
|
|
||||||
|
connect(m_profile.get(), &ComponentList::minecraftChanged, this, &VersionPage::updateVersionControls);
|
||||||
|
controlsEnabled = !m_inst->isRunning();
|
||||||
updateVersionControls();
|
updateVersionControls();
|
||||||
preselect(0);
|
preselect(0);
|
||||||
connect(m_profile.get(), &ComponentList::minecraftChanged, this, &VersionPage::updateVersionControls);
|
connect(m_inst, &BaseInstance::runningStatusChanged, this, &VersionPage::updateRunningStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionPage::~VersionPage()
|
VersionPage::~VersionPage()
|
||||||
@ -192,28 +194,47 @@ void VersionPage::packageCurrent(const QModelIndex ¤t, const QModelIndex &
|
|||||||
ui->frame->setModDescription(problemOut);
|
ui->frame->setModDescription(problemOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VersionPage::updateRunningStatus(bool running)
|
||||||
|
{
|
||||||
|
if(controlsEnabled == running) {
|
||||||
|
controlsEnabled = !running;
|
||||||
|
updateVersionControls();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VersionPage::updateVersionControls()
|
void VersionPage::updateVersionControls()
|
||||||
{
|
{
|
||||||
// FIXME: this is a dirty hack
|
// FIXME: this is a dirty hack
|
||||||
if(m_profile) {
|
|
||||||
auto minecraftVersion = Version(m_profile->getComponentVersion("net.minecraft"));
|
auto minecraftVersion = Version(m_profile->getComponentVersion("net.minecraft"));
|
||||||
bool newCraft = minecraftVersion >= Version("1.14");
|
bool newCraft = controlsEnabled && (minecraftVersion >= Version("1.14"));
|
||||||
bool oldCraft = minecraftVersion <= Version("1.12.2");
|
bool oldCraft = controlsEnabled && (minecraftVersion <= Version("1.12.2"));
|
||||||
ui->actionInstall_Fabric->setEnabled(newCraft);
|
ui->actionInstall_Fabric->setEnabled(newCraft);
|
||||||
ui->actionInstall_Forge->setEnabled(oldCraft);
|
ui->actionInstall_Forge->setEnabled(oldCraft);
|
||||||
ui->actionInstall_LiteLoader->setEnabled(oldCraft);
|
ui->actionInstall_LiteLoader->setEnabled(oldCraft);
|
||||||
ui->actionReload->setEnabled(true);
|
ui->actionReload->setEnabled(true);
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->actionInstall_Fabric->setEnabled(false);
|
|
||||||
ui->actionInstall_Forge->setEnabled(false);
|
|
||||||
ui->actionInstall_LiteLoader->setEnabled(false);
|
|
||||||
ui->actionReload->setEnabled(false);
|
|
||||||
}
|
|
||||||
updateButtons();
|
updateButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VersionPage::updateButtons(int row)
|
||||||
|
{
|
||||||
|
if(row == -1)
|
||||||
|
row = currentRow();
|
||||||
|
auto patch = m_profile->getComponent(row);
|
||||||
|
ui->actionRemove->setEnabled(controlsEnabled && patch && patch->isRemovable());
|
||||||
|
ui->actionMove_down->setEnabled(controlsEnabled && patch && patch->isMoveable());
|
||||||
|
ui->actionMove_up->setEnabled(controlsEnabled && patch && patch->isMoveable());
|
||||||
|
ui->actionChange_version->setEnabled(controlsEnabled && patch && patch->isVersionChangeable());
|
||||||
|
ui->actionEdit->setEnabled(controlsEnabled && patch && patch->isCustom());
|
||||||
|
ui->actionCustomize->setEnabled(controlsEnabled && patch && patch->isCustomizable());
|
||||||
|
ui->actionRevert->setEnabled(controlsEnabled && patch && patch->isRevertible());
|
||||||
|
ui->actionDownload_All->setEnabled(controlsEnabled);
|
||||||
|
ui->actionAdd_Empty->setEnabled(controlsEnabled);
|
||||||
|
ui->actionReload->setEnabled(controlsEnabled);
|
||||||
|
ui->actionInstall_mods->setEnabled(controlsEnabled);
|
||||||
|
ui->actionReplace_Minecraft_jar->setEnabled(controlsEnabled);
|
||||||
|
ui->actionAdd_to_Minecraft_jar->setEnabled(controlsEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
bool VersionPage::reloadComponentList()
|
bool VersionPage::reloadComponentList()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -515,37 +536,9 @@ void VersionPage::preselect(int row)
|
|||||||
updateButtons(row);
|
updateButtons(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionPage::updateButtons(int row)
|
|
||||||
{
|
|
||||||
if(row == -1)
|
|
||||||
row = currentRow();
|
|
||||||
auto patch = m_profile->getComponent(row);
|
|
||||||
if (!patch)
|
|
||||||
{
|
|
||||||
ui->actionRemove->setDisabled(true);
|
|
||||||
ui->actionMove_down->setDisabled(true);
|
|
||||||
ui->actionMove_up->setDisabled(true);
|
|
||||||
ui->actionChange_version->setDisabled(true);
|
|
||||||
ui->actionEdit->setDisabled(true);
|
|
||||||
ui->actionCustomize->setDisabled(true);
|
|
||||||
ui->actionRevert->setDisabled(true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ui->actionRemove->setEnabled(patch->isRemovable());
|
|
||||||
ui->actionMove_down->setEnabled(patch->isMoveable());
|
|
||||||
ui->actionMove_up->setEnabled(patch->isMoveable());
|
|
||||||
ui->actionChange_version->setEnabled(patch->isVersionChangeable());
|
|
||||||
ui->actionEdit->setEnabled(patch->isCustom());
|
|
||||||
ui->actionCustomize->setEnabled(patch->isCustomizable());
|
|
||||||
ui->actionRevert->setEnabled(patch->isRevertible());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void VersionPage::onGameUpdateError(QString error)
|
void VersionPage::onGameUpdateError(QString error)
|
||||||
{
|
{
|
||||||
CustomMessageBox::selectable(this, tr("Error updating instance"), error,
|
CustomMessageBox::selectable(this, tr("Error updating instance"), error, QMessageBox::Warning)->show();
|
||||||
QMessageBox::Warning)->show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Component * VersionPage::current()
|
Component * VersionPage::current()
|
||||||
|
@ -86,11 +86,13 @@ private:
|
|||||||
std::shared_ptr<ComponentList> m_profile;
|
std::shared_ptr<ComponentList> m_profile;
|
||||||
MinecraftInstance *m_inst;
|
MinecraftInstance *m_inst;
|
||||||
int currentIdx = 0;
|
int currentIdx = 0;
|
||||||
|
bool controlsEnabled = false;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void versionCurrent(const QModelIndex ¤t, const QModelIndex &previous);
|
void versionCurrent(const QModelIndex ¤t, const QModelIndex &previous);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateRunningStatus(bool running);
|
||||||
void onGameUpdateError(QString error);
|
void onGameUpdateError(QString error);
|
||||||
void packageCurrent(const QModelIndex ¤t, const QModelIndex &previous);
|
void packageCurrent(const QModelIndex ¤t, const QModelIndex &previous);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user