diff --git a/module-apps/application-messages/ApplicationMessages.cpp b/module-apps/application-messages/ApplicationMessages.cpp index 4e8c55ac8..9de43c32f 100644 --- a/module-apps/application-messages/ApplicationMessages.cpp +++ b/module-apps/application-messages/ApplicationMessages.cpp @@ -13,6 +13,7 @@ #include "ApplicationMessages.hpp" #include "windows/NewMessage.hpp" +#include "windows/OptionsMessages.hpp" #include "windows/OptionsWindow.hpp" #include "windows/ThreadViewWindow.hpp" #include @@ -83,6 +84,7 @@ sys::ReturnCodes ApplicationMessages::DeinitHandler() { void ApplicationMessages::createUserInterface() { threadOptionsWindow = gui::newOptionWindow(this, gui::name::window::thread_options, {}); + messageOptionWindow = gui::newOptionWindow(this, gui::name::window::messages_options, {}); windows.insert({gui::name::window::main_window, new gui::MessagesMainWindow(this)}); windows.insert({gui::name::window::thread_view, new gui::ThreadViewWindow(this)}); @@ -98,6 +100,7 @@ void ApplicationMessages::createUserInterface() return true; }, })}); + windows.insert({gui::name::window::messages_options, messageOptionWindow}); } void ApplicationMessages::destroyUserInterface() { diff --git a/module-apps/application-messages/ApplicationMessages.hpp b/module-apps/application-messages/ApplicationMessages.hpp index 963fd6c94..fdf54c7df 100644 --- a/module-apps/application-messages/ApplicationMessages.hpp +++ b/module-apps/application-messages/ApplicationMessages.hpp @@ -35,6 +35,7 @@ public: virtual ~ApplicationMessages(); gui::OptionWindow *threadOptionsWindow = nullptr; + gui::OptionWindow *messageOptionWindow = nullptr; sys::Message_t DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp) override; diff --git a/module-apps/application-messages/CMakeLists.txt b/module-apps/application-messages/CMakeLists.txt index 8c582677c..038ccf9eb 100644 --- a/module-apps/application-messages/CMakeLists.txt +++ b/module-apps/application-messages/CMakeLists.txt @@ -25,6 +25,8 @@ target_sources( ${PROJECT_NAME} "${CMAKE_CURRENT_LIST_DIR}/windows/ThreadViewWindow.cpp" "${CMAKE_CURRENT_LIST_DIR}/windows/NewMessage.cpp" "${CMAKE_CURRENT_LIST_DIR}/windows/OptionsWindow.cpp" + "${CMAKE_CURRENT_LIST_DIR}/windows/OptionsMessages.cpp" + "${CMAKE_CURRENT_LIST_DIR}/windows/UiCommon.cpp" PUBLIC #"${CMAKE_CURRENT_LIST_DIR}/MessagesModel.hpp" diff --git a/module-apps/application-messages/windows/OptionsMessages.cpp b/module-apps/application-messages/windows/OptionsMessages.cpp new file mode 100644 index 000000000..44a3309cc --- /dev/null +++ b/module-apps/application-messages/windows/OptionsMessages.cpp @@ -0,0 +1,39 @@ +#include "OptionsMessages.hpp" +#include "UiCommon.hpp" +#include "i18/i18.hpp" +#include "log/log.hpp" + +#include + +gui::HBox *newCombo(app::ApplicationMessages *app, UTF8 &text) +{ + auto box = new gui::HBox(nullptr, 0, 0, style::window_width, style::window::label::big_h); + auto l = new gui::Label(box, 0, 0, 300, style::window::label::big_h); + style::window::decorate(l); + l->setText(text); + auto phone = new gui::Image(box, 0, 0, 50, style::window::label::big_h, "phonebook_phone_ringing"); + phone->activatedCallback = [=](gui::Item &) -> bool { return true; }; + auto mail = new gui::Image(box, 0, 0, 50, style::window::label::big_h, "mail"); + mail->activatedCallback = [=](gui::Item &) -> bool { return true; }; + auto cross = new gui::Image(box, 0, 0, 50, style::window::label::big_h, "cross"); + cross->activatedCallback = [=](gui::Item &) -> bool { return true; }; + return box; +} + +std::list smsWindowOptions(app::ApplicationMessages *app, const SMSRecord *record) +{ + // TODO use record... + // we oy - this list needs to be buildable with items too :( + auto contact = ContactRecord(); + return { + gui::newOptionLabel(callOption(app, contact, true)), gui::newOptionLabel(contactDetails(app, contact)), + + // TODO + gui::newOptionLabel({UTF8(" ") + UTF8(utils::localize.get("sms_forvard_message")), [=](gui::Item &item) { return false; }}), + gui::newOptionLabel({UTF8(" ") + UTF8(utils::localize.get("sms_copy")), [=](gui::Item &item) { return false; }}), + gui::newOptionLabel({UTF8(" ") + UTF8(utils::localize.get("sms_delete_message")), [=](gui::Item &item) { return false; }}), + // // ok - this is not selectable item... + // // tell num, message, call + - item with 3 elements... + // newCombo(app, contact.numbers[0].numberE164) + }; +} diff --git a/module-apps/application-messages/windows/OptionsMessages.hpp b/module-apps/application-messages/windows/OptionsMessages.hpp new file mode 100644 index 000000000..7af1bb6a6 --- /dev/null +++ b/module-apps/application-messages/windows/OptionsMessages.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "../ApplicationMessages.hpp" +#include "Interface/SMSRecord.hpp" +#include "OptionWindow.hpp" + +namespace gui +{ + namespace name + { + namespace window + { + inline const std::string messages_options = "options_mess"; + }; + }; // namespace name +}; // namespace gui + +std::list smsWindowOptions(app::ApplicationMessages *appl, const SMSRecord *record); diff --git a/module-apps/application-messages/windows/OptionsWindow.cpp b/module-apps/application-messages/windows/OptionsWindow.cpp index cd85de7bd..e40386520 100644 --- a/module-apps/application-messages/windows/OptionsWindow.cpp +++ b/module-apps/application-messages/windows/OptionsWindow.cpp @@ -1,39 +1,18 @@ #include "OptionsWindow.hpp" +#include "UiCommon.hpp" #include "i18/i18.hpp" #include "log/log.hpp" -#include -#include - /// below just for apps names... -#include "application-call/ApplicationCall.hpp" -#include "application-call/data/CallSwitchData.hpp" -#include "application-phonebook/ApplicationPhonebook.hpp" -#include "service-appmgr/ApplicationManager.hpp" std::list threadWindowOptions(app::ApplicationMessages *app, const ThreadRecord *record) { - auto contact = record ? DBServiceAPI::ContactGetByID(app, record->contactID)->front() : ContactRecord(); + ContactRecord contact = record ? DBServiceAPI::ContactGetByID(app, record->contactID)->front() : ContactRecord(); return { - {UTF8(utils::localize.get("sms_call_text")) + contact.primaryName, - [=](gui::Item &item) { - if (record == nullptr) - { - return false; - } - else - { - std::unique_ptr data = std::make_unique(contact.numbers[0].numberE164.c_str()); - return sapm::ApplicationManager::messageSwitchApplication(app, app::name_call, "CallWindow", std::move(data)); - } - }}, - {utils::localize.get("sms_contact_details"), - [=](gui::Item &item) { - return sapm::ApplicationManager::messageSwitchApplication( - app, app::name_phonebook, "Contact", std::make_unique(std::shared_ptr(new ContactRecord(contact)))); - }}, + callOption(app, contact, record != nullptr), + contactDetails(app, contact), {utils::localize.get("sms_delete_conversation"), [=](gui::Item &item) { LOG_INFO("Removing sms thread!"); diff --git a/module-apps/application-messages/windows/ThreadViewWindow.cpp b/module-apps/application-messages/windows/ThreadViewWindow.cpp index fee4577ae..f262d63a7 100644 --- a/module-apps/application-messages/windows/ThreadViewWindow.cpp +++ b/module-apps/application-messages/windows/ThreadViewWindow.cpp @@ -20,7 +20,9 @@ #include "../widgets/ThreadModel.hpp" +#include "../ApplicationMessages.hpp" #include "../data/SMSdata.hpp" +#include "OptionsMessages.hpp" #include "service-cellular/api/CellularServiceAPI.hpp" #include #include @@ -117,6 +119,23 @@ namespace gui { auto label = new gui::Label(nullptr, labelmeta); label->setText(el.body); + label->activatedCallback = [=](Item &) { + LOG_INFO("Message activated!"); + auto app = dynamic_cast(application); + if (app == nullptr) + { + LOG_ERROR("Something went horribly wrong"); + return false; + } + if (app->messageOptionWindow != nullptr) + { + app->messageOptionWindow->clearOptions(); + /// TODO get record properly... + app->messageOptionWindow->addOptions(smsWindowOptions(app, nullptr)); /// const SMSRecord *record)); + app->switchWindow(gui::name::window::messages_options, nullptr); + } + return true; + }; LOG_INFO("Add sms: %s %s", el.body.c_str(), el.number.c_str()); if (body->tryAddWidget(label)) {} else diff --git a/module-apps/application-messages/windows/UiCommon.cpp b/module-apps/application-messages/windows/UiCommon.cpp new file mode 100644 index 000000000..5cadbac1f --- /dev/null +++ b/module-apps/application-messages/windows/UiCommon.cpp @@ -0,0 +1,34 @@ +#include "UiCommon.hpp" +#include "application-call/ApplicationCall.hpp" +#include "application-call/data/CallSwitchData.hpp" +#include "service-appmgr/ApplicationManager.hpp" +#include + +gui::Option callOption(app::ApplicationMessages *app, ContactRecord &contact, bool active) +{ + return {UTF8(utils::localize.get("sms_call_text")) + contact.primaryName, [=](gui::Item &item) { + if (!active) + { + return false; + } + else + { + std::unique_ptr data = std::make_unique(contact.numbers[0].numberE164.c_str()); + return sapm::ApplicationManager::messageSwitchApplication(app, app::name_call, "CallWindow", std::move(data)); + } + }}; +} + +#include "application-phonebook/ApplicationPhonebook.hpp" +#include "service-appmgr/ApplicationManager.hpp" +#include + +gui::Option contactDetails(app::ApplicationMessages *app, ContactRecord &contact) +{ + + auto foo = [=](gui::Item &item) { + return sapm::ApplicationManager::messageSwitchApplication( + app, app::name_phonebook, "Contact", std::make_unique(std::shared_ptr(new ContactRecord(contact)))); + }; + return {utils::localize.get("sms_contact_details"), foo}; +} diff --git a/module-apps/application-messages/windows/UiCommon.hpp b/module-apps/application-messages/windows/UiCommon.hpp new file mode 100644 index 000000000..b1aab03ba --- /dev/null +++ b/module-apps/application-messages/windows/UiCommon.hpp @@ -0,0 +1,8 @@ +#pragma once + +#include "../ApplicationMessages.hpp" +#include +#include + +gui::Option callOption(app::ApplicationMessages *app, ContactRecord &contact, bool active); +gui::Option contactDetails(app::ApplicationMessages *app, ContactRecord &contact); diff --git a/module-gui/gui/widgets/Navigation.hpp b/module-gui/gui/widgets/Navigation.hpp index 569aaf551..915124330 100644 --- a/module-gui/gui/widgets/Navigation.hpp +++ b/module-gui/gui/widgets/Navigation.hpp @@ -11,36 +11,38 @@ #include "../Common.hpp" #include "Item.hpp" -class Item; namespace gui { -/** - * Class holds GUI Items for 4 possible directions for navigating using keyboard. - */ -class Navigation { -protected: - Item* left; - Item* up; - Item* right; - Item* down; -public: - /** - * Sets pointer to the widget that should receive focus after receiving navigation event. - */ - void setDirectionItem( NavigationDirection direction, Item* item ); - /** - * Retrives item from specified durection - */ - Item* getDirectionItem( const NavigationDirection direction ); - /** - * Clears Item's pointer for specified direction. - */ - void clearDirection(const NavigationDirection direction); + class Item; + /** + * Class holds GUI Items for 4 possible directions for navigating using keyboard. + */ + class Navigation + { + protected: + Item *left; + Item *up; + Item *right; + Item *down; - Navigation(); - virtual ~Navigation(); -}; + public: + /** + * Sets pointer to the widget that should receive focus after receiving navigation event. + */ + void setDirectionItem(NavigationDirection direction, Item *item); + /** + * Retrives item from specified durection + */ + Item *getDirectionItem(const NavigationDirection direction); + /** + * Clears Item's pointer for specified direction. + */ + void clearDirection(const NavigationDirection direction); + + Navigation(); + virtual ~Navigation(); + }; } /* namespace gui */