mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Convert g_window_list to a std::vector
This commit is contained in:
@@ -273,10 +273,9 @@ public:
|
|||||||
sint32 top = dpi->y;
|
sint32 top = dpi->y;
|
||||||
sint32 bottom = top + dpi->height;
|
sint32 bottom = top + dpi->height;
|
||||||
|
|
||||||
rct_window * newWindow = gWindowNextSlot;
|
for (auto& w : g_window_list)
|
||||||
for (rct_window * w = g_window_list; w < newWindow; w++)
|
|
||||||
{
|
{
|
||||||
DrawRainWindow(rainDrawer, w, left, right, top, bottom, drawFunc);
|
DrawRainWindow(rainDrawer, &w, left, right, top, bottom, drawFunc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -773,11 +772,10 @@ private:
|
|||||||
sint16 bottom,
|
sint16 bottom,
|
||||||
DrawRainFunc drawFunc)
|
DrawRainFunc drawFunc)
|
||||||
{
|
{
|
||||||
rct_window * newWindow = gWindowNextSlot;
|
rct_window * w{};
|
||||||
rct_window * w = original_w + 1; // Start from second window
|
for (auto i = window_get_index(original_w) + 1; ; i++)
|
||||||
for (; ; w++)
|
|
||||||
{
|
{
|
||||||
if (w >= newWindow)
|
if (i >= g_window_list.size())
|
||||||
{
|
{
|
||||||
// Loop ended, draw rain for original_w
|
// Loop ended, draw rain for original_w
|
||||||
auto vp = original_w->viewport;
|
auto vp = original_w->viewport;
|
||||||
@@ -797,6 +795,7 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w = &g_window_list[i];
|
||||||
if (right <= w->x || bottom <= w->y)
|
if (right <= w->x || bottom <= w->y)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -505,11 +505,11 @@ public:
|
|||||||
|
|
||||||
rct_window* GetOwner(const rct_viewport* viewport) override
|
rct_window* GetOwner(const rct_viewport* viewport) override
|
||||||
{
|
{
|
||||||
for (auto w = g_window_list; w < gWindowNextSlot; w++)
|
for (auto& w : g_window_list)
|
||||||
{
|
{
|
||||||
if (w->viewport == viewport)
|
if (w.viewport == viewport)
|
||||||
{
|
{
|
||||||
return w;
|
return &w;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
@@ -106,9 +106,9 @@ static void input_update_tooltip(rct_window * w, rct_widgetindex widgetIndex, si
|
|||||||
*/
|
*/
|
||||||
void game_handle_input()
|
void game_handle_input()
|
||||||
{
|
{
|
||||||
for (rct_window * w = g_window_list; w < gWindowNextSlot; w++)
|
for (auto& w : g_window_list)
|
||||||
{
|
{
|
||||||
window_event_unknown_07_call(w);
|
window_event_unknown_07_call(&w);
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidate_all_windows_after_input();
|
invalidate_all_windows_after_input();
|
||||||
@@ -135,9 +135,9 @@ void game_handle_input()
|
|||||||
process_mouse_tool(x, y);
|
process_mouse_tool(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (rct_window * w = g_window_list; w < gWindowNextSlot; w++)
|
for (auto& w : g_window_list)
|
||||||
{
|
{
|
||||||
window_event_unknown_08_call(w);
|
window_event_unknown_08_call(&w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -865,9 +865,9 @@ rct_string_id theme_desc_get_name(rct_windowclass wc)
|
|||||||
|
|
||||||
void colour_scheme_update_all()
|
void colour_scheme_update_all()
|
||||||
{
|
{
|
||||||
for (rct_window *w = g_window_list; w < gWindowNextSlot; w++)
|
for (auto& w : g_window_list)
|
||||||
{
|
{
|
||||||
colour_scheme_update(w);
|
colour_scheme_update(&w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,21 +26,19 @@ using namespace OpenRCT2;
|
|||||||
// The amount of pixels to scroll per wheel click
|
// The amount of pixels to scroll per wheel click
|
||||||
constexpr sint32 WINDOW_SCROLL_PIXELS = 17;
|
constexpr sint32 WINDOW_SCROLL_PIXELS = 17;
|
||||||
|
|
||||||
#define RCT2_NEW_WINDOW (gWindowNextSlot)
|
|
||||||
#define RCT2_LAST_WINDOW (gWindowNextSlot - 1)
|
|
||||||
|
|
||||||
static sint32 _previousAbsoluteWheel = 0;
|
static sint32 _previousAbsoluteWheel = 0;
|
||||||
|
|
||||||
static bool window_fits_between_others(sint32 x, sint32 y, sint32 width, sint32 height)
|
static bool window_fits_between_others(sint32 x, sint32 y, sint32 width, sint32 height)
|
||||||
{
|
{
|
||||||
for (rct_window *w = g_window_list; w < RCT2_LAST_WINDOW; w++) {
|
for (auto& w : g_window_list)
|
||||||
if (w->flags & WF_STICK_TO_BACK)
|
{
|
||||||
|
if (w.flags & WF_STICK_TO_BACK)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (x + width <= w->x) continue;
|
if (x + width <= w.x) continue;
|
||||||
if (x >= w->x + w->width) continue;
|
if (x >= w.x + w.width) continue;
|
||||||
if (y + height <= w->y) continue;
|
if (y + height <= w.y) continue;
|
||||||
if (y >= w->y + w->height) continue;
|
if (y >= w.y + w.height) continue;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,37 +74,44 @@ rct_window *window_create(sint32 x, sint32 y, sint32 width, sint32 height, rct_w
|
|||||||
{
|
{
|
||||||
// Check if there are any window slots left
|
// Check if there are any window slots left
|
||||||
// include WINDOW_LIMIT_RESERVED for items such as the main viewport and toolbars to not appear to be counted.
|
// include WINDOW_LIMIT_RESERVED for items such as the main viewport and toolbars to not appear to be counted.
|
||||||
if (RCT2_NEW_WINDOW >= &(g_window_list[gConfigGeneral.window_limit + WINDOW_LIMIT_RESERVED])) {
|
if (g_window_list.size() >= gConfigGeneral.window_limit + WINDOW_LIMIT_RESERVED)
|
||||||
rct_window *w = nullptr;
|
{
|
||||||
// Close least recently used window
|
// Close least recently used window
|
||||||
for (w = g_window_list; w < RCT2_NEW_WINDOW; w++)
|
for (auto& w : g_window_list)
|
||||||
if (!(w->flags & (WF_STICK_TO_BACK | WF_STICK_TO_FRONT | WF_NO_AUTO_CLOSE)))
|
{
|
||||||
break;
|
if (!(w.flags & (WF_STICK_TO_BACK | WF_STICK_TO_FRONT | WF_NO_AUTO_CLOSE)))
|
||||||
|
{
|
||||||
window_close(w);
|
window_close(&w);
|
||||||
}
|
|
||||||
|
|
||||||
rct_window *w = RCT2_NEW_WINDOW;
|
|
||||||
|
|
||||||
// Flags
|
|
||||||
if (flags & WF_STICK_TO_BACK) {
|
|
||||||
for (; w >= g_window_list + 1; w--) {
|
|
||||||
if ((w - 1)->flags & WF_STICK_TO_FRONT)
|
|
||||||
continue;
|
|
||||||
if ((w - 1)->flags & WF_STICK_TO_BACK)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!(flags & WF_STICK_TO_FRONT)) {
|
}
|
||||||
for (; w >= g_window_list + 1; w--) {
|
|
||||||
if (!((w - 1)->flags & WF_STICK_TO_FRONT))
|
// Find right position to insert new window
|
||||||
|
auto dstIndex = g_window_list.size();
|
||||||
|
if (flags & WF_STICK_TO_BACK)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < g_window_list.size(); i++)
|
||||||
|
{
|
||||||
|
if (!(g_window_list[i].flags & WF_STICK_TO_BACK))
|
||||||
|
{
|
||||||
|
dstIndex = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!(flags & WF_STICK_TO_FRONT))
|
||||||
|
{
|
||||||
|
for (size_t i = g_window_list.size(); i > 0; i--)
|
||||||
|
{
|
||||||
|
if (!(g_window_list[i - 1].flags & WF_STICK_TO_FRONT))
|
||||||
|
{
|
||||||
|
dstIndex = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Move w to new window slot
|
auto w = &(*(g_window_list.insert(g_window_list.begin() + dstIndex, rct_window{})));
|
||||||
if (w != RCT2_NEW_WINDOW)
|
|
||||||
*RCT2_NEW_WINDOW = *w;
|
|
||||||
|
|
||||||
// Setup window
|
// Setup window
|
||||||
w->classification = cls;
|
w->classification = cls;
|
||||||
@@ -144,7 +149,6 @@ rct_window *window_create(sint32 x, sint32 y, sint32 width, sint32 height, rct_w
|
|||||||
w->selected_tab = 0;
|
w->selected_tab = 0;
|
||||||
w->var_4AE = 0;
|
w->var_4AE = 0;
|
||||||
w->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
w->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
||||||
RCT2_NEW_WINDOW++;
|
|
||||||
|
|
||||||
colour_scheme_update(w);
|
colour_scheme_update(w);
|
||||||
window_invalidate(w);
|
window_invalidate(w);
|
||||||
@@ -194,75 +198,78 @@ rct_window *window_create_auto_pos(sint32 width, sint32 height, rct_window_event
|
|||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
// Place window next to another
|
// Place window next to another
|
||||||
for (rct_window *w = g_window_list; w < RCT2_LAST_WINDOW; w++) {
|
for (auto& w : g_window_list)
|
||||||
if (w->flags & WF_STICK_TO_BACK)
|
{
|
||||||
|
if (w.flags & WF_STICK_TO_BACK)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
x = w->x + w->width + 2;
|
x = w.x + w.width + 2;
|
||||||
y = w->y;
|
y = w.y;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x - w->width - 2;
|
x = w.x - w.width - 2;
|
||||||
y = w->y;
|
y = w.y;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x;
|
x = w.x;
|
||||||
y = w->y + w->height + 2;
|
y = w.y + w.height + 2;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x;
|
x = w.x;
|
||||||
y = w->y - w->height - 2;
|
y = w.y - w.height - 2;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x + w->width + 2;
|
x = w.x + w.width + 2;
|
||||||
y = w->y - w->height - 2;
|
y = w.y - w.height - 2;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x - w->width - 2;
|
x = w.x - w.width - 2;
|
||||||
y = w->y - w->height - 2;
|
y = w.y - w.height - 2;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x + w->width + 2;
|
x = w.x + w.width + 2;
|
||||||
y = w->y + w->height + 2;
|
y = w.y + w.height + 2;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x - w->width - 2;
|
x = w.x - w.width - 2;
|
||||||
y = w->y + w->height + 2;
|
y = w.y + w.height + 2;
|
||||||
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
if (window_fits_within_space(x, y, width, height)) goto foundSpace;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overlap
|
// Overlap
|
||||||
for (rct_window *w = g_window_list; w < RCT2_LAST_WINDOW; w++) {
|
for (auto& w : g_window_list)
|
||||||
if (w->flags & WF_STICK_TO_BACK)
|
{
|
||||||
|
if (w.flags & WF_STICK_TO_BACK)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
x = w->x + w->width + 2;
|
x = w.x + w.width + 2;
|
||||||
y = w->y;
|
y = w.y;
|
||||||
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x - w->width - 2;
|
x = w.x - w.width - 2;
|
||||||
y = w->y;
|
y = w.y;
|
||||||
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x;
|
x = w.x;
|
||||||
y = w->y + w->height + 2;
|
y = w.y + w.height + 2;
|
||||||
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
||||||
|
|
||||||
x = w->x;
|
x = w.x;
|
||||||
y = w->y - w->height - 2;
|
y = w.y - w.height - 2;
|
||||||
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
if (window_fits_on_screen(x, y, width, height)) goto foundSpace;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cascade
|
// Cascade
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 30;
|
y = 30;
|
||||||
for (rct_window *w = g_window_list; w < RCT2_LAST_WINDOW; w++) {
|
for (auto& w : g_window_list)
|
||||||
if (x != w->x || y != w->y)
|
{
|
||||||
continue;
|
if (x == w.x && y == w.y)
|
||||||
|
{
|
||||||
x += 5;
|
x += 5;
|
||||||
y += 5;
|
y += 5;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Clamp to inside the screen
|
// Clamp to inside the screen
|
||||||
foundSpace:
|
foundSpace:
|
||||||
@@ -622,9 +629,10 @@ static void window_invalidate_pressed_image_buttons(rct_window *w)
|
|||||||
*/
|
*/
|
||||||
void invalidate_all_windows_after_input()
|
void invalidate_all_windows_after_input()
|
||||||
{
|
{
|
||||||
for (rct_window *w = RCT2_LAST_WINDOW; w >= g_window_list; w--) {
|
for (auto& w : g_window_list)
|
||||||
window_update_scroll_widgets(w);
|
{
|
||||||
window_invalidate_pressed_image_buttons(w);
|
window_update_scroll_widgets(&w);
|
||||||
window_event_resize_call(w);
|
window_invalidate_pressed_image_buttons(&w);
|
||||||
|
window_event_resize_call(&w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,15 +238,20 @@ void viewport_adjust_for_map_height(sint16* x, sint16* y, sint16 *z)
|
|||||||
static void viewport_redraw_after_shift(rct_drawpixelinfo *dpi, rct_window *window, rct_viewport *viewport, sint32 x, sint32 y)
|
static void viewport_redraw_after_shift(rct_drawpixelinfo *dpi, rct_window *window, rct_viewport *viewport, sint32 x, sint32 y)
|
||||||
{
|
{
|
||||||
// sub-divide by intersecting windows
|
// sub-divide by intersecting windows
|
||||||
if (window < gWindowNextSlot)
|
if (window != nullptr)
|
||||||
{
|
{
|
||||||
// skip current window and non-intersecting windows
|
// skip current window and non-intersecting windows
|
||||||
if (viewport == window->viewport ||
|
if (viewport == window->viewport ||
|
||||||
viewport->x + viewport->width <= window->x ||
|
viewport->x + viewport->width <= window->x ||
|
||||||
viewport->x >= window->x + window->width ||
|
viewport->x >= window->x + window->width ||
|
||||||
viewport->y + viewport->height <= window->y ||
|
viewport->y + viewport->height <= window->y ||
|
||||||
viewport->y >= window->y + window->height){
|
viewport->y >= window->y + window->height)
|
||||||
viewport_redraw_after_shift(dpi, window + 1, viewport, x, y);
|
{
|
||||||
|
auto nextWindowIndex = window_get_index(window) + 1;
|
||||||
|
auto nextWindow = nextWindowIndex >= g_window_list.size() ?
|
||||||
|
nullptr :
|
||||||
|
&g_window_list[nextWindowIndex];
|
||||||
|
viewport_redraw_after_shift(dpi, nextWindow, viewport, x, y);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,12 +360,11 @@ static void viewport_redraw_after_shift(rct_drawpixelinfo *dpi, rct_window *wind
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
|
static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* window, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
|
||||||
{
|
{
|
||||||
rct_window* orignal_w = w;
|
for (auto i = window_get_index(window); i < g_window_list.size(); i++)
|
||||||
sint32 left = 0, right = 0, top = 0, bottom = 0;
|
{
|
||||||
|
auto w = &g_window_list[i];
|
||||||
for (; w < gWindowNextSlot; w++){
|
|
||||||
if (!(w->flags & WF_TRANSPARENT)) continue;
|
if (!(w->flags & WF_TRANSPARENT)) continue;
|
||||||
if (w->viewport == viewport) continue;
|
if (w->viewport == viewport) continue;
|
||||||
|
|
||||||
@@ -370,10 +374,10 @@ static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_vie
|
|||||||
if (viewport->y + viewport->height <= w->y)continue;
|
if (viewport->y + viewport->height <= w->y)continue;
|
||||||
if (w->y + w->height <= viewport->y) continue;
|
if (w->y + w->height <= viewport->y) continue;
|
||||||
|
|
||||||
left = w->x;
|
auto left = w->x;
|
||||||
right = w->x + w->width;
|
auto right = w->x + w->width;
|
||||||
top = w->y;
|
auto top = w->y;
|
||||||
bottom = w->y + w->height;
|
auto bottom = w->y + w->height;
|
||||||
|
|
||||||
if (left < viewport->x)left = viewport->x;
|
if (left < viewport->x)left = viewport->x;
|
||||||
if (right > viewport->x + viewport->width) right = viewport->x + viewport->width;
|
if (right > viewport->x + viewport->width) right = viewport->x + viewport->width;
|
||||||
@@ -387,8 +391,7 @@ static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_vie
|
|||||||
window_draw_all(dpi, left, top, right, bottom);
|
window_draw_all(dpi, left, top, right, bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
w = orignal_w;
|
viewport_redraw_after_shift(dpi, window, viewport, x_diff, y_diff);
|
||||||
viewport_redraw_after_shift(dpi, w, viewport, x_diff, y_diff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)
|
static void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -528,8 +528,6 @@ using close_callback = void (*)();
|
|||||||
#define WINDOW_LIMIT_MAX 64
|
#define WINDOW_LIMIT_MAX 64
|
||||||
#define WINDOW_LIMIT_RESERVED 4 // Used to reserve room for the main viewport, toolbars, etc.
|
#define WINDOW_LIMIT_RESERVED 4 // Used to reserve room for the main viewport, toolbars, etc.
|
||||||
|
|
||||||
extern rct_window * gWindowFirst;
|
|
||||||
extern rct_window * gWindowNextSlot;
|
|
||||||
extern rct_window * gWindowAudioExclusive;
|
extern rct_window * gWindowAudioExclusive;
|
||||||
|
|
||||||
extern uint16 gWindowUpdateTicks;
|
extern uint16 gWindowUpdateTicks;
|
||||||
@@ -539,6 +537,7 @@ extern colour_t gCurrentWindowColours[4];
|
|||||||
|
|
||||||
extern bool gDisableErrorWindowSound;
|
extern bool gDisableErrorWindowSound;
|
||||||
|
|
||||||
|
size_t window_get_index(const rct_window* w);
|
||||||
void window_dispatch_update_all();
|
void window_dispatch_update_all();
|
||||||
void window_update_all_viewports();
|
void window_update_all_viewports();
|
||||||
void window_update_all();
|
void window_update_all();
|
||||||
|
|||||||
@@ -7,9 +7,9 @@
|
|||||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#ifndef _WINDOW2_H_
|
#pragma once
|
||||||
#define _WINDOW2_H_
|
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
|
||||||
struct rct_research_item;
|
struct rct_research_item;
|
||||||
@@ -96,6 +96,4 @@ struct rct_window {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// rct2: 0x01420078
|
// rct2: 0x01420078
|
||||||
extern rct_window g_window_list[WINDOW_LIMIT_MAX + WINDOW_LIMIT_RESERVED];
|
extern std::vector<rct_window> g_window_list;
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
Reference in New Issue
Block a user