improve text node xml

This commit is contained in:
2019-11-29 02:17:54 +01:00
parent c6173987af
commit 26257e5a37
5 changed files with 59 additions and 28 deletions

View File

@@ -262,6 +262,7 @@ public:
void dialog_ppbr_export(); void dialog_ppbr_export();
void dialog_export_mp4(); void dialog_export_mp4();
void dialog_timelapse_export(); void dialog_timelapse_export();
void dialog_whatsnew();
void cloud_upload(); void cloud_upload();
void cloud_upload_all(); void cloud_upload_all();

View File

@@ -1,6 +1,7 @@
#include "pch.h" #include "pch.h"
#include "app.h" #include "app.h"
#include "action.h" #include "action.h"
#include "settings.h"
#include "node_dialog_open.h" #include "node_dialog_open.h"
#include "node_dialog_browse.h" #include "node_dialog_browse.h"
#include "node_dialog_resize.h" #include "node_dialog_resize.h"
@@ -9,6 +10,7 @@
#include "node_changelog.h" #include "node_changelog.h"
#include "node_usermanual.h" #include "node_usermanual.h"
#include "node_dialog_export_ppbr.h" #include "node_dialog_export_ppbr.h"
#include "node_remote_page.h"
#include <codec_api.h> #include <codec_api.h>
#define MP4V2_NO_STDINT_DEFS #define MP4V2_NO_STDINT_DEFS
@@ -838,3 +840,32 @@ void App::dialog_export_mp4()
pb->destroy(); pb->destroy();
}).detach(); }).detach();
} }
void App::dialog_whatsnew()
{
auto whatsnew = std::make_shared<NodeRemotePage>();
whatsnew->m_manager = &layout;
whatsnew->init();
whatsnew->load_url("https://panopainter.com/app-content/whatsnew.xml", [this, whatsnew](bool success) {
if (success)
{
int last_id = Settings::value_or<Serializer::Integer>("whatsnew-id", 0);
if (whatsnew->m_page_id <= g_version_build && whatsnew->m_page_id > last_id)
{
whatsnew->set_title(fmt::format("What's new in version {}", g_version_number));
layout[main_id]->add_child(whatsnew);
}
whatsnew->add_button("Reload", 120, [this, whatsnew](Node*) {
whatsnew->reload();
});
whatsnew->add_button("Read Later", 120, [this, whatsnew](Node*) {
whatsnew->destroy();
});
whatsnew->add_button("Close", 100, [this, whatsnew](Node*) {
Settings::set<Serializer::Integer>("whatsnew-id", whatsnew->m_page_id);
Settings::save();
whatsnew->destroy();
});
}
});
}

View File

@@ -1100,7 +1100,7 @@ void App::init_menu_about()
text->set_text(label); text->set_text(label);
} }
item->on_click = [this, popup](Node*) { item->on_click = [this, popup](Node*) {
dialog_changelog(); dialog_whatsnew();
popup->mouse_release(); popup->mouse_release();
popup->destroy(); popup->destroy();
}; };
@@ -1334,31 +1334,7 @@ void App::initLayout()
} }
} }
auto whatsnew = std::make_shared<NodeRemotePage>(); dialog_whatsnew();
whatsnew->m_manager = &layout;
whatsnew->init();
whatsnew->load_url("http://localhost:8080/app-content/whatsnew.xml", [this, whatsnew] (bool success) {
if (success)
{
int last_id = Settings::value_or<Serializer::Integer>("whatsnew-id", 0);
if (whatsnew->m_page_id <= g_version_build && whatsnew->m_page_id > last_id)
{
whatsnew->set_title(fmt::format("What's new in version {}", g_version_number));
layout[main_id]->add_child(whatsnew);
}
whatsnew->add_button("Reload", 120, [this, whatsnew](Node*) {
whatsnew->reload();
});
whatsnew->add_button("Read Later", 120, [this, whatsnew](Node*) {
whatsnew->destroy();
});
whatsnew->add_button("Close", 100, [this, whatsnew](Node*) {
Settings::set<Serializer::Integer>("whatsnew-id", whatsnew->m_page_id);
Settings::save();
whatsnew->destroy();
});
}
});
brush_update(true, true); brush_update(true, true);

View File

@@ -59,7 +59,7 @@ bool LayoutManager::parse(const std::string& xml_string) noexcept
{ {
auto old = std::move(m_layouts); auto old = std::move(m_layouts);
tinyxml2::XMLDocument xml; tinyxml2::XMLDocument xml(true, tinyxml2::COLLAPSE_WHITESPACE);
auto ret = xml.Parse(xml_string.c_str(), xml_string.size()); auto ret = xml.Parse(xml_string.c_str(), xml_string.size());
if (ret != tinyxml2::XMLError::XML_SUCCESS) if (ret != tinyxml2::XMLError::XML_SUCCESS)
{ {

View File

@@ -1404,7 +1404,6 @@ void Node::load_internal(const tinyxml2::XMLElement* x_node)
CASE(kWidget::Image, NodeImage); CASE(kWidget::Image, NodeImage);
CASE(kWidget::ImageTexture, NodeImageTexture); CASE(kWidget::ImageTexture, NodeImageTexture);
CASE(kWidget::Icon, NodeIcon); CASE(kWidget::Icon, NodeIcon);
CASE(kWidget::Text, NodeText);
CASE(kWidget::TextInput, NodeTextInput); CASE(kWidget::TextInput, NodeTextInput);
CASE(kWidget::Button, NodeButton); CASE(kWidget::Button, NodeButton);
CASE(kWidget::ButtonCustom, NodeButtonCustom); CASE(kWidget::ButtonCustom, NodeButtonCustom);
@@ -1439,6 +1438,30 @@ void Node::load_internal(const tinyxml2::XMLElement* x_node)
CASE(kWidget::Timeline, NodeAnimationTimeline); CASE(kWidget::Timeline, NodeAnimationTimeline);
CASE(kWidget::Metadata, NodeMetadata); CASE(kWidget::Metadata, NodeMetadata);
#undef CASE #undef CASE
case kWidget::Text:
{
auto n = new NodeText();
add_child(n);
n->load_internal(x_child);
std::string text;
auto node = x_child->FirstChild();
while (node)
{
if (auto e = node->ToElement())
{
if (strcmp(e->Name(), "br") == 0)
text.append("\n");
}
else if (auto t = node->ToText())
{
text.append(t->Value());
}
node = node->NextSibling();
}
if (!text.empty())
n->set_text(text);
break;
}
case kWidget::Ref: case kWidget::Ref:
{ {
auto ids = x_child->Attribute("id"); auto ids = x_child->Attribute("id");