clean up paginated, and fix a bug (#348)
fix bug where text would show when there is only 1 page
This commit is contained in:
parent
bef63c3cd1
commit
df4226fdd7
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ struct DjuiPaginated {
|
|||
struct DjuiFlowLayout* layout;
|
||||
struct DjuiButton* prevButton;
|
||||
struct DjuiButton* nextButton;
|
||||
struct DjuiText* pageNumText;
|
||||
s32 startIndex;
|
||||
s32 showCount;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue