From 47024a3bd5f9b9173319a0c345e546bb573daf56 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 28 May 2021 15:03:47 +0300 Subject: Gempub: Linear navigation with left/right arrow keys --- src/ui/documentwidget.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 3 deletions(-) (limited to 'src/ui/documentwidget.c') diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index f354623e..c8aad02b 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c @@ -1222,15 +1222,89 @@ static void postProcessRequestContent_DocumentWidget_(iDocumentWidget *d, iBool } if (d->sourceGempub) { if (equal_String(d->mod.url, coverPageUrl_Gempub(d->sourceGempub))) { - makeFooterButtons_DocumentWidget_(d, (iMenuItem[]){ - { "Gempub Cover Page", 0, 0, NULL } - }, 1); + if (equalCase_Rangecc(urlScheme_String(d->mod.url), "file")) { + iArray *items = collectNew_Array(sizeof(iMenuItem)); + pushBack_Array( + items, + &(iMenuItem){ book_Icon " ${gempub.cover.view}", + 0, + 0, + format_CStr("!open url:%s", + cstr_String(indexPageUrl_Gempub(d->sourceGempub))) }); + if (navSize_Gempub(d->sourceGempub) > 0) { + pushBack_Array( + items, + &(iMenuItem){ + format_CStr(forwardArrow_Icon " %s", + cstr_String(navLinkLabel_Gempub(d->sourceGempub, 0))), + SDLK_RIGHT, + 0, + format_CStr("!open url:%s", + cstr_String(navLinkUrl_Gempub(d->sourceGempub, 0))) }); + } + makeFooterButtons_DocumentWidget_(d, constData_Array(items), size_Array(items)); + } if (preloadCoverImage_Gempub(d->sourceGempub, d->doc)) { redoLayout_GmDocument(d->doc); updateVisible_DocumentWidget_(d); invalidate_DocumentWidget_(d); } } + else if (equal_String(d->mod.url, indexPageUrl_Gempub(d->sourceGempub))) { + makeFooterButtons_DocumentWidget_( + d, + (iMenuItem[]){ { format_CStr(book_Icon " %s", + cstr_String(property_Gempub(d->sourceGempub, + title_GempubProperty))), + SDLK_LEFT, + 0, + format_CStr("!open url:%s", + cstr_String(coverPageUrl_Gempub(d->sourceGempub))) } }, + 1); + } + else { + /* Navigation buttons. */ + iArray *items = collectNew_Array(sizeof(iMenuItem)); + const size_t navIndex = navIndex_Gempub(d->sourceGempub, d->mod.url); + if (navIndex != iInvalidPos) { + if (navIndex < navSize_Gempub(d->sourceGempub) - 1) { + pushBack_Array( + items, + &(iMenuItem){ + format_CStr(forwardArrow_Icon " %s", + cstr_String(navLinkLabel_Gempub(d->sourceGempub, navIndex + 1))), + SDLK_RIGHT, + 0, + format_CStr("!open url:%s", + cstr_String(navLinkUrl_Gempub(d->sourceGempub, navIndex + 1))) }); + } + if (navIndex > 0) { + pushBack_Array( + items, + &(iMenuItem){ + format_CStr(backArrow_Icon " %s", + cstr_String(navLinkLabel_Gempub(d->sourceGempub, navIndex - 1))), + SDLK_LEFT, + 0, + format_CStr("!open url:%s", + cstr_String(navLinkUrl_Gempub(d->sourceGempub, navIndex - 1))) }); + } + else if (!equalCase_String(d->mod.url, indexPageUrl_Gempub(d->sourceGempub))) { + pushBack_Array( + items, + &(iMenuItem){ + format_CStr(book_Icon " %s", + cstr_String(property_Gempub(d->sourceGempub, title_GempubProperty))), + SDLK_LEFT, + 0, + format_CStr("!open url:%s", + cstr_String(coverPageUrl_Gempub(d->sourceGempub))) }); + } + } + if (!isEmpty_Array(items)) { + makeFooterButtons_DocumentWidget_(d, constData_Array(items), size_Array(items)); + } + } if (!isCached && prefs_App()->pinSplit && equal_String(d->mod.url, indexPageUrl_Gempub(d->sourceGempub))) { const iString *navStart = navStartLinkUrl_Gempub(d->sourceGempub); -- cgit v1.2.3