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_manual/src/installdialog.h | 124 ++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 libs/installer_manual/src/installdialog.h (limited to 'libs/installer_manual/src/installdialog.h') diff --git a/libs/installer_manual/src/installdialog.h b/libs/installer_manual/src/installdialog.h new file mode 100644 index 0000000..96e4085 --- /dev/null +++ b/libs/installer_manual/src/installdialog.h @@ -0,0 +1,124 @@ +/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of Mod Organizer. + +Mod Organizer is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Mod Organizer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Mod Organizer. If not, see . +*/ + +#ifndef INSTALLDIALOG_H +#define INSTALLDIALOG_H + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "archivetree.h" + +namespace Ui +{ +class InstallDialog; +} + +/** + * a dialog presented to manually define how a mod is to be installed. It provides + * a tree view of the file contents that can modified directly + **/ +class InstallDialog : public MOBase::TutorableDialog +{ + Q_OBJECT + +public: + /** + * @brief Create a new install dialog for the given tree. The tree + * is "own" by the dialog, i.e., any change made by the user is immediately + * reflected to the given tree, except for the changes to the root. + * + * @param tree Tree structure describing the original archive structure. + * @param modName Name of the mod. The name can be modified through the dialog. + * @param modDataChecker The mod data checker to use to check. + * @param dataName The name of the data folder for the game. + * @param parent Parent widget. + **/ + explicit InstallDialog(std::shared_ptr tree, + const MOBase::GuessedValue& modName, + std::shared_ptr modDataChecker, + const QString& dataName, QWidget* parent = 0); + ~InstallDialog(); + + /** + * @brief retrieve the (modified) mod name + * + * @return updated mod name + **/ + QString getModName() const; + + /** + * @brief Retrieve the user-modified directory structure. + * + * @return the new tree represented by this dialog, which can be a new + * tree or a subtree of the original tree. + **/ + std::shared_ptr getModifiedTree() const; + +signals: + + /** + * @brief Signal emitted when user request the file corresponding + * to the given entry to be opened. + * + * @param entry Entry corresponding to the file to open. + */ + void openFile(const MOBase::FileTreeEntry* entry); + +private: + bool testForProblem(); + void updateProblems(); + void createDirectoryUnder(ArchiveTreeWidgetItem* treeItem); + +private slots: + + // Automatic slots that are directly bound to the UI: + void on_treeContent_customContextMenuRequested(QPoint pos); + void on_cancelButton_clicked(); + void on_okButton_clicked(); + +private: + Ui::InstallDialog* ui; + + std::shared_ptr m_Checker; + + // Name of the "data" directory: + QString m_DataFolderName; + + // the tree root is the initial root that will never change (should be const + // but cannot be since the parent tree cannot be constructed in the member + // initializer list) + // + // the tree root is not actually added to the tree, but is used to maintain + // the state of the tree and not lose entries when unsetting data root + // + ArchiveTreeWidget* m_Tree; + ArchiveTreeWidgetItem* m_TreeRoot; + QLabel* m_ProblemLabel; +}; + +#endif // INSTALLDIALOG_H -- cgit v1.3.1