aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_omod/src/newstuff
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
commit7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch)
tree27fb39be241fdb5ac2734c574de678977d1856d0 /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.cpp37
-rw-r--r--libs/installer_omod/src/newstuff/namedialog.h28
-rw-r--r--libs/installer_omod/src/newstuff/namedialog.ui89
-rw-r--r--libs/installer_omod/src/newstuff/rtfPopup.cpp33
-rw-r--r--libs/installer_omod/src/newstuff/rtfPopup.h11
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+@#/%=~_|$?!:,.]|(?:&amp;)*\)|[-A-Z0-9+@#/%=~_|$?!:,.]|(?:&amp;))*(?:\([-A-Z0-9+@#/%=~+|$?!:,.]|(?:&amp;)*\)|[A-Z0-9+@#/%=~_|$]|(?:&amp;))))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());
+};