/*
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 .
*/
#include "inieditor.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
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 IniEditor::settings() const
{
QList 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