pollymc/launcher/ui/dialogs/CopyInstanceDialog.cpp

215 lines
6.5 KiB
C++
Raw Normal View History

// SPDX-License-Identifier: GPL-3.0-only
/*
* PolyMC - Minecraft Launcher
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* Copyright 2013-2021 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <QLayout>
#include <QPushButton>
2021-11-20 20:52:22 +05:30
#include "Application.h"
#include "CopyInstanceDialog.h"
#include "ui_CopyInstanceDialog.h"
#include "ui/dialogs/IconPickerDialog.h"
2015-02-09 06:21:14 +05:30
#include "BaseVersion.h"
#include "icons/IconList.h"
#include "BaseInstance.h"
#include "InstanceList.h"
2014-03-30 23:41:05 +05:30
CopyInstanceDialog::CopyInstanceDialog(InstancePtr original, QWidget *parent)
2018-07-15 18:21:05 +05:30
:QDialog(parent), ui(new Ui::CopyInstanceDialog), m_original(original)
{
2018-07-15 18:21:05 +05:30
ui->setupUi(this);
resize(minimumSizeHint());
layout()->setSizeConstraint(QLayout::SetFixedSize);
InstIconKey = original->iconKey();
2021-11-20 20:52:22 +05:30
ui->iconButton->setIcon(APPLICATION->icons()->getIcon(InstIconKey));
2018-07-15 18:21:05 +05:30
ui->instNameTextBox->setText(original->name());
ui->instNameTextBox->setFocus();
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
auto groupList = APPLICATION->instances()->getGroups();
QSet<QString> groups(groupList.begin(), groupList.end());
groupList = QStringList(groups.values());
#else
2021-11-20 20:52:22 +05:30
auto groups = APPLICATION->instances()->getGroups().toSet();
2018-07-15 18:21:05 +05:30
auto groupList = QStringList(groups.toList());
#endif
2018-07-15 18:21:05 +05:30
groupList.sort(Qt::CaseInsensitive);
groupList.removeOne("");
groupList.push_front("");
ui->groupBox->addItems(groupList);
2021-11-20 20:52:22 +05:30
int index = groupList.indexOf(APPLICATION->instances()->getInstanceGroup(m_original->id()));
2018-07-15 18:21:05 +05:30
if(index == -1)
{
index = 0;
}
ui->groupBox->setCurrentIndex(index);
ui->groupBox->lineEdit()->setPlaceholderText(tr("No group"));
ui->copySavesCheckbox->setChecked(m_selectedOptions.copySaves);
ui->keepPlaytimeCheckbox->setChecked(m_selectedOptions.keepPlaytime);
ui->copyGameOptionsCheckbox->setChecked(m_selectedOptions.copyGameOptions);
ui->copyResPacksCheckbox->setChecked(m_selectedOptions.copyResourcePacks);
ui->copyShaderPacksCheckbox->setChecked(m_selectedOptions.copyShaderPacks);
ui->copyServersCheckbox->setChecked(m_selectedOptions.copyServers);
ui->copyModsCheckbox->setChecked(m_selectedOptions.copyMods);
}
CopyInstanceDialog::~CopyInstanceDialog()
{
2018-07-15 18:21:05 +05:30
delete ui;
}
void CopyInstanceDialog::updateDialogState()
{
auto allowOK = !instName().isEmpty();
auto OkButton = ui->buttonBox->button(QDialogButtonBox::Ok);
if(OkButton->isEnabled() != allowOK)
{
OkButton->setEnabled(allowOK);
}
}
QString CopyInstanceDialog::instName() const
{
auto result = ui->instNameTextBox->text().trimmed();
if(result.size())
{
return result;
}
return QString();
}
QString CopyInstanceDialog::iconKey() const
{
2018-07-15 18:21:05 +05:30
return InstIconKey;
}
QString CopyInstanceDialog::instGroup() const
{
2018-07-15 18:21:05 +05:30
return ui->groupBox->currentText();
}
const InstanceCopyPrefs& CopyInstanceDialog::getChosenOptions() const
{
return m_selectedOptions;
}
void CopyInstanceDialog::checkAllCheckboxes(const bool& b)
{
ui->keepPlaytimeCheckbox->setChecked(b);
ui->copySavesCheckbox->setChecked(b);
ui->copyGameOptionsCheckbox->setChecked(b);
ui->copyResPacksCheckbox->setChecked(b);
ui->copyShaderPacksCheckbox->setChecked(b);
ui->copyServersCheckbox->setChecked(b);
ui->copyModsCheckbox->setChecked(b);
}
// Check the "Select all" checkbox if all options are already selected:
void CopyInstanceDialog::updateSelectAllCheckbox()
{
ui->selectAllCheckbox->blockSignals(true);
ui->selectAllCheckbox->setChecked(m_selectedOptions.allTrue());
ui->selectAllCheckbox->blockSignals(false);
}
void CopyInstanceDialog::on_iconButton_clicked()
{
2018-07-15 18:21:05 +05:30
IconPickerDialog dlg(this);
dlg.execWithSelection(InstIconKey);
if (dlg.result() == QDialog::Accepted)
{
InstIconKey = dlg.selectedIconKey;
2021-11-20 20:52:22 +05:30
ui->iconButton->setIcon(APPLICATION->icons()->getIcon(InstIconKey));
2018-07-15 18:21:05 +05:30
}
}
void CopyInstanceDialog::on_instNameTextBox_textChanged(const QString &arg1)
{
2018-07-15 18:21:05 +05:30
updateDialogState();
}
2015-10-05 05:17:27 +05:30
void CopyInstanceDialog::on_selectAllCheckbox_stateChanged(int state)
2015-10-05 05:17:27 +05:30
{
bool checked;
checked = (state == Qt::Checked);
checkAllCheckboxes(checked);
2015-10-05 05:17:27 +05:30
}
void CopyInstanceDialog::on_copySavesCheckbox_stateChanged(int state)
{
m_selectedOptions.copySaves = (state == Qt::Checked);
updateSelectAllCheckbox();
}
void CopyInstanceDialog::on_keepPlaytimeCheckbox_stateChanged(int state)
{
m_selectedOptions.keepPlaytime = (state == Qt::Checked);
updateSelectAllCheckbox();
}
void CopyInstanceDialog::on_copyGameOptionsCheckbox_stateChanged(int state)
{
m_selectedOptions.copyGameOptions = (state == Qt::Checked);
updateSelectAllCheckbox();
}
void CopyInstanceDialog::on_copyResPacksCheckbox_stateChanged(int state)
{
m_selectedOptions.copyResourcePacks = (state == Qt::Checked);
updateSelectAllCheckbox();
}
void CopyInstanceDialog::on_copyShaderPacksCheckbox_stateChanged(int state)
{
m_selectedOptions.copyShaderPacks = (state == Qt::Checked);
updateSelectAllCheckbox();
}
void CopyInstanceDialog::on_copyServersCheckbox_stateChanged(int state)
{
m_selectedOptions.copyServers = (state == Qt::Checked);
updateSelectAllCheckbox();
}
void CopyInstanceDialog::on_copyModsCheckbox_stateChanged(int state)
{
m_selectedOptions.copyMods = (state == Qt::Checked);
updateSelectAllCheckbox();
}