tahoma2d/toonz/sources/toonzqt/plugin_ui_page_interface.h

104 lines
2.7 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef PLUGIN_UI_PAGE_INTERFACE
#define PLUGIN_UI_PAGE_INTERFACE
#include "toonz_hostif.h"
#include "tfx.h"
#include "plugin_param_interface.h"
#include "plugin_param_view_interface.h"
#include "pluginhost.h"
2016-06-15 18:43:10 +12:00
/* 公開ヘッダからは引っ込められた都合上ここで宣言(内部ではまだ使っているので) */
2016-03-19 06:57:51 +13:00
typedef void *toonz_ui_page_handle_t;
/* あるエフェクトのパラメータ画面 */
2016-06-15 18:43:10 +12:00
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 &param, 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_;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
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;
}
2016-03-19 06:57:51 +13:00
};
int begin_group(toonz_ui_page_handle_t page, const char *name);
int end_group(toonz_ui_page_handle_t page, const char *name);
2016-06-15 18:43:10 +12:00
int bind_param(toonz_ui_page_handle_t page, toonz_param_handle_t param,
toonz_param_view_handle_t traits);
2016-03-19 06:57:51 +13:00
#endif