You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
duckstation/src/duckstation-qt/gamelistsettingswidget.h

81 lines
2.3 KiB
C++

// SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
#pragma once
#include <QtCore/QAbstractTableModel>
#include <QtWidgets/QWidget>
#include <string>
#include <vector>
#include "ui_gamelistsettingswidget.h"
class SettingsWindow;
class GameListSearchDirectoriesModel final : public QAbstractTableModel
{
Q_OBJECT
public:
explicit GameListSearchDirectoriesModel(QObject* parent = nullptr);
~GameListSearchDirectoriesModel() override;
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
void reload();
void addPath(std::string path, bool recursive);
void removePath(const QModelIndex& index);
void removePath(const std::string& path);
const std::string& pathForIndex(const QModelIndex& index) const;
Q_SIGNALS:
void settingsChanged();
private:
struct Row
{
std::string path;
bool recursive;
};
void save();
std::vector<Row> m_rows;
};
class GameListSettingsWidget : public QWidget
{
Q_OBJECT
public:
GameListSettingsWidget(SettingsWindow* dialog, QWidget* parent);
~GameListSettingsWidget();
bool addExcludedPath(const QString& path);
void refreshExclusionList();
void addSearchDirectory(QWidget* parent_widget);
private:
void refreshDirectoryList();
void addSearchDirectory(const QString& path, bool recursive);
void onDirectoryListSelectionChanged();
void onDirectoryListContextMenuRequested(const QPoint& point);
void onAddSearchDirectoryButtonClicked();
void onRemoveSearchDirectoryButtonClicked();
void onAddExcludedFileButtonClicked();
void onAddExcludedFolderButtonClicked();
void onRemoveExcludedPathButtonClicked();
void onExcludedPathsSelectionChanged();
void onScanForNewGamesClicked();
void onRescanAllGamesClicked();
Ui::GameListSettingsWidget m_ui;
GameListSearchDirectoriesModel* m_directory_model;
};