Qt: fix type mismatch crash of game grid items

This commit is contained in:
Megamouse 2021-04-18 09:37:32 +02:00
parent 266c4209c4
commit bdac1d9bfd
7 changed files with 20 additions and 10 deletions

View File

@ -1,6 +1,13 @@
#include "game_list.h"
#include "movie_item.h"
void game_list::clear_list()
{
m_last_hover_item = nullptr;
clearSelection();
clearContents();
}
void game_list::mousePressEvent(QMouseEvent *event)
{
if (!indexAt(event->pos()).isValid() || !itemAt(event->pos())->data(Qt::UserRole).isValid())

View File

@ -31,6 +31,9 @@ class movie_item;
*/
class game_list : public QTableWidget
{
public:
void clear_list(); // Use this instead of clearContents
protected:
movie_item* m_last_hover_item = nullptr;

View File

@ -2091,8 +2091,7 @@ void game_list_frame::PopulateGameList()
const std::string selected_item = CurrentSelectionPath();
m_game_list->clearSelection();
m_game_list->clearContents();
m_game_list->clear_list();
m_game_list->setRowCount(m_game_data.size());
// Default locale. Uses current Qt application language.
@ -2296,7 +2295,7 @@ void game_list_frame::PopulateGameGrid(int maxCols, const QSize& image_size, con
const QString title = m_titles.value(serial, qstr(app->info.name));
const QString notes = m_notes.value(serial);
QTableWidgetItem* item = m_game_grid->addItem(app, title, (m_play_hover_movies && app->has_hover_gif) ? (game_icon_path % serial % "/hover.gif") : QStringLiteral(""), r, c);
movie_item* item = m_game_grid->addItem(app, title, (m_play_hover_movies && app->has_hover_gif) ? (game_icon_path % serial % "/hover.gif") : QStringLiteral(""), r, c);
ensure(item);
item->setData(gui::game_role, QVariant::fromValue(app));
@ -2325,9 +2324,9 @@ void game_list_frame::PopulateGameGrid(int maxCols, const QSize& image_size, con
{ // if left over games exist -- if empty entries exist
for (int col = c; col < maxCols; ++col)
{
QTableWidgetItem* emptyItem = new QTableWidgetItem();
emptyItem->setFlags(Qt::NoItemFlags);
m_game_grid->setItem(r, col, emptyItem);
movie_item* empty_item = new movie_item();
empty_item->setFlags(Qt::NoItemFlags);
m_game_grid->setItem(r, col, empty_item);
}
}

View File

@ -59,7 +59,7 @@ void game_list_grid::setIconSize(const QSize& size) const
}
}
QTableWidgetItem* game_list_grid::addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col)
movie_item* game_list_grid::addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col)
{
// create item with expanded image, title and position
movie_item* item = new movie_item;

View File

@ -19,7 +19,7 @@ public:
void enableText(const bool& enabled);
void setIconSize(const QSize& size) const;
QTableWidgetItem* addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col);
movie_item* addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col);
[[nodiscard]] qreal getMarginFactor() const;

View File

@ -783,7 +783,7 @@ void trophy_manager_dialog::PopulateTrophyTable()
m_game_progress->setText(tr("Progress: %1% (%2/%3)").arg(percentage).arg(unlocked_trophies).arg(all_trophies));
m_trophy_table->clearContents();
m_trophy_table->clear_list();
m_trophy_table->setRowCount(all_trophies);
m_trophy_table->setSortingEnabled(false); // Disable sorting before using setItem calls

View File

@ -12,6 +12,7 @@
#include <memory>
class game_list;
class gui_settings;
class TROPUSRLoader;
@ -96,7 +97,7 @@ private:
QComboBox* m_game_combo; //! Lets you choose a game
QLabel* m_game_progress; //! Shows you the current game's progress
QSplitter* m_splitter; //! Contains the game and trophy tables
QTableWidget* m_trophy_table; //! UI element to display trophy stuff.
game_list* m_trophy_table; //! UI element to display trophy stuff.
QTableWidget* m_game_table; //! UI element to display games.
bool m_show_hidden_trophies = false;