/* * @file ThreadViewWindow.cpp * @author Robert Borzecki (robert.borzecki@mudita.com) * @date 25 wrz 2019 * @brief * @copyright Copyright (C) 2019 mudita.com * @details */ #include #include #include "service-appmgr/ApplicationManager.hpp" #include "i18/i18.hpp" #include "Label.hpp" #include "ListView.hpp" #include "Margins.hpp" #include "service-db/messages/DBMessage.hpp" #include "service-db/api/DBServiceAPI.hpp" #include #include "ThreadViewWindow.hpp" #include #include "../widgets/ThreadModel.hpp" #include #include #include #include namespace gui { class LolListItem : public gui::ListItem { gui::Label *body = nullptr; public: LolListItem(int i = 0) { { // copied from ThreadItem minWidth = 431; minHeight = 100; maxWidth = 431; maxHeight = 100; setRadius(0); setEdges(RectangleEdgeFlags::GUI_RECT_EDGE_BOTTOM | RectangleEdgeFlags::GUI_RECT_EDGE_TOP); setPenWidth(0); setPenFocusWidth(2); } setID(i); body = new gui::Label(this, gui::meta::Label({0, 0, 0, 0})); body->setText("Text: " + std::to_string(i)); } // this won't work - copying label and other crap LolListItem(const LolListItem &) = default; bool onDimensionChanged(const gui::BoundingBox &oldDim, const gui::BoundingBox &newDim) override { LOG_INFO("Dim changed! %s : %d", body->getText().c_str(), getID()); LOG_INFO("%x", body); body->setPosition(newDim.x, newDim.y); body->setSize(newDim.w, newDim.h); return true; } virtual bool onFocus(bool state) override { ListItem::onFocus(state); LOG_INFO("Focus changed for! %s", body->getText().c_str()); return true; } }; }; // namespace gui class Provider : public gui::ListItemProvider { std::map items; public: Provider(app::Application *app) { } virtual ~Provider() = default; gui::ListItem *getItem(int index, int firstElement, int prevIndex, uint32_t count, int remaining, bool topDown) override { LOG_INFO("getItem"); if (index > getItemCount()) { return nullptr; } if (items.find(index) == items.end()) { items[index] = new gui::LolListItem(index); } // copy as getItem will push element onto list with parent.. return new gui::LolListItem(*items[index]); } int getItemCount() const override { return 11; }; }; namespace gui { ThreadViewWindow::ThreadViewWindow(app::Application *app) : AppWindow(app, name::window::thread_view) { AppWindow::buildInterface(); setTitle(utils::localize.get("app_messages_title_main")); topBar->setActive(TopBar::Elements::TIME, true); bottomBar->setActive(BottomBar::Side::LEFT, true); bottomBar->setActive(BottomBar::Side::CENTER, true); bottomBar->setActive(BottomBar::Side::RIGHT, true); bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get("common_options")); bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("common_send")); bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get("common_back")); body = new gui::VBox(this, 0, title->offset_h(), this->getWidth(), bottomBar->getY() - title->offset_h()); body->setPenWidth(0); body->setPenFocusWidth(0); // dummy new text auto text = new gui::Text(nullptr, 0, 0, 480, 100, "", gui::Text::ExpandMode::EXPAND_UP); text->setInputMode(new InputMode({InputMode::ABC, InputMode::abc})); text->setPenFocusWidth(2); text->setPenWidth(2); text->setEdges(gui::RectangleEdgeFlags::GUI_RECT_EDGE_BOTTOM); body->tryAddWidget(text); /// dummy sms thread - TODO TODO load from db /// this is not 'static' do it on window focus (on swtich window) auto labelmeta = gui::meta::Label({0, 0, 480, 100}); labelmeta.edges = RectangleEdgeFlags::GUI_RECT_ALL_EDGES; labelmeta.radius = 3; labelmeta.focus = 3; labelmeta.no_focus = 1; auto label = new gui::Label(nullptr, labelmeta); label->setText("Dummy text"); body->tryAddWidget(label); label = new gui::Label(nullptr, gui::meta::Label({0, 0, 480, 100})); label->setText("Dummy text2"); body->tryAddWidget(label); label = new gui::Label(nullptr, gui::meta::Label({0, 0, 480, 100})); label->setText("Dummy text3"); body->tryAddWidget(label); /// setup body->setReverseOrder(true); body->setVisible(true); setFocusItem(body); } void ThreadViewWindow::rebuild() { destroyInterface(); buildInterface(); } void ThreadViewWindow::buildInterface() { } void ThreadViewWindow::destroyInterface() { AppWindow::destroyInterface(); children.clear(); } ThreadViewWindow::~ThreadViewWindow() { destroyInterface(); } void ThreadViewWindow::onBeforeShow(ShowMode mode, SwitchData *data) { } bool ThreadViewWindow::onInput(const InputEvent &inputEvent) { return AppWindow::onInput(inputEvent); } bool ThreadViewWindow::onDatabaseMessage(sys::Message *msgl) { // DBContactResponseMessage* msg = reinterpret_cast( msgl ); // if( phonebookModel->updateRecords( std::move(msg->records), msg->offset, msg->limit, msg->count, msg->favourite ) ) // return true; return false; } } /* namespace gui */