From 0d4a602cf9761b7676421a9c9d22f5c7abad5aad Mon Sep 17 00:00:00 2001 From: cEvolve05 Date: Sun, 1 Sep 2024 11:01:03 +0800 Subject: [PATCH] feat(message-manager): return id when show message --- src/Controller/Core/MessageManager.cc | 10 ++++++---- src/Controller/Core/MessageManager.h | 7 ++++--- ui/logic/message_manager.slint | 6 +++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Controller/Core/MessageManager.cc b/src/Controller/Core/MessageManager.cc index ae7d6ca5..52ce624b 100644 --- a/src/Controller/Core/MessageManager.cc +++ b/src/Controller/Core/MessageManager.cc @@ -16,7 +16,7 @@ MessageManager::MessageManager(slint::ComponentHandle uiEntry, UiBr toastList = std::make_shared>(); self->on_show_message([this](slint::SharedString content, MessageType type) { - showMessage(std::string(content), type); + return showMessage(std::string(content), type); }); self->on_get_message([this](int id) -> MessageData { return getMessage(id); }); @@ -26,9 +26,9 @@ MessageManager::MessageManager(slint::ComponentHandle uiEntry, UiBr self->set_toast_list(toastList); } -void MessageManager::showMessage(std::string content, - MessageType type, - std::chrono::steady_clock::duration timeout) { +int MessageManager::showMessage(std::string content, + MessageType type, + std::chrono::steady_clock::duration timeout) { auto& self = *this; auto id = nextId++; @@ -42,6 +42,8 @@ void MessageManager::showMessage(std::string content, [this, id] { hideMessage(id); }, timeout + animationLength, AsyncExecutor::Once | AsyncExecutor::Delay); + + return id; } void MessageManager::hideMessage(int id) { diff --git a/src/Controller/Core/MessageManager.h b/src/Controller/Core/MessageManager.h index 1b3b0b09..830ca1e0 100644 --- a/src/Controller/Core/MessageManager.h +++ b/src/Controller/Core/MessageManager.h @@ -18,9 +18,10 @@ class MessageManager : private GlobalAgent { MessageManager(slint::ComponentHandle uiEntry, UiBridge& bridge); MessageManager(MessageManager&) = delete; - void showMessage(std::string content, - MessageType type = MessageType::Info, - std::chrono::steady_clock::duration timeout = std::chrono::milliseconds(3000)); + // @return message id + int showMessage(std::string content, + MessageType type = MessageType::Info, + std::chrono::steady_clock::duration timeout = std::chrono::milliseconds(3000)); // unnecessary to invoke if set correct timeout void hideMessage(int id); diff --git a/ui/logic/message_manager.slint b/ui/logic/message_manager.slint index cdb6fb45..36764272 100644 --- a/ui/logic/message_manager.slint +++ b/ui/logic/message_manager.slint @@ -19,15 +19,15 @@ export struct ToastData { export global MessageManagerBridge { in-out property <[ToastData]> toast-list; in-out property refresh; - callback show-message(string, MessageType); + callback show-message(string, MessageType) -> int; pure callback get-message(int) -> MessageData; callback hide-message(int); } export global MessageManager { out property <[ToastData]> toast-list: MessageManagerBridge.toast-list; - public function show-message(content: string, type: MessageType) { - MessageManagerBridge.show-message(content, type); + public function show-message(content: string, type: MessageType) -> int { + return MessageManagerBridge.show-message(content, type); } pure public function get-message(id: int) -> MessageData { return MessageManagerBridge.get-message(id);