diff --git a/src/gui/localbrowser/LocalBrowserController.cpp b/src/gui/localbrowser/LocalBrowserController.cpp index 1f0092117..5d37be858 100644 --- a/src/gui/localbrowser/LocalBrowserController.cpp +++ b/src/gui/localbrowser/LocalBrowserController.cpp @@ -24,7 +24,7 @@ LocalBrowserController::LocalBrowserController(std::function onDone_): onDone = onDone_; - browserModel->UpdateSavesList(1); + browserModel->UpdateSavesList(0); } void LocalBrowserController::OpenSave(int index) @@ -94,13 +94,13 @@ void LocalBrowserController::ClearSelection() void LocalBrowserController::SetPage(int page) { - if (page != browserModel->GetPageNum() && page > 0 && page <= browserModel->GetPageCount()) + if (page != browserModel->GetPageNum() && page >= 0 && page < browserModel->GetPageCount()) browserModel->UpdateSavesList(page); } void LocalBrowserController::SetPageRelative(int offset) { - int page = std::min(std::max(browserModel->GetPageNum() + offset, 1), browserModel->GetPageCount()); + int page = std::max(std::min(browserModel->GetPageNum() + offset, browserModel->GetPageCount() - 1), 0); if (page != browserModel->GetPageNum()) browserModel->UpdateSavesList(page); } diff --git a/src/gui/localbrowser/LocalBrowserModel.cpp b/src/gui/localbrowser/LocalBrowserModel.cpp index 627a0d33a..ab2b747fc 100644 --- a/src/gui/localbrowser/LocalBrowserModel.cpp +++ b/src/gui/localbrowser/LocalBrowserModel.cpp @@ -3,19 +3,15 @@ #include "client/Client.h" #include "client/SaveFile.h" #include "client/GameSave.h" -#include "common/tpt-minmax.h" #include constexpr auto pageSize = 20; -LocalBrowserModel::LocalBrowserModel(): - currentPage(1), - stampToFront(1) +LocalBrowserModel::LocalBrowserModel() { stampIDs = Client::Ref().GetStamps(); } - std::vector LocalBrowserModel::GetSavesList() // non-owning { std::vector nonOwningSaveList; @@ -79,12 +75,10 @@ void LocalBrowserModel::UpdateSavesList(int pageNumber) { savesList.clear(); currentPage = pageNumber; - notifyPageChanged(); - notifySavesListChanged(); stampIDs = Client::Ref().GetStamps(); auto size = int(stampIDs.size()); - for (int i = (currentPage - 1) * pageSize; i < size && i < currentPage * pageSize; i++) + for (int i = currentPage * pageSize; i < size && i < (currentPage + 1) * pageSize; i++) { auto tempSave = Client::Ref().GetStamp(stampIDs[i]); if (tempSave) @@ -92,6 +86,7 @@ void LocalBrowserModel::UpdateSavesList(int pageNumber) savesList.push_back(std::move(tempSave)); } } + notifyPageChanged(); notifySavesListChanged(); } @@ -103,7 +98,8 @@ void LocalBrowserModel::RescanStamps() int LocalBrowserModel::GetPageCount() { auto size = int(stampIDs.size()); - return size / pageSize + ((size % pageSize) ? 1 : 0); + auto count = size / pageSize + ((size % pageSize) ? 1 : 0); + return count ? count : 1; // there is always at least one page; there may not be anything on it though } void LocalBrowserModel::SelectSave(ByteString stampID) diff --git a/src/gui/localbrowser/LocalBrowserModel.h b/src/gui/localbrowser/LocalBrowserModel.h index 7dd9ae0d4..4206c5e45 100644 --- a/src/gui/localbrowser/LocalBrowserModel.h +++ b/src/gui/localbrowser/LocalBrowserModel.h @@ -12,8 +12,8 @@ class LocalBrowserModel { std::vector stampIDs; std::vector> savesList; std::vector observers; - int currentPage; - bool stampToFront; + int currentPage = 0; + bool stampToFront = true; void notifySavesListChanged(); void notifyPageChanged(); void notifySelectedChanged(); diff --git a/src/gui/localbrowser/LocalBrowserView.cpp b/src/gui/localbrowser/LocalBrowserView.cpp index 99b181b07..03b177a4e 100644 --- a/src/gui/localbrowser/LocalBrowserView.cpp +++ b/src/gui/localbrowser/LocalBrowserView.cpp @@ -68,7 +68,7 @@ void LocalBrowserView::OnTick(float dt) if (changed && lastChanged < GetTicks()) { changed = false; - c->SetPage(std::max(pageTextbox->GetText().ToNumber(true), 0)); + c->SetPage(std::max(pageTextbox->GetText().ToNumber(true) - 1, 0)); } } @@ -91,11 +91,10 @@ void LocalBrowserView::NotifyPageChanged(LocalBrowserModel * sender) //pageCountLabel->Position.X = WINDOWW/2+6; pageLabel->Visible = pageCountLabel->Visible = pageTextbox->Visible = true; - pageInfo = String::Build(sender->GetPageNum()); - pageTextbox->SetText(pageInfo); + pageTextbox->SetText(String::Build(sender->GetPageNum() + 1)); } - if(sender->GetPageNum() == 1) + if(sender->GetPageNum() == 0) { previousButton->Visible = false; } @@ -103,7 +102,7 @@ void LocalBrowserView::NotifyPageChanged(LocalBrowserModel * sender) { previousButton->Visible = true; } - if(sender->GetPageNum() == sender->GetPageCount()) + if(sender->GetPageNum() == sender->GetPageCount() - 1) { nextButton->Visible = false; }