= Структура каси самообслуги =
На відміну від програми, з якою працюють працівники магазину, з касою самообслуговування працюють клієнти закладу і тому зовнішній вигляд інтерфейсу програми має надзвичайно важливе значення. Крім того форма та розширення монітору може дуже відрізнятись від звичайних. Це додає особливі вимоги до кастомізації саме даного модуля.
* [#point1 Загальні принципи]
* [#point2 Позиціонування]
* [#point3 Кнопки]
* [#point4 Записи в чекові]
* [#point5 Фільтр товарів]
* [#point6 Написи]
== [=#point1 Загальні принципи] ==
Як відбувається зміна стилів описано [wikw:styles в цьому розділі].[[br]]
Проте окрім індивідуальних стилів, для каси самоомбслуговування розроблено систему, генерації інтерфейсу на основі файлів із індивідуальною структурою основного вікна. По суті це звичайні .xml файли що лежать в каталозі ./frames. Активну структуру можна підключити, змінивши в файлі kassa_ss.ini в секції [Place] .. FramesType="структура.xml". Внесення змін в ці файли дозволяє переміщувати, створювати або приховувати ті чи інщі елементи інтерфейсу програми.
== [=#point2 Позиціонування] ==
З дебільшого елементи позиціонування не відображаються (окрім рідкісних випадків) і служать лише для задання правил відображення елементів, які вміщують всередині себе.
=== Макети
Макети є вкладеними структурами системи, що можуть вміщувати інші слої та елементи. Для створення макета необхідно додати тег:
{{{
#!xml
...
}}}
Фактично макети служать для групування інших елементів та розміщення їх по горизонталі чи вертикалі. За замовчуванням елементи розтягнуться по горизонталі.[[br]]
Макет може містити наступні додаткові параметри:
* '''direction="орієнтація"''' - напрям орієнтації внутрішніх елементів. Допустимі значення:
* ''"vertical"'' - вертикальне (в стовпчик);
* ''"horizontal"'' - горизонтальне;
* '''frame="назва"''' - звичайні макети не відображаються на екрані. Проте додавання даного, не порожнього, параметру дозволить задати певну візуальну стилізацію зони, під елементами макету. В таблиці стилів для цього потрібно задати відповідний стиль ''QFrame#назва { ... }''.
=== Розтягування
Елемент розтягування, доданий в '''''' притискає інші елементи, роблячи певні проміжки. Їх зручно уявляти як пружини, що розсувають інщі блоки.
{{{
#!xml
}}}
== [=#point3 Кнопки] ==
Кнопки є інтерактивними елементами, що дозволяють користувачу виконувати певні дії. Зазвичай кнопка може містити напис, іконку, або і те й інше.
{{{
#!xml
}}}
Напис може бути довільним, проте зручно використовувати символи Unicode у вигляді '''код;'''. Наприклад: ✀ - є символом ножицьб або ✎ - символ олівця. Безліч кодів можна в інтернеті.[[br]]
Параметри:
* '''signal="сигнал"''' - фактично цей сигнал буде надісланий кнопкою системі для розуміння того, що має відбутись. Наразі список допустимих сигналів є наступним:
* "payment" - провести оплату. Зазавичай для повноцінної роботи програми достатньо кнопки з цим сигналом;
* "delete" - видалення поточного запису (того, на якому встановлено курсор в );
* "clear" - видалити всі записи з поточного чеку;
* '''icon="картинка"''' - назва файла з картинкою, з каталогу ''./images''. Якщо параметр відсутній то зображення не відображатиметься;
Стилі для кнопок задаються у вигляді ''QPushButton#сигнал { ... }''
== [=#point4 Записи в чекові] ==
По суті, це список, обраних клієнтом товарів.
{{{
#!xml
}}}
Параметри:
* '''type="grid"''' - наразі єдиним видом відображення товарів є проста таблиця ("grid"). В перспективі цей список планується розширити більш складними елементами;
* '''del_caption="напис"''' - напис на кнопці видалення запису, навпроти товару;
== [=#point5 Фільтр товарів] ==
Фільтр, в якому відбуватиметься пошук товарів.
{{{
#!xml
}}}
Параметри:
* '''type="editor"''' - наразі це лише один вид фільтра. Це звичайне поле вводу. У випадку віртуальної клавіатури, набір кнопок задається в параметрі ''file="файл_клавіатури"''. В перспективі будуть розроблені інші виду пошуку;
* '''file="digital_int"''' - файл клавіатури з каталогу ''./vkbd'';
* '''placeholder="Відскануйте товар"''' - текст, що відображається в фільтрі, коли текст не введено;
== [=#point6 Написи] ==
Написи можуть містити певну форматовану інформацію. Тексти повідомлень можуть містити певні динамічні дані у форматі: {:назва}. Замість тексту може бути відображено картинку (див. параметр ''icon'').
{{{
#!xml
}}}
Параметри:
* '''id="ідентифікатор"''' - ідентифікатор для стилю. Може бути не унікальним;
* '''icon="картинка"''' - назва файла з картинкою, з каталогу ''./images''. [[span(style=color: #FF0000, !!! УВАГА: Для відображення картинки текст повинен бути відсутній)]] .
Стилі написів задаються у вигляді ''QLabel#ідентифікатор { ... }''
Допустимі назви вставок типу {:назва}:
* '''{:sum_discounted}''' - сума чека після дії знижок;
* '''{:sum_discount}''' - сума знижок;
В подальшому список буде розширюватись.