Создание Line Select (в разработке)

Line Select представляет из-себя компонент состоящий из нескольких кнопок, и одномоментно может быть включена только одна из-них.
Мы создадим такой компонент, который сможет принимать на вход массив строк и для каждого элемента вектора будет создана отдельная кнопка.
Подготовка
Первое, что делается всегда, это наследование от класса Component
(более подробно это описано в Создание собственных компонентов на базе класса Component ), создадим папку components
рядом с main.cpp
и добавим в него файл line_select.h
со следующим содержанием:
// file line_select.h
#pragma once
#include "component.h"
using namespace Kit;
class LineSelect : public Component
{
public:
LineSelect(const string& id, const string& classes = "");
~LineSelect() override;
public:
static Component* create(const string& id, const string& classes = "");
void setup();
};
И файл line_select.cpp
:
// file line_select.cpp
#include "line_select.h"
LineSelect::LineSelect(const string& id_, const string& classes_)
: Component(id_, ".line-select " + classes_)
{
this->setup();
}
LineSelect::~LineSelect()
{
}
Component* LineSelect::create(const string& id_, const string& classes_)
{
return new LineSelect(id_, classes_);
}
void LineSelect::setup()
{
style("../components/style.css");
}
Стили для простоты будем размещать рядом с исходным кодом, так что создадим файл style.css
в той же папке components
и не забудем подключить стили к компоненту (более подробно это описано в Создание собственных компонентов на базе класса Component ).
Теперь все готово к созданию компонента. Все вышеприведенные действия будут совпадать при создании любого компонента на базе класса Component
.
Как устроен Line Select
Line Select в любой момент может иметь только один выбранный элемент, так что нам нужно будет отслеживать это. Для этого будет использована пользовательская информация в компоненте (подробнее об этом на странице Начало работы).
Добавляем пункты
Для этого, в первую очередь, мы должны каким то образом получать массив строк для создания пунктов. Добавим в конструктор и метод create
аргумент const vector<string>& items
. Добавим в класс поле vector<string> items
. В конструкторе пропишем следующее:
LineSelect::LineSelect(const string& id_, const vector<string>& items_,
const string& classes_)
: Component(id_, ".line-select " + classes_)
{
this->items = items_;
this->setup();
}
Изменим так же тело метода create
:
Component* LineSelect::create(const string& id_, const vector<string>& items_,
const string& classes_)
{
return new LineSelect(id_, items_, classes_);
}
Last updated
Was this helpful?