Qt: Add compatibility report in game summary

This commit is contained in:
Stenzek 2024-05-06 00:00:41 +10:00
parent 76b2c24442
commit d3546d18a1
No known key found for this signature in database
8 changed files with 405 additions and 203 deletions

View file

@ -34,7 +34,7 @@ namespace GameDatabase {
enum : u32 enum : u32
{ {
GAME_DATABASE_CACHE_SIGNATURE = 0x45434C48, GAME_DATABASE_CACHE_SIGNATURE = 0x45434C48,
GAME_DATABASE_CACHE_VERSION = 7, GAME_DATABASE_CACHE_VERSION = 8,
}; };
static Entry* GetMutableEntry(std::string_view serial); static Entry* GetMutableEntry(std::string_view serial);
@ -54,12 +54,10 @@ static constexpr const std::array<const char*, static_cast<int>(CompatibilityRat
{"Unknown", "DoesntBoot", "CrashesInIntro", "CrashesInGame", "GraphicalAudioIssues", "NoIssues"}}; {"Unknown", "DoesntBoot", "CrashesInIntro", "CrashesInGame", "GraphicalAudioIssues", "NoIssues"}};
static constexpr const std::array<const char*, static_cast<size_t>(CompatibilityRating::Count)> static constexpr const std::array<const char*, static_cast<size_t>(CompatibilityRating::Count)>
s_compatibility_rating_display_names = {{TRANSLATE_NOOP("GameListCompatibilityRating", "Unknown"), s_compatibility_rating_display_names = {
TRANSLATE_NOOP("GameListCompatibilityRating", "Doesn't Boot"), {TRANSLATE_NOOP("GameDatabase", "Unknown"), TRANSLATE_NOOP("GameDatabase", "Doesn't Boot"),
TRANSLATE_NOOP("GameListCompatibilityRating", "Crashes In Intro"), TRANSLATE_NOOP("GameDatabase", "Crashes In Intro"), TRANSLATE_NOOP("GameDatabase", "Crashes In-Game"),
TRANSLATE_NOOP("GameListCompatibilityRating", "Crashes In-Game"), TRANSLATE_NOOP("GameDatabase", "Graphical/Audio Issues"), TRANSLATE_NOOP("GameDatabase", "No Issues")}};
TRANSLATE_NOOP("GameListCompatibilityRating", "Graphical/Audio Issues"),
TRANSLATE_NOOP("GameListCompatibilityRating", "No Issues")}};
static constexpr const std::array<const char*, static_cast<u32>(GameDatabase::Trait::Count)> s_trait_names = {{ static constexpr const std::array<const char*, static_cast<u32>(GameDatabase::Trait::Count)> s_trait_names = {{
"ForceInterpreter", "ForceInterpreter",
@ -86,6 +84,31 @@ static constexpr const std::array<const char*, static_cast<u32>(GameDatabase::Tr
"IsLibCryptProtected", "IsLibCryptProtected",
}}; }};
static constexpr const std::array<const char*, static_cast<u32>(GameDatabase::Trait::Count)> s_trait_display_names = {{
TRANSLATE_NOOP("GameDatabase", "Force Interpreter"),
TRANSLATE_NOOP("GameDatabase", "Force Software Renderer"),
TRANSLATE_NOOP("GameDatabase", "Force Software Renderer For Readbacks"),
TRANSLATE_NOOP("GameDatabase", "Force Interlacing"),
TRANSLATE_NOOP("GameDatabase", "Disable True Color"),
TRANSLATE_NOOP("GameDatabase", "Disable Upscaling"),
TRANSLATE_NOOP("GameDatabase", "Disable Texture Filtering"),
TRANSLATE_NOOP("GameDatabase", "Disable Scaled Dithering"),
TRANSLATE_NOOP("GameDatabase", "Disable Force NTSC Timings"),
TRANSLATE_NOOP("GameDatabase", "Disable Widescreen"),
TRANSLATE_NOOP("GameDatabase", "Disable PGXP"),
TRANSLATE_NOOP("GameDatabase", "Disable PGXP Culling"),
TRANSLATE_NOOP("GameDatabase", "Disable PGXP Texture Correction"),
TRANSLATE_NOOP("GameDatabase", "Disable PGXP Color Correction"),
TRANSLATE_NOOP("GameDatabase", "Disable PGXP Depth Buffer"),
TRANSLATE_NOOP("GameDatabase", "Disable PGXP Preserve Projection Floating Point"),
TRANSLATE_NOOP("GameDatabase", "Force PGXP Vertex Cache"),
TRANSLATE_NOOP("GameDatabase", "Force PGXP CPU Mode"),
TRANSLATE_NOOP("GameDatabase", "Force Recompiler Memory Exceptions"),
TRANSLATE_NOOP("GameDatabase", "Force Recompiler ICache"),
TRANSLATE_NOOP("GameDatabase", "Force Recompiler LUT Fastmem"),
TRANSLATE_NOOP("GameDatabase", "Is LibCrypt Protected"),
}};
static constexpr const char* GAMEDB_YAML_FILENAME = "gamedb.yaml"; static constexpr const char* GAMEDB_YAML_FILENAME = "gamedb.yaml";
static constexpr const char* DISCDB_YAML_FILENAME = "discdb.yaml"; static constexpr const char* DISCDB_YAML_FILENAME = "discdb.yaml";
@ -325,6 +348,17 @@ GameDatabase::Entry* GameDatabase::GetMutableEntry(std::string_view serial)
return nullptr; return nullptr;
} }
const char* GameDatabase::GetTraitName(Trait trait)
{
return s_trait_names[static_cast<size_t>(trait)];
}
const char* GameDatabase::GetTraitDisplayName(Trait trait)
{
return Host::TranslateToCString("GameDatabase", s_trait_display_names[static_cast<size_t>(trait)]);
"";
}
const char* GameDatabase::GetCompatibilityRatingName(CompatibilityRating rating) const char* GameDatabase::GetCompatibilityRatingName(CompatibilityRating rating)
{ {
return s_compatibility_rating_names[static_cast<int>(rating)]; return s_compatibility_rating_names[static_cast<int>(rating)];
@ -333,8 +367,7 @@ const char* GameDatabase::GetCompatibilityRatingName(CompatibilityRating rating)
const char* GameDatabase::GetCompatibilityRatingDisplayName(CompatibilityRating rating) const char* GameDatabase::GetCompatibilityRatingDisplayName(CompatibilityRating rating)
{ {
return (rating >= CompatibilityRating::Unknown && rating < CompatibilityRating::Count) ? return (rating >= CompatibilityRating::Unknown && rating < CompatibilityRating::Count) ?
Host::TranslateToCString("GameListCompatibilityRating", Host::TranslateToCString("GameDatabase", s_compatibility_rating_display_names[static_cast<size_t>(rating)]) :
s_compatibility_rating_display_names[static_cast<int>(rating)]) :
""; "";
} }
@ -671,6 +704,122 @@ void GameDatabase::Entry::ApplySettings(Settings& settings, bool display_osd_mes
#undef BIT_FOR #undef BIT_FOR
} }
template<typename T>
static inline void AppendIntegerSetting(SmallStringBase& str, bool& heading, std::string_view title,
const std::optional<T>& value)
{
if (!value.has_value())
return;
if (!heading)
{
heading = true;
str.append_format("**{}**\n\n", TRANSLATE_SV("GameDatabase", "Settings"));
}
str.append_format(" - {}: {}\n", title, value.value());
}
static inline void AppendFloatSetting(SmallStringBase& str, bool& heading, std::string_view title,
const std::optional<float>& value)
{
if (!value.has_value())
return;
if (!heading)
{
heading = true;
str.append_format("**{}**\n\n", TRANSLATE_SV("GameDatabase", "Settings"));
}
str.append_format(" - {}: {:.2f}\n", title, value.value());
}
template<typename T>
static inline void AppendEnumSetting(SmallStringBase& str, bool& heading, std::string_view title,
const char* (*get_display_name_func)(T), const std::optional<T>& value)
{
if (!value.has_value())
return;
if (!heading)
{
heading = true;
str.append_format("**{}**\n\n", TRANSLATE_SV("GameDatabase", "Settings"));
}
str.append_format(" - {}: {}\n", title, get_display_name_func(value.value()));
}
std::string GameDatabase::Entry::GenerateCompatibilityReport() const
{
LargeString ret;
ret.append_format("**{}:** {}\n\n", TRANSLATE_SV("GameDatabase", "Title"), title);
ret.append_format("**{}:** {}\n\n", TRANSLATE_SV("GameDatabase", "Serial"), serial);
ret.append_format("**{}:** {}\n\n", TRANSLATE_SV("GameDatabase", "Rating"),
GetCompatibilityRatingDisplayName(compatibility));
if (!compatibility_version_tested.empty())
ret.append_format("**{}:**\n{}\n\n", TRANSLATE_SV("GameDatabase", "Version Tested"), compatibility_version_tested);
if (!compatibility_comments.empty())
ret.append_format("**{}**\n\n{}\n\n", TRANSLATE_SV("GameDatabase", "Comments"), compatibility_comments);
if (supported_controllers != 0)
{
ret.append_format("**{}**\n\n", TRANSLATE_SV("GameDatabase", "Supported Controllers"));
for (u32 j = 0; j < static_cast<u32>(ControllerType::Count); j++)
{
if ((supported_controllers & (static_cast<u16>(1) << j)) == 0)
continue;
ret.append_format(" - {}\n", Controller::GetControllerInfo(static_cast<ControllerType>(j))->GetDisplayName());
}
ret.append("\n");
}
if (traits.any())
{
ret.append_format("**{}**\n\n", TRANSLATE_SV("GameDatabase", "Traits"));
for (u32 i = 0; i < static_cast<u32>(Trait::Count); i++)
{
if (traits.test(i))
ret.append_format(" - {}\n", GetTraitDisplayName(static_cast<Trait>(i)));
}
ret.append("\n");
}
bool settings_heading = false;
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "Display Active Start Offset"),
display_active_start_offset);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "Display Active End Offset"),
display_active_end_offset);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "Display Line Start Offset"),
display_line_start_offset);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "Display Line End Offset"),
display_line_end_offset);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "DMA Max Slice Ticks"), dma_max_slice_ticks);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "DMA Halt Ticks"), dma_halt_ticks);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "GPU FIFO Size"), gpu_fifo_size);
AppendIntegerSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "GPU Max Runahead"), gpu_max_run_ahead);
AppendFloatSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "GPU PGXP Tolerance"), gpu_pgxp_tolerance);
AppendFloatSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "GPU PGXP Depth Threshold"),
gpu_pgxp_depth_threshold);
AppendEnumSetting(ret, settings_heading, TRANSLATE_SV("GameDatabase", "GPU Line Detect Mode"),
&Settings::GetLineDetectModeDisplayName, gpu_line_detect_mode);
if (!disc_set_name.empty())
{
ret.append_format("**{}:** {}\n", TRANSLATE_SV("GameDatabase", "Disc Set"), disc_set_name);
for (const std::string& ds_serial : disc_set_serials)
ret.append_format(" - {}\n", ds_serial);
}
return std::string(ret.view());
}
template<typename T> template<typename T>
bool ReadOptionalFromStream(ByteStream* stream, std::optional<T>* dest) bool ReadOptionalFromStream(ByteStream* stream, std::optional<T>* dest)
{ {
@ -748,7 +897,9 @@ bool GameDatabase::LoadFromCache()
if (!stream->ReadSizePrefixedString(&entry.serial) || !stream->ReadSizePrefixedString(&entry.title) || if (!stream->ReadSizePrefixedString(&entry.serial) || !stream->ReadSizePrefixedString(&entry.title) ||
!stream->ReadSizePrefixedString(&entry.genre) || !stream->ReadSizePrefixedString(&entry.developer) || !stream->ReadSizePrefixedString(&entry.genre) || !stream->ReadSizePrefixedString(&entry.developer) ||
!stream->ReadSizePrefixedString(&entry.publisher) || !stream->ReadU64(&entry.release_date) || !stream->ReadSizePrefixedString(&entry.publisher) ||
!stream->ReadSizePrefixedString(&entry.compatibility_version_tested) ||
!stream->ReadSizePrefixedString(&entry.compatibility_comments) || !stream->ReadU64(&entry.release_date) ||
!stream->ReadU8(&entry.min_players) || !stream->ReadU8(&entry.max_players) || !stream->ReadU8(&entry.min_players) || !stream->ReadU8(&entry.max_players) ||
!stream->ReadU8(&entry.min_blocks) || !stream->ReadU8(&entry.max_blocks) || !stream->ReadU8(&entry.min_blocks) || !stream->ReadU8(&entry.max_blocks) ||
!stream->ReadU16(&entry.supported_controllers) || !stream->ReadU8(&compatibility) || !stream->ReadU16(&entry.supported_controllers) || !stream->ReadU8(&compatibility) ||
@ -834,6 +985,8 @@ bool GameDatabase::SaveToCache()
result = result && stream->WriteSizePrefixedString(entry.genre); result = result && stream->WriteSizePrefixedString(entry.genre);
result = result && stream->WriteSizePrefixedString(entry.developer); result = result && stream->WriteSizePrefixedString(entry.developer);
result = result && stream->WriteSizePrefixedString(entry.publisher); result = result && stream->WriteSizePrefixedString(entry.publisher);
result = result && stream->WriteSizePrefixedString(entry.compatibility_version_tested);
result = result && stream->WriteSizePrefixedString(entry.compatibility_comments);
result = result && stream->WriteU64(entry.release_date); result = result && stream->WriteU64(entry.release_date);
result = result && stream->WriteU8(entry.min_players); result = result && stream->WriteU8(entry.min_players);
result = result && stream->WriteU8(entry.max_players); result = result && stream->WriteU8(entry.max_players);
@ -1020,6 +1173,9 @@ bool GameDatabase::ParseYamlEntry(Entry* entry, const ryml::ConstNodeRef& value)
Log_WarningFmt("Unknown compatibility rating {} in {}", rating_str, entry->serial); Log_WarningFmt("Unknown compatibility rating {} in {}", rating_str, entry->serial);
} }
} }
GetStringFromObject(compatibility, "versionTested", &entry->compatibility_version_tested);
GetStringFromObject(compatibility, "comments", &entry->compatibility_comments);
} }
if (const ryml::ConstNodeRef traits = value.find_child(to_csubstr("traits")); traits.valid() && traits.has_children()) if (const ryml::ConstNodeRef traits = value.find_child(to_csubstr("traits")); traits.valid() && traits.has_children())

View file

@ -62,6 +62,8 @@ struct Entry
std::string genre; std::string genre;
std::string developer; std::string developer;
std::string publisher; std::string publisher;
std::string compatibility_version_tested;
std::string compatibility_comments;
u64 release_date; u64 release_date;
u8 min_players; u8 min_players;
u8 max_players; u8 max_players;
@ -89,6 +91,8 @@ struct Entry
ALWAYS_INLINE bool HasTrait(Trait trait) const { return traits[static_cast<int>(trait)]; } ALWAYS_INLINE bool HasTrait(Trait trait) const { return traits[static_cast<int>(trait)]; }
void ApplySettings(Settings& settings, bool display_osd_messages) const; void ApplySettings(Settings& settings, bool display_osd_messages) const;
std::string GenerateCompatibilityReport() const;
}; };
void EnsureLoaded(); void EnsureLoaded();
@ -100,6 +104,9 @@ const Entry* GetEntryForSerial(std::string_view serial);
std::string GetSerialForDisc(CDImage* image); std::string GetSerialForDisc(CDImage* image);
std::string GetSerialForPath(const char* path); std::string GetSerialForPath(const char* path);
const char* GetTraitName(Trait trait);
const char* GetTraitDisplayName(Trait trait);
const char* GetCompatibilityRatingName(CompatibilityRating rating); const char* GetCompatibilityRatingName(CompatibilityRating rating);
const char* GetCompatibilityRatingDisplayName(CompatibilityRating rating); const char* GetCompatibilityRatingDisplayName(CompatibilityRating rating);

View file

@ -16,7 +16,11 @@
#include <QtCore/QDateTime> #include <QtCore/QDateTime>
#include <QtCore/QFuture> #include <QtCore/QFuture>
#include <QtCore/QStringBuilder>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QMessageBox> #include <QtWidgets/QMessageBox>
#include <QtWidgets/QTextBrowser>
GameSummaryWidget::GameSummaryWidget(const std::string& path, const std::string& serial, DiscRegion region, GameSummaryWidget::GameSummaryWidget(const std::string& path, const std::string& serial, DiscRegion region,
const GameDatabase::Entry* entry, SettingsWindow* dialog, QWidget* parent) const GameDatabase::Entry* entry, SettingsWindow* dialog, QWidget* parent)
@ -47,6 +51,7 @@ GameSummaryWidget::GameSummaryWidget(const std::string& path, const std::string&
populateUi(path, serial, region, entry); populateUi(path, serial, region, entry);
connect(m_ui.compatibilityComments, &QToolButton::clicked, this, &GameSummaryWidget::onCompatibilityCommentsClicked);
connect(m_ui.inputProfile, &QComboBox::currentIndexChanged, this, &GameSummaryWidget::onInputProfileChanged); connect(m_ui.inputProfile, &QComboBox::currentIndexChanged, this, &GameSummaryWidget::onInputProfileChanged);
connect(m_ui.computeHashes, &QAbstractButton::clicked, this, &GameSummaryWidget::onComputeHashClicked); connect(m_ui.computeHashes, &QAbstractButton::clicked, this, &GameSummaryWidget::onComputeHashClicked);
} }
@ -121,6 +126,8 @@ void GameSummaryWidget::populateUi(const std::string& path, const std::string& s
if (controllers.isEmpty()) if (controllers.isEmpty())
controllers = tr("Unknown"); controllers = tr("Unknown");
m_ui.controllers->setText(controllers); m_ui.controllers->setText(controllers);
m_compatibility_comments = QString::fromStdString(entry->GenerateCompatibilityReport());
} }
else else
{ {
@ -138,6 +145,8 @@ void GameSummaryWidget::populateUi(const std::string& path, const std::string& s
m_ui.entryType->setCurrentIndex(static_cast<int>(gentry->type)); m_ui.entryType->setCurrentIndex(static_cast<int>(gentry->type));
} }
m_ui.compatibilityComments->setVisible(!m_compatibility_comments.isEmpty());
m_ui.inputProfile->addItem(QIcon::fromTheme(QStringLiteral("controller-digital-line")), tr("Use Global Settings")); m_ui.inputProfile->addItem(QIcon::fromTheme(QStringLiteral("controller-digital-line")), tr("Use Global Settings"));
for (const std::string& name : InputManager::GetInputProfileNames()) for (const std::string& name : InputManager::GetInputProfileNames())
m_ui.inputProfile->addItem(QString::fromStdString(name)); m_ui.inputProfile->addItem(QString::fromStdString(name));
@ -196,6 +205,26 @@ void GameSummaryWidget::populateTracksInfo()
} }
} }
void GameSummaryWidget::onCompatibilityCommentsClicked()
{
QDialog dlg(QtUtils::GetRootWidget(this));
dlg.resize(QSize(700, 400));
dlg.setWindowModality(Qt::WindowModal);
dlg.setWindowTitle(tr("Compatibility Report"));
QVBoxLayout* layout = new QVBoxLayout(&dlg);
QTextBrowser* tb = new QTextBrowser(&dlg);
tb->setMarkdown(m_compatibility_comments);
layout->addWidget(tb, 1);
QDialogButtonBox* bb = new QDialogButtonBox(QDialogButtonBox::Close, &dlg);
connect(bb->button(QDialogButtonBox::Close), &QPushButton::clicked, &dlg, &QDialog::accept);
layout->addWidget(bb);
dlg.exec();
}
void GameSummaryWidget::onInputProfileChanged(int index) void GameSummaryWidget::onInputProfileChanged(int index)
{ {
if (index == 0) if (index == 0)

View file

@ -25,6 +25,7 @@ public:
~GameSummaryWidget(); ~GameSummaryWidget();
private Q_SLOTS: private Q_SLOTS:
void onCompatibilityCommentsClicked();
void onInputProfileChanged(int index); void onInputProfileChanged(int index);
void onComputeHashClicked(); void onComputeHashClicked();
@ -38,4 +39,5 @@ private:
std::string m_path; std::string m_path;
std::string m_redump_search_keyword; std::string m_redump_search_keyword;
QString m_compatibility_comments;
}; };

View file

@ -270,9 +270,13 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="editCompatibility"> <widget class="QToolButton" name="compatibilityComments">
<property name="text"> <property name="text">
<string>Edit...</string> <string>Comments</string>
</property>
<property name="icon">
<iconset theme="information-line">
<normaloff>.</normaloff>.</iconset>
</property> </property>
</widget> </widget>
</item> </item>

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 7H13V9H11V7ZM11 11H13V17H11V11Z"></path></svg>

After

Width:  |  Height:  |  Size: 360 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#ffffff"><path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM11 7H13V9H11V7ZM11 11H13V17H11V11Z"></path></svg>

After

Width:  |  Height:  |  Size: 360 B

View file

@ -6,23 +6,26 @@
<file>controllers/guncon.svg</file> <file>controllers/guncon.svg</file>
<file>controllers/mouse.svg</file> <file>controllers/mouse.svg</file>
<file>controllers/negcon.svg</file> <file>controllers/negcon.svg</file>
<file>icons/address-book-new-22@2x.png</file> <file>icons/IssueTracker.png</file>
<file>icons/QT.png</file>
<file>icons/UpdateDuck.png</file>
<file>icons/address-book-new-22.png</file> <file>icons/address-book-new-22.png</file>
<file>icons/antialias-icon@2x.png</file> <file>icons/address-book-new-22@2x.png</file>
<file>icons/antialias-icon.png</file> <file>icons/antialias-icon.png</file>
<file>icons/applications-development@2x.png</file> <file>icons/antialias-icon@2x.png</file>
<file>icons/applications-development.png</file> <file>icons/applications-development.png</file>
<file>icons/applications-graphics@2x.png</file> <file>icons/applications-development@2x.png</file>
<file>icons/applications-graphics.png</file> <file>icons/applications-graphics.png</file>
<file>icons/applications-graphics@2x.png</file>
<file>icons/applications-internet.png</file> <file>icons/applications-internet.png</file>
<file>icons/applications-other@2x.png</file>
<file>icons/applications-other.png</file> <file>icons/applications-other.png</file>
<file>icons/applications-system-24@2x.png</file> <file>icons/applications-other@2x.png</file>
<file>icons/applications-system-24.png</file> <file>icons/applications-system-24.png</file>
<file>icons/applications-system@2x.png</file> <file>icons/applications-system-24@2x.png</file>
<file>icons/applications-system.png</file> <file>icons/applications-system.png</file>
<file>icons/audio-card@2x.png</file> <file>icons/applications-system@2x.png</file>
<file>icons/audio-card.png</file> <file>icons/audio-card.png</file>
<file>icons/audio-card@2x.png</file>
<file>icons/black/index.theme</file> <file>icons/black/index.theme</file>
<file>icons/black/svg/add-line.svg</file> <file>icons/black/svg/add-line.svg</file>
<file>icons/black/svg/alert-line.svg</file> <file>icons/black/svg/alert-line.svg</file>
@ -38,16 +41,16 @@
<file>icons/black/svg/controller-digital-line.svg</file> <file>icons/black/svg/controller-digital-line.svg</file>
<file>icons/black/svg/controller-line.svg</file> <file>icons/black/svg/controller-line.svg</file>
<file>icons/black/svg/controller-strike-line.svg</file> <file>icons/black/svg/controller-strike-line.svg</file>
<file>icons/black/svg/debugger-clear-breakpoint.svg</file>
<file>icons/black/svg/debugger-dump-address.svg</file>
<file>icons/black/svg/debugger-go-to-address.svg</file>
<file>icons/black/svg/debugger-go-to-cursor.svg</file>
<file>icons/black/svg/debugger-go-to-pc.svg</file>
<file>icons/black/svg/debug-step-into-line.svg</file> <file>icons/black/svg/debug-step-into-line.svg</file>
<file>icons/black/svg/debug-step-out-line.svg</file> <file>icons/black/svg/debug-step-out-line.svg</file>
<file>icons/black/svg/debug-step-over-line.svg</file> <file>icons/black/svg/debug-step-over-line.svg</file>
<file>icons/black/svg/debug-toggle-breakpoint.svg</file> <file>icons/black/svg/debug-toggle-breakpoint.svg</file>
<file>icons/black/svg/debug-trace-line.svg</file> <file>icons/black/svg/debug-trace-line.svg</file>
<file>icons/black/svg/debugger-clear-breakpoint.svg</file>
<file>icons/black/svg/debugger-dump-address.svg</file>
<file>icons/black/svg/debugger-go-to-address.svg</file>
<file>icons/black/svg/debugger-go-to-cursor.svg</file>
<file>icons/black/svg/debugger-go-to-pc.svg</file>
<file>icons/black/svg/disc-eject-line.svg</file> <file>icons/black/svg/disc-eject-line.svg</file>
<file>icons/black/svg/disc-line.svg</file> <file>icons/black/svg/disc-line.svg</file>
<file>icons/black/svg/door-open-line.svg</file> <file>icons/black/svg/door-open-line.svg</file>
@ -73,6 +76,7 @@
<file>icons/black/svg/global-line.svg</file> <file>icons/black/svg/global-line.svg</file>
<file>icons/black/svg/guncon-line.svg</file> <file>icons/black/svg/guncon-line.svg</file>
<file>icons/black/svg/image-fill.svg</file> <file>icons/black/svg/image-fill.svg</file>
<file>icons/black/svg/information-line.svg</file>
<file>icons/black/svg/joystick-line.svg</file> <file>icons/black/svg/joystick-line.svg</file>
<file>icons/black/svg/keyboard-line.svg</file> <file>icons/black/svg/keyboard-line.svg</file>
<file>icons/black/svg/layout-grid-line.svg</file> <file>icons/black/svg/layout-grid-line.svg</file>
@ -102,17 +106,17 @@
<file>icons/black/svg/tv-2-line.svg</file> <file>icons/black/svg/tv-2-line.svg</file>
<file>icons/black/svg/volume-up-line.svg</file> <file>icons/black/svg/volume-up-line.svg</file>
<file>icons/black/svg/window-2-line.svg</file> <file>icons/black/svg/window-2-line.svg</file>
<file>icons/camera-photo@2x.png</file>
<file>icons/camera-photo.png</file> <file>icons/camera-photo.png</file>
<file>icons/camera-video@2x.png</file> <file>icons/camera-photo@2x.png</file>
<file>icons/camera-video.png</file> <file>icons/camera-video.png</file>
<file>icons/conical-flask-red@2x.png</file> <file>icons/camera-video@2x.png</file>
<file>icons/conical-flask-red.png</file> <file>icons/conical-flask-red.png</file>
<file>icons/conical-flask-red@2x.png</file>
<file>icons/cover-placeholder.png</file> <file>icons/cover-placeholder.png</file>
<file>icons/debug-execute-from-cursor.png</file> <file>icons/debug-execute-from-cursor.png</file>
<file>icons/debug-execute-to-cursor.png</file> <file>icons/debug-execute-to-cursor.png</file>
<file>icons/debug-pc@2x.png</file>
<file>icons/debug-pc.png</file> <file>icons/debug-pc.png</file>
<file>icons/debug-pc@2x.png</file>
<file>icons/debug-run-cursor.png</file> <file>icons/debug-run-cursor.png</file>
<file>icons/debug-run.png</file> <file>icons/debug-run.png</file>
<file>icons/debug-step-instruction.png</file> <file>icons/debug-step-instruction.png</file>
@ -122,137 +126,134 @@
<file>icons/debug-step-over.png</file> <file>icons/debug-step-over.png</file>
<file>icons/debug-trace.png</file> <file>icons/debug-trace.png</file>
<file>icons/discord.png</file> <file>icons/discord.png</file>
<file>icons/document-new@2x.png</file>
<file>icons/document-new.png</file> <file>icons/document-new.png</file>
<file>icons/document-open@2x.png</file> <file>icons/document-new@2x.png</file>
<file>icons/document-open.png</file> <file>icons/document-open.png</file>
<file>icons/document-save@2x.png</file> <file>icons/document-open@2x.png</file>
<file>icons/document-save.png</file> <file>icons/document-save.png</file>
<file>icons/drive-optical@2x.png</file> <file>icons/document-save@2x.png</file>
<file>icons/drive-optical.png</file> <file>icons/drive-optical.png</file>
<file>icons/drive-removable-media@2x.png</file> <file>icons/drive-optical@2x.png</file>
<file>icons/drive-removable-media.png</file> <file>icons/drive-removable-media.png</file>
<file>icons/drive-removable-media@2x.png</file>
<file>icons/duck.png</file>
<file>icons/duck_128.png</file> <file>icons/duck_128.png</file>
<file>icons/duck_64.png</file> <file>icons/duck_64.png</file>
<file>icons/duck.png</file>
<file>icons/edit-clear-16@2x.png</file>
<file>icons/edit-clear-16.png</file> <file>icons/edit-clear-16.png</file>
<file>icons/edit-clear-16@2x.png</file>
<file>icons/edit-find.png</file> <file>icons/edit-find.png</file>
<file>icons/emblem-person-blue@2x.png</file>
<file>icons/emblem-person-blue.png</file> <file>icons/emblem-person-blue.png</file>
<file>icons/flag-eu@2x.png</file> <file>icons/emblem-person-blue@2x.png</file>
<file>icons/flag-eu.png</file> <file>icons/flag-eu.png</file>
<file>icons/flag-eu.svg</file> <file>icons/flag-eu.svg</file>
<file>icons/flag-jp@2x.png</file> <file>icons/flag-eu@2x.png</file>
<file>icons/flag-jp.png</file> <file>icons/flag-jp.png</file>
<file>icons/flag-jp.svg</file> <file>icons/flag-jp.svg</file>
<file>icons/flag-other@2x.png</file> <file>icons/flag-jp@2x.png</file>
<file>icons/flag-other.png</file> <file>icons/flag-other.png</file>
<file>icons/flags/de@2x.png</file> <file>icons/flag-other@2x.png</file>
<file>icons/flag-uc.png</file>
<file>icons/flag-uc.svg</file>
<file>icons/flag-uc@2x.png</file>
<file>icons/flag-us.png</file>
<file>icons/flag-us.svg</file>
<file>icons/flag-us@2x.png</file>
<file>icons/flags/de.png</file> <file>icons/flags/de.png</file>
<file>icons/flags/en@2x.png</file> <file>icons/flags/de@2x.png</file>
<file>icons/flags/en.png</file> <file>icons/flags/en.png</file>
<file>icons/flags/es-ES@2x.png</file> <file>icons/flags/en@2x.png</file>
<file>icons/flags/es-ES.png</file> <file>icons/flags/es-ES.png</file>
<file>icons/flags/fr@2x.png</file> <file>icons/flags/es-ES@2x.png</file>
<file>icons/flags/fr.png</file> <file>icons/flags/fr.png</file>
<file>icons/flags/he@2x.png</file> <file>icons/flags/fr@2x.png</file>
<file>icons/flags/he.png</file> <file>icons/flags/he.png</file>
<file>icons/flags/id@2x.png</file> <file>icons/flags/he@2x.png</file>
<file>icons/flags/id.png</file> <file>icons/flags/id.png</file>
<file>icons/flags/it@2x.png</file> <file>icons/flags/id@2x.png</file>
<file>icons/flags/it.png</file> <file>icons/flags/it.png</file>
<file>icons/flags/ja@2x.png</file> <file>icons/flags/it@2x.png</file>
<file>icons/flags/ja.png</file> <file>icons/flags/ja.png</file>
<file>icons/flags/ko@2x.png</file> <file>icons/flags/ja@2x.png</file>
<file>icons/flags/ko.png</file> <file>icons/flags/ko.png</file>
<file>icons/flags/nl@2x.png</file> <file>icons/flags/ko@2x.png</file>
<file>icons/flags/nl.png</file> <file>icons/flags/nl.png</file>
<file>icons/flags/pl@2x.png</file> <file>icons/flags/nl@2x.png</file>
<file>icons/flags/pl.png</file> <file>icons/flags/pl.png</file>
<file>icons/flags/pt-BR@2x.png</file> <file>icons/flags/pl@2x.png</file>
<file>icons/flags/pt-BR.png</file> <file>icons/flags/pt-BR.png</file>
<file>icons/flags/pt-PT@2x.png</file> <file>icons/flags/pt-BR@2x.png</file>
<file>icons/flags/pt-PT.png</file> <file>icons/flags/pt-PT.png</file>
<file>icons/flags/ru@2x.png</file> <file>icons/flags/pt-PT@2x.png</file>
<file>icons/flags/ru.png</file> <file>icons/flags/ru.png</file>
<file>icons/flags/tr@2x.png</file> <file>icons/flags/ru@2x.png</file>
<file>icons/flags/tr.png</file> <file>icons/flags/tr.png</file>
<file>icons/flags/zh-CN@2x.png</file> <file>icons/flags/tr@2x.png</file>
<file>icons/flags/zh-CN.png</file> <file>icons/flags/zh-CN.png</file>
<file>icons/flag-uc@2x.png</file> <file>icons/flags/zh-CN@2x.png</file>
<file>icons/flag-uc.png</file>
<file>icons/flag-uc.svg</file>
<file>icons/flag-us@2x.png</file>
<file>icons/flag-us.png</file>
<file>icons/flag-us.svg</file>
<file>icons/folder-open@2x.png</file>
<file>icons/folder-open.png</file> <file>icons/folder-open.png</file>
<file>icons/folder-open@2x.png</file>
<file>icons/github.png</file> <file>icons/github.png</file>
<file>icons/go-down-16@2x.png</file>
<file>icons/go-down-16.png</file> <file>icons/go-down-16.png</file>
<file>icons/go-up-16@2x.png</file> <file>icons/go-down-16@2x.png</file>
<file>icons/go-up-16.png</file> <file>icons/go-up-16.png</file>
<file>icons/input-gaming@2x.png</file> <file>icons/go-up-16@2x.png</file>
<file>icons/input-gaming.png</file> <file>icons/input-gaming.png</file>
<file>icons/IssueTracker.png</file> <file>icons/input-gaming@2x.png</file>
<file>icons/list-add@2x.png</file>
<file>icons/list-add.png</file> <file>icons/list-add.png</file>
<file>icons/list-remove@2x.png</file> <file>icons/list-add@2x.png</file>
<file>icons/list-remove.png</file> <file>icons/list-remove.png</file>
<file>icons/media-flash-2@2x.png</file> <file>icons/list-remove@2x.png</file>
<file>icons/media-flash-24@2x.png</file>
<file>icons/media-flash-24.png</file>
<file>icons/media-flash-2.png</file> <file>icons/media-flash-2.png</file>
<file>icons/media-flash@2x.png</file> <file>icons/media-flash-24.png</file>
<file>icons/media-flash-24@2x.png</file>
<file>icons/media-flash-2@2x.png</file>
<file>icons/media-flash.png</file> <file>icons/media-flash.png</file>
<file>icons/media-optical-24@2x.png</file> <file>icons/media-flash@2x.png</file>
<file>icons/media-optical-24.png</file> <file>icons/media-optical-24.png</file>
<file>icons/media-optical@2x.png</file> <file>icons/media-optical-24@2x.png</file>
<file>icons/media-optical-gear-24@2x.png</file>
<file>icons/media-optical-gear-24.png</file> <file>icons/media-optical-gear-24.png</file>
<file>icons/media-optical-gear-24@2x.png</file>
<file>icons/media-optical.png</file> <file>icons/media-optical.png</file>
<file>icons/media-playback-pause@2x.png</file> <file>icons/media-optical@2x.png</file>
<file>icons/media-playback-pause.png</file> <file>icons/media-playback-pause.png</file>
<file>icons/media-playback-start@2x.png</file> <file>icons/media-playback-pause@2x.png</file>
<file>icons/media-playback-start.png</file> <file>icons/media-playback-start.png</file>
<file>icons/media-record@2x.png</file> <file>icons/media-playback-start@2x.png</file>
<file>icons/media-record.png</file> <file>icons/media-record.png</file>
<file>icons/multimedia-player@2x.png</file> <file>icons/media-record@2x.png</file>
<file>icons/multimedia-player.png</file> <file>icons/multimedia-player.png</file>
<file>icons/preferences-desktop-keyboard-shortcuts@2x.png</file> <file>icons/multimedia-player@2x.png</file>
<file>icons/preferences-desktop-keyboard-shortcuts.png</file> <file>icons/preferences-desktop-keyboard-shortcuts.png</file>
<file>icons/preferences-system@2x.png</file> <file>icons/preferences-desktop-keyboard-shortcuts@2x.png</file>
<file>icons/preferences-system.png</file> <file>icons/preferences-system.png</file>
<file>icons/process-stop@2x.png</file> <file>icons/preferences-system@2x.png</file>
<file>icons/process-stop.png</file> <file>icons/process-stop.png</file>
<file>icons/QT.png</file> <file>icons/process-stop@2x.png</file>
<file>icons/software-update-available@2x.png</file>
<file>icons/software-update-available.png</file> <file>icons/software-update-available.png</file>
<file>icons/software-update-available@2x.png</file>
<file>icons/star-0.png</file> <file>icons/star-0.png</file>
<file>icons/star-1.png</file> <file>icons/star-1.png</file>
<file>icons/star-2.png</file> <file>icons/star-2.png</file>
<file>icons/star-3.png</file> <file>icons/star-3.png</file>
<file>icons/star-4.png</file> <file>icons/star-4.png</file>
<file>icons/star-5.png</file> <file>icons/star-5.png</file>
<file>icons/system-file-manager@2x.png</file>
<file>icons/system-file-manager.png</file> <file>icons/system-file-manager.png</file>
<file>icons/system-search@2x.png</file> <file>icons/system-file-manager@2x.png</file>
<file>icons/system-search.png</file> <file>icons/system-search.png</file>
<file>icons/system-shutdown@2x.png</file> <file>icons/system-search@2x.png</file>
<file>icons/system-shutdown.png</file> <file>icons/system-shutdown.png</file>
<file>icons/trophy@2x.png</file> <file>icons/system-shutdown@2x.png</file>
<file>icons/trophy.png</file> <file>icons/trophy.png</file>
<file>icons/UpdateDuck.png</file> <file>icons/trophy@2x.png</file>
<file>icons/update.png</file> <file>icons/update.png</file>
<file>icons/utilities-system-monitor@2x.png</file>
<file>icons/utilities-system-monitor.png</file> <file>icons/utilities-system-monitor.png</file>
<file>icons/video-display@2x.png</file> <file>icons/utilities-system-monitor@2x.png</file>
<file>icons/video-display.png</file> <file>icons/video-display.png</file>
<file>icons/view-fullscreen@2x.png</file> <file>icons/video-display@2x.png</file>
<file>icons/view-fullscreen.png</file> <file>icons/view-fullscreen.png</file>
<file>icons/view-refresh@2x.png</file> <file>icons/view-fullscreen@2x.png</file>
<file>icons/view-refresh.png</file> <file>icons/view-refresh.png</file>
<file>icons/view-refresh@2x.png</file>
<file>icons/white/index.theme</file> <file>icons/white/index.theme</file>
<file>icons/white/svg/add-line.svg</file> <file>icons/white/svg/add-line.svg</file>
<file>icons/white/svg/alert-line.svg</file> <file>icons/white/svg/alert-line.svg</file>
@ -268,16 +269,16 @@
<file>icons/white/svg/controller-digital-line.svg</file> <file>icons/white/svg/controller-digital-line.svg</file>
<file>icons/white/svg/controller-line.svg</file> <file>icons/white/svg/controller-line.svg</file>
<file>icons/white/svg/controller-strike-line.svg</file> <file>icons/white/svg/controller-strike-line.svg</file>
<file>icons/white/svg/debugger-clear-breakpoint.svg</file>
<file>icons/white/svg/debugger-dump-address.svg</file>
<file>icons/white/svg/debugger-go-to-address.svg</file>
<file>icons/white/svg/debugger-go-to-cursor.svg</file>
<file>icons/white/svg/debugger-go-to-pc.svg</file>
<file>icons/white/svg/debug-step-into-line.svg</file> <file>icons/white/svg/debug-step-into-line.svg</file>
<file>icons/white/svg/debug-step-out-line.svg</file> <file>icons/white/svg/debug-step-out-line.svg</file>
<file>icons/white/svg/debug-step-over-line.svg</file> <file>icons/white/svg/debug-step-over-line.svg</file>
<file>icons/white/svg/debug-toggle-breakpoint.svg</file> <file>icons/white/svg/debug-toggle-breakpoint.svg</file>
<file>icons/white/svg/debug-trace-line.svg</file> <file>icons/white/svg/debug-trace-line.svg</file>
<file>icons/white/svg/debugger-clear-breakpoint.svg</file>
<file>icons/white/svg/debugger-dump-address.svg</file>
<file>icons/white/svg/debugger-go-to-address.svg</file>
<file>icons/white/svg/debugger-go-to-cursor.svg</file>
<file>icons/white/svg/debugger-go-to-pc.svg</file>
<file>icons/white/svg/disc-eject-line.svg</file> <file>icons/white/svg/disc-eject-line.svg</file>
<file>icons/white/svg/disc-line.svg</file> <file>icons/white/svg/disc-line.svg</file>
<file>icons/white/svg/door-open-line.svg</file> <file>icons/white/svg/door-open-line.svg</file>
@ -303,6 +304,7 @@
<file>icons/white/svg/global-line.svg</file> <file>icons/white/svg/global-line.svg</file>
<file>icons/white/svg/guncon-line.svg</file> <file>icons/white/svg/guncon-line.svg</file>
<file>icons/white/svg/image-fill.svg</file> <file>icons/white/svg/image-fill.svg</file>
<file>icons/white/svg/information-line.svg</file>
<file>icons/white/svg/joystick-line.svg</file> <file>icons/white/svg/joystick-line.svg</file>
<file>icons/white/svg/keyboard-line.svg</file> <file>icons/white/svg/keyboard-line.svg</file>
<file>icons/white/svg/layout-grid-line.svg</file> <file>icons/white/svg/layout-grid-line.svg</file>
@ -332,214 +334,214 @@
<file>icons/white/svg/tv-2-line.svg</file> <file>icons/white/svg/tv-2-line.svg</file>
<file>icons/white/svg/volume-up-line.svg</file> <file>icons/white/svg/volume-up-line.svg</file>
<file>icons/white/svg/window-2-line.svg</file> <file>icons/white/svg/window-2-line.svg</file>
<file>qdarkstyle/arrow_down.png</file>
<file>qdarkstyle/arrow_down@2x.png</file> <file>qdarkstyle/arrow_down@2x.png</file>
<file>qdarkstyle/arrow_down_disabled@2x.png</file>
<file>qdarkstyle/arrow_down_disabled.png</file> <file>qdarkstyle/arrow_down_disabled.png</file>
<file>qdarkstyle/arrow_down_focus@2x.png</file> <file>qdarkstyle/arrow_down_disabled@2x.png</file>
<file>qdarkstyle/arrow_down_focus.png</file> <file>qdarkstyle/arrow_down_focus.png</file>
<file>qdarkstyle/arrow_down.png</file> <file>qdarkstyle/arrow_down_focus@2x.png</file>
<file>qdarkstyle/arrow_down_pressed@2x.png</file>
<file>qdarkstyle/arrow_down_pressed.png</file> <file>qdarkstyle/arrow_down_pressed.png</file>
<file>qdarkstyle/arrow_down_pressed@2x.png</file>
<file>qdarkstyle/arrow_left.png</file>
<file>qdarkstyle/arrow_left@2x.png</file> <file>qdarkstyle/arrow_left@2x.png</file>
<file>qdarkstyle/arrow_left_disabled@2x.png</file>
<file>qdarkstyle/arrow_left_disabled.png</file> <file>qdarkstyle/arrow_left_disabled.png</file>
<file>qdarkstyle/arrow_left_focus@2x.png</file> <file>qdarkstyle/arrow_left_disabled@2x.png</file>
<file>qdarkstyle/arrow_left_focus.png</file> <file>qdarkstyle/arrow_left_focus.png</file>
<file>qdarkstyle/arrow_left.png</file> <file>qdarkstyle/arrow_left_focus@2x.png</file>
<file>qdarkstyle/arrow_left_pressed@2x.png</file>
<file>qdarkstyle/arrow_left_pressed.png</file> <file>qdarkstyle/arrow_left_pressed.png</file>
<file>qdarkstyle/arrow_left_pressed@2x.png</file>
<file>qdarkstyle/arrow_right.png</file>
<file>qdarkstyle/arrow_right@2x.png</file> <file>qdarkstyle/arrow_right@2x.png</file>
<file>qdarkstyle/arrow_right_disabled@2x.png</file>
<file>qdarkstyle/arrow_right_disabled.png</file> <file>qdarkstyle/arrow_right_disabled.png</file>
<file>qdarkstyle/arrow_right_focus@2x.png</file> <file>qdarkstyle/arrow_right_disabled@2x.png</file>
<file>qdarkstyle/arrow_right_focus.png</file> <file>qdarkstyle/arrow_right_focus.png</file>
<file>qdarkstyle/arrow_right.png</file> <file>qdarkstyle/arrow_right_focus@2x.png</file>
<file>qdarkstyle/arrow_right_pressed@2x.png</file>
<file>qdarkstyle/arrow_right_pressed.png</file> <file>qdarkstyle/arrow_right_pressed.png</file>
<file>qdarkstyle/arrow_right_pressed@2x.png</file>
<file>qdarkstyle/arrow_up.png</file>
<file>qdarkstyle/arrow_up@2x.png</file> <file>qdarkstyle/arrow_up@2x.png</file>
<file>qdarkstyle/arrow_up_disabled@2x.png</file>
<file>qdarkstyle/arrow_up_disabled.png</file> <file>qdarkstyle/arrow_up_disabled.png</file>
<file>qdarkstyle/arrow_up_focus@2x.png</file> <file>qdarkstyle/arrow_up_disabled@2x.png</file>
<file>qdarkstyle/arrow_up_focus.png</file> <file>qdarkstyle/arrow_up_focus.png</file>
<file>qdarkstyle/arrow_up.png</file> <file>qdarkstyle/arrow_up_focus@2x.png</file>
<file>qdarkstyle/arrow_up_pressed@2x.png</file>
<file>qdarkstyle/arrow_up_pressed.png</file> <file>qdarkstyle/arrow_up_pressed.png</file>
<file>qdarkstyle/arrow_up_pressed@2x.png</file>
<file>qdarkstyle/base_icon.png</file>
<file>qdarkstyle/base_icon@2x.png</file> <file>qdarkstyle/base_icon@2x.png</file>
<file>qdarkstyle/base_icon_disabled@2x.png</file>
<file>qdarkstyle/base_icon_disabled.png</file> <file>qdarkstyle/base_icon_disabled.png</file>
<file>qdarkstyle/base_icon_focus@2x.png</file> <file>qdarkstyle/base_icon_disabled@2x.png</file>
<file>qdarkstyle/base_icon_focus.png</file> <file>qdarkstyle/base_icon_focus.png</file>
<file>qdarkstyle/base_icon.png</file> <file>qdarkstyle/base_icon_focus@2x.png</file>
<file>qdarkstyle/base_icon_pressed@2x.png</file>
<file>qdarkstyle/base_icon_pressed.png</file> <file>qdarkstyle/base_icon_pressed.png</file>
<file>qdarkstyle/base_icon_pressed@2x.png</file>
<file>qdarkstyle/branch_closed.png</file>
<file>qdarkstyle/branch_closed@2x.png</file> <file>qdarkstyle/branch_closed@2x.png</file>
<file>qdarkstyle/branch_closed_disabled@2x.png</file>
<file>qdarkstyle/branch_closed_disabled.png</file> <file>qdarkstyle/branch_closed_disabled.png</file>
<file>qdarkstyle/branch_closed_focus@2x.png</file> <file>qdarkstyle/branch_closed_disabled@2x.png</file>
<file>qdarkstyle/branch_closed_focus.png</file> <file>qdarkstyle/branch_closed_focus.png</file>
<file>qdarkstyle/branch_closed.png</file> <file>qdarkstyle/branch_closed_focus@2x.png</file>
<file>qdarkstyle/branch_closed_pressed@2x.png</file>
<file>qdarkstyle/branch_closed_pressed.png</file> <file>qdarkstyle/branch_closed_pressed.png</file>
<file>qdarkstyle/branch_closed_pressed@2x.png</file>
<file>qdarkstyle/branch_end.png</file>
<file>qdarkstyle/branch_end@2x.png</file> <file>qdarkstyle/branch_end@2x.png</file>
<file>qdarkstyle/branch_end_disabled@2x.png</file>
<file>qdarkstyle/branch_end_disabled.png</file> <file>qdarkstyle/branch_end_disabled.png</file>
<file>qdarkstyle/branch_end_focus@2x.png</file> <file>qdarkstyle/branch_end_disabled@2x.png</file>
<file>qdarkstyle/branch_end_focus.png</file> <file>qdarkstyle/branch_end_focus.png</file>
<file>qdarkstyle/branch_end.png</file> <file>qdarkstyle/branch_end_focus@2x.png</file>
<file>qdarkstyle/branch_end_pressed@2x.png</file>
<file>qdarkstyle/branch_end_pressed.png</file> <file>qdarkstyle/branch_end_pressed.png</file>
<file>qdarkstyle/branch_end_pressed@2x.png</file>
<file>qdarkstyle/branch_line.png</file>
<file>qdarkstyle/branch_line@2x.png</file> <file>qdarkstyle/branch_line@2x.png</file>
<file>qdarkstyle/branch_line_disabled@2x.png</file>
<file>qdarkstyle/branch_line_disabled.png</file> <file>qdarkstyle/branch_line_disabled.png</file>
<file>qdarkstyle/branch_line_focus@2x.png</file> <file>qdarkstyle/branch_line_disabled@2x.png</file>
<file>qdarkstyle/branch_line_focus.png</file> <file>qdarkstyle/branch_line_focus.png</file>
<file>qdarkstyle/branch_line.png</file> <file>qdarkstyle/branch_line_focus@2x.png</file>
<file>qdarkstyle/branch_line_pressed@2x.png</file>
<file>qdarkstyle/branch_line_pressed.png</file> <file>qdarkstyle/branch_line_pressed.png</file>
<file>qdarkstyle/branch_line_pressed@2x.png</file>
<file>qdarkstyle/branch_more.png</file>
<file>qdarkstyle/branch_more@2x.png</file> <file>qdarkstyle/branch_more@2x.png</file>
<file>qdarkstyle/branch_more_disabled@2x.png</file>
<file>qdarkstyle/branch_more_disabled.png</file> <file>qdarkstyle/branch_more_disabled.png</file>
<file>qdarkstyle/branch_more_focus@2x.png</file> <file>qdarkstyle/branch_more_disabled@2x.png</file>
<file>qdarkstyle/branch_more_focus.png</file> <file>qdarkstyle/branch_more_focus.png</file>
<file>qdarkstyle/branch_more.png</file> <file>qdarkstyle/branch_more_focus@2x.png</file>
<file>qdarkstyle/branch_more_pressed@2x.png</file>
<file>qdarkstyle/branch_more_pressed.png</file> <file>qdarkstyle/branch_more_pressed.png</file>
<file>qdarkstyle/branch_more_pressed@2x.png</file>
<file>qdarkstyle/branch_open.png</file>
<file>qdarkstyle/branch_open@2x.png</file> <file>qdarkstyle/branch_open@2x.png</file>
<file>qdarkstyle/branch_open_disabled@2x.png</file>
<file>qdarkstyle/branch_open_disabled.png</file> <file>qdarkstyle/branch_open_disabled.png</file>
<file>qdarkstyle/branch_open_focus@2x.png</file> <file>qdarkstyle/branch_open_disabled@2x.png</file>
<file>qdarkstyle/branch_open_focus.png</file> <file>qdarkstyle/branch_open_focus.png</file>
<file>qdarkstyle/branch_open.png</file> <file>qdarkstyle/branch_open_focus@2x.png</file>
<file>qdarkstyle/branch_open_pressed@2x.png</file>
<file>qdarkstyle/branch_open_pressed.png</file> <file>qdarkstyle/branch_open_pressed.png</file>
<file>qdarkstyle/branch_open_pressed@2x.png</file>
<file>qdarkstyle/checkbox_checked.png</file>
<file>qdarkstyle/checkbox_checked@2x.png</file> <file>qdarkstyle/checkbox_checked@2x.png</file>
<file>qdarkstyle/checkbox_checked_disabled@2x.png</file>
<file>qdarkstyle/checkbox_checked_disabled.png</file> <file>qdarkstyle/checkbox_checked_disabled.png</file>
<file>qdarkstyle/checkbox_checked_focus@2x.png</file> <file>qdarkstyle/checkbox_checked_disabled@2x.png</file>
<file>qdarkstyle/checkbox_checked_focus.png</file> <file>qdarkstyle/checkbox_checked_focus.png</file>
<file>qdarkstyle/checkbox_checked.png</file> <file>qdarkstyle/checkbox_checked_focus@2x.png</file>
<file>qdarkstyle/checkbox_checked_pressed@2x.png</file>
<file>qdarkstyle/checkbox_checked_pressed.png</file> <file>qdarkstyle/checkbox_checked_pressed.png</file>
<file>qdarkstyle/checkbox_checked_pressed@2x.png</file>
<file>qdarkstyle/checkbox_indeterminate.png</file>
<file>qdarkstyle/checkbox_indeterminate@2x.png</file> <file>qdarkstyle/checkbox_indeterminate@2x.png</file>
<file>qdarkstyle/checkbox_indeterminate_disabled@2x.png</file>
<file>qdarkstyle/checkbox_indeterminate_disabled.png</file> <file>qdarkstyle/checkbox_indeterminate_disabled.png</file>
<file>qdarkstyle/checkbox_indeterminate_focus@2x.png</file> <file>qdarkstyle/checkbox_indeterminate_disabled@2x.png</file>
<file>qdarkstyle/checkbox_indeterminate_focus.png</file> <file>qdarkstyle/checkbox_indeterminate_focus.png</file>
<file>qdarkstyle/checkbox_indeterminate.png</file> <file>qdarkstyle/checkbox_indeterminate_focus@2x.png</file>
<file>qdarkstyle/checkbox_indeterminate_pressed@2x.png</file>
<file>qdarkstyle/checkbox_indeterminate_pressed.png</file> <file>qdarkstyle/checkbox_indeterminate_pressed.png</file>
<file>qdarkstyle/checkbox_indeterminate_pressed@2x.png</file>
<file>qdarkstyle/checkbox_unchecked.png</file>
<file>qdarkstyle/checkbox_unchecked@2x.png</file> <file>qdarkstyle/checkbox_unchecked@2x.png</file>
<file>qdarkstyle/checkbox_unchecked_disabled@2x.png</file>
<file>qdarkstyle/checkbox_unchecked_disabled.png</file> <file>qdarkstyle/checkbox_unchecked_disabled.png</file>
<file>qdarkstyle/checkbox_unchecked_focus@2x.png</file> <file>qdarkstyle/checkbox_unchecked_disabled@2x.png</file>
<file>qdarkstyle/checkbox_unchecked_focus.png</file> <file>qdarkstyle/checkbox_unchecked_focus.png</file>
<file>qdarkstyle/checkbox_unchecked.png</file> <file>qdarkstyle/checkbox_unchecked_focus@2x.png</file>
<file>qdarkstyle/checkbox_unchecked_pressed@2x.png</file>
<file>qdarkstyle/checkbox_unchecked_pressed.png</file> <file>qdarkstyle/checkbox_unchecked_pressed.png</file>
<file>qdarkstyle/checkbox_unchecked_pressed@2x.png</file>
<file>qdarkstyle/line_horizontal.png</file>
<file>qdarkstyle/line_horizontal@2x.png</file> <file>qdarkstyle/line_horizontal@2x.png</file>
<file>qdarkstyle/line_horizontal_disabled@2x.png</file>
<file>qdarkstyle/line_horizontal_disabled.png</file> <file>qdarkstyle/line_horizontal_disabled.png</file>
<file>qdarkstyle/line_horizontal_focus@2x.png</file> <file>qdarkstyle/line_horizontal_disabled@2x.png</file>
<file>qdarkstyle/line_horizontal_focus.png</file> <file>qdarkstyle/line_horizontal_focus.png</file>
<file>qdarkstyle/line_horizontal.png</file> <file>qdarkstyle/line_horizontal_focus@2x.png</file>
<file>qdarkstyle/line_horizontal_pressed@2x.png</file>
<file>qdarkstyle/line_horizontal_pressed.png</file> <file>qdarkstyle/line_horizontal_pressed.png</file>
<file>qdarkstyle/line_horizontal_pressed@2x.png</file>
<file>qdarkstyle/line_vertical.png</file>
<file>qdarkstyle/line_vertical@2x.png</file> <file>qdarkstyle/line_vertical@2x.png</file>
<file>qdarkstyle/line_vertical_disabled@2x.png</file>
<file>qdarkstyle/line_vertical_disabled.png</file> <file>qdarkstyle/line_vertical_disabled.png</file>
<file>qdarkstyle/line_vertical_focus@2x.png</file> <file>qdarkstyle/line_vertical_disabled@2x.png</file>
<file>qdarkstyle/line_vertical_focus.png</file> <file>qdarkstyle/line_vertical_focus.png</file>
<file>qdarkstyle/line_vertical.png</file> <file>qdarkstyle/line_vertical_focus@2x.png</file>
<file>qdarkstyle/line_vertical_pressed@2x.png</file>
<file>qdarkstyle/line_vertical_pressed.png</file> <file>qdarkstyle/line_vertical_pressed.png</file>
<file>qdarkstyle/line_vertical_pressed@2x.png</file>
<file>qdarkstyle/radio_checked.png</file>
<file>qdarkstyle/radio_checked@2x.png</file> <file>qdarkstyle/radio_checked@2x.png</file>
<file>qdarkstyle/radio_checked_disabled@2x.png</file>
<file>qdarkstyle/radio_checked_disabled.png</file> <file>qdarkstyle/radio_checked_disabled.png</file>
<file>qdarkstyle/radio_checked_focus@2x.png</file> <file>qdarkstyle/radio_checked_disabled@2x.png</file>
<file>qdarkstyle/radio_checked_focus.png</file> <file>qdarkstyle/radio_checked_focus.png</file>
<file>qdarkstyle/radio_checked.png</file> <file>qdarkstyle/radio_checked_focus@2x.png</file>
<file>qdarkstyle/radio_checked_pressed@2x.png</file>
<file>qdarkstyle/radio_checked_pressed.png</file> <file>qdarkstyle/radio_checked_pressed.png</file>
<file>qdarkstyle/radio_checked_pressed@2x.png</file>
<file>qdarkstyle/radio_unchecked.png</file>
<file>qdarkstyle/radio_unchecked@2x.png</file> <file>qdarkstyle/radio_unchecked@2x.png</file>
<file>qdarkstyle/radio_unchecked_disabled@2x.png</file>
<file>qdarkstyle/radio_unchecked_disabled.png</file> <file>qdarkstyle/radio_unchecked_disabled.png</file>
<file>qdarkstyle/radio_unchecked_focus@2x.png</file> <file>qdarkstyle/radio_unchecked_disabled@2x.png</file>
<file>qdarkstyle/radio_unchecked_focus.png</file> <file>qdarkstyle/radio_unchecked_focus.png</file>
<file>qdarkstyle/radio_unchecked.png</file> <file>qdarkstyle/radio_unchecked_focus@2x.png</file>
<file>qdarkstyle/radio_unchecked_pressed@2x.png</file>
<file>qdarkstyle/radio_unchecked_pressed.png</file> <file>qdarkstyle/radio_unchecked_pressed.png</file>
<file>qdarkstyle/radio_unchecked_pressed@2x.png</file>
<file>qdarkstyle/style.qss</file> <file>qdarkstyle/style.qss</file>
<file>qdarkstyle/toolbar_move_horizontal.png</file>
<file>qdarkstyle/toolbar_move_horizontal@2x.png</file> <file>qdarkstyle/toolbar_move_horizontal@2x.png</file>
<file>qdarkstyle/toolbar_move_horizontal_disabled@2x.png</file>
<file>qdarkstyle/toolbar_move_horizontal_disabled.png</file> <file>qdarkstyle/toolbar_move_horizontal_disabled.png</file>
<file>qdarkstyle/toolbar_move_horizontal_focus@2x.png</file> <file>qdarkstyle/toolbar_move_horizontal_disabled@2x.png</file>
<file>qdarkstyle/toolbar_move_horizontal_focus.png</file> <file>qdarkstyle/toolbar_move_horizontal_focus.png</file>
<file>qdarkstyle/toolbar_move_horizontal.png</file> <file>qdarkstyle/toolbar_move_horizontal_focus@2x.png</file>
<file>qdarkstyle/toolbar_move_horizontal_pressed@2x.png</file>
<file>qdarkstyle/toolbar_move_horizontal_pressed.png</file> <file>qdarkstyle/toolbar_move_horizontal_pressed.png</file>
<file>qdarkstyle/toolbar_move_horizontal_pressed@2x.png</file>
<file>qdarkstyle/toolbar_move_vertical.png</file>
<file>qdarkstyle/toolbar_move_vertical@2x.png</file> <file>qdarkstyle/toolbar_move_vertical@2x.png</file>
<file>qdarkstyle/toolbar_move_vertical_disabled@2x.png</file>
<file>qdarkstyle/toolbar_move_vertical_disabled.png</file> <file>qdarkstyle/toolbar_move_vertical_disabled.png</file>
<file>qdarkstyle/toolbar_move_vertical_focus@2x.png</file> <file>qdarkstyle/toolbar_move_vertical_disabled@2x.png</file>
<file>qdarkstyle/toolbar_move_vertical_focus.png</file> <file>qdarkstyle/toolbar_move_vertical_focus.png</file>
<file>qdarkstyle/toolbar_move_vertical.png</file> <file>qdarkstyle/toolbar_move_vertical_focus@2x.png</file>
<file>qdarkstyle/toolbar_move_vertical_pressed@2x.png</file>
<file>qdarkstyle/toolbar_move_vertical_pressed.png</file> <file>qdarkstyle/toolbar_move_vertical_pressed.png</file>
<file>qdarkstyle/toolbar_move_vertical_pressed@2x.png</file>
<file>qdarkstyle/toolbar_separator_horizontal.png</file>
<file>qdarkstyle/toolbar_separator_horizontal@2x.png</file> <file>qdarkstyle/toolbar_separator_horizontal@2x.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_disabled@2x.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_disabled.png</file> <file>qdarkstyle/toolbar_separator_horizontal_disabled.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_focus@2x.png</file> <file>qdarkstyle/toolbar_separator_horizontal_disabled@2x.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_focus.png</file> <file>qdarkstyle/toolbar_separator_horizontal_focus.png</file>
<file>qdarkstyle/toolbar_separator_horizontal.png</file> <file>qdarkstyle/toolbar_separator_horizontal_focus@2x.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_pressed@2x.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_pressed.png</file> <file>qdarkstyle/toolbar_separator_horizontal_pressed.png</file>
<file>qdarkstyle/toolbar_separator_horizontal_pressed@2x.png</file>
<file>qdarkstyle/toolbar_separator_vertical.png</file>
<file>qdarkstyle/toolbar_separator_vertical@2x.png</file> <file>qdarkstyle/toolbar_separator_vertical@2x.png</file>
<file>qdarkstyle/toolbar_separator_vertical_disabled@2x.png</file>
<file>qdarkstyle/toolbar_separator_vertical_disabled.png</file> <file>qdarkstyle/toolbar_separator_vertical_disabled.png</file>
<file>qdarkstyle/toolbar_separator_vertical_focus@2x.png</file> <file>qdarkstyle/toolbar_separator_vertical_disabled@2x.png</file>
<file>qdarkstyle/toolbar_separator_vertical_focus.png</file> <file>qdarkstyle/toolbar_separator_vertical_focus.png</file>
<file>qdarkstyle/toolbar_separator_vertical.png</file> <file>qdarkstyle/toolbar_separator_vertical_focus@2x.png</file>
<file>qdarkstyle/toolbar_separator_vertical_pressed@2x.png</file>
<file>qdarkstyle/toolbar_separator_vertical_pressed.png</file> <file>qdarkstyle/toolbar_separator_vertical_pressed.png</file>
<file>qdarkstyle/toolbar_separator_vertical_pressed@2x.png</file>
<file>qdarkstyle/transparent.png</file>
<file>qdarkstyle/transparent@2x.png</file> <file>qdarkstyle/transparent@2x.png</file>
<file>qdarkstyle/transparent_disabled@2x.png</file>
<file>qdarkstyle/transparent_disabled.png</file> <file>qdarkstyle/transparent_disabled.png</file>
<file>qdarkstyle/transparent_focus@2x.png</file> <file>qdarkstyle/transparent_disabled@2x.png</file>
<file>qdarkstyle/transparent_focus.png</file> <file>qdarkstyle/transparent_focus.png</file>
<file>qdarkstyle/transparent.png</file> <file>qdarkstyle/transparent_focus@2x.png</file>
<file>qdarkstyle/transparent_pressed@2x.png</file>
<file>qdarkstyle/transparent_pressed.png</file> <file>qdarkstyle/transparent_pressed.png</file>
<file>qdarkstyle/transparent_pressed@2x.png</file>
<file>qdarkstyle/window_close.png</file>
<file>qdarkstyle/window_close@2x.png</file> <file>qdarkstyle/window_close@2x.png</file>
<file>qdarkstyle/window_close_disabled@2x.png</file>
<file>qdarkstyle/window_close_disabled.png</file> <file>qdarkstyle/window_close_disabled.png</file>
<file>qdarkstyle/window_close_focus@2x.png</file> <file>qdarkstyle/window_close_disabled@2x.png</file>
<file>qdarkstyle/window_close_focus.png</file> <file>qdarkstyle/window_close_focus.png</file>
<file>qdarkstyle/window_close.png</file> <file>qdarkstyle/window_close_focus@2x.png</file>
<file>qdarkstyle/window_close_pressed@2x.png</file>
<file>qdarkstyle/window_close_pressed.png</file> <file>qdarkstyle/window_close_pressed.png</file>
<file>qdarkstyle/window_close_pressed@2x.png</file>
<file>qdarkstyle/window_grip.png</file>
<file>qdarkstyle/window_grip@2x.png</file> <file>qdarkstyle/window_grip@2x.png</file>
<file>qdarkstyle/window_grip_disabled@2x.png</file>
<file>qdarkstyle/window_grip_disabled.png</file> <file>qdarkstyle/window_grip_disabled.png</file>
<file>qdarkstyle/window_grip_focus@2x.png</file> <file>qdarkstyle/window_grip_disabled@2x.png</file>
<file>qdarkstyle/window_grip_focus.png</file> <file>qdarkstyle/window_grip_focus.png</file>
<file>qdarkstyle/window_grip.png</file> <file>qdarkstyle/window_grip_focus@2x.png</file>
<file>qdarkstyle/window_grip_pressed@2x.png</file>
<file>qdarkstyle/window_grip_pressed.png</file> <file>qdarkstyle/window_grip_pressed.png</file>
<file>qdarkstyle/window_grip_pressed@2x.png</file>
<file>qdarkstyle/window_minimize.png</file>
<file>qdarkstyle/window_minimize@2x.png</file> <file>qdarkstyle/window_minimize@2x.png</file>
<file>qdarkstyle/window_minimize_disabled@2x.png</file>
<file>qdarkstyle/window_minimize_disabled.png</file> <file>qdarkstyle/window_minimize_disabled.png</file>
<file>qdarkstyle/window_minimize_focus@2x.png</file> <file>qdarkstyle/window_minimize_disabled@2x.png</file>
<file>qdarkstyle/window_minimize_focus.png</file> <file>qdarkstyle/window_minimize_focus.png</file>
<file>qdarkstyle/window_minimize.png</file> <file>qdarkstyle/window_minimize_focus@2x.png</file>
<file>qdarkstyle/window_minimize_pressed@2x.png</file>
<file>qdarkstyle/window_minimize_pressed.png</file> <file>qdarkstyle/window_minimize_pressed.png</file>
<file>qdarkstyle/window_minimize_pressed@2x.png</file>
<file>qdarkstyle/window_undock.png</file>
<file>qdarkstyle/window_undock@2x.png</file> <file>qdarkstyle/window_undock@2x.png</file>
<file>qdarkstyle/window_undock_disabled@2x.png</file>
<file>qdarkstyle/window_undock_disabled.png</file> <file>qdarkstyle/window_undock_disabled.png</file>
<file>qdarkstyle/window_undock_focus@2x.png</file> <file>qdarkstyle/window_undock_disabled@2x.png</file>
<file>qdarkstyle/window_undock_focus.png</file> <file>qdarkstyle/window_undock_focus.png</file>
<file>qdarkstyle/window_undock.png</file> <file>qdarkstyle/window_undock_focus@2x.png</file>
<file>qdarkstyle/window_undock_pressed@2x.png</file>
<file>qdarkstyle/window_undock_pressed.png</file> <file>qdarkstyle/window_undock_pressed.png</file>
<file>qdarkstyle/window_undock_pressed@2x.png</file>
</qresource> </qresource>
</RCC> </RCC>