forked from mirrors/0ad
a4bc787ddc
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.
93 lines
2.7 KiB
JavaScript
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;
|