forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			185 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			185 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | // Copyright 2015 Dolphin Emulator Project
 | ||
|  | // Licensed under GPLv2+
 | ||
|  | // Refer to the license.txt file included.
 | ||
|  | 
 | ||
|  | #include <QAction>
 | ||
|  | #include <QDialogButtonBox>
 | ||
|  | #include <QDir>
 | ||
|  | #include <QFileDialog>
 | ||
|  | #include <QFont>
 | ||
|  | #include <QLabel>
 | ||
|  | #include <QLineEdit>
 | ||
|  | #include <QListWidget>
 | ||
|  | #include <QPushButton>
 | ||
|  | #include <QSize>
 | ||
|  | #include <QVBoxLayout>
 | ||
|  | 
 | ||
|  | #include "DolphinQt2/Settings.h"
 | ||
|  | #include "DolphinQt2/Config/PathDialog.h"
 | ||
|  | 
 | ||
|  | PathDialog::PathDialog(QWidget* parent) | ||
|  | 	: QDialog(parent) | ||
|  | { | ||
|  | 	setWindowTitle(tr("Paths")); | ||
|  | 
 | ||
|  | 	QVBoxLayout* layout = new QVBoxLayout; | ||
|  | 	layout->addWidget(MakeGameFolderBox()); | ||
|  | 	layout->addLayout(MakePathsLayout()); | ||
|  | 
 | ||
|  | 	QDialogButtonBox* ok_box = new QDialogButtonBox(QDialogButtonBox::Ok); | ||
|  | 	connect(ok_box, &QDialogButtonBox::accepted, this, &PathDialog::accept); | ||
|  | 	layout->addWidget(ok_box); | ||
|  | 
 | ||
|  | 	setLayout(layout); | ||
|  | } | ||
|  | 
 | ||
|  | void PathDialog::Browse() | ||
|  | { | ||
|  | 	QString dir = QFileDialog::getExistingDirectory(this, | ||
|  | 			tr("Select a Directory"), | ||
|  | 			QDir::currentPath()); | ||
|  | 	if (!dir.isEmpty()) | ||
|  | 	{ | ||
|  | 		Settings settings; | ||
|  | 		QStringList game_folders = settings.GetPaths(); | ||
|  | 		if (!game_folders.contains(dir)) | ||
|  | 		{ | ||
|  | 			game_folders << dir; | ||
|  | 			settings.SetPaths(game_folders); | ||
|  | 			m_path_list->addItem(dir); | ||
|  | 			emit PathAdded(dir); | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void PathDialog::BrowseDefaultGame() | ||
|  | { | ||
|  | 	QString file = QFileDialog::getOpenFileName(this, | ||
|  | 			tr("Select a Game"), | ||
|  | 			QDir::currentPath(), | ||
|  | 			tr("All GC/Wii files (*.elf *.dol *.gcm *.iso *.wbfs *.ciso *.gcz *.wad);;" | ||
|  | 			   "All Files (*)")); | ||
|  | 	if (!file.isEmpty()) | ||
|  | 	{ | ||
|  | 		m_game_edit->setText(file); | ||
|  | 		Settings().SetDefaultGame(file); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void PathDialog::BrowseDVDRoot() | ||
|  | { | ||
|  | 	QString dir = QFileDialog::getExistingDirectory(this, | ||
|  | 			tr("Select DVD Root"), | ||
|  | 			QDir::currentPath()); | ||
|  | 	if (!dir.isEmpty()) | ||
|  | 	{ | ||
|  | 		m_dvd_edit->setText(dir); | ||
|  | 		Settings().SetDVDRoot(dir); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void PathDialog::BrowseApploader() | ||
|  | { | ||
|  | 	QString file = QFileDialog::getOpenFileName(this, | ||
|  | 			tr("Select an Apploader"), | ||
|  | 			QDir::currentPath(), | ||
|  | 			tr("Apploaders (*.img)")); | ||
|  | 	if (!file.isEmpty()) | ||
|  | 	{ | ||
|  | 		m_app_edit->setText(file); | ||
|  | 		Settings().SetApploader(file); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void PathDialog::BrowseWiiNAND() | ||
|  | { | ||
|  | 	QString dir = QFileDialog::getExistingDirectory(this, | ||
|  | 			tr("Select Wii NAND Root"), | ||
|  | 			QDir::currentPath()); | ||
|  | 	if (!dir.isEmpty()) | ||
|  | 	{ | ||
|  | 		m_nand_edit->setText(dir); | ||
|  | 		Settings().SetWiiNAND(dir); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | QGroupBox* PathDialog::MakeGameFolderBox() | ||
|  | { | ||
|  | 	QGroupBox* game_box = new QGroupBox(tr("Game Folders")); | ||
|  | 	game_box->setMinimumSize(QSize(400, 250)); | ||
|  | 	QVBoxLayout* vlayout = new QVBoxLayout; | ||
|  | 
 | ||
|  | 	m_path_list = new QListWidget; | ||
|  | 	m_path_list->insertItems(0, Settings().GetPaths()); | ||
|  | 	m_path_list->setSpacing(1); | ||
|  | 	vlayout->addWidget(m_path_list); | ||
|  | 
 | ||
|  | 	QHBoxLayout* hlayout = new QHBoxLayout; | ||
|  | 
 | ||
|  | 	hlayout->addStretch(); | ||
|  | 	QPushButton* add = new QPushButton(tr("Add")); | ||
|  | 	QPushButton* remove = new QPushButton(tr("Remove")); | ||
|  | 	hlayout->addWidget(add); | ||
|  | 	hlayout->addWidget(remove); | ||
|  | 	vlayout->addLayout(hlayout); | ||
|  | 
 | ||
|  | 	connect(add, &QPushButton::clicked, this, &PathDialog::Browse); | ||
|  | 	connect(remove, &QPushButton::clicked, this, &PathDialog::RemovePath); | ||
|  | 
 | ||
|  | 	game_box->setLayout(vlayout); | ||
|  | 	return game_box; | ||
|  | } | ||
|  | 
 | ||
|  | QGridLayout* PathDialog::MakePathsLayout() | ||
|  | { | ||
|  | 	QGridLayout* layout = new QGridLayout; | ||
|  | 	layout->setColumnStretch(1, 1); | ||
|  | 
 | ||
|  | 	m_game_edit = new QLineEdit(Settings().GetDefaultGame()); | ||
|  | 	connect(m_game_edit, &QLineEdit::editingFinished, | ||
|  | 			[=]{ Settings().SetDefaultGame(m_game_edit->text()); }); | ||
|  | 	QPushButton* game_open = new QPushButton; | ||
|  | 	connect(game_open, &QPushButton::clicked, this, &PathDialog::BrowseDefaultGame); | ||
|  | 	layout->addWidget(new QLabel(tr("Default Game")), 0, 0); | ||
|  | 	layout->addWidget(m_game_edit, 0, 1); | ||
|  | 	layout->addWidget(game_open, 0, 2); | ||
|  | 
 | ||
|  | 	m_dvd_edit = new QLineEdit(Settings().GetDVDRoot()); | ||
|  | 	connect(m_dvd_edit, &QLineEdit::editingFinished, | ||
|  | 			[=]{ Settings().SetDVDRoot(m_dvd_edit->text()); }); | ||
|  | 	QPushButton* dvd_open = new QPushButton; | ||
|  | 	connect(dvd_open, &QPushButton::clicked, this, &PathDialog::BrowseDVDRoot); | ||
|  | 	layout->addWidget(new QLabel(tr("DVD Root")), 1, 0); | ||
|  | 	layout->addWidget(m_dvd_edit, 1, 1); | ||
|  | 	layout->addWidget(dvd_open, 1, 2); | ||
|  | 
 | ||
|  | 	m_app_edit = new QLineEdit(Settings().GetApploader()); | ||
|  | 	connect(m_app_edit, &QLineEdit::editingFinished, | ||
|  | 			[=]{ Settings().SetApploader(m_app_edit->text()); }); | ||
|  | 	QPushButton* app_open = new QPushButton; | ||
|  | 	connect(app_open, &QPushButton::clicked, this, &PathDialog::BrowseApploader); | ||
|  | 	layout->addWidget(new QLabel(tr("Apploader")), 2, 0); | ||
|  | 	layout->addWidget(m_app_edit, 2, 1); | ||
|  | 	layout->addWidget(app_open, 2, 2); | ||
|  | 
 | ||
|  | 	m_nand_edit = new QLineEdit(Settings().GetWiiNAND()); | ||
|  | 	connect(m_nand_edit, &QLineEdit::editingFinished, | ||
|  | 			[=]{ Settings().SetWiiNAND(m_nand_edit->text()); }); | ||
|  | 	QPushButton* nand_open = new QPushButton; | ||
|  | 	connect(nand_open, &QPushButton::clicked, this, &PathDialog::BrowseWiiNAND); | ||
|  | 	layout->addWidget(new QLabel(tr("Wii NAND Root")), 3, 0); | ||
|  | 	layout->addWidget(m_nand_edit, 3, 1); | ||
|  | 	layout->addWidget(nand_open, 3, 2); | ||
|  | 
 | ||
|  | 	return layout; | ||
|  | } | ||
|  | 
 | ||
|  | void PathDialog::RemovePath() | ||
|  | { | ||
|  | 	int row = m_path_list->currentRow(); | ||
|  | 	if (row < 0) | ||
|  | 		return; | ||
|  | 	emit PathRemoved(m_path_list->takeItem(row)->text()); | ||
|  | 	Settings().RemovePath(row); | ||
|  | } |