mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-25 09:29:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
	
		
			5.1 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/Config/PathDialog.h"
 | |
| #include "DolphinQt2/Settings.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);
 | |
| }
 |