From df4226fdd778b9c5f6aa043a37751ea6975b4c90 Mon Sep 17 00:00:00 2001 From: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Date: Mon, 17 Apr 2023 13:10:45 +1000 Subject: [PATCH] clean up paginated, and fix a bug (#348) fix bug where text would show when there is only 1 page --- src/pc/djui/djui_paginated.c | 70 +++++++++++++++++++----------------- src/pc/djui/djui_paginated.h | 1 + 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/pc/djui/djui_paginated.c b/src/pc/djui/djui_paginated.c index e99ec21d..2a2f4cec 100644 --- a/src/pc/djui/djui_paginated.c +++ b/src/pc/djui/djui_paginated.c @@ -8,10 +8,6 @@ // events // //////////// -static struct DjuiButton* sPrevButton = NULL; -static struct DjuiButton* sNextButton = NULL; -static struct DjuiText* sPageNumText = NULL; - static s32 djui_paginated_get_count(struct DjuiPaginated* paginated) { s32 count = 0; struct DjuiBaseChild* dbc = paginated->layout->base.child; @@ -23,16 +19,20 @@ static s32 djui_paginated_get_count(struct DjuiPaginated* paginated) { return count; } +static inline void djui_paginated_set_count_text(struct DjuiPaginated* paginated, s32 count) { + char pageNumString[32] = { 0 }; + snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, count / paginated->showCount + 1); + djui_text_set_text(paginated->pageNumText, pageNumString); +} + static void djui_paginated_prev(struct DjuiBase* base) { struct DjuiPaginated* paginated = (struct DjuiPaginated*)base->parent; paginated->startIndex -= paginated->showCount; - djui_base_set_enabled(&sPrevButton->base, (paginated->startIndex > 0)); - djui_base_set_enabled(&sNextButton->base, true); + djui_base_set_enabled(&paginated->prevButton->base, (paginated->startIndex > 0)); + djui_base_set_enabled(&paginated->nextButton->base, true); - char pageNumString[32] = { 0 }; - snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, djui_paginated_get_count(paginated) / paginated->showCount + 1); - djui_text_set_text(sPageNumText, pageNumString); + djui_paginated_set_count_text(paginated, djui_paginated_get_count(paginated)); if (paginated->startIndex < 0) { paginated->startIndex = 0; } } @@ -42,12 +42,10 @@ static void djui_paginated_next(struct DjuiBase* base) { paginated->startIndex += paginated->showCount; s32 count = djui_paginated_get_count(paginated); - djui_base_set_enabled(&sNextButton->base, (paginated->startIndex < count - 8)); - djui_base_set_enabled(&sPrevButton->base, true); + djui_base_set_enabled(&paginated->nextButton->base, (paginated->startIndex < count - 8)); + djui_base_set_enabled(&paginated->prevButton->base, true); - char pageNumString[32] = { 0 }; - snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, count / paginated->showCount + 1); - djui_text_set_text(sPageNumText, pageNumString); + djui_paginated_set_count_text(paginated, count); if (paginated->startIndex >= count) { paginated->startIndex -= paginated->showCount; } } @@ -73,18 +71,18 @@ void djui_paginated_calculate_height(struct DjuiPaginated* paginated) { if (count <= paginated->showCount) { djui_base_set_visible(&paginated->prevButton->base, false); djui_base_set_visible(&paginated->nextButton->base, false); + djui_base_set_visible(&paginated->pageNumText->base, false); } else { djui_base_set_visible(&paginated->prevButton->base, true); djui_base_set_visible(&paginated->nextButton->base, true); + djui_base_set_visible(&paginated->pageNumText->base, true); height += paginated->layout->margin.value; height += paginated->nextButton->base.height.value; } djui_base_set_size(&paginated->base, paginated->base.width.value, height); - char pageNumString[32] = { 0 }; - snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, count / paginated->showCount + 1); - djui_text_set_text(sPageNumText, pageNumString); + djui_paginated_set_count_text(paginated, count); } bool djui_paginated_render(struct DjuiBase* base) { @@ -140,23 +138,31 @@ struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCou paginated->layout = layout; } - sPrevButton = djui_button_create(&paginated->base, "<", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_prev); - djui_base_set_alignment(&sPrevButton->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_BOTTOM); - djui_base_set_size_type(&sPrevButton->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&sPrevButton->base, 128, 32); - djui_base_set_enabled(&sPrevButton->base, false); - paginated->prevButton = sPrevButton; + { + struct DjuiButton* button = djui_button_create(&paginated->base, "<", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_prev); + djui_base_set_alignment(&button->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_BOTTOM); + djui_base_set_size_type(&button->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&button->base, 128, 32); + djui_base_set_enabled(&button->base, false); + paginated->prevButton = button; + } - sPageNumText = djui_text_create(&paginated->base, ""); - djui_base_set_color(&sPageNumText->base, 200, 200, 200, 255); - djui_base_set_alignment(&sPageNumText->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM); - sPageNumText->base.y.value -= 30; + { + struct DjuiText* text = djui_text_create(&paginated->base, ""); + djui_base_set_color(&text->base, 200, 200, 200, 255); + djui_base_set_alignment(&text->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM); + djui_base_set_size_type(&text->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); + text->base.y.value -= 30; + paginated->pageNumText = text; + } - sNextButton = djui_button_create(&paginated->base, ">", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_next); - djui_base_set_alignment(&sNextButton->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_BOTTOM); - djui_base_set_size_type(&sNextButton->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&sNextButton->base, 128, 32); - paginated->nextButton = sNextButton; + { + struct DjuiButton* button = djui_button_create(&paginated->base, ">", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_next); + djui_base_set_alignment(&button->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_BOTTOM); + djui_base_set_size_type(&button->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&button->base, 128, 32); + paginated->nextButton = button; + } return paginated; } diff --git a/src/pc/djui/djui_paginated.h b/src/pc/djui/djui_paginated.h index 4c36a7ab..60c8c930 100644 --- a/src/pc/djui/djui_paginated.h +++ b/src/pc/djui/djui_paginated.h @@ -6,6 +6,7 @@ struct DjuiPaginated { struct DjuiFlowLayout* layout; struct DjuiButton* prevButton; struct DjuiButton* nextButton; + struct DjuiText* pageNumText; s32 startIndex; s32 showCount; };