From ecc8109d4360e0521efb97a095b42d9722da6ba4 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Wed, 8 Jan 2020 13:39:19 +1000 Subject: [PATCH] Qt: Show flags for region instead of text --- src/duckstation-qt/consolesettingswidget.ui | 10 ++- .../duckstation-qt.vcxproj.filters | 3 +- src/duckstation-qt/gamelistwidget.cpp | 76 ++++++++++++++---- src/duckstation-qt/qtutils.cpp | 9 ++- src/duckstation-qt/resources/icons.qrc | 6 ++ .../resources/icons/flag-eu.png | Bin 0 -> 4872 bytes .../resources/icons/flag-eu.svg | 29 +++++++ .../resources/icons/flag-jp.png | Bin 0 -> 887 bytes .../resources/icons/flag-jp.svg | 5 ++ .../resources/icons/flag-us.png | Bin 0 -> 8484 bytes .../resources/icons/flag-us.svg | 12 +++ 11 files changed, 129 insertions(+), 21 deletions(-) create mode 100644 src/duckstation-qt/resources/icons/flag-eu.png create mode 100644 src/duckstation-qt/resources/icons/flag-eu.svg create mode 100644 src/duckstation-qt/resources/icons/flag-jp.png create mode 100644 src/duckstation-qt/resources/icons/flag-jp.svg create mode 100644 src/duckstation-qt/resources/icons/flag-us.png create mode 100644 src/duckstation-qt/resources/icons/flag-us.svg diff --git a/src/duckstation-qt/consolesettingswidget.ui b/src/duckstation-qt/consolesettingswidget.ui index 713c73791..252af2543 100644 --- a/src/duckstation-qt/consolesettingswidget.ui +++ b/src/duckstation-qt/consolesettingswidget.ui @@ -40,9 +40,9 @@ - - NTSC-J (Japan) - + + NTSC-J (Japan) + @@ -109,6 +109,8 @@ - + + + diff --git a/src/duckstation-qt/duckstation-qt.vcxproj.filters b/src/duckstation-qt/duckstation-qt.vcxproj.filters index 2252a61f2..648aa4fbd 100644 --- a/src/duckstation-qt/duckstation-qt.vcxproj.filters +++ b/src/duckstation-qt/duckstation-qt.vcxproj.filters @@ -31,13 +31,13 @@ + - @@ -60,6 +60,7 @@ + diff --git a/src/duckstation-qt/gamelistwidget.cpp b/src/duckstation-qt/gamelistwidget.cpp index 3e6b898fc..a2cbce438 100644 --- a/src/duckstation-qt/gamelistwidget.cpp +++ b/src/duckstation-qt/gamelistwidget.cpp @@ -2,6 +2,7 @@ #include "core/settings.h" #include "qthostinterface.h" #include "qtutils.h" +#include #include class GameListModel : public QAbstractTableModel @@ -21,6 +22,7 @@ public: GameListModel(GameList* game_list, QObject* parent = nullptr) : QAbstractTableModel(parent), m_game_list(game_list), m_size(static_cast(m_game_list->GetEntryCount())) { + loadCommonImages(); } ~GameListModel() = default; @@ -45,30 +47,61 @@ public: if (!index.isValid()) return {}; - if (role != Qt::DisplayRole) - return {}; - const int row = index.row(); if (row < 0 || row >= static_cast(m_game_list->GetEntryCount())) return {}; const GameList::GameListEntry& ge = m_game_list->GetEntries()[row]; - switch (index.column()) + + switch (role) { - case Column_Code: - return QString::fromStdString(ge.code); + case Qt::DisplayRole: + { + switch (index.column()) + { + case Column_Code: + return QString::fromStdString(ge.code); - case Column_Title: - return QString::fromStdString(ge.title); + case Column_Title: + return QString::fromStdString(ge.title); - case Column_Region: - return QString(Settings::GetConsoleRegionName(ge.region)); + case Column_Region: + // return QString(Settings::GetConsoleRegionName(ge.region)); + return {}; - case Column_Size: - return QString("%1 MB").arg(static_cast(ge.total_size) / 1048576.0, 0, 'f', 2); + case Column_Size: + return QString("%1 MB").arg(static_cast(ge.total_size) / 1048576.0, 0, 'f', 2); - default: - return {}; + default: + return {}; + } + } + + case Qt::DecorationRole: + { + switch (index.column()) + { + case Column_Region: + { + switch (ge.region) + { + case ConsoleRegion::NTSC_J: + return m_region_jp_pixmap; + case ConsoleRegion::NTSC_U: + return m_region_us_pixmap; + case ConsoleRegion::PAL: + default: + return m_region_eu_pixmap; + } + } + + default: + return {}; + } + + default: + return {}; + } } } @@ -110,8 +143,20 @@ public: } private: + void loadCommonImages() + { + // TODO: Use svg instead of png + m_region_jp_pixmap.load(QStringLiteral(":/icons/flag-jp.png")); + m_region_us_pixmap.load(QStringLiteral(":/icons/flag-us.png")); + m_region_eu_pixmap.load(QStringLiteral(":/icons/flag-eu.png")); + } + GameList* m_game_list; int m_size; + + QPixmap m_region_jp_pixmap; + QPixmap m_region_eu_pixmap; + QPixmap m_region_us_pixmap; }; GameListWidget::GameListWidget(QWidget* parent /* = nullptr */) : QStackedWidget(parent) {} @@ -135,6 +180,7 @@ void GameListWidget::initialize(QtHostInterface* host_interface) m_table_view->setCurrentIndex({}); m_table_view->horizontalHeader()->setHighlightSections(false); m_table_view->verticalHeader()->hide(); + m_table_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); m_table_view->resizeColumnsToContents(); connect(m_table_view, &QTableView::doubleClicked, this, &GameListWidget::onTableViewItemDoubleClicked); @@ -161,5 +207,5 @@ void GameListWidget::resizeEvent(QResizeEvent* event) { QStackedWidget::resizeEvent(event); - QtUtils::ResizeColumnsForTableView(m_table_view, {100, -1, 100, 100}); + QtUtils::ResizeColumnsForTableView(m_table_view, {100, -1, 60, 100}); } diff --git a/src/duckstation-qt/qtutils.cpp b/src/duckstation-qt/qtutils.cpp index baa527d79..a85cd651c 100644 --- a/src/duckstation-qt/qtutils.cpp +++ b/src/duckstation-qt/qtutils.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include #include @@ -34,7 +36,12 @@ void ResizeColumnsForTableView(QTableView* view, const std::initializer_listwidth() - total_width - 2, 1); + const int padding = 2; + const int scrollbar_width = ((view->verticalScrollBar() && view->verticalScrollBar()->isVisible()) || + view->verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOn) ? + view->style()->pixelMetric(QStyle::PM_ScrollBarExtent) : + 0; + const int flex_width = std::max(view->width() - total_width - scrollbar_width - padding, 1); int column_index = 0; for (const int spec_width : widths) diff --git a/src/duckstation-qt/resources/icons.qrc b/src/duckstation-qt/resources/icons.qrc index f461499bf..b2a7e40ec 100644 --- a/src/duckstation-qt/resources/icons.qrc +++ b/src/duckstation-qt/resources/icons.qrc @@ -1,5 +1,11 @@ + icons/flag-eu.png + icons/flag-eu.svg + icons/flag-jp.png + icons/flag-jp.svg + icons/flag-us.png + icons/flag-us.svg icons/applications-internet.png icons/system-search.png icons/list-add.png diff --git a/src/duckstation-qt/resources/icons/flag-eu.png b/src/duckstation-qt/resources/icons/flag-eu.png new file mode 100644 index 0000000000000000000000000000000000000000..318ff09bde15a4c66a1f5730a67ecbd5b6a5f8bb GIT binary patch literal 4872 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 +European flag + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/duckstation-qt/resources/icons/flag-jp.png b/src/duckstation-qt/resources/icons/flag-jp.png new file mode 100644 index 0000000000000000000000000000000000000000..46b15cb30f5f6134996f9e591f410417804e0e4f GIT binary patch literal 887 zcmV--1Bm>IP)EX>4Tx04R}tkvmAkP!xv$rb>&nIM_kNAwzYt;0tk-Di*;)X)CnqU~TkxkDNM~KBz7t3AD%7#ijO&nEJjq-(@ z%L?Z$&T6&J+V|uy3>CDM4A*H5BY`C(k%9;rbyQG=g&6G`DJIf%9{2DMIsO#6WO7x& z$gzMLR7j2={11N5)+|my{D4^000SaNLh0L z01ejw01ejxLMWSf00007bV*G`2jl?=0}&YeCiipz00DDJL_t(o!((K?1OEU2|DRzH z0Y*kfMqF}C48sJBdStKx7Frtq_uCJKACI0hFfcGMaLP+DFmbXEEswn0dy?T{=RAh@ z2Tn8m|NRG&QCV3S1Rc#76v~qr1f9&NUl35U)cXJDFT<_8c7`X@SK(DBlO4gJHldt> zk%f71mRh&+I|zD$fq{YH$Yh zJnEi5xQgGuU%xZFKX964eed_5X88N<$KdhE&nGY8r4uRO->=^cKcBoDL=_?<p zwnx}y#2FY_Nw1Qa*jO1jWW)!LN0_-d7z7ZYH#V_ZEGRd@((-aGQ8h^n&IEC-|&nr z=w!wqUy;lpXm3LG9wJRV0 + + + + \ No newline at end of file diff --git a/src/duckstation-qt/resources/icons/flag-us.png b/src/duckstation-qt/resources/icons/flag-us.png new file mode 100644 index 0000000000000000000000000000000000000000..c54624c8d97fc1a7781969319e04c13b83b8072e GIT binary patch literal 8484 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 LMXFB1EbRXPG-z-N literal 0 HcmV?d00001 diff --git a/src/duckstation-qt/resources/icons/flag-us.svg b/src/duckstation-qt/resources/icons/flag-us.svg new file mode 100644 index 000000000..3f1081ccf --- /dev/null +++ b/src/duckstation-qt/resources/icons/flag-us.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file