mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	citra_qt/dumping: Add options dialog
This is a simple list of name-value pairs of options. Users can double-click on an option to set or modify its value.
This commit is contained in:
		
							parent
							
								
									94bc09d3ae
								
							
						
					
					
						commit
						e769d90aa8
					
				
					 3 changed files with 141 additions and 0 deletions
				
			
		
							
								
								
									
										59
									
								
								src/citra_qt/dumping/options_dialog.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/citra_qt/dumping/options_dialog.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| // Copyright 2020 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <QTreeWidgetItem> | ||||
| #include "citra_qt/dumping/option_set_dialog.h" | ||||
| #include "citra_qt/dumping/options_dialog.h" | ||||
| #include "ui_options_dialog.h" | ||||
| 
 | ||||
| constexpr char UNSET_TEXT[] = QT_TR_NOOP("[not set]"); | ||||
| 
 | ||||
| void OptionsDialog::PopulateOptions(const std::string& current_value) { | ||||
|     for (std::size_t i = 0; i < options.size(); ++i) { | ||||
|         const auto& option = options.at(i); | ||||
|         auto* item = new QTreeWidgetItem( | ||||
|             {QString::fromStdString(option.name), QString::fromStdString(current_values.Get( | ||||
|                                                       option.name, tr(UNSET_TEXT).toStdString()))}); | ||||
|         item->setData(1, Qt::UserRole, static_cast<unsigned long long>(i)); // ID
 | ||||
|         ui->main->addTopLevelItem(item); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void OptionsDialog::OnSetOptionValue(int id) { | ||||
|     OptionSetDialog dialog(this, options[id], | ||||
|                            current_values.Get(options[id].name, options[id].default_value)); | ||||
|     if (dialog.exec() != QDialog::DialogCode::Accepted) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     const auto& [is_set, value] = dialog.GetCurrentValue(); | ||||
|     if (is_set) { | ||||
|         current_values.Set(options[id].name, value); | ||||
|     } else { | ||||
|         current_values.Erase(options[id].name); | ||||
|     } | ||||
|     ui->main->invisibleRootItem()->child(id)->setText(1, is_set ? QString::fromStdString(value) | ||||
|                                                                 : tr(UNSET_TEXT)); | ||||
| } | ||||
| 
 | ||||
| std::string OptionsDialog::GetCurrentValue() const { | ||||
|     return current_values.Serialize(); | ||||
| } | ||||
| 
 | ||||
| OptionsDialog::OptionsDialog(QWidget* parent, std::vector<VideoDumper::OptionInfo> options_, | ||||
|                              const std::string& current_value) | ||||
|     : QDialog(parent), ui(std::make_unique<Ui::OptionsDialog>()), options(std::move(options_)), | ||||
|       current_values(current_value) { | ||||
| 
 | ||||
|     ui->setupUi(this); | ||||
|     PopulateOptions(current_value); | ||||
| 
 | ||||
|     connect(ui->main, &QTreeWidget::itemDoubleClicked, [this](QTreeWidgetItem* item, int column) { | ||||
|         OnSetOptionValue(item->data(1, Qt::UserRole).toInt()); | ||||
|     }); | ||||
|     connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &OptionsDialog::accept); | ||||
|     connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &OptionsDialog::reject); | ||||
| } | ||||
| 
 | ||||
| OptionsDialog::~OptionsDialog() = default; | ||||
							
								
								
									
										32
									
								
								src/citra_qt/dumping/options_dialog.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/citra_qt/dumping/options_dialog.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| // Copyright 2020 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <vector> | ||||
| #include <QDialog> | ||||
| #include "common/param_package.h" | ||||
| #include "core/dumping/ffmpeg_backend.h" | ||||
| 
 | ||||
| namespace Ui { | ||||
| class OptionsDialog; | ||||
| } | ||||
| 
 | ||||
| class OptionsDialog : public QDialog { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|     explicit OptionsDialog(QWidget* parent, std::vector<VideoDumper::OptionInfo> options, | ||||
|                            const std::string& current_value); | ||||
|     ~OptionsDialog() override; | ||||
| 
 | ||||
|     std::string GetCurrentValue() const; | ||||
| 
 | ||||
| private: | ||||
|     void PopulateOptions(const std::string& current_value); | ||||
|     void OnSetOptionValue(int id); | ||||
| 
 | ||||
|     std::unique_ptr<Ui::OptionsDialog> ui; | ||||
|     std::vector<VideoDumper::OptionInfo> options; | ||||
|     Common::ParamPackage current_values; | ||||
| }; | ||||
							
								
								
									
										50
									
								
								src/citra_qt/dumping/options_dialog.ui
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/citra_qt/dumping/options_dialog.ui
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>OptionsDialog</class> | ||||
|  <widget class="QDialog" name="OptionsDialog"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>600</width> | ||||
|     <height>300</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Options</string> | ||||
|   </property> | ||||
|   <layout class="QVBoxLayout"> | ||||
|    <item> | ||||
|     <widget class="QLabel"> | ||||
|      <property name="wordWrap"> | ||||
|       <bool>true</bool> | ||||
|      </property> | ||||
|      <property name="text"> | ||||
|       <string>Double click to see the description and change the values of the options.</string> | ||||
|      </property> | ||||
|     </widget> | ||||
|    </item> | ||||
|    <item> | ||||
|     <widget class="QTreeWidget" name="main"> | ||||
|      <column> | ||||
|       <property name="text"> | ||||
|        <string>Name</string> | ||||
|       </property> | ||||
|      </column> | ||||
|      <column> | ||||
|       <property name="text"> | ||||
|        <string>Value</string> | ||||
|       </property> | ||||
|      </column> | ||||
|     </widget> | ||||
|    </item> | ||||
|    <item> | ||||
|     <widget class="QDialogButtonBox" name="buttonBox"> | ||||
|      <property name="standardButtons"> | ||||
|       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> | ||||
|      </property> | ||||
|     </widget> | ||||
|    </item> | ||||
|   </layout> | ||||
|  </widget> | ||||
| </ui> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue