// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include "main_window_themes.h" #include "main_window_ui.h" class GuiSettings; class GameListFrame; class MainWindow : public QMainWindow { Q_OBJECT std::unique_ptr ui; bool m_is_list_mode = true; bool m_save_slider_pos = false; int m_other_slider_pos = 0; public: explicit MainWindow(std::shared_ptr 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 SetIconSizeActions(int idx) const; void ResizeIcons(int index); void SaveWindowState() const; private: void AddUiWidgets(); void CreateActions(); void CreateDockWindows(); void CreateConnects(); void SetLastUsedTheme(); void SetUiIcons(bool isWhite); QIcon recolorIcon(const QIcon& icon, bool isWhite); bool isIconBlack = false; 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; GameListFrame* m_game_list_frame = nullptr; WindowThemes m_window_themes; std::shared_ptr 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 urlList = mimeData->urls(); int pkgNum = 0; int nPkg = urlList.size(); for (const QUrl& url : urlList) { pkgNum++; InstallDragDropPkg(url.toLocalFile().toStdString(), pkgNum, nPkg); } } } };