ESO Lua File v100010

common/zo_options/zo_sharedoptions.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
-- this table stores everything needed to setup every setting control
-- each OptionsPanel_Whatever.lua file creates a table and adds itself to this one.
ZO_SharedOptions_SettingsData  = {} 
SETTING_TYPE_CUSTOM = 5000 --this must be bigger than EsoGameDataEnums::cSettingSystemTypeSize, currently 16
ZO_SharedOptions = ZO_Object:Subclass()
function ZO_SharedOptions:New(control)
    local sharedOptions = ZO_Object.New(self)
    sharedOptions:Initialize(control)
    return sharedOptions
end
function ZO_SharedOptions:Initialize(control)  
    self.controlTable = {}
    self.panelNames = {}
    self.isGamepadOptions = false
end
function ZO_SharedOptions:IsGamepadOptions()
    return self.isGamepadOptions
end
function ZO_SharedOptions:SaveCachedClientSettings()
    -- We only care about saving the cached settings ingame, so this function will be nil in pregame
    if (SaveCachedSettings ~= nil) then
        SaveCachedSettings()
    end
end
function ZO_SharedOptions:GetControlTypeFromControl(control)
    local data = control.data
    if data.controlType == OPTIONS_FINITE_LIST then
        if self:IsGamepadOptions() then
            return OPTIONS_HORIZONTAL_SCROLL_LIST
        else
            return OPTIONS_DROPDOWN
        end
    end
    return data.controlType
end
function ZO_SharedOptions:GetControlType(controlType)
    if controlType == OPTIONS_FINITE_LIST then
        if self:IsGamepadOptions() then
            return OPTIONS_HORIZONTAL_SCROLL_LIST
        else
            return OPTIONS_DROPDOWN
        end
    end
    return controlType
end
function ZO_SharedOptions:InitializeControl(control, selected)
    local data = control.data
    local text = nil
    if type(data.text) == "string" then
        text = data.text
    else
        text = GetString(data.text)
    end
    local controlType = self:GetControlTypeFromControl(control)
    control.optionsManager = self
    if controlType == OPTIONS_SECTION_TITLE then
        GetControl(control, "Label"):SetText(text)
    elseif controlType == OPTIONS_DROPDOWN then
        GetControl(control, "Name"):SetText(text)
    elseif controlType == OPTIONS_HORIZONTAL_SCROLL_LIST then
        GetControl(control, "Name"):SetText(text)
    elseif controlType == OPTIONS_CHECKBOX then
        GetControl(control, "Name"):SetText(text)
    elseif controlType == OPTIONS_SLIDER then
        GetControl(control, "Name"):SetText(text)
    elseif controlType == OPTIONS_INVOKE_CALLBACK  then
        GetControl(control, "Name"):SetText(text)
    elseif controlType == OPTIONS_CUSTOM then
        if data.customSetupFunction then
            data.customSetupFunction(control)
        end
    end
    -- Catch events...callbacks set in the xml
    if data.eventCallbacks then
        for event, callback in pairs(data.eventCallbacks) do
            CALLBACK_MANAGER:RegisterCallback(event, callback, control)
        end
    end
end
function ZO_SharedOptions:LoadDefaults(data) 
    if data.isAnOption then
        ResetSettingToDefault(data.system, data.settingId)
    elseif data.controlType == OPTIONS_CUSTOM and data.customResetToDefaultsFunction then
        if data.customResetToDefaultsFunction then
            data.customResetToDefaultsFunction(control)
        end
    end
end
function ZO_SharedOptions:UpdatePanelOptions(panelIndex, saveOptions)
    local controls = self.controlTable[panelIndex]
    for index, control in pairs(controls) do
        local data = control.data
        if data.isAnOption then
            local value = ZO_Options_UpdateOption(control)
            if saveOptions == SAVE_CURRENT_VALUES then
                data.value = value       -- Save the values (can't click cancel to restore old values after this)
            end
        end
    end
end
function ZO_SharedOptions:UpdateCurrentPanelOptions(saveOptions)
    self:UpdatePanelOptions(self.currentPanel, saveOptions)
end
-- Pass SAVE_CURRENT_VALUES in the first parameter to save the updated values (can't click cancel to restore afterwards).
-- Pass DONT_SAVE_CURRENT_VALUES to update the values, but not save them (cancel will restore the previous values).
function ZO_SharedOptions:UpdateAllPanelOptions(saveOptions)
    for index in pairs(self.controlTable) do
        self:UpdatePanelOptions(index, saveOptions)
    end
end
function ZO_SharedOptions:GetSettingsData(panel, system, settingId)
    return ZO_SharedOptions_SettingsData[panel][system][settingId]
end