| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| typedef void *toonz_ui_page_handle_t; |
| |
| |
| class UIPage |
| { |
| class Group |
| { |
| std::string name_; |
| std::vector<std::pair<std::string, ParamView *>> params_; |
| |
| public: |
| Group(const std::string &name) : name_(name) {} |
| |
| Group(const Group &group) : name_(group.name_), params_(group.params_) {} |
| |
| inline const std::string &name() const |
| { |
| return name_; |
| } |
| |
| inline void add_param(const std::string ¶m, ParamView *components) |
| { |
| params_.push_back(std::make_pair(param, components)); |
| } |
| |
| inline ParamsPage *build(RasterFxPluginHost *fx, ParamsPage *page) |
| { |
| page->beginGroup(name_.c_str()); |
| for (std::size_t i = 0, size = params_.size(); i < size; i++) { |
| params_[i].second->build(fx, page, params_[i].first.c_str()); |
| } |
| page->endGroup(); |
| return page; |
| } |
| }; |
| |
| std::string name_; |
| std::vector<Group *> groups_; |
| |
| public: |
| inline UIPage(const char *name) : name_(name) |
| { |
| } |
| |
| inline ~UIPage() |
| { |
| for (std::size_t i = 0, size = groups_.size(); i < size; ++i) { |
| delete groups_[i]; |
| } |
| groups_.clear(); |
| } |
| |
| inline int begin_group(const char *name) |
| { |
| groups_.push_back(NULL); |
| groups_.back() = new Group(name); |
| |
| return TOONZ_OK; |
| } |
| |
| inline int end_group(const char *name) |
| { |
| if (groups_.back()->name() != name) { |
| return TOONZ_ERROR_NOT_FOUND; |
| } |
| |
| return TOONZ_OK; |
| } |
| |
| int bind_param(Param *param, ParamView *pt) |
| { |
| if (groups_.empty()) { |
| return TOONZ_ERROR_PREREQUISITE; |
| } |
| |
| groups_.back()->add_param(param->name(), pt); |
| |
| return TOONZ_OK; |
| } |
| |
| void build(RasterFxPluginHost *fx, ParamsPageSet *pages) const |
| { |
| ParamsPage *page = pages->createParamsPage(); |
| for (std::size_t i = 0, size = groups_.size(); i < size; ++i) { |
| groups_[i]->build(fx, page); |
| } |
| pages->addParamsPage(page, name_.c_str()); |
| page->setPageSpace(); |
| } |
| |
| UIPage *clone(TFx *fx) const |
| { |
| UIPage *page = new UIPage(name_.c_str()); |
| for (std::size_t i = 0, size = groups_.size(); i < size; ++i) { |
| page->groups_.push_back(new Group(*groups_[i])); |
| } |
| return page; |
| } |
| }; |
| |
| int begin_group(toonz_ui_page_handle_t page, const char *name); |
| int end_group(toonz_ui_page_handle_t page, const char *name); |
| int bind_param(toonz_ui_page_handle_t page, toonz_param_handle_t param, toonz_param_view_handle_t traits); |
| |
| |