diff options
| author | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-02-11 02:37:39 -0600 |
|---|---|---|
| committer | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-02-11 02:37:39 -0600 |
| commit | 7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch) | |
| tree | 27fb39be241fdb5ac2734c574de678977d1856d0 /libs/installer_omod/src/newstuff | |
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 <noreply@anthropic.com>
Diffstat (limited to 'libs/installer_omod/src/newstuff')
| -rw-r--r-- | libs/installer_omod/src/newstuff/namedialog.cpp | 37 | ||||
| -rw-r--r-- | libs/installer_omod/src/newstuff/namedialog.h | 28 | ||||
| -rw-r--r-- | libs/installer_omod/src/newstuff/namedialog.ui | 89 | ||||
| -rw-r--r-- | libs/installer_omod/src/newstuff/rtfPopup.cpp | 33 | ||||
| -rw-r--r-- | libs/installer_omod/src/newstuff/rtfPopup.h | 11 |
5 files changed, 198 insertions, 0 deletions
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 <QCompleter> + +NameDialog::NameDialog(const MOBase::GuessedValue<QString>& 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 <QDialog> + +#include <uibase/guessedvalue.h> + +#include "ui_namedialog.h" + +class NameDialog : public QDialog +{ + Q_OBJECT + +public: + NameDialog(const MOBase::GuessedValue<QString>& 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>NameDialog</class> + <widget class="QDialog" name="NameDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>83</height> + </rect> + </property> + <property name="windowTitle"> + <string>Pick mod name</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Name</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="nameCombo"> + <property name="editable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QPushButton" name="manualBtn"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Manual install is unavailable for OMODs.</string> + </property> + <property name="whatsThis"> + <string>Manual install is unavailable for OMODs.</string> + </property> + <property name="text"> + <string>Manual</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="okBtn"> + <property name="text"> + <string>OK</string> + </property> + <property name="default"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="cancelBtn"> + <property name="text"> + <string>Cancel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> 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 <QGridLayout> +#include <QLabel> +#include <QRegularExpression> +#include <QScrollArea> +#include <QTextDocument> + +#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((?<!(?:href="))((?:(?:https?|ftp|file)://|www\.|ftp\.)(?:\([-A-Z0-9+@#/%=~_|$?!:,.]|(?:&)*\)|[-A-Z0-9+@#/%=~_|$?!:,.]|(?:&))*(?:\([-A-Z0-9+@#/%=~+|$?!:,.]|(?:&)*\)|[A-Z0-9+@#/%=~_|$]|(?:&))))REGEX", QRegularExpression::CaseInsensitiveOption | QRegularExpression::MultilineOption); + text.replace(urlFinder, R"(<a href="\1">\1</a>)"); + + 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 <QDialog> + +class RtfPopup : public QDialog +{ + Q_OBJECT + +public: + RtfPopup(System::String^ rtfText, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); +}; |
