Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
#include "merge.hpp"
#include <QDialogButtonBox>#include <QKeyEvent>#include <QLabel>#include <QListWidget>#include <QPushButton>#include <QSplitter>#include <QVBoxLayout>
#include <components/files/qtconversion.hpp>
#include "../../model/doc/document.hpp"#include "../../model/doc/documentmanager.hpp"#include "../../model/doc/state.hpp"
#include "../doc/adjusterwidget.hpp"#include "../doc/filewidget.hpp"
void CSVTools::Merge::keyPressEvent(QKeyEvent* event){ if (event->key() == Qt::Key_Escape) { event->accept(); cancel(); } else QWidget::keyPressEvent(event);}
CSVTools::Merge::Merge(CSMDoc::DocumentManager& documentManager, QWidget* parent) : QWidget(parent) , mDocument(nullptr) , mDocumentManager(documentManager){ setWindowTitle("Merge Content Files into a new Game File");
QVBoxLayout* mainLayout = new QVBoxLayout; setLayout(mainLayout);
QSplitter* splitter = new QSplitter(Qt::Horizontal, this);
mainLayout->addWidget(splitter, 1);
// left panel (files to be merged) QWidget* left = new QWidget(this); left->setContentsMargins(0, 0, 0, 0); splitter->addWidget(left);
QVBoxLayout* leftLayout = new QVBoxLayout; left->setLayout(leftLayout);
leftLayout->addWidget(new QLabel("Files to be merged", this));
mFiles = new QListWidget(this); leftLayout->addWidget(mFiles, 1);
// right panel (new game file) QWidget* right = new QWidget(this); right->setContentsMargins(0, 0, 0, 0); splitter->addWidget(right);
QVBoxLayout* rightLayout = new QVBoxLayout; rightLayout->setAlignment(Qt::AlignTop); right->setLayout(rightLayout);
rightLayout->addWidget(new QLabel("New game file", this));
mNewFile = new CSVDoc::FileWidget(this); mNewFile->setType(false); mNewFile->extensionLabelIsVisible(true); rightLayout->addWidget(mNewFile);
mAdjuster = new CSVDoc::AdjusterWidget(this);
rightLayout->addWidget(mAdjuster);
connect(mNewFile, &CSVDoc::FileWidget::nameChanged, mAdjuster, &CSVDoc::AdjusterWidget::setName); connect(mAdjuster, &CSVDoc::AdjusterWidget::stateChanged, this, &Merge::stateChanged);
// buttons QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this);
connect(buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &Merge::cancel);
mOkay = new QPushButton("Merge", this); connect(mOkay, &QPushButton::clicked, this, &Merge::accept); mOkay->setDefault(true); buttons->addButton(mOkay, QDialogButtonBox::AcceptRole);
mainLayout->addWidget(buttons);}
void CSVTools::Merge::configure(CSMDoc::Document* document){ mDocument = document;
mNewFile->setName("");
// content files while (mFiles->count()) delete mFiles->takeItem(0);
std::vector<std::filesystem::path> files = document->getContentFiles();
for (std::vector<std::filesystem::path>::const_iterator iter(files.begin()); iter != files.end(); ++iter) mFiles->addItem(Files::pathToQString(iter->filename()));}
void CSVTools::Merge::setLocalData(const std::filesystem::path& localData){ mAdjuster->setLocalData(localData);}
CSMDoc::Document* CSVTools::Merge::getDocument() const{ return mDocument;}
void CSVTools::Merge::cancel(){ mDocument = nullptr; hide();}
void CSVTools::Merge::accept(){ if ((mDocument->getState() & CSMDoc::State_Merging) == 0) { std::vector<std::filesystem::path> files{ mAdjuster->getPath() };
std::unique_ptr<CSMDoc::Document> target(mDocumentManager.makeDocument(files, files[0], true));
mDocument->runMerge(std::move(target));
hide(); }}
void CSVTools::Merge::stateChanged(bool valid){ mOkay->setEnabled(valid);}