add xml attributes for combobox node and add resolution selection for new doc

This commit is contained in:
2017-11-12 22:39:23 +00:00
parent 4473bc8bd4
commit 8bc440b9b8
11 changed files with 53 additions and 25 deletions

View File

@@ -30,9 +30,11 @@ void App::dialog_newdoc()
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
docname->set_text(("Panodoc: " + doc_name).c_str());
int res = atoi(dialog->m_resolution->labels[dialog->m_resolution->m_current_index].c_str());
layers->clear();
canvas->m_canvas->m_layers.clear();
canvas->m_canvas->m_order.clear();
canvas->m_canvas->resize(res, res);
canvas->reset_camera();
ActionManager::clear();

View File

@@ -39,6 +39,8 @@ enum class kAttribute : uint16_t
Value = const_hash("value"),
Range = const_hash("range"),
AspectRatio = const_hash("aspect-ratio"),
ComboList = const_hash("combo-list"),
Default = const_hash("default"),
};
enum class kWidget : uint16_t

View File

@@ -8,11 +8,18 @@ Node* NodeComboBox::clone_instantiate() const
return new NodeComboBox;
}
void NodeComboBox::clone_copy(Node* dest) const
{
NodeButton::clone_copy(dest);
NodeComboBox* n = static_cast<NodeComboBox*>(dest);
n->labels = labels;
n->m_current_index = m_current_index;
}
void NodeComboBox::loaded()
{
NodeButton::loaded();
on_click = [this](Node* target) {
LOG("ComboBox");
NodePopupMenu* popup = new NodePopupMenu;
popup->init();
popup->create();
@@ -51,8 +58,19 @@ void NodeComboBox::loaded()
popup->m_capture_children = false;
};
}
void NodeComboBox::clone_copy(Node* dest) const
void NodeComboBox::parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute* attr)
{
NodeButton::clone_copy(dest);
NodeComboBox* n = static_cast<NodeComboBox*>(dest);
}
NodeButton::parse_attributes(ka, attr);
switch (ka)
{
case kAttribute::ComboList:
{
labels = split(attr->Value(), ',');
break;
}
case kAttribute::Default:
m_current_index = attr->IntValue();
break;
}
}

View File

@@ -5,9 +5,10 @@ class NodeComboBox : public NodeButton
{
public:
std::function<void(Node* target, int index)> on_select;
std::array<std::string, 4> labels{ "Normal", "Multiply", "Screen", "Color Dodge" };
std::vector<std::string> labels;
int m_current_index = 0;
virtual Node* clone_instantiate() const override;
virtual void clone_copy(Node* dest) const override;
virtual void loaded() override;
virtual void parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute* attr) override;
};

View File

@@ -43,23 +43,6 @@ void NodeDialogCloud::loaded()
{
}
std::vector<std::string> split(const std::string& subject, char d, int max_split = 0)
{
std::vector<std::string> ret;
int start = 0;
int n = subject.find_first_of(d);
while (n != std::string::npos)
{
ret.push_back(subject.substr(start, n - start));
start = n + 1;
if (max_split && ret.size() == max_split)
break;
n = subject.find_first_of(d, start);
}
ret.push_back(subject.substr(start));
return ret;
}
void NodeDialogCloud::load_thumbs_thread()
{
CURL *curl = curl_easy_init();

View File

@@ -222,6 +222,7 @@ void NodeDialogNewDoc::init()
void NodeDialogNewDoc::init_controls()
{
btn_ok = find<NodeButton>("btn-ok");
m_resolution = find<NodeComboBox>("resolution");
btn_cancel = find<NodeButton>("btn-cancel");
btn_cancel->on_click = [this](Node*) {
destroy();

View File

@@ -4,6 +4,7 @@
#include "node_image_texture.h"
#include "node_text.h"
#include "node_text_input.h"
#include "node_combobox.h"
class NodeDialogOpenItem : public NodeBorder
{
@@ -65,6 +66,7 @@ public:
NodeButton* btn_cancel;
NodeButton* btn_ok;
NodeTextInput* input;
NodeComboBox* m_resolution;
virtual Node* clone_instantiate() const override;
virtual void clone_finalize(Node* dest) const override;
virtual void init() override;

View File

@@ -88,6 +88,23 @@ glm::vec3 convert_rgb2hsv(const glm::vec3 c)
return glm::vec3(fabs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}
std::vector<std::string> split(const std::string& subject, char d, int max_split/* = 0*/)
{
std::vector<std::string> ret;
int start = 0;
int n = subject.find_first_of(d);
while (n != std::string::npos)
{
ret.push_back(subject.substr(start, n - start));
start = n + 1;
if (max_split && ret.size() == max_split)
break;
n = subject.find_first_of(d, start);
}
ret.push_back(subject.substr(start));
return ret;
}
static const char* gl2str(GLenum err)
{
switch (err)

View File

@@ -15,6 +15,7 @@ bool segments_intersect(const glm::vec2& p0a, const glm::vec2& p0b,
glm::vec4 rand_color();
glm::vec3 convert_hsv2rgb(const glm::vec3 c);
glm::vec3 convert_rgb2hsv(const glm::vec3 c);
std::vector<std::string> split(const std::string& subject, char d, int max_split = 0);
size_t curl_data_handler(void *contents, size_t size, size_t nmemb, void *userp);
size_t curl_data_write(void *ptr, size_t size, size_t nmemb, FILE *stream);