summaryrefslogtreecommitdiff
path: root/library/modules
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-09-20 10:41:03 +0400
committerAlexander Gavrilov2012-09-20 10:41:03 +0400
commit7ce772ae0ea69ab26009a27d71bd681382ecfac7 (patch)
treea4027707021d500286ec510a820068a9226ccfa5 /library/modules
parent1fd0654d635ebf8da74fb581eb8d3f16c98b0444 (diff)
downloaddfhack-7ce772ae0ea69ab26009a27d71bd681382ecfac7.tar.gz
dfhack-7ce772ae0ea69ab26009a27d71bd681382ecfac7.tar.bz2
dfhack-7ce772ae0ea69ab26009a27d71bd681382ecfac7.tar.xz
Add an API function that returns the selected building.
Diffstat (limited to 'library/modules')
-rw-r--r--library/modules/Gui.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp
index 1662f446..10a20dc2 100644
--- a/library/modules/Gui.cpp
+++ b/library/modules/Gui.cpp
@@ -933,6 +933,64 @@ df::item *Gui::getSelectedItem(color_ostream &out, bool quiet)
return item;
}
+static df::building *getAnyBuilding(df::viewscreen *top)
+{
+ using namespace ui_sidebar_mode;
+ using df::global::ui;
+ using df::global::ui_look_list;
+ using df::global::ui_look_cursor;
+ using df::global::world;
+ using df::global::ui_sidebar_menus;
+
+ if (!Gui::dwarfmode_hotkey(top))
+ return NULL;
+
+ switch (ui->main.mode) {
+ case LookAround:
+ {
+ if (!ui_look_list || !ui_look_cursor)
+ return NULL;
+
+ auto item = vector_get(ui_look_list->items, *ui_look_cursor);
+ if (item && item->type == df::ui_look_list::T_items::Building)
+ return item->building;
+ else
+ return NULL;
+ }
+ case QueryBuilding:
+ case BuildingItems:
+ {
+ return world->selected_building;
+ }
+ case Zones:
+ case ZonesPenInfo:
+ case ZonesPitInfo:
+ case ZonesHospitalInfo:
+ {
+ if (ui_sidebar_menus)
+ return ui_sidebar_menus->zone.selected;
+ return NULL;
+ }
+ default:
+ return NULL;
+ }
+}
+
+bool Gui::any_building_hotkey(df::viewscreen *top)
+{
+ return getAnyBuilding(top) != NULL;
+}
+
+df::building *Gui::getSelectedBuilding(color_ostream &out, bool quiet)
+{
+ df::building *building = getAnyBuilding(Core::getTopViewscreen());
+
+ if (!building && !quiet)
+ out.printerr("No building is selected in the UI.\n");
+
+ return building;
+}
+
//
static void doShowAnnouncement(