Files
starruler-linux/scripts/gui/overlays/EdictDisplay.as
T
2018-07-17 14:15:37 +02:00

140 lines
3.0 KiB
ActionScript

#priority init -100
import elements.BaseGuiElement;
import elements.GuiButton;
import elements.GuiText;
import elements.GuiSprite;
import elements.GuiMarkupText;
import elements.GuiContextMenu;
import elements.MarkupTooltip;
import tabs.Tab;
import util.formatting;
import timing;
import influence;
from tabs.tabbar import TAB_HEIGHT, GLOBAL_BAR_HEIGHT, ActiveTab;
class ClearEdictOption : GuiContextOption {
ClearEdictOption() {
super(locale::EDICT_CLEAR_OPTION);
}
void call(GuiContextMenu@ menu) override {
playerEmpire.clearEdict();
}
};
class EdictDisplay : BaseGuiElement {
GuiMarkupText@ text;
string prevText;
bool clicking = false;
EdictDisplay() {
super(null, recti_area(210,TAB_HEIGHT+GLOBAL_BAR_HEIGHT, 200, 30));
@text = GuiMarkupText(this, recti_area(6,6, 120,24));
text.expandWidth = true;
updateAbsolutePosition();
}
bool onGuiEvent(const GuiEvent& evt) {
switch(evt.type) {
case GUI_Mouse_Left:
if(evt.caller is this)
clicking = false;
break;
}
return BaseGuiElement::onGuiEvent(evt);
}
void showMenu() {
if(playerEmpire.SubjugatedBy !is null)
return;
GuiContextMenu menu(mousePos);
menu.addOption(ClearEdictOption());
menu.finalize();
}
bool onMouseEvent(const MouseEvent& event, IGuiElement@ source) {
if(source is this || source is text) {
switch(event.type) {
case MET_Button_Down:
if(event.button == 1) {
clicking = true;
return true;
}
break;
case MET_Button_Up:
if(event.button == 1) {
if(clicking)
showMenu();
return true;
}
break;
}
}
return BaseGuiElement::onMouseEvent(event, source);
}
void tick(double time) {
Empire@ master = playerEmpire.SubjugatedBy;
uint type = 0;
if(master is null)
type = playerEmpire.getEdictType();
else
type = master.getEdictType();
visible = (ActiveTab.category == TC_Galaxy) && type != 0;
if(visible) {
string txt;
Empire@ emp; Object@ obj;
if(master !is null) {
@emp = master.getEdictEmpire();
@obj = master.getEdictObject();
txt = locale::EDICT_FROM_MASTER;
}
else {
@emp = playerEmpire.getEdictEmpire();
@obj = playerEmpire.getEdictObject();
txt = locale::EDICT_TO_VASSALS;
}
txt = format(txt, formatEmpireName(master),
format(localize("#EDICT_"+toString(type)),
formatEmpireName(emp), formatObject(obj)));
if(txt != prevText) {
prevText = txt;
text.text = txt;
text.updateAbsolutePosition();
size = vec2i(text.textWidth + 12, 30);
string tt;
if(master !is null)
tt = locale::TT_EDICT_FROM_MASTER;
else
tt = locale::TT_EDICT_TO_VASSALS;
tt = format(tt, formatEmpireName(master),
format(localize("#TT_EDICT_"+toString(type)),
formatEmpireName(emp), formatObject(obj)));
setMarkupTooltip(this, tt, width=300);
}
}
}
void draw() override {
skin.draw(SS_TimeDisplay, SF_Normal, AbsolutePosition);
BaseGuiElement::draw();
}
};
EdictDisplay@ disp;
void init() {
@disp = EdictDisplay();
}
void tick(double time) {
disp.tick(time);
}