From e76f5d85b2842b40c9d5d02d3a9db427e51d7569 Mon Sep 17 00:00:00 2001 From: Michael Maltese Date: Fri, 26 May 2017 16:28:44 -0700 Subject: [PATCH] DolphinQt2: don't use custom delegate for GameList --- Source/Core/DolphinQt2/GameList/GameList.cpp | 6 ++-- Source/Core/DolphinQt2/GameList/GameList.h | 3 -- .../DolphinQt2/GameList/GameListModel.cpp | 29 ++++++++++++++----- .../DolphinQt2/GameList/ListProxyModel.cpp | 12 ++++---- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Source/Core/DolphinQt2/GameList/GameList.cpp b/Source/Core/DolphinQt2/GameList/GameList.cpp index 19bde59059..d47cf883e1 100644 --- a/Source/Core/DolphinQt2/GameList/GameList.cpp +++ b/Source/Core/DolphinQt2/GameList/GameList.cpp @@ -22,7 +22,6 @@ #include "DolphinQt2/Config/PropertiesDialog.h" #include "DolphinQt2/GameList/GameList.h" #include "DolphinQt2/GameList/ListProxyModel.h" -#include "DolphinQt2/GameList/TableDelegate.h" #include "DolphinQt2/Settings.h" static bool CompressCB(const std::string&, float, void*); @@ -35,8 +34,6 @@ GameList::GameList(QWidget* parent) : QStackedWidget(parent) m_list_proxy = new ListProxyModel(this); m_list_proxy->setSourceModel(m_model); - m_delegate = new TableDelegate(this); - MakeTableView(); MakeListView(); MakeEmptyView(); @@ -59,7 +56,7 @@ void GameList::MakeTableView() { m_table = new QTableView(this); m_table->setModel(m_table_proxy); - m_table->setItemDelegate(m_delegate); + m_table->setSelectionMode(QAbstractItemView::SingleSelection); m_table->setSelectionBehavior(QAbstractItemView::SelectRows); m_table->setAlternatingRowColors(true); @@ -67,6 +64,7 @@ void GameList::MakeTableView() m_table->setSortingEnabled(true); m_table->setCurrentIndex(QModelIndex()); m_table->setContextMenuPolicy(Qt::CustomContextMenu); + m_table->setWordWrap(false); connect(m_table, &QTableView::customContextMenuRequested, this, &GameList::ShowContextMenu); diff --git a/Source/Core/DolphinQt2/GameList/GameList.h b/Source/Core/DolphinQt2/GameList/GameList.h index 040d845ebe..750ed92c7a 100644 --- a/Source/Core/DolphinQt2/GameList/GameList.h +++ b/Source/Core/DolphinQt2/GameList/GameList.h @@ -13,8 +13,6 @@ #include "DolphinQt2/GameList/GameFile.h" #include "DolphinQt2/GameList/GameListModel.h" -class TableDelegate; - class GameList final : public QStackedWidget { Q_OBJECT @@ -56,7 +54,6 @@ private: void ConsiderViewChange(); GameListModel* m_model; - TableDelegate* m_delegate; QSortFilterProxyModel* m_table_proxy; QSortFilterProxyModel* m_list_proxy; diff --git a/Source/Core/DolphinQt2/GameList/GameListModel.cpp b/Source/Core/DolphinQt2/GameList/GameListModel.cpp index c2796b1dda..30aaa9d77b 100644 --- a/Source/Core/DolphinQt2/GameList/GameListModel.cpp +++ b/Source/Core/DolphinQt2/GameList/GameListModel.cpp @@ -5,6 +5,8 @@ #include "DolphinQt2/GameList/GameListModel.h" #include "DolphinQt2/Resources.h" +const QSize GAMECUBE_BANNER_SIZE(96, 32); + GameListModel::GameListModel(QObject* parent) : QAbstractTableModel(parent) { connect(&m_tracker, &GameTracker::GameLoaded, this, &GameListModel::UpdateGame); @@ -19,14 +21,29 @@ QVariant GameListModel::data(const QModelIndex& index, int role) const return QVariant(); QSharedPointer game = m_games[index.row()]; - if (role == Qt::DisplayRole) + if (role == Qt::DecorationRole) { switch (index.column()) { case COL_PLATFORM: - return static_cast(game->GetPlatformID()); + return Resources::GetPlatform(static_cast(game->GetPlatformID())); + case COL_COUNTRY: + return Resources::GetCountry(static_cast(game->GetCountryID())); + case COL_RATING: + return Resources::GetRating(game->GetRating()); case COL_BANNER: - return game->GetBanner(); + // GameCube banners are 96x32, but Wii banners are 192x64. + // TODO: use custom banners from rom directory like DolphinWX? + QPixmap banner = game->GetBanner(); + banner.setDevicePixelRatio(std::max(banner.width() / GAMECUBE_BANNER_SIZE.width(), + banner.height() / GAMECUBE_BANNER_SIZE.height())); + return banner; + } + } + if (role == Qt::DisplayRole) + { + switch (index.column()) + { case COL_TITLE: return game->GetLongName(); case COL_ID: @@ -36,11 +53,7 @@ QVariant GameListModel::data(const QModelIndex& index, int role) const case COL_MAKER: return game->GetMaker(); case COL_SIZE: - return game->GetFileSize(); - case COL_COUNTRY: - return static_cast(game->GetCountryID()); - case COL_RATING: - return game->GetRating(); + return FormatSize(game->GetFileSize()); } } return QVariant(); diff --git a/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp b/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp index f8c9a9463d..27394d6ab8 100644 --- a/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp +++ b/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp @@ -7,7 +7,7 @@ #include "DolphinQt2/GameList/GameListModel.h" #include "DolphinQt2/GameList/ListProxyModel.h" -static QSize LARGE_BANNER_SIZE(144, 48); +const QSize LARGE_BANNER_SIZE(144, 48); ListProxyModel::ListProxyModel(QObject* parent) : QSortFilterProxyModel(parent) { @@ -25,10 +25,12 @@ QVariant ListProxyModel::data(const QModelIndex& i, int role) const } else if (role == Qt::DecorationRole) { - return sourceModel() - ->data(sourceModel()->index(source_index.row(), GameListModel::COL_BANNER), Qt::DisplayRole) - .value() - .scaled(LARGE_BANNER_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation); + auto pixmap = sourceModel() + ->data(sourceModel()->index(source_index.row(), GameListModel::COL_BANNER), + Qt::DecorationRole) + .value(); + return pixmap.scaled(LARGE_BANNER_SIZE * pixmap.devicePixelRatio(), Qt::KeepAspectRatio, + Qt::SmoothTransformation); } return QVariant(); }