[cmake, desktop] feat: show dependencies and versions
Signed-off-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
6b512d685d
commit
5cf030ddac
15 changed files with 433 additions and 9 deletions
|
@ -223,7 +223,7 @@ if (YUZU_USE_BUNDLED_VCPKG)
|
||||||
DOWNLOAD_ONLY YES
|
DOWNLOAD_ONLY YES
|
||||||
URL "https://github.com/microsoft/vcpkg.git"
|
URL "https://github.com/microsoft/vcpkg.git"
|
||||||
GIT_TAG "ea2a964f93"
|
GIT_TAG "ea2a964f93"
|
||||||
KEY "ea2a"
|
SHA "ea2a964f93"
|
||||||
)
|
)
|
||||||
|
|
||||||
include(${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake)
|
include(${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake)
|
||||||
|
@ -277,6 +277,30 @@ function(check_submodules_present)
|
||||||
message(FATAL_ERROR "Git submodule ${module} not found. "
|
message(FATAL_ERROR "Git submodule ${module} not found. "
|
||||||
"Please run: \ngit submodule update --init --recursive")
|
"Please run: \ngit submodule update --init --recursive")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(SUBMODULE_DIR "${PROJECT_SOURCE_DIR}/${module}")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse --short=10 HEAD
|
||||||
|
WORKING_DIRECTORY ${SUBMODULE_DIR}
|
||||||
|
OUTPUT_VARIABLE SUBMODULE_SHA
|
||||||
|
)
|
||||||
|
|
||||||
|
# would probably be better to do string parsing, but whatever
|
||||||
|
execute_process(
|
||||||
|
COMMAND git remote get-url origin
|
||||||
|
WORKING_DIRECTORY ${SUBMODULE_DIR}
|
||||||
|
OUTPUT_VARIABLE SUBMODULE_URL
|
||||||
|
)
|
||||||
|
|
||||||
|
string(REGEX REPLACE "\n|\r" "" SUBMODULE_SHA ${SUBMODULE_SHA})
|
||||||
|
string(REGEX REPLACE "\n|\r|\\.git" "" SUBMODULE_URL ${SUBMODULE_URL})
|
||||||
|
|
||||||
|
get_filename_component(SUBMODULE_NAME ${SUBMODULE_DIR} NAME)
|
||||||
|
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${SUBMODULE_NAME})
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS ${SUBMODULE_SHA})
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${SUBMODULE_URL})
|
||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
@ -722,7 +746,6 @@ else()
|
||||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT yuzu-cmd)
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT yuzu-cmd)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Installation instructions
|
# Installation instructions
|
||||||
# =========================
|
# =========================
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# Created-By: crueter
|
# Created-By: crueter
|
||||||
# Docs will come at a later date, mostly this is to just reduce boilerplate and some cmake magic
|
# Docs will come at a later date, mostly this is to just reduce boilerplate
|
||||||
# to allow for runtime viewing of dependency versions
|
# and some cmake magic to allow for runtime viewing of dependency versions
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.22)
|
cmake_minimum_required(VERSION 3.22)
|
||||||
include(CPM)
|
include(CPM)
|
||||||
|
@ -35,12 +35,14 @@ function(AddPackage)
|
||||||
|
|
||||||
if (NOT DEFINED PKG_ARGS_URL)
|
if (NOT DEFINED PKG_ARGS_URL)
|
||||||
if (DEFINED PKG_ARGS_REPO AND DEFINED PKG_ARGS_SHA)
|
if (DEFINED PKG_ARGS_REPO AND DEFINED PKG_ARGS_SHA)
|
||||||
set(PKG_URL "https://github.com/${PKG_ARGS_REPO}/archive/${PKG_ARGS_SHA}.zip")
|
set(PKG_GIT_URL https://github.com/${PKG_ARGS_REPO})
|
||||||
|
set(PKG_URL "${PKG_GIT_URL}/archive/${PKG_ARGS_SHA}.zip")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "CPMUtil: No custom URL and no repository + sha defined")
|
message(FATAL_ERROR "CPMUtil: No custom URL and no repository + sha defined")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
set(PKG_URL ${PKG_ARGS_URL})
|
set(PKG_URL ${PKG_ARGS_URL})
|
||||||
|
set(PKG_GIT_URL ${PKG_URL})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "CPMUtil: Downloading package ${PKG_ARGS_NAME} from ${PKG_URL}")
|
message(STATUS "CPMUtil: Downloading package ${PKG_ARGS_NAME} from ${PKG_URL}")
|
||||||
|
@ -86,6 +88,15 @@ function(AddPackage)
|
||||||
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${PKG_ARGS_NAME})
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${PKG_GIT_URL})
|
||||||
|
|
||||||
|
if (${PKG_ARGS_NAME}_ADDED)
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS ${PKG_ARGS_SHA})
|
||||||
|
else()
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "${CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION} (system)")
|
||||||
|
endif()
|
||||||
|
|
||||||
# pass stuff to parent scope
|
# pass stuff to parent scope
|
||||||
set(${PKG_ARGS_NAME}_ADDED "${${PKG_ARGS_NAME}_ADDED}" PARENT_SCOPE)
|
set(${PKG_ARGS_NAME}_ADDED "${${PKG_ARGS_NAME}_ADDED}" PARENT_SCOPE)
|
||||||
set(${PKG_ARGS_NAME}_SOURCE_DIR "${${PKG_ARGS_NAME}_SOURCE_DIR}" PARENT_SCOPE)
|
set(${PKG_ARGS_NAME}_SOURCE_DIR "${${PKG_ARGS_NAME}_SOURCE_DIR}" PARENT_SCOPE)
|
||||||
|
|
21
CMakeModules/GenerateDepHashes.cmake
Normal file
21
CMakeModules/GenerateDepHashes.cmake
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
get_property(NAMES GLOBAL PROPERTY CPM_PACKAGE_NAMES)
|
||||||
|
get_property(SHAS GLOBAL PROPERTY CPM_PACKAGE_SHAS)
|
||||||
|
get_property(URLS GLOBAL PROPERTY CPM_PACKAGE_URLS)
|
||||||
|
|
||||||
|
list(LENGTH NAMES DEPS_LENGTH)
|
||||||
|
|
||||||
|
list(JOIN NAMES "\",\n\t\"" DEP_NAME_DIRTY)
|
||||||
|
set(DEP_NAMES "\t\"${DEP_NAME_DIRTY}\"")
|
||||||
|
|
||||||
|
list(JOIN SHAS "\",\n\t\"" DEP_SHAS_DIRTY)
|
||||||
|
set(DEP_SHAS "\t\"${DEP_SHAS_DIRTY}\"")
|
||||||
|
|
||||||
|
list(JOIN URLS "\",\n\t\"" DEP_URLS_DIRTY)
|
||||||
|
set(DEP_URLS "\t\"${DEP_URLS_DIRTY}\"")
|
||||||
|
|
||||||
|
configure_file(dep_hashes.h.in dep_hashes.h @ONLY)
|
||||||
|
target_sources(common PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/dep_hashes.h)
|
||||||
|
target_include_directories(common PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
2
externals/CMakeLists.txt
vendored
2
externals/CMakeLists.txt
vendored
|
@ -203,7 +203,7 @@ endif()
|
||||||
AddPackage(
|
AddPackage(
|
||||||
NAME SPIRV-Headers
|
NAME SPIRV-Headers
|
||||||
REPO "KhronosGroup/SPIRV-Headers"
|
REPO "KhronosGroup/SPIRV-Headers"
|
||||||
SHA 04b76709bf.zip
|
SHA 04b76709bf
|
||||||
HASH 954bbc4794bd369c828937c7d4106b6c7bd17a992c672bf1c2a24c128f2bcf1a13295111f47ce4a0fa77641db424359b153dfea2f4e9d19fe64effb29f411c5c
|
HASH 954bbc4794bd369c828937c7d4106b6c7bd17a992c672bf1c2a24c128f2bcf1a13295111f47ce4a0fa77641db424359b153dfea2f4e9d19fe64effb29f411c5c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -232,3 +232,5 @@ if (ANDROID)
|
||||||
add_subdirectory(android/app/src/main/jni)
|
add_subdirectory(android/app/src/main/jni)
|
||||||
target_include_directories(yuzu-android PRIVATE android/app/src/main)
|
target_include_directories(yuzu-android PRIVATE android/app/src/main)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
include(GenerateDepHashes)
|
||||||
|
|
|
@ -159,7 +159,8 @@ add_library(
|
||||||
wall_clock.cpp
|
wall_clock.cpp
|
||||||
wall_clock.h
|
wall_clock.h
|
||||||
zstd_compression.cpp
|
zstd_compression.cpp
|
||||||
zstd_compression.h)
|
zstd_compression.h
|
||||||
|
)
|
||||||
|
|
||||||
if(YUZU_ENABLE_PORTABLE)
|
if(YUZU_ENABLE_PORTABLE)
|
||||||
add_compile_definitions(YUZU_ENABLE_PORTABLE)
|
add_compile_definitions(YUZU_ENABLE_PORTABLE)
|
||||||
|
|
20
src/dep_hashes.h.in
Normal file
20
src/dep_hashes.h.in
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Common {
|
||||||
|
|
||||||
|
static const constexpr std::array<const char *, @DEPS_LENGTH@> dep_names = {
|
||||||
|
@DEP_NAMES@
|
||||||
|
};
|
||||||
|
|
||||||
|
static const constexpr std::array<const char *, @DEPS_LENGTH@> dep_hashes = {
|
||||||
|
@DEP_SHAS@
|
||||||
|
};
|
||||||
|
|
||||||
|
static const constexpr std::array<const char *, @DEPS_LENGTH@> dep_urls = {
|
||||||
|
@DEP_URLS@
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Common
|
|
@ -238,6 +238,10 @@ add_executable(yuzu
|
||||||
migration_dialog.h migration_dialog.cpp
|
migration_dialog.h migration_dialog.cpp
|
||||||
migration_worker.h
|
migration_worker.h
|
||||||
migration_worker.cpp
|
migration_worker.cpp
|
||||||
|
|
||||||
|
deps_dialog.cpp
|
||||||
|
deps_dialog.h
|
||||||
|
deps_dialog.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden")
|
set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden")
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>About eden</string>
|
<string>About Eden</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
|
|
121
src/yuzu/deps_dialog.cpp
Normal file
121
src/yuzu/deps_dialog.cpp
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include "yuzu/deps_dialog.h"
|
||||||
|
#include <QAbstractTextDocumentLayout>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
#include <QIcon>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QTableWidget>
|
||||||
|
#include <QTextEdit>
|
||||||
|
#include "dep_hashes.h"
|
||||||
|
#include "ui_deps_dialog.h"
|
||||||
|
#include <fmt/ranges.h>
|
||||||
|
|
||||||
|
DepsDialog::DepsDialog(QWidget* parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
, ui{std::make_unique<Ui::DepsDialog>()}
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
constexpr size_t rows = Common::dep_hashes.size();
|
||||||
|
ui->tableDeps->setRowCount(rows);
|
||||||
|
|
||||||
|
QStringList labels;
|
||||||
|
labels << tr("Dependency") << tr("Version");
|
||||||
|
|
||||||
|
ui->tableDeps->setHorizontalHeaderLabels(labels);
|
||||||
|
ui->tableDeps->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeMode::Stretch);
|
||||||
|
ui->tableDeps->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeMode::Fixed);
|
||||||
|
ui->tableDeps->horizontalHeader()->setMinimumSectionSize(200);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < rows; ++i) {
|
||||||
|
const std::string name = Common::dep_names.at(i);
|
||||||
|
const std::string sha = Common::dep_hashes.at(i);
|
||||||
|
const std::string url = Common::dep_urls.at(i);
|
||||||
|
|
||||||
|
std::string dependency = fmt::format("<a href=\"{}\">{}</a>", url, name);
|
||||||
|
|
||||||
|
QTableWidgetItem *nameItem = new QTableWidgetItem(QString::fromStdString(dependency));
|
||||||
|
QTableWidgetItem *shaItem = new QTableWidgetItem(QString::fromStdString(sha));
|
||||||
|
|
||||||
|
ui->tableDeps->setItem(i, 0, nameItem);
|
||||||
|
ui->tableDeps->setItem(i, 1, shaItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->tableDeps->setItemDelegateForColumn(0, new LinkItemDelegate(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
DepsDialog::~DepsDialog() = default;
|
||||||
|
|
||||||
|
LinkItemDelegate::LinkItemDelegate(QObject *parent)
|
||||||
|
: QStyledItemDelegate(parent)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void LinkItemDelegate::paint(QPainter *painter,
|
||||||
|
const QStyleOptionViewItem &option,
|
||||||
|
const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
auto options = option;
|
||||||
|
initStyleOption(&options, index);
|
||||||
|
|
||||||
|
QTextDocument doc;
|
||||||
|
QString html = index.data(Qt::DisplayRole).toString();
|
||||||
|
doc.setHtml(html);
|
||||||
|
|
||||||
|
options.text.clear();
|
||||||
|
|
||||||
|
painter->save();
|
||||||
|
painter->translate(options.rect.topLeft());
|
||||||
|
doc.drawContents(painter, QRectF(0, 0, options.rect.width(), options.rect.height()));
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize LinkItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
QStyleOptionViewItem options = option;
|
||||||
|
initStyleOption(&options, index);
|
||||||
|
|
||||||
|
QTextDocument doc;
|
||||||
|
doc.setHtml(options.text);
|
||||||
|
doc.setTextWidth(options.rect.width());
|
||||||
|
return QSize(doc.idealWidth(), doc.size().height());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LinkItemDelegate::editorEvent(QEvent *event,
|
||||||
|
QAbstractItemModel *model,
|
||||||
|
const QStyleOptionViewItem &option,
|
||||||
|
const QModelIndex &index)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::MouseButtonRelease) {
|
||||||
|
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
|
||||||
|
if (mouseEvent->button() == Qt::LeftButton) {
|
||||||
|
QString html = index.data(Qt::DisplayRole).toString();
|
||||||
|
QTextDocument doc;
|
||||||
|
doc.setHtml(html);
|
||||||
|
doc.setTextWidth(option.rect.width());
|
||||||
|
|
||||||
|
// this is kinda silly but it werks
|
||||||
|
QAbstractTextDocumentLayout *layout = doc.documentLayout();
|
||||||
|
|
||||||
|
QPoint pos = mouseEvent->pos() - option.rect.topLeft();
|
||||||
|
int charPos = layout->hitTest(pos, Qt::ExactHit);
|
||||||
|
|
||||||
|
if (charPos >= 0) {
|
||||||
|
QTextCursor cursor(&doc);
|
||||||
|
cursor.setPosition(charPos);
|
||||||
|
|
||||||
|
QTextCharFormat format = cursor.charFormat();
|
||||||
|
|
||||||
|
if (format.isAnchor()) {
|
||||||
|
QString href = format.anchorHref();
|
||||||
|
if (!href.isEmpty()) {
|
||||||
|
QDesktopServices::openUrl(QUrl(href));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QStyledItemDelegate::editorEvent(event, model, option, index);
|
||||||
|
}
|
41
src/yuzu/deps_dialog.h
Normal file
41
src/yuzu/deps_dialog.h
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
#include <QTableView>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace Ui { class DepsDialog; }
|
||||||
|
|
||||||
|
class DepsDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit DepsDialog(QWidget *parent);
|
||||||
|
~DepsDialog() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<Ui::DepsDialog> ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
class LinkItemDelegate : public QStyledItemDelegate
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit LinkItemDelegate(QObject *parent = 0);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paint(QPainter *painter,
|
||||||
|
const QStyleOptionViewItem &option,
|
||||||
|
const QModelIndex &index) const override;
|
||||||
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
||||||
|
bool editorEvent(QEvent *event,
|
||||||
|
QAbstractItemModel *model,
|
||||||
|
const QStyleOptionViewItem &option,
|
||||||
|
const QModelIndex &index) override;
|
||||||
|
};
|
166
src/yuzu/deps_dialog.ui
Normal file
166
src/yuzu/deps_dialog.ui
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>DepsDialog</class>
|
||||||
|
<widget class="QDialog" name="DepsDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>701</width>
|
||||||
|
<height>500</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Eden Dependencies</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelLogo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>200</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../dist/qt_themes/default/default.qrc">:/icons/default/256x256/eden.png</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelEden">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/><body><p><span style=" font-size:28pt;">Eden Dependencies</span></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelInfo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/><body><p>The projects that make Eden possible</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTableWidget" name="tableDeps">
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::SelectionMode::NoSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="columnCount">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="verticalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column/>
|
||||||
|
<column/>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::StandardButton::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="../../dist/qt_themes/default/default.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>DepsDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>DepsDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
|
@ -160,6 +160,7 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual
|
||||||
#include "yuzu/debugger/console.h"
|
#include "yuzu/debugger/console.h"
|
||||||
#include "yuzu/debugger/controller.h"
|
#include "yuzu/debugger/controller.h"
|
||||||
#include "yuzu/debugger/wait_tree.h"
|
#include "yuzu/debugger/wait_tree.h"
|
||||||
|
#include "yuzu/deps_dialog.h"
|
||||||
#include "yuzu/discord.h"
|
#include "yuzu/discord.h"
|
||||||
#include "yuzu/game_list.h"
|
#include "yuzu/game_list.h"
|
||||||
#include "yuzu/game_list_p.h"
|
#include "yuzu/game_list_p.h"
|
||||||
|
@ -1769,6 +1770,7 @@ void GMainWindow::ConnectMenuEvents() {
|
||||||
connect_menu(ui->action_Firmware_From_ZIP, &GMainWindow::OnInstallFirmwareFromZIP);
|
connect_menu(ui->action_Firmware_From_ZIP, &GMainWindow::OnInstallFirmwareFromZIP);
|
||||||
connect_menu(ui->action_Install_Keys, &GMainWindow::OnInstallDecryptionKeys);
|
connect_menu(ui->action_Install_Keys, &GMainWindow::OnInstallDecryptionKeys);
|
||||||
connect_menu(ui->action_About, &GMainWindow::OnAbout);
|
connect_menu(ui->action_About, &GMainWindow::OnAbout);
|
||||||
|
connect_menu(ui->action_Eden_Dependencies, &GMainWindow::OnEdenDependencies);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::UpdateMenuState() {
|
void GMainWindow::UpdateMenuState() {
|
||||||
|
@ -3742,7 +3744,7 @@ void GMainWindow::OnOpenFAQ() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::OnOpenDiscord() {
|
void GMainWindow::OnOpenDiscord() {
|
||||||
OpenURL(QUrl(QStringLiteral("https://discord.gg/kXAmGCXBGD")));
|
OpenURL(QUrl(QStringLiteral("https://discord.gg/HstXbPch7X")));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::OnOpenRevolt() {
|
void GMainWindow::OnOpenRevolt() {
|
||||||
|
@ -4582,6 +4584,11 @@ void GMainWindow::OnAbout() {
|
||||||
aboutDialog.exec();
|
aboutDialog.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMainWindow::OnEdenDependencies() {
|
||||||
|
DepsDialog depsDialog(this);
|
||||||
|
depsDialog.exec();
|
||||||
|
}
|
||||||
|
|
||||||
void GMainWindow::OnToggleFilterBar() {
|
void GMainWindow::OnToggleFilterBar() {
|
||||||
game_list->SetFilterVisible(ui->action_Show_Filter_Bar->isChecked());
|
game_list->SetFilterVisible(ui->action_Show_Filter_Bar->isChecked());
|
||||||
if (ui->action_Show_Filter_Bar->isChecked()) {
|
if (ui->action_Show_Filter_Bar->isChecked()) {
|
||||||
|
|
|
@ -397,6 +397,7 @@ private slots:
|
||||||
void OnInstallFirmwareFromZIP();
|
void OnInstallFirmwareFromZIP();
|
||||||
void OnInstallDecryptionKeys();
|
void OnInstallDecryptionKeys();
|
||||||
void OnAbout();
|
void OnAbout();
|
||||||
|
void OnEdenDependencies();
|
||||||
void OnToggleFilterBar();
|
void OnToggleFilterBar();
|
||||||
void OnToggleStatusBar();
|
void OnToggleStatusBar();
|
||||||
void OnGameListRefresh();
|
void OnGameListRefresh();
|
||||||
|
|
|
@ -217,6 +217,7 @@
|
||||||
<addaction name="action_Revolt"/>
|
<addaction name="action_Revolt"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="action_About"/>
|
<addaction name="action_About"/>
|
||||||
|
<addaction name="action_Eden_Dependencies"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menu_File"/>
|
<addaction name="menu_File"/>
|
||||||
<addaction name="menu_Emulation"/>
|
<addaction name="menu_Emulation"/>
|
||||||
|
@ -575,6 +576,11 @@
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="action_Eden_Dependencies">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Eden Dependencies</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="yuzu.qrc"/>
|
<include location="yuzu.qrc"/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue