Driver
Driver
コンポーネントを単体で呼び出すためのドライバーです。
ドライバーはAtoms、Molecules、Organisms、Templates、Pagesに分類されています。
標準で使用できるコンポーネントが登録されています。

次のImageDriverComponentを作成しDriverAtomsComponentに登録することで呼び出します。
// ImageDriverComponent.hpp
#pragma once
#include <gui/components/atoms/box/box_component.hpp>
#include <gui/components/atoms/image/image_component.hpp>
class ImageDriverComponent : public Component
{
public:
// 呼び出すドライバーのパターンを作成します。
enum class PATTERN : unsigned int
{
BASE = 0,
RED,
GREEN,
BRUE,
END
};
//テンプレート引数に作成したPATTERNを指定します。
using SelectPattern = DriverTableRecordGenerator::SelectPattern<PATTERN>;
//ドライバー一覧に表示するカラム定義
using Columns = DriverTableRecordGenerator::Columns;
//ATOMICはATOMS〜PAGESを指定します。
using ATOMIC = DriverTableRecordGenerator::ATOMIC;
private:
using POS = spa::gui::box::POS;
public:
ImageDriverComponent(MOD mod)
: Component(mod)
, pattern{ std::make_shared<PATTERN>(PATTERN::BASE) }
{
//ImageComponentの表示域を指定します。
box = BoxComponent{
mod
, Theme().main_window_w / 2
, Theme().main_window_h / 2
, 255
, 255
, 255
, 255
, POS::CENTER };
//componentsにPATTERNを指定してImageComponentを登録します。
ImageComponent base{
mod
, "brand.png" };
components[PATTERN::BASE] = base;
ImageComponent red{
mod
, "brand.png" };
// RGBに255,0,0を乗算 元画像が白色の箇所は赤色になります。
red.mod_image_color(255, 0, 0);
components[PATTERN::RED] = red;
ImageComponent green{
mod
, "brand.png" };
green.mod_image_color(0, 255, 0);
// RGBに0,255,0を乗算 元画像が白色の箇所は緑色になります。
components[PATTERN::GREEN] = green;
ImageComponent brue{
mod
, "brand.png" };
// RGBに0,0,255を乗算 元画像が白色の箇所は青色になります。
brue.mod_image_color(0, 0, 255);
components[PATTERN::BRUE] = brue;
//ドライバー一覧で選択できるオプションを設定します。
options = std::map<unsigned int, std::string>{
{static_cast<unsigned int>(PATTERN::BASE), "base"}
, {static_cast<unsigned int>(PATTERN::RED), "red"}
, {static_cast<unsigned int>(PATTERN::GREEN), "green"}
, {static_cast<unsigned int>(PATTERN::BRUE), "brue"} };
}
~ImageDriverComponent() = default;
//ドライバー一覧のデータを生成します、SelectPatternでセレクトボックスで指定した値にpatternを設定します。
Columns gen()
{
return std::tuple(
ATOMIC::ATOMS
, "ImageComponent"
, options
, SelectPattern(pattern.get()));
}
//コンポーネントを指定したパターンで構成します。
void configure()
{
attach(box());
box()->attach(components[*pattern]());
}
private:
std::map<unsigned int, std::string> options;
std::shared_ptr<PATTERN> pattern;
std::map<PATTERN, FcComponent> components;
FcComponent box;
};
driver_atoms_component.hpp
// driver_atoms_component.hpp
#pragma once
#include <gui/components/atoms/box/box_driver_component.hpp>
#include <gui/components/atoms/rect/rect_driver_component.hpp>
#include <gui/components/atoms/text/text_driver_component.hpp>
// ImageDriverComponentを読み込み
#include <gui/components/atoms/image/image_driver_component.hpp>
#include <gui/components/atoms/click/click_driver_component.hpp>
#include <gui/components/atoms/slider/slider_driver_component.hpp>
#include <gui/components/atoms/select/select_driver_component.hpp>
#include <gui/components/atoms/page/page_driver_component.hpp>
#include <gui/components/atoms/capture/capture_driver_component.hpp>
class DriverAtomsComponent : public Component
{
private:
// ドライバー一覧のカラム定義
using Columns = DriverTableRecordGenerator::Columns;
public:
DriverAtomsComponent(MOD mod);
std::list<Columns> records();
void configure();
private:
// ドライバー一覧のリスト
std::list<Columns> drivers;
// プレビューウィンドウに表示するコンポーネント
std::map<std::string, FcComponent> preview;
};driver_atoms_component.cpp
// driver_atoms_component.cpp
#include <gui/components/organisms/driver/driver_atoms_component.hpp>
DriverAtomsComponent::DriverAtomsComponent(MOD mod)
: Component(mod)
{
// components
BoxDriverComponent box_driver_component{ mod };
RectDriverComponent rect_driver_component{ mod };
TextDriverComponent text_driver_component{ mod };
//ImageDriverComponentを初期化します。
ImageDriverComponent image_driver_component{ mod };
ClickDriverComponent click_driver_component{ mod };
SliderDriverComponent slider_driver_component{ mod };
SelectDriverComponent select_driver_component{ mod };
PageDriverComponent page_driver_component{ mod };
CaptureDriverComponent capture_driver_component{ mod };
// driver table columns
drivers.push_back(box_driver_component.gen());
drivers.push_back(rect_driver_component.gen());
drivers.push_back(text_driver_component.gen());
// ドライバー一覧にimage_driver_componentのレコードを追加します。
drivers.push_back(image_driver_component.gen());
drivers.push_back(click_driver_component.gen());
drivers.push_back(slider_driver_component.gen());
drivers.push_back(select_driver_component.gen());
drivers.push_back(page_driver_component.gen());
drivers.push_back(capture_driver_component.gen());
// preview components
preview[std::get<1>(box_driver_component.gen())] = box_driver_component;
preview[std::get<1>(rect_driver_component.gen())] = rect_driver_component;
preview[std::get<1>(text_driver_component.gen())] = text_driver_component;
// preview["ImageComponent"]にimage_driver_componentを指定します。
preview[std::get<1>(image_driver_component.gen())] = image_driver_component;
preview[std::get<1>(click_driver_component.gen())] = click_driver_component;
preview[std::get<1>(slider_driver_component.gen())] = slider_driver_component;
preview[std::get<1>(select_driver_component.gen())] = select_driver_component;
preview[std::get<1>(page_driver_component.gen())] = page_driver_component;
preview[std::get<1>(capture_driver_component.gen())] = capture_driver_component;
}
std::list<DriverAtomsComponent::Columns> DriverAtomsComponent::records()
{
return drivers;
}
void DriverAtomsComponent::configure()
{
if (preview.contains(mod.store->preview))
attach(preview[mod.store->preview]());
}redを指定してImageComponentを実行すると次のようになります。
