Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions pcsx2-qt/GameList/GameListWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMenu>
#include <QtWidgets/QScrollBar>
#include <QtWidgets/QScroller>
#include <QtWidgets/QStyledItemDelegate>
#include <QShortcut>

Expand Down Expand Up @@ -213,6 +214,7 @@ void GameListWidget::initialize()
{
const float cover_scale = Host::GetBaseFloatSettingValue("UI", "GameListCoverArtScale", 0.45f);
const bool show_cover_titles = Host::GetBaseBoolSettingValue("UI", "GameListShowCoverTitles", true);
m_click_drag_enabled = Host::GetBaseBoolSettingValue("UI", "GameListClickDrag", true);
m_model = new GameListModel(cover_scale, show_cover_titles, devicePixelRatioF(), this);
m_model->updateCacheSize(width(), height());

Expand Down Expand Up @@ -242,6 +244,7 @@ void GameListWidget::initialize()
connect(m_ui.viewGameGrid, &QPushButton::clicked, this, &GameListWidget::showGameGrid);
connect(m_ui.gridScale, &QSlider::valueChanged, this, &GameListWidget::gridIntScale);
connect(m_ui.viewGridTitles, &QPushButton::toggled, this, &GameListWidget::setShowCoverTitles);
connect(m_ui.viewClickDrag, &QPushButton::toggled, this, &GameListWidget::setClickDragEnabled);
connect(m_ui.filterType, &QComboBox::currentIndexChanged, this, [this](int index) {
m_sort_model->setFilterType((index == 0) ? GameList::EntryType::Count : static_cast<GameList::EntryType>(index - 1));
});
Expand Down Expand Up @@ -270,6 +273,8 @@ void GameListWidget::initialize()
m_table_view->horizontalHeader()->setSectionsMovable(true);
m_table_view->verticalHeader()->hide();
m_table_view->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
if (m_click_drag_enabled)
QScroller::grabGesture(m_table_view->viewport(), QScroller::LeftMouseButtonGesture);

// Custom painter to center-align DisplayRoles (icons)
m_table_view->setItemDelegateForColumn(0, new GameListIconStyleDelegate(this));
Expand Down Expand Up @@ -328,6 +333,8 @@ void GameListWidget::initialize()
m_list_view->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
m_list_view->verticalScrollBar()->setSingleStep(15);
onCoverScaleChanged();
if (m_click_drag_enabled)
QScroller::grabGesture(m_list_view->viewport(), QScroller::LeftMouseButtonGesture);

connect(m_list_view->selectionModel(), &QItemSelectionModel::currentChanged, this,
&GameListWidget::onSelectionModelCurrentChanged);
Expand Down Expand Up @@ -476,6 +483,35 @@ bool GameListWidget::getShowGridCoverTitles() const
return m_model->getShowCoverTitles();
}

bool GameListWidget::getClickDragEnabled() const
{
return m_click_drag_enabled;
}

void GameListWidget::setClickDragEnabled(bool enabled)
{
if (m_click_drag_enabled == enabled)
return;

m_click_drag_enabled = enabled;
Host::SetBaseBoolSettingValue("UI", "GameListClickDrag", enabled);
Host::CommitBaseSettingChanges();

if (enabled)
{
QScroller::grabGesture(m_table_view->viewport(), QScroller::LeftMouseButtonGesture);
QScroller::grabGesture(m_list_view->viewport(), QScroller::LeftMouseButtonGesture);
}
else
{
QScroller::ungrabGesture(m_table_view->viewport());
QScroller::ungrabGesture(m_list_view->viewport());
}

updateToolbar();
emit layoutChange();
}

void GameListWidget::refresh(bool invalidate_cache, bool popup_on_error)
{
cancelRefresh();
Expand Down Expand Up @@ -716,6 +752,10 @@ void GameListWidget::updateToolbar()
QSignalBlocker sb(m_ui.viewGridTitles);
m_ui.viewGridTitles->setChecked(m_model->getShowCoverTitles());
}
{
QSignalBlocker sb(m_ui.viewClickDrag);
m_ui.viewClickDrag->setChecked(m_click_drag_enabled);
}
{
QSignalBlocker sb(m_ui.gridScale);
m_ui.gridScale->setValue(static_cast<int>(m_model->getCoverScale() * 100.0f));
Expand Down
4 changes: 4 additions & 0 deletions pcsx2-qt/GameList/GameListWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class GameListWidget : public QWidget
bool isShowingGameList() const;
bool isShowingGameGrid() const;
bool getShowGridCoverTitles() const;
bool getClickDragEnabled() const;

std::optional<GameList::Entry> getSelectedEntry() const;

Expand Down Expand Up @@ -93,6 +94,7 @@ public Q_SLOTS:
void showGameList();
void showGameGrid();
void setShowCoverTitles(bool enabled);
void setClickDragEnabled(bool enabled);
void gridZoomIn();
void gridZoomOut();
void gridIntScale(int int_scale);
Expand Down Expand Up @@ -126,6 +128,8 @@ public Q_SLOTS:

GameListRefreshThread* m_refresh_thread = nullptr;

bool m_click_drag_enabled = true;

QMovie* m_background_movie = nullptr;
QPixmap m_background_pixmap;
QtUtils::ScalingMode m_background_scaling = QtUtils::ScalingMode::Fit;
Expand Down
26 changes: 26 additions & 0 deletions pcsx2-qt/GameList/GameListWidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,31 @@
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="viewClickDrag">
<property name="minimumSize">
<size>
<width>32</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Enable Click-and-Drag Scrolling</string>
</property>
<property name="text">
<string>Click-and-Drag</string>
</property>
<property name="icon">
<iconset theme="drag-move-2-line"/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="gridScale">
<property name="minimumSize">
Expand Down Expand Up @@ -218,6 +243,7 @@
<tabstop>viewGameList</tabstop>
<tabstop>viewGameGrid</tabstop>
<tabstop>viewGridTitles</tabstop>
<tabstop>viewClickDrag</tabstop>
<tabstop>gridScale</tabstop>
<tabstop>filterType</tabstop>
<tabstop>filterRegion</tabstop>
Expand Down
4 changes: 4 additions & 0 deletions pcsx2-qt/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ void MainWindow::setupAdditionalUi()
m_game_list_widget = new GameListWidget(getContentParent());
m_game_list_widget->initialize();
m_ui.actionGridViewShowTitles->setChecked(m_game_list_widget->getShowGridCoverTitles());
m_ui.actionGameListClickDrag->setChecked(m_game_list_widget->getClickDragEnabled());
m_ui.mainContainer->addWidget(m_game_list_widget);

m_status_progress_widget = new QProgressBar(m_ui.statusBar);
Expand Down Expand Up @@ -362,6 +363,7 @@ void MainWindow::connectSignals()
connect(m_ui.actionOpenDataDirectory, &QAction::triggered, this, &MainWindow::onToolsOpenDataDirectoryTriggered);
connect(m_ui.actionCoverDownloader, &QAction::triggered, this, &MainWindow::onToolsCoverDownloaderTriggered);
connect(m_ui.actionGridViewShowTitles, &QAction::triggered, m_game_list_widget, &GameListWidget::setShowCoverTitles);
connect(m_ui.actionGameListClickDrag, &QAction::triggered, m_game_list_widget, &GameListWidget::setClickDragEnabled);
connect(m_ui.actionGridViewZoomIn, &QAction::triggered, m_game_list_widget, [this]() {
if (isShowingGameList())
m_game_list_widget->gridZoomIn();
Expand All @@ -374,6 +376,8 @@ void MainWindow::connectSignals()
connect(m_game_list_widget, &GameListWidget::layoutChange, this, [this]() {
QSignalBlocker sb(m_ui.actionGridViewShowTitles);
m_ui.actionGridViewShowTitles->setChecked(m_game_list_widget->getShowGridCoverTitles());
QSignalBlocker sb2(m_ui.actionGameListClickDrag);
m_ui.actionGameListClickDrag->setChecked(m_game_list_widget->getClickDragEnabled());
updateGameGridActions(m_game_list_widget->isShowingGameGrid());
});

Expand Down
15 changes: 15 additions & 0 deletions pcsx2-qt/MainWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@
<addaction name="menuWindowSize"/>
<addaction name="separator"/>
<addaction name="actionGridViewShowTitles"/>
<addaction name="actionGameListClickDrag"/>
<addaction name="actionGridViewZoomIn"/>
<addaction name="actionGridViewZoomOut"/>
<addaction name="actionGridViewRefreshCovers"/>
Expand Down Expand Up @@ -808,6 +809,20 @@
<string>Show Titl&amp;es (Grid View)</string>
</property>
</action>
<action name="actionGameListClickDrag">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="icon">
<iconset theme="drag-move-2-line"/>
</property>
<property name="text">
<string>Click-and-Drag Scrolling</string>
</property>
</action>
<action name="actionGridViewZoomIn">
<property name="icon">
<iconset theme="zoom-in-line"/>
Expand Down
1 change: 1 addition & 0 deletions pcsx2-qt/resources/icons/black/svg/drag-move-2-line.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions pcsx2-qt/resources/icons/white/svg/drag-move-2-line.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions pcsx2-qt/resources/resources.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<file>icons/black/svg/dj-hero-line.svg</file>
<file>icons/black/svg/door-open-line.svg</file>
<file>icons/black/svg/download-2-line.svg</file>
<file>icons/black/svg/drag-move-2-line.svg</file>
<file>icons/black/svg/drum-line.svg</file>
<file>icons/black/svg/eject-line.svg</file>
<file>icons/black/svg/emulation-line.svg</file>
Expand Down Expand Up @@ -133,6 +134,7 @@
<file>icons/white/svg/dj-hero-line.svg</file>
<file>icons/white/svg/door-open-line.svg</file>
<file>icons/white/svg/download-2-line.svg</file>
<file>icons/white/svg/drag-move-2-line.svg</file>
<file>icons/white/svg/drum-line.svg</file>
<file>icons/white/svg/eject-line.svg</file>
<file>icons/white/svg/emulation-line.svg</file>
Expand Down
Loading