mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-07-05 05:37:25 -04:00
202 lines
5.9 KiB
C++
202 lines
5.9 KiB
C++
/*
|
|
* @file ThreadViewWindow.cpp
|
|
* @author Robert Borzecki (robert.borzecki@mudita.com)
|
|
* @date 25 wrz 2019
|
|
* @brief
|
|
* @copyright Copyright (C) 2019 mudita.com
|
|
* @details
|
|
*/
|
|
#include <functional>
|
|
#include <memory>
|
|
|
|
#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 <log/log.hpp>
|
|
|
|
#include "ThreadViewWindow.hpp"
|
|
#include <Style.hpp>
|
|
|
|
#include "../widgets/ThreadModel.hpp"
|
|
|
|
#include <gui/widgets/Text.hpp>
|
|
#include <widgets/ListItem.hpp>
|
|
#include <widgets/ListItemProvider.hpp>
|
|
#include <widgets/ListView.hpp>
|
|
|
|
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<int, gui::LolListItem *> 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<DBContactResponseMessage*>( msgl );
|
|
// if( phonebookModel->updateRecords( std::move(msg->records), msg->offset, msg->limit, msg->count, msg->favourite ) )
|
|
// return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
} /* namespace gui */
|