diff -r f5b526a3423a -r 07578e081ae8 src-config/configwindow.cpp --- a/src-config/configwindow.cpp Sat Jun 06 23:06:14 2015 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,303 +0,0 @@ -/* - * ZCinema: Zandronum demo launcher - * Copyright (C) 2013-2015 Teemu Piippo - * - * 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, 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 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 . - */ - -#include -#include -#include "addversionprompt.h" -#include "config.h" -#include "configwindow.h" -#include "version.h" -#include "ui_configbox.h" - -// -// ----------------------------------------------------------------------------- -// - -bool confirm (const QString& text) -{ - return QMessageBox::question (NULL, QObject::tr ("Confirm"), text, - QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::No; -} - -// -// ------------------------------------------------------------------------------------------------- -// - -ConfigWindow::ConfigWindow (QWidget* parent, Qt::WindowFlags f) : - QDialog (parent, f), - ui (*new Ui_ConfigBox) -{ - ui.setupUi (this); - - QStringList wadpaths = Config::get ("wadpaths").toStringList(); - QList versions = Config::get ("versions").toList(); - - for (int i = 0; i < wadpaths.size(); ++i) - addWadPath (wadpaths[i]); - - ui.noDemoPrompt->setChecked (Config::get ("noprompt").toBool()); - - for (int i = 0; i < versions.size(); ++i) - { - if (not versions[i].canConvert()) - continue; - - addVersion (versions[i].value()); - } - - connect (ui.wad_add, SIGNAL (clicked()), this, SLOT (addWadPath())); - connect (ui.wad_pathEntry, SIGNAL (returnPressed()), this, SLOT (addWadPath())); - connect (ui.wad_findPath, SIGNAL (clicked()), this, SLOT (findWadPath())); - connect (ui.wad_del, SIGNAL (clicked()), this, SLOT (removeCurrentWadPath())); - connect (ui.buttonBox, SIGNAL (clicked (QAbstractButton*)), this, - SLOT (buttonPressed (QAbstractButton*))); - connect (ui.addExePath, SIGNAL (clicked()), this, SLOT (newVersion())); - connect (ui.editExePath, SIGNAL (clicked()), this, SLOT (editExePressed())); - connect (ui.removeExePath, SIGNAL (clicked()), this, SLOT (removeCurrentVersion())); - connect (ui.clearExePaths, SIGNAL (clicked()), this, SLOT (clearExePathsClicked())); - setWindowTitle (versionSignature()); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -ConfigWindow::~ConfigWindow() -{ - delete &ui; - - for (int i = 0; i < m_versionEntries.size(); ++i) - delete m_versionEntries[i]; -} - -// -// ------------------------------------------------------------------------------------------------- -// - -VersionGuiEntry* ConfigWindow::addVersion (const ZandronumVersion& version) -{ - QTableWidgetItem* labelItem = new QTableWidgetItem (version.name); - QTableWidgetItem* pathItem = new QTableWidgetItem (version.binaryPath); - int rownum = ui.exePaths->rowCount(); - ui.exePaths->setSortingEnabled (false); - ui.exePaths->insertRow (rownum); - ui.exePaths->setItem (rownum, LabelColumn, labelItem); - ui.exePaths->setItem (rownum, PathColumn, pathItem); - ui.exePaths->setSortingEnabled (true); - - VersionGuiEntry* entry = new VersionGuiEntry; - entry->isRelease = version.isRelease; - entry->name = version.name; - entry->labelItem = labelItem; - entry->pathItem = pathItem; - m_versionEntries.append (entry); - m_versionEntryMap[pathItem] = entry; - return entry; -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::removeVersion (VersionGuiEntry* entry) -{ - for (int i = 0; i < m_versionEntries.size(); ++i) - { - if (m_versionEntries[i] == entry) - { - m_versionEntries.removeAt (i); - break; - } - } - - m_versionEntryMap.remove (entry->pathItem); - ui.exePaths->removeRow (entry->pathItem->row()); - delete entry; -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::removeCurrentVersion() -{ - VersionGuiEntry* entry = currentVersionEntry(); - - if (entry) - removeVersion (entry); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::newVersion() -{ - VersionGuiEntry* entry = addVersion (ZandronumVersion()); - AddVersionPrompt* prompt = new AddVersionPrompt (entry, this); - - if (not prompt->exec()) - removeVersion (entry); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::editExePressed() -{ - VersionGuiEntry* entry = currentVersionEntry(); - (new AddVersionPrompt (entry, this))->exec(); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::clearExePathsClicked() -{ - if (confirm ("Are you sure you want to clear all Zandronum versions?")) - { - ui.exePaths->clearContents(); - ui.exePaths->setRowCount (0); - - for (int i = 0; i < m_versionEntries.size(); ++i) - delete m_versionEntries[i]; - - m_versionEntries.clear(); - m_versionEntryMap.clear(); - } -} - -// -// ------------------------------------------------------------------------------------------------- -// - -ZandronumVersion VersionGuiEntry::toNonGuiVersion() const -{ - return ZandronumVersion (name, isRelease, pathItem->text()); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -VersionGuiEntry* ConfigWindow::currentVersionEntry() -{ - int row = ui.exePaths->currentRow(); - - if (row != -1) - { - VersionEntryMap::iterator it = m_versionEntryMap.find (ui.exePaths->item (row, PathColumn)); - - if (it != m_versionEntryMap.end()) - return it.value(); - } - - return NULL; -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::saveSettings() -{ - QList wadPathList; - QList versions; - - for (int i = 0; i < ui.wad_pathsList->count(); ++i) - wadPathList.append (ui.wad_pathsList->item (i)->text()); - - for (int i = 0; i < m_versionEntries.size(); ++i) - { - QVariant var; - var.setValue (m_versionEntries[i]->toNonGuiVersion()); - versions.append (var); - } - - Config::set ("wadpaths", wadPathList); - Config::set ("noprompt", ui.noDemoPrompt->isChecked()); - Config::set ("versions", versions); - Config::sync(); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::addWadPath() -{ - addWadPath (ui.wad_pathEntry->text()); - ui.wad_pathEntry->clear(); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::addWadPath (QString path) -{ - ui.wad_pathsList->addItem (path); - QListWidgetItem* item = ui.wad_pathsList->item (ui.wad_pathsList->count() - 1); - item->setFlags (item->flags() | Qt::ItemIsEditable); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::findWadPath() -{ - QString path = QFileDialog::getExistingDirectory (this); - - if (path.isEmpty()) - return; - - ui.wad_pathEntry->setText (path); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::removeCurrentWadPath() -{ - delete ui.wad_pathsList->currentItem(); -} - -// -// ------------------------------------------------------------------------------------------------- -// - -void ConfigWindow::buttonPressed (QAbstractButton* btn) -{ - if (btn == ui.buttonBox->button (QDialogButtonBox::Ok)) - { - saveSettings(); - accept(); - } - else if (btn == ui.buttonBox->button (QDialogButtonBox::Cancel)) - { - reject(); - } - else if (btn == ui.buttonBox->button (QDialogButtonBox::Apply)) - { - saveSettings(); - } -} \ No newline at end of file