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/tool_inieditor/src/inieditor.cpp | |
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/tool_inieditor/src/inieditor.cpp')
| -rw-r--r-- | libs/tool_inieditor/src/inieditor.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/libs/tool_inieditor/src/inieditor.cpp b/libs/tool_inieditor/src/inieditor.cpp new file mode 100644 index 0000000..b892137 --- /dev/null +++ b/libs/tool_inieditor/src/inieditor.cpp @@ -0,0 +1,152 @@ +/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of ini editor plugin for MO + +Ini editor plugin 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. + +Ini editor plugin 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 Ini editor plugin. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "inieditor.h" + +#include <QApplication> +#include <QDesktopServices> +#include <QDir> +#include <QMessageBox> +#include <QUrl> +#include <QtPlugin> + +#include <uibase/imoinfo.h> +#include <uibase/iplugingame.h> +#include <uibase/textviewer.h> +#include <uibase/utility.h> + +using namespace MOBase; + +IniEditor::IniEditor() : m_MOInfo(nullptr) {} + +bool IniEditor::init(IOrganizer* moInfo) +{ + m_MOInfo = moInfo; + return true; +} + +QString IniEditor::name() const +{ + return "INI Editor"; +} + +QString IniEditor::localizedName() const +{ + return tr("INI Editor"); +} + +QString IniEditor::author() const +{ + return "Tannin"; +} + +QString IniEditor::description() const +{ + return tr("Very basic editor for INI files"); +} + +VersionInfo IniEditor::version() const +{ + return VersionInfo(1, 1, 0, VersionInfo::RELEASE_FINAL); +} + +QList<PluginSetting> IniEditor::settings() const +{ + QList<PluginSetting> result; + result.push_back(PluginSetting("external", "Use an external editor to open the files", + QVariant(false))); + result.push_back(PluginSetting( + "associated", + "When using an external editor, use the application associated with \"INI\" " + "files. " + "If false, uses the \"edit\" command which usually invokes regular notepad.", + QVariant(true))); + return result; +} + +QString IniEditor::displayName() const +{ + return tr("INI Editor"); +} + +QString IniEditor::tooltip() const +{ + return tr("Edit the INI files of the current profile"); +} + +QIcon IniEditor::icon() const +{ + return QIcon(":/inieditor/icon_document"); +} + +void IniEditor::display() const +{ + if (m_MOInfo == nullptr) { + throw MyException(tr("plugin not initialized")); + } + + QStringList iniFiles = m_MOInfo->managedGame()->iniFiles(); + if (m_MOInfo->pluginSetting(name(), "external").toBool()) { + for (QString const& file : iniFiles) { + QString fileName = m_MOInfo->profile()->absoluteIniFilePath(file); +#ifdef _WIN32 + ::ShellExecuteW(nullptr, + m_MOInfo->pluginSetting(name(), "associated").toBool() ? L"open" + : L"edit", + ToWString(fileName).c_str(), nullptr, nullptr, SW_SHOWNORMAL); +#else + QDesktopServices::openUrl(QUrl::fromLocalFile(fileName)); +#endif + } + } else { + TextViewer* viewer = new TextViewer("INI Files", parentWidget()); + if (m_MOInfo->profile()->localSettingsEnabled()) { + viewer->setDescription(tr( + " Editing profile-specific INIs. Profile-specific game INI files are " + "Enabled.\n \n You can change the INI Editor settings (in the main Mod " + "Organizer settings under the plugins tab) to use an external text editor,\n " + "either notepad or your windows associated program to .INI files.")); + } else { + viewer->setDescription(tr( + " Editing global INIs (in 'myGames' folder). Profile-specific game INI files " + "are Disabled.\n \n You can change the INI Editor settings (in the main Mod " + "Organizer settings under the plugins tab) to use an external text editor,\n " + "either notepad or your windows associated program to .INI files.")); + } + for (QString const& file : iniFiles) { + QString fileName = m_MOInfo->profile()->absoluteIniFilePath(file); + QFileInfo fileInfo(fileName); + if (fileInfo.exists()) { + if (fileInfo.size() < 1024 * 1024) { + viewer->addFile(fileName, true); + } else { + QMessageBox::warning(parentWidget(), tr("File too big"), + tr("Sorry, the file %1 is too large" + " to be handled by the INI Editor") + .arg(fileName)); + } + } + } + viewer->show(); + } +} + +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +Q_EXPORT_PLUGIN2(iniEditor, IniEditor) +#endif |
