/** * Shows a text dropdown menu. * rct2: 0x006ECFB9, although 0x006ECE50 is real version * * @param x (cx) * @param y (dx) * @param extray (di) * @param flags (bh) * @param num_items (bx) * @param colour (al) * @param custom_height (ah) requires flag set as well */ void window_dropdown_show_text_custom_width( int32_t x, int32_t y, int32_t extray, uint8_t colour, uint8_t custom_height, uint8_t flags, size_t num_items, int32_t width) { rct_window* w; input_set_flag((INPUT_FLAGS)(INPUT_FLAG_DROPDOWN_STAY_OPEN | INPUT_FLAG_DROPDOWN_MOUSE_UP), false); if (flags & DROPDOWN_FLAG_STAY_OPEN) input_set_flag(INPUT_FLAG_DROPDOWN_STAY_OPEN, true); window_dropdown_close(); // Set and calculate num items, rows and columns _dropdown_item_width = width; _dropdown_item_height = (flags & DROPDOWN_FLAG_CUSTOM_HEIGHT) ? custom_height : DROPDOWN_ITEM_HEIGHT; gDropdownNumItems = (int32_t)num_items; // There must always be at least one column to prevent dividing by zero if (gDropdownNumItems == 0) { _dropdown_num_columns = 1; _dropdown_num_rows = 0; } else { _dropdown_num_columns = (gDropdownNumItems + DROPDOWN_TEXT_MAX_ROWS - 1) / DROPDOWN_TEXT_MAX_ROWS; _dropdown_num_rows = (gDropdownNumItems + _dropdown_num_columns - 1) / _dropdown_num_columns; } // Text dropdowns are listed horizontally _dropdown_list_vertically = true; width = _dropdown_item_width * _dropdown_num_columns + 3; int32_t height = _dropdown_item_height * _dropdown_num_rows + 3; int32_t screenWidth = context_get_width(); int32_t screenHeight = context_get_height(); if (x + width > screenWidth) x = std::max(0, screenWidth - width); if (y + height > screenHeight) y = std::max(0, screenHeight - height); window_dropdown_widgets[WIDX_BACKGROUND].right = width; window_dropdown_widgets[WIDX_BACKGROUND].bottom = height; // Create the window w = window_create( x, y + extray, window_dropdown_widgets[WIDX_BACKGROUND].right + 1, window_dropdown_widgets[WIDX_BACKGROUND].bottom + 1, &window_dropdown_events, WC_DROPDOWN, WF_STICK_TO_FRONT); w->widgets = window_dropdown_widgets; if (colour & COLOUR_FLAG_TRANSLUCENT) w->flags |= WF_TRANSPARENT; w->colours[0] = colour; // Input state gDropdownHighlightedIndex = -1; std::fill_n(_dropdownItemsDisabled, sizeof(_dropdownItemsDisabled), false); std::fill_n(_dropdownItemsChecked, sizeof(_dropdownItemsChecked), false); gDropdownIsColour = false; gDropdownDefaultIndex = -1; input_set_state(INPUT_STATE_DROPDOWN_ACTIVE); }
/** * Opens the window/tab for the subject of the news item * * rct2: 0x0066EBE6 * */ void news_item_open_subject(sint32 type, sint32 subject) { rct_peep* peep; rct_window* window; switch (type) { case NEWS_ITEM_RIDE: window_ride_main_open(subject); break; case NEWS_ITEM_PEEP_ON_RIDE: case NEWS_ITEM_PEEP: peep = GET_PEEP(subject); window_guest_open(peep); break; case NEWS_ITEM_MONEY: window_finances_open(); break; case NEWS_ITEM_RESEARCH: if (subject >= 0x10000) { // Open ride list window window_new_ride_open(); // Switch to right tab and scroll to ride location ride_list_item rideItem; rideItem.type = subject >> 8; rideItem.entry_index = subject & 0xFF; window_new_ride_focus(rideItem); break; } // Check if window is already open window = window_bring_to_front_by_class(WC_SCENERY); if (window == NULL) { window = window_find_by_class(WC_TOP_TOOLBAR); if (window != NULL) { window_invalidate(window); if (!tool_set(window, WC_TOP_TOOLBAR__WIDX_SCENERY, TOOL_ARROW)) { input_set_flag(INPUT_FLAG_6, true); window_scenery_open(); } } } // Switch to new scenery tab window = window_find_by_class(WC_SCENERY); if (window != NULL) window_event_mouse_down_call(window, WC_SCENERY__WIDX_SCENERY_TAB_1 + subject); break; case NEWS_ITEM_PEEPS: window_guest_list_open_with_filter(GLFT_GUESTS_THINKING_X, subject);; break; case NEWS_ITEM_AWARD: window_park_awards_open(); break; case NEWS_ITEM_GRAPH: window_park_rating_open(); break; }
void window_tooltip_reset(int32_t x, int32_t y) { gTooltipCursorX = x; gTooltipCursorY = y; gTooltipTimeout = 0; gTooltipWidget.window_classification = 255; input_set_state(INPUT_STATE_NORMAL); input_set_flag(INPUT_FLAG_4, false); }
static void window_maze_construction_entrance_mouseup(rct_window *w, rct_widgetindex widgetIndex){ if (tool_set(w, widgetIndex, TOOL_CROSSHAIR)) return; gRideEntranceExitPlaceType = widgetIndex == WIDX_MAZE_ENTRANCE ? ENTRANCE_TYPE_RIDE_ENTRANCE : ENTRANCE_TYPE_RIDE_EXIT; gRideEntranceExitPlaceRideIndex = (uint8)w->number; gRideEntranceExitPlaceStationIndex = 0; input_set_flag(INPUT_FLAG_6, true); ride_construction_invalidate_current_track(); // ??? uint8 old_state = _rideConstructionState; _rideConstructionState = RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT; if (old_state != RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT) _rideConstructionState = old_state; window_maze_construction_update_pressed_widgets(); }
/** * * rct2: 0x006CFCA0 */ rct_window * window_track_place_open(const track_design_file_ref *tdFileRef) { rct_track_td6 *td6 = track_design_open(tdFileRef->path); if (td6 == nullptr) { return nullptr; } window_close_construction_windows(); _window_track_place_mini_preview.resize(TRACK_MINI_PREVIEW_SIZE); rct_window *w = window_create( 0, 29, 200, 124, &window_track_place_events, WC_TRACK_DESIGN_PLACE, 0 ); w->widgets = window_track_place_widgets; w->enabled_widgets = 1 << WIDX_CLOSE | 1 << WIDX_ROTATE | 1 << WIDX_MIRROR | 1 << WIDX_SELECT_DIFFERENT_DESIGN; window_init_scroll_widgets(w); tool_set(w, WIDX_PRICE, TOOL_CROSSHAIR); input_set_flag(INPUT_FLAG_6, true); window_push_others_right(w); show_gridlines(); _window_track_place_last_cost = MONEY32_UNDEFINED; _window_track_place_last_x = -1; _currentTrackPieceDirection = (2 - get_current_rotation()) & 3; window_track_place_clear_mini_preview(); window_track_place_draw_mini_preview(td6); _trackDesign = td6; return w; }