From 7ee008e150bc5bcf76082d726f719ee0fdfda982 Mon Sep 17 00:00:00 2001 From: SulfurNitride Date: Wed, 11 Feb 2026 02:37:39 -0600 Subject: Fluorine Manager: full Linux port of Mod Organizer 2 Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 --- libs/installer_omod/src/newstuff/namedialog.cpp | 37 ++++++++++ libs/installer_omod/src/newstuff/namedialog.h | 28 ++++++++ libs/installer_omod/src/newstuff/namedialog.ui | 89 +++++++++++++++++++++++++ libs/installer_omod/src/newstuff/rtfPopup.cpp | 33 +++++++++ libs/installer_omod/src/newstuff/rtfPopup.h | 11 +++ 5 files changed, 198 insertions(+) create mode 100644 libs/installer_omod/src/newstuff/namedialog.cpp create mode 100644 libs/installer_omod/src/newstuff/namedialog.h create mode 100644 libs/installer_omod/src/newstuff/namedialog.ui create mode 100644 libs/installer_omod/src/newstuff/rtfPopup.cpp create mode 100644 libs/installer_omod/src/newstuff/rtfPopup.h (limited to 'libs/installer_omod/src/newstuff') diff --git a/libs/installer_omod/src/newstuff/namedialog.cpp b/libs/installer_omod/src/newstuff/namedialog.cpp new file mode 100644 index 0000000..4dd44d6 --- /dev/null +++ b/libs/installer_omod/src/newstuff/namedialog.cpp @@ -0,0 +1,37 @@ +#include "namedialog.h" + +#include + +NameDialog::NameDialog(const MOBase::GuessedValue& suggestedNames, QWidget* parent) + : QDialog(parent), ui(), mName(suggestedNames) +{ + ui.setupUi(this); + + for (const auto& name : suggestedNames.variants()) + ui.nameCombo->addItem(name); + + ui.nameCombo->setCurrentIndex(ui.nameCombo->findText(suggestedNames)); + + setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint)); + ui.nameCombo->completer()->setCaseSensitivity(Qt::CaseSensitive); +} + +QString NameDialog::getName() const +{ + return mName; +} + +void NameDialog::on_okBtn_clicked() +{ + accept(); +} + +void NameDialog::on_cancelBtn_clicked() +{ + reject(); +} + +void NameDialog::on_nameCombo_currentTextChanged(const QString& text) +{ + mName = text; +} diff --git a/libs/installer_omod/src/newstuff/namedialog.h b/libs/installer_omod/src/newstuff/namedialog.h new file mode 100644 index 0000000..72e62eb --- /dev/null +++ b/libs/installer_omod/src/newstuff/namedialog.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +#include + +#include "ui_namedialog.h" + +class NameDialog : public QDialog +{ + Q_OBJECT + +public: + NameDialog(const MOBase::GuessedValue& suggestedNames, QWidget* parent = nullptr); + + QString getName() const; + +private slots: + void on_okBtn_clicked(); + + void on_cancelBtn_clicked(); + + void on_nameCombo_currentTextChanged(const QString& text); + +private: + Ui::NameDialog ui; + QString mName; +}; diff --git a/libs/installer_omod/src/newstuff/namedialog.ui b/libs/installer_omod/src/newstuff/namedialog.ui new file mode 100644 index 0000000..5727d1a --- /dev/null +++ b/libs/installer_omod/src/newstuff/namedialog.ui @@ -0,0 +1,89 @@ + + + NameDialog + + + + 0 + 0 + 400 + 83 + + + + Pick mod name + + + + + + + + Name + + + + + + + true + + + + + + + + + + + false + + + Manual install is unavailable for OMODs. + + + Manual install is unavailable for OMODs. + + + Manual + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + true + + + + + + + Cancel + + + + + + + + + + diff --git a/libs/installer_omod/src/newstuff/rtfPopup.cpp b/libs/installer_omod/src/newstuff/rtfPopup.cpp new file mode 100644 index 0000000..476f078 --- /dev/null +++ b/libs/installer_omod/src/newstuff/rtfPopup.cpp @@ -0,0 +1,33 @@ +#include "rtfPopup.h" + +#include +#include +#include +#include +#include + +#include "../interop/QtDotNetConverters.h" + +RtfPopup::RtfPopup(System::String^ rtfText, QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f) +{ + QString text = rtfText->StartsWith("{\\rtf") ? toQString(RtfPipe::Rtf::ToHtml(rtfText)) : Qt::convertFromPlainText(toQString(rtfText), Qt::WhiteSpaceNormal); + QRegularExpression urlFinder(R"REGEX((?\1)"); + + QLayout* layout = new QGridLayout(this); + setLayout(layout); + QScrollArea* scrollArea = new QScrollArea(this); + scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + layout->addWidget(scrollArea); + + QLabel* label = new QLabel(text, scrollArea); + label->setWordWrap(true); + label->setTextFormat(Qt::RichText); + label->setOpenExternalLinks(true); + label->setTextInteractionFlags(Qt::TextBrowserInteraction); + scrollArea->setWidget(label); + scrollArea->setWidgetResizable(true); + + setSizeGripEnabled(true); +} diff --git a/libs/installer_omod/src/newstuff/rtfPopup.h b/libs/installer_omod/src/newstuff/rtfPopup.h new file mode 100644 index 0000000..17ca10c --- /dev/null +++ b/libs/installer_omod/src/newstuff/rtfPopup.h @@ -0,0 +1,11 @@ +using namespace cli; + +#include + +class RtfPopup : public QDialog +{ + Q_OBJECT + +public: + RtfPopup(System::String^ rtfText, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); +}; -- cgit v1.3.1