2024-02-29 23:00:35 +01:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <QActionGroup>
|
|
|
|
#include <QDragEnterEvent>
|
|
|
|
#include <QMainWindow>
|
|
|
|
#include <QMimeData>
|
2024-03-29 06:43:46 +01:00
|
|
|
#include "game_grid_frame.h"
|
|
|
|
#include "game_info.h"
|
|
|
|
#include "game_list_frame.h"
|
|
|
|
#include "game_list_utils.h"
|
2024-02-29 23:00:35 +01:00
|
|
|
#include "main_window_themes.h"
|
|
|
|
#include "main_window_ui.h"
|
2024-03-29 06:43:46 +01:00
|
|
|
#include "pkg_viewer.h"
|
2024-02-29 23:00:35 +01:00
|
|
|
|
|
|
|
class GuiSettings;
|
|
|
|
class GameListFrame;
|
|
|
|
|
|
|
|
class MainWindow : public QMainWindow {
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
std::unique_ptr<Ui_MainWindow> ui;
|
|
|
|
|
|
|
|
bool m_is_list_mode = true;
|
|
|
|
bool m_save_slider_pos = false;
|
|
|
|
int m_other_slider_pos = 0;
|
2024-03-29 06:43:46 +01:00
|
|
|
signals:
|
|
|
|
void WindowResized(QResizeEvent* event);
|
2024-02-29 23:00:35 +01:00
|
|
|
|
|
|
|
public:
|
|
|
|
explicit MainWindow(std::shared_ptr<GuiSettings> gui_settings, QWidget* parent = nullptr);
|
|
|
|
~MainWindow();
|
|
|
|
bool Init();
|
|
|
|
void InstallPkg();
|
|
|
|
void InstallDragDropPkg(std::string file, int pkgNum, int nPkg);
|
|
|
|
void InstallDirectory();
|
|
|
|
|
|
|
|
private Q_SLOTS:
|
|
|
|
void ConfigureGuiFromSettings();
|
|
|
|
void SaveWindowState() const;
|
2024-03-29 06:43:46 +01:00
|
|
|
void SearchGameTable(const QString& text);
|
|
|
|
void RefreshGameTable();
|
|
|
|
void HandleResize(QResizeEvent* event);
|
2024-02-29 23:00:35 +01:00
|
|
|
|
|
|
|
private:
|
2024-03-01 09:47:28 +01:00
|
|
|
void AddUiWidgets();
|
2024-02-29 23:00:35 +01:00
|
|
|
void CreateActions();
|
|
|
|
void CreateDockWindows();
|
2024-03-29 06:43:46 +01:00
|
|
|
void LoadGameLists();
|
2024-02-29 23:00:35 +01:00
|
|
|
void CreateConnects();
|
|
|
|
void SetLastUsedTheme();
|
2024-03-29 06:43:46 +01:00
|
|
|
void SetLastIconSizeBullet();
|
2024-03-01 09:47:28 +01:00
|
|
|
void SetUiIcons(bool isWhite);
|
2024-03-29 06:43:46 +01:00
|
|
|
QIcon RecolorIcon(const QIcon& icon, bool isWhite);
|
2024-03-01 09:47:28 +01:00
|
|
|
|
|
|
|
bool isIconBlack = false;
|
2024-03-29 06:43:46 +01:00
|
|
|
bool isTableList = true;
|
2024-02-29 23:00:35 +01:00
|
|
|
|
|
|
|
QActionGroup* m_icon_size_act_group = nullptr;
|
|
|
|
QActionGroup* m_list_mode_act_group = nullptr;
|
|
|
|
QActionGroup* m_theme_act_group = nullptr;
|
|
|
|
|
|
|
|
// Dockable widget frames
|
|
|
|
QMainWindow* m_main_window = nullptr;
|
|
|
|
WindowThemes m_window_themes;
|
2024-03-29 06:43:46 +01:00
|
|
|
GameListUtils m_game_list_utils;
|
|
|
|
QDockWidget* m_dock_widget = nullptr;
|
|
|
|
// Game Lists
|
|
|
|
GameListFrame* m_game_list_frame = nullptr;
|
|
|
|
GameGridFrame* m_game_grid_frame = nullptr;
|
|
|
|
// Packge Viewer
|
|
|
|
PKGViewer* m_pkg_viewer = nullptr;
|
|
|
|
// Status Bar.
|
|
|
|
QStatusBar* statusBar = nullptr;
|
2024-02-29 23:00:35 +01:00
|
|
|
|
2024-03-29 06:43:46 +01:00
|
|
|
std::shared_ptr<GameInfoClass> m_game_info = std::make_shared<GameInfoClass>();
|
2024-02-29 23:00:35 +01:00
|
|
|
std::shared_ptr<GuiSettings> m_gui_settings;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void dragEnterEvent(QDragEnterEvent* event1) override {
|
|
|
|
if (event1->mimeData()->hasUrls()) {
|
|
|
|
event1->acceptProposedAction();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void dropEvent(QDropEvent* event1) override {
|
|
|
|
const QMimeData* mimeData = event1->mimeData();
|
|
|
|
if (mimeData->hasUrls()) {
|
|
|
|
QList<QUrl> urlList = mimeData->urls();
|
|
|
|
int pkgNum = 0;
|
|
|
|
int nPkg = urlList.size();
|
|
|
|
for (const QUrl& url : urlList) {
|
|
|
|
pkgNum++;
|
|
|
|
InstallDragDropPkg(url.toLocalFile().toStdString(), pkgNum, nPkg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-03-29 06:43:46 +01:00
|
|
|
|
|
|
|
void resizeEvent(QResizeEvent* event) override;
|
2024-02-29 23:00:35 +01:00
|
|
|
};
|