mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-05 20:39:11 -05:00
Add Text scrolling, Add text starting position, Added text scrolling, updated TextLine line endings, TextBlocks newline handling, updated SMS Bubble and Notes text items. Added tests for scrolling.
129 lines
4.8 KiB
C++
129 lines
4.8 KiB
C++
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include "NotePreviewWindow.hpp"
|
|
|
|
#include <module-apps/application-notes/ApplicationNotes.hpp>
|
|
#include <module-apps/application-notes/data/NoteSwitchData.hpp>
|
|
#include <module-apps/application-notes/style/NotePreviewStyle.hpp>
|
|
#include <module-apps/application-notes/windows/NotesOptions.hpp>
|
|
#include <module-apps/messages/OptionsWindow.hpp>
|
|
|
|
#include <module-utils/i18n/i18n.hpp>
|
|
#include <module-utils/time/time_conversion.hpp>
|
|
|
|
#include <Style.hpp>
|
|
|
|
#include <module-gui/gui/widgets/BottomBar.hpp>
|
|
#include <module-gui/gui/widgets/TopBar.hpp>
|
|
|
|
namespace app::notes
|
|
{
|
|
NotePreviewWindow::NotePreviewWindow(app::Application *app,
|
|
std::unique_ptr<NotePreviewWindowContract::Presenter> &&windowPresenter)
|
|
: AppWindow(app, gui::name::window::note_preview), presenter(std::move(windowPresenter))
|
|
{
|
|
presenter->attach(this);
|
|
buildInterface();
|
|
}
|
|
|
|
NotePreviewWindow::~NotePreviewWindow() noexcept
|
|
{
|
|
destroyInterface();
|
|
}
|
|
|
|
void NotePreviewWindow::rebuild()
|
|
{
|
|
destroyInterface();
|
|
buildInterface();
|
|
}
|
|
|
|
void NotePreviewWindow::destroyInterface()
|
|
{
|
|
erase();
|
|
date = nullptr;
|
|
note = nullptr;
|
|
}
|
|
|
|
void NotePreviewWindow::buildInterface()
|
|
{
|
|
AppWindow::buildInterface();
|
|
|
|
setTitle(utils::localize.get("app_notes_title_main"));
|
|
|
|
namespace previewStyle = app::notes::style::preview;
|
|
date = new gui::Label(
|
|
this, previewStyle::LeftMargin, previewStyle::TopMargin, previewStyle::Width, previewStyle::date::Height);
|
|
date->setEdges(gui::RectangleEdge::None);
|
|
date->setFont(::style::window::font::small);
|
|
|
|
note = new gui::Text(this,
|
|
previewStyle::LeftMargin,
|
|
previewStyle::TopMargin + previewStyle::date::Height + previewStyle::text::TopMargin,
|
|
previewStyle::Width,
|
|
previewStyle::text::Height);
|
|
note->setEdges(gui::RectangleEdge::None);
|
|
note->setFont(::style::window::font::medium);
|
|
note->setAlignment(gui::Alignment{gui::Alignment::Vertical::Top});
|
|
note->setPenFocusWidth(::style::window::default_border_focus_w);
|
|
note->setPenWidth(::style::window::default_border_rect_no_focus);
|
|
note->setEditMode(gui::EditMode::SCROLL);
|
|
note->setCursorStartPosition(gui::CursorStartPosition::DOCUMENT_BEGIN);
|
|
|
|
bottomBar->setActive(gui::BottomBar::Side::LEFT, true);
|
|
bottomBar->setText(gui::BottomBar::Side::LEFT, utils::localize.get(::style::strings::common::options));
|
|
|
|
bottomBar->setActive(gui::BottomBar::Side::CENTER, true);
|
|
bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get("app_notes_edit"));
|
|
|
|
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
|
|
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(::style::strings::common::back));
|
|
|
|
topBar->setActive(gui::TopBar::Elements::TIME, true);
|
|
|
|
setFocusItem(note);
|
|
}
|
|
|
|
void NotePreviewWindow::onBeforeShow(gui::ShowMode mode, gui::SwitchData *data)
|
|
{
|
|
auto previewData = dynamic_cast<NoteSwitchData *>(data);
|
|
if (previewData == nullptr) {
|
|
return;
|
|
}
|
|
|
|
notesRecord = std::make_unique<NotesRecord>(previewData->getRecord());
|
|
setEditDateText(notesRecord->date);
|
|
note->setText(notesRecord->snippet);
|
|
}
|
|
|
|
void NotePreviewWindow::setEditDateText(std::uint32_t timestamp)
|
|
{
|
|
utils::time::DateTime dt{timestamp};
|
|
std::ostringstream dateText;
|
|
dateText << utils::localize.get("app_notes_edited") << ": ";
|
|
if (dt.isToday()) {
|
|
dateText << utils::localize.get("common_today") << ", ";
|
|
}
|
|
else if (dt.isYesterday()) {
|
|
dateText << utils::localize.get("common_yesterday") << ", ";
|
|
}
|
|
dateText << dt;
|
|
date->setText(dateText.str());
|
|
}
|
|
|
|
bool NotePreviewWindow::onInput(const gui::InputEvent &inputEvent)
|
|
{
|
|
if (inputEvent.isShortPress()) {
|
|
if (inputEvent.is(gui::KeyCode::KEY_ENTER)) {
|
|
application->switchWindow(gui::name::window::note_edit, std::make_unique<NoteSwitchData>(*notesRecord));
|
|
}
|
|
else if (inputEvent.is(gui::KeyCode::KEY_LF)) {
|
|
application->switchWindow(utils::localize.get("app_phonebook_options_title"),
|
|
std::make_unique<gui::OptionsWindowOptions>(notePreviewOptions(
|
|
application, *notesRecord, presenter->getRepository(), note)));
|
|
}
|
|
}
|
|
return AppWindow::onInput(inputEvent);
|
|
}
|
|
} // namespace app::notes
|