Back to Home

ESO Lua File v100032

ingame/zonestories/keyboard/zonestories_keyboard.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
local KEYBOARD_ZONE_STORIES_BACKGROUND_TEXTURE_WIDTH = 620
local KEYBOARD_ZONE_STORIES_BACKGROUND_SOURCE_WIDTH = 1024
ZO_KEYBOARD_ZONE_STORIES_BACKGROUND_TEXTURE_COORD_RIGHT = KEYBOARD_ZONE_STORIES_BACKGROUND_TEXTURE_WIDTH / KEYBOARD_ZONE_STORIES_BACKGROUND_SOURCE_WIDTH
local ZONE_STORIES_TILE_GRID_PADDING_X = 2
local ZONE_STORIES_TILE_GRID_PADDING_Y = 20
ZO_ZoneStories_Keyboard = ZO_ZoneStories_Shared:Subclass()
function ZO_ZoneStories_Keyboard:New(...)
    return ZO_ZoneStories_Shared.New(self, ...)
end
function ZO_ZoneStories_Keyboard:Initialize(control)
    local templateData =
    {
        gridListClass = ZO_GridScrollList_Keyboard,
        achievements = 
        {
            entryTemplate = "ZO_ZoneStory_AchievementTile_Keyboard_Control",
            dimensionsX = ZO_ZONE_STORIES_ACHIEVEMENT_TILE_KEYBOARD_DIMENSIONS_X,
            dimensionsY = ZO_ZONE_STORIES_ACHIEVEMENT_TILE_KEYBOARD_DIMENSIONS_Y,
            gridPaddingX = ZONE_STORIES_TILE_GRID_PADDING_X,
            gridPaddingY = ZONE_STORIES_TILE_GRID_PADDING_Y,
        },
        activityCompletion =
        {
            headerTemplate = "ZO_ZoneStory_ActivityCompletionHeader_Keyboard",
            entryTemplate = "ZO_ZoneStory_ActivityCompletionTile_Keyboard_Control",
            dimensionsX = ZO_ZONE_STORIES_ACTIVITY_COMPLETION_TILE_KEYBOARD_DIMENSIONS_X,
            dimensionsY = ZO_ZONE_STORIES_ACTIVITY_COMPLETION_TILE_KEYBOARD_DIMENSIONS_Y,
            gridPaddingX = ZONE_STORIES_TILE_GRID_PADDING_X,
            gridPaddingY = ZONE_STORIES_TILE_GRID_PADDING_Y,
            headerHeight = 40,
        },
        headerPrePadding = ZONE_STORIES_TILE_GRID_PADDING_Y
    }
    local buttonContainer = control:GetNamedChild("ButtonContainer")
    self.playStoryButton = buttonContainer:GetNamedChild("PlayStoryButton")
    self.playStoryButton:SetClickSound(SOUNDS.ZONE_STORIES_TRACK_ACTIVITY)
    self.stopTrackingButton = buttonContainer:GetNamedChild("StopTrackingButton")
    self.trackingMessageLabel = control:GetNamedChild("TrackingMessage")
    local infoContainerControl = control:GetNamedChild("InfoContainer")
    ZO_ZoneStories_Shared.Initialize(self, control, infoContainerControl, templateData)
    self.keybindStripDescriptor =
    {
        alignment = KEYBIND_STRIP_ALIGN_CENTER,
        name = GetString(SI_ZONE_STORY_MORE_INFO_KEYBIND),
        keybind = "UI_SHORTCUT_REPORT_PLAYER",
        visible = function()
            local helpCategoryIndex, helpIndex = GetZoneStoriesHelpIndices()
            return helpCategoryIndex ~= nil
        end,
        callback = function()
            local helpCategoryIndex, helpIndex = GetZoneStoriesHelpIndices()
            HELP:ShowSpecificHelp(helpCategoryIndex, helpIndex)
        end,
    }
    ZONE_STORIES_FRAGMENT = ZO_FadeSceneFragment:New(control)
    ZONE_STORIES_FRAGMENT:RegisterCallback("StateChange", function(oldState, newState)
        if newState == SCENE_FRAGMENT_SHOWING then
            self:UpdateZoneStory()
            TriggerTutorial(TUTORIAL_TRIGGER_ZONE_STORIES_SHOWN)
            KEYBIND_STRIP:AddKeybindButton(self.keybindStripDescriptor)
        elseif newState == SCENE_FRAGMENT_HIDING then
            KEYBIND_STRIP:RemoveKeybindButton(self.keybindStripDescriptor)
        end
    end)
    local categoryData = {
        name = GetString(SI_ACTIVITY_FINDER_CATEGORY_ZONE_STORIES),
        categoryFragment = ZONE_STORIES_FRAGMENT,
        normalIcon = "EsoUI/Art/LFG/LFG_indexIcon_zoneStories_up.dds",
        pressedIcon = "EsoUI/Art/LFG/LFG_indexIcon_zoneStories_down.dds",
        mouseoverIcon = "EsoUI/Art/LFG/LFG_indexIcon_zoneStories_over.dds",
        isZoneStories = true,
    }
    -- Add to category list in Activity Finder
    GROUP_MENU_KEYBOARD:AddCategory(categoryData, ZO_ACTIVITY_FINDER_SORT_PRIORITY.ZONE_STORIES)
end
function ZO_ZoneStories_Keyboard:InitializeZonesList()
    self.zoneSelectorControl = self.control:GetNamedChild("ZoneSelector")
    local zoneSelectorComboBox = ZO_ComboBox_ObjectFromContainer(self.zoneSelectorControl)
    zoneSelectorComboBox:SetSortsItems(false)
    zoneSelectorComboBox:SetFont("ZoFontWinT1")
    zoneSelectorComboBox:SetSpacing(4)
    zoneSelectorComboBox:SetHeight(500)
    self.zoneSelectorComboBox = zoneSelectorComboBox
    self:BuildZonesList()
end
function ZO_ZoneStories_Keyboard:OnZoneSelectionChanged(comboBox, entryText, entry)
end
function ZO_ZoneStories_Keyboard:UpdatePlayStoryButtonText()
    local zoneId = self:GetSelectedZoneId()
    local isZoneAvailable = ZO_ZoneStories_Manager.GetZoneAvailability(zoneId)
    local canContinueZone = CanZoneStoryContinueTrackingActivities(zoneId)
    self.playStoryButton:SetEnabled(isZoneAvailable and canContinueZone)
    self.playStoryButton:SetText(self:GetPlayStoryButtonText())
end
function ZO_ZoneStories_Keyboard:UpdateBackgroundTexture()
    local selectedData = self:GetSelectedStoryData()
    if selectedData then
        self.backgroundTexture:SetTexture(GetZoneStoryKeyboardBackground(selectedData.id))
    end
end
function ZO_ZoneStories_Keyboard:BuildZonesList()
    ZO_ZoneStories_Shared.BuildZonesList(self)
    local function OnSelectionChanged(...)
        self:OnZoneSelectionChanged(...)
    end
    local trackedZoneId = GetTrackedZoneStoryActivityInfo()
    local trackedEntry = nil
    local defaultZoneId = ZO_ZoneStories_Manager.GetDefaultZoneSelection()
    local defaultEntry = nil
    self.zoneSelectorComboBox:ClearItems()
    for _, zoneData in ZONE_STORIES_MANAGER:ZoneListIterator() do
        local entry = ZO_ComboBox:CreateItemEntry(zoneData.name, OnSelectionChanged)
        entry.data =
        {
            id = zoneData.id,
            name = zoneData.name
        }
        if trackedZoneId ~= 0 and trackedZoneId == zoneData.id then
            trackedEntry = entry
            trackedEntry.name = zo_iconTextFormat(ZO_CHECK_ICON, "100%", "100%", trackedEntry.data.name)
        elseif zoneData.id == defaultZoneId then
            defaultEntry = entry
            defaultEntry.name = zo_iconTextFormat("EsoUI/Art/MapPins/UI-WorldMapPlayerPip.dds", 16, 16, defaultEntry.data.name)
        end
        self.zoneSelectorComboBox:AddItem(entry, ZO_COMBOBOX_SUPRESS_UPDATE)
    end
    local IGNORE_CALLBACK = false
    local selectedEntry = trackedEntry or defaultEntry
    if selectedEntry then
        self.zoneSelectorComboBox:SelectItem(selectedEntry, IGNORE_CALLBACK)
    else
        self.zoneSelectorComboBox:SelectFirstItem()
    end
end
function ZO_ZoneStories_Keyboard:UpdateZoneStory()
    ZO_ZoneStories_Shared.UpdateZoneStory(self)
    local zoneId = GetTrackedZoneStoryActivityInfo()
    local selectedData = self:GetSelectedStoryData()
    local selectedZoneId = selectedData.id
    self.stopTrackingButton:SetHidden(zoneId ~= selectedZoneId)
    local isZoneAvailable, zoneAvailableErrorText = ZO_ZoneStories_Manager.GetZoneAvailability(selectedZoneId)
    local shouldShowBlockingMessage = not isZoneAvailable and zoneAvailableErrorText ~= nil
    if shouldShowBlockingMessage then
        self.trackingMessageLabel:SetText(zoneAvailableErrorText)
    else
        local arePriorityQuestsBlocked, errorStringText = ZO_ZoneStories_Manager.GetZoneCompletionTypeBlockingInfo(selectedZoneId, ZONE_COMPLETION_TYPE_PRIORITY_QUESTS)
        shouldShowBlockingMessage = arePriorityQuestsBlocked and errorStringText ~= nil
        if shouldShowBlockingMessage then
            self.trackingMessageLabel:SetText(errorStringText)
        end
    end
    self.trackingMessageLabel:SetHidden(not shouldShowBlockingMessage)
end
function ZO_ZoneStories_Keyboard:GetSelectedZoneId()
    local selectedItemData = self.zoneSelectorComboBox:GetSelectedItemData()
    if selectedItemData then
        return selectedItemData.data.id
    end
    return nil
end
function ZO_ZoneStories_Keyboard:GetSelectedStoryData()
    local selectedItemData = self.zoneSelectorComboBox:GetSelectedItemData()
    if selectedItemData then
        return selectedItemData.data
    end
    return nil
end
function ZO_ZoneStories_Keyboard:SetSelectedByZoneId(zoneId)
    for _, itemData in ipairs(self.zoneSelectorComboBox:GetItems()) do
        if itemData and itemData.data and itemData.data.id == zoneId then
            self.zoneSelectorComboBox:SelectItem(itemData)
        end
    end
end
function ZO_ZoneStories_Keyboard:SetKeyboardActivityCompletionTooltipInfo(control)
    self.activityCompletionTooltipInfo = 
    {
        control = control,
        textControl = control:GetNamedChild("Text"),
        cycleKeybindControl = control:GetNamedChild("CycleKeybind")
    }
    ZO_KeybindButtonTemplate_Setup(self.activityCompletionTooltipInfo.cycleKeybindControl, "UI_SHORTCUT_TERTIARY", nil, GetString(SI_ZONE_STORY_ACTIVITY_COMPLETION_CYCLE_KEYBIND))
end
function ZO_ZoneStories_Keyboard:SetKeyboardActivityCompletionListTooltipInfo(control)
    self.activityCompletionListTooltipInfo = 
    {
        control = control,
        titleControl = control:GetNamedChild("Title"),
        listControl = control:GetNamedChild("CheckList"),
        blockedBranchRequirementLabel = control:GetNamedChild("BlockedBranchRequirementText"),
    }
    local checkPool = ZO_ControlPool:New("ZO_CompletionTypeCheckbox", self.activityCompletionListTooltipInfo.listControl)
    checkPool:SetCustomFactoryBehavior(function(checkControl)
                                            checkControl.label = checkControl:GetNamedChild("Label")
                                       end)
    self.activityCompletionListTooltipInfo.checkControlPool = checkPool
    local columnPool = ZO_ControlPool:New("ZO_CompletionTypeCheckboxColumn", self.activityCompletionListTooltipInfo.listControl)
    self.activityCompletionListTooltipInfo.columnControlPool = columnPool
end
do
    local INITIAL_INDEX = 1
    function ZO_ZoneStories_Keyboard:ShowActivityCompletionTooltip(zoneId, completionType, anchor, descriptionToAchievementAnchor)
        local activityCompletionTooltipInfo = self.activityCompletionTooltipInfo
        local activityCompletionListTooltipInfo = self.activityCompletionListTooltipInfo
        activityCompletionTooltipInfo.anchor = anchor
        activityCompletionTooltipInfo.currentZoneId = zoneId
        activityCompletionTooltipInfo.currentCompletionType = completionType
        activityCompletionTooltipInfo.control:ClearAnchors()
        activityCompletionTooltipInfo.cycleKeybindControl:SetHidden(true)
        local numAchievements = GetNumAssociatedAchievementsForZoneCompletionType(zoneId, completionType)
        if numAchievements > 0 then
            self:UpdateActivityCompletionTooltip(INITIAL_INDEX)
            if GetNumAssociatedAchievementsForZoneCompletionType(zoneId, completionType) > 1 then
                activityCompletionTooltipInfo.cycleKeybindControl:SetHidden(false)
            end
            descriptionToAchievementAnchor:Set(activityCompletionTooltipInfo.control)
            activityCompletionListTooltipInfo.control:SetHidden(true)
        else
            activityCompletionListTooltipInfo.control:ClearAnchors()
            activityCompletionListTooltipInfo.checkControlPool:ReleaseAllObjects()
            activityCompletionListTooltipInfo.columnControlPool:ReleaseAllObjects()
            self:SetupCompletionTypeListTooltip(zoneId, completionType)
            anchor:Set(activityCompletionListTooltipInfo.control)
            local detailsAnchor = ZO_Anchor:New(descriptionToAchievementAnchor:GetMyPoint(), activityCompletionListTooltipInfo.control, descriptionToAchievementAnchor:GetRelativePoint(), descriptionToAchievementAnchor:GetOffsetX(), descriptionToAchievementAnchor:GetOffsetY())
            detailsAnchor:Set(activityCompletionTooltipInfo.control)
            activityCompletionListTooltipInfo.control:SetHidden(false)
        end
        activityCompletionTooltipInfo.textControl:SetText(GetString("SI_ZONECOMPLETIONTYPE_DESCRIPTION", completionType))
        activityCompletionTooltipInfo.control:SetHidden(false)
    end
    local function ActivityDataComparator(left, right)
        if left.complete == right.complete then
            return left.activityIndex < right.activityIndex
        end
        return not left.complete
    end
    local MAX_CONTROLS_PER_COLUMN = 20
    local MAX_COLUMNS = 2
    local MAX_VISIBLE_CHECKBOX_CONTROLS = MAX_COLUMNS * MAX_CONTROLS_PER_COLUMN
    function ZO_ZoneStories_Keyboard:SetupCompletionTypeListTooltip(zoneId, completionType)
        local activityCompletionListTooltipInfo = self.activityCompletionListTooltipInfo
        activityCompletionListTooltipInfo.titleControl:SetText(zo_strformat(SI_ZONE_STORY_LIST_TOOLTIP_TITLE_FORMATTER, GetZoneNameById(zoneId), GetString("SI_ZONECOMPLETIONTYPE", completionType)))
        local numActivityColumnsAdded = 0
        local numUnblockedActivities, blockingBranchErrorStringId = select(3, ZO_ZoneStories_Manager.GetActivityCompletionProgressValues(zoneId, completionType))
        if numUnblockedActivities > 0 then
            local activityData = {}
            for activityIndex = 1, numUnblockedActivities do
                local complete = IsZoneStoryActivityComplete(zoneId, completionType, activityIndex)
                table.insert(activityData, { activityIndex = activityIndex, complete = complete })
            end
            local numVisibleCheckControls = numUnblockedActivities
            local addAdditionalActivitiesControl = false
            -- check to see if there are more activities than can be shown in the tooltip
            -- if so we will add a label at the end indiciating how many more activites are hidden
            if numUnblockedActivities > MAX_VISIBLE_CHECKBOX_CONTROLS then
                addAdditionalActivitiesControl = true
                numVisibleCheckControls = MAX_VISIBLE_CHECKBOX_CONTROLS - 1 -- -1 because we will add the "hidden" label
                -- since we are hiding some of the activities we will sort so the completed
                -- ones are at the end (and therefore the ones that end up hidden)
                table.sort(activityData, ActivityDataComparator)
            end
            -- we want to evenly divide the controls between the columns
            -- so figure out how many controls should go in each
            local numControlsPerColumn = MAX_CONTROLS_PER_COLUMN
            if numVisibleCheckControls > MAX_CONTROLS_PER_COLUMN then
                local numColumns = math.ceil(numVisibleCheckControls / MAX_CONTROLS_PER_COLUMN)
                numControlsPerColumn = math.ceil(numVisibleCheckControls / numColumns)
            end
            local COLUMN_PADDING_X = 40
            local ROW_PADDING_Y = 5
            local previousControl = nil
            local columnPool = activityCompletionListTooltipInfo.columnControlPool
            local columnControl = columnPool:AcquireObject()
            columnControl:SetAnchor(TOPLEFT)
            numActivityColumnsAdded = 1
            -- add all the visible activities to the list
            local checkBoxIndex = 1
            local checkControlPool = activityCompletionListTooltipInfo.checkControlPool
            while checkBoxIndex <= numVisibleCheckControls do
                local activityInfo = activityData[checkBoxIndex]
                local checkControl = checkControlPool:AcquireObject()
                checkControl:SetAlpha(activityInfo.complete and 1 or 0)
                checkControl:SetHidden(false)
                local name = GetZoneStoryActivityNameByActivityIndex(zoneId, completionType, activityInfo.activityIndex)
                checkControl.label:SetText(zo_strformat(SI_ZONE_STORY_LIST_TOOLTIP_ACTIVITY_NAME_FORMATTER, name))
                ZO_Achievements_ApplyTextColorToLabel(checkControl.label, activityInfo.complete, ZO_SELECTED_TEXT)
                -- check if we need to start a new column
                if checkBoxIndex > numControlsPerColumn * numActivityColumnsAdded then
                    local newColumnControl = columnPool:AcquireObject()
                    newColumnControl:SetAnchor(TOPLEFT, columnControl, TOPRIGHT, COLUMN_PADDING_X)
                    columnControl = newColumnControl
                    previousControl = nil
                    numActivityColumnsAdded = numActivityColumnsAdded + 1
                end
                checkControl:SetParent(columnControl)
                if previousControl then
                    checkControl:SetAnchor(TOPLEFT, previousControl, BOTTOMLEFT, 0, ROW_PADDING_Y)
                else
                    checkControl:SetAnchor(TOPLEFT)
                end
                previousControl = checkControl
                checkBoxIndex = checkBoxIndex + 1
            end
            if addAdditionalActivitiesControl then
                -- since the data has been sorted so all the completed activities are at the end
                -- if the first hidden activity is complete then all the others must be as well
                local allHiddenActivitesComplete = activityData[numVisibleCheckControls + 1].complete
                local checkControl = checkControlPool:AcquireObject()
                ZO_Achievements_ApplyTextColorToLabel(checkControl.label, allHiddenActivitesComplete, ZO_SELECTED_TEXT)
                local numHiddenActivities = numUnblockedActivities - numVisibleCheckControls
                checkControl.label:SetText(zo_strformat(SI_ZONE_STORY_LIST_TOOLTIP_ADDITIONAL_ACTVITIES_FORMATTER, numHiddenActivities))
                checkControl:SetAlpha(allHiddenActivitesComplete and 1 or 0)
                checkControl:SetHidden(false)
                -- this should always be the last control in the current column, so no need
                -- to check if we need a new column
                checkControl:SetParent(columnControl)
                checkControl:SetAnchor(TOPLEFT, previousControl, BOTTOMLEFT, 0, ROW_PADDING_Y)
            end
        end
        activityCompletionListTooltipInfo.listControl:SetHidden(numUnblockedActivities == 0)
        local blockedBranchRequirementLabel = activityCompletionListTooltipInfo.blockedBranchRequirementLabel
        if blockingBranchErrorStringId == 0 then
            blockedBranchRequirementLabel:SetHidden(true)
        else
            local PADDING_Y = 10
            local MIN_WIDTH = 250
            local MAX_WIDTH = 330
            local AUTO_SIZE = 0
            blockedBranchRequirementLabel:ClearAnchors()
            if numUnblockedActivities == 0 then
                blockedBranchRequirementLabel:SetAnchor(TOPLEFT, activityCompletionListTooltipInfo.titleControl, BOTTOMLEFT, 0, PADDING_Y)
                blockedBranchRequirementLabel:SetDimensionConstraints(MIN_WIDTH, AUTO_SIZE, MAX_WIDTH, AUTO_SIZE)
            else
                blockedBranchRequirementLabel:SetAnchor(TOPLEFT, activityCompletionListTooltipInfo.listControl, BOTTOMLEFT, 0, PADDING_Y)
                -- numActivityColumnsAdded should never be 0 here because numUnblockedActivities == 0 means there shouldn't be any columns added
                if numActivityColumnsAdded == 1 then
                    blockedBranchRequirementLabel:SetDimensionConstraints(MIN_WIDTH, AUTO_SIZE, MAX_WIDTH, AUTO_SIZE)
                else
                    blockedBranchRequirementLabel:SetAnchor(TOPRIGHT, activityCompletionListTooltipInfo.listControl, BOTTOMRIGHT, 0, PADDING_Y)
                    blockedBranchRequirementLabel:SetDimensionConstraints(AUTO_SIZE, AUTO_SIZE, AUTO_SIZE, AUTO_SIZE)
                end
            end
            
            local errorStringText = GetErrorString(blockingBranchErrorStringId)
            blockedBranchRequirementLabel:SetText(errorStringText)
            blockedBranchRequirementLabel:SetHidden(false)
        end
    end
    function ZO_ZoneStories_Keyboard:HideActivityCompletionTooltip()
        self.activityCompletionTooltipInfo.control:SetHidden(true)
        self.activityCompletionListTooltipInfo.control:SetHidden(true)
        ACHIEVEMENTS:HideAchievementDetailedTooltip()
    end
    function ZO_ZoneStories_Keyboard:IncrementActivityCompletionTooltip()
        local activityCompletionTooltipInfo = self.activityCompletionTooltipInfo
        local zoneId = activityCompletionTooltipInfo.currentZoneId
        local completionType = activityCompletionTooltipInfo.currentCompletionType
        local tooltipIndex = activityCompletionTooltipInfo.currentIndex
        tooltipIndex = tooltipIndex + 1
    
        local numAchievements = GetNumAssociatedAchievementsForZoneCompletionType(zoneId, completionType)
        if tooltipIndex > numAchievements then
            tooltipIndex = INITIAL_INDEX
        end
        self:UpdateActivityCompletionTooltip(tooltipIndex)
    end
    function ZO_ZoneStories_Keyboard:UpdateActivityCompletionTooltip(tooltipIndex)
        local activityCompletionTooltipInfo = self.activityCompletionTooltipInfo
        local zoneId = activityCompletionTooltipInfo.currentZoneId
        local completionType = activityCompletionTooltipInfo.currentCompletionType
        local achievementId = GetAssociatedAchievementIdForZoneCompletionType(zoneId, completionType, tooltipIndex)
        ACHIEVEMENTS:ShowAchievementDetailedTooltip(achievementId, activityCompletionTooltipInfo.anchor)
        activityCompletionTooltipInfo.currentIndex = tooltipIndex
    end
end
    ZONE_STORIES_KEYBOARD = ZO_ZoneStories_Keyboard:New(control)
end
    ZONE_STORIES_KEYBOARD:TrackNextActivity()
    ZONE_STORIES_KEYBOARD:BuildZonesList()
end
    ZONE_STORIES_KEYBOARD:BuildZonesList()
end
    ZONE_STORIES_KEYBOARD:SetKeyboardActivityCompletionTooltipInfo(control)
end
end