diff --git a/plugins/search.cpp b/plugins/search.cpp index e25343cf7..929cd653c 100644 --- a/plugins/search.cpp +++ b/plugins/search.cpp @@ -43,6 +43,9 @@ DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(gview); REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(ui_building_assign_units); +REQUIRE_GLOBAL(ui_building_in_assign); +REQUIRE_GLOBAL(ui_building_item_cursor); /* Search Plugin @@ -1671,6 +1674,68 @@ IMPLEMENT_HOOKS(df::viewscreen_dwarfmodest, burrow_search); // +// +// START: Room assignment search +// + +typedef search_generic room_assign_search_base; +class room_assign_search : public room_assign_search_base +{ +public: + bool can_init(df::viewscreen_dwarfmodest *screen) + { + if (ui->main.mode == df::ui_sidebar_mode::QueryBuilding && *ui_building_in_assign) + { + return room_assign_search_base::can_init(screen); + } + + return false; + } + + string get_element_description(df::unit *element) const + { + return element ? get_unit_description(element) : "Nobody"; + } + + void render() const + { + auto dims = Gui::getDwarfmodeViewDims(); + int left_margin = dims.menu_x1 + 1; + int x = left_margin; + int y = 19; + + print_search_option(x, y); + } + + vector *get_primary_list() + { + return ui_building_assign_units; + } + + virtual int32_t * get_viewscreen_cursor() + { + return ui_building_item_cursor; + } + + bool should_check_input(set *input) + { + if (input->count(interface_key::SECONDSCROLL_UP) || input->count(interface_key::SECONDSCROLL_DOWN) + || input->count(interface_key::SECONDSCROLL_PAGEUP) || input->count(interface_key::SECONDSCROLL_PAGEDOWN)) + { + end_entry_mode(); + return false; + } + + return true; + } +}; + +IMPLEMENT_HOOKS(df::viewscreen_dwarfmodest, room_assign_search); + +// +// END: Room assignment search +// + #define SEARCH_HOOKS \ HOOK_ACTION(unitlist_search_hook) \ HOOK_ACTION(roomlist_search_hook) \ @@ -1684,7 +1749,8 @@ IMPLEMENT_HOOKS(df::viewscreen_dwarfmodest, burrow_search); HOOK_ACTION(annoucnement_search_hook) \ HOOK_ACTION(joblist_search_hook) \ HOOK_ACTION(burrow_search_hook) \ - HOOK_ACTION(stockpile_search_hook) + HOOK_ACTION(stockpile_search_hook) \ + HOOK_ACTION(room_assign_search_hook) DFhackCExport command_result plugin_enable ( color_ostream &out, bool enable) {