Shinya Kitaoka 810553
#pragma once
Shinya Kitaoka 810553
Toshihiro Shimizu 890ddd
#ifndef PLUGIN_PARAM_VIEW_INTERFACE
Toshihiro Shimizu 890ddd
#define PLUGIN_PARAM_VIEW_INTERFACE
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <vector></vector>
Toshihiro Shimizu 890ddd
#include <memory></memory>
Toshihiro Shimizu 890ddd
#include <qwidget></qwidget>
Toshihiro Shimizu 890ddd
#include "tfx.h"
Toshihiro Shimizu 890ddd
#include "toonz_hostif.h"
Toshihiro Shimizu 890ddd
#include "../include/toonzqt/fxsettings.h"
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
/* 公開ヘッダからは引っ込められた都合上ここで宣言(内部ではまだ使っているので) */
Toshihiro Shimizu 890ddd
typedef void *toonz_param_view_handle_t;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* あるパラメータの表示形式 */
Shinya Kitaoka 120a6e
class ParamView {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  struct Component {
Shinya Kitaoka 120a6e
    virtual ~Component() {}
Shinya Kitaoka 120a6e
    virtual QWidget *make_widget(TFx *fx, ParamsPage *page,
Shinya Kitaoka 120a6e
                                 const char *name) const = 0;
Shinya Kitaoka 120a6e
  };
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
#define TOONZ_DEFINE_COMPONENT(NAME)                                           \
Shinya Kitaoka 120a6e
  struct NAME : public Component {                                             \
Shinya Kitaoka 120a6e
    QWidget *make_widget(TFx *fx, ParamsPage *page,                            \
Shinya Kitaoka 120a6e
                         const char *name) const final override {              \
Shinya Kitaoka 120a6e
      return page->new##NAME(fx, name);                                        \
Shinya Kitaoka 120a6e
    }                                                                          \
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(ParamField);
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(LineEdit);
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(Slider);
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(SpinBox);
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(CheckBox);
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(RadioButton);
Shinya Kitaoka 120a6e
  TOONZ_DEFINE_COMPONENT(ComboBox);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef TOONZ_DEFINE_COMPONENT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  ParamView() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ParamView(const ParamView &rhs) : components_(rhs.components_) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  inline void add_component(std::shared_ptr<component> component) {</component>
Shinya Kitaoka 120a6e
    components_.push_back(std::move(component));
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ParamView *clone(TFx *) const { return new ParamView(*this); }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void build(TFx *fx, ParamsPage *page, const char *name) const {
Shinya Kitaoka 120a6e
    for (const auto &component : components_) {
Shinya Kitaoka 120a6e
      page->addWidget(component->make_widget(fx, page, name));
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  std::vector<std::shared_ptr<component>> components_;</std::shared_ptr<component>
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef void *toonz_param_field_handle_t;
Toshihiro Shimizu 890ddd
typedef void *toonz_lineedit_handle_t;
Toshihiro Shimizu 890ddd
typedef void *toonz_slider_handle_t;
Toshihiro Shimizu 890ddd
typedef void *toonz_spinbox_handle_t;
Toshihiro Shimizu 890ddd
typedef void *toonz_checkbox_handle_t;
Toshihiro Shimizu 890ddd
typedef void *toonz_radiobutton_handle_t;
Toshihiro Shimizu 890ddd
typedef void *toonz_combobox_handle_t;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
int add_param_field(toonz_param_view_handle_t view,
Shinya Kitaoka 120a6e
                    toonz_param_field_handle_t *ParamField);
Shinya Kitaoka 120a6e
int add_lineedit(toonz_param_view_handle_t view,
Shinya Kitaoka 120a6e
                 toonz_lineedit_handle_t *LineEdit);
Toshihiro Shimizu 890ddd
int add_slider(toonz_param_view_handle_t view, toonz_slider_handle_t *Slider);
Shinya Kitaoka 120a6e
int add_spinbox(toonz_param_view_handle_t view,
Shinya Kitaoka 120a6e
                toonz_spinbox_handle_t *CheckBox);
Shinya Kitaoka 120a6e
int add_checkbox(toonz_param_view_handle_t view,
Shinya Kitaoka 120a6e
                 toonz_checkbox_handle_t *CheckBox);
Shinya Kitaoka 120a6e
int add_radiobutton(toonz_param_view_handle_t view,
Shinya Kitaoka 120a6e
                    toonz_radiobutton_handle_t *RadioButton);
Shinya Kitaoka 120a6e
int add_combobox(toonz_param_view_handle_t view,
Shinya Kitaoka 120a6e
                 toonz_combobox_handle_t *Combobox);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef TOONZ_DEFINE_ADD_COMPONENT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif