summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Zach Hilman2019-04-23 08:36:35 -0400
committerGravatar Zach Hilman2019-09-21 16:50:39 -0400
commitd4d38dd44d61a64a56a5bc5e7c0644dfbc17e128 (patch)
treef0b015d3f84ed2332cf4111c1f9d21d0f9040bc7 /src
parentcore: Store FileSystemController in core (diff)
downloadyuzu-d4d38dd44d61a64a56a5bc5e7c0644dfbc17e128.tar.gz
yuzu-d4d38dd44d61a64a56a5bc5e7c0644dfbc17e128.tar.xz
yuzu-d4d38dd44d61a64a56a5bc5e7c0644dfbc17e128.zip
yuzu: Add UI to manage filesystem paths and sizes
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/CMakeLists.txt2
-rw-r--r--src/yuzu/configuration/configure.ui11
-rw-r--r--src/yuzu/configuration/configure_dialog.cpp4
-rw-r--r--src/yuzu/configuration/configure_filesystem.cpp173
-rw-r--r--src/yuzu/configuration/configure_filesystem.h43
-rw-r--r--src/yuzu/configuration/configure_filesystem.ui395
6 files changed, 627 insertions, 1 deletions
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index f051e17b4..c50ca317d 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -33,6 +33,8 @@ add_executable(yuzu
33 configuration/configure_debug.ui 33 configuration/configure_debug.ui
34 configuration/configure_dialog.cpp 34 configuration/configure_dialog.cpp
35 configuration/configure_dialog.h 35 configuration/configure_dialog.h
36 configuration/configure_filesystem.cpp
37 configuration/configure_filesystem.h
36 configuration/configure_gamelist.cpp 38 configuration/configure_gamelist.cpp
37 configuration/configure_gamelist.h 39 configuration/configure_gamelist.h
38 configuration/configure_gamelist.ui 40 configuration/configure_gamelist.ui
diff --git a/src/yuzu/configuration/configure.ui b/src/yuzu/configuration/configure.ui
index 267717bc9..49fadd0ef 100644
--- a/src/yuzu/configuration/configure.ui
+++ b/src/yuzu/configuration/configure.ui
@@ -63,6 +63,11 @@
63 <string>Profiles</string> 63 <string>Profiles</string>
64 </attribute> 64 </attribute>
65 </widget> 65 </widget>
66 <widget class="ConfigureFilesystem" name="filesystemTab">
67 <attribute name="title">
68 <string>Filesystem</string>
69 </attribute>
70 </widget>
66 <widget class="ConfigureInputSimple" name="inputTab"> 71 <widget class="ConfigureInputSimple" name="inputTab">
67 <attribute name="title"> 72 <attribute name="title">
68 <string>Input</string> 73 <string>Input</string>
@@ -126,6 +131,12 @@
126 <container>1</container> 131 <container>1</container>
127 </customwidget> 132 </customwidget>
128 <customwidget> 133 <customwidget>
134 <class>ConfigureFilesystem</class>
135 <extends>QWidget</extends>
136 <header>configuration/configure_filesystem.h</header>
137 <container>1</container>
138 </customwidget>
139 <customwidget>
129 <class>ConfigureAudio</class> 140 <class>ConfigureAudio</class>
130 <extends>QWidget</extends> 141 <extends>QWidget</extends>
131 <header>configuration/configure_audio.h</header> 142 <header>configuration/configure_audio.h</header>
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index 775e3f2ea..7c875ae87 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -37,6 +37,7 @@ void ConfigureDialog::ApplyConfiguration() {
37 ui->gameListTab->ApplyConfiguration(); 37 ui->gameListTab->ApplyConfiguration();
38 ui->systemTab->ApplyConfiguration(); 38 ui->systemTab->ApplyConfiguration();
39 ui->profileManagerTab->ApplyConfiguration(); 39 ui->profileManagerTab->ApplyConfiguration();
40 ui->filesystemTab->applyConfiguration();
40 ui->inputTab->ApplyConfiguration(); 41 ui->inputTab->ApplyConfiguration();
41 ui->hotkeysTab->ApplyConfiguration(registry); 42 ui->hotkeysTab->ApplyConfiguration(registry);
42 ui->graphicsTab->ApplyConfiguration(); 43 ui->graphicsTab->ApplyConfiguration();
@@ -73,7 +74,7 @@ Q_DECLARE_METATYPE(QList<QWidget*>);
73void ConfigureDialog::PopulateSelectionList() { 74void ConfigureDialog::PopulateSelectionList() {
74 const std::array<std::pair<QString, QList<QWidget*>>, 4> items{ 75 const std::array<std::pair<QString, QList<QWidget*>>, 4> items{
75 {{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->gameListTab}}, 76 {{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->gameListTab}},
76 {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->audioTab}}, 77 {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->filesystemTab, ui->audioTab}},
77 {tr("Graphics"), {ui->graphicsTab}}, 78 {tr("Graphics"), {ui->graphicsTab}},
78 {tr("Controls"), {ui->inputTab, ui->hotkeysTab}}}, 79 {tr("Controls"), {ui->inputTab, ui->hotkeysTab}}},
79 }; 80 };
@@ -106,6 +107,7 @@ void ConfigureDialog::UpdateVisibleTabs() {
106 {ui->debugTab, tr("Debug")}, 107 {ui->debugTab, tr("Debug")},
107 {ui->webTab, tr("Web")}, 108 {ui->webTab, tr("Web")},
108 {ui->gameListTab, tr("Game List")}, 109 {ui->gameListTab, tr("Game List")},
110 {ui->filesystemTab, tr("Filesystem")},
109 }; 111 };
110 112
111 [[maybe_unused]] const QSignalBlocker blocker(ui->tabWidget); 113 [[maybe_unused]] const QSignalBlocker blocker(ui->tabWidget);
diff --git a/src/yuzu/configuration/configure_filesystem.cpp b/src/yuzu/configuration/configure_filesystem.cpp
new file mode 100644
index 000000000..fabe86e0a
--- /dev/null
+++ b/src/yuzu/configuration/configure_filesystem.cpp
@@ -0,0 +1,173 @@
1// Copyright 2019 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <QFileDialog>
6#include <QMessageBox>
7#include "common/common_paths.h"
8#include "common/file_util.h"
9#include "core/settings.h"
10#include "ui_configure_filesystem.h"
11#include "yuzu/configuration/configure_filesystem.h"
12#include "yuzu/ui_settings.h"
13
14namespace {
15
16template <typename T>
17void SetComboBoxFromData(QComboBox* combo_box, T data) {
18 const auto index = combo_box->findData(QVariant::fromValue(static_cast<u64>(data)));
19 if (index >= combo_box->count() || index < 0)
20 return;
21
22 combo_box->setCurrentIndex(index);
23}
24
25} // Anonymous namespace
26
27ConfigureFilesystem::ConfigureFilesystem(QWidget* parent)
28 : QWidget(parent), ui(std::make_unique<Ui::ConfigureFilesystem>()) {
29 ui->setupUi(this);
30 this->setConfiguration();
31
32 connect(ui->nand_directory_button, &QToolButton::pressed, this,
33 [this] { SetDirectory(DirectoryTarget::NAND, ui->nand_directory_edit); });
34 connect(ui->sdmc_directory_button, &QToolButton::pressed, this,
35 [this] { SetDirectory(DirectoryTarget::SD, ui->sdmc_directory_edit); });
36 connect(ui->gamecard_path_button, &QToolButton::pressed, this,
37 [this] { SetDirectory(DirectoryTarget::Gamecard, ui->gamecard_path_edit); });
38 connect(ui->dump_path_button, &QToolButton::pressed, this,
39 [this] { SetDirectory(DirectoryTarget::Dump, ui->dump_path_edit); });
40 connect(ui->load_path_button, &QToolButton::pressed, this,
41 [this] { SetDirectory(DirectoryTarget::Load, ui->load_path_edit); });
42 connect(ui->cache_directory_button, &QToolButton::pressed, this,
43 [this] { SetDirectory(DirectoryTarget::Cache, ui->cache_directory_edit); });
44
45 connect(ui->reset_game_list_cache, &QPushButton::pressed, this,
46 &ConfigureFilesystem::ResetMetadata);
47
48 connect(ui->gamecard_inserted, &QCheckBox::stateChanged, this,
49 &ConfigureFilesystem::UpdateEnabledControls);
50 connect(ui->gamecard_current_game, &QCheckBox::stateChanged, this,
51 &ConfigureFilesystem::UpdateEnabledControls);
52}
53
54ConfigureFilesystem::~ConfigureFilesystem() = default;
55
56void ConfigureFilesystem::setConfiguration() {
57 ui->nand_directory_edit->setText(
58 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)));
59 ui->sdmc_directory_edit->setText(
60 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)));
61 ui->gamecard_path_edit->setText(QString::fromStdString(Settings::values.gamecard_path));
62 ui->dump_path_edit->setText(
63 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::DumpDir)));
64 ui->load_path_edit->setText(
65 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::LoadDir)));
66 ui->cache_directory_edit->setText(
67 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::CacheDir)));
68
69 ui->gamecard_inserted->setChecked(Settings::values.gamecard_inserted);
70 ui->gamecard_current_game->setChecked(Settings::values.gamecard_current_game);
71 ui->dump_exefs->setChecked(Settings::values.dump_exefs);
72 ui->dump_nso->setChecked(Settings::values.dump_nso);
73
74 ui->cache_game_list->setChecked(UISettings::values.cache_game_list);
75
76 SetComboBoxFromData(ui->nand_size, Settings::values.nand_total_size);
77 SetComboBoxFromData(ui->usrnand_size, Settings::values.nand_user_size);
78 SetComboBoxFromData(ui->sysnand_size, Settings::values.nand_system_size);
79 SetComboBoxFromData(ui->sdmc_size, Settings::values.sdmc_size);
80
81 UpdateEnabledControls();
82}
83
84void ConfigureFilesystem::applyConfiguration() {
85 FileUtil::GetUserPath(FileUtil::UserPath::NANDDir,
86 ui->nand_directory_edit->text().toStdString());
87 FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir,
88 ui->sdmc_directory_edit->text().toStdString());
89 FileUtil::GetUserPath(FileUtil::UserPath::DumpDir, ui->dump_path_edit->text().toStdString());
90 FileUtil::GetUserPath(FileUtil::UserPath::LoadDir, ui->load_path_edit->text().toStdString());
91 FileUtil::GetUserPath(FileUtil::UserPath::CacheDir,
92 ui->cache_directory_edit->text().toStdString());
93 Settings::values.gamecard_path = ui->gamecard_path_edit->text().toStdString();
94
95 Settings::values.gamecard_inserted = ui->gamecard_inserted->isChecked();
96 Settings::values.gamecard_current_game = ui->gamecard_current_game->isChecked();
97 Settings::values.dump_exefs = ui->dump_exefs->isChecked();
98 Settings::values.dump_nso = ui->dump_nso->isChecked();
99
100 UISettings::values.cache_game_list = ui->cache_game_list->isChecked();
101
102 Settings::values.nand_total_size = static_cast<Settings::NANDTotalSize>(
103 ui->nand_size->itemData(ui->nand_size->currentIndex()).toULongLong());
104 Settings::values.nand_system_size = static_cast<Settings::NANDSystemSize>(
105 ui->nand_size->itemData(ui->sysnand_size->currentIndex()).toULongLong());
106 Settings::values.nand_user_size = static_cast<Settings::NANDUserSize>(
107 ui->nand_size->itemData(ui->usrnand_size->currentIndex()).toULongLong());
108 Settings::values.sdmc_size = static_cast<Settings::SDMCSize>(
109 ui->nand_size->itemData(ui->sdmc_size->currentIndex()).toULongLong());
110}
111
112void ConfigureFilesystem::SetDirectory(DirectoryTarget target, QLineEdit* edit) {
113 QString caption;
114
115 switch (target) {
116 case DirectoryTarget::NAND:
117 caption = tr("Select Emulated NAND Directory...");
118 break;
119 case DirectoryTarget::SD:
120 caption = tr("Select Emulated SD Directory...");
121 break;
122 case DirectoryTarget::Gamecard:
123 caption = tr("Select Gamecard Path...");
124 break;
125 case DirectoryTarget::Dump:
126 caption = tr("Select Dump Directory...");
127 break;
128 case DirectoryTarget::Load:
129 caption = tr("Select Mod Load Directory...");
130 break;
131 case DirectoryTarget::Cache:
132 caption = tr("Select Cache Directory...");
133 break;
134 }
135
136 QString str;
137 if (target == DirectoryTarget::Gamecard) {
138 str = QFileDialog::getOpenFileName(this, caption, QFileInfo(edit->text()).dir().path(),
139 "NX Gamecard;*.xci");
140 } else {
141 str = QFileDialog::getExistingDirectory(this, caption, edit->text());
142 }
143
144 if (str.isEmpty())
145 return;
146
147 edit->setText(str);
148}
149
150void ConfigureFilesystem::ResetMetadata() {
151 if (FileUtil::DeleteDirRecursively(FileUtil::GetUserPath(FileUtil::UserPath::CacheDir) +
152 DIR_SEP + "game_list")) {
153 QMessageBox::information(this, tr("Reset Metadata Cache"),
154 tr("The operation completed successfully."));
155 UISettings::values.is_game_list_reload_pending.exchange(true);
156 } else {
157 QMessageBox::warning(
158 this, tr("Reset Metadata Cache"),
159 tr("The metadata cache couldn't be deleted. It might be in use or non-existent."));
160 }
161}
162
163void ConfigureFilesystem::UpdateEnabledControls() {
164 ui->gamecard_current_game->setEnabled(ui->gamecard_inserted->isChecked());
165 ui->gamecard_path_edit->setEnabled(ui->gamecard_inserted->isChecked() &&
166 !ui->gamecard_current_game->isChecked());
167 ui->gamecard_path_button->setEnabled(ui->gamecard_inserted->isChecked() &&
168 !ui->gamecard_current_game->isChecked());
169}
170
171void ConfigureFilesystem::retranslateUi() {
172 ui->retranslateUi(this);
173}
diff --git a/src/yuzu/configuration/configure_filesystem.h b/src/yuzu/configuration/configure_filesystem.h
new file mode 100644
index 000000000..a79303760
--- /dev/null
+++ b/src/yuzu/configuration/configure_filesystem.h
@@ -0,0 +1,43 @@
1// Copyright 2019 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <memory>
8#include <QWidget>
9
10class QLineEdit;
11
12namespace Ui {
13class ConfigureFilesystem;
14}
15
16class ConfigureFilesystem : public QWidget {
17 Q_OBJECT
18
19public:
20 explicit ConfigureFilesystem(QWidget* parent = nullptr);
21 ~ConfigureFilesystem() override;
22
23 void applyConfiguration();
24 void retranslateUi();
25
26private:
27 void setConfiguration();
28
29 enum class DirectoryTarget {
30 NAND,
31 SD,
32 Gamecard,
33 Dump,
34 Load,
35 Cache,
36 };
37
38 void SetDirectory(DirectoryTarget target, QLineEdit* edit);
39 void ResetMetadata();
40 void UpdateEnabledControls();
41
42 std::unique_ptr<Ui::ConfigureFilesystem> ui;
43};
diff --git a/src/yuzu/configuration/configure_filesystem.ui b/src/yuzu/configuration/configure_filesystem.ui
new file mode 100644
index 000000000..58cd07f52
--- /dev/null
+++ b/src/yuzu/configuration/configure_filesystem.ui
@@ -0,0 +1,395 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ConfigureFilesystem</class>
4 <widget class="QWidget" name="ConfigureFilesystem">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>453</width>
10 <height>561</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>Form</string>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout">
17 <item>
18 <layout class="QVBoxLayout" name="verticalLayout_3">
19 <item>
20 <widget class="QGroupBox" name="groupBox">
21 <property name="title">
22 <string>Storage Directories</string>
23 </property>
24 <layout class="QGridLayout" name="gridLayout">
25 <item row="0" column="0">
26 <widget class="QLabel" name="label">
27 <property name="text">
28 <string>NAND</string>
29 </property>
30 </widget>
31 </item>
32 <item row="0" column="3">
33 <widget class="QToolButton" name="nand_directory_button">
34 <property name="text">
35 <string>...</string>
36 </property>
37 </widget>
38 </item>
39 <item row="0" column="2">
40 <widget class="QLineEdit" name="nand_directory_edit"/>
41 </item>
42 <item row="1" column="2">
43 <widget class="QLineEdit" name="sdmc_directory_edit"/>
44 </item>
45 <item row="1" column="0">
46 <widget class="QLabel" name="label_2">
47 <property name="text">
48 <string>SD Card</string>
49 </property>
50 </widget>
51 </item>
52 <item row="1" column="3">
53 <widget class="QToolButton" name="sdmc_directory_button">
54 <property name="text">
55 <string>...</string>
56 </property>
57 </widget>
58 </item>
59 <item row="0" column="1">
60 <spacer name="horizontalSpacer">
61 <property name="orientation">
62 <enum>Qt::Horizontal</enum>
63 </property>
64 <property name="sizeType">
65 <enum>QSizePolicy::Maximum</enum>
66 </property>
67 <property name="sizeHint" stdset="0">
68 <size>
69 <width>60</width>
70 <height>20</height>
71 </size>
72 </property>
73 </spacer>
74 </item>
75 </layout>
76 </widget>
77 </item>
78 <item>
79 <widget class="QGroupBox" name="groupBox_2">
80 <property name="title">
81 <string>Gamecard</string>
82 </property>
83 <layout class="QGridLayout" name="gridLayout_2">
84 <item row="2" column="1">
85 <widget class="QLabel" name="label_3">
86 <property name="text">
87 <string>Path</string>
88 </property>
89 </widget>
90 </item>
91 <item row="2" column="2">
92 <widget class="QLineEdit" name="gamecard_path_edit"/>
93 </item>
94 <item row="0" column="1">
95 <widget class="QCheckBox" name="gamecard_inserted">
96 <property name="text">
97 <string>Inserted</string>
98 </property>
99 </widget>
100 </item>
101 <item row="1" column="1">
102 <widget class="QCheckBox" name="gamecard_current_game">
103 <property name="text">
104 <string>Current Game</string>
105 </property>
106 </widget>
107 </item>
108 <item row="2" column="3">
109 <widget class="QToolButton" name="gamecard_path_button">
110 <property name="text">
111 <string>...</string>
112 </property>
113 </widget>
114 </item>
115 </layout>
116 </widget>
117 </item>
118 <item>
119 <widget class="QGroupBox" name="groupBox_3">
120 <property name="title">
121 <string>Storage Sizes</string>
122 </property>
123 <layout class="QGridLayout" name="gridLayout_3">
124 <item row="3" column="0">
125 <widget class="QLabel" name="label_5">
126 <property name="text">
127 <string>SD Card</string>
128 </property>
129 </widget>
130 </item>
131 <item row="1" column="0">
132 <widget class="QLabel" name="label_4">
133 <property name="text">
134 <string>System NAND</string>
135 </property>
136 </widget>
137 </item>
138 <item row="1" column="1">
139 <widget class="QComboBox" name="sysnand_size">
140 <item>
141 <property name="text">
142 <string>2.5 GB</string>
143 </property>
144 </item>
145 </widget>
146 </item>
147 <item row="3" column="1">
148 <widget class="QComboBox" name="sdmc_size">
149 <property name="currentText">
150 <string>32 GB</string>
151 </property>
152 <item>
153 <property name="text">
154 <string>1 GB</string>
155 </property>
156 </item>
157 <item>
158 <property name="text">
159 <string>2 GB</string>
160 </property>
161 </item>
162 <item>
163 <property name="text">
164 <string>4 GB</string>
165 </property>
166 </item>
167 <item>
168 <property name="text">
169 <string>8 GB</string>
170 </property>
171 </item>
172 <item>
173 <property name="text">
174 <string>16 GB</string>
175 </property>
176 </item>
177 <item>
178 <property name="text">
179 <string>32 GB</string>
180 </property>
181 </item>
182 <item>
183 <property name="text">
184 <string>64 GB</string>
185 </property>
186 </item>
187 <item>
188 <property name="text">
189 <string>128 GB</string>
190 </property>
191 </item>
192 <item>
193 <property name="text">
194 <string>256 GB</string>
195 </property>
196 </item>
197 <item>
198 <property name="text">
199 <string>1 TB</string>
200 </property>
201 </item>
202 </widget>
203 </item>
204 <item row="2" column="1">
205 <widget class="QComboBox" name="usrnand_size">
206 <item>
207 <property name="text">
208 <string>26 GB</string>
209 </property>
210 </item>
211 </widget>
212 </item>
213 <item row="2" column="0">
214 <widget class="QLabel" name="label_6">
215 <property name="text">
216 <string>User NAND</string>
217 </property>
218 </widget>
219 </item>
220 <item row="0" column="0">
221 <widget class="QLabel" name="label_7">
222 <property name="text">
223 <string>NAND</string>
224 </property>
225 </widget>
226 </item>
227 <item row="0" column="1">
228 <widget class="QComboBox" name="nand_size">
229 <item>
230 <property name="text">
231 <string>29.1 GB</string>
232 </property>
233 </item>
234 </widget>
235 </item>
236 </layout>
237 </widget>
238 </item>
239 <item>
240 <widget class="QGroupBox" name="groupBox_4">
241 <property name="title">
242 <string>Patch Manager</string>
243 </property>
244 <layout class="QGridLayout" name="gridLayout_4">
245 <item row="1" column="2">
246 <widget class="QLineEdit" name="load_path_edit"/>
247 </item>
248 <item row="0" column="2">
249 <widget class="QLineEdit" name="dump_path_edit"/>
250 </item>
251 <item row="0" column="3">
252 <widget class="QToolButton" name="dump_path_button">
253 <property name="text">
254 <string>...</string>
255 </property>
256 </widget>
257 </item>
258 <item row="1" column="3">
259 <widget class="QToolButton" name="load_path_button">
260 <property name="text">
261 <string>...</string>
262 </property>
263 </widget>
264 </item>
265 <item row="2" column="0" colspan="4">
266 <layout class="QHBoxLayout" name="horizontalLayout">
267 <item>
268 <widget class="QCheckBox" name="dump_nso">
269 <property name="text">
270 <string>Dump Decompressed NSOs</string>
271 </property>
272 </widget>
273 </item>
274 <item>
275 <widget class="QCheckBox" name="dump_exefs">
276 <property name="text">
277 <string>Dump ExeFS</string>
278 </property>
279 </widget>
280 </item>
281 </layout>
282 </item>
283 <item row="1" column="0">
284 <widget class="QLabel" name="label_9">
285 <property name="text">
286 <string>Mod Load Root</string>
287 </property>
288 </widget>
289 </item>
290 <item row="0" column="0">
291 <widget class="QLabel" name="label_8">
292 <property name="text">
293 <string>Dump Root</string>
294 </property>
295 </widget>
296 </item>
297 <item row="0" column="1">
298 <spacer name="horizontalSpacer_2">
299 <property name="orientation">
300 <enum>Qt::Horizontal</enum>
301 </property>
302 <property name="sizeType">
303 <enum>QSizePolicy::Fixed</enum>
304 </property>
305 <property name="sizeHint" stdset="0">
306 <size>
307 <width>40</width>
308 <height>20</height>
309 </size>
310 </property>
311 </spacer>
312 </item>
313 </layout>
314 </widget>
315 </item>
316 <item>
317 <widget class="QGroupBox" name="groupBox_5">
318 <property name="title">
319 <string>Caching</string>
320 </property>
321 <layout class="QGridLayout" name="gridLayout_5">
322 <item row="0" column="0">
323 <widget class="QLabel" name="label_10">
324 <property name="text">
325 <string>Cache Directory</string>
326 </property>
327 </widget>
328 </item>
329 <item row="0" column="1">
330 <spacer name="horizontalSpacer_3">
331 <property name="orientation">
332 <enum>Qt::Horizontal</enum>
333 </property>
334 <property name="sizeType">
335 <enum>QSizePolicy::Fixed</enum>
336 </property>
337 <property name="sizeHint" stdset="0">
338 <size>
339 <width>40</width>
340 <height>20</height>
341 </size>
342 </property>
343 </spacer>
344 </item>
345 <item row="0" column="2">
346 <widget class="QLineEdit" name="cache_directory_edit"/>
347 </item>
348 <item row="0" column="3">
349 <widget class="QToolButton" name="cache_directory_button">
350 <property name="text">
351 <string>...</string>
352 </property>
353 </widget>
354 </item>
355 <item row="1" column="0" colspan="4">
356 <layout class="QHBoxLayout" name="horizontalLayout_2">
357 <item>
358 <widget class="QCheckBox" name="cache_game_list">
359 <property name="text">
360 <string>Cache Game List Metadata</string>
361 </property>
362 </widget>
363 </item>
364 <item>
365 <widget class="QPushButton" name="reset_game_list_cache">
366 <property name="text">
367 <string>Reset Metadata Cache</string>
368 </property>
369 </widget>
370 </item>
371 </layout>
372 </item>
373 </layout>
374 </widget>
375 </item>
376 </layout>
377 </item>
378 <item>
379 <spacer name="verticalSpacer">
380 <property name="orientation">
381 <enum>Qt::Vertical</enum>
382 </property>
383 <property name="sizeHint" stdset="0">
384 <size>
385 <width>20</width>
386 <height>40</height>
387 </size>
388 </property>
389 </spacer>
390 </item>
391 </layout>
392 </widget>
393 <resources/>
394 <connections/>
395</ui>