open dialog list files and thumbnail preview
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "node_dialog_open.h"
|
||||
#include "canvas.h"
|
||||
#include "node_image_texture.h"
|
||||
#include "asset.h"
|
||||
|
||||
Node* NodeDialogOpen::clone_instantiate() const
|
||||
{
|
||||
@@ -31,11 +32,98 @@ void NodeDialogOpen::init_controls()
|
||||
btn_cancel->on_click = [this](Node*) {
|
||||
destroy();
|
||||
};
|
||||
container = find<Node>("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<NodeImageTexture>("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()
|
||||
{
|
||||
ui::Image thumb = ui::Canvas::I->thumbnail_read(data_path);
|
||||
auto image_tex = find<NodeImageTexture>("thumb-tex");
|
||||
image_tex->tex.create(thumb);
|
||||
// ui::Image thumb = ui::Canvas::I->thumbnail_read(data_path);
|
||||
// auto image_tex = find<NodeImageTexture>("thumb-tex");
|
||||
// image_tex->tex.create(thumb);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
Node* NodeDialogOpenItem::clone_instantiate() const
|
||||
{
|
||||
return new NodeDialogOpenItem;
|
||||
}
|
||||
void NodeDialogOpenItem::clone_finalize(Node* dest) const
|
||||
{
|
||||
NodeDialogOpenItem* n = static_cast<NodeDialogOpenItem*>(dest);
|
||||
n->init_controls();
|
||||
}
|
||||
void NodeDialogOpenItem::init()
|
||||
{
|
||||
auto tpl = static_cast<const NodeBorder*>(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<NodeText>("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;
|
||||
}
|
||||
Reference in New Issue
Block a user