3#include <Covellite/Gui/Layer.hpp>
4#include <boost/format.hpp>
5#include <alicorn/std/string.hpp>
6#include <alicorn/std/string/encoding.hpp>
7#include <alicorn/std/string-cast.hpp>
8#include <alicorn/boost/lexical-cast.hpp>
10using namespace covellite::gui;
12Layer::Element::Element(Element_t * _pElement) :
15 if (m_pElement ==
nullptr)
throw STD_EXCEPTION <<
"Element null pointer.";
22void Layer::Element::SetFocus(
void)
37void Layer::Element::SetMeaning(
const float _Meaning)
40 m_pElement->GetTagName();
42 if (Tag ==
"progress" || Tag ==
"circular")
44 CovelliteGuiSetProgressBarValue(m_pElement, _Meaning);
66void Layer::Element::SetMeaning(
const String_t & _Meaning)
69 m_pElement->GetTagName();
71 m_pElement->GetAttribute(
"type", CovelliteGui::String{
"unknown" });
73 using namespace ::alicorn::extension::std;
76 TODO(
"Проверить работу функции для textarea");
78 if (Tag ==
"textarea" ||
79 (Tag ==
"input" && (Type ==
"range" || Type ==
"text")))
82 dynamic_cast<CovelliteGui::ElementFormControl &
>(*m_pElement);
88 Control.SetValue(string_cast<::std::string, Encoding::UTF8>(_Meaning).c_str());
92 m_pElement->SetInnerRML(
93 string_cast<::std::string, Encoding::UTF8>(_Meaning).c_str());
109auto Layer::Element::GetMeaning(
void)
const -> String_t
111 const CovelliteGui::String Unknown =
"unknown";
113 const auto Tag = m_pElement->GetTagName();
114 const auto Type = m_pElement->GetAttribute(
"type", Unknown);
116 using namespace ::alicorn::extension::std;
119 TODO(
"Проверить работу функции для textarea");
121 if (Tag ==
"textarea" || Tag ==
"select" ||
122 (Tag ==
"input" && (Type ==
"text" || Type ==
"range")))
124 const auto & Control =
125 dynamic_cast<CovelliteGui::ElementFormControl &
>(*m_pElement);
127 return string_cast<String, Encoding::UTF8>(
128 CovelliteGuiStringToUtf8(Control.GetValue()));
131 return string_cast<String, Encoding::UTF8>(
132 CovelliteGuiStringToUtf8(m_pElement->GetInnerRML()));
147void Layer::Element::SetClassStyle(
const String_t & _Class)
149 using namespace ::alicorn::extension::std;
151 m_pElement->SetAttribute(
"class",
152 string_cast<::std::string, Encoding::UTF8>(_Class).c_str());
181 m_pDocument(_Window.LoadDocument(_PathToFile))
183 if (m_pDocument ==
nullptr)
185 throw STD_EXCEPTION <<
"Document null pointer: " << _PathToFile;
218 const ::std::string & _TitleId) :
219 Layer(_Window, _PathToFile)
221 auto * pTitle = m_pDocument->GetElementById(_TitleId.c_str());
222 if (pTitle ==
nullptr)
224 throw STD_EXCEPTION <<
"Unexpected title id: " << _TitleId;
227 pTitle->SetInnerRML(m_pDocument->GetTitle());
236void Layer::Show(
void)
262 return CovelliteGuiStringToUtf8(m_pDocument->GetId());
277 return m_pDocument->GetElementById(_Id.c_str());
280int Layer::GetWidth(
void)
const
282 const auto *
const pContext = m_pDocument->GetContext();
283 if (pContext ==
nullptr)
throw STD_EXCEPTION <<
"Null pointer.";
285 return pContext->GetDimensions().x;
288int Layer::GetHeight(
void)
const
290 const auto *
const pContext = m_pDocument->GetContext();
291 if (pContext ==
nullptr)
throw STD_EXCEPTION <<
"Null pointer.";
293 return pContext->GetDimensions().y;
319 if (m_pDocument->GetTagName() != u8
"body")
321 throw STD_EXCEPTION <<
"Unexpected document tag name: "
322 << CovelliteGuiStringToUtf8(m_pDocument->GetTagName());
325 const auto FontSize = ::std::max(GetWidth(), GetHeight()) *
326 _PercentFromMaxScreenSize / 100.0f;
328 m_pDocument->SetAttribute(
"style",
329 (::boost::format(
"font-size: %1%px;") % FontSize).str().c_str());
Класс входит в проект Covellite.Gui Интерфесный класс окна, отображающего элементы GUI.
Definition IWindow.hpp:31
Класс входит в проект Covellite.Gui Класс одного слоя (пользовательского экрана) программы.
Definition Layer.hpp:39
float EmployFontSize(float)
Функция установки базового размера шрифта всего документа.
Definition Layer.cpp:317
Element GetElement(const ElementId_t &) const
Функция получения объекта дочернего элемента.
Definition Layer.cpp:275
DocumentId_t GetId(void) const
Функция получения идентификатора документа.
Definition Layer.cpp:260
void Hide(void) final
Функция скрытия слоя.
Definition Layer.cpp:245
Класс входит в проект Covellite.Gui Класс одного элемента .rml файла.
Definition Layer.hpp:60