From 91fa1471464714af22d93b409eed9c35b06023ff Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 01:31:42 +0200 Subject: [PATCH 001/111] Modified CMake to include the launcher directory --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49a4b9eccc..5a18751aad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -294,10 +294,10 @@ if (WIN32) configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.win32 "${OpenMW_BINARY_DIR}/plugins.cfg" COPYONLY) endif (WIN32) -if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") +if (LINUX) configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.linux "${OpenMW_BINARY_DIR}/plugins.cfg") -endif() +endif (LINUX) if (APPLE) configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.mac "${OpenMW_BINARY_DIR}/plugins.cfg") @@ -394,6 +394,8 @@ if (BUILD_ESMTOOL) add_subdirectory( apps/esmtool ) endif() +add_subdirectory( apps/launcher ) + if (WIN32) if (MSVC) if (USE_DEBUG_CONSOLE) From 7a032667299914a9c4f8a10f870daf4fef1eb975 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 01:36:26 +0200 Subject: [PATCH 002/111] Initial commit of the launcher --- apps/launcher/CMakeLists.txt | 53 ++++ apps/launcher/datafilesdialog.cpp | 371 ++++++++++++++++++++++ apps/launcher/datafilesdialog.h | 54 ++++ apps/launcher/datafilesmodel.cpp | 145 +++++++++ apps/launcher/datafilesmodel.h | 38 +++ apps/launcher/launcher.pro | 23 ++ apps/launcher/launcher.rc | 1 + apps/launcher/lineedit.cpp | 46 +++ apps/launcher/lineedit.h | 35 ++ apps/launcher/main.cpp | 13 + apps/launcher/maindialog.cpp | 121 +++++++ apps/launcher/maindialog.h | 25 ++ apps/launcher/resources.qrc | 7 + apps/launcher/resources/clear.png | Bin 0 -> 644 bytes apps/launcher/resources/openmw_header.png | Bin 0 -> 108088 bytes apps/launcher/resources/openmw_icon.ico | Bin 0 -> 61282 bytes apps/launcher/resources/openmw_icon.png | Bin 0 -> 60039 bytes apps/launcher/settingsdialog.cpp | 259 +++++++++++++++ apps/launcher/settingsdialog.h | 46 +++ 19 files changed, 1237 insertions(+) create mode 100644 apps/launcher/CMakeLists.txt create mode 100644 apps/launcher/datafilesdialog.cpp create mode 100644 apps/launcher/datafilesdialog.h create mode 100644 apps/launcher/datafilesmodel.cpp create mode 100644 apps/launcher/datafilesmodel.h create mode 100644 apps/launcher/launcher.pro create mode 100644 apps/launcher/launcher.rc create mode 100644 apps/launcher/lineedit.cpp create mode 100644 apps/launcher/lineedit.h create mode 100644 apps/launcher/main.cpp create mode 100644 apps/launcher/maindialog.cpp create mode 100644 apps/launcher/maindialog.h create mode 100644 apps/launcher/resources.qrc create mode 100644 apps/launcher/resources/clear.png create mode 100644 apps/launcher/resources/openmw_header.png create mode 100644 apps/launcher/resources/openmw_icon.ico create mode 100644 apps/launcher/resources/openmw_icon.png create mode 100644 apps/launcher/settingsdialog.cpp create mode 100644 apps/launcher/settingsdialog.h diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt new file mode 100644 index 0000000000..291103b28c --- /dev/null +++ b/apps/launcher/CMakeLists.txt @@ -0,0 +1,53 @@ +set(LAUNCHER + datafilesdialog.cpp + datafilesmodel.cpp + lineedit.cpp + main.cpp + maindialog.cpp + settingsdialog.cpp + datafilesdialog.h + datafilesmodel.h + lineedit.h + maindialog.h + settingsdialog.h +) + +SET(MOC_HDRS + datafilesdialog.h + lineedit.h + maindialog.h + settingsdialog.h +) + +source_group(apps\\launcher FILES ${ESMTOOL}) + +find_package(Qt4 REQUIRED) +set(QT_USE_QTGUI 1) + +QT4_ADD_RESOURCES(RCC_SRCS resources.qrc) +QT4_WRAP_CPP(MOC_SRCS ${MOC_HDRS}) + +include(${QT_USE_FILE}) + +# Main executable +add_executable(launcher + ${LAUNCHER} + ${MISC} ${MISC_HEADER} + ${TO_UTF8} + ${ESM} + ${RCC_SRCS} + ${MOC_SRCS} +) + +target_link_libraries(launcher + ${Boost_LIBRARIES} + ${OGRE_LIBRARIES} + ${QT_LIBRARIES} +) + + + +#if (APPLE) +# find_library(CARBON_FRAMEWORK Carbon) +# target_link_libraries(openmw ${CARBON_FRAMEWORK}) +#endif (APPLE) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp new file mode 100644 index 0000000000..201e2939c9 --- /dev/null +++ b/apps/launcher/datafilesdialog.cpp @@ -0,0 +1,371 @@ +#include +#include + +#include "datafilesdialog.h" +#include "datafilesmodel.h" + +using namespace ESM; + +//DataFilesDialog::DataFilesDialog(QWidget *parent) +// : QDialog(parent) + +DataFilesDialog::DataFilesDialog() +{ + //QWidget *centralWidget = new QWidget; + + dataFilesModel = new DataFilesModel(); + dataFilesModel->setReadOnly(true); // Prevent changes to files + dataFilesModel->setRootPath("/opt/openmw/data"); + +// sortModel = new QSortFilterProxyModel(); +// sortModel->setSourceModel(dataFilesModel); + + selectionModel = new QItemSelectionModel(dataFilesModel); +// selectionModel = new QItemSelectionModel(sortModel); + + // First, show only plugin files and sort them + QStringList acceptedfiles = (QStringList() << "*.esp"); + dataFilesModel->setNameFilters(acceptedfiles); + dataFilesModel->setNameFilterDisables(false); // Hide all other files + + dataFilesModel->sort(3, Qt::AscendingOrder); // Sort the plugins by date + dataFilesModel->submit(); // Force refresh of the data + + // Now show master files too, to make them appear at the top of the list + acceptedfiles = (QStringList() << "*.esm" << "*.esp"); + dataFilesModel->setNameFilters(acceptedfiles); + dataFilesModel->setFilter(QDir::Files); + + // Column 1 + QVBoxLayout *dialogLayout = new QVBoxLayout(this); + QHBoxLayout *groupsLayout = new QHBoxLayout(); + + QGroupBox *groupFiles = new QGroupBox(tr("Morrowind Files"), this); + groupFiles->setMinimumWidth(450); + QVBoxLayout *groupFilesLayout = new QVBoxLayout(groupFiles); + + QSpacerItem *vSpacer1 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Fixed); + + QHBoxLayout *filterLayout = new QHBoxLayout(); + QLabel *labelFilter = new QLabel(tr("Filter:"), groupFiles); + lineFilter = new LineEdit(groupFiles); + + filterLayout->addWidget(labelFilter); + filterLayout->addWidget(lineFilter); + + // View for the game files + dataFilesView = new QTableView(groupFiles); + + // Put everything in the correct layouts + groupFilesLayout->addLayout(filterLayout); + groupFilesLayout->addItem(vSpacer1); + groupFilesLayout->addWidget(dataFilesView); + groupsLayout->addWidget(groupFiles); + + // Column 2 + QGroupBox *groupInfo = new QGroupBox(tr("File Information"), this); + groupInfo->setFixedWidth(250); + QVBoxLayout *groupInfoLayout = new QVBoxLayout(groupInfo); + + QSpacerItem *vSpacer2 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); + + QLabel *labelAuthor = new QLabel(tr("Author:"), groupInfo); + lineAuthor = new QLineEdit(groupInfo); + lineAuthor->setReadOnly(true); + + QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); + + QLabel *labelDesc = new QLabel(tr("Description:"), groupInfo); + textDesc = new QPlainTextEdit(groupInfo); + textDesc->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + textDesc->setMinimumHeight(180); + textDesc->setReadOnly(true); + + QSpacerItem *vSpacer4 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); + + QLabel *labelDepends = new QLabel(tr("Dependencies:"), groupInfo); + textDepends = new QPlainTextEdit(groupInfo); + textDepends->setFixedHeight(80); + textDepends->setReadOnly(true); + + QHBoxLayout *buttonsLayout = new QHBoxLayout(); + QSpacerItem *horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults); + buttonBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + buttonsLayout->addItem(horizontalSpacer); + buttonsLayout->addWidget(buttonBox); + + // Put everything in the correct layouts + groupInfoLayout->addItem(vSpacer2); + groupInfoLayout->addWidget(labelAuthor); + groupInfoLayout->addWidget(lineAuthor); + groupInfoLayout->addItem(vSpacer3); + groupInfoLayout->addWidget(labelDesc); + groupInfoLayout->addWidget(textDesc); + groupInfoLayout->addItem(vSpacer4); + groupInfoLayout->addWidget(labelDepends); + groupInfoLayout->addWidget(textDepends); + + groupsLayout->addWidget(groupInfo); + + dialogLayout->addLayout(groupsLayout); + dialogLayout->addLayout(buttonsLayout); + + setWindowTitle(tr("Data Files")); + + + // Signals and slots + connect(dataFilesModel, SIGNAL(directoryLoaded(const QString &)), this, SLOT(setupView())); +// connect(dataFilesModel, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), this, SLOT(readConfig())); + + connect(dataFilesView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); + connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(changeData(QModelIndex, QModelIndex))); + + connect(lineFilter, SIGNAL(textChanged(const QString &)), this, SLOT(setFilter())); + + connect(buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(restoreDefaults())); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); + + readConfig(); +} + +void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) +{ + if (!index.isValid()) { + return; + } + + // Added for testing + + textDepends->clear(); // Clear the dependencies of previous file + + ESMReader datafile; + QString path(dataFilesModel->filePath(index)); +// QString path(dataFilesModel->filePath(sortModel->mapToSource(index))); + + datafile.open(path.toStdString()); // Open the selected file + + // Get the author of the selected file and display it + QString author(QString::fromStdString(datafile.getAuthor())); + lineAuthor->setText(author); + + // Get the file desciption + QString desc(QString::fromStdString(datafile.getDesc())); + textDesc->setPlainText(desc); + + // Get a list of master files on which the file depends + ESMReader::MasterList mlist = datafile.getMasters(); + + for (unsigned int i = 0; i < mlist.size(); ++i) // Add each master file + textDepends->appendPlainText(QString::fromStdString(mlist[i].name)); + + /* Get the date of creation + QDateTime dateCreated = dataFilesModel->fileInfo(index).created(); + QString created = dateCreated.toString(QString("dd.MM.yyyy")); + labelDateCreated->setText(created); + + // Get the date last modified + QDateTime dateModified = dataFilesModel->fileInfo(index).lastModified(); + QString modified = dateModified.toString(QString("dd.MM.yyyy")); + labelDateModified->setText(modified);*/ +} + +void DataFilesDialog::setupView() +{ + // The signal directoryLoaded is emitted after all files are in the model + dataFilesView->setModel(dataFilesModel); +// dataFilesView->setModel(sortModel); + + // Set the view to the data directory + dataFilesView->setRootIndex(QModelIndex(dataFilesModel->index("/opt/openmw/data"))); +// dataFilesView->setRootIndex(sortModel->mapFromSource(QModelIndex(dataFilesModel->index("/opt/openmw/data")))); + + dataFilesView->verticalHeader()->hide(); + + //dataFilesView->hideColumn(1); + dataFilesView->hideColumn(3); // Hide Date Modified column + dataFilesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + dataFilesView->verticalHeader()->setDefaultSectionSize(25); //setHeight + + dataFilesView->setSortingEnabled(true); + + dataFilesView->setSelectionBehavior(QAbstractItemView::SelectRows); + dataFilesView->setSelectionModel(selectionModel); + + + dataFilesView->setAlternatingRowColors(true); // Fancy colors! + + dataFilesView->resizeColumnsToContents(); + dataFilesView->horizontalHeader()->setStretchLastSection(true); + + + //sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); + +} + +void DataFilesDialog::readConfig() +{ + qDebug() << "datachanged"; + + // Morrowind.ini settings + QSettings settings("Morrowind.ini", + QSettings::IniFormat); + settings.beginGroup("Game Files"); + + const QStringList childKeys = settings.childKeys(); + + // See if the files from the config file actually exist + foreach (const QString &childKey, childKeys) { + // Create full path to current file found in config + QString path = "/opt/openmw/data/"; // Note: get path from config + path.append(settings.value(childKey).toString()); + + QModelIndex index = dataFilesModel->index(path, 0); +// QModelIndex index = sortModel->mapFromSource(dataFilesModel->index(path, 0)); +// QModelIndex index = sortModel->mapFromSource(dataFilesModel->index(path)); + + if (index.isValid()) { + // File is found in model, set it to checked + qDebug() << "File is found in model, set it to checked"; + // dataFilesModel->setData(sortModel->mapToSource(index), Qt::Checked, Qt::CheckStateRole); + dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); +// dataFilesModel->checkedItems.insert(QPersistentModelIndex(sortModel->mapToSource(index))); + // dataFilesModel->checkedItems.insert(index); + + //qDebug() << index; + } else { + // File is not found in the model + qDebug() << "file not found!"; + } + } + settings.endGroup(); +} + +void DataFilesDialog::writeConfig() +{ +/* // Custom write method: We cannot use QSettings because it does not accept spaces + +// QList checkedItems = dataFilesModel->getCheckedItems().toList(); + QList checkedItems = dataFilesModel->getCheckedItems(); + + qSort(checkedItems); // Sort the indexes so that master files end up on top + + QString keyName; + QString fileName; + + QFile file("Morrowind.ini"); // Specify filepath later + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + close(); // File cannot be opened or created + + //QTextStream in(&file); + QTextStream in(&file); + + //QString buffer; + QByteArray buffer; + + while (!in.atEnd()) { + QString line = in.readLine(); + if (!line.contains("GameFile") && line != "[Game Files]") { + buffer += line + "\n"; + } + } + + file.close(); + + if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) + close(); + + QTextStream out(&file); + file.write(buffer); + + out << "[Game Files]\n"; + + // Write the list of game files to the config + for (int i = 0; i < checkedItems.size(); ++i) { + fileName = dataFilesModel->fileName(checkedItems.at(i)); + + keyName.setNum(i); + keyName.prepend("GameFile"); + + out << keyName << "=" << fileName << "\n"; + } + + file.close();*/ + close(); // Exit dialog +} + +void DataFilesDialog::restoreDefaults() +{ + // Uncheck all checked items + dataFilesModel->checkedItems.clear(); + + QModelIndexList indexlist; // Make a list of default master files + indexlist.append(dataFilesModel->index("/opt/openmw/data/Morrowind.esm", 0)); + indexlist.append(dataFilesModel->index("/opt/openmw/data/Tribunal.esm", 0)); + indexlist.append(dataFilesModel->index("/opt/openmw/data/Bloodmoon.esm", 0)); + + foreach (const QModelIndex &index, indexlist) { + if (index.isValid()) { + // Master file found, check it + dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); + } + } + dataFilesModel->submit(); // Force refresh of view +} + +void DataFilesDialog::setCheckstate(QModelIndex index) +{ + // No check if index is valid: doubleclicked() always returns + // a valid index when emitted + + //index = QModelIndex(sortModel->mapToSource(index)); // Get a valid index + index = index.sibling(index.row(), 0); // reset index to first column + // because that's where te checkbox is; makes it possible to doubleclick whole row + + if (!index.isValid()) + return; + + if (dataFilesModel->data(index, Qt::CheckStateRole) == Qt::Checked) { + // Selected row is checked, uncheck it + dataFilesModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); + } else { + dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); + } +} + +void DataFilesDialog::setFilter() +{ + QStringList filefilter = (QStringList() << "*.esm" << "*.esp"); + QStringList currentfilefilter; + + QString esmfilter = lineFilter->text(); + QString espfilter = lineFilter->text(); + + if (lineFilter->text().isEmpty()) { + dataFilesModel->setNameFilters(filefilter); + // sortModel->setFilterRegExp(QRegExp("*.esp", Qt::CaseInsensitive, + // QRegExp::FixedString)); + // sortModel->setFilterKeyColumn(0); + return; + } + + esmfilter.prepend("*"); + esmfilter.append("*.esm"); + espfilter.prepend("*"); + espfilter.append("*.esp"); + + currentfilefilter << esmfilter << espfilter; +// sortModel->setFilterRegExp(QRegExp(espfilter, Qt::CaseInsensitive, + // QRegExp::FixedString)); + // sortModel->setFilterKeyColumn(0); + dataFilesModel->setNameFilters(currentfilefilter); + +// readConfig(); +// dataFilesModel->submit(); +// dataFilesModel->setData(); + +} diff --git a/apps/launcher/datafilesdialog.h b/apps/launcher/datafilesdialog.h new file mode 100644 index 0000000000..884de52191 --- /dev/null +++ b/apps/launcher/datafilesdialog.h @@ -0,0 +1,54 @@ +#ifndef DATAFILESDIALOG_H +#define DATAFILESDIALOG_H + +#include +#include +#include +#include + +#include "lineedit.h" + +class DataFilesModel; +class QStringList; +class QTableView; +class QLineEdit; +class QPlainTextEdit; +class QItemSelectionModel; +class QSortFilterProxyModel; + +class DataFilesDialog : public QDialog +{ + Q_OBJECT + +public: + DataFilesDialog(); +// ~DataFilesDialog() { }; + +private: + DataFilesModel *dataFilesModel; + + QTableView *dataFilesView; + QItemSelectionModel *selectionModel; + QSortFilterProxyModel *sortModel; + + QLineEdit *lineAuthor; + LineEdit *lineFilter; + QPlainTextEdit *textDesc; + QPlainTextEdit *textDepends; + + +public slots: + + void changeData(QModelIndex top, QModelIndex bottom); // edit + void restoreDefaults(); + void readConfig(); + void writeConfig(); + void setupView(); + + void setFilter(); + void setCheckstate(QModelIndex index); +// void doubleClicked(QModelIndex index); + +}; + +#endif diff --git a/apps/launcher/datafilesmodel.cpp b/apps/launcher/datafilesmodel.cpp new file mode 100644 index 0000000000..99b924d67a --- /dev/null +++ b/apps/launcher/datafilesmodel.cpp @@ -0,0 +1,145 @@ +#include "datafilesmodel.h" + +DataFilesModel::DataFilesModel(QObject *parent) + : QFileSystemModel(parent) +{ +} + +QVariant DataFilesModel::data(const QModelIndex &index, int role) const +{ + if (index.isValid() && role == Qt::DecorationRole) { + if (index.column() == 2) { + QFileIconProvider fip; + QIcon fileIcon = fip.icon(fileInfo(index)); + return fileIcon; + } + else { + return QIcon(); + } + + } + + if (index.isValid() && role == Qt::DisplayRole) { + if (index.column() == 2) { + //qDebug() << index.data(Qt::DisplayRole); + if (fileInfo(index).suffix().toLower() == "esp") { + return QString("Plugin File"); + } + else if (fileInfo(index).suffix().toLower() == "esm") { + return QString("Master File"); + + } + } + } + + if (index.isValid() && role == Qt::CheckStateRole && index.column() == 0) { + // Put a checkbox in the first column + if (index.isValid()) + + if (checkedItems.contains(filePath(index))) { +// if (checkedItems.contains(index)) { + return Qt::Checked; + } + else { + return Qt::Unchecked; + } + } + return QFileSystemModel::data(index, role); +} + +bool DataFilesModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + + if (index.isValid() && role == Qt::CheckStateRole && index.column() == 0) { +// QPersistentModelIndex pindex(index); + + // qDebug() << pindex; + + if (value == Qt::Checked) { + //checkedItems.insert(pindex); + checkedItems.append(filePath(index)); + } else { +// checkedItems.remove(pindex); + checkedItems.removeAll(filePath(index)); + } + + emit dataChanged(index, index); + return true; + } + + return QFileSystemModel::setData(index, value, role); +} + + + +Qt::ItemFlags DataFilesModel::flags(const QModelIndex &index) const +{ + return QFileSystemModel::flags(index) | Qt::ItemIsUserCheckable; +} + + + +/*QVariant DataFilesModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + switch (role) { + case Qt::DecorationRole: + if (section == 0) { + // ### TODO oh man this is ugly and doesn't even work all the way! + // it is still 2 pixels off + QImage pixmap(16, 1, QImage::Format_Mono); + pixmap.fill(0); + pixmap.setAlphaChannel(pixmap.createAlphaMask()); + return pixmap; + } + break; + case Qt::TextAlignmentRole: + return Qt::AlignLeft; + } + + if (orientation != Qt::Horizontal || role != Qt::DisplayRole) + return QAbstractItemModel::headerData(section, orientation, role); + + QString returnValue; + switch (section) { + case 0: returnValue = tr("TES3 File"); + break; + case 1: returnValue = tr("Size"); + break; + case 2: returnValue = tr("Status"); + break; + case 3: returnValue = tr("Date Modified"); + break; + default: return QVariant(); + } + return returnValue; +} +*/ + +/*test +void DataFilesModel::setCheckedItems(const QStringList &gameFiles) +{ + qDebug() << "test"; + qDebug() << gameFiles.join("lol"); + + +}*/ + +/*void DataFilesModel::unCheckAll() +{ + checkedItems.clear(); +// data(); + emit dataChanged(QModelIndex(), QModelIndex()); + submit(); +}*/ + +const QStringList DataFilesModel::getCheckedItems() +//const QList DataFilesModel::getCheckedItems() +//const QSet DataFilesModel::getCheckedItems() +{ + return checkedItems; +} + +/*void DataFilesModel::sort(int column, Qt::SortOrder order) +{ + qDebug() << "Sort!"; +}*/ diff --git a/apps/launcher/datafilesmodel.h b/apps/launcher/datafilesmodel.h new file mode 100644 index 0000000000..0e376865b7 --- /dev/null +++ b/apps/launcher/datafilesmodel.h @@ -0,0 +1,38 @@ +#ifndef DATAFILESMODEL_H +#define DATAFILESMODEL_H + +#include +#include + +#include + +class DataFilesModel : public QFileSystemModel +{ +public: + DataFilesModel(QObject *parent = 0); + ~DataFilesModel() {}; + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + +// void sort(int column, Qt::SortOrder order); + //test +// void setCheckedItems(const QStringList& files); +// void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); +// void unCheckAll(); + +// const QSet getCheckedItems(); +// const QList getCheckedItems(); + const QStringList getCheckedItems(); + +// QVariant headerData(int section, Qt::Orientation orientation, int role) const; + +// QSet checkedItems; +// QList checkedItems; + QStringList checkedItems; +}; + +#endif diff --git a/apps/launcher/launcher.pro b/apps/launcher/launcher.pro new file mode 100644 index 0000000000..ac17e019ef --- /dev/null +++ b/apps/launcher/launcher.pro @@ -0,0 +1,23 @@ +###################################################################### +# Automatically generated by qmake (2.01a) Sun Mar 27 19:33:07 2011 +###################################################################### + +TEMPLATE = app +TARGET = +DEPENDPATH += . +INCLUDEPATH += . + +# Input +HEADERS += datafilesdialog.h \ + datafilesmodel.h \ + lineedit.h \ + maindialog.h \ + settingsdialog.h +SOURCES += datafilesdialog.cpp \ + datafilesmodel.cpp \ + lineedit.cpp \ + main.cpp \ + maindialog.cpp \ + settingsdialog.cpp +RESOURCES += resources.qrc +RC_FILE = launcher.rc \ No newline at end of file diff --git a/apps/launcher/launcher.rc b/apps/launcher/launcher.rc new file mode 100644 index 0000000000..3d22c74fc9 --- /dev/null +++ b/apps/launcher/launcher.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "resources/openmw_icon.ico" diff --git a/apps/launcher/lineedit.cpp b/apps/launcher/lineedit.cpp new file mode 100644 index 0000000000..7cd7f4d1da --- /dev/null +++ b/apps/launcher/lineedit.cpp @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (c) 2007 Trolltech ASA +** +** Use, modification and distribution is allowed without limitation, +** warranty, liability or support of any kind. +** +****************************************************************************/ + +#include "lineedit.h" +#include +#include + +LineEdit::LineEdit(QWidget *parent) + : QLineEdit(parent) +{ + clearButton = new QToolButton(this); + QPixmap pixmap(":resources/clear.png"); + clearButton->setIcon(QIcon(pixmap)); + clearButton->setIconSize(pixmap.size()); + clearButton->setCursor(Qt::ArrowCursor); + clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); + clearButton->hide(); + connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); + connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&))); + int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + setStyleSheet(QString("QLineEdit { padding-right: %1px; } ").arg(clearButton->sizeHint().width() + frameWidth + 1)); + QSize msz = minimumSizeHint(); + setMinimumSize(qMax(msz.width(), clearButton->sizeHint().height() + frameWidth * 2 + 2), + qMax(msz.height(), clearButton->sizeHint().height() + frameWidth * 2 + 2)); +} + +void LineEdit::resizeEvent(QResizeEvent *) +{ + QSize sz = clearButton->sizeHint(); + int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + clearButton->move(rect().right() - frameWidth - sz.width(), + (rect().bottom() + 1 - sz.height())/2); +} + +void LineEdit::updateCloseButton(const QString& text) +{ + clearButton->setVisible(!text.isEmpty()); +} + + diff --git a/apps/launcher/lineedit.h b/apps/launcher/lineedit.h new file mode 100644 index 0000000000..7a96a523c8 --- /dev/null +++ b/apps/launcher/lineedit.h @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (c) 2007 Trolltech ASA +** +** Use, modification and distribution is allowed without limitation, +** warranty, liability or support of any kind. +** +****************************************************************************/ + +#ifndef LINEEDIT_H +#define LINEEDIT_H + +#include + +class QToolButton; + +class LineEdit : public QLineEdit +{ + Q_OBJECT + +public: + LineEdit(QWidget *parent = 0); + +protected: + void resizeEvent(QResizeEvent *); + +private slots: + void updateCloseButton(const QString &text); + +private: + QToolButton *clearButton; +}; + +#endif // LIENEDIT_H + diff --git a/apps/launcher/main.cpp b/apps/launcher/main.cpp new file mode 100644 index 0000000000..77c01148a8 --- /dev/null +++ b/apps/launcher/main.cpp @@ -0,0 +1,13 @@ +#include + +#include "maindialog.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MainDialog dialog; + return dialog.exec(); + +} + diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp new file mode 100644 index 0000000000..8ff37dda45 --- /dev/null +++ b/apps/launcher/maindialog.cpp @@ -0,0 +1,121 @@ +#include + +#include "maindialog.h" +#include "datafilesdialog.h" +#include "settingsdialog.h" + +MainDialog::MainDialog() +{ + + QLabel *header = new QLabel(this); + header->setMinimumSize(QSize(400, 150)); + header->setPixmap(QPixmap(":resources/openmw_header.png")); + + // Buttons + QPushButton *buttonStart = new QPushButton(this); + buttonStart->setMinimumSize(QSize(200, 40)); + buttonStart->setText(tr("Start OpenMW")); + + QPushButton *buttonDataFiles = new QPushButton(this); + buttonDataFiles->setMinimumSize(QSize(200, 40)); + buttonDataFiles->setText(tr("Data Files")); + + QPushButton *buttonSettings = new QPushButton(this); + buttonSettings->setText(tr("Settings")); + buttonSettings->setIcon(QIcon::fromTheme("preferences-other")); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(this); + buttonBox->setStandardButtons(QDialogButtonBox::Close); + buttonBox->addButton(buttonSettings, QDialogButtonBox::ActionRole); + + QVBoxLayout *dialogLayout = new QVBoxLayout(this); + QVBoxLayout *buttonsLayout = new QVBoxLayout(); + QHBoxLayout *bodyLayout = new QHBoxLayout(); + QHBoxLayout *dialogButtonsLayout = new QHBoxLayout(); + + QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + QSpacerItem *hSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + QSpacerItem *hSpacer3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + QSpacerItem *vSpacer1 = new QSpacerItem(40, 150, QSizePolicy::Minimum, QSizePolicy::Fixed); + QSpacerItem *vSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + buttonsLayout->addItem(vSpacer1); + buttonsLayout->addWidget(buttonStart); + buttonsLayout->addWidget(buttonDataFiles); + buttonsLayout->addItem(vSpacer2); + + bodyLayout->addItem(hSpacer1); + bodyLayout->addLayout(buttonsLayout); + bodyLayout->addItem(hSpacer2); + + dialogButtonsLayout->addItem(hSpacer3); + dialogButtonsLayout->addWidget(buttonBox); + + dialogLayout->addLayout(bodyLayout); + dialogLayout->addLayout(dialogButtonsLayout); + + setMinimumSize(QSize(400, 310)); + setMaximumSize(QSize(400, 310)); + + setWindowTitle(tr("OpenMW Launcher")); + QPixmap pixmap(":resources/openmw_icon.png"); + setWindowIcon(QIcon(pixmap)); + + // Signals and slots + connect(buttonStart, SIGNAL(clicked()), this, SLOT(start())); + connect(buttonDataFiles, SIGNAL(clicked()), this, SLOT(showDataFiles())); + connect(buttonSettings, SIGNAL(clicked()), this, SLOT(showSettings())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); + + openmw = new QProcess(NULL); + +} + +void MainDialog::start() +{ + // Start the game! + openmw->start("./openmw"); + connect(openmw, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(finished(int, QProcess::ExitStatus))); +} + +void MainDialog::finished(int exitCode, QProcess::ExitStatus exitStatus) +{ + QString debuginfo = openmw->readAllStandardOutput(); + + if (exitCode == 0 && exitStatus == QProcess::NormalExit) { + // Close the launcher if the game is quitted + close(); + } + + if (exitCode != 0) { + // An error occured whilst starting OpenMW + + // First check if readAllStandardOutput is empty + // Finished gets signaled twice sometimes + + if (!debuginfo.isEmpty()) + { + QMessageBox msgBox; + msgBox.setWindowTitle("Error"); + msgBox.setIcon(QMessageBox::Warning); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("\nAn error occured while starting OpenMW.")); + msgBox.setDetailedText(debuginfo); + msgBox.exec(); + } + + } +} + +void MainDialog::showDataFiles() +{ + DataFilesDialog dialog; + dialog.exec(); +} + +void MainDialog::showSettings() +{ + SettingsDialog dialog; + dialog.exec(); +} diff --git a/apps/launcher/maindialog.h b/apps/launcher/maindialog.h new file mode 100644 index 0000000000..db69111153 --- /dev/null +++ b/apps/launcher/maindialog.h @@ -0,0 +1,25 @@ +#ifndef MAINDIALOG_H +#define MAINDIALOG_H + +#include +#include + +class MainDialog : public QDialog +{ + Q_OBJECT + +public: + MainDialog(); + + QProcess *openmw; + +public slots: + + void start(); + void showDataFiles(); + void showSettings(); + void finished(int, QProcess::ExitStatus exitStatus); + +}; + +#endif diff --git a/apps/launcher/resources.qrc b/apps/launcher/resources.qrc new file mode 100644 index 0000000000..1116523573 --- /dev/null +++ b/apps/launcher/resources.qrc @@ -0,0 +1,7 @@ + + + resources/clear.png + resources/openmw_header.png + resources/openmw_icon.png + + diff --git a/apps/launcher/resources/clear.png b/apps/launcher/resources/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4b83b7ac6e451f461973dac0c9a6c53dedef25 GIT binary patch literal 644 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

Ty_~sA~&{^k>%aw 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

Y^b_|~sG||`!B{8+*chQG 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%0D-18+=;LewB8Rmp5Ez+0MD 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 Uyj>3YKL7v#07*qoM6N<$f&jA$5dZ)H literal 0 HcmV?d00001 diff --git a/apps/launcher/resources/openmw_icon.ico b/apps/launcher/resources/openmw_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04fc3d9ce2b93ddce6188ad5f6944ee042b0be9 GIT binary patch literal 61282 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 p@Ja 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 literal 0 HcmV?d00001 diff --git a/apps/launcher/settingsdialog.cpp b/apps/launcher/settingsdialog.cpp new file mode 100644 index 0000000000..100254ce65 --- /dev/null +++ b/apps/launcher/settingsdialog.cpp @@ -0,0 +1,259 @@ +#include + +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog() +{ + QTabWidget *tabWidget = new QTabWidget(this); + QWidget *graphicsTab = new QWidget(); + + // Render group + QGroupBox *groupRender = new QGroupBox(tr("Renderer"), graphicsTab); + groupRender->setMinimumWidth(450); + + QVBoxLayout *groupRenderLayout = new QVBoxLayout(groupRender); + QVBoxLayout *dialogLayout = new QVBoxLayout(this); + QVBoxLayout *pageLayout = new QVBoxLayout(graphicsTab); + + QGridLayout *renderLayout = new QGridLayout(); + + QLabel *labelRender = new QLabel(tr("Rendering Subsystem:"), groupRender); + comboRender = new QComboBox(groupRender); + + QLabel *labelRTT = new QLabel(tr("Preferred RTT Mode:"), groupRender); + comboRTT = new QComboBox(groupRender); + + QLabel *labelAA = new QLabel(tr("Antialiasing:"), groupRender); + comboAA = new QComboBox(groupRender); + + renderLayout->addWidget(labelRender, 0, 0, 1, 1); + renderLayout->addWidget(comboRender, 0, 1, 1, 1); + + QSpacerItem *vSpacer1 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); + renderLayout->addItem(vSpacer1, 1, 1, 1, 1); + + renderLayout->addWidget(labelRTT, 2, 0, 1, 1); + renderLayout->addWidget(comboRTT, 2, 1, 1, 1); + renderLayout->addWidget(labelAA, 3, 0, 1, 1); + renderLayout->addWidget(comboAA, 3, 1, 1, 1); + + QSpacerItem *vSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + + groupRenderLayout->addLayout(renderLayout); + groupRenderLayout->addItem(vSpacer2); + + pageLayout->addWidget(groupRender); + + // Display group + QGroupBox *groupDisplay = new QGroupBox(tr("Display"), graphicsTab); + QVBoxLayout *groupDisplayLayout = new QVBoxLayout(groupDisplay); + + QGridLayout *displayLayout = new QGridLayout(); + + QLabel *labelResolution = new QLabel(tr("Resolution:"), groupDisplay); + comboResolution = new QComboBox(groupDisplay); + + QLabel *labelFrequency = new QLabel(tr("Display Frequency:"), groupDisplay); + comboFrequency = new QComboBox(groupDisplay); + + checkVSync = new QCheckBox(tr("Vertical Sync"), groupDisplay); + checkGamma = new QCheckBox(tr("sRGB Gamma Conversion"), groupDisplay); + checkFullScreen = new QCheckBox(tr("Full Screen"), groupDisplay); + + displayLayout->addWidget(labelResolution, 0, 0, 1, 1); + displayLayout->addWidget(comboResolution, 0, 1, 1, 1); + displayLayout->addWidget(labelFrequency, 1, 0, 1, 1); + displayLayout->addWidget(comboFrequency, 1, 1, 1, 1); + + QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); + displayLayout->addItem(vSpacer3, 2, 1, 1, 1); + + displayLayout->addWidget(checkVSync, 3, 0, 1, 1); + displayLayout->addWidget(checkGamma, 3, 1, 1, 1); + displayLayout->addWidget(checkFullScreen, 6, 0, 1, 1); + + QSpacerItem *vSpacer4 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + + groupDisplayLayout->addLayout(displayLayout); + groupDisplayLayout->addItem(vSpacer4); + + pageLayout->addWidget(groupDisplay); + + + tabWidget->addTab(graphicsTab, QString(tr("Graphics"))); + tabWidget->setCurrentIndex(0); + + dialogLayout->addWidget(tabWidget); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(this); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + + dialogLayout->addWidget(buttonBox); + + setWindowTitle(tr("Settings")); + setWindowIcon(QIcon::fromTheme("preferences-other")); + + // Ogre Settings + // TODO: Find out a way to do this nice and platform-independent + QString filepath = QDir::homePath(); + filepath.append("/.config/openmw/ogre.cfg"); + + ogreConfig = new QSettings(filepath, QSettings::IniFormat); + + // Signals and slots + connect(comboRender, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(rendererChanged(const QString&))); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); + + // Ogre stuff + root = new Ogre::Root("plugins.cfg"); + + // Get the available renderers and put them in the combobox + const Ogre::RenderSystemList &renderers = root->getAvailableRenderers(); + + for (Ogre::RenderSystemList::const_iterator r = renderers.begin(); r != renderers.end(); ++r) { + comboRender->addItem((*r)->getName().c_str()); + } + + int index = comboRender->findText(getConfigValue("Render System")); + + if ( index != -1) { + comboRender->setCurrentIndex(index); + } + +} + +QStringList SettingsDialog::getAvailableOptions(const QString& key) +{ + QStringList result; + + uint row = 0; + Ogre::ConfigOptionMap options = mSelectedRenderSystem->getConfigOptions(); + + for (Ogre::ConfigOptionMap::iterator i = options.begin (); i != options.end (); i++, row++) + { + Ogre::StringVector::iterator opt_it; + uint idx = 0; + for (opt_it = i->second.possibleValues.begin (); + opt_it != i->second.possibleValues.end (); opt_it++, idx++) + { + + if (strcmp (key.toStdString().c_str(), i->first.c_str()) == 0) + result << (*opt_it).c_str(); + } + + } + + return result; +} + +void SettingsDialog::rendererChanged(const QString& renderer) +{ + // Set the render system to the selected one + mSelectedRenderSystem = root->getRenderSystemByName(renderer.toStdString().c_str()); + + comboRTT->addItems(getAvailableOptions("RTT Preferred Mode")); + comboAA->addItems(getAvailableOptions("FSAA")); + comboResolution->addItems(getAvailableOptions("Video Mode")); + comboFrequency->addItems(getAvailableOptions("Display Frequency")); + + // Get the value for the option the config file, find if it's in the combobox. + // If it's found, set the current index to that value, otherwise: ignore. + + int index = comboRTT->findText(getConfigValue("RTT Preferred Mode")); + if ( index != -1) + comboRTT->setCurrentIndex(index); + + index = comboAA->findText(getConfigValue("FSAA")); + if ( index != -1) + comboAA->setCurrentIndex(index); + + index = comboResolution->findText(getConfigValue("Video Mode")); + if ( index != -1) + comboResolution->setCurrentIndex(index); + + index = comboFrequency->findText(getConfigValue("Display Frequency")); + if ( index != -1) + comboFrequency->setCurrentIndex(index); + + // Now we do the same for the checkboxes + if (QString::compare(getConfigValue("VSync"), QString("Yes")) == 0) { + checkVSync->setCheckState(Qt::Checked); + } + + if (QString::compare(getConfigValue("sRGB Gamma Conversion"), QString("Yes")) == 0) { + checkGamma->setCheckState(Qt::Checked); + } + + if (QString::compare(getConfigValue("Full Screen"), QString("Yes")) == 0) { + checkFullScreen->setCheckState(Qt::Checked); + } + +} + +QString SettingsDialog::getConfigValue(const QString& key) +{ + QString result; + + ogreConfig->beginGroup(mSelectedRenderSystem->getName().c_str()); + result = ogreConfig->value(key).toString(); + ogreConfig->endGroup(); + + return result; +} + +void SettingsDialog::writeConfig() +{ + // Get the values from the GUI elements and write them to the config file + + // Custom write method: We cannot use QSettings because it does not accept spaces + + QString keyName; + QString fileName; + + QFile file(ogreConfig->fileName()); + + if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) + // File could not be opened, TODO error + close(); + + QTextStream out(&file); + + out << "Render System=" << mSelectedRenderSystem->getName().c_str() << endl << endl; + + // add brackets to the renderer's name + QString renderer = mSelectedRenderSystem->getName().c_str(); + renderer.prepend("["); + renderer.append("]"); + out << renderer << endl; + + out << "Display Frequency=" << comboFrequency->currentText() << endl; + out << "FSAA=" << comboAA->currentText() << endl; + + if (checkFullScreen->checkState() == Qt::Checked) { + out << "Full Screen=Yes" << endl; + } else { + out << "Full Screen=No" << endl; + } + + out << "RTT Preferred Mode=" << comboRTT->currentText() << endl; + + if (checkVSync->checkState() == Qt::Checked) { + out << "VSync=Yes" << endl; + } else { + out << "VSync=No" << endl; + } + + out << "Video Mode=" << comboResolution->currentText() << endl; + + if (checkGamma->checkState() == Qt::Checked) { + out << "sRGB Gamma Conversion=Yes" << endl; + } else { + out << "sRGB Gamma Conversion=No" << endl; + } + + file.close(); + + close(); // Exit dialog +} + diff --git a/apps/launcher/settingsdialog.h b/apps/launcher/settingsdialog.h new file mode 100644 index 0000000000..964f2736b0 --- /dev/null +++ b/apps/launcher/settingsdialog.h @@ -0,0 +1,46 @@ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +class SettingsDialog : public QDialog +{ + Q_OBJECT + +public: + SettingsDialog(); + QStringList getAvailableOptions(const QString& key); + + Ogre::Root *root; + Ogre::RenderSystem *mSelectedRenderSystem; + + QComboBox *comboRender; + QComboBox *comboRTT; + QComboBox *comboAA; + QComboBox *comboResolution; + QComboBox *comboFrequency; + + QCheckBox *checkVSync; + QCheckBox *checkGamma; + QCheckBox *checkFullScreen; + + QSettings *ogreConfig; + + QString getConfigValue(const QString& key); + +public slots: + void rendererChanged(const QString& renderer); + void writeConfig(); +}; + +#endif From aa54975a2f48edd9810ce883520f5c77d12365ea Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 17:07:24 +0200 Subject: [PATCH 003/111] Removed the directoryLoaded() signal as it's only available in Qt 4.7. --- apps/launcher/datafilesdialog.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index 201e2939c9..1fb387eadc 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -118,19 +118,19 @@ DataFilesDialog::DataFilesDialog() // Signals and slots - connect(dataFilesModel, SIGNAL(directoryLoaded(const QString &)), this, SLOT(setupView())); -// connect(dataFilesModel, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), this, SLOT(readConfig())); + //connect(dataFilesModel, SIGNAL(directoryLoaded(const QString &)), this, SLOT(setupView())); connect(dataFilesView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(changeData(QModelIndex, QModelIndex))); - connect(lineFilter, SIGNAL(textChanged(const QString &)), this, SLOT(setFilter())); + connect(lineFilter, SIGNAL(textChanged(const QString&)), this, SLOT(setFilter())); connect(buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(restoreDefaults())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); readConfig(); + setupView(); } void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) @@ -209,8 +209,6 @@ void DataFilesDialog::setupView() void DataFilesDialog::readConfig() { - qDebug() << "datachanged"; - // Morrowind.ini settings QSettings settings("Morrowind.ini", QSettings::IniFormat); From 493018322db519cc518aeba1b6c0a9916e99567f Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 20:12:10 +0200 Subject: [PATCH 004/111] Added function to write the list of plugins to openmw.cfg --- apps/launcher/datafilesdialog.cpp | 77 ++++++++++++++++++------------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index 1fb387eadc..9dbe3f4af9 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -15,7 +15,7 @@ DataFilesDialog::DataFilesDialog() dataFilesModel = new DataFilesModel(); dataFilesModel->setReadOnly(true); // Prevent changes to files - dataFilesModel->setRootPath("/opt/openmw/data"); + dataFilesModel->setRootPath("data"); // sortModel = new QSortFilterProxyModel(); // sortModel->setSourceModel(dataFilesModel); @@ -181,7 +181,7 @@ void DataFilesDialog::setupView() // dataFilesView->setModel(sortModel); // Set the view to the data directory - dataFilesView->setRootIndex(QModelIndex(dataFilesModel->index("/opt/openmw/data"))); + dataFilesView->setRootIndex(QModelIndex(dataFilesModel->index("data"))); // dataFilesView->setRootIndex(sortModel->mapFromSource(QModelIndex(dataFilesModel->index("/opt/openmw/data")))); dataFilesView->verticalHeader()->hide(); @@ -245,19 +245,24 @@ void DataFilesDialog::readConfig() void DataFilesDialog::writeConfig() { -/* // Custom write method: We cannot use QSettings because it does not accept spaces + // Custom write method: We cannot use QSettings because it does not accept spaces -// QList checkedItems = dataFilesModel->getCheckedItems().toList(); - QList checkedItems = dataFilesModel->getCheckedItems(); - - qSort(checkedItems); // Sort the indexes so that master files end up on top - - QString keyName; - QString fileName; - - QFile file("Morrowind.ini"); // Specify filepath later +// QList checkeditems = dataFilesModel->getCheckedItems().toList(); + QStringList checkeditems = dataFilesModel->getCheckedItems(); + //QString sectionname = "[Game Files]"; + QString filename; + QFileInfo datafile; + + // Sort the items so that master files end up on top + foreach (QString str, checkeditems) { + if(str.endsWith(QString(".esm"), Qt::CaseInsensitive)) { + checkeditems.move(checkeditems.indexOf(str), 0); + } + } + + QFile file("openmw.cfg"); // Specify filepath later if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - close(); // File cannot be opened or created + close(); // File cannot be opened or created TODO: throw error //QTextStream in(&file); QTextStream in(&file); @@ -265,34 +270,44 @@ void DataFilesDialog::writeConfig() //QString buffer; QByteArray buffer; + // Remove all previous master/plugin entries from config while (!in.atEnd()) { QString line = in.readLine(); - if (!line.contains("GameFile") && line != "[Game Files]") { - buffer += line + "\n"; + //if (!line.contains("GameFile") && line != "[Game Files]") { + if (!line.contains("master") && !line.contains("plugin")) { + buffer += line += "\n"; } } file.close(); + // Now we write back the other config entries if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) - close(); + close(); // File cannot be opened or created TODO: throw error - QTextStream out(&file); file.write(buffer); - - out << "[Game Files]\n"; - + QTextStream out(&file); + + // Write the section name to the config file before we write out the data files + //out << sectionname << endl; + // Write the list of game files to the config - for (int i = 0; i < checkedItems.size(); ++i) { - fileName = dataFilesModel->fileName(checkedItems.at(i)); - - keyName.setNum(i); - keyName.prepend("GameFile"); - - out << keyName << "=" << fileName << "\n"; + for (int i = 0; i < checkeditems.size(); ++i) { + //filename = dataFilesModel->fileName(checkeditems.at(i)); + filename = checkeditems.at(i); + datafile = QFileInfo(filename); + + if (datafile.exists()) { + if (filename.endsWith(QString(".esm"), Qt::CaseInsensitive)) { + out << "master=" << datafile.fileName() << endl; + } else if (filename.endsWith(QString(".esp"), Qt::CaseInsensitive)) { + out << "plugin=" << datafile.fileName() << endl; + } + } } - file.close();*/ + + file.close(); close(); // Exit dialog } @@ -302,9 +317,9 @@ void DataFilesDialog::restoreDefaults() dataFilesModel->checkedItems.clear(); QModelIndexList indexlist; // Make a list of default master files - indexlist.append(dataFilesModel->index("/opt/openmw/data/Morrowind.esm", 0)); - indexlist.append(dataFilesModel->index("/opt/openmw/data/Tribunal.esm", 0)); - indexlist.append(dataFilesModel->index("/opt/openmw/data/Bloodmoon.esm", 0)); + indexlist.append(dataFilesModel->index("Morrowind.esm", 0)); + indexlist.append(dataFilesModel->index("Tribunal.esm", 0)); + indexlist.append(dataFilesModel->index("Bloodmoon.esm", 0)); foreach (const QModelIndex &index, indexlist) { if (index.isValid()) { From 1d873c56a81d037310840b415511afae5c9fdd8d Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 20:15:15 +0200 Subject: [PATCH 005/111] Fixed the "Restore defaults" function. --- apps/launcher/datafilesdialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index 9dbe3f4af9..77386268f5 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -317,9 +317,9 @@ void DataFilesDialog::restoreDefaults() dataFilesModel->checkedItems.clear(); QModelIndexList indexlist; // Make a list of default master files - indexlist.append(dataFilesModel->index("Morrowind.esm", 0)); - indexlist.append(dataFilesModel->index("Tribunal.esm", 0)); - indexlist.append(dataFilesModel->index("Bloodmoon.esm", 0)); + indexlist.append(dataFilesModel->index("data/Morrowind.esm", 0)); + indexlist.append(dataFilesModel->index("data/Tribunal.esm", 0)); + indexlist.append(dataFilesModel->index("data/Bloodmoon.esm", 0)); foreach (const QModelIndex &index, indexlist) { if (index.isValid()) { From 082902473ba94ee2c93928f79c5c5c32da2b1719 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 22:15:44 +0200 Subject: [PATCH 006/111] Changed the readConfig function to work with the new master/plugin options in openmw.cfg --- apps/launcher/datafilesdialog.cpp | 70 ++++++++++++++++++------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index 77386268f5..bab3f893ca 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -208,39 +208,49 @@ void DataFilesDialog::setupView() } void DataFilesDialog::readConfig() -{ - // Morrowind.ini settings - QSettings settings("Morrowind.ini", - QSettings::IniFormat); - settings.beginGroup("Game Files"); +{ + QString filename; + QString path = "data/"; // TODO: Should be global + + QFile file("openmw.cfg"); // Specify filepath later + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "error open"; + close(); // File cannot be opened or created TODO: throw error + } + + QTextStream in(&file); - const QStringList childKeys = settings.childKeys(); + QStringList datafiles; - // See if the files from the config file actually exist - foreach (const QString &childKey, childKeys) { - // Create full path to current file found in config - QString path = "/opt/openmw/data/"; // Note: get path from config - path.append(settings.value(childKey).toString()); - - QModelIndex index = dataFilesModel->index(path, 0); -// QModelIndex index = sortModel->mapFromSource(dataFilesModel->index(path, 0)); -// QModelIndex index = sortModel->mapFromSource(dataFilesModel->index(path)); + // Add each data file read from the config file to a QStringList + while (!in.atEnd()) { + QString line = in.readLine(); + + if (line.contains("master")) { + filename = line.remove("master="); + filename.prepend(path); + + datafiles << filename << "\n"; + + } else if (line.contains("plugin")) { + filename = line.remove("plugin="); + filename.prepend(path); + + datafiles << filename << "\n"; + } + } + file.close(); + + // Check if the files are in the model, set to checked if found + foreach(const QString ¤tfile, datafiles) { + QModelIndex index = dataFilesModel->index(currentfile, 0); + if (index.isValid()) { // File is found in model, set it to checked - qDebug() << "File is found in model, set it to checked"; - // dataFilesModel->setData(sortModel->mapToSource(index), Qt::Checked, Qt::CheckStateRole); - dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); -// dataFilesModel->checkedItems.insert(QPersistentModelIndex(sortModel->mapToSource(index))); - // dataFilesModel->checkedItems.insert(index); - - //qDebug() << index; - } else { - // File is not found in the model - qDebug() << "file not found!"; - } + dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); + } } - settings.endGroup(); } void DataFilesDialog::writeConfig() @@ -254,9 +264,9 @@ void DataFilesDialog::writeConfig() QFileInfo datafile; // Sort the items so that master files end up on top - foreach (QString str, checkeditems) { - if(str.endsWith(QString(".esm"), Qt::CaseInsensitive)) { - checkeditems.move(checkeditems.indexOf(str), 0); + foreach (const QString ¤titem, checkeditems) { + if(currentitem.endsWith(QString(".esm"), Qt::CaseInsensitive)) { + checkeditems.move(checkeditems.indexOf(currentitem), 0); } } From 74eef829020408d0954b9eb4cd9cbdd244425fb9 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 29 Mar 2011 23:42:34 +0200 Subject: [PATCH 007/111] Messing around with a new datafilesdialog --- apps/launcher/CMakeLists.txt | 4 + apps/launcher/datafilesdialog.cpp | 123 ++++++-------- apps/launcher/datafilesdialog.h | 29 ++-- apps/launcher/datafilesmodel.cpp | 260 ++++++++++++++++-------------- apps/launcher/datafilesmodel.h | 45 +++--- apps/launcher/launcher.pro | 6 +- 6 files changed, 225 insertions(+), 242 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 291103b28c..fe29375d96 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -1,12 +1,14 @@ set(LAUNCHER datafilesdialog.cpp datafilesmodel.cpp + datafilesitem.cpp lineedit.cpp main.cpp maindialog.cpp settingsdialog.cpp datafilesdialog.h datafilesmodel.h + datafilesitem.h lineedit.h maindialog.h settingsdialog.h @@ -14,6 +16,8 @@ set(LAUNCHER SET(MOC_HDRS datafilesdialog.h + datafilesmodel.h + datafilesitem.h lineedit.h maindialog.h settingsdialog.h diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index bab3f893ca..b906cb75b5 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -3,27 +3,34 @@ #include "datafilesdialog.h" #include "datafilesmodel.h" +#include "datafilesitem.h" using namespace ESM; -//DataFilesDialog::DataFilesDialog(QWidget *parent) -// : QDialog(parent) - DataFilesDialog::DataFilesDialog() { - //QWidget *centralWidget = new QWidget; - + //dataFilesModel = new DataFilesModel(this); dataFilesModel = new DataFilesModel(); - dataFilesModel->setReadOnly(true); // Prevent changes to files - dataFilesModel->setRootPath("data"); + + for (int row = 0; row < 4; ++row) { + for (int column = 0; column < 4; ++column) { + QList test; + test << QString("%0").arg(i); + DataFilesItem *item = new DataFilesItem(test); + dataFilesModel->setItem(row, column, item); + } + } + + //dataFilesModel->setReadOnly(true); // Prevent changes to files + //dataFilesModel->setRootPath("data"); // sortModel = new QSortFilterProxyModel(); // sortModel->setSourceModel(dataFilesModel); - selectionModel = new QItemSelectionModel(dataFilesModel); + //selectionModel = new QItemSelectionModel(dataFilesModel); // selectionModel = new QItemSelectionModel(sortModel); - // First, show only plugin files and sort them + /* First, show only plugin files and sort them QStringList acceptedfiles = (QStringList() << "*.esp"); dataFilesModel->setNameFilters(acceptedfiles); dataFilesModel->setNameFilterDisables(false); // Hide all other files @@ -35,58 +42,33 @@ DataFilesDialog::DataFilesDialog() acceptedfiles = (QStringList() << "*.esm" << "*.esp"); dataFilesModel->setNameFilters(acceptedfiles); dataFilesModel->setFilter(QDir::Files); - +*/ // Column 1 QVBoxLayout *dialogLayout = new QVBoxLayout(this); - QHBoxLayout *groupsLayout = new QHBoxLayout(); QGroupBox *groupFiles = new QGroupBox(tr("Morrowind Files"), this); groupFiles->setMinimumWidth(450); QVBoxLayout *groupFilesLayout = new QVBoxLayout(groupFiles); - QSpacerItem *vSpacer1 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Fixed); + //QSpacerItem *vSpacer1 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Fixed); - QHBoxLayout *filterLayout = new QHBoxLayout(); + /*QHBoxLayout *filterLayout = new QHBoxLayout(); QLabel *labelFilter = new QLabel(tr("Filter:"), groupFiles); lineFilter = new LineEdit(groupFiles); filterLayout->addWidget(labelFilter); filterLayout->addWidget(lineFilter); - + */ + // View for the game files - dataFilesView = new QTableView(groupFiles); - + //dataFilesView = new QTreeView(groupFiles); + dataFilesView = new QTreeView(groupFiles); + dataFilesView->setModel(dataFilesModel); + // Put everything in the correct layouts - groupFilesLayout->addLayout(filterLayout); - groupFilesLayout->addItem(vSpacer1); + //groupFilesLayout->addLayout(filterLayout); + //groupFilesLayout->addItem(vSpacer1); groupFilesLayout->addWidget(dataFilesView); - groupsLayout->addWidget(groupFiles); - - // Column 2 - QGroupBox *groupInfo = new QGroupBox(tr("File Information"), this); - groupInfo->setFixedWidth(250); - QVBoxLayout *groupInfoLayout = new QVBoxLayout(groupInfo); - - QSpacerItem *vSpacer2 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); - - QLabel *labelAuthor = new QLabel(tr("Author:"), groupInfo); - lineAuthor = new QLineEdit(groupInfo); - lineAuthor->setReadOnly(true); - - QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); - - QLabel *labelDesc = new QLabel(tr("Description:"), groupInfo); - textDesc = new QPlainTextEdit(groupInfo); - textDesc->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - textDesc->setMinimumHeight(180); - textDesc->setReadOnly(true); - - QSpacerItem *vSpacer4 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); - - QLabel *labelDepends = new QLabel(tr("Dependencies:"), groupInfo); - textDepends = new QPlainTextEdit(groupInfo); - textDepends->setFixedHeight(80); - textDepends->setReadOnly(true); QHBoxLayout *buttonsLayout = new QHBoxLayout(); QSpacerItem *horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); @@ -97,28 +79,14 @@ DataFilesDialog::DataFilesDialog() buttonsLayout->addItem(horizontalSpacer); buttonsLayout->addWidget(buttonBox); - - // Put everything in the correct layouts - groupInfoLayout->addItem(vSpacer2); - groupInfoLayout->addWidget(labelAuthor); - groupInfoLayout->addWidget(lineAuthor); - groupInfoLayout->addItem(vSpacer3); - groupInfoLayout->addWidget(labelDesc); - groupInfoLayout->addWidget(textDesc); - groupInfoLayout->addItem(vSpacer4); - groupInfoLayout->addWidget(labelDepends); - groupInfoLayout->addWidget(textDepends); - - groupsLayout->addWidget(groupInfo); - - dialogLayout->addLayout(groupsLayout); + + dialogLayout->addWidget(groupFiles); dialogLayout->addLayout(buttonsLayout); setWindowTitle(tr("Data Files")); - // Signals and slots - //connect(dataFilesModel, SIGNAL(directoryLoaded(const QString &)), this, SLOT(setupView())); + /*connect(dataFilesModel, SIGNAL(directoryLoaded(const QString &)), this, SLOT(setupView())); connect(dataFilesView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(changeData(QModelIndex, QModelIndex))); @@ -128,14 +96,14 @@ DataFilesDialog::DataFilesDialog() connect(buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(restoreDefaults())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - - readConfig(); - setupView(); +*/ + //readConfig(); + //setupView(); } void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) { - if (!index.isValid()) { + /*if (!index.isValid()) { return; } @@ -176,7 +144,7 @@ void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) void DataFilesDialog::setupView() { - // The signal directoryLoaded is emitted after all files are in the model + /* The signal directoryLoaded is emitted after all files are in the model dataFilesView->setModel(dataFilesModel); // dataFilesView->setModel(sortModel); @@ -203,13 +171,13 @@ void DataFilesDialog::setupView() dataFilesView->horizontalHeader()->setStretchLastSection(true); - //sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); + //sortModel->setSortCaseSensitivity(Qt::CaseInsensitive);*/ } void DataFilesDialog::readConfig() { - QString filename; +/* QString filename; QString path = "data/"; // TODO: Should be global QFile file("openmw.cfg"); // Specify filepath later @@ -250,12 +218,12 @@ void DataFilesDialog::readConfig() // File is found in model, set it to checked dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); } - } + }*/ } void DataFilesDialog::writeConfig() { - // Custom write method: We cannot use QSettings because it does not accept spaces + /* Custom write method: We cannot use QSettings because it does not accept spaces // QList checkeditems = dataFilesModel->getCheckedItems().toList(); QStringList checkeditems = dataFilesModel->getCheckedItems(); @@ -318,12 +286,12 @@ void DataFilesDialog::writeConfig() file.close(); - close(); // Exit dialog + close(); // Exit dialog*/ } void DataFilesDialog::restoreDefaults() { - // Uncheck all checked items +/* // Uncheck all checked items dataFilesModel->checkedItems.clear(); QModelIndexList indexlist; // Make a list of default master files @@ -337,12 +305,12 @@ void DataFilesDialog::restoreDefaults() dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); } } - dataFilesModel->submit(); // Force refresh of view + dataFilesModel->submit(); // Force refresh of view*/ } void DataFilesDialog::setCheckstate(QModelIndex index) { - // No check if index is valid: doubleclicked() always returns + /* No check if index is valid: doubleclicked() always returns // a valid index when emitted //index = QModelIndex(sortModel->mapToSource(index)); // Get a valid index @@ -357,11 +325,12 @@ void DataFilesDialog::setCheckstate(QModelIndex index) dataFilesModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); } else { dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); - } + }*/ } void DataFilesDialog::setFilter() { + /* QStringList filefilter = (QStringList() << "*.esm" << "*.esp"); QStringList currentfilefilter; @@ -390,5 +359,5 @@ void DataFilesDialog::setFilter() // readConfig(); // dataFilesModel->submit(); // dataFilesModel->setData(); - +*/ } diff --git a/apps/launcher/datafilesdialog.h b/apps/launcher/datafilesdialog.h index 884de52191..d223bf14ad 100644 --- a/apps/launcher/datafilesdialog.h +++ b/apps/launcher/datafilesdialog.h @@ -1,20 +1,21 @@ #ifndef DATAFILESDIALOG_H #define DATAFILESDIALOG_H -#include -#include -#include -#include - #include "lineedit.h" class DataFilesModel; -class QStringList; -class QTableView; + +/*class QStringList; +class QTreeView; class QLineEdit; class QPlainTextEdit; class QItemSelectionModel; class QSortFilterProxyModel; +*/ +#include +#include + +class QTreeView; class DataFilesDialog : public QDialog { @@ -27,14 +28,14 @@ public: private: DataFilesModel *dataFilesModel; - QTableView *dataFilesView; - QItemSelectionModel *selectionModel; - QSortFilterProxyModel *sortModel; + QTreeView *dataFilesView; + //QItemSelectionModel *selectionModel; + //QSortFilterProxyModel *sortModel; - QLineEdit *lineAuthor; - LineEdit *lineFilter; - QPlainTextEdit *textDesc; - QPlainTextEdit *textDepends; + //QLineEdit *lineAuthor; + //LineEdit *lineFilter; + //QPlainTextEdit *textDesc; + //QPlainTextEdit *textDepends; public slots: diff --git a/apps/launcher/datafilesmodel.cpp b/apps/launcher/datafilesmodel.cpp index 99b924d67a..0eb68ab4c6 100644 --- a/apps/launcher/datafilesmodel.cpp +++ b/apps/launcher/datafilesmodel.cpp @@ -1,145 +1,155 @@ +#include + +#include "datafilesitem.h" #include "datafilesmodel.h" +//DataFilesModel::DataFilesModel(const QString &data, QObject *parent) DataFilesModel::DataFilesModel(QObject *parent) - : QFileSystemModel(parent) + : QAbstractItemModel(parent) { + QList rootData; + rootData << " "; + //rootItem = new DataFilesItem(rootData); + rootItem = new DataFilesItem(rootData); + //setupModelData(data.split(QString("\n")), rootItem); +} + +DataFilesModel::~DataFilesModel() +{ + delete rootItem; +} + +int DataFilesModel::columnCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return static_cast(parent.internalPointer())->columnCount(); + else + return rootItem->columnCount(); } QVariant DataFilesModel::data(const QModelIndex &index, int role) const { - if (index.isValid() && role == Qt::DecorationRole) { - if (index.column() == 2) { - QFileIconProvider fip; - QIcon fileIcon = fip.icon(fileInfo(index)); - return fileIcon; - } - else { - return QIcon(); - } + if (!index.isValid()) + return QVariant(); - } + if (role != Qt::DisplayRole) + return QVariant(); - if (index.isValid() && role == Qt::DisplayRole) { - if (index.column() == 2) { - //qDebug() << index.data(Qt::DisplayRole); - if (fileInfo(index).suffix().toLower() == "esp") { - return QString("Plugin File"); - } - else if (fileInfo(index).suffix().toLower() == "esm") { - return QString("Master File"); + DataFilesItem *item = static_cast(index.internalPointer()); - } - } - } - - if (index.isValid() && role == Qt::CheckStateRole && index.column() == 0) { - // Put a checkbox in the first column - if (index.isValid()) - - if (checkedItems.contains(filePath(index))) { -// if (checkedItems.contains(index)) { - return Qt::Checked; - } - else { - return Qt::Unchecked; - } - } - return QFileSystemModel::data(index, role); + return item->data(index.column()); } -bool DataFilesModel::setData(const QModelIndex& index, const QVariant& value, int role) -{ - - if (index.isValid() && role == Qt::CheckStateRole && index.column() == 0) { -// QPersistentModelIndex pindex(index); - - // qDebug() << pindex; - - if (value == Qt::Checked) { - //checkedItems.insert(pindex); - checkedItems.append(filePath(index)); - } else { -// checkedItems.remove(pindex); - checkedItems.removeAll(filePath(index)); - } - - emit dataChanged(index, index); - return true; - } - - return QFileSystemModel::setData(index, value, role); -} - - - Qt::ItemFlags DataFilesModel::flags(const QModelIndex &index) const { - return QFileSystemModel::flags(index) | Qt::ItemIsUserCheckable; + if (!index.isValid()) + return 0; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } - - -/*QVariant DataFilesModel::headerData(int section, Qt::Orientation orientation, int role) const +QVariant DataFilesModel::headerData(int section, Qt::Orientation orientation, + int role) const { - switch (role) { - case Qt::DecorationRole: - if (section == 0) { - // ### TODO oh man this is ugly and doesn't even work all the way! - // it is still 2 pixels off - QImage pixmap(16, 1, QImage::Format_Mono); - pixmap.fill(0); - pixmap.setAlphaChannel(pixmap.createAlphaMask()); - return pixmap; + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + return rootItem->data(section); + + return QVariant(); +} + +QModelIndex DataFilesModel::index(int row, int column, const QModelIndex &parent) + const +{ + if (!hasIndex(row, column, parent)) + return QModelIndex(); + + DataFilesItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + DataFilesItem *childItem = parentItem->child(row); + if (childItem) + return createIndex(row, column, childItem); + else + return QModelIndex(); +} + +QModelIndex DataFilesModel::parent(const QModelIndex &index) const +{ + if (!index.isValid()) + return QModelIndex(); + + DataFilesItem *childItem = static_cast(index.internalPointer()); + DataFilesItem *parentItem = childItem->parent(); + + if (parentItem == rootItem) + return QModelIndex(); + + return createIndex(parentItem->row(), 0, parentItem); +} + +int DataFilesModel::rowCount(const QModelIndex &parent) const +{ + DataFilesItem *parentItem; + if (parent.column() > 0) + return 0; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + return parentItem->childCount(); +} + +/*void DataFilesModel::setupModelData(const QStringList &lines, DataFilesItem *parent) +{ + QList parents; + QList indentations; + parents << parent; + indentations << 0; + + int number = 0; + + while (number < lines.count()) { + int position = 0; + while (position < lines[number].length()) { + if (lines[number].mid(position, 1) != " ") + break; + position++; } - break; - case Qt::TextAlignmentRole: - return Qt::AlignLeft; + + QString lineData = lines[number].mid(position).trimmed(); + + if (!lineData.isEmpty()) { + // Read the column data from the rest of the line. + QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts); + QList columnData; + for (int column = 0; column < columnStrings.count(); ++column) + columnData << columnStrings[column]; + + if (position > indentations.last()) { + // The last child of the current parent is now the new parent + // unless the current parent has no children. + + if (parents.last()->childCount() > 0) { + parents << parents.last()->child(parents.last()->childCount()-1); + indentations << position; + } + } else { + while (position < indentations.last() && parents.count() > 0) { + parents.pop_back(); + indentations.pop_back(); + } + } + + // Append a new item to the current parent's list of children. + parents.last()->appendChild(new DataFilesItem(columnData, parents.last())); + } + + number++; } - - if (orientation != Qt::Horizontal || role != Qt::DisplayRole) - return QAbstractItemModel::headerData(section, orientation, role); - - QString returnValue; - switch (section) { - case 0: returnValue = tr("TES3 File"); - break; - case 1: returnValue = tr("Size"); - break; - case 2: returnValue = tr("Status"); - break; - case 3: returnValue = tr("Date Modified"); - break; - default: return QVariant(); - } - return returnValue; -} -*/ - -/*test -void DataFilesModel::setCheckedItems(const QStringList &gameFiles) -{ - qDebug() << "test"; - qDebug() << gameFiles.join("lol"); - - -}*/ - -/*void DataFilesModel::unCheckAll() -{ - checkedItems.clear(); -// data(); - emit dataChanged(QModelIndex(), QModelIndex()); - submit(); -}*/ - -const QStringList DataFilesModel::getCheckedItems() -//const QList DataFilesModel::getCheckedItems() -//const QSet DataFilesModel::getCheckedItems() -{ - return checkedItems; -} - -/*void DataFilesModel::sort(int column, Qt::SortOrder order) -{ - qDebug() << "Sort!"; -}*/ +}*/ \ No newline at end of file diff --git a/apps/launcher/datafilesmodel.h b/apps/launcher/datafilesmodel.h index 0e376865b7..bf2184dcdb 100644 --- a/apps/launcher/datafilesmodel.h +++ b/apps/launcher/datafilesmodel.h @@ -1,38 +1,35 @@ #ifndef DATAFILESMODEL_H #define DATAFILESMODEL_H -#include -#include +#include +#include +#include -#include +class DataFilesItem; -class DataFilesModel : public QFileSystemModel +class DataFilesModel : public QAbstractItemModel { + Q_OBJECT + public: + //DataFilesModel(const QString &data, QObject *parent = 0); DataFilesModel(QObject *parent = 0); - ~DataFilesModel() {}; - - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + ~DataFilesModel(); + QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + QModelIndex index(int row, int column, + const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &index) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); +private: + //void setupModelData(const QStringList &lines, TreeItem *parent); -// void sort(int column, Qt::SortOrder order); - //test -// void setCheckedItems(const QStringList& files); -// void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); -// void unCheckAll(); - -// const QSet getCheckedItems(); -// const QList getCheckedItems(); - const QStringList getCheckedItems(); - -// QVariant headerData(int section, Qt::Orientation orientation, int role) const; - -// QSet checkedItems; -// QList checkedItems; - QStringList checkedItems; + DataFilesItem *rootItem; }; -#endif +#endif \ No newline at end of file diff --git a/apps/launcher/launcher.pro b/apps/launcher/launcher.pro index ac17e019ef..4674c8c398 100644 --- a/apps/launcher/launcher.pro +++ b/apps/launcher/launcher.pro @@ -1,5 +1,5 @@ ###################################################################### -# Automatically generated by qmake (2.01a) Sun Mar 27 19:33:07 2011 +# Automatically generated by qmake (2.01a) Tue Mar 29 22:56:27 2011 ###################################################################### TEMPLATE = app @@ -9,15 +9,17 @@ INCLUDEPATH += . # Input HEADERS += datafilesdialog.h \ + datafilesitem.h \ datafilesmodel.h \ lineedit.h \ maindialog.h \ settingsdialog.h SOURCES += datafilesdialog.cpp \ + datafilesitem.cpp \ datafilesmodel.cpp \ lineedit.cpp \ main.cpp \ maindialog.cpp \ + qrc_resources.cxx \ settingsdialog.cpp RESOURCES += resources.qrc -RC_FILE = launcher.rc \ No newline at end of file From 1e62d8451fb93f18b1e0b84bac682c96e0891793 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 30 Mar 2011 14:05:27 +0200 Subject: [PATCH 008/111] More testing and removing --- apps/launcher/datafilesdialog.cpp | 45 ++++++++++++++++++++++--------- apps/launcher/datafilesdialog.h | 6 +++-- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index b906cb75b5..08fe1a085b 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -2,25 +2,17 @@ #include #include "datafilesdialog.h" -#include "datafilesmodel.h" -#include "datafilesitem.h" +//#include "datafilesmodel.h" +//#include "datafilesitem.h" using namespace ESM; DataFilesDialog::DataFilesDialog() { //dataFilesModel = new DataFilesModel(this); - dataFilesModel = new DataFilesModel(); + dataFilesModel = new QStandardItemModel(); - for (int row = 0; row < 4; ++row) { - for (int column = 0; column < 4; ++column) { - QList test; - test << QString("%0").arg(i); - DataFilesItem *item = new DataFilesItem(test); - dataFilesModel->setItem(row, column, item); - } - } - + //dataFilesModel->setReadOnly(true); // Prevent changes to files //dataFilesModel->setRootPath("data"); @@ -64,6 +56,10 @@ DataFilesDialog::DataFilesDialog() //dataFilesView = new QTreeView(groupFiles); dataFilesView = new QTreeView(groupFiles); dataFilesView->setModel(dataFilesModel); + dataFilesView->setDragEnabled(true); + dataFilesView->setDropIndicatorShown(true); + dataFilesView->setAlternatingRowColors(true); + // Put everything in the correct layouts //groupFilesLayout->addLayout(filterLayout); @@ -99,6 +95,7 @@ DataFilesDialog::DataFilesDialog() */ //readConfig(); //setupView(); + setupView(); } void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) @@ -144,6 +141,30 @@ void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) void DataFilesDialog::setupView() { + QDir datadir(QString("data/")); + QStringList acceptedfiles = (QStringList() << "*.esp"); + QStringList datafiles; + + datadir.setNameFilters(acceptedfiles); + + datafiles = datadir.entryList(); + + QStandardItem *parentItem = dataFilesModel->invisibleRootItem(); + QStandardItem *masterFile = new QStandardItem(QString("Morrowind.esm")); + parentItem->appendRow(masterFile); + parentItem = masterFile; + + QFileIconProvider fip; + QIcon fileIcon = fip.icon(QFileInfo("data/Morrowind.esm")); + + foreach (const QString ¤tfile, datafiles) { + QStandardItem *item = new QStandardItem(currentfile); + item->setIcon(fileIcon); + parentItem->appendRow(item); + } + + + /* The signal directoryLoaded is emitted after all files are in the model dataFilesView->setModel(dataFilesModel); // dataFilesView->setModel(sortModel); diff --git a/apps/launcher/datafilesdialog.h b/apps/launcher/datafilesdialog.h index d223bf14ad..38f4a5826c 100644 --- a/apps/launcher/datafilesdialog.h +++ b/apps/launcher/datafilesdialog.h @@ -3,7 +3,8 @@ #include "lineedit.h" -class DataFilesModel; +//class DataFilesModel; + /*class QStringList; class QTreeView; @@ -16,6 +17,7 @@ class QSortFilterProxyModel; #include class QTreeView; +class QStandardItemModel; class DataFilesDialog : public QDialog { @@ -26,7 +28,7 @@ public: // ~DataFilesDialog() { }; private: - DataFilesModel *dataFilesModel; + QStandardItemModel *dataFilesModel; QTreeView *dataFilesView; //QItemSelectionModel *selectionModel; From 96e7df36e5c83bcd8a0e3e09941ff2240e8ce873 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 3 Apr 2011 22:24:43 +0200 Subject: [PATCH 009/111] Added a proof-of-concept datafiles implementation to replace the old dialog --- apps/launcher/datafilesdialog.cpp | 407 ++++++++++++++++-------------- apps/launcher/datafilesdialog.h | 30 ++- 2 files changed, 240 insertions(+), 197 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index 08fe1a085b..f00cfdfe8f 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -9,191 +9,233 @@ using namespace ESM; DataFilesDialog::DataFilesDialog() { - //dataFilesModel = new DataFilesModel(this); - dataFilesModel = new QStandardItemModel(); + QSplitter *splitter = new QSplitter(this); + tree = new QTreeView(this); + mastertable = new QTableView(this); + plugintable = new QTableView(this); + + splitter->setOrientation(Qt::Vertical); + splitter->addWidget(tree); + splitter->addWidget(mastertable); + splitter->addWidget(plugintable); + + // Adjust the widget heights inside the splitter + QList sizelist; + sizelist << 100 << 200 << 400; + splitter->setSizes(sizelist); - - //dataFilesModel->setReadOnly(true); // Prevent changes to files - //dataFilesModel->setRootPath("data"); - -// sortModel = new QSortFilterProxyModel(); -// sortModel->setSourceModel(dataFilesModel); - - //selectionModel = new QItemSelectionModel(dataFilesModel); -// selectionModel = new QItemSelectionModel(sortModel); - - /* First, show only plugin files and sort them - QStringList acceptedfiles = (QStringList() << "*.esp"); - dataFilesModel->setNameFilters(acceptedfiles); - dataFilesModel->setNameFilterDisables(false); // Hide all other files - - dataFilesModel->sort(3, Qt::AscendingOrder); // Sort the plugins by date - dataFilesModel->submit(); // Force refresh of the data - - // Now show master files too, to make them appear at the top of the list - acceptedfiles = (QStringList() << "*.esm" << "*.esp"); - dataFilesModel->setNameFilters(acceptedfiles); - dataFilesModel->setFilter(QDir::Files); -*/ - // Column 1 QVBoxLayout *dialogLayout = new QVBoxLayout(this); + dialogLayout->addWidget(splitter); + //dialogLayout->addWidget(plugintable); - QGroupBox *groupFiles = new QGroupBox(tr("Morrowind Files"), this); - groupFiles->setMinimumWidth(450); - QVBoxLayout *groupFilesLayout = new QVBoxLayout(groupFiles); + datafilesmodel = new QStandardItemModel(); + mastersmodel = new QStandardItemModel(); - //QSpacerItem *vSpacer1 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Fixed); + QDir datafilesdir("data/"); + if (!datafilesdir.exists()) + qWarning("Cannot find the plugin directory"); - /*QHBoxLayout *filterLayout = new QHBoxLayout(); - QLabel *labelFilter = new QLabel(tr("Filter:"), groupFiles); - lineFilter = new LineEdit(groupFiles); - - filterLayout->addWidget(labelFilter); - filterLayout->addWidget(lineFilter); - */ - - // View for the game files - //dataFilesView = new QTreeView(groupFiles); - dataFilesView = new QTreeView(groupFiles); - dataFilesView->setModel(dataFilesModel); - dataFilesView->setDragEnabled(true); - dataFilesView->setDropIndicatorShown(true); - dataFilesView->setAlternatingRowColors(true); - - - // Put everything in the correct layouts - //groupFilesLayout->addLayout(filterLayout); - //groupFilesLayout->addItem(vSpacer1); - groupFilesLayout->addWidget(dataFilesView); - - QHBoxLayout *buttonsLayout = new QHBoxLayout(); - QSpacerItem *horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QDialogButtonBox *buttonBox = new QDialogButtonBox(); - buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults); - buttonBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - buttonsLayout->addItem(horizontalSpacer); - buttonsLayout->addWidget(buttonBox); - - dialogLayout->addWidget(groupFiles); - dialogLayout->addLayout(buttonsLayout); - - setWindowTitle(tr("Data Files")); - - // Signals and slots - /*connect(dataFilesModel, SIGNAL(directoryLoaded(const QString &)), this, SLOT(setupView())); - - connect(dataFilesView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); - connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(changeData(QModelIndex, QModelIndex))); - - connect(lineFilter, SIGNAL(textChanged(const QString&)), this, SLOT(setFilter())); - - connect(buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(restoreDefaults())); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); -*/ - //readConfig(); - //setupView(); - setupView(); -} - -void DataFilesDialog::changeData(QModelIndex index, QModelIndex bottom) -{ - /*if (!index.isValid()) { - return; - } - - // Added for testing - - textDepends->clear(); // Clear the dependencies of previous file - - ESMReader datafile; - QString path(dataFilesModel->filePath(index)); -// QString path(dataFilesModel->filePath(sortModel->mapToSource(index))); - - datafile.open(path.toStdString()); // Open the selected file - - // Get the author of the selected file and display it - QString author(QString::fromStdString(datafile.getAuthor())); - lineAuthor->setText(author); - - // Get the file desciption - QString desc(QString::fromStdString(datafile.getDesc())); - textDesc->setPlainText(desc); - - // Get a list of master files on which the file depends - ESMReader::MasterList mlist = datafile.getMasters(); - - for (unsigned int i = 0; i < mlist.size(); ++i) // Add each master file - textDepends->appendPlainText(QString::fromStdString(mlist[i].name)); - - /* Get the date of creation - QDateTime dateCreated = dataFilesModel->fileInfo(index).created(); - QString created = dateCreated.toString(QString("dd.MM.yyyy")); - labelDateCreated->setText(created); - - // Get the date last modified - QDateTime dateModified = dataFilesModel->fileInfo(index).lastModified(); - QString modified = dateModified.toString(QString("dd.MM.yyyy")); - labelDateModified->setText(modified);*/ -} - -void DataFilesDialog::setupView() -{ - QDir datadir(QString("data/")); QStringList acceptedfiles = (QStringList() << "*.esp"); - QStringList datafiles; + QStringList files; + + datafilesdir.setNameFilters(acceptedfiles); + files = datafilesdir.entryList(); + - datadir.setNameFilters(acceptedfiles); + //foreach (const QString ¤tfile, datafiles) { + for (int i=0; i foundmasters = mastersmodel->findItems(currentmaster); + + if (foundmasters.isEmpty()) { + // Current master is not found in the master, add it + mastersmodel->appendRow(item); + } + } + + // Add the masters to datafilesmodel + QStandardItem *item = new QStandardItem(masters.join(",")); + QStandardItem *child = new QStandardItem(currentfile); + + QList masteritems = datafilesmodel->findItems(masters.join(",")); + + + if (masteritems.isEmpty()) { + item->appendRow(child); + datafilesmodel->appendRow(item); + } else { + foreach (QStandardItem *currentitem, masteritems) { + currentitem->appendRow(child); + } + } + //if (foundmasters.isEmpty()) { + //datafilesmodel->appendRow(item); + //} + } + + /*for( int r=0; r<5; ++r ) { + QStandardItem *item = new QStandardItem( QString("Morrowind.esm").arg(r)); + + / *for( int i=0; i<3; i++ ) { + QStandardItem *child = new QStandardItem( QString("Master %0 Item %1").arg(r).arg(i)); + //child->setEditable( false ); + item->appendRow( child ); + }* / + + mastersmodel->setItem(r, 0, item); + }*/ + + + pluginsmodel = new QStandardItemModel(0, 1); + masterselectmodel = new QItemSelectionModel(mastersmodel); - datafiles = datadir.entryList(); + tree->setModel(datafilesmodel); + tree->header()->hide(); + + mastertable->setModel(mastersmodel); + mastertable->setSelectionModel(masterselectmodel); - QStandardItem *parentItem = dataFilesModel->invisibleRootItem(); - QStandardItem *masterFile = new QStandardItem(QString("Morrowind.esm")); - parentItem->appendRow(masterFile); - parentItem = masterFile; + mastertable->setSelectionBehavior(QAbstractItemView::SelectRows); + mastertable->setSelectionMode(QAbstractItemView::MultiSelection); + mastertable->setEditTriggers(QAbstractItemView::NoEditTriggers); + mastertable->horizontalHeader()->setStretchLastSection(true); + mastertable->horizontalHeader()->hide(); + + plugintable->setModel(pluginsmodel); + plugintable->setSelectionBehavior(QAbstractItemView::SelectRows); + plugintable->setSelectionMode(QAbstractItemView::MultiSelection); + plugintable->setEditTriggers(QAbstractItemView::NoEditTriggers); + plugintable->horizontalHeader()->setStretchLastSection(true); + plugintable->horizontalHeader()->hide(); + + connect(masterselectmodel, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); + + // Adjust the dialog width + setMinimumWidth(500); +} + +void DataFilesDialog::appendPlugins(const QModelIndex &masterindex) +{ + // Find the plugins in the datafilesmodel and append them to the pluginsmodel + if (!masterindex.isValid()) + return; - QFileIconProvider fip; - QIcon fileIcon = fip.icon(QFileInfo("data/Morrowind.esm")); + for (int r=0; rrowCount(masterindex); ++r ) { + QModelIndex childindex = masterindex.child(r, 0); + + if (childindex.isValid()) { + // Now we see if the pluginsmodel already contains this plugin + QList itemlist = pluginsmodel->findItems(QVariant(datafilesmodel->data(childindex)).toString()); + + if (itemlist.isEmpty()) + { + // Plugin not yet in the pluginsmodel, add it + QStandardItem *item = new QStandardItem(QVariant(datafilesmodel->data(childindex)).toString()); + pluginsmodel->appendRow(item); + } + } - foreach (const QString ¤tfile, datafiles) { - QStandardItem *item = new QStandardItem(currentfile); - item->setIcon(fileIcon); - parentItem->appendRow(item); } +} + +void DataFilesDialog::removePlugins(const QModelIndex &masterindex) +{ + if (!masterindex.isValid()) + return; + + for (int r=0; rrowCount(masterindex); ++r) { + QModelIndex childindex = masterindex.child(r, 0); + + QList itemlist = pluginsmodel->findItems(QVariant(childindex.data()).toString()); + + if (!itemlist.isEmpty()) { + foreach (const QStandardItem *currentitem, itemlist) { + qDebug() << "Remove plugin:" << currentitem->data(Qt::DisplayRole).toString(); + pluginsmodel->removeRow(currentitem->row()); + } + } + } - /* The signal directoryLoaded is emitted after all files are in the model - dataFilesView->setModel(dataFilesModel); -// dataFilesView->setModel(sortModel); +} - // Set the view to the data directory - dataFilesView->setRootIndex(QModelIndex(dataFilesModel->index("data"))); -// dataFilesView->setRootIndex(sortModel->mapFromSource(QModelIndex(dataFilesModel->index("/opt/openmw/data")))); - - dataFilesView->verticalHeader()->hide(); - - //dataFilesView->hideColumn(1); - dataFilesView->hideColumn(3); // Hide Date Modified column - dataFilesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - dataFilesView->verticalHeader()->setDefaultSectionSize(25); //setHeight - - dataFilesView->setSortingEnabled(true); - - dataFilesView->setSelectionBehavior(QAbstractItemView::SelectRows); - dataFilesView->setSelectionModel(selectionModel); - - - dataFilesView->setAlternatingRowColors(true); // Fancy colors! - - dataFilesView->resizeColumnsToContents(); - dataFilesView->horizontalHeader()->setStretchLastSection(true); - - - //sortModel->setSortCaseSensitivity(Qt::CaseInsensitive);*/ +void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) +{ + if (masterselectmodel->hasSelection()) { // Not exactly necessary to check + const QModelIndexList selectedindexes = masterselectmodel->selectedIndexes(); + + QStringList masters; + QString masterstr; + + // Create a QStringList containing all the masters + foreach (const QModelIndex ¤tindex, selectedindexes) { + masters.append(currentindex.data().toString()); + } + + masters.sort(); + masterstr = masters.join(","); // Make a comma-separated QString + + qDebug() << "Masters" << masterstr; + + // Iterate over all masters in the datafilesmodel to see if they are selected + for (int r=0; rrowCount(); ++r) { + QModelIndex currentindex = datafilesmodel->index(r, 0); + QString master = currentindex.data().toString(); + + if (currentindex.isValid()) { + // See if the current master is in the string with selected masters + if (masterstr.contains(master)) + { + // Append the plugins from the current master to pluginsmodel + appendPlugins(currentindex); + } + } + } + } + + // See what plugins to remove + QModelIndexList deselectedindexes = deselected.indexes(); + + if (!deselectedindexes.isEmpty()) { + foreach (const QModelIndex ¤tindex, deselectedindexes) { + QString master = currentindex.data().toString(); + master.prepend("*"); + master.append("*"); + QList itemlist = datafilesmodel->findItems(master, Qt::MatchWildcard); + + if (itemlist.isEmpty()) + qDebug() << "Empty as shit"; + + foreach (const QStandardItem *currentitem, itemlist) { + + QModelIndex index = currentitem->index(); + qDebug() << "Master to remove plugins of:" << index.data().toString(); + + removePlugins(index); + } + } + } } void DataFilesDialog::readConfig() @@ -329,29 +371,11 @@ void DataFilesDialog::restoreDefaults() dataFilesModel->submit(); // Force refresh of view*/ } -void DataFilesDialog::setCheckstate(QModelIndex index) + + +/*void DataFilesDialog::setFilter() { - /* No check if index is valid: doubleclicked() always returns - // a valid index when emitted - - //index = QModelIndex(sortModel->mapToSource(index)); // Get a valid index - index = index.sibling(index.row(), 0); // reset index to first column - // because that's where te checkbox is; makes it possible to doubleclick whole row - - if (!index.isValid()) - return; - - if (dataFilesModel->data(index, Qt::CheckStateRole) == Qt::Checked) { - // Selected row is checked, uncheck it - dataFilesModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); - } else { - dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); - }*/ -} - -void DataFilesDialog::setFilter() -{ - /* + / * QStringList filefilter = (QStringList() << "*.esm" << "*.esp"); QStringList currentfilefilter; @@ -380,5 +404,6 @@ void DataFilesDialog::setFilter() // readConfig(); // dataFilesModel->submit(); // dataFilesModel->setData(); -*/ +* / } +*/ \ No newline at end of file diff --git a/apps/launcher/datafilesdialog.h b/apps/launcher/datafilesdialog.h index 38f4a5826c..69e57083e8 100644 --- a/apps/launcher/datafilesdialog.h +++ b/apps/launcher/datafilesdialog.h @@ -17,7 +17,10 @@ class QSortFilterProxyModel; #include class QTreeView; +class QTableView; class QStandardItemModel; +class QItemSelectionModel; +class QItemSelection; class DataFilesDialog : public QDialog { @@ -28,9 +31,9 @@ public: // ~DataFilesDialog() { }; private: - QStandardItemModel *dataFilesModel; + //QStandardItemModel *dataFilesModel; - QTreeView *dataFilesView; + //QTreeView *dataFilesView; //QItemSelectionModel *selectionModel; //QSortFilterProxyModel *sortModel; @@ -38,18 +41,33 @@ private: //LineEdit *lineFilter; //QPlainTextEdit *textDesc; //QPlainTextEdit *textDepends; + QModelIndexList *masterindexes; + QStandardItemModel *datafilesmodel; + QStandardItemModel *mastersmodel; + QStandardItemModel *pluginsmodel; + + QItemSelectionModel *masterselectmodel; + + QTreeView *tree; + + QTableView *mastertable; + QTableView *plugintable; + + void appendPlugins(const QModelIndex &masterindex); + void removePlugins(const QModelIndex &masterindex); public slots: - void changeData(QModelIndex top, QModelIndex bottom); // edit + //void changeData(QModelIndex top, QModelIndex bottom); // edit void restoreDefaults(); void readConfig(); void writeConfig(); - void setupView(); + //void setupView(); - void setFilter(); - void setCheckstate(QModelIndex index); + void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + //void setFilter(); + //void setCheckstate(QModelIndex index); // void doubleClicked(QModelIndex index); }; From fbdc10f0b0cde5b9699679b13d0e48fa3c90a181 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 4 Apr 2011 18:32:38 +0200 Subject: [PATCH 010/111] Removed some leftover files and more testing --- apps/launcher/CMakeLists.txt | 6 -- apps/launcher/datafilesdialog.cpp | 125 +++++++++++++++++++++++- apps/launcher/datafilesdialog.h | 7 +- apps/launcher/datafilesmodel.cpp | 155 ------------------------------ apps/launcher/datafilesmodel.h | 35 ------- 5 files changed, 128 insertions(+), 200 deletions(-) delete mode 100644 apps/launcher/datafilesmodel.cpp delete mode 100644 apps/launcher/datafilesmodel.h diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index fe29375d96..bb0af03b8a 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -1,14 +1,10 @@ set(LAUNCHER datafilesdialog.cpp - datafilesmodel.cpp - datafilesitem.cpp lineedit.cpp main.cpp maindialog.cpp settingsdialog.cpp datafilesdialog.h - datafilesmodel.h - datafilesitem.h lineedit.h maindialog.h settingsdialog.h @@ -16,8 +12,6 @@ set(LAUNCHER SET(MOC_HDRS datafilesdialog.h - datafilesmodel.h - datafilesitem.h lineedit.h maindialog.h settingsdialog.h diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index f00cfdfe8f..9b9733dedf 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -2,6 +2,7 @@ #include #include "datafilesdialog.h" +//#include "pluginitemmodel.h" //#include "datafilesmodel.h" //#include "datafilesitem.h" @@ -14,6 +15,28 @@ DataFilesDialog::DataFilesDialog() mastertable = new QTableView(this); plugintable = new QTableView(this); + /* listtest + QTableWidget *pluginlist = new QTableWidget(this); + + pluginlist->horizontalHeader()->setStretchLastSection(true); + pluginlist->insertColumn(0); + + for (unsigned int i=0; i<6; ++i) { + pluginlist->insertRow(i); + QTableWidgetItem *item = new QTableWidgetItem(QString("Plugin %0").arg(i)); + item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); + pluginlist->setItem(i, 0, item); + } + + pluginlist->insertRow(6); + pluginlist->setSelectionMode(QAbstractItemView::SingleSelection); // single item can be draged or droped + pluginlist->setDragEnabled(true); + pluginlist->setDragDropMode(QAbstractItemView::InternalMove); + pluginlist->viewport()->setAcceptDrops(true); + + pluginlist->setDropIndicatorShown(true); + */ + splitter->setOrientation(Qt::Vertical); splitter->addWidget(tree); splitter->addWidget(mastertable); @@ -63,6 +86,7 @@ DataFilesDialog::DataFilesDialog() // Add the masters to mastersmodel foreach (const QString ¤tmaster, masters) { QStandardItem *item = new QStandardItem(currentmaster); + item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); QList foundmasters = mastersmodel->findItems(currentmaster); @@ -74,7 +98,9 @@ DataFilesDialog::DataFilesDialog() // Add the masters to datafilesmodel QStandardItem *item = new QStandardItem(masters.join(",")); + item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); QStandardItem *child = new QStandardItem(currentfile); + child->setFlags(child->flags() & ~(Qt::ItemIsDropEnabled)); QList masteritems = datafilesmodel->findItems(masters.join(",")); @@ -84,6 +110,7 @@ DataFilesDialog::DataFilesDialog() datafilesmodel->appendRow(item); } else { foreach (QStandardItem *currentitem, masteritems) { + currentitem->setFlags(currentitem->flags() & ~(Qt::ItemIsDropEnabled)); currentitem->appendRow(child); } } @@ -106,7 +133,12 @@ DataFilesDialog::DataFilesDialog() pluginsmodel = new QStandardItemModel(0, 1); + pluginsmodel->setSupportedDragActions(Qt::MoveAction); + pluginsmodel->invisibleRootItem()->setFlags(Qt::ItemIsDropEnabled); + + masterselectmodel = new QItemSelectionModel(mastersmodel); + pluginselectmodel = new QItemSelectionModel(pluginsmodel); tree->setModel(datafilesmodel); tree->header()->hide(); @@ -121,14 +153,26 @@ DataFilesDialog::DataFilesDialog() mastertable->horizontalHeader()->hide(); plugintable->setModel(pluginsmodel); + plugintable->setSelectionModel(pluginselectmodel); plugintable->setSelectionBehavior(QAbstractItemView::SelectRows); - plugintable->setSelectionMode(QAbstractItemView::MultiSelection); + plugintable->setSelectionMode(QAbstractItemView::SingleSelection); plugintable->setEditTriggers(QAbstractItemView::NoEditTriggers); plugintable->horizontalHeader()->setStretchLastSection(true); plugintable->horizontalHeader()->hide(); + + plugintable->setDragEnabled(true); + plugintable->setDragDropMode(QAbstractItemView::InternalMove); + plugintable->setDropIndicatorShown(true); + plugintable->setDragDropOverwriteMode(false); + plugintable->viewport()->setAcceptDrops(true); + + plugintable->setContextMenuPolicy(Qt::CustomContextMenu); + connect(masterselectmodel, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); - + connect(plugintable, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); + connect(plugintable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); + // Adjust the dialog width setMinimumWidth(500); } @@ -150,6 +194,8 @@ void DataFilesDialog::appendPlugins(const QModelIndex &masterindex) { // Plugin not yet in the pluginsmodel, add it QStandardItem *item = new QStandardItem(QVariant(datafilesmodel->data(childindex)).toString()); + item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); + item->setCheckable(true); pluginsmodel->appendRow(item); } } @@ -238,6 +284,78 @@ void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, con } } +void DataFilesDialog::showContextMenu(const QPoint &point) +{ + qDebug() << "Show me the money!"; + + + + QAction *action1 = new QAction(QIcon::fromTheme("arrow-up-double"), tr("Move to Top"), this); + QAction *action2 = new QAction(QIcon::fromTheme("arrow-down-double"), tr("Move to Bottom"), this); + QAction *action3 = new QAction(QIcon::fromTheme("arrow-up"), tr("Move Up"), this); + QAction *action4 = new QAction(QIcon::fromTheme("arrow-down"), tr("Move Down"), this); + QAction *action5 = new QAction(this); + + QModelIndex index = plugintable->indexAt(point); + + if (index.isValid()) { // Should be valid! + const QStandardItem *item = pluginsmodel->itemFromIndex(index); + + if (item->checkState() == Qt::Checked) { + action5->setText("Uncheck Item"); + } else if (item->checkState() == Qt::Unchecked) { + action5->setText("Check Item"); + } + } + + connect(action5, SIGNAL(triggered()), this, SLOT(actionCheckstate())); + + QMenu menu(this); + menu.addAction(action1); + menu.addAction(action2); + menu.addSeparator(); + menu.addAction(action3); + menu.addAction(action4); + menu.addSeparator(); + menu.addAction(action5); + + menu.exec(plugintable->viewport()->mapToGlobal(point)); + +} + +void DataFilesDialog::actionCheckstate() +{ + qDebug() << "actionCheckstate"; + + const QModelIndexList selectedindexes = pluginselectmodel->selectedIndexes(); + + // Should only be one index selected + foreach (const QModelIndex ¤tindex, selectedindexes) { + setCheckstate(currentindex); + } + +} + +void DataFilesDialog::setCheckstate(QModelIndex index) +{ + // No check if index is valid: doubleclicked() always returns + // a valid index when emitted + + //index = QModelIndex(sortModel->mapToSource(index)); // Get a valid index + index = index.sibling(index.row(), 0); // reset index to first column + // because that's where te checkbox is; makes it possible to doubleclick whole row + + if (!index.isValid()) + return; + + if (pluginsmodel->data(index, Qt::CheckStateRole) == Qt::Checked) { + // Selected row is checked, uncheck it + pluginsmodel->setData(index, Qt::Unchecked, Qt::CheckStateRole); + } else { + pluginsmodel->setData(index, Qt::Checked, Qt::CheckStateRole); + } +} + void DataFilesDialog::readConfig() { /* QString filename; @@ -406,4 +524,5 @@ void DataFilesDialog::restoreDefaults() // dataFilesModel->setData(); * / } -*/ \ No newline at end of file +*/ + diff --git a/apps/launcher/datafilesdialog.h b/apps/launcher/datafilesdialog.h index 69e57083e8..9a718f3f53 100644 --- a/apps/launcher/datafilesdialog.h +++ b/apps/launcher/datafilesdialog.h @@ -16,6 +16,7 @@ class QSortFilterProxyModel; #include #include +class PluginItemModel; class QTreeView; class QTableView; class QStandardItemModel; @@ -48,6 +49,7 @@ private: QStandardItemModel *pluginsmodel; QItemSelectionModel *masterselectmodel; + QItemSelectionModel *pluginselectmodel; QTreeView *tree; @@ -63,11 +65,14 @@ public slots: void restoreDefaults(); void readConfig(); void writeConfig(); + void showContextMenu(const QPoint &point); + + void actionCheckstate(); //void setupView(); void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); //void setFilter(); - //void setCheckstate(QModelIndex index); + void setCheckstate(QModelIndex index); // void doubleClicked(QModelIndex index); }; diff --git a/apps/launcher/datafilesmodel.cpp b/apps/launcher/datafilesmodel.cpp deleted file mode 100644 index 0eb68ab4c6..0000000000 --- a/apps/launcher/datafilesmodel.cpp +++ /dev/null @@ -1,155 +0,0 @@ -#include - -#include "datafilesitem.h" -#include "datafilesmodel.h" - -//DataFilesModel::DataFilesModel(const QString &data, QObject *parent) -DataFilesModel::DataFilesModel(QObject *parent) - : QAbstractItemModel(parent) -{ - QList rootData; - rootData << " "; - //rootItem = new DataFilesItem(rootData); - rootItem = new DataFilesItem(rootData); - //setupModelData(data.split(QString("\n")), rootItem); -} - -DataFilesModel::~DataFilesModel() -{ - delete rootItem; -} - -int DataFilesModel::columnCount(const QModelIndex &parent) const -{ - if (parent.isValid()) - return static_cast(parent.internalPointer())->columnCount(); - else - return rootItem->columnCount(); -} - -QVariant DataFilesModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - if (role != Qt::DisplayRole) - return QVariant(); - - DataFilesItem *item = static_cast(index.internalPointer()); - - return item->data(index.column()); -} - -Qt::ItemFlags DataFilesModel::flags(const QModelIndex &index) const -{ - if (!index.isValid()) - return 0; - - return Qt::ItemIsEnabled | Qt::ItemIsSelectable; -} - -QVariant DataFilesModel::headerData(int section, Qt::Orientation orientation, - int role) const -{ - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) - return rootItem->data(section); - - return QVariant(); -} - -QModelIndex DataFilesModel::index(int row, int column, const QModelIndex &parent) - const -{ - if (!hasIndex(row, column, parent)) - return QModelIndex(); - - DataFilesItem *parentItem; - - if (!parent.isValid()) - parentItem = rootItem; - else - parentItem = static_cast(parent.internalPointer()); - - DataFilesItem *childItem = parentItem->child(row); - if (childItem) - return createIndex(row, column, childItem); - else - return QModelIndex(); -} - -QModelIndex DataFilesModel::parent(const QModelIndex &index) const -{ - if (!index.isValid()) - return QModelIndex(); - - DataFilesItem *childItem = static_cast(index.internalPointer()); - DataFilesItem *parentItem = childItem->parent(); - - if (parentItem == rootItem) - return QModelIndex(); - - return createIndex(parentItem->row(), 0, parentItem); -} - -int DataFilesModel::rowCount(const QModelIndex &parent) const -{ - DataFilesItem *parentItem; - if (parent.column() > 0) - return 0; - - if (!parent.isValid()) - parentItem = rootItem; - else - parentItem = static_cast(parent.internalPointer()); - - return parentItem->childCount(); -} - -/*void DataFilesModel::setupModelData(const QStringList &lines, DataFilesItem *parent) -{ - QList parents; - QList indentations; - parents << parent; - indentations << 0; - - int number = 0; - - while (number < lines.count()) { - int position = 0; - while (position < lines[number].length()) { - if (lines[number].mid(position, 1) != " ") - break; - position++; - } - - QString lineData = lines[number].mid(position).trimmed(); - - if (!lineData.isEmpty()) { - // Read the column data from the rest of the line. - QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts); - QList columnData; - for (int column = 0; column < columnStrings.count(); ++column) - columnData << columnStrings[column]; - - if (position > indentations.last()) { - // The last child of the current parent is now the new parent - // unless the current parent has no children. - - if (parents.last()->childCount() > 0) { - parents << parents.last()->child(parents.last()->childCount()-1); - indentations << position; - } - } else { - while (position < indentations.last() && parents.count() > 0) { - parents.pop_back(); - indentations.pop_back(); - } - } - - // Append a new item to the current parent's list of children. - parents.last()->appendChild(new DataFilesItem(columnData, parents.last())); - } - - number++; - } -}*/ \ No newline at end of file diff --git a/apps/launcher/datafilesmodel.h b/apps/launcher/datafilesmodel.h deleted file mode 100644 index bf2184dcdb..0000000000 --- a/apps/launcher/datafilesmodel.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef DATAFILESMODEL_H -#define DATAFILESMODEL_H - -#include -#include -#include - -class DataFilesItem; - -class DataFilesModel : public QAbstractItemModel -{ - Q_OBJECT - -public: - //DataFilesModel(const QString &data, QObject *parent = 0); - DataFilesModel(QObject *parent = 0); - ~DataFilesModel(); - - QVariant data(const QModelIndex &index, int role) const; - Qt::ItemFlags flags(const QModelIndex &index) const; - QVariant headerData(int section, Qt::Orientation orientation, - int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column, - const QModelIndex &parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - -private: - //void setupModelData(const QStringList &lines, TreeItem *parent); - - DataFilesItem *rootItem; -}; - -#endif \ No newline at end of file From 73f2fdfa7213726b753c904bb1cb51766b2f6717 Mon Sep 17 00:00:00 2001 From: Jan-Peter Nilsson Date: Fri, 1 Apr 2011 23:23:44 +0200 Subject: [PATCH 011/111] Update default version and add libbullet2.77 as a dependency --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a18751aad..53ba4ab31e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,7 +347,7 @@ if(DPKG_PROGRAM) set(PACKAGE_MAINTAINER "${GIT_NAME} <${GIT_EMAIL}>") else() #FIXME this should probably be read from some file like ${CMAKE_CURRENT_SOURCE_DIR}/VERSION or something that gets updated when changing version - set(VERSION_STRING "0.9.0") + set(VERSION_STRING "0.10.0") set(PACKAGE_MAINTAINER "unknown") endif() @@ -370,7 +370,7 @@ if(DPKG_PROGRAM) SET(CPACK_DEBIAN_PACKAGE_NAME "openmw") SET(CPACK_DEBIAN_PACKAGE_VERSION "${VERSION_STRING}") SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW") - SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogremain-1.7.1 (>= 1.7.1-1), libboost-filesystem1.42.0 (>= 1.42.0), libboost-program-options1.42.0 (>= 1.42.0), libboost-system1.42.0 (>= 1.42.0), libboost-thread1.42.0 (>= 1.42.0), libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.2.0 (>= 1.2.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2)") + SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogremain-1.7.1 (>= 1.7.1-1), libbullet2.77 (>= 2.77), libboost-filesystem1.42.0 (>= 1.42.0), libboost-program-options1.42.0 (>= 1.42.0), libboost-system1.42.0 (>= 1.42.0), libboost-thread1.42.0 (>= 1.42.0), libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.2.0 (>= 1.2.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2)") SET(CPACK_DEBIAN_PACKAGE_SECTION "Games") From b22234109dc56c16edd296347091eeffcf8adebb Mon Sep 17 00:00:00 2001 From: Jan-Peter Nilsson Date: Fri, 1 Apr 2011 23:25:22 +0200 Subject: [PATCH 012/111] Remove unused variable (compiler warning) --- apps/openmw/mwrender/mwscene.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/openmw/mwrender/mwscene.cpp b/apps/openmw/mwrender/mwscene.cpp index 6fab00850f..5117f7eb87 100644 --- a/apps/openmw/mwrender/mwscene.cpp +++ b/apps/openmw/mwrender/mwscene.cpp @@ -63,7 +63,6 @@ MWScene::~MWScene() std::pair MWScene::getFacedHandle (MWWorld::World& world) { std::string handle = ""; - float distance = -1; //get a ray pointing to the center of the viewport Ray centerRay = getCamera()->getCameraToViewportRay( From 6aa1f3efdd1aa0882b04c1e4495ff3ba1db53416 Mon Sep 17 00:00:00 2001 From: Jan-Peter Nilsson Date: Fri, 1 Apr 2011 23:35:56 +0200 Subject: [PATCH 013/111] Whitespace changes only tabs->spaces and removal of traling space (including mangle and openengline) --- apps/openmw/engine.hpp | 2 +- apps/openmw/mwrender/mwscene.cpp | 88 ++--- apps/openmw/mwrender/mwscene.hpp | 2 +- apps/openmw/mwworld/world.cpp | 4 +- apps/openmw/mwworld/world.hpp | 2 +- components/interpreter/installopcodes.cpp | 86 ++--- components/nif/nif_file.cpp | 4 +- components/nifbullet/bullet_nif_loader.cpp | 360 ++++++++++----------- components/nifbullet/bullet_nif_loader.hpp | 86 ++--- components/nifbullet/test/test.cpp | 270 ++++++++-------- libs/mangle | 2 +- libs/openengine | 2 +- 12 files changed, 454 insertions(+), 454 deletions(-) diff --git a/apps/openmw/engine.hpp b/apps/openmw/engine.hpp index 5e38ab28f6..2f8a5b1d2e 100644 --- a/apps/openmw/engine.hpp +++ b/apps/openmw/engine.hpp @@ -60,7 +60,7 @@ namespace OMW boost::filesystem::path mDataDir; boost::filesystem::path mResDir; OEngine::Render::OgreRenderer mOgre; - OEngine::Physic::PhysicEngine* mPhysicEngine; + OEngine::Physic::PhysicEngine* mPhysicEngine; std::string mCellName; std::string mMaster; bool mShowFPS; diff --git a/apps/openmw/mwrender/mwscene.cpp b/apps/openmw/mwrender/mwscene.cpp index 5117f7eb87..890bf2cd6c 100644 --- a/apps/openmw/mwrender/mwscene.cpp +++ b/apps/openmw/mwrender/mwscene.cpp @@ -20,37 +20,37 @@ using namespace MWRender; using namespace Ogre; MWScene::MWScene(OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng) - : rend(_rend) + : rend(_rend) { - eng = physEng; - rend.createScene("PlayerCam", 55, 5); + eng = physEng; + rend.createScene("PlayerCam", 55, 5); - // Set default mipmap level (NB some APIs ignore this) - TextureManager::getSingleton().setDefaultNumMipmaps(5); + // Set default mipmap level (NB some APIs ignore this) + TextureManager::getSingleton().setDefaultNumMipmaps(5); - // Load resources - ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); + // Load resources + ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); - // Turn the entire scene (represented by the 'root' node) -90 - // degrees around the x axis. This makes Z go upwards, and Y go into - // the screen (when x is to the right.) This is the orientation that - // Morrowind uses, and it automagically makes everything work as it - // should. - SceneNode *rt = rend.getScene()->getRootSceneNode(); - mwRoot = rt->createChildSceneNode(); - mwRoot->pitch(Degree(-90)); + // Turn the entire scene (represented by the 'root' node) -90 + // degrees around the x axis. This makes Z go upwards, and Y go into + // the screen (when x is to the right.) This is the orientation that + // Morrowind uses, and it automagically makes everything work as it + // should. + SceneNode *rt = rend.getScene()->getRootSceneNode(); + mwRoot = rt->createChildSceneNode(); + mwRoot->pitch(Degree(-90)); - //used to obtain ingame information of ogre objects (which are faced or selected) - mRaySceneQuery = rend.getScene()->createRayQuery(Ray()); + //used to obtain ingame information of ogre objects (which are faced or selected) + mRaySceneQuery = rend.getScene()->createRayQuery(Ray()); - Ogre::SceneNode *playerNode = mwRoot->createChildSceneNode(); - playerNode->pitch(Degree(90)); - Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); - Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); - cameraPitchNode->attachObject(getCamera()); + Ogre::SceneNode *playerNode = mwRoot->createChildSceneNode(); + playerNode->pitch(Degree(90)); + Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); + Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); + cameraPitchNode->attachObject(getCamera()); - mPlayer = new MWRender::Player (getCamera(), playerNode->getName()); + mPlayer = new MWRender::Player (getCamera(), playerNode->getName()); mFreeFly = true; } @@ -82,8 +82,8 @@ void MWScene::doPhysics (float duration, MWWorld::World& world, // stop changes to world from being reported back to the physics system MWWorld::DoingPhysics scopeGuard; - //set the DebugRenderingMode. To disable it,set it to 0 -// eng->setDebugRenderingMode(1); + //set the DebugRenderingMode. To disable it,set it to 0 + //eng->setDebugRenderingMode(1); //set the walkdirection to 0 (no movement) for every actor) for(std::map::iterator it = eng->PhysicActorMap.begin(); it != eng->PhysicActorMap.end();it++) @@ -95,7 +95,7 @@ void MWScene::doPhysics (float duration, MWWorld::World& world, for (std::vector >::const_iterator iter (actors.begin()); iter!=actors.end(); ++iter) { - OEngine::Physic::PhysicActor* act = eng->getCharacter(iter->first); + OEngine::Physic::PhysicActor* act = eng->getCharacter(iter->first); //dirty stuff to get the camera orientation. Must be changed! @@ -117,46 +117,46 @@ void MWScene::doPhysics (float duration, MWWorld::World& world, dir = 0.025*(quat*dir1); } - //set the walk direction - act->setWalkDirection(btVector3(dir.x,-dir.z,dir.y)); + //set the walk direction + act->setWalkDirection(btVector3(dir.x,-dir.z,dir.y)); } - eng->stepSimulation(duration); + eng->stepSimulation(duration); for(std::map::iterator it = eng->PhysicActorMap.begin(); it != eng->PhysicActorMap.end();it++) { OEngine::Physic::PhysicActor* act = it->second; - btVector3 newPos = act->getPosition(); + btVector3 newPos = act->getPosition(); MWWorld::Ptr ptr = world.getPtrViaHandle (it->first); - world.moveObject (ptr, newPos.x(), newPos.y(), newPos.z()); + world.moveObject (ptr, newPos.x(), newPos.y(), newPos.z()); } } void MWScene::addObject (const std::string& handle, const std::string& mesh, const Ogre::Quaternion& rotation, float scale, const Ogre::Vector3& position) { - OEngine::Physic::RigidBody* body = eng->createRigidBody(mesh,handle); - eng->addRigidBody(body); - btTransform tr; - tr.setOrigin(btVector3(position.x,position.y,position.z)); - tr.setRotation(btQuaternion(rotation.x,rotation.y,rotation.z,rotation.w)); - body->setWorldTransform(tr); + OEngine::Physic::RigidBody* body = eng->createRigidBody(mesh,handle); + eng->addRigidBody(body); + btTransform tr; + tr.setOrigin(btVector3(position.x,position.y,position.z)); + tr.setRotation(btQuaternion(rotation.x,rotation.y,rotation.z,rotation.w)); + body->setWorldTransform(tr); } void MWScene::addActor (const std::string& handle, const std::string& mesh, const Ogre::Vector3& position) { - //TODO:optimize this. Searching the std::map isn't very efficient i think. - eng->addCharacter(handle); - OEngine::Physic::PhysicActor* act = eng->getCharacter(handle); - act->setPosition(btVector3(position.x,position.y,position.z)); + //TODO:optimize this. Searching the std::map isn't very efficient i think. + eng->addCharacter(handle); + OEngine::Physic::PhysicActor* act = eng->getCharacter(handle); + act->setPosition(btVector3(position.x,position.y,position.z)); } void MWScene::removeObject (const std::string& handle) { - //TODO:check if actor??? + //TODO:check if actor??? eng->removeCharacter(handle); - eng->removeRigidBody(handle); - eng->deleteRigidBody(handle); + eng->removeRigidBody(handle); + eng->deleteRigidBody(handle); } void MWScene::moveObject (const std::string& handle, const Ogre::Vector3& position, bool updatePhysics) diff --git a/apps/openmw/mwrender/mwscene.hpp b/apps/openmw/mwrender/mwscene.hpp index aa567f7def..fd14fcce01 100644 --- a/apps/openmw/mwrender/mwscene.hpp +++ b/apps/openmw/mwrender/mwscene.hpp @@ -40,7 +40,7 @@ namespace MWRender Ogre::SceneNode *mwRoot; Ogre::RaySceneQuery *mRaySceneQuery; - OEngine::Physic::PhysicEngine* eng; + OEngine::Physic::PhysicEngine* eng; MWRender::Player *mPlayer; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index c08dc420bb..63019349c8 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -412,7 +412,7 @@ namespace MWWorld : mSkyManager (0), mScene (renderer,physEng), mPlayer (0), mCurrentCell (0), mGlobalVariables (0), mSky (false), mCellChanged (false), mEnvironment (environment) { - mPhysEngine = physEng; + mPhysEngine = physEng; boost::filesystem::path masterPath (dataDir); masterPath /= master; @@ -437,7 +437,7 @@ namespace MWWorld mSkyManager = MWRender::SkyManager::create(renderer.getWindow(), mScene.getCamera(), resDir); - mPhysEngine = physEng; + mPhysEngine = physEng; } World::~World() diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index d64fa57be1..6965aebc6a 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -75,7 +75,7 @@ namespace MWWorld bool mCellChanged; Environment& mEnvironment; - OEngine::Physic::PhysicEngine* mPhysEngine; + OEngine::Physic::PhysicEngine* mPhysEngine; // not implemented World (const World&); diff --git a/components/interpreter/installopcodes.cpp b/components/interpreter/installopcodes.cpp index 2e22d10e5c..f383ff47c2 100644 --- a/components/interpreter/installopcodes.cpp +++ b/components/interpreter/installopcodes.cpp @@ -24,23 +24,23 @@ namespace Interpreter interpreter.installSegment5 (8, new OpNegateFloat); interpreter.installSegment5 (17, new OpIntToFloat1); interpreter.installSegment5 (18, new OpFloatToInt1); - + // local variables, global variables & literals interpreter.installSegment5 (0, new OpStoreLocalShort); interpreter.installSegment5 (1, new OpStoreLocalLong); - interpreter.installSegment5 (2, new OpStoreLocalFloat); - interpreter.installSegment5 (4, new OpFetchIntLiteral); - interpreter.installSegment5 (5, new OpFetchFloatLiteral); + interpreter.installSegment5 (2, new OpStoreLocalFloat); + interpreter.installSegment5 (4, new OpFetchIntLiteral); + interpreter.installSegment5 (5, new OpFetchFloatLiteral); interpreter.installSegment5 (21, new OpFetchLocalShort); interpreter.installSegment5 (22, new OpFetchLocalLong); - interpreter.installSegment5 (23, new OpFetchLocalFloat); + interpreter.installSegment5 (23, new OpFetchLocalFloat); interpreter.installSegment5 (39, new OpStoreGlobalShort); interpreter.installSegment5 (40, new OpStoreGlobalLong); - interpreter.installSegment5 (41, new OpStoreGlobalFloat); + interpreter.installSegment5 (41, new OpStoreGlobalFloat); interpreter.installSegment5 (42, new OpFetchGlobalShort); interpreter.installSegment5 (43, new OpFetchGlobalLong); - interpreter.installSegment5 (44, new OpFetchGlobalFloat); - + interpreter.installSegment5 (44, new OpFetchGlobalFloat); + // math interpreter.installSegment5 (9, new OpAddInt); interpreter.installSegment5 (10, new OpAddInt); @@ -50,57 +50,57 @@ namespace Interpreter interpreter.installSegment5 (14, new OpMulInt); interpreter.installSegment5 (15, new OpDivInt); interpreter.installSegment5 (16, new OpDivInt); - interpreter.installSegment5 (19, new OpSquareRoot); - interpreter.installSegment5 (26, - new OpCompare >); - interpreter.installSegment5 (27, - new OpCompare >); - interpreter.installSegment5 (28, - new OpCompare >); - interpreter.installSegment5 (29, - new OpCompare >); - interpreter.installSegment5 (30, - new OpCompare >); - interpreter.installSegment5 (31, - new OpCompare >); - - interpreter.installSegment5 (32, - new OpCompare >); - interpreter.installSegment5 (33, - new OpCompare >); - interpreter.installSegment5 (34, - new OpCompare >); - interpreter.installSegment5 (35, - new OpCompare >); - interpreter.installSegment5 (36, - new OpCompare >); - interpreter.installSegment5 (37, - new OpCompare >); - + interpreter.installSegment5 (19, new OpSquareRoot); + interpreter.installSegment5 (26, + new OpCompare >); + interpreter.installSegment5 (27, + new OpCompare >); + interpreter.installSegment5 (28, + new OpCompare >); + interpreter.installSegment5 (29, + new OpCompare >); + interpreter.installSegment5 (30, + new OpCompare >); + interpreter.installSegment5 (31, + new OpCompare >); + + interpreter.installSegment5 (32, + new OpCompare >); + interpreter.installSegment5 (33, + new OpCompare >); + interpreter.installSegment5 (34, + new OpCompare >); + interpreter.installSegment5 (35, + new OpCompare >); + interpreter.installSegment5 (36, + new OpCompare >); + interpreter.installSegment5 (37, + new OpCompare >); + // control structures - interpreter.installSegment5 (20, new OpReturn); + interpreter.installSegment5 (20, new OpReturn); interpreter.installSegment5 (24, new OpSkipZero); interpreter.installSegment5 (25, new OpSkipNonZero); interpreter.installSegment0 (1, new OpJumpForward); interpreter.installSegment0 (2, new OpJumpBackward); - + // misc - interpreter.installSegment3 (0, new OpMessageBox); - interpreter.installSegment5 (38, new OpMenuMode); - interpreter.installSegment5 (45, new OpRandom); - interpreter.installSegment5 (50, new OpGetSecondsPassed); + interpreter.installSegment3 (0, new OpMessageBox); + interpreter.installSegment5 (38, new OpMenuMode); + interpreter.installSegment5 (45, new OpRandom); + interpreter.installSegment5 (50, new OpGetSecondsPassed); interpreter.installSegment5 (51, new OpEnable); interpreter.installSegment5 (52, new OpDisable); interpreter.installSegment5 (53, new OpGetDisabled); interpreter.installSegment5 (54, new OpEnableExplicit); interpreter.installSegment5 (55, new OpDisableExplicit); interpreter.installSegment5 (56, new OpGetDisabledExplicit); - + // script control interpreter.installSegment5 (46, new OpScriptRunning); interpreter.installSegment5 (47, new OpStartScript); interpreter.installSegment5 (48, new OpStopScript); - + // spacial interpreter.installSegment5 (49, new OpGetDistance); interpreter.installSegment5 (57, new OpGetDistanceExplicit); diff --git a/components/nif/nif_file.cpp b/components/nif/nif_file.cpp index 6a4eb337c2..3c7d7fb17c 100644 --- a/components/nif/nif_file.cpp +++ b/components/nif/nif_file.cpp @@ -92,8 +92,8 @@ void NIFFile::parse() else if(rec == "NiRotatingParticles") { r = new NiRotatingParticles; r->recType = RC_NiRotatingParticles; } else if(rec == "NiAutoNormalParticles") { r = new NiAutoNormalParticles; r->recType = RC_NiAutoNormalParticles; } else if(rec == "NiCamera") { r = new NiCamera; r->recType = RC_NiCamera; } - else if(rec == "RootCollisionNode"){ r = new NiNode; r->recType = RC_RootCollisionNode; }// a root collision node is exactly like a node - //that's why there is no need to create a new type + else if(rec == "RootCollisionNode"){ r = new NiNode; r->recType = RC_RootCollisionNode; }// a root collision node is exactly like a node + //that's why there is no need to create a new type // Properties else if(rec == "NiTexturingProperty") { r = new NiTexturingProperty; r->recType = RC_NiTexturingProperty; } diff --git a/components/nifbullet/bullet_nif_loader.cpp b/components/nifbullet/bullet_nif_loader.cpp index b3fd9019c7..1ff78023d9 100644 --- a/components/nifbullet/bullet_nif_loader.cpp +++ b/components/nifbullet/bullet_nif_loader.cpp @@ -54,264 +54,264 @@ using namespace Mangle::VFS; //==================================================================================================== Ogre::Matrix3 ManualBulletShapeLoader::getMatrix(Nif::Transformation* tr) { - Ogre::Matrix3 rot(tr->rotation.v[0].array[0],tr->rotation.v[0].array[1],tr->rotation.v[0].array[2], - tr->rotation.v[1].array[0],tr->rotation.v[1].array[1],tr->rotation.v[1].array[2], - tr->rotation.v[2].array[0],tr->rotation.v[2].array[1],tr->rotation.v[2].array[2]); - return rot; + Ogre::Matrix3 rot(tr->rotation.v[0].array[0],tr->rotation.v[0].array[1],tr->rotation.v[0].array[2], + tr->rotation.v[1].array[0],tr->rotation.v[1].array[1],tr->rotation.v[1].array[2], + tr->rotation.v[2].array[0],tr->rotation.v[2].array[1],tr->rotation.v[2].array[2]); + return rot; } Ogre::Vector3 ManualBulletShapeLoader::getVector(Nif::Transformation* tr) { - Ogre::Vector3 vect3(tr->pos.array[0],tr->pos.array[1],tr->pos.array[2]); - return vect3; + Ogre::Vector3 vect3(tr->pos.array[0],tr->pos.array[1],tr->pos.array[2]); + return vect3; } btQuaternion ManualBulletShapeLoader::getbtQuat(Ogre::Matrix3 m) { - Ogre::Quaternion oquat(m); - btQuaternion quat; - quat.setW(oquat.w); - quat.setX(oquat.x); - quat.setY(oquat.y); - quat.setZ(oquat.z); - return quat; + Ogre::Quaternion oquat(m); + btQuaternion quat; + quat.setW(oquat.w); + quat.setX(oquat.x); + quat.setY(oquat.y); + quat.setZ(oquat.z); + return quat; } btVector3 ManualBulletShapeLoader::getbtVector(Nif::Vector v) { - btVector3 a(v.array[0],v.array[1],v.array[2]); - return a; + btVector3 a(v.array[0],v.array[1],v.array[2]); + return a; } void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource) { - cShape = static_cast(resource); - resourceName = cShape->getName(); + cShape = static_cast(resource); + resourceName = cShape->getName(); cShape->collide = false; - currentShape = new btCompoundShape(); - cShape->Shape = currentShape; + currentShape = new btCompoundShape(); + cShape->Shape = currentShape; - if (!vfs) vfs = new OgreVFS(resourceGroup); + if (!vfs) vfs = new OgreVFS(resourceGroup); - if (!vfs->isFile(resourceName)) - { - warn("File not found."); - return; - } + if (!vfs->isFile(resourceName)) + { + warn("File not found."); + return; + } - // Load the NIF. TODO: Wrap this in a try-catch block once we're out - // of the early stages of development. Right now we WANT to catch - // every error as early and intrusively as possible, as it's most - // likely a sign of incomplete code rather than faulty input. - Nif::NIFFile nif(vfs->open(resourceName), resourceName); + // Load the NIF. TODO: Wrap this in a try-catch block once we're out + // of the early stages of development. Right now we WANT to catch + // every error as early and intrusively as possible, as it's most + // likely a sign of incomplete code rather than faulty input. + Nif::NIFFile nif(vfs->open(resourceName), resourceName); - if (nif.numRecords() < 1) - { - warn("Found no records in NIF."); - return; - } + if (nif.numRecords() < 1) + { + warn("Found no records in NIF."); + return; + } - // The first record is assumed to be the root node - Nif::Record *r = nif.getRecord(0); - assert(r != NULL); + // The first record is assumed to be the root node + Nif::Record *r = nif.getRecord(0); + assert(r != NULL); - Nif::Node *node = dynamic_cast(r); + Nif::Node *node = dynamic_cast(r); - if (node == NULL) - { - warn("First record in file was not a node, but a " + - r->recName.toString() + ". Skipping file."); - return; - } + if (node == NULL) + { + warn("First record in file was not a node, but a " + + r->recName.toString() + ". Skipping file."); + return; + } bool hasCollisionNode = hasRootCollisionNode(node); //do a first pass - handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,false); + handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,false); //if collide = false, then it does a second pass which create a shape for raycasting. if(cShape->collide == false) { - handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,true); + handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,true); } } bool ManualBulletShapeLoader::hasRootCollisionNode(Nif::Node* node) { - if (node->recType == Nif::RC_NiNode) - { - Nif::NodeList &list = ((Nif::NiNode*)node)->children; - int n = list.length(); - for (int i=0; irecType == Nif::RC_NiNode) + { + Nif::NodeList &list = ((Nif::NiNode*)node)->children; + int n = list.length(); + for (int i=0; irecType == Nif::RC_NiTriShape) + else if (node->recType == Nif::RC_NiTriShape) { return false; } - else if(node->recType == Nif::RC_RootCollisionNode) - { + else if(node->recType == Nif::RC_RootCollisionNode) + { return true; - } - + } + return false; } void ManualBulletShapeLoader::handleNode(Nif::Node *node, int flags, - Ogre::Matrix3 parentRot,Ogre::Vector3 parentPos,float parentScale,bool hasCollisionNode,bool isCollisionNode,bool raycastingOnly) + Ogre::Matrix3 parentRot,Ogre::Vector3 parentPos,float parentScale,bool hasCollisionNode,bool isCollisionNode,bool raycastingOnly) { - // Accumulate the flags from all the child nodes. This works for all - // the flags we currently use, at least. - flags |= node->flags; + // Accumulate the flags from all the child nodes. This works for all + // the flags we currently use, at least. + flags |= node->flags; - // Check for extra data - Nif::Extra *e = node; - while (!e->extra.empty()) - { - // Get the next extra data in the list - e = e->extra.getPtr(); - assert(e != NULL); + // Check for extra data + Nif::Extra *e = node; + while (!e->extra.empty()) + { + // Get the next extra data in the list + e = e->extra.getPtr(); + assert(e != NULL); - if (e->recType == Nif::RC_NiStringExtraData) - { - // String markers may contain important information - // affecting the entire subtree of this node - Nif::NiStringExtraData *sd = (Nif::NiStringExtraData*)e; + if (e->recType == Nif::RC_NiStringExtraData) + { + // String markers may contain important information + // affecting the entire subtree of this node + Nif::NiStringExtraData *sd = (Nif::NiStringExtraData*)e; - if (sd->string == "NCO" && !raycastingOnly) - { - // No collision. Use an internal flag setting to mark this. - // We ignor this node! - flags |= 0x800; - return; - } - else if (sd->string == "MRK" && !raycastingOnly) - // Marker objects. These are only visible in the - // editor. Until and unless we add an editor component to - // the engine, just skip this entire node. - return; - } - } + if (sd->string == "NCO" && !raycastingOnly) + { + // No collision. Use an internal flag setting to mark this. + // We ignor this node! + flags |= 0x800; + return; + } + else if (sd->string == "MRK" && !raycastingOnly) + // Marker objects. These are only visible in the + // editor. Until and unless we add an editor component to + // the engine, just skip this entire node. + return; + } + } - //transfo of parents node + curent node - Ogre::Matrix3 finalRot; - Ogre::Vector3 finalPos; - float finalScale; + //transfo of parents node + curent node + Ogre::Matrix3 finalRot; + Ogre::Vector3 finalPos; + float finalScale; - Nif::Transformation &final = *((Nif::Transformation*)node->trafo); - Ogre::Vector3 nodePos = getVector(&final); - Ogre::Matrix3 nodeRot = getMatrix(&final); + Nif::Transformation &final = *((Nif::Transformation*)node->trafo); + Ogre::Vector3 nodePos = getVector(&final); + Ogre::Matrix3 nodeRot = getMatrix(&final); - finalPos = nodePos + parentPos; - finalRot = parentRot*nodeRot; - finalScale = final.scale*parentScale; + finalPos = nodePos + parentPos; + finalRot = parentRot*nodeRot; + finalScale = final.scale*parentScale; - // For NiNodes, loop through children - if (node->recType == Nif::RC_NiNode) - { - Nif::NodeList &list = ((Nif::NiNode*)node)->children; - int n = list.length(); - for (int i=0; irecType == Nif::RC_NiNode) + { + Nif::NodeList &list = ((Nif::NiNode*)node)->children; + int n = list.length(); + for (int i=0; irecType == Nif::RC_NiTriShape && (isCollisionNode || !hasCollisionNode)) { cShape->collide = true; handleNiTriShape(dynamic_cast(node), flags,finalRot,finalPos,finalScale,raycastingOnly); } - else if(node->recType == Nif::RC_RootCollisionNode) - { - Nif::NodeList &list = ((Nif::NiNode*)node)->children; - int n = list.length(); - for (int i=0; irecType == Nif::RC_RootCollisionNode) + { + Nif::NodeList &list = ((Nif::NiNode*)node)->children; + int n = list.length(); + for (int i=0; i

Ty_~sA~&{^k>%aw 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

Y^b_|~sG||`!B{8+*chQG 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%0D-18+=;LewB8Rmp5Ez+0MD zrO>zum`9bd7sd%DC~0t(m2S-7>1K|a1juM~zZcYXoN5A7$R$4SR?R>ygk0l2BMm=6k3EV&Ym6kS7<;+HJO4G4F+q+x&Jtd zGZx=^6|Gbahtq&Ii(ZCaElXLU>(oVs*HpoBB&q5~jBl=mq@gw`CU&jwmLFDM zSU1XDON3N#UW|0ZAag$-Jl(9Da(In(7#FYIRjWs2rx&7@P^R7;H4tT$hzG4Vp_V|9!9?>qq*hbW~$!Wv#^Lv7$C*YsqRkQoS|r0H1Io zDAXF+N$FPp8lxK-xB3zq1crCS& zLQ#uAQSdwms&T&Ut7Ex97yS~C_Q2GVNo$5jt$5CX^EluR>>(Tz6@z+?$TFj%6d_m0 z3y%KDMenlo>tyyvju|~wFp}+fsG=vixD=yYHu(35z>1DonnpuboE{5mG>^?WApz{I zV160hsie>(5AjQ-XIe7GS8fH?F@9m36GtCtbwfB0!BD~MPxStQaWKVBZBJo_(ijE- zluEZNr+WoQuiVLODDr@a;hZe+A}{)DR2Yj&AhnvN&%m}VjN{A-9TbWz#c)T&gw={r zOBQbuX<=x#!2?X=RQjJ(1h&}CnhBP7^l@;vQzBJ=&P)sEPG&0=wN?x#fRUrg>jJv| z9mda$IS?8s;FwR0+3!~ZXv~gZAHQ-MK_wDLdD$Hl!;A&-jtD`lirV(fI-eMJ!VFMp z2z6}Q5c7%ic%qib_q$@H)#2CA-_w{^jQd0ZiV8}rTv{iGjp>@g%VK{+jE=KkOhUz( zJ0MZY+0T9wffN%ef%jHWS_O;-?-`zXO56d?q;QXzEE-2g|M-B!f-J{K)R5$RUYjBo zsK#=tS__aJFUM#+H@Md=F%OjbK$HhY7er$y&C&u-@ShLOW9lcOW8X!ZuPickLoTHSK? z7xg4yO$`0H3p^9L7N6bMZ&=saLDHBv^ChM{CzEnR8OiW}p27MyF z0>zZs+FnqxB=0307bf1k0%6{;ND731>uqjR6sD&5Av z|HJ=<(K|GP46xDw5aC^F#d949@3(AQ%Z5k$mP=fLEywDE-^&!|`H8hoI10ug@VY_6 zF$PmSx9tJ70(<`fUyd=K=;Id@0(WqPAO+UGW8xPO1*Pni)nYND1dG+V?HNFhfVyynko4JOC{SDO}v< zg}Z!WaG=Izz8Q{jV1#3r9a;=SJwwMDYE*VE!qE<+jQ31n?C5JTS4Rz)>_oKGbhfjw z>}z6yF}xTHk>N^_LInzG_>O3C_!QJix3vRUgL{bRE73pKsI}8)BOC)W5&^&%P!mia zIK~G;0%{wM#iGn2#U*JpRwT2WR<3GQ&t z$xeTb0oylNDVTG>S4LqgU=u)JIA=#cNm?!sK#fI|&jY9eEQM|r-UoW`ka^;Jyur3_ z2n(!pV2*VwY5N*EKIGnO-`|8Bx2`<+_;oyGoc&zXUh~{Sm}7WP zY4SigM<=dXkzUeLpXs+@fXcHUtGZ?;Fcgf zP)xHkGln1K0#xl9H8LnF8WnF+43^xm&`2PoKwQyR$LL4yHz?k4=TX4`A?^-d0aydG zcZeJ`#nCJPapb&Tu*MU;pEy35PWNa#tZmHOj)h;Jzu?b~?fZAMZG$b&)=i8?!pmc_ zScPjzg`h4xkAdlo%{9=mOv14uoY?zf%z^KtXWRk!Or#g2l!9&h9X>vPBK$yK0Al5y zCh_1(SN2#`>8Mqd{hc1DATTOaP}_!z0xLUHLA3yjGxmoCK8_PUDf!fDkO+J}KOkda z-x()-7c>YQiy0@6_P|6|}VXleK&kv%EtK#wYV$#QDPg&|A5pZ9#V6vL9hasEneyr$ozA`m#nCzd-38pH*T6B>*= zm7p1}XvqZ;4LA{+h?5Kp&aCGU2dq$emAD4LGwp)lJ4Tc&jMbr_f<{q^PD$lZ#daqj z-gD9mSs;eqI~I5;s4{&JZV0smso6c2@*v*c1h8T$R`@%X=V4;nT6w)TjbPFeGRu zNh~|x+ggI>*-@&Y73Br*!00C={Tj?;2ecF-ZPd~Lm+t&~ z*BHsYTJTC)>U78G3!(JGxOWORBv2Cp62U;S*|}&A>+mO^<+?pGyo;l6tBR(IU!PBm z)v=Wv4T^CBa7li1tQE?=gH*|panis66eZ?HE;E(~u;wkixD30Vp6yx+6?J2xpP%<$ z^-|?gV#|G|=p#e)BFCVbo#KLsVc*|Uy_c%K!kvm3{W_`!sG^!eTEqGAiRZ81vXD)L zOWSbHj?a%zXawHtJ4$UR%4u}(C%g}YJL;8hZVfX?5m*>EF<8V?Gl`@lv(+Ut5%k85d%l1%IXbu!?~pqD$eFQ~3WFhXoFutdiI_Of54zUPu+Xw9 z56(@m%S44OpQfK7A5aJnD{`Bt%kPs~>1(GEYN+*boAV%*JR5+jGzpCUnF=mCLK)@D zYISr+tAM9lUxYGDvyv!rV9gVjy8eGJ^fAl)P=RG?@#VQ$4!8z%G9{0Dg2{1&Z~^D* z!q3lJ21?RzV5C8`Xu<3>{w;t?Bde&YP^$Ft>~!1~YwQxC=m|r7e|twQhP9}k5eG@N z$p`Y_oRvmPE-1HB5&fhpDq)pZ7P%OBIn4@2a#5v$|66LbJ;qm^CIyhnq4_JL9 zmo3m*L)`+X4OpF*>$ah_H-1*m!X5J~W!+xEfvKLAMHA~hPX_;`itqE|BNc>sfzEXj z%B6~Juc(#auo;1>3RK(=%NPSq1OdYgN@B+t7=Fnw7eaVD3xJst$gxh0^FYgpQyy9i z7Qz_FJK%(ggg#SG4WtR_!gw&G2qKX6Qggu+YYxnHAQlg^rZtzSSLMFoE7HIhP^Wy? z70_IGnh1R_R){WNFUjHMzAw7rI61o7E_PVTVdtDMiwx9s(Z&~JpQ@z9 zlj;x%6*xbC`}KD!v93#;2DL=EB!**QXj7|No@=aLx{@y~<&!pb0D&^brSJgKUg>%2R$xdLkuC1PKUgh&S1oC7N{ zA1VN*V?@74t3?Xl9=~G}W+K{So-o<&@geE83sPBN6y@O%Db{G)8;Vr|_uTMS8e-DP z9?Xa3p%ScYhv$V~3tG*kxC5V`A9y}LP(-o6e@CeTtqOIHp#%jI$gXjwtKLy`Lup$s zzXflP@3%YNN2WanL&_}W&#sz-BZZZUxA*TTBjKf^qpf*!*qZE&o(%_Da{(f zPt1Ox2hc}{3Q($L*A=MtmitZaMpu%ou|VKp+1ZVy!cc2NwHLbK=%3l$f})3W-J>q# z@>exdF-2qQNJX5fV&8T=`+0Zt?ySTOg0?*{gQ_%k#Y(YH?npfXTd^#h9kG~_h$Kvm zIq=r_tcNq8sz(O|XblPP zq=3?{FW4XNG|$aRcjehh9Bmt_8K9{h&-Odv&JLOPyQuG$2@i#ba=!f~69J1d&zS3udZZVF1Xf9xxs`N1ixQC$m$4~; zwc!55@%)W0PW^u0#<2!`op4z0Bmh%ZPNI>se+6Vh;tIKz7y3JccT9OP{`T|vx4eX< z*vp0P4p)whh->y6)8P?VecYamOVI|ztw!UeSaQKgIj}6j=qEm(zY-Tc@5=H@nd~6; zz|`>ecuy|?FMm~K)jtMK(3qsPp`=jZl7f>ioBO43N-N#b7b|`j;lV40(h_}rd0T`p ztmo1(TrgHAIy*%l0z=Wplp96DDzxG8c+Wje%h=yZbJqf^y z_IO~3q9G8qv8!|n47QZ2tJBxDvb$7O)Yi~4K7#b)4v&dalq#z=Zv*k1j_4ERv7w-3 z7kXi;=x3^10aCd)!=Y#>B=8E(Nkx;HVcSX`DwH4A2VJXYKcPZ{O&`=*4*upXACH;y~V{U;@tRh`h_7VH3y^NBe- zTK$ez9ygscgclzTe}ID*Y%TSLi9w`Z-#A8yiU0Ml|N4&-@sNps8j@WR}USwLCJDV5I|^AjQp?q&XMy z^%DaaVCW76Eq84Z?+8Dr(79gTyAyLt)U*45FZBKkt9MA*0cFV28f30{7695BBouRX zy1<2|t_p)052fBe(Z@nDUY>qVe9TXjTA(|z5Oy%ppAb`65mYmjq%^w=`tymoI?DdQ{&>GHkMn%u`Rfmev0&dGw`%iv z9tpWEH>x2AjA0rUwP%CFV}6TKuU!zhX@ZJD-DlY zAlHaN6>9-226~^jn;4l4R;&V6F#CY(LXn_J$|oPhnm>3^rg+T>ctu1@nJwTmFbA`o z+g>vrkDQ)jMyAiK=rOq*%b%;yPGyC$I=SX~;WL$B>yJhpyrxvLw|A!~5qFC(4vRBMREJ%^2;3tG}84mghU#J~C9{`zmZ z(cd0B9*>O%xy-S@lK(sdbjIpTuB$B<$KafIEu7~`Q01NJXfIfw&^@~+Dx3-@g@%(q zr493XxUwUes;E}+FoS!ADDeFJWJp%xtNCKgeFKZ|13J0;}WtkgNtjQ6W$4w zdpzFJ9^Wt*<+l}jk8<33iD5ZY39lH@ls@Go9^Y3X?oaaD@!s?bKxk1q&Gfix!kaZ&F33sGtCn&d; z9Iuvwb2!3+9q3x{(eo^6i0qJxD5B6c&haS#dO(H0Db#aLW|UjyyXgzHHY(;W+)8(d z2_*7>&r1DbS-Cr`@pD;=k<-ID`V#;@zJCW|%c$=Y;VhIPi!xnMvVQ&kX$Bo|A&Q>g zq~q*oj;GUXscEWA*{^}$e|qpjt_>|5t1FlFnPsz<<2*V{1>55t@8tn3p0#5Qe0=g; z>mR?t&jXK5q56JDm7nK{_gZeWkvg~-ujT$+YOOD9NhvsU-B7dw1{9Yafr(mq3vrgt z*0RR|NZ~`Tl^pY=fC}1`;XuK_=atN08&yJ<%pc0t2IhPl`i`89GEV50N3&Z z(@(TyJ{|pug_As>P*mHX`vaQ_M2YFX#uPpV);Q<~NRyvIsF2BugdLe;iJ-t3d7KyW z3W3%}r1nB~r@5?i!^pPYW5P1&kl2cY4&`D{-N@dG3C(P8(|0bM;W)=n6fwN*zk@gC zY(J0RbBUO$xfxFeIhjGE0BhoSK2e&%O|Yin%KY+5aE0PICV2od^s8i{;P`E&~iY5=dy}e=E-}xCq;W05fM`k@US!fnSN=oCF zs;aR2s9_igco>?JgXXyyEu}%F0&5~BDXW0s$J-CU*!2t_80$cpg1`44`~$2waE=d* z=39%;0WDLs726CxDOz9hAR^JC+I>oT;U2VV(m>-&CkzIhj~>clhWS z=Lt1IZ4GmA&_rP&I8BudAp%Q zx#U&@THP>{Q*+O|eW8z$6)@?k05JLjWFa(ec_SU-C26pNFhv0m+FBbAjo`z-Bw$Ix zEmq)(TcEP%Vhq)E_+C2&elHEZl_HWpkFgf!IJ1@YRJ0)Db@PE+jwsuG;BY)MZxxYP zW=hYQ5e@4;_V*ZgJfYo3^Dhs8gOvdE1M;$*C-%J81 z8^+-0zik_~?ZHfQ2-?2GotFpm=W%yGSF&EUnht)tm(O#c%&Y``q3XuxYXK-Un!2;# zh$FB}6NE`5ydx6Yxkzc91IW=45a{Pbx%7QKkvKBsGcHs(OFg)wkrdg#|^D6K#=pp%R5m=jeM ztrlnz9LIs@^MF>zR(2M=Dag4Zygh>KDG?|dv{abndmsx|16a8qsSP&!J&G%ZyN&Vj zc{A>+y@=eJI~5-@FGEGy9@yH3<9y=t;}a1dcx(mM8XmP$MW>XYqgY~FCW;8p!tcAm50G~kd{>Y@I?%Qz7o@L;lkZ$ z_>+`^MarM?QtiYs)7h!H zZ}mrh{l)QBdJX`f8cm9|)O$V{0DABL4lYD)m$zDjGVX>CsB)=yEvQWmRVyUJe)=FK z)g7?55rdEqH7_q#KM@OS#_Mo1!q(=R_#gl3f5ESh&p-N^TC4ak{_-zip!#7>QgUml zK$MJcbwD?m6cRe;%rGXU4xBSZs8#IS`)zh|Vd~x4pLx(`2bn2w0R zaeiV>$K&y!OBELmTkg;O>fY8`Y=^;W^7{P)ayy_y3$Ya%D5}r^<|R2sDpRaM3J;0Z z9cRixBQsd81?4?T^UHX~*}j&%FoKTfIbJ5NS~j%0-=je@?jjtNtg6$U$ht@gUW|2n z4J6@xJ{QJfik*lN9$FiJ{~D=|Nep?hJ1!ak8eaQ_l_SSFX=tm)K%qG&j()<|Lah~6 z3liKy*l7so@gjI0KXG4swb-K*`nB=-9~zXTTR zCONa{;#h{Fl&gppjlJp$F*(CUUQ zX#`^oUT)#(e42xADmoQS36=#a+P>xQ+~Fc9 zWUAErAZx8S{kLe#lQZU-?C9I(8UVEB{@(H zNBvCCEKy@Q`#%E@qUqD1*h}E_cE8#%zc@f#yYK7Sjx)x`d z8LD$Ry#b(r+$GPZCxVsjHFMU&rRfST>KJInKmXRYTe2H-VaB-A1PzK}fuElT{=0wq zSAVPf_y>RXr}!`b$$!QXKz2A36WE<5$e_fy|35YBO3qJ?@Ol8v47Kg|SOxd0kB2A? z+HwEfS7q0G$5{QYj3wiRYh}l9&BgT#8hs@!kY*b0Vy1H;$U_tP@ah$`nW6EBY%3sU)|dWEhp;b039l@4Cz zbEPtI`aqut5hloIsWaiNY!$8Xoti5s)pcNHr}ucgrLqO=0FCrsEQjirlITv>5nct+ z*XLG@QuF1c|GH0NVTxd$3+Ks7_kG(iT=E@4`lC1*hyeP0-WNkH8!O{`ROj$96KBCa z3NPkM`2);gmjDk~WP+w9#ab%n60{(Oj&tI5+ zqEw*mfAYmw6ZiYQE>)*0CB|}zX9OmGdmTa__ZhZUTw#wdbb7i5G%~J$Tz3{$?+=I{ zcs|dUmxkZy4%jNnbj?0Kah#vr_2kHZNx&Y3kpuxwUe@BCE}4Uy)g*IdmQOIna*l~} zc5HFU)SSan{@^-CW;*Srso-jB?faQLNRw+d@~7`C$E zvwtQ|J6S@hhT(<4gX4+-1!$-l^CXL?R9K>+J@|(w#B2ki+y=-oPs~ZS6cq(Z#TN1~ zT>~OCW7SF@z+4?zi*8Oa_>9CDv(39?vc>hL!NVPE9SokyilOLRc3lE-hTOEu3=R*Z zSu3kHi8N0MXPRT+U;a=38vp(O@UQ;p^Z)Vv9slB=|5N;b9! zX~5HYl1wB_m5jtIJPJU>WNa@u3J^CyDWm>+@mz+nF&LVr258kx zL`=f)@_S*6ly)+sW@1d-qr-^2d{e-1Kf_pe)G^hP8;14tE3rc}Z5X5D`SF2YF zX^_;`as*5FdujB-gci!Yqhd`b$=fo}Nog)7jeDTh4Jtq%+_ju*VDy72qZ#6LS;St& zM?hRq%H#ffC@)@!r-F_Dh=b-o^Ff_l<vm^v>}Yt zYG0gms3>>Ncr^oaI1@HOkIoney;zV0Z&n;*;juS%d~=|fH5%uj$v5#Ey}=h^Ur219-a+p9^Vy@k-{p{=Au5n0p(CW3B_w&ky|7zxvns_;_-+V~Rih z4}XV$@z4J${_B7CUvWp0o)-7cizFB78ilzc))A7D=EVwv&RIhX;PgNV;!-a4+(io* zBgYf|ih9je`2F|ADr#x0T+~5b5HFAWV!4U}b6CzBD9d!}=!Hb$1@06i6h4TPs2L)J zgk;`65opq0*?qQ>^5Hq)Y5FlGJ_ZtZhkE_q7%Id(l52dqk{_m0GW#4i(#7+?0ls*Q z`c;TsM20LPz)G@MftsL?Gt=iLG%r+_E3LsXCm>3}L@A{6UhhjO1s~7fZpBkAH35O4Hj5GsM1$$8h}^&&Kwa(;hB&(=x^sbGVC`&~vO7xdn79tSoh;s&D07Q5u=WSaSy zWGwPsP$DP$Rh)W8M4#=WnTOofb_iN(0>(Fa7yp(>?fd;iAq zaiZwQ7^E_bV-Cmo_=)n^Xm%|Xdm)m3g8r%6HcoSV0-#5T5Xv^IMBz5 zd46D=WbxPbVD%PhkXj2%{B^^N;9PN!i~!*Acw<}GIk#=K<<3Mf#zc<~)U2kyUQFSB z^ZqYWjHzJ6HR@2D{k-}7wHi*mmaZa^5Ip5_EWIVQR=62wyG1d*CVh1S^unV6=J9fv zUz?OQQ7Z0{4M$iDYYr%YfAWw2WBj-O%|FAlpZN1X`&0boKl+FG&;Rj%g0}Bex&#p= zzD8!5_)9Y$6OVmI_(Wfm9MUvRGTf^Z{FiwG5gZqh6-E^mXVy8#?*#jW@NzIWXsy)s zgKp=lN>POQJ@>s-E5MeJwsr58#IplHE-B}iI%k)dkwdDK8&cw9R zL7N4KftR9XS9SVCjL(~ICBo-n=0zTB;Fv$L)pydWwWOs0nCrlCJQ3-7uZc(}E+~0y z=?~NNczMciUn44DDVX7*f;EFc)KqA3>;q^mcjoukBv82s5P{4*kyN@BsxX}na%8%p zS$&ibE4H90>g1WbH93JiY$aPq-@*v41S^knj~#wzQ+O(N)KNl zugcvq!Wl*;q)#x?c4nAWj%^oBxF!qb@rE@!=GoEDRERwor$M7AcSJYJgqrgUTM=nM zTK|rUD0dVlw=ate`XlmH_mVfk1wqSbk#plR3M`i}HK5hX&B;+6ow~37mt5 zz&R$G7Su{OoEsGjmcJnQiD&Bjq&@z9Er5ph@dhDe3mLdt^w)5;NT<*-o?&tRk6FbL~%AKl+D1hp%oV%9!wN`BQ z!0`129_sKMgJI750`W|0w8cO)Ya8}$&x?9Necev$OM^dGXLo2ke2}|{{qaC4gYIp$ zdymJWuJHmXj=6%Qgv5?`cDUU+HiTMwv4~!g5XxdJCk`IuJ((rJIMWPEX^DzYD5H3q zcI6f#0I$e~nF*Pa&o48?$x91dD4+@2T!HiX3v2p)VO`G!@4r9@vxCO`102NJZ|#x$ zg*QM>bZ5xe&Ew-Qh_FB{U#tcE-H*}n`TRsNLwi(o4-^rMbz+UquVscg4$KT&lTu-s z2NJVmj%T{~%e^1I7TnM02mNv)c(iZmz2~3dB+IK*SlJOMIOiwOJ*Pgb7EF|q|6r;r z$HR=9VB+e!7wVycA}#lzly#5MVOH?{$B#Sr{XA33KMA{aC}0I!(V{M7oE=0W;T9`!OLPN)zyefA04s5blf_{4Y~#BErnn`H;$b3$`g8d;SrAN*@F zM}!MBjvuz|9sA>V@Mf4kN!ytx)?^S8@W3?}lTy*@YiBjaKq*RrL49YU#afInHG^&f z8U4nNh&Apij9-fv%8`hZ9i;^;DbV|4XxKL{edo1{lNSx`zVJdAhwQ=K!kP){69o98 zbJRwNqGR3r5s2VC4oEE0Z39HQmx^$~=^qSaQpF~e1pj<~;In_?%>-cvGg6NMWBO(- zlp;?$p?xh#9Oxs7uC1b2!*Lui+fb{)aAK@8JH!Rmg*F#PCvo<6r6RN?) z9o1SY)oAJ+Ympt+zVp2+1xvYn_VL7AllzDKzbuM8i5r~M4CfyBn+H?T0G(^~{!O)l2U<9qJfCRRTYabnvlTHEg;C}LrMd*J8CPn@#w{_Q(9E06^Y z`9w^HMPV*j+cIi^1mx)_R2!N;Fk-;7!tq)vT}g$4gPHX3JI{e$62;r&J*BI5SAn85 z?RijjQwk-6*I1*~Mq`|>ly^psD;k+VDa+&mjXRF?n!DFp*^ynXbcXA!kW4%)D1}(; zSe-_m99@MlfJc-wbjEECW>>4->4ClmK0cp#vw&@ zlP{HG1cRcMT&OEb08%&(QBA%WChAu2(Gd(OJIwrSv0Kg^E*QrXp}9-1{eBow7? zXqCpcv7XH3j+vR`$%W&<>4pxjITGAR5sSN{8PV{ykq*(%1G);@`x~mIq(8^OPkz%(MUR2dFiO3ZSNRk;PZT@pojt$?*8JXe9LTm)g6+;qaxfr zdPWiSIdDEd;Iregzu$HV?p!>(Ha@SdZm@PK7!?bgps@3&;_FmS6fh@nbZh{$0uwBn zOe;!uG2{8k%%F>f24NQmp)JA+=I5X%D3M5X@K+SOA|-e+lUTAKtz~?2V8uikS` zpIges&N;FA#2gc0^M>weg2E){p0_{ck{6Tl%^P1>y@!KTSi8m!`870yW%PA{z^SLN zjjqyI18co-)zskYEAzl4b?UD?l(P>&IKyOyaYKoUHB<6B$&yl4l&qXQGW}2krY#vw zf$)VsCu$*1y`SeD^fVV!0DC{s5gF#vUV!%?374v$*W!@UMq$NJ3a0B9{{`;P>6&Sq zR;)$%T7;mro&K9#4o56(TjlO&1kQe94z}u=l;zia+$qV$6{fRrp2Q$r#l;wBMtZgz z?&w&UGq}JMzGUK{pdzyvs%@}pFC*v3sxG5lEevIAD4|%LvP($5V5Ov_;-xy8PPt;t z19K=`4W77*`|`@MPOX;lt1~@4&h$J9Mh$#1lV0*j5o+hhIvHkmEvr>v;Ql7&gf6m| zR#3!37TCPKN~#5OFxS5BJ8I#q-bW{F5=bl6KrIK3M;LNmjN?g z`kC@#?)k3R;c(#Nd=jf-;QPGqpsJT)ZE#13C60>bL100~%-o#=+q+KrtpETZ07*na zR0Q_7?=*-O$0Ob_y))#la10%A?od~U&wQ{ zW=cTUm$~TGChj}kkP?@~a$;zQdhn$xbXCqVF$cLa(=%In4EQ7tzGPOzL`KQw%=JnU zRAUx%1KBr}&yB1wU+tu(taRHRRAWfoFDzk!m$D;iv=R`#Xs>?z79`W#0J@-&&g-g% z^E`=ZXggi(xvIP1Z|%z1aB8VNoJu1EeFG3k(OiAUtLmQES@&cP<;AF}ew6;vvYY-zaq?w{+5Z0WN zqQ};-?^||##GBA~mP(ZiqkU`kc|g?GZXb$gsvfyQ6&gVruK_hQDa@~gNJRw-vO{Br z3Qb*txdf8Dt}zBI8EB$FnT9!Lc0Cu0UK8*Cx*z~2cd2Z|=$yxko75`do--9N@Pt9q z3^~_}GiJFH1pGxdU4#04)7-r*oTDT91eT+17m8yNw-TCJJCZxMG)a~RHfh-E8%nJh z5cHtYFk&$?L>p$GR2dplaq|teJWvY(o`IKlC@>LTvLw;mXI!dAK9^Ps)By1`(`9vL zklda7-Ti5+kTlEI*3eqR(3+G4?p_QI@xYnBAW{3WA7y^V-H8=}kI5X7TF@R3)U{*v z&Wx7`cB}Q(k<5i#X1fsBs*yXr*#e zgX%}VV-s~F6=JHwQZS>87ek-Vm(nx~9@B(ehB6<$G@6V%4cVn_$x-9ESV}>uIj_AB z&hdl=u$4lBZEaAcgBDuwwjr|z&OFcz66C~;(Q!Oa$}P2^UW>zN}!|&0MXugE^lI_Bn_k6eoF;2?!l;~+5Tnqc-Jzw6q<%U%&TC+46IuGgb%J!Mx_gmi*5iM<79%Pw98GM zNNW>d*%f?@K2L<(U2t95Bc&L97KP6Ngy28F4qB%}`oe7wCy;L(Pe__O)ih0rD_Li8 zV`B&fEKCaYKzTgS+FMF=Y4SafCmwajTpepH{CxhF(st!Y!nv<<@ta?!jm~?sL|6Di z!kKB7%R@%*U@T3EX-|-4$&jp<$&(PihE^($>;Tr~y;wxOs|qXJxxc8TGRk-{_>Rp9;3YE33oiifUFL+;lAk-P_pK^I2$!X0f}f3*k_<0H)qs{j zO%cR-o;YJ+(~8I28~m-}{QQOI?|*~)M18!WeS7E5Mgkior!krQx;kV9Y%6Fc5MMa^ zPiQbx{mO1PNg>G$l&WajGPlGj{4qtVJ4)Lj9$2%(At+lTJ@h(I{HyA!G}Olf+xCV? zMDpmr?zx&Ou>6|cp3n$bP*t!pmw22LE|VXAx@$|xh*)Kkm-CFe`48PF^VT%+7CFR9EFU#nw`NOCI|yKMLbDuS)mH0~i) zF{BhD7vl_t=~#VaXjHp%8cN%9pLC=`gfm!;mRfvejB#zG3{TEDUwf8C*|30e#+dNo z=m(=VTd8Q|^FgndtxZ53j;pTl}IOWc=8Dy1ve&<@mV5)$u(3hVSkYXnWvcKd^1zu;#?^`GnR5O~qj~W{POM@X2dV5})1C z>ITi?%NO6J-bs3(ES!ak`((~V+cBO`tmD9OxvwYLWou1f+cIg;p>ts-kW#h4iriW8 z=Xv7S|Mwe01wX$3$WhaY(NByEVG@h+ya~O#l1lrNfX3x?nO{Yt>Z_m;=d?jff#2~7 z`R*p0?|P;#Ga>Hr;V)91A+Q{`N>P-cg7xR;?;$d<#~aTDqY9Ck=e*q3bQbwyfN9Eb zGsSf+R8f2w;{;X=_?eNw3kc(Qk%g8)u|aBrV9hYkpZr{~@K(N|)dyn5oyyu;Lrag` z^LWD7KozQA5rOl`$Z{gxC!OfT4)b8KwqdI~|4>;$v!!*2IlRB{6e}N8fdg~kOjqWW zm3+1(2z5X;FbH8^jtX6Of5SKIc;g*wsBfU{%DdSzv|M$Qm4F)Zuuc9M63JwK;kAHQXi zq-2K6B<3c6?wKK49BJ5>4s>9xKx^eotZ-yL`tuG>TSM*(<0d%Ag`KH5=fS<9(Ba!u zP^%#fxd1i{I55cfvQ|(e?vYkt;pit_fHCrOa?E+cQhHfx!L~n`v!200OBNpc2DJy~ zNwpWddrH{D_;Z+X{7CaHFY%sL_gV{&htU^fNFEq7Zpcm>IXWh)=XieL>}Q%L3%W0O zbgbyGuse+H5_O0uOg-NNM$tw(wl%Rgvon)?+ZcOo5X@9)LKRh8s(9`0RM^Q)%9fMi zrA1LHzdp^~y!_{Qjdc4suzX-|Z>akNyhU zLR$Tn8M`2h6MnW6;k)6i% z5?+5X{VuTPy3Ij6=~AXPPedHp_XkSZvI1gjJ$i;3Spg*QT>pPrXSyRvk{oGKwZlCk zt7phvzW@6X3oNInsv_L&P~9J*W|4&@KyZlZuFQ&XH`7DplOAK5xQqr-^$DNx*9?W& znwu}96@mk`KKwoUa=wTqH2ZwH10!#I;6!CBwg&FN3KSeUqc~-bLv_1Gt#?RC=%YjR zz!VATb$}A16|dqjkizOv^kE^PP8(}bW3JyukMDEM=jR^LeLAI;d+(dRoR#=@HI5#x z!Gy(h5J1>kWH`iF!M<^}sFE4zE>Pv?nBtHgeZYH+PrfPqI9j|RLOLmD#{n9|-2aSE zHn^)}5>>Q*$D#Lt=8F6MhKk~GK43oadN<55p(QRcSNOCoLV)=mGn8`Rd>m-RH*isD zJs3soY>x9p^1KrW7il&HP!xgvS7R%*qThu?umBJO1cYMF zro~i%87DOt%-9WLH!uB^@Ou41 za-cPecSdK<%WN0M;05g>K+UMf1Lb%izutcbO8bo4=|Pj+yf&>h=ZqODnzj5iVZ@>C zCFh0V7aWROPny~!BNfGU{lxYD6^E%s+~^sSSE3OxqeZO+|DL2yZQ@`Q!uM8>TfLQkofxYb(ao@z-A(IVT7*XUE-MsOJyla-!slKDi8+ zO#8k}iK-n)i$xXr( z5t${2B!Qyr>aAUG3I|Gsetq$f8q6u-Qa5p*lrz*TrroUc7C>&!|1Z2sG$ZA-je3v* z$(3z>Av?=@N6AqwI+xd)=_S&5@zo0#$J=#%K!xMY88O2d5>oOBQvxTa4b%v;nWJzt z=ZZNl)KX#A>9%!BFO%@IB(kEzZbrP;`hZ%-v>WgK3m6TL$3LL@gzAZ3`Y$9gxOdFn zIl>FcYRM&XKxo9g-QY+&jA*LR*ow?Uyc;wpbn6snhy!lu*TA@LR_sS%l{qGK5a~Wm z;oXq4@4Z4fAA5fz=|D{Z2Sh>r=U;%*Am`4iIOP>9ph)#36+u|VXUj;v19PI|0#ZUb zSXG-l{BG>1rok%T>7mX9QR_(4k&lYug6sYTOpB^r&?Y@K>;zBTuNx3Ymx*>8N)9sZ zWPE{yJf7WpNM6NIl=~)cj&y!Pxu!bh?V8Z<4$KQk6>>Zwxk7v*1wvoDVft@$VP~PK zK+?BFPi8U3I57owDa^Eza2~uk?)Jvl^Di97ffh6d6{SiOhFpw$wl;B`e<9ZgFfaHp z6bB3q*ENvx5fRk|nhPwXyYJt>k#ol5>n|V$)O2>talxdZlpyuWgr~CHC#2|VVv=Uz zo@QKR3u^4Bz1?Vc-@7a61*a#Z0B-stA^QWC3NRY{Zn&;rl$ehR6T*wyi_&8g0W_l= z4;<%%&%6Pe4zjRntz=*2aH!ghJ;M1>KZKI!s1gb$`-29`nOKKO+Dm2tXzd;CW5;L) z!@z(1=YNuW6l0{Nv#+(1MRf$EtgX!8%!RHh(gAp_QNhvLzbb_FznT(`aF)*bA@(LE zro0wx{KDh>Cqy0h{l?Ya82v)OE=WF*qI;Rqwq;H5l=t${ommIs7Oq^w`}fbNWIblP zeeYDhn`YNia;b7S2L*}O;<7PBh6x|<8LYG_x{=q;do_Z}3}fC< zAu75^W+b(L$hiP86Eg|s{8N%y1H1p7Kh#Gj5jYjhFlHetKDY;_M({W}DyiiN|Br0; zS%Tue-ydMy{KOP5gYAalSw|@eJ*WUVXXb<_Coc|y`}!4zQL2oVM7>`ZyLox;OWEdx zjRB;DLo@k9rS6}ns`yG@tk!#r-SxIsPNs;e1 z#$cy|*tbgBBh@8=Uq#yb|6M#ro*MZ^YvjrczR!WynYda!lxQ&6XlU(?W-Q8+(z7Ia zP<&y0Msf=%P?$vZlTyae zaGbhfw1&~SfR$2l{P=-+14!hpxCzc$@KwJsj)M`EsX&w?s1XnKIux>2$mI2;^??*L z**OUoV`aQ@+nHOu=Je}-TDvf2kL(7Ie?GhxQeg8Pi`o2bJjV7-6|>!Hv!1|0nVl1IL|=HTa4pmkH6-e z=r-{$#o-!xKNXCJ`TasKs%vlMt$v_S0;R?WpX5aCV^h(!XTbKFx(iK0nRA17Qh zi-C4QV0hoJ_+FUWmr7-B`TGTjqn5wWgg?i-A-gbgK>S<$0(OCE=IHmEBlZcL=VR{> z+GzYNjU9+PfhpE0V1Z2Ziwnsk*UeT-Ib({z``m0W#3bVTd9tP;%RKmz_Dj%@C6teO zkEACI<#?c;&)DAvd0HGf2_zq=IbpO;?o}hfVvTeA=(v3b3yx8%H%F=|Do`ft{SjW|6PN~{nF(uJAt?-n?r_T+fiTdh zr_LGW_+L;}T(5tjkBJ%CCs`DIIrzosVbpg=)Q4@SJTI#jl-dYa ziiaK%Bi#Cccmqa9P8B8MLFZ^6R@KUYQT>DM1X&TP42)VA=iDGUGJ#4wOLH(MKGh%* zxN(nBz`abEQ;ER7Q4S`?Eq(urBz<3R-1iGPXZ-c!pEQg06rohyGqiTWLbay(q>nic z@$)!$rPj^ykc4-;17}aJ(hR}GoD(|7CLg#30z2>-?i0zlR3)C9IVYt&kj`+%C*OJ5 zq7LbyG82J`LSv-TTHEM)cZ;-2U^quWjEajg##v=(pok=RO`n_xL#+o)NEjGKWK4>& zDxJ}`JDI(+3cthZR8cgUgxNbh z7XDQe?$L-I%Fl1zaL8$45TjSf`oJ`S&Kr_5k~&P-8NhAxuoh{d^_5Kd5oatN@MuJfVvsQYzo6Lm;OK&$;c61o05`i#Q6aiFhXZ9+ezkoAmUIZ z40+0+2`=58&RJ*NVf?!nM5vZY#{=_QHuQ0p?WR^_DzrkKGv+`algVlk@V-Vnces+* zVsDRzf^I6Hm!lNYhHWXNcI$0Bwsl4HswU*}fNR^A<~@7RawDy=Rt8g)Q*PNJR9K&?t@{ImPn1{qrm7|1xsqsZR>jB`P z*T5L$wZ;=QDlJ6{Ec<6f^+DMTc$imV9Co!f_JKe={}E1HW@=+h%oy`rqv6OWFNwI! z8J5L-^gaibUU2A9anu|ZPY-c~z?~BGIc1~RSDwf8fp-65q8vhg3yDA`zSxr1-)!u^ zUrHxb2Cy%A?wF>9>JM}0gq$a-x+NVbwZP`YjeDolnJ~d|DSMVD0dbkvQsG&d^}QC> z$_^&QzHUXPx=$K8LmaXey31wFf0tgCJm(*@XG9Kr5;ClO8v2-Mzb_2Dk;*c zQBuY9fj*e0;<#b+2^<=!hha8c&uF|0%UCz(z!-@_f{0-jo9I`MkvgTgCC2k+8R~-j zdQ+Bv95l^FaGr?sfGz>Z#DonRQ;$Tne+pyreZM!2;yf5uX2W5b==;QmnL?R(HvwJ_ zMGQqNbPQN)5KNrUCr6{>#%SDqe4S66$H{=aG1+l}>xK90jZzD8Qu1x?{zkhg;%_%+ z&F4d))?&^$$frtaoBdWQ-`YRS*)VSAWgr$tbGFUxPvK~$49<7kg^)l}#`w|gQwec1 z)^;PhB@R~ZB_!!4c~X6pA?f%au0tw}NGmfLl)la|3uXNKlF6J7;#2Su}DMEHK^7)S!aiA;bUJ zNr)T!7>m~00-x7mNl7F7TNR4Ed6qzv+@YJyq3KL8it(-zsLOHnOaXxUQ z1h)<(;5Z6^2dX=jO;I?N%(;AP7kZ0~j7;jmh$PGss=_79C+)f+Mb1ku?C@<&v@zk< zqR=9SXpDj6e8)e?`ix;W+Wp4kc?PgFo*8#+chH<$F-9OFWz$R_Rbb_(geYYivu03Y zuj>xG-e~v5i@OHkazku8#+-P+UvNh#Nej~A54MIo@?bQ^UJTqD5N9^eUk^Sft-U@* z=sDr4EO4>{ouU@3uDTYaoX}<9{hK4)<9q-h*6MD2Mr$OhYRNbsCvi3g0Smt%f5!hM z`0(+;G0gZPSG1uT5AUdSROn~(EI3mI2EVY@)HpWu)R#8qDvT&x1ixK za21SLNO$FDaHNV1b~X!Tkdy2V>NpL;A8N@@)1G{vaVk5S72`{M`MwdRwK<=|K?gGNKq$s8Cn_6!Q7Tu{rg z*;_@Hl6t&Ce)!jZX{b z@JTtPP!|*x=*&>3>Z(3}U{1%Oj$8^;Dg&;0-Q2}_3lEGIh$@cbKvJMNW#@A=OcC@T zP{{JkK=A9=-}I#9i~=smS3zh=VK?AH<066}F~_xw@Fa>_4~~}W0STl@yWY4X3q)1% zc>KWQ@jz>hO1$7|4FRS(N;!j|-QyCYuZVlpxoroF1$G=KY9e9zW8UOBlRGKr-kFoM z_L1|RgrzR3dM;@0oT?lJa}MNHeXeEjoDNsTd4AzM&Tk}K<|}(Z=OiU$sj$o{XUw+e zjmeqjreZjc14nrv)dvs2%=zqEp0APABA)hsqm*Oc^b#hj)k?R!;qiRL!T!k>;hz)1 zG$GezMUI^f;$l#JuygW>8M(t^MukQ?xwHzc{t=|$wP-ym$2_En7Nl@`kA9N?8-Xhj z#@V{_Wh%MsD#%igNLGU&@jyAaY+Sh(b51n7B5PvOcOw$1d6D{N69|3ykFS3qr;5kp z3)9)!+noEdg?_N?o)kx>Pi4-DyTA8XYufxQ$W$O>?&?os!Cj97Ha`n*2?Yxl_CP5* zkia4$zT2D#@>908nf0sTW(Gh6LaIJ7jXuXFS zk|+|LywF-3@qRd!f+=x70!B;2dyIq!8Vnd7s?&^Ka_l}Xk_cqQ^D@HM=G;OUruu!d zXDI2T2&c~*VvYOQfIYT;MdX^LAEQzbHi_^uXFeAN?|GJk~rsvh7{3ZF6r zBOzi1ICjl_{zkhRRaJ>7ki`t`xwDKJUn*cX;m@cjJRA+--P_QZ&N5Qpjc{qdPF{l2ou?=CWst}@bs7qJ4cE^MrP{V{L?ccvL(P{3}h+jJ~3xP zttTG&i8kK2=Rh)YeU{3mmJBT=_6Ck?{(`iaS%c1fQ3Xl`N?|vGsKPQ?LjpkN;OI;T zvYwFhj6$W+Yf|~2-|YqQi8*3~stggM>$;#PhNa|A)smbwvMzw@e#J8pQO=U#!i)Ew zH_d5wAeV$(IKIoN?6C%y;1k#N6PTU5g5wM2c%a{Jc%abNygyli=8E&{5lM0lZG7?hIz%P zw^n%UMa>n}6?0yg?HwI7i3sZ%ob5NR5SiqNVO_vXNJ36CNER`s%QQGo2lDZR^%my^ z{T7S4Hff7u)h4~^w4(9`@92liw-ZxZagJ<*afB%A}6iY#Y+Z$slrV=%r zQbp2(>Kh2!yn&SAGv>e6qdMk{RZ4K6{B%&gQ$EdJ(JkSsOD7z49YCV5mYcgKi%YJXD+ z=0rW`9Juc}=+4avH558?j4-$j8riZ!V}Ao<#^cibuY@w9#ARm_q@*7md!aG{@p5`V zxYwe8aR(8z{%J(GXJ@NF+!6Ss?e^tZ5^!~#kH=Pk^+xBvhAf+C0uljAS(ij0I1*Vs z-}fDh!NiDI24>Y#IYv~$QK;S!<=AD7lxnRs7l;4ERp{>s$+${IQYI#9s6-%SiMcay z=ur=NbaXBrrmooEjfqr=ps zN^OQxs8Y(uiQxj9q-H}M$pM#4GC-&jvuIrIik!JH=ex>)rKOUTh$$}hWT?|ZlxM}k zOj-2Sb}k6LDn`(zEYDE}f_gB9?M3j~Tewp^(mMB|%kPp>3B$SL_5L?>OeC9dr8+U? zGsew=-@pD2f^!IFN(df2RHAOX@KbPi(EGPyOe8pPonc!lpP1IzOD+Uck9?p~3J?5v zo=5=KI9uX#bcc_LpVtk^C(8LG4Dmg-f9W`xwwUnQiOxB3T`%q(OM*&#{>rhOln1l` zMHC}2Lepj-QWUjR%CIG)cfJQlD)0~-aXRye5pg6F&bc{%M?D}pF+Xw)yx$i^QJ&(t zoA7o)oMNb)Yn+t>+7ogv8MPk4@^6svCfMvqsp710=(LH}8+yOsIWs#UX0&F8ZXFph z-U)Pr2tKV&E*Rs6^_z0stf)~L9p~{)8RDO)%Uom0#3%KeaJk(BuhIq&&?H^SL!EKVuj$bn$T zADENH=J}9?nPaldISB*EdG9w21#Sah_m?-N<-#+}A@FU-0mQ%alv^?W>` zl^7WWVW8V!=O$EZ@W-c3A9gq7$eUPl@7dlQ(O6_cq!J^#*f*5I5S}^ECo8+8+@~=x zD-JD-UBm=tH*Qi?P}2z)hfMA=92`ZAe#362TP_Hvo6+Oq4%dXE7F7A#E&mu?I+}Hq zcp;$-d$KuzWO!Xa!*$OBsNW3|J|Qaq&Yk{Pa*i=W6ir$qQ=FG$3Vptc$HI03i5Ddj z;33M;T!?bFaGD3sr=BNGkl=GWo#F+ORT+a+>w%mqX2eEY?CMHlp2N<1iD$3Dkmdx$ zA!3lY;F22de(&d`lrsbmBfeiF#($xPz_IP)VIh0~CJe&|;0lj-GD(n(RbVMXr&J+n z&@g;f?w{sTHj!qXg!>bC3P@x4K!kD5;y^M=oy$@1NV3H_6i0*@W=f2i=v89e7FJ$pw6zPt0L| z(1SLyp$hvYZSymx)piSmGs2(BcC}aQP%D_Sf>j2nTMqx(!qb zh9n765~_TB2)%Ls`{U~eT>r##@bDW@=fXdyywy>yx2?HNaD z%FJ&o=Ba(G5&>`ub# zLrPlg7MO=KC--hy>lTj;AMyS30Gi-um}1PFlA!35mzFu&xOs4kBd3Hcf>gg?Ftow3 z`8ouN{b_%8{GEqu$pzB~+_(oh>Jei$C*vtpcWQ#^*zezB$X)jp2D%8z66_GYl2;ad zkcXX~Cc57PDq9X5^+~#UR$kKa9e!6NuKkPVf&^o3Nu$ISQLD>v{<1diBW0j+ytSfmKOZh|kFh!U zss-W~=C0aE(tTgQA(8^ZHg=4yyTga=x#S{&vRYjSQIL*>$QQTk^LIKOANmn`u` zP?w!Pmtr@ylKPH=W2Ec-jMdHWpT$5xyab4mDgV zeBq}@;EeImSm}Lp_@)^!HIGOI-L7sB4X-&Us!M0j@2^YbiaCRinDwIQ_nXzRP+2zM z@LZra;dA016M17=Lhfu7EU4y9IA+HIhW+#oGa@}o$cJ4yVzSvIJA$8shxu+=XM};| zFe1itHXV}4cKV)&vb-4E`0=_ z2pSUa$lSErk`IoZmb5+IMIKgp@8hNzEX6`OGqBE=_reC|m^ezp93SJQI|UiN`>xW@ zllc|*eMgRmYzpw*#*U0FnaV1$m02!fRQ-+X^+GNQr3jFo$PpOFPAr1N#zYGQP%aPD z!h}M2!co3B-qjSlm$CtkG#8hh=6K&X)C{R|yyPl)-8~eMldFOB89&+N&hGVog(U)L zVLHsRB*$}q#v*Cc(w9o`doh=jVvGyDu~4bUiDPA&I5;j#84~HVIc3=o5Hk`+v};Ve zB9;M>J$+)%9w0;sRz86nIn-4O-nbUo++&7!A-=S${p8Gca?GJI;~t^-S$Od^YgAF> z=qP4uXzjvR`3i*;M>njMBr5Q=G^G4c6Za)zbgO=^){`cj=MzWzmf=0VXT4`sSy>DT z@B1bR6Zl33UTPrz&UtCG!{{iIhy`(0)OXD4m%MUGeASue_j>>2NHP02b0iO#t98_P z`EtrI{dhAtCgOM2?whI*Oh(eC=u$*CcPyumF;hgKf#QEWk52~%f+Q28$l+0;pU)?i zaiXZTaKtpJE*kDsTL~{$7woa7h_UnOwox&AbZInAAr_ZKiEH7Q%6BG-D}N_zLjT5MTmB4@1GPM1${kV?j>vnzfo_p7nQ)W@i8zCPhZ3%w zaIvjqW6;$j49OEJm3yOk1ra-MQ0&Tq-+rZ_jcZ_q%5k9N6k%>0QNq7PHB9by?)&0_ zdwiiDk0_40t8rCWXZq%G98gqXj>sMVbhX|`7`P0rzd4dmEPQ_c{E1Qtwxp2BY3d$> z-&Z|QA5Taw(Gl|uJdVh0iHM0YRz&jLYSv945XXJp`z+?Dd(z=v*;$(z?$OZuKvs7i z=AM}|oei^dL0Zd$DiY&-u!v&T=oBPjI&U!e`i0rXWoR&Dh$Nx@zl36nF|Uhnm6Anh z6o3DFRfv*y6@Wk=*W-jfo>Xqcj590!7u>^mM6SvnO<*md!-=^~Z%BYLxIVdVqRu=&?9&`si1$TR+-#2Idamb80;TPxHCWczhKe#`vgovOA6p!aW zQDcT{vol6F7n%^)<@Eurhh`oqRZ;U31CD0AY#&dKK6ak=3hD{~44GbG5+(L}Ot-r7&MCT>V`9cBc6OIP%F{aYx8CGqfnw27Fv_Eszm} z>ZJSfN>mHu-7g-ZvBO#a-L#JDz9OgIw*#Jd|4)}}HeePaks^DEzH9`pg&mYIU@aLv zO)N$X04Wel?!HWwsz7fIHK$!se>_+nF2asJECdF||LQXTjR@0QY_yz_Qw^L_-(0Ra zqEk~Np7_R=p7&mGF3@O*M4HI0NV``3Ov}YrD`5FGL z$`+wxQK8&yN26Hh*8pf~9&%l4#s}9@{6u>=)bL zhr6TMK%RM1eec$B90|D;Tw|i&M2w%cZgZoSiUNs>kJ;#25BLm(dGF}GaU_Tv-6nDG z(>|AzB-C#Y@0^_nm+`@$YYZe3>1*Md$Qd&(&ow4mpP?qloFU#w2OxCnIs`}wDu%~- z;BI}(uNe=_z1>+4XgOg~WN4CbJu`B6;LWacc8UdTelA%t3>&dL_5Ho97xcgpyf)q4 zYx)*E)klLw;`MNfdk zM%q3|8y@Tv=C3^gsI_jeUvCW!j@}qkOM-AA7;p?&jXjzs_|11@1m|w~gkJAo7~^*! ziNc5nnn^KMJ~%%+8H}x#RFGYElIdvgVC3bGki`d;lrfb^dGc-Cs;vph+@GieqYVt} z^wPzs8>+~XV7=j}CsGj@68dx)$oDG81J-W*e!q~9$`AonidmvVp8grln-h||a8Hcj zuIOPfo<1Q#Mo(3VN=bQ}Kig=qv6N;8O~4ozj{JZqh_Z35%nk@gWgizk0O~Og$Vlk` zV&P;VhlMXxc|kdz0bp#_r%%FnG$ z!UdP&EK7xG!ad%+I1^{sV{i$ZRG@L;6j4~>Xk}UtC?T+LWI|+ybd^qOw}e;! z3Dp|GQ-F^PDi&j(j5!@e556$rHa8y_6UYr1paM$Mfya|G*yUY;35Iv1=pN_1aU2Kp zwR?lugq8<=2hfdWO7#|ouAX_1DX!hOnL19FQVZSr6{axbiPDB-Sb8pjx&>xtz{7%3amcJ zwlza?(w~tu5Jd%NPDIJ~8@*l3nV%C?6?dYvTuOqLgcOCky8t$T)?nd+PxU~pCoI!s ztQ_znt4g3mj2X_FA!?{Wm8G~ei2+bv1Tc;OlQ4r^g1>~s2a}^iLovh5lnHA{mY2$D#%DAq=fU^5 zV{AuPcNS%!kus;=m7qwD8XYZ^Tcs54&j2K2PQubfwbqE5Z*QFCK?$PKr+_fNjn1qa zz){Z=xD1zr&u}h5`2}En5hVhML>QK}FgN{f8}p)Nma;!Rb)y__vdF1K|n!g#}!W$wX+{ms-=Foa@M^-Y< zCs8|hYx~_zu|FEtzeNLol$0929fcDTD89Q;fcw5Pq`8Y(x3K?ahFpKJtFgXQPJ16H z_Czix(*xJeXC(^8I5P*YEd?yqrUI5A?wEF?jgFLwC{mBon#g8vvKMQCQR zqe3O5@^jWTW}AWTi7r2v0x1>p8hbp+>4We1?&sryp%ppcluO9tk;phA-q_((7pB

jhWAA&SRALP)#bxUM%p7tF?v1K4s^5t3#-d>p!G?aU3; z7(IEU6k4*+GL~VceDGDbJh!(SV>Eo735-rK`jm3s84v40>76L`qdqvdYZtEG_~B{B z=nb#;FQjb*T~PM4a|vBKtE- z=o2KW))RfaxyYLf9!G@;OfV5`w0v50I3sG4k|%cEFQ{ZDNkaE*xZntr7CTVSf+=7Y zdOXzYkX#Gxk3&6e)79Dsq*5@OGcj5aU5D;xhM0_mltWo&5-6J3x2|{upy!$T~`;a)z!7i`;g1 zM>#6yq~w{;4m*$gexnZ_z!F`&i$=f~82aQBrJf`sXbxE__E=IiqmK!@8^^Z6X%iKw zR=8wlw-2Mabp}obOq6sNbO-b}DdiOY*&3?HHVuyq)U!Zr;^+P5zDJnOmkyza1BvwF z$fMyQU+A+5=d-Ioo%j)1q}+wcafQuLTH1_YCgOkWZXX$TiTzA~LX#JOZOKrv2{%Q_4`#_Hjn1NMl_3VrdFmk`3f7h?M~DLs^qZp`QIb0% zYT-P;0>i^jUSe#&q`+DODnG-wSn`&I>(v#^_d97v@=M&B5r zW)pc~w?&n6W^-s#%s_{$mR-dl#yH;@R?FtE%76BVfGV@OD=87e8B-RR_Xwe4uC9Pf zzCMI7Qqr$^F*aLYeG*UFIxC|4?a#NVAwqxvZJeT^aV^LU%dQG1cw>-Nmj)Er)|X;Z(lB&x2T$??GPN{ft=X_x*CuF>oA@-Km|AW5*e+;;Bdq zv+SZIM@Iq{LXVi)PG~kfQu?IlV-n6A$D)d$wc zKbEc^*x^EtJDgz6??Ge{nP5&2QOXq>#xB~Irpc~9$uedWi954-Y z9-ptXo|wb%djF#HJ`r5Wz{oK5IxlR@8A{X1OrPFx&w-LzY16P8R)A2XNnqI5bHxrd zVfsYBJ5&uvP_YLV9U!I{h7V&5#+ZUAHkbKTGe?Q7U!UaFRC&1uEOU|1F=d-Nd+^tW z1DZ2K0F}>zPs2b1lmUPJzNkz~x~a--3>2m5S902vi4>ES)q&dN?|Yn#Vb80wG07pt z{Ireh@U-xDSm>eF2bog^&_eAIy9oE`;gcmKCqqFDiNclvr;Z}}f*!m3%W>K2D z(E|5<(Vc38OGleX`9U|tsxJG$>-_=%y1B)-sjWxMXwkaezhic!$R$~sApO2WR+;yr z4O#bSiw`5m1=saE!fPr#r9TqdL>y;1i9+xW^M>n=C9zWkQR4z%Bwn|{(O~e5l17+T z$od$|T6rDbRsNapeYOjeEhZ9L)A;6^NsJNxHsWd{p&H^L)@)v1q8 z%5X5LlJocNor_=j7VYb17(yqxA|jAMrWjvHhhGEjT9qFu%j*F5P};q&*A54gOi}jo z4AgSsZEvK)CI3rejazD_kJfNq7pAw!;b2OhLGTsm@%w(q-@8D<$SRHZPSVw&TNx8?e z#!lMxTY)JNlD1MEm9e#|K>@HW@?rLTrzj+pUT|i6q~iw?1ik&6dkP0m{le&z!j}FU zB|Wx`f2@&kE-^NryYParK!6*%P~nzy!svn94<2Ar#52NNk(_}%nLcUVw&60=6T7(K z$lW%`Qe&Did&3+ZeOwSBR54c?`PzLmv&08IABCV;RmHp;(Ma`Rw~cklaA!QnAT7W` z(<%=22{Wdl*2jUz5ni`=-sW`?D-;Pr93LzCJpl#I=U>Po32q7`q0ugDRD`;d=MXp# z9-HIacp}`l?S_craX!#{$M4s_aa}K@obWimSeeZR(E>-sc|K6<84xfsh^7Pgb)i53 zV^9@e(h!Duw zZ#BaxF~+nAV#*2hNG+KtBB+ZI!WLt!W!~)GpffIloWeOTO!EsUBHDaxX%6wtl{hxLwezxOU; zC1$FAzV|gY`yM*AF1{7$WWm>3Cf9{r@yMgM*)S%NPm&+sBDd+o60DyW9uV2sqyt2IxP&E6e*y4$h;ME^8C?K$P`Q*p(_GDn=*VZg)NB(3N{Ef3|bogACKo$ Uyj>3YKL7v#07*qoM6N<$f&jA$5dZ)H diff --git a/apps/launcher/resources/openmw_icon.png b/apps/launcher/resources/openmw_icon.png deleted file mode 100644 index 7a5393821f378970c6ca73788b9141161c9cff09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60039 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 p@Ja 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 From fc095b902dffe8d2b598d575569e1b22b88d9a57 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 8 Apr 2011 00:04:09 +0200 Subject: [PATCH 016/111] Added some more new files --- apps/launcher/datafilespage.cpp | 315 ++++++++++++++++++ apps/launcher/datafilespage.hpp | 45 +++ apps/launcher/graphicspage.cpp | 1 + apps/launcher/graphicspage.hpp | 1 + apps/launcher/lineedit.hpp | 35 ++ apps/launcher/maindialog.hpp | 36 ++ apps/launcher/playpage.cpp | 33 ++ apps/launcher/playpage.hpp | 20 ++ apps/launcher/resources/openmw-header.png | Bin 0 -> 108088 bytes .../launcher/resources/openmw-plugin-icon.png | Bin 0 -> 6557 bytes background.png | Bin 0 -> 50886 bytes 11 files changed, 486 insertions(+) create mode 100644 apps/launcher/datafilespage.cpp create mode 100644 apps/launcher/datafilespage.hpp create mode 100644 apps/launcher/graphicspage.cpp create mode 100644 apps/launcher/graphicspage.hpp create mode 100644 apps/launcher/lineedit.hpp create mode 100644 apps/launcher/maindialog.hpp create mode 100644 apps/launcher/playpage.cpp create mode 100644 apps/launcher/playpage.hpp create mode 100644 apps/launcher/resources/openmw-header.png create mode 100644 apps/launcher/resources/openmw-plugin-icon.png create mode 100644 background.png diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp new file mode 100644 index 0000000000..646d31803f --- /dev/null +++ b/apps/launcher/datafilespage.cpp @@ -0,0 +1,315 @@ +#include + +#include // TODO: Remove + +#include + +#include "datafilespage.hpp" +#include "lineedit.hpp" + +using namespace ESM; + +DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) +{ + mDataFilesModel = new QStandardItemModel(); // Contains all plugins with masters + mPluginsModel = new QStandardItemModel(); // Contains selectable plugins + + mPluginsSelectModel = new QItemSelectionModel(mPluginsModel); + + //QPushButton *deselectButton = new QPushButton(tr("Deselect All")); + QLabel *filterLabel = new QLabel(tr("Filter:"), this); + LineEdit *filterLineEdit = new LineEdit(this); + + QHBoxLayout *topLayout = new QHBoxLayout(); + QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + topLayout->addItem(hSpacer1); + topLayout->addWidget(filterLabel); + topLayout->addWidget(filterLineEdit); + + mMastersWidget = new QTableWidget(this); // Contains the available masters + mPluginsTable = new QTableView(this); + + // Add both tables to a splitter + QSplitter *splitter = new QSplitter(this); + splitter->setOrientation(Qt::Vertical); + + splitter->addWidget(mPluginsTable); + splitter->addWidget(mMastersWidget); + + + // Adjust the default widget heights inside the splitter + QList sizeList; + sizeList << 200 << 400; + splitter->setSizes(sizeList); + + // Bottom part with profile options + QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); + + // TEST + mProfileModel = new QStringListModel(); + QStringList profileList; + profileList << "Default" << "New" << "Yeah" << "Cool story bro!"; + mProfileModel->setStringList(profileList); + + mProfileComboBox = new QComboBox(this); + mProfileComboBox->setModel(mProfileModel); + + mProfileComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + mProfileComboBox->setInsertPolicy(QComboBox::InsertAtBottom); + //mProfileComboBox->addItem(QString("New Profile")); + + QToolButton *NewProfileToolButton = new QToolButton(this); + NewProfileToolButton->setIcon(QIcon::fromTheme("document-new")); + + QToolButton *CopyProfileToolButton = new QToolButton(this); + CopyProfileToolButton->setIcon(QIcon::fromTheme("edit-copy")); + + QToolButton *DeleteProfileToolButton = new QToolButton(this); + DeleteProfileToolButton->setIcon(QIcon::fromTheme("document-close")); + + QHBoxLayout *bottomLayout = new QHBoxLayout(); + + bottomLayout->addWidget(profileLabel); + bottomLayout->addWidget(mProfileComboBox); + bottomLayout->addWidget(NewProfileToolButton); + bottomLayout->addWidget(CopyProfileToolButton); + bottomLayout->addWidget(DeleteProfileToolButton); + + QVBoxLayout *pageLayout = new QVBoxLayout(this); + // Add some space above and below the page items + QSpacerItem *vSpacer1 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + QSpacerItem *vSpacer3 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + + //pageLayout->addItem(vSpacer1); + pageLayout->addLayout(topLayout); + pageLayout->addItem(vSpacer2); + pageLayout->addWidget(splitter); + pageLayout->addLayout(bottomLayout); + pageLayout->addItem(vSpacer3); + + setupDataFiles(); + + connect(mMastersWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); + connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); + connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); + +} + +void DataFilesPage::setupDataFiles() +{ + mMastersWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + mMastersWidget->setSelectionMode(QAbstractItemView::MultiSelection); + mMastersWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + mMastersWidget->setAlternatingRowColors(true); + mMastersWidget->horizontalHeader()->setStretchLastSection(true); + mMastersWidget->horizontalHeader()->hide(); + mMastersWidget->verticalHeader()->hide(); + mMastersWidget->insertColumn(0); + + mPluginsTable->setModel(mPluginsModel); + mPluginsTable->setSelectionModel(mPluginsSelectModel); + mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); + mPluginsTable->setSelectionMode(QAbstractItemView::ExtendedSelection); + mPluginsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); + mPluginsTable->setAlternatingRowColors(true); + mPluginsTable->horizontalHeader()->setStretchLastSection(true); + mPluginsTable->horizontalHeader()->hide(); + + + mPluginsTable->setDragEnabled(true); + mPluginsTable->setDragDropMode(QAbstractItemView::InternalMove); + mPluginsTable->setDropIndicatorShown(true); + mPluginsTable->setDragDropOverwriteMode(false); + mPluginsTable->viewport()->setAcceptDrops(true); + + mPluginsTable->setContextMenuPolicy(Qt::CustomContextMenu); + + // Some testing TODO TODO TODO + + QDir dataFilesDir("data/"); + + if (!dataFilesDir.exists()) + qWarning("Cannot find the plugin directory"); + + dataFilesDir.setNameFilters((QStringList() << "*.esp")); // Only load plugins + + QStringList dataFiles = dataFilesDir.entryList(); + + for (int i=0; i itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); + + if (itemList.isEmpty()) // Master is not yet in the widget + { + mMastersWidget->insertRow(i); + QTableWidgetItem *item = new QTableWidgetItem(currentMaster); + mMastersWidget->setItem(i, 0, item); + } + } + + availableMasters.sort(); // Sort the masters alphabetically + + // Now we put the currentFile in the mDataFilesModel under its masters + QStandardItem *parent = new QStandardItem(availableMasters.join(",")); + QStandardItem *child = new QStandardItem(currentFile); + + QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); + + + if (masterList.isEmpty()) { // Masters node not yet in the mDataFilesModel + parent->appendRow(child); + mDataFilesModel->appendRow(parent); + } else { + // Masters node exists, append current plugin + foreach (QStandardItem *currentItem, masterList) { + currentItem->appendRow(child); + } + } + } +} + +void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) +{ + if (mMastersWidget->selectionModel()->hasSelection()) { + const QModelIndexList selectedIndexes = mMastersWidget->selectionModel()->selectedIndexes(); + + QStringList masters; + QString masterstr; + + // Create a QStringList containing all the masters + foreach (const QModelIndex &index, selectedIndexes) { + masters.append(index.data().toString()); + } + + masters.sort(); + masterstr = masters.join(","); // Make a comma-separated QString + + qDebug() << "Masters" << masterstr; + + // Iterate over all masters in the datafilesmodel to see if they are selected + for (int r=0; rrowCount(); ++r) { + QModelIndex currentIndex = mDataFilesModel->index(r, 0); + QString master = currentIndex.data().toString(); + + if (currentIndex.isValid()) { + // See if the current master is in the string with selected masters + if (masterstr.contains(master)) + { + // Append the plugins from the current master to pluginsmodel + addPlugins(currentIndex); + mPluginsTable->resizeRowsToContents(); + } + } + } + } + + // See what plugins to remove + QModelIndexList deselectedIndexes = deselected.indexes(); + + if (!deselectedIndexes.isEmpty()) { + foreach (const QModelIndex ¤tIndex, deselectedIndexes) { + + QString master = currentIndex.data().toString(); + master.prepend("*"); + master.append("*"); + QList itemList = mDataFilesModel->findItems(master, Qt::MatchWildcard); + + if (itemList.isEmpty()) + qDebug() << "Empty as shit"; + + foreach (const QStandardItem *currentItem, itemList) { + + QModelIndex index = currentItem->index(); + qDebug() << "Master to remove plugins of:" << index.data().toString(); + + removePlugins(index); + } + } + } +} + +void DataFilesPage::addPlugins(const QModelIndex &index) +{ + // Find the plugins in the datafilesmodel and append them to the pluginsmodel + if (!index.isValid()) + return; + + for (int r=0; rrowCount(index); ++r ) { + QModelIndex childIndex = index.child(r, 0); + const QString childIndexData = QVariant(mDataFilesModel->data(childIndex)).toString(); + + if (childIndex.isValid()) { + // Now we see if the pluginsmodel already contains this plugin + QList itemList = mPluginsModel->findItems(childIndexData); + + if (itemList.isEmpty()) + { + // Plugin not yet in the pluginsmodel, add it + QStandardItem *item = new QStandardItem(childIndexData); + item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); + item->setCheckable(true); + + mPluginsModel->appendRow(item); + } + } + + } + +} + +void DataFilesPage::removePlugins(const QModelIndex &index) +{ + + if (!index.isValid()) + return; + + for (int r=0; rrowCount(index); ++r) { + QModelIndex childIndex = index.child(r, 0); + + QList itemList = mPluginsModel->findItems(QVariant(childIndex.data()).toString()); + + if (!itemList.isEmpty()) { + foreach (const QStandardItem *currentItem, itemList) { + qDebug() << "Remove plugin:" << currentItem->data(Qt::DisplayRole).toString(); + + mPluginsModel->removeRow(currentItem->row()); + } + } + } + +} + +void DataFilesPage::setCheckstate(QModelIndex index) +{ + if (!index.isValid()) + return; + + if (mPluginsModel->data(index, Qt::CheckStateRole) == Qt::Checked) { + // Selected row is checked, uncheck it + mPluginsModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); + } else { + mPluginsModel->setData(index, Qt::Checked, Qt::CheckStateRole); + } +} + +void DataFilesPage::resizeRows() +{ + // Contents changed + mPluginsTable->resizeRowsToContents(); +} diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp new file mode 100644 index 0000000000..689c17ef44 --- /dev/null +++ b/apps/launcher/datafilespage.hpp @@ -0,0 +1,45 @@ +#ifndef DATAFILESPAGE_H +#define DATAFILESPAGE_H + +#include +#include + +class QTableWidget; +class QTableView; +class QComboBox; +class QStandardItemModel; +class QItemSelection; +class QItemSelectionModel; +class QStringListModel; + +class DataFilesPage : public QWidget +{ + Q_OBJECT + +public: + DataFilesPage(QWidget *parent = 0); + + QComboBox *mProfileComboBox; + QStringListModel *mProfileModel; + +public slots: + void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void setCheckstate(QModelIndex index); + void resizeRows(); + +private: + QTableWidget *mMastersWidget; + QTableView *mPluginsTable; + + QStandardItemModel *mDataFilesModel; + QStandardItemModel *mPluginsModel; + + QItemSelectionModel *mPluginsSelectModel; + + void setupDataFiles(); + void addPlugins(const QModelIndex &index); + void removePlugins(const QModelIndex &index); + +}; + +#endif diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp new file mode 100644 index 0000000000..8d1c8b69c3 --- /dev/null +++ b/apps/launcher/graphicspage.cpp @@ -0,0 +1 @@ + diff --git a/apps/launcher/graphicspage.hpp b/apps/launcher/graphicspage.hpp new file mode 100644 index 0000000000..8d1c8b69c3 --- /dev/null +++ b/apps/launcher/graphicspage.hpp @@ -0,0 +1 @@ + diff --git a/apps/launcher/lineedit.hpp b/apps/launcher/lineedit.hpp new file mode 100644 index 0000000000..7a96a523c8 --- /dev/null +++ b/apps/launcher/lineedit.hpp @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (c) 2007 Trolltech ASA +** +** Use, modification and distribution is allowed without limitation, +** warranty, liability or support of any kind. +** +****************************************************************************/ + +#ifndef LINEEDIT_H +#define LINEEDIT_H + +#include + +class QToolButton; + +class LineEdit : public QLineEdit +{ + Q_OBJECT + +public: + LineEdit(QWidget *parent = 0); + +protected: + void resizeEvent(QResizeEvent *); + +private slots: + void updateCloseButton(const QString &text); + +private: + QToolButton *clearButton; +}; + +#endif // LIENEDIT_H + diff --git a/apps/launcher/maindialog.hpp b/apps/launcher/maindialog.hpp new file mode 100644 index 0000000000..c1b7a6a81a --- /dev/null +++ b/apps/launcher/maindialog.hpp @@ -0,0 +1,36 @@ +#ifndef MAINDIALOG_H +#define MAINDIALOG_H + +#include + +class QListWidget; +class QListWidgetItem; +class QStackedWidget; +class QStringListModel; + +class PlayPage; +class DataFilesPage; + +class MainDialog : public QDialog +{ + Q_OBJECT + +public: + MainDialog(); + + //QStringListModel *mProfileModel; + +public slots: + void changePage(QListWidgetItem *current, QListWidgetItem *previous); + +private: + void createIcons(); + + QListWidget *mIconWidget; + QStackedWidget *mPagesWidget; + + PlayPage *mPlayPage; + DataFilesPage *mDataFilesPage; +}; + +#endif diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp new file mode 100644 index 0000000000..18360ffc6e --- /dev/null +++ b/apps/launcher/playpage.cpp @@ -0,0 +1,33 @@ +#include + +#include "playpage.hpp" + +PlayPage::PlayPage(QWidget *parent) : QWidget(parent) +{ + QPushButton *playButton = new QPushButton(tr("Play")); + playButton->setMinimumSize(QSize(150, 50)); + + // TEST + mProfileModel = new QStringListModel(); + QStringList profileList; + profileList << "Other" << "Bla" << "No" << "SEGFAULT!"; + mProfileModel->setStringList(profileList); + + mProfileComboBox = new QComboBox(this); + //mProfileComboBox->setMinimumWidth(200); + mProfileComboBox->setModel(mProfileModel); + + QHBoxLayout *buttonLayout = new QHBoxLayout(); + QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + QSpacerItem *hSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + buttonLayout->addItem(hSpacer1); + buttonLayout->addWidget(playButton); + buttonLayout->addItem(hSpacer2); + + QVBoxLayout *pageLayout = new QVBoxLayout(this); + + pageLayout->addLayout(buttonLayout); + pageLayout->addWidget(mProfileComboBox); + +} \ No newline at end of file diff --git a/apps/launcher/playpage.hpp b/apps/launcher/playpage.hpp new file mode 100644 index 0000000000..dcf7c48f37 --- /dev/null +++ b/apps/launcher/playpage.hpp @@ -0,0 +1,20 @@ +#ifndef PLAYPAGE_H +#define PLAYPAGE_H + +#include + +class QComboBox; +class QStringListModel; + +class PlayPage : public QWidget +{ + Q_OBJECT + +public: + PlayPage(QWidget *parent = 0); + + QComboBox *mProfileComboBox; + QStringListModel *mProfileModel; +}; + +#endif \ No newline at end of file diff --git a/apps/launcher/resources/openmw-header.png b/apps/launcher/resources/openmw-header.png new file mode 100644 index 0000000000000000000000000000000000000000..a3045ce6154159300a24d8036798ceec2ebcc924 GIT binary patch literal 108088 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

Ty_~sA~&{^k>%aw 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

Y^b_|~sG||`!B{8+*chQG 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%0D-18+=;LewB8Rmp5Ez+0MD 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 Uyj>3YKL7v#07*qoM6N<$f&jA$5dZ)H literal 0 HcmV?d00001 diff --git a/apps/launcher/resources/openmw-plugin-icon.png b/apps/launcher/resources/openmw-plugin-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c34cba554347d06645013705e70e1a38ae29c59e GIT binary patch literal 6557 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 P00000NkvXXu0mjfuFa6a literal 0 HcmV?d00001 diff --git a/background.png b/background.png new file mode 100644 index 0000000000000000000000000000000000000000..b51a97f94b792eafa1192f715b1eb7aaeff8f2f1 GIT binary patch literal 50886 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 D#A6l5 literal 0 HcmV?d00001 From 5754a132c50ce1ed30def70a1191db7d478a371b Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 13 Apr 2011 22:59:03 +0200 Subject: [PATCH 017/111] More modifications --- apps/launcher/datafilespage.cpp | 9 ++++----- apps/launcher/maindialog.cpp | 5 +---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 646d31803f..c3aa6b0d30 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -32,15 +32,14 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Add both tables to a splitter QSplitter *splitter = new QSplitter(this); - splitter->setOrientation(Qt::Vertical); + splitter->setOrientation(Qt::Horizontal); - splitter->addWidget(mPluginsTable); splitter->addWidget(mMastersWidget); + splitter->addWidget(mPluginsTable); - - // Adjust the default widget heights inside the splitter + // Adjust the default widget widths inside the splitter QList sizeList; - sizeList << 200 << 400; + sizeList << 100 << 300; splitter->setSizes(sizeList); // Bottom part with profile options diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 68b2c2e759..1bb8f1d592 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -26,10 +26,7 @@ MainDialog::MainDialog() mIconWidget->setFixedHeight(80); mIconWidget->setSpacing(4); mIconWidget->setCurrentRow(0); - //QSize itemSize(80, 80); - - //mIconWidget->setGridSize ( itemSize ); - + mIconWidget->setFlow(QListView::LeftToRight); QGroupBox *groupBox = new QGroupBox(this); From eaea48011de8dd05b61aef9a569a7ef091a217c9 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 27 Mar 2011 23:28:46 +0400 Subject: [PATCH 018/111] Now working mac app bundle generated during build (includes plugins & resources). Still need to copy frameworks before deployment. FindOGRE.cmake finds Ogre plugins dir on OS X. Default OS X data path set to the data subdir near .app. README_Mac updated. --- CMakeLists.txt | 55 ++++++++++++++---- README_Mac.md | 32 +++-------- cmake/FindOGRE.cmake | 21 ++++++- extern/caelum/CMakeLists.txt | 92 ++++++++++++++++--------------- extern/mygui_3.0.1/CMakeLists.txt | 6 +- files/plugins.cfg.mac | 2 +- 6 files changed, 125 insertions(+), 83 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 53ba4ab31e..b0ae913883 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,9 @@ project(OpenMW) +IF (APPLE) + set(APP_BUNDLE_DIR "${OpenMW_BINARY_DIR}/OpenMW.app") +ENDIF (APPLE) + # Sound source selection option(USE_AUDIERE "use Audiere for sound" OFF) option(USE_FFMPEG "use ffmpeg for sound" OFF) @@ -14,7 +18,7 @@ if(DPKG_PROGRAM) else() if (APPLE) # set path inside bundle - set(MORROWIND_DATA_FILES "Contents/Resources/data" CACHE PATH "location of Morrowind data files") + set(MORROWIND_DATA_FILES "../data" CACHE PATH "location of Morrowind data files") set(MORROWIND_RESOURCE_FILES "Contents/Resources/resources" CACHE PATH "location of Morrowind data files") else() set(MORROWIND_DATA_FILES "data" CACHE PATH "location of Morrowind data files") @@ -286,25 +290,47 @@ add_definitions(-DCAELUM_STATIC) # Specify build paths -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}") +if (APPLE) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APP_BUNDLE_DIR}/Contents/MacOS") +else (APPLE) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}") +endif (APPLE) # Other files if (WIN32) -configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.win32 - "${OpenMW_BINARY_DIR}/plugins.cfg" COPYONLY) + configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.win32 + "${OpenMW_BINARY_DIR}/plugins.cfg" COPYONLY) endif (WIN32) if (LINUX) -configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.linux - "${OpenMW_BINARY_DIR}/plugins.cfg") + configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.linux + "${OpenMW_BINARY_DIR}/plugins.cfg") endif (LINUX) if (APPLE) -configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.mac - "${OpenMW_BINARY_DIR}/plugins.cfg") + configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.mac + "${APP_BUNDLE_DIR}/Contents/MacOS/plugins.cfg") + + configure_file(${OpenMW_SOURCE_DIR}/files/mac/Info.plist + "${APP_BUNDLE_DIR}/Contents/Info.plist" COPYONLY) + + configure_file(${OpenMW_SOURCE_DIR}/files/mac/openmw.icns + "${APP_BUNDLE_DIR}/Contents/Resources/OpenMW.icns" COPYONLY) + + + # prepare plugins + configure_file(${OGRE_PLUGIN_DIR}/RenderSystem_GL.dylib + "${APP_BUNDLE_DIR}/Contents/Plugins/RenderSystem_GL.dylib" COPYONLY) + + configure_file(${OGRE_PLUGIN_DIR}/Plugin_OctreeSceneManager.dylib + "${APP_BUNDLE_DIR}/Contents/Plugins/Plugin_OctreeSceneManager.dylib" COPYONLY) + + configure_file(${OGRE_PLUGIN_DIR}/Plugin_ParticleFX.dylib + "${APP_BUNDLE_DIR}/Contents/Plugins/Plugin_ParticleFX.dylib" COPYONLY) + endif (APPLE) configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg - "${OpenMW_BINARY_DIR}/openmw.cfg") + "${APP_BUNDLE_DIR}/Contents/MacOS/openmw.cfg") # Compiler settings if (CMAKE_COMPILER_IS_GNUCC) @@ -315,10 +341,15 @@ endif (CMAKE_COMPILER_IS_GNUCC) # Apple bundling if (APPLE) set(MISC_FILES - ${OpenMW_BINARY_DIR}/openmw.cfg - ${OpenMW_BINARY_DIR}/plugins.cfg) + ${APP_BUNDLE_DIR}/Contents/MacOS/openmw.cfg + ${APP_BUNDLE_DIR}/Contents/MacOS/plugins.cfg) + + set(OGRE_PLUGINS + ${APP_BUNDLE_DIR}/Contents/Plugins/*) + install(FILES ${MISC_FILES} DESTINATION ../MacOS) -install(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION ../Resources) +install(DIRECTORY "${APP_BUNDLE_DIR}/Contents/Plugins" DESTINATION ..) +install(DIRECTORY "${APP_BUNDLE_DIR}/Contents/Resources/resources" DESTINATION ../Resources) set(CPACK_GENERATOR "Bundle") set(CPACK_BUNDLE_PLIST "${CMAKE_SOURCE_DIR}/files/mac/Info.plist") set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/files/mac/openmw.icns") diff --git a/README_Mac.md b/README_Mac.md index ee5faca981..39382e0c9d 100644 --- a/README_Mac.md +++ b/README_Mac.md @@ -49,8 +49,8 @@ Getting OpenMW Working --link-shared,static --prefix=$OMW_LIB_PREFIX install -5. Download [Ogre][] SDK (tested with 1.7.2) and move `lib/Release/Ogre.framework` into - `Library/Frameworks`. +5. Download [Ogre][] SDK (tested with 1.7.2), unpack it and move +`lib/Release/Ogre.framework` into `Library/Frameworks`. 6. Download [OIS][] and use the XCode project provided in `ois/Mac/XCode-2.2`. Be sure to set your build architecture to @@ -92,6 +92,7 @@ Getting OpenMW Working $ cd /path/to/open/build/dir $ cmake \ -D CMAKE_OSX_ARCHITECTURES=i386 \ + -D OGRESDK=/path/to/ogre/sdk \ -D BOOST_INCLUDEDIR=$OMW_LIB_PREFIX/include/boost-1_45 \ -D BOOST_LIBRARYDIR=$OMW_LIB_PREFIX/lib \ -D SNDFILE_INCLUDE_DIR=$OMW_LIB_PREFIX/include \ @@ -108,32 +109,17 @@ Getting OpenMW Working You can use -G"Xcode" if you prefer Xcode, or -G"Eclipse CDT4 - Unix Makefiles" if you prefer Eclipse. You also can specify -D CMAKE_BUILD_TYPE=Debug for debug build. - -11. In build directory create directory for game resources: - $ cd /path/to/openmw/build/dir - $ mkdir Contents - $ mkdir Contents/Resources - $ mkdir Contents/Plugins - Copy Ogre plugins from Ogre SDK to Plugins subdir: - $ cp /path/to/ogre/sdk/lib/*.dylib Contents/Plugins - Create symlink to resources subdirectory: - $ ln -s resources Contents/Resources/resources - Create symlinks for *.cfg files: - $ ln -s plugins.cfg Contents/MacOS/plugins.cfg - $ ln -s openmw.cfg Contents/MacOS/openmw.cfg -12. Move your Morrowind `Data Files` directory into the `Contents/Resources` +11. Copy your Morrowind `Data Files` directory into the OpenMW build dir with the name `data` or create symlink: - $ ln -s /path/to/morrowind/data/files Contents/Resources/data + $ ln -s /path/to/morrowind/data/files /path/to/openmw/build/dir/data -13. From your build directory run: - $ ./openmw +12. From your build directory run: + $ OpenMW.app/Contents/MacOS/openmw + or: + $ open OpenMW.app Enjoy! -14. Optionally you can create .app bundle: - $ make package - But for now you shold manually copy Contents directory from build directory to bundle - (because there is no plugins and resources in generated .app). [boost]: http://www.boost.org diff --git a/cmake/FindOGRE.cmake b/cmake/FindOGRE.cmake index eebb20338e..ce3993805b 100644 --- a/cmake/FindOGRE.cmake +++ b/cmake/FindOGRE.cmake @@ -12,9 +12,9 @@ # For details see the accompanying COPYING-CMAKE-SCRIPTS file. CMAKE_POLICY(PUSH) -IF (OGRE_LIBRARIES AND OGRE_INCLUDE_DIR) +IF (OGRE_LIBRARIES AND OGRE_INCLUDE_DIR AND OGRE_LIB_DIR AND OGRE_PLUGIN_DIR) SET(OGRE_FIND_QUIETLY TRUE) # Already in cache, be silent -ENDIF (OGRE_LIBRARIES AND OGRE_INCLUDE_DIR) +ENDIF (OGRE_LIBRARIES AND OGRE_INCLUDE_DIR AND OGRE_LIB_DIR AND OGRE_PLUGIN_DIR) IF (WIN32) #Windows MESSAGE(STATUS "Looking for OGRE") @@ -47,7 +47,16 @@ IF (UNIX AND NOT APPLE) PKG_CHECK_MODULES(OGRE OGRE) ENDIF (UNIX AND NOT APPLE) +# on OS X we need Ogre SDK because framework doesn't include all libs, just Ogre Main lib IF (APPLE) + IF (OGRESDK) + MESSAGE(STATUS "Using Ogre SDK") + SET(OGRE_LIB_DIR ${OGRESDK}/lib) + ELSE (OGRESDK) + MESSAGE(FATAL_ERROR "Path to Ogre SDK not specified. Specify OGRESDK.") + ENDIF (OGRESDK) + + FIND_PATH(OGRE_INCLUDE_DIR Ogre.h PATHS /Library/Frameworks @@ -71,7 +80,12 @@ SET(OGRE_LIB_DIR ${OGRE_LIB_DIR} CACHE PATH "") if(OGRE_LIB_DIR) CMAKE_POLICY(SET CMP0009 NEW) - FILE(GLOB_RECURSE OGRE_PLUGINS "${OGRE_LIB_DIR}/Plugin_*.so") + IF (NOT APPLE) + FILE(GLOB_RECURSE OGRE_PLUGINS "${OGRE_LIB_DIR}/Plugin_*.so") + ENDIF (NOT APPLE) + IF (APPLE) + FILE(GLOB_RECURSE OGRE_PLUGINS "${OGRE_LIB_DIR}/Plugin_*.dylib") + ENDIF (APPLE) FOREACH (OGRE_PLUGINS_FILE ${OGRE_PLUGINS}) STRING(REGEX REPLACE "/[^/]*$" "" OGRE_PLUGIN_DIR ${OGRE_PLUGINS_FILE}) ENDFOREACH(OGRE_PLUGINS_FILE) @@ -85,6 +99,7 @@ IF (OGRE_FOUND) IF (NOT OGRE_FIND_QUIETLY) MESSAGE(STATUS " libraries : ${OGRE_LIBRARIES} from ${OGRE_LIB_DIR}") MESSAGE(STATUS " includes : ${OGRE_INCLUDE_DIR}") + MESSAGE(STATUS " plugins : ${OGRE_PLUGIN_DIR}") ENDIF (NOT OGRE_FIND_QUIETLY) ELSE (OGRE_FOUND) IF (OGRE_FIND_REQUIRED) diff --git a/extern/caelum/CMakeLists.txt b/extern/caelum/CMakeLists.txt index c1854904c7..88ed51fad4 100755 --- a/extern/caelum/CMakeLists.txt +++ b/extern/caelum/CMakeLists.txt @@ -19,46 +19,52 @@ add_library(caelum STATIC ${SOURCES}) # # Resources # -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/AtmosphereDepth.png "${OpenMW_BINARY_DIR}/resources/caelum/AtmosphereDepth.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumGroundFog.cg "${OpenMW_BINARY_DIR}/resources/caelum/CaelumGroundFog.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumLayeredClouds.cg "${OpenMW_BINARY_DIR}/resources/caelum/CaelumLayeredClouds.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumPhaseMoon.cg "${OpenMW_BINARY_DIR}/resources/caelum/CaelumPhaseMoon.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumPointStarfield.cg "${OpenMW_BINARY_DIR}/resources/caelum/CaelumPointStarfield.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumSkyDome.cg "${OpenMW_BINARY_DIR}/resources/caelum/CaelumSkyDome.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CloudCoverLookup.png "${OpenMW_BINARY_DIR}/resources/caelum/CloudCoverLookup.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthComposer.cg "${OpenMW_BINARY_DIR}/resources/caelum/DepthComposer.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthComposer.compositor "${OpenMW_BINARY_DIR}/resources/caelum/DepthComposer.compositor" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthComposer.material "${OpenMW_BINARY_DIR}/resources/caelum/DepthComposer.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthRender.program "${OpenMW_BINARY_DIR}/resources/caelum/DepthRender.program" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/EarthClearSky2.png "${OpenMW_BINARY_DIR}/resources/caelum/EarthClearSky2.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/GroundFog.material "${OpenMW_BINARY_DIR}/resources/caelum/GroundFog.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/GroundFog.program "${OpenMW_BINARY_DIR}/resources/caelum/GroundFog.program" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Haze.program "${OpenMW_BINARY_DIR}/resources/caelum/Haze.program" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/LayeredClouds.material "${OpenMW_BINARY_DIR}/resources/caelum/LayeredClouds.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/MinimalCompositorVP.cg "${OpenMW_BINARY_DIR}/resources/caelum/MinimalCompositorVP.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/MinimalCompositorVP.program "${OpenMW_BINARY_DIR}/resources/caelum/MinimalCompositorVP.program" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/moon.material "${OpenMW_BINARY_DIR}/resources/caelum/moon.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/moon_disc.dds "${OpenMW_BINARY_DIR}/resources/caelum/moon_disc.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise1.dds "${OpenMW_BINARY_DIR}/resources/caelum/noise1.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise2.dds "${OpenMW_BINARY_DIR}/resources/caelum/noise2.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise3.dds "${OpenMW_BINARY_DIR}/resources/caelum/noise3.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise4.dds "${OpenMW_BINARY_DIR}/resources/caelum/noise4.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/PointStarfield.material "${OpenMW_BINARY_DIR}/resources/caelum/PointStarfield.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Precipitation.cg "${OpenMW_BINARY_DIR}/resources/caelum/Precipitation.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Precipitation.compositor "${OpenMW_BINARY_DIR}/resources/caelum/Precipitation.compositor" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Precipitation.material "${OpenMW_BINARY_DIR}/resources/caelum/Precipitation.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_drizzle.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_drizzle.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_hail.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_hail.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_icecrystals.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_icecrystals.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_icepellets.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_icepellets.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_rain.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_rain.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_smallhail.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_smallhail.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_snow.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_snow.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_snowgrains.png "${OpenMW_BINARY_DIR}/resources/caelum/precipitation_snowgrains.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/SkyDome.material "${OpenMW_BINARY_DIR}/resources/caelum/SkyDome.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/sphere.mesh "${OpenMW_BINARY_DIR}/resources/caelum/sphere.mesh" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Starfield.jpg "${OpenMW_BINARY_DIR}/resources/caelum/Starfield.jpg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Starfield.material "${OpenMW_BINARY_DIR}/resources/caelum/Starfield.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Sun.material "${OpenMW_BINARY_DIR}/resources/caelum/Sun.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/SunGradient.png "${OpenMW_BINARY_DIR}/resources/caelum/SunGradient.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/sun_disc.png "${OpenMW_BINARY_DIR}/resources/caelum/sun_disc.png" COPYONLY) +if (APPLE) + SET(CAELUM_RES_DEST "${APP_BUNDLE_DIR}/Contents/Resources") +else (APPLE) + SET(CAELUM_RES_DEST "${OpenMW_BINARY_DIR}") +endif (APPLE) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/AtmosphereDepth.png "${CAELUM_RES_DEST}/resources/caelum/AtmosphereDepth.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumGroundFog.cg "${CAELUM_RES_DEST}/resources/caelum/CaelumGroundFog.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumLayeredClouds.cg "${CAELUM_RES_DEST}/resources/caelum/CaelumLayeredClouds.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumPhaseMoon.cg "${CAELUM_RES_DEST}/resources/caelum/CaelumPhaseMoon.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumPointStarfield.cg "${CAELUM_RES_DEST}/resources/caelum/CaelumPointStarfield.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CaelumSkyDome.cg "${CAELUM_RES_DEST}/resources/caelum/CaelumSkyDome.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/CloudCoverLookup.png "${CAELUM_RES_DEST}/resources/caelum/CloudCoverLookup.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthComposer.cg "${CAELUM_RES_DEST}/resources/caelum/DepthComposer.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthComposer.compositor "${CAELUM_RES_DEST}/resources/caelum/DepthComposer.compositor" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthComposer.material "${CAELUM_RES_DEST}/resources/caelum/DepthComposer.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/DepthRender.program "${CAELUM_RES_DEST}/resources/caelum/DepthRender.program" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/EarthClearSky2.png "${CAELUM_RES_DEST}/resources/caelum/EarthClearSky2.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/GroundFog.material "${CAELUM_RES_DEST}/resources/caelum/GroundFog.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/GroundFog.program "${CAELUM_RES_DEST}/resources/caelum/GroundFog.program" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Haze.program "${CAELUM_RES_DEST}/resources/caelum/Haze.program" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/LayeredClouds.material "${CAELUM_RES_DEST}/resources/caelum/LayeredClouds.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/MinimalCompositorVP.cg "${CAELUM_RES_DEST}/resources/caelum/MinimalCompositorVP.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/MinimalCompositorVP.program "${CAELUM_RES_DEST}/resources/caelum/MinimalCompositorVP.program" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/moon.material "${CAELUM_RES_DEST}/resources/caelum/moon.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/moon_disc.dds "${CAELUM_RES_DEST}/resources/caelum/moon_disc.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise1.dds "${CAELUM_RES_DEST}/resources/caelum/noise1.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise2.dds "${CAELUM_RES_DEST}/resources/caelum/noise2.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise3.dds "${CAELUM_RES_DEST}/resources/caelum/noise3.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/noise4.dds "${CAELUM_RES_DEST}/resources/caelum/noise4.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/PointStarfield.material "${CAELUM_RES_DEST}/resources/caelum/PointStarfield.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Precipitation.cg "${CAELUM_RES_DEST}/resources/caelum/Precipitation.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Precipitation.compositor "${CAELUM_RES_DEST}/resources/caelum/Precipitation.compositor" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Precipitation.material "${CAELUM_RES_DEST}/resources/caelum/Precipitation.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_drizzle.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_drizzle.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_hail.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_hail.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_icecrystals.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_icecrystals.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_icepellets.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_icepellets.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_rain.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_rain.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_smallhail.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_smallhail.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_snow.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_snow.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/precipitation_snowgrains.png "${CAELUM_RES_DEST}/resources/caelum/precipitation_snowgrains.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/SkyDome.material "${CAELUM_RES_DEST}/resources/caelum/SkyDome.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/sphere.mesh "${CAELUM_RES_DEST}/resources/caelum/sphere.mesh" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Starfield.jpg "${CAELUM_RES_DEST}/resources/caelum/Starfield.jpg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Starfield.material "${CAELUM_RES_DEST}/resources/caelum/Starfield.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/Sun.material "${CAELUM_RES_DEST}/resources/caelum/Sun.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/SunGradient.png "${CAELUM_RES_DEST}/resources/caelum/SunGradient.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/sun_disc.png "${CAELUM_RES_DEST}/resources/caelum/sun_disc.png" COPYONLY) diff --git a/extern/mygui_3.0.1/CMakeLists.txt b/extern/mygui_3.0.1/CMakeLists.txt index d7e0bd4832..8101ad91a7 100644 --- a/extern/mygui_3.0.1/CMakeLists.txt +++ b/extern/mygui_3.0.1/CMakeLists.txt @@ -22,7 +22,11 @@ add_subdirectory(OgrePlatform) # Copy resource files into the build directory set(SDIR ${CMAKE_CURRENT_SOURCE_DIR}/openmw_resources) -set(DDIR ${OpenMW_BINARY_DIR}/resources/mygui) +if (APPLE) + set(DDIR ${APP_BUNDLE_DIR}/Contents/Resources/resources/mygui) +else (APPLE) + set(DDIR ${OpenMW_BINARY_DIR}/resources/mygui) +endif (APPLE) configure_file("${SDIR}/bigbars.png" "${DDIR}/bigbars.png" COPYONLY) configure_file("${SDIR}/black.png" "${DDIR}/black.png" COPYONLY) diff --git a/files/plugins.cfg.mac b/files/plugins.cfg.mac index 9fe2798f7b..baaca44792 100644 --- a/files/plugins.cfg.mac +++ b/files/plugins.cfg.mac @@ -1,7 +1,7 @@ # Defines plugins to load # Define plugin folder -PluginFolder=${OGRE_PLUGIN_DIR} +PluginFolder= # Define plugins Plugin=RenderSystem_GL.dylib From 7168795ae664860bdb67c4bdacfbdd67782ea21e Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Wed, 6 Apr 2011 20:11:08 +0400 Subject: [PATCH 019/111] components/esm header refactoring in progress. Refactored: esm_reader.hpp loadacti.hpp loadalch.hpp loadappa.hpp loadarmo.hpp loadbody.hpp loadbook.hpp loadbsgn.hpp loadcell.hpp loadclas.hpp loadclot.hpp loadland.hpp Updated code style in defs.hpp --- CMakeLists.txt | 13 ++ components/esm/defs.hpp | 85 ++++----- components/esm/esm_reader.cpp | 345 ++++++++++++++++++++++++++++++++++ components/esm/esm_reader.hpp | 345 ++++------------------------------ components/esm/loadacti.cpp | 11 ++ components/esm/loadacti.hpp | 12 +- components/esm/loadalch.cpp | 14 ++ components/esm/loadalch.hpp | 31 ++- components/esm/loadappa.cpp | 13 ++ components/esm/loadappa.hpp | 37 ++-- components/esm/loadarmo.cpp | 28 +++ components/esm/loadarmo.hpp | 135 ++++++------- components/esm/loadbody.cpp | 13 ++ components/esm/loadbody.hpp | 71 ++++--- components/esm/loadbook.cpp | 17 ++ components/esm/loadbook.hpp | 28 +-- components/esm/loadbsgn.cpp | 15 ++ components/esm/loadbsgn.hpp | 18 +- components/esm/loadcell.cpp | 113 +++++++++++ components/esm/loadcell.hpp | 102 +--------- components/esm/loadclas.cpp | 17 ++ components/esm/loadclas.hpp | 84 ++++----- components/esm/loadclot.cpp | 20 ++ components/esm/loadclot.hpp | 59 +++--- components/esm/loadland.cpp | 32 ++++ components/esm/loadland.hpp | 46 +---- 26 files changed, 942 insertions(+), 762 deletions(-) create mode 100644 components/esm/esm_reader.cpp create mode 100644 components/esm/loadacti.cpp create mode 100644 components/esm/loadalch.cpp create mode 100644 components/esm/loadappa.cpp create mode 100644 components/esm/loadarmo.cpp create mode 100644 components/esm/loadbody.cpp create mode 100644 components/esm/loadbook.cpp create mode 100644 components/esm/loadbsgn.cpp create mode 100644 components/esm/loadcell.cpp create mode 100644 components/esm/loadclas.cpp create mode 100644 components/esm/loadclot.cpp create mode 100644 components/esm/loadland.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b0ae913883..534b1e0bba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,19 @@ set(ESM ${COMP_DIR}/esm/skill.cpp ${COMP_DIR}/esm/attr.cpp ${COMP_DIR}/esm/class.cpp + ${COMP_DIR}/esm/esm_reader.cpp + ${COMP_DIR}/esm/loadland.cpp + ${COMP_DIR}/esm/loadacti.cpp + ${COMP_DIR}/esm/loadalch.cpp + ${COMP_DIR}/esm/loadappa.cpp + ${COMP_DIR}/esm/loadarmo.cpp + ${COMP_DIR}/esm/loadbody.cpp + ${COMP_DIR}/esm/loadbook.cpp + ${COMP_DIR}/esm/loadbsgn.cpp + ${COMP_DIR}/esm/loadcell.cpp + ${COMP_DIR}/esm/loadclas.cpp + ${COMP_DIR}/esm/loadclot.cpp + ) source_group(components\\esm FILES ${ESM_HEADER} ${ESM}) diff --git a/components/esm/defs.hpp b/components/esm/defs.hpp index 9a4cefa37b..0fdbe45aa9 100644 --- a/components/esm/defs.hpp +++ b/components/esm/defs.hpp @@ -3,13 +3,14 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ // Pixel color value. Standard four-byte rr,gg,bb,aa format. typedef int32_t Color; enum VarType - { +{ VT_Unknown, VT_None, VT_Short, @@ -18,79 +19,75 @@ enum VarType VT_Float, VT_String, VT_Ignored - }; +}; enum Specialization - { - SPC_Combat = 0, - SPC_Magic = 1, - SPC_Stealth = 2 - }; +{ + SPC_Combat = 0, SPC_Magic = 1, SPC_Stealth = 2 +}; enum RangeType - { - RT_Self = 0, - RT_Touch = 1, - RT_Target = 2 - }; +{ + RT_Self = 0, RT_Touch = 1, RT_Target = 2 +}; /** A list of references to spells and spell effects. This is shared - between the records BSGN, NPC and RACE. -*/ + between the records BSGN, NPC and RACE. + */ struct SpellList { - std::vector list; + std::vector list; - void load(ESMReader &esm) - { - while(esm.isNextSub("NPCS")) - list.push_back(esm.getHString()); - } + void load(ESMReader &esm) + { + while (esm.isNextSub("NPCS")) + list.push_back(esm.getHString()); + } }; /** Defines a spell effect. Shared between SPEL (Spells), ALCH - (Potions) and ENCH (Item enchantments) records -*/ + (Potions) and ENCH (Item enchantments) records + */ #pragma pack(push) #pragma pack(1) // Position and rotation struct Position { - float pos[3]; - float rot[3]; + float pos[3]; + float rot[3]; }; struct ENAMstruct { - // Magical effect, hard-coded ID - short effectID; + // Magical effect, hard-coded ID + short effectID; - // Which skills/attributes are affected (for restore/drain spells - // etc.) - signed char skill, attribute; // -1 if N/A + // Which skills/attributes are affected (for restore/drain spells + // etc.) + signed char skill, attribute; // -1 if N/A - // Other spell parameters - int range; // 0 - self, 1 - touch, 2 - target (RangeType enum) - int area, duration, magnMin, magnMax; + // Other spell parameters + int range; // 0 - self, 1 - touch, 2 - target (RangeType enum) + int area, duration, magnMin, magnMax; - // Struct size should be 24 bytes + // Struct size should be 24 bytes }; #pragma pack(pop) struct EffectList { - std::vector list; + std::vector list; - void load(ESMReader &esm) - { - ENAMstruct s; - while(esm.isNextSub("ENAM")) - { - esm.getHT(s, 24); - list.push_back(s); - } - } + void load(ESMReader &esm) + { + ENAMstruct s; + while (esm.isNextSub("ENAM")) + { + esm.getHT(s, 24); + list.push_back(s); + } + } }; } diff --git a/components/esm/esm_reader.cpp b/components/esm/esm_reader.cpp new file mode 100644 index 0000000000..00a34e2df9 --- /dev/null +++ b/components/esm/esm_reader.cpp @@ -0,0 +1,345 @@ +#include "esm_reader.hpp" + +namespace ESM +{ + +ESM_Context ESMReader::getContext() +{ + // Update the file position before returning + mCtx.filePos = mEsm->tell(); + return mCtx; +} + +void ESMReader::restoreContext(const ESM_Context &rc) +{ + // Reopen the file if necessary + if (mCtx.filename != rc.filename) + openRaw(rc.filename); + + // Copy the data + mCtx = rc; + + // Make sure we seek to the right place + mEsm->seek(mCtx.filePos); +} + +void ESMReader::close() +{ + mEsm.reset(); + mCtx.filename.clear(); + mCtx.leftFile = 0; + mCtx.leftRec = 0; + mCtx.leftSub = 0; + mCtx.subCached = false; + mCtx.recName.val = 0; + mCtx.subName.val = 0; +} + +void ESMReader::openRaw(Mangle::Stream::StreamPtr _esm, const std::string &name) +{ + close(); + mEsm = _esm; + mCtx.filename = name; + mCtx.leftFile = mEsm->size(); + + // Flag certain files for special treatment, based on the file + // name. + const char *cstr = mCtx.filename.c_str(); + if (iends(cstr, "Morrowind.esm")) + mSpf = SF_Morrowind; + else if (iends(cstr, "Tribunal.esm")) + mSpf = SF_Tribunal; + else if (iends(cstr, "Bloodmoon.esm")) + mSpf = SF_Bloodmoon; + else + mSpf = SF_Other; +} + +void ESMReader::open(Mangle::Stream::StreamPtr _esm, const std::string &name) +{ + openRaw(_esm, name); + + if (getRecName() != "TES3") + fail("Not a valid Morrowind file"); + + getRecHeader(); + + // Get the header + getHNT(mCtx.header, "HEDR", 300); + + if (mCtx.header.version != VER_12 && mCtx.header.version != VER_13) + fail("Unsupported file format version"); + + while (isNextSub("MAST")) + { + MasterData m; + m.name = getHString(); + m.size = getHNLong("DATA"); + mMasters.push_back(m); + } + + if (mCtx.header.type == FT_ESS) + { + // Savegame-related data + + // Player position etc + getHNT(mSaveData, "GMDT", 124); + + /* Image properties, five ints. Is always: + Red-mask: 0xff0000 + Blue-mask: 0x00ff00 + Green-mask: 0x0000ff + Alpha-mask: 0x000000 + Bpp: 32 + */ + getSubNameIs("SCRD"); + skipHSubSize(20); + + /* Savegame screenshot: + 128x128 pixels * 4 bytes per pixel + */ + getSubNameIs("SCRS"); + skipHSubSize(65536); + } +} + +void ESMReader::open(const std::string &file) +{ + using namespace Mangle::Stream; + open(StreamPtr(new FileStream(file)), file); +} + +void ESMReader::openRaw(const std::string &file) +{ + using namespace Mangle::Stream; + openRaw(StreamPtr(new FileStream(file)), file); +} + +int64_t ESMReader::getHNLong(const char *name) +{ + int64_t val; + getHNT(val, name); + return val; +} + +std::string ESMReader::getHNOString(const char* name) +{ + if (isNextSub(name)) + return getHString(); + return ""; +} + +std::string ESMReader::getHNString(const char* name) +{ + getSubNameIs(name); + return getHString(); +} + +std::string ESMReader::getHString() +{ + getSubHeader(); + + // Hack to make MultiMark.esp load. Zero-length strings do not + // occur in any of the official mods, but MultiMark makes use of + // them. For some reason, they break the rules, and contain a byte + // (value 0) even if the header says there is no data. If + // Morrowind accepts it, so should we. + if (mCtx.leftSub == 0) + { + // Skip the following zero byte + mCtx.leftRec--; + char c; + mEsm->read(&c, 1); + return ""; + } + + return getString(mCtx.leftSub); +} + +void ESMReader::getHExact(void*p, int size) +{ + getSubHeader(); + if (size != static_cast (mCtx.leftSub)) + fail("getHExact() size mismatch"); + getExact(p, size); +} + +// Read the given number of bytes from a named subrecord +void ESMReader::getHNExact(void*p, int size, const char* name) +{ + getSubNameIs(name); + getHExact(p, size); +} + +// Get the next subrecord name and check if it matches the parameter +void ESMReader::getSubNameIs(const char* name) +{ + getSubName(); + if (mCtx.subName != name) + fail( + "Expected subrecord " + std::string(name) + " but got " + + mCtx.subName.toString()); +} + +bool ESMReader::isNextSub(const char* name) +{ + if (!mCtx.leftRec) + return false; + + getSubName(); + + // If the name didn't match, then mark the it as 'cached' so it's + // available for the next call to getSubName. + mCtx.subCached = (mCtx.subName != name); + + // If subCached is false, then subName == name. + return !mCtx.subCached; +} + +// Read subrecord name. This gets called a LOT, so I've optimized it +// slightly. +void ESMReader::getSubName() +{ + // If the name has already been read, do nothing + if (mCtx.subCached) + { + mCtx.subCached = false; + return; + } + + // reading the subrecord data anyway. + mEsm->read(mCtx.subName.name, 4); + mCtx.leftRec -= 4; +} + +bool ESMReader::isEmptyOrGetName() +{ + if (mCtx.leftRec) + { + mEsm->read(mCtx.subName.name, 4); + mCtx.leftRec -= 4; + return false; + } + return true; +} + +void ESMReader::skipHSub() +{ + getSubHeader(); + skip(mCtx.leftSub); +} + +void ESMReader::skipHSubSize(int size) +{ + skipHSub(); + if (static_cast (mCtx.leftSub) != size) + fail("skipHSubSize() mismatch"); +} + +void ESMReader::getSubHeader() +{ + if (mCtx.leftRec < 4) + fail("End of record while reading sub-record header"); + + // Get subrecord size + getT(mCtx.leftSub); + + // Adjust number of record bytes left + mCtx.leftRec -= mCtx.leftSub + 4; +} + +void ESMReader::getSubHeaderIs(int size) +{ + getSubHeader(); + if (size != static_cast (mCtx.leftSub)) + fail("getSubHeaderIs(): Sub header mismatch"); +} + +NAME ESMReader::getRecName() +{ + if (!hasMoreRecs()) + fail("No more records, getRecName() failed"); + getName(mCtx.recName); + mCtx.leftFile -= 4; + + // Make sure we don't carry over any old cached subrecord + // names. This can happen in some cases when we skip parts of a + // record. + mCtx.subCached = false; + + return mCtx.recName; +} + +void ESMReader::skipRecord() +{ + skip(mCtx.leftRec); + mCtx.leftRec = 0; +} + +void ESMReader::skipHRecord() +{ + if (!mCtx.leftFile) + return; + getRecHeader(); + skipRecord(); +} + +void ESMReader::getRecHeader(uint32_t &flags) +{ + // General error checking + if (mCtx.leftFile < 12) + fail("End of file while reading record header"); + if (mCtx.leftRec) + fail("Previous record contains unread bytes"); + + getUint(mCtx.leftRec); + getUint(flags);// This header entry is always zero + getUint(flags); + mCtx.leftFile -= 12; + + // Check that sizes add up + if (mCtx.leftFile < mCtx.leftRec) + fail("Record size is larger than rest of file"); + + // Adjust number of bytes mCtx.left in file + mCtx.leftFile -= mCtx.leftRec; +} + +/************************************************************************* + * + * Lowest level data reading and misc methods + * + *************************************************************************/ + +void ESMReader::getExact(void*x, int size) +{ + int t = mEsm->read(x, size); + if (t != size) + fail("Read error"); +} + +std::string ESMReader::getString(int size) +{ + char *ptr = ToUTF8::getBuffer(size); + mEsm->read(ptr, size); + + // Convert to UTF8 and return + return ToUTF8::getUtf8(ToUTF8::WINDOWS_1252); +} + +void ESMReader::fail(const std::string &msg) +{ + using namespace std; + + stringstream ss; + + ss << "ESM Error: " << msg; + ss << "\n File: " << mCtx.filename; + ss << "\n Record: " << mCtx.recName.toString(); + ss << "\n Subrecord: " << mCtx.subName.toString(); + if (mEsm != NULL) + ss << "\n Offset: 0x" << hex << mEsm->tell(); + throw std::runtime_error(ss.str()); +} + +} diff --git a/components/esm/esm_reader.hpp b/components/esm/esm_reader.hpp index 8f4fafd889..dea1980e2e 100644 --- a/components/esm/esm_reader.hpp +++ b/components/esm/esm_reader.hpp @@ -171,122 +171,27 @@ public: /** Save the current file position and information in a ESM_Context struct */ - ESM_Context getContext() - { - // Update the file position before returning - mCtx.filePos = mEsm->tell(); - return mCtx; - } + ESM_Context getContext(); /** Restore a previously saved context */ - void restoreContext(const ESM_Context &rc) - { - // Reopen the file if necessary - if(mCtx.filename != rc.filename) - openRaw(rc.filename); - - // Copy the data - mCtx = rc; - - // Make sure we seek to the right place - mEsm->seek(mCtx.filePos); - } + void restoreContext(const ESM_Context &rc); /** Close the file, resets all information. After calling close() the structure may be reused to load a new file. */ - void close() - { - mEsm.reset(); - mCtx.filename.clear(); - mCtx.leftFile = 0; - mCtx.leftRec = 0; - mCtx.leftSub = 0; - mCtx.subCached = false; - mCtx.recName.val = 0; - mCtx.subName.val = 0; - } + void close(); /// Raw opening. Opens the file and sets everything up but doesn't /// parse the header. - void openRaw(Mangle::Stream::StreamPtr _esm, const std::string &name) - { - close(); - mEsm = _esm; - mCtx.filename = name; - mCtx.leftFile = mEsm->size(); - - // Flag certain files for special treatment, based on the file - // name. - const char *cstr = mCtx.filename.c_str(); - if(iends(cstr, "Morrowind.esm")) mSpf = SF_Morrowind; - else if(iends(cstr, "Tribunal.esm")) mSpf = SF_Tribunal; - else if(iends(cstr, "Bloodmoon.esm")) mSpf = SF_Bloodmoon; - else mSpf = SF_Other; - } + void openRaw(Mangle::Stream::StreamPtr _esm, const std::string &name); /// Load ES file from a new stream, parses the header. Closes the /// currently open file first, if any. - void open(Mangle::Stream::StreamPtr _esm, const std::string &name) - { - openRaw(_esm, name); + void open(Mangle::Stream::StreamPtr _esm, const std::string &name); - if(getRecName() != "TES3") - fail("Not a valid Morrowind file"); + void open(const std::string &file); - getRecHeader(); - - // Get the header - getHNT(mCtx.header, "HEDR", 300); - - if(mCtx.header.version != VER_12 && - mCtx.header.version != VER_13) - fail("Unsupported file format version"); - - while(isNextSub("MAST")) - { - MasterData m; - m.name = getHString(); - m.size = getHNLong("DATA"); - mMasters.push_back(m); - } - - if(mCtx.header.type == FT_ESS) - { - // Savegame-related data - - // Player position etc - getHNT(mSaveData, "GMDT", 124); - - /* Image properties, five ints. Is always: - Red-mask: 0xff0000 - Blue-mask: 0x00ff00 - Green-mask: 0x0000ff - Alpha-mask: 0x000000 - Bpp: 32 - */ - getSubNameIs("SCRD"); - skipHSubSize(20); - - /* Savegame screenshot: - 128x128 pixels * 4 bytes per pixel - */ - getSubNameIs("SCRS"); - skipHSubSize(65536); - } - } - - void open(const std::string &file) - { - using namespace Mangle::Stream; - open(StreamPtr(new FileStream(file)), file); - } - - void openRaw(const std::string &file) - { - using namespace Mangle::Stream; - openRaw(StreamPtr(new FileStream(file)), file); - } + void openRaw(const std::string &file); /************************************************************************* * @@ -306,8 +211,8 @@ public: template void getHNOT(X &x, const char* name) { - if(isNextSub(name)) - getHT(x); + if(isNextSub(name)) + getHT(x); } // Version with extra size checking, to make sure the compiler @@ -315,26 +220,21 @@ public: template void getHNT(X &x, const char* name, int size) { - assert(sizeof(X) == size); - getSubNameIs(name); - getHT(x); + assert(sizeof(X) == size); + getSubNameIs(name); + getHT(x); } - int64_t getHNLong(const char *name) - { - int64_t val; - getHNT(val, name); - return val; - } + int64_t getHNLong(const char *name); // Get data of a given type/size, including subrecord header template void getHT(X &x) { - getSubHeader(); - if(mCtx.leftSub != sizeof(X)) - fail("getHT(): subrecord size mismatch"); - getT(x); + getSubHeader(); + if (mCtx.leftSub != sizeof(X)) + fail("getHT(): subrecord size mismatch"); + getT(x); } // Version with extra size checking, to make sure the compiler @@ -342,62 +242,24 @@ public: template void getHT(X &x, int size) { - assert(sizeof(X) == size); - getHT(x); + assert(sizeof(X) == size); + getHT(x); } // Read a string by the given name if it is the next record. - std::string getHNOString(const char* name) - { - if(isNextSub(name)) - return getHString(); - return ""; - } + std::string getHNOString(const char* name); // Read a string with the given sub-record name - std::string getHNString(const char* name) - { - getSubNameIs(name); - return getHString(); - } + std::string getHNString(const char* name); // Read a string, including the sub-record header (but not the name) - std::string getHString() - { - getSubHeader(); - - // Hack to make MultiMark.esp load. Zero-length strings do not - // occur in any of the official mods, but MultiMark makes use of - // them. For some reason, they break the rules, and contain a byte - // (value 0) even if the header says there is no data. If - // Morrowind accepts it, so should we. - if(mCtx.leftSub == 0) - { - // Skip the following zero byte - mCtx.leftRec--; - char c; - mEsm->read(&c,1); - return ""; - } - - return getString(mCtx.leftSub); - } + std::string getHString(); // Read the given number of bytes from a subrecord - void getHExact(void*p, int size) - { - getSubHeader(); - if(size !=static_cast (mCtx.leftSub)) - fail("getHExact() size mismatch"); - getExact(p,size); - } + void getHExact(void*p, int size); // Read the given number of bytes from a named subrecord - void getHNExact(void*p, int size, const char* name) - { - getSubNameIs(name); - getHExact(p,size); - } + void getHNExact(void*p, int size, const char* name); /************************************************************************* * @@ -406,100 +268,37 @@ public: *************************************************************************/ // Get the next subrecord name and check if it matches the parameter - void getSubNameIs(const char* name) - { - getSubName(); - if(mCtx.subName != name) - fail("Expected subrecord " + std::string(name) + " but got " + mCtx.subName.toString()); - } + void getSubNameIs(const char* name); /** Checks if the next sub record name matches the parameter. If it does, it is read into 'subName' just as if getSubName() was called. If not, the read name will still be available for future calls to getSubName(), isNextSub() and getSubNameIs(). */ - bool isNextSub(const char* name) - { - if(!mCtx.leftRec) return false; - - getSubName(); - - // If the name didn't match, then mark the it as 'cached' so it's - // available for the next call to getSubName. - mCtx.subCached = (mCtx.subName != name); - - // If subCached is false, then subName == name. - return !mCtx.subCached; - } + bool isNextSub(const char* name); // Read subrecord name. This gets called a LOT, so I've optimized it // slightly. - void getSubName() - { - // If the name has already been read, do nothing - if(mCtx.subCached) - { - mCtx.subCached = false; - return; - } - - // Don't bother with error checking, we will catch an EOF upon - // reading the subrecord data anyway. - mEsm->read(mCtx.subName.name, 4); - mCtx.leftRec -= 4; - } + void getSubName(); // This is specially optimized for LoadINFO. - bool isEmptyOrGetName() - { - if(mCtx.leftRec) - { - mEsm->read(mCtx.subName.name, 4); - mCtx.leftRec -= 4; - return false; - } - return true; - } + bool isEmptyOrGetName(); // Skip current sub record, including header (but not including // name.) - void skipHSub() - { - getSubHeader(); - skip(mCtx.leftSub); - } + void skipHSub(); // Skip sub record and check its size - void skipHSubSize(int size) - { - skipHSub(); - if(static_cast (mCtx.leftSub) != size) - fail("skipHSubSize() mismatch"); - } + void skipHSubSize(int size); /* Sub-record header. This updates leftRec beyond the current sub-record as well. leftSub contains size of current sub-record. */ - void getSubHeader() - { - if(mCtx.leftRec < 4) - fail("End of record while reading sub-record header"); - - // Get subrecord size - getT(mCtx.leftSub); - - // Adjust number of record bytes left - mCtx.leftRec -= mCtx.leftSub + 4; - } + void getSubHeader(); /** Get sub header and check the size */ - void getSubHeaderIs(int size) - { - getSubHeader(); - if(size != static_cast (mCtx.leftSub)) - fail("getSubHeaderIs(): Sub header mismatch"); - } + void getSubHeaderIs(int size); /************************************************************************* * @@ -508,62 +307,21 @@ public: *************************************************************************/ // Get the next record name - NAME getRecName() - { - if(!hasMoreRecs()) - fail("No more records, getRecName() failed"); - getName(mCtx.recName); - mCtx.leftFile -= 4; - - // Make sure we don't carry over any old cached subrecord - // names. This can happen in some cases when we skip parts of a - // record. - mCtx.subCached = false; - - return mCtx.recName; - } + NAME getRecName(); // Skip the rest of this record. Assumes the name and header have // already been read - void skipRecord() - { - skip(mCtx.leftRec); - mCtx.leftRec = 0; - } + void skipRecord(); // Skip an entire record, including the header (but not the name) - void skipHRecord() - { - if(!mCtx.leftFile) return; - getRecHeader(); - skipRecord(); - } + void skipHRecord(); /* Read record header. This updatesleftFile BEYOND the data that follows the header, ie beyond the entire record. You should use leftRec to orient yourself inside the record itself. */ void getRecHeader() { uint32_t u; getRecHeader(u); } - void getRecHeader(uint32_t &flags) - { - // General error checking - if(mCtx.leftFile < 12) - fail("End of file while reading record header"); - if(mCtx.leftRec) - fail("Previous record contains unread bytes"); - - getUint(mCtx.leftRec); - getUint(flags);// This header entry is always zero - getUint(flags); - mCtx.leftFile -= 12; - - // Check that sizes add up - if(mCtx.leftFile < mCtx.leftRec) - fail("Record size is larger than rest of file"); - - // Adjust number of bytes mCtx.left in file - mCtx.leftFile -= mCtx.leftRec; - } + void getRecHeader(uint32_t &flags); bool hasMoreRecs() { return mCtx.leftFile > 0; } bool hasMoreSubs() { return mCtx.leftRec > 0; } @@ -578,44 +336,19 @@ public: template void getT(X &x) { getExact(&x, sizeof(X)); } - void getExact(void*x, int size) - { - int t = mEsm->read(x, size); - if(t != size) - fail("Read error"); - } + void getExact(void*x, int size); void getName(NAME &name) { getT(name); } void getUint(uint32_t &u) { getT(u); } // Read the next 'size' bytes and return them as a string. Converts // them from native encoding to UTF8 in the process. - std::string getString(int size) - { - char *ptr = ToUTF8::getBuffer(size); - mEsm->read(ptr,size); - - // Convert to UTF8 and return - return ToUTF8::getUtf8(ToUTF8::WINDOWS_1252); - } + std::string getString(int size); void skip(int bytes) { mEsm->seek(mEsm->tell()+bytes); } uint64_t getOffset() { return mEsm->tell(); } /// Used for error handling - void fail(const std::string &msg) - { - using namespace std; - - stringstream ss; - - ss << "ESM Error: " << msg; - ss << "\n File: " << mCtx.filename; - ss << "\n Record: " << mCtx.recName.toString(); - ss << "\n Subrecord: " << mCtx.subName.toString(); - if(mEsm != NULL) - ss << "\n Offset: 0x" << hex << mEsm->tell(); - throw std::runtime_error(ss.str()); - } + void fail(const std::string &msg); private: Mangle::Stream::StreamPtr mEsm; diff --git a/components/esm/loadacti.cpp b/components/esm/loadacti.cpp new file mode 100644 index 0000000000..40c9b635c3 --- /dev/null +++ b/components/esm/loadacti.cpp @@ -0,0 +1,11 @@ +#include "loadacti.hpp" + +namespace ESM +{ +void Activator::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNString("FNAM"); + script = esm.getHNOString("SCRI"); +} +} diff --git a/components/esm/loadacti.hpp b/components/esm/loadacti.hpp index a50a58f6db..783559e11b 100644 --- a/components/esm/loadacti.hpp +++ b/components/esm/loadacti.hpp @@ -3,18 +3,14 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ struct Activator { - std::string name, script, model; + std::string name, script, model; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNString("FNAM"); - script = esm.getHNOString("SCRI"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadalch.cpp b/components/esm/loadalch.cpp new file mode 100644 index 0000000000..d3bc36a775 --- /dev/null +++ b/components/esm/loadalch.cpp @@ -0,0 +1,14 @@ +#include "loadalch.hpp" + +namespace ESM +{ +void Potion::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + icon = esm.getHNOString("TEXT"); // not ITEX here for some reason + script = esm.getHNOString("SCRI"); + name = esm.getHNOString("FNAM"); + esm.getHNT(data, "ALDT", 12); + effects.load(esm); +} +} diff --git a/components/esm/loadalch.hpp b/components/esm/loadalch.hpp index a556350b0c..c21e5dea00 100644 --- a/components/esm/loadalch.hpp +++ b/components/esm/loadalch.hpp @@ -4,7 +4,8 @@ #include "esm_reader.hpp" #include "defs.hpp" -namespace ESM { +namespace ESM +{ /* * Alchemy item (potions) @@ -12,26 +13,18 @@ namespace ESM { struct Potion { - struct ALDTstruct - { - float weight; - int value; - int autoCalc; - }; - ALDTstruct data; + struct ALDTstruct + { + float weight; + int value; + int autoCalc; + }; + ALDTstruct data; - std::string name, model, icon, script; - EffectList effects; + std::string name, model, icon, script; + EffectList effects; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - icon = esm.getHNOString("TEXT"); // not ITEX here for some reason - script = esm.getHNOString("SCRI"); - name = esm.getHNOString("FNAM"); - esm.getHNT(data, "ALDT", 12); - effects.load(esm); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadappa.cpp b/components/esm/loadappa.cpp new file mode 100644 index 0000000000..c76ad53507 --- /dev/null +++ b/components/esm/loadappa.cpp @@ -0,0 +1,13 @@ +#include "loadappa.hpp" + +namespace ESM +{ +void Apparatus::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNString("FNAM"); + esm.getHNT(data, "AADT", 16); + script = esm.getHNOString("SCRI"); + icon = esm.getHNString("ITEX"); +} +} diff --git a/components/esm/loadappa.hpp b/components/esm/loadappa.hpp index 6fd1d00d84..bbb4aefdea 100644 --- a/components/esm/loadappa.hpp +++ b/components/esm/loadappa.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Alchemist apparatus @@ -11,33 +12,23 @@ namespace ESM { struct Apparatus { - enum AppaType + enum AppaType { - MortarPestle = 0, - Albemic = 1, - Calcinator = 2, - Retort = 3 + MortarPestle = 0, Albemic = 1, Calcinator = 2, Retort = 3 }; - struct AADTstruct - { - int type; - float quality; - float weight; - int value; - }; + struct AADTstruct + { + int type; + float quality; + float weight; + int value; + }; - AADTstruct data; - std::string model, icon, script, name; + AADTstruct data; + std::string model, icon, script, name; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNString("FNAM"); - esm.getHNT(data, "AADT", 16); - script = esm.getHNOString("SCRI"); - icon = esm.getHNString("ITEX"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadarmo.cpp b/components/esm/loadarmo.cpp new file mode 100644 index 0000000000..ddc25e176f --- /dev/null +++ b/components/esm/loadarmo.cpp @@ -0,0 +1,28 @@ +#include "loadarmo.hpp" + +namespace ESM +{ + +void PartReferenceList::load(ESMReader &esm) +{ + while (esm.isNextSub("INDX")) + { + PartReference pr; + esm.getHT(pr.part); // The INDX byte + pr.male = esm.getHNOString("BNAM"); + pr.female = esm.getHNOString("CNAM"); + } +} + +void Armor::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNString("FNAM"); + script = esm.getHNOString("SCRI"); + esm.getHNT(data, "AODT", 24); + icon = esm.getHNOString("ITEX"); + parts.load(esm); + enchant = esm.getHNOString("ENAM"); +} + +} diff --git a/components/esm/loadarmo.hpp b/components/esm/loadarmo.hpp index c10287869e..16b6b1d3a0 100644 --- a/components/esm/loadarmo.hpp +++ b/components/esm/loadarmo.hpp @@ -3,102 +3,85 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ enum PartReferenceType - { - PRT_Head = 0, - PRT_Hair = 1, - PRT_Neck = 2, - PRT_Cuirass = 3, - PRT_Groin = 4, - PRT_Skirt = 5, - PRT_RHand = 6, - PRT_LHand = 7, - PRT_RWrist = 8, - PRT_LWrist = 9, - PRT_Shield = 10, - PRT_RForearm = 11, - PRT_LForearm = 12, - PRT_RUpperarm = 13, - PRT_LUpperarm = 14, - PRT_RFoot = 15, - PRT_LFoot = 16, - PRT_RAnkle = 17, - PRT_LAnkle = 18, - PRT_RKnee = 19, - PRT_LKnee = 20, - PRT_RLeg = 21, - PRT_LLeg = 22, - PRT_RPauldron = 23, - PRT_LPauldron = 24, - PRT_Weapon = 25, - PRT_Tail = 26 - }; +{ + PRT_Head = 0, + PRT_Hair = 1, + PRT_Neck = 2, + PRT_Cuirass = 3, + PRT_Groin = 4, + PRT_Skirt = 5, + PRT_RHand = 6, + PRT_LHand = 7, + PRT_RWrist = 8, + PRT_LWrist = 9, + PRT_Shield = 10, + PRT_RForearm = 11, + PRT_LForearm = 12, + PRT_RUpperarm = 13, + PRT_LUpperarm = 14, + PRT_RFoot = 15, + PRT_LFoot = 16, + PRT_RAnkle = 17, + PRT_LAnkle = 18, + PRT_RKnee = 19, + PRT_LKnee = 20, + PRT_RLeg = 21, + PRT_LLeg = 22, + PRT_RPauldron = 23, + PRT_LPauldron = 24, + PRT_Weapon = 25, + PRT_Tail = 26 +}; // Reference to body parts struct PartReference { - char part; - std::string male, female; + char part; + std::string male, female; }; // A list of references to body parts struct PartReferenceList { - std::vector parts; + std::vector parts; - void load(ESMReader &esm) - { - while(esm.isNextSub("INDX")) - { - PartReference pr; - esm.getHT(pr.part); // The INDX byte - pr.male = esm.getHNOString("BNAM"); - pr.female = esm.getHNOString("CNAM"); - } - } + void load(ESMReader &esm); }; struct Armor { - enum Type - { - Helmet = 0, - Cuirass = 1, - LPauldron = 2, - RPauldron = 3, - Greaves = 4, - Boots = 5, - LGauntlet = 6, - RGauntlet = 7, - Shield = 8, - LBracer = 9, - RBracer = 10 - }; + enum Type + { + Helmet = 0, + Cuirass = 1, + LPauldron = 2, + RPauldron = 3, + Greaves = 4, + Boots = 5, + LGauntlet = 6, + RGauntlet = 7, + Shield = 8, + LBracer = 9, + RBracer = 10 + }; - struct AODTstruct - { - int type; - float weight; - int value, health, enchant, armor; - }; + struct AODTstruct + { + int type; + float weight; + int value, health, enchant, armor; + }; - AODTstruct data; - PartReferenceList parts; + AODTstruct data; + PartReferenceList parts; - std::string name, model, icon, script, enchant; + std::string name, model, icon, script, enchant; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNString("FNAM"); - script = esm.getHNOString("SCRI"); - esm.getHNT(data, "AODT", 24); - icon = esm.getHNOString("ITEX"); - parts.load(esm); - enchant = esm.getHNOString("ENAM"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadbody.cpp b/components/esm/loadbody.cpp new file mode 100644 index 0000000000..1c72b0fe0a --- /dev/null +++ b/components/esm/loadbody.cpp @@ -0,0 +1,13 @@ +#include "loadbody.hpp" + +namespace ESM +{ + +void BodyPart::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNString("FNAM"); + esm.getHNT(data, "BYDT", 4); +} + +} diff --git a/components/esm/loadbody.hpp b/components/esm/loadbody.hpp index 5da0e6acbc..14e28f59c4 100644 --- a/components/esm/loadbody.hpp +++ b/components/esm/loadbody.hpp @@ -3,59 +3,52 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ struct BodyPart { - enum MeshPart + enum MeshPart { - MP_Head = 0, - MP_Hair = 1, - MP_Neck = 2, - MP_Chest = 3, - MP_Groin = 4, - MP_Hand = 5, - MP_Wrist = 6, - MP_Forearm = 7, - MP_Upperarm = 8, - MP_Foot = 9, - MP_Ankle = 10, - MP_Knee = 11, - MP_Upperleg = 12, - MP_Clavicle = 13, - MP_Tail = 14 + MP_Head = 0, + MP_Hair = 1, + MP_Neck = 2, + MP_Chest = 3, + MP_Groin = 4, + MP_Hand = 5, + MP_Wrist = 6, + MP_Forearm = 7, + MP_Upperarm = 8, + MP_Foot = 9, + MP_Ankle = 10, + MP_Knee = 11, + MP_Upperleg = 12, + MP_Clavicle = 13, + MP_Tail = 14 }; - enum Flags + enum Flags { - BPF_Female = 1, - BPF_Playable = 2 + BPF_Female = 1, BPF_Playable = 2 }; - enum MeshType + enum MeshType { - MT_Skin = 0, - MT_Clothing = 1, - MT_Armor = 2 + MT_Skin = 0, MT_Clothing = 1, MT_Armor = 2 }; - struct BYDTstruct - { - char part; - char vampire; - char flags; - char type; - }; + struct BYDTstruct + { + char part; + char vampire; + char flags; + char type; + }; - BYDTstruct data; - std::string model, name; + BYDTstruct data; + std::string model, name; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNString("FNAM"); - esm.getHNT(data, "BYDT", 4); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadbook.cpp b/components/esm/loadbook.cpp new file mode 100644 index 0000000000..ffa958e144 --- /dev/null +++ b/components/esm/loadbook.cpp @@ -0,0 +1,17 @@ +#include "loadbook.hpp" + +namespace ESM +{ + +void Book::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNOString("FNAM"); + esm.getHNT(data, "BKDT", 20); + script = esm.getHNOString("SCRI"); + icon = esm.getHNOString("ITEX"); + text = esm.getHNOString("TEXT"); + enchant = esm.getHNOString("ENAM"); +} + +} diff --git a/components/esm/loadbook.hpp b/components/esm/loadbook.hpp index 8e9da0d514..3a4ab441e8 100644 --- a/components/esm/loadbook.hpp +++ b/components/esm/loadbook.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Books, magic scrolls, notes and so on @@ -11,25 +12,16 @@ namespace ESM { struct Book { - struct BKDTstruct - { - float weight; - int value, isScroll, skillID, enchant; - }; + struct BKDTstruct + { + float weight; + int value, isScroll, skillID, enchant; + }; - BKDTstruct data; - std::string name, model, icon, script, enchant, text; + BKDTstruct data; + std::string name, model, icon, script, enchant, text; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNOString("FNAM"); - esm.getHNT(data, "BKDT", 20); - script = esm.getHNOString("SCRI"); - icon = esm.getHNOString("ITEX"); - text = esm.getHNOString("TEXT"); - enchant = esm.getHNOString("ENAM"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadbsgn.cpp b/components/esm/loadbsgn.cpp new file mode 100644 index 0000000000..976cb7d207 --- /dev/null +++ b/components/esm/loadbsgn.cpp @@ -0,0 +1,15 @@ +#include "loadbsgn.hpp" + +namespace ESM +{ + +void BirthSign::load(ESMReader &esm) +{ + name = esm.getHNString("FNAM"); + texture = esm.getHNOString("TNAM"); + description = esm.getHNOString("DESC"); + + powers.load(esm); +} + +} diff --git a/components/esm/loadbsgn.hpp b/components/esm/loadbsgn.hpp index 8c713e5ef8..53964b02c6 100644 --- a/components/esm/loadbsgn.hpp +++ b/components/esm/loadbsgn.hpp @@ -4,23 +4,17 @@ #include "defs.hpp" #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ struct BirthSign { - std::string name, description, texture; + std::string name, description, texture; - // List of powers and abilities that come with this birth sign. - SpellList powers; + // List of powers and abilities that come with this birth sign. + SpellList powers; - void load(ESMReader &esm) - { - name = esm.getHNString("FNAM"); - texture = esm.getHNOString("TNAM"); - description = esm.getHNOString("DESC"); - - powers.load(esm); - }; + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadcell.cpp b/components/esm/loadcell.cpp new file mode 100644 index 0000000000..2d10852603 --- /dev/null +++ b/components/esm/loadcell.cpp @@ -0,0 +1,113 @@ +#include "loadcell.hpp" + +namespace ESM +{ + +void Cell::load(ESMReader &esm) +{ + // Ignore this for now, it might mean we should delete the entire + // cell? + if (esm.isNextSub("DELE")) + esm.skipHSub(); + + esm.getHNT(data, "DATA", 12); + + // Water level + water = 0; + + if (data.flags & Interior) + { + // Interior cells + + if (esm.isNextSub("INTV") || esm.isNextSub("WHGT")) + esm.getHT(water); + + // Quasi-exterior cells have a region (which determines the + // weather), pure interior cells have ambient lighting + // instead. + if (data.flags & QuasiEx) + region = esm.getHNOString("RGNN"); + else + esm.getHNT(ambi, "AMBI", 16); + } + else + { + // Exterior cells + region = esm.getHNOString("RGNN"); + esm.getHNOT(mapColor, "NAM5"); + } + + // Save position of the cell references and move on + context = esm.getContext(); + esm.skipRecord(); +} + +void Cell::restore(ESMReader &esm) const +{ + esm.restoreContext(context); +} + +bool Cell::getNextRef(ESMReader &esm, CellRef &ref) +{ + if (!esm.hasMoreSubs()) + return false; + + // Number of references in the cell? Maximum once in each cell, + // but not always at the beginning, and not always right. In other + // words, completely useless. + { + int i; + esm.getHNOT(i, "NAM0"); + } + + esm.getHNT(ref.refnum, "FRMR"); + ref.refID = esm.getHNString("NAME"); + + // getHNOT will not change the existing value if the subrecord is + // missing + ref.scale = 1.0; + esm.getHNOT(ref.scale, "XSCL"); + + ref.owner = esm.getHNOString("ANAM"); + ref.glob = esm.getHNOString("BNAM"); + ref.soul = esm.getHNOString("XSOL"); + + ref.faction = esm.getHNOString("CNAM"); + ref.factIndex = -1; + esm.getHNOT(ref.factIndex, "INDX"); + + ref.charge = -1.0; + esm.getHNOT(ref.charge, "XCHG"); + + ref.intv = 0; + ref.nam9 = 0; + esm.getHNOT(ref.intv, "INTV"); + esm.getHNOT(ref.nam9, "NAM9"); + + // Present for doors that teleport you to another cell. + if (esm.isNextSub("DODT")) + { + ref.teleport = true; + esm.getHT(ref.doorDest); + ref.destCell = esm.getHNOString("DNAM"); + } + else + ref.teleport = false; + + // Integer, despite the name suggesting otherwise + ref.lockLevel = 0; + esm.getHNOT(ref.lockLevel, "FLTV"); + ref.key = esm.getHNOString("KNAM"); + ref.trap = esm.getHNOString("TNAM"); + + ref.unam = 0; + ref.fltv = 0; + esm.getHNOT(ref.unam, "UNAM"); + esm.getHNOT(ref.fltv, "FLTV"); + + esm.getHNT(ref.pos, "DATA", 24); + + return true; +} + +} diff --git a/components/esm/loadcell.hpp b/components/esm/loadcell.hpp index 3f2a6b5a29..bf3ec6f739 100644 --- a/components/esm/loadcell.hpp +++ b/components/esm/loadcell.hpp @@ -117,51 +117,14 @@ struct Cell int water; // Water level int mapColor; - void load(ESMReader &esm) - { - // Ignore this for now, it might mean we should delete the entire - // cell? - if(esm.isNextSub("DELE")) esm.skipHSub(); - - esm.getHNT(data, "DATA", 12); - - // Water level - water = 0; - - if(data.flags & Interior) - { - // Interior cells - - if(esm.isNextSub("INTV") || esm.isNextSub("WHGT")) - esm.getHT(water); - - // Quasi-exterior cells have a region (which determines the - // weather), pure interior cells have ambient lighting - // instead. - if(data.flags & QuasiEx) - region = esm.getHNOString("RGNN"); - else - esm.getHNT(ambi, "AMBI", 16); - } - else - { - // Exterior cells - region = esm.getHNOString("RGNN"); - esm.getHNOT(mapColor, "NAM5"); - } - - // Save position of the cell references and move on - context = esm.getContext(); - esm.skipRecord(); - } + void load(ESMReader &esm); // Restore the given reader to the stored position. Will try to open // the file matching the stored file name. If you want to read from // somewhere other than the file system, you need to pre-open the // ESMReader, and the filename must match the stored filename // exactly. - void restore(ESMReader &esm) const - { esm.restoreContext(context); } + void restore(ESMReader &esm) const; /* Get the next reference in this cell, if any. Returns false when there are no more references in the cell. @@ -169,66 +132,7 @@ struct Cell All fields of the CellRef struct are overwritten. You can safely reuse one memory location without blanking it between calls. */ - static bool getNextRef(ESMReader &esm, CellRef &ref) - { - if(!esm.hasMoreSubs()) return false; - - // Number of references in the cell? Maximum once in each cell, - // but not always at the beginning, and not always right. In other - // words, completely useless. - { - int i; - esm.getHNOT(i, "NAM0"); - } - - esm.getHNT(ref.refnum, "FRMR"); - ref.refID = esm.getHNString("NAME"); - - // getHNOT will not change the existing value if the subrecord is - // missing - ref.scale = 1.0; - esm.getHNOT(ref.scale, "XSCL"); - - ref.owner = esm.getHNOString("ANAM"); - ref.glob = esm.getHNOString("BNAM"); - ref.soul = esm.getHNOString("XSOL"); - - ref.faction = esm.getHNOString("CNAM"); - ref.factIndex = -1; - esm.getHNOT(ref.factIndex, "INDX"); - - ref.charge = -1.0; - esm.getHNOT(ref.charge, "XCHG"); - - ref.intv = 0; - ref.nam9 = 0; - esm.getHNOT(ref.intv, "INTV"); - esm.getHNOT(ref.nam9, "NAM9"); - - // Present for doors that teleport you to another cell. - if(esm.isNextSub("DODT")) - { - ref.teleport = true; - esm.getHT(ref.doorDest); - ref.destCell = esm.getHNOString("DNAM"); - } - else ref.teleport = false; - - // Integer, despite the name suggesting otherwise - ref.lockLevel = 0; - esm.getHNOT(ref.lockLevel, "FLTV"); - ref.key = esm.getHNOString("KNAM"); - ref.trap = esm.getHNOString("TNAM"); - - ref.unam = 0; - ref.fltv = 0; - esm.getHNOT(ref.unam, "UNAM"); - esm.getHNOT(ref.fltv, "FLTV"); - - esm.getHNT(ref.pos, "DATA", 24); - - return true; - } + static bool getNextRef(ESMReader &esm, CellRef &ref); }; } #endif diff --git a/components/esm/loadclas.cpp b/components/esm/loadclas.cpp new file mode 100644 index 0000000000..9a0b847ab8 --- /dev/null +++ b/components/esm/loadclas.cpp @@ -0,0 +1,17 @@ +#include "loadclas.hpp" + +namespace ESM +{ + +void Class::load(ESMReader &esm) +{ + name = esm.getHNString("FNAM"); + esm.getHNT(data, "CLDT", 60); + + if (data.isPlayable > 1) + esm.fail("Unknown bool value"); + + description = esm.getHNOString("DESC"); +} + +} diff --git a/components/esm/loadclas.hpp b/components/esm/loadclas.hpp index 999fdfffd7..5fc44abe52 100644 --- a/components/esm/loadclas.hpp +++ b/components/esm/loadclas.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Character class definitions @@ -13,62 +14,51 @@ namespace ESM { // class struct Class { - enum AutoCalc + enum AutoCalc { - Weapon = 0x00001, - Armor = 0x00002, - Clothing = 0x00004, - Books = 0x00008, - Ingredient = 0x00010, - Lockpick = 0x00020, - Probe = 0x00040, - Lights = 0x00080, - Apparatus = 0x00100, - Repair = 0x00200, - Misc = 0x00400, - Spells = 0x00800, - MagicItems = 0x01000, - Potions = 0x02000, - Training = 0x04000, - Spellmaking = 0x08000, - Enchanting = 0x10000, - RepairItem = 0x20000 + Weapon = 0x00001, + Armor = 0x00002, + Clothing = 0x00004, + Books = 0x00008, + Ingredient = 0x00010, + Lockpick = 0x00020, + Probe = 0x00040, + Lights = 0x00080, + Apparatus = 0x00100, + Repair = 0x00200, + Misc = 0x00400, + Spells = 0x00800, + MagicItems = 0x01000, + Potions = 0x02000, + Training = 0x04000, + Spellmaking = 0x08000, + Enchanting = 0x10000, + RepairItem = 0x20000 }; - enum Specialization + enum Specialization { - Combat = 0, - Magic = 1, - Stealth = 2 + Combat = 0, Magic = 1, Stealth = 2 }; - static const Specialization specializationIds[3]; - static const char *gmstSpecializationIds[3]; + static const Specialization specializationIds[3]; + static const char *gmstSpecializationIds[3]; - struct CLDTstruct - { - int attribute[2]; // Attributes that get class bonus - int specialization; // 0 = Combat, 1 = Magic, 2 = Stealth - int skills[5][2]; // Minor and major skills. - int isPlayable; // 0x0001 - Playable class - - // I have no idea how to autocalculate these items... - int calc; - }; // 60 bytes - - std::string name, description; - CLDTstruct data; - - void load(ESMReader &esm) + struct CLDTstruct { - name = esm.getHNString("FNAM"); - esm.getHNT(data, "CLDT", 60); + int attribute[2]; // Attributes that get class bonus + int specialization; // 0 = Combat, 1 = Magic, 2 = Stealth + int skills[5][2]; // Minor and major skills. + int isPlayable; // 0x0001 - Playable class - if(data.isPlayable > 1) - esm.fail("Unknown bool value"); + // I have no idea how to autocalculate these items... + int calc; + }; // 60 bytes - description = esm.getHNOString("DESC"); - } + std::string name, description; + CLDTstruct data; + + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadclot.cpp b/components/esm/loadclot.cpp new file mode 100644 index 0000000000..1d6c9d4a1e --- /dev/null +++ b/components/esm/loadclot.cpp @@ -0,0 +1,20 @@ +#include "loadclot.hpp" + +namespace ESM +{ + +void Clothing::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNOString("FNAM"); + esm.getHNT(data, "CTDT", 12); + + script = esm.getHNOString("SCRI"); + icon = esm.getHNOString("ITEX"); + + parts.load(esm); + + enchant = esm.getHNOString("ENAM"); +} + +} diff --git a/components/esm/loadclot.hpp b/components/esm/loadclot.hpp index 47b24ddb11..8fa06e7e41 100644 --- a/components/esm/loadclot.hpp +++ b/components/esm/loadclot.hpp @@ -4,7 +4,8 @@ #include "esm_reader.hpp" #include "loadarmo.hpp" -namespace ESM { +namespace ESM +{ /* * Clothing @@ -12,46 +13,34 @@ namespace ESM { struct Clothing { - enum Type + enum Type { - Pants = 0, - Shoes = 1, - Shirt = 2, - Belt = 3, - Robe = 4, - RGlove = 5, - LGlove = 6, - Skirt = 7, - Ring = 8, - Amulet = 9 + Pants = 0, + Shoes = 1, + Shirt = 2, + Belt = 3, + Robe = 4, + RGlove = 5, + LGlove = 6, + Skirt = 7, + Ring = 8, + Amulet = 9 }; - struct CTDTstruct - { - int type; - float weight; - short value; - short enchant; - }; - CTDTstruct data; + struct CTDTstruct + { + int type; + float weight; + short value; + short enchant; + }; + CTDTstruct data; - PartReferenceList parts; + PartReferenceList parts; - std::string name, model, icon, enchant, script; + std::string name, model, icon, enchant, script; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNOString("FNAM"); - esm.getHNT(data, "CTDT", 12); - - script = esm.getHNOString("SCRI"); - icon = esm.getHNOString("ITEX"); - - parts.load(esm); - - enchant = esm.getHNOString("ENAM"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp new file mode 100644 index 0000000000..740d15a400 --- /dev/null +++ b/components/esm/loadland.cpp @@ -0,0 +1,32 @@ +#include "loadland.hpp" + +namespace ESM +{ +void Land::load(ESMReader &esm) +{ + // Get the grid location + esm.getSubNameIs("INTV"); + esm.getSubHeaderIs(8); + esm.getT(X); + esm.getT(Y); + + esm.getHNT(flags, "DATA"); + + // Store the file position + context = esm.getContext(); + + hasData = false; + int cnt = 0; + + // Skip these here. Load the actual data when the cell is loaded. + if(esm.isNextSub("VNML")) {esm.skipHSubSize(12675);cnt++;} + if(esm.isNextSub("VHGT")) {esm.skipHSubSize(4232);cnt++;} + if(esm.isNextSub("WNAM")) esm.skipHSubSize(81); + if(esm.isNextSub("VCLR")) esm.skipHSubSize(12675); + if(esm.isNextSub("VTEX")) {esm.skipHSubSize(512);cnt++;} + + // We need all three of VNML, VHGT and VTEX in order to use the + // landscape. + hasData = (cnt == 3); +} +} diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index d1a9e40680..af91850ac0 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -3,51 +3,25 @@ #include "esm_reader.hpp" -namespace ESM { - +namespace ESM +{ /* * Landscape data. */ struct Land { - int flags; // Only first four bits seem to be used, don't know what - // they mean. - int X, Y; // Map coordinates. + int flags; // Only first four bits seem to be used, don't know what + // they mean. + int X, Y; // Map coordinates. - // File context. This allows the ESM reader to be 'reset' to this - // location later when we are ready to load the full data set. - ESM_Context context; + // File context. This allows the ESM reader to be 'reset' to this + // location later when we are ready to load the full data set. + ESM_Context context; - bool hasData; + bool hasData; - void load(ESMReader &esm) - { - // Get the grid location - esm.getSubNameIs("INTV"); - esm.getSubHeaderIs(8); - esm.getT(X); - esm.getT(Y); - - esm.getHNT(flags, "DATA"); - - // Store the file position - context = esm.getContext(); - - hasData = false; - int cnt = 0; - - // Skip these here. Load the actual data when the cell is loaded. - if(esm.isNextSub("VNML")) {esm.skipHSubSize(12675);cnt++;} - if(esm.isNextSub("VHGT")) {esm.skipHSubSize(4232);cnt++;} - if(esm.isNextSub("WNAM")) esm.skipHSubSize(81); - if(esm.isNextSub("VCLR")) esm.skipHSubSize(12675); - if(esm.isNextSub("VTEX")) {esm.skipHSubSize(512);cnt++;} - - // We need all three of VNML, VHGT and VTEX in order to use the - // landscape. - hasData = (cnt == 3); - } + void load(ESMReader &esm); }; } #endif From fcfe267fc912105d96be76793f36e249d41f74ae Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Fri, 8 Apr 2011 17:58:21 +0400 Subject: [PATCH 020/111] Refactored remaining headers in components/esm except defs.hpp. Removed obsolete *.cpp files. --- CMakeLists.txt | 31 +++- components/esm/class.cpp | 15 -- components/esm/load_impl.cpp | 175 --------------------- components/esm/loadclas.cpp | 12 ++ components/esm/loadcont.cpp | 33 ++++ components/esm/loadcont.hpp | 50 ++---- components/esm/loadcrea.cpp | 40 +++++ components/esm/loadcrea.hpp | 109 +++++-------- components/esm/loaddial.cpp | 25 +++ components/esm/loaddial.hpp | 39 ++--- components/esm/loaddoor.cpp | 15 ++ components/esm/loaddoor.hpp | 14 +- components/esm/loadench.cpp | 12 ++ components/esm/loadench.hpp | 40 +++-- components/esm/loadfact.cpp | 31 ++++ components/esm/loadfact.hpp | 76 ++++----- components/esm/loadglob.cpp | 24 +++ components/esm/loadglob.hpp | 22 +-- components/esm/loadgmst.cpp | 172 ++++++++++++++++++++ components/esm/loadgmst.hpp | 278 +++++++-------------------------- components/esm/loadinfo.cpp | 133 ++++++++++++++++ components/esm/loadinfo.hpp | 149 +++++++++--------- components/esm/loadingr.cpp | 15 ++ components/esm/loadingr.hpp | 32 ++-- components/esm/loadlevlist.cpp | 34 ++++ components/esm/loadlevlist.hpp | 90 +++++------ components/esm/loadligh.cpp | 17 ++ components/esm/loadligh.hpp | 56 +++---- components/esm/loadlocks.cpp | 30 ++++ components/esm/loadlocks.hpp | 53 ++----- components/esm/loadltex.cpp | 12 ++ components/esm/loadltex.hpp | 13 +- components/esm/loadmgef.cpp | 27 ++++ components/esm/loadmgef.hpp | 85 ++++------ components/esm/loadmisc.cpp | 15 ++ components/esm/loadmisc.hpp | 32 ++-- components/esm/loadnpc.cpp | 48 ++++++ components/esm/loadpgrd.cpp | 35 +++++ components/esm/loadpgrd.hpp | 54 ++----- components/esm/loadrace.cpp | 14 ++ components/esm/loadrace.hpp | 81 +++++----- components/esm/loadregn.cpp | 29 ++++ components/esm/loadregn.hpp | 66 +++----- components/esm/loadscpt.cpp | 42 +++++ components/esm/loadscpt.hpp | 98 ++++-------- components/esm/loadskil.cpp | 93 +++++++---- components/esm/loadskil.hpp | 7 +- components/esm/loadsndg.cpp | 14 ++ components/esm/loadsndg.hpp | 8 +- components/esm/loadsoun.cpp | 18 +++ components/esm/loadsoun.hpp | 12 +- components/esm/loadspel.cpp | 13 ++ components/esm/loadspel.hpp | 51 +++--- components/esm/loadsscr.cpp | 13 ++ components/esm/loadsscr.hpp | 24 ++- components/esm/loadstat.cpp | 11 ++ components/esm/loadstat.hpp | 5 +- components/esm/loadweap.cpp | 16 ++ components/esm/loadweap.hpp | 75 ++++----- components/esm/skill.cpp | 63 -------- 60 files changed, 1571 insertions(+), 1325 deletions(-) delete mode 100644 components/esm/class.cpp delete mode 100644 components/esm/load_impl.cpp create mode 100644 components/esm/loadcont.cpp create mode 100644 components/esm/loadcrea.cpp create mode 100644 components/esm/loaddial.cpp create mode 100644 components/esm/loaddoor.cpp create mode 100644 components/esm/loadench.cpp create mode 100644 components/esm/loadfact.cpp create mode 100644 components/esm/loadglob.cpp create mode 100644 components/esm/loadgmst.cpp create mode 100644 components/esm/loadinfo.cpp create mode 100644 components/esm/loadingr.cpp create mode 100644 components/esm/loadlevlist.cpp create mode 100644 components/esm/loadligh.cpp create mode 100644 components/esm/loadlocks.cpp create mode 100644 components/esm/loadltex.cpp create mode 100644 components/esm/loadmgef.cpp create mode 100644 components/esm/loadmisc.cpp create mode 100644 components/esm/loadnpc.cpp create mode 100644 components/esm/loadpgrd.cpp create mode 100644 components/esm/loadrace.cpp create mode 100644 components/esm/loadregn.cpp create mode 100644 components/esm/loadscpt.cpp create mode 100644 components/esm/loadsndg.cpp create mode 100644 components/esm/loadsoun.cpp create mode 100644 components/esm/loadspel.cpp create mode 100644 components/esm/loadsscr.cpp create mode 100644 components/esm/loadstat.cpp create mode 100644 components/esm/loadweap.cpp delete mode 100644 components/esm/skill.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 534b1e0bba..8d500d81ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,10 +127,7 @@ source_group(components\\esm_store FILES ${ESM_STORE} ${ESM_STORE_HEADER}) file(GLOB ESM_HEADER ${COMP_DIR}/esm/*.hpp) set(ESM - ${COMP_DIR}/esm/load_impl.cpp - ${COMP_DIR}/esm/skill.cpp ${COMP_DIR}/esm/attr.cpp - ${COMP_DIR}/esm/class.cpp ${COMP_DIR}/esm/esm_reader.cpp ${COMP_DIR}/esm/loadland.cpp ${COMP_DIR}/esm/loadacti.cpp @@ -143,6 +140,34 @@ set(ESM ${COMP_DIR}/esm/loadcell.cpp ${COMP_DIR}/esm/loadclas.cpp ${COMP_DIR}/esm/loadclot.cpp + ${COMP_DIR}/esm/loadcont.cpp + ${COMP_DIR}/esm/loadcrea.cpp + ${COMP_DIR}/esm/loaddial.cpp + ${COMP_DIR}/esm/loaddoor.cpp + ${COMP_DIR}/esm/loadench.cpp + ${COMP_DIR}/esm/loadfact.cpp + ${COMP_DIR}/esm/loadglob.cpp + ${COMP_DIR}/esm/loadgmst.cpp + ${COMP_DIR}/esm/loadinfo.cpp + ${COMP_DIR}/esm/loadingr.cpp + ${COMP_DIR}/esm/loadlevlist.cpp + ${COMP_DIR}/esm/loadligh.cpp + ${COMP_DIR}/esm/loadlocks.cpp + ${COMP_DIR}/esm/loadltex.cpp + ${COMP_DIR}/esm/loadmgef.cpp + ${COMP_DIR}/esm/loadmisc.cpp + ${COMP_DIR}/esm/loadnpc.cpp + ${COMP_DIR}/esm/loadpgrd.cpp + ${COMP_DIR}/esm/loadrace.cpp + ${COMP_DIR}/esm/loadregn.cpp + ${COMP_DIR}/esm/loadscpt.cpp + ${COMP_DIR}/esm/loadskil.cpp + ${COMP_DIR}/esm/loadsndg.cpp + ${COMP_DIR}/esm/loadsoun.cpp + ${COMP_DIR}/esm/loadspel.cpp + ${COMP_DIR}/esm/loadsscr.cpp + ${COMP_DIR}/esm/loadstat.cpp + ${COMP_DIR}/esm/loadweap.cpp ) source_group(components\\esm FILES ${ESM_HEADER} ${ESM}) diff --git a/components/esm/class.cpp b/components/esm/class.cpp deleted file mode 100644 index 5866205fac..0000000000 --- a/components/esm/class.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "loadclas.hpp" - -using namespace ESM; - -const Class::Specialization Class::specializationIds[3] = { - Class::Combat, - Class::Magic, - Class::Stealth -}; - -const char *Class::gmstSpecializationIds[3] = { - "sSpecializationCombat", - "sSpecializationMagic", - "sSpecializationStealth" -}; diff --git a/components/esm/load_impl.cpp b/components/esm/load_impl.cpp deleted file mode 100644 index 28edbbe587..0000000000 --- a/components/esm/load_impl.cpp +++ /dev/null @@ -1,175 +0,0 @@ -#include "records.hpp" - -/** Implementation for some of the load() functions. Most are found in - the header files themselves, but this is a bit irritating to - compile if you're changing the functions often, as virtually the - entire engine depends on these headers. - */ - -/* -#include -using namespace std; -*/ - -namespace ESM -{ - void NPC::load(ESMReader &esm, const std::string& id) - { - mId = id; - - npdt52.gold = -10; - - model = esm.getHNOString("MODL"); - name = esm.getHNOString("FNAM"); - - race = esm.getHNString("RNAM"); - cls = esm.getHNString("CNAM"); - faction = esm.getHNString("ANAM"); - head = esm.getHNString("BNAM"); - hair = esm.getHNString("KNAM"); - - script = esm.getHNOString("SCRI"); - - esm.getSubNameIs("NPDT"); - esm.getSubHeader(); - if(esm.getSubSize() == 52) esm.getExact(&npdt52, 52); - else if(esm.getSubSize() == 12) esm.getExact(&npdt12, 12); - else esm.fail("NPC_NPDT must be 12 or 52 bytes long"); - - esm.getHNT(flags, "FLAG"); - - inventory.load(esm); - spells.load(esm); - - if(esm.isNextSub("AIDT")) - { - esm.getHExact(&AI, sizeof(AI)); - hasAI = true; - } - else hasAI = false; - - esm.skipRecord(); - } - - void DialInfo::load(ESMReader &esm) - { - id = esm.getHNString("INAM"); - prev = esm.getHNString("PNAM"); - next = esm.getHNString("NNAM"); - - // Not present if deleted - if(esm.isNextSub("DATA")) - esm.getHT(data, 12); - - // What follows is somewhat spaghetti-ish, but it's worth if for - // an extra speedup. INFO is by far the most common record type. - - // subName is a reference to the original, so it changes whenever - // a new sub name is read. esm.isEmptyOrGetName() will get the - // next name for us, or return true if there are no more records. - esm.getSubName(); - const NAME &subName = esm.retSubName(); - - if(subName.val == REC_ONAM) - { - actor = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - if(subName.val == REC_RNAM) - { - race = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - if(subName.val == REC_CNAM) - { - clas = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - - factionLess = false; - if(subName.val == REC_FNAM) - { - npcFaction = esm.getHString(); - if(npcFaction == "FFFF") factionLess = true; - if(esm.isEmptyOrGetName()) return; - } - if(subName.val == REC_ANAM) - { - cell = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - if(subName.val == REC_DNAM) - { - pcFaction = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - if(subName.val == REC_SNAM) - { - sound = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - if(subName.val == REC_NAME) - { - response = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - - while(subName.val == REC_SCVR) - { - SelectStruct ss; - - ss.selectRule = esm.getHString(); - esm.isEmptyOrGetName(); - - if(subName.val == REC_INTV) - { - ss.type = VT_Int; - esm.getHT(ss.i); - } - else if(subName.val == REC_FLTV) - { - ss.type = VT_Float; - esm.getHT(ss.f); - } - else - esm.fail("INFO.SCVR must precede INTV or FLTV, not " - + subName.toString()); - - selects.push_back(ss); - - if(esm.isEmptyOrGetName()) return; - } - - if(subName.val == REC_BNAM) - { - resultScript = esm.getHString(); - if(esm.isEmptyOrGetName()) return; - } - - questStatus = QS_None; - - if (subName.val == REC_QSTN) questStatus = QS_Name; - else if(subName.val == REC_QSTF) questStatus = QS_Finished; - else if(subName.val == REC_QSTR) questStatus = QS_Restart; - else if(subName.val == REC_DELE) questStatus = QS_Deleted; - else - esm.fail("Don't know what to do with " + subName.toString() + " in INFO " + id); - - if(questStatus != QS_None) - // Skip rest of record - esm.skipRecord(); - } - - void Sound::load(ESMReader &esm) - { - sound = esm.getHNString("FNAM"); - esm.getHNT(data, "DATA", 3); - /* - cout << "vol=" << (int)data.volume - << " min=" << (int)data.minRange - << " max=" << (int)data.maxRange - << endl; - */ - } - -} diff --git a/components/esm/loadclas.cpp b/components/esm/loadclas.cpp index 9a0b847ab8..b15852cc29 100644 --- a/components/esm/loadclas.cpp +++ b/components/esm/loadclas.cpp @@ -3,6 +3,18 @@ namespace ESM { +const Class::Specialization Class::specializationIds[3] = { + Class::Combat, + Class::Magic, + Class::Stealth +}; + +const char *Class::gmstSpecializationIds[3] = { + "sSpecializationCombat", + "sSpecializationMagic", + "sSpecializationStealth" +}; + void Class::load(ESMReader &esm) { name = esm.getHNString("FNAM"); diff --git a/components/esm/loadcont.cpp b/components/esm/loadcont.cpp new file mode 100644 index 0000000000..14699ccc5b --- /dev/null +++ b/components/esm/loadcont.cpp @@ -0,0 +1,33 @@ +#include "loadcont.hpp" + +namespace ESM +{ + +void InventoryList::load(ESMReader &esm) +{ + ContItem ci; + while (esm.isNextSub("NPCO")) + { + esm.getHT(ci, 36); + list.push_back(ci); + } +} + +void Container::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNOString("FNAM"); + esm.getHNT(weight, "CNDT", 4); + esm.getHNT(flags, "FLAG", 4); + + if (flags & 0xf4) + esm.fail("Unknown flags"); + if (!(flags & 0x8)) + esm.fail("Flag 8 not set"); + + script = esm.getHNOString("SCRI"); + + inventory.load(esm); +} + +} diff --git a/components/esm/loadcont.hpp b/components/esm/loadcont.hpp index 3c7ed85981..4614c4230c 100644 --- a/components/esm/loadcont.hpp +++ b/components/esm/loadcont.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Container definition @@ -11,54 +12,33 @@ namespace ESM { struct ContItem { - int count; - NAME32 item; + int count; + NAME32 item; }; struct InventoryList { - std::vector list; + std::vector list; - void load(ESMReader &esm) - { - ContItem ci; - while(esm.isNextSub("NPCO")) - { - esm.getHT(ci, 36); - list.push_back(ci); - } - } + void load(ESMReader &esm); }; struct Container { - enum Flags + enum Flags { - Organic = 1, // Objects cannot be placed in this container - Respawn = 2, // Respawns after 4 months - Unknown = 8 + Organic = 1, // Objects cannot be placed in this container + Respawn = 2, // Respawns after 4 months + Unknown = 8 }; - std::string name, model, script; + std::string name, model, script; - float weight; // Not sure, might be max total weight allowed? - int flags; - InventoryList inventory; + float weight; // Not sure, might be max total weight allowed? + int flags; + InventoryList inventory; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNOString("FNAM"); - esm.getHNT(weight, "CNDT", 4); - esm.getHNT(flags, "FLAG", 4); - - if(flags & 0xf4) esm.fail("Unknown flags"); - if(!(flags & 0x8)) esm.fail("Flag 8 not set"); - - script = esm.getHNOString("SCRI"); - - inventory.load(esm); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadcrea.cpp b/components/esm/loadcrea.cpp new file mode 100644 index 0000000000..651d9a3181 --- /dev/null +++ b/components/esm/loadcrea.cpp @@ -0,0 +1,40 @@ +#include "loadcrea.hpp" + +namespace ESM { + +void Creature::load(ESMReader &esm, const std::string& id) +{ + mId = id; + + model = esm.getHNString("MODL"); + original = esm.getHNOString("CNAM"); + name = esm.getHNOString("FNAM"); + script = esm.getHNOString("SCRI"); + + esm.getHNT(data, "NPDT", 96); + + esm.getHNT(flags, "FLAG"); + scale = 1.0; + esm.getHNOT(scale, "XSCL"); + + inventory.load(esm); + + // More subrecords: + + // AIDT - data (12 bytes, unknown) + // AI_W - wander (14 bytes, i don't understand it) + // short distance + // byte duration + // byte timeOfDay + // byte idle[10] + // + // Rest is optional: + // AI_T - travel? + // AI_F - follow? + // AI_E - escort? + // AI_A - activate? + + esm.skipRecord(); +} + +} diff --git a/components/esm/loadcrea.hpp b/components/esm/loadcrea.hpp index df85788660..40c9292136 100644 --- a/components/esm/loadcrea.hpp +++ b/components/esm/loadcrea.hpp @@ -4,7 +4,8 @@ #include "esm_reader.hpp" #include "loadcont.hpp" -namespace ESM { +namespace ESM +{ /* * Creature definition @@ -13,91 +14,53 @@ namespace ESM { struct Creature { - // Default is 0x48? - enum Flags + // Default is 0x48? + enum Flags { - Biped = 0x001, - Respawn = 0x002, - Weapon = 0x004, // Has weapon and shield - None = 0x008, // ?? - Swims = 0x010, - Flies = 0x020, // Don't know what happens if several - Walks = 0x040, // of these are set - Essential = 0x080, - Skeleton = 0x400, // Does not have normal blood - Metal = 0x800 // Has 'golden' blood + Biped = 0x001, Respawn = 0x002, Weapon = 0x004, // Has weapon and shield + None = 0x008, // ?? + Swims = 0x010, + Flies = 0x020, // Don't know what happens if several + Walks = 0x040, // of these are set + Essential = 0x080, + Skeleton = 0x400, // Does not have normal blood + Metal = 0x800 + // Has 'golden' blood }; - enum Type + enum Type { - Creatures = 0, - Deadra = 1, - Undead = 2, - Humanoid = 3 + Creatures = 0, Deadra = 1, Undead = 2, Humanoid = 3 }; - struct NPDTstruct - { - int type; - // For creatures we obviously have to use ints, not shorts and - // bytes like we use for NPCs.... this file format just makes so - // much sense! (Still, _much_ easier to decode than the NIFs.) - int level; - int strength, intelligence, willpower, agility, speed, endurance, - personality, luck, health, mana, fatigue; // Stats - int soul; // The creatures soul value (used with soul gems.) - int combat, magic, stealth; // Don't know yet. - int attack[6]; // AttackMin1, AttackMax1, ditto2, ditto3 - int gold; - }; // 96 bytes + struct NPDTstruct + { + int type; + // For creatures we obviously have to use ints, not shorts and + // bytes like we use for NPCs.... this file format just makes so + // much sense! (Still, _much_ easier to decode than the NIFs.) + int level; + int strength, intelligence, willpower, agility, speed, endurance, + personality, luck, health, mana, fatigue; // Stats + int soul; // The creatures soul value (used with soul gems.) + int combat, magic, stealth; // Don't know yet. + int attack[6]; // AttackMin1, AttackMax1, ditto2, ditto3 + int gold; + }; // 96 bytes - NPDTstruct data; + NPDTstruct data; - int flags; - float scale; + int flags; + float scale; - std::string model, name, script, - original; // Base creature that this is a modification of + std::string model, name, script, original; // Base creature that this is a modification of - // Defined in loadcont.hpp - InventoryList inventory; + // Defined in loadcont.hpp + InventoryList inventory; std::string mId; - void load(ESMReader &esm, const std::string& id) - { - mId = id; - - model = esm.getHNString("MODL"); - original = esm.getHNOString("CNAM"); - name = esm.getHNOString("FNAM"); - script = esm.getHNOString("SCRI"); - - esm.getHNT(data, "NPDT", 96); - - esm.getHNT(flags, "FLAG"); - scale = 1.0; - esm.getHNOT(scale, "XSCL"); - - inventory.load(esm); - - // More subrecords: - - // AIDT - data (12 bytes, unknown) - // AI_W - wander (14 bytes, i don't understand it) - // short distance - // byte duration - // byte timeOfDay - // byte idle[10] - // - // Rest is optional: - // AI_T - travel? - // AI_F - follow? - // AI_E - escort? - // AI_A - activate? - - esm.skipRecord(); - } + void load(ESMReader &esm, const std::string& id); }; } #endif diff --git a/components/esm/loaddial.cpp b/components/esm/loaddial.cpp new file mode 100644 index 0000000000..d2283d3514 --- /dev/null +++ b/components/esm/loaddial.cpp @@ -0,0 +1,25 @@ +#include "loaddial.hpp" + +namespace ESM +{ + +void Dialogue::load(ESMReader &esm) +{ + esm.getSubNameIs("DATA"); + esm.getSubHeader(); + int si = esm.getSubSize(); + if (si == 1) + esm.getT(type); + else if (si == 4) + { + // These are just markers, their values are not used. + int i; + esm.getT(i); + esm.getHNT(i, "DELE"); + type = Deleted; + } + else + esm.fail("Unknown sub record size"); +} + +} diff --git a/components/esm/loaddial.hpp b/components/esm/loaddial.hpp index 0cfba36ebd..1f18a49d0a 100644 --- a/components/esm/loaddial.hpp +++ b/components/esm/loaddial.hpp @@ -6,7 +6,8 @@ #include "esm_reader.hpp" #include "loadinfo.hpp" -namespace ESM { +namespace ESM +{ /* * Dialogue topic and journal entries. The actual data is contained in @@ -15,36 +16,20 @@ namespace ESM { struct Dialogue { - enum Type + enum Type { - Topic = 0, - Voice = 1, - Greeting = 2, - Persuasion = 3, - Journal = 4, - Deleted = -1 + Topic = 0, + Voice = 1, + Greeting = 2, + Persuasion = 3, + Journal = 4, + Deleted = -1 }; - char type; - std::vector mInfo; + char type; + std::vector mInfo; - void load(ESMReader &esm) - { - esm.getSubNameIs("DATA"); - esm.getSubHeader(); - int si = esm.getSubSize(); - if(si == 1) - esm.getT(type); - else if(si == 4) - { - // These are just markers, their values are not used. - int i; - esm.getT(i); - esm.getHNT(i,"DELE"); - type = Deleted; - } - else esm.fail("Unknown sub record size"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loaddoor.cpp b/components/esm/loaddoor.cpp new file mode 100644 index 0000000000..d3cc69bd45 --- /dev/null +++ b/components/esm/loaddoor.cpp @@ -0,0 +1,15 @@ +#include "loaddoor.hpp" + +namespace ESM +{ + +void Door::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNOString("FNAM"); + script = esm.getHNOString("SCRI"); + openSound = esm.getHNOString("SNAM"); + closeSound = esm.getHNOString("ANAM"); +} + +} diff --git a/components/esm/loaddoor.hpp b/components/esm/loaddoor.hpp index 7d76f20c8a..2c0db40649 100644 --- a/components/esm/loaddoor.hpp +++ b/components/esm/loaddoor.hpp @@ -3,20 +3,14 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ struct Door { - std::string name, model, script, openSound, closeSound; + std::string name, model, script, openSound, closeSound; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNOString("FNAM"); - script = esm.getHNOString("SCRI"); - openSound = esm.getHNOString("SNAM"); - closeSound = esm.getHNOString("ANAM"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadench.cpp b/components/esm/loadench.cpp new file mode 100644 index 0000000000..b2787492dd --- /dev/null +++ b/components/esm/loadench.cpp @@ -0,0 +1,12 @@ +#include "loadench.hpp" + +namespace ESM +{ + +void Enchantment::load(ESMReader &esm) +{ + esm.getHNT(data, "ENDT", 16); + effects.load(esm); +} + +} diff --git a/components/esm/loadench.hpp b/components/esm/loadench.hpp index 15830c70c3..449589e257 100644 --- a/components/esm/loadench.hpp +++ b/components/esm/loadench.hpp @@ -2,8 +2,10 @@ #define _ESM_ENCH_H #include "esm_reader.hpp" +#include "defs.hpp" -namespace ESM { +namespace ESM +{ /* * Enchantments @@ -11,31 +13,27 @@ namespace ESM { struct Enchantment { - enum Type + enum Type { - CastOnce = 0, - WhenStrikes = 1, - WhenUsed = 2, - ConstantEffect = 3 + CastOnce = 0, + WhenStrikes = 1, + WhenUsed = 2, + ConstantEffect = 3 }; - struct ENDTstruct - { - int type; - int cost; - int charge; - int autocalc; // Guessing this is 1 if we are supposed to auto - // calculate - }; + struct ENDTstruct + { + int type; + int cost; + int charge; + int autocalc; // Guessing this is 1 if we are supposed to auto + // calculate + }; - ENDTstruct data; - EffectList effects; + ENDTstruct data; + EffectList effects; - void load(ESMReader &esm) - { - esm.getHNT(data, "ENDT", 16); - effects.load(esm); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadfact.cpp b/components/esm/loadfact.cpp new file mode 100644 index 0000000000..346ad2a2ef --- /dev/null +++ b/components/esm/loadfact.cpp @@ -0,0 +1,31 @@ +#include "loadfact.hpp" + +namespace ESM +{ + +void Faction::load(ESMReader &esm) +{ + name = esm.getHNString("FNAM"); + + // Read rank names. These are optional. + int i = 0; + while (esm.isNextSub("RNAM") && i < 10) + ranks[i++] = esm.getHString(); + + // Main data struct + esm.getHNT(data, "FADT", 240); + + if (data.isHidden > 1) + esm.fail("Unknown flag!"); + + // Read faction response values + while (esm.hasMoreSubs()) + { + Reaction r; + r.faction = esm.getHNString("ANAM"); + esm.getHNT(r.reaction, "INTV"); + reactions.push_back(r); + } +} + +} diff --git a/components/esm/loadfact.hpp b/components/esm/loadfact.hpp index c938d912af..85874aa78d 100644 --- a/components/esm/loadfact.hpp +++ b/components/esm/loadfact.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Faction definitions @@ -12,67 +13,46 @@ namespace ESM { // Requirements for each rank struct RankData { - int attribute1, attribute2; // Attribute level + int attribute1, attribute2; // Attribute level - int skill1, skill2; // Skill level (faction skills given in - // skillID below.) You need one skill at - // level 'skill1' and two skills at level - // 'skill2' to advance to this rank. + int skill1, skill2; // Skill level (faction skills given in + // skillID below.) You need one skill at + // level 'skill1' and two skills at level + // 'skill2' to advance to this rank. - int factReaction; // Reaction from faction members + int factReaction; // Reaction from faction members }; struct Faction { - std::string id, name; + std::string id, name; - struct FADTstruct - { - // Which attributes we like - int attribute1, attribute2; + struct FADTstruct + { + // Which attributes we like + int attribute1, attribute2; - RankData rankData[10]; + RankData rankData[10]; - int skillID[6]; // IDs of skills this faction require - int unknown; // Always -1? - int isHidden; // 1 - hidden from player - }; // 240 bytes + int skillID[6]; // IDs of skills this faction require + int unknown; // Always -1? + int isHidden; // 1 - hidden from player + }; // 240 bytes - FADTstruct data; + FADTstruct data; - struct Reaction - { - std::string faction; - int reaction; - }; + struct Reaction + { + std::string faction; + int reaction; + }; - std::vector reactions; + std::vector reactions; - // Name of faction ranks (may be empty for NPC factions) - std::string ranks[10]; + // Name of faction ranks (may be empty for NPC factions) + std::string ranks[10]; - void load(ESMReader &esm) - { - name = esm.getHNString("FNAM"); - - // Read rank names. These are optional. - int i = 0; - while(esm.isNextSub("RNAM") && i<10) ranks[i++] = esm.getHString(); - - // Main data struct - esm.getHNT(data, "FADT", 240); - - if(data.isHidden > 1) esm.fail("Unknown flag!"); - - // Read faction response values - while(esm.hasMoreSubs()) - { - Reaction r; - r.faction = esm.getHNString("ANAM"); - esm.getHNT(r.reaction, "INTV"); - reactions.push_back(r); - } - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadglob.cpp b/components/esm/loadglob.cpp new file mode 100644 index 0000000000..c946b3fa07 --- /dev/null +++ b/components/esm/loadglob.cpp @@ -0,0 +1,24 @@ +#include "loadglob.hpp" + +namespace ESM +{ + +void Global::load(ESMReader &esm) +{ + VarType t; + std::string tmp = esm.getHNString("FNAM"); + if (tmp == "s") + t = VT_Short; + else if (tmp == "l") + t = VT_Int; + else if (tmp == "f") + t = VT_Float; + else + esm.fail("Illegal global variable type " + tmp); + type = t; + + // Note: Both floats and longs are represented as floats. + esm.getHNT(value, "FLTV"); +} + +} diff --git a/components/esm/loadglob.hpp b/components/esm/loadglob.hpp index 9de3e1a467..5028679dd3 100644 --- a/components/esm/loadglob.hpp +++ b/components/esm/loadglob.hpp @@ -2,8 +2,10 @@ #define _ESM_GLOB_H #include "esm_reader.hpp" +#include "defs.hpp" -namespace ESM { +namespace ESM +{ /* * Global script variables @@ -11,22 +13,10 @@ namespace ESM { struct Global { - unsigned value; - VarType type; + unsigned value; + VarType type; - void load(ESMReader &esm) - { - VarType t; - std::string tmp = esm.getHNString("FNAM"); - if(tmp == "s") t = VT_Short; - else if(tmp == "l") t = VT_Int; - else if(tmp == "f") t = VT_Float; - else esm.fail("Illegal global variable type " + tmp); - type = t; - - // Note: Both floats and longs are represented as floats. - esm.getHNT(value, "FLTV"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadgmst.cpp b/components/esm/loadgmst.cpp new file mode 100644 index 0000000000..677642e319 --- /dev/null +++ b/components/esm/loadgmst.cpp @@ -0,0 +1,172 @@ +#include "loadgmst.hpp" + +namespace ESM +{ + +// Some handy macros +#define cI(s,x) { if(id == (s)) return (i == (x)); } +#define cF(s,x) { if(id == (s)) return (f == (x)); } +#define cS(s,x) { if(id == (s)) return (str == (x)); } + +bool GameSetting::isDirtyTribunal() +{ + /* + Here, id contains the game setting name, and we check the + setting for certain values. If it matches, this is a "dirty" + entry. The correct entry (as defined in Tribunal and Bloodmoon + esms) are given in the comments. Many of the values are correct, + and are marked as 'same'. We still ignore them though, as they + are still in the wrong file and might override custom values + from other mods. + */ + + // Strings + cS("sProfitValue", "Profit Value"); // 'Profit:' + cS("sEditNote", "Edit Note"); // same + cS("sDeleteNote", "Delete Note?"); // same + cS("sMaxSale", "Max Sale"); // 'Seller Max' + cS("sMagicFabricantID", "Fabricant"); // 'Fabricant_summon' + cS("sTeleportDisabled", + "Teleportation magic does not work here.");// same + cS("sLevitateDisabled", + "Levitation magic does not work here."); // same + cS("sCompanionShare", "Companion Share"); // 'Share' + cS("sCompanionWarningButtonOne", + "Let the mercenary quit."); // same + cS("sCompanionWarningButtonTwo", + "Return to Companion Share display."); // same + cS("sCompanionWarningMessage", + "Your mercenary is poorer now than when he contracted with you. Your mercenary will quit if you do not give him gold or goods to bring his Profit Value to a positive value."); + // 'Your mercenary is poorer now than when he contracted with + // you. Your mercenary will quit if you do not give him gold + // or goods to bring his Profit to a positive value.' + // [The difference here is "Profit Value" -> "Profit"] + + // Strings that matches the id + cS("sEffectSummonFabricant", id);// 'Summon Fabricant' + return false; +} + +// Bloodmoon variant +bool GameSetting::isDirtyBloodmoon() +{ + // Strings + cS("sWerewolfPopup", "Werewolf"); // same + cS("sWerewolfRestMessage", + "You cannot rest in werewolf form."); // same + cS("sWerewolfRefusal", + "You cannot do this as a werewolf."); // same + cS("sWerewolfAlarmMessage", + "You have been detected changing from a werewolf state."); + // 'You have been detected as a known werewolf.' + + // Strings that matches the id + cS("sMagicCreature01ID", id); // 'BM_wolf_grey_summon' + cS("sMagicCreature02ID", id); // 'BM_bear_black_summon' + cS("sMagicCreature03ID", id); // 'BM_wolf_bone_summon' + cS("sMagicCreature04ID", id); // same + cS("sMagicCreature05ID", id); // same + cS("sEffectSummonCreature01", id); // 'Calf Wolf' + cS("sEffectSummonCreature02", id); // 'Calf Bear' + cS("sEffectSummonCreature03", id); // 'Summon Bonewolf' + cS("sEffectSummonCreature04", id); // same + cS("sEffectSummonCreature05", id); // same + + // Integers + cI("iWereWolfBounty", 10000); // 1000 + cI("iWereWolfFightMod", 100); // same + cI("iWereWolfFleeMod", 100); // same + cI("iWereWolfLevelToAttack", 20); // same + + // Floats + cF("fFleeDistance", 3000); // same + cF("fCombatDistanceWerewolfMod", 0.3); // same + cF("fWereWolfFatigue", 400); // same + cF("fWereWolfEnchant", 1); // 0 + cF("fWereWolfArmorer", 1); // 0 + cF("fWereWolfBlock", 1); // 0 + cF("fWereWolfSneak", 1); // 95 + cF("fWereWolfDestruction", 1); // 0 + cF("fWereWolfEndurance", 150); // same + cF("fWereWolfConjuration", 1); // 0 + cF("fWereWolfRestoration", 1); // 0 + cF("fWereWolfAthletics", 150); // 50 + cF("fWereWolfLuck", 1); // 25 + cF("fWereWolfSilverWeaponDamageMult", 1.5); // 2 + cF("fWereWolfMediumArmor", 1); // 0 + cF("fWereWolfShortBlade", 1); // 0 + cF("fWereWolfAcrobatics", 150); // 80 + cF("fWereWolfSpeechcraft", 1); // 0 + cF("fWereWolfAlteration", 1); // 0 + cF("fWereWolfIllusion", 1); // 0 + cF("fWereWolfLongBlade", 1); // 0 + cF("fWereWolfMarksman", 1); // 0 + cF("fWereWolfHandtoHand", 100); // same + cF("fWereWolfIntellegence", 1); // 0 + cF("fWereWolfAlchemy", 1); // 0 + cF("fWereWolfUnarmored", 100); // same + cF("fWereWolfAxe", 1); // 0 + cF("fWereWolfRunMult", 1.5); // 1.3 + cF("fWereWolfMagicka", 100); // same + cF("fWereWolfAgility", 150); // same + cF("fWereWolfBluntWeapon", 1); // 0 + cF("fWereWolfSecurity", 1); // 0 + cF("fWereWolfPersonality", 1); // 0 + cF("fWereWolfMerchantile", 1); // 0 + cF("fWereWolfHeavyArmor", 1); // 0 + cF("fWereWolfSpear", 1); // 0 + cF("fWereWolfStrength", 150); // same + cF("fWereWolfHealth", 2); // same + cF("fWereWolfMysticism", 1); // 0 + cF("fWereWolfLightArmor", 1); // 0 + cF("fWereWolfWillPower", 1); // 0 + cF("fWereWolfSpeed", 150); // 90 + return false; +} + +void GameSetting::load(ESMReader &esm) +{ + assert(id != ""); + + dirty = false; + + // We are apparently allowed to be empty + if (!esm.hasMoreSubs()) + { + type = VT_None; + return; + } + + // Load some data + esm.getSubName(); + NAME n = esm.retSubName(); + if (n == "STRV") + { + str = esm.getHString(); + type = VT_String; + } + else if (n == "INTV") + { + esm.getHT(i); + type = VT_Int; + } + else if (n == "FLTV") + { + esm.getHT(f); + type = VT_Float; + } + else + esm.fail("Unwanted subrecord type"); + + int spf = esm.getSpecial(); + + // Check if this is one of the dirty values mentioned above. If it + // is, we set the dirty flag. This will ONLY work if you've set + // the 'id' string correctly before calling load(). + + if ((spf != SF_Tribunal && isDirtyTribunal()) || (spf != SF_Bloodmoon + && isDirtyBloodmoon())) + dirty = true; +} + +} diff --git a/components/esm/loadgmst.hpp b/components/esm/loadgmst.hpp index 2e112ecb65..01fbc30676 100644 --- a/components/esm/loadgmst.hpp +++ b/components/esm/loadgmst.hpp @@ -4,7 +4,8 @@ #include "esm_reader.hpp" #include "defs.hpp" -namespace ESM { +namespace ESM +{ /* * Game setting, with automatic cleaning of "dirty" entries. @@ -13,238 +14,75 @@ namespace ESM { struct GameSetting { - std::string id; + std::string id; - // One of these is used depending on the variable type - std::string str; - int i; - float f; - VarType type; + // One of these is used depending on the variable type + std::string str; + int i; + float f; + VarType type; - // Set to true if this is a 'dirty' entry which should be ignored - bool dirty; + // Set to true if this is a 'dirty' entry which should be ignored + bool dirty; - /* - These functions check if this game setting is one of the "dirty" - GMST records found in many mods. These are due to a serious bug in - the official TES3 editor. It only occurs in the newer editor - versions that came with Tribunal and Bloodmoon, and only if a - modder tries to make a mod without loading the corresponding - expansion master file. For example, if you have Tribunal installed - and try to make a mod without loading Tribunal.esm, the editor - will insert these GMST records as a replacement for the entries it - cannot find in the ESMs. - - The values of these "dirty" records differ in general from their - values as defined in Tribunal.esm and Bloodmoon.esm, and are - always set to the same "default" values. Most of these values are - nonsensical, ie. changing the "Seller Max" string to "Max Sale", - or change the stats of werewolves to useless values like 1. Some - of them break certain spell effects. - - It is most likely that these values are just leftover values from - an early stage of development that are inserted as default values - by the editor code. They are supposed to be overridden when the - correct esm file is loaded. When it isn't loaded however, you get - stuck with the initial value, and this gets written to every mod - by the editor, for some reason. - - Bethesda themselves have fallen for this bug. If you install both - Tribunal and Bloodmoon, the updated Tribunal.esm will contain the - dirty GMST settings from Bloodmoon, and Bloodmoon.esm will contain - some of the dirty settings from Tribunal. In other words, this bug - affects the game EVEN IF YOU DO NOT USE ANY MODS! - - The guys at Bethesda are well aware of this bug (and many others), - as the mod community and fan base complained about them for a long - time. But unfortunately it was never fixed. - - There are several tools available to help modders remove these - records from their files, but not all modders use them, and they - really shouldn't have to. In this file we choose instead to reject - all the corrupt values at load time. - - These functions checks if the current game setting is one of the - "dirty" ones as described above. TODO: I have not checked this - against other sources yet, do that later. Currently recognizes 22 - values for tribunal and 50 for bloodmoon. Legitimate GMSTs in mods - (setting values other than the default "dirty" ones) are not - affected and will work correctly. - */ - - // Some handy macros -#define cI(s,x) { if(id == (s)) return (i == (x)); } -#define cF(s,x) { if(id == (s)) return (f == (x)); } -#define cS(s,x) { if(id == (s)) return (str == (x)); } - - /* - Checks for dirty tribunal values. These will be ignored if found - in any file except when they are found in "Tribunal.esm". - */ - bool isDirtyTribunal() - { /* - Here, id contains the game setting name, and we check the - setting for certain values. If it matches, this is a "dirty" - entry. The correct entry (as defined in Tribunal and Bloodmoon - esms) are given in the comments. Many of the values are correct, - and are marked as 'same'. We still ignore them though, as they - are still in the wrong file and might override custom values - from other mods. - */ + These functions check if this game setting is one of the "dirty" + GMST records found in many mods. These are due to a serious bug in + the official TES3 editor. It only occurs in the newer editor + versions that came with Tribunal and Bloodmoon, and only if a + modder tries to make a mod without loading the corresponding + expansion master file. For example, if you have Tribunal installed + and try to make a mod without loading Tribunal.esm, the editor + will insert these GMST records as a replacement for the entries it + cannot find in the ESMs. - // Strings - cS("sProfitValue", "Profit Value"); // 'Profit:' - cS("sEditNote", "Edit Note"); // same - cS("sDeleteNote", "Delete Note?"); // same - cS("sMaxSale", "Max Sale"); // 'Seller Max' - cS("sMagicFabricantID", "Fabricant"); // 'Fabricant_summon' - cS("sTeleportDisabled", - "Teleportation magic does not work here.");// same - cS("sLevitateDisabled", - "Levitation magic does not work here."); // same - cS("sCompanionShare", "Companion Share"); // 'Share' - cS("sCompanionWarningButtonOne", - "Let the mercenary quit."); // same - cS("sCompanionWarningButtonTwo", - "Return to Companion Share display."); // same - cS("sCompanionWarningMessage", - "Your mercenary is poorer now than when he contracted with you. Your mercenary will quit if you do not give him gold or goods to bring his Profit Value to a positive value."); - // 'Your mercenary is poorer now than when he contracted with - // you. Your mercenary will quit if you do not give him gold - // or goods to bring his Profit to a positive value.' - // [The difference here is "Profit Value" -> "Profit"] + The values of these "dirty" records differ in general from their + values as defined in Tribunal.esm and Bloodmoon.esm, and are + always set to the same "default" values. Most of these values are + nonsensical, ie. changing the "Seller Max" string to "Max Sale", + or change the stats of werewolves to useless values like 1. Some + of them break certain spell effects. - // Strings that matches the id - cS("sEffectSummonFabricant", id);// 'Summon Fabricant' - return false; - } + It is most likely that these values are just leftover values from + an early stage of development that are inserted as default values + by the editor code. They are supposed to be overridden when the + correct esm file is loaded. When it isn't loaded however, you get + stuck with the initial value, and this gets written to every mod + by the editor, for some reason. - // Bloodmoon variant - bool isDirtyBloodmoon() - { - // Strings - cS("sWerewolfPopup", "Werewolf"); // same - cS("sWerewolfRestMessage", - "You cannot rest in werewolf form."); // same - cS("sWerewolfRefusal", - "You cannot do this as a werewolf."); // same - cS("sWerewolfAlarmMessage", - "You have been detected changing from a werewolf state."); - // 'You have been detected as a known werewolf.' + Bethesda themselves have fallen for this bug. If you install both + Tribunal and Bloodmoon, the updated Tribunal.esm will contain the + dirty GMST settings from Bloodmoon, and Bloodmoon.esm will contain + some of the dirty settings from Tribunal. In other words, this bug + affects the game EVEN IF YOU DO NOT USE ANY MODS! - // Strings that matches the id - cS("sMagicCreature01ID", id); // 'BM_wolf_grey_summon' - cS("sMagicCreature02ID", id); // 'BM_bear_black_summon' - cS("sMagicCreature03ID", id); // 'BM_wolf_bone_summon' - cS("sMagicCreature04ID", id); // same - cS("sMagicCreature05ID", id); // same - cS("sEffectSummonCreature01", id); // 'Calf Wolf' - cS("sEffectSummonCreature02", id); // 'Calf Bear' - cS("sEffectSummonCreature03", id); // 'Summon Bonewolf' - cS("sEffectSummonCreature04", id); // same - cS("sEffectSummonCreature05", id); // same + The guys at Bethesda are well aware of this bug (and many others), + as the mod community and fan base complained about them for a long + time. But unfortunately it was never fixed. - // Integers - cI("iWereWolfBounty", 10000); // 1000 - cI("iWereWolfFightMod", 100); // same - cI("iWereWolfFleeMod", 100); // same - cI("iWereWolfLevelToAttack", 20); // same + There are several tools available to help modders remove these + records from their files, but not all modders use them, and they + really shouldn't have to. In this file we choose instead to reject + all the corrupt values at load time. - // Floats - cF("fFleeDistance", 3000); // same - cF("fCombatDistanceWerewolfMod", 0.3); // same - cF("fWereWolfFatigue", 400); // same - cF("fWereWolfEnchant", 1); // 0 - cF("fWereWolfArmorer", 1); // 0 - cF("fWereWolfBlock", 1); // 0 - cF("fWereWolfSneak", 1); // 95 - cF("fWereWolfDestruction", 1); // 0 - cF("fWereWolfEndurance", 150); // same - cF("fWereWolfConjuration", 1); // 0 - cF("fWereWolfRestoration", 1); // 0 - cF("fWereWolfAthletics", 150); // 50 - cF("fWereWolfLuck", 1); // 25 - cF("fWereWolfSilverWeaponDamageMult", 1.5); // 2 - cF("fWereWolfMediumArmor", 1); // 0 - cF("fWereWolfShortBlade", 1); // 0 - cF("fWereWolfAcrobatics", 150); // 80 - cF("fWereWolfSpeechcraft", 1); // 0 - cF("fWereWolfAlteration", 1); // 0 - cF("fWereWolfIllusion", 1); // 0 - cF("fWereWolfLongBlade", 1); // 0 - cF("fWereWolfMarksman", 1); // 0 - cF("fWereWolfHandtoHand", 100); // same - cF("fWereWolfIntellegence", 1); // 0 - cF("fWereWolfAlchemy", 1); // 0 - cF("fWereWolfUnarmored", 100); // same - cF("fWereWolfAxe", 1); // 0 - cF("fWereWolfRunMult", 1.5); // 1.3 - cF("fWereWolfMagicka", 100); // same - cF("fWereWolfAgility", 150); // same - cF("fWereWolfBluntWeapon", 1); // 0 - cF("fWereWolfSecurity", 1); // 0 - cF("fWereWolfPersonality", 1); // 0 - cF("fWereWolfMerchantile", 1); // 0 - cF("fWereWolfHeavyArmor", 1); // 0 - cF("fWereWolfSpear", 1); // 0 - cF("fWereWolfStrength", 150); // same - cF("fWereWolfHealth", 2); // same - cF("fWereWolfMysticism", 1); // 0 - cF("fWereWolfLightArmor", 1); // 0 - cF("fWereWolfWillPower", 1); // 0 - cF("fWereWolfSpeed", 150); // 90 - return false; - } + These functions checks if the current game setting is one of the + "dirty" ones as described above. TODO: I have not checked this + against other sources yet, do that later. Currently recognizes 22 + values for tribunal and 50 for bloodmoon. Legitimate GMSTs in mods + (setting values other than the default "dirty" ones) are not + affected and will work correctly. + */ -#undef cI -#undef cF -#undef cS + /* + Checks for dirty tribunal values. These will be ignored if found + in any file except when they are found in "Tribunal.esm". + */ + bool isDirtyTribunal(); - void load(ESMReader &esm) - { - assert(id != ""); + // Bloodmoon variant + bool isDirtyBloodmoon(); - dirty = false; - - // We are apparently allowed to be empty - if(!esm.hasMoreSubs()) - { - type = VT_None; - return; - } - - // Load some data - esm.getSubName(); - NAME n = esm.retSubName(); - if(n == "STRV") - { - str = esm.getHString(); - type = VT_String; - } - else if(n == "INTV") - { - esm.getHT(i); - type = VT_Int; - } - else if(n == "FLTV") - { - esm.getHT(f); - type = VT_Float; - } - else - esm.fail("Unwanted subrecord type"); - - int spf = esm.getSpecial(); - - // Check if this is one of the dirty values mentioned above. If it - // is, we set the dirty flag. This will ONLY work if you've set - // the 'id' string correctly before calling load(). - - if( ( spf != SF_Tribunal && isDirtyTribunal() ) || - ( spf != SF_Bloodmoon && isDirtyBloodmoon() ) ) - dirty = true; - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadinfo.cpp b/components/esm/loadinfo.cpp new file mode 100644 index 0000000000..0f08b3c8a2 --- /dev/null +++ b/components/esm/loadinfo.cpp @@ -0,0 +1,133 @@ +#include "loadinfo.hpp" + +namespace ESM +{ + +void DialInfo::load(ESMReader &esm) +{ + id = esm.getHNString("INAM"); + prev = esm.getHNString("PNAM"); + next = esm.getHNString("NNAM"); + + // Not present if deleted + if (esm.isNextSub("DATA")) + esm.getHT(data, 12); + + // What follows is somewhat spaghetti-ish, but it's worth if for + // an extra speedup. INFO is by far the most common record type. + + // subName is a reference to the original, so it changes whenever + // a new sub name is read. esm.isEmptyOrGetName() will get the + // next name for us, or return true if there are no more records. + esm.getSubName(); + const NAME &subName = esm.retSubName(); + + if (subName.val == REC_ONAM) + { + actor = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + if (subName.val == REC_RNAM) + { + race = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + if (subName.val == REC_CNAM) + { + clas = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + + factionLess = false; + if (subName.val == REC_FNAM) + { + npcFaction = esm.getHString(); + if (npcFaction == "FFFF") + factionLess = true; + if (esm.isEmptyOrGetName()) + return; + } + if (subName.val == REC_ANAM) + { + cell = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + if (subName.val == REC_DNAM) + { + pcFaction = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + if (subName.val == REC_SNAM) + { + sound = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + if (subName.val == REC_NAME) + { + response = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + + while (subName.val == REC_SCVR) + { + SelectStruct ss; + + ss.selectRule = esm.getHString(); + esm.isEmptyOrGetName(); + + if (subName.val == REC_INTV) + { + ss.type = VT_Int; + esm.getHT(ss.i); + } + else if (subName.val == REC_FLTV) + { + ss.type = VT_Float; + esm.getHT(ss.f); + } + else + esm.fail( + "INFO.SCVR must precede INTV or FLTV, not " + + subName.toString()); + + selects.push_back(ss); + + if (esm.isEmptyOrGetName()) + return; + } + + if (subName.val == REC_BNAM) + { + resultScript = esm.getHString(); + if (esm.isEmptyOrGetName()) + return; + } + + questStatus = QS_None; + + if (subName.val == REC_QSTN) + questStatus = QS_Name; + else if (subName.val == REC_QSTF) + questStatus = QS_Finished; + else if (subName.val == REC_QSTR) + questStatus = QS_Restart; + else if (subName.val == REC_DELE) + questStatus = QS_Deleted; + else + esm.fail( + "Don't know what to do with " + subName.toString() + + " in INFO " + id); + + if (questStatus != QS_None) + // Skip rest of record + esm.skipRecord(); +} + +} diff --git a/components/esm/loadinfo.hpp b/components/esm/loadinfo.hpp index 480deda737..c47af341e3 100644 --- a/components/esm/loadinfo.hpp +++ b/components/esm/loadinfo.hpp @@ -4,7 +4,8 @@ #include "esm_reader.hpp" #include "defs.hpp" -namespace ESM { +namespace ESM +{ // NOT DONE @@ -15,88 +16,88 @@ namespace ESM { struct DialInfo { - enum Gender + enum Gender { - Male = 0, - Female = 1, - NA = -1 + Male = 0, + Female = 1, + NA = -1 }; - struct DATAstruct - { - int unknown1; - int disposition; - char rank; // Rank of NPC - char gender; // See Gender enum - char PCrank; // Player rank - char unknown2; - }; // 12 bytes - DATAstruct data; - - // The rules for whether or not we will select this dialog item. - struct SelectStruct - { - std::string selectRule; // This has a complicated format - float f; // Only one of 'f' or 'i' is used - int i; - VarType type; - }; - - // Journal quest indices (introduced with the quest system in Tribunal) - enum QuestStatus + struct DATAstruct { - QS_None, - QS_Name, - QS_Finished, - QS_Restart, - QS_Deleted + int unknown1; + int disposition; + char rank; // Rank of NPC + char gender; // See Gender enum + char PCrank; // Player rank + char unknown2; + }; // 12 bytes + DATAstruct data; + + // The rules for whether or not we will select this dialog item. + struct SelectStruct + { + std::string selectRule; // This has a complicated format + float f; // Only one of 'f' or 'i' is used + int i; + VarType type; }; - // Rules for when to include this item in the final list of options - // visible to the player. - std::vector selects; - - // Id of this, previous and next INFO items - std::string id, prev, next, - - // Various references used in determining when to select this item. - actor, race, clas, npcFaction, pcFaction, cell, - - // Sound and text associated with this item - sound, response, - - // Result script (uncomiled) to run whenever this dialog item is - // selected - resultScript; - - // ONLY include this item the NPC is not part of any faction. - bool factionLess; - - // Status of this quest item - QuestStatus questStatus; - - // Hexadecimal versions of the various subrecord names. - enum SubNames + // Journal quest indices (introduced with the quest system in Tribunal) + enum QuestStatus { - REC_ONAM = 0x4d414e4f, - REC_RNAM = 0x4d414e52, - REC_CNAM = 0x4d414e43, - REC_FNAM = 0x4d414e46, - REC_ANAM = 0x4d414e41, - REC_DNAM = 0x4d414e44, - REC_SNAM = 0x4d414e53, - REC_NAME = 0x454d414e, - REC_SCVR = 0x52564353, - REC_INTV = 0x56544e49, - REC_FLTV = 0x56544c46, - REC_BNAM = 0x4d414e42, - REC_QSTN = 0x4e545351, - REC_QSTF = 0x46545351, - REC_QSTR = 0x52545351, - REC_DELE = 0x454c4544 + QS_None, + QS_Name, + QS_Finished, + QS_Restart, + QS_Deleted }; - void load(ESMReader &esm); + // Rules for when to include this item in the final list of options + // visible to the player. + std::vector selects; + + // Id of this, previous and next INFO items + std::string id, prev, next, + + // Various references used in determining when to select this item. + actor, race, clas, npcFaction, pcFaction, cell, + + // Sound and text associated with this item + sound, response, + + // Result script (uncomiled) to run whenever this dialog item is + // selected + resultScript; + + // ONLY include this item the NPC is not part of any faction. + bool factionLess; + + // Status of this quest item + QuestStatus questStatus; + + // Hexadecimal versions of the various subrecord names. + enum SubNames + { + REC_ONAM = 0x4d414e4f, + REC_RNAM = 0x4d414e52, + REC_CNAM = 0x4d414e43, + REC_FNAM = 0x4d414e46, + REC_ANAM = 0x4d414e41, + REC_DNAM = 0x4d414e44, + REC_SNAM = 0x4d414e53, + REC_NAME = 0x454d414e, + REC_SCVR = 0x52564353, + REC_INTV = 0x56544e49, + REC_FLTV = 0x56544c46, + REC_BNAM = 0x4d414e42, + REC_QSTN = 0x4e545351, + REC_QSTF = 0x46545351, + REC_QSTR = 0x52545351, + REC_DELE = 0x454c4544 + }; + + void load(ESMReader &esm); }; /* diff --git a/components/esm/loadingr.cpp b/components/esm/loadingr.cpp new file mode 100644 index 0000000000..471f717800 --- /dev/null +++ b/components/esm/loadingr.cpp @@ -0,0 +1,15 @@ +#include "loadingr.hpp" + +namespace ESM +{ + +void Ingredient::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNString("FNAM"); + esm.getHNT(data, "IRDT", 56); + script = esm.getHNOString("SCRI"); + icon = esm.getHNOString("ITEX"); +} + +} diff --git a/components/esm/loadingr.hpp b/components/esm/loadingr.hpp index 5845cb5704..af9599ed06 100644 --- a/components/esm/loadingr.hpp +++ b/components/esm/loadingr.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Alchemy ingredient @@ -11,26 +12,19 @@ namespace ESM { struct Ingredient { - struct IRDTstruct - { - float weight; - int value; - int effectID[4]; // Effect, 0 or -1 means none - int skills[4]; // SkillEnum related to effect - int attributes[4]; // Attribute related to effect - }; + struct IRDTstruct + { + float weight; + int value; + int effectID[4]; // Effect, 0 or -1 means none + int skills[4]; // SkillEnum related to effect + int attributes[4]; // Attribute related to effect + }; - IRDTstruct data; - std::string name, model, icon, script; + IRDTstruct data; + std::string name, model, icon, script; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNString("FNAM"); - esm.getHNT(data, "IRDT", 56); - script = esm.getHNOString("SCRI"); - icon = esm.getHNOString("ITEX"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadlevlist.cpp b/components/esm/loadlevlist.cpp new file mode 100644 index 0000000000..d1bff7972d --- /dev/null +++ b/components/esm/loadlevlist.cpp @@ -0,0 +1,34 @@ +#include "loadlevlist.hpp" + +namespace ESM +{ + +void LeveledListBase::load(ESMReader &esm) +{ + esm.getHNT(flags, "DATA"); + esm.getHNT(chanceNone, "NNAM"); + + if (esm.isNextSub("INDX")) + { + int len; + esm.getHT(len); + list.resize(len); + } + else + return; + + // TODO: Merge with an existing lists here. This can be done + // simply by adding the lists together, making sure that they are + // sorted by level. A better way might be to exclude repeated + // items. Also, some times we don't want to merge lists, just + // overwrite. Figure out a way to give the user this option. + + for (size_t i = 0; i < list.size(); i++) + { + LevelItem &li = list[i]; + li.id = esm.getHNString(recName); + esm.getHNT(li.level, "INTV"); + } +} + +} diff --git a/components/esm/loadlevlist.hpp b/components/esm/loadlevlist.hpp index 8b0ae45b21..4affce5394 100644 --- a/components/esm/loadlevlist.hpp +++ b/components/esm/loadlevlist.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Leveled lists. Since these have identical layout, I only bothered @@ -15,65 +16,50 @@ namespace ESM { struct LeveledListBase { - enum Flags + enum Flags { - AllLevels = 0x01, // Calculate from all levels <= player - // level, not just the closest below - // player. - Each = 0x02 // Select a new item each time this - // list is instantiated, instead of - // giving several identical items - }; // (used when a container has more - // than one instance of one leveled - // list.) - int flags; - unsigned char chanceNone; // Chance that none are selected (0-255?) + AllLevels = 0x01, // Calculate from all levels <= player + // level, not just the closest below + // player. + Each = 0x02 // Select a new item each time this + // list is instantiated, instead of + // giving several identical items + }; // (used when a container has more + // than one instance of one leveled + // list.) + int flags; + unsigned char chanceNone; // Chance that none are selected (0-255?) - // Record name used to read references. Must be set before load() is - // called. - const char *recName; + // Record name used to read references. Must be set before load() is + // called. + const char *recName; - struct LevelItem - { - std::string id; - short level; - }; + struct LevelItem + { + std::string id; + short level; + }; - std::vector list; + std::vector list; - void load(ESMReader &esm) - { - esm.getHNT(flags, "DATA"); - esm.getHNT(chanceNone, "NNAM"); - - if(esm.isNextSub("INDX")) - { - int len; - esm.getHT(len); - list.resize(len); - } - else return; - - // TODO: Merge with an existing lists here. This can be done - // simply by adding the lists together, making sure that they are - // sorted by level. A better way might be to exclude repeated - // items. Also, some times we don't want to merge lists, just - // overwrite. Figure out a way to give the user this option. - - for(size_t i=0; i soundList; + std::vector soundList; - void load(ESMReader &esm) - { - name = esm.getHNString("FNAM"); - - if(esm.getVer() == VER_12) - esm.getHNExact(&data, sizeof(data)-2, "WEAT"); - else if(esm.getVer() == VER_13) - esm.getHNExact(&data, sizeof(data), "WEAT"); - else esm.fail("Don't know what to do in this version"); - - sleepList = esm.getHNOString("BNAM"); - - esm.getHNT(mapColor, "CNAM"); - - while(esm.hasMoreSubs()) - { - SoundRef sr; - esm.getHNT(sr, "SNAM", 33); - soundList.push_back(sr); - } - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadscpt.cpp b/components/esm/loadscpt.cpp new file mode 100644 index 0000000000..9c0176725c --- /dev/null +++ b/components/esm/loadscpt.cpp @@ -0,0 +1,42 @@ +#include "loadscpt.hpp" + +namespace ESM +{ + +void Script::load(ESMReader &esm) +{ + esm.getHNT(data, "SCHD", 52); + + // List of local variables + if (esm.isNextSub("SCVR")) + { + int s = data.stringTableSize; + char* tmp = new char[s]; + esm.getHExact(tmp, s); + + // Set up the list of variable names + varNames.resize(data.numShorts + data.numLongs + data.numFloats); + + // The tmp buffer is a null-byte separated string list, we + // just have to pick out one string at a time. + char* str = tmp; + for (size_t i = 0; i < varNames.size(); i++) + { + varNames[i] = std::string(str); + str += varNames[i].size() + 1; + + if (str - tmp > s) + esm.fail("String table overflow"); + } + delete[] tmp; + } + + // Script data + scriptData.resize(data.scriptDataSize); + esm.getHNExact(&scriptData[0], scriptData.size(), "SCDT"); + + // Script text + scriptText = esm.getHNOString("SCTX"); +} + +} diff --git a/components/esm/loadscpt.hpp b/components/esm/loadscpt.hpp index aa189c888f..3ce3d9636b 100644 --- a/components/esm/loadscpt.hpp +++ b/components/esm/loadscpt.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Script definitions @@ -12,80 +13,43 @@ namespace ESM { class Script { public: - struct SCHDstruct - { - /* Script name. + struct SCHDstruct + { + /* Script name. - NOTE: You should handle the name "Main" (case insensitive) with - care. With tribunal, modders got the ability to add 'start - scripts' to their mods, which is a script that is run at - startup and which runs throughout the game (I think.) + NOTE: You should handle the name "Main" (case insensitive) with + care. With tribunal, modders got the ability to add 'start + scripts' to their mods, which is a script that is run at + startup and which runs throughout the game (I think.) - However, before Tribunal, there was only one startup script, - called "Main". If mods wanted to make their own start scripts, - they had to overwrite Main. This is obviously problem if - multiple mods to this at the same time. + However, before Tribunal, there was only one startup script, + called "Main". If mods wanted to make their own start scripts, + they had to overwrite Main. This is obviously problem if + multiple mods to this at the same time. - Although most mods have switched to using Trib-style startup - scripts, some legacy mods might still overwrite Main, and this - can cause problems if several mods do it. I think the best - course of action is to NEVER overwrite main, but instead add - each with a separate unique name and add them to the start - script list. But there might be other problems with this - approach though. - */ + Although most mods have switched to using Trib-style startup + scripts, some legacy mods might still overwrite Main, and this + can cause problems if several mods do it. I think the best + course of action is to NEVER overwrite main, but instead add + each with a separate unique name and add them to the start + script list. But there might be other problems with this + approach though. + */ - NAME32 name; + NAME32 name; - // These describe the sizes we need to allocate for the script - // data. - int numShorts, numLongs, numFloats, - scriptDataSize, stringTableSize; - }; // 52 bytes + // These describe the sizes we need to allocate for the script + // data. + int numShorts, numLongs, numFloats, scriptDataSize, stringTableSize; + }; // 52 bytes - SCHDstruct data; + SCHDstruct data; - std::vector varNames; // Variable names - std::vector scriptData; // Compiled bytecode - std::string scriptText; // Uncompiled script + std::vector varNames; // Variable names + std::vector scriptData; // Compiled bytecode + std::string scriptText; // Uncompiled script - void load(ESMReader &esm) - { - esm.getHNT(data, "SCHD", 52); - - // List of local variables - if(esm.isNextSub("SCVR")) - { - int s = data.stringTableSize; - char* tmp = new char[s]; - esm.getHExact(tmp, s); - - // Set up the list of variable names - varNames.resize(data.numShorts + - data.numLongs + - data.numFloats); - - // The tmp buffer is a null-byte separated string list, we - // just have to pick out one string at a time. - char* str = tmp; - for(size_t i=0; i< varNames.size(); i++) - { - varNames[i] = std::string(str); - str += varNames[i].size()+1; - - if(str - tmp > s) - esm.fail("String table overflow"); - } - delete[] tmp; - } - - // Script data - scriptData.resize(data.scriptDataSize); - esm.getHNExact(&scriptData[0], scriptData.size(), "SCDT"); - - // Script text - scriptText = esm.getHNOString("SCTX"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadskil.cpp b/components/esm/loadskil.cpp index 77ce2d368e..aa7103efcb 100644 --- a/components/esm/loadskil.cpp +++ b/components/esm/loadskil.cpp @@ -1,33 +1,70 @@ #include "loadskil.hpp" -namespace ESMS +namespace ESM { - const std::string Skill::sSkillNames[Length] = { - "Block", - "Armorer", - "Medium Armor", - "Heavy Armor", - "Blunt Weapon", - "Long Blade", - "Axe", - "Spear", - "Athletics", - "Enchant", - "Destruction", - "Alteration", - "Illusion", - "Conjuration", - "Mysticism", - "Restoration", - "Alchemy", - "Unarmored", - "Security", - "Sneak", - "Acrobatics", - "Light Armor", - "Short Blade", - "Marksman", - "Speechcraft", - "Hand To Hand", + const std::string Skill::sSkillNameIds[Length] = { + "sSkillBlock", + "sSkillArmorer", + "sSkillMediumarmor", + "sSkillHeavyarmor", + "sSkillBluntweapon", + "sSkillLongblade", + "sSkillAxe", + "sSkillSpear", + "sSkillAthletics", + "sSkillEnchant", + "sSkillDestruction", + "sSkillAlteration", + "sSkillIllusion", + "sSkillConjuration", + "sSkillMysticism", + "sSkillRestoration", + "sSkillAlchemy", + "sSkillUnarmored", + "sSkillSecurity", + "sSkillSneak", + "sSkillAcrobatics", + "sSkillLightarmor", + "sSkillShortblade", + "sSkillMarksman", + "sSkillMercantile", + "sSkillSpeechcraft", + "sSkillHandtohand", }; + const boost::array Skill::skillIds = {{ + Block, + Armorer, + MediumArmor, + HeavyArmor, + BluntWeapon, + LongBlade, + Axe, + Spear, + Athletics, + Enchant, + Destruction, + Alteration, + Illusion, + Conjuration, + Mysticism, + Restoration, + Alchemy, + Unarmored, + Security, + Sneak, + Acrobatics, + LightArmor, + ShortBlade, + Marksman, + Mercantile, + Speechcraft, + HandToHand + }}; + +void Skill::load(ESMReader &esm) +{ + esm.getHNT(index, "INDX"); + esm.getHNT(data, "SKDT", 24); + description = esm.getHNOString("DESC"); +} } diff --git a/components/esm/loadskil.hpp b/components/esm/loadskil.hpp index ffcbcbb312..836f702051 100644 --- a/components/esm/loadskil.hpp +++ b/components/esm/loadskil.hpp @@ -66,12 +66,7 @@ struct Skill static const std::string sSkillNameIds[Length]; static const boost::array skillIds; - void load(ESMReader &esm) - { - esm.getHNT(index, "INDX"); - esm.getHNT(data, "SKDT", 24); - description = esm.getHNOString("DESC"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadsndg.cpp b/components/esm/loadsndg.cpp new file mode 100644 index 0000000000..b7b5681320 --- /dev/null +++ b/components/esm/loadsndg.cpp @@ -0,0 +1,14 @@ +#include "loadsndg.hpp" + +namespace ESM +{ + +void SoundGenerator::load(ESMReader &esm) +{ + esm.getHNT(type, "DATA", 4); + + creature = esm.getHNOString("CNAM"); + sound = esm.getHNOString("SNAM"); +} + +} diff --git a/components/esm/loadsndg.hpp b/components/esm/loadsndg.hpp index 372b750855..f8803f8c0f 100644 --- a/components/esm/loadsndg.hpp +++ b/components/esm/loadsndg.hpp @@ -28,13 +28,7 @@ struct SoundGenerator std::string creature, sound; - void load(ESMReader &esm) - { - esm.getHNT(type, "DATA", 4); - - creature = esm.getHNOString("CNAM"); - sound = esm.getHNOString("SNAM"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadsoun.cpp b/components/esm/loadsoun.cpp new file mode 100644 index 0000000000..cd47f0f17c --- /dev/null +++ b/components/esm/loadsoun.cpp @@ -0,0 +1,18 @@ +#include "loadsoun.hpp" + +namespace ESM +{ + +void Sound::load(ESMReader &esm) +{ + sound = esm.getHNString("FNAM"); + esm.getHNT(data, "DATA", 3); + /* + cout << "vol=" << (int)data.volume + << " min=" << (int)data.minRange + << " max=" << (int)data.maxRange + << endl; + */ +} + +} diff --git a/components/esm/loadsoun.hpp b/components/esm/loadsoun.hpp index 597c91491c..775a664be0 100644 --- a/components/esm/loadsoun.hpp +++ b/components/esm/loadsoun.hpp @@ -3,20 +3,20 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ struct SOUNstruct { - unsigned char volume, minRange, maxRange; + unsigned char volume, minRange, maxRange; }; struct Sound { - SOUNstruct data; - std::string sound; + SOUNstruct data; + std::string sound; - // Body moved to load_impl.cpp - void load(ESMReader &esm); + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadspel.cpp b/components/esm/loadspel.cpp new file mode 100644 index 0000000000..c3c928ce67 --- /dev/null +++ b/components/esm/loadspel.cpp @@ -0,0 +1,13 @@ +#include "loadspel.hpp" + +namespace ESM +{ + +void Spell::load(ESMReader &esm) +{ + name = esm.getHNOString("FNAM"); + esm.getHNT(data, "SPDT", 12); + effects.load(esm); +} + +} diff --git a/components/esm/loadspel.hpp b/components/esm/loadspel.hpp index a141e7dc10..c97d037cd8 100644 --- a/components/esm/loadspel.hpp +++ b/components/esm/loadspel.hpp @@ -2,45 +2,42 @@ #define _ESM_SPEL_H #include "esm_reader.hpp" +#include "defs.hpp" -namespace ESM { +namespace ESM +{ struct Spell { - enum SpellType + enum SpellType { - ST_Spell = 0, // Normal spell, must be cast and costs mana - ST_Ability = 1, // Inert ability, always in effect - ST_Blight = 2, // Blight disease - ST_Disease = 3, // Common disease - ST_Curse = 4, // Curse (?) - ST_Power = 5 // Power, can use once a day + ST_Spell = 0, // Normal spell, must be cast and costs mana + ST_Ability = 1, // Inert ability, always in effect + ST_Blight = 2, // Blight disease + ST_Disease = 3, // Common disease + ST_Curse = 4, // Curse (?) + ST_Power = 5 // Power, can use once a day }; - enum Flags + enum Flags { - F_Autocalc = 1, - F_PCStart = 2, - F_Always = 4 // Casting always succeeds + F_Autocalc = 1, + F_PCStart = 2, + F_Always = 4 // Casting always succeeds }; - struct SPDTstruct - { - int type; // SpellType - int cost; // Mana cost - int flags; // Flags - }; + struct SPDTstruct + { + int type; // SpellType + int cost; // Mana cost + int flags; // Flags + }; - SPDTstruct data; - std::string name; - EffectList effects; + SPDTstruct data; + std::string name; + EffectList effects; - void load(ESMReader &esm) - { - name = esm.getHNOString("FNAM"); - esm.getHNT(data, "SPDT", 12); - effects.load(esm); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadsscr.cpp b/components/esm/loadsscr.cpp new file mode 100644 index 0000000000..f4e79271ca --- /dev/null +++ b/components/esm/loadsscr.cpp @@ -0,0 +1,13 @@ +#include "loadsscr.hpp" + +namespace ESM +{ + +void StartScript::load(ESMReader &esm) +{ + esm.getSubNameIs("DATA"); + esm.skipHSub(); + script = esm.getHNString("NAME"); +} + +} diff --git a/components/esm/loadsscr.hpp b/components/esm/loadsscr.hpp index e06fd6c706..d18bde101b 100644 --- a/components/esm/loadsscr.hpp +++ b/components/esm/loadsscr.hpp @@ -3,27 +3,23 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* - Startup script. I think this is simply a 'main' script that is run - from the begining. The SSCR records contain a DATA identifier which - is totally useless (TODO: don't remember what it contains exactly, - document it below later.), and a NAME which is simply a script - reference. + Startup script. I think this is simply a 'main' script that is run + from the begining. The SSCR records contain a DATA identifier which + is totally useless (TODO: don't remember what it contains exactly, + document it below later.), and a NAME which is simply a script + reference. */ struct StartScript { - std::string script; + std::string script; - // Load a record and add it to the list - void load(ESMReader &esm) - { - esm.getSubNameIs("DATA"); - esm.skipHSub(); - script = esm.getHNString("NAME"); - } + // Load a record and add it to the list + void load(ESMReader &esm); }; } diff --git a/components/esm/loadstat.cpp b/components/esm/loadstat.cpp new file mode 100644 index 0000000000..654bf290ae --- /dev/null +++ b/components/esm/loadstat.cpp @@ -0,0 +1,11 @@ +#include "loadstat.hpp" + +namespace ESM +{ + +void Static::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); +} + +} diff --git a/components/esm/loadstat.hpp b/components/esm/loadstat.hpp index 7b00df406f..4f3121d186 100644 --- a/components/esm/loadstat.hpp +++ b/components/esm/loadstat.hpp @@ -21,10 +21,7 @@ struct Static { std::string model; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/loadweap.cpp b/components/esm/loadweap.cpp new file mode 100644 index 0000000000..1910631bcc --- /dev/null +++ b/components/esm/loadweap.cpp @@ -0,0 +1,16 @@ +#include "loadweap.hpp" + +namespace ESM +{ + +void Weapon::load(ESMReader &esm) +{ + model = esm.getHNString("MODL"); + name = esm.getHNOString("FNAM"); + esm.getHNT(data, "WPDT", 32); + script = esm.getHNOString("SCRI"); + icon = esm.getHNOString("ITEX"); + enchant = esm.getHNOString("ENAM"); +} + +} diff --git a/components/esm/loadweap.hpp b/components/esm/loadweap.hpp index e6a848a59f..8bd3b147cf 100644 --- a/components/esm/loadweap.hpp +++ b/components/esm/loadweap.hpp @@ -3,7 +3,8 @@ #include "esm_reader.hpp" -namespace ESM { +namespace ESM +{ /* * Weapon definition @@ -11,58 +12,50 @@ namespace ESM { struct Weapon { - enum Type + enum Type { - ShortBladeOneHand = 0, - LongBladeOneHand = 1, - LongBladeTwoHand = 2, - BluntOneHand = 3, - BluntTwoClose = 4, - BluntTwoWide = 5, - SpearTwoWide = 6, - AxeOneHand = 7, - AxeTwoHand = 8, - MarksmanBow = 9, - MarksmanCrossbow = 10, - MarksmanThrown = 11, - Arrow = 12, - Bolt = 13 + ShortBladeOneHand = 0, + LongBladeOneHand = 1, + LongBladeTwoHand = 2, + BluntOneHand = 3, + BluntTwoClose = 4, + BluntTwoWide = 5, + SpearTwoWide = 6, + AxeOneHand = 7, + AxeTwoHand = 8, + MarksmanBow = 9, + MarksmanCrossbow = 10, + MarksmanThrown = 11, + Arrow = 12, + Bolt = 13 }; - enum Flags + enum Flags { - Magical = 0x01, - Silver = 0x02 + Magical = 0x01, + Silver = 0x02 }; #pragma pack(push) #pragma pack(1) - struct WPDTstruct - { - float weight; - int value; - short type; - short health; - float speed, reach; - short enchant; // Enchantment points - unsigned char chop[2], slash[2], thrust[2]; // Min and max - int flags; - }; // 32 bytes + struct WPDTstruct + { + float weight; + int value; + short type; + short health; + float speed, reach; + short enchant; // Enchantment points + unsigned char chop[2], slash[2], thrust[2]; // Min and max + int flags; + }; // 32 bytes #pragma pack(pop) - WPDTstruct data; + WPDTstruct data; - std::string name, model, icon, enchant, script; + std::string name, model, icon, enchant, script; - void load(ESMReader &esm) - { - model = esm.getHNString("MODL"); - name = esm.getHNOString("FNAM"); - esm.getHNT(data, "WPDT", 32); - script = esm.getHNOString("SCRI"); - icon = esm.getHNOString("ITEX"); - enchant = esm.getHNOString("ENAM"); - } + void load(ESMReader &esm); }; } #endif diff --git a/components/esm/skill.cpp b/components/esm/skill.cpp deleted file mode 100644 index 05c8c103ac..0000000000 --- a/components/esm/skill.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "loadskil.hpp" - -namespace ESM -{ - const std::string Skill::sSkillNameIds[Length] = { - "sSkillBlock", - "sSkillArmorer", - "sSkillMediumarmor", - "sSkillHeavyarmor", - "sSkillBluntweapon", - "sSkillLongblade", - "sSkillAxe", - "sSkillSpear", - "sSkillAthletics", - "sSkillEnchant", - "sSkillDestruction", - "sSkillAlteration", - "sSkillIllusion", - "sSkillConjuration", - "sSkillMysticism", - "sSkillRestoration", - "sSkillAlchemy", - "sSkillUnarmored", - "sSkillSecurity", - "sSkillSneak", - "sSkillAcrobatics", - "sSkillLightarmor", - "sSkillShortblade", - "sSkillMarksman", - "sSkillMercantile", - "sSkillSpeechcraft", - "sSkillHandtohand", - }; - const boost::array Skill::skillIds = {{ - Block, - Armorer, - MediumArmor, - HeavyArmor, - BluntWeapon, - LongBlade, - Axe, - Spear, - Athletics, - Enchant, - Destruction, - Alteration, - Illusion, - Conjuration, - Mysticism, - Restoration, - Alchemy, - Unarmored, - Security, - Sneak, - Acrobatics, - LightArmor, - ShortBlade, - Marksman, - Mercantile, - Speechcraft, - HandToHand - }}; -} From 38c69f68c628ad7b0bab9e180521ff8f4de82310 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 29 Mar 2011 13:57:56 +0200 Subject: [PATCH 021/111] allow multiple --master and --plugin command line arguments --- apps/openmw/main.cpp | 49 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 4d7e6595cc..697b06e93c 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -47,8 +47,14 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine) "set resources directory") ("start", bpo::value()->default_value ("Beshara"), "set initial cell") - ("master", bpo::value()->default_value ("Morrowind"), - "master file") + ("master", bpo::value >() + ->default_value (std::vector(), "") + ->multitoken(), + "master file(s)") + ("plugin", bpo::value >() + ->default_value (std::vector(), "") + ->multitoken(), + "plugin file(s)") ( "showfps", "show fps counter") ( "debug", "debug mode" ) ( "nosound", "disable all sound" ) @@ -83,26 +89,51 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine) return false; } + // directory settings engine.setDataDir (variables["data"].as()); engine.setResourceDir (variables["resources"].as()); - engine.setCell (variables["start"].as()); - engine.addMaster (variables["master"].as()); - if (variables.count ("showfps")) + // master and plugin + std::vector master = variables["master"].as >(); + if (master.empty()) + { + std::cout << "No master file given. Assuming Morrowind.esm" << std::endl; + master.push_back ("Morrowind"); + } + + if (master.size()>1) + { + std::cout + << "Ignoring all but the first master file (multiple master files not yet supported)." + << std::endl; + } + + engine.addMaster (master[0]); + + std::vector plugin = variables["plugin"].as >(); + + if (!plugin.empty()) + std::cout << "Ignoring plugin files (plugins not yet supported)." << std::endl; + + // startup-settings + engine.setCell (variables["start"].as()); + + if (variables.count ("new-game")) + engine.setNewGame(); + + // other settings + if (variables.count ("fps")) engine.showFPS(); if (variables.count ("debug")) engine.enableDebugMode(); - if (variables.count ("nosound")) + if (variables.count ("no-sound")) engine.disableSound(); if (variables.count ("script-verbose")) engine.enableVerboseScripts(); - if (variables.count ("new-game")) - engine.setNewGame(); - if (variables.count ("script-all")) engine.setCompileAll (true); From 6dba09462adda0e2ac7754d0cb3eae608b771cd8 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 21 Apr 2011 18:10:35 +0200 Subject: [PATCH 022/111] change in multi_es branch broke fps switch; fixed now --- apps/openmw/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 697b06e93c..059bf39f75 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -55,7 +55,7 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine) ->default_value (std::vector(), "") ->multitoken(), "plugin file(s)") - ( "showfps", "show fps counter") + ( "fps", "show fps counter") ( "debug", "debug mode" ) ( "nosound", "disable all sound" ) ( "script-verbose", "verbose script output" ) From d481222d92db18b37c5905a9a6ae7e9c607727c9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 21 Apr 2011 18:23:46 +0200 Subject: [PATCH 023/111] all program options (except help) can now be used from a cfg file --- apps/openmw/main.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 059bf39f75..f6f0235920 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -55,12 +55,20 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine) ->default_value (std::vector(), "") ->multitoken(), "plugin file(s)") - ( "fps", "show fps counter") - ( "debug", "debug mode" ) - ( "nosound", "disable all sound" ) - ( "script-verbose", "verbose script output" ) - ( "new-game", "activate char gen/new game mechanics" ) - ( "script-all", "compile all scripts (excluding dialogue scripts) at startup") + ( "fps", boost::program_options::value()-> + implicit_value (true)->default_value (false), "show fps counter") + ( "debug", boost::program_options::value()-> + implicit_value (true)->default_value (false), "debug mode" ) + ( "nosound", boost::program_options::value()-> + implicit_value (true)->default_value (false), "disable all sound" ) + ( "script-verbose", boost::program_options::value()-> + implicit_value (true)->default_value (false), "verbose script output" ) + ( "new-game", boost::program_options::value()-> + implicit_value (true)->default_value (false), + "activate char gen/new game mechanics" ) + ( "script-all", boost::program_options::value()-> + implicit_value (true)->default_value (false), + "compile all scripts (excluding dialogue scripts) at startup") ; bpo::variables_map variables; @@ -118,23 +126,23 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine) // startup-settings engine.setCell (variables["start"].as()); - if (variables.count ("new-game")) + if (variables["new-game"].as()==true) engine.setNewGame(); // other settings - if (variables.count ("fps")) + if (variables["fps"].as()==true) engine.showFPS(); - if (variables.count ("debug")) + if (variables["debug"].as()==true) engine.enableDebugMode(); - if (variables.count ("no-sound")) + if (variables["nosound"].as()==true) engine.disableSound(); - if (variables.count ("script-verbose")) + if (variables["script-verbose"].as()==true) engine.enableVerboseScripts(); - if (variables.count ("script-all")) + if (variables["script-all"].as()==true) engine.setCompileAll (true); return true; From 94f3bc115f1708c2778dce7727af078455fd4139 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 22 Apr 2011 14:18:24 +0200 Subject: [PATCH 024/111] Added missing resource file --- CMakeLists.txt | 6 ++++-- apps/launcher/resources/openmw-icon.png | Bin 0 -> 60039 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 apps/launcher/resources/openmw-icon.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d500d81ef..d6155789a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -340,10 +340,12 @@ if (WIN32) configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.win32 "${OpenMW_BINARY_DIR}/plugins.cfg" COPYONLY) endif (WIN32) -if (LINUX) + +if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.linux "${OpenMW_BINARY_DIR}/plugins.cfg") -endif (LINUX) +endif() + if (APPLE) configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.mac "${APP_BUNDLE_DIR}/Contents/MacOS/plugins.cfg") diff --git a/apps/launcher/resources/openmw-icon.png b/apps/launcher/resources/openmw-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5393821f378970c6ca73788b9141161c9cff09 GIT binary patch literal 60039 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 p@Ja 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 literal 0 HcmV?d00001 From 8f679218bd25b5bcfd363532e0d69fe51182519c Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 23 Apr 2011 04:34:58 +0200 Subject: [PATCH 025/111] Added stylesheet implementation for the Play tab --- apps/launcher/maindialog.cpp | 59 ++++--- apps/launcher/playpage.cpp | 156 +++++++++++++++--- apps/launcher/resources.qrc | 12 +- .../launcher/resources/{ => images}/clear.png | Bin apps/launcher/resources/images/down.png | Bin 0 -> 2899 bytes .../resources/images/openmw-header.png | Bin 0 -> 45163 bytes .../resources/{ => images}/openmw-icon.png | Bin .../{ => images}/openmw-plugin-icon.png | Bin .../resources/{ => images}/openmw_icon.ico | Bin .../resources/images/playpage-background.png | Bin 0 -> 238482 bytes apps/launcher/resources/launcher.qss | 119 +++++++++++++ apps/launcher/resources/openmw-header.png | Bin 108088 -> 0 bytes 12 files changed, 293 insertions(+), 53 deletions(-) rename apps/launcher/resources/{ => images}/clear.png (100%) create mode 100644 apps/launcher/resources/images/down.png create mode 100644 apps/launcher/resources/images/openmw-header.png rename apps/launcher/resources/{ => images}/openmw-icon.png (100%) rename apps/launcher/resources/{ => images}/openmw-plugin-icon.png (100%) rename apps/launcher/resources/{ => images}/openmw_icon.ico (100%) create mode 100644 apps/launcher/resources/images/playpage-background.png create mode 100644 apps/launcher/resources/launcher.qss delete mode 100644 apps/launcher/resources/openmw-header.png diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 1bb8f1d592..840337ae8c 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -6,22 +6,31 @@ #include "datafilespage.hpp" MainDialog::MainDialog() -{ +{ + // TODO: Should be an install path + QFile file("apps/launcher/resources/launcher.qss"); + + file.open(QFile::ReadOnly); + QString styleSheet = QLatin1String(file.readAll()); + qDebug() << styleSheet; + setStyleSheet(styleSheet); + mIconWidget = new QListWidget; mIconWidget->setViewMode(QListView::IconMode); mIconWidget->setWrapping(false); - - mIconWidget->setStyleSheet("QListWidget { background-image: url(background.png); background-color: white; background-repeat: no-repeat; background-attachment: scroll; background-position: right; } QListWidgetItem { alignment: center; }"); + mIconWidget->setObjectName("IconWidget"); + qDebug() << mIconWidget->objectName(); + mIconWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Just to be sure - + //mIconWidget->setItemDelegate(new ListViewDelegate()); mIconWidget->setAttribute(Qt::WA_MacShowFocusRect); // Show a focus frame around the icons on Mac //mIconWidget->setLayoutMode(QListView::SinglePass); mIconWidget->setUniformItemSizes(true); - + mIconWidget->setIconSize(QSize(48, 48)); mIconWidget->setMovement(QListView::Static); - + mIconWidget->setMinimumWidth(400); mIconWidget->setFixedHeight(80); mIconWidget->setSpacing(4); @@ -31,28 +40,28 @@ MainDialog::MainDialog() QGroupBox *groupBox = new QGroupBox(this); QVBoxLayout *groupLayout = new QVBoxLayout(groupBox); - + // TODO: TESTING - + /*mProfileModel = new QStringListModel(); QStringList profileList; profileList << "Default" << "Warrior" << "Redemption" << "Cool stuff bro!"; mProfileModel->setStringList(profileList); */ - + // Various pages mPlayPage = new PlayPage(this); //mPlayPage->mProfileModel->setStringList(profileList); - + mDataFilesPage = new DataFilesPage(this); //mDataFilesPage->mProfileComboBox->setModel(mProfileModel); - + mPagesWidget = new QStackedWidget(groupBox); mPagesWidget->addWidget(mPlayPage); mPagesWidget->addWidget(new PlayPage); mPagesWidget->addWidget(mDataFilesPage); //mPagesWidget->addWidget(new QueryPage); - + groupLayout->addWidget(mPagesWidget); QPushButton *playButton = new QPushButton(tr("Play")); @@ -60,36 +69,36 @@ MainDialog::MainDialog() QDialogButtonBox *buttonBox = new QDialogButtonBox(this); buttonBox->setStandardButtons(QDialogButtonBox::Close); buttonBox->addButton(playButton, QDialogButtonBox::ActionRole); - + //QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - + QVBoxLayout *dialogLayout = new QVBoxLayout(this); dialogLayout->addWidget(mIconWidget); //dialogLayout->addItem(vSpacer1); dialogLayout->addWidget(groupBox); - + dialogLayout->addWidget(buttonBox); //mainLayout->addStretch(1); //mainLayout->addSpacing(12); setWindowTitle(tr("OpenMW Launcher")); setMinimumSize(QSize(550, 450)); - + createIcons(); } void MainDialog::createIcons() { //QSize itemSize(80, 66); - + QListWidgetItem *configButton = new QListWidgetItem(mIconWidget); - configButton->setIcon(QIcon(":resources/openmw-icon.png")); + configButton->setIcon(QIcon(":/images/openmw-icon.png")); configButton->setText(tr("Play")); configButton->setTextAlignment(Qt::AlignCenter); configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); //configButton->setSizeHint(itemSize); - + QListWidgetItem *updateButton = new QListWidgetItem(mIconWidget); updateButton->setIcon(QIcon::fromTheme("video-display")); updateButton->setText(tr("Graphics")); @@ -97,15 +106,15 @@ void MainDialog::createIcons() updateButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); //updateButton->setSizeHint(itemSize); - + QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); - queryButton->setIcon(QIcon(":resources/openmw-plugin-icon.png")); + queryButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); queryButton->setText(tr("Data Files")); queryButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); //queryButton->setSizeHint(itemSize); - + connect(mIconWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); @@ -117,17 +126,17 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) current = previous; mPagesWidget->setCurrentIndex(mIconWidget->row(current)); - + if (previous) { QString previousPage = previous->data(Qt::DisplayRole).toString(); QString currentPage = current->data(Qt::DisplayRole).toString(); - + // The user switched from Data Files to Play if (previousPage == QString("Data Files") && currentPage == QString("Play")) { mPlayPage->mProfileModel->setStringList(mDataFilesPage->mProfileModel->stringList()); mPlayPage->mProfileComboBox->setCurrentIndex(mDataFilesPage->mProfileComboBox->currentIndex()); } - + // The user switched from Play to Data Files if (previousPage == QString("Play") && currentPage == QString("Data Files")) { mDataFilesPage->mProfileComboBox->setCurrentIndex(mPlayPage->mProfileComboBox->currentIndex()); diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 18360ffc6e..d48006b89c 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -4,30 +4,140 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) { - QPushButton *playButton = new QPushButton(tr("Play")); - playButton->setMinimumSize(QSize(150, 50)); - - // TEST + + QGroupBox *playBox = new QGroupBox(this); + playBox->setObjectName("PlayBox"); + playBox->setFixedSize(QSize(425, 375)); + playBox->setFlat(true); + + QVBoxLayout *playLayout = new QVBoxLayout(playBox); + + QPushButton *playButton = new QPushButton(tr("Play"), playBox); + playButton->setObjectName("PlayButton"); + //playButton->setMinimumSize(QSize(150, 50)); + + QLabel *profileLabel = new QLabel(tr("Current Profile:"), playBox); + profileLabel->setObjectName("ProfileLabel"); + + // TODO: Cleanup mProfileModel = new QStringListModel(); - QStringList profileList; - profileList << "Other" << "Bla" << "No" << "SEGFAULT!"; - mProfileModel->setStringList(profileList); - - mProfileComboBox = new QComboBox(this); + + mProfileComboBox = new QComboBox(playBox); + mProfileComboBox->setObjectName("ProfileComboBox"); //mProfileComboBox->setMinimumWidth(200); mProfileComboBox->setModel(mProfileModel); - - QHBoxLayout *buttonLayout = new QHBoxLayout(); - QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - QSpacerItem *hSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - buttonLayout->addItem(hSpacer1); - buttonLayout->addWidget(playButton); - buttonLayout->addItem(hSpacer2); - - QVBoxLayout *pageLayout = new QVBoxLayout(this); - - pageLayout->addLayout(buttonLayout); - pageLayout->addWidget(mProfileComboBox); - -} \ No newline at end of file + + QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + QSpacerItem *vSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + + playLayout->addItem(vSpacer1); + playLayout->addWidget(playButton); + playLayout->addWidget(profileLabel); + playLayout->addWidget(mProfileComboBox); + playLayout->addItem(vSpacer2); + + QHBoxLayout *pageLayout = new QHBoxLayout(this); + QSpacerItem *hSpacer1 = new QSpacerItem(54, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); + QSpacerItem *hSpacer2 = new QSpacerItem(54, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); + + pageLayout->addItem(hSpacer1); + pageLayout->addWidget(playBox); + pageLayout->addItem(hSpacer2); + +} +// verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); +// listWidget = new QListWidget(Dialog); +// listWidget->setObjectName(QString::fromUtf8("listWidget")); +// listWidget->setMaximumSize(QSize(16777215, 100)); +// +// verticalLayout_2->addWidget(listWidget); +// +// groupBox = new QGroupBox(Dialog); +// groupBox->setObjectName(QString::fromUtf8("groupBox")); +// gridLayout_2 = new QGridLayout(groupBox); +// gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); +// verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); +// +// gridLayout_2->addItem(verticalSpacer_2, 0, 1, 1, 1); +// +// horizontalSpacer_4 = new QSpacerItem(54, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); +// +// gridLayout_2->addItem(horizontalSpacer_4, 1, 0, 1, 1); +// +// horizontalSpacer_3 = new QSpacerItem(53, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); +// +// gridLayout_2->addItem(horizontalSpacer_3, 1, 2, 1, 1); +// +// verticalSpacer_3 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); +// +// gridLayout_2->addItem(verticalSpacer_3, 2, 1, 1, 1); +// +// groupBox_2 = new QGroupBox(groupBox); +// groupBox_2->setObjectName(QString::fromUtf8("groupBox_2")); +// groupBox_2->setMinimumSize(QSize(404, 383)); +// groupBox_2->setMaximumSize(QSize(404, 383)); +// +// groupBox_2->setFlat(true); +// verticalLayout = new QVBoxLayout(groupBox_2); +// verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); +// gridLayout = new QGridLayout(); +// gridLayout->setObjectName(QString::fromUtf8("gridLayout")); +// label = new QLabel(groupBox_2); +// label->setObjectName(QString::fromUtf8("label")); +// label->setStyleSheet(QString::fromUtf8("")); +// +// gridLayout->addWidget(label, 2, 1, 1, 1); +// +// comboBox = new QComboBox(groupBox_2); +// comboBox->setObjectName(QString::fromUtf8("comboBox")); +// comboBox->setMinimumSize(QSize(200, 0)); +// comboBox->setStyleSheet(QString::fromUtf8("")); +// +// gridLayout->addWidget(comboBox, 3, 1, 1, 1); +// +// horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); +// +// gridLayout->addItem(horizontalSpacer, 2, 2, 1, 1); +// +// horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); +// +// gridLayout->addItem(horizontalSpacer_2, 2, 0, 1, 1); +// +// verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Minimum); +// +// gridLayout->addItem(verticalSpacer, 1, 1, 1, 1); +// +// verticalSpacer_4 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); +// +// gridLayout->addItem(verticalSpacer_4, 4, 1, 1, 1); +// +// pushButton = new QPushButton(groupBox_2); +// pushButton->setObjectName(QString::fromUtf8("pushButton")); +// pushButton->setMinimumSize(QSize(200, 50)); +// pushButton->setMaximumSize(QSize(16777215, 16777215)); +// pushButton->setAutoFillBackground(false); +// pushButton->setStyleSheet(QString::fromUtf8("")); +// pushButton->setIconSize(QSize(32, 32)); +// pushButton->setAutoRepeat(false); +// pushButton->setFlat(false); +// +// gridLayout->addWidget(pushButton, 0, 1, 1, 1); +// +// +// verticalLayout->addLayout(gridLayout); +// +// +// gridLayout_2->addWidget(groupBox_2, 1, 1, 1, 1); +// +// +// verticalLayout_2->addWidget(groupBox); +// +// buttonBox = new QDialogButtonBox(Dialog); +// buttonBox->setObjectName(QString::fromUtf8("buttonBox")); +// buttonBox->setOrientation(Qt::Horizontal); +// buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); +// +// verticalLayout_2->addWidget(buttonBox); +// +// diff --git a/apps/launcher/resources.qrc b/apps/launcher/resources.qrc index 9a36dfd36d..d1c4513932 100644 --- a/apps/launcher/resources.qrc +++ b/apps/launcher/resources.qrc @@ -1,8 +1,10 @@ - - resources/clear.png - resources/openmw-icon.png - resources/openmw-plugin-icon.png - resources/openmw-header.png + + resources/images/clear.png + resources/images/down.png + resources/images/openmw-icon.png + resources/images/openmw-plugin-icon.png + resources/images/openmw-header.png + resources/images/playpage-background.png diff --git a/apps/launcher/resources/clear.png b/apps/launcher/resources/images/clear.png similarity index 100% rename from apps/launcher/resources/clear.png rename to apps/launcher/resources/images/clear.png diff --git a/apps/launcher/resources/images/down.png b/apps/launcher/resources/images/down.png new file mode 100644 index 0000000000000000000000000000000000000000..f529cda7deee4550767a305101b97cea8a4e8676 GIT binary patch literal 2899 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

f8@q%9Y%{e3dEe5KuuYGX{P+Sv; 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 literal 0 HcmV?d00001 diff --git a/apps/launcher/resources/openmw-icon.png b/apps/launcher/resources/images/openmw-icon.png similarity index 100% rename from apps/launcher/resources/openmw-icon.png rename to apps/launcher/resources/images/openmw-icon.png diff --git a/apps/launcher/resources/openmw-plugin-icon.png b/apps/launcher/resources/images/openmw-plugin-icon.png similarity index 100% rename from apps/launcher/resources/openmw-plugin-icon.png rename to apps/launcher/resources/images/openmw-plugin-icon.png diff --git a/apps/launcher/resources/openmw_icon.ico b/apps/launcher/resources/images/openmw_icon.ico similarity index 100% rename from apps/launcher/resources/openmw_icon.ico rename to apps/launcher/resources/images/openmw_icon.ico diff --git a/apps/launcher/resources/images/playpage-background.png b/apps/launcher/resources/images/playpage-background.png new file mode 100644 index 0000000000000000000000000000000000000000..7eb84b6a73711ae51b200b4029bb9428e1babf49 GIT binary patch literal 238482 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�egcuBgpa$7)Bmd;YraDV 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

)sWmk+bA#1>WVUC3{?$|a%jDe9}>S*A& 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

Ty_~sA~&{^k>%aw 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

Y^b_|~sG||`!B{8+*chQG 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%0D-18+=;LewB8Rmp5Ez+0MD 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 Uyj>3YKL7v#07*qoM6N<$f&jA$5dZ)H From a747bfb57583f3f59dcb1c4613c9d7b1f5f431c7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 21:36:54 +0200 Subject: [PATCH 026/111] Moved the stylesheet to the Play page --- apps/launcher/maindialog.cpp | 4 ++-- apps/launcher/playpage.cpp | 7 +++++++ apps/launcher/resources/launcher.qss | 24 +++++++++++------------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 840337ae8c..c338b7ef50 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -7,13 +7,13 @@ MainDialog::MainDialog() { - // TODO: Should be an install path + /* TODO: Should be an install path QFile file("apps/launcher/resources/launcher.qss"); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); qDebug() << styleSheet; - setStyleSheet(styleSheet); + setStyleSheet(styleSheet);*/ mIconWidget = new QListWidget; mIconWidget->setViewMode(QListView::IconMode); diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index d48006b89c..451ecbb173 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -4,6 +4,13 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) { + // TODO: Should be an install path + QFile file("apps/launcher/resources/launcher.qss"); + + file.open(QFile::ReadOnly); + QString styleSheet = QLatin1String(file.readAll()); + qDebug() << styleSheet; + setStyleSheet(styleSheet); QGroupBox *playBox = new QGroupBox(this); playBox->setObjectName("PlayBox"); diff --git a/apps/launcher/resources/launcher.qss b/apps/launcher/resources/launcher.qss index 1fc3861fe4..9f127c4652 100644 --- a/apps/launcher/resources/launcher.qss +++ b/apps/launcher/resources/launcher.qss @@ -1,4 +1,4 @@ -QGroupBox#PlayBox { +QGroupBox { background-image: url(":/images/playpage-background.png"); background-repeat: no-repeat; background-position: top; @@ -8,13 +8,12 @@ QGroupBox#PlayBox { padding-bottom: 100px; } -QPushButton#PlayButton { +QPushButton { width: 200px; max-width: 200px; height: 50px; - margin-left: 90%; margin-bottom: 30px; background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, @@ -36,7 +35,7 @@ QPushButton#PlayButton { border-radius: 5px; } -QPushButton#PlayButton:hover { +QPushButton:hover { border-bottom: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(164, 192, 228, 255), stop:1 rgba(255, 255, 255, 0)); border-top: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(164, 192, 228, 255), stop:1 rgba(255, 255, 255, 0)); border-right: qlineargradient(spread:pad, x1:1, y1:0, x2:0, y2:0, stop:0 rgba(164, 192, 228, 255), stop:1 rgba(255, 255, 255, 0)); @@ -45,24 +44,23 @@ QPushButton#PlayButton:hover { border-style: solid; } -QPushButton#PlayButton:pressed { +QPushButton:pressed { } -QLabel#ProfileLabel +QLabel { margin-left: 90%; font: 14pt "Gauntlet Classic"; } -QComboBox#ProfileComboBox +QComboBox { width: 180px; max-width: 200px; height: 20px; - margin-left: 90%; padding: 1px 18px 1px 3px; background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 gray, stop:0.2 white, stop:1 rgba(255, 255, 255, 55)); @@ -80,12 +78,12 @@ QComboBox:!editable:on, QComboBox::drop-down:editable:on { }*/ -QComboBox#ProfileComboBox:on { /* shift the text when the popup opens */ +QComboBox { /* shift the text when the popup opens */ padding-top: 3px; padding-left: 4px; } -QComboBox#ProfileComboBox::drop-down { +QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; @@ -97,16 +95,16 @@ QComboBox#ProfileComboBox::drop-down { border-bottom-right-radius: 3px; } -QComboBox#ProfileComboBox::down-arrow { +QComboBox::down-arrow { image: url(":/images/down.png"); } -QComboBox#ProfileComboBox::down-arrow:on { /* shift the arrow when popup is open */ +QComboBox::down-arrow:on { /* shift the arrow when popup is open */ top: 1px; left: 1px; } -QListWidget#IconWidget { +QListWidget { background-image: url(":/images/openmw-header.png"); background-color: white; background-repeat: no-repeat; From c17eed26f31f66ebb9f16abc87417fa60dd586ee Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 21:42:56 +0200 Subject: [PATCH 027/111] Removed whitespace --- apps/launcher/datafilesdialog.cpp | 154 +++++++++++++++--------------- apps/launcher/datafilespage.cpp | 128 ++++++++++++------------- apps/launcher/datafilespage.hpp | 8 +- apps/launcher/graphicspage.cpp | 2 +- apps/launcher/graphicspage.hpp | 2 +- apps/launcher/maindialog.hpp | 4 +- apps/launcher/playpage.hpp | 4 +- apps/launcher/settingsdialog.cpp | 136 +++++++++++++------------- 8 files changed, 219 insertions(+), 219 deletions(-) diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp index a0835f1e96..391eb28fe1 100644 --- a/apps/launcher/datafilesdialog.cpp +++ b/apps/launcher/datafilesdialog.cpp @@ -14,26 +14,26 @@ DataFilesDialog::DataFilesDialog() /* listtest QTableWidget *pluginlist = new QTableWidget(this); - + pluginlist->horizontalHeader()->setStretchLastSection(true); pluginlist->insertColumn(0); - + for (unsigned int i=0; i<6; ++i) { pluginlist->insertRow(i); QTableWidgetItem *item = new QTableWidgetItem(QString("Plugin %0").arg(i)); item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); pluginlist->setItem(i, 0, item); } - + pluginlist->insertRow(6); pluginlist->setSelectionMode(QAbstractItemView::SingleSelection); // single item can be draged or droped pluginlist->setDragEnabled(true); pluginlist->setDragDropMode(QAbstractItemView::InternalMove); pluginlist->viewport()->setAcceptDrops(true); - + pluginlist->setDropIndicatorShown(true); */ - + splitter->setOrientation(Qt::Vertical); splitter->addWidget(tree); splitter->addWidget(mastertable); @@ -43,7 +43,7 @@ DataFilesDialog::DataFilesDialog() QList sizelist; sizelist << 100 << 200 << 400; splitter->setSizes(sizelist); - + QVBoxLayout *dialogLayout = new QVBoxLayout(this); dialogLayout->addWidget(splitter); //dialogLayout->addWidget(plugintable); @@ -57,55 +57,55 @@ DataFilesDialog::DataFilesDialog() QStringList acceptedfiles = (QStringList() << "*.esp"); QStringList files; - + datafilesdir.setNameFilters(acceptedfiles); files = datafilesdir.entryList(); - + //foreach (const QString ¤tfile, datafiles) { for (int i=0; isetFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); - + QList foundmasters = mastersmodel->findItems(currentmaster); - + if (foundmasters.isEmpty()) { // Current master is not found in the master, add it mastersmodel->appendRow(item); } } - + // Add the masters to datafilesmodel QStandardItem *item = new QStandardItem(masters.join(",")); item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); QStandardItem *child = new QStandardItem(currentfile); child->setFlags(child->flags() & ~(Qt::ItemIsDropEnabled)); - + QList masteritems = datafilesmodel->findItems(masters.join(",")); - - + + if (masteritems.isEmpty()) { item->appendRow(child); datafilesmodel->appendRow(item); - } else { + } else { foreach (QStandardItem *currentitem, masteritems) { currentitem->setFlags(currentitem->flags() & ~(Qt::ItemIsDropEnabled)); currentitem->appendRow(child); @@ -132,17 +132,17 @@ DataFilesDialog::DataFilesDialog() pluginsmodel = new QStandardItemModel(0, 1); pluginsmodel->setSupportedDragActions(Qt::MoveAction); pluginsmodel->invisibleRootItem()->setFlags(Qt::ItemIsDropEnabled); - - + + masterselectmodel = new QItemSelectionModel(mastersmodel); pluginselectmodel = new QItemSelectionModel(pluginsmodel); - + tree->setModel(datafilesmodel); tree->header()->hide(); - + mastertable->setModel(mastersmodel); mastertable->setSelectionModel(masterselectmodel); - + mastertable->setSelectionBehavior(QAbstractItemView::SelectRows); mastertable->setSelectionMode(QAbstractItemView::MultiSelection); mastertable->setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -156,13 +156,13 @@ DataFilesDialog::DataFilesDialog() plugintable->setEditTriggers(QAbstractItemView::NoEditTriggers); plugintable->horizontalHeader()->setStretchLastSection(true); plugintable->horizontalHeader()->hide(); - + plugintable->setDragEnabled(true); plugintable->setDragDropMode(QAbstractItemView::InternalMove); plugintable->setDropIndicatorShown(true); plugintable->setDragDropOverwriteMode(false); plugintable->viewport()->setAcceptDrops(true); - + plugintable->setContextMenuPolicy(Qt::CustomContextMenu); @@ -170,7 +170,7 @@ DataFilesDialog::DataFilesDialog() connect(plugintable, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); connect(plugintable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(pluginsmodel, SIGNAL(rowsAboutToBeMoved(const QModelIndex&, int, int, const QModelIndex&, int)), this, SLOT(test())); - + // Adjust the dialog width setMinimumWidth(500); } @@ -179,13 +179,13 @@ void DataFilesDialog::test() { qDebug() << "Breaky Breaky!"; /*QModelIndexList deselectedindexes = deselected.indexes(); - + if (!deselectedindexes.isEmpty()) { foreach (const QModelIndex ¤tindex, deselectedindexes) { qDebug() << "Data is: " << currentindex.data(); qDebug() << "Row is: "<< currentindex.row(); QList itemlist = pluginsmodel->findItems(QVariant(currentindex.data()).toString()); - + if (!itemlist.isEmpty()) { foreach (const QStandardItem *currentitem, itemlist) { @@ -201,14 +201,14 @@ void DataFilesDialog::appendPlugins(const QModelIndex &masterindex) // Find the plugins in the datafilesmodel and append them to the pluginsmodel if (!masterindex.isValid()) return; - + for (int r=0; rrowCount(masterindex); ++r ) { QModelIndex childindex = masterindex.child(r, 0); - + if (childindex.isValid()) { // Now we see if the pluginsmodel already contains this plugin QList itemlist = pluginsmodel->findItems(QVariant(datafilesmodel->data(childindex)).toString()); - + if (itemlist.isEmpty()) { // Plugin not yet in the pluginsmodel, add it @@ -218,22 +218,22 @@ void DataFilesDialog::appendPlugins(const QModelIndex &masterindex) pluginsmodel->appendRow(item); } } - + } - + } void DataFilesDialog::removePlugins(const QModelIndex &masterindex) { - + if (!masterindex.isValid()) return; - + for (int r=0; rrowCount(masterindex); ++r) { QModelIndex childindex = masterindex.child(r, 0); QList itemlist = pluginsmodel->findItems(QVariant(childindex.data()).toString()); - + if (!itemlist.isEmpty()) { foreach (const QStandardItem *currentitem, itemlist) { qDebug() << "Remove plugin:" << currentitem->data(Qt::DisplayRole).toString(); @@ -241,32 +241,32 @@ void DataFilesDialog::removePlugins(const QModelIndex &masterindex) } } } - + } void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) -{ +{ if (masterselectmodel->hasSelection()) { // Not exactly necessary to check const QModelIndexList selectedindexes = masterselectmodel->selectedIndexes(); - + QStringList masters; QString masterstr; - + // Create a QStringList containing all the masters foreach (const QModelIndex ¤tindex, selectedindexes) { masters.append(currentindex.data().toString()); } - + masters.sort(); masterstr = masters.join(","); // Make a comma-separated QString - + qDebug() << "Masters" << masterstr; - + // Iterate over all masters in the datafilesmodel to see if they are selected for (int r=0; rrowCount(); ++r) { QModelIndex currentindex = datafilesmodel->index(r, 0); QString master = currentindex.data().toString(); - + if (currentindex.isValid()) { // See if the current master is in the string with selected masters if (masterstr.contains(master)) @@ -277,10 +277,10 @@ void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, con } } } - + // See what plugins to remove QModelIndexList deselectedindexes = deselected.indexes(); - + if (!deselectedindexes.isEmpty()) { foreach (const QModelIndex ¤tindex, deselectedindexes) { @@ -288,15 +288,15 @@ void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, con master.prepend("*"); master.append("*"); QList itemlist = datafilesmodel->findItems(master, Qt::MatchWildcard); - + if (itemlist.isEmpty()) qDebug() << "Empty as shit"; - + foreach (const QStandardItem *currentitem, itemlist) { - + QModelIndex index = currentitem->index(); qDebug() << "Master to remove plugins of:" << index.data().toString(); - + removePlugins(index); } } @@ -306,29 +306,29 @@ void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, con void DataFilesDialog::showContextMenu(const QPoint &point) { qDebug() << "Show me the money!"; - - + + QAction *action1 = new QAction(QIcon::fromTheme("arrow-up-double"), tr("Move to Top"), this); QAction *action2 = new QAction(QIcon::fromTheme("arrow-down-double"), tr("Move to Bottom"), this); QAction *action3 = new QAction(QIcon::fromTheme("arrow-up"), tr("Move Up"), this); QAction *action4 = new QAction(QIcon::fromTheme("arrow-down"), tr("Move Down"), this); QAction *action5 = new QAction(this); - + QModelIndex index = plugintable->indexAt(point); - + if (index.isValid()) { // Should be valid! const QStandardItem *item = pluginsmodel->itemFromIndex(index); - + if (item->checkState() == Qt::Checked) { action5->setText("Uncheck Item"); } else if (item->checkState() == Qt::Unchecked) { action5->setText("Check Item"); } } - + connect(action5, SIGNAL(triggered()), this, SLOT(actionCheckstate())); - + QMenu menu(this); menu.addAction(action1); menu.addAction(action2); @@ -337,7 +337,7 @@ void DataFilesDialog::showContextMenu(const QPoint &point) menu.addAction(action4); menu.addSeparator(); menu.addAction(action5); - + menu.exec(plugintable->viewport()->mapToGlobal(point)); } @@ -345,14 +345,14 @@ void DataFilesDialog::showContextMenu(const QPoint &point) void DataFilesDialog::actionCheckstate() { qDebug() << "actionCheckstate"; - + const QModelIndexList selectedindexes = pluginselectmodel->selectedIndexes(); // Should only be one index selected foreach (const QModelIndex ¤tindex, selectedindexes) { setCheckstate(currentindex); } - + } void DataFilesDialog::setCheckstate(QModelIndex index) @@ -376,16 +376,16 @@ void DataFilesDialog::setCheckstate(QModelIndex index) } void DataFilesDialog::readConfig() -{ +{ /* QString filename; QString path = "data/"; // TODO: Should be global - + QFile file("openmw.cfg"); // Specify filepath later if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "error open"; close(); // File cannot be opened or created TODO: throw error } - + QTextStream in(&file); QStringList datafiles; @@ -393,27 +393,27 @@ void DataFilesDialog::readConfig() // Add each data file read from the config file to a QStringList while (!in.atEnd()) { QString line = in.readLine(); - + if (line.contains("master")) { filename = line.remove("master="); filename.prepend(path); - + datafiles << filename << "\n"; - + } else if (line.contains("plugin")) { filename = line.remove("plugin="); filename.prepend(path); - + datafiles << filename << "\n"; } } file.close(); - + // Check if the files are in the model, set to checked if found foreach(const QString ¤tfile, datafiles) { QModelIndex index = dataFilesModel->index(currentfile, 0); - + if (index.isValid()) { // File is found in model, set it to checked dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); @@ -430,14 +430,14 @@ void DataFilesDialog::writeConfig() //QString sectionname = "[Game Files]"; QString filename; QFileInfo datafile; - + // Sort the items so that master files end up on top foreach (const QString ¤titem, checkeditems) { if(currentitem.endsWith(QString(".esm"), Qt::CaseInsensitive)) { checkeditems.move(checkeditems.indexOf(currentitem), 0); } } - + QFile file("openmw.cfg"); // Specify filepath later if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) close(); // File cannot be opened or created TODO: throw error @@ -453,7 +453,7 @@ void DataFilesDialog::writeConfig() QString line = in.readLine(); //if (!line.contains("GameFile") && line != "[Game Files]") { if (!line.contains("master") && !line.contains("plugin")) { - buffer += line += "\n"; + buffer += line += "\n"; } } @@ -465,16 +465,16 @@ void DataFilesDialog::writeConfig() file.write(buffer); QTextStream out(&file); - + // Write the section name to the config file before we write out the data files //out << sectionname << endl; - + // Write the list of game files to the config for (int i = 0; i < checkeditems.size(); ++i) { //filename = dataFilesModel->fileName(checkeditems.at(i)); filename = checkeditems.at(i); datafile = QFileInfo(filename); - + if (datafile.exists()) { if (filename.endsWith(QString(".esm"), Qt::CaseInsensitive)) { out << "master=" << datafile.fileName() << endl; diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index c3aa6b0d30..e6792e2d6d 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -13,87 +13,87 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) { mDataFilesModel = new QStandardItemModel(); // Contains all plugins with masters mPluginsModel = new QStandardItemModel(); // Contains selectable plugins - + mPluginsSelectModel = new QItemSelectionModel(mPluginsModel); - + //QPushButton *deselectButton = new QPushButton(tr("Deselect All")); QLabel *filterLabel = new QLabel(tr("Filter:"), this); LineEdit *filterLineEdit = new LineEdit(this); - + QHBoxLayout *topLayout = new QHBoxLayout(); QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - + topLayout->addItem(hSpacer1); topLayout->addWidget(filterLabel); topLayout->addWidget(filterLineEdit); - - mMastersWidget = new QTableWidget(this); // Contains the available masters + + mMastersWidget = new QTableWidget(this); // Contains the available masters mPluginsTable = new QTableView(this); - + // Add both tables to a splitter QSplitter *splitter = new QSplitter(this); splitter->setOrientation(Qt::Horizontal); splitter->addWidget(mMastersWidget); - splitter->addWidget(mPluginsTable); - + splitter->addWidget(mPluginsTable); + // Adjust the default widget widths inside the splitter QList sizeList; sizeList << 100 << 300; splitter->setSizes(sizeList); - + // Bottom part with profile options QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); - + // TEST mProfileModel = new QStringListModel(); QStringList profileList; profileList << "Default" << "New" << "Yeah" << "Cool story bro!"; mProfileModel->setStringList(profileList); - + mProfileComboBox = new QComboBox(this); mProfileComboBox->setModel(mProfileModel); mProfileComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfileComboBox->setInsertPolicy(QComboBox::InsertAtBottom); //mProfileComboBox->addItem(QString("New Profile")); - + QToolButton *NewProfileToolButton = new QToolButton(this); NewProfileToolButton->setIcon(QIcon::fromTheme("document-new")); - + QToolButton *CopyProfileToolButton = new QToolButton(this); CopyProfileToolButton->setIcon(QIcon::fromTheme("edit-copy")); - + QToolButton *DeleteProfileToolButton = new QToolButton(this); DeleteProfileToolButton->setIcon(QIcon::fromTheme("document-close")); - + QHBoxLayout *bottomLayout = new QHBoxLayout(); - + bottomLayout->addWidget(profileLabel); bottomLayout->addWidget(mProfileComboBox); bottomLayout->addWidget(NewProfileToolButton); bottomLayout->addWidget(CopyProfileToolButton); bottomLayout->addWidget(DeleteProfileToolButton); - + QVBoxLayout *pageLayout = new QVBoxLayout(this); // Add some space above and below the page items QSpacerItem *vSpacer1 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); QSpacerItem *vSpacer3 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); - + //pageLayout->addItem(vSpacer1); pageLayout->addLayout(topLayout); pageLayout->addItem(vSpacer2); pageLayout->addWidget(splitter); pageLayout->addLayout(bottomLayout); pageLayout->addItem(vSpacer3); - + setupDataFiles(); - + connect(mMastersWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); - + } void DataFilesPage::setupDataFiles() @@ -106,7 +106,7 @@ void DataFilesPage::setupDataFiles() mMastersWidget->horizontalHeader()->hide(); mMastersWidget->verticalHeader()->hide(); mMastersWidget->insertColumn(0); - + mPluginsTable->setModel(mPluginsModel); mPluginsTable->setSelectionModel(mPluginsSelectModel); mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); @@ -115,45 +115,45 @@ void DataFilesPage::setupDataFiles() mPluginsTable->setAlternatingRowColors(true); mPluginsTable->horizontalHeader()->setStretchLastSection(true); mPluginsTable->horizontalHeader()->hide(); - - + + mPluginsTable->setDragEnabled(true); mPluginsTable->setDragDropMode(QAbstractItemView::InternalMove); mPluginsTable->setDropIndicatorShown(true); mPluginsTable->setDragDropOverwriteMode(false); mPluginsTable->viewport()->setAcceptDrops(true); - + mPluginsTable->setContextMenuPolicy(Qt::CustomContextMenu); - + // Some testing TODO TODO TODO - + QDir dataFilesDir("data/"); - + if (!dataFilesDir.exists()) qWarning("Cannot find the plugin directory"); - + dataFilesDir.setNameFilters((QStringList() << "*.esp")); // Only load plugins - + QStringList dataFiles = dataFilesDir.entryList(); - + for (int i=0; i itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); - + if (itemList.isEmpty()) // Master is not yet in the widget { mMastersWidget->insertRow(i); @@ -161,16 +161,16 @@ void DataFilesPage::setupDataFiles() mMastersWidget->setItem(i, 0, item); } } - + availableMasters.sort(); // Sort the masters alphabetically - + // Now we put the currentFile in the mDataFilesModel under its masters QStandardItem *parent = new QStandardItem(availableMasters.join(",")); QStandardItem *child = new QStandardItem(currentFile); - + QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); - - + + if (masterList.isEmpty()) { // Masters node not yet in the mDataFilesModel parent->appendRow(child); mDataFilesModel->appendRow(parent); @@ -187,25 +187,25 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const { if (mMastersWidget->selectionModel()->hasSelection()) { const QModelIndexList selectedIndexes = mMastersWidget->selectionModel()->selectedIndexes(); - + QStringList masters; QString masterstr; - + // Create a QStringList containing all the masters foreach (const QModelIndex &index, selectedIndexes) { masters.append(index.data().toString()); } - + masters.sort(); masterstr = masters.join(","); // Make a comma-separated QString - + qDebug() << "Masters" << masterstr; - + // Iterate over all masters in the datafilesmodel to see if they are selected for (int r=0; rrowCount(); ++r) { QModelIndex currentIndex = mDataFilesModel->index(r, 0); QString master = currentIndex.data().toString(); - + if (currentIndex.isValid()) { // See if the current master is in the string with selected masters if (masterstr.contains(master)) @@ -217,10 +217,10 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const } } } - + // See what plugins to remove QModelIndexList deselectedIndexes = deselected.indexes(); - + if (!deselectedIndexes.isEmpty()) { foreach (const QModelIndex ¤tIndex, deselectedIndexes) { @@ -228,15 +228,15 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const master.prepend("*"); master.append("*"); QList itemList = mDataFilesModel->findItems(master, Qt::MatchWildcard); - + if (itemList.isEmpty()) qDebug() << "Empty as shit"; - + foreach (const QStandardItem *currentItem, itemList) { - + QModelIndex index = currentItem->index(); qDebug() << "Master to remove plugins of:" << index.data().toString(); - + removePlugins(index); } } @@ -248,15 +248,15 @@ void DataFilesPage::addPlugins(const QModelIndex &index) // Find the plugins in the datafilesmodel and append them to the pluginsmodel if (!index.isValid()) return; - + for (int r=0; rrowCount(index); ++r ) { QModelIndex childIndex = index.child(r, 0); const QString childIndexData = QVariant(mDataFilesModel->data(childIndex)).toString(); - + if (childIndex.isValid()) { // Now we see if the pluginsmodel already contains this plugin QList itemList = mPluginsModel->findItems(childIndexData); - + if (itemList.isEmpty()) { // Plugin not yet in the pluginsmodel, add it @@ -267,31 +267,31 @@ void DataFilesPage::addPlugins(const QModelIndex &index) mPluginsModel->appendRow(item); } } - + } - + } void DataFilesPage::removePlugins(const QModelIndex &index) { - + if (!index.isValid()) return; - + for (int r=0; rrowCount(index); ++r) { QModelIndex childIndex = index.child(r, 0); QList itemList = mPluginsModel->findItems(QVariant(childIndex.data()).toString()); - + if (!itemList.isEmpty()) { foreach (const QStandardItem *currentItem, itemList) { qDebug() << "Remove plugin:" << currentItem->data(Qt::DisplayRole).toString(); - + mPluginsModel->removeRow(currentItem->row()); } } } - + } void DataFilesPage::setCheckstate(QModelIndex index) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 689c17ef44..2c2764a678 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -30,16 +30,16 @@ public slots: private: QTableWidget *mMastersWidget; QTableView *mPluginsTable; - + QStandardItemModel *mDataFilesModel; QStandardItemModel *mPluginsModel; - + QItemSelectionModel *mPluginsSelectModel; void setupDataFiles(); void addPlugins(const QModelIndex &index); void removePlugins(const QModelIndex &index); -}; +}; -#endif +#endif diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 8d1c8b69c3..8b13789179 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -1 +1 @@ - + diff --git a/apps/launcher/graphicspage.hpp b/apps/launcher/graphicspage.hpp index 8d1c8b69c3..8b13789179 100644 --- a/apps/launcher/graphicspage.hpp +++ b/apps/launcher/graphicspage.hpp @@ -1 +1 @@ - + diff --git a/apps/launcher/maindialog.hpp b/apps/launcher/maindialog.hpp index c1b7a6a81a..b94727bd44 100644 --- a/apps/launcher/maindialog.hpp +++ b/apps/launcher/maindialog.hpp @@ -19,7 +19,7 @@ public: MainDialog(); //QStringListModel *mProfileModel; - + public slots: void changePage(QListWidgetItem *current, QListWidgetItem *previous); @@ -28,7 +28,7 @@ private: QListWidget *mIconWidget; QStackedWidget *mPagesWidget; - + PlayPage *mPlayPage; DataFilesPage *mDataFilesPage; }; diff --git a/apps/launcher/playpage.hpp b/apps/launcher/playpage.hpp index dcf7c48f37..14689d5d50 100644 --- a/apps/launcher/playpage.hpp +++ b/apps/launcher/playpage.hpp @@ -12,9 +12,9 @@ class PlayPage : public QWidget public: PlayPage(QWidget *parent = 0); - + QComboBox *mProfileComboBox; QStringListModel *mProfileModel; -}; +}; #endif \ No newline at end of file diff --git a/apps/launcher/settingsdialog.cpp b/apps/launcher/settingsdialog.cpp index 100254ce65..cce5715a50 100644 --- a/apps/launcher/settingsdialog.cpp +++ b/apps/launcher/settingsdialog.cpp @@ -3,120 +3,120 @@ #include "settingsdialog.h" SettingsDialog::SettingsDialog() -{ +{ QTabWidget *tabWidget = new QTabWidget(this); QWidget *graphicsTab = new QWidget(); - + // Render group QGroupBox *groupRender = new QGroupBox(tr("Renderer"), graphicsTab); groupRender->setMinimumWidth(450); - + QVBoxLayout *groupRenderLayout = new QVBoxLayout(groupRender); QVBoxLayout *dialogLayout = new QVBoxLayout(this); QVBoxLayout *pageLayout = new QVBoxLayout(graphicsTab); - + QGridLayout *renderLayout = new QGridLayout(); - - QLabel *labelRender = new QLabel(tr("Rendering Subsystem:"), groupRender); + + QLabel *labelRender = new QLabel(tr("Rendering Subsystem:"), groupRender); comboRender = new QComboBox(groupRender); - - QLabel *labelRTT = new QLabel(tr("Preferred RTT Mode:"), groupRender); + + QLabel *labelRTT = new QLabel(tr("Preferred RTT Mode:"), groupRender); comboRTT = new QComboBox(groupRender); - + QLabel *labelAA = new QLabel(tr("Antialiasing:"), groupRender); comboAA = new QComboBox(groupRender); - + renderLayout->addWidget(labelRender, 0, 0, 1, 1); renderLayout->addWidget(comboRender, 0, 1, 1, 1); - + QSpacerItem *vSpacer1 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); renderLayout->addItem(vSpacer1, 1, 1, 1, 1); - + renderLayout->addWidget(labelRTT, 2, 0, 1, 1); renderLayout->addWidget(comboRTT, 2, 1, 1, 1); renderLayout->addWidget(labelAA, 3, 0, 1, 1); renderLayout->addWidget(comboAA, 3, 1, 1, 1); - + QSpacerItem *vSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - + groupRenderLayout->addLayout(renderLayout); groupRenderLayout->addItem(vSpacer2); - + pageLayout->addWidget(groupRender); - + // Display group QGroupBox *groupDisplay = new QGroupBox(tr("Display"), graphicsTab); QVBoxLayout *groupDisplayLayout = new QVBoxLayout(groupDisplay); QGridLayout *displayLayout = new QGridLayout(); - + QLabel *labelResolution = new QLabel(tr("Resolution:"), groupDisplay); comboResolution = new QComboBox(groupDisplay); - + QLabel *labelFrequency = new QLabel(tr("Display Frequency:"), groupDisplay); comboFrequency = new QComboBox(groupDisplay); - + checkVSync = new QCheckBox(tr("Vertical Sync"), groupDisplay); checkGamma = new QCheckBox(tr("sRGB Gamma Conversion"), groupDisplay); checkFullScreen = new QCheckBox(tr("Full Screen"), groupDisplay); - + displayLayout->addWidget(labelResolution, 0, 0, 1, 1); - displayLayout->addWidget(comboResolution, 0, 1, 1, 1); + displayLayout->addWidget(comboResolution, 0, 1, 1, 1); displayLayout->addWidget(labelFrequency, 1, 0, 1, 1); displayLayout->addWidget(comboFrequency, 1, 1, 1, 1); - + QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); displayLayout->addItem(vSpacer3, 2, 1, 1, 1); - + displayLayout->addWidget(checkVSync, 3, 0, 1, 1); displayLayout->addWidget(checkGamma, 3, 1, 1, 1); displayLayout->addWidget(checkFullScreen, 6, 0, 1, 1); - + QSpacerItem *vSpacer4 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - + groupDisplayLayout->addLayout(displayLayout); groupDisplayLayout->addItem(vSpacer4); - + pageLayout->addWidget(groupDisplay); - - + + tabWidget->addTab(graphicsTab, QString(tr("Graphics"))); tabWidget->setCurrentIndex(0); - + dialogLayout->addWidget(tabWidget); - + QDialogButtonBox *buttonBox = new QDialogButtonBox(this); buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); dialogLayout->addWidget(buttonBox); - + setWindowTitle(tr("Settings")); setWindowIcon(QIcon::fromTheme("preferences-other")); - + // Ogre Settings // TODO: Find out a way to do this nice and platform-independent QString filepath = QDir::homePath(); filepath.append("/.config/openmw/ogre.cfg"); - + ogreConfig = new QSettings(filepath, QSettings::IniFormat); - + // Signals and slots connect(comboRender, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(rendererChanged(const QString&))); connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - + // Ogre stuff root = new Ogre::Root("plugins.cfg"); - + // Get the available renderers and put them in the combobox const Ogre::RenderSystemList &renderers = root->getAvailableRenderers(); - + for (Ogre::RenderSystemList::const_iterator r = renderers.begin(); r != renderers.end(); ++r) { - comboRender->addItem((*r)->getName().c_str()); + comboRender->addItem((*r)->getName().c_str()); } - + int index = comboRender->findText(getConfigValue("Render System")); - + if ( index != -1) { comboRender->setCurrentIndex(index); } @@ -126,10 +126,10 @@ SettingsDialog::SettingsDialog() QStringList SettingsDialog::getAvailableOptions(const QString& key) { QStringList result; - + uint row = 0; Ogre::ConfigOptionMap options = mSelectedRenderSystem->getConfigOptions(); - + for (Ogre::ConfigOptionMap::iterator i = options.begin (); i != options.end (); i++, row++) { Ogre::StringVector::iterator opt_it; @@ -137,64 +137,64 @@ QStringList SettingsDialog::getAvailableOptions(const QString& key) for (opt_it = i->second.possibleValues.begin (); opt_it != i->second.possibleValues.end (); opt_it++, idx++) { - + if (strcmp (key.toStdString().c_str(), i->first.c_str()) == 0) result << (*opt_it).c_str(); - } - + } + } - + return result; } void SettingsDialog::rendererChanged(const QString& renderer) -{ +{ // Set the render system to the selected one mSelectedRenderSystem = root->getRenderSystemByName(renderer.toStdString().c_str()); - + comboRTT->addItems(getAvailableOptions("RTT Preferred Mode")); comboAA->addItems(getAvailableOptions("FSAA")); comboResolution->addItems(getAvailableOptions("Video Mode")); comboFrequency->addItems(getAvailableOptions("Display Frequency")); - + // Get the value for the option the config file, find if it's in the combobox. // If it's found, set the current index to that value, otherwise: ignore. - + int index = comboRTT->findText(getConfigValue("RTT Preferred Mode")); if ( index != -1) comboRTT->setCurrentIndex(index); - + index = comboAA->findText(getConfigValue("FSAA")); if ( index != -1) comboAA->setCurrentIndex(index); - + index = comboResolution->findText(getConfigValue("Video Mode")); if ( index != -1) comboResolution->setCurrentIndex(index); - + index = comboFrequency->findText(getConfigValue("Display Frequency")); if ( index != -1) comboFrequency->setCurrentIndex(index); - + // Now we do the same for the checkboxes if (QString::compare(getConfigValue("VSync"), QString("Yes")) == 0) { checkVSync->setCheckState(Qt::Checked); } - + if (QString::compare(getConfigValue("sRGB Gamma Conversion"), QString("Yes")) == 0) { checkGamma->setCheckState(Qt::Checked); } - + if (QString::compare(getConfigValue("Full Screen"), QString("Yes")) == 0) { checkFullScreen->setCheckState(Qt::Checked); } - + } QString SettingsDialog::getConfigValue(const QString& key) { QString result; - + ogreConfig->beginGroup(mSelectedRenderSystem->getName().c_str()); result = ogreConfig->value(key).toString(); ogreConfig->endGroup(); @@ -205,22 +205,22 @@ QString SettingsDialog::getConfigValue(const QString& key) void SettingsDialog::writeConfig() { // Get the values from the GUI elements and write them to the config file - + // Custom write method: We cannot use QSettings because it does not accept spaces QString keyName; QString fileName; QFile file(ogreConfig->fileName()); - + if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) // File could not be opened, TODO error close(); QTextStream out(&file); - + out << "Render System=" << mSelectedRenderSystem->getName().c_str() << endl << endl; - + // add brackets to the renderer's name QString renderer = mSelectedRenderSystem->getName().c_str(); renderer.prepend("["); @@ -229,21 +229,21 @@ void SettingsDialog::writeConfig() out << "Display Frequency=" << comboFrequency->currentText() << endl; out << "FSAA=" << comboAA->currentText() << endl; - + if (checkFullScreen->checkState() == Qt::Checked) { out << "Full Screen=Yes" << endl; } else { out << "Full Screen=No" << endl; } - + out << "RTT Preferred Mode=" << comboRTT->currentText() << endl; - + if (checkVSync->checkState() == Qt::Checked) { out << "VSync=Yes" << endl; } else { out << "VSync=No" << endl; } - + out << "Video Mode=" << comboResolution->currentText() << endl; if (checkGamma->checkState() == Qt::Checked) { @@ -251,9 +251,9 @@ void SettingsDialog::writeConfig() } else { out << "sRGB Gamma Conversion=No" << endl; } - + file.close(); - + close(); // Exit dialog } From de78b81a8fcf2a3ceea921c9b93bb8e941101b24 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 22:05:33 +0200 Subject: [PATCH 028/111] Added a function which returns the checked plugin names --- apps/launcher/datafilespage.cpp | 22 +++++++++++++++++++++- apps/launcher/datafilespage.hpp | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index e6792e2d6d..10c5b71a46 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -241,6 +241,7 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const } } } + } void DataFilesPage::addPlugins(const QModelIndex &index) @@ -251,10 +252,11 @@ void DataFilesPage::addPlugins(const QModelIndex &index) for (int r=0; rrowCount(index); ++r ) { QModelIndex childIndex = index.child(r, 0); - const QString childIndexData = QVariant(mDataFilesModel->data(childIndex)).toString(); if (childIndex.isValid()) { // Now we see if the pluginsmodel already contains this plugin + const QString childIndexData = QVariant(mDataFilesModel->data(childIndex)).toString(); + QList itemList = mPluginsModel->findItems(childIndexData); if (itemList.isEmpty()) @@ -307,8 +309,26 @@ void DataFilesPage::setCheckstate(QModelIndex index) } } +const QStringList DataFilesPage::checkedItems() +{ + QStringList checkedItems; + + for (int r=0; rrowCount(); ++r ) { + QModelIndex index = mPluginsModel->index(r, 0); + + if (index.isValid()) { + // See if the current item is checked + if (mPluginsModel->data(index, Qt::CheckStateRole) == Qt::Checked) { + checkedItems.append(index.data().toString()); + } + } + } + return checkedItems; +} + void DataFilesPage::resizeRows() { // Contents changed mPluginsTable->resizeRowsToContents(); } + diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 2c2764a678..85f9e9405a 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -27,6 +27,8 @@ public slots: void setCheckstate(QModelIndex index); void resizeRows(); + const QStringList checkedItems(); + private: QTableWidget *mMastersWidget; QTableView *mPluginsTable; From 8c4fad1f59c704c130f68f1fbee163d91482c903 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 23:03:21 +0200 Subject: [PATCH 029/111] Added writeConfig in Data Files tab and implemented the close button --- apps/launcher/datafilespage.cpp | 25 +++++++++++++++++++++++++ apps/launcher/datafilespage.hpp | 6 +++--- apps/launcher/maindialog.cpp | 18 +++++++++++++++++- apps/launcher/maindialog.hpp | 3 +++ 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 10c5b71a46..95af780fa4 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -332,3 +332,28 @@ void DataFilesPage::resizeRows() mPluginsTable->resizeRowsToContents(); } + +void DataFilesPage::writeConfig() +{ + // TODO: Testing the config here + QSettings settings("launcher.cfg", QSettings::IniFormat); + + settings.beginGroup("Profiles"); + settings.beginGroup(mProfileComboBox->currentText()); + + // First write all the masters to the config + for (int i = 0; i < mMastersWidget->rowCount(); ++i) { + const QTableWidgetItem *item = mMastersWidget->item(i, 0); + settings.setValue(QString("Master"), item->data(Qt::DisplayRole).toString()); + } + + // Now write all checked plugins + foreach (const QString ¤tPlugin, checkedItems()) + { + settings.setValue(QString("Plugin"), currentPlugin); + } + + settings.endGroup(); + settings.endGroup(); + +} diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 85f9e9405a..01d92e1396 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -22,13 +22,14 @@ public: QComboBox *mProfileComboBox; QStringListModel *mProfileModel; + const QStringList checkedItems(); + void writeConfig(); + public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); - const QStringList checkedItems(); - private: QTableWidget *mMastersWidget; QTableView *mPluginsTable; @@ -41,7 +42,6 @@ private: void setupDataFiles(); void addPlugins(const QModelIndex &index); void removePlugins(const QModelIndex &index); - }; #endif diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index c338b7ef50..536fbe2621 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -68,7 +68,7 @@ MainDialog::MainDialog() QDialogButtonBox *buttonBox = new QDialogButtonBox(this); buttonBox->setStandardButtons(QDialogButtonBox::Close); - buttonBox->addButton(playButton, QDialogButtonBox::ActionRole); + buttonBox->addButton(playButton, QDialogButtonBox::AcceptRole); //QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); @@ -85,6 +85,9 @@ MainDialog::MainDialog() setMinimumSize(QSize(550, 450)); createIcons(); + + connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(play())); } void MainDialog::createIcons() @@ -118,6 +121,7 @@ void MainDialog::createIcons() connect(mIconWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); + } void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) @@ -145,3 +149,15 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) } +void MainDialog::closeEvent(QCloseEvent *event) +{ + qDebug() << "Close event"; + mDataFilesPage->writeConfig(); + event->accept(); + +} + +void MainDialog::play() +{ + +} \ No newline at end of file diff --git a/apps/launcher/maindialog.hpp b/apps/launcher/maindialog.hpp index b94727bd44..520964c37a 100644 --- a/apps/launcher/maindialog.hpp +++ b/apps/launcher/maindialog.hpp @@ -22,9 +22,12 @@ public: public slots: void changePage(QListWidgetItem *current, QListWidgetItem *previous); + void play(); + private: void createIcons(); + void closeEvent(QCloseEvent *event); QListWidget *mIconWidget; QStackedWidget *mPagesWidget; From a321685e7a6213ed1b1f6541c28437908714e3df Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 23:15:55 +0200 Subject: [PATCH 030/111] Modifications to the writeConfig function --- apps/launcher/datafilespage.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 95af780fa4..70127fd88a 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -342,15 +342,17 @@ void DataFilesPage::writeConfig() settings.beginGroup(mProfileComboBox->currentText()); // First write all the masters to the config - for (int i = 0; i < mMastersWidget->rowCount(); ++i) { - const QTableWidgetItem *item = mMastersWidget->item(i, 0); - settings.setValue(QString("Master"), item->data(Qt::DisplayRole).toString()); + for (int r = 0; r < mMastersWidget->rowCount(); ++r) { + const QTableWidgetItem *item = mMastersWidget->item(r, 0); + settings.setValue(QString("Master%1").arg(r), item->data(Qt::DisplayRole).toString()); } // Now write all checked plugins - foreach (const QString ¤tPlugin, checkedItems()) + const QStringList checkedPlugins = checkedItems(); + + for (int i = 0; i < checkedPlugins.size(); ++i) { - settings.setValue(QString("Plugin"), currentPlugin); + settings.setValue(QString("Plugin%1").arg(i), checkedPlugins.at(i)); } settings.endGroup(); From c68a4743bde5503af7e61cb800853288d8d3ec45 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 23:23:04 +0200 Subject: [PATCH 031/111] Added uncheck all function --- apps/launcher/datafilespage.cpp | 23 +++++++++++++++++++---- apps/launcher/datafilespage.hpp | 3 ++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 70127fd88a..b186a3efcf 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -309,7 +309,7 @@ void DataFilesPage::setCheckstate(QModelIndex index) } } -const QStringList DataFilesPage::checkedItems() +const QStringList DataFilesPage::checkedPlugins() { QStringList checkedItems; @@ -326,6 +326,21 @@ const QStringList DataFilesPage::checkedItems() return checkedItems; } +void DataFilesPage::uncheckPlugins() +{ + for (int r=0; rrowCount(); ++r ) { + QModelIndex index = mPluginsModel->index(r, 0); + + if (index.isValid()) { + // See if the current item is checked + if (mPluginsModel->data(index, Qt::CheckStateRole) == Qt::Checked) { + mPluginsModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); + } + } + } +} + + void DataFilesPage::resizeRows() { // Contents changed @@ -348,11 +363,11 @@ void DataFilesPage::writeConfig() } // Now write all checked plugins - const QStringList checkedPlugins = checkedItems(); + const QStringList plugins = checkedPlugins(); - for (int i = 0; i < checkedPlugins.size(); ++i) + for (int i = 0; i < plugins.size(); ++i) { - settings.setValue(QString("Plugin%1").arg(i), checkedPlugins.at(i)); + settings.setValue(QString("Plugin%1").arg(i), plugins.at(i)); } settings.endGroup(); diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 01d92e1396..15ec062110 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -22,7 +22,7 @@ public: QComboBox *mProfileComboBox; QStringListModel *mProfileModel; - const QStringList checkedItems(); + const QStringList checkedPlugins(); void writeConfig(); public slots: @@ -42,6 +42,7 @@ private: void setupDataFiles(); void addPlugins(const QModelIndex &index); void removePlugins(const QModelIndex &index); + void uncheckPlugins(); }; #endif From be47750a45ed2101b010d76a583892aa2054aac4 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 23:29:32 +0200 Subject: [PATCH 032/111] Added combobox slot for changing the profile --- apps/launcher/datafilespage.cpp | 13 ++++++++++++- apps/launcher/datafilespage.hpp | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index b186a3efcf..5cbe2e2b38 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -90,10 +90,15 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) setupDataFiles(); - connect(mMastersWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); + connect(mMastersWidget->selectionModel(), + SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), + this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); + connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); + connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); + } void DataFilesPage::setupDataFiles() @@ -347,6 +352,12 @@ void DataFilesPage::resizeRows() mPluginsTable->resizeRowsToContents(); } +void DataFilesPage::profileChanged(const QString &profile) +{ + qDebug() << "Profile changed"; + uncheckPlugins(); + +} void DataFilesPage::writeConfig() { diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 15ec062110..03c6f84dda 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -29,6 +29,7 @@ public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); + void profileChanged(const QString &profile); private: QTableWidget *mMastersWidget; From c911f62e8b061fec21b30c62991d3dfb9e39a9f6 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 06:08:05 +0200 Subject: [PATCH 033/111] Added ability to get the previous profile when a new one is selected --- apps/launcher/CMakeLists.txt | 2 ++ apps/launcher/datafilespage.cpp | 14 ++++++++------ apps/launcher/datafilespage.hpp | 7 ++++--- apps/launcher/maindialog.cpp | 2 -- apps/launcher/playpage.cpp | 1 - 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 92e8e212bc..43c45142cd 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -9,6 +9,7 @@ set(LAUNCHER lineedit.hpp maindialog.hpp playpage.hpp + combobox.hpp ) SET(MOC_HDRS @@ -16,6 +17,7 @@ SET(MOC_HDRS lineedit.hpp maindialog.hpp playpage.hpp + combobox.hpp ) source_group(apps\\launcher FILES ${ESMTOOL}) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 5cbe2e2b38..cc1f3d7caa 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -51,7 +51,8 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) profileList << "Default" << "New" << "Yeah" << "Cool story bro!"; mProfileModel->setStringList(profileList); - mProfileComboBox = new QComboBox(this); + + mProfileComboBox = new ComboBox(this); mProfileComboBox->setModel(mProfileModel); mProfileComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); @@ -77,7 +78,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) QVBoxLayout *pageLayout = new QVBoxLayout(this); // Add some space above and below the page items - QSpacerItem *vSpacer1 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + //QSpacerItem *vSpacer1 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); QSpacerItem *vSpacer3 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); @@ -97,8 +98,8 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); - connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); - + //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); + connect(mProfileComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); } void DataFilesPage::setupDataFiles() @@ -349,12 +350,13 @@ void DataFilesPage::uncheckPlugins() void DataFilesPage::resizeRows() { // Contents changed + qDebug() << "test"; mPluginsTable->resizeRowsToContents(); } -void DataFilesPage::profileChanged(const QString &profile) +void DataFilesPage::profileChanged(const QString ¤t, const QString &previous) { - qDebug() << "Profile changed"; + qDebug() << "Profile changed " << current << previous; uncheckPlugins(); } diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 03c6f84dda..61a8ca06e1 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -3,10 +3,11 @@ #include #include +#include "combobox.hpp" class QTableWidget; class QTableView; -class QComboBox; +class ComboBox; class QStandardItemModel; class QItemSelection; class QItemSelectionModel; @@ -19,7 +20,7 @@ class DataFilesPage : public QWidget public: DataFilesPage(QWidget *parent = 0); - QComboBox *mProfileComboBox; + ComboBox *mProfileComboBox; QStringListModel *mProfileModel; const QStringList checkedPlugins(); @@ -29,7 +30,7 @@ public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); - void profileChanged(const QString &profile); + void profileChanged(const QString ¤t, const QString &previous); private: QTableWidget *mMastersWidget; diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 536fbe2621..97bf41582c 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -18,8 +18,6 @@ MainDialog::MainDialog() mIconWidget = new QListWidget; mIconWidget->setViewMode(QListView::IconMode); mIconWidget->setWrapping(false); - mIconWidget->setObjectName("IconWidget"); - qDebug() << mIconWidget->objectName(); mIconWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Just to be sure diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 451ecbb173..32bf8793ca 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -9,7 +9,6 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); - qDebug() << styleSheet; setStyleSheet(styleSheet); QGroupBox *playBox = new QGroupBox(this); From e01afe1595d1f332ff379c229145620581421945 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 06:22:59 +0200 Subject: [PATCH 034/111] Included new header --- apps/launcher/combobox.hpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 apps/launcher/combobox.hpp diff --git a/apps/launcher/combobox.hpp b/apps/launcher/combobox.hpp new file mode 100644 index 0000000000..bc99575d74 --- /dev/null +++ b/apps/launcher/combobox.hpp @@ -0,0 +1,28 @@ +#ifndef COMBOBOX_H +#define COMBOBOX_H + +#include + +class ComboBox : public QComboBox +{ + Q_OBJECT +private: + QString oldText; +public: + ComboBox(QWidget *parent=0) : QComboBox(parent), oldText() + { + connect(this,SIGNAL(editTextChanged(const QString&)), this, + SLOT(textChangedSlot(const QString&))); + connect(this,SIGNAL(currentIndexChanged(const QString&)), this, + SLOT(textChangedSlot(const QString&))); + } +private slots: + void textChangedSlot(const QString &newText) + { + emit textChanged(oldText, newText); + oldText = newText; + } +signals: + void textChanged(const QString &oldText, const QString &newText); +}; +#endif \ No newline at end of file From 5f19f6cfcef757dd31b8fa8947ccc95a84fb1b6e Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 22:05:33 +0200 Subject: [PATCH 035/111] Added a function which returns the checked plugin names --- apps/launcher/datafilespage.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 61a8ca06e1..115e5bfcba 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -32,6 +32,8 @@ public slots: void resizeRows(); void profileChanged(const QString ¤t, const QString &previous); + const QStringList checkedItems(); + private: QTableWidget *mMastersWidget; QTableView *mPluginsTable; From 274bce22c358c4a78c29b763a087c1d9133ecc0a Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 23:03:21 +0200 Subject: [PATCH 036/111] Added writeConfig in Data Files tab and implemented the close button --- apps/launcher/datafilespage.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 115e5bfcba..61a8ca06e1 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -32,8 +32,6 @@ public slots: void resizeRows(); void profileChanged(const QString ¤t, const QString &previous); - const QStringList checkedItems(); - private: QTableWidget *mMastersWidget; QTableView *mPluginsTable; From 04bc42a5c74ec0564f413e81064186228d1ff3c3 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 24 Apr 2011 23:29:32 +0200 Subject: [PATCH 037/111] Added combobox slot for changing the profile --- apps/launcher/datafilespage.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 61a8ca06e1..524382f2ba 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -30,7 +30,11 @@ public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); +<<<<<<< HEAD void profileChanged(const QString ¤t, const QString &previous); +======= + void profileChanged(const QString &profile); +>>>>>>> 766e3f6... Added combobox slot for changing the profile private: QTableWidget *mMastersWidget; From 84ee3b585c3393a2b45115dc8b2eb0df410b3c80 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 06:08:05 +0200 Subject: [PATCH 038/111] Added ability to get the previous profile when a new one is selected --- apps/launcher/datafilespage.hpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 524382f2ba..61a8ca06e1 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -30,11 +30,7 @@ public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); -<<<<<<< HEAD void profileChanged(const QString ¤t, const QString &previous); -======= - void profileChanged(const QString &profile); ->>>>>>> 766e3f6... Added combobox slot for changing the profile private: QTableWidget *mMastersWidget; From 1899e5dc1ec2555ac88e20477a0341f3a96c0339 Mon Sep 17 00:00:00 2001 From: Jan-Peter Nilsson Date: Sun, 3 Apr 2011 19:37:53 +0200 Subject: [PATCH 039/111] If there is an openmw.cfg in the current path, use it as global config --- apps/openmw/main.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index f6f0235920..7ba3fb4d6e 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -73,7 +73,13 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine) bpo::variables_map variables; - std::string cfgFile = OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, "openmw", "openmw.cfg"); + //If there is an openmw.cfg in the current path use that as global config + //Otherwise try getPath + std::string cfgFile = "openmw.cfg"; + if(!isFile(cfgFile.c_str())) + { + cfgFile = OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, "openmw", "openmw.cfg"); + } std::cout << "Using global config file: " << cfgFile << std::endl; std::ifstream globalConfigFile(cfgFile.c_str()); From d47abff25d06f5aa67f38759ea241c43a2237d70 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 24 Apr 2011 12:39:50 +0200 Subject: [PATCH 040/111] create local openmw.cfg file for uninstalled version --- CMakeLists.txt | 6 +++++- files/openmw.cfg.local | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 files/openmw.cfg.local diff --git a/CMakeLists.txt b/CMakeLists.txt index d6155789a1..6a3fc9e0de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -336,6 +336,10 @@ endif (APPLE) # Other files +configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg.local + "${OpenMW_BINARY_DIR}/openmw.cfg" COPYONLY) + + if (WIN32) configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.win32 "${OpenMW_BINARY_DIR}/plugins.cfg" COPYONLY) @@ -423,7 +427,7 @@ if(DPKG_PROGRAM) endif() #Install global configuration files - INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") + INSTALL(FILES "${OpenMW_SOURCE_DIR}/openmw.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_BINARY_DIR}/plugins.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") #Install resources diff --git a/files/openmw.cfg.local b/files/openmw.cfg.local new file mode 100644 index 0000000000..dd116e1080 --- /dev/null +++ b/files/openmw.cfg.local @@ -0,0 +1,2 @@ +data=./data +resources=./resources From d8fa2f201abe4166e6758530261d2eeccd423da9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 24 Apr 2011 12:41:55 +0200 Subject: [PATCH 041/111] improved description of openmw.cfg related cmake-variable --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a3fc9e0de..b2f2db5590 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,15 +14,15 @@ find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") # Location of morrowind data files if(DPKG_PROGRAM) set(MORROWIND_DATA_FILES "/usr/share/games/openmw/data/" CACHE PATH "location of Morrowind data files") - set(MORROWIND_RESOURCE_FILES "/usr/share/games/openmw/resources/" CACHE PATH "location of Morrowind data files") + set(MORROWIND_RESOURCE_FILES "/usr/share/games/openmw/resources/" CACHE PATH "location of OpenMW resources files") else() if (APPLE) # set path inside bundle set(MORROWIND_DATA_FILES "../data" CACHE PATH "location of Morrowind data files") - set(MORROWIND_RESOURCE_FILES "Contents/Resources/resources" CACHE PATH "location of Morrowind data files") + set(MORROWIND_RESOURCE_FILES "Contents/Resources/resources" CACHE PATH "location of OpenMW resources files") else() set(MORROWIND_DATA_FILES "data" CACHE PATH "location of Morrowind data files") - set(MORROWIND_RESOURCE_FILES "resources" CACHE PATH "location of Morrowind data files") + set(MORROWIND_RESOURCE_FILES "resources" CACHE PATH "location of OpenMW resources files") endif(APPLE) endif(DPKG_PROGRAM) From 5f6b4a853f054c3f336da9d13051287d9f9a98b2 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 06:29:04 +0200 Subject: [PATCH 042/111] Removed leftover files --- apps/launcher/datafilesdialog.cpp | 547 ------------------------------ apps/launcher/datafilesdialog.h | 80 ----- 2 files changed, 627 deletions(-) delete mode 100644 apps/launcher/datafilesdialog.cpp delete mode 100644 apps/launcher/datafilesdialog.h diff --git a/apps/launcher/datafilesdialog.cpp b/apps/launcher/datafilesdialog.cpp deleted file mode 100644 index 391eb28fe1..0000000000 --- a/apps/launcher/datafilesdialog.cpp +++ /dev/null @@ -1,547 +0,0 @@ -#include -#include - -#include "datafilesdialog.h" - -using namespace ESM; - -DataFilesDialog::DataFilesDialog() -{ - QSplitter *splitter = new QSplitter(this); - tree = new QTreeView(this); - mastertable = new QTableView(this); - plugintable = new QTableView(this); - - /* listtest - QTableWidget *pluginlist = new QTableWidget(this); - - pluginlist->horizontalHeader()->setStretchLastSection(true); - pluginlist->insertColumn(0); - - for (unsigned int i=0; i<6; ++i) { - pluginlist->insertRow(i); - QTableWidgetItem *item = new QTableWidgetItem(QString("Plugin %0").arg(i)); - item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); - pluginlist->setItem(i, 0, item); - } - - pluginlist->insertRow(6); - pluginlist->setSelectionMode(QAbstractItemView::SingleSelection); // single item can be draged or droped - pluginlist->setDragEnabled(true); - pluginlist->setDragDropMode(QAbstractItemView::InternalMove); - pluginlist->viewport()->setAcceptDrops(true); - - pluginlist->setDropIndicatorShown(true); - */ - - splitter->setOrientation(Qt::Vertical); - splitter->addWidget(tree); - splitter->addWidget(mastertable); - splitter->addWidget(plugintable); - - // Adjust the widget heights inside the splitter - QList sizelist; - sizelist << 100 << 200 << 400; - splitter->setSizes(sizelist); - - QVBoxLayout *dialogLayout = new QVBoxLayout(this); - dialogLayout->addWidget(splitter); - //dialogLayout->addWidget(plugintable); - - datafilesmodel = new QStandardItemModel(); - mastersmodel = new QStandardItemModel(); - - QDir datafilesdir("data/"); - if (!datafilesdir.exists()) - qWarning("Cannot find the plugin directory"); - - QStringList acceptedfiles = (QStringList() << "*.esp"); - QStringList files; - - datafilesdir.setNameFilters(acceptedfiles); - files = datafilesdir.entryList(); - - - //foreach (const QString ¤tfile, datafiles) { - for (int i=0; isetFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); - - QList foundmasters = mastersmodel->findItems(currentmaster); - - if (foundmasters.isEmpty()) { - // Current master is not found in the master, add it - mastersmodel->appendRow(item); - } - } - - // Add the masters to datafilesmodel - QStandardItem *item = new QStandardItem(masters.join(",")); - item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); - QStandardItem *child = new QStandardItem(currentfile); - child->setFlags(child->flags() & ~(Qt::ItemIsDropEnabled)); - - QList masteritems = datafilesmodel->findItems(masters.join(",")); - - - if (masteritems.isEmpty()) { - item->appendRow(child); - datafilesmodel->appendRow(item); - } else { - foreach (QStandardItem *currentitem, masteritems) { - currentitem->setFlags(currentitem->flags() & ~(Qt::ItemIsDropEnabled)); - currentitem->appendRow(child); - } - } - //if (foundmasters.isEmpty()) { - //datafilesmodel->appendRow(item); - //} - } - - /*for( int r=0; r<5; ++r ) { - QStandardItem *item = new QStandardItem( QString("Morrowind.esm").arg(r)); - - / *for( int i=0; i<3; i++ ) { - QStandardItem *child = new QStandardItem( QString("Master %0 Item %1").arg(r).arg(i)); - //child->setEditable( false ); - item->appendRow( child ); - }* / - - mastersmodel->setItem(r, 0, item); - }*/ - - - pluginsmodel = new QStandardItemModel(0, 1); - pluginsmodel->setSupportedDragActions(Qt::MoveAction); - pluginsmodel->invisibleRootItem()->setFlags(Qt::ItemIsDropEnabled); - - - masterselectmodel = new QItemSelectionModel(mastersmodel); - pluginselectmodel = new QItemSelectionModel(pluginsmodel); - - tree->setModel(datafilesmodel); - tree->header()->hide(); - - mastertable->setModel(mastersmodel); - mastertable->setSelectionModel(masterselectmodel); - - mastertable->setSelectionBehavior(QAbstractItemView::SelectRows); - mastertable->setSelectionMode(QAbstractItemView::MultiSelection); - mastertable->setEditTriggers(QAbstractItemView::NoEditTriggers); - mastertable->horizontalHeader()->setStretchLastSection(true); - mastertable->horizontalHeader()->hide(); - - plugintable->setModel(pluginsmodel); - plugintable->setSelectionModel(pluginselectmodel); - plugintable->setSelectionBehavior(QAbstractItemView::SelectRows); - plugintable->setSelectionMode(QAbstractItemView::SingleSelection); - plugintable->setEditTriggers(QAbstractItemView::NoEditTriggers); - plugintable->horizontalHeader()->setStretchLastSection(true); - plugintable->horizontalHeader()->hide(); - - plugintable->setDragEnabled(true); - plugintable->setDragDropMode(QAbstractItemView::InternalMove); - plugintable->setDropIndicatorShown(true); - plugintable->setDragDropOverwriteMode(false); - plugintable->viewport()->setAcceptDrops(true); - - plugintable->setContextMenuPolicy(Qt::CustomContextMenu); - - - connect(masterselectmodel, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); - connect(plugintable, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); - connect(plugintable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); - connect(pluginsmodel, SIGNAL(rowsAboutToBeMoved(const QModelIndex&, int, int, const QModelIndex&, int)), this, SLOT(test())); - - // Adjust the dialog width - setMinimumWidth(500); -} - -void DataFilesDialog::test() -{ - qDebug() << "Breaky Breaky!"; - /*QModelIndexList deselectedindexes = deselected.indexes(); - - if (!deselectedindexes.isEmpty()) { - foreach (const QModelIndex ¤tindex, deselectedindexes) { - qDebug() << "Data is: " << currentindex.data(); - qDebug() << "Row is: "<< currentindex.row(); - QList itemlist = pluginsmodel->findItems(QVariant(currentindex.data()).toString()); - - if (!itemlist.isEmpty()) - { - foreach (const QStandardItem *currentitem, itemlist) { - pluginselectmodel->select(currentitem->index(), QItemSelectionModel::Toggle); - } - } - } - }*/ -} - -void DataFilesDialog::appendPlugins(const QModelIndex &masterindex) -{ - // Find the plugins in the datafilesmodel and append them to the pluginsmodel - if (!masterindex.isValid()) - return; - - for (int r=0; rrowCount(masterindex); ++r ) { - QModelIndex childindex = masterindex.child(r, 0); - - if (childindex.isValid()) { - // Now we see if the pluginsmodel already contains this plugin - QList itemlist = pluginsmodel->findItems(QVariant(datafilesmodel->data(childindex)).toString()); - - if (itemlist.isEmpty()) - { - // Plugin not yet in the pluginsmodel, add it - QStandardItem *item = new QStandardItem(QVariant(datafilesmodel->data(childindex)).toString()); - item->setFlags(item->flags() & ~(Qt::ItemIsDropEnabled)); - item->setCheckable(true); - pluginsmodel->appendRow(item); - } - } - - } - -} - -void DataFilesDialog::removePlugins(const QModelIndex &masterindex) -{ - - if (!masterindex.isValid()) - return; - - for (int r=0; rrowCount(masterindex); ++r) { - QModelIndex childindex = masterindex.child(r, 0); - - QList itemlist = pluginsmodel->findItems(QVariant(childindex.data()).toString()); - - if (!itemlist.isEmpty()) { - foreach (const QStandardItem *currentitem, itemlist) { - qDebug() << "Remove plugin:" << currentitem->data(Qt::DisplayRole).toString(); - pluginsmodel->removeRow(currentitem->row()); - } - } - } - -} - -void DataFilesDialog::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) -{ - if (masterselectmodel->hasSelection()) { // Not exactly necessary to check - const QModelIndexList selectedindexes = masterselectmodel->selectedIndexes(); - - QStringList masters; - QString masterstr; - - // Create a QStringList containing all the masters - foreach (const QModelIndex ¤tindex, selectedindexes) { - masters.append(currentindex.data().toString()); - } - - masters.sort(); - masterstr = masters.join(","); // Make a comma-separated QString - - qDebug() << "Masters" << masterstr; - - // Iterate over all masters in the datafilesmodel to see if they are selected - for (int r=0; rrowCount(); ++r) { - QModelIndex currentindex = datafilesmodel->index(r, 0); - QString master = currentindex.data().toString(); - - if (currentindex.isValid()) { - // See if the current master is in the string with selected masters - if (masterstr.contains(master)) - { - // Append the plugins from the current master to pluginsmodel - appendPlugins(currentindex); - } - } - } - } - - // See what plugins to remove - QModelIndexList deselectedindexes = deselected.indexes(); - - if (!deselectedindexes.isEmpty()) { - foreach (const QModelIndex ¤tindex, deselectedindexes) { - - QString master = currentindex.data().toString(); - master.prepend("*"); - master.append("*"); - QList itemlist = datafilesmodel->findItems(master, Qt::MatchWildcard); - - if (itemlist.isEmpty()) - qDebug() << "Empty as shit"; - - foreach (const QStandardItem *currentitem, itemlist) { - - QModelIndex index = currentitem->index(); - qDebug() << "Master to remove plugins of:" << index.data().toString(); - - removePlugins(index); - } - } - } -} - -void DataFilesDialog::showContextMenu(const QPoint &point) -{ - qDebug() << "Show me the money!"; - - - - QAction *action1 = new QAction(QIcon::fromTheme("arrow-up-double"), tr("Move to Top"), this); - QAction *action2 = new QAction(QIcon::fromTheme("arrow-down-double"), tr("Move to Bottom"), this); - QAction *action3 = new QAction(QIcon::fromTheme("arrow-up"), tr("Move Up"), this); - QAction *action4 = new QAction(QIcon::fromTheme("arrow-down"), tr("Move Down"), this); - QAction *action5 = new QAction(this); - - QModelIndex index = plugintable->indexAt(point); - - if (index.isValid()) { // Should be valid! - const QStandardItem *item = pluginsmodel->itemFromIndex(index); - - if (item->checkState() == Qt::Checked) { - action5->setText("Uncheck Item"); - } else if (item->checkState() == Qt::Unchecked) { - action5->setText("Check Item"); - } - } - - connect(action5, SIGNAL(triggered()), this, SLOT(actionCheckstate())); - - QMenu menu(this); - menu.addAction(action1); - menu.addAction(action2); - menu.addSeparator(); - menu.addAction(action3); - menu.addAction(action4); - menu.addSeparator(); - menu.addAction(action5); - - menu.exec(plugintable->viewport()->mapToGlobal(point)); - -} - -void DataFilesDialog::actionCheckstate() -{ - qDebug() << "actionCheckstate"; - - const QModelIndexList selectedindexes = pluginselectmodel->selectedIndexes(); - - // Should only be one index selected - foreach (const QModelIndex ¤tindex, selectedindexes) { - setCheckstate(currentindex); - } - -} - -void DataFilesDialog::setCheckstate(QModelIndex index) -{ - // No check if index is valid: doubleclicked() always returns - // a valid index when emitted - - //index = QModelIndex(sortModel->mapToSource(index)); // Get a valid index - index = index.sibling(index.row(), 0); // reset index to first column - // because that's where te checkbox is; makes it possible to doubleclick whole row - - if (!index.isValid()) - return; - - if (pluginsmodel->data(index, Qt::CheckStateRole) == Qt::Checked) { - // Selected row is checked, uncheck it - pluginsmodel->setData(index, Qt::Unchecked, Qt::CheckStateRole); - } else { - pluginsmodel->setData(index, Qt::Checked, Qt::CheckStateRole); - } -} - -void DataFilesDialog::readConfig() -{ -/* QString filename; - QString path = "data/"; // TODO: Should be global - - QFile file("openmw.cfg"); // Specify filepath later - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "error open"; - close(); // File cannot be opened or created TODO: throw error - } - - QTextStream in(&file); - - QStringList datafiles; - - // Add each data file read from the config file to a QStringList - while (!in.atEnd()) { - QString line = in.readLine(); - - if (line.contains("master")) { - filename = line.remove("master="); - filename.prepend(path); - - datafiles << filename << "\n"; - - } else if (line.contains("plugin")) { - filename = line.remove("plugin="); - filename.prepend(path); - - datafiles << filename << "\n"; - } - } - - file.close(); - - // Check if the files are in the model, set to checked if found - foreach(const QString ¤tfile, datafiles) { - QModelIndex index = dataFilesModel->index(currentfile, 0); - - if (index.isValid()) { - // File is found in model, set it to checked - dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); - } - }*/ -} - -void DataFilesDialog::writeConfig() -{ - /* Custom write method: We cannot use QSettings because it does not accept spaces - -// QList checkeditems = dataFilesModel->getCheckedItems().toList(); - QStringList checkeditems = dataFilesModel->getCheckedItems(); - //QString sectionname = "[Game Files]"; - QString filename; - QFileInfo datafile; - - // Sort the items so that master files end up on top - foreach (const QString ¤titem, checkeditems) { - if(currentitem.endsWith(QString(".esm"), Qt::CaseInsensitive)) { - checkeditems.move(checkeditems.indexOf(currentitem), 0); - } - } - - QFile file("openmw.cfg"); // Specify filepath later - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - close(); // File cannot be opened or created TODO: throw error - - //QTextStream in(&file); - QTextStream in(&file); - - //QString buffer; - QByteArray buffer; - - // Remove all previous master/plugin entries from config - while (!in.atEnd()) { - QString line = in.readLine(); - //if (!line.contains("GameFile") && line != "[Game Files]") { - if (!line.contains("master") && !line.contains("plugin")) { - buffer += line += "\n"; - } - } - - file.close(); - - // Now we write back the other config entries - if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) - close(); // File cannot be opened or created TODO: throw error - - file.write(buffer); - QTextStream out(&file); - - // Write the section name to the config file before we write out the data files - //out << sectionname << endl; - - // Write the list of game files to the config - for (int i = 0; i < checkeditems.size(); ++i) { - //filename = dataFilesModel->fileName(checkeditems.at(i)); - filename = checkeditems.at(i); - datafile = QFileInfo(filename); - - if (datafile.exists()) { - if (filename.endsWith(QString(".esm"), Qt::CaseInsensitive)) { - out << "master=" << datafile.fileName() << endl; - } else if (filename.endsWith(QString(".esp"), Qt::CaseInsensitive)) { - out << "plugin=" << datafile.fileName() << endl; - } - } - } - - - file.close(); - close(); // Exit dialog*/ -} - -void DataFilesDialog::restoreDefaults() -{ -/* // Uncheck all checked items - dataFilesModel->checkedItems.clear(); - - QModelIndexList indexlist; // Make a list of default master files - indexlist.append(dataFilesModel->index("data/Morrowind.esm", 0)); - indexlist.append(dataFilesModel->index("data/Tribunal.esm", 0)); - indexlist.append(dataFilesModel->index("data/Bloodmoon.esm", 0)); - - foreach (const QModelIndex &index, indexlist) { - if (index.isValid()) { - // Master file found, check it - dataFilesModel->setData(index, Qt::Checked, Qt::CheckStateRole); - } - } - dataFilesModel->submit(); // Force refresh of view*/ -} - - - -/*void DataFilesDialog::setFilter() -{ - / * - QStringList filefilter = (QStringList() << "*.esm" << "*.esp"); - QStringList currentfilefilter; - - QString esmfilter = lineFilter->text(); - QString espfilter = lineFilter->text(); - - if (lineFilter->text().isEmpty()) { - dataFilesModel->setNameFilters(filefilter); - // sortModel->setFilterRegExp(QRegExp("*.esp", Qt::CaseInsensitive, - // QRegExp::FixedString)); - // sortModel->setFilterKeyColumn(0); - return; - } - - esmfilter.prepend("*"); - esmfilter.append("*.esm"); - espfilter.prepend("*"); - espfilter.append("*.esp"); - - currentfilefilter << esmfilter << espfilter; -// sortModel->setFilterRegExp(QRegExp(espfilter, Qt::CaseInsensitive, - // QRegExp::FixedString)); - // sortModel->setFilterKeyColumn(0); - dataFilesModel->setNameFilters(currentfilefilter); - -// readConfig(); -// dataFilesModel->submit(); -// dataFilesModel->setData(); -* / -} -*/ - diff --git a/apps/launcher/datafilesdialog.h b/apps/launcher/datafilesdialog.h deleted file mode 100644 index 08bad4608c..0000000000 --- a/apps/launcher/datafilesdialog.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef DATAFILESDIALOG_H -#define DATAFILESDIALOG_H - -#include "lineedit.h" - -//class DataFilesModel; - - -/*class QStringList; -class QTreeView; -class QLineEdit; -class QPlainTextEdit; -class QItemSelectionModel; -class QSortFilterProxyModel; -*/ -#include -#include - -class QTreeView; -class QTableView; -class QStandardItemModel; -class QItemSelectionModel; -class QItemSelection; - -class DataFilesDialog : public QDialog -{ - Q_OBJECT - -public: - DataFilesDialog(); -// ~DataFilesDialog() { }; - -private: - //QStandardItemModel *dataFilesModel; - - //QTreeView *dataFilesView; - //QItemSelectionModel *selectionModel; - //QSortFilterProxyModel *sortModel; - - //QLineEdit *lineAuthor; - //LineEdit *lineFilter; - //QPlainTextEdit *textDesc; - //QPlainTextEdit *textDepends; - QModelIndexList *masterindexes; - - QStandardItemModel *datafilesmodel; - QStandardItemModel *mastersmodel; - QStandardItemModel *pluginsmodel; - - QItemSelectionModel *masterselectmodel; - QItemSelectionModel *pluginselectmodel; - - QTreeView *tree; - - QTableView *mastertable; - QTableView *plugintable; - - void appendPlugins(const QModelIndex &masterindex); - void removePlugins(const QModelIndex &masterindex); - -public slots: - - //void changeData(QModelIndex top, QModelIndex bottom); // edit - void restoreDefaults(); - void readConfig(); - void writeConfig(); - void showContextMenu(const QPoint &point); - - void actionCheckstate(); - void test(); - //void setupView(); - - void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - //void setFilter(); - void setCheckstate(QModelIndex index); -// void doubleClicked(QModelIndex index); - -}; - -#endif From 4ee748552b9b37270d91f8e03cfb464295e71e41 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 07:02:07 +0200 Subject: [PATCH 043/111] More messing around with the launcher config file --- apps/launcher/CMakeLists.txt | 3 ++- apps/launcher/datafilespage.cpp | 30 +++++++++++++++++++++++++++--- apps/launcher/datafilespage.hpp | 3 +++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 43c45142cd..22b0a175d2 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -10,9 +10,10 @@ set(LAUNCHER maindialog.hpp playpage.hpp combobox.hpp + ) -SET(MOC_HDRS +set(MOC_HDRS datafilespage.hpp lineedit.hpp maindialog.hpp diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index cc1f3d7caa..463295f362 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -3,6 +3,7 @@ #include // TODO: Remove #include +#include "../openmw/path.hpp" #include "datafilespage.hpp" #include "lineedit.hpp" @@ -46,10 +47,24 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); // TEST + QFile config("launcher.cfg"); + + if (config.exists()) + { + mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); + } else { + QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, + "launcher", + "launcher.cfg")); + mLauncherConfig = new QSettings(path, QSettings::IniFormat); + } + + + QSettings settings("launcher.cfg", QSettings::IniFormat); + settings.beginGroup("Profiles"); + mProfileModel = new QStringListModel(); - QStringList profileList; - profileList << "Default" << "New" << "Yeah" << "Cool story bro!"; - mProfileModel->setStringList(profileList); + mProfileModel->setStringList(settings.childGroups()); mProfileComboBox = new ComboBox(this); @@ -100,6 +115,9 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); connect(mProfileComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); + + + readConfig(); } void DataFilesPage::setupDataFiles() @@ -361,6 +379,12 @@ void DataFilesPage::profileChanged(const QString ¤t, const QString &previo } +void DataFilesPage::readConfig() +{ + // TODO: global etc + +} + void DataFilesPage::writeConfig() { // TODO: Testing the config here diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 61a8ca06e1..af0ba5b438 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -12,6 +12,7 @@ class QStandardItemModel; class QItemSelection; class QItemSelectionModel; class QStringListModel; +class QSettings; class DataFilesPage : public QWidget { @@ -22,8 +23,10 @@ public: ComboBox *mProfileComboBox; QStringListModel *mProfileModel; + QSettings *mLauncherConfig; const QStringList checkedPlugins(); + void readConfig(); void writeConfig(); public slots: From 0fc47678463199b933cf236c6489c618ab72827c Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 07:47:11 +0200 Subject: [PATCH 044/111] Some renaming and ugly support for getPath --- apps/launcher/CMakeLists.txt | 1 + apps/launcher/datafilespage.cpp | 26 ++++---- apps/launcher/datafilespage.hpp | 4 +- apps/launcher/maindialog.cpp | 6 +- apps/launcher/playpage.cpp | 107 ++------------------------------ apps/launcher/playpage.hpp | 4 +- 6 files changed, 28 insertions(+), 120 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 22b0a175d2..7343aae10a 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -11,6 +11,7 @@ set(LAUNCHER playpage.hpp combobox.hpp + ../openmw/path.cpp ) set(MOC_HDRS diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 463295f362..05020c42e2 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -51,27 +51,29 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) if (config.exists()) { + qDebug() << "Using config file from current directory"; mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); } else { QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, - "launcher", + "openmw", "launcher.cfg")); + qDebug() << "Using global config file from " << path; mLauncherConfig = new QSettings(path, QSettings::IniFormat); } + config.close(); - QSettings settings("launcher.cfg", QSettings::IniFormat); - settings.beginGroup("Profiles"); + mLauncherConfig->beginGroup("Profiles"); - mProfileModel = new QStringListModel(); - mProfileModel->setStringList(settings.childGroups()); + mProfilesModel = new QStringListModel(); + mProfilesModel->setStringList(mLauncherConfig->childGroups()); - mProfileComboBox = new ComboBox(this); - mProfileComboBox->setModel(mProfileModel); + mProfilesComboBox = new ComboBox(this); + mProfilesComboBox->setModel(mProfilesModel); - mProfileComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - mProfileComboBox->setInsertPolicy(QComboBox::InsertAtBottom); + mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); //mProfileComboBox->addItem(QString("New Profile")); QToolButton *NewProfileToolButton = new QToolButton(this); @@ -86,7 +88,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) QHBoxLayout *bottomLayout = new QHBoxLayout(); bottomLayout->addWidget(profileLabel); - bottomLayout->addWidget(mProfileComboBox); + bottomLayout->addWidget(mProfilesComboBox); bottomLayout->addWidget(NewProfileToolButton); bottomLayout->addWidget(CopyProfileToolButton); bottomLayout->addWidget(DeleteProfileToolButton); @@ -114,7 +116,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); - connect(mProfileComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); + connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); readConfig(); @@ -391,7 +393,7 @@ void DataFilesPage::writeConfig() QSettings settings("launcher.cfg", QSettings::IniFormat); settings.beginGroup("Profiles"); - settings.beginGroup(mProfileComboBox->currentText()); + settings.beginGroup(mProfilesComboBox->currentText()); // First write all the masters to the config for (int r = 0; r < mMastersWidget->rowCount(); ++r) { diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index af0ba5b438..1f6a17737b 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -21,8 +21,8 @@ class DataFilesPage : public QWidget public: DataFilesPage(QWidget *parent = 0); - ComboBox *mProfileComboBox; - QStringListModel *mProfileModel; + ComboBox *mProfilesComboBox; + QStringListModel *mProfilesModel; QSettings *mLauncherConfig; const QStringList checkedPlugins(); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 97bf41582c..38c8816691 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -135,13 +135,13 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) // The user switched from Data Files to Play if (previousPage == QString("Data Files") && currentPage == QString("Play")) { - mPlayPage->mProfileModel->setStringList(mDataFilesPage->mProfileModel->stringList()); - mPlayPage->mProfileComboBox->setCurrentIndex(mDataFilesPage->mProfileComboBox->currentIndex()); + mPlayPage->mProfilesModel->setStringList(mDataFilesPage->mProfilesModel->stringList()); + mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); } // The user switched from Play to Data Files if (previousPage == QString("Play") && currentPage == QString("Data Files")) { - mDataFilesPage->mProfileComboBox->setCurrentIndex(mPlayPage->mProfileComboBox->currentIndex()); + mDataFilesPage->mProfilesComboBox->setCurrentIndex(mPlayPage->mProfilesComboBox->currentIndex()); } } diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 32bf8793ca..8401a0d7dc 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -26,12 +26,12 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) profileLabel->setObjectName("ProfileLabel"); // TODO: Cleanup - mProfileModel = new QStringListModel(); + mProfilesModel = new QStringListModel(); - mProfileComboBox = new QComboBox(playBox); - mProfileComboBox->setObjectName("ProfileComboBox"); + mProfilesComboBox = new QComboBox(playBox); + mProfilesComboBox->setObjectName("ProfileComboBox"); //mProfileComboBox->setMinimumWidth(200); - mProfileComboBox->setModel(mProfileModel); + mProfilesComboBox->setModel(mProfilesModel); QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); @@ -40,7 +40,7 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) playLayout->addItem(vSpacer1); playLayout->addWidget(playButton); playLayout->addWidget(profileLabel); - playLayout->addWidget(mProfileComboBox); + playLayout->addWidget(mProfilesComboBox); playLayout->addItem(vSpacer2); QHBoxLayout *pageLayout = new QHBoxLayout(this); @@ -51,99 +51,4 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) pageLayout->addWidget(playBox); pageLayout->addItem(hSpacer2); -} -// verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); -// listWidget = new QListWidget(Dialog); -// listWidget->setObjectName(QString::fromUtf8("listWidget")); -// listWidget->setMaximumSize(QSize(16777215, 100)); -// -// verticalLayout_2->addWidget(listWidget); -// -// groupBox = new QGroupBox(Dialog); -// groupBox->setObjectName(QString::fromUtf8("groupBox")); -// gridLayout_2 = new QGridLayout(groupBox); -// gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); -// verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); -// -// gridLayout_2->addItem(verticalSpacer_2, 0, 1, 1, 1); -// -// horizontalSpacer_4 = new QSpacerItem(54, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); -// -// gridLayout_2->addItem(horizontalSpacer_4, 1, 0, 1, 1); -// -// horizontalSpacer_3 = new QSpacerItem(53, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); -// -// gridLayout_2->addItem(horizontalSpacer_3, 1, 2, 1, 1); -// -// verticalSpacer_3 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); -// -// gridLayout_2->addItem(verticalSpacer_3, 2, 1, 1, 1); -// -// groupBox_2 = new QGroupBox(groupBox); -// groupBox_2->setObjectName(QString::fromUtf8("groupBox_2")); -// groupBox_2->setMinimumSize(QSize(404, 383)); -// groupBox_2->setMaximumSize(QSize(404, 383)); -// -// groupBox_2->setFlat(true); -// verticalLayout = new QVBoxLayout(groupBox_2); -// verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); -// gridLayout = new QGridLayout(); -// gridLayout->setObjectName(QString::fromUtf8("gridLayout")); -// label = new QLabel(groupBox_2); -// label->setObjectName(QString::fromUtf8("label")); -// label->setStyleSheet(QString::fromUtf8("")); -// -// gridLayout->addWidget(label, 2, 1, 1, 1); -// -// comboBox = new QComboBox(groupBox_2); -// comboBox->setObjectName(QString::fromUtf8("comboBox")); -// comboBox->setMinimumSize(QSize(200, 0)); -// comboBox->setStyleSheet(QString::fromUtf8("")); -// -// gridLayout->addWidget(comboBox, 3, 1, 1, 1); -// -// horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); -// -// gridLayout->addItem(horizontalSpacer, 2, 2, 1, 1); -// -// horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); -// -// gridLayout->addItem(horizontalSpacer_2, 2, 0, 1, 1); -// -// verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Minimum); -// -// gridLayout->addItem(verticalSpacer, 1, 1, 1, 1); -// -// verticalSpacer_4 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); -// -// gridLayout->addItem(verticalSpacer_4, 4, 1, 1, 1); -// -// pushButton = new QPushButton(groupBox_2); -// pushButton->setObjectName(QString::fromUtf8("pushButton")); -// pushButton->setMinimumSize(QSize(200, 50)); -// pushButton->setMaximumSize(QSize(16777215, 16777215)); -// pushButton->setAutoFillBackground(false); -// pushButton->setStyleSheet(QString::fromUtf8("")); -// pushButton->setIconSize(QSize(32, 32)); -// pushButton->setAutoRepeat(false); -// pushButton->setFlat(false); -// -// gridLayout->addWidget(pushButton, 0, 1, 1, 1); -// -// -// verticalLayout->addLayout(gridLayout); -// -// -// gridLayout_2->addWidget(groupBox_2, 1, 1, 1, 1); -// -// -// verticalLayout_2->addWidget(groupBox); -// -// buttonBox = new QDialogButtonBox(Dialog); -// buttonBox->setObjectName(QString::fromUtf8("buttonBox")); -// buttonBox->setOrientation(Qt::Horizontal); -// buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); -// -// verticalLayout_2->addWidget(buttonBox); -// -// +} \ No newline at end of file diff --git a/apps/launcher/playpage.hpp b/apps/launcher/playpage.hpp index 14689d5d50..21db7b0f14 100644 --- a/apps/launcher/playpage.hpp +++ b/apps/launcher/playpage.hpp @@ -13,8 +13,8 @@ class PlayPage : public QWidget public: PlayPage(QWidget *parent = 0); - QComboBox *mProfileComboBox; - QStringListModel *mProfileModel; + QComboBox *mProfilesComboBox; + QStringListModel *mProfilesModel; }; #endif \ No newline at end of file From 64d636574eb5cc7eca449ba4f41a1553ff3914a0 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 10:41:16 +0200 Subject: [PATCH 045/111] More configfile stuff --- apps/launcher/datafilespage.cpp | 151 ++++++++++++++++++++++++-------- apps/launcher/datafilespage.hpp | 5 +- apps/launcher/maindialog.cpp | 1 + 3 files changed, 119 insertions(+), 38 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 05020c42e2..1c13987855 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -46,28 +46,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Bottom part with profile options QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); - // TEST - QFile config("launcher.cfg"); - - if (config.exists()) - { - qDebug() << "Using config file from current directory"; - mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); - } else { - QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, - "openmw", - "launcher.cfg")); - qDebug() << "Using global config file from " << path; - mLauncherConfig = new QSettings(path, QSettings::IniFormat); - } - - config.close(); - - mLauncherConfig->beginGroup("Profiles"); - mProfilesModel = new QStringListModel(); - mProfilesModel->setStringList(mLauncherConfig->childGroups()); - mProfilesComboBox = new ComboBox(this); mProfilesComboBox->setModel(mProfilesModel); @@ -107,6 +86,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) pageLayout->addItem(vSpacer3); setupDataFiles(); + setupConfig(); connect(mMastersWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), @@ -118,8 +98,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); - - readConfig(); } void DataFilesPage::setupDataFiles() @@ -268,6 +246,8 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const } } + readConfig(); + } void DataFilesPage::addPlugins(const QModelIndex &index) @@ -360,6 +340,7 @@ void DataFilesPage::uncheckPlugins() if (index.isValid()) { // See if the current item is checked if (mPluginsModel->data(index, Qt::CheckStateRole) == Qt::Checked) { + qDebug() << "Uncheck!"; mPluginsModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); } } @@ -374,31 +355,127 @@ void DataFilesPage::resizeRows() mPluginsTable->resizeRowsToContents(); } -void DataFilesPage::profileChanged(const QString ¤t, const QString &previous) +void DataFilesPage::profileChanged(const QString &previous, const QString ¤t) { qDebug() << "Profile changed " << current << previous; + + // Just to be sure + if (!previous.isEmpty()) { + writeConfig(previous); + mLauncherConfig->sync(); + } + uncheckPlugins(); + readConfig(); + } +void DataFilesPage::setupConfig() +{ + QFile config("launcher.cfg"); + + if (config.exists()) + { + qDebug() << "Using config file from current directory"; + mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); + } else { + QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, + "openmw", + "launcher.cfg")); + qDebug() << "Using global config file from " << path; + mLauncherConfig = new QSettings(path, QSettings::IniFormat); + } + + config.close(); + + + mLauncherConfig->beginGroup("Profiles"); + QStringList profiles = mLauncherConfig->childGroups(); + + if (profiles.isEmpty()) { + // Add a default profile + profiles.append("Default"); + } + + mProfilesModel->setStringList(profiles); + + QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); + if (currentProfile.isEmpty()) { + currentProfile = "Default"; + } + mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); + + mLauncherConfig->endGroup(); + +} + + void DataFilesPage::readConfig() { - // TODO: global etc + QString profile = mProfilesComboBox->currentText(); + qDebug() << "read from: " << profile; + mLauncherConfig->beginGroup("Profiles"); + mLauncherConfig->beginGroup(profile); + + QStringList childKeys = mLauncherConfig->childKeys(); + qDebug() << childKeys << "SJILDKIEJS"; + + foreach (const QString &key, childKeys) { + qDebug() << "Key is " << key << mLauncherConfig->value(key).toString(); + if (key.startsWith("Plugin")) { + QList itemList = mPluginsModel->findItems(mLauncherConfig->value(key).toString()); + + if (!itemList.isEmpty()) + { + foreach (const QStandardItem *currentItem, itemList) { + mPluginsModel->setData(currentItem->index(), Qt::Checked, Qt::CheckStateRole); + } + } + } + + if (key.startsWith("Master")) { + qDebug() << mLauncherConfig->value(key).toString(); + } + } } -void DataFilesPage::writeConfig() +void DataFilesPage::writeConfig(QString profile) { // TODO: Testing the config here - QSettings settings("launcher.cfg", QSettings::IniFormat); + if (profile.isEmpty()) { + profile = mProfilesComboBox->currentText(); + } - settings.beginGroup("Profiles"); - settings.beginGroup(mProfilesComboBox->currentText()); + qDebug() << "Writing: " << profile; - // First write all the masters to the config - for (int r = 0; r < mMastersWidget->rowCount(); ++r) { - const QTableWidgetItem *item = mMastersWidget->item(r, 0); - settings.setValue(QString("Master%1").arg(r), item->data(Qt::DisplayRole).toString()); + // Make sure we have no groups open + while (!mLauncherConfig->group().isEmpty()) { + mLauncherConfig->endGroup(); + } + + mLauncherConfig->beginGroup("Profiles"); + mLauncherConfig->setValue("CurrentProfile", profile); + + // Open the profile-name subgroup + mLauncherConfig->beginGroup(profile); + mLauncherConfig->remove(""); + + // First write the masters to the config + QList selectedMasters = mMastersWidget->selectedItems(); + + /*mLauncherConfig->beginWriteArray("Masters"); + for (int i = 0; i < selectedMasters.size(); ++i) { + mLauncherConfig->setArrayIndex(i); + const QTableWidgetItem *item = selectedMasters.at(i); + mLauncherConfig->setValue("Master", item->data(Qt::DisplayRole).toString()); + } + mLauncherConfig->endArray(); + */ + for (int i = 0; i < selectedMasters.size(); ++i) { + const QTableWidgetItem *item = selectedMasters.at(i); + mLauncherConfig->setValue(QString("Master%0").arg(i), item->data(Qt::DisplayRole).toString()); } // Now write all checked plugins @@ -406,10 +483,12 @@ void DataFilesPage::writeConfig() for (int i = 0; i < plugins.size(); ++i) { - settings.setValue(QString("Plugin%1").arg(i), plugins.at(i)); + mLauncherConfig->setValue(QString("Plugin%1").arg(i), plugins.at(i)); } - settings.endGroup(); - settings.endGroup(); + qDebug() << mLauncherConfig->childKeys(); + mLauncherConfig->endGroup(); + qDebug() << mLauncherConfig->childKeys(); + mLauncherConfig->endGroup(); } diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 1f6a17737b..c361e6d4de 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -26,14 +26,15 @@ public: QSettings *mLauncherConfig; const QStringList checkedPlugins(); + void setupConfig(); void readConfig(); - void writeConfig(); + void writeConfig(QString profile = QString()); public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); - void profileChanged(const QString ¤t, const QString &previous); + void profileChanged(const QString &previous, const QString ¤t); private: QTableWidget *mMastersWidget; diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 38c8816691..02b8ce250b 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -151,6 +151,7 @@ void MainDialog::closeEvent(QCloseEvent *event) { qDebug() << "Close event"; mDataFilesPage->writeConfig(); + mDataFilesPage->mLauncherConfig->sync(); event->accept(); } From e4129ce26eea9bfbcfe9a5397e0e14e10eddeeb8 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 25 Apr 2011 17:03:16 +0200 Subject: [PATCH 046/111] Fixed config loading problem --- apps/launcher/datafilespage.cpp | 126 ++++++++++++++++---------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 1c13987855..dbed73b539 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -85,9 +85,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) pageLayout->addLayout(bottomLayout); pageLayout->addItem(vSpacer3); - setupDataFiles(); - setupConfig(); - connect(mMastersWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); @@ -98,6 +95,9 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); + + setupDataFiles(); + setupConfig(); } void DataFilesPage::setupDataFiles() @@ -174,7 +174,6 @@ void DataFilesPage::setupDataFiles() QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); - if (masterList.isEmpty()) { // Masters node not yet in the mDataFilesModel parent->appendRow(child); mDataFilesModel->appendRow(parent); @@ -187,8 +186,48 @@ void DataFilesPage::setupDataFiles() } } +void DataFilesPage::setupConfig() +{ + QFile config("launcher.cfg"); + + if (config.exists()) + { + qDebug() << "Using config file from current directory"; + mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); + } else { + QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, + "openmw", + "launcher.cfg")); + qDebug() << "Using global config file from " << path; + mLauncherConfig = new QSettings(path, QSettings::IniFormat); + } + + config.close(); + + mLauncherConfig->beginGroup("Profiles"); + QStringList profiles = mLauncherConfig->childGroups(); + + if (profiles.isEmpty()) { + // Add a default profile + profiles.append("Default"); + } + + mProfilesModel->setStringList(profiles); + + QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); + if (currentProfile.isEmpty()) { + currentProfile = "Default"; + } + mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); + + mLauncherConfig->endGroup(); + + readConfig(); +} + void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { + // TODO: Use mMasterWidget->selectedItems if (mMastersWidget->selectionModel()->hasSelection()) { const QModelIndexList selectedIndexes = mMastersWidget->selectionModel()->selectedIndexes(); @@ -246,8 +285,6 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const } } - readConfig(); - } void DataFilesPage::addPlugins(const QModelIndex &index) @@ -347,11 +384,9 @@ void DataFilesPage::uncheckPlugins() } } - void DataFilesPage::resizeRows() { // Contents changed - qDebug() << "test"; mPluginsTable->resizeRowsToContents(); } @@ -371,51 +406,16 @@ void DataFilesPage::profileChanged(const QString &previous, const QString &curre } -void DataFilesPage::setupConfig() -{ - QFile config("launcher.cfg"); - - if (config.exists()) - { - qDebug() << "Using config file from current directory"; - mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); - } else { - QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, - "openmw", - "launcher.cfg")); - qDebug() << "Using global config file from " << path; - mLauncherConfig = new QSettings(path, QSettings::IniFormat); - } - - config.close(); - - - mLauncherConfig->beginGroup("Profiles"); - QStringList profiles = mLauncherConfig->childGroups(); - - if (profiles.isEmpty()) { - // Add a default profile - profiles.append("Default"); - } - - mProfilesModel->setStringList(profiles); - - QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); - if (currentProfile.isEmpty()) { - currentProfile = "Default"; - } - mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); - - mLauncherConfig->endGroup(); - -} - - void DataFilesPage::readConfig() { QString profile = mProfilesComboBox->currentText(); qDebug() << "read from: " << profile; + // Make sure we have no groups open + while (!mLauncherConfig->group().isEmpty()) { + mLauncherConfig->endGroup(); + } + mLauncherConfig->beginGroup("Profiles"); mLauncherConfig->beginGroup(profile); @@ -423,20 +423,28 @@ void DataFilesPage::readConfig() qDebug() << childKeys << "SJILDKIEJS"; foreach (const QString &key, childKeys) { - qDebug() << "Key is " << key << mLauncherConfig->value(key).toString(); - if (key.startsWith("Plugin")) { - QList itemList = mPluginsModel->findItems(mLauncherConfig->value(key).toString()); + const QString keyValue = mLauncherConfig->value(key).toString(); - if (!itemList.isEmpty()) + if (key.startsWith("Plugin")) { + QList pluginList = mPluginsModel->findItems(keyValue); + + if (!pluginList.isEmpty()) { - foreach (const QStandardItem *currentItem, itemList) { - mPluginsModel->setData(currentItem->index(), Qt::Checked, Qt::CheckStateRole); + foreach (const QStandardItem *currentPlugin, pluginList) { + mPluginsModel->setData(currentPlugin->index(), Qt::Checked, Qt::CheckStateRole); } } } if (key.startsWith("Master")) { - qDebug() << mLauncherConfig->value(key).toString(); + qDebug() << "Read master: " << keyValue; + QList masterList = mMastersWidget->findItems(keyValue, Qt::MatchExactly); + + if (!masterList.isEmpty()) { + foreach (QTableWidgetItem *currentMaster, masterList) { + mMastersWidget->selectionModel()->select(mMastersWidget->model()->index(currentMaster->row(), 0), QItemSelectionModel::Select); + } + } } } } @@ -465,14 +473,6 @@ void DataFilesPage::writeConfig(QString profile) // First write the masters to the config QList selectedMasters = mMastersWidget->selectedItems(); - /*mLauncherConfig->beginWriteArray("Masters"); - for (int i = 0; i < selectedMasters.size(); ++i) { - mLauncherConfig->setArrayIndex(i); - const QTableWidgetItem *item = selectedMasters.at(i); - mLauncherConfig->setValue("Master", item->data(Qt::DisplayRole).toString()); - } - mLauncherConfig->endArray(); - */ for (int i = 0; i < selectedMasters.size(); ++i) { const QTableWidgetItem *item = selectedMasters.at(i); mLauncherConfig->setValue(QString("Master%0").arg(i), item->data(Qt::DisplayRole).toString()); From 4f18452ef6f2af9589a5cdaf1213ce1e4f7e2547 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 27 Apr 2011 13:25:32 +0200 Subject: [PATCH 047/111] Merged clean newlauncher branch with config Conflicts: apps/launcher/CMakeLists.txt apps/launcher/datafilesdialog.cpp apps/launcher/datafilesdialog.h apps/launcher/lineedit.hpp apps/launcher/maindialog.cpp apps/launcher/resources.qrc apps/launcher/resources/images/openmw-icon.png --- apps/launcher/maindialog.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 02b8ce250b..5ba5168a9f 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -21,10 +21,6 @@ MainDialog::MainDialog() mIconWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Just to be sure - //mIconWidget->setItemDelegate(new ListViewDelegate()); - mIconWidget->setAttribute(Qt::WA_MacShowFocusRect); // Show a focus frame around the icons on Mac - //mIconWidget->setLayoutMode(QListView::SinglePass); - mIconWidget->setUniformItemSizes(true); mIconWidget->setIconSize(QSize(48, 48)); mIconWidget->setMovement(QListView::Static); @@ -33,12 +29,10 @@ MainDialog::MainDialog() mIconWidget->setFixedHeight(80); mIconWidget->setSpacing(4); mIconWidget->setCurrentRow(0); - mIconWidget->setFlow(QListView::LeftToRight); QGroupBox *groupBox = new QGroupBox(this); QVBoxLayout *groupLayout = new QVBoxLayout(groupBox); - // TODO: TESTING /*mProfileModel = new QStringListModel(); @@ -99,7 +93,6 @@ void MainDialog::createIcons() configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); //configButton->setSizeHint(itemSize); - QListWidgetItem *updateButton = new QListWidgetItem(mIconWidget); updateButton->setIcon(QIcon::fromTheme("video-display")); updateButton->setText(tr("Graphics")); @@ -110,6 +103,8 @@ void MainDialog::createIcons() QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); queryButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); + QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); + queryButton->setIcon(QIcon(":resources/openmw-plugin-icon.png")); queryButton->setText(tr("Data Files")); queryButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); @@ -120,6 +115,9 @@ void MainDialog::createIcons() SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); + connect(mIconWidget, + SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); } void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) @@ -159,4 +157,4 @@ void MainDialog::closeEvent(QCloseEvent *event) void MainDialog::play() { -} \ No newline at end of file +} From 24f2c57c3296abfa4e9cb73a887d506b025a0bf3 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 22 Apr 2011 14:18:24 +0200 Subject: [PATCH 048/111] Added missing resource file --- apps/launcher/resources/openmw-icon.png | Bin 0 -> 60039 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/launcher/resources/openmw-icon.png diff --git a/apps/launcher/resources/openmw-icon.png b/apps/launcher/resources/openmw-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5393821f378970c6ca73788b9141161c9cff09 GIT binary patch literal 60039 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 p@Ja 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 literal 0 HcmV?d00001 From 7747c785845e5e5311fab2b5cfd82564ab51d19e Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Thu, 28 Apr 2011 22:23:42 +0200 Subject: [PATCH 049/111] Fixed the use of path.hpp, which is in a CMake component now Also fixed some leftover lines from a wrongly modified conflict --- apps/launcher/CMakeLists.txt | 5 +---- apps/launcher/datafilespage.cpp | 4 ++-- apps/launcher/maindialog.cpp | 2 -- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 7343aae10a..00a50679cc 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -10,8 +10,6 @@ set(LAUNCHER maindialog.hpp playpage.hpp combobox.hpp - - ../openmw/path.cpp ) set(MOC_HDRS @@ -22,8 +20,6 @@ set(MOC_HDRS combobox.hpp ) -source_group(apps\\launcher FILES ${ESMTOOL}) - find_package(Qt4 REQUIRED) set(QT_USE_QTGUI 1) @@ -36,6 +32,7 @@ include(${QT_USE_FILE}) add_executable(launcher ${LAUNCHER} ${MISC} ${MISC_HEADER} + ${FILES} ${FILES_HEADER} ${TO_UTF8} ${ESM} ${RCC_SRCS} diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index dbed73b539..1b98087e95 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -3,7 +3,7 @@ #include // TODO: Remove #include -#include "../openmw/path.hpp" +#include #include "datafilespage.hpp" #include "lineedit.hpp" @@ -195,7 +195,7 @@ void DataFilesPage::setupConfig() qDebug() << "Using config file from current directory"; mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); } else { - QString path = QString::fromStdString(OMW::Path::getPath(OMW::Path::GLOBAL_CFG_PATH, + QString path = QString::fromStdString(Files::getPath(Files::Path_ConfigGlobal, "openmw", "launcher.cfg")); qDebug() << "Using global config file from " << path; diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 5ba5168a9f..669c9e019f 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -103,8 +103,6 @@ void MainDialog::createIcons() QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); queryButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); - QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); - queryButton->setIcon(QIcon(":resources/openmw-plugin-icon.png")); queryButton->setText(tr("Data Files")); queryButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); From 1fc18075ff903edbee9e23de3dc3d1a01d1b5675 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Thu, 28 Apr 2011 22:49:05 +0200 Subject: [PATCH 050/111] Modified config loading function to always read/write from userPath There is no need for default (global) settings yet --- apps/launcher/datafilespage.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 1b98087e95..2add275cbd 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -188,21 +188,20 @@ void DataFilesPage::setupDataFiles() void DataFilesPage::setupConfig() { - QFile config("launcher.cfg"); + QString config = "launcher.cfg"; + QFile file(config); - if (config.exists()) - { - qDebug() << "Using config file from current directory"; - mLauncherConfig = new QSettings("launcher.cfg", QSettings::IniFormat); - } else { - QString path = QString::fromStdString(Files::getPath(Files::Path_ConfigGlobal, - "openmw", - "launcher.cfg")); - qDebug() << "Using global config file from " << path; - mLauncherConfig = new QSettings(path, QSettings::IniFormat); + if (!file.exists()) { + config = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, + "openmw", "launcher.cfg")); } - config.close(); + file.setFileName(config); // Just for displaying information + qDebug() << "Using config file from " << file.fileName(); + file.close(); + + // Open our config file + mLauncherConfig = new QSettings(config, QSettings::IniFormat); mLauncherConfig->beginGroup("Profiles"); QStringList profiles = mLauncherConfig->childGroups(); From 9a218b12c8ca8210b7eccd4ce3596aa7539094f8 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Thu, 28 Apr 2011 23:08:05 +0200 Subject: [PATCH 051/111] Deleted some leftover resource files --- .../images/{openmw_icon.ico => openmw-icon.ico} | Bin apps/launcher/resources/openmw-icon.png | Bin 60039 -> 0 bytes background.png | Bin 50886 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) rename apps/launcher/resources/images/{openmw_icon.ico => openmw-icon.ico} (100%) delete mode 100644 apps/launcher/resources/openmw-icon.png delete mode 100644 background.png diff --git a/apps/launcher/resources/images/openmw_icon.ico b/apps/launcher/resources/images/openmw-icon.ico similarity index 100% rename from apps/launcher/resources/images/openmw_icon.ico rename to apps/launcher/resources/images/openmw-icon.ico diff --git a/apps/launcher/resources/openmw-icon.png b/apps/launcher/resources/openmw-icon.png deleted file mode 100644 index 7a5393821f378970c6ca73788b9141161c9cff09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60039 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 p@Ja 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 diff --git a/background.png b/background.png deleted file mode 100644 index b51a97f94b792eafa1192f715b1eb7aaeff8f2f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50886 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 D#A6l5 From 8256343d77f5c500cff3e6ec982fbc72fa2f9134 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 29 Apr 2011 01:54:20 +0200 Subject: [PATCH 052/111] Masters in the data directory are loaded now, even when they don't have dependent plugins --- apps/launcher/datafilespage.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 2add275cbd..99a8ce7d8e 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -129,21 +129,40 @@ void DataFilesPage::setupDataFiles() mPluginsTable->setContextMenuPolicy(Qt::CustomContextMenu); - // Some testing TODO TODO TODO + // TODO: Add a warning when a master is missing QDir dataFilesDir("data/"); if (!dataFilesDir.exists()) qWarning("Cannot find the plugin directory"); + // First we add all the master files from the plugin dir + dataFilesDir.setNameFilters((QStringList() << "*.esm")); // Only load masters + + QStringList masterFiles = dataFilesDir.entryList(); + + for (int i=0; i itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); + + if (itemList.isEmpty()) // Master is not yet in the widget + { + mMastersWidget->insertRow(i); + QTableWidgetItem *item = new QTableWidgetItem(currentMaster); + mMastersWidget->setItem(i, 0, item); + } + } + + // Now on to the plugins dataFilesDir.setNameFilters((QStringList() << "*.esp")); // Only load plugins - QStringList dataFiles = dataFilesDir.entryList(); + QStringList pluginFiles = dataFilesDir.entryList(); - for (int i=0; i Date: Mon, 2 May 2011 17:46:02 +0200 Subject: [PATCH 053/111] Modified Play page, widgets are now properly centered --- apps/launcher/playpage.cpp | 35 +++++++++++----------------- apps/launcher/resources/launcher.qss | 9 ------- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 8401a0d7dc..773d2d96a6 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -4,51 +4,44 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) { - // TODO: Should be an install path - QFile file("apps/launcher/resources/launcher.qss"); + // Load the stylesheet + QFile file("resources/launcher.qss"); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); setStyleSheet(styleSheet); QGroupBox *playBox = new QGroupBox(this); - playBox->setObjectName("PlayBox"); playBox->setFixedSize(QSize(425, 375)); playBox->setFlat(true); - QVBoxLayout *playLayout = new QVBoxLayout(playBox); - QPushButton *playButton = new QPushButton(tr("Play"), playBox); - playButton->setObjectName("PlayButton"); - //playButton->setMinimumSize(QSize(150, 50)); + playButton->setMinimumSize(QSize(200, 50)); QLabel *profileLabel = new QLabel(tr("Current Profile:"), playBox); - profileLabel->setObjectName("ProfileLabel"); - // TODO: Cleanup mProfilesModel = new QStringListModel(); - mProfilesComboBox = new QComboBox(playBox); - mProfilesComboBox->setObjectName("ProfileComboBox"); - //mProfileComboBox->setMinimumWidth(200); mProfilesComboBox->setModel(mProfilesModel); + QGridLayout *playLayout = new QGridLayout(playBox); + + QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + QSpacerItem *hSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); QSpacerItem *vSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - playLayout->addItem(vSpacer1); - playLayout->addWidget(playButton); - playLayout->addWidget(profileLabel); - playLayout->addWidget(mProfilesComboBox); - playLayout->addItem(vSpacer2); + playLayout->addWidget(playButton, 1, 1, 1, 1); + playLayout->addWidget(profileLabel, 2, 1, 1, 1); + playLayout->addWidget(mProfilesComboBox, 3, 1, 1, 1); + playLayout->addItem(hSpacer1, 2, 0, 1, 1); + playLayout->addItem(hSpacer2, 2, 2, 1, 1); + playLayout->addItem(vSpacer1, 0, 1, 1, 1); + playLayout->addItem(vSpacer2, 4, 1, 1, 1); QHBoxLayout *pageLayout = new QHBoxLayout(this); - QSpacerItem *hSpacer1 = new QSpacerItem(54, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); - QSpacerItem *hSpacer2 = new QSpacerItem(54, 90, QSizePolicy::Expanding, QSizePolicy::Minimum); - pageLayout->addItem(hSpacer1); pageLayout->addWidget(playBox); - pageLayout->addItem(hSpacer2); } \ No newline at end of file diff --git a/apps/launcher/resources/launcher.qss b/apps/launcher/resources/launcher.qss index 9f127c4652..c2c21e461f 100644 --- a/apps/launcher/resources/launcher.qss +++ b/apps/launcher/resources/launcher.qss @@ -2,16 +2,12 @@ QGroupBox { background-image: url(":/images/playpage-background.png"); background-repeat: no-repeat; background-position: top; - padding-top: 100px; padding-left: 30px; padding-right: 30px; - padding-bottom: 100px; } QPushButton { - width: 200px; - max-width: 200px; height: 50px; margin-bottom: 30px; @@ -50,17 +46,12 @@ QPushButton:pressed { QLabel { - margin-left: 90%; font: 14pt "Gauntlet Classic"; } QComboBox { - width: 180px; - max-width: 200px; - height: 20px; - padding: 1px 18px 1px 3px; background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 gray, stop:0.2 white, stop:1 rgba(255, 255, 255, 55)); From 557e659e153c0974fe25997253f95908fb370e4d Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 2 May 2011 20:07:37 +0200 Subject: [PATCH 054/111] CMake modifications, stylesheet gets copied to destination dir now --- apps/launcher/CMakeLists.txt | 8 ++------ apps/launcher/playpage.cpp | 2 +- {apps/launcher/resources => files}/launcher.qss | 0 3 files changed, 3 insertions(+), 7 deletions(-) rename {apps/launcher/resources => files}/launcher.qss (100%) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 00a50679cc..2e4707c63b 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -45,9 +45,5 @@ target_link_libraries(launcher ${QT_LIBRARIES} ) - - -#if (APPLE) -# find_library(CARBON_FRAMEWORK Carbon) -# target_link_libraries(openmw ${CARBON_FRAMEWORK}) -#endif (APPLE) +configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") \ No newline at end of file diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 773d2d96a6..c1ba616c0a 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -5,7 +5,7 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) { // Load the stylesheet - QFile file("resources/launcher.qss"); + QFile file("launcher.qss"); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); diff --git a/apps/launcher/resources/launcher.qss b/files/launcher.qss similarity index 100% rename from apps/launcher/resources/launcher.qss rename to files/launcher.qss From 314bac7862f24d288b1054b8ab7bd6033e22c40e Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 2 May 2011 22:21:42 +0200 Subject: [PATCH 055/111] Preliminary support for new profiles and some other modifications and cleanups --- apps/launcher/CMakeLists.txt | 3 + apps/launcher/datafilespage.cpp | 121 +++++++++++++++++++------------- apps/launcher/datafilespage.hpp | 11 ++- apps/launcher/graphicspage.cpp | 8 +++ apps/launcher/graphicspage.hpp | 14 ++++ apps/launcher/maindialog.cpp | 99 ++++++++++++++------------ apps/launcher/maindialog.hpp | 7 ++ 7 files changed, 169 insertions(+), 94 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 2e4707c63b..db7166af72 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -4,12 +4,14 @@ set(LAUNCHER main.cpp maindialog.cpp playpage.cpp + graphicspage.cpp datafilespage.hpp lineedit.hpp maindialog.hpp playpage.hpp combobox.hpp + graphicspage.hpp ) set(MOC_HDRS @@ -18,6 +20,7 @@ set(MOC_HDRS maindialog.hpp playpage.hpp combobox.hpp + graphicspage.hpp ) find_package(Qt4 REQUIRED) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 99a8ce7d8e..865d39ddd2 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -31,6 +31,32 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mMastersWidget = new QTableWidget(this); // Contains the available masters mPluginsTable = new QTableView(this); + mMastersWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + mMastersWidget->setSelectionMode(QAbstractItemView::MultiSelection); + mMastersWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + mMastersWidget->setAlternatingRowColors(true); + mMastersWidget->horizontalHeader()->setStretchLastSection(true); + mMastersWidget->horizontalHeader()->hide(); + mMastersWidget->verticalHeader()->hide(); + mMastersWidget->insertColumn(0); + + mPluginsTable->setModel(mPluginsModel); + mPluginsTable->setSelectionModel(mPluginsSelectModel); + mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); + mPluginsTable->setSelectionMode(QAbstractItemView::ExtendedSelection); + mPluginsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); + mPluginsTable->setAlternatingRowColors(true); + mPluginsTable->horizontalHeader()->setStretchLastSection(true); + mPluginsTable->horizontalHeader()->hide(); + + mPluginsTable->setDragEnabled(true); + mPluginsTable->setDragDropMode(QAbstractItemView::InternalMove); + mPluginsTable->setDropIndicatorShown(true); + mPluginsTable->setDragDropOverwriteMode(false); + mPluginsTable->viewport()->setAcceptDrops(true); + + mPluginsTable->setContextMenuPolicy(Qt::CustomContextMenu); + // Add both tables to a splitter QSplitter *splitter = new QSplitter(this); splitter->setOrientation(Qt::Horizontal); @@ -46,31 +72,31 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Bottom part with profile options QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); - mProfilesModel = new QStringListModel(); + //mProfilesModel = new QStringListModel(); mProfilesComboBox = new ComboBox(this); - mProfilesComboBox->setModel(mProfilesModel); + //mProfilesComboBox->setModel(mProfilesModel); mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); //mProfileComboBox->addItem(QString("New Profile")); - QToolButton *NewProfileToolButton = new QToolButton(this); - NewProfileToolButton->setIcon(QIcon::fromTheme("document-new")); + mNewProfileButton = new QPushButton(this); + mNewProfileButton->setIcon(QIcon::fromTheme("document-new")); - QToolButton *CopyProfileToolButton = new QToolButton(this); - CopyProfileToolButton->setIcon(QIcon::fromTheme("edit-copy")); + mCopyProfileButton = new QPushButton(this); + mCopyProfileButton->setIcon(QIcon::fromTheme("edit-copy")); - QToolButton *DeleteProfileToolButton = new QToolButton(this); - DeleteProfileToolButton->setIcon(QIcon::fromTheme("document-close")); + mDeleteProfileButton = new QPushButton(this); + mDeleteProfileButton->setIcon(QIcon::fromTheme("document-close")); QHBoxLayout *bottomLayout = new QHBoxLayout(); bottomLayout->addWidget(profileLabel); bottomLayout->addWidget(mProfilesComboBox); - bottomLayout->addWidget(NewProfileToolButton); - bottomLayout->addWidget(CopyProfileToolButton); - bottomLayout->addWidget(DeleteProfileToolButton); + bottomLayout->addWidget(mNewProfileButton); + bottomLayout->addWidget(mCopyProfileButton); + bottomLayout->addWidget(mDeleteProfileButton); QVBoxLayout *pageLayout = new QVBoxLayout(this); // Add some space above and below the page items @@ -95,43 +121,42 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); + connect(mNewProfileButton, SIGNAL(pressed()), this, SLOT(newProfile())); - setupDataFiles(); setupConfig(); } -void DataFilesPage::setupDataFiles() +void DataFilesPage::newProfile() { - mMastersWidget->setSelectionBehavior(QAbstractItemView::SelectRows); - mMastersWidget->setSelectionMode(QAbstractItemView::MultiSelection); - mMastersWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); - mMastersWidget->setAlternatingRowColors(true); - mMastersWidget->horizontalHeader()->setStretchLastSection(true); - mMastersWidget->horizontalHeader()->hide(); - mMastersWidget->verticalHeader()->hide(); - mMastersWidget->insertColumn(0); + bool ok; + QString text = QInputDialog::getText(this, tr("New Profile"), + tr("Profile Name:"), QLineEdit::Normal, + tr("New Profile"), &ok); + if (ok && !text.isEmpty()) { + if (mProfilesComboBox->findText(text) != -1) + { + QMessageBox::warning(this, tr("Profile already exists"), + tr("the profile %0 already exists.").arg(text), + QMessageBox::Ok); + } else { + // Add the new profile to the combobox + mProfilesComboBox->addItem(text); + mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text)); - mPluginsTable->setModel(mPluginsModel); - mPluginsTable->setSelectionModel(mPluginsSelectModel); - mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); - mPluginsTable->setSelectionMode(QAbstractItemView::ExtendedSelection); - mPluginsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); - mPluginsTable->setAlternatingRowColors(true); - mPluginsTable->horizontalHeader()->setStretchLastSection(true); - mPluginsTable->horizontalHeader()->hide(); + } + } - mPluginsTable->setDragEnabled(true); - mPluginsTable->setDragDropMode(QAbstractItemView::InternalMove); - mPluginsTable->setDropIndicatorShown(true); - mPluginsTable->setDragDropOverwriteMode(false); - mPluginsTable->viewport()->setAcceptDrops(true); + //textLabel->setText(text); - mPluginsTable->setContextMenuPolicy(Qt::CustomContextMenu); +} +void DataFilesPage::setupDataFiles(const QString &path) +{ + qDebug() << "setupDataFiles called!"; // TODO: Add a warning when a master is missing - QDir dataFilesDir("data/"); + QDir dataFilesDir(path); if (!dataFilesDir.exists()) qWarning("Cannot find the plugin directory"); @@ -165,8 +190,10 @@ void DataFilesPage::setupDataFiles() QString currentFile = pluginFiles.at(i); QStringList availableMasters; // Will contain all found masters - QString path = QString("data/").append(currentFile); - fileReader.open(path.toStdString()); + QString filePath = dataFilesDir.absolutePath(); + filePath.append("/"); + filePath.append(currentFile); + fileReader.open(filePath.toStdString()); // First we fill the availableMasters and the mMastersWidget ESMReader::MasterList mlist = fileReader.getMasters(); @@ -203,6 +230,8 @@ void DataFilesPage::setupDataFiles() } } } + + readConfig(); } void DataFilesPage::setupConfig() @@ -230,7 +259,8 @@ void DataFilesPage::setupConfig() profiles.append("Default"); } - mProfilesModel->setStringList(profiles); + //mProfilesModel->setStringList(profiles); + mProfilesComboBox->addItems(profiles); QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); if (currentProfile.isEmpty()) { @@ -239,8 +269,6 @@ void DataFilesPage::setupConfig() mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); mLauncherConfig->endGroup(); - - readConfig(); } void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) @@ -419,7 +447,8 @@ void DataFilesPage::profileChanged(const QString &previous, const QString &curre } uncheckPlugins(); - + // Deselect the masters + mMastersWidget->selectionModel()->clearSelection(); readConfig(); } @@ -438,7 +467,6 @@ void DataFilesPage::readConfig() mLauncherConfig->beginGroup(profile); QStringList childKeys = mLauncherConfig->childKeys(); - qDebug() << childKeys << "SJILDKIEJS"; foreach (const QString &key, childKeys) { const QString keyValue = mLauncherConfig->value(key).toString(); @@ -456,7 +484,7 @@ void DataFilesPage::readConfig() if (key.startsWith("Master")) { qDebug() << "Read master: " << keyValue; - QList masterList = mMastersWidget->findItems(keyValue, Qt::MatchExactly); + QList masterList = mMastersWidget->findItems(keyValue, Qt::MatchFixedString); if (!masterList.isEmpty()) { foreach (QTableWidgetItem *currentMaster, masterList) { @@ -486,11 +514,12 @@ void DataFilesPage::writeConfig(QString profile) // Open the profile-name subgroup mLauncherConfig->beginGroup(profile); - mLauncherConfig->remove(""); + mLauncherConfig->remove(""); // Clear the subgroup // First write the masters to the config QList selectedMasters = mMastersWidget->selectedItems(); + // We don't use foreach because we need i for (int i = 0; i < selectedMasters.size(); ++i) { const QTableWidgetItem *item = selectedMasters.at(i); mLauncherConfig->setValue(QString("Master%0").arg(i), item->data(Qt::DisplayRole).toString()); @@ -504,9 +533,7 @@ void DataFilesPage::writeConfig(QString profile) mLauncherConfig->setValue(QString("Plugin%1").arg(i), plugins.at(i)); } - qDebug() << mLauncherConfig->childKeys(); mLauncherConfig->endGroup(); - qDebug() << mLauncherConfig->childKeys(); mLauncherConfig->endGroup(); } diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index c361e6d4de..d9c61cb193 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -13,6 +13,7 @@ class QItemSelection; class QItemSelectionModel; class QStringListModel; class QSettings; +class QPushButton; class DataFilesPage : public QWidget { @@ -22,7 +23,7 @@ public: DataFilesPage(QWidget *parent = 0); ComboBox *mProfilesComboBox; - QStringListModel *mProfilesModel; + //QStringListModel *mProfilesModel; QSettings *mLauncherConfig; const QStringList checkedPlugins(); @@ -30,11 +31,14 @@ public: void readConfig(); void writeConfig(QString profile = QString()); + void setupDataFiles(const QString &path); + public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); void profileChanged(const QString &previous, const QString ¤t); + void newProfile(); private: QTableWidget *mMastersWidget; @@ -45,7 +49,10 @@ private: QItemSelectionModel *mPluginsSelectModel; - void setupDataFiles(); + QPushButton *mNewProfileButton; + QPushButton *mCopyProfileButton; + QPushButton *mDeleteProfileButton; + void addPlugins(const QModelIndex &index); void removePlugins(const QModelIndex &index); void uncheckPlugins(); diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 8b13789179..9276fc3f33 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -1 +1,9 @@ +#include +#include "graphicspage.hpp" + +GraphicsPage::GraphicsPage(QWidget *parent) : QWidget(parent) +{ + + +} \ No newline at end of file diff --git a/apps/launcher/graphicspage.hpp b/apps/launcher/graphicspage.hpp index 8b13789179..5064d1eca9 100644 --- a/apps/launcher/graphicspage.hpp +++ b/apps/launcher/graphicspage.hpp @@ -1 +1,15 @@ +#ifndef GRAPHICSPAGE_H +#define GRAPHICSPAGE_H +#include + +class GraphicsPage : public QWidget +{ + Q_OBJECT + +public: + GraphicsPage(QWidget *parent = 0); + +}; + +#endif diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 669c9e019f..d4f4b15006 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -1,30 +1,28 @@ #include #include +#include + #include "maindialog.hpp" #include "playpage.hpp" +#include "graphicspage.hpp" #include "datafilespage.hpp" MainDialog::MainDialog() { - /* TODO: Should be an install path - QFile file("apps/launcher/resources/launcher.qss"); - - file.open(QFile::ReadOnly); - QString styleSheet = QLatin1String(file.readAll()); - qDebug() << styleSheet; - setStyleSheet(styleSheet);*/ - mIconWidget = new QListWidget; mIconWidget->setViewMode(QListView::IconMode); mIconWidget->setWrapping(false); - mIconWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Just to be sure - - mIconWidget->setIconSize(QSize(48, 48)); mIconWidget->setMovement(QListView::Static); + mIconWidget->setStyleSheet("background-image: url(:/images/openmw-header.png); \ + background-color: white; \ + background-repeat: no-repeat; \ + background-attachment: scroll; \ + background-position: right;"); + mIconWidget->setMinimumWidth(400); mIconWidget->setFixedHeight(80); mIconWidget->setSpacing(4); @@ -33,27 +31,8 @@ MainDialog::MainDialog() QGroupBox *groupBox = new QGroupBox(this); QVBoxLayout *groupLayout = new QVBoxLayout(groupBox); - // TODO: TESTING - - /*mProfileModel = new QStringListModel(); - QStringList profileList; - profileList << "Default" << "Warrior" << "Redemption" << "Cool stuff bro!"; - mProfileModel->setStringList(profileList); - */ - - // Various pages - mPlayPage = new PlayPage(this); - //mPlayPage->mProfileModel->setStringList(profileList); - - mDataFilesPage = new DataFilesPage(this); - //mDataFilesPage->mProfileComboBox->setModel(mProfileModel); mPagesWidget = new QStackedWidget(groupBox); - mPagesWidget->addWidget(mPlayPage); - mPagesWidget->addWidget(new PlayPage); - mPagesWidget->addWidget(mDataFilesPage); - //mPagesWidget->addWidget(new QueryPage); - groupLayout->addWidget(mPagesWidget); QPushButton *playButton = new QPushButton(tr("Play")); @@ -76,46 +55,55 @@ MainDialog::MainDialog() setWindowTitle(tr("OpenMW Launcher")); setMinimumSize(QSize(550, 450)); - createIcons(); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(play())); + + setupConfig(); + createIcons(); + createPages(); } void MainDialog::createIcons() { - //QSize itemSize(80, 66); - QListWidgetItem *configButton = new QListWidgetItem(mIconWidget); configButton->setIcon(QIcon(":/images/openmw-icon.png")); configButton->setText(tr("Play")); configButton->setTextAlignment(Qt::AlignCenter); configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - //configButton->setSizeHint(itemSize); QListWidgetItem *updateButton = new QListWidgetItem(mIconWidget); updateButton->setIcon(QIcon::fromTheme("video-display")); updateButton->setText(tr("Graphics")); updateButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom | Qt::AlignAbsolute); updateButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - //updateButton->setSizeHint(itemSize); - QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); queryButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); queryButton->setText(tr("Data Files")); queryButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - //queryButton->setSizeHint(itemSize); - connect(mIconWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); - connect(mIconWidget, - SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), - this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); +} + +void MainDialog::createPages() +{ + // Various pages + mPlayPage = new PlayPage(this); + mGraphicsPage = new GraphicsPage(this); + mDataFilesPage = new DataFilesPage(this); + + QString dataDir = mGameConfig->value("data").toString(); + mDataFilesPage->setupDataFiles(dataDir); + + // Add the pages to the stacked widget + mPagesWidget->addWidget(mPlayPage); + mPagesWidget->addWidget(mGraphicsPage); + mPagesWidget->addWidget(mDataFilesPage); + } void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) @@ -131,13 +119,13 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) // The user switched from Data Files to Play if (previousPage == QString("Data Files") && currentPage == QString("Play")) { - mPlayPage->mProfilesModel->setStringList(mDataFilesPage->mProfilesModel->stringList()); - mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); + //mPlayPage->mProfilesModel->setStringList(mDataFilesPage->mProfilesModel->stringList()); + //mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); } // The user switched from Play to Data Files if (previousPage == QString("Play") && currentPage == QString("Data Files")) { - mDataFilesPage->mProfilesComboBox->setCurrentIndex(mPlayPage->mProfilesComboBox->currentIndex()); + //mDataFilesPage->mProfilesComboBox->setCurrentIndex(mPlayPage->mProfilesComboBox->currentIndex()); } } @@ -156,3 +144,24 @@ void MainDialog::play() { } + +void MainDialog::setupConfig() +{ + // First we read the OpenMW config + QString config = "openmw.cfg"; + QFile file(config); + + if (!file.exists()) { + config = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, + "openmw", "launcher.cfg")); + } + + file.setFileName(config); // Just for displaying information + qDebug() << "Using config file from " << file.fileName(); + file.close(); + + // Open our config file + mGameConfig = new QSettings(config, QSettings::IniFormat); + + +} diff --git a/apps/launcher/maindialog.hpp b/apps/launcher/maindialog.hpp index 520964c37a..430abd9ca2 100644 --- a/apps/launcher/maindialog.hpp +++ b/apps/launcher/maindialog.hpp @@ -7,8 +7,10 @@ class QListWidget; class QListWidgetItem; class QStackedWidget; class QStringListModel; +class QSettings; class PlayPage; +class GraphicsPage; class DataFilesPage; class MainDialog : public QDialog @@ -27,13 +29,18 @@ public slots: private: void createIcons(); + void createPages(); + void setupConfig(); void closeEvent(QCloseEvent *event); QListWidget *mIconWidget; QStackedWidget *mPagesWidget; PlayPage *mPlayPage; + GraphicsPage *mGraphicsPage; DataFilesPage *mDataFilesPage; + + QSettings *mGameConfig; }; #endif From 2e058409bd20a564225fba395d433025285e60ed Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 2 May 2011 23:06:11 +0200 Subject: [PATCH 056/111] Fixed problem with profile writeout --- apps/launcher/datafilespage.cpp | 41 +++++++++++++++++++++++++++++---- apps/launcher/datafilespage.hpp | 1 + 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 865d39ddd2..785c3d21ba 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -136,7 +136,7 @@ void DataFilesPage::newProfile() if (mProfilesComboBox->findText(text) != -1) { QMessageBox::warning(this, tr("Profile already exists"), - tr("the profile %0 already exists.").arg(text), + tr("the profile %0 already exists.").arg(text), QMessageBox::Ok); } else { // Add the new profile to the combobox @@ -147,8 +147,18 @@ void DataFilesPage::newProfile() } - //textLabel->setText(text); +} +void DataFilesPage::deleteProfile() +{ + QString profile = mProfilesComboBox->currentText(); + + + if (!profile.isEmpty()) { + QMessageBox::warning(this, tr("Delete profile"), + tr("Are you sure you want to remove %0.").arg(profile), + QMessageBox::Ok); + } } void DataFilesPage::setupDataFiles(const QString &path) @@ -236,6 +246,7 @@ void DataFilesPage::setupDataFiles(const QString &path) void DataFilesPage::setupConfig() { + qDebug() << "setupConfig called"; QString config = "launcher.cfg"; QFile file(config); @@ -246,24 +257,38 @@ void DataFilesPage::setupConfig() file.setFileName(config); // Just for displaying information qDebug() << "Using config file from " << file.fileName(); + file.open(QIODevice::ReadOnly); + qDebug() << "File contents:" << file.readAll(); file.close(); // Open our config file mLauncherConfig = new QSettings(config, QSettings::IniFormat); + mLauncherConfig->sync(); + + + // Make sure we have no groups open + while (!mLauncherConfig->group().isEmpty()) { + mLauncherConfig->endGroup(); + } mLauncherConfig->beginGroup("Profiles"); QStringList profiles = mLauncherConfig->childGroups(); - if (profiles.isEmpty()) { + /*if (profiles.isEmpty()) { // Add a default profile profiles.append("Default"); - } + }*/ //mProfilesModel->setStringList(profiles); mProfilesComboBox->addItems(profiles); QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); + + qDebug() << mLauncherConfig->value("CurrentProfile").toString(); + qDebug() << mLauncherConfig->childGroups(); + if (currentProfile.isEmpty()) { + qDebug() << "No current profile selected"; currentProfile = "Default"; } mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); @@ -440,6 +465,9 @@ void DataFilesPage::profileChanged(const QString &previous, const QString &curre { qDebug() << "Profile changed " << current << previous; + //if (previous.isEmpty()) { + // return; + //} // Just to be sure if (!previous.isEmpty()) { writeConfig(previous); @@ -502,6 +530,10 @@ void DataFilesPage::writeConfig(QString profile) profile = mProfilesComboBox->currentText(); } + if (profile.isEmpty()) { + return; + } + qDebug() << "Writing: " << profile; // Make sure we have no groups open @@ -513,6 +545,7 @@ void DataFilesPage::writeConfig(QString profile) mLauncherConfig->setValue("CurrentProfile", profile); // Open the profile-name subgroup + qDebug() << "beginning group: " << profile; mLauncherConfig->beginGroup(profile); mLauncherConfig->remove(""); // Clear the subgroup diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index d9c61cb193..2d91cf3293 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -39,6 +39,7 @@ public slots: void resizeRows(); void profileChanged(const QString &previous, const QString ¤t); void newProfile(); + void deleteProfile(); private: QTableWidget *mMastersWidget; From ba3e4330f27c1f83dd4d05e8e7b678687b2d1cb6 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 00:36:20 +0200 Subject: [PATCH 057/111] Changed the way the masters get retrieved in masterSelectionChanged --- apps/launcher/datafilespage.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 785c3d21ba..428d163fa3 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -298,16 +298,16 @@ void DataFilesPage::setupConfig() void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { - // TODO: Use mMasterWidget->selectedItems if (mMastersWidget->selectionModel()->hasSelection()) { - const QModelIndexList selectedIndexes = mMastersWidget->selectionModel()->selectedIndexes(); QStringList masters; QString masterstr; // Create a QStringList containing all the masters - foreach (const QModelIndex &index, selectedIndexes) { - masters.append(index.data().toString()); + const QList selectedMasters = mMastersWidget->selectedItems(); + + foreach (const QTableWidgetItem *item, selectedMasters) { + masters.append(item->data(Qt::DisplayRole).toString()); } masters.sort(); @@ -465,10 +465,6 @@ void DataFilesPage::profileChanged(const QString &previous, const QString &curre { qDebug() << "Profile changed " << current << previous; - //if (previous.isEmpty()) { - // return; - //} - // Just to be sure if (!previous.isEmpty()) { writeConfig(previous); mLauncherConfig->sync(); From ee4a2d0a8d0e7bcfdbfbbd2474d102eb16cc1bf7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 00:43:44 +0200 Subject: [PATCH 058/111] Fixed a problem with the currentprofile not being set in the combobox --- apps/launcher/datafilespage.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 428d163fa3..30fc7e8ad1 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -119,7 +119,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); - connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); + connect(mNewProfileButton, SIGNAL(pressed()), this, SLOT(newProfile())); @@ -274,10 +274,10 @@ void DataFilesPage::setupConfig() mLauncherConfig->beginGroup("Profiles"); QStringList profiles = mLauncherConfig->childGroups(); - /*if (profiles.isEmpty()) { + if (profiles.isEmpty()) { // Add a default profile profiles.append("Default"); - }*/ + } //mProfilesModel->setStringList(profiles); mProfilesComboBox->addItems(profiles); @@ -294,6 +294,10 @@ void DataFilesPage::setupConfig() mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); mLauncherConfig->endGroup(); + + // Now we connect the combobox to do something if the profile changes + // This prevents strange behaviour while reading and appending the profiles + connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); } void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) @@ -341,7 +345,7 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QString master = currentIndex.data().toString(); master.prepend("*"); master.append("*"); - QList itemList = mDataFilesModel->findItems(master, Qt::MatchWildcard); + const QList itemList = mDataFilesModel->findItems(master, Qt::MatchWildcard); if (itemList.isEmpty()) qDebug() << "Empty as shit"; From 9e852a36bf61e5d81c9335706c0be1514e9954d0 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 00:47:12 +0200 Subject: [PATCH 059/111] Changed all QList<> to const --- apps/launcher/datafilespage.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 30fc7e8ad1..1fa93962ac 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -179,7 +179,7 @@ void DataFilesPage::setupDataFiles(const QString &path) for (int i=0; i itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); + const QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); if (itemList.isEmpty()) // Master is not yet in the widget { @@ -212,7 +212,7 @@ void DataFilesPage::setupDataFiles(const QString &path) const QString currentMaster = QString::fromStdString(mlist[i].name); availableMasters.append(currentMaster); - QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); + const QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); if (itemList.isEmpty()) // Master is not yet in the widget { @@ -228,7 +228,7 @@ void DataFilesPage::setupDataFiles(const QString &path) QStandardItem *parent = new QStandardItem(availableMasters.join(",")); QStandardItem *child = new QStandardItem(currentFile); - QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); + const QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); if (masterList.isEmpty()) { // Masters node not yet in the mDataFilesModel parent->appendRow(child); @@ -279,7 +279,6 @@ void DataFilesPage::setupConfig() profiles.append("Default"); } - //mProfilesModel->setStringList(profiles); mProfilesComboBox->addItems(profiles); QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); @@ -375,7 +374,7 @@ void DataFilesPage::addPlugins(const QModelIndex &index) // Now we see if the pluginsmodel already contains this plugin const QString childIndexData = QVariant(mDataFilesModel->data(childIndex)).toString(); - QList itemList = mPluginsModel->findItems(childIndexData); + const QList itemList = mPluginsModel->findItems(childIndexData); if (itemList.isEmpty()) { @@ -401,7 +400,7 @@ void DataFilesPage::removePlugins(const QModelIndex &index) for (int r=0; rrowCount(index); ++r) { QModelIndex childIndex = index.child(r, 0); - QList itemList = mPluginsModel->findItems(QVariant(childIndex.data()).toString()); + const QList itemList = mPluginsModel->findItems(QVariant(childIndex.data()).toString()); if (!itemList.isEmpty()) { foreach (const QStandardItem *currentItem, itemList) { @@ -500,7 +499,7 @@ void DataFilesPage::readConfig() const QString keyValue = mLauncherConfig->value(key).toString(); if (key.startsWith("Plugin")) { - QList pluginList = mPluginsModel->findItems(keyValue); + const QList pluginList = mPluginsModel->findItems(keyValue); if (!pluginList.isEmpty()) { @@ -512,7 +511,7 @@ void DataFilesPage::readConfig() if (key.startsWith("Master")) { qDebug() << "Read master: " << keyValue; - QList masterList = mMastersWidget->findItems(keyValue, Qt::MatchFixedString); + const QList masterList = mMastersWidget->findItems(keyValue, Qt::MatchFixedString); if (!masterList.isEmpty()) { foreach (QTableWidgetItem *currentMaster, masterList) { @@ -550,7 +549,7 @@ void DataFilesPage::writeConfig(QString profile) mLauncherConfig->remove(""); // Clear the subgroup // First write the masters to the config - QList selectedMasters = mMastersWidget->selectedItems(); + const QList selectedMasters = mMastersWidget->selectedItems(); // We don't use foreach because we need i for (int i = 0; i < selectedMasters.size(); ++i) { From 4dbdc1cb26809a569883b1685819ee9d632fdef1 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 01:13:40 +0200 Subject: [PATCH 060/111] Implemented copy and delete profile functions --- apps/launcher/datafilespage.cpp | 70 +++++++++++++++++++++++++++++++-- apps/launcher/datafilespage.hpp | 1 + 2 files changed, 67 insertions(+), 4 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 1fa93962ac..06e9ff3f8a 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -83,12 +83,14 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mNewProfileButton = new QPushButton(this); mNewProfileButton->setIcon(QIcon::fromTheme("document-new")); + mNewProfileButton->setShortcut(QKeySequence(tr("Ctrl+N"))); mCopyProfileButton = new QPushButton(this); mCopyProfileButton->setIcon(QIcon::fromTheme("edit-copy")); mDeleteProfileButton = new QPushButton(this); mDeleteProfileButton->setIcon(QIcon::fromTheme("document-close")); + mDeleteProfileButton->setShortcut(QKeySequence(tr("Delete"))); QHBoxLayout *bottomLayout = new QHBoxLayout(); @@ -122,6 +124,8 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(mNewProfileButton, SIGNAL(pressed()), this, SLOT(newProfile())); + connect(mCopyProfileButton, SIGNAL(pressed()), this, SLOT(copyProfile())); + connect(mDeleteProfileButton, SIGNAL(pressed()), this, SLOT(deleteProfile())); setupConfig(); } @@ -149,15 +153,73 @@ void DataFilesPage::newProfile() } +void DataFilesPage::copyProfile() +{ + QString profile = mProfilesComboBox->currentText(); + bool ok; + + QString text = QInputDialog::getText(this, tr("Copy Profile"), + tr("Profile Name:"), QLineEdit::Normal, + tr("%0 Copy").arg(profile), &ok); + if (ok && !text.isEmpty()) { + if (mProfilesComboBox->findText(text) != -1) + { + QMessageBox::warning(this, tr("Profile already exists"), + tr("the profile %0 already exists.").arg(text), + QMessageBox::Ok); + } else { + // Add the new profile to the combobox + mProfilesComboBox->addItem(text); + + // First write the current profile as the new profile + writeConfig(text); + mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text)); + + } + + } + +} + void DataFilesPage::deleteProfile() { QString profile = mProfilesComboBox->currentText(); - if (!profile.isEmpty()) { - QMessageBox::warning(this, tr("Delete profile"), - tr("Are you sure you want to remove %0.").arg(profile), - QMessageBox::Ok); + if (profile.isEmpty()) { + return; + } + + QMessageBox deleteMessageBox(this); + deleteMessageBox.setWindowTitle(tr("Delete Profile")); + deleteMessageBox.setText(tr("Are you sure you want to delete %0?").arg(profile)); + deleteMessageBox.setIcon(QMessageBox::Warning); + QAbstractButton *deleteButton = + deleteMessageBox.addButton(tr("Delete"), QMessageBox::ActionRole); + + deleteMessageBox.addButton(QMessageBox::Cancel); + + deleteMessageBox.exec(); + + if (deleteMessageBox.clickedButton() == deleteButton) { + + qDebug() << "Delete profile " << profile; + + // Make sure we have no groups open + while (!mLauncherConfig->group().isEmpty()) { + mLauncherConfig->endGroup(); + } + + mLauncherConfig->beginGroup("Profiles"); + + // Open the profile-name subgroup + mLauncherConfig->beginGroup(profile); + mLauncherConfig->remove(""); // Clear the subgroup + mLauncherConfig->endGroup(); + mLauncherConfig->endGroup(); + + // Remove the profile from the combobox + mProfilesComboBox->removeItem(mProfilesComboBox->findText(profile)); } } diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 2d91cf3293..2aebc01605 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -39,6 +39,7 @@ public slots: void resizeRows(); void profileChanged(const QString &previous, const QString ¤t); void newProfile(); + void copyProfile(); void deleteProfile(); private: From a68be84b7f85faf033691faaa4c27eccb1825eb7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 01:23:35 +0200 Subject: [PATCH 061/111] Re-implemented the profile combobox on the Play page --- apps/launcher/maindialog.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index d4f4b15006..d0ca35b611 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -99,6 +99,10 @@ void MainDialog::createPages() QString dataDir = mGameConfig->value("data").toString(); mDataFilesPage->setupDataFiles(dataDir); + // Set the combobox of the play page to imitate the comobox on the datafilespage + mPlayPage->mProfilesComboBox->setModel(mDataFilesPage->mProfilesComboBox->model()); + mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); + // Add the pages to the stacked widget mPagesWidget->addWidget(mPlayPage); mPagesWidget->addWidget(mGraphicsPage); @@ -119,13 +123,13 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) // The user switched from Data Files to Play if (previousPage == QString("Data Files") && currentPage == QString("Play")) { - //mPlayPage->mProfilesModel->setStringList(mDataFilesPage->mProfilesModel->stringList()); - //mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); + mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); + } // The user switched from Play to Data Files if (previousPage == QString("Play") && currentPage == QString("Data Files")) { - //mDataFilesPage->mProfilesComboBox->setCurrentIndex(mPlayPage->mProfilesComboBox->currentIndex()); + mDataFilesPage->mProfilesComboBox->setCurrentIndex(mPlayPage->mProfilesComboBox->currentIndex()); } } From 7bf21262a10d17f55911895430b2f001a97fd1e0 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 02:01:25 +0200 Subject: [PATCH 062/111] Plugins and masters from the current profile are written to openmw.cfg now --- apps/launcher/datafilespage.cpp | 26 ++++++++++++----- apps/launcher/datafilespage.hpp | 1 + apps/launcher/maindialog.cpp | 52 +++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 06e9ff3f8a..fa8375f3d8 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -369,10 +369,10 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QString masterstr; // Create a QStringList containing all the masters - const QList selectedMasters = mMastersWidget->selectedItems(); + const QStringList masterList = selectedMasters(); - foreach (const QTableWidgetItem *item, selectedMasters) { - masters.append(item->data(Qt::DisplayRole).toString()); + foreach (const QString ¤tMaster, masterList) { + masters.append(currentMaster); } masters.sort(); @@ -488,6 +488,18 @@ void DataFilesPage::setCheckstate(QModelIndex index) } } +const QStringList DataFilesPage::selectedMasters() +{ + QStringList masters; + const QList selectedMasters = mMastersWidget->selectedItems(); + + foreach (const QTableWidgetItem *item, selectedMasters) { + masters.append(item->data(Qt::DisplayRole).toString()); + } + + return masters; +} + const QStringList DataFilesPage::checkedPlugins() { QStringList checkedItems; @@ -611,12 +623,12 @@ void DataFilesPage::writeConfig(QString profile) mLauncherConfig->remove(""); // Clear the subgroup // First write the masters to the config - const QList selectedMasters = mMastersWidget->selectedItems(); + const QStringList masterList = selectedMasters(); // We don't use foreach because we need i - for (int i = 0; i < selectedMasters.size(); ++i) { - const QTableWidgetItem *item = selectedMasters.at(i); - mLauncherConfig->setValue(QString("Master%0").arg(i), item->data(Qt::DisplayRole).toString()); + for (int i = 0; i < masterList.size(); ++i) { + const QString master = masterList.at(i); + mLauncherConfig->setValue(QString("Master%0").arg(i), master); } // Now write all checked plugins diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 2aebc01605..9127797acb 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -27,6 +27,7 @@ public: QSettings *mLauncherConfig; const QStringList checkedPlugins(); + const QStringList selectedMasters(); void setupConfig(); void readConfig(); void writeConfig(QString profile = QString()); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index d0ca35b611..464dca03a4 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -140,6 +140,58 @@ void MainDialog::closeEvent(QCloseEvent *event) qDebug() << "Close event"; mDataFilesPage->writeConfig(); mDataFilesPage->mLauncherConfig->sync(); + + // Write to the openmw.cfg + QString dataPath = mGameConfig->value("data").toString(); + dataPath.append("/"); + + QStringList dataFiles = mDataFilesPage->selectedMasters(); + dataFiles.append(mDataFilesPage->checkedPlugins()); + + qDebug() << "Writing to openmw.cfg"; + + // Open the config as a QFile + QFile file(mGameConfig->fileName()); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + // File cannot be opened or created TODO: throw error + } + + QTextStream in(&file); + QByteArray buffer; + + // Remove all previous master/plugin entries from config + while (!in.atEnd()) { + QString line = in.readLine(); + if (!line.contains("master") && !line.contains("plugin")) { + buffer += line += "\n"; + } + } + + file.close(); + + // Now we write back the other config entries + if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { + // File cannot be opened or created TODO: throw error + } + + file.write(buffer); + QTextStream out(&file); + + // Write the list of game files to the config + foreach (const QString ¤tFile, dataFiles) { + QFileInfo dataFile = QFileInfo(QString(currentFile).prepend(dataPath)); + + if (dataFile.exists()) { + if (currentFile.endsWith(QString(".esm"), Qt::CaseInsensitive)) { + out << "master=" << currentFile << endl; + } else if (currentFile.endsWith(QString(".esp"), Qt::CaseInsensitive)) { + out << "plugin=" << currentFile << endl; + } + } + } + + + file.close(); event->accept(); } From 2b0dabe6696fdb04d4c37a938f2964d528015d55 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 02:46:46 +0200 Subject: [PATCH 063/111] Changed profile switching again; Some stylesheet modifications --- apps/launcher/maindialog.cpp | 108 ++++++++++++++++++++--------------- apps/launcher/maindialog.hpp | 2 + files/launcher.qss | 18 ++---- 3 files changed, 69 insertions(+), 59 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 464dca03a4..d9629d6581 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -108,6 +108,34 @@ void MainDialog::createPages() mPagesWidget->addWidget(mGraphicsPage); mPagesWidget->addWidget(mDataFilesPage); + // Select the first page + mIconWidget->setCurrentItem(mIconWidget->item(0), QItemSelectionModel::Select); + + connect(mPlayPage->mProfilesComboBox, + SIGNAL(currentIndexChanged(int)), + this, SLOT(profileChanged(int))); + + connect(mDataFilesPage->mProfilesComboBox, + SIGNAL(currentIndexChanged(int)), + this, SLOT(profileChanged(int))); + +} + +void MainDialog::profileChanged(int index) +{ + // Just to be sure, should always have a selection + if (!mIconWidget->selectionModel()->hasSelection()) { + return; + } + + QString currentPage = mIconWidget->currentItem()->data(Qt::DisplayRole).toString(); + if (currentPage == QString("Play")) { + mDataFilesPage->mProfilesComboBox->setCurrentIndex(index); + } + + if (currentPage == QString("Data Files")) { + mPlayPage->mProfilesComboBox->setCurrentIndex(index); + } } void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) @@ -116,23 +144,6 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) current = previous; mPagesWidget->setCurrentIndex(mIconWidget->row(current)); - - if (previous) { - QString previousPage = previous->data(Qt::DisplayRole).toString(); - QString currentPage = current->data(Qt::DisplayRole).toString(); - - // The user switched from Data Files to Play - if (previousPage == QString("Data Files") && currentPage == QString("Play")) { - mPlayPage->mProfilesComboBox->setCurrentIndex(mDataFilesPage->mProfilesComboBox->currentIndex()); - - } - - // The user switched from Play to Data Files - if (previousPage == QString("Play") && currentPage == QString("Data Files")) { - mDataFilesPage->mProfilesComboBox->setCurrentIndex(mPlayPage->mProfilesComboBox->currentIndex()); - } - } - } void MainDialog::closeEvent(QCloseEvent *event) @@ -141,6 +152,38 @@ void MainDialog::closeEvent(QCloseEvent *event) mDataFilesPage->writeConfig(); mDataFilesPage->mLauncherConfig->sync(); + // Now write to the game config + writeConfig(); + event->accept(); + +} + +void MainDialog::play() +{ + +} + +void MainDialog::setupConfig() +{ + // First we read the OpenMW config + QString config = "openmw.cfg"; + QFile file(config); + + if (!file.exists()) { + config = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, + "openmw", "launcher.cfg")); + } + + file.setFileName(config); // Just for displaying information + qDebug() << "Using config file from " << file.fileName(); + file.close(); + + // Open our config file + mGameConfig = new QSettings(config, QSettings::IniFormat); +} + +void MainDialog::writeConfig() +{ // Write to the openmw.cfg QString dataPath = mGameConfig->value("data").toString(); dataPath.append("/"); @@ -171,7 +214,7 @@ void MainDialog::closeEvent(QCloseEvent *event) // Now we write back the other config entries if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { - // File cannot be opened or created TODO: throw error + // File cannot be opened or created TODO: throw error } file.write(buffer); @@ -190,34 +233,5 @@ void MainDialog::closeEvent(QCloseEvent *event) } } - file.close(); - event->accept(); - -} - -void MainDialog::play() -{ - -} - -void MainDialog::setupConfig() -{ - // First we read the OpenMW config - QString config = "openmw.cfg"; - QFile file(config); - - if (!file.exists()) { - config = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, - "openmw", "launcher.cfg")); - } - - file.setFileName(config); // Just for displaying information - qDebug() << "Using config file from " << file.fileName(); - file.close(); - - // Open our config file - mGameConfig = new QSettings(config, QSettings::IniFormat); - - } diff --git a/apps/launcher/maindialog.hpp b/apps/launcher/maindialog.hpp index 430abd9ca2..3af217e160 100644 --- a/apps/launcher/maindialog.hpp +++ b/apps/launcher/maindialog.hpp @@ -25,12 +25,14 @@ public: public slots: void changePage(QListWidgetItem *current, QListWidgetItem *previous); void play(); + void profileChanged(int index); private: void createIcons(); void createPages(); void setupConfig(); + void writeConfig(); void closeEvent(QCloseEvent *event); QListWidget *mIconWidget; diff --git a/files/launcher.qss b/files/launcher.qss index c2c21e461f..2866f858e0 100644 --- a/files/launcher.qss +++ b/files/launcher.qss @@ -20,7 +20,7 @@ QPushButton { stop:0.9 rgba(0, 0, 0, 55), stop:1 rgba(0, 0, 0, 100)); - font: 24pt "Gauntlet Thin"; + font: 24pt "FreeMono"; color: black; border-right: 1px solid rgba(0, 0, 0, 155); @@ -46,7 +46,7 @@ QPushButton:pressed { QLabel { - font: 14pt "Gauntlet Classic"; + font: 14pt "FreeMono"; } @@ -54,19 +54,17 @@ QComboBox { padding: 1px 18px 1px 3px; - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 gray, stop:0.2 white, stop:1 rgba(255, 255, 255, 55)); + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 white, stop:0.2 rgba(0, 0, 0, 25), stop:1 rgba(255, 255, 255, 200)); border-width: 1px; border-color: rgba(0, 0, 0, 125); border-style: solid; border-radius: 2px; } -/* QComboBox gets the "on" state when the popup is open * / +/*QComboBox gets the "on" state when the popup is open */ QComboBox:!editable:on, QComboBox::drop-down:editable:on { - background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #D3D3D3, stop: 0.4 #D8D8D8, - stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1); -}*/ + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 gray, stop:0.2 white); +} QComboBox { /* shift the text when the popup opens */ @@ -102,7 +100,3 @@ QListWidget { background-attachment: scroll; background-position: right; } - -QListWidgetItem { - alignment: center; -} From c42f99a586ba7c84f0aad98658f6e867fcc73b41 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 03:17:01 +0200 Subject: [PATCH 064/111] Implemented starting the game by pressing either the big play button or the dialog play button --- apps/launcher/maindialog.cpp | 26 ++++++++++++++++++++++++++ apps/launcher/playpage.cpp | 8 +++----- apps/launcher/playpage.hpp | 5 +++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index d9629d6581..7fa73e6a2d 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -111,6 +111,8 @@ void MainDialog::createPages() // Select the first page mIconWidget->setCurrentItem(mIconWidget->item(0), QItemSelectionModel::Select); + connect(mPlayPage->mPlayButton, SIGNAL(clicked()), this, SLOT(play())); + connect(mPlayPage->mProfilesComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(profileChanged(int))); @@ -161,6 +163,30 @@ void MainDialog::closeEvent(QCloseEvent *event) void MainDialog::play() { +#if Q_WS_WIN + // Windows TODO: proper install path handling + QString game = "./openmw.exe"; + QFile file(game); +# else + QString game = "./openmw"; + QFile file(game); +#endif + + QProcess process; + + if (!file.exists()) { + // TODO: Throw error! + qDebug() << "Could not start process"; + return; + } + + if(!process.startDetached(game)) { + // TODO: Throw error!; + qDebug() << "Could not start process"; + qDebug() << "reason was:" << process.errorString(); + } else { + close(); + } } void MainDialog::setupConfig() diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index c1ba616c0a..5f9949eb6f 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -15,14 +15,12 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) playBox->setFixedSize(QSize(425, 375)); playBox->setFlat(true); - QPushButton *playButton = new QPushButton(tr("Play"), playBox); - playButton->setMinimumSize(QSize(200, 50)); + mPlayButton = new QPushButton(tr("Play"), playBox); + mPlayButton->setMinimumSize(QSize(200, 50)); QLabel *profileLabel = new QLabel(tr("Current Profile:"), playBox); - mProfilesModel = new QStringListModel(); mProfilesComboBox = new QComboBox(playBox); - mProfilesComboBox->setModel(mProfilesModel); QGridLayout *playLayout = new QGridLayout(playBox); @@ -32,7 +30,7 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); QSpacerItem *vSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - playLayout->addWidget(playButton, 1, 1, 1, 1); + playLayout->addWidget(mPlayButton, 1, 1, 1, 1); playLayout->addWidget(profileLabel, 2, 1, 1, 1); playLayout->addWidget(mProfilesComboBox, 3, 1, 1, 1); playLayout->addItem(hSpacer1, 2, 0, 1, 1); diff --git a/apps/launcher/playpage.hpp b/apps/launcher/playpage.hpp index 21db7b0f14..efec6f2b38 100644 --- a/apps/launcher/playpage.hpp +++ b/apps/launcher/playpage.hpp @@ -4,7 +4,7 @@ #include class QComboBox; -class QStringListModel; +class QPushButton; class PlayPage : public QWidget { @@ -14,7 +14,8 @@ public: PlayPage(QWidget *parent = 0); QComboBox *mProfilesComboBox; - QStringListModel *mProfilesModel; + QPushButton *mPlayButton; + }; #endif \ No newline at end of file From 2131452fac11eaddf6ed0047dbca6f6ebb6f45bd Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 15:09:21 +0200 Subject: [PATCH 065/111] Fixed file loading problem with relative paths when launcher wasn't run from cmdline --- apps/launcher/datafilespage.cpp | 2 +- apps/launcher/main.cpp | 19 +++++++++++++++++ apps/launcher/maindialog.cpp | 36 ++++++++++++++++++++------------- apps/launcher/playpage.cpp | 2 +- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index fa8375f3d8..e4c20d1a33 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -309,7 +309,7 @@ void DataFilesPage::setupDataFiles(const QString &path) void DataFilesPage::setupConfig() { qDebug() << "setupConfig called"; - QString config = "launcher.cfg"; + QString config = "./launcher.cfg"; QFile file(config); if (!file.exists()) { diff --git a/apps/launcher/main.cpp b/apps/launcher/main.cpp index 870d16f4c8..d008c3a483 100644 --- a/apps/launcher/main.cpp +++ b/apps/launcher/main.cpp @@ -1,4 +1,5 @@ #include +#include #include "maindialog.hpp" @@ -6,6 +7,24 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); + // Now we make sure the current dir is set to application path + QDir dir(QCoreApplication::applicationDirPath()); +#if defined(Q_OS_WIN) + if (dir.dirName().toLower() == "debug" || + dir.dirName().toLower() == "release") + { + dir.cdUp(); + } +#elif defined(Q_OS_MAC) + if (dir.dirName() == "MacOS") + { + dir.cdUp(); + dir.cdUp(); + dir.cdUp(); + } +#endif + + QDir::setCurrent(dir.absolutePath()); MainDialog dialog; return dialog.exec(); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 7fa73e6a2d..903cbe4573 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -151,10 +151,8 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) void MainDialog::closeEvent(QCloseEvent *event) { qDebug() << "Close event"; - mDataFilesPage->writeConfig(); - mDataFilesPage->mLauncherConfig->sync(); - // Now write to the game config + // Now write all config files writeConfig(); event->accept(); @@ -162,6 +160,8 @@ void MainDialog::closeEvent(QCloseEvent *event) void MainDialog::play() { + // First do a write of all the configs, just to be sure + writeConfig(); #if Q_WS_WIN // Windows TODO: proper install path handling @@ -192,7 +192,7 @@ void MainDialog::play() void MainDialog::setupConfig() { // First we read the OpenMW config - QString config = "openmw.cfg"; + QString config = "./openmw.cfg"; QFile file(config); if (!file.exists()) { @@ -210,9 +210,13 @@ void MainDialog::setupConfig() void MainDialog::writeConfig() { + // Write the profiles + mDataFilesPage->writeConfig(); + mDataFilesPage->mLauncherConfig->sync(); + // Write to the openmw.cfg - QString dataPath = mGameConfig->value("data").toString(); - dataPath.append("/"); + //QString dataPath = mGameConfig->value("data").toString(); + //dataPath.append("/"); QStringList dataFiles = mDataFilesPage->selectedMasters(); dataFiles.append(mDataFilesPage->checkedPlugins()); @@ -220,7 +224,10 @@ void MainDialog::writeConfig() qDebug() << "Writing to openmw.cfg"; // Open the config as a QFile - QFile file(mGameConfig->fileName()); + + QString cfgfile = "./openmw.cfg"; + + QFile file(cfgfile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // File cannot be opened or created TODO: throw error } @@ -248,16 +255,17 @@ void MainDialog::writeConfig() // Write the list of game files to the config foreach (const QString ¤tFile, dataFiles) { - QFileInfo dataFile = QFileInfo(QString(currentFile).prepend(dataPath)); + //QFileInfo dataFile = QFileInfo(QString(currentFile).prepend(dataPath)); - if (dataFile.exists()) { - if (currentFile.endsWith(QString(".esm"), Qt::CaseInsensitive)) { - out << "master=" << currentFile << endl; - } else if (currentFile.endsWith(QString(".esp"), Qt::CaseInsensitive)) { - out << "plugin=" << currentFile << endl; - } + //if (dataFile.exists()) { + if (currentFile.endsWith(QString(".esm"), Qt::CaseInsensitive)) { + out << "master=" << currentFile << endl; + } else if (currentFile.endsWith(QString(".esp"), Qt::CaseInsensitive)) { + out << "plugin=" << currentFile << endl; } + //} } file.close(); + qDebug() << "Writing done!"; } diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 5f9949eb6f..27e2f08bba 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -5,7 +5,7 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) { // Load the stylesheet - QFile file("launcher.qss"); + QFile file("./launcher.qss"); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); From dbd37a6d58a7a01b5d4ab5266774edacb12ab46f Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 16:16:53 +0200 Subject: [PATCH 066/111] Added messageboxes for game execution errors --- apps/launcher/maindialog.cpp | 41 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 903cbe4573..dcef48c982 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -173,17 +173,46 @@ void MainDialog::play() #endif QProcess process; + QFileInfo info(file); if (!file.exists()) { - // TODO: Throw error! - qDebug() << "Could not start process"; + QMessageBox msgBox; + msgBox.setWindowTitle("Error starting OpenMW"); + msgBox.setIcon(QMessageBox::Warning); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not find OpenMW

\ + The OpenMW application is not found.
\ + Please make sure OpenMW is installed and try again.
")); + msgBox.exec(); + return; } - if(!process.startDetached(game)) { - // TODO: Throw error!; - qDebug() << "Could not start process"; - qDebug() << "reason was:" << process.errorString(); + if (!info.isExecutable()) { + QMessageBox msgBox; + msgBox.setWindowTitle("Error starting OpenMW"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not start OpenMW

\ + The OpenMW application is not executable.
\ + Please make sure you have the right permissions and try again.
")); + msgBox.exec(); + + return; + } + + if (!process.startDetached(game)) { + QMessageBox msgBox; + msgBox.setWindowTitle("Error starting OpenMW"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not start OpenMW

\ + An error occurred while starting OpenMW.

\ + Press \"Show Details...\" for more information.
")); + msgBox.setDetailedText(process.errorString()); + msgBox.exec(); + + return; } else { close(); } From 0ff068817ec2df6e73155dd9ed0cfa18143b92df Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 3 May 2011 16:26:22 +0200 Subject: [PATCH 067/111] Fixed icon and changed minimumsize --- apps/launcher/launcher.pro | 1 + apps/launcher/launcher.rc | 2 +- apps/launcher/maindialog.cpp | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/launcher/launcher.pro b/apps/launcher/launcher.pro index 2df51bb654..5c05dcb90c 100644 --- a/apps/launcher/launcher.pro +++ b/apps/launcher/launcher.pro @@ -20,3 +20,4 @@ SOURCES += datafilespage.cpp \ qrc_resources.cxx RESOURCES += resources.qrc +RC_FILE = launcher.rc diff --git a/apps/launcher/launcher.rc b/apps/launcher/launcher.rc index 3d22c74fc9..c369a5b061 100644 --- a/apps/launcher/launcher.rc +++ b/apps/launcher/launcher.rc @@ -1 +1 @@ -IDI_ICON1 ICON DISCARDABLE "resources/openmw_icon.ico" +IDI_ICON1 ICON DISCARDABLE "resources/images/openmw-icon.ico" diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index dcef48c982..c2cf8bc1e4 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -53,7 +53,8 @@ MainDialog::MainDialog() //mainLayout->addSpacing(12); setWindowTitle(tr("OpenMW Launcher")); - setMinimumSize(QSize(550, 450)); + setWindowIcon(QIcon(":/images/openmw-icon.png")); + setMinimumSize(QSize(575, 575)); connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(play())); @@ -201,6 +202,7 @@ void MainDialog::play() return; } + // Start the game if (!process.startDetached(game)) { QMessageBox msgBox; msgBox.setWindowTitle("Error starting OpenMW"); From 1487daac3d134f664aef49599d57c26c144edcd2 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 4 May 2011 03:22:23 +0200 Subject: [PATCH 068/111] Fixed preprocessor #if to #ifdef --- apps/launcher/maindialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index c2cf8bc1e4..a2ab3aeb6f 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -164,11 +164,11 @@ void MainDialog::play() // First do a write of all the configs, just to be sure writeConfig(); -#if Q_WS_WIN +#ifdef Q_WS_WIN // Windows TODO: proper install path handling QString game = "./openmw.exe"; QFile file(game); -# else +#else QString game = "./openmw"; QFile file(game); #endif From 76653cb2d529af2792435d70c7496ed0399962e7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 9 May 2011 22:38:52 +0200 Subject: [PATCH 069/111] Started working on fallback icons for Windows --- apps/launcher/datafilespage.cpp | 2 +- apps/launcher/resources.qrc | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index e4c20d1a33..8c6cced68b 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -89,7 +89,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mCopyProfileButton->setIcon(QIcon::fromTheme("edit-copy")); mDeleteProfileButton = new QPushButton(this); - mDeleteProfileButton->setIcon(QIcon::fromTheme("document-close")); + mDeleteProfileButton->setIcon(QIcon::fromTheme("edit-delete")); mDeleteProfileButton->setShortcut(QKeySequence(tr("Delete"))); QHBoxLayout *bottomLayout = new QHBoxLayout(); diff --git a/apps/launcher/resources.qrc b/apps/launcher/resources.qrc index d1c4513932..07e6896dd1 100644 --- a/apps/launcher/resources.qrc +++ b/apps/launcher/resources.qrc @@ -7,4 +7,11 @@ resources/images/openmw-header.png resources/images/playpage-background.png + + + resources/icons/video-display.png + resources/icons/document-new.png + resources/icons/edit-copy.png + resources/icons/edit-delete.png + From a0586cda995888258426e7d7bb3c8d5df9802bc4 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 10 May 2011 18:00:15 +0200 Subject: [PATCH 070/111] Complete support for fallback icons on Windows using the Tango theme --- apps/launcher/maindialog.cpp | 44 +++++++++--------- apps/launcher/resources.qrc | 12 ++--- .../resources/icons/tango/document-new.png | Bin 0 -> 477 bytes .../resources/icons/tango/edit-copy.png | Bin 0 -> 498 bytes .../resources/icons/tango/edit-delete.png | Bin 0 -> 680 bytes .../resources/icons/tango/index.theme | 8 ++++ .../resources/icons/tango/video-display.png | Bin 0 -> 2547 bytes 7 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 apps/launcher/resources/icons/tango/document-new.png create mode 100644 apps/launcher/resources/icons/tango/edit-copy.png create mode 100644 apps/launcher/resources/icons/tango/edit-delete.png create mode 100644 apps/launcher/resources/icons/tango/index.theme create mode 100644 apps/launcher/resources/icons/tango/video-display.png diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index a2ab3aeb6f..b5e7a491a2 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -41,16 +41,11 @@ MainDialog::MainDialog() buttonBox->setStandardButtons(QDialogButtonBox::Close); buttonBox->addButton(playButton, QDialogButtonBox::AcceptRole); - //QSpacerItem *vSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - QVBoxLayout *dialogLayout = new QVBoxLayout(this); dialogLayout->addWidget(mIconWidget); - //dialogLayout->addItem(vSpacer1); dialogLayout->addWidget(groupBox); - dialogLayout->addWidget(buttonBox); - //mainLayout->addStretch(1); - //mainLayout->addSpacing(12); + setWindowTitle(tr("OpenMW Launcher")); setWindowIcon(QIcon(":/images/openmw-icon.png")); @@ -66,23 +61,30 @@ MainDialog::MainDialog() void MainDialog::createIcons() { - QListWidgetItem *configButton = new QListWidgetItem(mIconWidget); - configButton->setIcon(QIcon(":/images/openmw-icon.png")); - configButton->setText(tr("Play")); - configButton->setTextAlignment(Qt::AlignCenter); - configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + if (!QIcon::hasThemeIcon("document-new")) { + QIcon::setThemeName("tango"); + } - QListWidgetItem *updateButton = new QListWidgetItem(mIconWidget); - updateButton->setIcon(QIcon::fromTheme("video-display")); - updateButton->setText(tr("Graphics")); - updateButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom | Qt::AlignAbsolute); - updateButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + // We create a fallback icon because the default fallback doesn't work + QIcon graphicsIcon = QIcon(":/icons/tango/video-display.png"); - QListWidgetItem *queryButton = new QListWidgetItem(mIconWidget); - queryButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); - queryButton->setText(tr("Data Files")); - queryButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); - queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + QListWidgetItem *playButton = new QListWidgetItem(mIconWidget); + playButton->setIcon(QIcon(":/images/openmw-icon.png")); + playButton->setText(tr("Play")); + playButton->setTextAlignment(Qt::AlignCenter); + playButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + + QListWidgetItem *graphicsButton = new QListWidgetItem(mIconWidget); + graphicsButton->setIcon(QIcon::fromTheme("video-display", graphicsIcon)); + graphicsButton->setText(tr("Graphics")); + graphicsButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom | Qt::AlignAbsolute); + graphicsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + + QListWidgetItem *dataFilesButton = new QListWidgetItem(mIconWidget); + dataFilesButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); + dataFilesButton->setText(tr("Data Files")); + dataFilesButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); + dataFilesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); connect(mIconWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), diff --git a/apps/launcher/resources.qrc b/apps/launcher/resources.qrc index 07e6896dd1..7fbf62da25 100644 --- a/apps/launcher/resources.qrc +++ b/apps/launcher/resources.qrc @@ -7,11 +7,11 @@ resources/images/openmw-header.png resources/images/playpage-background.png - - - resources/icons/video-display.png - resources/icons/document-new.png - resources/icons/edit-copy.png - resources/icons/edit-delete.png + + resources/icons/tango/index.theme + resources/icons/tango/video-display.png + resources/icons/tango/document-new.png + resources/icons/tango/edit-copy.png + resources/icons/tango/edit-delete.png diff --git a/apps/launcher/resources/icons/tango/document-new.png b/apps/launcher/resources/icons/tango/document-new.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3efdd6fa334616f87698708e73b2a5111c3278 GIT binary patch literal 477 zcmV<30V4j1P);y z08cd6u?+wK010qNS#tmY3ljhU3ljkVnw%H_000McNliru)dCU@CLGhY87Tk&0cuG^ zK~y-)t&mSkTTu|je{=7RRwR8Tg3!ua7TnbCTxO{o^9{0bS-(ZzvfXzh1jK^hz)d&Z zDuq%?vQkP(T7(e)MPi%YcgKY$#u$@SdNwl*bLN~gQZARbYqeUD5tyC*%iLU>XVGu+ z%b(xnqHiDJ&%R{C8KqK5$Km{VQ!h{7Xy?43mnSQoi^k%vwzBKmGBd8L(rh*fApjsE zJ@t&)W7>Wp4I*kr6}$~JG#W`y z)G#6Xf76e95r#Ql*+}S4tk-SEw(HMMH$UOFgT8OyWIuox(>z|!eNT?Q)#FJN+p=4fyzsz3(&M5 z1Oj8QEH>2c<<$iq9`D@|1fH*+ou9fEhcV03wkV2NSzd)@nNYt}lHgoRaN9}vHG1pg5Cj3DD1s1zdc6*S;N$b%7N-)ik literal 0 HcmV?d00001 diff --git a/apps/launcher/resources/icons/tango/edit-delete.png b/apps/launcher/resources/icons/tango/edit-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..ea03150a1c15ec650240042fb695e7be84bc3e28 GIT binary patch literal 680 zcmV;Z0$2TsP)&~9SKOY%f0nX^lS0%q#YP1;Cv`C~wifvVWH7q5i>VkBIIeP6 z?s|6)au-91QGBQO`{sE*@B4fS?A7A^!aG@(#_<=$akkoxxl9xQXmcpb()eup8Wcsb zgoa^snGM6hljX9thz?EX=KSV+MNuFK0-`7)n@QnL;d#!A@UhW?AP8tQ8h?ynYKO=6BACOv97OzXrAtf@ z2O)x1X8|H-V>nD%fY=%S{{Wx9i2r094LW{B44uo@Kw#`p>kX`0Uo?09s&V;JTzyn7 zDU*{^%-Y&}CK{d4s?`b^i%n^@T9ulJ#`L$9H{{~N1F9)O#I0o&NqHSeDc6cDqz8 zK1}bwAaOHui(g)OtONMGwY4emZr<;5I_X`d&8)9~I0*nN&z?HdsoA#LQO@rNluJuR z`2EL^Bopb;WFpPx#24YJ`L;wH)0002_L%V+f000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipY* z6c86{M}6r4010zRL_t(&-tAdSY#mn_{?21wvG27VJ9XXS#IftdsS~tC=TS}x-NJDMsI>@16UY z$N7I2b00Hv$M@bQuz`+rG-uBFXU_lqk8jTW1AKmbe*AwQqG<5N7hfz3DPCsc$C%l^ zlLr$Kn7QBb*Xc0;{V`+Akc<%AB*M?0d+xa((0l3UFMa3PXP^DU3opFz&R77JWu0GHIc2vyO*C6g_ncrC9t>G!t$vHL59FYa2#6+A!a560G`%L zAqWZ0W`wy}LKsF9Day}*wFj6u0P1Iw}@gjkp` zgfOL)1~DTHV=x0z6hjEnr?vrIBBvySnfi(igJ1}e%=JL#b3tq1u-3uS{fi(<*0U@N z5SW_?01Y&kRqgL}VT{76eT}A!S z$GOcjuq+J$F*}(D09Q)c4+~?CO2mO>i$L@&eN>(>GY$`ZRI7E=>ptSx^xv;hWH7&Q z9CP!tU}9L71!LmzIq>}R&wG|-5i?70@T? zsMJ86C^Bd?eB9iw;N0d}IF<)yjAtQZOv$#bn3yypvHl=@vay;C6-sgaa40b|+U)?l zyH(Wd&Az3TQkh+i5CacPPfuZWeFfYF7n^u`EC6OMS(asbiAaXJiNqPE5CR2sSY&yi z(+N?jRMBjh1(Wy`Ut#}LH5jTthQ zPKc;DX?w~WL)hQ1Y!M2`(^+m2n=EdyvB34n-7w(UqJg5QX`%85+q^j=K8xpq5*@3&wKLkI;SvWgYQ zdoie&UJbl81$%L8lWUjtztm-EbLg z*>Oo*B-?02sjYbefQZT?0SF=Hl~#g?u(#KQ)&fKVM1&|xw$;hoGg16b!ebIyrGQ#3 z=ra+Kf#W!0tOtY;$1QDvh)}DAU^ei5>e8x6y*($3@ySAISk|@~)oLf9(QXpEo-4aK zFlsYLvsx<<5e{n|C?z3;fRyq-8Xn^Sxh|u25cC<}kb&#DikZt}azM;ztrGx;Ask2d z6_`9c?%peo!>HB5!FGihc0w+tahtia(i)Ko5OiWNtIP-a-CKGxmI8owJ02u48@P@) z^kH8_qtjX`gc0E@Up5o@7`{0YKp2Kk|M9gyz4GQ8 zZ=G{phtfq^V@MFwpfbULAtU-9H4MSby7%Tx-<#<(MNIuME-L&AAvo;;-}ePG|IYKg zpNy?e1Hd!SJmY$v=T#~d>)_zPZZ?~Cr_-^+Ftnp6vW+oz5Co1=>e$)?YhRz4EkC7{ znt$k_FY1xSU}jvs`kpa{{$AOsynOxo^|z#yk(4r2N`*?PP-`99wjFw&7fek}MRRj= zQM1`>y#D&@@kHhI)FA;lx#j|}0XP>fY(BQKy86SV`X0Q74ORBtE)nYpWgcYt#8IjU8UFJ)VlIc0ieGD%C(cr%TKJY zKcJWHzZaHeA&!&E-NO9*#6Ll#lsLC}R^9mI`oik^>iS35KKh_wt&x$U$ND=#PPsnC zVYIhjJBX^)1AS(F9kVmD@S8qbUK2qOz>pc*S}3L9x(T&vZDHr;HmcPcTJ4T(HClV= z=jYbtI|Xo*OVyPtS6@AG&xvomcjfBF;bF~Qm|wu^=~bLQy@vU@`QD!u7-L{r7L-y5 z!w{9-3buE)@yRFG(QGyG-qrVm!^8S7wzjrzcGu`NlWUXzBP+;*UIN>_1O{MRmgPPE zrN_TDJw5gG$y3W%TwHX7k_bB?$}?q@N+np9jdrVrTCIj44B$ErI$^+DH$Dya_p0sf zn>#^$5u+-ZnryED!aR{T>I;_x1%WPDITRjq`}Z<{!2MR*6JypYdXbH%JV$;MV;J@+nT;@2ObF|F({P-U^{teMPLmTQ?^@#ug002ov JPDHLkV1lF{wvqq< literal 0 HcmV?d00001 From 409bd0fe7eb306e1806b6fcf982bbdcc5b2af393 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 10 May 2011 22:47:08 +0200 Subject: [PATCH 071/111] Moved the stylesheet to main.cpp and made some stylesheet-related changes --- apps/launcher/datafilespage.cpp | 15 ++++---------- apps/launcher/main.cpp | 23 ++++++++++++--------- apps/launcher/playpage.cpp | 26 ++++++++++-------------- files/launcher.qss | 36 ++++++++++++++++++--------------- 4 files changed, 48 insertions(+), 52 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 8c6cced68b..3c9eae4616 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -17,7 +17,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mPluginsSelectModel = new QItemSelectionModel(mPluginsModel); - //QPushButton *deselectButton = new QPushButton(tr("Deselect All")); QLabel *filterLabel = new QLabel(tr("Filter:"), this); LineEdit *filterLineEdit = new LineEdit(this); @@ -31,6 +30,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mMastersWidget = new QTableWidget(this); // Contains the available masters mPluginsTable = new QTableView(this); + mMastersWidget->setObjectName("MastersWidget"); mMastersWidget->setSelectionBehavior(QAbstractItemView::SelectRows); mMastersWidget->setSelectionMode(QAbstractItemView::MultiSelection); mMastersWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -72,24 +72,22 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Bottom part with profile options QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); - //mProfilesModel = new QStringListModel(); - mProfilesComboBox = new ComboBox(this); - //mProfilesComboBox->setModel(mProfilesModel); - mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); - //mProfileComboBox->addItem(QString("New Profile")); mNewProfileButton = new QPushButton(this); mNewProfileButton->setIcon(QIcon::fromTheme("document-new")); + mNewProfileButton->setToolTip(tr("New Profile")); mNewProfileButton->setShortcut(QKeySequence(tr("Ctrl+N"))); mCopyProfileButton = new QPushButton(this); mCopyProfileButton->setIcon(QIcon::fromTheme("edit-copy")); + mCopyProfileButton->setToolTip(tr("Copy Profile")); mDeleteProfileButton = new QPushButton(this); mDeleteProfileButton->setIcon(QIcon::fromTheme("edit-delete")); + mDeleteProfileButton->setToolTip(tr("Delete Profile")); mDeleteProfileButton->setShortcut(QKeySequence(tr("Delete"))); QHBoxLayout *bottomLayout = new QHBoxLayout(); @@ -102,11 +100,9 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) QVBoxLayout *pageLayout = new QVBoxLayout(this); // Add some space above and below the page items - //QSpacerItem *vSpacer1 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); QSpacerItem *vSpacer3 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); - //pageLayout->addItem(vSpacer1); pageLayout->addLayout(topLayout); pageLayout->addItem(vSpacer2); pageLayout->addWidget(splitter); @@ -120,9 +116,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); - //connect(mProfileComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(profileChanged(const QString&))); - - connect(mNewProfileButton, SIGNAL(pressed()), this, SLOT(newProfile())); connect(mCopyProfileButton, SIGNAL(pressed()), this, SLOT(copyProfile())); connect(mDeleteProfileButton, SIGNAL(pressed()), this, SLOT(deleteProfile())); diff --git a/apps/launcher/main.cpp b/apps/launcher/main.cpp index d008c3a483..4e438a4db1 100644 --- a/apps/launcher/main.cpp +++ b/apps/launcher/main.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "maindialog.hpp" @@ -9,22 +10,24 @@ int main(int argc, char *argv[]) // Now we make sure the current dir is set to application path QDir dir(QCoreApplication::applicationDirPath()); -#if defined(Q_OS_WIN) - if (dir.dirName().toLower() == "debug" || - dir.dirName().toLower() == "release") - { - dir.cdUp(); - } -#elif defined(Q_OS_MAC) - if (dir.dirName() == "MacOS") - { + + #if defined(Q_OS_MAC) + if (dir.dirName() == "MacOS") { dir.cdUp(); dir.cdUp(); dir.cdUp(); } -#endif + #endif QDir::setCurrent(dir.absolutePath()); + + // Load the stylesheet + QFile file("./launcher.qss"); + + file.open(QFile::ReadOnly); + QString styleSheet = QLatin1String(file.readAll()); + app.setStyleSheet(styleSheet); + MainDialog dialog; return dialog.exec(); diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 27e2f08bba..2ad62d7c82 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -4,25 +4,21 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) { - // Load the stylesheet - QFile file("./launcher.qss"); + QWidget *playWidget = new QWidget(this); + playWidget->setObjectName("PlayGroup"); + playWidget->setFixedSize(QSize(425, 375)); - file.open(QFile::ReadOnly); - QString styleSheet = QLatin1String(file.readAll()); - setStyleSheet(styleSheet); - - QGroupBox *playBox = new QGroupBox(this); - playBox->setFixedSize(QSize(425, 375)); - playBox->setFlat(true); - - mPlayButton = new QPushButton(tr("Play"), playBox); + mPlayButton = new QPushButton(tr("Play"), playWidget); + mPlayButton->setObjectName("PlayButton"); mPlayButton->setMinimumSize(QSize(200, 50)); - QLabel *profileLabel = new QLabel(tr("Current Profile:"), playBox); + QLabel *profileLabel = new QLabel(tr("Current Profile:"), playWidget); + profileLabel->setObjectName("ProfileLabel"); - mProfilesComboBox = new QComboBox(playBox); + mProfilesComboBox = new QComboBox(playWidget); + mProfilesComboBox->setObjectName("ProfilesComboBox"); - QGridLayout *playLayout = new QGridLayout(playBox); + QGridLayout *playLayout = new QGridLayout(playWidget); QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); QSpacerItem *hSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); @@ -40,6 +36,6 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) QHBoxLayout *pageLayout = new QHBoxLayout(this); - pageLayout->addWidget(playBox); + pageLayout->addWidget(playWidget); } \ No newline at end of file diff --git a/files/launcher.qss b/files/launcher.qss index 2866f858e0..e9f8a3c9f1 100644 --- a/files/launcher.qss +++ b/files/launcher.qss @@ -1,4 +1,4 @@ -QGroupBox { +#PlayGroup { background-image: url(":/images/playpage-background.png"); background-repeat: no-repeat; background-position: top; @@ -6,7 +6,11 @@ QGroupBox { padding-right: 30px; } -QPushButton { +#MastersWidget { + selection-background-color: palette(highlight); +} + +#PlayButton { height: 50px; @@ -20,7 +24,7 @@ QPushButton { stop:0.9 rgba(0, 0, 0, 55), stop:1 rgba(0, 0, 0, 100)); - font: 24pt "FreeMono"; + font: 24pt "Trebuchet MS"; color: black; border-right: 1px solid rgba(0, 0, 0, 155); @@ -31,7 +35,7 @@ QPushButton { border-radius: 5px; } -QPushButton:hover { +#PlayButton:hover { border-bottom: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(164, 192, 228, 255), stop:1 rgba(255, 255, 255, 0)); border-top: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(164, 192, 228, 255), stop:1 rgba(255, 255, 255, 0)); border-right: qlineargradient(spread:pad, x1:1, y1:0, x2:0, y2:0, stop:0 rgba(164, 192, 228, 255), stop:1 rgba(255, 255, 255, 0)); @@ -40,18 +44,16 @@ QPushButton:hover { border-style: solid; } -QPushButton:pressed { +#PlayButton:pressed { } -QLabel -{ - font: 14pt "FreeMono"; +#ProfileLabel { + font: 14pt "Trebuchet MS"; } -QComboBox -{ +#ProfilesComboBox { padding: 1px 18px 1px 3px; background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 white, stop:0.2 rgba(0, 0, 0, 25), stop:1 rgba(255, 255, 255, 200)); @@ -62,17 +64,19 @@ QComboBox } /*QComboBox gets the "on" state when the popup is open */ -QComboBox:!editable:on, QComboBox::drop-down:editable:on { +#ProfilesComboBox:!editable:on, #ProfilesComboBox::drop-down:editable:on { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 gray, stop:0.2 white); } -QComboBox { /* shift the text when the popup opens */ +#ProfilesComboBox { /* shift the text when the popup opens */ padding-top: 3px; padding-left: 4px; + + font: 11pt "Trebuchet MS"; } -QComboBox::drop-down { +#ProfilesComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; @@ -84,16 +88,16 @@ QComboBox::drop-down { border-bottom-right-radius: 3px; } -QComboBox::down-arrow { +#ProfilesComboBox::down-arrow { image: url(":/images/down.png"); } -QComboBox::down-arrow:on { /* shift the arrow when popup is open */ +#ProfilesComboBox::down-arrow:on { /* shift the arrow when popup is open */ top: 1px; left: 1px; } -QListWidget { +#IconWidget { background-image: url(":/images/openmw-header.png"); background-color: white; background-repeat: no-repeat; From b9acc4a0ac491e6bdff76b43ae5cbd8ebba4fea2 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 11 May 2011 01:12:25 +0200 Subject: [PATCH 072/111] Implemented the Graphics page, launcher now loads and saves Ogre settings --- apps/launcher/graphicspage.cpp | 451 +++++++++++++++++++++++++++++++++ apps/launcher/graphicspage.hpp | 54 ++++ apps/launcher/maindialog.cpp | 11 +- 3 files changed, 510 insertions(+), 6 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 9276fc3f33..0c744e09ed 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -1,9 +1,460 @@ #include +#include + #include "graphicspage.hpp" GraphicsPage::GraphicsPage(QWidget *parent) : QWidget(parent) { + QGroupBox *rendererGroup = new QGroupBox(tr("Renderer"), this); + QLabel *rendererLabel = new QLabel(tr("Rendering Subsystem:"), rendererGroup); + mRendererComboBox = new QComboBox(rendererGroup); + + // Layout for the combobox and label + QGridLayout *renderSystemLayout = new QGridLayout(); + renderSystemLayout->addWidget(rendererLabel, 0, 0, 1, 1); + renderSystemLayout->addWidget(mRendererComboBox, 0, 1, 1, 1); + + mRendererStackedWidget = new QStackedWidget(rendererGroup); + + QVBoxLayout *rendererGroupLayout = new QVBoxLayout(rendererGroup); + + rendererGroupLayout->addLayout(renderSystemLayout); + rendererGroupLayout->addWidget(mRendererStackedWidget); + + // Display + QGroupBox *displayGroup = new QGroupBox(tr("Display"), this); + + mDisplayStackedWidget = new QStackedWidget(displayGroup); + + QVBoxLayout *displayGroupLayout = new QVBoxLayout(displayGroup); + QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Expanding); + + displayGroupLayout->addWidget(mDisplayStackedWidget); + displayGroupLayout->addItem(vSpacer3); + + // Page + QVBoxLayout *pageLayout = new QVBoxLayout(this); + + pageLayout->addWidget(rendererGroup); + pageLayout->addWidget(displayGroup); + + connect(mRendererComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(rendererChanged(const QString&))); + + createPages(); + setupConfig(); + setupOgre(); + + readConfig(); +} + +void GraphicsPage::createPages() +{ + // OpenGL rendering settings + QWidget *mOGLRendererPage = new QWidget(); + + QLabel *OGLRTTLabel = new QLabel(tr("Preferred RTT Mode:"), mOGLRendererPage); + mOGLRTTComboBox = new QComboBox(mOGLRendererPage); + + QLabel *OGLAntiAliasingLabel = new QLabel(tr("Antialiasing:"), mOGLRendererPage); + mOGLAntiAliasingComboBox = new QComboBox(mOGLRendererPage); + + QGridLayout *OGLRendererLayout = new QGridLayout(mOGLRendererPage); + QSpacerItem *vSpacer1 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Expanding); + + OGLRendererLayout->addWidget(OGLRTTLabel, 0, 0, 1, 1); + OGLRendererLayout->addWidget(mOGLRTTComboBox, 0, 1, 1, 1); + OGLRendererLayout->addWidget(OGLAntiAliasingLabel, 1, 0, 1, 1); + OGLRendererLayout->addWidget(mOGLAntiAliasingComboBox, 1, 1, 1, 1); + OGLRendererLayout->addItem(vSpacer1, 2, 1, 1, 1); + + // OpenGL display settings + QWidget *mOGLDisplayPage = new QWidget(); + + QLabel *OGLResolutionLabel = new QLabel(tr("Resolution:"), mOGLDisplayPage); + mOGLResolutionComboBox = new QComboBox(mOGLDisplayPage); + + QLabel *OGLFrequencyLabel = new QLabel(tr("Display Frequency:"), mOGLDisplayPage); + mOGLFrequencyComboBox = new QComboBox(mOGLDisplayPage); + + mOGLVSyncCheckBox = new QCheckBox(tr("Vertical Sync"), mOGLDisplayPage); + mOGLFullScreenCheckBox = new QCheckBox(tr("Full Screen"), mOGLDisplayPage); + + QGridLayout *OGLDisplayLayout = new QGridLayout(mOGLDisplayPage); + QSpacerItem *vSpacer2 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); + + OGLDisplayLayout->addWidget(OGLResolutionLabel, 0, 0, 1, 1); + OGLDisplayLayout->addWidget(mOGLResolutionComboBox, 0, 1, 1, 1); + OGLDisplayLayout->addWidget(OGLFrequencyLabel, 1, 0, 1, 1); + OGLDisplayLayout->addWidget(mOGLFrequencyComboBox, 1, 1, 1, 1); + + OGLDisplayLayout->addItem(vSpacer2, 2, 1, 1, 1); + OGLDisplayLayout->addWidget(mOGLVSyncCheckBox, 3, 0, 1, 1); + OGLDisplayLayout->addWidget(mOGLFullScreenCheckBox, 6, 0, 1, 1); + + // Direct3D rendering settings + QWidget *mD3DRendererPage = new QWidget(); + + QLabel *D3DRenderDeviceLabel = new QLabel(tr("Rendering Device:"), mD3DRendererPage); + mD3DRenderDeviceComboBox = new QComboBox(mD3DRendererPage); + + QLabel *D3DAntiAliasingLabel = new QLabel(tr("Antialiasing:"), mD3DRendererPage); + mD3DAntiAliasingComboBox = new QComboBox(mD3DRendererPage); + + QLabel *D3DFloatingPointLabel = new QLabel(tr("Floating-point Mode:"), mD3DRendererPage); + mD3DFloatingPointComboBox = new QComboBox(mD3DRendererPage); + + mD3DNvPerfCheckBox = new QCheckBox(tr("Allow NVPerfHUD"), mD3DRendererPage); + + QGridLayout *D3DRendererLayout = new QGridLayout(mD3DRendererPage); + QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); + QSpacerItem *vSpacer4 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Expanding); + + D3DRendererLayout->addWidget(D3DRenderDeviceLabel, 0, 0, 1, 1); + D3DRendererLayout->addWidget(mD3DRenderDeviceComboBox, 0, 1, 1, 1); + D3DRendererLayout->addWidget(D3DAntiAliasingLabel, 1, 0, 1, 1); + D3DRendererLayout->addWidget(mD3DAntiAliasingComboBox, 1, 1, 1, 1); + D3DRendererLayout->addWidget(D3DFloatingPointLabel, 2, 0, 1, 1); + D3DRendererLayout->addWidget(mD3DFloatingPointComboBox, 2, 1, 1, 1); + D3DRendererLayout->addItem(vSpacer3, 3, 1, 1, 1); + D3DRendererLayout->addWidget(mD3DNvPerfCheckBox, 4, 0, 1, 1); + D3DRendererLayout->addItem(vSpacer4, 5, 1, 1, 1); + + // Direct3D display settings + QWidget *mD3DDisplayPage = new QWidget(); + + QLabel *D3DResolutionLabel = new QLabel(tr("Resolution:"), mD3DDisplayPage); + mD3DResolutionComboBox = new QComboBox(mD3DDisplayPage); + + mD3DVSyncCheckBox = new QCheckBox(tr("Vertical Sync"), mD3DDisplayPage); + mD3DFullScreenCheckBox = new QCheckBox(tr("Full Screen"), mD3DDisplayPage); + + QGridLayout *mD3DDisplayLayout = new QGridLayout(mD3DDisplayPage); + QSpacerItem *vSpacer5 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); + + mD3DDisplayLayout->addWidget(D3DResolutionLabel, 0, 0, 1, 1); + mD3DDisplayLayout->addWidget(mD3DResolutionComboBox, 0, 1, 1, 1); + mD3DDisplayLayout->addItem(vSpacer5, 1, 1, 1, 1); + mD3DDisplayLayout->addWidget(mD3DVSyncCheckBox, 2, 0, 1, 1); + mD3DDisplayLayout->addWidget(mD3DFullScreenCheckBox, 5, 0, 1, 1); + + // Add the created pages + mRendererStackedWidget->addWidget(mOGLRendererPage); + mRendererStackedWidget->addWidget(mD3DRendererPage); + + mDisplayStackedWidget->addWidget(mOGLDisplayPage); + mDisplayStackedWidget->addWidget(mD3DDisplayPage); +} + +void GraphicsPage::setupConfig() +{ + QString ogreCfg = "./ogre.cfg"; + + QFile file(ogreCfg); + + if (!file.exists()) { + ogreCfg = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, + "openmw", "ogre.cfg")); + } + + mOgreConfig = new QSettings(ogreCfg, QSettings::IniFormat); + +} + +void GraphicsPage::setupOgre() +{ + QString pluginCfg = "./plugins.cfg"; + + QFile file(pluginCfg); + + if (!file.exists()) { + pluginCfg = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, + "openmw", "plugins.cfg")); + } + + try + { + mOgre = new Ogre::Root(pluginCfg.toStdString()); + qDebug("Ogre::Root created successfully."); + } + catch(Ogre::Exception &ex) + { + // TODO: Better warning text + QString ogreError = QString::fromStdString(ex.getFullDescription().c_str()); + QMessageBox msgBox; + msgBox.setWindowTitle("Error creating Ogre::Root"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Failed to create the Ogre::Root object

\ + Make sure the plugins.cfg is present and valid.

\ + Press \"Show Details...\" for more information.
")); + msgBox.setDetailedText(ogreError); + msgBox.exec(); + + QString error = QString("Error creating Ogre::Root, the error reported was: %0").arg(ogreError); + qCritical(error.toAscii()); + + std::exit(1); + } + + // Get the available renderers and put them in the combobox + const Ogre::RenderSystemList &renderers = mOgre->getAvailableRenderers(); + + for (Ogre::RenderSystemList::const_iterator r = renderers.begin(); r != renderers.end(); ++r) { + mSelectedRenderSystem = *r; + mRendererComboBox->addItem((*r)->getName().c_str()); + } + + int index = mRendererComboBox->findText(mOgreConfig->value("Render System").toString()); + + if ( index != -1) { + mRendererComboBox->setCurrentIndex(index); + } + + // Create separate rendersystems TODO: Warn on non-existant + QString openGLName = mRendererComboBox->itemText(mRendererComboBox->findText(QString("OpenGL"), Qt::MatchStartsWith)); + QString direct3DName = mRendererComboBox->itemText(mRendererComboBox->findText(QString("Direct3D"), Qt::MatchStartsWith)); + + mOpenGLRenderSystem = mOgre->getRenderSystemByName(openGLName.toStdString()); + mDirect3DRenderSystem = mOgre->getRenderSystemByName(direct3DName.toStdString()); + + if (!mOpenGLRenderSystem && !mDirect3DRenderSystem) { + QMessageBox msgBox; + msgBox.setWindowTitle("Error creating renderer"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not select a valid render system

\ + Please make sure the plugins.cfg file exists and contains a valid rendering plugin.
")); + msgBox.exec(); + + std::exit(1); + } + + // Now fill the GUI elements TODO: CLEANUP! + // OpenGL + if (mOpenGLRenderSystem) { + mOGLRTTComboBox->addItems(getAvailableOptions(QString("RTT Preferred Mode"), mOpenGLRenderSystem)); + mOGLAntiAliasingComboBox->addItems(getAvailableOptions(QString("FSAA"), mOpenGLRenderSystem)); + + QStringList videoModes = getAvailableOptions(QString("Video Mode"), mOpenGLRenderSystem); + // Remove extraneous spaces + videoModes.replaceInStrings(QRegExp("\\s{2,}"), QString(" ")); + videoModes.replaceInStrings(QRegExp("^\\s"), QString()); + + mOGLResolutionComboBox->addItems(videoModes); + mOGLFrequencyComboBox->addItems(getAvailableOptions(QString("Display Frequency"), mOpenGLRenderSystem)); + } + + // Direct3D + if (mDirect3DRenderSystem) { + mD3DRenderDeviceComboBox->addItems(getAvailableOptions(QString("Rendering Device"), mDirect3DRenderSystem)); + mD3DAntiAliasingComboBox->addItems(getAvailableOptions(QString("Anti aliasing"), mDirect3DRenderSystem)); + mD3DFloatingPointComboBox->addItems(getAvailableOptions(QString("Floating-point mode"), mDirect3DRenderSystem)); + + QStringList videoModes = getAvailableOptions(QString("Video Mode"), mDirect3DRenderSystem); + // Remove extraneous spaces + videoModes.replaceInStrings(QRegExp("\\s{2,}"), QString(" ")); + videoModes.replaceInStrings(QRegExp("^\\s"), QString()); + mD3DResolutionComboBox->addItems(videoModes); + } +} + +void GraphicsPage::readConfig() +{ + // Read the config file settings + if (mOpenGLRenderSystem) { + + int index = mOGLRTTComboBox->findText(getConfigValue("RTT Preferred Mode", mOpenGLRenderSystem)); + if ( index != -1) { + mOGLRTTComboBox->setCurrentIndex(index); + } + + index = mOGLAntiAliasingComboBox->findText(getConfigValue("FSAA", mOpenGLRenderSystem)); + if ( index != -1) { + mOGLAntiAliasingComboBox->setCurrentIndex(index); + } + + index = mOGLResolutionComboBox->findText(getConfigValue("Video Mode", mOpenGLRenderSystem)); + if ( index != -1) { + mOGLResolutionComboBox->setCurrentIndex(index); + } + + index = mOGLFrequencyComboBox->findText(getConfigValue("Display Frequency", mOpenGLRenderSystem)); + if ( index != -1) { + mOGLFrequencyComboBox->setCurrentIndex(index); + } + + // Now we do the same for the checkboxes + if (QString::compare(getConfigValue("VSync", mOpenGLRenderSystem), QString("Yes")) == 0) { + mOGLVSyncCheckBox->setCheckState(Qt::Checked); + } + + if (QString::compare(getConfigValue("Full Screen", mOpenGLRenderSystem), QString("Yes")) == 0) { + mOGLFullScreenCheckBox->setCheckState(Qt::Checked); + } + } + + if (mDirect3DRenderSystem) { + int index = mD3DRenderDeviceComboBox->findText(getConfigValue("Rendering Device", mDirect3DRenderSystem)); + if ( index != -1) { + mD3DRenderDeviceComboBox->setCurrentIndex(index); + } + + index = mD3DAntiAliasingComboBox->findText(getConfigValue("Anti aliasing", mDirect3DRenderSystem)); + if ( index != -1) { + mD3DAntiAliasingComboBox->setCurrentIndex(index); + } + + index = mD3DFloatingPointComboBox->findText(getConfigValue("Floating-point mode", mDirect3DRenderSystem)); + if ( index != -1) { + mD3DFloatingPointComboBox->setCurrentIndex(index); + } + + index = mD3DResolutionComboBox->findText(getConfigValue("Video Mode", mDirect3DRenderSystem)); + if ( index != -1) { + mD3DResolutionComboBox->setCurrentIndex(index); + } + + if (QString::compare(getConfigValue("Allow NVPerfHUD", mDirect3DRenderSystem), QString("Yes")) == 0) { + mD3DNvPerfCheckBox->setCheckState(Qt::Checked); + } + + if (QString::compare(getConfigValue("VSync", mDirect3DRenderSystem), QString("Yes")) == 0) { + mD3DVSyncCheckBox->setCheckState(Qt::Checked); + } + + if (QString::compare(getConfigValue("Full Screen", mDirect3DRenderSystem), QString("Yes")) == 0) { + mD3DFullScreenCheckBox->setCheckState(Qt::Checked); + } + } +} + +void GraphicsPage::writeConfig() +{ + // Write the config file settings + + // Custom write method: We cannot use QSettings because it does not accept spaces + QFile file(mOgreConfig->fileName()); + + if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { + // File could not be opened, TODO: throw error + return; + } + + QTextStream out(&file); + + out << "Render System=" << mSelectedRenderSystem->getName().c_str() << endl << endl; + + if (mOpenGLRenderSystem) { + QString openGLName = mOpenGLRenderSystem->getName().c_str(); + openGLName.prepend("["); + openGLName.append("]"); + out << openGLName << endl; + + out << "RTT Preferred Mode=" << mOGLRTTComboBox->currentText() << endl; + out << "FSAA=" << mOGLAntiAliasingComboBox->currentText() << endl; + out << "Video Mode=" << mOGLResolutionComboBox->currentText() << endl; + out << "Display Frequency=" << mOGLFrequencyComboBox->currentText() << endl; + + if (mOGLVSyncCheckBox->checkState() == Qt::Checked) { + out << "VSync=Yes" << endl; + } else { + out << "VSync=No" << endl; + } + + if (mOGLFullScreenCheckBox->checkState() == Qt::Checked) { + out << "Full Screen=Yes" << endl; + } else { + out << "Full Screen=No" << endl; + } + + } + + if (mDirect3DRenderSystem) { + QString direct3DName = mDirect3DRenderSystem->getName().c_str(); + direct3DName.prepend("["); + direct3DName.append("]"); + out << direct3DName << endl; + + out << "Rendering Device=" << mD3DRenderDeviceComboBox->currentText() << endl; + out << "Anti aliasing=" << mD3DAntiAliasingComboBox->currentText() << endl; + out << "Floating-point mode=" << mD3DFloatingPointComboBox->currentText() << endl; + out << "Video Mode=" << mD3DResolutionComboBox->currentText() << endl; + + if (mD3DNvPerfCheckBox->checkState() == Qt::Checked) { + out << "Allow NVPerfHUD=Yes" << endl; + } else { + out << "Allow NVPerfHUD=No" << endl; + } + + if (mD3DVSyncCheckBox->checkState() == Qt::Checked) { + out << "VSync=Yes" << endl; + } else { + out << "VSync=No" << endl; + } + + if (mD3DFullScreenCheckBox->checkState() == Qt::Checked) { + out << "Full Screen=Yes" << endl; + } else { + out << "Full Screen=No" << endl; + } + + } + + file.close(); + +} + +QString GraphicsPage::getConfigValue(const QString &key, Ogre::RenderSystem *renderer) +{ + QString result; + + mOgreConfig->beginGroup(renderer->getName().c_str()); + result = mOgreConfig->value(key).toString(); + mOgreConfig->endGroup(); + + return result; +} + +QStringList GraphicsPage::getAvailableOptions(const QString &key, Ogre::RenderSystem *renderer) +{ + QStringList result; + + uint row = 0; + Ogre::ConfigOptionMap options = renderer->getConfigOptions(); + + for (Ogre::ConfigOptionMap::iterator i = options.begin (); i != options.end (); i++, row++) + { + Ogre::StringVector::iterator opt_it; + uint idx = 0; + for (opt_it = i->second.possibleValues.begin (); + opt_it != i->second.possibleValues.end (); opt_it++, idx++) + { + + if (strcmp (key.toStdString().c_str(), i->first.c_str()) == 0) + result << (*opt_it).c_str(); + } + + } + + return result; +} + +void GraphicsPage::rendererChanged(const QString &renderer) +{ + qDebug() << "renderer is " << renderer; + if (renderer.contains("Direct3D")) { + mRendererStackedWidget->setCurrentIndex(1); + mDisplayStackedWidget->setCurrentIndex(1); + } + + if (renderer.contains("OpenGL")) { + mRendererStackedWidget->setCurrentIndex(0); + mDisplayStackedWidget->setCurrentIndex(0); + } + // Set the render system to the selected one + //mSelectedRenderSystem = mOgre->getRenderSystemByName(renderer.toStdString().c_str()); + //qDebug() << getConfigValue("Preferred RTT Mode"); } \ No newline at end of file diff --git a/apps/launcher/graphicspage.hpp b/apps/launcher/graphicspage.hpp index 5064d1eca9..49ed92ac0b 100644 --- a/apps/launcher/graphicspage.hpp +++ b/apps/launcher/graphicspage.hpp @@ -3,6 +3,16 @@ #include +#include +#include +#include +#include + +class QComboBox; +class QCheckBox; +class QStackedWidget; +class QSettings; + class GraphicsPage : public QWidget { Q_OBJECT @@ -10,6 +20,50 @@ class GraphicsPage : public QWidget public: GraphicsPage(QWidget *parent = 0); + QSettings *mOgreConfig; + + void writeConfig(); + +public slots: + void rendererChanged(const QString &renderer); + +private: + Ogre::Root *mOgre; + Ogre::RenderSystem *mSelectedRenderSystem; + Ogre::RenderSystem *mOpenGLRenderSystem; + Ogre::RenderSystem *mDirect3DRenderSystem; + + QComboBox *mRendererComboBox; + + QStackedWidget *mRendererStackedWidget; + QStackedWidget *mDisplayStackedWidget; + + // OpenGL + QComboBox *mOGLRTTComboBox; + QComboBox *mOGLAntiAliasingComboBox; + QComboBox *mOGLResolutionComboBox; + QComboBox *mOGLFrequencyComboBox; + + QCheckBox *mOGLVSyncCheckBox; + QCheckBox *mOGLFullScreenCheckBox; + + // Direct3D + QComboBox *mD3DRenderDeviceComboBox; + QComboBox *mD3DAntiAliasingComboBox; + QComboBox *mD3DFloatingPointComboBox; + QComboBox *mD3DResolutionComboBox; + + QCheckBox *mD3DNvPerfCheckBox; + QCheckBox *mD3DVSyncCheckBox; + QCheckBox *mD3DFullScreenCheckBox; + + QString getConfigValue(const QString &key, Ogre::RenderSystem *renderer); + QStringList getAvailableOptions(const QString &key, Ogre::RenderSystem *renderer); + + void createPages(); + void setupConfig(); + void setupOgre(); + void readConfig(); }; #endif diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index b5e7a491a2..14a8f93a99 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -11,18 +11,13 @@ MainDialog::MainDialog() { mIconWidget = new QListWidget; + mIconWidget->setObjectName("IconWidget"); mIconWidget->setViewMode(QListView::IconMode); mIconWidget->setWrapping(false); mIconWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Just to be sure mIconWidget->setIconSize(QSize(48, 48)); mIconWidget->setMovement(QListView::Static); - mIconWidget->setStyleSheet("background-image: url(:/images/openmw-header.png); \ - background-color: white; \ - background-repeat: no-repeat; \ - background-attachment: scroll; \ - background-position: right;"); - mIconWidget->setMinimumWidth(400); mIconWidget->setFixedHeight(80); mIconWidget->setSpacing(4); @@ -247,6 +242,10 @@ void MainDialog::writeConfig() mDataFilesPage->writeConfig(); mDataFilesPage->mLauncherConfig->sync(); + // Write the graphics settings + mGraphicsPage->writeConfig(); + mGraphicsPage->mOgreConfig->sync(); + // Write to the openmw.cfg //QString dataPath = mGameConfig->value("data").toString(); //dataPath.append("/"); From 9b439d74da7219ad43186e919ad191dfcc39e0d3 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 11 May 2011 18:48:42 +0200 Subject: [PATCH 073/111] Removed some leftover files belonging to the old launcher --- apps/launcher/settingsdialog.cpp | 259 ------------------------------- apps/launcher/settingsdialog.h | 46 ------ 2 files changed, 305 deletions(-) delete mode 100644 apps/launcher/settingsdialog.cpp delete mode 100644 apps/launcher/settingsdialog.h diff --git a/apps/launcher/settingsdialog.cpp b/apps/launcher/settingsdialog.cpp deleted file mode 100644 index cce5715a50..0000000000 --- a/apps/launcher/settingsdialog.cpp +++ /dev/null @@ -1,259 +0,0 @@ -#include - -#include "settingsdialog.h" - -SettingsDialog::SettingsDialog() -{ - QTabWidget *tabWidget = new QTabWidget(this); - QWidget *graphicsTab = new QWidget(); - - // Render group - QGroupBox *groupRender = new QGroupBox(tr("Renderer"), graphicsTab); - groupRender->setMinimumWidth(450); - - QVBoxLayout *groupRenderLayout = new QVBoxLayout(groupRender); - QVBoxLayout *dialogLayout = new QVBoxLayout(this); - QVBoxLayout *pageLayout = new QVBoxLayout(graphicsTab); - - QGridLayout *renderLayout = new QGridLayout(); - - QLabel *labelRender = new QLabel(tr("Rendering Subsystem:"), groupRender); - comboRender = new QComboBox(groupRender); - - QLabel *labelRTT = new QLabel(tr("Preferred RTT Mode:"), groupRender); - comboRTT = new QComboBox(groupRender); - - QLabel *labelAA = new QLabel(tr("Antialiasing:"), groupRender); - comboAA = new QComboBox(groupRender); - - renderLayout->addWidget(labelRender, 0, 0, 1, 1); - renderLayout->addWidget(comboRender, 0, 1, 1, 1); - - QSpacerItem *vSpacer1 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); - renderLayout->addItem(vSpacer1, 1, 1, 1, 1); - - renderLayout->addWidget(labelRTT, 2, 0, 1, 1); - renderLayout->addWidget(comboRTT, 2, 1, 1, 1); - renderLayout->addWidget(labelAA, 3, 0, 1, 1); - renderLayout->addWidget(comboAA, 3, 1, 1, 1); - - QSpacerItem *vSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - - groupRenderLayout->addLayout(renderLayout); - groupRenderLayout->addItem(vSpacer2); - - pageLayout->addWidget(groupRender); - - // Display group - QGroupBox *groupDisplay = new QGroupBox(tr("Display"), graphicsTab); - QVBoxLayout *groupDisplayLayout = new QVBoxLayout(groupDisplay); - - QGridLayout *displayLayout = new QGridLayout(); - - QLabel *labelResolution = new QLabel(tr("Resolution:"), groupDisplay); - comboResolution = new QComboBox(groupDisplay); - - QLabel *labelFrequency = new QLabel(tr("Display Frequency:"), groupDisplay); - comboFrequency = new QComboBox(groupDisplay); - - checkVSync = new QCheckBox(tr("Vertical Sync"), groupDisplay); - checkGamma = new QCheckBox(tr("sRGB Gamma Conversion"), groupDisplay); - checkFullScreen = new QCheckBox(tr("Full Screen"), groupDisplay); - - displayLayout->addWidget(labelResolution, 0, 0, 1, 1); - displayLayout->addWidget(comboResolution, 0, 1, 1, 1); - displayLayout->addWidget(labelFrequency, 1, 0, 1, 1); - displayLayout->addWidget(comboFrequency, 1, 1, 1, 1); - - QSpacerItem *vSpacer3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); - displayLayout->addItem(vSpacer3, 2, 1, 1, 1); - - displayLayout->addWidget(checkVSync, 3, 0, 1, 1); - displayLayout->addWidget(checkGamma, 3, 1, 1, 1); - displayLayout->addWidget(checkFullScreen, 6, 0, 1, 1); - - QSpacerItem *vSpacer4 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - - groupDisplayLayout->addLayout(displayLayout); - groupDisplayLayout->addItem(vSpacer4); - - pageLayout->addWidget(groupDisplay); - - - tabWidget->addTab(graphicsTab, QString(tr("Graphics"))); - tabWidget->setCurrentIndex(0); - - dialogLayout->addWidget(tabWidget); - - QDialogButtonBox *buttonBox = new QDialogButtonBox(this); - buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); - - dialogLayout->addWidget(buttonBox); - - setWindowTitle(tr("Settings")); - setWindowIcon(QIcon::fromTheme("preferences-other")); - - // Ogre Settings - // TODO: Find out a way to do this nice and platform-independent - QString filepath = QDir::homePath(); - filepath.append("/.config/openmw/ogre.cfg"); - - ogreConfig = new QSettings(filepath, QSettings::IniFormat); - - // Signals and slots - connect(comboRender, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(rendererChanged(const QString&))); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(writeConfig())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); - - // Ogre stuff - root = new Ogre::Root("plugins.cfg"); - - // Get the available renderers and put them in the combobox - const Ogre::RenderSystemList &renderers = root->getAvailableRenderers(); - - for (Ogre::RenderSystemList::const_iterator r = renderers.begin(); r != renderers.end(); ++r) { - comboRender->addItem((*r)->getName().c_str()); - } - - int index = comboRender->findText(getConfigValue("Render System")); - - if ( index != -1) { - comboRender->setCurrentIndex(index); - } - -} - -QStringList SettingsDialog::getAvailableOptions(const QString& key) -{ - QStringList result; - - uint row = 0; - Ogre::ConfigOptionMap options = mSelectedRenderSystem->getConfigOptions(); - - for (Ogre::ConfigOptionMap::iterator i = options.begin (); i != options.end (); i++, row++) - { - Ogre::StringVector::iterator opt_it; - uint idx = 0; - for (opt_it = i->second.possibleValues.begin (); - opt_it != i->second.possibleValues.end (); opt_it++, idx++) - { - - if (strcmp (key.toStdString().c_str(), i->first.c_str()) == 0) - result << (*opt_it).c_str(); - } - - } - - return result; -} - -void SettingsDialog::rendererChanged(const QString& renderer) -{ - // Set the render system to the selected one - mSelectedRenderSystem = root->getRenderSystemByName(renderer.toStdString().c_str()); - - comboRTT->addItems(getAvailableOptions("RTT Preferred Mode")); - comboAA->addItems(getAvailableOptions("FSAA")); - comboResolution->addItems(getAvailableOptions("Video Mode")); - comboFrequency->addItems(getAvailableOptions("Display Frequency")); - - // Get the value for the option the config file, find if it's in the combobox. - // If it's found, set the current index to that value, otherwise: ignore. - - int index = comboRTT->findText(getConfigValue("RTT Preferred Mode")); - if ( index != -1) - comboRTT->setCurrentIndex(index); - - index = comboAA->findText(getConfigValue("FSAA")); - if ( index != -1) - comboAA->setCurrentIndex(index); - - index = comboResolution->findText(getConfigValue("Video Mode")); - if ( index != -1) - comboResolution->setCurrentIndex(index); - - index = comboFrequency->findText(getConfigValue("Display Frequency")); - if ( index != -1) - comboFrequency->setCurrentIndex(index); - - // Now we do the same for the checkboxes - if (QString::compare(getConfigValue("VSync"), QString("Yes")) == 0) { - checkVSync->setCheckState(Qt::Checked); - } - - if (QString::compare(getConfigValue("sRGB Gamma Conversion"), QString("Yes")) == 0) { - checkGamma->setCheckState(Qt::Checked); - } - - if (QString::compare(getConfigValue("Full Screen"), QString("Yes")) == 0) { - checkFullScreen->setCheckState(Qt::Checked); - } - -} - -QString SettingsDialog::getConfigValue(const QString& key) -{ - QString result; - - ogreConfig->beginGroup(mSelectedRenderSystem->getName().c_str()); - result = ogreConfig->value(key).toString(); - ogreConfig->endGroup(); - - return result; -} - -void SettingsDialog::writeConfig() -{ - // Get the values from the GUI elements and write them to the config file - - // Custom write method: We cannot use QSettings because it does not accept spaces - - QString keyName; - QString fileName; - - QFile file(ogreConfig->fileName()); - - if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) - // File could not be opened, TODO error - close(); - - QTextStream out(&file); - - out << "Render System=" << mSelectedRenderSystem->getName().c_str() << endl << endl; - - // add brackets to the renderer's name - QString renderer = mSelectedRenderSystem->getName().c_str(); - renderer.prepend("["); - renderer.append("]"); - out << renderer << endl; - - out << "Display Frequency=" << comboFrequency->currentText() << endl; - out << "FSAA=" << comboAA->currentText() << endl; - - if (checkFullScreen->checkState() == Qt::Checked) { - out << "Full Screen=Yes" << endl; - } else { - out << "Full Screen=No" << endl; - } - - out << "RTT Preferred Mode=" << comboRTT->currentText() << endl; - - if (checkVSync->checkState() == Qt::Checked) { - out << "VSync=Yes" << endl; - } else { - out << "VSync=No" << endl; - } - - out << "Video Mode=" << comboResolution->currentText() << endl; - - if (checkGamma->checkState() == Qt::Checked) { - out << "sRGB Gamma Conversion=Yes" << endl; - } else { - out << "sRGB Gamma Conversion=No" << endl; - } - - file.close(); - - close(); // Exit dialog -} - diff --git a/apps/launcher/settingsdialog.h b/apps/launcher/settingsdialog.h deleted file mode 100644 index 964f2736b0..0000000000 --- a/apps/launcher/settingsdialog.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef SETTINGSDIALOG_H -#define SETTINGSDIALOG_H - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -class SettingsDialog : public QDialog -{ - Q_OBJECT - -public: - SettingsDialog(); - QStringList getAvailableOptions(const QString& key); - - Ogre::Root *root; - Ogre::RenderSystem *mSelectedRenderSystem; - - QComboBox *comboRender; - QComboBox *comboRTT; - QComboBox *comboAA; - QComboBox *comboResolution; - QComboBox *comboFrequency; - - QCheckBox *checkVSync; - QCheckBox *checkGamma; - QCheckBox *checkFullScreen; - - QSettings *ogreConfig; - - QString getConfigValue(const QString& key); - -public slots: - void rendererChanged(const QString& renderer); - void writeConfig(); -}; - -#endif From d3143c6e52014a12c8fa295eaf4d14fc4bf995e5 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 11 May 2011 20:04:25 +0200 Subject: [PATCH 074/111] Implemented filter function for the plugin list --- apps/launcher/datafilespage.cpp | 17 +++++++++++++++-- apps/launcher/datafilespage.hpp | 4 +++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 3c9eae4616..061981e332 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -15,6 +15,11 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mDataFilesModel = new QStandardItemModel(); // Contains all plugins with masters mPluginsModel = new QStandardItemModel(); // Contains selectable plugins + mPluginsProxyModel = new QSortFilterProxyModel(); + mPluginsProxyModel->setDynamicSortFilter(true); + mPluginsProxyModel->setSourceModel(mPluginsModel); + + // TODO: decide what to do with the selection model mPluginsSelectModel = new QItemSelectionModel(mPluginsModel); QLabel *filterLabel = new QLabel(tr("Filter:"), this); @@ -40,7 +45,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mMastersWidget->verticalHeader()->hide(); mMastersWidget->insertColumn(0); - mPluginsTable->setModel(mPluginsModel); + mPluginsTable->setModel(mPluginsProxyModel); mPluginsTable->setSelectionModel(mPluginsSelectModel); mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); mPluginsTable->setSelectionMode(QAbstractItemView::ExtendedSelection); @@ -113,6 +118,8 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(masterSelectionChanged(const QItemSelection&, const QItemSelection&))); + connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(const QString))); + connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); @@ -531,6 +538,13 @@ void DataFilesPage::resizeRows() mPluginsTable->resizeRowsToContents(); } +void DataFilesPage::filterChanged(const QString filter) +{ + QRegExp regExp(filter, Qt::CaseInsensitive, QRegExp::FixedString); + mPluginsProxyModel->setFilterRegExp(regExp); + +} + void DataFilesPage::profileChanged(const QString &previous, const QString ¤t) { qDebug() << "Profile changed " << current << previous; @@ -544,7 +558,6 @@ void DataFilesPage::profileChanged(const QString &previous, const QString &curre // Deselect the masters mMastersWidget->selectionModel()->clearSelection(); readConfig(); - } void DataFilesPage::readConfig() diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 9127797acb..9573541a8d 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -11,6 +11,7 @@ class ComboBox; class QStandardItemModel; class QItemSelection; class QItemSelectionModel; +class QSortFilterProxyModel; class QStringListModel; class QSettings; class QPushButton; @@ -23,7 +24,6 @@ public: DataFilesPage(QWidget *parent = 0); ComboBox *mProfilesComboBox; - //QStringListModel *mProfilesModel; QSettings *mLauncherConfig; const QStringList checkedPlugins(); @@ -38,6 +38,7 @@ public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); void resizeRows(); + void filterChanged(const QString filter); void profileChanged(const QString &previous, const QString ¤t); void newProfile(); void copyProfile(); @@ -50,6 +51,7 @@ private: QStandardItemModel *mDataFilesModel; QStandardItemModel *mPluginsModel; + QSortFilterProxyModel *mPluginsProxyModel; QItemSelectionModel *mPluginsSelectModel; QPushButton *mNewProfileButton; From ac965af671f870ad8f9905badef249f2e0192fc7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 11 May 2011 20:09:11 +0200 Subject: [PATCH 075/111] Moved functions around for better readability --- apps/launcher/datafilespage.cpp | 186 ++++++++++++++++---------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 061981e332..8663102b00 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -130,99 +130,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) setupConfig(); } -void DataFilesPage::newProfile() -{ - bool ok; - QString text = QInputDialog::getText(this, tr("New Profile"), - tr("Profile Name:"), QLineEdit::Normal, - tr("New Profile"), &ok); - if (ok && !text.isEmpty()) { - if (mProfilesComboBox->findText(text) != -1) - { - QMessageBox::warning(this, tr("Profile already exists"), - tr("the profile %0 already exists.").arg(text), - QMessageBox::Ok); - } else { - // Add the new profile to the combobox - mProfilesComboBox->addItem(text); - mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text)); - - } - - } - -} - -void DataFilesPage::copyProfile() -{ - QString profile = mProfilesComboBox->currentText(); - bool ok; - - QString text = QInputDialog::getText(this, tr("Copy Profile"), - tr("Profile Name:"), QLineEdit::Normal, - tr("%0 Copy").arg(profile), &ok); - if (ok && !text.isEmpty()) { - if (mProfilesComboBox->findText(text) != -1) - { - QMessageBox::warning(this, tr("Profile already exists"), - tr("the profile %0 already exists.").arg(text), - QMessageBox::Ok); - } else { - // Add the new profile to the combobox - mProfilesComboBox->addItem(text); - - // First write the current profile as the new profile - writeConfig(text); - mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text)); - - } - - } - -} - -void DataFilesPage::deleteProfile() -{ - QString profile = mProfilesComboBox->currentText(); - - - if (profile.isEmpty()) { - return; - } - - QMessageBox deleteMessageBox(this); - deleteMessageBox.setWindowTitle(tr("Delete Profile")); - deleteMessageBox.setText(tr("Are you sure you want to delete %0?").arg(profile)); - deleteMessageBox.setIcon(QMessageBox::Warning); - QAbstractButton *deleteButton = - deleteMessageBox.addButton(tr("Delete"), QMessageBox::ActionRole); - - deleteMessageBox.addButton(QMessageBox::Cancel); - - deleteMessageBox.exec(); - - if (deleteMessageBox.clickedButton() == deleteButton) { - - qDebug() << "Delete profile " << profile; - - // Make sure we have no groups open - while (!mLauncherConfig->group().isEmpty()) { - mLauncherConfig->endGroup(); - } - - mLauncherConfig->beginGroup("Profiles"); - - // Open the profile-name subgroup - mLauncherConfig->beginGroup(profile); - mLauncherConfig->remove(""); // Clear the subgroup - mLauncherConfig->endGroup(); - mLauncherConfig->endGroup(); - - // Remove the profile from the combobox - mProfilesComboBox->removeItem(mProfilesComboBox->findText(profile)); - } -} - void DataFilesPage::setupDataFiles(const QString &path) { qDebug() << "setupDataFiles called!"; @@ -361,6 +268,99 @@ void DataFilesPage::setupConfig() connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); } +void DataFilesPage::newProfile() +{ + bool ok; + QString text = QInputDialog::getText(this, tr("New Profile"), + tr("Profile Name:"), QLineEdit::Normal, + tr("New Profile"), &ok); + if (ok && !text.isEmpty()) { + if (mProfilesComboBox->findText(text) != -1) + { + QMessageBox::warning(this, tr("Profile already exists"), + tr("the profile %0 already exists.").arg(text), + QMessageBox::Ok); + } else { + // Add the new profile to the combobox + mProfilesComboBox->addItem(text); + mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text)); + + } + + } + +} + +void DataFilesPage::copyProfile() +{ + QString profile = mProfilesComboBox->currentText(); + bool ok; + + QString text = QInputDialog::getText(this, tr("Copy Profile"), + tr("Profile Name:"), QLineEdit::Normal, + tr("%0 Copy").arg(profile), &ok); + if (ok && !text.isEmpty()) { + if (mProfilesComboBox->findText(text) != -1) + { + QMessageBox::warning(this, tr("Profile already exists"), + tr("the profile %0 already exists.").arg(text), + QMessageBox::Ok); + } else { + // Add the new profile to the combobox + mProfilesComboBox->addItem(text); + + // First write the current profile as the new profile + writeConfig(text); + mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text)); + + } + + } + +} + +void DataFilesPage::deleteProfile() +{ + QString profile = mProfilesComboBox->currentText(); + + + if (profile.isEmpty()) { + return; + } + + QMessageBox deleteMessageBox(this); + deleteMessageBox.setWindowTitle(tr("Delete Profile")); + deleteMessageBox.setText(tr("Are you sure you want to delete %0?").arg(profile)); + deleteMessageBox.setIcon(QMessageBox::Warning); + QAbstractButton *deleteButton = + deleteMessageBox.addButton(tr("Delete"), QMessageBox::ActionRole); + + deleteMessageBox.addButton(QMessageBox::Cancel); + + deleteMessageBox.exec(); + + if (deleteMessageBox.clickedButton() == deleteButton) { + + qDebug() << "Delete profile " << profile; + + // Make sure we have no groups open + while (!mLauncherConfig->group().isEmpty()) { + mLauncherConfig->endGroup(); + } + + mLauncherConfig->beginGroup("Profiles"); + + // Open the profile-name subgroup + mLauncherConfig->beginGroup(profile); + mLauncherConfig->remove(""); // Clear the subgroup + mLauncherConfig->endGroup(); + mLauncherConfig->endGroup(); + + // Remove the profile from the combobox + mProfilesComboBox->removeItem(mProfilesComboBox->findText(profile)); + } +} + void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { if (mMastersWidget->selectionModel()->hasSelection()) { From b877a94481d539fd0f6a94a59bff2fb9d6a91c36 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 11 May 2011 22:23:37 +0200 Subject: [PATCH 076/111] Modified the launcher to use the new multi-dir plugin approach --- apps/launcher/datafilespage.cpp | 70 +++++++++++++++++++-------------- apps/launcher/datafilespage.hpp | 2 +- apps/launcher/maindialog.cpp | 32 ++++++++++++++- 3 files changed, 71 insertions(+), 33 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 8663102b00..32fc4521e5 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -4,11 +4,14 @@ #include #include +#include +#include #include "datafilespage.hpp" #include "lineedit.hpp" using namespace ESM; +using namespace std; DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) { @@ -130,49 +133,51 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) setupConfig(); } -void DataFilesPage::setupDataFiles(const QString &path) +void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) { qDebug() << "setupDataFiles called!"; - // TODO: Add a warning when a master is missing - QDir dataFilesDir(path); + // Put the paths in a boost::filesystem vector to use with Files::Collections + std::vector dataDirs; - if (!dataFilesDir.exists()) - qWarning("Cannot find the plugin directory"); + foreach (const QString ¤tPath, paths) { + dataDirs.push_back(boost::filesystem::path(currentPath.toStdString())); + } - // First we add all the master files from the plugin dir - dataFilesDir.setNameFilters((QStringList() << "*.esm")); // Only load masters + // Create a file collection for the dataDirs + Files::Collections mFileCollections(dataDirs, strict); - QStringList masterFiles = dataFilesDir.entryList(); + // First we add all the master files + const Files::MultiDirCollection &esm = mFileCollections.getCollection(".esm"); + unsigned int i = 0; // Row number - for (int i=0; isecond.filename().string()); + + QString currentMaster = QString::fromStdString(iter->second.filename().string()); const QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); if (itemList.isEmpty()) // Master is not yet in the widget - { - mMastersWidget->insertRow(i); - QTableWidgetItem *item = new QTableWidgetItem(currentMaster); - mMastersWidget->setItem(i, 0, item); - } + { + qDebug() << "Master not yet in the widget, rowcount is " << i; + + mMastersWidget->insertRow(i); + QTableWidgetItem *item = new QTableWidgetItem(currentMaster); + mMastersWidget->setItem(i, 0, item); + ++i; + } } // Now on to the plugins - dataFilesDir.setNameFilters((QStringList() << "*.esp")); // Only load plugins + const Files::MultiDirCollection &esp = mFileCollections.getCollection(".esp"); - QStringList pluginFiles = dataFilesDir.entryList(); - - for (int i=0; isecond.string()); // First we fill the availableMasters and the mMastersWidget ESMReader::MasterList mlist = fileReader.getMasters(); @@ -185,6 +190,7 @@ void DataFilesPage::setupDataFiles(const QString &path) if (itemList.isEmpty()) // Master is not yet in the widget { + // TODO: Show warning, missing master mMastersWidget->insertRow(i); QTableWidgetItem *item = new QTableWidgetItem(currentMaster); mMastersWidget->setItem(i, 0, item); @@ -193,9 +199,9 @@ void DataFilesPage::setupDataFiles(const QString &path) availableMasters.sort(); // Sort the masters alphabetically - // Now we put the currentFile in the mDataFilesModel under its masters + // Now we put the current plugin in the mDataFilesModel under its masters QStandardItem *parent = new QStandardItem(availableMasters.join(",")); - QStandardItem *child = new QStandardItem(currentFile); + QStandardItem *child = new QStandardItem(QString::fromStdString(iter->second.filename().string())); const QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); @@ -210,6 +216,8 @@ void DataFilesPage::setupDataFiles(const QString &path) } } + // TODO: Better dynamic resizing of rows + resizeRows(); readConfig(); } @@ -480,11 +488,13 @@ void DataFilesPage::setCheckstate(QModelIndex index) if (!index.isValid()) return; - if (mPluginsModel->data(index, Qt::CheckStateRole) == Qt::Checked) { + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(index); + + if (mPluginsModel->data(sourceModelIndex, Qt::CheckStateRole) == Qt::Checked) { // Selected row is checked, uncheck it - mPluginsModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); + mPluginsModel->setData(sourceModelIndex, Qt::Unchecked, Qt::CheckStateRole); } else { - mPluginsModel->setData(index, Qt::Checked, Qt::CheckStateRole); + mPluginsModel->setData(sourceModelIndex, Qt::Checked, Qt::CheckStateRole); } } @@ -542,7 +552,7 @@ void DataFilesPage::filterChanged(const QString filter) { QRegExp regExp(filter, Qt::CaseInsensitive, QRegExp::FixedString); mPluginsProxyModel->setFilterRegExp(regExp); - + resizeRows(); } void DataFilesPage::profileChanged(const QString &previous, const QString ¤t) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 9573541a8d..a575ea6e65 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -32,7 +32,7 @@ public: void readConfig(); void writeConfig(QString profile = QString()); - void setupDataFiles(const QString &path); + void setupDataFiles(const QStringList &paths, bool strict); public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 14a8f93a99..d3bc1603df 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -94,8 +94,36 @@ void MainDialog::createPages() mGraphicsPage = new GraphicsPage(this); mDataFilesPage = new DataFilesPage(this); - QString dataDir = mGameConfig->value("data").toString(); - mDataFilesPage->setupDataFiles(dataDir); + // First we retrieve all data= keys from the config + // We can't use QSettings directly because it + // does not support multiple keys with the same name + QFile file(mGameConfig->fileName()); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return; // File cannot be opened or created TODO: throw error + } + + QTextStream in(&file); + + QStringList dataDirs; + + // Add each data= value + while (!in.atEnd()) { + QString line = in.readLine(); + + if (line.startsWith("data=")) { + dataDirs.append(line.remove("data=")); + } + } + + // Add the data-local= key + QString dataLocal = mGameConfig->value("data-local").toString(); + if (!dataLocal.isEmpty()) { + dataDirs.append(dataLocal); + } + + // Now pass the datadirs on to the DataFilesPage + mDataFilesPage->setupDataFiles(dataDirs, mGameConfig->value("fs-strict").toBool()); // Set the combobox of the play page to imitate the comobox on the datafilespage mPlayPage->mProfilesComboBox->setModel(mDataFilesPage->mProfilesComboBox->model()); From 157822eeafa190eb10e3279e0df5d9fa8e4e41b8 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 11 May 2011 22:44:11 +0200 Subject: [PATCH 077/111] Removed what's this? button from dialog titlebar --- apps/launcher/maindialog.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index d3bc1603df..2e973a5ff1 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -44,6 +44,8 @@ MainDialog::MainDialog() setWindowTitle(tr("OpenMW Launcher")); setWindowIcon(QIcon(":/images/openmw-icon.png")); + // Remove what's this? button + setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); setMinimumSize(QSize(575, 575)); connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); From eba813b4acb20bed1bc630e222f0bbcb16caba03 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 13 May 2011 01:58:26 +0200 Subject: [PATCH 078/111] Fixed clear button in the filter line-edit and changed "delete profile" icon --- apps/launcher/lineedit.cpp | 2 +- .../resources/icons/tango/edit-delete.png | Bin 680 -> 793 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/launcher/lineedit.cpp b/apps/launcher/lineedit.cpp index d39002ff79..254c09fce3 100644 --- a/apps/launcher/lineedit.cpp +++ b/apps/launcher/lineedit.cpp @@ -15,7 +15,7 @@ LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) { clearButton = new QToolButton(this); - QPixmap pixmap(":resources/clear.png"); + QPixmap pixmap(":images/clear.png"); clearButton->setIcon(QIcon(pixmap)); clearButton->setIconSize(pixmap.size()); clearButton->setCursor(Qt::ArrowCursor); diff --git a/apps/launcher/resources/icons/tango/edit-delete.png b/apps/launcher/resources/icons/tango/edit-delete.png index ea03150a1c15ec650240042fb695e7be84bc3e28..d7667c36b49c273d5495c260ca6b5180f110d80c 100644 GIT binary patch delta 769 zcmV+c1OEJ|1(^nrB!2{RLP=Bz2nYy#2xN!=000?uMObuGZ)S9NVRB^vcXxL#X>MzC zV_|S*E^l&Yo9;Xs00083Nkl8520`;Hbhu00%D=9vIA|X7j~**#@d2p}>_Oj=wul zsg#q!K`93Tos|_f>UB2Wzt@#4^T1CAS5vd@KR{I^bns|sY;5GyiHUga$rF|r7P9qs z?*hwn;vn!lyMNt*ozA&Nr?c5oeXj6XYNjE8z?F~2$45p_pN^Mq-D0s;>i}N^b3pJX z9M0hKn#lfrQ8cjR{bTBG*iF@;gy7x_QcF*8U+MBT|;skE= ziF~s+isHp~yQwhl1kQeP>{xm2@naTiwNBmp=EqUgAAgA)7nrGv2taD42H&^MUVTv2 z-C8JzKE zckA9a_x+8W6qw#dfTu0hC>BBCkOSzhu41YHL270OUwX4Uum43(3H;JSw0H;3!HbQT zFBwRZ4u5dC*Qyzu^Jae(kO_gGfg`bVou(=do;igF>u=xct}sj-T&{|^0&>Bd-QGq@ zB3}U0Lt(fhQ|;z(-x8QpnBGBXIo}dlV(%JQ=aP+86A$IkNhAj-j=`B@J4f!WmTd9nU4z20#US||-v00000NkvXXu0mjfo6~S- delta 656 zcmV;B0&o492B-y)B!32COGiWijR1}Siy`!*egFUf32;bRa{vGf6951U69E94oEQKA z00(qQO+^RR1``h*2}rZc#sB~S4|GLXbVF}#ZDnqB0BK|(Y;R|8hQ@cf0006SNkl0nX^lS0%q z#YP1;Cv`C~wifvVWH7q5i>VkBIIeP6?s|6)au-91QGBQO`{sE*@B4fS?A7A^!aG@( z#_<=$akkoxxl9xQXmcpb()eup8Wcsbgoa^snGM6hljX9thz?EX=KT3KQe1shE-90fQ_R}hdw(VxozSY)3K@${X|-CFnux~q zx0N^K;=%)}D+0^1s@hSvd9O!nwSEvoq2XR#H{`*=AzIUP$>DJLX@=S4IGgSFBS^F1 zd47i^$=5cU4I`&UAnoob0|O^?m&+-;``m2+h=jvOy0PDGtgnAK2>>h4o;uU1*|yqI&hH15OG`!g{l||a6Y0@pBHgDb3SPc?(L+&m;7UA6 qq>?j4AP|_jJ)ix~vfPFV_zC39!w9AKEM))y00{s|MNUMnLSTYG%Ol7D From 8c04d00a50edb03a3a16a1503477f32ede8dfd07 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 6 Jun 2011 16:07:20 +0200 Subject: [PATCH 079/111] Modified row height of the plugins table to use the height of checkbox instead of dynamic resizing --- apps/launcher/datafilespage.cpp | 18 ++++++------------ apps/launcher/datafilespage.hpp | 1 - 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 32fc4521e5..d08709a803 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -57,6 +57,12 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mPluginsTable->horizontalHeader()->setStretchLastSection(true); mPluginsTable->horizontalHeader()->hide(); + // Set the row height to the size of the checkboxes + QCheckBox checkBox; + unsigned int height = checkBox.sizeHint().height() + 2; + + mPluginsTable->verticalHeader()->setDefaultSectionSize(height); + mPluginsTable->setDragEnabled(true); mPluginsTable->setDragDropMode(QAbstractItemView::InternalMove); mPluginsTable->setDropIndicatorShown(true); @@ -124,7 +130,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(const QString))); connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); - connect(mPluginsModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(resizeRows())); connect(mNewProfileButton, SIGNAL(pressed()), this, SLOT(newProfile())); connect(mCopyProfileButton, SIGNAL(pressed()), this, SLOT(copyProfile())); @@ -216,8 +221,6 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) } } - // TODO: Better dynamic resizing of rows - resizeRows(); readConfig(); } @@ -399,7 +402,6 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const { // Append the plugins from the current master to pluginsmodel addPlugins(currentIndex); - mPluginsTable->resizeRowsToContents(); } } } @@ -535,24 +537,16 @@ void DataFilesPage::uncheckPlugins() if (index.isValid()) { // See if the current item is checked if (mPluginsModel->data(index, Qt::CheckStateRole) == Qt::Checked) { - qDebug() << "Uncheck!"; mPluginsModel->setData(index, Qt::Unchecked, Qt::CheckStateRole); } } } } -void DataFilesPage::resizeRows() -{ - // Contents changed - mPluginsTable->resizeRowsToContents(); -} - void DataFilesPage::filterChanged(const QString filter) { QRegExp regExp(filter, Qt::CaseInsensitive, QRegExp::FixedString); mPluginsProxyModel->setFilterRegExp(regExp); - resizeRows(); } void DataFilesPage::profileChanged(const QString &previous, const QString ¤t) diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index a575ea6e65..6b43c87ab7 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -37,7 +37,6 @@ public: public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void setCheckstate(QModelIndex index); - void resizeRows(); void filterChanged(const QString filter); void profileChanged(const QString &previous, const QString ¤t); void newProfile(); From f219b0d47abdc68e2612b94866f2d56c999579a7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Mon, 6 Jun 2011 21:33:33 +0200 Subject: [PATCH 080/111] Added error messages and fixed config file loading --- apps/launcher/datafilespage.cpp | 4 --- apps/launcher/maindialog.cpp | 58 +++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index d08709a803..fc27ff7cdf 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -22,9 +22,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mPluginsProxyModel->setDynamicSortFilter(true); mPluginsProxyModel->setSourceModel(mPluginsModel); - // TODO: decide what to do with the selection model - mPluginsSelectModel = new QItemSelectionModel(mPluginsModel); - QLabel *filterLabel = new QLabel(tr("Filter:"), this); LineEdit *filterLineEdit = new LineEdit(this); @@ -49,7 +46,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mMastersWidget->insertColumn(0); mPluginsTable->setModel(mPluginsProxyModel); - mPluginsTable->setSelectionModel(mPluginsSelectModel); mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); mPluginsTable->setSelectionMode(QAbstractItemView::ExtendedSelection); mPluginsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 2e973a5ff1..51d3a3a0b4 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -100,9 +100,18 @@ void MainDialog::createPages() // We can't use QSettings directly because it // does not support multiple keys with the same name QFile file(mGameConfig->fileName()); + qDebug() << "createPages gamefilename: " << mGameConfig->fileName(); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - return; // File cannot be opened or created TODO: throw error + QMessageBox msgBox; + msgBox.setWindowTitle("Error opening OpenMW configuration file"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not open %0

\ + Please make sure you have the right permissions and try again.
").arg(file.fileName())); + msgBox.exec(); + + QApplication::exit(); // File cannot be opened or created } QTextStream in(&file); @@ -124,8 +133,20 @@ void MainDialog::createPages() dataDirs.append(dataLocal); } - // Now pass the datadirs on to the DataFilesPage - mDataFilesPage->setupDataFiles(dataDirs, mGameConfig->value("fs-strict").toBool()); + if (!dataDirs.isEmpty()) { + // Now pass the datadirs on to the DataFilesPage + mDataFilesPage->setupDataFiles(dataDirs, mGameConfig->value("fs-strict").toBool()); + } else { + QMessageBox msgBox; + msgBox.setWindowTitle("Error reading OpenMW configuration file"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not read the location of the data files

\ + Please make sure OpenMW is correctly configured and try again.
")); + msgBox.exec(); + + QApplication::exit(); // No data or data-local entries in openmw.cfg + } // Set the combobox of the play page to imitate the comobox on the datafilespage mPlayPage->mProfilesComboBox->setModel(mDataFilesPage->mProfilesComboBox->model()); @@ -192,7 +213,6 @@ void MainDialog::play() writeConfig(); #ifdef Q_WS_WIN - // Windows TODO: proper install path handling QString game = "./openmw.exe"; QFile file(game); #else @@ -255,7 +275,7 @@ void MainDialog::setupConfig() if (!file.exists()) { config = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, - "openmw", "launcher.cfg")); + "openmw", "openmw.cfg")); } file.setFileName(config); // Just for displaying information @@ -286,12 +306,19 @@ void MainDialog::writeConfig() qDebug() << "Writing to openmw.cfg"; // Open the config as a QFile + QFile file(mGameConfig->fileName()); - QString cfgfile = "./openmw.cfg"; - - QFile file(cfgfile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - // File cannot be opened or created TODO: throw error + // File cannot be opened or created + QMessageBox msgBox; + msgBox.setWindowTitle("Error opening OpenMW configuration file"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not open %0

\ + Please make sure you have the right permissions and try again.
").arg(file.fileName())); + msgBox.exec(); + + return; } QTextStream in(&file); @@ -309,7 +336,15 @@ void MainDialog::writeConfig() // Now we write back the other config entries if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { - // File cannot be opened or created TODO: throw error + QMessageBox msgBox; + msgBox.setWindowTitle("Error writing OpenMW configuration file"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not write to %0

\ + Please make sure you have the right permissions and try again.
").arg(file.fileName())); + msgBox.exec(); + + return; } file.write(buffer); @@ -317,15 +352,12 @@ void MainDialog::writeConfig() // Write the list of game files to the config foreach (const QString ¤tFile, dataFiles) { - //QFileInfo dataFile = QFileInfo(QString(currentFile).prepend(dataPath)); - //if (dataFile.exists()) { if (currentFile.endsWith(QString(".esm"), Qt::CaseInsensitive)) { out << "master=" << currentFile << endl; } else if (currentFile.endsWith(QString(".esp"), Qt::CaseInsensitive)) { out << "plugin=" << currentFile << endl; } - //} } file.close(); From 9d2bf8af628ad488119e27cabba3c5992c77341b Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 7 Jun 2011 01:42:53 +0200 Subject: [PATCH 081/111] Added support for the load order of plugins specified in the profiles --- apps/launcher/CMakeLists.txt | 3 ++ apps/launcher/datafilespage.cpp | 34 +++++++++--- apps/launcher/maindialog.cpp | 3 +- apps/launcher/naturalsort.cpp | 95 +++++++++++++++++++++++++++++++++ apps/launcher/naturalsort.hpp | 9 ++++ 5 files changed, 134 insertions(+), 10 deletions(-) create mode 100644 apps/launcher/naturalsort.cpp create mode 100644 apps/launcher/naturalsort.hpp diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index db7166af72..598b23fd05 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -5,6 +5,7 @@ set(LAUNCHER maindialog.cpp playpage.cpp graphicspage.cpp + naturalsort.cpp datafilespage.hpp lineedit.hpp @@ -12,6 +13,7 @@ set(LAUNCHER playpage.hpp combobox.hpp graphicspage.hpp + naturalsort.hpp ) set(MOC_HDRS @@ -21,6 +23,7 @@ set(MOC_HDRS playpage.hpp combobox.hpp graphicspage.hpp + ) find_package(Qt4 REQUIRED) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index fc27ff7cdf..91e165d0b9 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -9,6 +9,7 @@ #include "datafilespage.hpp" #include "lineedit.hpp" +#include "naturalsort.hpp" using namespace ESM; using namespace std; @@ -574,19 +575,18 @@ void DataFilesPage::readConfig() mLauncherConfig->beginGroup(profile); QStringList childKeys = mLauncherConfig->childKeys(); + QStringList plugins; + + // Sort the child keys numerical instead of alphabetically + // i.e. Plugin1, Plugin2 instead of Plugin1, Plugin10 + qSort(childKeys.begin(), childKeys.end(), naturalSortLessThanCI); foreach (const QString &key, childKeys) { const QString keyValue = mLauncherConfig->value(key).toString(); if (key.startsWith("Plugin")) { - const QList pluginList = mPluginsModel->findItems(keyValue); - - if (!pluginList.isEmpty()) - { - foreach (const QStandardItem *currentPlugin, pluginList) { - mPluginsModel->setData(currentPlugin->index(), Qt::Checked, Qt::CheckStateRole); - } - } + plugins.append(keyValue); + continue; } if (key.startsWith("Master")) { @@ -600,6 +600,24 @@ void DataFilesPage::readConfig() } } } + + // Iterate over the plugins to set their checkstate and position + for (int i = 0; i < plugins.size(); ++i) { + const QString plugin = plugins.at(i); + + const QList pluginList = mPluginsModel->findItems(plugin); + + if (!pluginList.isEmpty()) + { + foreach (const QStandardItem *currentPlugin, pluginList) { + mPluginsModel->setData(currentPlugin->index(), Qt::Checked, Qt::CheckStateRole); + + // Move the plugin to the position specified in the config file + mPluginsModel->insertRow(i, mPluginsModel->takeRow(currentPlugin->row())); + } + } + } + } void DataFilesPage::writeConfig(QString profile) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 51d3a3a0b4..96fa3442e4 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -100,7 +100,6 @@ void MainDialog::createPages() // We can't use QSettings directly because it // does not support multiple keys with the same name QFile file(mGameConfig->fileName()); - qDebug() << "createPages gamefilename: " << mGameConfig->fileName(); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox msgBox; @@ -230,7 +229,7 @@ void MainDialog::play() msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setText(tr("
Could not find OpenMW

\ The OpenMW application is not found.
\ - Please make sure OpenMW is installed and try again.
")); + Please make sure OpenMW is installed correctly and try again.
")); msgBox.exec(); return; diff --git a/apps/launcher/naturalsort.cpp b/apps/launcher/naturalsort.cpp new file mode 100644 index 0000000000..648038ed7f --- /dev/null +++ b/apps/launcher/naturalsort.cpp @@ -0,0 +1,95 @@ +/* + * This file contains code found in the QtGui module of the Qt Toolkit. + * See Qt's qfilesystemmodel source files for more information + */ + +#include "naturalsort.hpp" + +static inline QChar getNextChar(const QString &s, int location) +{ + return (location < s.length()) ? s.at(location) : QChar(); +} + +/*! + * Natural number sort, skips spaces. + * + * Examples: + * 1, 2, 10, 55, 100 + * 01.jpg, 2.jpg, 10.jpg + * + * Note on the algorithm: + * Only as many characters as necessary are looked at and at most they all + * are looked at once. + * + * Slower then QString::compare() (of course) + */ +int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs) +{ + for (int l1 = 0, l2 = 0; l1 <= s1.count() && l2 <= s2.count(); ++l1, ++l2) { + // skip spaces, tabs and 0's + QChar c1 = getNextChar(s1, l1); + while (c1.isSpace()) + c1 = getNextChar(s1, ++l1); + QChar c2 = getNextChar(s2, l2); + while (c2.isSpace()) + c2 = getNextChar(s2, ++l2); + + if (c1.isDigit() && c2.isDigit()) { + while (c1.digitValue() == 0) + c1 = getNextChar(s1, ++l1); + while (c2.digitValue() == 0) + c2 = getNextChar(s2, ++l2); + + int lookAheadLocation1 = l1; + int lookAheadLocation2 = l2; + int currentReturnValue = 0; + // find the last digit, setting currentReturnValue as we go if it isn't equal + for ( + QChar lookAhead1 = c1, lookAhead2 = c2; + (lookAheadLocation1 <= s1.length() && lookAheadLocation2 <= s2.length()); + lookAhead1 = getNextChar(s1, ++lookAheadLocation1), + lookAhead2 = getNextChar(s2, ++lookAheadLocation2) + ) { + bool is1ADigit = !lookAhead1.isNull() && lookAhead1.isDigit(); + bool is2ADigit = !lookAhead2.isNull() && lookAhead2.isDigit(); + if (!is1ADigit && !is2ADigit) + break; + if (!is1ADigit) + return -1; + if (!is2ADigit) + return 1; + if (currentReturnValue == 0) { + if (lookAhead1 < lookAhead2) { + currentReturnValue = -1; + } else if (lookAhead1 > lookAhead2) { + currentReturnValue = 1; + } + } + } + if (currentReturnValue != 0) + return currentReturnValue; + } + + if (cs == Qt::CaseInsensitive) { + if (!c1.isLower()) c1 = c1.toLower(); + if (!c2.isLower()) c2 = c2.toLower(); + } + int r = QString::localeAwareCompare(c1, c2); + if (r < 0) + return -1; + if (r > 0) + return 1; + } + // The two strings are the same (02 == 2) so fall back to the normal sort + return QString::compare(s1, s2, cs); +} + +bool naturalSortLessThanCS( const QString &left, const QString &right ) +{ + return (naturalCompare( left, right, Qt::CaseSensitive ) < 0); +} + +bool naturalSortLessThanCI( const QString &left, const QString &right ) +{ + return (naturalCompare( left, right, Qt::CaseInsensitive ) < 0); +} diff --git a/apps/launcher/naturalsort.hpp b/apps/launcher/naturalsort.hpp new file mode 100644 index 0000000000..2d314396f9 --- /dev/null +++ b/apps/launcher/naturalsort.hpp @@ -0,0 +1,9 @@ +#ifndef NATURALSORT_H +#define NATURALSORT_H + +#include + +bool naturalSortLessThanCS( const QString &left, const QString &right ); +bool naturalSortLessThanCI( const QString &left, const QString &right ); + +#endif \ No newline at end of file From 8495d91d7c8db8911cbfc3265ea592f92d60ad10 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 7 Jun 2011 20:21:01 +0200 Subject: [PATCH 082/111] Added right-click context menu for modifying the plugins, e.g. move up, check/uncheck --- apps/launcher/datafilespage.cpp | 326 +++++++++++++++++++++++++++++--- apps/launcher/datafilespage.hpp | 35 +++- 2 files changed, 332 insertions(+), 29 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 91e165d0b9..670f9def2b 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -87,38 +87,46 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); - mNewProfileButton = new QPushButton(this); + /*mNewProfileButton = new QPushButton(this); mNewProfileButton->setIcon(QIcon::fromTheme("document-new")); - mNewProfileButton->setToolTip(tr("New Profile")); - mNewProfileButton->setShortcut(QKeySequence(tr("Ctrl+N"))); + //mNewProfileButton->setToolTip(tr("New Profile")); + //mNewProfileButton->setShortcut(QKeySequence(tr("Ctrl+N"))); mCopyProfileButton = new QPushButton(this); mCopyProfileButton->setIcon(QIcon::fromTheme("edit-copy")); - mCopyProfileButton->setToolTip(tr("Copy Profile")); + //mCopyProfileButton->setToolTip(tr("Copy Profile")); mDeleteProfileButton = new QPushButton(this); mDeleteProfileButton->setIcon(QIcon::fromTheme("edit-delete")); - mDeleteProfileButton->setToolTip(tr("Delete Profile")); - mDeleteProfileButton->setShortcut(QKeySequence(tr("Delete"))); + //mDeleteProfileButton->setToolTip(tr("Delete Profile"));*/ + //mDeleteProfileButton->setShortcut(QKeySequence(tr("Delete"))); - QHBoxLayout *bottomLayout = new QHBoxLayout(); + //QHBoxLayout *bottomLayout = new QHBoxLayout(); + //bottomLayout = new QHBoxLayout(); - bottomLayout->addWidget(profileLabel); - bottomLayout->addWidget(mProfilesComboBox); - bottomLayout->addWidget(mNewProfileButton); + mProfileToolBar = new QToolBar(this); + mProfileToolBar->setMovable(false); + mProfileToolBar->setIconSize(QSize(16, 16)); + + mProfileToolBar->addWidget(profileLabel); + mProfileToolBar->addWidget(mProfilesComboBox); + + //splitter->addWidget(profileToolBar); + //bottomLayout->addWidget(profileLabel); + //bottomLayout->addWidget(mProfilesComboBox); + /*bottomLayout->addWidget(mNewProfileButton); bottomLayout->addWidget(mCopyProfileButton); - bottomLayout->addWidget(mDeleteProfileButton); + bottomLayout->addWidget(mDeleteProfileButton);*/ QVBoxLayout *pageLayout = new QVBoxLayout(this); // Add some space above and below the page items QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); - QSpacerItem *vSpacer3 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + pageLayout->addLayout(topLayout); pageLayout->addItem(vSpacer2); pageLayout->addWidget(splitter); - pageLayout->addLayout(bottomLayout); - pageLayout->addItem(vSpacer3); + pageLayout->addWidget(mProfileToolBar); connect(mMastersWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), @@ -126,13 +134,13 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(const QString))); - connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckstate(QModelIndex))); + connect(mPluginsTable, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(setCheckState(QModelIndex))); + connect(mPluginsTable, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); + - connect(mNewProfileButton, SIGNAL(pressed()), this, SLOT(newProfile())); - connect(mCopyProfileButton, SIGNAL(pressed()), this, SLOT(copyProfile())); - connect(mDeleteProfileButton, SIGNAL(pressed()), this, SLOT(deleteProfile())); setupConfig(); + createActions(); } void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) @@ -276,15 +284,83 @@ void DataFilesPage::setupConfig() connect(mProfilesComboBox, SIGNAL(textChanged(const QString&, const QString&)), this, SLOT(profileChanged(const QString&, const QString&))); } +void DataFilesPage::createActions() +{ + + // Profile actions + mNewProfileAction = new QAction(QIcon::fromTheme("document-new"), tr("&New Profile"), this); + mNewProfileAction->setToolTip(tr("New Profile")); + mNewProfileAction->setShortcut(QKeySequence(tr("Ctrl+N"))); + connect(mNewProfileAction, SIGNAL(triggered()), this, SLOT(newProfile())); + + + mCopyProfileAction = new QAction(QIcon::fromTheme("edit-copy"), tr("&Copy Profile"), this); + mCopyProfileAction->setToolTip(tr("Copy Profile")); + mCopyProfileAction->setShortcut(QKeySequence(tr("Ctrl+C"))); + connect(mCopyProfileAction, SIGNAL(triggered()), this, SLOT(copyProfile())); + + mDeleteProfileAction = new QAction(QIcon::fromTheme("edit-delete"), tr("Delete Profile"), this); + mDeleteProfileAction->setToolTip(tr("Delete Profile")); + mDeleteProfileAction->setShortcut(QKeySequence(tr("Delete"))); + connect(mDeleteProfileAction, SIGNAL(triggered()), this, SLOT(deleteProfile())); + + // Add the newly created actions to the toolbar + mProfileToolBar->addSeparator(); + mProfileToolBar->addAction(mNewProfileAction); + mProfileToolBar->addAction(mCopyProfileAction); + mProfileToolBar->addAction(mDeleteProfileAction); + + // Context menu actions + mMoveUpAction = new QAction(QIcon::fromTheme("go-up"), tr("Move &Up"), this); + mMoveUpAction->setShortcut(QKeySequence(tr("Ctrl+U"))); + connect(mMoveUpAction, SIGNAL(triggered()), this, SLOT(moveUp())); + + mMoveDownAction = new QAction(QIcon::fromTheme("go-down"), tr("&Move Down"), this); + mMoveDownAction->setShortcut(QKeySequence(tr("Ctrl+M"))); + connect(mMoveDownAction, SIGNAL(triggered()), this, SLOT(moveDown())); + + mMoveTopAction = new QAction(QIcon::fromTheme("go-top"), tr("Move to Top"), this); + mMoveTopAction->setShortcut(QKeySequence(tr("Ctrl+Shift+U"))); + connect(mMoveTopAction, SIGNAL(triggered()), this, SLOT(moveTop())); + + mMoveBottomAction = new QAction(QIcon::fromTheme("go-bottom"), tr("Move to Bottom"), this); + mMoveBottomAction->setShortcut(QKeySequence(tr("Ctrl+Shift+M"))); + connect(mMoveBottomAction, SIGNAL(triggered()), this, SLOT(moveBottom())); + + mCheckAction = new QAction(tr("Check selected"), this); + connect(mCheckAction, SIGNAL(triggered()), this, SLOT(check())); + + mUncheckAction = new QAction(tr("Uncheck selected"), this); + connect(mUncheckAction, SIGNAL(triggered()), this, SLOT(uncheck())); + + // Makes shortcuts work even if the context menu is hidden + this->addAction(mMoveUpAction); + this->addAction(mMoveDownAction); + this->addAction(mMoveTopAction); + this->addAction(mMoveBottomAction); + + // Context menu for the plugins table + mContextMenu = new QMenu(this); + + mContextMenu->addAction(mMoveUpAction); + mContextMenu->addAction(mMoveDownAction); + mContextMenu->addSeparator(); + mContextMenu->addAction(mMoveTopAction); + mContextMenu->addAction(mMoveBottomAction); + mContextMenu->addSeparator(); + mContextMenu->addAction(mCheckAction); + mContextMenu->addAction(mUncheckAction); + +} + void DataFilesPage::newProfile() { bool ok; QString text = QInputDialog::getText(this, tr("New Profile"), tr("Profile Name:"), QLineEdit::Normal, - tr("New Profile"), &ok); + tr("New Profile"), &ok); if (ok && !text.isEmpty()) { - if (mProfilesComboBox->findText(text) != -1) - { + if (mProfilesComboBox->findText(text) != -1) { QMessageBox::warning(this, tr("Profile already exists"), tr("the profile %0 already exists.").arg(text), QMessageBox::Ok); @@ -308,8 +384,7 @@ void DataFilesPage::copyProfile() tr("Profile Name:"), QLineEdit::Normal, tr("%0 Copy").arg(profile), &ok); if (ok && !text.isEmpty()) { - if (mProfilesComboBox->findText(text) != -1) - { + if (mProfilesComboBox->findText(text) != -1) { QMessageBox::warning(this, tr("Profile already exists"), tr("the profile %0 already exists.").arg(text), QMessageBox::Ok); @@ -369,6 +444,196 @@ void DataFilesPage::deleteProfile() } } +void DataFilesPage::moveUp() +{ + // Shift the selected plugins up one row + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + QModelIndex firstIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); + + // Check if the first selected plugin is the top one + if (firstIndex.row() == 0) { + return; + } + + foreach (const QModelIndex ¤tIndex, selectedIndexes) { + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); + int currentRow = sourceModelIndex.row(); + + if (sourceModelIndex.isValid() && currentRow > 0) { + mPluginsModel->insertRow((currentRow - 1), mPluginsModel->takeRow(currentRow)); + } + } +} + +void DataFilesPage::moveDown() +{ + // Shift the selected plugins down one row + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); + + // Check if last selected plugin is bottom one + if ((lastIndex.row() + 1) == mPluginsModel->rowCount()) { + return; + } + + foreach (const QModelIndex ¤tIndex, selectedIndexes) { + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); + int currentRow = sourceModelIndex.row(); + + if (sourceModelIndex.isValid() && (currentRow + 1) < mPluginsModel->rowCount()) { + mPluginsModel->insertRow((currentRow + 1), mPluginsModel->takeRow(currentRow)); + } + } +} + +void DataFilesPage::moveTop() +{ + // Move the selection to the top of the table + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + QModelIndex firstIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); + + // Check if the first selected plugin is the top one + if (firstIndex.row() == 0) { + return; + } + + for (int i=0; i < selectedIndexes.count(); ++i) { + + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(selectedIndexes.at(i)); + + int currentRow = sourceModelIndex.row(); + + if (sourceModelIndex.isValid() && currentRow > 0) { + mPluginsModel->insertRow(i, mPluginsModel->takeRow(currentRow)); + } + } +} + +void DataFilesPage::moveBottom() +{ + // Move the selection to the bottom of the table + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); + + // Check if last selected plugin is bottom one + if ((lastIndex.row() + 1) == mPluginsModel->rowCount()) { + return; + } + + for (int i=0; i < selectedIndexes.count(); ++i) { + + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(selectedIndexes.at(i)); + + // Subtract iterations because takeRow shifts the rows below the taken row up + int currentRow = sourceModelIndex.row() - i; + + if (sourceModelIndex.isValid() && (currentRow + 1) < mPluginsModel->rowCount()) { + mPluginsModel->appendRow(mPluginsModel->takeRow(currentRow)); + } + } +} + +void DataFilesPage::check() +{ + // Check the current selection + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + + foreach (const QModelIndex ¤tIndex, selectedIndexes) { + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); + + if (sourceModelIndex.isValid()) { + mPluginsModel->setData(sourceModelIndex, Qt::Checked, Qt::CheckStateRole); + } + } +} + +void DataFilesPage::uncheck() +{ + // Uncheck the current selection + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + + foreach (const QModelIndex ¤tIndex, selectedIndexes) { + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); + + if (sourceModelIndex.isValid()) { + mPluginsModel->setData(sourceModelIndex, Qt::Unchecked, Qt::CheckStateRole); + } + } +} + + +void DataFilesPage::showContextMenu(const QPoint &point) +{ + + QPoint globalPos = mPluginsTable->mapToGlobal(point); + + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + + // Show the check/uncheck actions depending on the state of the selected items + mUncheckAction->setEnabled(false); + mCheckAction->setEnabled(false); + + foreach (const QModelIndex ¤tIndex, selectedIndexes) { + if (currentIndex.isValid()) { + + if (isChecked(currentIndex)) { + mUncheckAction->setEnabled(true); + } else { + mCheckAction->setEnabled(true); + } + } + + } + + QModelIndex firstIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); + QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); + + // Check if selected first item is top row in model + if (firstIndex.row() == 0) { + mMoveUpAction->setEnabled(false); + mMoveTopAction->setEnabled(false); + } + + // Check if last row is bottom row in model + if ((lastIndex.row() + 1) == mPluginsModel->rowCount()) { + mMoveDownAction->setEnabled(false); + mMoveBottomAction->setEnabled(false); + } + + // Show menu + mContextMenu->exec(globalPos); +} + void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { if (mMastersWidget->selectionModel()->hasSelection()) { @@ -482,7 +747,7 @@ void DataFilesPage::removePlugins(const QModelIndex &index) } -void DataFilesPage::setCheckstate(QModelIndex index) +void DataFilesPage::setCheckState(QModelIndex index) { if (!index.isValid()) return; @@ -497,6 +762,19 @@ void DataFilesPage::setCheckstate(QModelIndex index) } } +bool DataFilesPage::isChecked(const QModelIndex &index) +{ + + QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(index); + + if (mPluginsModel->data(sourceModelIndex, Qt::CheckStateRole) == Qt::Checked) { + return true; + } else { + return false; + } + +} + const QStringList DataFilesPage::selectedMasters() { QStringList masters; diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 6b43c87ab7..56f4fc0ec4 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -14,7 +14,9 @@ class QItemSelectionModel; class QSortFilterProxyModel; class QStringListModel; class QSettings; -class QPushButton; +class QAction; +class QToolBar; +class QMenu; class DataFilesPage : public QWidget { @@ -36,12 +38,22 @@ public: public slots: void masterSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - void setCheckstate(QModelIndex index); + void setCheckState(QModelIndex index); + void filterChanged(const QString filter); + void showContextMenu(const QPoint &point); void profileChanged(const QString &previous, const QString ¤t); + + // Action slots void newProfile(); void copyProfile(); void deleteProfile(); + void moveUp(); + void moveDown(); + void moveTop(); + void moveBottom(); + void check(); + void uncheck(); private: QTableWidget *mMastersWidget; @@ -53,13 +65,26 @@ private: QSortFilterProxyModel *mPluginsProxyModel; QItemSelectionModel *mPluginsSelectModel; - QPushButton *mNewProfileButton; - QPushButton *mCopyProfileButton; - QPushButton *mDeleteProfileButton; + QToolBar *mProfileToolBar; + QMenu *mContextMenu; + + QAction *mNewProfileAction; + QAction *mCopyProfileAction; + QAction *mDeleteProfileAction; + + QAction *mMoveUpAction; + QAction *mMoveDownAction; + QAction *mMoveTopAction; + QAction *mMoveBottomAction; + QAction *mCheckAction; + QAction *mUncheckAction; void addPlugins(const QModelIndex &index); void removePlugins(const QModelIndex &index); void uncheckPlugins(); + void createActions(); + + bool isChecked(const QModelIndex &index); }; #endif From 44e3cf17d76577c71d2e311f8d13163724bf0749 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 7 Jun 2011 21:00:23 +0200 Subject: [PATCH 083/111] Fallback icons for the actions in the right-click context menu --- apps/launcher/resources.qrc | 4 ++++ apps/launcher/resources/icons/tango/go-bottom.png | Bin 0 -> 663 bytes apps/launcher/resources/icons/tango/go-down.png | Bin 0 -> 683 bytes apps/launcher/resources/icons/tango/go-top.png | Bin 0 -> 636 bytes apps/launcher/resources/icons/tango/go-up.png | Bin 0 -> 652 bytes 5 files changed, 4 insertions(+) create mode 100644 apps/launcher/resources/icons/tango/go-bottom.png create mode 100644 apps/launcher/resources/icons/tango/go-down.png create mode 100644 apps/launcher/resources/icons/tango/go-top.png create mode 100644 apps/launcher/resources/icons/tango/go-up.png diff --git a/apps/launcher/resources.qrc b/apps/launcher/resources.qrc index 7fbf62da25..e5b2f5ca7d 100644 --- a/apps/launcher/resources.qrc +++ b/apps/launcher/resources.qrc @@ -13,5 +13,9 @@ resources/icons/tango/document-new.png resources/icons/tango/edit-copy.png resources/icons/tango/edit-delete.png + resources/icons/tango/go-bottom.png + resources/icons/tango/go-down.png + resources/icons/tango/go-top.png + resources/icons/tango/go-up.png
diff --git a/apps/launcher/resources/icons/tango/go-bottom.png b/apps/launcher/resources/icons/tango/go-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5a80385cca2f80f829819f25e943bee4fbb759 GIT binary patch literal 663 zcmV;I0%-k-P)^@R5*>5 zQafl0i$fhnu!z>dT@ZRl2cb)*4pLDG zZG=odu7yxbG&DksLWh*3HCi!E@4f%ybBM&$q+$>J%i-gE|2f}bM1)ohPMBp7qUZ#M ziZjW3S}CJ#h!C}JK7mjILiv!2Lnsa|Jv>a^ZWC@70Kk}r+-e%0*oG^%;PEY-Ju=$y zQ(8wB42=DLU;tx~itk0BkqZ%lKmgIM0>;oi(;G18uk)G8m+}(D!pA`x$GW$IlKT-XC=du~Fhe@}W5cL!R;jp>uMpvSGepPcH4u{1 zFCV)GvtXJgHvG>pEgb<%Lm;Fh9zKRhs1Mm!vo0wl9h=v7T*0wCML#^(K9-8dDwfOPh0opXQOv3a5686BHXl{Qv0xety%&@%$fU@!t2&O}F$dq3~5 zSJ&non@{aHV_O3h#uf_mOTDqf@uT4c(+v&P(of1QI%OprzW-Sy$L2MXNX}+oxQB2O x2h<5XpL^yi`NwxFSmKUBf0KK`E>-@2`~s>b4Ju;H8xa5i002ovPDHLkV1l6R8=C+C literal 0 HcmV?d00001 diff --git a/apps/launcher/resources/icons/tango/go-down.png b/apps/launcher/resources/icons/tango/go-down.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd7fccdf06321880f69d65631a363e4b813ba04 GIT binary patch literal 683 zcmV;c0#yBpP)i}4~9FCHr5K@{qtRq-ka(iJ?ZP=uTm zA)-=KTXM11RS2~$6nm&uv{cQSuKf$?CbP4jht?XK7~kVJ-#qia^UW|KLbc-EY953z z>WRV7dqi_}NvUZfgl}C)!*&F0M_|b+V97E80CykVr~%gk05Haon|Y41T|%KagO77# zXg_$ht|?xxSRKlv`0H+L2mld?91sx{?rsQB5|>q-9K_b`yI?say^?H5vawt?QN0%L zQr8VKjyDQ9NJT;|(TgXq`xKW7BF8I9f|vxjL{S!?dO5hlaQ@UaF9;B#f^;@jnqQnt zF(N{uTTQn`k0*~rlb-kaSCCvlqKp-L5!3TI5NItHN89$(7@Zg?Pfm^Zz3vh1d@XXv z%dw2{#h9WC`nbQFn~GCVFR$PcMeY21IKx0j@A8ZjM9Y6Ue=LTlryr z>(@2W+wdKbgN~t*f$yfVK)ah_*yWGG{JKoJQ9bX-)!YpMx+aPwk<4VDSzECWL8lc@ z`=3~j{FA#{Y~yeIt$3GuF4Da7HUP}#KVRBt{l5SJIDAFD4*L zlTS!gQ51)N=l*%UXM%2Q)F>(p+zgmdf)8?0hB*|-MC$(Y7uSP)<6hBvp%pb#VTA`mW=f8m3=A+VF$gz+5g|*fW9a=~fVCub#hVuLlKG!y<+UFWVr@ zx}I*`6F`LLL;b0)!-tO1O8E;`N}ti*)<%831DzmD?+S1|ojsB`IeM-?t-lsNLXv_Y zi4Wgq(ARs$>S*s8bv>PJ3UEE0w6rsoxp>?8Sy_bP08%N`;|ezT7d{op$Nz_$1Jr8{;^A=dpOl#Zx*NxBimVOIKWYqfyp}XTIm^nr{$U_L)(rG}9&-Pp{q+Q5 zlTT<9K@`TnH@h?0jfHw>O#jh>1nt2m6SAzrkW<%*%=Q}tRboP9pC%r$9&(LA+0sq)ybQD9srhR zz3Fxu)^6aqJl)?FN%nOeOgb)4?+M_zJQ@)DvRBSb2FFH|!GH*69hXP{3*flC1BAti zbJNzAm&ca3iTKDR3xq|-Y2`eKx?tij|4I5$vH1yqf%5H^Fb8J54jK)5$VM-C5%i8b<|k&Kxh=#FG>Ox&>r z4?sb}hlkg>1-vahgJcyDBP0eg&{{(&pkA-x@zeQAv9vj35<}`!ZpEItce&w-qk8xH z6RRw9@QrP7!N5#{!3lE@ZdYYZTfgiFi6Lb!&3aDLCbZTHrTP~zgJ5t59%w*hO Date: Tue, 7 Jun 2011 21:14:27 +0200 Subject: [PATCH 084/111] Added refresh functionality for the plugins table --- apps/launcher/datafilespage.cpp | 44 ++++++++++++++------------------- apps/launcher/datafilespage.hpp | 1 + 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 670f9def2b..d644761697 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -87,23 +87,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); - /*mNewProfileButton = new QPushButton(this); - mNewProfileButton->setIcon(QIcon::fromTheme("document-new")); - //mNewProfileButton->setToolTip(tr("New Profile")); - //mNewProfileButton->setShortcut(QKeySequence(tr("Ctrl+N"))); - - mCopyProfileButton = new QPushButton(this); - mCopyProfileButton->setIcon(QIcon::fromTheme("edit-copy")); - //mCopyProfileButton->setToolTip(tr("Copy Profile")); - - mDeleteProfileButton = new QPushButton(this); - mDeleteProfileButton->setIcon(QIcon::fromTheme("edit-delete")); - //mDeleteProfileButton->setToolTip(tr("Delete Profile"));*/ - //mDeleteProfileButton->setShortcut(QKeySequence(tr("Delete"))); - - //QHBoxLayout *bottomLayout = new QHBoxLayout(); - //bottomLayout = new QHBoxLayout(); - mProfileToolBar = new QToolBar(this); mProfileToolBar->setMovable(false); mProfileToolBar->setIconSize(QSize(16, 16)); @@ -111,18 +94,10 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mProfileToolBar->addWidget(profileLabel); mProfileToolBar->addWidget(mProfilesComboBox); - //splitter->addWidget(profileToolBar); - //bottomLayout->addWidget(profileLabel); - //bottomLayout->addWidget(mProfilesComboBox); - /*bottomLayout->addWidget(mNewProfileButton); - bottomLayout->addWidget(mCopyProfileButton); - bottomLayout->addWidget(mDeleteProfileButton);*/ - QVBoxLayout *pageLayout = new QVBoxLayout(this); // Add some space above and below the page items QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); - pageLayout->addLayout(topLayout); pageLayout->addItem(vSpacer2); pageLayout->addWidget(splitter); @@ -286,6 +261,10 @@ void DataFilesPage::setupConfig() void DataFilesPage::createActions() { + // Refresh the plugins + QAction *refreshAction = new QAction(tr("Refresh"), this); + refreshAction->setShortcut(QKeySequence(tr("F5"))); + connect(refreshAction, SIGNAL(triggered()), this, SLOT(refresh())); // Profile actions mNewProfileAction = new QAction(QIcon::fromTheme("document-new"), tr("&New Profile"), this); @@ -334,6 +313,7 @@ void DataFilesPage::createActions() connect(mUncheckAction, SIGNAL(triggered()), this, SLOT(uncheck())); // Makes shortcuts work even if the context menu is hidden + this->addAction(refreshAction); this->addAction(mMoveUpAction); this->addAction(mMoveDownAction); this->addAction(mMoveTopAction); @@ -591,6 +571,14 @@ void DataFilesPage::uncheck() } } +void DataFilesPage::refresh() +{ + // Refresh the plugins table + + writeConfig(); + readConfig(); +} + void DataFilesPage::showContextMenu(const QPoint &point) { @@ -615,6 +603,12 @@ void DataFilesPage::showContextMenu(const QPoint &point) } + // Make sure these are enabled because they might still be disabled + mMoveUpAction->setEnabled(true); + mMoveTopAction->setEnabled(true); + mMoveDownAction->setEnabled(true); + mMoveBottomAction->setEnabled(true); + QModelIndex firstIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 56f4fc0ec4..da784f9a9e 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -54,6 +54,7 @@ public slots: void moveBottom(); void check(); void uncheck(); + void refresh(); private: QTableWidget *mMastersWidget; From 410229e5210113e3deb654f981fc4a8f846ccad9 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 8 Jun 2011 16:55:53 +0200 Subject: [PATCH 085/111] Dropped plugins now retain their selection so you can see where they went --- apps/launcher/CMakeLists.txt | 8 ++ apps/launcher/datafilespage.cpp | 20 ++--- apps/launcher/datafilespage.hpp | 9 +- apps/launcher/pluginsmodel.cpp | 148 ++++++++++++++++++++++++++++++++ apps/launcher/pluginsmodel.hpp | 21 +++++ apps/launcher/pluginsview.cpp | 56 ++++++++++++ apps/launcher/pluginsview.hpp | 30 +++++++ 7 files changed, 273 insertions(+), 19 deletions(-) create mode 100644 apps/launcher/pluginsmodel.cpp create mode 100644 apps/launcher/pluginsmodel.hpp create mode 100644 apps/launcher/pluginsview.cpp create mode 100644 apps/launcher/pluginsview.hpp diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 598b23fd05..06f42da202 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -7,6 +7,9 @@ set(LAUNCHER graphicspage.cpp naturalsort.cpp + pluginsmodel.cpp + pluginsview.cpp + datafilespage.hpp lineedit.hpp maindialog.hpp @@ -14,6 +17,9 @@ set(LAUNCHER combobox.hpp graphicspage.hpp naturalsort.hpp + + pluginsmodel.hpp + pluginsview.hpp ) set(MOC_HDRS @@ -24,6 +30,8 @@ set(MOC_HDRS combobox.hpp graphicspage.hpp + pluginsmodel.hpp + pluginsview.hpp ) find_package(Qt4 REQUIRED) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index d644761697..8fd99c3cc1 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -10,6 +10,8 @@ #include "datafilespage.hpp" #include "lineedit.hpp" #include "naturalsort.hpp" +#include "pluginsmodel.hpp" +#include "pluginsview.hpp" using namespace ESM; using namespace std; @@ -17,7 +19,7 @@ using namespace std; DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) { mDataFilesModel = new QStandardItemModel(); // Contains all plugins with masters - mPluginsModel = new QStandardItemModel(); // Contains selectable plugins + mPluginsModel = new PluginsModel(); // Contains selectable plugins mPluginsProxyModel = new QSortFilterProxyModel(); mPluginsProxyModel->setDynamicSortFilter(true); @@ -34,8 +36,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) topLayout->addWidget(filterLineEdit); mMastersWidget = new QTableWidget(this); // Contains the available masters - mPluginsTable = new QTableView(this); - mMastersWidget->setObjectName("MastersWidget"); mMastersWidget->setSelectionBehavior(QAbstractItemView::SelectRows); mMastersWidget->setSelectionMode(QAbstractItemView::MultiSelection); @@ -46,11 +46,9 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mMastersWidget->verticalHeader()->hide(); mMastersWidget->insertColumn(0); + mPluginsTable = new PluginsView(this); mPluginsTable->setModel(mPluginsProxyModel); - mPluginsTable->setSelectionBehavior(QAbstractItemView::SelectRows); - mPluginsTable->setSelectionMode(QAbstractItemView::ExtendedSelection); - mPluginsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); - mPluginsTable->setAlternatingRowColors(true); + mPluginsTable->horizontalHeader()->setStretchLastSection(true); mPluginsTable->horizontalHeader()->hide(); @@ -60,14 +58,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mPluginsTable->verticalHeader()->setDefaultSectionSize(height); - mPluginsTable->setDragEnabled(true); - mPluginsTable->setDragDropMode(QAbstractItemView::InternalMove); - mPluginsTable->setDropIndicatorShown(true); - mPluginsTable->setDragDropOverwriteMode(false); - mPluginsTable->viewport()->setAcceptDrops(true); - - mPluginsTable->setContextMenuPolicy(Qt::CustomContextMenu); - // Add both tables to a splitter QSplitter *splitter = new QSplitter(this); splitter->setOrientation(Qt::Horizontal); diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index da784f9a9e..f9fb8528e7 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -6,8 +6,6 @@ #include "combobox.hpp" class QTableWidget; -class QTableView; -class ComboBox; class QStandardItemModel; class QItemSelection; class QItemSelectionModel; @@ -17,6 +15,9 @@ class QSettings; class QAction; class QToolBar; class QMenu; +class PluginsModel; +class PluginsView; +class ComboBox; class DataFilesPage : public QWidget { @@ -58,10 +59,10 @@ public slots: private: QTableWidget *mMastersWidget; - QTableView *mPluginsTable; + PluginsView *mPluginsTable; QStandardItemModel *mDataFilesModel; - QStandardItemModel *mPluginsModel; + PluginsModel *mPluginsModel; QSortFilterProxyModel *mPluginsProxyModel; QItemSelectionModel *mPluginsSelectModel; diff --git a/apps/launcher/pluginsmodel.cpp b/apps/launcher/pluginsmodel.cpp new file mode 100644 index 0000000000..24072839e4 --- /dev/null +++ b/apps/launcher/pluginsmodel.cpp @@ -0,0 +1,148 @@ +#include +#include +#include + +#include "pluginsmodel.hpp" + +PluginsModel::PluginsModel(QObject *parent) : QStandardItemModel(parent) +{ + +} + +void decodeDataRecursive(QDataStream &stream, QStandardItem *item) +{ + int colCount, childCount; + stream >> *item; + stream >> colCount >> childCount; + item->setColumnCount(colCount); + + int childPos = childCount; + + while(childPos > 0) { + childPos--; + QStandardItem *child = new QStandardItem(); + decodeDataRecursive(stream, child); + item->setChild( childPos / colCount, childPos % colCount, child); + } +} + +bool PluginsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex &parent) +{ + // Code largely based on QStandardItemModel::dropMimeData + + // check if the action is supported + if (!data || !(action == Qt::CopyAction || action == Qt::MoveAction)) + return false; + + // check if the format is supported + QString format = QLatin1String("application/x-qstandarditemmodeldatalist"); + if (!data->hasFormat(format)) + return QAbstractItemModel::dropMimeData(data, action, row, column, parent); + + if (row > rowCount(parent)) + row = rowCount(parent); + if (row == -1) + row = rowCount(parent); + if (column == -1) + column = 0; + + // decode and insert + QByteArray encoded = data->data(format); + QDataStream stream(&encoded, QIODevice::ReadOnly); + + + //code based on QAbstractItemModel::decodeData + // adapted to work with QStandardItem + int top = INT_MAX; + int left = INT_MAX; + int bottom = 0; + int right = 0; + QVector rows, columns; + QVector items; + + while (!stream.atEnd()) { + int r, c; + QStandardItem *item = new QStandardItem(); + stream >> r >> c; + decodeDataRecursive(stream, item); + + rows.append(r); + columns.append(c); + items.append(item); + top = qMin(r, top); + left = qMin(c, left); + bottom = qMax(r, bottom); + right = qMax(c, right); + } + + // insert the dragged items into the table, use a bit array to avoid overwriting items, + // since items from different tables can have the same row and column + int dragRowCount = 0; + int dragColumnCount = right - left + 1; + + // Compute the number of continuous rows upon insertion and modify the rows to match + QVector rowsToInsert(bottom + 1); + for (int i = 0; i < rows.count(); ++i) + rowsToInsert[rows.at(i)] = 1; + for (int i = 0; i < rowsToInsert.count(); ++i) { + if (rowsToInsert[i] == 1){ + rowsToInsert[i] = dragRowCount; + ++dragRowCount; + } + } + for (int i = 0; i < rows.count(); ++i) + rows[i] = top + rowsToInsert[rows[i]]; + + QBitArray isWrittenTo(dragRowCount * dragColumnCount); + + // make space in the table for the dropped data + int colCount = columnCount(parent); + if (colCount < dragColumnCount + column) { + insertColumns(colCount, dragColumnCount + column - colCount, parent); + colCount = columnCount(parent); + } + insertRows(row, dragRowCount, parent); + + row = qMax(0, row); + column = qMax(0, column); + + QStandardItem *parentItem = itemFromIndex (parent); + if (!parentItem) + parentItem = invisibleRootItem(); + + QVector newIndexes(items.size()); + // set the data in the table + for (int j = 0; j < items.size(); ++j) { + int relativeRow = rows.at(j) - top; + int relativeColumn = columns.at(j) - left; + int destinationRow = relativeRow + row; + int destinationColumn = relativeColumn + column; + int flat = (relativeRow * dragColumnCount) + relativeColumn; + // if the item was already written to, or we just can't fit it in the table, create a new row + if (destinationColumn >= colCount || isWrittenTo.testBit(flat)) { + destinationColumn = qBound(column, destinationColumn, colCount - 1); + destinationRow = row + dragRowCount; + insertRows(row + dragRowCount, 1, parent); + flat = (dragRowCount * dragColumnCount) + relativeColumn; + isWrittenTo.resize(++dragRowCount * dragColumnCount); + } + if (!isWrittenTo.testBit(flat)) { + newIndexes[j] = index(destinationRow, destinationColumn, parentItem->index()); + isWrittenTo.setBit(flat); + } + } + + for(int k = 0; k < newIndexes.size(); k++) { + if (newIndexes.at(k).isValid()) { + parentItem->setChild(newIndexes.at(k).row(), newIndexes.at(k).column(), items.at(k)); + } else { + delete items.at(k); + } + } + + // The important part, tell the view what is dropped + emit indexesDropped(newIndexes); + + return true; +} \ No newline at end of file diff --git a/apps/launcher/pluginsmodel.hpp b/apps/launcher/pluginsmodel.hpp new file mode 100644 index 0000000000..41df499b53 --- /dev/null +++ b/apps/launcher/pluginsmodel.hpp @@ -0,0 +1,21 @@ +#ifndef PLUGINSMODEL_H +#define PLUGINSMODEL_H + +#include + +class PluginsModel : public QStandardItemModel +{ + Q_OBJECT + +public: + PluginsModel(QObject *parent = 0); + ~PluginsModel() {}; + + bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + +signals: + void indexesDropped(QVector indexes); + +}; + +#endif \ No newline at end of file diff --git a/apps/launcher/pluginsview.cpp b/apps/launcher/pluginsview.cpp new file mode 100644 index 0000000000..5787439acd --- /dev/null +++ b/apps/launcher/pluginsview.cpp @@ -0,0 +1,56 @@ +#include "pluginsview.hpp" + +#include + +#include + +PluginsView::PluginsView(QWidget *parent) : QTableView(parent) +{ + setSelectionBehavior(QAbstractItemView::SelectRows); + setSelectionMode(QAbstractItemView::ExtendedSelection); + setEditTriggers(QAbstractItemView::NoEditTriggers); + setAlternatingRowColors(true); + setDragEnabled(true); + setDragDropMode(QAbstractItemView::InternalMove); + setDropIndicatorShown(true); + setDragDropOverwriteMode(false); + //viewport()->setAcceptDrops(true); + + setContextMenuPolicy(Qt::CustomContextMenu); + + +} + +void PluginsView::startDrag(Qt::DropActions supportedActions) +{ + selectionModel()->select( selectionModel()->selection(), + QItemSelectionModel::Select | QItemSelectionModel::Rows ); + QAbstractItemView::startDrag( supportedActions ); +} + +void PluginsView::setModel(PluginsModel *model) +{ + /*QTableView::setModel(model); + + qRegisterMetaType< QVector >(); + + connect(model, SIGNAL(indexesDropped(QVector)), + this, SLOT(selectIndexes(QVector)), Qt::QueuedConnection);*/ +} + +void PluginsView::setModel(QSortFilterProxyModel *model) +{ + QTableView::setModel(model); + + qRegisterMetaType< QVector >(); + + connect(model->sourceModel(), SIGNAL(indexesDropped(QVector)), + this, SLOT(selectIndexes(QVector)), Qt::QueuedConnection); +} + +void PluginsView::selectIndexes( QVector aIndexes ) +{ + selectionModel()->clearSelection(); + foreach( QPersistentModelIndex pIndex, aIndexes ) + selectionModel()->select( pIndex, QItemSelectionModel::Select | QItemSelectionModel::Rows ); +} diff --git a/apps/launcher/pluginsview.hpp b/apps/launcher/pluginsview.hpp new file mode 100644 index 0000000000..36a6119f34 --- /dev/null +++ b/apps/launcher/pluginsview.hpp @@ -0,0 +1,30 @@ +#ifndef PLUGINSVIEW_H +#define PLUGINSVIEW_H + +#include + +#include "pluginsmodel.hpp" + +class QSortFilterProxyModel; + +class PluginsView : public QTableView +{ + Q_OBJECT +public: + PluginsView(QWidget *parent = 0); + + PluginsModel* model() const + { return qobject_cast(QAbstractItemView::model()); } + + void startDrag(Qt::DropActions supportedActions); + void setModel(PluginsModel *model); + void setModel(QSortFilterProxyModel *model); + +public slots: + void selectIndexes(QVector aIndexes); + +}; + +Q_DECLARE_METATYPE(QVector); + +#endif \ No newline at end of file From 6feaac3d6f28f560ac25f8a8e1dbe977e5f59c19 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Wed, 8 Jun 2011 17:40:39 +0200 Subject: [PATCH 086/111] Removed isChecked function, can be done with less code --- apps/launcher/datafilespage.cpp | 23 +++++++++-------------- apps/launcher/datafilespage.hpp | 1 - 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 8fd99c3cc1..4d608a7840 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -584,7 +584,15 @@ void DataFilesPage::showContextMenu(const QPoint &point) foreach (const QModelIndex ¤tIndex, selectedIndexes) { if (currentIndex.isValid()) { - if (isChecked(currentIndex)) { + const QModelIndex sourceIndex = mPluginsProxyModel->mapToSource(currentIndex); + + if (!sourceIndex.isValid()) { + return; + } + + const QStandardItem *currentItem = mPluginsModel->itemFromIndex(sourceIndex); + + if (currentItem->checkState() == Qt::Checked) { mUncheckAction->setEnabled(true); } else { mCheckAction->setEnabled(true); @@ -746,19 +754,6 @@ void DataFilesPage::setCheckState(QModelIndex index) } } -bool DataFilesPage::isChecked(const QModelIndex &index) -{ - - QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(index); - - if (mPluginsModel->data(sourceModelIndex, Qt::CheckStateRole) == Qt::Checked) { - return true; - } else { - return false; - } - -} - const QStringList DataFilesPage::selectedMasters() { QStringList masters; diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index f9fb8528e7..1e418e3d46 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -86,7 +86,6 @@ private: void uncheckPlugins(); void createActions(); - bool isChecked(const QModelIndex &index); }; #endif From 371ec415308b5574bba79cfa28c9d338e1775c39 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 10 Jun 2011 00:30:08 +0200 Subject: [PATCH 087/111] Plugins moved using the actions now keep their selection too --- apps/launcher/datafilespage.cpp | 95 +++++++++++++++++++++++++++++---- apps/launcher/datafilespage.hpp | 2 + 2 files changed, 88 insertions(+), 9 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 4d608a7840..a60d73825f 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -16,6 +16,18 @@ using namespace ESM; using namespace std; +//sort QModelIndexList ascending +bool rowGreaterThan(const QModelIndex &index1, const QModelIndex &index2) +{ + return index1.row() >= index2.row(); +} + +//sort QModelIndexList descending +bool rowSmallerThan(const QModelIndex &index1, const QModelIndex &index2) +{ + return index1.row() <= index2.row(); +} + DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) { mDataFilesModel = new QStandardItemModel(); // Contains all plugins with masters @@ -48,6 +60,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mPluginsTable = new PluginsView(this); mPluginsTable->setModel(mPluginsProxyModel); + mPluginsTable->setVerticalScrollMode(QAbstractItemView::ScrollPerItem); mPluginsTable->horizontalHeader()->setStretchLastSection(true); mPluginsTable->horizontalHeader()->hide(); @@ -207,9 +220,6 @@ void DataFilesPage::setupConfig() file.setFileName(config); // Just for displaying information qDebug() << "Using config file from " << file.fileName(); - file.open(QIODevice::ReadOnly); - qDebug() << "File contents:" << file.readAll(); - file.close(); // Open our config file mLauncherConfig = new QSettings(config, QSettings::IniFormat); @@ -423,6 +433,10 @@ void DataFilesPage::moveUp() } QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + + //sort selection ascending because selectedIndexes returns an unsorted list + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowSmallerThan); + QModelIndex firstIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); // Check if the first selected plugin is the top one @@ -431,11 +445,16 @@ void DataFilesPage::moveUp() } foreach (const QModelIndex ¤tIndex, selectedIndexes) { - QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); + const QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); int currentRow = sourceModelIndex.row(); if (sourceModelIndex.isValid() && currentRow > 0) { mPluginsModel->insertRow((currentRow - 1), mPluginsModel->takeRow(currentRow)); + + const QModelIndex targetIndex = mPluginsModel->index((currentRow - 1), 0, QModelIndex()); + + mPluginsTable->selectionModel()->select(targetIndex, QItemSelectionModel::Select | QItemSelectionModel::Rows); + scrollToSelection(); } } } @@ -449,7 +468,11 @@ void DataFilesPage::moveDown() } QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); - QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); + + //sort selection descending because selectedIndexes returns an unsorted list + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowGreaterThan); + + const QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); // Check if last selected plugin is bottom one if ((lastIndex.row() + 1) == mPluginsModel->rowCount()) { @@ -457,11 +480,16 @@ void DataFilesPage::moveDown() } foreach (const QModelIndex ¤tIndex, selectedIndexes) { - QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); + const QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); int currentRow = sourceModelIndex.row(); if (sourceModelIndex.isValid() && (currentRow + 1) < mPluginsModel->rowCount()) { mPluginsModel->insertRow((currentRow + 1), mPluginsModel->takeRow(currentRow)); + + const QModelIndex targetIndex = mPluginsModel->index((currentRow + 1), 0, QModelIndex()); + + mPluginsTable->selectionModel()->select(targetIndex, QItemSelectionModel::Select | QItemSelectionModel::Rows); + scrollToSelection(); } } } @@ -475,6 +503,10 @@ void DataFilesPage::moveTop() } QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + + //sort selection ascending because selectedIndexes returns an unsorted list + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowSmallerThan); + QModelIndex firstIndex = mPluginsProxyModel->mapToSource(selectedIndexes.first()); // Check if the first selected plugin is the top one @@ -484,12 +516,15 @@ void DataFilesPage::moveTop() for (int i=0; i < selectedIndexes.count(); ++i) { - QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(selectedIndexes.at(i)); + const QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(selectedIndexes.at(i)); int currentRow = sourceModelIndex.row(); if (sourceModelIndex.isValid() && currentRow > 0) { + mPluginsModel->insertRow(i, mPluginsModel->takeRow(currentRow)); + mPluginsTable->selectionModel()->select(mPluginsModel->index(i, 0, QModelIndex()), QItemSelectionModel::Select | QItemSelectionModel::Rows); + mPluginsTable->scrollToTop(); } } } @@ -503,7 +538,11 @@ void DataFilesPage::moveBottom() } QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); - QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); + + //sort selection descending because selectedIndexes returns an unsorted list + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowSmallerThan); + + const QModelIndex lastIndex = mPluginsProxyModel->mapToSource(selectedIndexes.last()); // Check if last selected plugin is bottom one if ((lastIndex.row() + 1) == mPluginsModel->rowCount()) { @@ -512,13 +551,19 @@ void DataFilesPage::moveBottom() for (int i=0; i < selectedIndexes.count(); ++i) { - QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(selectedIndexes.at(i)); + const QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(selectedIndexes.at(i)); // Subtract iterations because takeRow shifts the rows below the taken row up int currentRow = sourceModelIndex.row() - i; if (sourceModelIndex.isValid() && (currentRow + 1) < mPluginsModel->rowCount()) { mPluginsModel->appendRow(mPluginsModel->takeRow(currentRow)); + + // Rowcount starts with 1, row numbers start with 0 + const QModelIndex lastRow = mPluginsModel->index((mPluginsModel->rowCount() -1), 0, QModelIndex()); + + mPluginsTable->selectionModel()->select(lastRow, QItemSelectionModel::Select | QItemSelectionModel::Rows); + mPluginsTable->scrollToBottom(); } } } @@ -533,6 +578,9 @@ void DataFilesPage::check() QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + //sort selection ascending because selectedIndexes returns an unsorted list + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowSmallerThan); + foreach (const QModelIndex ¤tIndex, selectedIndexes) { QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); @@ -552,6 +600,9 @@ void DataFilesPage::uncheck() QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + //sort selection ascending because selectedIndexes returns an unsorted list + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowSmallerThan); + foreach (const QModelIndex ¤tIndex, selectedIndexes) { QModelIndex sourceModelIndex = mPluginsProxyModel->mapToSource(currentIndex); @@ -569,6 +620,32 @@ void DataFilesPage::refresh() readConfig(); } +void DataFilesPage::scrollToSelection() +{ + // Scroll to the selected plugins + + if (!mPluginsTable->selectionModel()->hasSelection()) { + return; + } + + // Get the selected indexes visible by determining the middle index + QModelIndexList selectedIndexes = mPluginsTable->selectionModel()->selectedIndexes(); + qSort(selectedIndexes.begin(), selectedIndexes.end(), rowSmallerThan); + + // The selected rows including non-selected inside selection + unsigned int selectedRows = selectedIndexes.last().row() - selectedIndexes.first().row(); + + // Determine the row which is roughly in the middle of the selection + unsigned int middleRow = selectedIndexes.first().row() + (int)(selectedRows / 2) + 1; + + + const QModelIndex middleIndex = mPluginsProxyModel->mapFromSource(mPluginsModel->index(middleRow, 0, QModelIndex())); + + // Make sure the whole selection is visible + mPluginsTable->scrollTo(selectedIndexes.first()); + mPluginsTable->scrollTo(selectedIndexes.last()); + mPluginsTable->scrollTo(middleIndex); +} void DataFilesPage::showContextMenu(const QPoint &point) { diff --git a/apps/launcher/datafilespage.hpp b/apps/launcher/datafilespage.hpp index 1e418e3d46..2d0a385a79 100644 --- a/apps/launcher/datafilespage.hpp +++ b/apps/launcher/datafilespage.hpp @@ -86,6 +86,8 @@ private: void uncheckPlugins(); void createActions(); + void scrollToSelection(); + }; #endif From 15df25f94772073c01906be90045ae553d2dbeca Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 24 Jun 2011 17:37:12 +0200 Subject: [PATCH 088/111] Cleaned up the CMakeList file --- apps/launcher/CMakeLists.txt | 86 ++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 06f42da202..e311cf05cd 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -1,62 +1,64 @@ set(LAUNCHER - datafilespage.cpp - lineedit.cpp - main.cpp - maindialog.cpp - playpage.cpp - graphicspage.cpp - naturalsort.cpp - - pluginsmodel.cpp - pluginsview.cpp - - datafilespage.hpp - lineedit.hpp - maindialog.hpp - playpage.hpp - combobox.hpp - graphicspage.hpp - naturalsort.hpp - - pluginsmodel.hpp - pluginsview.hpp + datafilespage.cpp + graphicspage.cpp + lineedit.cpp + main.cpp + maindialog.cpp + naturalsort.cpp + playpage.cpp + pluginsmodel.cpp + pluginsview.cpp ) -set(MOC_HDRS - datafilespage.hpp - lineedit.hpp - maindialog.hpp - playpage.hpp - combobox.hpp - graphicspage.hpp - - pluginsmodel.hpp - pluginsview.hpp +set(LAUNCHER_HEADER + combobox.hpp + datafilespage.hpp + graphicspage.hpp + lineedit.hpp + maindialog.hpp + naturalsort.hpp + playpage.hpp + pluginsmodel.hpp + pluginsview.hpp ) +# Headers that must be pre-processed +set(LAUNCHER_HEADER_MOC + combobox.hpp + datafilespage.hpp + graphicspage.hpp + lineedit.hpp + maindialog.hpp + playpage.hpp + pluginsmodel.hpp + pluginsview.hpp +) + +source_group(launcher FILES ${LAUNCHER} ${LAUNCHER_HEADER} ${LAUNCHER_HEADER_MOC}) + find_package(Qt4 REQUIRED) set(QT_USE_QTGUI 1) QT4_ADD_RESOURCES(RCC_SRCS resources.qrc) -QT4_WRAP_CPP(MOC_SRCS ${MOC_HDRS}) +QT4_WRAP_CPP(MOC_SRCS ${LAUNCHER_HEADER_MOC}) include(${QT_USE_FILE}) # Main executable add_executable(launcher - ${LAUNCHER} - ${MISC} ${MISC_HEADER} - ${FILES} ${FILES_HEADER} - ${TO_UTF8} - ${ESM} - ${RCC_SRCS} - ${MOC_SRCS} + ${LAUNCHER} + ${MISC} ${MISC_HEADER} + ${FILES} ${FILES_HEADER} + ${TO_UTF8} + ${ESM} + ${RCC_SRCS} + ${MOC_SRCS} ) target_link_libraries(launcher - ${Boost_LIBRARIES} - ${OGRE_LIBRARIES} - ${QT_LIBRARIES} + ${Boost_LIBRARIES} + ${OGRE_LIBRARIES} + ${QT_LIBRARIES} ) configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss From 83e642678fbfe04e84db4a8a13a6ec1e284b899b Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 24 Jun 2011 17:38:32 +0200 Subject: [PATCH 089/111] Put the filter input in a toolbar and made it work with a shortcut (Alt+F) --- apps/launcher/datafilespage.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index a60d73825f..120b58850b 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -1,6 +1,5 @@ #include - -#include // TODO: Remove +#include #include #include @@ -37,15 +36,23 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mPluginsProxyModel->setDynamicSortFilter(true); mPluginsProxyModel->setSourceModel(mPluginsModel); - QLabel *filterLabel = new QLabel(tr("Filter:"), this); + QLabel *filterLabel = new QLabel(tr("&Filter:"), this); LineEdit *filterLineEdit = new LineEdit(this); + filterLabel->setBuddy(filterLineEdit); - QHBoxLayout *topLayout = new QHBoxLayout(); + QToolBar *filterToolBar = new QToolBar(this); + filterToolBar->setMovable(false); + + // Create a container widget and a layout to get the spacer to work + QWidget *filterWidget = new QWidget(this); + QHBoxLayout *filterLayout = new QHBoxLayout(filterWidget); QSpacerItem *hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - topLayout->addItem(hSpacer1); - topLayout->addWidget(filterLabel); - topLayout->addWidget(filterLineEdit); + filterLayout->addItem(hSpacer1); + filterLayout->addWidget(filterLabel); + filterLayout->addWidget(filterLineEdit); + + filterToolBar->addWidget(filterWidget); mMastersWidget = new QTableWidget(this); // Contains the available masters mMastersWidget->setObjectName("MastersWidget"); @@ -98,11 +105,8 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) mProfileToolBar->addWidget(mProfilesComboBox); QVBoxLayout *pageLayout = new QVBoxLayout(this); - // Add some space above and below the page items - QSpacerItem *vSpacer2 = new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); - pageLayout->addLayout(topLayout); - pageLayout->addItem(vSpacer2); + pageLayout->addWidget(filterToolBar); pageLayout->addWidget(splitter); pageLayout->addWidget(mProfileToolBar); @@ -956,7 +960,6 @@ void DataFilesPage::readConfig() void DataFilesPage::writeConfig(QString profile) { - // TODO: Testing the config here if (profile.isEmpty()) { profile = mProfilesComboBox->currentText(); } From dcf4d242a55a4e62e1e524509db45facf429db81 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 24 Jun 2011 17:46:02 +0200 Subject: [PATCH 090/111] Added warning message if Ogres config cannot be read --- apps/launcher/graphicspage.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 0c744e09ed..c14f85090d 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -34,7 +34,7 @@ GraphicsPage::GraphicsPage(QWidget *parent) : QWidget(parent) displayGroupLayout->addWidget(mDisplayStackedWidget); displayGroupLayout->addItem(vSpacer3); - // Page + // Layout for the whole page QVBoxLayout *pageLayout = new QVBoxLayout(this); pageLayout->addWidget(rendererGroup); @@ -180,7 +180,6 @@ void GraphicsPage::setupOgre() } catch(Ogre::Exception &ex) { - // TODO: Better warning text QString ogreError = QString::fromStdString(ex.getFullDescription().c_str()); QMessageBox msgBox; msgBox.setWindowTitle("Error creating Ogre::Root"); @@ -212,7 +211,7 @@ void GraphicsPage::setupOgre() mRendererComboBox->setCurrentIndex(index); } - // Create separate rendersystems TODO: Warn on non-existant + // Create separate rendersystems QString openGLName = mRendererComboBox->itemText(mRendererComboBox->findText(QString("OpenGL"), Qt::MatchStartsWith)); QString direct3DName = mRendererComboBox->itemText(mRendererComboBox->findText(QString("Direct3D"), Qt::MatchStartsWith)); @@ -231,7 +230,7 @@ void GraphicsPage::setupOgre() std::exit(1); } - // Now fill the GUI elements TODO: CLEANUP! + // Now fill the GUI elements // OpenGL if (mOpenGLRenderSystem) { mOGLRTTComboBox->addItems(getAvailableOptions(QString("RTT Preferred Mode"), mOpenGLRenderSystem)); @@ -338,7 +337,14 @@ void GraphicsPage::writeConfig() QFile file(mOgreConfig->fileName()); if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { - // File could not be opened, TODO: throw error + // File could not be opened, + QMessageBox msgBox; + msgBox.setWindowTitle("Error opening Ogre configuration file"); + msgBox.setIcon(QMessageBox::Critical); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setText(tr("
Could not open %0

\ + Please make sure you have the right permissions and try again.
").arg(file.fileName())); + msgBox.exec(); return; } @@ -453,8 +459,5 @@ void GraphicsPage::rendererChanged(const QString &renderer) mRendererStackedWidget->setCurrentIndex(0); mDisplayStackedWidget->setCurrentIndex(0); } - // Set the render system to the selected one - //mSelectedRenderSystem = mOgre->getRenderSystemByName(renderer.toStdString().c_str()); - //qDebug() << getConfigValue("Preferred RTT Mode"); } \ No newline at end of file From 8b58e53be9b33c449fbd5254299baf17a756130d Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 24 Jun 2011 18:01:24 +0200 Subject: [PATCH 091/111] Removed debug messages and cleaned up some old code --- apps/launcher/datafilespage.cpp | 37 +++------------------------------ apps/launcher/graphicspage.cpp | 1 - apps/launcher/maindialog.cpp | 11 +--------- apps/launcher/maindialog.hpp | 2 -- apps/launcher/pluginsview.cpp | 18 ++-------------- apps/launcher/pluginsview.hpp | 1 - 6 files changed, 6 insertions(+), 64 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 120b58850b..c4ed205573 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -74,7 +73,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Set the row height to the size of the checkboxes QCheckBox checkBox; - unsigned int height = checkBox.sizeHint().height() + 2; + unsigned int height = checkBox.sizeHint().height() + 4; mPluginsTable->verticalHeader()->setDefaultSectionSize(height); @@ -127,8 +126,6 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) { - qDebug() << "setupDataFiles called!"; - // Put the paths in a boost::filesystem vector to use with Files::Collections std::vector dataDirs; @@ -145,15 +142,11 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) for (Files::MultiDirCollection::TIter iter(esm.begin()); iter!=esm.end(); ++iter) { - qDebug() << "Master: " << QString::fromStdString(iter->second.filename().string()); - QString currentMaster = QString::fromStdString(iter->second.filename().string()); const QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); if (itemList.isEmpty()) // Master is not yet in the widget { - qDebug() << "Master not yet in the widget, rowcount is " << i; - mMastersWidget->insertRow(i); QTableWidgetItem *item = new QTableWidgetItem(currentMaster); mMastersWidget->setItem(i, 0, item); @@ -213,7 +206,6 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) void DataFilesPage::setupConfig() { - qDebug() << "setupConfig called"; QString config = "./launcher.cfg"; QFile file(config); @@ -247,11 +239,8 @@ void DataFilesPage::setupConfig() QString currentProfile = mLauncherConfig->value("CurrentProfile").toString(); - qDebug() << mLauncherConfig->value("CurrentProfile").toString(); - qDebug() << mLauncherConfig->childGroups(); - if (currentProfile.isEmpty()) { - qDebug() << "No current profile selected"; + // No current profile selected currentProfile = "Default"; } mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(currentProfile)); @@ -407,10 +396,7 @@ void DataFilesPage::deleteProfile() deleteMessageBox.exec(); if (deleteMessageBox.clickedButton() == deleteButton) { - - qDebug() << "Delete profile " << profile; - - // Make sure we have no groups open + // Make sure we have no groups open while (!mLauncherConfig->group().isEmpty()) { mLauncherConfig->endGroup(); } @@ -724,8 +710,6 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const masters.sort(); masterstr = masters.join(","); // Make a comma-separated QString - qDebug() << "Masters" << masterstr; - // Iterate over all masters in the datafilesmodel to see if they are selected for (int r=0; rrowCount(); ++r) { QModelIndex currentIndex = mDataFilesModel->index(r, 0); @@ -753,14 +737,8 @@ void DataFilesPage::masterSelectionChanged(const QItemSelection &selected, const master.append("*"); const QList itemList = mDataFilesModel->findItems(master, Qt::MatchWildcard); - if (itemList.isEmpty()) - qDebug() << "Empty as shit"; - foreach (const QStandardItem *currentItem, itemList) { - QModelIndex index = currentItem->index(); - qDebug() << "Master to remove plugins of:" << index.data().toString(); - removePlugins(index); } } @@ -811,8 +789,6 @@ void DataFilesPage::removePlugins(const QModelIndex &index) if (!itemList.isEmpty()) { foreach (const QStandardItem *currentItem, itemList) { - qDebug() << "Remove plugin:" << currentItem->data(Qt::DisplayRole).toString(); - mPluginsModel->removeRow(currentItem->row()); } } @@ -886,8 +862,6 @@ void DataFilesPage::filterChanged(const QString filter) void DataFilesPage::profileChanged(const QString &previous, const QString ¤t) { - qDebug() << "Profile changed " << current << previous; - if (!previous.isEmpty()) { writeConfig(previous); mLauncherConfig->sync(); @@ -902,7 +876,6 @@ void DataFilesPage::profileChanged(const QString &previous, const QString &curre void DataFilesPage::readConfig() { QString profile = mProfilesComboBox->currentText(); - qDebug() << "read from: " << profile; // Make sure we have no groups open while (!mLauncherConfig->group().isEmpty()) { @@ -928,7 +901,6 @@ void DataFilesPage::readConfig() } if (key.startsWith("Master")) { - qDebug() << "Read master: " << keyValue; const QList masterList = mMastersWidget->findItems(keyValue, Qt::MatchFixedString); if (!masterList.isEmpty()) { @@ -968,8 +940,6 @@ void DataFilesPage::writeConfig(QString profile) return; } - qDebug() << "Writing: " << profile; - // Make sure we have no groups open while (!mLauncherConfig->group().isEmpty()) { mLauncherConfig->endGroup(); @@ -979,7 +949,6 @@ void DataFilesPage::writeConfig(QString profile) mLauncherConfig->setValue("CurrentProfile", profile); // Open the profile-name subgroup - qDebug() << "beginning group: " << profile; mLauncherConfig->beginGroup(profile); mLauncherConfig->remove(""); // Clear the subgroup diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index c14f85090d..0566b3d23f 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -449,7 +449,6 @@ QStringList GraphicsPage::getAvailableOptions(const QString &key, Ogre::RenderSy void GraphicsPage::rendererChanged(const QString &renderer) { - qDebug() << "renderer is " << renderer; if (renderer.contains("Direct3D")) { mRendererStackedWidget->setCurrentIndex(1); mDisplayStackedWidget->setCurrentIndex(1); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 96fa3442e4..19b6b6a6ae 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -1,5 +1,4 @@ #include -#include #include @@ -198,12 +197,9 @@ void MainDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) void MainDialog::closeEvent(QCloseEvent *event) { - qDebug() << "Close event"; - // Now write all config files writeConfig(); event->accept(); - } void MainDialog::play() @@ -295,14 +291,10 @@ void MainDialog::writeConfig() mGraphicsPage->writeConfig(); mGraphicsPage->mOgreConfig->sync(); - // Write to the openmw.cfg - //QString dataPath = mGameConfig->value("data").toString(); - //dataPath.append("/"); - QStringList dataFiles = mDataFilesPage->selectedMasters(); dataFiles.append(mDataFilesPage->checkedPlugins()); - qDebug() << "Writing to openmw.cfg"; + qDebug("Writing to openmw.cfg"); // Open the config as a QFile QFile file(mGameConfig->fileName()); @@ -360,5 +352,4 @@ void MainDialog::writeConfig() } file.close(); - qDebug() << "Writing done!"; } diff --git a/apps/launcher/maindialog.hpp b/apps/launcher/maindialog.hpp index 3af217e160..c6f22e3361 100644 --- a/apps/launcher/maindialog.hpp +++ b/apps/launcher/maindialog.hpp @@ -20,8 +20,6 @@ class MainDialog : public QDialog public: MainDialog(); - //QStringListModel *mProfileModel; - public slots: void changePage(QListWidgetItem *current, QListWidgetItem *previous); void play(); diff --git a/apps/launcher/pluginsview.cpp b/apps/launcher/pluginsview.cpp index 5787439acd..27af45c569 100644 --- a/apps/launcher/pluginsview.cpp +++ b/apps/launcher/pluginsview.cpp @@ -1,9 +1,8 @@ -#include "pluginsview.hpp" - #include - #include +#include "pluginsview.hpp" + PluginsView::PluginsView(QWidget *parent) : QTableView(parent) { setSelectionBehavior(QAbstractItemView::SelectRows); @@ -14,11 +13,8 @@ PluginsView::PluginsView(QWidget *parent) : QTableView(parent) setDragDropMode(QAbstractItemView::InternalMove); setDropIndicatorShown(true); setDragDropOverwriteMode(false); - //viewport()->setAcceptDrops(true); - setContextMenuPolicy(Qt::CustomContextMenu); - } void PluginsView::startDrag(Qt::DropActions supportedActions) @@ -28,16 +24,6 @@ void PluginsView::startDrag(Qt::DropActions supportedActions) QAbstractItemView::startDrag( supportedActions ); } -void PluginsView::setModel(PluginsModel *model) -{ - /*QTableView::setModel(model); - - qRegisterMetaType< QVector >(); - - connect(model, SIGNAL(indexesDropped(QVector)), - this, SLOT(selectIndexes(QVector)), Qt::QueuedConnection);*/ -} - void PluginsView::setModel(QSortFilterProxyModel *model) { QTableView::setModel(model); diff --git a/apps/launcher/pluginsview.hpp b/apps/launcher/pluginsview.hpp index 36a6119f34..b3dfb79ffb 100644 --- a/apps/launcher/pluginsview.hpp +++ b/apps/launcher/pluginsview.hpp @@ -17,7 +17,6 @@ public: { return qobject_cast(QAbstractItemView::model()); } void startDrag(Qt::DropActions supportedActions); - void setModel(PluginsModel *model); void setModel(QSortFilterProxyModel *model); public slots: From 118765a274aac2f1571fd6c9cb49db1c01d6b4c0 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 24 Jun 2011 21:42:18 +0200 Subject: [PATCH 092/111] Renamed the launcher executable and icons, added .desktop file and default config, modified/updated some other files --- apps/launcher/CMakeLists.txt | 9 ++++--- apps/launcher/launcher.pro | 25 +++++++++++------- apps/launcher/launcher.rc | 2 +- apps/launcher/maindialog.cpp | 6 ++--- apps/launcher/resources.qrc | 4 +-- ...enmw-plugin-icon.png => openmw-plugin.png} | Bin .../images/{openmw-icon.ico => openmw.ico} | Bin .../images/{openmw-icon.png => openmw.png} | Bin files/launcher.cfg | 5 ++++ files/openmw.desktop | 10 +++++++ 10 files changed, 43 insertions(+), 18 deletions(-) rename apps/launcher/resources/images/{openmw-plugin-icon.png => openmw-plugin.png} (100%) rename apps/launcher/resources/images/{openmw-icon.ico => openmw.ico} (100%) rename apps/launcher/resources/images/{openmw-icon.png => openmw.png} (100%) create mode 100644 files/launcher.cfg create mode 100644 files/openmw.desktop diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index e311cf05cd..808c7753f8 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -45,7 +45,7 @@ QT4_WRAP_CPP(MOC_SRCS ${LAUNCHER_HEADER_MOC}) include(${QT_USE_FILE}) # Main executable -add_executable(launcher +add_executable(omwlauncher ${LAUNCHER} ${MISC} ${MISC_HEADER} ${FILES} ${FILES_HEADER} @@ -55,11 +55,14 @@ add_executable(launcher ${MOC_SRCS} ) -target_link_libraries(launcher +target_link_libraries(omwlauncher ${Boost_LIBRARIES} ${OGRE_LIBRARIES} ${QT_LIBRARIES} ) configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") \ No newline at end of file + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") + +configure_file(${CMAKE_SOURCE_DIR}/files/launcher.cfg + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.cfg") \ No newline at end of file diff --git a/apps/launcher/launcher.pro b/apps/launcher/launcher.pro index 5c05dcb90c..f5a82a8dce 100644 --- a/apps/launcher/launcher.pro +++ b/apps/launcher/launcher.pro @@ -1,23 +1,30 @@ ###################################################################### -# Automatically generated by qmake (2.01a) Tue Mar 29 22:56:27 2011 +# Automatically generated by qmake (2.01a) Fri Jun 24 21:14:15 2011 ###################################################################### TEMPLATE = app -TARGET = +TARGET = DEPENDPATH += . INCLUDEPATH += . # Input -HEADERS += datafilespage.hpp \ +HEADERS += combobox.hpp \ + datafilespage.hpp \ + graphicspage.hpp \ lineedit.hpp \ maindialog.hpp \ - playpage.hpp - + naturalsort.hpp \ + playpage.hpp \ + pluginsmodel.hpp \ + pluginsview.hpp SOURCES += datafilespage.cpp \ + graphicspage.cpp \ lineedit.cpp \ + main.cpp \ maindialog.cpp \ - playpage.cpp - qrc_resources.cxx - + naturalsort.cpp \ + playpage.cpp \ + pluginsmodel.cpp \ + pluginsview.cpp RESOURCES += resources.qrc -RC_FILE = launcher.rc +win32:RC_FILE = launcher.rc \ No newline at end of file diff --git a/apps/launcher/launcher.rc b/apps/launcher/launcher.rc index c369a5b061..efe86e4da4 100644 --- a/apps/launcher/launcher.rc +++ b/apps/launcher/launcher.rc @@ -1 +1 @@ -IDI_ICON1 ICON DISCARDABLE "resources/images/openmw-icon.ico" +IDI_ICON1 ICON DISCARDABLE "resources/images/openmw.ico" diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 19b6b6a6ae..257b35cce5 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -42,7 +42,7 @@ MainDialog::MainDialog() setWindowTitle(tr("OpenMW Launcher")); - setWindowIcon(QIcon(":/images/openmw-icon.png")); + setWindowIcon(QIcon(":/images/openmw.png")); // Remove what's this? button setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); setMinimumSize(QSize(575, 575)); @@ -65,7 +65,7 @@ void MainDialog::createIcons() QIcon graphicsIcon = QIcon(":/icons/tango/video-display.png"); QListWidgetItem *playButton = new QListWidgetItem(mIconWidget); - playButton->setIcon(QIcon(":/images/openmw-icon.png")); + playButton->setIcon(QIcon(":/images/openmw.png")); playButton->setText(tr("Play")); playButton->setTextAlignment(Qt::AlignCenter); playButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); @@ -77,7 +77,7 @@ void MainDialog::createIcons() graphicsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); QListWidgetItem *dataFilesButton = new QListWidgetItem(mIconWidget); - dataFilesButton->setIcon(QIcon(":/images/openmw-plugin-icon.png")); + dataFilesButton->setIcon(QIcon(":/images/openmw-plugin.png")); dataFilesButton->setText(tr("Data Files")); dataFilesButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom); dataFilesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); diff --git a/apps/launcher/resources.qrc b/apps/launcher/resources.qrc index e5b2f5ca7d..2b56f80fd6 100644 --- a/apps/launcher/resources.qrc +++ b/apps/launcher/resources.qrc @@ -2,8 +2,8 @@ resources/images/clear.png resources/images/down.png - resources/images/openmw-icon.png - resources/images/openmw-plugin-icon.png + resources/images/openmw.png + resources/images/openmw-plugin.png resources/images/openmw-header.png resources/images/playpage-background.png diff --git a/apps/launcher/resources/images/openmw-plugin-icon.png b/apps/launcher/resources/images/openmw-plugin.png similarity index 100% rename from apps/launcher/resources/images/openmw-plugin-icon.png rename to apps/launcher/resources/images/openmw-plugin.png diff --git a/apps/launcher/resources/images/openmw-icon.ico b/apps/launcher/resources/images/openmw.ico similarity index 100% rename from apps/launcher/resources/images/openmw-icon.ico rename to apps/launcher/resources/images/openmw.ico diff --git a/apps/launcher/resources/images/openmw-icon.png b/apps/launcher/resources/images/openmw.png similarity index 100% rename from apps/launcher/resources/images/openmw-icon.png rename to apps/launcher/resources/images/openmw.png diff --git a/files/launcher.cfg b/files/launcher.cfg new file mode 100644 index 0000000000..bc0e2b7fb8 --- /dev/null +++ b/files/launcher.cfg @@ -0,0 +1,5 @@ +[Profiles] +CurrentProfile=Default +Default\Master0=Morrowind.esm +Default\Master1=Tribunal.esm +Default\Master2=Bloodmoon.esm diff --git a/files/openmw.desktop b/files/openmw.desktop new file mode 100644 index 0000000000..162a37deac --- /dev/null +++ b/files/openmw.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=0.11 +Type=Application +Name=OpenMW Launcher +GenericName=Role Playing Game +Comment=An engine replacement for The Elder Scrolls III: Morrowind +TryExec=omwlauncher +Exec=omwlauncher +Icon=openmw +Categories=Game;RolePlaying; \ No newline at end of file From db20186e50fa349e175f68953d8310196c6c1fc4 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 24 Jun 2011 21:46:20 +0200 Subject: [PATCH 093/111] Added newline to the end of some files, GitHub was complaining about it --- apps/launcher/CMakeLists.txt | 2 +- apps/launcher/launcher.pro | 2 +- files/openmw.desktop | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 808c7753f8..5079640c07 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -65,4 +65,4 @@ configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") configure_file(${CMAKE_SOURCE_DIR}/files/launcher.cfg - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.cfg") \ No newline at end of file + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.cfg") diff --git a/apps/launcher/launcher.pro b/apps/launcher/launcher.pro index f5a82a8dce..0b4e4618d8 100644 --- a/apps/launcher/launcher.pro +++ b/apps/launcher/launcher.pro @@ -27,4 +27,4 @@ SOURCES += datafilespage.cpp \ pluginsmodel.cpp \ pluginsview.cpp RESOURCES += resources.qrc -win32:RC_FILE = launcher.rc \ No newline at end of file +win32:RC_FILE = launcher.rc diff --git a/files/openmw.desktop b/files/openmw.desktop index 162a37deac..8643d4b138 100644 --- a/files/openmw.desktop +++ b/files/openmw.desktop @@ -7,4 +7,4 @@ Comment=An engine replacement for The Elder Scrolls III: Morrowind TryExec=omwlauncher Exec=omwlauncher Icon=openmw -Categories=Game;RolePlaying; \ No newline at end of file +Categories=Game;RolePlaying; From d2a0d3dd67059519a223283bef1013c2f22306e3 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 26 Jun 2011 01:35:46 +0400 Subject: [PATCH 094/111] Launcher: small fix for mac --- apps/launcher/maindialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 257b35cce5..841d4de3bd 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -210,6 +210,10 @@ void MainDialog::play() #ifdef Q_WS_WIN QString game = "./openmw.exe"; QFile file(game); +#elif defined(Q_WS_MAC) + QDir dir(QCoreApplication::applicationDirPath()); + QString game = dir.absoluteFilePath("openmw"); + QFile file(game); #else QString game = "./openmw"; QFile file(game); From 9f88796648434fba222a58ff886f425844a6a3a7 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 26 Jun 2011 02:07:35 +0200 Subject: [PATCH 095/111] Appended a space to the Current Profile: label --- apps/launcher/datafilespage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index c4ed205573..545595ab87 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -90,7 +90,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) splitter->setSizes(sizeList); // Bottom part with profile options - QLabel *profileLabel = new QLabel(tr("Current Profile:"), this); + QLabel *profileLabel = new QLabel(tr("Current Profile: "), this); mProfilesComboBox = new ComboBox(this); mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); From 1278ce25141e5693252faf78913728209f262c18 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 26 Jun 2011 15:37:06 +0200 Subject: [PATCH 096/111] Fixed problem with png images --- apps/launcher/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index 5079640c07..d7e5b3a778 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -39,6 +39,9 @@ source_group(launcher FILES ${LAUNCHER} ${LAUNCHER_HEADER} ${LAUNCHER_HEADER_MOC find_package(Qt4 REQUIRED) set(QT_USE_QTGUI 1) +find_package(PNG REQUIRED) +include_directories(${PNG_INCLUDE_DIR}) + QT4_ADD_RESOURCES(RCC_SRCS resources.qrc) QT4_WRAP_CPP(MOC_SRCS ${LAUNCHER_HEADER_MOC}) @@ -59,6 +62,7 @@ target_link_libraries(omwlauncher ${Boost_LIBRARIES} ${OGRE_LIBRARIES} ${QT_LIBRARIES} + ${PNG_LIBRARY} ) configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss From 24947d800ace7f183aa18543ee2616352402d4c8 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 26 Jun 2011 20:55:21 +0400 Subject: [PATCH 097/111] Fixed launcher config and style location. Launcher will be started when opening bundle --- apps/launcher/CMakeLists.txt | 17 ++++++++++++----- files/mac/Info.plist | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index d7e5b3a778..5090c167d4 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -65,8 +65,15 @@ target_link_libraries(omwlauncher ${PNG_LIBRARY} ) -configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") - -configure_file(${CMAKE_SOURCE_DIR}/files/launcher.cfg - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.cfg") +if (APPLE) + configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss + "${APP_BUNDLE_DIR}/../launcher.qss") + configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss + "${APP_BUNDLE_DIR}/../launcher.cfg") +else() + configure_file(${CMAKE_SOURCE_DIR}/files/launcher.qss + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") + + configure_file(${CMAKE_SOURCE_DIR}/files/launcher.cfg + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.cfg") +endif() diff --git a/files/mac/Info.plist b/files/mac/Info.plist index 6b350d2501..1872425e7c 100644 --- a/files/mac/Info.plist +++ b/files/mac/Info.plist @@ -7,7 +7,7 @@ CFBundleDevelopmentRegion English CFBundleExecutable - openmw + omwlauncher CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString From 6716bf649ea0ed03381881a846436194c1fad2c6 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 26 Jun 2011 23:16:39 +0200 Subject: [PATCH 098/111] Some stylesheet improvements and a drop-shadow for the scroll background --- .../resources/images/playpage-background.png | Bin 238482 -> 236828 bytes files/launcher.qss | 24 ++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/apps/launcher/resources/images/playpage-background.png b/apps/launcher/resources/images/playpage-background.png index 7eb84b6a73711ae51b200b4029bb9428e1babf49..0116adc0fcf4999e16e40a467eff86929ae2c715 100644 GIT binary patch delta 235450 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

d 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�h3$7D!B_v7_gWP!@Us210r;~ zn+YWW0vL7@)WY$Dp>?L0GW?Ryjm^ zAz~?1uwL(R#S%ag5l^VS(@V7&O;2AEt8y17szQMnybKLD1_0XrqIEAFrCK8D=dx|G zvn5tu{mxE-f@5}Clin2ZI}N-gw9yEnx3t0RRssMEv7u_Kd066qT| ztrSEYoL*E;Aun3RIv1+$E_ai8Z} za8pf42{#rh*bgUPTS!eXe<~qY89|Za6+3e6IU67yqXG+KJrL{3Y$RvKk_zFkncSP3 z(jr2$ykm|EUv!7r9qWA7o>DO9cRY`L!=m!mMFUf6B!vp9vhtCw-63 zA|obuw&(bS?gFeG5({%Cw%b=g1#>*H-G7dlpNM=ifdGLxp86wla{gWA=6@gKKKZqA z-_QT+KmLRN_GfQD(G`igINOI%`6Y1{M&zLX#AtdGQ}pd#BRYY#8$>1|7PkJCEjA`Q zlC?07PcEbZgpgrJf46zzg37t_%{*Jxu{k6Y-gk^OI6`w~u#2Gx5lq_^5%m2H+x7-? ztue?6kw9y2Fc)~|m@+F~!&`$J4Sed`>j6i}T15q}`!^9n?dhy3%yz8xEa<5eahY>s zRgxvhbmQ1ZOC3oUIYSU%Qro1uk0feR6kZ2w3NK0#c9JEbf2MJ^6oL{3=PgMx^0oZs z`_5}ng=XI+pTr%RLg82$kRn@h@lK2lR7ytg$hC?xp07xi#E)XfC0_!Kj9KyMpAaQd zi_`(Fr-Di>6!J(5S0t%enB3JE&AKFqa8z-RM@8sCK*eO zUs9AKsu)zWe6yV!4N3#5+r}Lf0w_TN-sP2Q%%q@q^9{{6 z#F{ncpz5Zzy|6Q#Q?z;TfNhPP1`;9*+U}GUe=pv{feF*CKG0ELAm?J%IBwW=18_2A zQ5(N7)qZC|8?F37SIVnmN34lCo}?yNuN@Pu_a;(-Z{_GPXGL9Yn)#J|#2wQmoLK7s zVxV%CJFTBkc^2(I40)*ifpjhvSe9#bCqzrQh#BrQIKr(281d7^0 zk~HD)h7|{C`CcJ|#Jh2t4sHyZ#*<*A?rX>lqt31S};f~hm7J^UP{=2x)oB#*x6ZPu1`oh%(+uR zIy+=_ti_x$*Z#s{%@`b+Es{8xYeMNd)rtnwdzBCLW<~Hd=9R@IsMpAUzs~0+e_1R< z6}@0NX4xA!6vMhM?@=O-#mmWrqxkYE(F?{UQ!atoy>^&aE=-M5-63HRIZ73n5UbZ) zJ7CvuMMsR2j7#UZHYFi*KqDZ{=&SS%Rz)B^Uja9H30p!8iW3egF-jn1!&*;N{1p>^ z$AK&n1o_zx*Bd5In(-?>1z}k0f56su#3BnblaV?S3;p&L{cXqj{VyTDu<$?(MdAtX z9rIk=1vf>*AC~PQ;Ju^wcg*#P=Q*(^kaM8F{d>^&_K)!0_*)0z{ytq&0sudJ{E%<& zj(G;Q?F}M5331B;iVv?7o*&uV!s(p9NG1hD3)!{9{gH&#Ny@h=_s4g3C1=p&>e z$6J{y3-=-mD+c{26+YNhfA~Np$r5ov_pnHnPVP5W48U8#R>8fHGV-9AAcISJtb#mX--zYR#ym-oDT?buw>*AgGfXY2qNSH1rfv*H?a_RT<{-o!#)24 z7hE6^+(7t{NP3A#$N=aUAD^YQ{RVr8>|Z zk%?R{myjl-6kK@%YlHDBXz&1*Nd>3zR%-)jd|zW7fDfipf4eKIh$4g~n#X*+$7pZZ z)pT}GOCfH7Y6gN-BH}9m6+7 z@IB1q!44b@e?K$}1y^=ty&&QPx_tuph8geS#hp9bu>tqOO4Bvjb;r+{(a5TKWKk!?h+eU`$ z_vc^VuW_H!!0cKAB{%V2)4`J={Yz7 zo@T_WFw{>HZgXNtEYZi1VXZLsoz<^=FxVK?T;@XFa7o_=iy9D4-aM<2n%a*c7957y+New6BpB{ z9xI0HfAL`9i|>7>TF8}F3_(QY*%^JX3oYnHXrfZngVfry#&(n-Clo(Xyok#ZqYo0D z3-G=%DHjY*`v^}xgmcpP$j;~k#!PhWya<~sF%*MJOyo84J89gfdDRp&S7yjF;LV)@ zfr@|s>Z-Q+K=l&(Y7;}w7(oFp+bj#QZdQrjsC9QxmRcsLg>=w z=rs}Z0~J;vIe;VDPAPcb7`dl$5Dms%hVXv2grtGEJ`ZR#st(*5kSj<<-_GB?DJ)QM zTjQ7)t$o}BRUu-r!);CC0fiCPnJG#?8S3L$t~HL9NM0v-B6IO~ltPo27xSvjI6Hth ze=g;H5GmwTw3gu-BbrmSORgP-3Fkl4KtriFT0S@uH14XzyF{bvk%dr4?DRVsx0p=YSl;><<=IAk7Zpy{!rv-<0D#%Cfb7#;Hb1`+R(VVIM$@7^|~E|EH)R6Imv7e0rmWw<>f zFePwkFkg%sm_df04*-Y8qOZjKf6MsUH{x}=ZA@&bT0p8pilnH(ixCKIS3q5;P;#UhT6ZF#auH4Ae<5Llvw<4p z8vRj_z)Bt~1xgLBO}jXJ37ION)e*^rpAG0Da2$74@thvC#xX6vLa#6w(09}_pbg}C z`6fGnJVg{kzNIABvG;*h6t$QP$2c?hw1+jLbt8)Vs#*6-S%xAyDH3RIlCY=3O2x>m zq_lf727V>r+Ys%-Fhe7Fe{YC6i7LuNJKBx(@VLX;4Q_GOv+|^0q91LmVE%-}3#=W; z=q%b`@V;Ysqg6rElZsQ$z9}AFQINSLaEi+&Q5DE^#dH9zzd^+vjvFuw$MGIx+mNQ< z!XU*x8!jPI;lP}Uv3;UTh7%b>VpX7ll5*~`80CXCDR9q_l>PzMerSPr8-Q2%Ftq*|`o2(Wz*@)SXC9`h83Pv>-m`!985c|xGiLBJn1-7q5c=`=y+s6w*!jCd1>Zms@j301kCuR<1OAU6?Njww@9ug}gWw)alRy<%0 z7@hpW64#9~fB7kf9^EVCv59b=dC@fr1nIVu%wTzSFj=LXCMwJ_4j2|M!JJQzx+@1ZyMfx{&&&F5K4%u(Tb(i;x3Ps00Z*N(Ff&%85d9uM<}C97il^_kBGY_ z0RvWNe_>>Zd_gNmVk9P2uXU$d z)f;zSeJK5#e=h+hj@F(rAFs%|V;v6`)p=kWH*DL6xu!bl4(khl?l1hxU;iBVMF}O& zZt9`G=5Mx>`hH(hEt(lm1>VA7FrP$_eY}>g234x5DkS>jadfTMBOJq=q18h`{UAe%bI!hVWx1E=dT>4OFVUp%2UVt>L z;Ar(!)1jx%jssBs5{-+Tr3ei zaYUL@@o9vaB?`gGeh7`1N!(a@SKI>&rtaG%W+)3d0$I*5LofP<%qeVGeg#une>FwF z+gD=EB^1(_jbnEicN^f!Uo$rvZxzGd?U{K_0;84^t{oE5fJFqUC<>iyeid}w-|&3# zQ!QJ3-%t&?UV*s7{08?M+!jag-hn7=&!1q$1CbNYZ$9BOmk*2~@r)JBgQHt|7+@fz zmIXD>6Iw3Rv6;yu5BEfH=X51H8hcCfwfp1w7w%}z+0j9 zC&Xi+JUC_ye!oPh-AHT^KC2ehhoMzQ?;RNv@nB}y%0M0uif3B?NTC=;f7AqK9PlwP zwhi;RV|)4xzyBvc`_cdUFaPRa0`N|k)ctz|9>)JyA;tIml4?KsL&u-`f5(3NkN(y^ zSOsnUGxU96zdf_tFcKtMdm?YHzrl8U#x^#pm9|ZE0;RP&O^7Q$VB4RtZBH<##=kj8 z2k#p_0KK8y(4E;%`}Rgjm=BS5Slr>-$d&^ zu91xyV4covSiy>8K{P|}e@}oZ9;7iw!89)ifEjmrtKVd$-)mZ4);;;D*-ETHMYe??;l(+qv1s%#$L zh2>lB>P)*AC?5+;dl(v`t=lDsR-X)SoqHx@rxCS?PwL8~vPpl9@leYuw03?6v?;XS zu@+N~D@Y~+B)er4WytJ+xg&@Wok1g~$hb%@ zIMw21*S^QhMRj*=pnRQOvwJhj;V^S|)Re+|Ij{|8)B z>o*gE`2F5Vf9-fYedaCEaf97%u-4G`9c#VNuh3P&DM+mkQjXicA&)@eKpOWCF+ZT$ z25*MFe?o;?a^$t&K80CB)+;X=XD}B9Ta15?pt1=;rB3S$2rAFk`~q8h%e_pOiI&1x zR-(!%;`m_4np0DA(ixh)A@#g*sT%X3>QDQGW{#K-e~t!f!pB>-`?l%leFD9hd2cnK1igAd>~h0_|uhi9G39KgaF^4 zK4PQv>_t69XKz=CqI)1g4`k(pBQCL&1wD-8#G`@4niY%VeQ5Vw0Fof#^>`1=V7Dop z*fAMrg5bKP?SVP(Sg&8Aa8p-Wcr5Olf47#v_V(0K+V}YDH~p{gXM8*W{JtOlv2XpD zSLf2U2Fw?Zmpi;0w%g8#3L7X-v}8O1dSTtkpsFZXe?>4U9%Fmffl5x61=Bgb0k(HS zLghzDIQIU`2UjBnl3Gqmw4*gc;vI$%GL;Q*G5^q!Y48ZdViISSQJ$TVi~s;2e*j5D zK~zc$y2&{yEQCve#0)@`23QYFc+(+P}hP7d}FLY;^2(fH}M6#9=5@bz*td^ z{S6`})_R~;AsUf7ZZ6xh$O$zWpg5lCJz9aP7aTP)#uFNLbtQn0j#`W0Ty#`B1tU=I z*P!`R7$;yT;O(TsQ+4FHA@D$ke}dSW^Ls}j=Rt1{Sj~6)1fhLT8VCih&LRcO+-lDF zjHV7XNPE%okvNgu#sG6bjK2`gw!uQX zO&{uh4>TnZBkKy;gioyH8lOG@bdV-SafbyE1)1_84xiJ8a#AMxkpHk>9qWn%F{g~F z{0xZq+GI+Go|^%;gKv7d>a!hfDjx($)tkvcO9U8%;I$pq;Hs*ej89dRZ$B;23S z`ja{#Mu3!XO70s6#xa4~s76hSKD>3pOCtauXv2_mVRRB6UhiKpvAGs(HJY%Ug0coC zAK2J1KYSM%3!i-Y!&GMKo$~fZA*O{qiaAuTAAmM^!QsppW2ys{{wC{->wio%_Ow}u z3JRgDp<6>9cO3Of>|EPXtx)xVVH5Ek1V#HB{NmsKyWa)y>)!*5_r3o88z({k6aU&j z`@?_y(@#Dlm#l9XW1u@24%a#|?&$lCaMw->L>{CJZ+%DK2i!Zx7#Q0dlr_%G9hZB* zZ(8sQi31Zs!Po(nDSpH4!he}W-W3xt;MFnur|McbAI`EXuEDH{c+AeDIc2L=0;vif znd^bxcce8mH?+n}m*Yx9StpC_9M$*^^t#;n+=nq)leia+W~^|m_w-9>7s1G%jxxen zM|%b^gyq-#yd)EDPBt8tMsx)WRj}?lIJmgy?na3~J|#HlD7bJ=e1F(8;u?9Hm}X~v z;*FAg@1!AQJR}h5mz*}@g`+bcCyo|TXS4%fb_lRpk@9LyvC7s(C#dAUi}^Zdd;~6> z6b$HF*Y`8Y##73wfhs@ZZ)DmI3R6yDL~lGKvlwdU{aKkq9J55FRAdycwBG4iVG@fv zSJKf60p zuCZNvLknEwhRn$^rW+$_bdQmqB8ov!JaUo3Ye*DO+5>f@x|x1<2Br)&b$u}p(nxwg zp%Xwgc69y59c?lX3|=3RUfyX{zyk8l-#?S+sYqoxP1WSv_~@4hFY8Xl zaM3tEI!(J!fl`x5wx_qBVIFsp_qlUiK|^@OfvAafFs;`w`ZL*?8G)6HicASLYA#+_ zS;%!KWOlvEqkq-0=G2Jaa2zxpb0SqRY}j_H86y(+*LV2u{>%U6Z~Xjw{ME0F`Ch+5 zocOA6BEN~_zF*i5R2#cxya2u-@{Zd!VB>Z{FXv<7>G>I}Ua{@Zusr}U?)eMg-al+iy@!CagSp?}7XF`f|Xpowmgn+gR*Y#%5^kjW)@IS|U0r?#>FP+_6%7 zEu`YE8G}(^%4dp-?c)t%zQ?9mlEeYvfZ0v8LT80t3A0TkaYG#k(^reWjuZXjo!t}~ zGl=GTXnz);K%DA7A)~Z+YVHV;0&>zvWu59FD7L}74*haPJ`7|9If$Zpz$RtSIE4jG z{5+D;vpAz70;*BUtft2sWx`npNdnMl&p*~pD-Qk+$?wg3`*`vAM&+D0v<4|SX;h85 zNR{^uz`Uw*pfP5l0V^o`rq8J`kN4=lqxW(BJb!M+CAddaavf58Ng{4L${n#vV@xOJs)>VRgF=>MWuKChyA6&yjWYJNCPsgf`m@+I zVxTe+n5-Ramp4kNrNBozIUH*psL<#SaVgs(NE}bRA{Gn4-Wx0jswGxDc&S$7fsPGc z3x6{w+t4J=$Jz}|zVJf8^KvGHaxrRpY2?I*Ia4bX=5`0$!+)Y&&ycNcH zgL#k`Gmiu2Z$zqLyoz0;OP8Y1t`TOg$rvAzW|(5UaNO_QWz{5+eESq@z4Cdo#P-WMMr%APUR}>o-^dTX)=#FENZ@V1Jz1St6;ht4t*&b37WLP^q_ud4C~QM}?Bt zr-9A=$BvrjCQlUT>Tsp9*Rw$Fj><>m55NV`t~qkroIr zTBLU#5>yv5{vz`r@YT8w4Ml-8jq=W1qEPHYo(NcAY;W1BTf!nFU|1X{ndxvybboVI zf8Lx~RHeYSJ{ZQ>pSZs;(2HS%m4EH%LKB%lo1OCWN_ns#WmVU>FQhPYp4+XtBm1xlp-rmMMT!Q?v#nk+)IH-pfYHF?v%}+ zF$bgH;6`;`xudF~RlCfUoc$VB++iq;@q|Ltc#(^1MnBp$&V*8>-89-MQ-9%d0N&Bv zl+;TiHQR`#2#+TAVjw1E>aa!8j+m1G6>6s~q14}@Ijkn!2Et_E9lJUc(o;;cLKotQ zLq%&9vKf5Fyphg@3&>lEs{(>zQ|^L)W|%h;jpyPy=4VC2L3}bHZBNRM4E= z`~l05AOsZRfYI$Hj-DBFn!Gi2Q$|yNGLOj{f393h`|nWEL)CA|h~C??Mt&R5Bmt-C zirg^o>WZ+Ta>}?&pP>6D=}6bFEU1URIsW>D3ZS2 zVgAGiG#EW^O$oV8oll)r+f?=oy-pb?;B#i*&qK+XF# zwkR0P=!aP=E?PM%@rcjSeUsu$&w-gPnT~P$gcWowbwceL{eMw;)!;=k!<2JaA#@PYKO#vDo5W2nqG3on^5Iw!U_2R(&J+uRz6U^ zA$8%jWWXS>Q-5F}OpljF)#V60P(~#ecUy;s!AeW+MvFoWc2w4o@k;gFPPQb?!2J@N zFlZ34d|N*^me8KH|~Q{u^eEB;$ZYc zZydA2hNvP1s}IHAWw~P=?-B9Pb66a$fjMHK zk?&mZ(I7&Mti|zo!RT+Ol)267zBHxB3-4Ii7AncEA&HkW{|r zLhlVr;(xFTP7%)WHlYFo$U7=K5on{))W1Tzr-dpN8JVQAZxeI9!je9{<8cV*MYDJL zu2FI#;&VOMT|(4>h7HHdd%V1VPuqTLnD+z71N)~x00i)NfWP}S^7;R-@$uhp3A+D; zednis>^OO>J}o0iCBP{5&JsZIGgpaIf~MnL*^NYOskJyEZy42iXvb!Es;f zl7E0dE-JfQJJaD5U>J-Fz@}v3kU>#@VO}HwmqFBxJ|G@xT2>q59@czd8#lB@k_FK~ z4Rapyj_s;chg|gBvGg{Shoc=%NG{*HD$z;fu=a|O`L_3g^3I4B@09Vok+^P36t;oU zDSeMz6ygYjwYBZq@lexpkg(vcik=>^rhkrVtp{boMbDhWMPf=a=b$VO>xz3x`M{{q zY(BIrHLR8Nj|swR`aR5+zN3aHjVFtv+X{|X*IFDcJDF`Ky@FmdP6XHqd<6H-`-|c+ z2AU6wNlYD_b*x4Ii{T6=bnbHVIfr z>zK+%Dlxq-fUGp965*U%$Y<-B42V`WSfk`FlL>ulTS2%CCMK zz%PHTlY0G1=;3clg8u!!r20RR_+!8AcmKdobsyL^jw!tF9BVk+=Q41V;(y5l)B@}A z1^W1uA4qfVLAI_4_on92<=si71z)~8U|uxb`l)DBOP}u*vUU@7{FQ%(F~*_YZs@JC zGBKe0C%mYrQlP;tQ?cY^h_y2e%y-e!>*CtkIoCh#Jczev9;j_+Fkl@YRa9+UhT<}& z?Y1_sZJ%)&o`KPJWnS$Zy?>2eBSMbKeCu%Bv>b;_f|5VyqJq-9a)3@6yAEPe)J1i4rXncHy|37SIOmd9~}QcVSmV_&m%6zBHBRe*~mF52$6Dug#PWLf>#%s zp)-{@A28eKpAqe}oPMgPGaS+c=3R<_NOk=XcaSD;1DS+w=Lf_w5%E<`YCkB>12Xp- zdZXG9r~5~i5c3=QV1M_~t?`o6=T{8`w&sNSMpkAW$g|=HkoAChV)%wt5;&A8)}kxp zDrxc#DNJ$j{cT+lCIsG^5`s;?Q&wTEcPRU~??V})1{!#&wQ;+IC)PG(swikQ`@1)W zES^FWasEmIg4Udp{32ef4-p>_q%vr-Va};W26x*blkl0!-G3Tmb|QFooet>CGnsi( zh~(qaATYU@AYdx~g19uJ;0u=U2s|DyJP(W%dGG9CQA{B|<@}?&K*~TZQsCF|g3)f+ zZf}sb(5zuj7KC*yWPX8nfBy^o;QhY;+~@JX{sYE+-?&Ta>-?s^f579P`RO0|H=o`- zd!{&H-mvYA^ndQ%`N6AGaV%{82~Tf-NPtRqCFAyts=?qdG?)&9Gu*Hl^KPhyIyCYL zpd0#r(;kB+#yWFiL`xhS-RD&FkzC!{4c3czAU}N{^0nAU;(4rxx)g#QseoHj&7~rx z**>qugL17qyp_ljGQNUKWyZN1g$)^qxbye)F7*+!jen3+reYF|t#dSxxsdBFzY{^C ztvS&|wdkQZXX#GV5Dk+i!nRD%0<6MFZkX$#%c4G#E37c*U6n0)dzq{ZPbhBpuF=OC zcGxd;5RJ{I0=jlSZHM*SNAymSq;M|Bi7Im0AL24`<1%W8o_~4LoCkj-D}H*R*>#~Q)#_5O zc7c6U@Yp4+6T66NT{7i@4~~)D2heZwSsg4?Y=4O|B6VcGaI_1~)pD1_FKcf>;osl>{~ z5r1&9gDg8VacJ1L8`h$1J|fV}cqx{_yR(rjO357^W83gp?*SWVW{Nc_sWd0%p^4MW z2Z~@i6UdQ)Ha3p>8ZmD3xU=gIPK)OK1uG6J{N{!?&-?!8|K{iaGl2L1fSuGg@{&3) zs{Sj$=YR4K{;ogO?e$xI+%WcMz!((@`k79XSDqZDb-eMyYMc6jg6J_n&+q< z7!AD>jZ>BI_5^FBPFIrS6_psRv3if>zM!~>x1u_(@7r})wf+WaQwGYqsyMTu{R^(q z%K7oR_lr=#$}==tP%3C`B(v9IaG+5oMyd2JmwZ#+)Fue(ITm!$l^rV&b_`9K=YQZB zkmHXBg%8?$RRs`%rC9HZ$<9s`YfI4;`c45t#l;JxtXYKV`bb}AF5Y z4Wz?I#H5rMpi#E(d`4HInvuPRresoSJgfoE!={ZVpzWxb9OKxD09vg4is68Be&7Y% zyTUDX5T%0gK=ANVbPCR{qmzKJW`9UADB?q7rAunLp`xfZ)73_5#Hr+xic>fTZ=Fh2 zdBLn1%E{H>n1}{h16819q#u+z8xvQO&xEscI*SDDG5B0Sm-OGq3~7 zGo7{qYaZg#apcSAOr4Q%T^SGR=Ff3>?my>TX~ zF7tSxysll>X*)1$Jiwb1053}f$K7|Kx>P{;P+~CHfooK0Cq+YuB;-S5xTW`!s>pW9 z6yc6CWQt#zlRnz^7Sfhrbp%l@+jcM;xD{+Y^6S-0RSccVI0g`${}vOjR{Sjc`6L&sP*prJ@^X zK?nDf>|OlckbEIxVYG3j;-V5W5AD}vOVdLJZkHHrt2)FEQU$LtN@tg4#NJR29h%!S<7m|#m4@Ew$Fnk2D1RQpz>aTG#Bw5{&PaO) zXhug6JbR7)BwPXaOAesIFAtoHF}ad{KGgBCJ1C)uRA52RBp-GaMJGQ!3+uFL7$eKA zf}l|o9l}nCF2hPn$+~B5(TOuO(4OF}3BD=K<_sJjFWsn3!rTm=BeyVcwX|vF`8l>uS!Lb zQ8+(f@86Ozrx2Nv#sh(IN!YD13a4*R6rOZWa9||%b9c3{^_|C01uY{5%;N)p-r`P5 z02S?owa1KC{+DrJC6QECri=az^(+4U*b6Hl~7BqJp#7 z<^yR(nSZgyC4~f%CQpu^fI7tr7R2&sjM93iawY=qREt?3l$e{S5uIR0cj9JBj&{mR z#ST1UHH4vA`Hp1nvw5sDD3GvL>S?(AUAJAd=u-R_H*h6Pjxbud72ovL>oH&CTSmB}S+G zo1ZK%i`K@)HY3snfG>L9oQHxd4g`xQecx{KiW!DKGw>}QfHm}Ouu?7pK3j9`MVTo^ znSXpz4ccTP&%lfW+ji4sCd0LD82c0VgOW9qAIE)WfqXjdb+nXr>dDBpTvw%kO4VtC z)&#*>UAwCOc1r5jq6At8IMFx7IGIzvUMB9_p!~jVg8i1peH28{1GtGPNkPM!6Q~fE zk^~BO2Rd>KVM$YfT)F2Y2y(;Qrxr zw7#LYCw%wIUq?I~+tY^EzxDSXzjVj{@f8yK*T;SFP2EYgfBz5S-}})Y`&~a>IM_BX zw(2S4oK?e`XSJgjp6hyr@{x+rg?}%JTu4v!*4TxZD8`M^2aF?Ms;HJmKOo{BiQaD< zv8aMvSX};3^5)3b+ZgxYg`8SOPyT8YIcRGnG{gD0@hL?h;;auO{p~-tkJMp@@rUyjE0T^ft}1+>hPXo zjB!MjUKrgG!9OcKkgi)Y*5xPZ?Mcr5DYGI}L=-z&R|9V)g8Yq_eHN@HX1-DkpuJja zPcS=|;D>x}qyTifmNB-Qe1B#dm3ED(gpn!v2bwFmPbw`c1QnLoP9g(&jJFZ47uL6C8M4tCDKjW*+4^W(wQ6tP~U^hce$nhjR;>g5VVXK}*V z492WmV}N1zM#J*;oN&+TjmBNEHc&YclZw5}1DS=fJt31n52QZj4u6vT$e6DzFnnCG zGTs8sHmnsmj&}gGgOkwem{St%j##f)$3q9tP=*}E3XuoK_RP_>ktE{=%sDkaJiCktA8FC{l+o4E^F_J2*bENN$$ck4|!;qI*4VHKWwy{1X|aI6b^!& zZIhVD9HVctXAoD`6!;p)WWivD*Z1GW)^@!6@Fglce(Mjmr=R`5-v8{^qB@SR2`9cf z?z4Xsm(=%E`1#+#xBj_5`s07n-Ox5FvF7|PksT{wgU9dgsG}R!dPVC4ecXUpx)cer^>)+eCm<>M^>db)7SKvbwqTgsMfPCYFVl84 z;$iKg@dOkDzYrux7Ycxc!f{z<w4DC)y7sf?i9UpJVjO|!`gS40+!)eo`o2fM zAy61y3Dm9*8skb)E}d2GLj)2&gXJt(B432`B7Z#B&!h(D{*%esOTrbIoO1$EN+oad z5jvsCQE2UksENoxM~C@FFhT{rrv0WJ|JkADHM(6N?l@lG^E+t;?}c@A++P=CNoc_U z03ZNKL_t*9i~f52*}wk&X90ZpN*DF@PU;`|PU?GJQhy8hJO9Fu`M?AGQ-#gGh1Ld9v{%PJguSv$3{bIr5A$gI`e*cRA`c91soP17vWVjZ#uB; zKZr4gWU729bEX{Zh1MNyaEwOaC;dET1Kt{6lvt7w7vK}9jy9g*{t5R6Qp*8}ZvFDi zT)Q$=WZpKwCx*X4^Jnefpd;I^MX=Ztl7H%pg{QfD^UhIE6D3)HKlcOX%a>}FG0Rz2%<@?K_Y^uqNFQ=Zt#SxFbi!)>|P0{v-uf%+( z{`V$y)9L%$>8rW+8&Ybya?$)8_fdS(x0_6)8qehvkoZ8sMZ}PC-3PP2lDH_h9TADv zk}(o(!&*WTb<$dhamvf{*X3<1HGkmrEAn&7z!hcgofj8kqHQEvl=7_#d9gJ2{aIr$ zj?THS3G~t7IS^v(QP46a3HK|<%=?BsbJbdxAw1zotb8yntSJe&3Xv1;hFR~hjn5S6 z5tjlq;z6LS-rus*d*zr1g8@t3`0-^fb}fPdeA{?~u#pZ}vj@rRE41M~F*gZlag>u*qXSHwf`@H0Y1 z=Vbfoy%SM{2J@XGyuMv8j3Kf08zK+Bc)saNYE;=Y3J7YwN6ZKPP^VwZIp04`uC7Cj z%DzSPoYw_3<Fm_I_C+L1FS#6iu)+{8&O$t6A_qI6 zujTYRG*?3Cl=5$A+1_NxotnRQN`4z9)U~G6M=}?q&<3U8Q!;fkc7=v6vt?ivUGFMA z+0lagGho2ConyvgFk=-j8w1fRU4f6?HyrULyx&lHVB0@I$4>EvFfE0pJDU8q;WuOo z5!83dW}R(QBqx*>uzzTT(Sp$f4iho8t}Lcfg08C*1UQCljfdRnu_3&()NORezPP%+ zGqrb3#F}`0{dJ%Ga;-9rPUf?txeq{FUL*YQ0UJu{e2X#H0@PcGz3S! z$RQnrkmqDF{Z(0o-uXGjIte5x znfjfDgH*E->#~W^5Y5pc>VyVNc5>d7W7c^=ooNG|BiXFb2sN;6pQ4W^?k%)h5X^;Z zhFpw8>8`bc5`U4~rtit*vE-TT+b5E@tSdR02M2djg+i3Wp@0`I@OfNL^?a8$Ag{RP_e%vFvbn9 zFYmF9fpkY3pW>H({@eJ`ANef)qd))oe+uBcUjxkEzkhZ~ed9W*lixS~_1}-5`R%{w zpZxJ{f5Q7OKS-^^3JHp2sAQX(I8bib`bJbyG7E~`!cr8qDRI=UB_`0tK`WUhxv!{2 zxn@co=+-rsArot1(T9;#V{t|hL1Kh>pPqqsmLzdFH^4Sn1YSZL#R))6wwh9v2Y0=HG#RX z=7G6h$*nWW#m^2nS79ygbux&hNxb6e&2OR52TU)H71|Yw1l|=_?uNpH^8AX+r%P|l zE2A{5DJRllICvqHMxmCZ{aaUokuuVna8;?xE=BYvShSCuVkpkS$*<*kWRQ|!++n7& zwSQn7TarDuxbJZ0T2%r*9Fb=?+T>qMUIgI#L5jgbOpeFA4;3zU@d&%!(DqHFe%`pF zDPg%Z2}nxsIS%)WLs>3VQ!EkGNlhuY%P@^Jh5Nl>u~~=yS&gV6b*3w(Ozjj(g#f`P zf#w9f(pW1&Lb9mf1cE!P?WFu8Wn^{{!+#sc=?cQMW)e0ufsOetwXv%pf5HCrEyR4` zv(ue{jY&*b%+ss!5Oa{lDPw_}=oY;6=X!8=?ljxalyGY?x+nB3uJzzEiH4c4*!qS( zHh2T>udhHRHs6u)il{qo&)-7MiFG_+eTSjp*MIr{#^3(6zxVDx{vSU7Z{7jF@P7{> zPJDC6eE{D6%)jx||H0GSPv0U)Jl|T=0uI==0e3Dt+qThrkwDvS@J7I6NyZvkxNV;b zBnkl(sV3`vV2ELcS{UtyNJf8@2m>yvLd3i>l1fAcBqgw1kUm|p?&hWi@g%)qE?rCm ztwi1t+WENlD4ER1S#w?R%&6q}(}{dp>tIE9EokXM ziTEHeCNG3q?|I>i%U6*C=yG14wP?0o!H$Awoc3i8VF`@+GxEP&aSfocn(DyLTr6D{ zjLR0D$96`L;H>sTq>6q6UW8*i}h z&m03;Ay!b7;f@ulv9f;cGk@_oDSGiniF4(oHAA}(lR-QX5}4djc+t3eT;nd+c(ZC^ z^cx8=#bT}Lf+K*Dpl60Sk{B}Dz_#zirG-czikqjOQ3s9km*8X#_7g)?^7N%swT7mq z;iP`kKi1oZ(Vwtt5nTnT|BQ+|?x+Ki{QFJ$U!@(PS)sc`KWQ}FXMgIwGGra7GEsB} zpG&0%0}db0Kt2%3i-*}&JJy=a9`lA{%8DUlc**p8yncb>{y}HQfJ?AM(=9Gz{ULaO zp&=gcIodyWoOJ+6z^wZ~vkjS!`(k+NKJUcetW{`PekoV zk!D3R*=U-vo8j^J5@jcWfQ$43-P()~Xsq}k@`E)h=UknTb#)iU!?AB?6sTPHoW*l7 z-!BaeJqrmhN;pkz^0q%~;mR<&Cg3IaqwOPRMy-0)p!2wovk{Q1nr$g9s4T376leoFg1F?guFxF);&q7;qHE;v}WgJmb^7 zyTbCeOQBRCsDGEE4;_5qEnGMVk#%-fh$&)*y74g>vyt*}L3=i%7mP)TiY0RyI*p?_ z>kJG`T;yzAJhkmI{W{B5G=IK!D-dGH;Y^(NCUxi(J$?I%aai52RFhG}O!2}czN*$j zSzdtBQujz|x8qn3?iM|(=`4J^lhg?mNx|&49ENuXdAZC z5o-!{_J8qc<@k0edEvn#${V~FDn7t8`gI$KLZ**=owEn~h92i<> zf!4>yZhtX1%8dr<%!PFv{F&yRUMv9XSn#q-XbJ!5V>{Lh@_2<;;kZ*-Jl89*0&@l) zFRzeF3Vn05{f2+)lXpM3{nGun{bJ$UUm;Gse1FZ*JHKh2)c=b*@$C=zxj*p3@jE{I z^zBa|7cyV4J#7*!ka<C6SuTzrik_(~$~4D* zqmODlu_A_iN2k|3bePsFBAEeWSNHJvsLC=%LG%W+@yY3SWO8lEZ0x5Cvhi?psn)76 z?0*SXiMigfH)wWsb7MT|f?`!vHWBl^UeLRYb>taV7Gj2yU8!Q?%fOfkdS8n2*Ve@7 zO41s9<4bEDS+9(dFh|=uOn}wGRC+C6^mCWPu614PxW1iqXlSnyoWC#rd+$T}ME#?< zqBmX|NsLgWGK^e@eoEb#6TXd02x1DjWPeCo^1{POI6tU7TJ&NKDVYrV*_Ep2(3mnF z9P!2hvq0}pa5SvN^yIZ(vDTeGS7-dlOoq^LFTx8a<-v&%o6ejP_IO||8n810NETL6 zTxgSvw&1N@7g1?fcvk6W_o~6sN9C^m|85j8bZ=w^YEeS7b%@~zfzM*j)O7|{KIq?z z)Mb?LUYK)|c7KjCi_b+HzzjyN`)S$p!rs57{51N@KBm^1Vop-Nxzuy|M7m8=@Fxl} z-!bfQaH3HPEUY{*hKg6y7(3;K@_#~ihCQx>{Jk}o$n37?Sw60iGFhvPuhfw^ju-Uq z=$%ZxweDCk70Sr2aoay*j#Tno!kR!$Dj9{)ihRhYC(%b03Jp;U`$iMWYrZH~=Sv78%HB*q??3Glfr{KE3_!AOGZs|9{(``_5kk z@cCCRr`K=tP72?{)I0wE&wugekNlzE`6n1+Cn=`dcr>8ho;lKs4}i0RWTh)vt`GFy z8C3zJLe5fqh^Cjbkp|E=L>8CLNvC{7P+T!zIOA^{M`Llwa7UT$*q)fvnkSOTF4ucu zr;uVv6^KON`W5yDB(~PIuYcl!(fi4zdtBI`)+imOB>!WiLhsK2CLZ_iVvHTIfw^9^ z!{hF)@0+r1D_7|wT_OZKcdcgztclH6Gzn8#&Qw$8lZ(7z$rZ}E+X*Gwj-6H4 zX*RCZ&$V${WDRqD$)892BaVnVDqm39kjcES6)$LQL*H&v$%W*`Jby6GaTBECGiW#2 zl?1B=bn{&{6qED*jCd!`Co;rXOT>CXp#i~vzPAlgldxDbQ72fjj{S+U;I<*+et~hD zyC~N@=s6xr`IH8#3j4lkKjW}kD3K}7oToEi=;ZX3(W`Xg#|uk9&>=;il!_XeCLV}- zVED7JQ9#axZM>z#U4Iy`CI~Hxk?wUWAG?cGQM$;fj9azPj7inKQ$g#Uf)#HNt(N9Fq{EwMJAJgUjfT3nHMhro2DG}YIK8om zj|kR!HW5)|T^2o-nMKi4vE$0QU=^726_J6_HohV#Sde$Qj)i&LFZ2Ekj?{Ba23*cV z-w`{;+ta70T7P&v9ypGG_fdc5fBV(H2;e*4BboObdrAEU>I8uPQ@|hlsXy|2{xF>K zSrn_DvE4}F?i-pFtAs3!+cTGsP6KT3+qHx}JBcce2hLgb3U&wGxd+I}5tW|`r zvZR>vbALvs@OS0pCMkM3>DX5Mt2kz2Hyz^8aU7b8xracw5CRBx?w3wEcoWQ*W0}6~ z`n@K+$Z50YXiYSfTp!hrW=OuXR79#PVaEXhR+}yv{&!y5mk0rM%F;8Ji0Dpni+FFR z@9GTqWL8iCeMfHtwY1BSa3_jHe>U@^qO9Yt?|*}NM&^tzpYw4A_?6-^y1URkC7Q?y zWHu@E>f#?xQ6szrwykrx%CT$6t4JjuMKpDKxI|N_;j1qAUE_3js*ItmL>KC zv40dRU!lE|D~@DcWD!EMReZpuTucf&#P!QO_keM!H~aV$aXd6CP7Kj7%GmXwO8@ze z2oh#`+t@YF7s6#*!(1lTsZx_&9Rv|V8-}&yZ+n@XPm%s3pxPOlO_Xs`w#$HkRy`#q;_4z{tm1P7FaSXdAY5e9(>5TPLDLy#4OkdQ!;BIP500)7TRfWH7Ju^o#D z62J(f#3-@sva4LD-hEkX&M`*sd}wXX{pP63iW66=DCwx`)O*gpthMGC{nFaget!n| z`JelRKmH5c$&d*~Rmza6i*KC8F$dm+aA{bU3x6|j94*Ko=~WO(1JhtjMX4*7-+rNU z+a|(xcv;Yv5ARD#GejPTPI4sUq%C_C%)Il#DdhUG`$_pVnkp_<{FaFvq?Jj%cj28h>xy&rOq!0BEC4a6;Rh?bb3MwH}YN_fxM5{UrW^}c)8a)2qKFK@c zKPJ;;uv#tls1e6q9TMfcUZtd?DMga^inFo zUsH639nE;EiwvpH42A)WL0GR%;+%qAXdWEN3~c)yx7Tl>T|V$@I_RM@6IFuo}(mP`_c4GF18b)Yh~BFALcno}&lUAb^d8YpC7TJq~DC zdie=5`HDt2{NR_ipnozb7qu)ja2CF~#F`9!!KsnOMSx2nHaSY~RP+)lprPYel1OW`A=`7jNq>?|oAhGfV91p)~wAIHuEm+H)^(I3SkUN2~+A&nPlP|}6EEb4xS zB0@quI!DYqa)w!C3x(i^PZDxQjTR(G?XF5-60!KjwOxV z3{?iMBwsQc6AZk=C;KR~31FA?g7DoC4Wx@~?uG9G45*F3(P|Bkpa0m&;2VANHB6wb zkDM4lb_-*7U)!RwoB<<%!k7-zu9SPBs?U--5+6WT8h>bu$>RlaDchNORLo9JVU?G! zGV(b#wLJn8!#Hj*g`Vl&R_T;Yr^YoLkxZr2CKYm}k|MDWvexX7gC{X88BCm=Mf^j`u4CTOJC$BD z1_E!2u!j6YTH0C>Gf_}ca8EJfMun61B&1i9uZ9eI#K4N(^-)YAZ=l17dzXo^zoIlI z5nFcjewVU|olRTTQ>9rzmE}?Ca&eO=27lB_sdrl$4B4@vTBYC0D!e3$U(WYp^zFRx zYpW-wi3Z~$>99$Fq7L7x%$5>J94bTMjZy^-sq7jxsVj*XXY`AE(XNahrxf-_AxCJ- z1!HuK{`ww7*$(ep#oTuE{TZ3SdikIc(-b+rBW%Dcr0Oi{v{h3%{c7c~0wiN~ynlck zLlEcH$NdEVa-G&y6)QqsG1-^DAJctPVKd8Q~$|w z{TgC2GJW1U>AU+ESRWoy$^${A#>HpfZfNU5HI8Di+j8X#i~ zaKH(@OkEyyS!>Sk6{v>3-K0pO>~l`~OKc`v{_L>2A_vhkv)|e7S7p-3p+0+8*kMJ+ z4en1=8qL@D3C)Bo}Esxxr8Ohb&O#7(?h=F1itrhq|O!vaz z#4MP4nEa4M3u?LTubjJ|-3L&c!|R1Ay7s7rwN!AYsZyw+07|Q;hP!atc9~UMYn43ec)~>nQ-4m@+pr&Z3yY4|Q-KPJjKFlym0)z=k>SJ3wx+On{p9aORr-^TsnDQPdRuIezK zI%W8CBMjEGpDazE$HVZ=?%k3~RXekM;+-%Ol$c`@Eo8xXa~gORi;{)b2dN6nq4GKi z{sSk|v%^o}Z5>GJUT zDX8duC@D2i>UtXYA`|WMh_bNysf|={en{ro`ZMOBp_U7J2HJYT*as$dw&P}~<$;S` zsf>=pBQk*saRLj+NX{yiMQ{_DoB@H{H9e#F^&~e~qkq3<#*SK_P>Lyu_#&m+A}(7+ zsaK99l;z~b;KtZypyB%PHC}d=Ib2rj2`Qa68BJdpal%D%gVjgW_Q0K2<>81TFPM-k z8AD5LhldhMtDVZl0}I5|Th}P+2zl%$U$K-Gp(u8wpCcxQ$WdH!7;@@XO1A_h((Yn!L6_(aKnfj(@NpW*rEhGgdSqWJW;(Og18%o2jU$w zl?^kdLg(IqEL2^3Fn(eXb47^h%8PbxG=v)u!$e21D|bwaU5`lYP%rx(XuJLFeM`^ir!dQp%&(&NpumC;1f->C{&O{`dVmjfK$=OkvCHW zIEm}>5rHYk5e&>ULl%zhP10`@**ui~9AltLZD!&E0xn8MoW&p{t|)1Wb58{}u7vA~ zqkrhuU|2M2S2w3!B-w>e7_pJuFcs+&K@65UKpYW5PMSXyKuStJ$FnqN6Mq!iYi3MN zR1S|9oTK5gVk(6J0i;#b(5PsF?qm}>3-I>x5x?{|e)G3~!b>Z^3mIhz07~76HLbGn1 zJhy+$0ml_{dl8Q7GdSdRny(1#sO<^W8^iG;0lTOyVvGO^$rXr%mx;(L$2=fqW5~+| zCEOmwVUAaL0PNd_TI=aNFXb>IYd26*#GQ%z?K?0tnu`mSfO8tg_9D;I`>rGB#&EX& zUDV|>lt$2R%z@ZmkZACw0F&db**n|=v)_NV#u)1L1 z55ur{g|oBsz+pD6h_1*FBcK+U-0K9T@01dg2$Gp-%L9#;^^vmw3}ykT3u8>g<=lT~ zSzDyD6xkgN;5-yy5rJYAabRl7gTz49LpDTvJ7F4eZMI@ zQ*kB$#Tr(ykB+uHU`9u!0{MIFW5YpDg4NS2m3qG193wnxqhgVonSPiCHnZTi0c|%PhPUiO7Gc3A>pQy z1mn1Ba&zS~;Ev|2E?i(HjnyL@tyHZ33gCi1cJ4+k1O_I64#w$Oa$m z`~Gqoi@jY>m}T#;6c?Z)v0)-HLr5H@wH71gflziGUS44mjFtif?o5AFtrzs(G50q~ zs+-U-j7*5Rb1_~D<&PaQwF(?(z3`L1w&V@5NtID)QsTXD~iAhHmoUsEE_?7V2?Ibw68^=1Oam<>s z2pl39OZ4rAjJq85tj2#4FNpp|?~^ZLFDAz9a<=divm{8D%}y6sbCaTwnMA4a8KJOu z8PcyXGt#ex^!?BB7wGC zaNFLnT&{R~zTx$C$LsBeFP=Z%{;%J|U;om$?;l%+UVeX&`zQea)?fU$|JZ+NHH!O0 zEsr{U8)n=vJA>hhkq_4I8!`>s_J-CTaeep<3F7c00x<`g8ESpxj968)TZ3gmTc6;y zqBf?*&ZOL!=|YC(`iQ{fNDT#LxgtG8X%;`N?*va4n)a++v8Z}3wMp^D4k$-p#+`v` zy7XFUROf#HXY72bjY+UZ67@6Py(LYw-Z&$+G@(w83X`q+vXH`F+ZA)Z zV!eEh%fsgwVx$q5)P-WfX-EbV``fqZpjw`|yhlpfN)ZTzhst25Zc}Zomb7LC787+L zre%&n+!MvDh}hpRr#a-+(q73mvYSI8kq4Pt#CLx&6N>`;&VWBr#bZ*;KxnEnPp3!@ zKMzSX^Ps#o$+stW7qz0b2h1Q*x)hqgscIuWCz6V=QdS*?esbt?Zm_zbmWKQGkz$`D z=Wpgf!I1<_%#o#dkvL@1G|;Aq@k~(W>jkSYmzqlIurcmbh1p?t(j~3fkDQ9Sa0WDH zCP9C!in!p;#$?335}8zGx^0z(0)li3Buahc_W(1D0u$T)1#S!~HAT-Kqsp+Z^kMCF zF?GN(dfhF6$^}1+6B5Rhgy6xq{`FV1+6uVe&cS=LRNnflNp#}Qb^<>c7;-rDdL!8rzE~G(9&$c zg7gujp{*Ak@cU_-in*isBVyi2I|(LCZ}*QZEE~sxX_Gl{@>Is;NIf!WFgGV8U>+fn z9ac%@fmH#1fti$=7y0eNjOSln0H<01vJe~{V`5z!yj`^Zoxn8Q-acX;Q06^xyFGs+ zMo3t;BeUV-tL=a5n{U7Lr97$cXXwozl}_r<|Kh**v;V=I92Xrr{!$7hrIlbrI4jo6 z#rCjNynw>Ix zZ=xX-@d6!TByU6xQq<-+O{k3Vh_fO>PO89KQ``g{`%{%O_gw3VfikOFhLhm#ZADu? zXmm6XovNd>2KOn}8V$(_#)>nyN%*SS<(YBeSft7v_j7E@R_4y`Z4xy@l6`-XqK$s3 zLuq6SW2>vtOEd&jeJ7Mqf}Xm_7-KQdLvxOPX#Bu6nywe?~O?IS%Ri?L&q%7Uq^ z3@|)XV<*k0>8ZIsg)AciF`lus52t@FvNJ!+R(jj&g6Oa4<6yBUJ8M=aKsea zeSu?VL{XYF0jS);bgIcjRsn)k?>HX#kNp1yoePAU6N2!jOn<`HORj{mvXE5?S z<{KC9A(^jDWW2)4%7a%Ufz~c4>lIce#x}8SuTa_msTHNrchrA}s`yGLbq-eT^QO4- zCVByv)X{HPmldU5FlWj%N_CYN$GUzd=X=G7fiWf(Olmfd==e-RWG$6hlYFqdMvPWO zK^DUg7>t&fpJWT!;3!xNQd%7r;fCS_xguyN&1A&5#X&a!tgOIPlB~Kmvs4AGkqS0s z-r@B@W3*jHMe={%T3w`gWmU>3iw;LYy*!*`4O5mZ4Za7DEr6lWM1g{v@Jh(U%#Iu{ z@Onk5j%uq0g@Kr_KwZ)53NnFBCRG~6m-T_~!?p=Hi_^r735-dq^XNCk+_WonM1N(( zOI?N5>J+|A600o;L!I$P{7zfWs+&HtK*o;R9$_9B<2!$_SWxN*%((H89fLlx5FAzf zH~Ld#8a~ln@y_ZK{5Xo8z*lp}ey8Moj16v=Q>Ze=9dmAaF8K37QRJm83ep?e>ni-v z0vXChI^%If0}poUk%_=~C(kE&d2WTmqu}RjYMeav`*4r8VD^r_y@@(OszOffsrvm4 zrX-Ws$ZmhkBMVC+!DEjrqJv3|=uW{^TRDj-%Zk`{66mG1H|1Vo=#o@=0C&Uyd^xda znG|fq+|kwt%t6vkOm;c^xg0YmtV~9_c!h&xhPF@%XWj^9mZaTL>94F+49^wCfl{y7 z_wUeBgCjnrqZFg*S`j*_og*284B+IneMf04%%6W4hZ6TwtytSd-lz@L0>v-Xqy~^q z*zmGkIpT9iPRKV!>Igrdld}0fkqSghaQq45BOg{GIlNp2n`E|2A~42=9#TfJBbzaV530!I4$do?f^BIit?4}l%;>gvTOh%m%=sxoxOj1; zoj^}$Y;jb!UaFv<@((#f8*5$prZw*IpcsE|7H9N5F(_-GwnvE@fK2A&c(qeX4jDwv z7v}hs1X!a{zYX$fMP>!p;cP%CVrAf>J3}kIC=JQH~2!HPQFM@v9`V879vR z$B4B)AjY#gaG9dbVa=)h6yk@p?+_}7U6}>bW+3CVt?Sj#UUc(E!TNr=6 zYN^*ei%>(X+}ldr7ukTvUbE=(IKaa=W7`Q4cG9T53SY#;;Isq=M^x~{7#(d{mDT5p5;3ZyaA!Xg1UAgc+k=o@Zlz?p~+Q|<)fongKlM{k; zw6YL^CiU&X52P4nWd~qa$FX_|O7 z#Gz#CHp3cG5HBl@MF_h+t9YU556RltAlXN_{} znKnLx9zUj9canM%C`t2m-={8MCJZDJ+kNAOHE6vVbKtUEFsI>l%lzfP`|+;>_|_+} z9ozTuOXUyyk}B$?zWB-eH~;ic{nU^Bvq<6Od*bc&ci>!enYyUctu$+!t6ASP52=8x??F3?Oj4ZE|J0lNfT9ec~0XKP5M4wP`Ny51jcCD&-*-^|< zYDMu!qzx>~RR+}nVq(2KP%Pk!_Dp_WA~`tnDN0cFV(<`7$DKuiK&W0MzxIYwfaVQz z(j`)sRm?cUvR=-e7d?L}jQ^gqqqP-tbScpc>0~mRFGTY!mBIpq;!?B=NoUdE5El|E zR!qVGpm=35R~OXEJxr*RdHAW`$Vlk%JY^( z-R5CgiDWpZaV%Y}$)HcrFO!Y$D0NlNnoGo`@h^xzbJIu>Q>;>{QAcoBb?h1|(8`s* zLQ6oF1GkE{JYavw1k8H@m^;;~UPx3K5`4^=REgFVRo(auHU;~}slsxl$YR`g%za0n zcR=}SUVt#i>utx|Tc5xD8{hqFpCt7Dp~T4lpgXCDzxWG3{g)q}K77L)uwJgXJ%1Zd zpM8$Y!=n^l1!LdPnq#>vq%nJY2TmG^1MUk@9$C4}8_a(zeHdj?U>{C$ad8rLx-dz~sOJMIG0BvC`q)2RuAi%#EMzIhR0?j9DR+EA zAISH#UnOb5n50`v;lW{XGQ-9sO*%3$jS9=W6YxAu+hQF?irZ+iCCG>8IPpfsspwpnRl%0~DI?FE z2n2tYWyKtEj@)=BP>fQYm+5hsV+M=Y${Zzl%G^Fhz*vFY00j2f5gBNHfy-}6v+BbM zMb2P1cz|T*G_*p%ZLJrDrWOQ5-LMb@nWC0d(Z!@{PD3&{$tVVbfzOWTNK{}p7^e{x z1`^>J_fgq_`Esg*=iE`!R4h5VM(vJ}|Xpj19z6n9MY`-W}X)uT83kH7w{U-=%F)cyDIO8roMQULHrKm3uW zf6*7f+XL>;W^#N}WD8}NT)hhtDz$Q=9;e9eZBIgaQUikr*R){Jo^3P1ksbL12N1`qzpqNt& z{CZ{%F_`!m2hmLEt(+2TuN@JBBEo-Qz9^D?LoHQ#NZ{BY0`Q5YeZYQ~|3^~wh(x`t z=(kOA+`42P@)u3o1OQmM@WPA%D=X$KO3xtnWhxh|nsXg(icqkM+~25-RH7_u@dev)?WDNcDY4RJwV7VjjWP;9d6Wfye>+SY?qS91U zR3#jXwW!rXVB@Ghj<}PKMMi%2i5Yi}Z^xal0}|dy$B52O*2MzFkidUFxL37Ou+$5- z{f3#Fz9ul^jrgHt7ddhOV}sWfF%1O;`@V}(VTh>bnO{(31ZR=QiGQMZssJ4gmKEvb zjrQ@3))sgOt5h64cGz?j{~V=W;bWIq^98SO10Ifcxnh6*2s6i`6!gqMwSrhH9%(rH z{1b)ur%j9fKFv-3Fgt&#pZ@cI>ZktFXJ7xS_xl@OKYqlrT+x<>T8y}r9Ps7B@j}Y2 z?fzS-f!^V}L8TZ_FK53R*c1lYn^lifS;l zr6O%d%tY~36|2Du;~~5>%-E;~D~)~zbvTsMQdPzD%zC!*yp4YgiR{W{Vs+kOWl@OW zq?vdIBALYl=j^?Dfuo?0n{YZIHQM_w=%j4RjG5u50hR%e+;6oefkpzQm{dass}(jT z5`kJ*jWOg4F?MvzLWri-a%NT~cmUS+RZ_YqE7sC3==~$9k{QfqGA5u#28!UknSrst zFicSgrWZqwF2jGU3qQM{Rtia?-w~yv7G8Fdd|e6(yH$X~j$$bFiFA&blv5XWnO?8F zpinSEVUZbFmaDS5L@-qN&WRXg%Q51F`9!2+uQPUFuGr=?JlKJaao0|d zJihE5$cfwS8KrSWvMvu8eWEQ5d*7IIRt#1a00n<SLGul?TqUEqKFWGD5Hoh$W& zx}=W1)OYfmzxB`mD?j@u{^ZOF0+uUE3oMrvj)wKZvER(w=_`sfR4H9bZK&%)A5IiZ z1Byu+S)3+O98_~dQ>-;Br(N_2D&MM>tr>$zmLm+VE%XDJW8d#6s0>duE}SEPx!)AN z){%dCWj?1Y$O1Fc}qv9-CS&ybyCkj5s4bNLAoyEJjM=NfRvnJ{-rv z95aMtu|z8?`u>p=V>9l+tq40~C?IC$IPBU&K?dA4N0&fF%XtqYq*i3_KwxQCnptzg zf~lmL$4v7`I5v$*LEa#^RL$au*ifZza!7xqAgC>8^#QXLHmBl97-5mZ6n(mHhz!xX z=lL4(GeUk{Efq_9IA!QOFc%bm?xzSF;LIIF3paG zeL-7E87ZY8;*dF4)b^les}p}!3TzG{vKpbVB&oCbAW=dJKhyU$@bfgsDGgT;^E-c| z&l|l|PD5y#mR8_cGIN|1a=wZR3r)ZeHl62*^U2hE6gx+)>EZ_t0ZU2$HXj%yYOyS| zfVYLw839a8m~;6~b|S?qF&Y05=7K*{K^S8{Rg9%7IW~yhn)(nB1trKWLa&J(86Mon zrE5ISeceILca72=F4BKhBJh>$Plp4s3NSb}^wQ2}sx)E9vM7gbCEK*F3SjNhm*`SLrLj3FFoTPXqRcrrBEYz(9;D7# zL7$A$K{B|}jBL`8clw~f*!gxm+QdG+sk(_V#Az<&pvOc?FnNKz-U&qaLm|H zA6JxI_`;1uT^wl}B3D@X40C@&X$AY-V5n%x(N^?MB7+xf{f1?&M7YR|*ZZA`yk$jM zDqs|3WReS*l00X2RBvpc*9CuJi3;LYvNVoR5^%es)+dZE#F8@sGY+g#HT2oUzvlr% z#+t$LBzdm`QE{xW9Wo&sA)0lmm=o|I!!0lr4#||--ft-NgD^@1GhHE!iwu0BG*X&j zW5fw^ok>?ez{))$X?!)Hmee>aPx<yKW5Ly-{6KlMc-~;ak==ZyJN(|WqD#m=K+RC3$%L8Tj zM6aQ?D=;Y}phODjG8TU$rU)#QhI?^}25Lq1iqQwFX&F&X7iMi$L3|uhdFAr}fLNt) zflz@72KB|<>4`%{tt;k8MDCx&ts5W+up{Au6O~4#YM6nOvIR5lOnOcrN}x8UwZSVa zWy=_yJU|m#es;yU490f12k!ACcrtACYGs$ehgsp!UrLYtn^NymhOp23uM$WOr zLd7SO8Bv!{yMIKhD`I~| z;vdyCY5)Kr07*naR0@D}<+46tj)^h8ji;w?XqPg9ER=ug&O%mP5RO$y~PfjWGm=cPk~@ z*lz=+t|))yg5s1>kI_-VeM4HvN3kHiVDy_@Nsd~Y-WKfxdPsCZQ*gCGX|OBAZtSRD zVYWya<(T7+jDdCi43U97s7B;2XFFxF7=hAO?DxBNXypvXtF~awox7>ZsBCCtHO32f z0agiiErGG!nKV2l?{-63R4I?Z9s}kb(UZjX490(mm}t;tWmlG_gMY>S_KJ16D%6oe ziGF7HObJ-zOv{0}?^>&{n8?BJ;iaNa##b!s14d5(3u;|3`ZEszdtfw(t%ySW%yz%= z0zaOV%Ac?L%4*mhHX%plotk1#%wvsEXR2xUbKt^gWN?XzU&O*aQ%+G&{QXb&tfG8Ja*(pZQkgD&msO2lXOv?f* ze7!?CRC5kKmuB!5$mvK+jB&%*Uw~L84x8AM`%H_;Q9e53Y9`^br7&H4yLVV7`t}j6 zXk2TP0*Bm{~1CzK*!^{_sE{%NDu?>Ix z1hD>{f6y=M{}6kr9}02e_@UarJn(1!*w6iQe;QU0W5dJa=UA^Rtk6fmgi|V=QUU>A zE+}HpMpAc^0QT+m{Juq!{X=?vM9Y-6 zvWSASLm9jXYrW7mfdXL15J!K~W>Jg@S%h);>fFyrm{Mqrow1?R5N#x2L7~OW9ZOqC ziJwwGQroJoGGy~$G=~{SwcL;7nYJ5{gj|y845>Y5Xpb|MH6?@=%H&RI9HU@$ ztcNsTQ7!bsbs1k1UR~6L)Yu<@EgFAnZ)HSBArG>=rUDwZa#kMP^N4@h=!G3@ij_BG zpbx4^Nr2(&T+A@W2J?m@6TO|Xs0k~9>O^U!ik^g_?{CN)SlT0P1*M4~(a&&B{!Sb> zR^z{)GtOuaYf?dufjK#9jW`G@9qsZ+@yk3?t}8K6V{jdichp*xy39b>IZ397F;J`_ z_KA8OxIOQbsOv|%KW~57UIw0DUU}v?fD%~!1^@f+#;*W)`+W?(Kh&Mnm$69ot>ef3 z&7b{=|M+r!f_o)tLWkx|rF7OSmgVpkty;)6j&VE?Q4o_+*_M>M9$ipG*PF0V*;2{$ z>mpW^YG;~g8Z_pS!ps+VSy0NA*p)dk@{MQ`IK0Ztrvo2eP%M9uXjqpIq*y0&TS8Ic z)gO??PH^f&$ru32y%|ba(bliP@=XU=MLL(HMf-@dTr_gnSS^Z~N1?zD_@Du{Tv%Nr zQI>+@SB9Hm*Ci*;o0h9|>eE}(+JaIk<&T{2gojcX@gVar`F`)T12|QdR)n01Kr19` zSkW#?PX1Eqe}jKamF-x#>r(Z)k`56GPhLdk4Jb^r%{k!;T{H*cFhWj}3@Ea=(hQx6 znZasYaoR3XO-j_lbke~?HM-2D1f!Y`*qFSu-xF2~=Dfq5>CCM*g)=Vjy2``GnVy>i z*lDPB2eK-N{;?4uvH`=5!OiLD^^{&r7b< z3v!6-S6qL#5!bjp2&y(?VQH?NRv_{X$R?bdanGiZ!3-gjte`CyWy}#pl}>ww1$~NX z!a^kt+x&eBg+h}Qddz{nzi>?mgI7{x94j(Yf*j(KM(l8(6r4!1uRIi>#ff05WkG2U z6076^lZiW%s?1DrFq7S39&+^@sLf!wQnG*FFnfPTjEOJ4^Bvr`iOZGdVCGd_@%O*^ z%`blK+xV4FL=(qf`V{A7hn!D z(oUtIb}mP@vt->zU|)tF)YM$sc*)M7lCYI_R>EFfK-G#?u7D4;^&(Lqt4VrEQia1J zZw|xKTCLjK(d*&Xh%y><^p|4Vr%Y6k67GNLCqX)=vU~)&HOaT94GJ^D(CP!+$+v@< zq|tFw3`%pVhzzP`c}RF$V6LD#*QFvaS7|H8c%?^921r;H4S}8qxEFwYaIkXV zOWBoMDixR{HxqD_ekm#c zx~ytM_1X60voGWP$WOd@MaFMq3hunKiw}-kOS>?BBps>lA~RT^nIUj{$C^2N^y&}5 zDVE>_DfV%M&dQiuM1(&&@?b;;m}q}%A+k(W*rowv+<@6B_Q;9a8uwAjkt0JK3#wny z9midhdL+f0{C4DN+ye^qDhh;buyIFxn}G;T4OFf(iYqkp&dYVONEsnGa>##Y8AFqa zJG@;18|eER`kfY{x7Ux7*y}a62CIhc{*3?Sm!5y?H-TSO=k&cUsqqJe%>JM|sRH2h zzwobrL5kwPR01TuGq4kpmYD@P*W?kErFtWSb53q2>r7A?c?90k?J2iri*lYvH2qq>rz5@T$lh!|nR!2$&a3K?d? z&{55iUNPq#)yeKdDl&eu(5Op0W%E^;YgP!dwZdIdv6YJ2q*9HjB|fW+Ndd>ibD$J; zPJ@3QY3v~E6|jP4iYciSh?oK4#x&yWEP%8pc6ZD!8j2OhMJRtQngClrQ>2+1%kQ0? z2?CKfWwp#zlPt=Jjm48S8NYzA zofotdb5)&P8p#&>iK=RsD>*WyGLpq6|5ETOOlyH8V7RU;#!ehpOse!!`^Z+V2vC+k z^N!J9Rp>VTw<&){rUUaMY8Fgk!D{1fs+NZP+egIS-;3v*=-V6m{SAhO(FgYXj)}y& zF6e#W_I5vu>9VZYW8h=n#{d28`O9Crpl)AE>HU$pq>hW~C;!~f{^VbtFkR{gv?yIbnY>MF-w6#*I~|rzp@o^yYj) zj~#R80=KMJG1dyE4di&^7^5;uUS}_>t=JW@3|O-AGB|UY+;lJnlP?4BG3#zHOpJXX z2ERsC)Iza>zCZIr;SXmhVJWVM{|0Xtz#AR>MRMJk>UuW%vVuy%=w!4}B?ay}5~3}$ zd-GLbQTcx>CYbqCoXDsd6CUNnt8lMYSs}*}?)WZeri3gJ$vm2v&=`c>oSS28o1F4R zWO3~fLlNrkMEE2~T8@ne3=9?=L#AtdBZXw<#F#rG9c~xIcw>P>Cnk_n%sWv?w9h&^ zXe);F%Fx3j%05CghjJ>>X5TP7Q8`oqc6rW1qrHD}()yW7%tbhN2nVHt-$)|Y4u#02N!d6=s+b48f*@yZTsWoR=M~6#_@*YxQjoKwE{_@;Q9eKCPVZT! zgb;s2q76#1*~wPQ(~T4qk`)2~m44805f1ci|3noyHS)YDFi3l~NEVyr-6lfwxS+~0 z;I>jVD{!qLM3^W7)gB~Q2{wY}-C{*SnF>H;@XH5eVkE@;lFF|DFh z>&m17b+8$M_3?r+6Wi?>wHlW8fZhkpSA722BX0LQ_I<K>RQm+1IGS_dZ{QvqL=~RRv~E)ewu$w zjhO;_QfX6722lwIyc&Hv^A2x|9t39Im{k;avfdP$#)q0?oKhCi;DCW%isZ4hDWb}Mh%!Zd0z28r1JHepj9%4@9=&5yrv}hr#G<^y;RH`m$XD3#cMU)G9x4fKzaKy$;Jw76DM@oNnNlJYm zL^P!mR_U8ME&|gbHqj)2@Z!t{v&IY`FBsYl#0;6#wJ$n=pGUY}TNsj8#ZWxaSq!1H z+SJ(&@$z`_mAXiI+JzTOlyyZ}E@$YUN#WMkmBm6TiXxI(XAU&QS5#m0nnDJ0VzW%9 z;W2k!*3O-Bri3>}Gk8X#E_{DqNHlL6VOHgA@iONmfd@K`@OmFgL;9kCN$p=GjOUcv zP6IFt5k_=KK_aFfA-|#Vc-aUm(KJoCQ+fJ1*@5rm-l&oH`#CQd7*3V_;pI z(xg}HTVT6S{P(}|+rPd8|LZ3m)b}#<{>WWY`Ey@?`Hz15C;pkAE^S2@bL;WxGf75G zA5y6D+kqae7@@AkS+Rdc-}FW^>!{W%tQg!IYO{0vhDpZN92*UT&WmLPS!BDoW2sA! z)M9?<+j@~wZV^+9sFsY48CBL$(6odf^awxB-!{qmInMc#8Xe3>`^5AJ43vxleW5(d9RTOm6 zK@_8)y;<>!tux1|)h9~L#|En|@q!5jl-e1r+6VD~CE`Y8(+G8nQa~!V%ia?rc`4Ki zD_4FW2Z~*|3xa=;M73gID3_3GKN@qzsS^(l$vxA|O_cVPvUJIn>BkX`-+{;-wLY9< zWAXyWx$kjvWDo5I^2BeQ{*Rf;(mHlo6TMTZI5jek(NDHtCN!Cl;7Cx^*{4`^$q1WC zKi7fOBxiH_7!IqiZ+WFy((|%G7%yrRN-7m*e2xBSkAO z{z;_BIMtif8c-~f>gXthP#0|#hKbC?+@8sgY%5A#cp+etNvNqzr~o!&p~cKCe*Whe z==}|~Tt)EbxNgoa$Sg;N%>JU4Vb1u@gK!d&f*B35@b8 zViUDF=6Dl9;gQ9UPx(iJ6a+xPP=PBK$G*S8!0LYu6Ugd}Gv9&>RisRkMR|Y(qY`pS ziTLQR=Qyn5!X^3Scm+{e&DVup-Fy|S^`fP7{e;wfRD*XastyW6a+lzuW4Q5yR5fa# ze4B@O42C1t~Jgml) zLM;dkR`o{UsMo5o&3zq!a7C*Xo-S!} zM=KY7E*RcN2rT1Gro992d6wND<31UNpgrB@DtClEx1TI;@-$bwdCJ z%qa6l3Aq8i^LvuYvU7J<8+z}`x)M~u9m_%hZ>v>!B6gu=xx(uewOz2^pHa#K!j%jj zFMx9r;G)Z0t%TT4c0W_tEi*mi2a$gzD3k&kzn=k1X>h%cew-l~+#^@R++NQ@(I!8; zeKM~PX-H#!*BFC9Vg&Ae$GSGORLRNF#{`%4fs4R$!eC^Ct3YGk3?=FXqrWJZ=8D=Vk-u-x7{0**I+Prx zIa>RG-k;H070-$l2$b@Q;2thA;lcJl6O0KchRgM9h*8P8GsXj;G~M<}m~RjSJ+~7WCT-AM`fGky|N$ zjvaGu?7*fY2O|e&PRzbjx?h0a2U>Z6qhK4~kvfvfsTm!mt%^@b`HD$u&Qjn}f!T?w z0^>C7$O-C`h%2Yx#w++>cczJ^xt#tuY28QMK}2wQ?W&z3q)ysk6QY0Ni->^695Wa& z7@#)`q>?M}W~Ty7nQ%Z9B5wAL7gMb$!5pankGc2j)ojhKyT+XJdDdF*-c@zFJL%Yg z*p7qEA3?0hC`R0oC?Xe;xPe>{h{T_J?zoEhCVT?E0FVR`I~P_^a7eH)0n0KD$adTA zKBuboe&4m8XU@sRm}`GkrPVQ{leW91BXysyQ+4+HuJ!yGbBy1Z;=FC|-2B?wV3^f4 zc9Og6MgrwK9d#p2Rwp!DaLiZqzF-bU5a^yPa=0gE(K{G)b!^)k-om{?UvPM`%Q zOvnS00qry`X(5hqVZFRePJ!Mx%)tP>o^=_~X*_90iLKa`<#E5v5u~M@CZGvhR^9+Z zYL4{Gx)23=UvL~=GH<SjHCRnyV zg7G+DpdB7o7W4In;f^^SP-evzU2*r1=*z->F%>!$o5GL4ZCl~v!0S$o)Bbox_rPl? z{*Q0t_r2fq}AO6BOe)Nz3$+nQa*IR#Ld;2x?wxDg#d{B%ZcwaW^ z+7)n1Va2@ry{f4bq6P{1DE0kLXs|{)*50A zH0!X1r#8}?!K~7JKw5=W%We&;;j+|e9^5F-@z@FfG%+0Wj&-?_A6Nci>kI1?q{D-Y zR_pzw#AwHraV=|F$ge5>}N44~>E_KWag+M&XMvLxAv zR$WGCZ!j&<1sGoFAeFOEOr>ZbI_p8c0G7A)3{ZR9`Ec46=0do#Mi+*QFbsAcK!t@u2JG-mqgjS7)mk~k| zn3EKBsavE^&Io;YW$64<#s|R}WZdcS?JKOUL=hngRW44Tnz3KX!NXOdk<`j%TmPF5 z*}8EFFY_ z+N9cF_-Xqq@4oRPKOW&2J0-U_Z@-|6tTjRm?Z(VaCud9wa>~qjSEr~<=7~T^+sC@aOi ztmk}6vGf%pQ5N>NoQEVo)Tu5Kf_Z=CpRz)I%#IOHlvON8YdlzLSTD%gAj~yBDtS*M z26JZZYU1@226PR8_*Kt^T9jJ5ajwyqfTe%uh07uJ zf-jUB!?ZqMDuDV_#gxhmTugEW)yk+rxhR4qa&$8$;y6miVYv&c{^68eMag(XCISqA z!_S4An@=jAr8(vmz!b2ap7YsR4#pKxh8&-y2XMxwFy&&6m>9D5 z$1CF&wxNN2Mq+iyKwQg&KuUkgBJ5YxFvr1mSp`W4)~fwE5!0(Bw||lZRWai%>!YI% z)oJE_u;D;jmGKeI8i}fjm-_XEgo4)l;#ju2c}rs5-W5|%OP=!rCRdAW%&Q*`A|yJ% zn0cx!6v~8h%7ZA%2;c3xou0E+Isd&%dW9C!jP5|y4wIr+OH@}`y~BT%9m}~>vIb|y z93e!t10;OjDQng((R!mnB~iu;w&fz^!gaM}VW(3nWA^c&K@1&zds|sL+SbJkV|*kO zyKlugrIbGd}}x5qtY1?_lkQ)@~TDU*V9iu;OjexEI1h z8y9)gfNmXD1my;UkBOWIq_H`7AFp(}WmdVH0furD9Z;+_)V6|iKG54*H>`vzur3?M zU<+kyMX&}jA>1qzqAOAky13d_AvxwH(gF>N-WD95)y507q4LCCPQIim258XM zjY|Hf)QxP`VB88B#Q`^p*eykC2nlGTGfK+@VW#XY@_>dF<-K}*QlU9XNGLnDUXH(m zw@IzetigJYdC(5q+RBraGyEHakkMuf=6EgVn<1;?s4jaYw{d7a3(wT5M%}=sWv|K( zfdg?PNgKpv%@}{^tthC3bDZ=rpLrfREE& z&lykSU2FgVAOJ~3K~xq?^e8h$>_r(-e(z@%YJ5anmvVR}vU79vvBUG=2{R{}EESn( zKoFrMVw6@>&>ElBj0v&E&1UK4!g|FVFRV?^iQY-MkAr^)9?lslLG|s%*#k%vfB>F5 zdV8X(5D7TVHwL5s#Azvyk~_QJ%G7aOWCo9bO}0GuZK>yN(sPJ@6tZ!M>j z5JE^RD=w;;T7|^%bfj^nH7nGM2qLQHQQ=%JtUhT8AN#EKXJFqyaA7WVkyPt}IMCN8 z?5|%!SB`%N)C~LhopQ`|Xk{TYxKYcpLULk`S%G%mcw!`^^FRS3N{LxQhgU2ERcp#H z^)q7J;WK#pQ{IeRVIgjxrR{Np?@%)U`0yb~3{>;gLgY87V#o)~`c*L2L6dO|g z9ox3TbiwiZK#l=zj&*&@+w(Kl^$DJ@=v%9VxS{vA#Q9gBQ2O90HmZsu19hDVWJfKkV~Zk($WPi`EqY!{`+8i)z^dok2HGDq2QpXiDSXIp0JySzCS zM=OZZ=b~seX1Z8F%g-7W{U*P|L_5<<7Q3$67P`@jkYsD4BB@@|2@u=e+ z#!;n&W*2|WT1Q}#?A+S*JxDnh!#QKJg6q z+PYzX&O4;F!hmVnwmTNvxY4#=wdzKkkP)S%x*+0FO~Q_5PiWh6-A+6XXy167=^bh- z>%wP!FSTJ<-4Z;i*|}BmN_M1CBFiG2cuZu~p-6I;ql;a&_Yh98C{Z?s=#$N|&_HkN zWi^je3X4flZ7-);^_I0xhi~~_DbISKEl+iS_;^8jD;eHkWij^{bu)IX%T^n77Tsax ztr)1^YlV+H5dF$5X>0ZGbkz4tLjUwxF^`7fgRZu=Ro=@9bsZ15KS)gxKC7*51jtUW z&^Z^#-fn;`@Z*I=W|(t_wRZ)==K9ZV^}yJF z5AG7<1!-l~mj!-2=$@{uXJn#7Ax&`{cm91k(I8+8^VkPkzhNE(DqCm1Q1U?JfMLTt z9ypGHU;B;U`kjC9+sDt>&FS^Czy3*b-w(|u_4Y6Q%#ZwMOK(ppf!2s-Y0ERLJ@fip zJu%j}Nr@z||5y*Lv;Lx9#z3Ml%=*A8N z$>g*_YYn=I%wcwf^abm;8m@Z<{0gH6>_x~O%UBHGHr zNnI#WWi1%C0@!(rsZCjAp$kwbrBL@5N`n>BrRCkKtdGnz7Ew-SfHLZP;&VfZg|i*u zL+}aGJG>f(?H%UWp-Sl%ky!e6wSq&*sU!w!sct8sd$gWMl|b+B>Rm6KWxk&E zi9iDTcqwVza2&5CKcfzR4^&DborkWmBc(_>CN!h9t%^%O9jFu=%`Ong%)(zW*SYkk z8hx{i?f!Uw!M|gUlIwY6ZQ3vnVy>3AZxJK$-~aXB`1RlV$L;5zZ&JtiyGi|^`=kKi z8xZ;8JV_q=M@V~v@E079SM+s76UBZ|;xGty{}O%s8Z!~W>Tr{P1!F!cV`3HjoRHjr zw(_K(JIpqO2W+XVLG{usT`wo#tRXyvvzTUFEUa0X1tu2TaL66nXp@E~R92R`ElYti zlU8$mBF?CtEy0G&dxeefG>id|NDLnwOj|G5?RgN&$~YMpI+`)CnjTa~ zV%D&@L$e6tKDk-c*Er{_cI9L*RI7tS)omaiXzj*YdpKdD-6}S~(>npnTeVGB{wJNW z0c)6ZU}Qkk5yPvHQA(QBs;WrDKA~#|`VBG4k8!!&cIIy%EL%%1&D~h2D&U5`@FpqmRd$X8m?Hg1LUbQppdZY2AtuO$)JA)ts z?B0QJ^rw}hg<~=h4#Tp20d@XNhaVX8j{RVUE%Jc%8xjhCd0-rlU*~4z-{Y_NeKw~2 z!`!5Q&KuRXJ*kFI^mV8EX@93?x-6+#T>;<1}thNzaqqFRP&}YDN_xn``kz!=nY1z{;uM$4m>0MCKN-tcAw8bq2J#1r3HMB;We%7t+3{R)hY3Y7cH3NaJ6G5h- zD`10jJSDG9TB4gHvS6da^!>6t!HYA_Du92on(ObDDu_I3lZbJNd& z$y$M88Y|ofq84&sq9x~mp^g9#R+&+Mn|5QCuA!Q#4PrN1->qZL7c}LJj_%pLLf_o5 zGZQdorA%3|!+c>Qqfm%W>TQKIg$Db^Xc(A%Lfte4OzO7s8YbgzeqXM%k>|JZEa8G%E@D|SK(9F1eJVf&}dLj2MIgi#Oh? zMcBdRlr&NAPY59W3$zS89$&#^MHAkT#8DY9nkiVXLA7KYj`8?N$L@6O`&W<%nBCwY z>r&JpPPuoCgddNp`XDqobK>xSy&S0>z0+N3eZhGBl2HgaKD-{7V)-55S86l*UK`Xu zm80(u^d{ATe+|CavI^GQTg*A|c=>>J?XdL;ZB}K1ZQMBg0PG#$2LujXzhH+>$ppN; z66f)_f55VCm@})Dl1}a6Y|$iFjX}4$AF%c{WYDS$Rm^lOR$Vwg8Ma-26($Rg{Q&Sl zT2`;s6SQrZ5je&xREaRkBBY}kXC~6v)H|z=pz5)A|29L7*vi>;K%>LQfe<2ytmqFA zCr?($?-F6TvwKwSJ8SKi+l@U%$6lvI4$+(SlJJ-|r-bD&YcLQ`Gxi-BJLiKqu=J-& zxf4Ak(jbeKNkFP}aANp>2L^4;N~$B^a>A({r;?kN3RC`kum!D9O46lB&_SFI=u)El zUkgFymH#1JG{tD;kDvr26$q9_x0DaM4VBh)5^?C%3}MYW6!1AH11hseNJk3I4gqF@ zOlgG=;SGuom@1+?Ua>B3iasw;eTL?N@z|j&AQ>b|TSrLn**tcCBm|S?R4`j%>l@5? zrTlenkV){bCWqFcXZFi5#)S5jw;IqspV%>+3!)<7LZ0NYe+R9<<*!?xN#(9hU$O8x zZ#SN_j|VGHvSh|9d-tHsd^Xrxhl(R6U3-yUJi>V~7OMxXZ)62rxi2H##4zy(}w<-IhCI)ZgWHe!2$tCoE>Aa#YQ{1Vy!>J>=`q% z7-zIR)0Q=hJ=Vxw6RSaV4X0BP!jipKRD=^3N%Yvj)Z3 z@7#EQwb!CR`!lm4d{xX^-GsP+(vUNuT|Z@eBr$VT=Bk3-W!woT^p!QdMG>i)qM$(` zh?MKkIgKD%WRR%5R7Nm2W(&i$#nlr5mbP)GnhwK)^aD~{L2gz&MMurBL_4IliVd`? zCXs3<)-u%4NT61gB6WkH@kgq>F_3Yus0ZzT?aemc@+6_1y=5>fBTt|&lzRmUN#?|k z@mjsn$qpz~F3G)mw75BG<180R$aHq9GrY|`3Ufxvxr&vE3gxuaYmOzY(`Zr$p?Mtj z-Be3ZO6$x;(Vf9yI>cz!I&*P< z#(xJ-EeBu`ZpzdnIbnUh@^~jwE2Bu}U9N_Sj0F4zq0Iet+tB((z_tm(xq+XD+sDT* zq4tFE12GSxuDZ|!6p5`r;eP*!bl{kY@fi3Uf9vmm>(^fJ3jkhfvwHdLzdt^sP52+? zCiT6lI&S~LpZgPk?dxCr;+xC1U|AP`h^-ip_vn4Yhxf0AiP>=MUqb8U3O}$uy~70Q z3^B_ER8ATA0c*uqtCt)q=o>elMDRo-#ok)i8cG)hn*kkKK~t&~w&p_ENDNlyl1OMU z%rVgWMyH_!8G7Y_YOPh(0#7xhD}RI#1pNB3P8B()jnsqi%4c zTuxTRXRlH`mb;O+H_+NrT6?8@Jh4o0s~Z1n@xv#hF+q#TP( zW=HTT^d+b4iY&0OSCCT}YAr;6jP(syH!AI0lv%;tiAZgd+A9ofFtm%Or_wIemJ}h| z+E#`SIydP)q(d|%VZ9Z#q`~@v{qX?+9aFr67*FT*U8p!)&|PC+B!V$ zq!NfRW7is;e8*0LM@-tZb**7IKZg_pWTAn=jJ;8yT#1?kCIm4je7;tHNW3=b;Ngbf zOmJ}|V~GLj%2!!0-eUI3;enylK*?Ulxm}=wv4QC?3`eWg^QUaRHM=U?CADg9Mkx&} zKBZBmuvfF@LC)FYd5flt)3498El)ry#wf{8!D7MdcKe_~LVz(pmf3>s;RHPcqKWCR zu(SBI3`~7}f>wKWIOjNjVuIcl1RjX0bO}VM9hAL^I%}m02$`6w8{GDIN zKl-(Qh_C>8 zG9TqUJ89rNX<1``TPYVT4sG4P%TZ-pF$leGFlXqu!P;8(@mbBn4QdRuKJFixg-K~-ICCs!rC0x&DP=bIJ8}k%90}U-J8vj_56kUp z^|Pecp@O#~q+OdO5QvHw`2HnC=m1nc|z8-DJ6g^!)Lh>W83S5;1AwfFJ} zAyuO3=l3SX@eqZfRr>;;k7MqHB-chi<0xm}X^NSDFkN|Qv&Q$VNKU=2q~hd`h7B;5 zy{anfI6Q#9)WPAI;p&{^EXsgjfm%mj2%VmA+U4_rCkYly-=K|hw5ogxq(_p}FN)UQ zFw{@o3L+g%JMOO^aqRCAk?@1$|JT>|82SbNhhP4!zYXBGKii;QzQ-o@PwnjcL2Xi> zcS-$!+<*M%|MXv>b1UHL_&4$H8(-r9HWj_!VC@OVekaMmR%RvQ z!4tf*MKepLB4D!tlQjU=HbrZcY<(zR(HP7qo)i&hfxJj(XS)eOc%@Q!V6+R%v0~Oc5CKQ7xBIW0 zHj^M3{oIT)C^0_vuh9D&cntJqh3Q&$=eW`8d$~JB)cpw-vCJopC2Pz#XI3Fdig%8=Sr)W+Egpk5LPH zl0*^*j{8@XiPd1X!Bnsh#sB_)_kR_?^sVE60`R-vBO~?rEF(gbceR}r=zVUR!^gF^6Yip40hA|uwJNnwI!0mx$Suh=xGMoeMFre#J zf0&{_eF3QB_3Hz#99fOrCMfj{sOkn33Fnz$6j70r{v+ zpfWB(>-o$b%lZcC2YFjAQ~9+V=ah{16t!L zKO?Vz>3Ir(J9}aJt-!lgt&t6mz&!Zy_I6`?fl`8?^Kh1YVo(g^B$Fb>fegxZOQU`- zy!QoOvEv*C)~+<^Xc9A~`x~nsp?s0;a7N(we0i-FqGZ?Tu9h zSb15gyihkfy;7ANL!9UvqXgtYXx2h&7;b3Np|ZkrhoV)bN}{WOAS3~M<}7e=N@!8^ zdj+AcP6|W#q?4 zAMoQ9fd$qZmi`8RbN_$@(6wRA2Zq05kvC8cXl_sg_VFbN-EGCXJtO80=){<3i@+V$ z*jdM02W57%r&0o1l`xk4ZT#%0vaz-JI9~bGBxT5RwPPOYwJK;xf4Tct0B)C}5FJnq zXtt`Mnn3FiNi6LxeC`YlgTem3yhY0749lsW3}@zp^*)Aw`~IyVG*+vA`s;$H42y0|SBe z`8I)%_s`4`|9|c0fB5dcKMg$3;{#fM1I>UBS{&QT0=nb%BX{zxh(s2w7kW zBn}`J%w+O^e&1hV)@uN}kPJbs08Ivb4y^qx#DIB_SfNYjEmIW3nFZR9Kwob#{i+HT z703P_YB%(xb(kG3OKlB`{dl1F=L&=h{CMG~TDt+$G3F}=?m{ZOq@ee=@WJ29$GsBmRkz+aC-OusP61$nHiHkRDFq7jjr0aL zTFq@`^K5F}hL2B-z-;v>KdLjUq&A$cwkOJw8FlMagdZ?_;@cso!^vn~Df@BOV@`Ky z-K@`l(mBZ*>?;>e5N9Ll{58VOAk$&eihDP&xmnh&B1Nlr%&_#%jTjDTThTufst&(y zoj006yy&;0RTgOslN#HTIdiPp1-QYVT*NtvZz5?wi_WniQ6btG$Y6LkF#y!FD1gce zs6(8yK%eu|3DdT^bvbg}uYWE|BF?%M&GA5g>H*PC2y5=#5bHdmN>{4b0-tw=;H#CG z8vt8yV+>l#8x1XM)r;(p_wYE-`!nX)aXda!zN+lgJYLF`+R&et3W3udi43F(RMt9V zB=+Ow8i#b-xQ2%C-Ib&h_@E&{v{i);-GJ?~)hir<@WH&CcFvAF>oJbwfn|GxW^b^6 zA0MI8i;_P{XwU^Udcw>Dh=DnGN^B@{jU1dW#jGlqVsGZe9D|(B)&U$yuQ0HZLUHT| zdN<7BXq`@8G7We1r2+N@Vh^M+tH#4faZ3@HIlx}Xoe>Hs`t6&@$G7pFZ+#2L7%)>D zBVo&iKl<)1-v9B}2k<*zeV5(*ds)wazb_*C4{DPV0P+R!V=)KT?S{w82kM?n2MjnK z?@0nSh2I~Lwqjkr0gpS{$|5pp1U`;*G-+rnOAcowhtIZxp8Cm334WYG|iSbk# zr^~A~xJOB#r}&yxfcM}7({AX0M(zGW{EUPsO%{3Ho)C1Nfq68P%~)m;FUp}v$+Z{3 zftA@=tstCHk*47>u98BaA(Pn=&!{3w!_0$ivK6+4ffXKEvy&J!D4@}?DXp?(EX0gR zW^O8UD!N_=k_=_Lalv#wjw1Sbt6Tp-<`2)6Nmp0l^8tWCjy z6G!F9I6P->TGXtEjzea&=wd@5%2YbiA0+*QGN@y+?H51{%D$prb2O)kA%&Fu`Kck- zgwYQ_j+#vqzT1{3SU;sQ$2?vEkifF6?=Z&;+O|TaV;pzRthWtN!}|0VVFEu66yAij_Y^B9qRUB07dYC{H4>v@a--B(r0Ayw_~9dJ?|6fluP&VT5@l2?kog<0ed{)?q%W#G&CIk zz~MU{uV2A>LvJiN+N=SVI9?9;#+We49BP|DIixtng=Bi9s;5| zVfgn_t0Eh`iOe{EXmB_onK1}k)rDCm;g~c{%K5jE8yE-N1HCH4S#oyfKWLMt>4Kd) zP`a{G1v5AZ=gEGr;zljIH!Z;)vs`d?Wj8n^KH!s?qh@FOu9e(nMFv+`=L_IIE=Z=S zlEf{X0Y&hppux>65?B`AXd=edm}|OT?mx{!tppuLQPl^3J_*kq{-89+Ws)c2g0!L> zNL~g7NtB&giiuYMB@r}R(QH90xgnzVi*%xPq!q@c35 z-d8BnINS-xvE&IIJ0hlTET9q!bn8GWmGtRt=kD@J%Uwx75o(n3xGz=TvTgA zRo?U^2|ewt3@riA2XFo7tur}?(W-L*5;GoXvR&pM2;iV2tcj8cj-!CVQKk$O5{hnI z1#Q;n!2!k_!EyhpX!vZaoyU95L9H=&SCNfSD+i~4U`A2-!P|94pxZMK31_JyPGUU| z%BLA55PVnakQouMa)7evkah6PkI{uEU)4~d&$E%6 z8%)5_tz+EZBRsHdZ(!NrAUS3hwL`_|0v4$<%QK?m<&P#DfE9jB_Wj6T}7d7L&kfa_Ho)r&r&v0GFUkDWXXt&Dvu&K1%DfRg979qu^E6+4P zPt{s<%Lbl#o%&9eAjBz&oGd*%%j$%o?VMNpD?k_4i8?s3K-_#u^?>Q+P|TB-k_uSR zl5ef#TwFHv%z<=LvyqcI6Ez&}d}d02!lhKiJYD*@ZhxegXi1ty$f#S5JK?#eD+wD~ zIj}sdA__5n{PJ)A5`f?Q9-Gwou2Am}%_i0V!cRW`r+?&|-~4g0 zz-K7rOY^z987)yBXaV35|ablRscO126Tox{#NFlNBOFJQ!fj%|HLvkg98 zpti!a9!M)fK_;437!z?pN~I~ft>o~5Rnm0w#kB#nuC*c2g@$7GS=$hCNBE@6uUtvB zZ4g>nz(xfP87v*+Ri2yQ!VM}OSlUy`i=~w4xlpk2lR2+IGwQ)UtA|G_xsODzd0keI zl~vV%$3*K^R$)qpt!g`ePNYoWlTA967@3Gqxvth%KD-&%sm^SHkAtW1#utOLpjHP0 z)@MMp4k&WLURBQ6rq<@vYX-xENnV$8l-+uk#ali-akaUNt~I}FXl=!5;Leg2Aqs0x z$ap|nR?pE%yT;WERmsWX8%nv)&Rb$R0WAvZdz3Q`lzBv}?%n`@8BkrBMN(F!ln}t1 zUIBPTD_179`JJ;RLEVO}N)1U`?|ngUPsm~cCI<03C^|Kgssoe;$s#nMS#9=FIXTY3 z&IN-}$++%7W70aeuAXgY!sbCILBj zL`=?CW5SjF5Cg)2RLqV{#jdP<&DhS2Kqsx%<#?#2< z@u)vb8R?oISvJ}>ZoExtA}N{H+7sgVsy=v#rBL<5Fk z?QhZg+oI72-;PqB5(Hp&GyY-K3eIpTARfA%xgLMVSTEwI^Q`ZPdbhf5HqB zt(k`sC>lelaNaZ|iHFH^$bVLBB-+w1V?#Q#OJ<*c7I-PYrL~1L`J{DM<*bvCi@F_E z+0EzOYL?{WgJlBZXu@(x9|P8v*rKvVtCcPOJk=|2I|jLAQqloBq}jDGB+Ij|0QB|i zDmY8Z{CW|t&q-Jn|CCH|)QcKdX(F)jIq-uE!AYLhUI&&z8K@2r0J&^*WzM=CNtNBv z`konoBxZm-Nfsw=b?aeo7tY4l$|*_R_Rc!;2%>d3ed_3KBdsBdrXiDyLiG}HE++6% z6n_m!TA`>;qPSia9h`sZ#l({{4~AJZ1>tMsg@vMPq?VD%&Y|;pOy|rI6`-%lOe={V zm}p9+z}B}V2u!%|n1>^MXY5QmZ`#6J@5zmSw6+ydqNMOS>NB6{YeQR}(E1bkd9fqM zgDcHsQ!o#OMP50JK%Ef~pA63;wQf0U$$~rjdZVGkmV&O5sxW;J0BkE|$#SJ0V<%{1 zWYu-h!q4xLhYeHCvPJ3ajm(OsM*)aABX$QPRA z(nks+9#GV+4+>p3NbtFqY%G)&$1!&7`*&!9T5b$FXU%JUV#W)b$uki+;71Y|oq_%F z0duh1DoSEJhU0ZV(4OBQE%(3q55Dz30{HMsJ0cwY`I#6Z1o0eyU6IlN6ZCbZ4KtZ>>Noyg&CcGL3KTXD2(7(k z#c}V@t!m0+lGZGf17kfG;sMN~nrNNqI;F(;NlQQ7sim) zCbBHpoE<6blJ+v_!en7%A+D@{Uq%xMH`ukmyEbp$?zovMCZIQNQaIR*d`ZsL#Out^ zsP!u#?3K%t3if7BsNN`lB5Dzyt)R zN`7W16`wPls&$85y<8bIMff05{EQm7b6$9iy?(#S7$u7ui5a4?ruDafR3Ur-;TXpY z4>@webSEYMxkIcY)zI5Uxz0(%AIC>1yd-ZY>r+|t5k4U{p^a!C?Y%CrsVo+US%68!CfuvV#t+NCod9y>s4|H81 zF<89=B%a*i93A5w=MVAIHwN%SiOL!EK-kPj{LPbG+0-u>#?wY99w?1=}L_t6zp7OiCtd z2JKcQi4ON2aqLJLm_8srVCx(7cEfRe$;A{XVgkyYH%rE1xX@aM>IP_V;9GM8oXP(( zbLy98l+(pDOFWY8fiP z`JQScKvS5Vkp#x^g0|g&r~s-sxB27^xt+xMLQX|ER2I5_M=1)|;>sJJL=h!w=BCnU zAwNle3U&(#gX1`Rs<1%hbVM4)zH?zboqu_J3dhD?S*+TCg8|Nj)0t;yK>G}Ke##}C zA?t28V!~oT?Z)?qCbyIy!OBpBj7QAbJlTYpW7z& z1InDcdwu&fuf?syU5yMNu64SXCXSDZs^Ni(npjGla%v%7HL^X#jcV? zI?~xz3t7Y6<0(?gh7NV+bwn`cti!^C47uQ3YfeYAsC=10uokvxz&dY# zYLX;-L`h1FS9DUBdn=AHD@;wpyLo}oAp z!x3XZl|^_G0+#iV8sF5xWxY^N6}X)94mH4ZA-r@vC`)TV(Ww@IG8({Ba{8!j77!Yj zTaPy{TE#`Y5Kxr2Vg_5-MPRl#! z(9Em3Sm4m5L3~s%*9pa?Yt@q-V?0ol!%a6@xbz6_Kd^McVDG7pf=Iymq3fG!)f zH}sXWOBT_k!_OuQvMVtre|`+*3mCngoxZE{5t2p{O^ottPNF^@Z1f5(wS zJfNm{++UF?n8)O}KmeBozJCXQsfC_mHxTY${az_ZD~`dlk}Uzm9slj$`Mv+;Tfi@V zwgG*weAM^-pC9BVl{er|{fVFYi3WVFP%igMTTkRM;nVT<>+g7rsyTu-L${8IfhL03 zwjv+!M6Rh-Ea;W%0pJ5OK0y1z+GgKLBcBuD6AfCdDuc9lNPm>9GV6AK0@B5o#;TBZ zBR)sjKcfar|A5T*h+uGZS>Ij@TEv7OUlnf0tALMz!ug>6by;tS2#k4@)RdToVWTCz zDkCyJ)v`yW@G+2B(b~q;yPmTh!JMy@LYKAXFTxX=wnF^uEOi8s@gTzsMc_W`!#%G> zQei+_(6Df0gP|!m>a)y$E^9E{I*k|1MWMQij%!}j*Irqo8zs$jbhV-?^fJ=W%(AY} z@OiJg6|1f&%5kh_>Fla%D?FXq9NjUGfMP;=Ri2MxEiRozkesB5$6%zO%sW65gO#ZI z_kOu1BPSFj97xUJG7q>X7Tef2nJCGW^bhSDB`O^x(W@cEAYoO1Mi+Fy&xFK6ps@39 zLV4F{3D+t)bk3#JIA@cZ)3v^^=rGPERxToDhE&Bk9%Z$!+Im--AmYKm?#f#_=?|rb zUIv5?_fzGL3PL;Lj14$T1U&`>qc$^|ZXBH3O&k>?Sux_3!C2>}|JYxu+o~aRFZv84 z0qa=LJaK@m z1_LH@h>X8f6Y%`hP1pO^3*Jl=5s_h~ctk;(a}ZK1{X~PJso}t=TKG2*BL}b&f>qy< z)ddI~o%;hO3#?nE=9JlG zRcII<<2@aYez56VfpISbROd!`>>u&=>wgUM;jrbIMEwptZ5x`s#gRKa;Qt%`uV4IZ zWBOjCiTr2TuzsL7sXLJIxS?$gt?@y3VS;-i(U%R!>nmp{6h|SM7zgJ>x*D1&B)C{6 z792jH#v4l@Kj;vqu{Un&OAuDCzYB(={PIsV*(>fT2##WsE(+G z-`8<3DU$9_lFIq+k1<$P5}ZrSJRp{s^8wAJDCW$TiE!rY2dgoJ4|`>7rK%wm!>d*! zSmGEt&}3y+Cg~tM=Tki3ur}QUwBjd0$krEsNZ92r6I6Xp0vRumRJLjxE%I~Up^fra zU%nt(Y3+2<tN_u`V)pa=6>fbE)`2>?YwM(?G2wd_ZKXyV_m;N=Divo_b&l=++RFClk$GQ zE~)SPHuVFYNdf5p{-6Kxzq%}&MGi`TMy+v1G!FD-B~1XF4P^B!^}f)p1Q1r50n`9E zoZJBsBg#Yavb2tH+B=2JHZh?#y)4B=>u9#IQr)sl91X{KV7Yz4L8mHOYcMm+`GVdz zs2G|y$`VzvVKqOIf>=W4rTwd(S0sblje}z+y}k7!ifb#3{{gj*aXf0C<$$(-PgUNc zB_~E%p)1wzW&8lanKQf`VKhU;F)P%{>S|M^uq3Db9jx;fR-m*R<|Byyk-Fg!fZMD1 z@N|gPVj6?L23d`spNtEr+7T&-m@XZ|C*6B`Zhj6pp{70$I+hw2@iF&$>7AQN1xlHT zDzIl%4S~?8k>T)~O|TFytKcqws^`b))C;=peA14urj^BEBta_sb{6)La&8cG&idlP z@=WQ~m!%bcr8|+1xgdeQ7Ssqb_EgJR*m$CbND{I)7p+)C zkxx9T2MHC7)m}t|f{>p5XNjxgJg9-8_j0?TBw7`tzqV;Yxghm;Ei|7!gIY6r$ z@vQ4Op{ESW^PK?J^({n+-Eu!@>5hap4)9|JS~twtiVV@opxK5@LIXsk#sj1J&%9WCXGMuKP%8x2YN;BDJJ%mI zsAbvwnX8*|R1Jq+@_f#Jdxhfn&y=x5`kk}f;H_`^D-?>k)5OBuR%N&10DM%zeS`a> zP*ZFQh@`2-=Y!9gC?p$Z9MDcaq@^I7>#>>fRv%}nYNc)`@Ob|_h~q%hj^Qsn%r?b( zyW!o}e+)nI(?4Oq{tJI^`Sl&YTr;T8D>}YcO-KGvZBl>j-}%vh|LU7R`o*7ldiQm) z6nN}aC`kR@)9WGR3ln4K1EFkqH5k(B1YYKD?Hf$2*jvDiqp}&~$??X)TU!JjQoU~_ zqv8Lh?(JSJ+qUbz*83P^&b8LAs&np-cgUjHDyqTo7E< zty8tnT62!kKU(`WX0PmBqa9XPwcS|#&If9x^3Blr<(ZSxEd^JtjSFkZqxbEV`Bjoe zn>*kalE+ce>Pk;eA<=ukKV#0h02-zm{W1?JBp$yYUPV(&M`x&6r3DH^T^5Z5lp{!r27tJ3Qk)V5|y38_gWhl zvXxktQ+4+>)nX(U-;SyrqL7cR$`1yqzZTNk^Dys*Nbial$Yf^+k=41tkutK0NYE(H zmO#TCq>Img!EP`Im09MJd{5zkreY$70y2*{2$3b6qyql^WV+Ej$%DF;BccSKb~=UR zgsN`L3Ph(!C3-Xo5K?1r2!6ZDzznI$WDqZk5DD&&Vsu^>?LvA%Xcsd>yIk$6>>!%N zIpQ=F8nfp^8DW%GXY8=jxKB)8<}(}ESHX75mswmnul7qm{xmUimsGQSGPnHaaiu(yok}aDr)bet`KC z+VX^uFJ{b%b-7Af47BzJW4s_em5wTxIH=&6NX)(yxEc>wUUYzn(p^ZSX8Q02IS00X z`v+KEsSwJ^L)5GCZya#GAnpqRq#>^pc(6(iK`F66(TEy69IY`TzV9z+%M%fC>0spix~otS7lCrb_)>?jXg*xk4|EBMU%&lViR`ZsbWHZcI;Hi z)dkiTQr?d$Q=xx6KuvaHbwe>R$AjbD>F6;DdUftqN-et10sN#1to{NQtlwBa7&EAI!5RE;GE=xzaqo^x?diox$naJtJy-Pk2h0^<&8;W1}Ea8Ee9HC{qVeHTF za-+A;3l_cOiGgK#iD|45uV9pmH_}RLxK;d^kOGDKeT74nSB9j#Gu}OjK zXzNwao1Yg03efBcnSnk5WI^wb6YW)(Ln;o8eMhYY?wZkwjXM)}LO`Vkg<v zU;3Apbw%GgD##eG001BWNklxJWh=`uP7 zvIIwXStLVdG(hGC_Z78&t(ZB~aX4%YWH=Rpvm>1OD-1f*2>nQmMb(bUFflRrJ0Hy0 z89^a&L2GYGF*o`~=y{@#2+F$RD9%q`m2O|Y*zp4RB1ifPSl1YjVQOwhCqAak!Z?@c z^vZB)UrGVW0P>JfCnhG!5hD?UhkiZe>_pwbE4^4_N;N3|h<(z35QhjHR$TDfuZQh* zg{DoZzQ|9^tr#yhlVq7Mt;=j`!UWZG+yQlHuz_NW#0l=%Q%23LckX*F{LL`hAdiLY-mqU`R_oJL-H9M%J7z>lmTr-9zRNBENFT zCcv(*)eHX|ESU4Ih;JE~e~n}fm#Pb=vQ*Ww$_?tWCFMz zRCVY(jX1svbCw7S48Y{<86U^N|w&C7L;8E zBad+OT~-I#J$w-UDaEo4%<+n{KJk4Nu>~2N_$==blPWoL0-iGh+x-=FSXXUWji^L^hky}wpS)52Q;Aq zYH?BND?BSMPdCwDf7sd2ZC9?AlZG>QcpCQC7xcb~)J`Vj_Smp(J036ZVYb7nLe z7&0E@qq*_d=MXKxw9ladaL!l8(2Jx@fyG82hp#dXn+`W-+(b+Y0TKcNX_=p2L%xWZ z5Pjnd>twLee^kogwd1SwVmt^^M1iv6bm6$2aqwe4bUC;nlvj2zGKV6W7VBOxlA}Ru z3lUAh7>-bNYMzMxj5$b8;7(?o0MdSR%2qXg)Mw^Q>80Ai&fS%J!#sX{GEWMr!+YL| zuo3GIvL-l`<0UmIL4ZYKuM$2;1^HQaNWAbjKJU%nNM)(fOiiJpG zfe@(W#y_`kzr=A9_kH8AA7lamj)BeSqc$oO~zImZw#tk{|d|wXn z1rnvL82kMc1s%0qVxrcI_NhRTS$pQDoik(Oi#3^mp>%;n^j&G%7k1v7OwjH@3>R%o ze71W`L?mkC4yiVtMb#Gc@lli)r6NRN#DkWCf59v}xFH7j-Yn|mb(=e8C)vbupl`3( zw+_^XzJ1^bGCS7Gg3$}c>x*JQR_r^i2LJhQ{=@(C4*VZq^GDskA(40faRn6L>Q3tO zz+e1#|MlNdjFOte5L3q2O2@jJL=HnD67DKW zqgm2ZMCYoEBbi*iv@;DCM$Z`knx^;@f2#Mmdnr9gIgf;0k|kJFhDM7OUXP2;vGw95`V>%&hOsdUt62R@; zm3)ex@9<0-vTYS@T;d8Dk?l}7$S7$-I-UD8FPvDGf*e%TL4G#_cROPaEvl6We+$Fh z?<8kLR{>N=+^&_(xHD~)--}gta{-WkjUswS1%ej>{ehE(Mp;Ax(O$=S*%}RaY z5^cT8N2CJV95&;mI%MvM@d{Khw|t|JHq(cvm4T7mWe(F|9&`Qgy0NuG|JoQAJdeDIRfn5 z?D%)*#d3VMIv!Eii!3QAq!#y*ZN0*sKEcuNVsds~%uF#9yp~|!TCWIWf36fFu#daM zX5706QvOs@FH$#uNZS;>mRUGRx6fQ5{Ugu=X5d5G2rcX zQnh0yFql0BIM9OpIb4Cpf2<#x;HY97eWzb$-%ytYt{C*{gw#f`%Hwi+GM=MAVu@AV z#1o1y`f~>&kEjqLP0&_~80HQKVY!Shchr(+ZVgG-6SiC#eH{?msGU_hCEgER(5uv6 z6);}ZM@4E{oFkbqY!iZF3iD$tkPjT`YJODa5=6x8=z}0$i-adDe`?Djfd?6EN5U_V zSk@<4ttgYKI*bBem<(%1(!h)%u_e*2r8Kecs?=|xAh#m*U&@yR;fQwe^Da~!&If>j z*4|LbHzvGY4~{j8Fg=jUi=wg#hau(dqO|@sn? z84pArE*YlJvLX5%f0@8|ykc!nq!V!?$CTP}Y>6je4W$8nyVGNag(Pd67>{7K6AGDj zzA6wVQ{uon6qaiEX>1)&<2H#(ZFEj5hZ>qJKbJ-_c(*ItxEv z80J@>06Y+*pdLsg9k2ujgK%Tx*eLcv#94O4PW4}F2a#+?e_+9kK?3`7MYVw$Kx<6e z-X9NGE2wG?VF{}aY)KVeT?t@qH1+S>1DQKHh2V4Jc0~+7V>u9xvb<%)%D$ib%hFcF zprUk48rR{8EGaG?De##aGAhg$ndM1#m}&4yj^=uKqkqXw8D>`i8e5z>*chpjQY)e%OXEJ>9Q*#t;;O8;KD}d+JO~;HDK4#;AhmB; z>?1KA57KFtx7=s-2V&5+VdaLU>_{X=r&Z(j^mDj>_z_}sw8e3I`#E0k?{Rzj0&{}z z2p-sb!}fXyfIs?%%jcWCQTemBld1sT{l>rXbARhnf7fc&zGnV3L@*A#wgqivhq5f> z@)a}Aca>7KXDGklP_FGZX* zNs+`}=_(&VL{lc`*cw3~8OeZPjJ%!WSjKsfkyg*|Z_b?;Vp54luG;1N zO3fJWe{D(yH3jn=d$gEcvQq`j&(LZ6wF`zvK+ zol)<`PJN6!-11WeY*l`jqJ2(?z(6qa5wBpzcnK>jO1aR_q;SQ34(?dMKJA9Q8+S%+$(H*;rYO2K_7|at!(cGc`t|^tXiCS`z z5e|_C$BLRRXjcg1uG%cQuW>%lqaR&uifhS2FGj}(bKpb(~M7Sy*|gO z2Ifn~-63XI@z_K{ZGk6WWOl6A8w`Ol6V(%s`-25< zTL3G#Uf$tHfB04Z@Bg6PrEG@VX2`f3d{2 zKV!`+qs&X=?j>npBwA;RHgLoUsBK2!2*eFO>50fN6tINzRuRcD#?0VY1G~mQL>`5_ zJQ%5tCchRPF)`*bq}sWNw8R`N+W z#nre6F=zIXm4?2*pfoPUivz`Oe>^zH9bG<*;_`5~>k(jgG6PuJjXNp~?Bju2st$&Y zpxeUB$IUTwhod24p!YmQA9Z<)w26X-Id}9tpr|XXknldhPHOLWE$15%PDWC>WkDp< zcMm0(d&1YZqO9}Zm+=J@Api!C?Ua$%^#WkU=r5wdGaBBD(^DqinzsdGfAlj=c3l<> z=(#x(48qXX1;`8L?3g*u3l>-u_j1HK7{;8)PFi;HCp;cs@w2HES#a?JEcJFq6=pn; zK50w9CsBvnAnjmTVG$VfeqQ9T=^4wQm#( zV4~KltRmwG4FMl4F#7CpYnbB&bM92)SzwNh7pOcz5hekKiz*>6mla;B%UjI(!o6|5 zz(z+F38SVX^UhRhtOz@%3`IheE9U5=I#?>Pct=Y0m)6jhg>>-ze?*WOeZ$h41T>%2 ze~Cmj?o>EeF*483ote!;#!!)(IpmFv|QwE4kN z%Ys%5x`a`wAXQk?$j?!tVt>4#)P^~a1aY7(WcQg(U>1pBD2BK$@9_HZE1*oE8LR=( z19f?WC>MBL@$}h>e~%yjcOX}^!UBDdJDwlgt_vx@A(i)!eKGx6UQ)lj)^*wED;}>C zxAo`Y8K_Hx+lsN%Yv8!SlWji?SXSd`Fey?f0CEIobc}w-di$J=ITWQa1TcAUPvZ^; zij7Ap>=FXVQjmS8VKmj5CByrMqMJ)y5vHnS4upZb1>*>%e|p1q{}Oe*kU7_PxOaGc zBh{L^vdLXpSsF@I(IT8`Gyyzo;Q<7hF)a&9yPaqfk|&Y`g4T2>lTCL(T2mNVAdx-k zc86o%UO5UhS8PC)F;?R!%^7G+F6XkjR=&`4CQ75>kLkhehL~F0=wBOyD$J3(xE#e- z%>9FA|J=?)64SM`dp4VV`( z9|N^01Tl*`DR$hs?@TFBf#Ai7I~s>Y!BMhc_OB2EE&~OnlJ-CQj-`Ep9xqhy)5*t7F043IGFb_58m1(=9 z!y>WxlhlqubM>SOb7GC8Ak4VW zyHur>qg_-nJQP;; zyWZYXB{>qCKah1`-#%i!yu;Jm&wvT6*Eg_Kdb)U;&yUyq=fEHR%(DCNF9ZKtYs05M z(G)p0l=X=#gdDg$Jz?7nkNa0xmjzaW7ss-q_^KF!g50U1s%1r8pN`^{0M`rsP_U|p ze^k`vazqNH_D=etL@|ahTC&C|sPK9$p@Bd{ZB;ab!kyG45~M9pbjmLak^5FKbLZuO z1%X{;=0x8gg5E0pPOyZD4xby`E~g_t6Uad<4G}4nhNE6Z72vp{9A@4bXPU@ic|B6; z*!2z3lT9PQMALG3>T@{=156gZoaR|zf5RL}kBl{BF`0iGaYsEA<50y`jcPcLaQ zXs5SSqH27$Afq^zoF*N{7EYqj}6`={Z~{;#7;3q%BN^6pQlXZzAF}EN3nvD z8)`1}DrH5HI6 zd-nyl*NP86{yx6=-k-hqp~}5+ejg2of*p;%HK`=sR#+-+SUS@bpKV$NoPcB`s$b}H(zC}M z^@e3xu|IYth$kl){RPDrgpg^0hba7}XpsVoMuNq7h8xiHj%pR{%@r{__U!|T6PjFt z>grOR_7I!suOBe>9T|>V9hb`$kINgp{NyWq`11cje@w$qe*Zn{(;K|`&Uf&|_x>Ed z`oZ_{lkb1ONrUiBB8mLd825df!imrS(_j0Q|Lo1%G{XHZ@svGIk{r9BlR;0kQ?N<*n- z2wJ5SSvOQ?dUK@fAWR)dx|C-}-|h^Pm`U7{Hy%8Ze8DZLVDzH!yjOki3B?1^t28%^ z@hk&yQI=L?r%>2UA7PMvC;En}yP-}6h$KP>vm@e8Ax(y|q6(~1JY;rUj1<_^_5>8= ze{iKtxjFUy0%N`?q%$PC8K_I8=k1K34+Shvv4j_Xo)TV|xxlI#{Y7ZkQ#4B2BpO=I zn%Iu)vr^bWdeumf#COa?fLT^9X4JB`KlhQ7V<_gezV-EpZG z)TJTjokW#Vk(Q{nQi`EGF|(EX6*nX*e|mqx=6)+}%*QFuNP-|7ZJe6>5y#iS@ zxgqo!X%d)FOhE~Ma(pNzr#VFmCU(^%rq_y1@O0h#g}Z7SORBePUTInEM_3;|0D{EY~k+ic?20 zRYAim(l$D^!?Djmu|&)YYZY^Re}t7QGliUAXmNTuTB*R~_$Xp$EVLICP;Hndv4c}G z&XEu42cbPv^@WGoQWa}0v!^*tc0~bpGAr})BI6DY^ypIE41^MVYhzSIngMfX$fFrd zN~F|?3mC|Ga0DI29V0l$uD)n@!|3_cJ_V@2(om);kgza_B1mm0Vj4w;e}pM1a)hB6 z4SwzE0_!Q>+dSpzC=E6zGAkp@k^J+rX=F-n;bAU>AOF3HjxdNMiBH*EhJx9j$&<67 z$HWpD6CIFwm&(ZEJTSYImDLv%tB4XhT&v>8HyR_Y@~qE+oDX2y;WsDy5P=>deWVdd zRU4xYWY#Qo)hTenfzgs_)eCGS(h9pf z15g$LORMs|Ix;~rLt~|nIZ^5r8C1tnQCamY&@7IY94{(_GbOz5`>RaDE63W}VU3(r zk8-dk(6b|A7`nP{twtY98l zb%K&f;^F>k^nvITTYpBn!5f7oC<{kp0A}1ddTUQS{r1Ub9Z;C*s{M6heoq{G*C(Cf|Dmof$I+p7j z%%~{d5gSEM9vxUOSo19+C${|~w)-pGIy^gyU0~6$EDP@Me}t@#>(kF+8t~cjt^#=a zlgiBhtjB!@0KWwM`M2M>Vto?H+8pcUEiO*l`3yd=V|HY8e{7E(PnUP7rAfVKm}zL` zN_5X2Xx9rxN%}0z0_%D~*ueCPhJrn)R2u=ncUEn-z*=y|A1*j5y;l?+9B%Dn{_m8( z79dc7cu0aop z%}n8S^k`7le_l~b#fX8{3eaV!v<2SQbH|cys8|FtEt0cViXn`ngE^kLSjVAIV#hnT zR|!E5s`ZLF9~gV*<(pcFdDUoNTHyVsfL8)J$mB5%CQ;N0L7R=ej2pq^wL<(gnu}B&)KWGA^DAYQ! zW5Tc^<}+ZGM(0RmcFf%6g_4gafH5|BB)0w)id9%GKsui}fqG}KNTQK=i11OE#0!#9 z-~}TFe=L#&4G>7oeMQmumTABR3xTB$Qapl1NQ{DNDV$TFkA51Uy}SXkU=B`6O1-d4 z^uchy9y0FYWN3Q5GFJZn6$}?xU8yXTat?Fi{`i1enBg_@L5j%ipR&=6NdjpM?40{1 z#jR<&(J)71-ycM?waXbngE=q@xVJGXfa|g-f30Cb?;mwW1oy|jU_3q`oz!;oO5kmq z=wl+bFFDGtfmyBm{vCu855wASD8=x&bQ;oY;PLXndU-;*J|TL? zfA$*q@Zn1U__=R$ZS<|}r2YW-UyI+i>(h13?m*jtT2ZXx@$w#Z<&v^BDp}rq=ezj$ z{zn*t^JYgN%n^-_a1_UQeeg_NuFNn(q6;t@k;sKzMjyoOySj!w?sPvXJLr(BR_$y8 z$*L&q^f09XHaE@NkFi(bxJ?yN1~B54f4s76=OPjbfoaK}v!p*LJ*8%pqdpvo$C<`U z|BkGn^}<$NE&CXqtij@_@&+M@7^2F@QSGL%MebZOcfIrrJ3au}C*|^9`7;LhCL~|e zaC(X$#)B743TQeBUX5cH=D}UfBrF!#G?L>ibIuK-({UFGB7qp|VHo=^F+`V&e@$bw zF=0N1gjvzbWHp~VBA!AZjyS#Fxn&nV|~$6dz2D`J zJ487g_inFWp|uI`%D`t3T5Qf#X9^HHPy$s+e+YSWf)k|M z%z-01Y-WdJLC-*2u7Iudz?ot8RAyM=_&FS2oq`|$5ib}qP>Y00wg^(Zptxa-ofeBm zHD#$Ze7k|+h3YU(o=XHf>_V9y%qzy|@N(sIY9x_ZuZT`Di&@aTUp_;OJIotmzssJ` zfJ)>3=r3rcF#vY*xec3$f9}A(kzv|ajQ$Fwp+7$I8~~9`b2fbT`7Z%$!X7*3e85^m zv4O|-iV@DhM2`1guEscw!7i5zS}Aa! zr!j2Kfy?ztBbmSm$~wuy17)k0!1$7LqUgdH$k;TBa=mc$1TE#lD2us?J=i5iXi{P|Mn70R<+D_$DLNb6HN}~;#JMt* zjZ|ub*Q@5rdFBD7l3%S<1|_EC=(EFRq%0c0nYrZECKX{h(I?P?oj#qSmw28GF`6Nv z4v!UD92H%?aL43Te-d`7*b1WwJS1x z&td{;G$z;pW zKf@x-RXe?Km|esNMmx;@Ktz%+30~sn>Y9>>Bev;Zt+!BAWXEdm{- z5aDA!7^P9J${aZI&Lq&7gH$9;hUi(4bZ^OtNzN1HGv`Nz9e&REl#DYHB*pe)W)^p_ zOI!4g3?i%p7+7^^nNft}mFGhbA)EH+9fy)g!N9Sfhp2@lG!gfvNhOzUV z{Q<;|?eRf|Y{9MpxasGHDcv_P;uSMe0-PYm%7H$(M{}4G5P-T+#4?lP<``54bJB9e zq_}Je^q|24F*fx6fnuUC`ts@xRw-1fRxrmzX-s8sf8~+oWT$A85P@1(Sh-+(JTrjw zobqsNxLmI2uXp_DpZq@7%Z)amK}pRIe(*#5@Qc0c<{8MJ$$4_zl{@9+W zZaSM1Ii%2q*N?zMcSly!7CTJ?y#~72%DIb@#=Fz2E>77Sy}aa#h7;r3a}Cw zYJlZ}KHf``zGBy+w-i=B$9M^6@L>~$()8=WQG}&J_67~H#!k`Ag=eZtzYS&T&~xR* zDVaVzyNdQ6qmxK|Qo~6oj}w4P1|JV?Djrijf4gJJZ&t`j(}>YT={VvAQnY;#htLMe1>7u5QOBcoC!qZV865Y$Ac2~eiQCz2TJ`#zqrQg6gjX{U%unMrLoX0}PJ z68WkT@;?W z*=3aXGsY!iV)lVruc*s{(w-2pbJy2*f7FGhRbhaEF)?~z?=LJw28k|n5(2$%?{T^P zJnE`{Wn7{a)Je~)0I zfge_!x=N|Z)L$UAVxY}t_CVjKF4&2{j-|a*>HtMKWc+O$!3NL@P5QMhXqSrp^#OOo zzIW{VgxSPrKfmI?{ri9P_eGreX}Ik6r*TPr8{@uHcKG=(AgdRQ?SVNSpl`Fo`b3~0 zY{$MmZDvQAlz)xhQ5IlXFBoG3oW6+Cia3HHe}!0bM^OS* zd#R~Q!$eO{J1%e@SVwwlbJrL|aT{QPU_lWFNdQ45m9YXpu`9X|spKoAo(CG!SC5PKqK-+F_c;)~qcrB=P$tiK z^#DJQw!BgJTd13Hk;gT@e;OUze9tb*j`~Y^QPYvO!Mw5JJ`h%!ob$I;M$rO`V`RAHs=X1TN@i@Z zX-NMX^2eE%m2i!6L+=bf*Ezt{R%3Be3_wgg_E$viQj-D8!clVue-O#b4M=$Ea>NwV zl7dzD8`^R~Ei1O|PRyB#5MW>gu|vqhu01xix}vOCWSyAXgKte+QI{3%dd1jY5j`l( zF(V7mNHMo;fUm%bW_pKORt&pi?sw!QVLTDYO$CJ%u&{z!AMo;4P*@dGE4!V!4UDm2 z^pD&vPj);ZU@;|ue}Sc~r+T6@j0q~6EilG=)OLgULI7^wF#_27hIOS>-uDe{F^u^@ zGj?o#eT$dJy#aXhZSJJL)lO>u7{B@-{Q6(|k5Lb3Y?Bb6e_-n`a4%Ta3y>A-h3UBy zfplStg62tP?^W(F#=z3J8%PJNR%G9}_;(_2JcIOudL!vz40t`_DmZ>IFKDaNDSx8* z8<5U`wAv&YW=sW)l~1HGPQ>d;0WYQMpcki4(HxA=Rv6luKNL9NODva<l$VXGmfWR`G5M$xBdyCgQi(!ck2c`s789*+ouRX_gHdT>HLpbf<$T z=XMgUPZn7e?Yh{(5L4ywFkK`Hvdh5Cmy;Y%yv(6ytE5VJg)8dAE%@&MK~vi*rKG+$ zbB?Yg3gAIkH3kgTTjR{MDjGpr=9z+=@)`(dlcv!HLn5pRjus@y={T1ue8_LLiWuT^*j5OnMa+7nz z*qsstt{wbM<$d~e|+ruoY5#w4+!_lX)4GLi-ktE(i)mF z&8Q+J#b%COA&9%CF~qk;vco?@HWP+oohTb~%n|zi3wNQ*jUkL#=od5=xn3*A<2`!s zL|mm|@5E2_nfUnpg1_@SKm4Bo{O}tj==;xdCj|icL*Ngs4!|GScSBoNL4cmByxuXV{iai*V-D{ zV9SbST`^|>+6j#0E~?Cea2M4ZG=S!$w4N7R77O>jj1E=}aLBJz7Jq`QZ zP@Qq$tWfRD4I(_ZNW~REFM?xI=+Ksxe+sPeI8BtzE7p2JM_2O~N}Oet98rM0lZiJb z#{PoZR5gPR2lYd!%}aenFELyf8{Lc zkzOt+Xj(RF+h`FtZaQN}f5$V*WZqcL z9k7D^@qy#~%9e9o-s)myK{8D7K5m%qX!S-<5+;gNnh^sdA6V*J%)ZfxUEgplIwr>4 z5o5qBJ0egpvW3g5KKqDKO;(DDL0<8IZ>9+(6<+cyJi8f zQ3TWjWaBUydG-LJ;`#MQfACzeJ{5fUYM+Yc`2URr{hx9he;@eq(`UbgvRtukcOXa# z9vLVzF%#JCcgDxl8OLs8Qgv4={UvS}R`yBo;mD4*t{D3>!WKTL{fTGxLUGh^QTKe^0?Dr*dx!iQbBy zP!1lfHkmsKhC~izaJdb27PVd#GU&>hN#UEcPl@0T2u7f!{4QyRU04^hrbRPH4~(gp z5<(c$jn`Gne&$d`4*k3g&4Wp#FqlTlusNmF&IfAfG4V->H6#?kAhknXj2lT5qfZ$! zT{{`c=e+^ZKhfP)f8}PM!oW0!NusE8Vvt-MrsZTs>}Ig#`1PTx)2WEEf(*uLASQvO z?idLieDRR^+10&<2jeEZz?^{967?)bB6d_?5NL28@L*^oqumYL_HtgpF2Y2Z!Fm_! zhu>>0Rq8J)H=%eE_X{jLV(eg#JLxM*5+AfhR5v)$iV;p6e;dLamV#p(rd?BB9s zM8{IDNE9g%cR2GNP@NI#VGA-}F!qVGse)jl`HDHX2b^i>c_d>ix?Z8WiVQeCx8a#drb^t%VHvB-Y#Xq7-U{L z{9F|b?e|J$LOG0UkhWa3C&eev*&#@=25S|I7mR$7e_exnz}Y+M`h5n-f(tpDP^F$FgYmdypF$vS;Q{27PO4#g$l~$Go%89 zMyqQ#SH@hiqMSR@R(2TZcLM@bUac{9%y>}|NI_32 z+|OA;BorzN-7hG1rHw@#&clm`kgC))DQrON;xbcsE{1N}nZ~opt{DV7w>z^Z)_g}cW59ea#pT4NZ+n@YS{OZ5`Ykv*F znDxj0k;g=5J03Fbx)$`7g--qP5n+sam^M+1o$DJ@JiE7r{W0uelPOnwh{LO3Dn zHd}I-slXP*KUZ7d&3k3U}V>en21yoCnQTYNTKLjU{4x|)AV4gi!(>F zDw=mAXRuy0FE_=l^Dsl&nYhZ8nKACc{RHNQL9z6_P>MU!j)?AZO8!f`e|$~)e$nAN zd5L&|qv`W2RE38WeJ4IuYDP>-a>3+bw?%2JM*>ocxp?5CLe;kG&!NZdEDD0L;K%2~ z@z#!vPQ__y7?YegZ4)_ycH(JFpS>L!Uhc5Q1^ZMcaf)fjT}>)mj0dbGP1jxOc z6E+gA9VDJm4HV+)9wD8Jf5aU0ZpeVVYbEr!*GV)p@QK4^$ zlo-TGPcMpvA9Kf?QzPffAk$!%9pizVccP7~ic?5jmbp>AYV9;ifA8Bfa&DNtpe=7v zmijd@%ajB@fy&Q;VkMkK+f1tOpiHMjDAg`E31(Oz6ns({^CG)Y0v>n1uf{Hu$=sn7 zY3{dD>i`xDdU|uv6kX)k1kWDiu4H6cGlCNhw?dO{Bp&;VM$lbA-~j4^F-dx-l_I#y z#ln4=r6xHKq%y;-e;Pjg;Ew;|w}13M0r*GXAU}WnRGw7+tX)!vU#kASe~kDWzwvMV z&DrmUe9#b98(L+!+UtiOGfQf{s+#27zAP)Ok}%$5a2|%eKj;r;I@o)$SCcQvTV#N^ziQIWOA51%QD&!7MVWz?v!JH#eIZS4023oQzoqfV} znM==p`oSWG9tq;VQh!cDu??byGig{9!w7YYEO!hPf0~T!;`WL6R*%F*6URUbHQm7Fzax? zYWHR*qmm+mNu*j#tV-E6uSgpL#fr2tNfB>ViPBz~CX501C(ORHTN{IP@P$PMl0_tR z0hkxWf9T5K;^FT&49W}47SzVBt1VY{y;d-H=3_xT(b@zW7DSi{)Kz(057H+T55upD z+)8@&K4I6$1+AE4EBt` zcks$qf4Mxt-QaCOZ56d#c>q<0xWOu-5BN%d!R6@-R!?3r=Z*-IFOA*_Xc?oog_&QQ?81`rY7Cee zq~5fj|lJtj1^V^6wX-%-JtA$H)3#hRq|%5HPl#c7;SXiP{C77gmfD~dOoQPu4( zdN2CCiv$)Zs3>+pF~*&dDW$2XNzD0zGcF+pRmN~e%_o(XDXR&^B~J)ABZ^G+i;NRyjHGdV_8k_q z#8jylVS;M+Jc~wmN0rDZV&{9CiBb$>zGyedthx327SHz`*ZceVdq3>IfAh8O>1Y0u z!Z%!0Pk-Y-{7Zk^tt=?PrQdiUhF zN=T;Ff-3)$RSxhf4ouwToj*P_%fV$7)95MV!&7t?Wt^j$_Sb=DM}9RzHmp< zA3AjN9E%;^Ax9$mogG4ZI!&AzL!{=S^z{ZaGWkO0BtjNE9FyW91=SODMp51rRH}8V~t`u@;2UJSK7z0bY zp)FVaJqKs;2z0M!e}{Nnf=9<|L}4K2ao~|AKM))R%gjB4b_urtf56v^qHbUO0tVn9F-ZZ30_R^)+F&Ix#Jy^)qg065jsq*xF#!*=%@p;!{&yBV|#ps z7&|YBBci1;!X#$bKF(xT*E<)-1sxi{ZJ0Ub({nvfO+t%Zf76tdeP!w-B%i~bA|WfT zU$%2XF~^RosG9kBLEm37`UCs+3bS2{0R3#>^IFP+P;T1sG4T5=BH4(d4<Ry=bT#~#^u7M?6T}Y zNMb;-qsWSlf5k^6B&0Y9KSjU;@E7m^;sGJ$k^BQZ!6Pq7C?Etv0wjbBI~0x~A9A7? zT$EjQ*>!K-d(Pf#%{j*Corl)u+}EWllUP;pO<9)8*Z1DD_gZs~(LY-IwSB{fAHKtn z{P6dG-+%WjU;9-6AAE;#-~5)0sZZ1;RREN~_-Xv?e;@znzVHhuX6yC)Sdnx0jK1Aa zmX%JI!5xve#uv#svRW>WtaM>W>@uNpe--L*NWSiv=4fq2%o|Dxm_NXsOlBJQ^BhSO zG#%_m(V=}(vP0Auoxp#+R6b9I$sPH4kq##|YNs;Fr zsf(a+9BX-|nYw^O#~8|u$Ogbs+(cqWBt1!PKwSzV6|oXis#A_} ze-l8@J1@3=$4qeKT3$M%;~kkJP>W+`@VlBjca)P)DklrHO+-voiEc_;L_{!*ag*1N zKRZqFo%WH#bgf-x#xvo-kyO&^CnATj0JQ>xVwQwsef%s+dqnYtf(U_!OR1=~&?iJ% z7tO!xgG}QAO!@W{gVSo$h&<8z270NBe^j1?5X`Z09GZ{{mrv8kiR^b214h4N_Gj!* zA5c+S3P+ViO66qtGRK|5tI|-)%Kh(=v<;}}ZYt6aQB$DS2b#2t5(Sb`9yIXo=cK8e zQ<6$mb#YCQSR4j|s?Ka-VnYA`AOJ~3K~w}DE*HH0=zY(xeq;N4H~g)ST~5aZfAyV& z6ZS`aN#SF{iHE=ZAN<^Z{^rx4{p_bc`$a@-*!mM%Te01qF>Y_Mtgq4cfzjoWm|EJ^ zmDPB3%-jgxEL`|z?;I&P6EYJ!tW?IaE53mteTDHD2Y$v?%}D+WOpJaPD{s;l<4P*Z zf@zyLR^#M}Arig6)hLZ}Q7g;Ke?@l0hGR&{Lv@jr29#anNk(EE|7`Wb1FBRpHaQ}p z47JFRc_s)^VBp4=%u+B&N&s#^k-yl@jFI)WaG#JJ=D+}j1o0fF%e+|hZ;`)VT3MV#^-9pDCS{Ou)ae%- z#jaRSY5YMkPj$nVT|7cc+1xPhekop=K(mt!cl>;;|}4cqU03uBZ*F5NZ5fmIGiMBxWQ%boFx4flHs0Sz~u#RJulP zs0%abmi8X^RY_0SoX=R=^&GX&aYtaFlt--BPr=)ABA4jP3)CXnx%PmtRDX8W1#{4% zvTg6s+La`gu_=`}N$MDk9m>h6#x6^PI|~$`GJ*&SK20ItM#t^;O`2=n&@K-ezgNT< zD9Z)2-!L}rpLijX>c5Zs`HUWDrU=55N55f~8wwgqy&&U;n9wCpPZcJ$upuJJ*ls|s zEW$l8`xEzXJ8e6#glBN=mw$s4`P(y=b$KZKJziogup__? ziP9QJKb3TZX*Be#ROQ(riScwMJ>KyY^vJ6}g=E$8vwfU6lWL78@0mJk@2#f_%} ztpNeFT3=9421T2Y7i4ijdmU-ofz6LWb_Ev}F&9-ARF+UIO@G4(rXG8}(AqFLHls{` zYDc-!xN3>$ca7uXG=jQ(1ZKd#Q_WdRqs2VNcs(dij#?ZPvpT_`>(mG4O;Fb!!FG470?pDcVxAbA2*;LO<3`-jN6 zBXXm%(Hw1QD0N}?H72{I8CV}beYj09`VDn?K)t*|Z3`|BuMwD{qL}vE^foe7yq!Se zBVC+U6dAT>SJ0yV?=DLSp<(RM2eEYp3*08Z?>b4#7=IHbE2$fim;d2!{@&LC{NEpA z_HDYPK2Z{Md>aY6|4+a6?n^)U{a^oQ-+S+~Kf3RCiV|XAjDd&8*O)oc_h&tzlCD-s zxJ3(((V6$-l#shGNN2ZI*F{xx$GSY6RS+Sdj*%NF=KGHA{#MDqg?o=<7M5V`PUC1u5X)0PH=;sO@=-wndKSo{r9MXzr&&sK)7j+L1^i%3A3svCciJ>%P+yzJH zixh+67Y9MMrK~)hYm+Dgr@_|M37R-@N7fIQ(tqQH2n8cafGPogKQ^e2vJ_7&B-`hh zu9S-2H@Hu74GX&yJN8(~K0-PQm|v9SIw`Ytiau&x#TdM?A&AZj-ika_+`ZiP_bGX{ zhT^Wh3RQg>od<#k5LD8!sM&z%tm<9tJT7`TUY1mxi|+f$OLRpxFu6}7W#ga69i0RT z34e^(pqc}SWAMhY;rZuSoIB0PT~-2my-fCtF*mATafnQY2;4f9kyM{qJ7YPZ&i>f# zFzTHVEmMSh{tqVs!>DSTb7$ybW2aTiMWZJdvD~FPglq#xlsq38uaB@~`hZrR>?EDf z#h6_d5EW!OQQIrjwlcw3m(aoHD@9Uy^MA9OLQKR=lyX(126>1xhQbAbIEfFmym&1V zmvHYqW9PWr4i<9Z1g18IYbpidP{6uSY)t*G=!4I~`tSyx6VWHy@&NK{cNU*@k>`pV zB~vOvYl|!uiJUuHePp6`G8Zkzj`W?uptAuMa8zZgO_AgiJ_}l1(R(KxVK-F2Vt@Jk;POzhv`lFCoYCG~OPMEjXP{;8k%@jvxbKe;SdjQys0epTR| zAt!xAb$!JHAVlrX319dn5`m(|Rw=Dx4uVWEBv%f2x}=neecZA5s_6E562#}+vG=!J z93FAsbJs)Hg%@#kEF5)=xl5G5C4cbcaW5VIg5n1p_|#AMPtZLkglSI ze>U&TrV%a96leFsZZuLsmlxRme{EJ`sDK|&I-*CG< z0Wr|`Cq_gEXTHT3)LKz0aJjsO*Mh#?;bt^jTAZ*^Sk)pr6_{o+<~9K#4W+D@;|YMH z5Bi}>uz#j8Gmv2H!-%^wm{v-x-GJvdbmjy96wqUBNhz$~e%sCZ6r{H(1%-&fZU-lY@@+k-> z^|Hu#Om(7F2MR+Li}HtJ-cP#u(jJI-nw?#$J79~x;R1_tR{DWXz^66k@f?uUj~}vJ z+M4pTD2OQhIe&r&UdNO%mC&>Y3y{;0AfdJS6)sK(ntO{7!O{?sjpOy zCduKouG%y4IqLmJdP!Z->cXNUm1&hKjYV!ZgmRAvC1r@_B4LT0DYyil%6x0%>_#T; zaH|x}sO!ks_?;#QWGxjl?@FAd^0SqKD8^2H-Z?@$h<_DIrnRcEr%+t3i_e@ps>pGU zgxF1R6kEI~y_UO7C>6Jlx1yy;;pznzm3%tkiA<*HLTH?#ag-S)Ab|JUrK&D-qK_Lv%K}h4M60hvZI!yH7?OWVioe8E$L-n? zC&s>OssN-_iDU}dw?XOT-k;&dbE4KpOO8Eg^vxB(NJI1;)f-2~UQkQJJ~k?I$McD@ zt?ron9i=wx_jgQu7#lB54^l%q6^QTNe}`ZE#ed)W;5RmWN&BdeUs6Xm6@OUq#6Ofy zYWwy3=YHm&|Kh(wvn;UhH)Ict!5!4HR4kWAnD8J5$5hB)YgKz1?Jc};?rN-Xa&#K^ zW&oojix$y2FoO%-d1M-;gbC*oUJy(a)Vk6?;!+d^|NLqNOQlM%k9VSgONpp1F6UI` zseeJB9Y~uUvwu^?%zR1h&3=kE*pi3#JQ|H1GVkDGzb+S8sUlV<#+)d2bXQfQok6u! z24%sf!yu*T^Oszr40{nfs8e(tiMj{sN2sEd%N|t!P-wu)vX~=n2szVH8%gqv?0!*( zy->;-Udb1dvGU9EN)m9sY|N*kBFXE@^?!EmsJ6TiN0dCvj!wI>9OSdLi^v00-HI~7 zaM0JKT8o`AEh2NL6k1kz0htwwPp~5NgIYGaZ7wwT)atIHDDhLL4O2= z90wz^ly-I~ZiPaMNEKDbA)hLQsz!mw4vA)SFCwrQ56`g4=|(A-eQ4SsQ++9Cv4!kF z;d@uxAp|JGFkLX>PUYeumhm8I!wTbOAvM6I|CTyj-ZJ?u-$+-=6TF{qpbq?E(B>-?EeXuI#1$VSijwkN@Gn z`6vFp*Ka=iV^7Z?Vp$i&wh@Vvz~g)GX;-tMEe}%kEZi>`MZOFhuSR2PLSvZ(a_?M*Bh)#vIMJ|OW3);iNS{<9&W(m{H&kCVf`5`~Z)|60jbsI$ zVHmN|_jZI7TAm?&=82*#B*>JV8RrED<^6D}uj)JJxv#ODz!cNX!SSILsVOfq3g1xM z!zs?--l&r*5StDuj`!>!3`||f^5J+@Ckz&3j2WSLE;4$e`i0+FX)@p& zKVO+h4UUNor4*Wyy=ha%4%(&cA&c(taCJ-!_@vjd*kL;7j{C?2JM>4(az%{Eut#&) zvZ9z`)gutcSTvIta43W`CC9fHezsK_X!+c2QmIZ}P_1aUbblCoQ#(omksXyH2`i}U zD_A7@_6?4C(Gc;(#9yrj=D6Yd>NTvsA_hxhmPr15wKiE)X!FQP0!IXucqxjF58QKmYH~*?~e|LGg~|@(N?Wli8)Pt+2rL@_=+zca=ul3}7FL zF*fAr+HD-BKS!ja&u2f`y}J1I#Y>}oOw2oH z>{emEO3~Eik(q#XK3vW@I!7{uQc_*i&Rs_4;UOZ;xqmd}?3lo+1tJqvSa6?&K^4@* zz#Mm!<$;Nzeb?xK3u_3=l5=t#XD>NbW~&fPyC#_>p+3B^>(=~$-R&|&u zwx1uMQh%|}4ulS?OFlmlL!pL4a(CJcB8FaU?bk9<3wI{;J2lkW2;fZ$7BU7fAti#z>Af{6DUdfaJn7jJUx+`sPkZ=#k*wCkr>@M`}(`dhx|-iU%T#vjEb2%(lD zD6*mVw=iqCKYb)9!p?3U%o59a=gK*{>b)XIFp2r4Ub(MLN2#Pvc)du##Ug0T4Ih1T zpa0F5zw$o<_~=`_QXlW8;*;7*)&Jx#|9`??xjZgEQri`m^$Ntmw%<{G#pTrl`t63Y zx_nNQeY+bbh{>^_l-is(d2JVsENF)1r7_ViuaO5{G+jpBi7Z91RH1+h&Pa30ho>q? zjlZBcZ>ItF$V>_a+!fbLA-0~Wx^&@o>=;=Ym3SmQ9|@m8#+^TRx}5g)qz=q6IDZ2- zXe{LL12?p=!aRt@0MPemwDxc=!fWA+Hb>AyBNJ}QBzkmUnWktAnQ>k2_3Q#qa>O^{ zPMI%Ky9;A1${^jl6-ExE!Xc^P+tixm`8ku-Hnj8L_j08C7I38JwViYVUbIpfCeb?) zV$ns{3m0h1BdgyqjvzF;prWvF)PJQ*F~vVKD@KqU@po?JF|&>@Qei4^p#aL>s= zJa){*iVoU-22LU-N-5;JrITpSFemNK>-nB;``bfF&Vm9afl$H7T}rnkx<~<}1o{6}S6y{?%Xl%3l+8;#)zp+sFJ;f2d39dl7p0@&EkL4}bpHkN)&{w_(-| z&$qXTerLAI_JsYpqb-JIeFMuz^-U`nV?$jplx@~4v?jp5KLf3+;!4DPLTMKPRu8k! zg2auAtE9-F778au&vQf+V@F`3w1!$2R_1U7CidG$D4Ok>Ct7_)WW5b!>?ra~72%QQ zeq#oZuRIt_0ipnfV}B}MepR@dS3Iao@DPg~7;N2{2Fiz)S`fpCJBlxep0F|qk)4bg zxIDf_4nN)F85}_^tsyWmw!2hoPBU?CRALGEO59FGX3~dIDrN-sZ9}b(+WQQ7T`2bG z{f=55kTcPt2ynK1fWjsQ!$3rVnp07#3M#XxmuP3Reqz@2K^H(K(() z4(64?;eT!AYG!Qu_Y)Q5tzi4+9nm{V6vS;W%oX`$$H#xC2>J5!KlMXD?}5+Uw~t^m zF!#_)46K)eS8slRQ5dsRj$Im19p1``&arBw7)T1*%EH-iVP;Ax1v5gxN(mBNqo7Q+ zs}-eQ(UuE}FN9V$rKKWK{6bZaJC;>wBBSSFM1P{L*OTZlGx=hxigd*SM7jv&cE)}4 z(xPNOMc>xEjKOopy+OS^%G4@}y%*%f*(tdf`hgk`;-y@9fNOb*Ihh74zgMON3LcWy z9y9u)5nPudPb{ z8izrLtEuBN#UOB}Fk^}X$Z=I@8BX<}0LaX70bCY_ATd40P#_^kdsOEs!MQjOTA7+l zS=9YFCDG1ZOX!PmBRkFfg)<0SL{||0#(%GvV=`7jp^ywrgg*aZl0ZUOCy~Yp3_3xj zX-N)ag8RUO#18uK+VY4*L-D539}jG|szO1L^%)Y0Bu(0BFl-uQ>QY0autO=xq&=9J zmnl;G#MW<8!^R4j?Kn?N2w3=h7F@YBRh*e6ofP09aBohN`C

iqsU7kDb%ZK!Bl^0G|b~ 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

R6!*adQ9MBZqT+=NF{fT0MMkfT@!^@ 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

P}a0u?`7}!ucf+ zXn9JClCgGqctZHZ7Q(bB1Niz_|YSrP%&#&!I8;{-%CH5$l6&kHpO%RL6?lE=`?1X z-kQj)XNYT$Q94Nl^UYK_5csV3RqwU+1wNe|a#i?{GE5lM{z+iHD8dc0tVu=|yHU^@&y#0)ByP8G+ zeB|L!LAM7)2Azb%vGfPT+%Tt}ZU%Gg)hSUh=VMk<>p(NFDX3xJM(u)%p6w15(osV@ z4N}L>z0Y2GFh-3+s~8G8E-1TUFjI;_Fo4Tm2Y*))*vI#-M_ zpjOTb*-jd$rvt7?i-X)$Y^y9IPDkXdf;|f(U+Pdq5rv!qdgoeuXBoI1h}7U3(NA2U8N8;*MBlv86m#_lIetLcRK$#kqwgdN6e(lwckVD2(#P5C5sBEx zUOUL7EP#=SNMA8A8D$bR;jy95Romtq*fX$N$HRKTzJLD& zVDis&<9RMGSj#?$&o_X8lrz1OkA;XV9yHsLv?Z?60 zTWV3qrD0T4qhe$<7UY~>Zuw;r6zL}{+>2=_(%^ALc#&fE4VHx6$u?HNxNoFUEni#f zfqi3BvDjN^!NzoM-(W($nqw!#dw+ycpka(V!u<3Oe7HQ|NB{5-@ty|nl|AuVKvv*! z`|}m3zcdA1KK~AW#pl3k3=g}%T(K;VfUWrWwd1?r|J8CsNWNhgh%piy2g}HMv2@t^ zjIoy*d@X_iF=bE3UQ257@oBRJVaMUI!=y9I#uLnKKZLj}I0tq6$o_F3Kz}6JJU&mu zR|!YX-~x3_gc2%K05Z9|@!$eklZBY>j4ZY}uchuM9^5+@lbH^mWceM!R}+PsmhPrt zqU6uy0~wHPCq37oRKV8+;`8;p6ypxgQJ+%+A&Gr#+znKCVfsK{h+i8H16g*HQ4Sqr z($rJ|^i0Ia5`Tl16Luzi4tB-p zz|Iais`oT$1n~~ZLQY63A()s<+a3H�H@*5%})4SBR70=}w_%)Acl>PB;)dVL_P) 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 A!2kdN delta 237127 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

HjOJ`sUA;t&a{{R&&56_eXsC#`O@ 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

54+F)}UcU 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

1CrOQw`)m&V^Fz+?j>=IVxOZZIO1jzi6Q7Y8 zo(jO&4r$jqEuin^Fj7pE%MYA&6+$gyi`lnqAM`5r9v&CG6(UzclqB#xAEY1_VM$-8 z{UE1(nVNM#%iHS;9tbZclXC};EV|zt5o{{ z201Ef9^*mI8%NXL^&?_`A7kP*{T`z~I9nyB@31m(KSUDuss3k_vueA2Q2@jzM>~mJ z2qemu@w{`MPf_IS1CP?-T=N&wEF6zhwEg2wiWfrK)>Poh@JdcQsXL);kl<1-j5ayw zcz-g|rWg5UgfwZW8Z&_se;|3}j85xM`thXqhH<5ASwxMYTiu+0C({yRIx*>UH%C)% z&YW9Gob8Xk@k=I7Jm3$%e*4M~m*2x@QGe7ZYp7Hk znvtSGN_gvPy`O@A!S39`KL3VOx-h%z z%bpUWophc=FQo0Zio2q-xAnob5b3O)!0LT5ot&j&XXyii?V4?e#_Z~w1PhEh2oY?W z3ZrQ%JbLJCT|t)7$xwfij?tskNlIK&)(F`FcGSjYip7S?IYUv#kO zjoR<>7deC!h-7RGkt)K62zFvwf1mAqBgLyyk~DIX9CFM~A18S&>>Y(vM(ecp6DbL= zWWmIkcI`CFc3CeV?QkqdM!RdT6(TuB0-0%p;7MeXZIQL7M3Qj}cpoG)*f+u$YnL~n zG-^AE=>k-LLRwxb7aGT1#$yZ}FeXH#5>II-*r0?Z!Q?|Q7{#=+U37R)SiDM)9y=l4 z2*U{$SNT}3r@DTY8kGvAGiD`+EAy<1F8jC71D4TrV6lQH1#O090dFnP>O+#mFc}>z z3_^67t}m|)pI8bjRMDlK@ROKs!v54Z#(ZK)N_K{Sx_cpI=5U6e_*B`|%n3g9S;Itx zkBB4a?UN&kt8BYnb_Pw%JNqzQ*H6JEsbgb(&t}KF5I(*}w>j+ev+DVh3jH`GC7m7C z3o#YFyaeLPSauzdnEDRxFT^xC`(5M33H#;3ISv9Fz1|5?2s2Ffg)QE2l&Gxj!8iwL zOC%qEc>Kb#Sd-85ja;r=_CWVdX<>BZN_*1EVA%!qS*z4~LXX7cg#D_-YIBa`8#!Ot zlBO6bU!~URjnnTWSKsrpztZY`joTxkXgq8wVCi6d`$^Z(`ng=jcx^FR#qwA-))yXdCH^ zAhDQp)Hh0bA*CzVlnHqwhYP)Tns=fHQ7Ot*3&cL@^GS?_eAx-@d!`8l8>SIrz@{_n zK~Arv?S)=XCY@5gr+X!>2hI7s6GCRYy}~psCQ8_uvngD$IC&w8t{iic0wNmICTU-P zyPKg0MRXLA+ZLwroZlX2_#Wb2k`Vu!u;&RS^pI;as+QTSQqCQ&QUl`B(>YX%FEGl1{5inv( z;_ta=7Gaa5&t?@zZpwP>Qvh1Gh=QArdH;;72R7O`Aq)Y9hf|VzS;VpsKa=255B#zI zkR7EXbJ1;R$vQ*WAW6zM2RbORZj=`2UFlL=h45(`)=rVj>nV<4xu};$#8YQ~&MCx? zf9OoqZ7JJDelQ!0POk*mXk9Ou^N_xNRARX;xn-o)Cpjm^xG$h-$GEDO6$2rBN3Xj1 zq;03o%Jcj+TYANLr*+r3&LZvk6PN4vSh+AAX6@p`rA#~T&>De4DuLr&wD-tLkSF}M+i87EFwvvMeRZvu1QM>(qoK`fy-KKy8=cE#sGh=H6UN9~mB4@8_+WifU{o>#lSGdaW&b!c-i z`tkX*D_Q-j>WAzLA?vwzH7@xI4(EBUFo(LNC1=V7YM(qFZ_F_lHg3azV&!-S#(9vo z3vvffYH!3j38C<;Z^Xc&&{R^G8lkhX?HeKez_`QFp2`Nq0AARl@%8IF|KKO?eEyC6 z)Biu_AIpLNr2hl^PmO2_|N6hY{ae5H&-_>Z>o4D3Y2&2iUHb{kTrY`Xf#ZCWvRpb^ z`gFn^T(3XSTGOuNL+Oow5sI;=7tO@|Sk!0dvTu~j6c21pMxu~nQeh_JWx9N1^U#<#`GqC&`CQJY|xkTJBEy< zB`6F<#$B5-afW^MNhBQX$5Z1R^w6~=#lPw%fckKXzCkR>E4J!oG3nzF| ztl4#X_NmdLR2HI4$1#~v4-B79D$*601!CTDZ}j@awxSM`n*gq+l$5ushrT)Poi-f{ zg&d<^xHRo9*4OfXY!CMRJ58OYUM3PG3r|E00%6Qf3K!g(9*(w@FQtY*)<6Cyc|JO5^`=dA5(c2<#tttr3{9 z)9a}}XAslT{Ygk)$T12VW|P|9DGQSOLA!7DNwQ3x6QA#Y1WTm2bDnR+a$(lzV(JBX zik2ueCXJ)b4DSayU+IM9wYoDW~1rK`F{l?{EQm09i3uh|yvJhLuf)CxsF!|1U@00{>t*~enQdY5loTPG7 zrKO(?*95|UqBCn-H?yJ6otp?KTUq3Im{m6ET&@c4baeo=j%BgdSusZi22D@{5Q)FTpU3{Lv9vBgZe?xOIth=)$A-}HBh z4(7d|O7C_Zuo>zchCHDg?Ktt&8J?jHf(4GdfV^#gbi%fAo(FSG-hTXv|IOd{qrdU@ z;9vPq@-p~O`@Z>;>Pdwd{MG%P7;gB?eEabyj^m9#^=JPX-tG^2KL~jv1(>0eLxf?} zS$RBuWIE&`ML~#}Nu$rn{qY9#;N^GzELJCH{fgHI=QzQ#f&%P>6gejJM`b1`d!p<& zJZ8>+_kqVqt=~xTMv94g$kO_Jer1kKNRZ=&7$bdF=Dc$pwnS-V!C5H#TG@}?6$l4DMn88yVR_7HK&;Y7x0)5%s=i8Wx!Rv|Yq0wgPc zq*55QLtoa}5Au23MBpep*ky&z!UE1lEG}X?kn)Qzo-WcpUf1Vo2%zjyqp_m!#%L9$ zxQ=mzPtpdx6HB4bLSQW2g+|bQOoA+f#HldEw*3z0@kjdiY_IreLR+PPj|lmKheEGk zNqHmZ8?!$3*-*lVQohiADlQ#1LQXt?>rc|(j7hK^=RuBvPEr?b)I~@UoFngr^Zt&F zCox_L`L+_6rUz&$%+^1pgckIT3hpqQLIj%qDR$mFghcP!Jv(htVUT!on$BV|G5r(; zWA;Vf=*x(`Q&NFmwPr{riDJ}vJc7s=mLN{1I~_%%?`>42;5m@ix2{-4~Qjl)>ElO*1xk= zLfRQkPO3b@^5SKAqw-bHq7<3UNimSOjcJ8;+{q#H{`N-iLW-5!&K!g19O(t)1BJ}+>CZM ztl1(sD8?Gf1x_cHNN*2yVWylx!8`rzd|zUK2#@`Yg=r45MMYYYp}9qJ@!*9SL8 zMl$y8dxnctUA8X-?=%J>D*n~ZgIOXe26{timz+fn?oA*1-pJ*$1Y-+-$mtL$ixp-X zL7C%goHtym?z~j&z8>_gpGpeN&J1cG`$~ zkqo1HT@PP*<1I#*O&%mBv#mW!089It`AbVL)KVmw{oJcc5+xDWOYX~cWCqlf_h0qyQwp7#7 zc=oo&ds1sV6YuYOAjLw+Q55hQmTlR=M1H`Gi*<*vQ$EG3 zOEMVS5=lBPSaE2SZ6{8NG@Z#_E=-pjDSA>79FxN+en;z%Rjht8y>lMYn2TsvF^|m9 zIck#@rQ8$>@dTstJl{$AMvgjM9HW!s1%eWlF>LZXJ-*4j8#Cv5r(7ao3Vf^E6L?kd zfH`Sl==^~*En%~N$tYl~z0x2S-H2n<_br(^l@=qtp8C5oW6lRL?(}{L{yYQ6c>q%? zp5b_0nJqP>rN*H{N?5q8KuX4~Qp%O{_(qP2R`ueVE_#P?;tkIJTNuV9@Ls>MZyV7j z!8W`-sOOFPH?L5xN{I*;d_vlQm&+)8FPqg*fi z@O!`di~Q~1{u$u!{8Gn#0QTR8|K(r**Z#Tx*_U7a4k29`6F8sD*{Jsiy*Yc@@C;`= zdHwRLCGK&5Ff8C9trBS<^}viy($tK89K~b5`Ltj?y zKQ4s4!?L?hB01~oo$_sYVgjQ+)(So{#>rkTq6m9q+g?|6c9JZtU)w(Abe6ADIrj;z zF7T>hIpWsvk(YUsMY4{ox1oK|91mjtB3ktTvXOFsq17t-c&~(9C}scL2ld{W!`b$Y z>C3@I;(2`Ivh8A-g|Kk`YT!?V@Rz=0EGb~asET{9&x&O!`j z>*2dJ;2~ywG}_cSj3Mb^H0ZrCIZ0_(^cW*=MgF8YHS&S=V%~`sIJ<6!_{T&j5>uvo z)lxkCk8AG`lu>A_m1U{7`)2C<7{9>C-r_3;zghJ5b$~EVKkJRF-zi_&H8DX zwz!jWfN9kFkj}xh3kyj|o7&z!VY|I4!4^`HE}WtL=UiPPLk};6Y3kj{DKAV=XVgP# zmmsD5Ry3}i1eJ_km@T1&l5WORrF6GIKYojU*^Uj}o>ZXD_~>gaH;DPVil_P+tDZ20 zu-f$E9KDK&kn%Fto&?)O*@#mKP%{`EVqBVXr;kPqn|w+Zz&7E!>W^TXV&haoyePfc zp9+Qq`%G+h2czhF5k8w#YEFH0&yWdxG9(v7@qKB&gV>5=P=^fP?%%lXf57|WojAIG z%J2bdts;VS`P@P>MyohsrRQ~f_wl3+!z?q#gWL6244n7h{u4^x#Dny~9xrqnZ5-UT z8_!2wdt4`#oyYx+F*{p<=~2?fX+#W*lUl1(Hd=a-LT1jYF`^x`<~*MVTME?CNl2g5 zW+i(T{U#V;3NWlLhB53Uy3u?xYGq4*8|P7}k8gZ?`)Oh35>CdelDz-^fB1L!U;jJz ze+l?M{Zhw$0RDf5f9J2&!009ij1Q_$rEl`ams_N^L5UfUmD<72s@d`q>SYv+=uuaC zZ%&_s>-7t5KIzXVX^V_)9lIX*-3N&VU4~HY5*)Ke4j0;tgcvC+Ib&9TKFfjL zo5nD!v$U6s#DCs!i}>t}^B|-|kBK;oICN7=3ma9Yi#|jGXQ{yZNw{1!Jvk2%&}SpX zN%X|%kLA9b)Z-h0vaaHj=i{!>K-d*80%~t6tu|59%`&xD=4e8n_*1%yxf5*Do+&2W zhd`oPJ2wm>Mr)@=b5T9@F_DyiuXeg;V%+GiGOYK8jY*pa$&$*bYab9(QPL=0nD)en z0vU$W=DE5)Nhj5y@m_0Hh0PF2Y%BGa@XCfL;OZA9&Vniz6~Wp%*j zOyHHXK6HMFjhM{sT0IC(t2k+(0Tpiv}YV|Zt@hsLL|%NlK>$xG&_9?)P)36aaE zf2$+CM|7~P;133J|= z^Ca^MW{S*nC8k2OOdF4-?||W%vb{oo;yv+r`$^B0Z3iE;UP&o`(`Uua*y7H!503s5 zIlK_fIF4_6i35EIJRC7PCldv1q9;6Rtf~rP*KVw}1(ojXF>#(J#K!b(jgp6`mFs0E?O$|s8*d!Poe)?j z$SdPKc|Ly2{_;D7k?`0^LtiqcPB^1}!)GJsmo=N0Qzk!urJTnKxnxEaCB1iNjDwhN zZ2Rv}pFa_cbl>xs1RLc2d)oL0E$f6b1|(6uaX802$)$vji$tIiljE&JxiPx5y6W_1Yd>O?bfeBnZ|@8@ zEHt8BRJa{~gHU8mmJTDU-QFiYD{b9SEhM@Ru{~nJO(*lP2-IN-{A|%WB1W`Cv_KdR z`6k|wMU9+Q!v1P2eVEFeUZ7BCWB1Kkv1NfX9%K@ zFs6#hqv1op|CBa@O;WmHo72uiCvY+Ymw1mmt=|bIBEIAl144#jwD!=At=f`MZj5?| zk@O&*jpP1@#CX%LWGIn&ef?e9S*gbp%t&PyptjtY{a|#Bxyw->%y!4UV&O_MqmP4D?~B2gIG=BHKgsbXh;md&BH9kM zlH$e)P0~aP*Dv4Ek49|=WhE?`h1Ty_TnB;S!gIAZYCmPhwTe^l36FXZeeJ4(SQ)J; zlD};)*Z`G4YQHdrm_i_=qOPE;;t|GN>K5%gJ)l2de+*p0Ca}P4bRUEvG?kf?$zV$P zw%VDYDSq!xNgFdXm{4M3+9b!acE*$J&hdQkJSR2>FP97Nb@2M~dpzz>Qrh_TcxMZ# z1Hb-7zoh;Z`0M|N$p227eQ=O)+lDWq-HZ_ zxs}>OX2MLBw~c9(N+uzEUyR1SbeV`;<**ZczpgWbJ*zKAZpJsfmB5A9uel* z*1ii;D4au&YJ4!liSODKCVq7t0tLf6ZPQGZB;Qq$yvSO;P;b ze~tyJ?GTn}*|V0sDJ>$rBzdu9+IeEG1$Ccyw)Cp8Ps;dsu9x`0$6U1agYFu!rj%D; zWe}rto>g|>>DmPu@`-ultbzcmwA{$+)^i@eCAJq5le0InS(s2L}7I?*+Xe@y8jVWme^9K6#{$HzgwWPEW914fvWE3Lx8P8O zN7dz3CV{ZX>cDJWpM&UlFN%{_#kmJ}{k#8v-2Kb1b?dg?2mM-mFTIa3=ls64fA`t@ z+;S4%Vv`%TBZrFu1&|Vwprim&3J4IAg-*-MWAy%BTBFe3G1sAHS@O1bc4cd?wb%OQ9HaO5ZI|cyJ;`IV z=@tdTIB}cE+^~GmXNy>qRGG6;f3`}g4H=7`k>aw;>6y`5{5*cAN~IBM< zDMvV?MV_1J4BqAbv{VEey)VD_OP?q8TYrK-Yv-$4`Y|~H3xzUn?-BWy zE5)PBsWqzPefty@#TFd8)=$Q4JYPTaE88bh4*v&Iusqr8XL89A$uS$P8QUI^O;Td( z9xnE!TpMleH#C!^;wn-7f6CN#2@8rQ zBg77Ia0ZkUqMP$>NNG@GSEeKKedrC#(Fr8CAWo|=(?G1o$S5bqn9O;u%%?j!?aTWW z(tFP^O~Plv;%rl4?mSGTpQw4e`4@ZmrUXiDj1k56-@7Qce&Wt{o=Q~a# z>vI%C5?S{)S}^{w0N?^8Jw;B@oRLi=38|H2%fgVhrIHLuc1{r(no>rR)8AhMY;224 zo(d`7Fq=3fDB`Jx=TE}}IOi>d77|5R_|Fr4e5IBrdViyoe?4$SbD}m$Wuvu&J{nto zL9tNm4k2Y_j<*$JnwiHvJ`XzWIM}vN7#U4Vq~lN>OoUQ5%sc(Ohwo8pQ2S?mW~55H zy^<_OztiG^Pg=Qu`5AQ&6qK1oh~_Zn`HGE6eR^ij#00kT9N&Mx({68&oSAmw@mtn@1ZR{|HR-~#XoTlY*y=UBKBJ*!fL`Kq5o52Pm~@=z{4U!QM}MQ_r==oloMZ4* zpC8dbe>f4qW@c+KY-m;lCuw1f{`|lE~|6J$QQ9L~~mH zkOz4nE|8Fam+*w-xLz0DhYNs;zN}$7wk4^?!g^3@VxE14LbAvXG4555%q$-(ta5qcdUujW zDli@@&d!YDWbraZY*qBmG^eQ2M`MgzAg1&o04iZj=N3TPOo%N;56Xi_oV}I{^ZXKf zl%&hdz0|4Z428OVj`V;zFp1|=Q-%~Bf0(r|k=86J7>Vn6n&V{H5y0v($yMU}@CgL{ zUVX-1k&M|bL{TdX&YIz=kRF8gwNU8&9qN_rdF6ubxMUJ1=V)Yhd`!BJz(S#6I7x0KZ>63523wy_3|Brt5 zcmD0)H}w^Y#WIc8)1X37Bp?Kf4nAQ;>`!@Lf)d%Z~cyUrRL20?OW>pMBOgzX{XOS zTEaU3(WMMKsQV=r@E(|%oc2hA*B+Jc@@^!lF|y>~>G?Ne>|}z|)_w^}zQ)pbwm3xd zQsZevfV-VR)yO&aZRpC(3V0=Av@ zi^T7_f)zyM!IQy2Idx!Q&|c_pJ8&A91212EXiVAL|GS+Iz~ycI~nBs z6o=<1%NG4NfU@Eu@-+G z;VCKgvQ&bDafWJe+KfL>f5X6S(@`z-(J6aHWCI;x%0xNGvC@W@##sf#IPZhKW^5%P zM;K@D_Iw64L~G9abOjxSyd)LqqJa#;T|Mr;^;xJ6t7(?pBXY2-5mUnN(zsCU`M3K>NY}+&U^9yc+}% z(zi7fk+UC5!Kozme~7Wrj7=w%r?~V4M!&5^(}n`mq9A%;zZ5vmK(zTd8Sc22Wzh&- zq8aO4=!{#7DQ$|W(>y10geh1h3KO3mxoi7|hwhK_2r-CTh+aVGW7211!&Xr|ndhX- zB$rI@PM|L(60cjQ9q;`7r#~U@SA@j2rWj)m!1?msS9Ghie_8mOf9I$CU;d;1CxO5I z%dGCpf9${h^qbuU>l4}Q2lD1=zXl;f2KRPwNtdWtnnq}$8h+lflDJ%+7|R24yS;P0 zUO8;=#Ll%O`Y4R^mHYdhR12wIV!Pp-Q-qQ9|xm#T+WcTyN2P`BSK@gXd!grfbRDjS%Z|J z(#R>gEMby!7-{D?nf;BbnbYQyN*lvqoCme;NIJ5;QcKD!_iu%qRhH8vv&7wHcBrys_BY`%Rm~1SZ7%5 zsU+j#q0rMpwt(|a8{{>joWqdqvdrL)Yd~OUe;=p{xs(tjY*%JGL&*u)xN*+B3ZH}F zuyJKfBNNI<$kFB0jXq;qkW_K?*cXPwEn?M&QEHGRrhsU87JGk%F)(+sz6AK$L(XqO zBP7=+oOilMdbOEB|2dwvWh7Q?u)1+a>l0=-`f-m{fKR3m{MI8B(@xYUV;EbhyuZIA ze>IYpeI~T#cs^a2)5Dakkti^xlS^U}V`Rw@3D51Ij{xmz+87>czlZ=bhA;0~B$$$i z$9v>XGsTXRF^uP2spSG`r=2I4z2GHdr>#ki^34yQxt{~?o!|TI{+|N>-(Plh-+%89 z|FJ**&)OK|twc!J{K9!l$d+jHwzz1Kf5bY0a*6C1&6#5~YAH*4oKaEA9yp;bXH*-b zZ`6``pBrW0Fh4lnzhHB+ZC9qBke#d(DI3{4Nh>FjIn%At=Rj<5DH~=H+m1l;O6y0M zYrCK$p+zE)u$_=A`^z&jVhm||Glhxu8|V$qJ_663|*8hyNls&A1;wsKtr?-`LQe;QEUoZ_-h z66544J$x{0e>1$1{3-lYHb`2-TrM6$g}u;cL%78L_wo(HoxBi0NebOFWsQY1;qf!K z1thMN65}DT=#b`#X{D4a-8x%R?tPMMARg7b6QEe}$!K>{c}57MY*?v|=$Ib@BZ*j= zlAogMlfu-A*krDMSIW>^e8Z7d?OCsBEDcZg)(TF}{Rve>1_BpRnUj>utrY z1V}e|iqF&^X%Qa2!WOXIuq+tKjc%QJpW#(JoZ~#P!+74GAV&wUMMv#pI9(NHIs6}Mh49Y5mimjksv!-jD952ZAs3we;fDL8{2imr-xXec4~P6 z8l}_-N}Lvl+l<|p>Vu0`aCI1<$#4%fq)SKj1>=C>c!j!kWGCl(_#_PW= zCrA|DgG}H7f1P$laH9qQ&a^YyKx+U-x9y7BK@ZnCf89ZCvXw9b!=MjC#A2DUa+KP< zqeIAfV|bvOM0T9calZ#1NP*c%`FYtB4w5-qHpG;UkgU^3L}Z34N3hoMY|$}zA**AW zgQ=J*o`^kVTAy3eyAYRU~mAcjj%7l5(^gC2yph7K0OPdQ@}P zD0Qdz$-Uo^?4T3{&%d8zxL?pE_1m4@G30NqI|S|Dp;j3d5$&9QKoE#~t^5G%~^^8`Q1B5cUxZS^yQsMAU8z)4esCBDP?0Ye@Ql( z))1{>N}fue0RncLxKGp-vjbTKYOICCTPxisDTS$7lG27h1lo8`WQoy|Nkl&|ErRn1 zLc8OrIwfBaCUb(d)$PzpMxd=E_Dnt|qP{Rf(E5SOq>X#1-qx-xOJaEAI1lC&au!5W z9I_Hd+aReXG>3ZdJdRNDmY{0Xf3-)Gloxgj)D*3ily z0rdDgCH|a~qz&^6QzmGJ%K(JB zKSMKy8D~3DU4>~Xs64GPx^q9iBBpHD%)rR*+|Plvh-k5tnUZ+B-`U`g{ukkrs<*eV z^K5s`X;A8Ag>*HlZj>#Ne+a2-pT^`Q)r`)}q@%v}Q%QM0?(7QQ4RWSQVDsP4J9FF@ zudBu=MwH9T3%Bzt-a?_HLwWB9;w?HCA`P>s;G<&;B&rU{9Xsxv30MF|7^p{u0?zx} z&yg&YJu{l28t~h~Wr0t3#GPEWh-??=bAYr3ajg__Mt{Rv_=UIqf6DE6C&|v72k(pH z*ZUhKZ_8M!SjyP_TdYrx_T>XiDjDW{r}rL%U_YqMS!MSq*_X9IWH4fX+gJ$lW^fj*26clh=5tmTKrAu6>NtolE zBsJnu9Hu9vz%joCe-?{x1_Tr}bY?8ISlrJ87Y&h%N8XeY498S=s_yiD(p$$x$(rfC zQ}<7_b}UJ4TPD-QJe<5e1)EJI46j;ZS*;=HKq6v+q)bf<2YudFx_MCuF%IT1%)*##Hc6_q;}-EO7&X5j3`U!wd}W5**@BhlGpI0gbY{M<;;2FzajEwf z6b7A4Ng-g7f2Dp)73*zXx)CfnB&He<5NvN}JV)J0S!u)Al5?J~@w;Z_sa9-)wgm&Q z$?XRF{zNCms-PRrmD_peWq*qA9S;uRFxosBZj`0^jn%9%Ot9k%eIAJJsK?H3^v+b6 zea8N;x8-L_jWHwK z(t8wb)}6E|FWU>p3~px4Iko_!kyGMyLFeGsPR{omw@~@~(qB@4a=%dW_RQ!p4jOH; zUq4}e##%w)-dg z?e>oQe~4;z-$5;2Pbrk`N^d9K8)HoN{DN4H(cjAX!6VPc#^ieW96}Bom=Ni?S)%3k zg7k(H2%FIcs*{{G)Pf!E=PS|@PftJK`SNSD{w2m!zJ-#=Cr_6b=5$JaMkR4O-Vigk zx-o7i!;Dm4!sI$%aSm#E!gPdW(e5&IUdsB10NvDWU8$Tf34O zyuGtUG|OD?OusE5K}GwRb1qfk-f7_TsuIVac8pK&vaC`X?W(wM^wr#S>5cHU_cN!hZOMZb4? zAGBs5C)mJ>u<6cizT(4qza6Bc$UI2f3u;cz8JSL-H;{&pCocPEZs$Gr;HQz(#{GQd zk}e!)z+w+~G%GrVTz0fZ_EnKWe=n2U>rcb}V4bQPOn5(T)V+owTVSBH+YNVR!0}6e zN&RW~t#Kv>ol=4)C23GgP|vL-$|5M&eMepKWI!x%%`8IwwgNLinZr6}8X;w7;bQM6 zB}a8el#9TX=xBi7`Z)DvA+^T8OpihQ4TY6@W zgL>Vff*f~JdLmz*FeZEX6zG*Pg8xDKozn#$_fSMSpp)5W_|04vtwgww`$Mpcs&aDDTO*fBPKu66p@ce4 zEIeBjhC=e#vn5~NrkpW4eI_a!LmWA0K!RsPJN9-U%SET2q3TLc4syhpoi_T4fpJ78 zcp@i>&y5T^7_LaWe}$hdX@prih$q?zNi}`pm`cG$V)(>bs3}LE=_N-*G72&kmYe?^_aGJwXJ{~mBO4S<p#Rm8D=j_*C!yS(MEBiiBo|&#(E}wCFe{>@z5sEgAT9s0+9OsRCxh^Q{ zWKR`$q0J-Y;`N!?UNIkR+Ye%NG|upGrNnXncFp=n0Cz7hjQJf#rEcG#X1wf{KvJh4lPsi7gry zb2rAge{p^KF?04vzOA3}d4y?If^F8u9ef6+W(>CdQy31Q=Gh|y zQWy0(Jz?`;ws&fIVrG~<;?Lc{<{24IeljKFF6=pnU_~VOj>{}7DY%8L#Xp}*;y4?O zBgog{xI24&0yf6HlXJqeu9q}&yV?lqw_qe|f3(qp$2g573G_lgzYB9J0X~))1P#e4 z=<~#mAT4upNtttw5Gf2IW?de0M-U6K2}?APRy2vaVi8nDA~SuNp;M4EMt@MZ&xHXC zo}~;8E5K|>R;bI>@2*_Jqa^`-Ro$4plZnwF!bfUz&^lP}q#{L`x3_qY ze>5PzfrE)I(3iP1f=Lon2AL2!`J!rE>k~tIq`pfS!6)*8i3$YUSm>!q^8f|g+0e^Q zJMV<>(gbJH3wZQ?ZlMxPr7*fNJyUBA1dAExxJ5RV z!}PDQV@fa4HJ^R?3!S=e!6&@k>FpMKf3B9qI)O%1!aze#`Oh4~zxg+U{3A8b(_zDOOG?KNL)U^9azn_5s)697c`j|^yIO%Qh z_H}SmBPHjr{gvY{|5f4=X~q;9!jz7#Ee!9EwUsXLuD(cb=YKI9dZ6yuJNAMogNiD&Zl} z91N{KK_(|NNZ`XGj=JB&kSUo|;JCjdIn(Y3v;UN`T~UuQMAdKNkTxf88?s&T9;&p~ zB6b=NY)~zU(>uOB;Jq(m++i0&jZ_jXXzJz~n&0p$H$qy$Ax&~lB>Z4T=8Og~R%f1gNFY6+j* zxV@4u&$ua>kjuJ#WwZvs*^j{Cm|}XPq$}WTxTXl|?6*aa z2#GeD!voeEIVo*4_WerEg_(@8LI4@DR}91ZGgH@hLzslyxQ8#$CTS}7`5k+HqInBA zY}OAd`Rrr$o<`a(v|H@cvd8XhjzP&gw-(5rOTF^;9=IjViBb!8e>A2qD#CQ`?Msjl z6uKE?#m5MyT}r4c_jZ!SBI9Zq*Hexnrk3=W*2bm36p>jICC9WtlSG&50WVHTId88Y z^p!2WpnBnczjL`1X6xY#lLU6h#vAB2ob3h#GHURSnX#9RTRX|Ma=yKxIr7Nnc|@2Z zox|>k7Ha+>Q(Bnre;1&(-%oOJB-a&JT zemgk3Ey<*_Aq$q>DVNG|KZ4qFt%-I#z$crGDlZx5$k0AUKy)*!PXw{Z3w$=kOaP zU3hu<(R!J}f0P>|F2Uqp$P>=(Sha_gO>O1V_LZ$bX{j(6jJ z`zg=Q->jIOz*I^4#Ow#{euVd|b?RE~n@_&`$=_n%KT&Idee30k);n)sf16S(rCea9 z*yo61^Um4Nb@>ju8@X(pJ|ew!bjIl9T0^nd8`gr*f6>lHYd1or zlN4D@KH8#)-{OKIp^`{qG#~gFWZ5bC3DcM?^khiuNV4TsGHhy)CdQ1MX5AS5#Fji8 z2eG)+?#COoY+<I*_zK_qYxn^V3+l&lAZ%p4;j5qBLADSV`8+vCWuAkY3iok_Wnew;hDY(5ob6KB z_6x_C8}kPL$xrwl;Psc9-Se>Q&>T`#=@YGmoc16?sGucNQSRd_m;DDT>n27mDv;|QD4_FBkreh|WB9~Zh+O1Fm2lMS4unB5iG+Y-27#bkLvYIV!Z`21hGOB-S)&;=f7AOB zd0l?eI_&$ERCez7SEf08-8gRn&8+(;Z1mvimBj2Pqj&Ol4dAE<=j|5VgGA<5&XvKP zl=hW!D@+ThsXL5ui{EoD;A-6%b1plAGTK+NJfkH?w#|&ZE=e9XggwL)GGm7@=fKR! zn$YbUpI?tZXLyT!NG@cp7#&fkf1RC_HZ*6f_aJ2uW2yVwJC|C}x^ut11w1#ftjs>x zSN7KfuLMzX;>x5)+Aa}IKiddvn}k$45x$tn1A2?Vx(Q?4sh20tal<=UH!l0OBfKK1fGlCBlHYJSj zZV`Xuf$l0Pk=CBi=SePwdw)l5BO8#6pZwnMU@1Yj*ozT-%;CoEf9>GQ*LV6bUi;wR z`~UD){to=t{%$g*{$XbK{VV_5|NgK4g|hunB`H-Vsn+0WsWR=1oGHubuA~}J(QW_4 z7;p5U)LlbdVL_iR+eY`vmM)Qqsdr=wNfJ$?Z7wL?8@bk%DYInMqmwjoJMNTSAzvfB z&6VrrY4O1}G(qo1e@a5GmpG6N_FOTK6rkr?Is1udVaq8H{ZnGJA;#Gc_Wcts27N?D zRi%yB=^tW*&O5lgS843;8i-DZi5ELdq9jkHCqv$X?5NhL4ZK!hUB zacAD|(M7fBQao+p!I-bq?K3Kw`?tSGDvA8`D}lqwF|twX>zh{5trWENl6vS8|{1t)gaN2N!k>jF=mkJh-~!s#$KPo)pMN71Sw&3#nDuP ziH0FW>_HHm1JKpg*>8-QXEmEs&hUr#> zlAY)=L1@Y_ zERtFrY#JhPhQkXum ze(?1C6v2QJOiLk@io-ijkBI^y6p@jb^GjT}y0g_v>nBc*(8cji7Nyn~3=1r|< z_tW^&jlcD``+xM8-uRP$Hv)=(nAv^**1!L6fBo+N>7V;=$^UHobY;6dbG9DItdhtm zDQ#>|N-Y;UZMmRNs%~sW(NyUi%x2*NXHYb%CSP*f1ISX*scbp$_aZUFJ=zMl8%7gH zl9Ow}T;V(+N$hTWgy-GnL6H<8W!sKsVZ2Xrg5D1-UwGP( zaZtA%(~gXZoqHs~N@VMRkxRvO!#P8FZRlNMtTFVF{_L8)6PozCDbCJ6&0e-mzBe@@*#MYMTyY)uR9?ZB*|DN=Hi%UT+g z*zpx562IRWD~D*GzYv2g3(@{mh&Zb70dWcc&j{f@uf+>~OTGe|A%h zS}bqumkYCnKjwZ;syaPK7o#qyk5GboBdz!sU&yFA-bv-c(N84xb%AL--`+n&4AL88 zgvg?`S5h8K-vi8=R~L9Xc~?d|xvXH!HYUkKDd;8<4)!wtC@g_js;^kdn`ne^d%-DMv$uaUv4w03}6mVU|E#WhQjz9F3$Y2z|NG zj=2&C2w!DC*z^(vbTXomNIkuA8{tu!Q*Z`*4fW=<#->~F4gv2T!WO^NyV2aZ>^rRm zFnRWSL|XVn_7||qm^bi_=7NpEdH;^GT|ybGJCb&KkLZtKwno(_Tdv&uf1Q3D%-Pt> z3%B!~S}XKK-Yb%Y*#_@tkYX;|&U-&1Aap4;k+BUX8MdBF*eB_snxAd zl1xqvA7cTdC%P$2=gXJKUTf{n@pfZ4G;g4Z0%YMS!rcD;sQi9m6m;NM{^$Rd`v3m% zZ~gek*XPfaXu?_^1|IiW@->XtHhGZF(NlWV+4Vg;9Ice5t;%Qa#H zdS}Z!x1;g2SB5lj4W(G#x!v9<8TRyy7U8%bNNQa7Sj_jO~8kj0Pp zSFUxV?*^yP5uUD>fQ+`mwp9+B6jd(Q&y=llzP~Y<9B*%wx{)Nae{G4=JgDX6idpdF zYP!(cS1#9I<2+x_4U;b}q$e@X>rUXc@@@KDnKt0NbCQfAE=@Eq-lQ7_74I7J?V|2HEQ4nYPLDkPI0CbWxx>1a<9cYfdAI@;Y=ZX(W z5!aD5c3&b+e;;QUa&wBu%AI7P5>$5@lSJ%3#~G~5K2A~!3QCs5=!0foskz`*mr^oO zwjJyZ@oTVHQJPK4p6RzQcq+IF*(YrnbxkcAgOYZvb*9@|MFbUIk}^qQUQV$a-OJ9~ z`x!;uIFOuUALzemPYJ)PV6GmiIHF5mnbf5`^kC#hb@dyZYB2}zavd1sij z)kTNw#>VJxyjCAs9MtoNZv!*^{iFGgQ>x!svap$@}e& zh|q>{4B@;t{)7L7-}xKx&j3IFW$vT^e)f4!zyHmr=N}uHZQIyt;T#rSj7~~bUhj9Z z3spC)e|Ls1fq=)X)aDkm)D;L=x1A(;No~XQ*%+j3fmYfwSPqlie5Y<#`te4SM(u@t ztGMmF9q(*f=;qk%AWOwoOh-Yuefb)`1naa>X!njxsHHGRNUNtj(v}9t;fTEQ_R2!B zcmQiL(9Zk)M9HMfhWN=GVelJt+y-0w5*^ZEe;;{L(>%tT8siKd8$D0vm~8bEs*aJ^ zedGPSg=}97DOb!o$L(86y->Cb=RDZ93q?yD^ybV3pgdl`V_rshaoS+CuSmTxtfSjT zd;48-+DW-aJV;FSVH)a!r?pH?-#zd+FFHkn7Ip_Vxw39v8Wv;$(o3E7e zggj@isW`j(Xl(2y@|a$~epv>!h!Xhn_R3CX;Jkf(<+A61Lo(?Y1-RW`*|v;Ye+ZQrlYw#E z8m^tEmnY_kt^`Y9%4zRZGP-YQ8|0cW@7&J-yowgwGi}~MD)+NPNmMFTE1KfxFoA7* zVhSYNm@BN1^I*8KU3Q#MtW_0y9}%V~kv1%;Qi#eKj&$U2w(bBy^cVXa}=f6xi-eB-iz`tV*{Uw(wx!8mVhwIVV&?_cpTC>O=f6Ca(l zJ#oAJEIP&d85<|9-D5%9C-41dh+n~9Id5<1_5{2#XQ!r5aS@PWS5_}kC3(l0wDD6= zCrcQJyY+|^@Plcc&o95qdA!luflN5Gj%;ibj^w+1^QRm{i2hfd5X7krWnVB|y#_&3tWqjhe12iBzE-=w-*6lhx6j z!ei22nZO)j!rtl?w;SjA764mWwD@Tev2jj@OlEJ)6?Z?*bEW1A?KtV~++N>#x@=Ln ziN;=IVZpR+w7KemfBBAAWXBb$IEh8cFgMXbZ(b& zV|78AGo&TtLAbxYBa5i-*_aZ3rr8geoy10)agj=P+Cq0e|9^m zSODS_QCl9qtTKb+*QHWQz+umE4_2rrs#HXv%@LPXt=R1gscdX}p&jw_`c#hgPRfO( zhPZOB_?y`#i9(e`dfqvY1Id+f9*n7&H?AdUJh$_eT6ZQlyeCS&;KRd@r;~1j^9JQ< zBPAt!#nX-Vf97F_@hFNlB7&n^I@c(YOe%`E*eR>Tb2IxHgqR)?+xHfq!|nXa^{K+B zob8=b3uA6bY1Au}9quRm-nZj-fZzRP$0BWi{$G0eH|n zH0yDYvm%c;gLH}N5a&`hh7bp3KhZv@RY>}@B*KFRRE=~^pOKjpX54`cqvoejHjNwf zD|O$&I@Xqnbq>yL!-s`HU`o)c$sB#KrC?^Ug~Du}C-?K6v|UK^WXQ>uzoGX#r4*($ zT0hvzf2V-IE_uayoZ-8vz8&I4cS%#SX#u3?45_ z%0{;v$R5jhSK2~g&3Pl2m)ND*q+2Y!Yss-3e@-m+Vq*G<_Q^RXwFGE(ijm#WoS5gN zxIlIyI&qL%MQUO4j`hG7^)b+9k7?zfHuw!o220BNoH7( zF*ePdEr<%|ihB6;d>T}$%`JeyT7wB`9+QL_-lQO> zcnErifrkHW&WVVvz{+@k&(^}8u{>m3&dfQ2tdV1kecD7sNMiB1xRF#i4NA!oM>8W) z+J@7u)v}7kNqj5iQ^RH?L2> zf{h!t*v?x`B;6RpxZU6Q=9?EN;Xk-ORi+eRr}cyVvg320&9Q0JTu1_~HO^$1dvqzc ziBzYJgKgVTCQReK8Rd~rG>xP?e{&2{O=JWcgM`w&VWJe#2#E8JCdX!YijHwZQ$~E! zEOA-7UN6w@4Vx#WB>H?KZ9*6X&`iP3#%&uU3PmQQOihV<{|YB; zrLb>5;Oqy|v(NsfH}NR@(i>+x=Tof7#jchRDFi ziOR-kUl4Q3{)|}<{7De`s9Q!fg&f<2PcJ{hROr(YZ)_RFl$2^1g~vox$T=Yz%FC!| z8~3-9=a(NdCY=5Ed3pL3`aI}8LKxFtX>Z?wC^8kXNk49Ey2rT4C-c0A zAQVhR+-X(WQXxCYbxC^9SoU|1r+oBtg-ko1JGmq-^@oe^XJA*vj@6CCj;8e!bSF)r z@kUC4W|H1x>2E?}=hQ~;BYq~E^wG&VqXTlTBvo$bLCsGfvH-4xe+N&DK_&^PXU_LK z_305ieo`ezYH$^%MKE7?r_2Nire)gg&R$AHSdhX`*d{~2B68(C;_%V)wNlSS=SD0&am8`{Q!fk%I!YzB$QN^5aEdQY=Z8c9cmWt zXCu*ZGt6IM#{P~Re*_7&B?uUT4Tl`#{xJ-_{GYT^C7VF>36z&y`) z_EKqCphZm2wrBcl;yz$c1vvi;0hs+K%O#0xBIO;QPRTpHF8e}Gf$T|6dfF(>Q0tI| zHeX}WGlf*2F^Pw>+lfr&oM1Yrnh_JWU8CwEaW?0&UzjsIEb0ncS1h{WDKFA+m_2dD zBu7;*7RZ_abwG;0Tz{F<>Eq6}!M2Q$s*$XF+DXZU`5tCW*RX2zM$ExW4H3Xhl$>az zvtOo;<$NGcQ!)Cn}UdSOhX$%yD|g?8(ZC%Hh8 zO79^*NFz~m!OD+t?ucZL`#WWWoHs6)XWBR;YiG%8QK*+1U4M|pPNB6Mxjs{}V*O6m z3uYU5gAquflm@do#zt!qslAmNm@7@R@s&AFibTRKmYMSgXQRFS6j8XOCmIIn2RM`C zJcD(sP*aKOyB(n9jFOIS3bec_N+f^mCHL87q-E+@2H^jnb&#WPboCXRYRMyHg7x9|uhQO?<7XR07< zsAt+7AHt*w|oQP-)-8tJqRtYbaIAcyOWed^Gg!A6w0(R*4R}c+`o*1t$EI=g z6J+`0`s95E8&oB-r0N!F)BQX-dgpe)y`Ox7KY#jDxB|Cd+Dqy){2^&4-~P_;@Z;b3 zH6ZehKu8y;Qt|o1^ABF=y^$pGei}tOb=xSCBi^E)p)SjU%~wh;QR&l}HbV}cD(z@o z_b1T7agW&LeR~3HF^4xek6U;Z*8NoXmj&h&M!V6*J9Ym7IbZP98Pg-pG;*?;Vpu;( zC4ZxqLUaJ+`h=*G(&RLQd8c@ZPujuM=q>nWxs(tY)G)iZbK)tY<83C=*~z(JD)>Ai z?`AmeiPrAay~2d8>_OI+i9g)=DWVU`zA?@_sbntK9rw)J>pP^%RtxvnH*zi%*_hT) zd4x75-fv&2bt9GV&uleB8~59dstH%8&3`-ML4F>O&tR*}HpAp7ncLZL3R~J4=R4L< zw&x#&Yu-9pLo$vnleC>^evX$>6gUyNu$7IYzoK%0%@1mCs@Jsh?O4u275 zC}e7iok_QoD)DE#wq}Uu_FNkzbe}@KA!rxU(1P>l(2uQLUTe{*9D#oV- zGvP=0TrN+~h+m_ya^v=PC!vfZV4}4~&RXvgL7r-jsB=-Y8`c^(b5a5)Eydy@4fH#s zbLt*7_UWoy3d; z-x=1Bv)w=?g7#Ma(^m3|qd#I~CrZs3ry-+KO5$vHTp^ReCs||v-TOdNA=#ilJ)=@F z@66T%itH6?B@qb+x>S0qf^}!~@WpjfV6*_wnZpih&b*|Z!(VA4+kXVkNjT>X zo7-ZFX55TnGdzeX(c1`2S$(2FNZRR~{YINR)hk^(sB*i%GP(!8*n~Mp6jsX@_q10A z&UwExt8v_qxG-~q8QxTLxQ!D=Bj-%H6y|7*yOFA(u8iKmWA;~E>yjQXI)OM&CW|4da=yQ_?N>Yt zTdE+5^Ztrt4-;*PYT7MDG_pDLfiKCmn@~#*aHV%Pt(4~u;o-5xIh%5xar2=L^R?X}23?FA=2IdhpuFG<#>uPq_NR zD3uSN4<07pw8l(DD$NdBzp>Y+0D7iEUW&1{n0JgBQ3-xhw&&F~1zkfVx>wC$5>y5C z7!QBfs;xm&wqqt^l1pe{7M)2~bvU zk*|y^e06O4#P9?X0flBBf&-7l=&S>I+R=I8xW6*}BwNtH#eapfwNOR51X1I>;W@7~ z;TAswPR?-NI@hOXS~nzh&f7be>nG0E*-Ga6{3CE@&O6gPDi>TvV3?**>P}kuU2}vY zPV5Gkfs- z;s90=rVm(MgMUl<2v0O0Ve9bmJpek&nc!qHW1N}d=PM;M=82&(HeJ(MlSxuRM@&^z zQczA1w8%%Umo7|^8w?Kx8)(GNkMKbula#|oBBVftxkTkC(e-6f+IcW+kR*i=Bn2na zNBqf}BOXTG8RsKw%}D~&PLkB{Tcz+$W|S$4XbOUewSV~8vL65Phc@L41FV*h)U3@t1J@)c5h%|ZI$fXcTsvgC9t|16Zx7UP|=Rn&xi`vxa)Gqq%Q>e$7(YU$QaG$bqISf7A3_vmN*p50&O%GQ%^Ob?ahLiV7`1$ z8sJ=aSzuye`doOM5RGU`%oPe5)bN#VU>YsAIb$}m2;CRuz$3y!MZ!EQ61z|mV~n7S zOHjtmmi*l(B##45gsoJ@n6Zbk5!7&70Dpy?NlBU0F@o-1G}4nr!;l%zZKI^R;_4&a z*GBN}h6R{)+E`ev2ac4EY3oDwUXFsL8lhnggbR9F#NO2r5aGzt1b z5+$YRY)~Pq#^otFa-vegXI#7?DG0=nNCX+qX|xtUb1n(9*roKb;vpnPmzpZA-+yA1 z539pH(X@RWN_|F@eObf~%`rP3{fv$>EoX=)L=waM!lAJyJ{l;qF&M;UV+cNb_^)i> zB8bn}eKNoQ&PStU&0McpSRJb%46rmZ4fGG=XsmM;HR+Hhaz#Te@yA_|Tf&ro2` z;sU(izmPp)9{bWU8^^u#QVRd)fAcT%mwwy$8T>22|MefVPwG$oFaFiv`U}7LqnGO+ z`bYn0N?ZPX+`mAdNO7K@f5_$f!W@bEJUPyerWbPExb7>iJb{cjgix>{SbuhE(j{*W zg0tilp<%=#&u0X^kqa!s?;HkV;rJ#4agd>DG1V%rwt$)8IF}XEfko7{yMFjGL^bgH z#JEV3M^$EVc%nf+PzVnSis!%=g_L$#S!_mRIT~s{%}6{`xQ|sT<`|VkDHFaTAj$fB zkth>Y;vcZg`U4B237H{Y7=J6`Bv3OYE*3K;EEN_=iIicpiKG-2tH*f6%%dYQM{97( ze9AIOw)LP#e;+aHX`N;B;ko=c+=4V%BD;%;(1WkHDnb@c=aM33JWw~r7*3W78siL+ z9Vd24kLo!dj~=vjRZ>p)h|63hBkuT$nUHmvrj#+lvtrYhFX@5%34i=nj94w+agU$7 z@(ebpAz5V3P-u=h$^MW|8%QOO76w)Qeh-5PDF+M}=K72?bqmw0t9SLh|@Kkw<14@i5k-u!AU;5bAbeILJ~}ZrcWowIfUG?MWfWmoRsy zypbeDoDdUFTSUwFh$(;z`?k~0_ecv6Wvfqdrg|_UXD^t)(c0iA-`V4-|405o@1&mo z*Z=Zw{U86tpMUz}zxB<_kMPk0ai0p$Kl}#wOes5*jFymhUQ0q!C~$@an=HAmptut4 zXi$tBdsK3oA`>er*I2v@>mWvOGk-dBNtlJvm+D6oS>xxi84GRI z@Q@`HhCuo_m~>qOU^CKytb;)f-v=A-Jd_4~Lyj`lFY%HyD`8$Olp_vQ78wA73+ z)fcL2fC}A0eh-0l8S9Ui$2^8mfys>D2T2R#WI*g4-3wg;b)$K?^`oA^(HITml;o>R zj;t_K1%JyC<2~ocs3jPpaR6J73eYvLi*lvt=8UJP3e2L5F<%FSM53%{`A`8Oj?@w3 zU=`9jpj<1W@jT=d7hC2etqT}QXcqbr5#fBqyT|iqNMwc*r7JBLNa4tyFTLo7~m~QKRq>p?^x4!EMIjt9rpDc$RJh8$MVz=Vy-S?pz#CnUZ3(r%7Q9 zlsHf)9dagl7;PUrWw#VD5@stTaiiOe*c3^mnpgJ)loI?)T_Tv+LM=N)*R0)a>O zU$zUqEhwxzsYbVJ);>n7iM)agd%SNVANWFu&Aqc;f6|Nhw8l?8cZkYTlwd z(tUNapz54wC+R^>h2!30*Iq(QYkNdr+&mVkebcws~`NFrx}q=*fw3+78sO$5Wa2Bq1T!++fk zWT9ssFW{nk;+D`%%#qc=!%LzX6{UzUY>j*tXFZ7!tn&zEbSd$YiY#|MXs!`rmNpa# zNuNojx-YJLW0_&d;#%vVixgLsyrOgsK%lTjLnd0Pids5?z#q@fZK1VN~h z@Tb@e1Xn4v*+46K#eit8>xgyCdh8mBq9mm&i4`tr8eK+7WGb!4VjPD|#eZZny^~}M zu|SSz$K7$UsNmg0`Y%C+PY9CZ86G2YkGeNVk@1x%s0Q;84Z}EY>r!*3rB$eCMCxjZS2$EbrqUp_p zu_u}qsUtcBmaxU~1vrjn|9`|{Xoz-D(r1kGfInzgvP{-i9g1ao)Dx_CFEMSq7s1hdGZ+e(Ld zqHLJPDBRXaR|?D)VVgNcgP;ec~s- z``fgSISPN~AJ`@J=QjTJ-}ucx{AaFDPZ5+?D`nA-w|z&;7R$`Mk&7;pcaV8im0UDr zuPKw5>tK)hzZ2=BYJUmUOx0*jeMSW=$TIcC7g%cwM|#c-vkyVRT=@NDDVBfYAC;4= zv4jsJ<><=XMzp{PA`>N%wu;-tBpzlFC&@sy(9KXu|tz_sQTUFa!MLI7V}Vf zxf%GRXpT`Ic|jsi%#E5i@TF|jctOEd`m9AqB+;@bU9#vE6@Q^ip@(@?=#S)8_ch{( z**WH+Nzk-j)f__rRYs3A&ZH&AImx4X%o0Y$L5#H!n0ZZtRv;I?;sqj=HD=|pFA98H z4F7OPH0I%~rLfPSm4B?QOfd#2=eYP{wfP4YtB;?5GK|=*NsM-U4ous+6m@}h8$yU^ z(7y6SXL#rUO@AqNE^~x=(Uhri;XcNf5!XyGUgqZ;0u~S zN~?HShjce5rL;l`V>c1sijeb4!NnMl#7d25cC4%nr5H_?k|JRs#eOfATl$a{AUVa- zeT7K$K4T9f!j^YZEsPm)@uU(LJ@)+$)19&2RgucJsDCljE#S$T*V27OTC58rEt+`L z7IRJ3?Sn`!YeX62^C)^uR}kpRT#K<{Oc_K{q!$pvh{w)6xgWpe4uI5~@6B zOb=@b6My6qKeO2*3JcSLmW}PQMGRQ!l)O@yE!G*2$qy!&wU2c{inbk>#I8^AIS}c> z;%hHCmGoe2dI+LaV9t1tO5Qo!dlVa45tFdynxq-?Gcl`oZ$uHDJni=xQ7U;^pEV_c^RNfDT4HloWARtQ>Ll&B*Xqnw!e zrx41MMT(aAxjaM&lH>b%{Iyt&IiaROk&3;qW~q;-At8f>!%qb*`D;zjmV zxeZ%+K$^(p@THVhHGeSKl(Bvn$KypyvVVjUp=KJRp;=JL6xA3p>e>+)h}K1`4->DZ zC?0%O_#re18nmwNAR;WvI(*{{O&W3K%3Pw4P(qsZpfafAW2~|4SfdofH4dU8nX#6Y z;>5w?N?Lo)Ke*p}#Fp6bkXOg!O-*UV#A}F#)`h2QfSolCRTn3vOi5{7s?nJZbAM9V z$QqJ-)_Wxn1d}h3#`+%P9SE3hG%-2UW0H{BqoB)~)*``Rt`AI9NI9?19QvH`J0vAj z139%a;N~jy9)JOmXnl@GB& zE}x=6^!=eFiap%uY_fLMW02AosSaa833cm3C>EntrBKM_WKM%*R4D;nUSsgbZrB%* zMp9yoBMQZmn4_(zm=Z;_%E#~J)_^!;Z0HhN)%e`ED`R$gyD?7qm2Y-boqt=8ukaiA zjh}?D?&~k~lKS)ia{1qEpFaJOyhzFC?H+U4VK5qUy~da*Z$UvuLOnB1N_oOHQ2E(M zP^2|sQt+h69H{0<$}O=!h}ekq{e$6aAE62Jc&H>jMt9NTtLBJc@KB^g0G~xyLsXhs zBeFhr&V!`k@tEt-6weHoRew3^O7QeG@(Izz(w?mgAWogIgT|pg1+vHgP74Sc9Z!u` z8jt_CKT=dflVv^b!9Ci5n(_Bx@WP8?h)5baeuA+7g7UE@weo zWmToJs(D`*>Rclo^)+Hy3tEuqE}e+g5W(_8VZ_HSOhq9FaM9MCCV%UJfgBCVUKb(lo%jsEubx)qY^?B z%=rF%^QBsJe13VLkv?#ZU7PpViOb^+4okt9E#4*3kIqCsbmN)XM@)$%rVO#$jUx9kK8W)# zer9orQ~`f{W~+lLkkjR39g%za=v&%=a({p4Y_GA`b>sT{Oh0b?mB02k`H8_(Tr|H5{8PaH z^A~nWDg23l^q={!{@Ij&@W?4+j)&YBzJB+W=U@2|v!5&OK$vr-+LmV)FELbD5<}*M zF~lgk5dT-L*6i+2_C;6l(V$POlG zs`1d6;j6-reMiJe1Sm69L8^JJv(Kp9U=b{U8B8!&urbIBwAn|@?`;x32wHH(QY4Ey zp;nT#ihlv~z#Pd*qJ$q~T_lg;kuBv{j2pxJ%H!e@i;K*c{K5j$q6^Do4?V=XEFL=> z_ZZP6FX4U5b48BF*z(aUXp%MNaZHx4g&1X+#HDT$7nD!`cyZ%x&m<4g1ZqTxMu9Yz z%I|TC#^snK$2iM#WF}=@JFX~HhS?Ine4y}|0)L{DQg+%Lu@|wBd7Gpq#PKzfo=9Go z>WcZ%##V_fRKib%^J@iNNenFw1#PLY^B>>d*b zt$(EQ!t`4RRB*&ArG&slMX)vM4!?8_QNwz#;@6K3##bt>EyB9Fky4?g666X|#D%SB z2)LXOUyzwu(Z?Kdu4tLZJ)#l@=4qic^@3!Lz0C@}jL*_B5ARzkPfJV@;tl1&8w{Zc zDl4CEjdCpt0A0_ZtleVwNFJ8FhvD3gcz<3cB*4Qo;vGGvHCSM>(2Y6TlIsgL+7db` z`}S#BG7=_d2)D|GISeNf$b|=qrQst+&TcVzioJQIjTtD*WY z{X#FPf9b-%z%0AU04@|wl;>x9@4Vf9!sR(;ovocrVBhv|^-Bo7B`aeN`V9O^%6}o< zP8#EjP|SI7@OsFqnMO|0Mw23^D5gUtDvQaI`U)uvl59mXNBgWuM26?6XcH1UvxoZ2 zYmkIxP*bI^m}+~>oY#0Q=M-O3UL_WBP`eVo16M>cTP?9fPHTK2q5OHs-RBwys)gSn zWckaVl2?^2U}<7Ac1ol;n2d364K>>O8!L_=URIU(Oow%nM1Q^$9^I&X z$ip9ZY+A~=$6qV~7>%gKXcEmC>SRq}s`NORR_hD7MqW~atRbOsGscwg{)E#DPtMeM zH#FAJXntIhMoF2$h>_>|Zgh=}2caHSNpzdbUa+D*9!gFLMI0*2>Ly$+7X-K+M=0bHBulG9 zgOP-~r2qEVvob!cJaOY;M>`mv8qDU8fYyaR5bbS-6H`+uVar8Z&s#C7?x zR@D9aht}&O5ejOKNGR$aWk>HvOb=5<31dANI>YDKJt69gP_qh}wRMhFiIU5eln9|m zOLUI-S=Je1^T2Gx$XF|9|B6_lq@A{Lxx3%E8&% z8ao8aLtGFKpO3nr$?3LCuDanfk#d+wmGpgeB{^0qTGp&7TJ`Rew6xPQZH;O&eMU%P zi0m3^y=ZGZ9!qakx}WiQgaRYdYw_5H6C6NeglW`!jNDQNHh;vHw0s#ntA;#1Ct-+V zx<+rVv6q`MI?*Nc(5%c_p~}~#YoGS69O3Jydx&~uNIABdT?tIW$7X0}KT!eoI?qb80$mV}E;9!qcGV-X)Hoy=T6Qdv8h zw8ldsiLCa$s6@gKHrE(gKSs%pOO9O-;7JxaVR`D-&VN)TQzS)RmN>4#<{lR6yXZ9H zGBFL&j(7;^bISA;UTFi+76F)Rlcy;S!h#AWX@I+09_ zZ;^;8v44o9&naX0ir>j=4Is;=($@DKDmj-}+2pc^>}iDRHfd&((76_+n!>iAd?ac6 z68pH15Wa|k4Sa+tyl#n<6XyGeNWw-ZdjJ6DG{{OKGy92*xe7HFp?${QdfCj>cZQu9 z!d43R`zuohDo=tUT7`kp^hUdV;ah&%#65qLjC2l zF=ry@FxI7{E4**ut`r4dJ|lb~NdlsTk(Pdc{dL!c6bUtw+7XwQ=4I*ERc(inIH$5u zDu1yM&Qc*we2oB;KMbTsl7ddhA0t5^>GDOfQgk0ubz%%?45rPHiL3*DjJTXAaqvFy zEul8`CI3z2d|4yPn7^y%kkO|6A%%aSSP;Q)`(L>R+}PyHGh`O%R_-I!9)mOf+!KD!nphpCw*h*;8Y23gBG6avMQB`wyXMSR0U z4HschYwYNu&|2q9g0LBwP^5e>i~sPhSo}ExNm7_M*F|HG{ltTsusUJwBlfl)Tz|Wi zY7of1FY1ARufFuyMYyeEaXkz12u{pnKcdU-p*b@~&>pe}MWo~u-l|2}SpRTr&r(9= zDbPL3;?W8u74fz_cV}42j0ht<{INWja?%^mJ;QfD3icxJ>IFb zB=J5YS1hO+nc)MM$4S4^6to~dL*AbY-bU=yL!-Wo#j*R7<++?DA7HrMDbOl2xcU-h?|EOk^E<{&s* zFxCS6M14m@>DB^(I0lKf%zv-Z`g*pwd}PVC-5A_4Z)-}YRNYuyMl{zjCawofli=!c zkBKh5X;kHLjSrFm{wAdxgu`oM4mH_LJTE=M>m~{Fwk_HyanNjg3 zn4`zyeC=LhJgksHrD+6RKUjg$p#>5$ovQJK>m>Ug%rhC zkEaVgCE<&D{-#7`RZ0Q#U1R^Gv1gke>Ni30<@vD@!F(wdW`FNUD)EF^#|Y#6GAc%5 z?u*^MyzM!QZ3);qMVK@hiXbt9ie0*{)G} zrNFf0E%W~MmGkurm#4g>mlcs%4!0Sjoz{)xXp9kPoPTKvpEIPN0e_1FNaL_eNf=|U z`MZ29ofDy4iOV5<;7|1Nk}bi*U@6P`87(SLi%1-zT3__aARlL@#bO_eos>O{mi_<` z&4p2t@NSu{SuYG4hAks#THdPo8HYr*DejEXm$0Ki-lMae1|}bupf5vhR;9Ud+9Gg> z2YzLF!GCzrGQ`QH#6#i{))$>cS=_HBDYcXHe8)y(%#-1rJ_cj7#piOShcS3~W6be! zNlS`|?+E@&YZvqQuHwLQ>+!h`i)^0d%Zja#+`1EpHz z(e-^S6(_5TS1GHIkPrlT3i|^oB=rw<#$staE`R;lNtF+Em6`@&VvYICeCY!+E=s8v z$Z3sXR}r!YOpRr%A#DvNISbOzh8(` zWIcaLH`=09+vC9I4;<)((OyZ|H0C@4I6PUhXrc&o{~p#VL_+PuhvVUmat1!vB`krP zdVf&SA3aql*3!aJIjKAfjo8GAhv&?vEjDHB3q$&?w0p#$e@sM|N>U`0tMM~7#)`dv zc;lS$eYY<{${QxpWwmxJS$m52HHQcz=cPV1Uvw0G=%Sb&!WbJC2r*lkSA(UDwGX-a z>^%fr`n^6Uy2+&g^ttw&6SKh_eR(2AOn-i&L(;3Zh z&*Y^1>;Kw6%dh`n=j(^IINtI#?)&v$SSR&I;Gg`JZ+`tB-^)|HOsVqpw9}7?>{epV&HB7Fg@0s>j!ekqdx)n8 zi-ja%2F^(rS^O~u3sqk-Ssox~j9AKw3jjUqYiv z^b!{czVJ*QyHxQYF?j6Y+HeC-}lFMbd8hxb)17PNV>*v@zx_z{>gg zgX`x~BTLF+d>==ueso{5F1#ha#b;FN*_O})N9z-%jMytL@0qt2mxt-{wGDbZ7hu%6$hU%6rN*E8{9%*<1&}ZR#%ZZmR)82eKXtyPpkX!CB9mc8Gl8?=Qa5#t{%dN zIU3V~Zjv4zIC*qYFnb4yl|>L)R#uRW@5wA8t8npkUj~xQysyss(LLwre*GSA%#3$V zWPY$dSNY1Ew)8wXrVuJ2h4%-^qm#?V=y%k^sxxM%wMNkm*O-#H#%D9YiSs;S z96OC;IzM?mc(}rpKYw6%`+Gzq{XJb$zY71wZafr~HxS6+vAkRI0XZMpiRlFloc z7EQ3|*pkwk@lISjKAl7E3yP?WKj@jsF;W`LK=#kR9@ynKl79j-IAUgFp@?Gn>LW#< zt9C3Y*(>US{*yab*Rzj>8ggVf=X6Yry10A3a7}m| zh~xjq-oO3YmVa$&e$cPq#+Y;My(3PXh;z+LWoBjB#St9NLWaKg|Wf-Qsr{_QkkyGbMi#Qj!NjX1H*C!?IDgAC?mBl5W|#Wu|qFo65p+4!@cL=@tWffZk0Heazy0l0&*YC8}|W zW>P8`i+?#CH;u&16S?d%qrWO1b9C#*a?$BMe%|C6Ianfh3qzz%xF~KjIExzV*fdrO zi$SP4AKe(XQCQ4=zIIhPHF_VwqSZ|zqsOk)G}2VG&O_y@?{%0&47nt1-E^sRf1MYJ z_Mper=(oqL?v?7DN+X#};rb!V$}x%Bw%~Gohkvcf7>9lmbCHw&?vf=i@U>VW_4X-M zu01L$QcLy~BmMO~^jOjkdtt8%(Qb>JJ>bb&QRKXbO8B5|Pk2gEK-S}q@H#41t%`A^ ztK(VWA9Xx-R*Fq2d4P$MVZkZ1(A3ZHQtCaVwZ{mbr0f9N*RMHQGrq6*UTfP}bHPwI zyMIOsV8W31FIfc57J8q|Bk`+0(mv|3bu{4obqgnc=Zbs1Fx=Qo56Am_VJptGdnA2k zE}wla+HUrce?IBMkrS<46`GcvX^X90v3W9Qex(`A(c`A1c6kjwtVSQyvZ4#B^mD|x zFXY*4k(1=8mYV>nqigTeBM+uz%vY$uEPsd#@=6qxDWxD7SgFScH)EWyZ%EDWwJfix zg)6^c>m-GLV2nX7L00hkDg#}_I7Gg$yfc*O)hlFd%{@r+>*;l-$X# zE_z07n{&|J*h}NOU+Dd7#wjsG38Bxh5k+%_F<$7O6zXCbtCubtj~h#TeUQo7g6tyG zuDYZ0%7wJ`_-{8A=GebG+P!%W>3FJ)xYXoSBIq={petzkfsQv{F^XKYP#UIGS$4x# zh+_Il@q*b1wQ-h*YK;KZ>VIpi&FH5t63>6OEmHbqo6XzftB^j z4!mBj{L#PnhkTTkGqNW>30N=iqhDK*`r()Sc+J6H6drcG+}O4!C_B&JEWZ5dPlATv z`i55`m0gR#hsr1-q%A}MWAt!??;#M7m|*#$$C6rld|{SIx^XP)lz-HeWwRXShCdNdrzf*5WBYAz5=N7UY@X>*+`6<^cl|=R=5;KM3V9Dv@ zl-xbS3w;gRw&~{11Aid9UJa>k&X|IlX28cmVrQ*0s7^s9c=#<`K8dwX%xa8tGAYk6 zA=k*w3WKRTv(HyWnla@ko#$(m$sA(NWfHy?gAwG496O;DL3XAtkW6wZlN9+a#bz!s zp2RmqaqTz_n}GLxw|2iwuTM|6nG>ttcCF!=_Tb!Kg_dbo3!KHqVfG|%Me8Yf$q z@6DG)LZlekN-9Zj-MO7F ze2HO8Lw~Kc951n>uujUGX7J~tTm?$Z5ypp$8gZ^3dkxJ+Nr~yg*0)W!&aplzz&ua- z;eq!U)SSYM*jW!xyOn-B3@1)#BZ&*$$(ANpGk*gl~DeyGI z7CsaWZSK^j!fp>@^^&h@g_$T*k|*qE<3C^Gn|*Z_qAPjYJ7FKzO{u{52X7LWC08hv_Zm<9I7D9GbB#~INC zB7d=qn7(NF5{fBDYF?4o`~4P|3+<$qi!!3lI|3bDyGRR#<%4i-5C4llL<&=eStF?K zN@8700s&8oW>?l0uK?dikfYRzCVscq*EonV4n2^IDA_(l!r1ao?_H#YmRXjC*>O{- z#ppFFuPR701}(&_gDGw1gFOP=0+Dbhxdq55=IcpwdRPAOH{BY#Zh zZ(XcEg;+|XG~+#+LyB*4(HbH4h&>peL|3yv#6yqn%VIwj?~PzuYK;A$geXbCeK5x< zL%byxMF#dHBXcggxXkekcF{G|v}2n-Uth+Q3Y8~TT3EV~Ttz%lB3h_mK4juuj?YDR zy|x}>f01`!x>5ud&Rjb`{?S)VzJHBR>ZfAWw5cq=t|FE8A6@^mo{JPAwvlS$GF;_JLa(u7>mS>{poYv#;0zT$Mb-a*tacMV-~kq&Ae@eVbz>52dOn~ z&v&+MhqM@XJql0hXK0(oGs=>iiV}C-&}x%(xg;s*lA+OFaojRvnnr&qV}E_>VQq^v zbxU@XTzdBLY995ot0N2**aD3c8?5s#xwnaG(Yw`X)8KJIM$dyzTVMH+}3yo~WRjG+hzR5gxT{>fmP!&ad2w?jSx zgHz~!M$S`K{7NdX-}72`+V%uZoV~Oxe0m`;n!0`GApbu?`+RvoOdVe{@KCycn1xTx zojFhH+F8-frO1fGLw{;L7p1{v-*6JQkKc;mUkc>LHl?`RTH}}(?zfu+3K61Mwu_!O z?y$bUua$8(r-zE~lz%N1CGEy%t&|#L;!i>e)l`3dcHq!^$NeOyEf7Zb3FoPFVVNPF5O}U1Wwn2lMvvfwB~R*B5CN=oV~6y=hnS_+UfjLMn-; z>pPC)hy>9UQh!qwl^Rja=R9axV8?z8R(|+iLhfzC$P`bn53}V`&Wt6Q`nHvr9cx^9 zbg8*Yy>QxkHTJnrCXHe@QVOa-#Ei_bfKH1@WfbLP0?CBRGmcS zHYRn7p|xCNi@u&oYtsZUZ=~gvRj~@o4oLg!n`w@&QGcILo?kj!mEN$QViwK``=!OM zNMh$T2Xl0+d(hGm#k(q%wnVb3qS1w)k?Ki-lgn1H_#P1)n$wr~fC!1G7>l`7jg@Fh03S?tXhd)v=Bqxpet;Ogq;} z%{xy|A2|ETW*%wE6CWpO$xg85NvT_mtwZF2k<()OA}4)jlR`|60~1>O9U@`^h|%%59;Z?sHM{ zMxQTy^X&`v%KZQLSEZ?j>etgrz2C?%n1AC!shP9ixXq9J^s}FH-kdT27>`*;&50 zpWpFx`5}Hvl~Wt!{27)PB~6ZTlBt39U+iTgZ-wR1#|>^qX-$gtk{GT6BX3h+OV+6| zSALiaWojefoR(sFIAQo=y*!ilO~yVq$EnGp=LjnxO$H{3)_E~SLP;(H1ujN{g|Ry6~EeZGx znR|^1jwVJU46O-@iw^EcVjc8^HGcwzx~3j}aSJT1a1N2gb9snZo4~5BT(Hw#SW6wu zzV9-PJ`gm%uo;mnNyPSt7cN3*g%CO@>SKlTy}x z>^wR8i$KaH_FOYd*t2wVe^^3nEK1UD&D_G)F=?&gA)vC^gFGQ+>m1r+&FnBAaVkMy zPc=jcCL0Iv?(&{>`GDt4S$~t75@U5quZQB{_x&B``9dMHRdru0)NhaOW-X|7*Zyk_ z&UwUUc*Jxd$3Ah1H2y#%nUmQi(ppQTowmi!Jn%?sVC#UTz|=`lDq@ej=ESCPY42q$ zA7|{U3pSm39)ce{%>OYhnP<_?R7*{A$(&34Q2>WPc)#3P<5Ze;1VAox#&CbOrq2F2 z@05DgMPm%92z@bQaF@v3p1;LXW7~Ibw>x7D+~GV_)i){S`#titU$x$uG3u6lFL1toLbCS^Oc zUvS+Lx7L^|QybjR1Mdg5HO7DQpq5M@Ly44DsG2 z9suB_-OyeyQi-~z1VVsiO44X=&P7@=O2yUPJ_s&ZTBmX`_zb@hj}+?FUJgA zRt+F8%=IasZMkDCw)~D|PPZ6uFQ>K|L4G$m$Rf#lo}y#)HE6l9`oM~_&V$z8EBA~o z4D+!snhOgLV3>a=H8PHUlg76a?UY(rUa|S2|7OmxgcOS9P+O)~wdWjNvGjBmve>bv zEa6DaB3R6$lj}yV#_YzjEIUF7Gb&9y%Q-)(beAG%H12d-s~o3jAhwK>^s|-kX)x9q z#Y&@Afvr2Y(}F~km^N7~-tQNV6Vmr65#KlT8vNqdQlx+WEAV&zi~rAm`5kWjU4Q2H z$$sPh-Qel{kNM`WoLqhYrEQoMY%G>__F6gUT(3`@hh&nMA}91yd!moY$Ns{;Uzr0f z*~iqf)16EcerGR?-anye?i%fMjJ-W(rX_wLD-`6qE%$y>>!Q^sYOQRa|B%Gw<@uTY zvZ=@{nS+1lDR5${!SPFQ9A}tE6)mm~s40Fvl4Cs z-4w6A*C&qSYdkgB-gEY6YC);LAaO$7C^&sc@L@x=i%%lZJ; z@JKLV7Hr%YCTvj7h1n)v64vjE9H=tMGFK2Q7Oj6Y?0$%{O=9$u8QD*(PS$+{jYAZJ zV}@5PJxoo4tTLuPh+}9k(T$gB>Pl@;+IxCGX#}C$Md!$=JVI$-vxQn~lAceXsxz45 zPVo!p7!f_cNJSsa)lD9rFr3cw`IWh7E{smELUZ{z@oj^gu{kwXK1FNL$VOf7IVQ{q z-=u%CYQTIkQZ~j~tT_U;Gqpq5wWuy7<5SZ8oSRI%$;j&w-Eoqcyc{=b-6bF>4&GSP z6mjFu>Wj-|r?td!O7V5t@hY93Q~b$Va`==KjF&`y(r#2`HEM-Zo z$CLyUQvDIm159)uhy2fQD zVGs%Y!G%*09U{}4Mw;O&lz%KJd0pAtQ8O7 z9D7J}Mjm0|%*@-6WVaSbMy-FDQYs}k#+;&C_d_54s@-Oq2lLd9v0Sed;N$IUT4{KZ z+S1I(G{)>KKWWwifXt_ipEX!!jPsxs`H5B(lG2RqPs|aXlJg8~kH&@W6K7+YIzXE@ zN~)m_6K* z!@R?iMWE2IH8^f}_Wc6Z8Fr^e2Suu^sg!PJr|^h?fn0Z89_KwCL?P48JEf|lGT#Ti^j3$(|4c;b>tsaYJK z&OEi_uZiDlI-Yb1XjLQ6`#66nksW7DlJA;wkTLK0 zOe{KU82i3+tOI*Qd`#nZKiRg**;h<~z*gpVKl%Euf&ccsom35^aD5m)|7I7de;K~{ zFMS5rr=9O^FMRmy9p&kXKm5Z#=I1~EDcc3^w{I!!$|!~9o#R++rN{d`u%ZbQZV5-??LmVuU#qZdh_OJOa-ALRH_C$PLnl#7=3PUgdh&p3bXANl1k{tDOY1zN)fO%`}Vk^6# z@1{%LnD)A(NjAeoELH4W2I~d4J#?}$GEIrGrf4>Kh0z{{o2CeB(9bBg$QL%uSU#B3 zY1^({riIEdlzD|3jL!6WNoDB*Jy$1}O*wyDx$@o1w;F*?5lZ@bY8@~qa~|ZpbDl>? z?TwFLt8036Q7y%53%tO~ucb)+6#m?gzx;qxgrh<7?$1B}4gSKP|2O#UKl59B_I~F$ z2iI$*=8bVKtlX4~lPY})N|tls90#0}!!xDEOqj*E4_e*1`E$fX3t%{>(Z@|6j(vZR z8^OuT7;JU0?@yfbq@>2^C+3NxA9}F6ly_SdXRN2i%0{YLl5*g<>sHv4iqbkI$8Gz@ z8h7ShyO>(S*RdpTZd;SA+_Nw~I5|K3Jg$Vxc&O}c7sC+aIBuj2+a`t5dEUu+qZT-i zTkyNeYgC2V2x;t2Esgv6EUH1-`1*hAze-B5@4Gw~%enPVDyFnlmjrx{PIX9S3R#rl zJcTK0Mp34Afnfv1SAj~M$ghZK)KSScwSZ!O(W zO=>BU@K?o32p>X;&7gP|$8U6&ndH}TL$~7=VutAcreL@wRgU{JI~$g>GRl9laT|A1 z+9?r-LUwEz=7SOu?Cy)>E}DMH8Ow_9IB$1aRy2b21HpI}ZaY$ojnya9oZ2$;&;#v0 zB|h2roiScmLn+GLG$Qm2my|fq*qdRBOLwEb3ZfD|7WdWT-&cGXt2m2A%j$CO&(C~# z_XSSke!Ed?WA)0uUE=lehe3Zwsjd{3-6H|E;!``h6h5?1L~p6XjQJW#ks`M!h3xv} z`D<|4_YaiI&gz3wn!JfQM~5rV(43u&)7pjenB=V}DRx1(yZmu}hKxK>lfnwm^QJND zqfIysdyM-$lD9()`&WJ~Me4VH$ba>6(NaFq_|>mIayyLkJo(}W zPYMki#(f<4GWM;61T>bZwPW8E_G_W0jIYAW^D~)3eRB3~4;7N!@ADY+)Tw0;!>ZJC zxo(=x+7gp(ob*08=T!8$Yechcjpy4l;~bQ#&V;05m0Myiqj`S|oRZx7ZrVXz_FZqx zB#@+yQ~QT|VwR-QLqtNX{;b4Kg>aBdQa;av(w)P*RVpuIz6uW@Yau?t?FK~x&gbVL zYWAA!dt+-mXJ3JB(MaL8KC*0aeR?OtGnvw|jFgC=kgDN5ar!~6nK>7=B^emcJ7wR= zsnCzkwr^56slI>Ey^G67iib*qBpSxDPRj|-$w=Tc0Iels>qWweRkauNg%62B+$8B9 zOM5Vz#<<c^4nix+}x& zQaQf6v-&~aoHaA0rBE0y=2-Di5f$M9`6VT?LwBd-D6qB3`&0|1Xc|CDq$xS_Tn9C6 zECxA;fq8#*<{<`UX1t~Y%=s)>srkPzA-iV9cq|{(BqI7+i)`XSmWX#ruFheEKWwbQ zUL?fPigOp-HJJG}LyJ}-@N^z=ISn4Bt2jLVPJ4Kjru>YhR;h$1Sm_9JDFM&yl4iqF z_FEPmzm^&hUKx1D9890A0r&pGwp~aRq&t;h$Z>__r-Q;tSMBL9ePhJG!H4mD9^CbkaSbHWLervbk8RPfp-BDe&h(UcemQuz zZ`^-wo!c?^`In7%pM6eo*Nre0_PuE-oLC6Xq%O+0{))}X!{s>NFJx23OkbTfjl6A)*(od2s0=9-+}d?eQ=THQ!lqrWve z#TUaSYn-BpW4INl9=I*B?22iOLY9B@d#*)ai_<*zh*jP8nxxjKMX#BSC50nKp|VBz zVA*yVObtdq7_$o*=K7kwOp;f=dH#m4YU1M`f6bhOx(!OrkasEj+;J+YJ}B=!)MSNa z9kWVJA_=50GkZ#mX&mQw`pm8gGdivc(@%BeS@9!to|rqA?Sh$cdwC(%tVMsm#bh$i*wvGk;sX& z-v9e2{! zNC__c&UxNQX@~4Ij6&i0`4-$Y`C4kLEE_U}rj7GlcyrdN+r<4iaSq%Um;F7?plnjz zy_^R=9nY0qCiB)Q^-7x1ClX zg(*@GEqOK0`(UnvaVBytflZwpw}Z>&iLxeJR!qg1XUzG*X5r&`S3&kds^OU!GlJfV z;+@w?F1sYzZDaI1)6k+dJSIL)Y#q#1SWEd{xN#m`21C>t=zV|jP**K5`=nM%4r$QW zgwr_23s|DHC)T*rwyIcdclwZFFm=OiQd@{n{WR)G_Df<(YlEs_S=? zLDGy=8|y(K8J~Yh6l=^+p?T+tugL9AF)r;x`vDrH#QAcEtdwMdXw_w`;nYZ}?bg|L z89YCJ`!(<0eV``crc&8(JD_B7Gc9Dr_Cl-g$u&lJE(IFbKnPVPlY|QMvPnygQc92=603ilc#nv54D-y0pA|_Sw|+iT za-q*j$rq9@x(&9nt20a537u0YvN<)1K6-!6eJiO1BeTX{)glaZYRp^`GiV%uc7x%8 z<3WtaIq&!IWo1e#9LGIE9F_DudykALr)I^|pZykA5Ai@B#Su46b*5tsDdXDbj9j?Z zLTXhP&2fK{a~2841}irSFKm$!9JZ7uZ{nJ=s@Q{W0i|VZ>HTbDkkaHlPhReKK0IAt zyGa4x<$IiCa@>{NP^0@?CV;@2lR4lxzSEv9SMDzd#WTPB)pv|QoqLET78?J(*Q@z| z{TnG#$=&}${Rclu>3{f-{e9d2==$Z4sM#6!JAHq3K6`p%;p|WEc>i=IWvO=pB|%>X zHhKTbF%EQkC%)MXBHBwA}y=*)%ZMBTDXr#?sqZGW#f z=NxR?&b=Shtf-Dsl`pe~X11voa!$0;$a!PTJGmxW+cZNa2T~+BuiD@xfY2FTV1cw7Wol>O_Do)tKk;c4Rfs-e6U0*+U@DX z0liQ5>xDU|-1OT{GT62~JT6i$rX@q*Tv~p5geqp7{c@#0kV+7KupGD8rX5YH%w-(o zu0=i~aPQkyyR12>tx3t$58R)CrpFAq| z2;Vf)oO-Q`(qU`K!oaNY$zZ$fWR}KqQ~QwCDn2K5tK9D|Z2N_lwfHYJagHeuj17OT z*Q+kPb44_XXb%<&vau%nUb$S}Qwn_j?YAU%N=^LWs~_|2FaMYps#slmB;h{h;_`G2 zSh4bwvWwl<*Qv4P!aMgw$P1$*pQ%M)I(c_$!oGJE;^{BafGz?fAGWP9!zVCX+>OpUHe(1qU`Wa+<7}0-t}hq^QIg zeo$S)linwuPD-kjBr=8dL8=#h1_JrI=9EY$D^kgm{7v7Ag#qY z2UCz3`uzpVP|C*bc9Lu1U-*~)B7fm8M|7IMiYGq)yYO#y_+J43WA{h?&ELc#l~Vdo z{CEG;pZ}jPm#4b=jbD8I!k2%aU%5W%jeXrNT=#cay?`0lYtakPGI*v%th3T@Pxh_J zqfs)oYDRyKlQE6=?-b{;)}WP*F^z5Czc)hUHTPr$vO2X2Ll66sGRvL)s+(pdi!ToX@j!o`Zkw{gu5`ncbp2 zua``r2}-$4vGg$(YPnLj#_0Fgz(LD}oEE8V>}^xnV6J2)mV-T#U?DYJN}>^HMCpvR zVjmX%Br{UpBO1Wj_G>&8b<@7uM6P_pM8e^#h zwMlG|E7?UaKhKk~?reYcor-Oha%cq`Z>>cWgpsXPdKcw8na9F-(x)V_b4t~Ay<9ks zdn|n|(wT+gs(GW<5}7_7(uI~QXP?yS%rRtKWa3t|XTo$VE!wI1oQyRowNP6GT8d!H z?RKNK%C>Ffq=#*vkjowqaCJdzp0w@CT$8ZeYXe~-iR&akF^f4nhD6zF&=pIvm z;j&5ZqGq>UEX&{c&7X6-9rC=G)NRuT*)s3H_>$>{Pcbpuwvlq7cd_WyX;eyUjB)C} zr;uynx_@9Y;|4Cj;X}AnJX4B{v!e1(wszrmf6>Kn+ar2ikt(^?2%*$_yl9ccnjI(6 z%C7Er2zixq4$gn$BE|0KK_;)I#DiH_q6hcxvGZEX+3F*@L@K@&d9`aQLZ!79n4&`+ z=Odw*5|JjS#57UtL|=@|GbaQjGJ}hrqK-@#$;|4Vxs)VsKBXx36LM1;!aU`{N{N=_ z#WX+J>IEwnBlFL3MvyG@UQcH9IdSXJ)rH3`C83Ijy2gJLxnencL<)827AXK0Q7jP) zA8J>Pl*LkQ$r*ET%t=`ih#a@?=wr!SmNy1A%YRRV?;>6a3K|=XeoUs@2yJx*EO+E0Ub& z-Kr0RGH>*Ib1uvxMNyekM&H^* zUsxKWj=Sk=GbcAeS$&2CdXwS^H?H-f^wLT!&o4J}nUETn%SE#8VFHeZ zN6khjwlkE{f~y$5o-?8@B5oT?l2*IDjx;F?Mu#aPfu+p5cUR_+oO@2;DQf~Bi~X{5 z9EX2?!Q}2up(-qOV@@RzCz**DOG+mB#}s+-n8Ku_VwLL_OZd1HS!XSMpORZUvv94?m&&(GgMuCz#5_Lx$LuAk#_rJs=}k;=0rs4zxXFr&wYDH}5`NM?Ua z>d#cjd}3j`iA0XEl{F51Ew)%=v6!^9VP;Gl@eGjlC1)u+ZOM04TY)*~=b>G1PK+)#V)h4tB|KkV zXnVzjl0VMQI0tpRvPKs|jKyAdiE4kCbTe|^gc9qWTOXR}ENApVqH@3Am^S$C`Nr%D zjJ&iR%g#Ub&;5cw_*5!R;7`N%f9cm(r1-P&Kl_jW{qO%fAKtyk-1zqE7k>2BJC1cy z%SOHILFcV(CGwE!7TjiKHj#BJ80X~O7w;Hd4rW3Q+R7G6G<8EZgQu3XZ@_;|g)Avr zW8Zd#`3<@8^#+sg!&7FCJGE6jB_*9sbrbFjwi+t2$yPVcwWuUY%apCc${fdCiXM=s zB`_iT^};z6-QisYtd+v*j#YsnQ_3-mRsqy4CW8EOW~*w^mu0RO-5S@Nj3xQ|-s&ro zrnbucJYSVSdML&&2n$bAjo^R32y>I}kG5~RB&@~D?S;}VkPDefD_g{U>vitKsJYUb z_D!`lc|=lUqS0ePQtLi4HEH~5v(vkz!zmTU&={|kBEibm*jrVWQy`UUS%Q*UCYwgP z0+e=Y%e30KKfj0qJ&n56SH+~3;#$m?T!jy6g}FuuAjBnGr&xq@PO*OgQ=)F=b>E?V zO3+SXjAU+%`<+x0d)-N7hMn3s257jJ0=06#-)XH-N~YzV;mT4f5&PcHPRSRxx+$D7 zLM8Vqs=;~QB1|&WQeG$}MQnp%b25e^&L76}^Emj?S3jeVlW%|ZO?3Q~ZBqnDA6-)c zAMEWZNE3Ub#|t$=0h zM%!~F0yoB5>J(Ut6_tNZ=nde!(;yTtXHe4ARuk~8j|lEVy5 z?3pY}?b}bO|7wgUyX++-i{0KSekIX8;+SO#&2kc!&Xh7hn3?Br?#B(s*y_$2kkjNi zCm(Mw_z-*W=m&pKTjPKJ&;1d<{8TCo_y>W1{!gSx0sq*4?;m*oPqyo4={yG?pFeWB z?p!W={LpkWd3yK6c^;%(xolg+FSz8Ixx|R$z*Ax`8`~y4k@9wQD@6~#Hc8*@96>>sw?y*(l=hob!ZXxbsHI9-_;g_`c`90Iw5_phG0roTj!iD{6!?*8q6?VO%BHR> zCwh>hORFLXTD$Htkw!`IJe6F)6ehSyHas=~z|M)--?4IOoD_i41_T?;9yq?#GSGizQ7A(P0UU%mz|so;}kG8Q>ZO? zi7WOO@u9DmstEW&C&xa$)rs88Qh@lwbA<$ zS|>)cr6i7d#;<3oKTSK>l;NCrYTC$IBeB*htrb1^FeTkOoU==XXCgMtbMSI|=KB5# ztgwGyFIYcWu1k~~VWN)C!!@qWE#V|eP28VPUOs-yS3mg)M<2S7)SaAFcv8x-?}?c< zDfUGE8lgU?ZuiL-b>FyLHtzT1dk?}#kxvv`P!&%;FpF>l*i zaOae8kleYQHyN>)E}1DSs(q~qYs527_K1Jdip;|~!&1^ff0*4%fu;R;t{cS*)3x8( z+7&Znj7}Cug8Yk0W%*6fW&h_a%1E=3k{)zwl*MF^i@4pEAvwwe5 zMe29|@xS--ulg$cnqpnGmdUm7bh%J7)V48fk(P12UW9Xxc=wXjQXc0b6?H(4O%vLgEOzy|Y<>^Ar3MAXM_w;@v*Yp}!y>EMr{PcmCy>q?p3N%bgc&%BB zy*Vb=C*|z)srhlj*rTxd6k(xx)v|vR0cIbeY|9{p*kRwAl7f-opr*_SDCt(^9w%#b zkaJ=n06-a^tF zKfC*>v7Gy4-`{BjxTFS5!PIjk>3!wgEq|TU*HVNTsyl9p>8|hFETXOxIXQp(zM=4A z`AyoTu!c;33iaD?Pki_C9Z%PtS~rg4#+E9lFOs=LF^LGv6m6jGQrC?`DYA2E!F{>z zw6c*?<~VP-XD;tH`Y92KFYN&zIYcGYQl8|iDJ8Kz?Tk~m)U6aqiWB!KoJ}rS?}fHu zM;GCurdMCi-ZsvDQfiAFppAdJ6~=idm0k1yTqN$P$_pA}MiEwqmjZ~LGBe$c-UnM# zr!dCgy1!>@4(hJYnvA|gzChN1xbHLFU*k_wvRI0n)S1D%bn9H- zeTXo?uG}ZV7b&i>=y|GhB~Nm0JiY&n+w%)4D{`lzPDvSYg|Q9+j{SdO>RqgJP_kYJ zN($ku7WgF>()NVUgV9eZF7pmq48LgutVC{8VsGN=^>uLBFZ6zBKRh2}J&Al0A|xah z%K}d8Gu{&f+G`4kTM|#(MbKJIOw9EVE-4qQFYR!JlhS3>=cG10TUx!4QtShzv!A$6a=LK6US;UD$(obg z!m?nCkKaC1x2BM7Gj1;jm+KZWC5vO~a;vG8IIQ}!z{bgO9Q3jH?tYR@0jQ}p{@|~E z9zgC2u_6?`)UGQ$#0-UL1c9nU*oDESv1DVj*}) zUSC}eIVsq#YidPdWByGBzTs=oOu>Kea{|QF4wvA0dLsLYz<& za}Ks`li#CNQjms|Wl|*I&M~;|Pf!ZyJk%}aO-ZkwX~iP$Lj>#-lk#pF$@C#9rQijU zJL7)v^!{^&1-gHSp>#nJYtLCRi*_t{ZKV`iZJe{SH$a+X}f} z)TxeB9fz0bT(pzQwY;X>=2Su$AjkfeKafgd%}&mZT2ZVy%9@d(bJ8}A@xUnQNk5wu zfX;BGZ~KLFo^TFwsq)y&u57Qxt81TMV_UUpj4{#*_=yi#gevQDK=70oac)Stx3Dn zniIJ?_d`3N^F=1y4?p-!KDw3o?%S_PDf8h6pT!<;#wGHJ<+@xcNmqe=wH9?iQzJ`k zVHuVs8ks&6IpHaj3ba(^BU+2nVm}MY_p;1+Jkx*nDxYEqnR2P5TwWEsqo2XX%j~tP zFuGC7HN1f<-s3VOr>vceM=+;S09rgp6i?wnIagMd@J*&XP=QnCnTD$PG4OCt9c`}Om-*brssfbq@HV)QGe-T+Q-T2LaJd(EZ=G+865r4 z4zYh!Fm=HzNIEYsr@WfGc2(oJN5`Ew&p|DTtzEEE@Ge$qX$AAe5zn$UhQ^+*WP_uN zGLcf^um0jY{`Y_I|4~c+Tfjf@|80@_8;g&JUyf({^V@oAx1#%D3l9@}*ew5|II$ zB09P$`g;YSvV;Vg46Vk}-tOF9I?T$4_g9X7Du1O`wvxGQ74sA_?82O#y>0X*N``-S zA<9G=#W=gNfY#{bnrXSv`$xAS1j6?278Isv0x zj_-HUKvHEConrGNxif#)oz3rS{$V;;I-cP1YzWslAQ)I|A+Li+tnnJlGr~LEnR51y!Q!X2qi^8t% z$1`|k-{7)?o>3&w(T7EXG$&lefy^6b}-uR>kNF4sS}zrE-`<)#9g;t z{fB?g{-LccF8juDPR7d2RWQ3#TITF}qqj($wB+QadHtG3DunFW zX|=IDa~l&2x#ygnG@*agSUN5tU_{;SINGT+OZ3^4rhf#cHm_0M<*wN9i`k_42-=b1-h+8F1u7jI8>L)xmH+{ev`MxT!De9 z74G9?EG4lf6CL>F~;oNE^w?yxq`+f3s{UD%j#L0L$nCW53($A~r#+-{W z4#0RmXXIrqa(3?bJ8Nc*+|4PGmG^i5-9O`U{RMw>$baRQgikZ$m?!(*`0(_Om-|7c za9F3GlT-_ZC3RoC_AiGh963oDd)YTq>3_X4VgFGSslU;2AHYBI=l)|K{^^XVbzd?q zwtSHvAe}&ED-n>F6_DjwYO^ix3Ork#R)v}wd9kG?~i!4dHicg%ZnQme^l8 zDO-QXe3F|YnsJSPa&!yir2SD&%s!O#8y<$5^q{OXGD`d%F+0y0iaE;@TdPt$rJX*e zOvzb=Qk04L8XV{WsB{ViZDjqZmn_jNvRT&e2TYJ_qKc}o}58z zg*COCn{MoFr`CpbjWzo`$mR^6T=y#_7nXk|?HP*pUv8%M-Q+)e5Z776*REvNyfyY* zUmg0Gyl3CNJc}gXWR?~!oJb`#A%Z|~QsDT44!Lt-4^Q;*G=OOlDZr>byOOsN-@v8B9UlYgXNSkzuuouA+nx!<~X#Qm?^yLF{aeUnsY7QU7uo{sL@XgX}P?J-`T2lBWn^l*D^|qWF@0S!66ca#pKIU z>6zfui9ifRz~bd{2~T6E<{AK7&0SLje9sm1b%b|IOFP!#@-ekk@Fh_5w(WmPzBMD; z)Og<2@!3Kt2{;}x;x$MpYf5A_`XDvP^`bO@zJ#@!$V=shC*!;CzExmoEi&28Q~6F| zDM+bO9}ok7#L|mUbM~oV#jr!PQW&|91xe z+TfMI<9`c``vCs=&)!|XetCbneUVa)aUQf?M#g1LK9Q0zPa(PX_#t~pd{@vS950zI zE5&vt$5+UJW67xuBn7)3FP+>Zx6MnV4=;&qjeb9ATaHB^%uR}#RyGn7pG9MjWt0?S z7#Hf^EC>QQq@hJusTm2p$0=0N$V#f+4DLg;s)y9vmTqvR=J)`eq}+cfF~?mNbM|0p zB@`uIMfqbck<(w!A(A=%YDz9`W7sJU+FbHhwTAb>%k3bglYPICVhotc_%S)X)AmX~ zBfn`al8LL9Qi7`FV>b&rb0Ie*Ijx0co$d$4Qz#A_-+uRvGK@U2EK{mjid)_(o3rK! z5}g7Y#}r3x0r%r%+c$sCE8Oqnx8KpWP11k;l6Zc8A>l$qC8w1d z39Z_H^zPIxNs4WWzD~B5!;2=h)-rg$ePk=|=t~MOyL&`@JS62AQkLA@QplGR$D!TK z3`2dgLGOz^7vH{ogqGR2ra!|IBi=j9W}wJ2bHzxpRa#0M;iGDMdrhp(HPPpwScDqp z%GuSy>03=4hva|Jdj<2!%XcTKY$`McvnWF6bQz6pIsKT_(pWy(ua$9Ve3!k*nld}K zOf(VK&*9$h@)w%ehAGMKS8JHeebABuE8TOXeOru_UDK3l?3au7p4qg1n3cRG+&jZG zmNW~@(lU;9>cQoSWQCkuiNJGl-f!3pNjV-D#irshrKErD=RwJX!V|4rRE&LUtm<&N zL>8aOik#z65GaWj7Kc)Euow>tSsh>`Fegb#cs@>wC63(XPrWuO759^SD2#Kd*a}ik zZk)$dszB@y^Y>!oKmFrRXxs<<($D+uCThCl~_sA+?LIlwivThbE8-WujJz71~2o4OKGIKk@JPJ zx#rgEj2BV`(QI%I-L!Mv^pFn2pxaU*$cvhGGLMm3VN7|hrYja8l?SRvMR?g@&rM0c zMUcpmoZ^GI>Z{1(LCsKi>YVq3nqdr!XaG6FM>2nGO}5pUo}esxlG|z=C%NjsaSF>0 z3KQ?;)l3VSdDk^TktCUyAq7;~iaOzb!y@ux-`|r5^nT~UmEnn2CWje#p|p+O!!YSX zyti{wQ(^jnb-7nc0nd$>`wP8yuJ3lvbFg2ouc8)Ta5tsFuHL0SL_vu+KdE`p*J3Xl zw~v1>q=@)Pwa_fnDct*{UMsib#-0_kc6&L5LTXx~+X@KpH8I95#1NfrZ$dTM;Pa=i zcz*c>x7(@tyICy9oiPT-{bbBZE{X*oCIz0kyg3@HdZga!y>E+9mm)g08FdQHb-C^| zoZDUW`)%KG65~_?aG6U{@ixgh^YWt3L5P2b*Yooj%&rRZp==rDKI!OG7A~_d`SQG^1kAwYAM>?)Gfwu0{Ygby^k(3 zg<51F-k;v_e0yOpRqU|H|0!9ace(0Txm?oQS_|8@1&?rs;dA5T^EZFuA&!HRG+MKi z$XEzWM7*FDSq+NF5OWAiBmbB#4JjoqmraC&KnE#>Cdb_sN`fsZYF?wqP49=21Mfu8 z4&-mExkRK#BeyVypEu?-VS;Lim&SrzxjdCXUn!)}O(T~aYSN4=IhZW*56*Te%pT*) zV2_<=XD=emx7H%ceT9FCb!ep5q~_CzPl1;;#lXC=$$cLBted!-d#&;_r6h_;+|(C| zwpESITmhBmkov8;Gtxs*rv_mzqmpPP#{Kp}0`6z$c6Un69H+4+{Doh@cYKQ8 zHDJJh9r&mIq$Gdnf9-h>{4k#GzXyEw8GL1sey8#~*9(09S^M(c=TCp86w5VlUzSVD z@7m`dDE7`NdAYyOMG2Afxs$GnYR<|gmI*MSq*gL@C3;?vCUs`m8gn>pYt-tZQ76Sv zucX^rNv2J6nGf5nw&gJE3BF{16m?mjxWn zg*8?HG39qs6n#|5EG1kXjy-|}bJ55#i+bQw55im!KhKO53)IbF*h$_Lw~!pA&t~H5 zE@Y|zxEahk(Xbsdtam*(E+&%0+^kl=Q(jd;R@;)$P-hMt((! zfg0Z=DM#@^im=DMU742TBSM6CKRN?F823vdM}~h_N!rzT((kWT;e${loo10%Au+if zC#f|)T;FrK>#vw_lZNke%5Fdy#CPw102NG@&Hzy3RAgQ&U_57b`A&EmeJgyw2iZ@lg^$Tt&^we0&nNsFf2_jP;+k*3*MEx@ssFHNi$3NGJOy9m_x}zk ze;(TJ!k2$3;P!FR`APh90`{Bmv!8$9%Xe^F4Swr)fBtttzF6MvFa2wO@%f8)=_`M$ z{ywF;_U)41fANFQm#BFBFSc$aT2LRJq zOXW)DbiJXfY5?ek)}xRB=o8jL+?fE4+R85 zkrJvx1Sui{0#XBnB4Fq!Risx@q=b?{2p8Y?-tW%6``?+JJv(z|pHpV`JSSHUBy0eD zc`lfr2Gz{E2K8KGUmLK#{Yu3gq*gy!^`N)@jPkmIa@W0&jh<;P_F!Hjl-e?8kP5}E&g^B12?T9Yk_e2HG|C|Ynut5 zx!|LH{ogIdf>x`mfvS^=V2jVm?EdMsD4$*LL!K0gt0FO1WkIg=jZH`0t2KZFcr*=J z36^gR3n{9ceWi2ZZQZ(KvOd~fBt0mFktj#YY^|@t>cpl7^RM$%_ec%~$)|vfxe`y^`JxFtGzMw~`6A2YL=`hc~$**E+I54hrl+~hoN)bYYpCrb_Y zLc&K(8M+vumQaVo2Qs^m2Ebz(?bD(@QpJTXTHxcSbN#^C@)}}&NNqK@Z#ggp=`2;K zZ#rk_3U>H@TjQ;zZ;!jg+Lht5Lufw@=l24uWS2xybMJiGj>PKB#122LfZv+eo;E48 z{`oK)&0&?GsV#VG-BB+*>4@TNjq}&D+i5pw@JvL9_OrD!vxKp#WhAgI`ls?GHQf$( zbK4b#C7lHU(ZbIWWXi`>mD`n5&0U&dyW95;%*gnU=j{mJDt0_E;?Tzt2g|gWgFmOS zkcO?A%}i+D!DUcZ$lP!abh|xEU$oAoe1>Gi$}U1KmoyyCN8bPwoA*nR!u28E3?^?FtqHwuiNF_yl{y~p&H^bS zv>JMllptU>|sLHe7VyA$Vq-;Sb_>v6xH z>J=nIMZ)S-ghJmLj&^}4mE;n1em;T5*qrx8S+M!-(!qwlQ?ClCJz`RGtawnV=j%BM z0>N#3Mcn+SYeoQdp06zKssqhUBIGdaVD8m-xL$uP%YNqyZ-2cT+Ao|`B3fmlmuPxD zWg>gQk|#DNn^z`{aIiTEgL5JaT#Pu=WMPpJK4u#M>)bhVtTRK`CZa^ZywBg3bg?}o32 ziDrM*J(-r)2wF^eB2qSci&_EN$F9C+teTPy1`b^_mehS5p1^dY;F@}~NH1S}mj37( ztyL7^5w^SXog;W?&C)UbB++_zv@X^~REdHjGf<~UZBJzWa*4=IhF}p9fqN2SYagmP zKEGq;NzlAvG^(Ro*r1W==ATW5c8xAPh|NO zef+-IrYa!J{r47DgoNVrh2;v@DJlkE0va|{A!Op2MpoQS>6?|4aNU+7E|js86ccwF z@>iWENb>rFw2b5rsdcs90y}VVGy8JHJBY%kVjtGDpW9rD4&GgJkdr4n~!pG28uT)vRi)mCmj=`>|gY}KAvt?aHuf$Y`{Kc z6n=D<_=_{(q+vUN5}-MAT0jL0L%r6Iuf$O*C6w+W6c<^Z4a`5APoA%BjpDRxZ+m_? zgQ+_;6;>SGBalwbFobjz@plk#*dOrYW!7-=@@m5Q;5CW*)6?M}xV8*eDKAi6!gLvY zzeb8&f-kkqqC{8O=3=ay*5@?+@TY?9Z;E>cOlX-<4>rFP)cchoI++dq970ktG@_jp z#VB1IYieH*5*FM#ohI~+Mcl=>J0O%nyBB_6r|zAZe?w$3uL2EQH|G3r*z?t7+Nn)` z?N6W|zR?DKja&4yc^vZHSHC?3vr2`&VxNt7eI$XjLRi)4*5G+6lC%rgdr5=5aW&!- zdi=PZmGHwqio*@^SOJYJ%=XXYBCCK%3pb$$k>Wp?xEKGhQwz{i!pD_7astbJQl}AA zn3nqq9E>5>Y&zNQELa;reaDiuO;e|P|69Es!K9h1pt7U;^N&7`&@XX|?fZU)QDvjP zS_S4z_ZykDex*a|^&S`dCGR}igs1vZRl*azm6LMvbhj0eFVw}7BCZd}-<0p-FT)Px z((lMk++*Kj(i8B77NOY+tQif_K}lPGjxIr=Vzw1k^WWy`>E7H0-145ONhY0&`UQWd zO9-XDl_P1I^*)82evgWG0PHg>yO!8$kt*(Z%o7~!n|6ze?6p# zAFmUdsg{Z7bu|frv@48Dx8C~b;q8y79u8T+V=$VhZ`;rQRA{#5VWug(yU*GXHcJRQ z!20!`SNltVJmNBNvZM$cLzMhZDZ-9W&y}SYx=xY^UCIFj?5Z}}x~g`|F085HkOU3- zg$oOk@6F2b^|TV(@;#llhx*<59ys`UwF_^u_p{lFLBH5@6^Z2YV`qFWHdY3+m)c~fVe8|)yR;L zRDVb(ncvrZRf5TPn5n@&l^bPhC)36{|2r4%)Rz0>Vh>Ry)xj9QIdSHS-DQgkNS{O`z$$&nrh^bIXCc3s)nc$)btErYjFz zgR<-oq^-Rx#eLlNvwcIZP12O#kjc~?kqdl6dp_#e13;@sqg(8Rt;eS&k8pfUQc%#S z9*c^3Go5-Y+L|;do#X-^7&B?{gdlpas&W?~;efMY;hrk-mR|=!v3j}pCJ`O0uKseq zjqf$yi|p)I1J6MqDG>aEegm6TW#)-jAmv>&ukME3k_7u+2*MMFNBkKT7Hfoed z9tlM-$787+7@ZH(rw73W5!NM3@ovh_VnAoWUSGWq$58Gu&X*}Tl8!Q`r!hW0G-Q@Z z%OsPN+o`&$tjI8tjoOs|?QK+(rjUNdLQgZ5K120twf~-_Cd`&A2(E)b8}X@=NfM5J zMA317bQj8qfjzwU=P{+e9wS1dW8#HIDg;b-AF)86oDfG%Z@j>LPW4)f{6IbU8rW@h z{93~E1SZ4s8J!AXjft+QMw7ESeq5^X5GGks@_7%67V6fO67aL(GK_#aiZ1?p-RGER zjnQDo-44irPr-&*xsD9en_iH;D15pQ`Ce*Cy!S@nO&oS3tu~$FWIU$)>+n$Z7#LKH z{MevcmZ9X>QqL6O80ERMN8^+ZG;e3kcR+edZ&v(#c(O~o$Vo=B^HST~YRNlWh}rQO zJ?S{=DMVeGSr^BQSA~;U6UZ<(G3&(8g>B-}rJ2>+KQAkv{_dSVBFp?r_Zki}!K7%Sz@$~TF1+Fj1svk%n(b#bxLhoA)N z6rFGRrTp%Zr2}oPy<0sJr4x!|lv#}K!7qzjnD^JHp(b~q$bh#Ls(+7N5(~Vea#2x+ zhPDjD@naKd{~Zn@KHoGI!J3)Dk`;5u^1z3HrxDHDr-JL{uuGCCTL-?YAb7ttMfXBfvDl5f5xWOH`BjfP<5~YmA710nMBg5QnDoJl& zrgHihPm>4=(Q2Qcj{VfBQhb7(^5U29m}$H%yXxVTlOd`&Ry8W9?fDFSH=jF|p2F!% zeTth2eUkYbzr&rz_{8NQwX^K!IK z=JyerBqu=Jr4Bo3omm-)J)i1HL2M;TznJ@rs<|Q5?_lQxn1A%u#?O`BJ^3Hi7fu84P@IHz>sOy6f7a5HeJr^T}h8-do7Hv*{Z z-#$rX5Y85E7;vvKXOu~5)qeV0_oGchEH{=%Mxd3-iZXpgj15yBrQ5cW*H8V6y6QSJ zJ=dp!%SzNHQ;`^Nv($U@h_RVqdEf-4L&U`@>}l~Kb_K&;+AMC9 zP14{vrwH=GD-a+bHFvtxMSIjTTzWbS55R$ONEQzZveetptv-89n@-;xsVn$9jVGOVZF1QIWEy-iZgPw{k)IquudXkxActW8Mf~F8f8(pzf_I)3& zL;+!%c)OzynOM;l?`o-glc(eT8x{p93hs3GzCLIlWl5xFt*TIszQ6pVvRW(tOlN$O zNs;~B&~q32;u7aV-kexX0q%`Zg z=hI;?rM zBzfU4&2Mojr{xOto7`vGj2{c8%s@0YfxVrt`eAp_1@w=?^yEMa@^D#@6a*Hzk@C?2 zWBY~si@0p|4J)t+D+dq9-CnvUeWmwY)6IrONM~PH{6DL>B(&OT7lz%UwLq0W1%c2X z(~#ju*MYWQdi%ltP|ihE4v_W+XIeBj^!LRHC&}OB`E31co(TI0r+1{>c}umWd?Xn$ z%zd^miy(NcY^+Y=8h`*LtdHsh{_qYfQo@;YQu-c4)UU7g(9g=yu?@k!Snh*kRr(Yj4 z7^4PPm&(oQ^>n$qE}ij!BK{6&Lfl|r!4;}<#BfVRHeQskda|mj;JNg(lQN#V-T1T} zVLa->S=7HS4VWR!l+_CF4$}~`Cr{)tF)a}-vBUWX?z$G;;vSDMmz7WQl>J)64hZNh zWnz>aiAcK5X}K&SzluXe9H6%$sG9>V78CIN zGo2YWJ-U8`LubcQ1P%y%;4tE4>G0(ZoV&nNj-UgIi;ATdbFwU9Sy+o4LyL(k+_=?Z zstkwvBKHO|=`!j(8E`(UPLAc$rJkqWE+}UmdalP4Z;P;Ptqz1Z@_D|8$I#g01>%9< zJBOK78dmDE8+!X$LsyplG{+qF*R}G-?AprjhBH@nK^8eLlg$1Ntqr(9Qddx@Bw`*w zZ!>k$8u2|SWG)2b*%r1JPrW+e*ZRDOl**^r;Wpi~LkzB0IY)r7mp=^bba9^k$RYfk zUAJ?$(&-HbET04e4M3{P%BRY}L*$opqRA7`gh8j!p!ArDQz`w$%HkN4H`S~~b%J8d zcC>P~9_Nka$#=wAD8U+m*~Z~lH2?w}YzCbWKQNbk$5w#%E6C2QdJ|Mc_sUTlEAgGT zC^Pc7Z)$JK>@>r!L$>nO=j*^KEnhBv)haba{vT{(4(_S6P0~j&4R*7%8$8?Rh`@g! zn_8M5o{xq^oWa9LgahC3KR8(nKa6daol^KAsn)vR){P{RWvcn}c0TaF3hSdh)gZ8Y z&_i{@`^lgrIem}#as+0y#(`GOQN}bDr?kN=)MlL%*Yjuol5^>mdx?(frtO3@@P0LI zfIp-Zm!<5wcYKWqxkj1+T3Ocr78~dGog12uP^(fey<8&`cK=2L3YVfEArwt(xC%Go zlN2Y3gb|`RzqvmK*5BALAMVDKV#t+MmIi9xL|k0$-Np|JS*)?=9g;4gCR-;;`@hk) zRJPVC;b(uYW3w4-k(q>`2$z-%oQs%?#B{*^pLFTpJK5JK$D|aRJA*XoaHS(dJEdm$ z3IY5nr#tabHjk5ZhnV2Z+5I2mHQ<1TQ>+)H;~f6~So2>{{I|qZ_K(iL(*NEt^G}(5 z?o|Ko{S&GFJ@`LfV!Z diff --git a/files/launcher.qss b/files/launcher.qss index e9f8a3c9f1..dad87022cb 100644 --- a/files/launcher.qss +++ b/files/launcher.qss @@ -11,9 +11,7 @@ } #PlayButton { - height: 50px; - margin-bottom: 30px; background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, @@ -45,18 +43,24 @@ } #PlayButton:pressed { + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(0, 0, 0, 75), + stop:0.1 rgba(0, 0, 0, 15), + stop:0.2 rgba(255, 255, 255, 55) + stop:0.95 rgba(255, 255, 255, 55), + stop:1 rgba(255, 255, 255, 155)); + border: 1px solid rgba(0, 0, 0, 55); } #ProfileLabel { font: 14pt "Trebuchet MS"; } - #ProfilesComboBox { padding: 1px 18px 1px 3px; - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 white, stop:0.2 rgba(0, 0, 0, 25), stop:1 rgba(255, 255, 255, 200)); + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 white, stop:0.2 rgba(0, 0, 0, 25), stop:1 white); border-width: 1px; border-color: rgba(0, 0, 0, 125); border-style: solid; @@ -65,7 +69,12 @@ /*QComboBox gets the "on" state when the popup is open */ #ProfilesComboBox:!editable:on, #ProfilesComboBox::drop-down:editable:on { - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 gray, stop:0.2 white); + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(0, 0, 0, 75), + stop:0.1 rgba(0, 0, 0, 15), + stop:0.2 rgba(255, 255, 255, 55)); + + border: 1px solid rgba(0, 0, 0, 55); } @@ -97,6 +106,11 @@ left: 1px; } +#ProfilesComboBox QAbstractItemView { + border: 2px solid lightgray; + border-radius: 5px; +} + #IconWidget { background-image: url(":/images/openmw-header.png"); background-color: white; From 7cbed6c58a3a6bf5d7fac0503325cc20b6b903ba Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 26 Jun 2011 23:35:23 +0200 Subject: [PATCH 099/111] Replaced some costly string-comparisons with QLatin1String --- apps/launcher/graphicspage.cpp | 15 ++++++++------- apps/launcher/maindialog.cpp | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 0566b3d23f..d758aadb2f 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -270,7 +270,7 @@ void GraphicsPage::readConfig() } index = mOGLAntiAliasingComboBox->findText(getConfigValue("FSAA", mOpenGLRenderSystem)); - if ( index != -1) { + if ( index != -1){ mOGLAntiAliasingComboBox->setCurrentIndex(index); } @@ -285,17 +285,18 @@ void GraphicsPage::readConfig() } // Now we do the same for the checkboxes - if (QString::compare(getConfigValue("VSync", mOpenGLRenderSystem), QString("Yes")) == 0) { + if (getConfigValue("VSync", mOpenGLRenderSystem) == QLatin1String("Yes")) { mOGLVSyncCheckBox->setCheckState(Qt::Checked); } - if (QString::compare(getConfigValue("Full Screen", mOpenGLRenderSystem), QString("Yes")) == 0) { + if (getConfigValue("Full Screen", mOpenGLRenderSystem) == QLatin1String("Yes")) { mOGLFullScreenCheckBox->setCheckState(Qt::Checked); } } if (mDirect3DRenderSystem) { - int index = mD3DRenderDeviceComboBox->findText(getConfigValue("Rendering Device", mDirect3DRenderSystem)); + + int index = mD3DRenderDeviceComboBox->findText(getConfigValue("Rendering Device", mDirect3DRenderSystem)); if ( index != -1) { mD3DRenderDeviceComboBox->setCurrentIndex(index); } @@ -315,15 +316,15 @@ void GraphicsPage::readConfig() mD3DResolutionComboBox->setCurrentIndex(index); } - if (QString::compare(getConfigValue("Allow NVPerfHUD", mDirect3DRenderSystem), QString("Yes")) == 0) { + if (getConfigValue("Allow NVPerfHUD", mDirect3DRenderSystem) == QLatin1String("Yes")) { mD3DNvPerfCheckBox->setCheckState(Qt::Checked); } - if (QString::compare(getConfigValue("VSync", mDirect3DRenderSystem), QString("Yes")) == 0) { + if (getConfigValue("VSync", mDirect3DRenderSystem) == QLatin1String("Yes")) { mD3DVSyncCheckBox->setCheckState(Qt::Checked); } - if (QString::compare(getConfigValue("Full Screen", mDirect3DRenderSystem), QString("Yes")) == 0) { + if (getConfigValue("Full Screen", mDirect3DRenderSystem) == QLatin1String("Yes")) { mD3DFullScreenCheckBox->setCheckState(Qt::Checked); } } diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 841d4de3bd..7f92fa8ccf 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -178,11 +178,11 @@ void MainDialog::profileChanged(int index) } QString currentPage = mIconWidget->currentItem()->data(Qt::DisplayRole).toString(); - if (currentPage == QString("Play")) { + if (currentPage == QLatin1String("Play")) { mDataFilesPage->mProfilesComboBox->setCurrentIndex(index); } - if (currentPage == QString("Data Files")) { + if (currentPage == QLatin1String("Data Files")) { mPlayPage->mProfilesComboBox->setCurrentIndex(index); } } From 53d778762e8a22f3e487aad6dfcec84514262a14 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 15 Jul 2011 15:04:06 +0200 Subject: [PATCH 100/111] Added dirty hack to get the combobox to work on Mac and GTK platforms --- apps/launcher/datafilespage.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 545595ab87..d06523d2db 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -92,9 +93,11 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Bottom part with profile options QLabel *profileLabel = new QLabel(tr("Current Profile: "), this); + QPlastiqueStyle *style = new QPlastiqueStyle; mProfilesComboBox = new ComboBox(this); mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); + mProfilesComboBox->setStyle(style); mProfileToolBar = new QToolBar(this); mProfileToolBar->setMovable(false); From 57a18d4a244f3f2b56d84591b4e7049b932d5a28 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 16 Jul 2011 15:40:40 +0200 Subject: [PATCH 101/111] Combobox hack should be applied to the play tab, not the data files tab. Fixed it. --- apps/launcher/datafilespage.cpp | 3 --- apps/launcher/playpage.cpp | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index d06523d2db..545595ab87 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -93,11 +92,9 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent) // Bottom part with profile options QLabel *profileLabel = new QLabel(tr("Current Profile: "), this); - QPlastiqueStyle *style = new QPlastiqueStyle; mProfilesComboBox = new ComboBox(this); mProfilesComboBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); mProfilesComboBox->setInsertPolicy(QComboBox::InsertAtBottom); - mProfilesComboBox->setStyle(style); mProfileToolBar = new QToolBar(this); mProfileToolBar->setMovable(false); diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp index 2ad62d7c82..cb993a8fa0 100644 --- a/apps/launcher/playpage.cpp +++ b/apps/launcher/playpage.cpp @@ -15,8 +15,10 @@ PlayPage::PlayPage(QWidget *parent) : QWidget(parent) QLabel *profileLabel = new QLabel(tr("Current Profile:"), playWidget); profileLabel->setObjectName("ProfileLabel"); + QPlastiqueStyle *style = new QPlastiqueStyle; mProfilesComboBox = new QComboBox(playWidget); mProfilesComboBox->setObjectName("ProfilesComboBox"); + mProfilesComboBox->setStyle(style); QGridLayout *playLayout = new QGridLayout(playWidget); From 8ec88d2983399d1e537e48aaf07fb4ba913d844c Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 23 Jul 2011 23:30:39 +0200 Subject: [PATCH 102/111] Started writing a readme, needs installation instructions --- readme.txt | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 readme.txt diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000000..453c8a84cb --- /dev/null +++ b/readme.txt @@ -0,0 +1,34 @@ +OpenMW: A reimplementation of The Elder Scrolls III: Morrowind + +OpenMW is an attempt at recreating the engine for the popular role-playing game +Morrowind by Bethesda Softworks. You need to own and install the original game for OpenMW to work. + +Version: 0.11 +License: GPL (see GPL3.txt for more information) +Website: www.openmw.com + + +INSTALLATION + +Windows: +Text goes here + +Linux: +Ubuntu + +Arch Linux +There's an OpenMW package available in the AUR Repository: +http://aur.archlinux.org/packages.php?ID=21419 + + +CREDITS + +OpenMW: +Thanks to DokterDume for kindly providing us with the Moon and Star logo +used as the application icon and project logo. + +Launcher: +Thanks to Kevin Ryan for kindly providing us with the icon used for the Data Files tab. + + +CHANGELOG \ No newline at end of file From 0acf34a0de6d72819e35bd04631df02cb75768f1 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 28 Jul 2011 10:03:44 +0200 Subject: [PATCH 103/111] boost compatibility fix --- apps/launcher/datafilespage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 545595ab87..f16f716e8e 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -142,7 +142,7 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) for (Files::MultiDirCollection::TIter iter(esm.begin()); iter!=esm.end(); ++iter) { - QString currentMaster = QString::fromStdString(iter->second.filename().string()); + QString currentMaster = QString::fromStdString(std::string (iter->second.filename())); const QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); if (itemList.isEmpty()) // Master is not yet in the widget @@ -186,7 +186,7 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) // Now we put the current plugin in the mDataFilesModel under its masters QStandardItem *parent = new QStandardItem(availableMasters.join(",")); - QStandardItem *child = new QStandardItem(QString::fromStdString(iter->second.filename().string())); + QStandardItem *child = new QStandardItem(QString::fromStdString(std::string (iter->second.filename()))); const QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); From 36b324de3242e5f21b26fb7d6f8f19936ed463a5 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 28 Jul 2011 10:14:19 +0200 Subject: [PATCH 104/111] added WIP tag and missing sections to readme file --- readme.txt | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index 453c8a84cb..66e7c12ec3 100644 --- a/readme.txt +++ b/readme.txt @@ -8,21 +8,36 @@ License: GPL (see GPL3.txt for more information) Website: www.openmw.com +THIS IS A WORK IN PROGRESS + INSTALLATION Windows: -Text goes here +TODO add description for Windows Linux: Ubuntu +TODO add description for Ubuntu Arch Linux There's an OpenMW package available in the AUR Repository: http://aur.archlinux.org/packages.php?ID=21419 +OS X: +TODO add description for OS X + +BUILD FROM SOURCE + +TODO add description here + +COMMAND LINE OPTIONS +TODO add description of command line options CREDITS +Developers: +TODO add list of developers + OpenMW: Thanks to DokterDume for kindly providing us with the Moon and Star logo used as the application icon and project logo. @@ -31,4 +46,6 @@ Launcher: Thanks to Kevin Ryan for kindly providing us with the icon used for the Data Files tab. -CHANGELOG \ No newline at end of file +CHANGELOG + +TODO add changelog (take pre 0.11.0 changelog from wiki when it is up again; take 0.11.0 and later changelog from tracker) From c9c54fed8ffa7819301d36797c39a6bd5e68a0e6 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Fri, 29 Jul 2011 21:39:20 +0200 Subject: [PATCH 105/111] =?UTF-8?q?Modified=20Boost=20fix=20to=20work=20wi?= =?UTF-8?q?th=20Boost=20=E2=89=A5=201.46?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/launcher/datafilespage.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index f16f716e8e..91edc10e0b 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -142,7 +142,9 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) for (Files::MultiDirCollection::TIter iter(esm.begin()); iter!=esm.end(); ++iter) { - QString currentMaster = QString::fromStdString(std::string (iter->second.filename())); + std::string filename = boost::filesystem::path (iter->second.filename()).string(); + QString currentMaster = QString::fromStdString(filename); + const QList itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly); if (itemList.isEmpty()) // Master is not yet in the widget @@ -186,7 +188,9 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict) // Now we put the current plugin in the mDataFilesModel under its masters QStandardItem *parent = new QStandardItem(availableMasters.join(",")); - QStandardItem *child = new QStandardItem(QString::fromStdString(std::string (iter->second.filename()))); + + std::string filename = boost::filesystem::path (iter->second.filename()).string(); + QStandardItem *child = new QStandardItem(QString::fromStdString(std::string(filename))); const QList masterList = mDataFilesModel->findItems(availableMasters.join(",")); From 18d8d89bdbc7eb1a82b139dde83bfa373d319101 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 30 Jul 2011 03:09:29 +0200 Subject: [PATCH 106/111] Removed all debug messages --- apps/launcher/datafilespage.cpp | 1 - apps/launcher/graphicspage.cpp | 1 - apps/launcher/maindialog.cpp | 2 -- apps/launcher/pluginsmodel.cpp | 1 - 4 files changed, 5 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 91edc10e0b..24cb1b3cf2 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -219,7 +219,6 @@ void DataFilesPage::setupConfig() } file.setFileName(config); // Just for displaying information - qDebug() << "Using config file from " << file.fileName(); // Open our config file mLauncherConfig = new QSettings(config, QSettings::IniFormat); diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index d758aadb2f..779b07607f 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -176,7 +176,6 @@ void GraphicsPage::setupOgre() try { mOgre = new Ogre::Root(pluginCfg.toStdString()); - qDebug("Ogre::Root created successfully."); } catch(Ogre::Exception &ex) { diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 7f92fa8ccf..f697bf12b8 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -298,8 +298,6 @@ void MainDialog::writeConfig() QStringList dataFiles = mDataFilesPage->selectedMasters(); dataFiles.append(mDataFilesPage->checkedPlugins()); - qDebug("Writing to openmw.cfg"); - // Open the config as a QFile QFile file(mGameConfig->fileName()); diff --git a/apps/launcher/pluginsmodel.cpp b/apps/launcher/pluginsmodel.cpp index 24072839e4..5ad8111b1e 100644 --- a/apps/launcher/pluginsmodel.cpp +++ b/apps/launcher/pluginsmodel.cpp @@ -1,6 +1,5 @@ #include #include -#include #include "pluginsmodel.hpp" From 1b536d69f359c571ce0170ea84164b57274e917f Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 30 Jul 2011 19:19:24 +0200 Subject: [PATCH 107/111] Added and removed some debugging information --- apps/launcher/main.cpp | 5 +++++ apps/launcher/maindialog.cpp | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/launcher/main.cpp b/apps/launcher/main.cpp index 4e438a4db1..c89a14f5fd 100644 --- a/apps/launcher/main.cpp +++ b/apps/launcher/main.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "maindialog.hpp" @@ -23,6 +24,10 @@ int main(int argc, char *argv[]) // Load the stylesheet QFile file("./launcher.qss"); + + QFileInfo fi(file); + + qDebug() << "Stylesheet path is: " << fi.absoluteFilePath(); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index f697bf12b8..f51b3b5497 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -277,8 +277,6 @@ void MainDialog::setupConfig() "openmw", "openmw.cfg")); } - file.setFileName(config); // Just for displaying information - qDebug() << "Using config file from " << file.fileName(); file.close(); // Open our config file From 14704e65a1eca7052b1161b27203b024c22f3c3a Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 31 Jul 2011 10:42:42 +0200 Subject: [PATCH 108/111] minor fix --- apps/launcher/pluginsmodel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/launcher/pluginsmodel.cpp b/apps/launcher/pluginsmodel.cpp index 5ad8111b1e..86bd53027f 100644 --- a/apps/launcher/pluginsmodel.cpp +++ b/apps/launcher/pluginsmodel.cpp @@ -1,6 +1,8 @@ #include #include +#include + #include "pluginsmodel.hpp" PluginsModel::PluginsModel(QObject *parent) : QStandardItemModel(parent) @@ -53,8 +55,8 @@ bool PluginsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, //code based on QAbstractItemModel::decodeData // adapted to work with QStandardItem - int top = INT_MAX; - int left = INT_MAX; + int top = std::numeric_limits::max(); + int left = std::numeric_limits::max(); int bottom = 0; int right = 0; QVector rows, columns; @@ -144,4 +146,4 @@ bool PluginsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, emit indexesDropped(newIndexes); return true; -} \ No newline at end of file +} From 3fb99fa4b53212cf953002ce29757c318c9c4668 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 31 Jul 2011 17:43:16 +0200 Subject: [PATCH 109/111] Modified Ogre exception handling to get rid of a compiler warning --- apps/launcher/graphicspage.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 779b07607f..de3b0211e9 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -190,8 +190,7 @@ void GraphicsPage::setupOgre() msgBox.setDetailedText(ogreError); msgBox.exec(); - QString error = QString("Error creating Ogre::Root, the error reported was: %0").arg(ogreError); - qCritical(error.toAscii()); + qCritical("Error creating Ogre::Root, the error reported was:\n %s", qPrintable(ogreError)); std::exit(1); } From 8c4a246abdaf9c67ef667825891da5ddde766039 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 31 Jul 2011 18:13:24 +0200 Subject: [PATCH 110/111] Disabled Ogre debug output to stdout/stderr --- apps/launcher/graphicspage.cpp | 4 ++++ apps/launcher/main.cpp | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index de3b0211e9..147dbd15e1 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -172,6 +172,10 @@ void GraphicsPage::setupOgre() pluginCfg = QString::fromStdString(Files::getPath(Files::Path_ConfigUser, "openmw", "plugins.cfg")); } + + // Create a log manager so we can surpress debug text to stdout/stderr + Ogre::LogManager* logMgr = OGRE_NEW Ogre::LogManager; + logMgr->createLog("Ogre.log", true, false, false); try { diff --git a/apps/launcher/main.cpp b/apps/launcher/main.cpp index c89a14f5fd..4e438a4db1 100644 --- a/apps/launcher/main.cpp +++ b/apps/launcher/main.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "maindialog.hpp" @@ -24,10 +23,6 @@ int main(int argc, char *argv[]) // Load the stylesheet QFile file("./launcher.qss"); - - QFileInfo fi(file); - - qDebug() << "Stylesheet path is: " << fi.absoluteFilePath(); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); From 88edbad7178912aaccf0d79350f735a1bdafd982 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sun, 31 Jul 2011 19:17:52 +0200 Subject: [PATCH 111/111] Changed plugins.cfg lookup code to include the global directory --- apps/launcher/graphicspage.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index 147dbd15e1..0074346e73 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -165,7 +165,6 @@ void GraphicsPage::setupConfig() void GraphicsPage::setupOgre() { QString pluginCfg = "./plugins.cfg"; - QFile file(pluginCfg); if (!file.exists()) { @@ -173,9 +172,18 @@ void GraphicsPage::setupOgre() "openmw", "plugins.cfg")); } + // Reopen the file from user directory + file.setFileName(pluginCfg); + + if (!file.exists()) { + // There's no plugins.cfg in the user directory, use global directory + pluginCfg = QString::fromStdString(Files::getPath(Files::Path_ConfigGlobal, + "openmw", "plugins.cfg")); + } + // Create a log manager so we can surpress debug text to stdout/stderr Ogre::LogManager* logMgr = OGRE_NEW Ogre::LogManager; - logMgr->createLog("Ogre.log", true, false, false); + logMgr->createLog("launcherOgre.log", true, false, false); try {