CINXE.COM
[GUI] various questions on lining stuff up - The Battle for Wesnoth Forums
<!DOCTYPE html> <html dir="ltr" lang="en-gb"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>[GUI] various questions on lining stuff up - The Battle for Wesnoth Forums</title> <link rel="alternate" type="application/atom+xml" title="Feed - The Battle for Wesnoth Forums" href="/app.php/feed?sid=4e812bd71f093091df5bbe7995b45742"> <link rel="alternate" type="application/atom+xml" title="Feed - News" href="/app.php/feed/news?sid=4e812bd71f093091df5bbe7995b45742"> <link rel="alternate" type="application/atom+xml" title="Feed - All forums" href="/app.php/feed/forums?sid=4e812bd71f093091df5bbe7995b45742"> <link rel="alternate" type="application/atom+xml" title="Feed - New Topics" href="/app.php/feed/topics?sid=4e812bd71f093091df5bbe7995b45742"> <link rel="alternate" type="application/atom+xml" title="Feed - Forum - Lua Labs" href="/app.php/feed/forum/58?sid=4e812bd71f093091df5bbe7995b45742"> <link rel="alternate" type="application/atom+xml" title="Feed - Topic - [GUI] various questions on lining stuff up" href="/app.php/feed/topic/58000?sid=4e812bd71f093091df5bbe7995b45742"> <link rel="canonical" href="https://forums.wesnoth.org/viewtopic.php?t=58000"> <!-- phpBB style name: prosilver Special Edition Based on style: prosilver (this is the default phpBB3 style) Original author: Tom Beddard ( http://www.subBlue.com/ ) Modified by: phpBB Limited ( https://www.phpbb.com/ ) --> <link href="./styles/prosilver/theme/normalize.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/base.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/utilities.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/common.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/links.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/content.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/buttons.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/cp.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/forms.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/icons.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/colours.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/responsive.css?assets_version=264" rel="stylesheet"> <link href="./assets/css/font-awesome.min.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver_se/theme/stylesheet.css?assets_version=264" rel="stylesheet"> <link href="./styles/prosilver/theme/en/stylesheet.css?assets_version=264" rel="stylesheet"> <link href="./assets/cookieconsent/cookieconsent.min.css?assets_version=264" rel="stylesheet"> <!--[if lte IE 9]> <link href="./styles/prosilver/theme/tweaks.css?assets_version=264" rel="stylesheet"> <![endif]--> <link rel="apple-touch-icon" type="image/png" href="https://www.wesnoth.org/wesmere/img/apple-touch-icon.png" sizes="180x180" /> <link rel="icon" type="image/png" href="https://www.wesnoth.org/wesmere/img/favicon-32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="https://www.wesnoth.org/wesmere/img/favicon-16.png" sizes="16x16" /> <meta name="theme-color" content="#0f1421" /> <link href="https://www.wesnoth.org/wesmere/css/forums-1.2.0.css" rel="stylesheet" type="text/css" /> <style> /* * phpBB overrides */ #page-header > .headerbar { display: none!important; } body { padding-top: 0; } /*.search-header { margin-top: 0; margin-right: 0; box-shadow: 0 0 2px #0075B0; }*/ </style> </head> <body id="phpbb" class="nojs notouch section-viewtopic ltr "> <div id="wesmere-embed"> <div id="nav" role="banner"> <div class="centerbox"> <div id="logo"> <a href="https://www.wesnoth.org/" aria-label="Wesnoth logo"></a> </div> <ul id="navlinks" role="navigation"> <li><a href="https://www.wesnoth.org/">Home</a></li> <li><a href="https://forums.wesnoth.org/viewforum.php?f=62">News</a></li> <li><a href="https://wiki.wesnoth.org/Play">Play</a></li> <li><a href="https://wiki.wesnoth.org/Create">Create</a></li> <li><a href="https://forums.wesnoth.org/">Forums</a></li> <li><a href="https://wiki.wesnoth.org/Project">About</a></li> </ul> <div id="sitesearch" role="search"> <form method="get" action="./search.php?sid=4e812bd71f093091df5bbe7995b45742"> <input id="searchbox" class="has-advanced-search" type="search" name="keywords" placeholder="Search" title="Search these forums [Alt+Shift+f]" accesskey="f" /> <span id="searchbox-controls"> <button id="search-go" class="search-button" type="submit" title="Search"> <i class="fa fa-fw fa-search search-icon" aria-hidden="true"></i> <span class="sr-label">Search</span> </button> <a id="search-opts" class="search-button" href="./search.php?sid=4e812bd71f093091df5bbe7995b45742" title="Advanced search"> <i class="fa fa-fw fa-cog advsearch-icon" aria-hidden="true"></i> <span class="sr-label">Advanced search</span> </a> </span> </form> </div> <div class="reset"></div> </div> </div> </div> <div id="content"> <div id="wrap" class="wrap"> <a id="top" class="top-anchor" accesskey="t"></a> <div id="page-header"> <div class="headerbar" role="banner"> <div class="inner"> <div id="site-description" class="site-description"> <a id="logo" class="logo" href="./index.php?sid=4e812bd71f093091df5bbe7995b45742" title="Forums"> <span class="site_logo"></span> </a> <h1>The Battle for Wesnoth Forums</h1> <p>The official forums for The Battle for Wesnoth.</p> <p class="skiplink"><a href="#start_here">Skip to content</a></p> </div> <div id="search-box" class="search-box search-header" role="search"> <form action="./search.php?sid=4e812bd71f093091df5bbe7995b45742" method="get" id="search"> <fieldset> <input name="keywords" id="keywords" type="search" maxlength="128" title="Search for keywords" class="inputbox search tiny" size="20" value="" placeholder="Search…" /> <button class="button button-search" type="submit" title="Search"> <i class="icon fa-search fa-fw" aria-hidden="true"></i><span class="sr-only">Search</span> </button> <a href="./search.php?sid=4e812bd71f093091df5bbe7995b45742" class="button button-search-end" title="Advanced search"> <i class="icon fa-cog fa-fw" aria-hidden="true"></i><span class="sr-only">Advanced search</span> </a> <input type="hidden" name="sid" value="4e812bd71f093091df5bbe7995b45742" /> </fieldset> </form> </div> </div> </div> <div class="navbar" role="navigation"> <div class="inner"> <ul id="nav-main" class="nav-main linklist" role="menubar"> <li id="quick-links" class="quick-links dropdown-container responsive-menu" data-skip-responsive="true"> <a href="#" class="dropdown-trigger"> <i class="icon fa-bars fa-fw" aria-hidden="true"></i><span>Quick links</span> </a> <div class="dropdown"> <div class="pointer"><div class="pointer-inner"></div></div> <ul class="dropdown-contents" role="menu"> <li class="separator"></li> <li> <a href="./search.php?search_id=unanswered&sid=4e812bd71f093091df5bbe7995b45742" role="menuitem"> <i class="icon fa-file-o fa-fw icon-gray" aria-hidden="true"></i><span>Unanswered topics</span> </a> </li> <li> <a href="./search.php?search_id=active_topics&sid=4e812bd71f093091df5bbe7995b45742" role="menuitem"> <i class="icon fa-file-o fa-fw icon-blue" aria-hidden="true"></i><span>Active topics</span> </a> </li> <li class="separator"></li> <li> <a href="./search.php?sid=4e812bd71f093091df5bbe7995b45742" role="menuitem"> <i class="icon fa-search fa-fw" aria-hidden="true"></i><span>Search</span> </a> </li> <li class="separator"></li> </ul> </div> </li> <li data-skip-responsive="true"> <a href="/app.php/help/faq?sid=4e812bd71f093091df5bbe7995b45742" rel="help" title="Frequently Asked Questions" role="menuitem"> <i class="icon fa-question-circle fa-fw" aria-hidden="true"></i><span>FAQ</span> </a> </li> <li data-last-responsive="true"> <a href="https://forums.wesnoth.org/viewtopic.php?t=24277&sid=4e812bd71f093091df5bbe7995b45742" rel="help" title="View the Community Guidelines" role="menuitem"> <i class="icon fa-book fa-fw" aria-hidden="true"></i><span>Community Guidelines</span> </a> </li> <li class="rightside" data-skip-responsive="true"> <a href="./ucp.php?mode=login&redirect=viewtopic.php%3Fp%3D692903&sid=4e812bd71f093091df5bbe7995b45742" title="Login" accesskey="x" role="menuitem"> <i class="icon fa-power-off fa-fw" aria-hidden="true"></i><span>Login</span> </a> </li> <li class="rightside" data-skip-responsive="true"> <a href="./ucp.php?mode=register&sid=4e812bd71f093091df5bbe7995b45742" role="menuitem"> <i class="icon fa-pencil-square-o fa-fw" aria-hidden="true"></i><span>Register</span> </a> </li> </ul> <ul id="nav-breadcrumbs" class="nav-breadcrumbs linklist navlinks" role="menubar"> <li class="breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList"> <span class="crumb" itemtype="https://schema.org/ListItem" itemprop="itemListElement" itemscope><a itemprop="item" href="./index.php?sid=4e812bd71f093091df5bbe7995b45742" accesskey="h" data-navbar-reference="index"><i class="icon fa-home fa-fw"></i><span itemprop="name">Forums</span></a><meta itemprop="position" content="1" /></span> <span class="crumb" itemtype="https://schema.org/ListItem" itemprop="itemListElement" itemscope data-forum-id="26"><a itemprop="item" href="./viewforum.php?f=26&sid=4e812bd71f093091df5bbe7995b45742"><span itemprop="name">Development</span></a><meta itemprop="position" content="2" /></span> <span class="crumb" itemtype="https://schema.org/ListItem" itemprop="itemListElement" itemscope data-forum-id="58"><a itemprop="item" href="./viewforum.php?f=58&sid=4e812bd71f093091df5bbe7995b45742"><span itemprop="name">Lua Labs</span></a><meta itemprop="position" content="3" /></span> </li> <li class="rightside responsive-search"> <a href="./search.php?sid=4e812bd71f093091df5bbe7995b45742" title="View the advanced search options" role="menuitem"> <i class="icon fa-search fa-fw" aria-hidden="true"></i><span class="sr-only">Search</span> </a> </li> </ul> </div> </div> </div> <a id="start_here" class="anchor"></a> <div id="page-body" class="page-body" role="main"> <h2 class="topic-title"><a href="./viewtopic.php?t=58000&sid=4e812bd71f093091df5bbe7995b45742">[GUI] various questions on lining stuff up</a></h2> <!-- NOTE: remove the style="display: none" when you want to have the forum description on the topic body --> <div style="display: none !important;">Discussion of Lua and <a class="postlink" href="//wiki.wesnoth.org/LuaWML">LuaWML</a> support, development, and ideas.<br /></div> <p> <strong>Moderator:</strong> <a style="color:#008000;" href="./memberlist.php?mode=group&g=6643&sid=4e812bd71f093091df5bbe7995b45742">Forum Moderators</a> </p> <div class="action-bar bar-top"> <a href="./posting.php?mode=reply&t=58000&sid=4e812bd71f093091df5bbe7995b45742" class="button" title="Post a reply"> <span>Post Reply</span> <i class="icon fa-reply fa-fw" aria-hidden="true"></i> </a> <div class="search-box" role="search"> <form method="get" id="topic-search" action="./search.php?sid=4e812bd71f093091df5bbe7995b45742"> <fieldset> <input class="inputbox search tiny" type="search" name="keywords" id="search_keywords" size="20" placeholder="Search this topic…" /> <button class="button button-search" type="submit" title="Search"> <i class="icon fa-search fa-fw" aria-hidden="true"></i><span class="sr-only">Search</span> </button> <a href="./search.php?sid=4e812bd71f093091df5bbe7995b45742" class="button button-search-end" title="Advanced search"> <i class="icon fa-cog fa-fw" aria-hidden="true"></i><span class="sr-only">Advanced search</span> </a> <input type="hidden" name="t" value="58000" /> <input type="hidden" name="sf" value="msgonly" /> <input type="hidden" name="sid" value="4e812bd71f093091df5bbe7995b45742" /> </fieldset> </form> </div> <div class="pagination"> 3 posts • Page <strong>1</strong> of <strong>1</strong> </div> </div> <div id="p688087" class="post has-profile bg2"> <div class="inner"> <dl class="postprofile" id="profile688087"> <dt class="no-profile-rank no-avatar"> <div class="avatar-container"> </div> <a href="./memberlist.php?mode=viewprofile&u=165464&sid=4e812bd71f093091df5bbe7995b45742" class="username">white_haired_uncle</a> </dt> <dd class="profile-posts"><strong>Posts:</strong> <a href="./search.php?author_id=165464&sr=posts&sid=4e812bd71f093091df5bbe7995b45742">1453</a></dd> <dd class="profile-joined"><strong>Joined:</strong> August 26th, 2018, 11:46 pm</dd> <dd class="profile-custom-field profile-phpbb_location"><strong>Location:</strong> A country place, far outside the Wire</dd> </dl> <div class="postbody"> <div id="post_content688087"> <h3 class="first"> <a href="./viewtopic.php?p=688087&sid=4e812bd71f093091df5bbe7995b45742#p688087">[GUI] various questions on lining stuff up</a> </h3> <ul class="post-buttons"> <li> <a href="./posting.php?mode=quote&p=688087&sid=4e812bd71f093091df5bbe7995b45742" title="Reply with quote" class="button button-icon-only"> <i class="icon fa-quote-left fa-fw" aria-hidden="true"></i><span class="sr-only">Quote</span> </a> </li> </ul> <p class="author"> <a class="unread" href="./viewtopic.php?p=688087&sid=4e812bd71f093091df5bbe7995b45742#p688087" title="Post"> <i class="icon fa-file fa-fw icon-lightgray icon-md" aria-hidden="true"></i><span class="sr-only">Post</span> </a> <span class="responsive-hide">by <strong><a href="./memberlist.php?mode=viewprofile&u=165464&sid=4e812bd71f093091df5bbe7995b45742" class="username">white_haired_uncle</a></strong> » </span><time datetime="2024-04-02T03:09:26+00:00">April 2nd, 2024, 3:09 am</time> </p> <div class="content">At this point, I simply detest trying to get anything to line up nicely in a gui. After countless hours of error and trial, I've come no closer to having even a theory about how this stuff works.<br> <br> I have two lists of units. In the right column, a header and a list of units on the recall list. It's a treeview, because that's the only thing I was able to use for which I could find a way to get the names to line up neatly all left aligned. In the left column, I have a header, a (treeview) list of units that will be automatically recalled at the start of a scenario, and a multi_page that will hold either a spacer (big blank spot when nothing is selected) or a unit_preview_pane displaying the selected unit.<br> <br> Issue #1. How do I force the headers (yellow text) to line up vertically? I've had a tiny bit of success with linked_groups getting things to line up horizontally, but that's mostly luck at this point. The "header_label" linked groups are my failed attempt.<br> <div class="inline-attachment"> <dl class="thumbnail"> <dt><a href="./download/file.php?id=97219&sid=4e812bd71f093091df5bbe7995b45742&mode=view"><img src="./download/file.php?id=97219&t=1&sid=4e812bd71f093091df5bbe7995b45742" class="postimage" alt="The beginning, nothing selected." title="autorecall1.png (418.7 KiB) Viewed 4012 times" /></a></dt> <dd> The beginning, nothing selected.</dd> </dl> </div> Issue #2. When I select a unit, the unit_preview_pane sizes itself based on some rules I haven't figured out. Might be something like "if you can fit everything you have on the screen without using a scrollbar, but leaving at least ONE visible unit listed in the treeview above, take as much space as you need. What I'd really like to say is "treeview, your height is X, mp your height is Y. Always. Deal with it." (My gut says I'd prefer height in %, I'd settle for pixels). I don't want anything re-sizing itself, I want to define the layout.<br> <br> I'll select item 12 from the list on the left for example. Not at all what I want.<br> <div class="inline-attachment"> <dl class="thumbnail"> <dt><a href="./download/file.php?id=97220&sid=4e812bd71f093091df5bbe7995b45742&mode=view"><img src="./download/file.php?id=97220&t=1&sid=4e812bd71f093091df5bbe7995b45742" class="postimage" alt="Take all the space you need there partner." title="autorecall2.png (427.42 KiB) Viewed 4012 times" /></a></dt> <dd> Take all the space you need there partner.</dd> </dl> </div> Issue #3. I've selected item 12 on the list on the left, but you can't see that above. The list got scrunched and a scrollbar added, but the focus is not on the selected entry. Can I force this? I really do want to see which I have selected.<br> <br> Also, those up and down buttons move selected units up or down on the left list (unit stays selected, but its position in list moves). If the selected unit moves to a place where it can't be seen without moving the scrollbar, the focus doesn't go with it and the bar doesn't move automatically.<br> <br> I suspect this issue might have something to do with the fact that I'm using a treeview and sort of forcing it to act like a listbox. I'm not against using a listbox, that's what I started with, but I couldn't get the names to line up (I think I might be able to now based on something similar I'm also working on).<br> <br> I'll apologize for the code now. It's a WIP, I barely know what I'm doing, and I'm still trying to develop a style which is readable but saves real estate. I wish I could cut out all the non-relevant stuff, but I'd probably mess something up so here it is warts and all.<br> <div class="codebox"><p>Code: <a href="#" onclick="selectCode(this); return false;">Select all</a></p><pre><code>function wesnoth.wml_actions.autorecall_menu() -- luacheck: ignore 612 -- luacheck: ignore 614 -- TODO: up/down -> repeating_button -- TODO: dismiss button??? -- TODO: clean up abilities: [2], formatting, don't show header if no ability[2].name, fix/confirm remove/add -- TODO: Check the whole unit -> unit.__cfg and all that, may not be necessary now using wesnoth.units.find -- (might assume old menu will not be used) local gold = wesnoth.sides[wesnoth.current.side].gold local max_autorecall = wml.variables.max_autorecall or 8 local next_autorecall_price local function update_next_autorecall_price() next_autorecall_price = 100 * (max_autorecall - 7) if wesnoth.scenario.difficulty == "EASY" then next_autorecall_price = math.floor(next_autorecall_price / 1.5) elseif wesnoth.scenario.difficulty == "NORMAL" then next_autorecall_price = math.floor(next_autorecall_price / 1.2) end end update_next_autorecall_price() local ar_list = wml.array_access.get "autorecall" local av_list = {} -- Create list of available units local on_ar = {} for _,unit in pairs(ar_list) do on_ar[unit.id] = true end local our_team = wesnoth.units.find{ side = wesnoth.current.side } for _,unit in pairs(our_team) do if not on_ar[unit.id] and unit.id ~= 'Efraim' and unit.id ~= 'Lethalia' and unit.id ~= 'akulas_sister' and unit.id ~= 'Lethalia_evil' and unit.id ~= 'Lilith' then table.insert(av_list,unit.__cfg) end end -- autorecall list from older saves may not contain full unit data, update local new_ar = {} for _,oldunit in ipairs(ar_list) do local units = wesnoth.units.find{ id=oldunit.id } if #units == 1 then table.insert(new_ar,units[1].__cfg) end end ar_list = new_ar local ar_selected_index = nil local av_selected_index = nil local autorecall_treeview = T.tree_view { id = "ar_tv", T.node { id = "ar_node", T.node_definition { T.row { T.column { T.toggle_panel { id = "ar_tp", definition = "default", T.grid { T.row { T.column { T.label { id = "ar_position", text_alignment = "right", linked_group = "ar_position" } }, T.column { T.label { id = "ar_unit", linked_group = "ar_unit" } } }, T.row { T.column { T.spacer {} }, T.column { T.image { id = "ar_threshold" } } } } } } } } } } local avail_treeview = T.tree_view { id = "av_tv", T.node { id = "av_node", T.node_definition { T.row { T.column { T.toggle_panel { id = "av_tp", definition = "default", T.grid { T.row { T.column { T.label { id = "av_unit", linked_group = "av_unit" } } } } } } } } } } local empty_page = T.page_definition { id = "empty_page", T.row { T.column { T.spacer {} } } } local unit_info_frame = T.grid { T.row { T.column { T.unit_preview_pane { id = "unit_info_preview" } } } } local unit_info_page = T.page_definition { id = "unit_info_page", T.row { T.column { unit_info_frame } } } local unit_info_mp = T.multi_page { id = "unit_info_mp", empty_page, unit_info_page } local done = false while not done do local dialogDefinition = { T.tooltip { id = "tooltip" }, T.helptip { id = "tooltip_large" }, T.linked_group { id = "ar_position", fixed_width = true, }, T.linked_group { id = "ar_unit", fixed_width = true }, T.linked_group { id = "av_unit", fixed_width = true }, T.linked_group { id = "header_label", fixed_height = true }, T.grid { T.row { T.column { T.grid { T.row { T.column { id = 'autorecall_list', border = "right", border_size = 50, T.grid { T.row { T.column { T.label { linked_group = "header_label", use_markup = true, label = "<span size='large' color='yellow'>" .. _"Units to be Automatically Recalled (" .. #ar_list .. "/" .. max_autorecall .. ")</span>" } } }, T.row { T.column { border = "bottom", border_size = 5, autorecall_treeview } }, T.row { T.column { unit_info_mp } } } }, T.column { id = 'av_list', T.grid { T.row { T.column { T.label { linked_group = "header_label", use_markup=true, label = "<span size='large' color='yellow'>" .. _"Available Units (" .. #av_list .. ")</span>" } } }, T.row { T.column { avail_treeview } } } } } } } }, T.row { T.column { T.spacer { height = 25 } } }, T.row { T.column { T.grid { T.row { T.column { T.spacer { width = 10 } }, T.column { border = "right", border_size = 40, T.button { id = "add_slot", definition = "add", return_value_id = "ok", tooltip =_ "Buy space to automatically recall an additional unit" .. "\n" .. _"Need: " .. next_autorecall_price .. _" Have: " .. gold } }, T.column { border = "right", border_size = 10, T.button { id = "ar_up", return_value_id = "ok", definition = "up_arrow" } }, T.column { border = "right", border_size = 40, T.button { id = "ar_down", return_value_id = "ok", definition = "down_arrow" } }, T.column { T.spacer { width = 10 } }, T.column { border = "left,right", border_size = 10, T.button { id = "ar_remove", return_value_id = "ok", tooltip = "Remove unit from the autorecall list", definition = "right_arrow" } }, T.column { T.spacer { width = 100 } }, T.column { border = "right", border_size = 10, T.button { id = "ok_button", label =_ "OK", return_value = -99 } }, T.column { border = "right", border_size = 100, T.button { id = "cancel", label = "Cancel" } }, T.column { border = "right", border_size = 40, T.button { id = "av_remove", return_value_id = "ok", definition = "left_arrow", tooltip =_ "Move unit to the autorecall list" } }, T.column { T.button { id = "av_info", return_value_id = "ok", definition = "action_about" } } } } } } } } local function preshow(dialog) local function refresh_buttons() dialog.ar_up.enabled = false dialog.ar_down.enabled = false dialog.ar_remove.enabled = false dialog.av_remove.enabled = false dialog.av_info.enabled = false if ar_selected_index ~= nil then if ar_selected_index ~= 1 then dialog.ar_up.enabled = true end if ar_selected_index ~= #ar_list then dialog.ar_down.enabled = true end dialog.ar_remove.enabled = true elseif av_selected_index ~= nil then dialog.av_info.enabled = true dialog.av_remove.enabled = true end end local function refresh_multipage() local unit = nil if ar_selected_index ~= nil then unit = ar_list[ar_selected_index] elseif av_selected_index ~= nil then unit = av_list[av_selected_index] else return end dialog.unit_info_mp[2].unit_info_preview.unit = wesnoth.units.find{ id = unit.id }[1] dialog.unit_info_mp.selected_index = 2 end local function ar_unit_toggle(index) if dialog.ar_tv[index].ar_tp.selected == true then if ar_selected_index ~= nil then dialog.ar_tv[ar_selected_index].ar_tp.selected = false elseif av_selected_index ~= nil then dialog.av_tv[av_selected_index].av_tp.selected = false end ar_selected_index = index av_selected_index = nil dialog.unit_info_mp.selected_index = 2 else ar_selected_index = nil dialog.unit_info_mp.selected_index = 1 end refresh_buttons() refresh_multipage() end local function av_unit_toggle(index) if dialog.av_tv[index].av_tp.selected == true then if ar_selected_index ~= nil then dialog.ar_tv[ar_selected_index].ar_tp.selected = false elseif av_selected_index ~= nil then dialog.av_tv[av_selected_index].av_tp.selected = false end av_selected_index = index ar_selected_index = nil dialog.unit_info_mp.selected_index = 2 else av_selected_index = nil dialog.unit_info_mp.selected_index = 1 end refresh_buttons() refresh_multipage() end local function add_slot() local poor_msg =_ "You do not have enough gold to do that" if gold < next_autorecall_price then gui.show_prompt("",poor_msg) return end max_autorecall = max_autorecall + 1 gold = gold - next_autorecall_price update_next_autorecall_price() end local function move_up() -- move unit at ar_list[index] to ar_list[index-1] if ar_selected_index == 1 then return end local tmp for i,_ in ipairs(ar_list) do if i == ar_selected_index - 1 then tmp = ar_list[i] ar_list[i]=ar_list[ar_selected_index] elseif i == ar_selected_index then ar_list[ar_selected_index]=tmp end end ar_selected_index = ar_selected_index - 1 end local function move_down() -- move unit at ar_list[ar_selected_index] to ar_list[ar_selected_index+1] if ar_selected_index == #ar_list then return end local tmp for i,_ in ipairs(ar_list) do if i == ar_selected_index then tmp = ar_list[i] ar_list[i] = ar_list[i+1] elseif i == ar_selected_index + 1 then ar_list[i] = tmp end end ar_selected_index = ar_selected_index + 1 end local function switch_lists(cfg) -- remove unit from from[index], append to to[] local from = cfg.from local to = cfg.to local index = cfg.index local new_list = {} for i,unit in ipairs(from) do if i == index then table.insert(to,unit) else table.insert(new_list,unit) end end return new_list,to end local function show_inventory(cfg) -- Items menu local units = wesnoth.units.find(cfg) if #units < 1 then wml.error("show_inventory(): no units found.") end --open_inventory_dialog(units[1]) wesnoth.require("~add-ons/Legend_of_the_Invincibles/lua/inventory/dialog.lua").open_inventory_dialog(units[1]) end dialog.add_slot.on_button_click = add_slot dialog.ar_up.on_button_click = move_up dialog.ar_down.on_button_click = move_down dialog.ar_remove.on_button_click = function() ar_list,av_list= switch_lists({index=ar_selected_index,from=ar_list,to=av_list}) if ar_selected_index > #ar_list then ar_selected_index = #ar_list end end dialog.av_remove.on_button_click = function() av_list,ar_list= switch_lists({index=av_selected_index,from=av_list,to=ar_list}) av_selected_index = nil ar_selected_index = #ar_list end for i,unit in ipairs(ar_list) do -- This part may not be necessary since we already did it above local units = wesnoth.units.find{ id = unit.id } -- or what? better error handling here if #units < 1 then wesnoth.interface.add_chat_message(string.format("Ack! %s not found!",unit.id)) else dialog.ar_tv:add_item_of_type("ar_node") local markup = "" if i > max_autorecall then markup = "font-style='oblique'" end dialog.ar_tv[i].ar_position.marked_up_text = string.format("<span font_family='monospace'>%d) </span>",i) dialog.ar_tv[i].ar_unit.marked_up_text = string.format("<span %s>%s (%s)</span>",markup,units[1].name, units[1].__cfg.language_name) if i == max_autorecall then dialog.ar_tv[i].ar_threshold.label = "images/misc/blank.png~SCALE(1,10)" else dialog.ar_tv[i].ar_threshold.label = "images/misc/blank.png~SCALE(1,1)" end dialog.ar_tv[i].ar_tp.selected = false if ar_selected_index == i then dialog.ar_tv[i].ar_tp.selected = true end dialog.ar_tv[i].ar_tp.on_modified = function() ar_unit_toggle(i) end -- This works as long as you don't click on items in the inventory --dialog.autorecall_tv[i].ar_info.on_button_click = function() show_inventory({ id = unit.id }) end -- This works only for units on map --dialog.autorecall_tv[i].ar_info.on_button_click = function() wesnoth.game_events.fire("unit information", unit) end -- end end av_list = sort_unit_list(av_list) for i,unit in ipairs(av_list) do dialog.av_tv:add_item_of_type("av_node") dialog.av_tv[i].av_unit.label = string.format("%s (%s)",unit.name,unit.language_name) if av_selected_index == i then dialog.av_tv[i].av_tp.selected = true end dialog.av_tv[i].av_tp.on_modified = function() av_unit_toggle(i) end -- This works as long as you don't click on items in the inventory --dialog.av_tv[i].av_info.on_button_click = function() show_inventory({ id = unit.id }) end end dialog.unit_info_mp:add_item_of_type("empty_page") dialog.unit_info_mp:add_item_of_type("unit_info_page") refresh_multipage() refresh_buttons() end local ret_val = gui.show_dialog(dialogDefinition,preshow) if ret_val == -99 then -- the ok button wml.array_access.set("autorecall", ar_list) wesnoth.sides[wesnoth.current.side].gold = gold wml.variables.max_autorecall = max_autorecall done = true end if ret_val == -2 then done = true end -- cancel/escape - abort changes end end </code></pre></div> Just in case anyone should care to try it to see what I'm struggling with, I've attached a saved game and my changes to the addon (<a href="https://github.com/Dugy/Legend_of_the_Invincibles" class="postlink">https://github.com/Dugy/Legend_of_the_Invincibles</a>). Menu item "Configure Autorecall (New)"</div> <dl class="attachbox"> <dt> Attachments </dt> <dd> <dl class="file"> <dt><img src="./images/upload_icons/zip.gif" alt="" /> <a class="postlink" href="./download/file.php?id=97222&sid=4e812bd71f093091df5bbe7995b45742">LotI1-Prison.gz</a></dt> <dd>(429.45 KiB) Downloaded 110 times</dd> </dl> </dd> <dd> <dl class="file"> <dt><img src="./images/upload_icons/zip.gif" alt="" /> <a class="postlink" href="./download/file.php?id=97221&sid=4e812bd71f093091df5bbe7995b45742">new_menu.tar.bz2</a></dt> <dd><em>extract in addons/Legend_of_the_Invincibles</em></dd> <dd>(12.2 KiB) Downloaded 117 times</dd> </dl> </dd> </dl> <div id="sig688087" class="signature"><div style="text-align:center">Speak softly, and carry <a class="postlink" href="//wiki.wesnoth.org/LotI_Items#Doombringer_.E2.80.93_sword">Doombringer</a>.</div></div> </div> </div> <div class="back2top"> <a href="#top" class="top" title="Top"> <i class="icon fa-chevron-circle-up fa-fw icon-gray" aria-hidden="true"></i> <span class="sr-only">Top</span> </a> </div> </div> </div> <div id="p688836" class="post has-profile bg1"> <div class="inner"> <dl class="postprofile" id="profile688836"> <dt class="no-profile-rank no-avatar"> <div class="avatar-container"> </div> <a href="./memberlist.php?mode=viewprofile&u=165464&sid=4e812bd71f093091df5bbe7995b45742" class="username">white_haired_uncle</a> </dt> <dd class="profile-posts"><strong>Posts:</strong> <a href="./search.php?author_id=165464&sr=posts&sid=4e812bd71f093091df5bbe7995b45742">1453</a></dd> <dd class="profile-joined"><strong>Joined:</strong> August 26th, 2018, 11:46 pm</dd> <dd class="profile-custom-field profile-phpbb_location"><strong>Location:</strong> A country place, far outside the Wire</dd> </dl> <div class="postbody"> <div id="post_content688836"> <h3 > <a href="./viewtopic.php?p=688836&sid=4e812bd71f093091df5bbe7995b45742#p688836">Re: [GUI] various questions on lining stuff up</a> </h3> <ul class="post-buttons"> <li> <a href="./posting.php?mode=quote&p=688836&sid=4e812bd71f093091df5bbe7995b45742" title="Reply with quote" class="button button-icon-only"> <i class="icon fa-quote-left fa-fw" aria-hidden="true"></i><span class="sr-only">Quote</span> </a> </li> </ul> <p class="author"> <a class="unread" href="./viewtopic.php?p=688836&sid=4e812bd71f093091df5bbe7995b45742#p688836" title="Post"> <i class="icon fa-file fa-fw icon-lightgray icon-md" aria-hidden="true"></i><span class="sr-only">Post</span> </a> <span class="responsive-hide">by <strong><a href="./memberlist.php?mode=viewprofile&u=165464&sid=4e812bd71f093091df5bbe7995b45742" class="username">white_haired_uncle</a></strong> » </span><time datetime="2024-04-18T03:21:27+00:00">April 18th, 2024, 3:21 am</time> </p> <div class="content">I fixed issue #1 by setting vertical_alignment="top" on the column that contains the grid that contains the left "half" of the dialog.<br> <br> <div class="codebox"><p>Code: <a href="#" onclick="selectCode(this); return false;">Select all</a></p><pre><code> local dialogDefinition = { T.tooltip { id = "tooltip" }, T.helptip { id = "tooltip_large" }, T.linked_group { id = "ar_position", fixed_width = true, }, T.linked_group { id = "ar_unit", fixed_width = true }, T.linked_group { id = "av_unit", fixed_width = true }, T.linked_group { id = "header_label", fixed_width = true }, T.grid { T.row { T.column { T.grid { T.row { T.column { id = 'autorecall_list', vertical_alignment="top", T.grid { T.row { T.column { T.label { use_markup=true, label = "<span size='large' color='yellow'>" .. _"Units to be Automatically Recalled (" .. #ar_list .. "/" .. max_autorecall .. ")</span>" } } }, T.row { T.column { autorecall_treeview } }, } }, </code></pre></div></div> <div id="sig688836" class="signature"><div style="text-align:center">Speak softly, and carry <a class="postlink" href="//wiki.wesnoth.org/LotI_Items#Doombringer_.E2.80.93_sword">Doombringer</a>.</div></div> </div> </div> <div class="back2top"> <a href="#top" class="top" title="Top"> <i class="icon fa-chevron-circle-up fa-fw icon-gray" aria-hidden="true"></i> <span class="sr-only">Top</span> </a> </div> </div> </div> <div id="p692903" class="post has-profile bg2"> <div class="inner"> <dl class="postprofile" id="profile692903"> <dt class="no-profile-rank no-avatar"> <div class="avatar-container"> </div> <a href="./memberlist.php?mode=viewprofile&u=165464&sid=4e812bd71f093091df5bbe7995b45742" class="username">white_haired_uncle</a> </dt> <dd class="profile-posts"><strong>Posts:</strong> <a href="./search.php?author_id=165464&sr=posts&sid=4e812bd71f093091df5bbe7995b45742">1453</a></dd> <dd class="profile-joined"><strong>Joined:</strong> August 26th, 2018, 11:46 pm</dd> <dd class="profile-custom-field profile-phpbb_location"><strong>Location:</strong> A country place, far outside the Wire</dd> </dl> <div class="postbody"> <div id="post_content692903"> <h3 > <a href="./viewtopic.php?p=692903&sid=4e812bd71f093091df5bbe7995b45742#p692903">Re: [GUI] various questions on lining stuff up</a> </h3> <ul class="post-buttons"> <li> <a href="./posting.php?mode=quote&p=692903&sid=4e812bd71f093091df5bbe7995b45742" title="Reply with quote" class="button button-icon-only"> <i class="icon fa-quote-left fa-fw" aria-hidden="true"></i><span class="sr-only">Quote</span> </a> </li> </ul> <p class="author"> <a class="unread" href="./viewtopic.php?p=692903&sid=4e812bd71f093091df5bbe7995b45742#p692903" title="Post"> <i class="icon fa-file fa-fw icon-lightgray icon-md" aria-hidden="true"></i><span class="sr-only">Post</span> </a> <span class="responsive-hide">by <strong><a href="./memberlist.php?mode=viewprofile&u=165464&sid=4e812bd71f093091df5bbe7995b45742" class="username">white_haired_uncle</a></strong> » </span><time datetime="2024-08-31T02:12:02+00:00">August 31st, 2024, 2:12 am</time> </p> <div class="content">For item 2, you can use a stacked_widget with an invisible image layer set to the minimum size you want to reserve, then put your widget on top of that. Or look at the size_lock widget.</div> <div id="sig692903" class="signature"><div style="text-align:center">Speak softly, and carry <a class="postlink" href="//wiki.wesnoth.org/LotI_Items#Doombringer_.E2.80.93_sword">Doombringer</a>.</div></div> </div> </div> <div class="back2top"> <a href="#top" class="top" title="Top"> <i class="icon fa-chevron-circle-up fa-fw icon-gray" aria-hidden="true"></i> <span class="sr-only">Top</span> </a> </div> </div> </div> <div class="action-bar bar-bottom"> <a href="./posting.php?mode=reply&t=58000&sid=4e812bd71f093091df5bbe7995b45742" class="button" title="Post a reply"> <span>Post Reply</span> <i class="icon fa-reply fa-fw" aria-hidden="true"></i> </a> <form method="post" action="./viewtopic.php?t=58000&sid=4e812bd71f093091df5bbe7995b45742"> <div class="dropdown-container dropdown-container-left dropdown-button-control sort-tools"> <span title="Display and sorting options" class="button button-secondary dropdown-trigger dropdown-select"> <i class="icon fa-sort-amount-asc fa-fw" aria-hidden="true"></i> <span class="caret"><i class="icon fa-sort-down fa-fw" aria-hidden="true"></i></span> </span> <div class="dropdown hidden"> <div class="pointer"><div class="pointer-inner"></div></div> <div class="dropdown-contents"> <fieldset class="display-options"> <label>Display: <select name="st" id="st"><option value="0" selected="selected">All posts</option><option value="1">1 day</option><option value="7">7 days</option><option value="14">2 weeks</option><option value="30">1 month</option><option value="90">3 months</option><option value="180">6 months</option><option value="365">1 year</option></select></label> <label>Sort by: <select name="sk" id="sk"><option value="a">Author</option><option value="t" selected="selected">Post time</option><option value="s">Subject</option></select></label> <label>Direction: <select name="sd" id="sd"><option value="a" selected="selected">Ascending</option><option value="d">Descending</option></select></label> <hr class="dashed" /> <input type="submit" class="button2" name="sort" value="Go" /> </fieldset> </div> </div> </div> </form> <div class="pagination"> 3 posts • Page <strong>1</strong> of <strong>1</strong> </div> </div> <div class="action-bar actions-jump"> <p class="jumpbox-return"> <a href="./viewforum.php?f=58&sid=4e812bd71f093091df5bbe7995b45742" class="left-box arrow-left" accesskey="r"> <i class="icon fa-angle-left fa-fw icon-black" aria-hidden="true"></i><span>Return to “Lua Labs”</span> </a> </p> <div class="jumpbox dropdown-container dropdown-container-right dropdown-up dropdown-left dropdown-button-control" id="jumpbox"> <span title="Jump to" class="button button-secondary dropdown-trigger dropdown-select"> <span>Jump to</span> <span class="caret"><i class="icon fa-sort-down fa-fw" aria-hidden="true"></i></span> </span> <div class="dropdown"> <div class="pointer"><div class="pointer-inner"></div></div> <ul class="dropdown-contents"> <li><a href="./viewforum.php?f=64&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-cat-link"> <span> Announcements</span></a></li> <li><a href="./viewforum.php?f=62&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ News</span></a></li> <li><a href="./viewforum.php?f=25&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-cat-link"> <span> General</span></a></li> <li><a href="./viewforum.php?f=6&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Users’ Forum</span></a></li> <li><a href="./viewforum.php?f=70&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ Tournaments</span></a></li> <li><a href="./viewforum.php?f=5&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Release Announcements, Compiling & Installation</span></a></li> <li><a href="./viewforum.php?f=4&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Technical Support</span></a></li> <li><a href="./viewforum.php?f=67&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ iOS Support</span></a></li> <li><a href="./viewforum.php?f=3&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Strategies & Tips</span></a></li> <li><a href="./viewforum.php?f=37&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Gameplay Feedback</span></a></li> <li><a href="./viewforum.php?f=22&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ Mainline Campaign Feedback</span></a></li> <li><a href="./viewforum.php?f=46&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Tutorial</span></a></li> <li><a href="./viewforum.php?f=40&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ A Tale of Two Brothers</span></a></li> <li><a href="./viewforum.php?f=41&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ An Orcish Incursion</span></a></li> <li><a href="./viewforum.php?f=42&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ The South Guard</span></a></li> <li><a href="./viewforum.php?f=39&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Heir to the Throne</span></a></li> <li><a href="./viewforum.php?f=43&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Liberty</span></a></li> <li><a href="./viewforum.php?f=51&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Legend of Wesmere (single player)</span></a></li> <li><a href="./viewforum.php?f=56&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Legend of Wesmere (multiplayer)</span></a></li> <li><a href="./viewforum.php?f=49&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Eastern Invasion</span></a></li> <li><a href="./viewforum.php?f=55&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ The Hammer of Thursagan</span></a></li> <li><a href="./viewforum.php?f=54&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Descent into Darkness</span></a></li> <li><a href="./viewforum.php?f=52&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Delfador’s Memoirs</span></a></li> <li><a href="./viewforum.php?f=45&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Dead Water</span></a></li> <li><a href="./viewforum.php?f=65&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Secrets of the Ancients</span></a></li> <li><a href="./viewforum.php?f=48&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Sceptre of Fire</span></a></li> <li><a href="./viewforum.php?f=53&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Son of the Black Eye</span></a></li> <li><a href="./viewforum.php?f=44&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ The Rise of Wesnoth</span></a></li> <li><a href="./viewforum.php?f=47&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Northern Rebirth</span></a></li> <li><a href="./viewforum.php?f=50&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Under the Burning Suns</span></a></li> <li><a href="./viewforum.php?f=71&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span><span class="spacer"></span> <span>↳ Winds of Fate</span></a></li> <li><a href="./viewforum.php?f=31&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ Add-on Feedback</span></a></li> <li><a href="./viewforum.php?f=17&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Website</span></a></li> <li><a href="./viewforum.php?f=26&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-cat-link"> <span> Development</span></a></li> <li><a href="./viewforum.php?f=9&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Art Contributions</span></a></li> <li><a href="./viewforum.php?f=23&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Art Workshop</span></a></li> <li><a href="./viewforum.php?f=32&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Writers’ Forum</span></a></li> <li><a href="./viewforum.php?f=21&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ WML Workshop</span></a></li> <li><a href="./viewforum.php?f=58&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Lua Labs</span></a></li> <li><a href="./viewforum.php?f=19&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Faction & Era Development</span></a></li> <li><a href="./viewforum.php?f=15&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Multiplayer Development</span></a></li> <li><a href="./viewforum.php?f=8&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Scenario & Campaign Development</span></a></li> <li><a href="./viewforum.php?f=38&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ Mainline Campaign Development</span></a></li> <li><a href="./viewforum.php?f=68&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ UMC Replays</span></a></li> <li><a href="./viewforum.php?f=14&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Music & Sound Development</span></a></li> <li><a href="./viewforum.php?f=7&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Translations & Internationalization</span></a></li> <li><a href="./viewforum.php?f=60&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ Translation Stats</span></a></li> <li><a href="./viewforum.php?f=12&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Ideas</span></a></li> <li><a href="./viewforum.php?f=10&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Coder’s Corner</span></a></li> <li><a href="./viewforum.php?f=2&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Developers’ Discussions</span></a></li> <li><a href="./viewforum.php?f=73&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span><span class="spacer"></span> <span>↳ Wesnoth Organizational Updates</span></a></li> <li><a href="./viewforum.php?f=18&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Art Development</span></a></li> <li><a href="./viewforum.php?f=28&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-cat-link"> <span> Miscellaneous</span></a></li> <li><a href="./viewforum.php?f=13&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Game Development</span></a></li> <li><a href="./viewforum.php?f=11&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Off-Topic</span></a></li> <li><a href="./viewforum.php?f=61&sid=4e812bd71f093091df5bbe7995b45742" class="jumpbox-sub-link"><span class="spacer"></span> <span>↳ Forum Games</span></a></li> </ul> </div> </div> </div> </div> <div id="page-footer" class="page-footer" role="contentinfo"> <div class="navbar" role="navigation"> <div class="inner"> <ul id="nav-footer" class="nav-footer linklist" role="menubar"> <li class="breadcrumbs"> <span class="crumb"><a href="./index.php?sid=4e812bd71f093091df5bbe7995b45742" data-navbar-reference="index"><i class="icon fa-home fa-fw" aria-hidden="true"></i><span>Forums</span></a></span> </li> <li class="rightside">All times are <span title="UTC">UTC</span></li> <li class="rightside"> <a href="./ucp.php?mode=delete_cookies&sid=4e812bd71f093091df5bbe7995b45742" data-ajax="true" data-refresh="true" role="menuitem"> <i class="icon fa-trash fa-fw" aria-hidden="true"></i><span>Delete cookies</span> </a> </li> </ul> </div> </div> <div id="darkenwrapper" class="darkenwrapper" data-ajax-error-title="AJAX error" data-ajax-error-text="Something went wrong when processing your request." data-ajax-error-text-abort="User aborted request." data-ajax-error-text-timeout="Your request timed out; please try again." data-ajax-error-text-parsererror="Something went wrong with the request and the server returned an invalid reply."> <div id="darken" class="darken"> </div> </div> <div id="phpbb_alert" class="phpbb_alert" data-l-err="Error" data-l-timeout-processing-req="Request timed out."> <a href="#" class="alert_close"> <i class="icon fa-times-circle fa-fw" aria-hidden="true"></i> </a> <h3 class="alert_title"> </h3><p class="alert_text"></p> </div> <div id="phpbb_confirm" class="phpbb_alert"> <a href="#" class="alert_close"> <i class="icon fa-times-circle fa-fw" aria-hidden="true"></i> </a> <div class="alert_text"></div> </div> </div> </div> <div class="copyright"> <p class="footer-row"> <span class="footer-copyright">Powered by <a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited</span> </p> <p class="footer-row" role="menu"> <a class="footer-link" href="./ucp.php?mode=privacy&sid=4e812bd71f093091df5bbe7995b45742" title="Privacy" role="menuitem"> <span class="footer-link-text">Privacy</span> </a> | <a class="footer-link" href="./ucp.php?mode=terms&sid=4e812bd71f093091df5bbe7995b45742" title="Terms" role="menuitem"> <span class="footer-link-text">Terms</span> </a> </p> </div> <div> <a id="bottom" class="anchor" accesskey="z"></a> </div> <script src="./assets/javascript/jquery-3.6.0.min.js?assets_version=264"></script> <script src="./assets/javascript/core.js?assets_version=264"></script> <script type="text/javascript"> var CodeboxExpandText = "Expand"; var CodeboxCollapseText = "Collapse"; </script> <script src="./assets/cookieconsent/cookieconsent.min.js?assets_version=264"></script> <script> if (typeof window.cookieconsent === "object") { window.addEventListener("load", function(){ window.cookieconsent.initialise({ "palette": { "popup": { "background": "#0F538A" }, "button": { "background": "#E5E5E5" } }, "theme": "classic", "content": { "message": "This\u0020website\u0020uses\u0020cookies\u0020to\u0020ensure\u0020you\u0020get\u0020the\u0020best\u0020experience\u0020on\u0020our\u0020website.", "dismiss": "Got\u0020it\u0021", "link": "Learn\u0020more", "href": "./ucp.php?mode=privacy&sid=4e812bd71f093091df5bbe7995b45742" } }); }); } </script> </div> <!-- #content --> <script src="./styles/prosilver/template/forum_fn.js?assets_version=264"></script> <script src="./styles/prosilver/template/ajax.js?assets_version=264"></script> </body> </html>