1
0
forked from mirrors/0ad
Files
0ad/binaries/data/mods/public/gui/reference/structree/StructreePage.js
T
s0600204 a4bc787ddc Don't have the Structure Tree fill up the entire screen
For those lucky enough to have screens with a high enough resolution to
display
a chosen civilisation's tree in its entirety, the Structure Tree page
now
determines the minimum space necessary to do so, and sizes itself
accordingly.
(e.g. The page no longer scales to fill the entire screen.)

For those on lower resolution screens, the page now takes up slightly
less space
vertically.

This was SVN commit r23813.
2020-07-11 02:50:32 +00:00

93 lines
2.7 KiB
JavaScript

/**
* This class represents the Structure Tree GUI page.
*
* Further methods are described within draw.js
*/
class StructreePage extends ReferencePage
{
constructor(data)
{
super();
this.structureBoxes = [];
this.trainerBoxes = [];
this.StructreePage = Engine.GetGUIObjectByName("structreePage");
this.Background = Engine.GetGUIObjectByName("background");
this.CivEmblem = Engine.GetGUIObjectByName("civEmblem");
this.CivName = Engine.GetGUIObjectByName("civName");
this.CivHistory = Engine.GetGUIObjectByName("civHistory");
this.TrainerSection = new TrainerSection(this);
this.TreeSection = new TreeSection(this);
this.civSelection = new CivSelectDropdown(this.civData);
if (!this.civSelection.hasCivs())
{
this.closePage();
return;
}
this.civSelection.registerHandler(this.selectCiv.bind(this));
let civInfoButton = new CivInfoButton(this);
let closeButton = new CloseButton(this);
Engine.SetGlobalHotkey("structree", "Press", this.closePage.bind(this));
this.StructreePage.onWindowResized = this.updatePageWidth.bind(this);
this.width = 0;
}
closePage()
{
Engine.PopGuiPage({ "civ": this.activeCiv, "page": "page_structree.xml" });
}
selectCiv(civCode)
{
this.setActiveCiv(civCode);
this.CivEmblem.sprite = "stretched:" + this.civData[this.activeCiv].Emblem;
this.CivName.caption = this.civData[this.activeCiv].Name;
this.CivHistory.caption = this.civData[this.activeCiv].History;
let templateLists = this.TemplateLister.getTemplateLists(this.activeCiv);
this.TreeSection.draw(templateLists.structures, this.activeCiv);
this.TrainerSection.draw(templateLists.units, this.activeCiv);
this.width = this.TreeSection.width + -this.TreeSection.rightMargin;
if (this.TrainerSection.isVisible())
this.width += this.TrainerSection.width + this.SectionGap;
this.updatePageWidth();
this.updatePageHeight();
}
updatePageHeight()
{
let y = (this.TreeSection.height + this.TreeSection.vMargin) / 2;
let pageSize = this.StructreePage.size;
pageSize.top = -y;
pageSize.bottom = y;
this.StructreePage.size = pageSize;
}
updatePageWidth()
{
let screenSize = this.Background.getComputedSize();
let pageSize = this.StructreePage.size;
let x = Math.min(this.width, screenSize.right - this.BorderMargin * 2) / 2;
pageSize.left = -x;
pageSize.right = x;
this.StructreePage.size = pageSize;
}
}
StructreePage.prototype.CloseButtonTooltip =
translate("%(hotkey)s: Close Structure Tree.");
// Gap between the `TreeSection` and `TrainerSection` gui objects (when the latter is visible)
StructreePage.prototype.SectionGap = 12;
// Margin around the edge of the structree on lower resolutions,
// preventing the UI from being clipped by the edges of the screen.
StructreePage.prototype.BorderMargin = 16;