Files
panopainter/src/legacy_brush_panel_ui.cpp

166 lines
4.9 KiB
C++

#include "pch.h"
#include "legacy_brush_panel_ui.h"
#include "app.h"
#include "app_core/brush_ui.h"
#include "asset.h"
#include "legacy_ui_overlay_services.h"
Node* NodePanelBrush::clone_instantiate() const
{
return new NodePanelBrush();
}
void NodePanelBrush::init()
{
pp::panopainter::LegacyBrushPanelUi::init(*this);
}
kEventResult NodePanelBrush::handle_event(Event* e)
{
return pp::panopainter::LegacyBrushPanelUi::handle_event(*this, e);
}
void NodePanelBrush::handle_click(Node* target)
{
pp::panopainter::LegacyBrushPanelUi::handle_click(*this, target);
}
void NodePanelBrush::added(Node* parent)
{
(void)parent;
pp::panopainter::LegacyBrushPanelUi::added(*this);
}
namespace pp::panopainter {
void LegacyBrushPanelUi::init(NodePanelBrush& owner)
{
owner.init_template_file("data/dialogs/panel-brushes.xml", "tpl-panel-brushes");
owner.m_btn_add = owner.find<NodeButtonCustom>("btn-add");
owner.m_btn_add->on_click = [&owner](Node*) {
App::I->pick_file({ "JPG", "PNG" }, [&owner](std::string path) {
const auto plan = pp::app::plan_brush_texture_list_add(owner.m_dir_name, App::I->data_path, path);
if (plan) {
owner.execute_texture_list_plan(plan.value());
}
});
};
owner.m_btn_remove = owner.find<NodeButtonCustom>("btn-remove");
owner.m_btn_remove->on_click = [&owner](Node*) {
if (owner.m_current)
{
const int idx = owner.m_container->get_child_index(owner.m_current);
const auto plan = pp::app::plan_brush_texture_list_remove(
static_cast<int>(owner.m_container->m_children.size()),
idx,
owner.m_current->m_user_brush);
if (plan) {
owner.execute_texture_list_plan(plan.value());
}
}
};
owner.m_btn_up = owner.find<NodeButtonCustom>("btn-up");
owner.m_btn_up->on_click = [&owner](Node*) {
if (owner.m_current)
{
const int idx = owner.m_container->get_child_index(owner.m_current);
const auto plan = pp::app::plan_brush_texture_list_move(
static_cast<int>(owner.m_container->m_children.size()),
idx,
-1);
if (plan) {
owner.execute_texture_list_plan(plan.value());
}
}
};
owner.m_btn_down = owner.find<NodeButtonCustom>("btn-down");
owner.m_btn_down->on_click = [&owner](Node*) {
if (owner.m_current)
{
const int idx = owner.m_container->get_child_index(owner.m_current);
const auto plan = pp::app::plan_brush_texture_list_move(
static_cast<int>(owner.m_container->m_children.size()),
idx,
1);
if (plan) {
owner.execute_texture_list_plan(plan.value());
}
}
};
owner.m_container = owner.find<NodeScroll>("brushes");
if (Asset::exist(App::I->data_path + "/settings/" + owner.m_dir_name + ".bin") && !owner.restore())
{
auto mb = App::I->message_box("Brushes", "Could not read brush textures file, it will be deleted.", true);
mb->btn_ok->on_click = [&owner, mb](Node*) {
Asset::delete_file(App::I->data_path + "/settings/" + owner.m_dir_name + ".bin");
pp::panopainter::close_legacy_dialog_node(*mb);
};
mb->btn_cancel->on_click = [mb](Node*) {
pp::panopainter::close_legacy_dialog_node(*mb);
};
}
if (owner.m_container->m_children.empty() && !owner.m_dir_name.empty()) {
owner.scan();
}
owner.save();
}
kEventResult LegacyBrushPanelUi::handle_event(NodePanelBrush& owner, Event* event)
{
switch (event->m_type)
{
case kEventType::MouseLeave:
if (!owner.m_interacted)
break;
// else fall through
case kEventType::MouseUpL:
if (!owner.m_mouse_inside)
{
pp::panopainter::release_legacy_mouse_capture(owner);
if (owner.m_parent)
{
pp::panopainter::detach_legacy_node_from_parent(owner);
}
if (owner.on_popup_close)
{
owner.on_popup_close(&owner);
}
}
break;
default:
return kEventResult::Available;
}
return kEventResult::Consumed;
}
void LegacyBrushPanelUi::handle_click(NodePanelBrush& owner, Node* target)
{
if (target == owner.m_current)
return;
if (owner.m_current) {
owner.m_current->m_selected = false;
}
owner.m_current = static_cast<NodeButtonBrush*>(target);
owner.m_current->m_selected = true;
if (owner.on_brush_changed) {
owner.on_brush_changed(&owner, owner.m_container->get_child_index(target));
}
owner.m_interacted = true;
}
void LegacyBrushPanelUi::added(NodePanelBrush& owner)
{
owner.m_interacted = false;
}
} // namespace pp::panopainter