diff --git a/module-apps/DatabaseModel.hpp b/module-apps/DatabaseModel.hpp index 4068429be..26b519d49 100644 --- a/module-apps/DatabaseModel.hpp +++ b/module-apps/DatabaseModel.hpp @@ -29,15 +29,12 @@ namespace app clear(); } - virtual void requestRecordsCount() - {} - virtual bool updateRecords(std::unique_ptr> dbRecords, const uint32_t offset, const uint32_t limit, uint32_t count) { - + modelIndex = 0; records.clear(); if (dbRecords != nullptr) { diff --git a/module-apps/application-calendar/models/AllEventsModel.hpp b/module-apps/application-calendar/models/AllEventsModel.hpp index 70659fd89..e08d42079 100644 --- a/module-apps/application-calendar/models/AllEventsModel.hpp +++ b/module-apps/application-calendar/models/AllEventsModel.hpp @@ -17,7 +17,7 @@ class AllEventsModel : public gui::ListItemProvider // virtual methods for ListViewProvider [[nodiscard]] unsigned int getMinimalItemHeight() const override; gui::ListItem *getItem(gui::Order order) override; - [[nodiscard]] int getItemCount() const override + [[nodiscard]] unsigned int requestRecordsCount() override { return tempItemCount; }; diff --git a/module-apps/application-calendar/models/DayEventsModel.hpp b/module-apps/application-calendar/models/DayEventsModel.hpp index 70141a993..21be45105 100644 --- a/module-apps/application-calendar/models/DayEventsModel.hpp +++ b/module-apps/application-calendar/models/DayEventsModel.hpp @@ -18,7 +18,7 @@ class DayEventsModel : public gui::ListItemProvider // virtual methods for ListViewProvider [[nodiscard]] unsigned int getMinimalItemHeight() const override; gui::ListItem *getItem(gui::Order order) override; - [[nodiscard]] int getItemCount() const override + [[nodiscard]] unsigned int requestRecordsCount() override { return tempItemCount; }; diff --git a/module-apps/application-calendar/windows/CalendarMainWindow.cpp b/module-apps/application-calendar/windows/CalendarMainWindow.cpp index 19080f90d..1c6ffe060 100644 --- a/module-apps/application-calendar/windows/CalendarMainWindow.cpp +++ b/module-apps/application-calendar/windows/CalendarMainWindow.cpp @@ -334,7 +334,7 @@ namespace gui if (inputEvent.keyCode == gui::KeyCode::KEY_ENTER) { std::shared_ptr dayEventsModel = std::make_shared(this->application); - if (dayEventsModel->getItemCount() == 0) { + if (dayEventsModel->requestRecordsCount() == 0) { switchToNoEventsWindow(); } else { @@ -346,7 +346,7 @@ namespace gui if (inputEvent.keyCode == gui::KeyCode::KEY_LF) { std::shared_ptr allEventsModel = std::make_shared(this->application); - if (allEventsModel->getItemCount() == 0) { + if (allEventsModel->requestRecordsCount() == 0) { switchToNoEventsWindow(); } else { diff --git a/module-apps/application-calllog/CalllogModel.cpp b/module-apps/application-calllog/CalllogModel.cpp index 18ad3cd6c..9512077db 100644 --- a/module-apps/application-calllog/CalllogModel.cpp +++ b/module-apps/application-calllog/CalllogModel.cpp @@ -21,7 +21,7 @@ using namespace calllog; CalllogModel::CalllogModel(app::Application *app) : DatabaseModel(app) {} -void CalllogModel::requestRecordsCount() +unsigned int CalllogModel::requestRecordsCount() { #if (DEBUG_CALLLOG_DB_ACCESS) auto tstamp = xTaskGetTickCount(); @@ -31,11 +31,7 @@ void CalllogModel::requestRecordsCount() LOG_INFO("DBServiceAPI::CalllogGetCount %d records %d ms", recordsCount, xTaskGetTickCount() - tstamp); #endif - // request first and second page if possible - if (recordsCount > 0) { - LOG_INFO("DBServiceAPI::CalllogGetCount CalllogGetLimitOffset"); - DBServiceAPI::CalllogGetLimitOffset(application, 0, calllog::settings::pageSize); - } + return recordsCount; } void CalllogModel::requestRecords(const uint32_t offset, const uint32_t limit) @@ -57,7 +53,6 @@ bool CalllogModel::updateRecords(std::unique_ptr> rec #endif DatabaseModel::updateRecords(std::move(records), offset, limit, count); - modelIndex = 0; list->onProviderDataUpdate(); return true; diff --git a/module-apps/application-calllog/CalllogModel.hpp b/module-apps/application-calllog/CalllogModel.hpp index ed8a1eba9..303469faa 100644 --- a/module-apps/application-calllog/CalllogModel.hpp +++ b/module-apps/application-calllog/CalllogModel.hpp @@ -26,7 +26,6 @@ class CalllogModel : public app::DatabaseModel, public gui::ListI CalllogModel(app::Application *app); // virtual methods - void requestRecordsCount() override; bool updateRecords(std::unique_ptr> records, const uint32_t offset, const uint32_t limit, @@ -36,8 +35,5 @@ class CalllogModel : public app::DatabaseModel, public gui::ListI // virtual methods for ListViewProvider unsigned int getMinimalItemHeight() const override; gui::ListItem *getItem(gui::Order order) override; - int getItemCount() const override - { - return recordsCount; - }; + [[nodiscard]] unsigned int requestRecordsCount() override; }; diff --git a/module-apps/application-calllog/data/CallLogInternals.hpp b/module-apps/application-calllog/data/CallLogInternals.hpp index 38141aac4..9d2ba350b 100644 --- a/module-apps/application-calllog/data/CallLogInternals.hpp +++ b/module-apps/application-calllog/data/CallLogInternals.hpp @@ -43,6 +43,5 @@ namespace calllog const inline std::string DetailsWindowStr = "DetailsWindow"; const inline std::string DialogYesNoStr = "DialogYesNo"; - constexpr auto pageSize = 8; } // namespace settings } // namespace calllog diff --git a/module-apps/application-calllog/windows/CallLogMainWindow.cpp b/module-apps/application-calllog/windows/CallLogMainWindow.cpp index e0065b4ac..edd39eb02 100644 --- a/module-apps/application-calllog/windows/CallLogMainWindow.cpp +++ b/module-apps/application-calllog/windows/CallLogMainWindow.cpp @@ -60,10 +60,7 @@ namespace gui void CallLogMainWindow::onBeforeShow(ShowMode mode, SwitchData *data) { if (mode == ShowMode::GUI_SHOW_INIT) { - calllogModel->clear(); - calllogModel->requestRecordsCount(); - list->clear(); - list->setElementsCount(calllogModel->getItemCount()); + list->rebuildList(); } auto app = dynamic_cast(application); assert(app != nullptr); diff --git a/module-apps/application-messages/MessagesStyle.hpp b/module-apps/application-messages/MessagesStyle.hpp index 1d9ec0266..3fb80ed13 100644 --- a/module-apps/application-messages/MessagesStyle.hpp +++ b/module-apps/application-messages/MessagesStyle.hpp @@ -6,8 +6,6 @@ namespace style { namespace threads { - constexpr uint32_t pageSize = 5; - constexpr uint32_t listPositionX = style::window::default_left_margin; // Magic 1 -> discussed with Design for proper alignment. constexpr uint32_t ListPositionY = style::header::height - 1; @@ -56,8 +54,6 @@ namespace style { namespace list { - constexpr uint32_t pageSize = 7; - constexpr uint32_t x = style::window::default_left_margin; constexpr uint32_t y = style::header::height; constexpr uint32_t h = style::window_height - y - style::footer::height; diff --git a/module-apps/application-messages/models/BaseThreadRecordModel.cpp b/module-apps/application-messages/models/BaseThreadRecordModel.cpp index 061b66447..d9f63bc05 100644 --- a/module-apps/application-messages/models/BaseThreadRecordModel.cpp +++ b/module-apps/application-messages/models/BaseThreadRecordModel.cpp @@ -10,9 +10,10 @@ BaseThreadRecordModel::BaseThreadRecordModel(app::Application *app) : DatabaseMo requestRecordsCount(); } -void BaseThreadRecordModel::requestRecordsCount(void) +unsigned int BaseThreadRecordModel::requestRecordsCount() { recordsCount = DBServiceAPI::ThreadGetCount(application); + return recordsCount; } bool BaseThreadRecordModel::updateRecords(std::unique_ptr> records, @@ -21,7 +22,6 @@ bool BaseThreadRecordModel::updateRecords(std::unique_ptronProviderDataUpdate(); return true; } diff --git a/module-apps/application-messages/models/BaseThreadRecordModel.hpp b/module-apps/application-messages/models/BaseThreadRecordModel.hpp index 343f8086f..f41d8d523 100644 --- a/module-apps/application-messages/models/BaseThreadRecordModel.hpp +++ b/module-apps/application-messages/models/BaseThreadRecordModel.hpp @@ -14,18 +14,13 @@ class BaseThreadRecordModel : public app::DatabaseModel, public gu BaseThreadRecordModel() = delete; BaseThreadRecordModel(app::Application *app); - void requestRecordsCount() override; + unsigned int requestRecordsCount() override; bool updateRecords(std::unique_ptr> records, const uint32_t offset, const uint32_t limit, uint32_t count) override; void requestRecords(const uint32_t offset, const uint32_t limit) override; - int getItemCount() const override - { - return recordsCount; - }; - app::Application *getApplication(void) { return application; diff --git a/module-apps/application-messages/models/SearchResultsModel.cpp b/module-apps/application-messages/models/SearchResultsModel.cpp index 6547552f0..204c13c39 100644 --- a/module-apps/application-messages/models/SearchResultsModel.cpp +++ b/module-apps/application-messages/models/SearchResultsModel.cpp @@ -41,9 +41,6 @@ namespace gui::model return ret; } - void SearchResultsModel::requestRecordsCount() - {} - void SearchResultsModel::requestRecords(uint32_t offset, uint32_t limit) { if (std::string(search_value).compare("") != 0) { diff --git a/module-apps/application-messages/models/SearchResultsModel.hpp b/module-apps/application-messages/models/SearchResultsModel.hpp index d9b153fb1..0b441d4cf 100644 --- a/module-apps/application-messages/models/SearchResultsModel.hpp +++ b/module-apps/application-messages/models/SearchResultsModel.hpp @@ -18,8 +18,6 @@ namespace gui::model unsigned int getMinimalItemHeight() const override; ListItem *getItem(Order order) override; - /// resquest data for model - not needed - void requestRecordsCount() override; /// empty, size get in requestRecords void requestRecords(uint32_t offset, uint32_t limit) override; /// set count in top model class - used for scroll bar diff --git a/module-apps/application-messages/widgets/SMSTemplateModel.cpp b/module-apps/application-messages/widgets/SMSTemplateModel.cpp index a4410654f..6b83b9154 100644 --- a/module-apps/application-messages/widgets/SMSTemplateModel.cpp +++ b/module-apps/application-messages/widgets/SMSTemplateModel.cpp @@ -10,16 +10,12 @@ SMSTemplateModel::SMSTemplateModel(app::Application *app) : DatabaseModel(app) {} -void SMSTemplateModel::requestRecordsCount() +unsigned int SMSTemplateModel::requestRecordsCount() { recordsCount = DBServiceAPI::SMSTemplateGetCount(application); LOG_DEBUG("SMSTemplateGetCount %" PRIu32, recordsCount); - // request first - if (recordsCount > 0) { - LOG_DEBUG("SMSTemplateGetLimitOffset"); - auto pageSize = style::messages::templates::list::pageSize; - DBServiceAPI::SMSTemplateGetLimitOffset(application, 0, pageSize); - } + + return recordsCount; } void SMSTemplateModel::requestRecords(const uint32_t offset, const uint32_t limit) @@ -36,7 +32,6 @@ bool SMSTemplateModel::updateRecords(std::unique_ptronProviderDataUpdate(); return true; } diff --git a/module-apps/application-messages/widgets/SMSTemplateModel.hpp b/module-apps/application-messages/widgets/SMSTemplateModel.hpp index fa0dce3db..8fe29a594 100644 --- a/module-apps/application-messages/widgets/SMSTemplateModel.hpp +++ b/module-apps/application-messages/widgets/SMSTemplateModel.hpp @@ -13,7 +13,7 @@ class SMSTemplateModel : public app::DatabaseModel, public gu SMSTemplateModel(app::Application *app); virtual ~SMSTemplateModel() = default; - void requestRecordsCount() override; + unsigned int requestRecordsCount() override; bool updateRecords(std::unique_ptr> records, const uint32_t offset, const uint32_t limit, @@ -22,9 +22,4 @@ class SMSTemplateModel : public app::DatabaseModel, public gu unsigned int getMinimalItemHeight() const override; gui::ListItem *getItem(gui::Order order) override; - - int getItemCount() const override - { - return recordsCount; - }; }; diff --git a/module-apps/application-messages/windows/MessagesMainWindow.cpp b/module-apps/application-messages/windows/MessagesMainWindow.cpp index 1f8d4974b..dd9eb1c82 100644 --- a/module-apps/application-messages/windows/MessagesMainWindow.cpp +++ b/module-apps/application-messages/windows/MessagesMainWindow.cpp @@ -34,14 +34,9 @@ namespace gui buildInterface(); } - void MessagesMainWindow::loadData() - { - setFocusItem(list); - } - void MessagesMainWindow::rebuild() { - loadData(); + list->rebuildList(); } void MessagesMainWindow::buildInterface() @@ -96,6 +91,8 @@ namespace gui return true; }; + setFocusItem(list); + emptyListIcon->setVisible(false); emptyListIcon->focusChangedCallback = [=](gui::Item & /*item*/) { bottomBar->setActive(BottomBar::Side::LEFT, false); @@ -122,11 +119,12 @@ namespace gui } } } + if (mode == ShowMode::GUI_SHOW_INIT || data == nullptr) { - loadData(); + rebuild(); } - if (threadModel->getItemCount() == 0) { + if (threadModel->requestRecordsCount() == 0) { emptyListIcon->setVisible(true); setFocusItem(emptyListIcon); } @@ -182,19 +180,18 @@ namespace gui msgNotification->interface == db::Interface::Name::SMS) { if (msgNotification->type == db::Query::Type::Delete || - msgNotification->type == db::Query::Type::Update) { + msgNotification->type == db::Query::Type::Update || + msgNotification->type == db::Query::Type::Create) { LOG_INFO("I CO MAMY type? %d", (int)msgNotification->type); LOG_INFO("I CO MAMY intefejs? %d", (int)msgNotification->interface); - threadModel->requestRecordsCount(); - list->setProvider(threadModel); - } - rebuild(); - if (this == application->getCurrentWindow()) { - application->refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST); + rebuild(); + if (this == application->getCurrentWindow()) { + application->refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST); + } + return true; } - return true; } } return false; diff --git a/module-apps/application-messages/windows/MessagesMainWindow.hpp b/module-apps/application-messages/windows/MessagesMainWindow.hpp index 4d286fbb8..3c3b8e32a 100644 --- a/module-apps/application-messages/windows/MessagesMainWindow.hpp +++ b/module-apps/application-messages/windows/MessagesMainWindow.hpp @@ -27,8 +27,6 @@ namespace gui Icon *emptyListIcon = nullptr; - void loadData(); - public: MessagesMainWindow(app::Application *app); diff --git a/module-apps/application-messages/windows/SMSTemplatesWindow.cpp b/module-apps/application-messages/windows/SMSTemplatesWindow.cpp index e2f264baf..31a89e4ec 100644 --- a/module-apps/application-messages/windows/SMSTemplatesWindow.cpp +++ b/module-apps/application-messages/windows/SMSTemplatesWindow.cpp @@ -90,10 +90,7 @@ namespace gui void SMSTemplatesWindow::onBeforeShow(ShowMode mode, SwitchData *data) { if (mode == ShowMode::GUI_SHOW_INIT) { - smsTemplateModel->clear(); - smsTemplateModel->requestRecordsCount(); - list->clear(); - list->setElementsCount(smsTemplateModel->getItemCount()); + list->rebuildList(); } if (auto switchData = dynamic_cast(data)) { diff --git a/module-apps/application-messages/windows/SearchResults.cpp b/module-apps/application-messages/windows/SearchResults.cpp index 878c9f995..31ec34bf9 100644 --- a/module-apps/application-messages/windows/SearchResults.cpp +++ b/module-apps/application-messages/windows/SearchResults.cpp @@ -48,7 +48,7 @@ namespace gui if (text.length() != 0u) { model->setSearchValue(text); model->requestRecords(0, model->getMaxItemsOnScreen()); - list->setElementsCount(model->getItemCount()); + list->setElementsCount(model->requestRecordsCount()); setFocusItem(list); return true; } diff --git a/module-apps/application-notes/NotesModel.cpp b/module-apps/application-notes/NotesModel.cpp index e002821b8..d4d18c243 100644 --- a/module-apps/application-notes/NotesModel.cpp +++ b/module-apps/application-notes/NotesModel.cpp @@ -15,14 +15,10 @@ NotesModel::NotesModel(app::Application *app) : DatabaseModel(app) {} -void NotesModel::requestRecordsCount() +unsigned int NotesModel::requestRecordsCount() { recordsCount = DBServiceAPI::NotesGetCount(application); - - // request first and second page if possible - if (recordsCount > 0) { - DBServiceAPI::NotesGetLimitOffset(application, 0, 3); - } + return recordsCount; } void NotesModel::requestRecords(const uint32_t offset, const uint32_t limit) @@ -45,7 +41,6 @@ bool NotesModel::updateRecords(std::unique_ptr> records #endif DatabaseModel::updateRecords(std::move(records), offset, limit, count); - modelIndex = 0; list->onProviderDataUpdate(); return true; diff --git a/module-apps/application-notes/NotesModel.hpp b/module-apps/application-notes/NotesModel.hpp index fe97ae08f..93dd4c3c6 100644 --- a/module-apps/application-notes/NotesModel.hpp +++ b/module-apps/application-notes/NotesModel.hpp @@ -26,7 +26,6 @@ class NotesModel : public app::DatabaseModel, public gui::ListItemP NotesModel(app::Application *app); // virtual methods - void requestRecordsCount() override; bool updateRecords(std::unique_ptr> records, const uint32_t offset, const uint32_t limit, @@ -36,10 +35,7 @@ class NotesModel : public app::DatabaseModel, public gui::ListItemP // virtual methods for ListViewProvider unsigned int getMinimalItemHeight() const override; gui::ListItem *getItem(gui::Order order) override; - int getItemCount() const override - { - return recordsCount; - }; + [[nodiscard]] unsigned int requestRecordsCount() override; }; #endif /* MODULE_APPS_APPLICATION_NOTES_NOTESMODEL_HPP_ */ diff --git a/module-apps/application-notes/windows/NotesMainWindow.cpp b/module-apps/application-notes/windows/NotesMainWindow.cpp index b3971eb3a..1688fdf8b 100644 --- a/module-apps/application-notes/windows/NotesMainWindow.cpp +++ b/module-apps/application-notes/windows/NotesMainWindow.cpp @@ -63,10 +63,7 @@ namespace gui void NotesMainWindow::onBeforeShow(ShowMode mode, SwitchData *data) { - notesModel->clear(); - notesModel->requestRecordsCount(); - list->clear(); - list->setElementsCount(notesModel->getItemCount()); + list->rebuildList(); } bool NotesMainWindow::onInput(const InputEvent &inputEvent) diff --git a/module-apps/application-phonebook/ApplicationPhonebook.cpp b/module-apps/application-phonebook/ApplicationPhonebook.cpp index 2c3a941e4..ac1d59071 100644 --- a/module-apps/application-phonebook/ApplicationPhonebook.cpp +++ b/module-apps/application-phonebook/ApplicationPhonebook.cpp @@ -117,8 +117,8 @@ namespace app { auto searchModel = std::make_unique(this, searchFilter); - LOG_DEBUG("Search results count: %d", searchModel->getItemCount()); - if (searchModel->getItemCount() > 0) { + LOG_DEBUG("Search results count: %d", searchModel->requestRecordsCount()); + if (searchModel->requestRecordsCount() > 0) { auto main_window = dynamic_cast(windows[gui::name::window::main_window]); if (main_window == nullptr) { LOG_ERROR("Failed to get main window."); diff --git a/module-apps/application-phonebook/data/PhonebookStyle.hpp b/module-apps/application-phonebook/data/PhonebookStyle.hpp index ed85bd879..544f31515 100644 --- a/module-apps/application-phonebook/data/PhonebookStyle.hpp +++ b/module-apps/application-phonebook/data/PhonebookStyle.hpp @@ -44,10 +44,6 @@ namespace phonebookStyle constexpr uint32_t y = style::header::height; constexpr uint32_t w = style::listview::body_width_with_scroll; constexpr uint32_t h = style::window_height - y - style::footer::height; - - constexpr uint32_t pageSize = 8; - constexpr uint32_t penFocusWidth = style::window::default_border_no_focus_w; - constexpr uint32_t penWidth = 0; } // namespace contactsList } // namespace mainWindow @@ -81,10 +77,6 @@ namespace phonebookStyle constexpr uint32_t y = style::header::height; constexpr uint32_t w = style::listview::body_width_with_scroll; constexpr uint32_t h = style::window_height - y - style::footer::height; - - constexpr uint32_t pageSize = 8; - constexpr uint32_t penFocusWidth = style::window::default_border_no_focus_w; - constexpr uint32_t penWidth = 0; } // namespace searchResultList } // namespace searchResultsWindow diff --git a/module-apps/application-phonebook/models/ContactDetailsModel.cpp b/module-apps/application-phonebook/models/ContactDetailsModel.cpp index 363924c35..487d4df51 100644 --- a/module-apps/application-phonebook/models/ContactDetailsModel.cpp +++ b/module-apps/application-phonebook/models/ContactDetailsModel.cpp @@ -11,7 +11,7 @@ ContactDetailsModel::ContactDetailsModel(app::Application *app) : application(app) {} -auto ContactDetailsModel::getItemCount() const -> int +auto ContactDetailsModel::requestRecordsCount() -> unsigned int { return internalData.size(); } diff --git a/module-apps/application-phonebook/models/ContactDetailsModel.hpp b/module-apps/application-phonebook/models/ContactDetailsModel.hpp index 3ab84f78e..d555e32cb 100644 --- a/module-apps/application-phonebook/models/ContactDetailsModel.hpp +++ b/module-apps/application-phonebook/models/ContactDetailsModel.hpp @@ -16,7 +16,7 @@ class ContactDetailsModel : public app::InternalModel, p void loadData(std::shared_ptr contactRecord); - [[nodiscard]] auto getItemCount() const -> int override; + [[nodiscard]] auto requestRecordsCount() -> unsigned int override; [[nodiscard]] auto getMinimalItemHeight() const -> unsigned int override; auto getItem(gui::Order order) -> gui::ListItem * override; void requestRecords(const uint32_t offset, const uint32_t limit) override; diff --git a/module-apps/application-phonebook/models/NewContactModel.cpp b/module-apps/application-phonebook/models/NewContactModel.cpp index 138253821..00d10424c 100644 --- a/module-apps/application-phonebook/models/NewContactModel.cpp +++ b/module-apps/application-phonebook/models/NewContactModel.cpp @@ -10,7 +10,7 @@ NewContactModel::NewContactModel(app::Application *app) : application(app) {} -auto NewContactModel::getItemCount() const -> int +auto NewContactModel::requestRecordsCount() -> unsigned int { return internalData.size(); } diff --git a/module-apps/application-phonebook/models/NewContactModel.hpp b/module-apps/application-phonebook/models/NewContactModel.hpp index f9ef96a8f..fdfb57462 100644 --- a/module-apps/application-phonebook/models/NewContactModel.hpp +++ b/module-apps/application-phonebook/models/NewContactModel.hpp @@ -19,7 +19,7 @@ class NewContactModel : public app::InternalModel, publi void loadData(std::shared_ptr contactRecord); void createData(); - [[nodiscard]] auto getItemCount() const -> int override; + [[nodiscard]] auto requestRecordsCount() -> unsigned int override; [[nodiscard]] auto getMinimalItemHeight() const -> unsigned int override; diff --git a/module-apps/application-phonebook/models/PhonebookModel.cpp b/module-apps/application-phonebook/models/PhonebookModel.cpp index 3c029e429..9f86a2097 100644 --- a/module-apps/application-phonebook/models/PhonebookModel.cpp +++ b/module-apps/application-phonebook/models/PhonebookModel.cpp @@ -18,11 +18,9 @@ const static std::uint32_t phonebookModelTimeout = 1000; PhonebookModel::PhonebookModel(app::Application *app, std::string filter) : DatabaseModel(app), queryFilter(std::move(filter)) -{ - requestRecordsCount(); -} +{} -void PhonebookModel::requestRecordsCount() +auto PhonebookModel::requestRecordsCount() -> unsigned int { auto [code, msg] = DBServiceAPI::GetQueryWithReply(application, db::Interface::Name::Contact, @@ -39,6 +37,8 @@ void PhonebookModel::requestRecordsCount() recordsCount = countResult->getSize(); } + + return recordsCount; } void PhonebookModel::requestRecords(const uint32_t offset, const uint32_t limit) @@ -66,7 +66,6 @@ auto PhonebookModel::updateRecords(std::unique_ptr> r #endif DatabaseModel::updateRecords(std::move(records), offset, limit, count); - modelIndex = 0; list->onProviderDataUpdate(); return true; diff --git a/module-apps/application-phonebook/models/PhonebookModel.hpp b/module-apps/application-phonebook/models/PhonebookModel.hpp index 3166b2375..4bf2d21e2 100644 --- a/module-apps/application-phonebook/models/PhonebookModel.hpp +++ b/module-apps/application-phonebook/models/PhonebookModel.hpp @@ -23,7 +23,6 @@ class PhonebookModel : public app::DatabaseModel, public gui::Lis ~PhonebookModel() override = default; // virtual methods from DatabaseModel - void requestRecordsCount() override; auto updateRecords(std::unique_ptr> records, const uint32_t offset = 0, const uint32_t limit = 0, @@ -37,10 +36,7 @@ class PhonebookModel : public app::DatabaseModel, public gui::Lis // virtual method for db::QueryListener auto handleQueryResponse(db::QueryResult *) -> bool override; - [[nodiscard]] auto getItemCount() const -> int override - { - return recordsCount; - }; + [[nodiscard]] auto requestRecordsCount() -> unsigned int override; [[nodiscard]] auto getFilter() const -> const std::string &; diff --git a/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp b/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp index 031d886c4..05ab3e0eb 100644 --- a/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp +++ b/module-apps/application-phonebook/windows/PhonebookContactDetails.cpp @@ -58,7 +58,7 @@ namespace gui void PhonebookContactDetails::onBeforeShow(ShowMode mode, SwitchData *data) { if (mode == ShowMode::GUI_SHOW_INIT) { - bodyList->setElementsCount(contactDetailsModel->getItemCount()); + bodyList->rebuildList(); } setTitle(contact->getFormattedName(ContactRecord::NameFormatType::Title)); diff --git a/module-apps/application-phonebook/windows/PhonebookMainWindow.cpp b/module-apps/application-phonebook/windows/PhonebookMainWindow.cpp index d8fddeead..4c66a5863 100644 --- a/module-apps/application-phonebook/windows/PhonebookMainWindow.cpp +++ b/module-apps/application-phonebook/windows/PhonebookMainWindow.cpp @@ -60,8 +60,7 @@ namespace gui phonebookStyle::mainWindow::contactsList::w, phonebookStyle::mainWindow::contactsList::h, phonebookModel); - contactsList->setPenFocusWidth(phonebookStyle::mainWindow::contactsList::penFocusWidth); - contactsList->setPenWidth(phonebookStyle::mainWindow::contactsList::penWidth); + setFocusItem(contactsList); bottomBar->setActive(BottomBar::Side::LEFT, true); bottomBar->setActive(BottomBar::Side::CENTER, true); @@ -84,7 +83,6 @@ namespace gui void PhonebookMainWindow::onBeforeShow(ShowMode mode, SwitchData *data) { LOG_INFO("onBeforeShow"); - setFocusItem(contactsList); auto contactRequest = dynamic_cast(data); requestedSearch = contactRequest != nullptr; diff --git a/module-apps/application-phonebook/windows/PhonebookNewContact.cpp b/module-apps/application-phonebook/windows/PhonebookNewContact.cpp index 77b389443..25e0858ff 100644 --- a/module-apps/application-phonebook/windows/PhonebookNewContact.cpp +++ b/module-apps/application-phonebook/windows/PhonebookNewContact.cpp @@ -51,7 +51,7 @@ namespace gui } if (mode == ShowMode::GUI_SHOW_INIT) { - list->setElementsCount(newContactModel->getItemCount()); + list->rebuildList(); } switch (contactAction) { diff --git a/module-apps/application-phonebook/windows/PhonebookSearchResults.cpp b/module-apps/application-phonebook/windows/PhonebookSearchResults.cpp index 77aabc685..e25d69f91 100644 --- a/module-apps/application-phonebook/windows/PhonebookSearchResults.cpp +++ b/module-apps/application-phonebook/windows/PhonebookSearchResults.cpp @@ -34,8 +34,6 @@ namespace gui phonebookStyle::searchResultsWindow::searchResultList::w, phonebookStyle::searchResultsWindow::searchResultList::h, searchResultsModel); - searchResultList->setPenFocusWidth(phonebookStyle::searchResultsWindow::searchResultList::penFocusWidth); - searchResultList->setPenWidth(phonebookStyle::searchResultsWindow::searchResultList::penWidth); bottomBar->setActive(BottomBar::Side::CENTER, true); bottomBar->setActive(BottomBar::Side::RIGHT, true); diff --git a/module-gui/gui/widgets/ListItemProvider.hpp b/module-gui/gui/widgets/ListItemProvider.hpp index 44f471240..363837ed9 100644 --- a/module-gui/gui/widgets/ListItemProvider.hpp +++ b/module-gui/gui/widgets/ListItemProvider.hpp @@ -21,7 +21,7 @@ namespace gui ListView *list = nullptr; - virtual int getItemCount() const = 0; + virtual unsigned int requestRecordsCount() = 0; virtual unsigned int getMinimalItemHeight() const = 0; diff --git a/module-gui/gui/widgets/ListView.cpp b/module-gui/gui/widgets/ListView.cpp index 4dfa3a645..e69b88268 100644 --- a/module-gui/gui/widgets/ListView.cpp +++ b/module-gui/gui/widgets/ListView.cpp @@ -120,12 +120,19 @@ namespace gui clear(); provider = prov; provider->list = this; - setElementsCount(provider->getItemCount()); + + setElementsCount(provider->requestRecordsCount()); provider->requestRecords(0, calculateLimit()); - refresh(); } } + void ListView::rebuildList() + { + clear(); + setElementsCount(provider->requestRecordsCount()); + provider->requestRecords(0, calculateLimit()); + }; + std::shared_ptr ListView::getProvider() { return provider; @@ -173,7 +180,6 @@ namespace gui clearItems(); - elementsCount = provider->getItemCount(); addItemsOnPage(); setFocus(); diff --git a/module-gui/gui/widgets/ListView.hpp b/module-gui/gui/widgets/ListView.hpp index dfe6d6fc7..c866f1164 100644 --- a/module-gui/gui/widgets/ListView.hpp +++ b/module-gui/gui/widgets/ListView.hpp @@ -56,6 +56,7 @@ namespace gui void setElementsCount(int count); void setProvider(std::shared_ptr provider); + void rebuildList(); std::shared_ptr getProvider(); void setListViewType(style::listview::Type type); void setScrollTopMargin(int value); diff --git a/module-gui/test/mock/TestListViewProvider.hpp b/module-gui/test/mock/TestListViewProvider.hpp index 0521b6626..5c41da3e7 100644 --- a/module-gui/test/mock/TestListViewProvider.hpp +++ b/module-gui/test/mock/TestListViewProvider.hpp @@ -52,7 +52,7 @@ namespace gui virtual ~TestListViewProvider(); - int getItemCount() const override; + [[nodiscard]] unsigned int getItemCount() override; unsigned int getMinimalItemHeight() const override;