// 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 }