1
0
KF2-Dev-Scripts/WebAdmin/Classes/AbstractSettingsModifier.uc
2020-12-13 18:01:13 +03:00

106 lines
2.1 KiB
Ucode

/**
* A base implementation of the ISettingsModifier interface
*
* Copyright (C) 2011 Tripwire Interactive LLC
*
* @author Michiel 'elmuerte' Hendriks
*/
class AbstractSettingsModifier extends Object implements(ISettingsModifier);
/**
* Current setting instance being augemented. Only set when augmentation will be
* done.
*/
var WebAdminSettings curSettings;
var class<WebAdminSettings> selectedClass;
struct ClassEntry
{
/**
* The WebAdminSettings class
*/
var class<WebAdminSettings> settingsClass;
/**
* If true it applies to the subclasses as well.
*/
var bool bIncludeSubclasses;
};
/**
* Defines which classes this modifier will affecr
*/
var array<ClassEntry> modifiesClasses;
/**
* Some meta data for settings to check
*/
struct SettingValue
{
/**
* True if the value is fixed. If false, it is ranged.
*/
var bool bFixed;
// the values. if bFixed=false, the first value is the minimum
var int intVal, intValMax;
var float floatVal, floatValMax;
var string stringVal;
structdefaultproperties
{
bFixed=true
}
};
function bool modifierAppliesTo(WebAdminSettings settings)
{
selectedClass = getSelectedClass(settings);
if (selectedClass != none)
{
curSettings = settings;
return true;
}
return false;
}
function class<WebAdminSettings> getSelectedClass(WebAdminSettings settings)
{
local ClassEntry entry;
local bool augmentEnabled;
if (settings == none) return none;
foreach modifiesClasses(entry)
{
if (entry.bIncludeSubclasses)
{
augmentEnabled = ClassIsChildOf(settings.class, entry.settingsClass);
}
else {
augmentEnabled = settings.class == entry.settingsClass;
}
if (augmentEnabled)
{
return entry.settingsClass;
}
}
return none;
}
function string finalizeAugmentation(WebResponse response, String path)
{
curSettings = none;
selectedClass = none;
return "";
}
function augmentSetting(SettingRendererState renderState, optional int index = -1, optional bool inContainer);
function ensureSettingValues(WebAdminSettings settings);
defaultProperties
{
}