// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#include "stdpch.h"
#include "profilesdialog.h"
#include "profilesmodel.h"
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
CProfilesDialog::CProfilesDialog():QDialog(), m_currentProfileIndex(-1)
{
setupUi(this);
connect(addButton, SIGNAL(clicked()), SLOT(onAddProfile()));
connect(deleteButton, SIGNAL(clicked()), SLOT(onDeleteProfile()));
connect(profilesListView, SIGNAL(clicked(QModelIndex)), SLOT(onProfileClicked(QModelIndex)));
connect(executableBrowseButton, SIGNAL(clicked()), SLOT(onExecutableBrowseClicked()));
m_model = new CProfilesModel(this);
profilesListView->setModel(m_model);
QStringList servers;
servers << "Atys";
servers << "Yubo";
QStringListModel *serversModel = new QStringListModel(servers, this);
serverComboBox->setModel(serversModel);
}
CProfilesDialog::~CProfilesDialog()
{
}
void CProfilesDialog::accept()
{
m_model->save();
QDialog::accept();
}
void CProfilesDialog::onAddProfile()
{
}
void CProfilesDialog::onDeleteProfile()
{
QMessageBox::StandardButton res = QMessageBox::question(this, tr("Confirmation"), tr("You're going to delete a profile, files won't be deleted and you'll have to do that manually.\nAre you sure to delete this profile?"));
if (res != QMessageBox::Yes) return;
QModelIndex index = profilesListView->currentIndex();
deleteProfile(index.row());
}
void CProfilesDialog::onProfileClicked(const QModelIndex &index)
{
qDebug() << "clicked on" << index;
displayProfile(index.row());
}
void CProfilesDialog::displayProfile(int index)
{
if (index < 0) return;
saveProfile(m_currentProfileIndex);
const CProfile &profile = m_model->getProfiles()[index];
profileIdLabel->setText(QString::number(profile.id));
accountEdit->setText(profile.account);
nameEdit->setText(profile.name);
serverComboBox->setCurrentIndex(0);
executablePathLabel->setText(QFileInfo(profile.executable).fileName());
argumentsEdit->setText(profile.arguments);
commentsEdit->setPlainText(profile.comments);
directoryPathLabel->setText(CConfigFile::getInstance()->getProfileDirectory());
m_currentProfileIndex = index;
}
void CProfilesDialog::saveProfile(int index)
{
if (index < 0) return;
CProfile &profile = m_model->getProfiles()[index];
profileIdLabel->setText(QString::number(profile.id));
profile.account = accountEdit->text();
profile.name = nameEdit->text();
// serverComboBox->setCurrentIndex(0);
profile.arguments = argumentsEdit->text();
profile.comments = commentsEdit->toPlainText();
}
void CProfilesDialog::deleteProfile(int index)
{
if (index < 0) return;
m_model->removeRow(index);
}
void CProfilesDialog::addProfile()
{
// TODO: browse all folders in AppData/Roaming/Ryzom
}
void CProfilesDialog::onExecutableBrowseClicked()
{
if (m_currentProfileIndex < 0) return;
CProfile &profile = m_model->getProfiles()[m_currentProfileIndex];
QString file = QFileDialog::getOpenFileName(this, tr("Please choose Ryzom client executable to launch"), profile.executable, tr("Executables (*.exe)"));
if (file.isEmpty()) return;
profile.executable = file;
executablePathLabel->setText(QFileInfo(profile.executable).fileName());
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start(profile.executable, QStringList() << "--version", QIODevice::ReadWrite);
if (!process.waitForStarted()) return;
QByteArray data;
while (process.waitForReadyRead()) data.append(process.readAll());
QString versionString = QString::fromUtf8(data);
QRegExp reg("([A-Za-z0-1_.]+) ((DEV|FV) ([0-9.]+))");
if (reg.indexIn(versionString) > -1)
{
executableVersionLabel->setText(reg.cap(2));
}
// ryzom_client_dev_d.exe DEV 0.12.0.7331 (built on 2016-02-25 22:16:50)
// Copyright (C) 2004-2016 Winchgate and The Ryzom Core Community
}