mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 22:26:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			142 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| #include "merge.hpp"
 | |
| 
 | |
| #include <QVBoxLayout>
 | |
| #include <QDialogButtonBox>
 | |
| #include <QSplitter>
 | |
| #include <QPushButton>
 | |
| #include <QListWidget>
 | |
| #include <QLabel>
 | |
| #include <QKeyEvent>
 | |
| 
 | |
| #include "../../model/doc/document.hpp"
 | |
| #include "../../model/doc/documentmanager.hpp"
 | |
| 
 | |
| #include "../doc/filewidget.hpp"
 | |
| #include "../doc/adjusterwidget.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 (0), 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, SIGNAL (nameChanged (const QString&, bool)),
 | |
|         mAdjuster, SLOT (setName (const QString&, bool)));
 | |
|     connect (mAdjuster, SIGNAL (stateChanged (bool)), this, SLOT (stateChanged (bool)));
 | |
| 
 | |
|     // buttons
 | |
|     QDialogButtonBox *buttons = new QDialogButtonBox (QDialogButtonBox::Cancel, Qt::Horizontal, this);
 | |
| 
 | |
|     connect (buttons->button (QDialogButtonBox::Cancel), SIGNAL (clicked()), this, SLOT (cancel()));
 | |
| 
 | |
|     mOkay = new QPushButton ("Merge", this);
 | |
|     connect (mOkay, SIGNAL (clicked()), this, SLOT (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<boost::filesystem::path> files = document->getContentFiles();
 | |
| 
 | |
|     for (std::vector<boost::filesystem::path>::const_iterator iter (files.begin());
 | |
|         iter!=files.end(); ++iter)
 | |
|         mFiles->addItem (QString::fromUtf8 (iter->filename().string().c_str()));
 | |
| }
 | |
| 
 | |
| void CSVTools::Merge::setLocalData (const boost::filesystem::path& localData)
 | |
| {
 | |
|     mAdjuster->setLocalData (localData);
 | |
| }
 | |
| 
 | |
| CSMDoc::Document *CSVTools::Merge::getDocument() const
 | |
| {
 | |
|     return mDocument;
 | |
| }
 | |
| 
 | |
| void CSVTools::Merge::cancel()
 | |
| {
 | |
|     mDocument = 0;
 | |
|     hide();
 | |
| }
 | |
| 
 | |
| void CSVTools::Merge::accept()
 | |
| {
 | |
|     if ((mDocument->getState() & CSMDoc::State_Merging)==0)
 | |
|     {
 | |
|         std::vector< boost::filesystem::path > files (1, 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);
 | |
| }
 |