open dialog list files and thumbnail preview

This commit is contained in:
2017-08-10 23:43:57 +01:00
parent 5bc9d443bc
commit 178c944df1
6 changed files with 141 additions and 23 deletions

View File

@@ -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;
}