moved download button

This commit is contained in:
Chr1Z93 2023-10-16 00:29:06 +02:00
parent 7673a593b3
commit 11f59ebe1c
2 changed files with 145 additions and 118 deletions

View File

@ -43,10 +43,21 @@ local hideTitleSplashWaitFunctionId = nil
-- online functionality related variables
local MOD_VERSION = "3.3.0"
local SOURCE_REPO = 'https://raw.githubusercontent.com/chr1z93/loadable-objects/main'
local library, requestObj, modMeta, notificationVisible, latestPreviewUpdate
local downloadWindowVisible = false
local optionPanelVisible = false
local library, requestObj, modMeta, contentToShow, currentListItem
local acknowledgedUpgradeVersions = {}
local xmlVisibility = {
updateNotification = false,
downloadWindow = false,
previewWindow = false,
optionPanel = false
}
local idTable = {
tab1 = "campaigns",
tab2 = "scenarios",
tab3 = "fanmadeCampaigns",
tab4 = "fanmadeScenarios",
tab5 = "fanmadePlayerCards"
}
-- optionPanel data
optionPanel = {}
@ -626,30 +637,58 @@ end
-- Content Importing and XML functions
---------------------------------------------------------
-- forwards the requested content type to the update function
---@param player LuaPlayer Player that triggered this
---@param contentToShow String Name of the content type to show
-- forwards the requested content type to the update function and sets highlight to clicked tab
---@param id String Id of the clicked tab
function onClick_tab(player, contentToShow, id)
-- sets highlight to clicked tab
local idTable = {"tab1", "tab2","tab3","tab4","tab5"}
for _, listId in ipairs(idTable) do
function onClick_tab(_, _, id)
local contentToShow
for listId, listContent in pairs(idTable) do
if listId == id then
UI.setClass(listId, 'downloadTab activeTab')
contentToShow = listContent
else
UI.setClass(listId, 'downloadTab')
end
end
update_list(contentToShow)
-- select the first item
Wait.time(function() onClick_select(_, _, contentToShow .. "_1") end, 0.1)
end
-- click function for the items in the download window
function onClick_select(player, param)
local parsed = parseKey(param) or {}
local contentToShow = parsed.contentToShow
local index = parsed.index
if not contentToShow or not index then return end
startContentDownload(library[contentToShow][index])
-- updates backgroundcolor for row panel and fontcolor for list item
function onClick_select(_, _, id)
if currentListItem then
UI.setAttribute("panel" .. currentListItem, "color", "clear")
UI.setAttribute(contentToShow .. "_" .. currentListItem, "color", "white")
end
-- update contentToShow & currentListItem
parseKey(id)
UI.setAttribute("panel" .. currentListItem, "color", "grey")
UI.setAttribute(contentToShow .. "_" .. currentListItem, "color", "black")
updateAndShowPreviewWindow()
end
-- parses the identification key (contentToShow_currentListItem)
function parseKey(unparsedStr)
contentToShow = nil
currentListItem = nil
for str in string.gmatch(unparsedStr, "([^_]+)") do
if not contentToShow then
-- grab the first part to know the content type
contentToShow = str
else
-- get the index
currentListItem = tonumber(str)
break
end
end
end
function onClick_download()
startContentDownload(library[contentToShow][currentListItem])
end
-- download requested content
@ -660,11 +699,20 @@ function startContentDownload(param)
end
function downloadCoroutine()
-- show progress bar
UI.setAttribute('download_button', 'active', false)
UI.setAttribute('download_progress', 'active', true)
-- update progress bar
while requestObj do
UI.setAttribute('download_progress', 'percentage', requestObj.download_progress * 100)
coroutine.yield(0)
end
UI.setAttribute('download_progress', 'percentage', 100)
-- hide progress bar
UI.setAttribute('download_button', 'active', true)
UI.setAttribute('download_progress', 'active', false)
return 1
end
@ -675,46 +723,33 @@ function onClick_toggleUi(player, title)
if title == "Navigation Overlay" then
navigationOverlayApi.cycleVisibility(player.color)
elseif title == "Downloadable Content" then
if downloadWindowVisible then
if xmlVisibility.downloadWindow then
UI.hide('downloadWindow')
UI.hide("previewWindow")
else
if xmlVisibility.previewWindow then
UI.show("previewWindow")
end
UI.show('downloadWindow')
end
downloadWindowVisible = not downloadWindowVisible
xmlVisibility.downloadWindow = not xmlVisibility.downloadWindow
elseif title == "Options" then
if optionPanelVisible then
if xmlVisibility.optionPanel then
UI.hide('optionPanel')
else
UI.show('optionPanel')
end
optionPanelVisible = not optionPanelVisible
xmlVisibility.optionPanel = not xmlVisibility.optionPanel
end
end
-- hides the content preview window when moving the mouse out of the main window
function onMouseExit_window()
-- updates + shows the preview window
function updateAndShowPreviewWindow()
xmlVisibility.previewWindow = false
UI.hide("previewWindow")
end
-- updates the preview window when mousing over any item in the table
function onMouseEnter_item(player, param)
-- only update once per request
if param == latestPreviewUpdate then return end
latestPreviewUpdate = param
-- hide window in case data is incomplete
UI.hide("previewWindow")
-- parse parameters
local parsed = parseKey(param) or {}
local contentToShow = parsed.contentToShow
local index = parsed.index
if not contentToShow or not index then return end
-- get metadata from library
local item = library[contentToShow][index]
local item = library[contentToShow][currentListItem]
-- error handling (only author + description can by empty)
if not item
@ -759,17 +794,17 @@ function onMouseEnter_item(player, param)
-- update the preview window height according to box size
local hWindow, hArt, offsetXY
if item.boxsize == "big" then
hWindow = 510
hWindow = 560
hArt = 300
offsetXY = "-510 135"
offsetXY = "-476 120"
elseif item.boxsize == "small" then
hWindow = 510
hWindow = 560
hArt = 300
offsetXY = "-510 135"
offsetXY = "-476 120"
elseif item.boxsize == "wide" then
hWindow = 360
hWindow = 410
hArt = 150
offsetXY = "-510 210"
offsetXY = "-476 195"
end
UI.setAttributes("previewArtMask", maskData)
@ -780,28 +815,10 @@ function onMouseEnter_item(player, param)
})
-- show the window
xmlVisibility.previewWindow = true
UI.show("previewWindow")
end
-- parses the identification key (contentToShow_index) and returns the result
function parseKey(unparsedStr)
local contentToShow, index
for str in string.gmatch(unparsedStr, "([^_]+)") do
if not contentToShow then
-- grab the first part to know the content type
contentToShow = str
else
-- get the index
index = tonumber(str)
break
end
end
return {
contentToShow = contentToShow,
index = index
}
end
-- formats the json response from the webrequest into a key-value lua table
-- strips the prefix from the community content items
function formatLibrary(json_response)
@ -852,31 +869,27 @@ function update_list(contentToShow)
UI.setValue("title", "Downloadable Content: " .. cleanName[contentToShow])
-- addition of list items according to library file
local childrenTable = {}
local ui = UI.getXmlTable()
local update_point = find_tag_with_id(ui, 'ui_update_point')
update_point.children = {}
for i, v in ipairs(library[contentToShow]) do
local key = contentToShow .. "_" .. i
table.insert(childrenTable,
table.insert(update_point.children,
{
tag = "Panel",
attributes = { id = "panel" .. i },
children = {
tag = 'Text',
value = v.name,
attributes = {
onClick = 'onClick_select(' .. key .. ')',
onMouseEnter = "onMouseEnter_item(" .. key .. ")",
id = contentToShow .. "_" .. i,
onClick = 'onClick_select',
alignment = 'MiddleLeft'
}
}
})
end
local ui = UI.getXmlTable()
local update_point = find_tag_with_id(ui, 'ui_update_point')
update_point.children = {
tag = 'VerticalLayout',
attributes = {
padding = "10 10 0 0"
},
children = childrenTable
}
update_point.attributes.height = #childrenTable * 24
update_point.attributes.height = #update_point.children * 25
UI.setXmlTable(ui)
end
@ -920,7 +933,7 @@ function complete_obj_download(request, param)
end
-- the download button on the placeholder objects calls this to directly initiate a download
---@param param Table contains url and guid of replacement object, which happens to match what onClick_select wants
---@param param Table contains url and guid of replacement object
function placeholder_download(param)
startContentDownload(param)
end
@ -1287,12 +1300,12 @@ end
-- triggered by clicking on the Finn Icon
function onClick_FinnIcon()
if notificationVisible then
if xmlVisibility.updateNotification then
UI.hide("updateNotification")
notificationVisible = false
xmlVisibility.updateNotification = false
else
UI.show("updateNotification")
notificationVisible = true
xmlVisibility.updateNotification = true
end
end

View File

@ -3,6 +3,7 @@
<Button class="downloadTab"
hoverClass="hover"
pressClass="press"
onClick="onClick_tab"
color="#888888"
fontSize="24"
font="font_teutonic-arkham"/>
@ -10,7 +11,8 @@
color="grey"/>
<Button class="press"
color="white"/>
<Button class="select"
color="white"/>
<Button class="activeTab"
color="#ffffff"/>
</Defaults>
@ -21,8 +23,8 @@
color="black"
active="false"
onMouseExit="onMouseExit_window"
width="700"
height="780"
width="650"
height="800"
outlineSize="1 1"
outline="#303030">
@ -50,42 +52,30 @@
padding="5"
spacing="5">
<Button class="downloadTab activeTab"
id="tab1"
onClick="onClick_tab(campaigns)">Official Campaigns</Button>
id="tab1">Official Campaigns</Button>
<Button class="downloadTab"
id="tab2"
onClick="onClick_tab(scenarios)">Official Scenarios</Button>
id="tab2">Official Scenarios</Button>
<Button class="downloadTab"
id="tab3"
onClick="onClick_tab(fanmadeCampaigns)">Fan-Made Campaigns</Button>
id="tab3">Fan-Made Campaigns</Button>
<Button class="downloadTab"
id="tab4"
onClick="onClick_tab(fanmadeScenarios)">Fan-Made Scenarios</Button>
id="tab4">Fan-Made Scenarios</Button>
<Button class="downloadTab"
id="tab5"
onClick="onClick_tab(fanmadePlayerCards)">Fan-Made Player Cards</Button>
id="tab5">Fan-Made Player Cards</Button>
</HorizontalLayout>
<!-- content list -->
<VerticalScrollView color="transparent"
minHeight="100"
flexibleHeight="100"
scrollSensitivity="24">
<Panel id="ui_update_point">
scrollSensitivity="25"
scrollbarColors="grey|grey|#C8C8C8|rgba(0.78,0.78,0.78,0.5)"
horizontalScrollbarVisibility="AutohideAndExpandViewport">
<VerticalLayout id="ui_update_point"
padding="10 25 0 0"
spacing="1">
<!-- this will be filled via scripting -->
</Panel>
</VerticalLayout>
</VerticalScrollView>
<!-- download progress bar -->
<Panel preferredHeight="50"
padding="5">
<ProgressBar id="download_progress"
height="40"
percentage="0"
color="#111111"
textColor="#aaaaaa"
fillImageColor="#333333"/>
</Panel>
</VerticalLayout>
<!-- content preview window (displayed on hover of list items) -->
@ -94,11 +84,11 @@
color="black"
active="false"
width="300"
height="510"
height="560"
padding="15 15 5 5"
outlineSize="1 1"
outline="#303030"
offsetXY="-510 135">
offsetXY="-476 120">
<!-- header -->
<VerticalLayout preferredHeight="100">
@ -142,4 +132,28 @@
fontSize="20"
font="font_teutonic-arkham">PreviewDescription</Text>
</Panel>
<!-- download button / progress bar (visibility handled by lua code)-->
<Panel preferredHeight="50"
padding="5">
<!-- download progress bar -->
<ProgressBar id="download_progress"
active="false"
height="40"
percentage="0"
color="#111111"
textColor="#aaaaaa"
fillImageColor="#333333"/>
<!-- download button -->
<Button id="download_button"
hoverClass="hover"
pressClass="press"
selectClass="select"
onClick="onClick_download"
color="#888888"
height="40"
width="250"
fontSize="24"
font="font_teutonic-arkham">Download</Button>
</Panel>
</VerticalLayout>