#include "pch.h" #include "log.h" #include "node_dialog_open.h" #include "canvas.h" #include "node_image_texture.h" #include "asset.h" Node* NodeDialogOpen::clone_instantiate() const { return new NodeDialogOpen(); } void NodeDialogOpen::clone_finalize(Node* dest) const { NodeDialogOpen* n = static_cast(dest); n->init_controls(); } void NodeDialogOpen::init() { auto tpl = static_cast(init_template("dialog-open")); m_color = tpl->m_color; m_border_color = tpl->m_border_color;; m_thinkness = tpl->m_thinkness;; init_controls(); } void NodeDialogOpen::init_controls() { btn_ok = find("btn-ok"); btn_cancel = find("btn-cancel"); btn_cancel->on_click = [this](Node*) { destroy(); }; container = find("files-list"); auto names = Asset::list_files(data_path, false, ".*\\.pano"); for (const auto& n : names) { auto node = new NodeDialogOpenItem; node->m_manager = m_manager; node->init(); node->m_text->set_text(n.c_str()); node->m_path = data_path + "/" + n; node->on_selected = [&](NodeDialogOpenItem* target) { static NodeDialogOpenItem* current = nullptr; if (target == current) return; ui::Image thumb = ui::Canvas::I->thumbnail_read(target->m_path); auto image_tex = find("thumb-tex"); image_tex->tex.destroy(); image_tex->tex.create(thumb); selected_path = target->m_path; if (current) current->m_selected = false; current = target; }; container->add_child(node); } container->update(); if (auto* first = (NodeDialogOpenItem*)container->get_child_at(0)) { first->on_selected(first); first->m_selected = true; } } void NodeDialogOpen::loaded() { } ////////////////////////////////////////////////////////////////// Node* NodeDialogOpenItem::clone_instantiate() const { return new NodeDialogOpenItem; } void NodeDialogOpenItem::clone_finalize(Node* dest) const { NodeDialogOpenItem* n = static_cast(dest); n->init_controls(); } void NodeDialogOpenItem::init() { auto tpl = static_cast(init_template("dialog-open-item")); m_color = tpl->m_color; m_border_color = tpl->m_border_color; m_thinkness = tpl->m_thinkness; init_controls(); } void NodeDialogOpenItem::init_controls() { m_text = find("title"); } void NodeDialogOpenItem::loaded() { } void NodeDialogOpenItem::draw() { auto c = m_selected ? m_color_selected : m_color_normal; //m_thinkness = m_selected ? 1.f : 0.f; m_color = m_mouse_inside ? m_color_hover : c; NodeBorder::draw(); } kEventResult NodeDialogOpenItem::handle_event(Event* e) { NodeBorder::handle_event(e); switch (e->m_type) { case kEventType::MouseEnter: break; case kEventType::MouseLeave: break; case kEventType::MouseDownL: m_selected = true; if (on_selected) on_selected(this); break; case kEventType::MouseUpL: break; default: return kEventResult::Available; break; } return kEventResult::Consumed; } ////////////////////////////////////////////////////////////////// Node* NodeDialogSave::clone_instantiate() const { return new NodeDialogSave; } void NodeDialogSave::clone_finalize(Node* dest) const { NodeDialogSave* n = static_cast(dest); n->init_controls(); } void NodeDialogSave::init() { auto tpl = static_cast(init_template("dialog-save")); m_color = tpl->m_color; m_border_color = tpl->m_border_color; m_thinkness = tpl->m_thinkness; init_controls(); } void NodeDialogSave::init_controls() { btn_ok = find("btn-ok"); btn_cancel = find("btn-cancel"); btn_cancel->on_click = [this](Node*) { destroy(); }; input = find("txt-input"); } void NodeDialogSave::loaded() { }