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 --- .../src/implementations/CodeProgress.cpp | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 libs/installer_omod/src/implementations/CodeProgress.cpp (limited to 'libs/installer_omod/src/implementations/CodeProgress.cpp') diff --git a/libs/installer_omod/src/implementations/CodeProgress.cpp b/libs/installer_omod/src/implementations/CodeProgress.cpp new file mode 100644 index 0000000..7256592 --- /dev/null +++ b/libs/installer_omod/src/implementations/CodeProgress.cpp @@ -0,0 +1,85 @@ +#include + +#include "CodeProgress.h" + +CodeProgressHelper::CodeProgressHelper(QWidget* parentWidget) : mParentWidget{ parentWidget }, mProgressDialog(make_nullptr()) { + moveToThread(QApplication::instance()->thread()); + connect(this, &CodeProgressHelper::ShowProgressDialogSignal, this, &CodeProgressHelper::ShowProgressDialogSlot, Qt::QueuedConnection); + connect(this, &CodeProgressHelper::UpdateProgressValueSignal, this, &CodeProgressHelper::UpdateProgressValueSlot, Qt::BlockingQueuedConnection); + connect(this, &CodeProgressHelper::HideProgressDialogSignal, this, &CodeProgressHelper::HideProgressDialogSlot, Qt::QueuedConnection); + +} + +void CodeProgressHelper::ShowProgressDialog() { + emit ShowProgressDialogSignal(); +} + +void CodeProgressHelper::UpdateProgressValue(int percentage) { + emit UpdateProgressValueSignal(percentage); +} + +void CodeProgressHelper::HideProgressDialog() { + emit HideProgressDialogSignal(); +} + +void CodeProgressHelper::ShowProgressDialogSlot() { + mProgressDialog.reset(new QProgressDialog(mParentWidget)); + mProgressDialog->setWindowFlags(mProgressDialog->windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowCloseButtonHint); + mProgressDialog->setWindowModality(Qt::WindowModal); + mProgressDialog->setCancelButton(nullptr); + mProgressDialog->setMinimum(0); + mProgressDialog->setMaximum(100); + mProgressDialog->setAutoReset(false); + mProgressDialog->setAutoClose(false); + mProgressDialog->show(); +} + +void CodeProgressHelper::UpdateProgressValueSlot(int percentage) { + mProgressDialog->setValue(percentage); +} + +void CodeProgressHelper::HideProgressDialogSlot() { + mProgressDialog->hide(); + mProgressDialog.reset(); + } + +void CodeProgress::Init(__int64 totalSize, bool compressing) +{ + System::GC::ReRegisterForFinalize(this); + + mTotalSize = totalSize; + mCompressing = compressing; + mPercentage = 0; + + mHelper = new CodeProgressHelper(mParentWidget); + mHelper->ShowProgressDialog(); +} + +void CodeProgress::SetProgress(__int64 inSize, __int64 outSize) +{ + int newPercentage = (int)(100 * inSize / (double)mTotalSize); + if (newPercentage != mPercentage) + mHelper->UpdateProgressValue(newPercentage); + mPercentage = newPercentage; +} + +CodeProgress::~CodeProgress() +{ + if (!mHelper) + return; + + mHelper->HideProgressDialog(); + this->!CodeProgress(); +} + +CodeProgress::!CodeProgress() +{ + if (mHelper) + mHelper->deleteLater(); + mHelper = nullptr; +} + +void CodeProgress::setParentWidget(QWidget* parentWidget) +{ + mParentWidget = parentWidget; +} -- cgit v1.3.1