ТЕХНИЧЕСКОЕ ЗАДАНИЕ на разработку утилиты **ubl-settings-bootloader**

1. **ОПИСАНИЕ:**
	
	Графическое средство настройки загрузчика ОС UBLinux

1. **ЭТАПЫ И СРОКИ СОЗДАНИЯ ПРИЛОЖЕНИЯ:**
	1. Общий срок работ по созданию приложения составляет N дней:
		1. N дня - макет и дизайн приложения и его утверждение
		1. N дней - разработка приложения
		1. N дня - тестирование приложения и исправление ошибок
	1. Перечень этапов разработки приложения:
		1. Разработка макета и дизайна приложения
		1. Утверждение и доработка макета
		1. Создание работающего интерфейса, включая полную разработку действующих ярлыков, кнопок и т.д.
	1. Проектирование алгоритма работы приложения
	1. Написание работающего кода приложения, включая полноценно работающие элементы графического интерфейса, а также перевод (поддержка локализации En, Ru), самостоятельно
	1. Тестирование и исправление ошибок, самостоятельно
	1. Публикация

1. **ТЕХНОЛОГИЧЕСКИЕ ТРЕБОВАНИЯ:**
	1. Приложение разрабатывается под нужды операционной системы UBLinux
	1. Использование фирменного логотипа компании
	1. Название приложения, техническое:  **ubl-settings-bootloader** (далее **\${NAME_APPLICATION}**)
	1. Название приложения, публичное: **Настройка загрузки системы**
	1. Стек технологий:
		1. Язык программирования:  Bash или C(++)
		1. Приложение для разработки графического интерфейса: Glade 3
		1. Графические библиотеки: GTK3
		1. Операционная система разработки: UBLinux DB
	1. Структура:
		1. В исходных кодах использовать префикс корня  **CMAKE_INSTALL_PREFIX** для сборки приложений. Например, `CMAKE_INSTALL_PREFIX/share`.
		1. Bash/C(++): Весь функционал сосредоточен в графической части, вызовы и исполнение процедур написаны на языках Bash, C(++)
**/usr/bin/\${NAME_APPLICATION} (скомпилированный бинарный файл)**
		1. Графическая часть, фронт
**/usr/share/\${NAME_APPLICATION}/ui/\${NAME_APPLICATION}.glade**
		1. Стили виджетов GTK
**/usr/share/\${NAME_APPLICATION}/css/\${NAME_APPLICATION}.css**
		1. Элементы изображений
			1. Иконки:
**/usr/share/icons/hicolor/scalable/apps/\${NAME_APPLICATION}{\*.png,\*.svg}**
Файлы изображений png иконок должны иметь имена вида:
				- ru.ublinux.\${NAME_APPLICATION}.svg
				- ru.ublinux.\${NAME_APPLICATION}.\${NAME_ICONS}.svg
Где \${NAME_ICONS} - имя графического элемента, например: checked, warning, alert и т.д.
			Файлы изображений png иконок должны генерироваться из svg файла в размеры 16, 32, 48, 64 пикселей сценарием make-файла.
			1. Изображения:
**/usr/share/\${NAME_APPLICATION}/ui/{\*.png,\*.svg}**
		1. Локализация En/Ru
			1. Для локализации должен быть создан файл-шаблон ***\${NAME_APPLICATION}.pot***, на его основе должны быть созданы сами ***po-файлы*** переводов на необходимые языки, через файл сборки из po-файлов компилируются ***mo-файлы*** и размещаются сценарием установки по указанному пути:
**/usr/share/locale/\${LANG}/LC_MESSAGES/\${FILE_MO}**
где \${LANG} - каталог с именем локали, например, "ru" или "ru_RU",
\${FILE_MO} - файл локализации программы, например, "\${NAME_APPLICATION}.mo"
			1. В файле локализации .pot и .po должна присутствовать строчка информационная, показывающая позицию локализации в коде
				
				Пример:
				```bash
				#: source/${NAME_APPLICATION}.c:41
				msgid "Example string for localization"
				msgstr "Пример строки для локализации"
				```
			1. Вывод **всех** текстовых элементов осуществляется через средства локализации.
		1. Файл с перечнем и описанием параметров передаваемых ядру
**/usr/share/${NAME_APPLICATION}/cmdline-linux.csv**
		1. Файл с перечнем и описанием параметров терминала для ввода
**/usr/share/${NAME_APPLICATION}/grub-terminal-input.csv**
		1. Файл с перечнем и описанием параметров терминала для вывода
**/usr/share/${NAME_APPLICATION}/grub-terminal-output.csv**
		1. Версия ПО
			1. Файл, в котором хранится версия - VERSION.md, находится в корне каталога проекта.
			1. При компиляции (через сценарий make-файла) данные из файла VERSION.md передаются в значение переменной (-ых) version_application в файлах-исходниках ПО.
		
1. **ТЕХНИЧЕСКОЕ ЗАДАНИЕ:**
	1. Ярлык (desktop-файл):
	1. Type: Application
	1. Exec: ubl-settings-bootloader
	1. Categories: X-UBL-SettingsManager;X-UBL-SystemSettings
	1. Главное окно:
		1. Требования к внешнему виду:
			1. Адаптивный (резиновый) дизайн.
			1. Наличие элементов интерфейса:
				1. Статических - не меняют свою ширину при изменении размеров окна или родительского элемента.
				1. Динамических - меняют свою ширину при изменении размеров окна или родительского элемента. Обычно занимают пространство от края до края окна или родительского элемента, либо пространство от рядом расположенного элемента до до края окна или родительского элемента.
			1. Минимальный размер окна до прекращения масштабирования 800 на 600 пикселей.
			1. Шапка в стиле приложений GTK3 с содержимым:
				1. Иконка приложения. Статический элемент. Выравнивание по левому краю.
				1. Кнопка с выпадающим списком "Загрузить" -> ("Загрузить глобальную конфигурацию, Загрузить локальную конфигурацию"). Статический элемент. Выравнивание по левому краю.
				1. Заголовок окна, название приложения. Выравнивание по центру между элементами.
				1. Кнопка с выпадающим списком "Сохранить" -> ("Сохранить в глобальную и локальную конфигурацию, Сохранить в глобальную конфигурацию, Сохранить в локальную конфигурацию"). Статический элемент. Выравнивание по правому краю.
				1. Кнопка с иконкой с выпадающим списком -> "Справка, О приложении". Статический элемент. Выравнивание по правому краю.
				1. Стандартные элементы окна, кнопки "Свернуть, Минимизировать/На весь экран, Закрыть"
			1. В верхней части крупный логотип утилиты, с права от него краткое описание утилиты. Фон заполнен изображением. Статические элементы. Выравнивание по левому краю.
			1. Строка уведомления, представляющая собой полосу с инфографикой строки уведомлений. Динамический элемент. От края до края окна по горизонтали.
			1. Рабочая область.
		1. Требования к «Рабочей области». Динамический элемент. От края до края по горизонтали и вертикали окна. Выводятся группы настроек запуска:
			1. Блок с заголовком "Меню загрузки". Динамический элемент. От края до края окна по горизонтали.
				1. чекбокс "Таймер меню выбора варианта загрузки". Статический элемент. Выравнивание по левому краю.
				1. счётчик от 1 до 60 с лэйблом "секунд". Статический элемент. Выравнивание по левому краю.
				1. лэйбл "Загрузка по умолчанию:". Статический элемент. Выравнивание по левому краю.
				1. комбобокс с вариантами выбора ОС для загрузки. Динамический элемент. Выравнивание по левому краю. Делит пространство с соседними элементами.
				1. лэйбл "Режим отображения экрана загрузки:". Статический элемент. Выравнивание по левому краю.
				1. комбобокс вариантов режима загрузки: "Анимация загрузки с журналом", "Анимация загрузки без журнала", "Отсутствие анимации загрузки с выводом журнала", "Отсутствие анимации загрузки с выводом сокращенного журнала". Динамический элемент. Выравнивание по левому краю. Делит пространство с соседними элементами.
				1. чекбокс "Имя пользователя меню загрузки:". Статический элемент. Выравнивание по левому краю. Всплывающая подсказка: "Имя пользователя для входа в режим редактирования конфигурации загрузки".
				1. поле ввода логина. Динамический элемент. Делит пространство с соседними элементами. Активно только если выбран чекбокс "Имя пользователя меню загрузки:". Всплывающая подсказка: "Имя пользователя для входа в режим редактирования конфигурации загрузки".
				1. чекбокс "Пароль пользователя меню загрузки:". Статический элемент. Выравнивание по левому краю. Всплывающая подсказка: "Пароль пользователя для входа в режим редактирования конфигурации загрузки".
				1. поле ввода пароля (функция скрытого ввода). Динамический элемент. Делит пространство с соседними элементами. Активно только если выбран чекбокс "Пароль пользователя меню загрузки:". Всплывающая подсказка: "Пароль пользователя для входа в режим редактирования конфигурации загрузки".
			1. Блок с заголовком "Параметры, передаваемые ядру". Динамический элемент. От края до края окна по горизонтали.
				1. Таблица со скроллбаром. Динамический элемент. От края до края родительского элемента по горизонтали. Заголовок: столбец "Активно" чекбоксы (на активацию опции), столбец "Опция", столбец "Значение". Содержимое:
					1. чекбокс, quiet, Загрузка без текстовых сообщений
					1. чекбокс, splash, Показывать окно приветствия
					1. чекбокс, noplymouth, Отключить Plymouth
					1. чекбокс, acpi=off, Отключить ACPI
					1. чекбокс, noapic, Отключить APIC
					1. чекбокс, nolapic, Отключить локальный APIC
					1. чекбокс, single, Режим одного пользователя
					1. чекбокс, nomodeset, Отключить выбор и загрузку ядром драйверов видео
					1. чекбокс, i915.enable_dc=0, Отключить управление питанием графического процессора
					1. чекбокс, ahci.mobile_lpm_policy=1, Максимальная производительность, управление питанием
					1. чекбокс, snd-intel-dspcfg.dsp_driver=1, Принудительный выбор драйвера звукового устройства от Intel
					1. чекбокс, intel_idle.max_cstate=1, Предотвращает переход процессора в состояние глубокого сна
					1. чекбокс, intel_idle.max_cstate=4, Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage
					1. Поле ввода с лэйблом "Параметры командной строки:". Динамический элемент. От края до края родительского элемента по горизонтали.
			1. Блок с заголовком "Терминал для ввода". Динамический элемент. От края до края окна по горизонтали.
				1. Таблица со скроллбаром. Динамический элемент. От края до края родительского элемента по горизонтали. Заголовок: столбец "Активно" чекбоксы (на активацию опции), столбец "Опция", столбец "Значение". Содержимое:
					1. чекбокс, console, PC BIOS & консоль EFI
					1. чекбокс serial, Последовательный терминал
					1. чекбокс, ofconsole, Консоль Open Firmware
					1. чекбокс, at_keyboard, Клавиатура PC AT (Coreboot)
					1. чекбокс, usb_keyboard, Клавиатура USB Keyboard (протокол HID Boot)
					1. поле ввода с лэйблом "Параметры командной строки:". Динамический элемент. От края до края родительского элемента по горизонтали.
			1. Блок с заголовком "Терминал для вывода". Динамический элемент. От края до края окна по горизонтали.
				1. Таблица со скроллбаром. Динамический элемент. От края до края родительского элемента по горизонтали. Заголовок: столбец "Активно" чекбоксы (на активацию опции), столбец "Опция", столбец "Значение". Содержимое:
					1. чекбокс, console, PC BIOS & консоль EFI
					1. чекбокс, serial, Последовательный терминал
					1. чекбокс, ofconsole, Консоль Open Firmware
					1. чекбокс, gfxterm, Вывод в графическом режиме
					1. чекбокс, vga_text, Текстовый вывод VGA (Coreboot)
					1. поле ввода с лэйблом "Параметры командной строки:". Динамический элемент. От края до края родительского элемента по горизонтали.

1. **ОСОБЕННОСТИ**
	1. При загрузке утилиты по умолчанию загружаются данные из локального конфигурационного файла (выполняются команды блоков "Чтение значений: из локального конфигурационного файла").
	1. Функции записи в локальный конфигурационный файл и чтения-записи в глобальный конфигурационный файл должны проходить процедуру повышения привилегий прав пользователя через polkit.
	1. Сохранение должно происходить *только* при наличии изменённых данных в элементах форм приложения, в противном случае выводить в информационной строке сообщение: "Нечего сохранять!".
	1. Кнопка "Загрузить" -> ("Загрузить в глобальную конфигурацию, Загрузить локальную конфигурацию"). При нажатии на кнопку происходит открытие меню с пунктами: "Загрузить глобальную конфигурацию, Загрузить локальную конфигурацию". Загрузка текущей и глобальной конфигурации в системе через скрипт ubconfig (выполняются команды блоков "Чтение значений: из локального конфигурационного файла"), загрузка конфигурации из файла настроек ОС ublinux.ini (выполняются команды блоков "Чтение значений: из глобального конфигурационного файла").
	1. Кнопка "Сохранить" -> ("Сохранить в глобальную и локальную конфигурацию). Сохраняет текущие настройки через скрипт ubconfig (выполняются команды блоков "Установить значение: в локальный конфигурационный файл") и в конфигурационный файл настроек ОС ublinux.ini (выполняются команды блоков "Установить значение: в глобальный конфигурационный файл"). При выборе пунктов "Сохранить в глобальную конфигурацию, Сохранить в локальную конфигурацию" происходит отдельное сохранение настроек.
	1. Кнопка с иконкой с выпадающим списком -> "Справка, О приложении"
		1. Справка - запуск окна с встроенным браузером (WebKitWebView) с переходом на ссылку:
			1. локализованный (ru_RU) вариант:
https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/\${NAME_APPLICATION} (далее \${URLWIKI})
			1. локализованный (en_EN) вариант:
https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/\${NAME_APPLICATION} (далее \${URLWIKI})
		Если WebKitWebView не доступен, то запуск через `xdg-open ${URLWIKI}`.
		1. О приложении. Открывается диалоговое окно с выводом информации о программе:
			1. Заголовок окна по локализованному названию утилиты
			1. Копирайты, порядок:
				1. Иконка приложения
				1. Название утилиты
				1. Версия программы (переменная version_application)
				1. Название утилиты, локализованное
				1. Ссылка "Домашняя страница проекта" на https://ublinux.ru/ 
				1. Авторские права © ООО "Юбисофт", 2022 - \$LASTYEAR
					- локализованный (en_EN) вариант: "Copyright © UBSoft LLC, 2022 - \$LASTYEAR"
					- где \$LASTYEAR - текущий год.
	1. Обработчик ошибок. Встроенный небольшой обработчик кодов внутренних ошибок, который должен передавать статус возникшей ошибки в строку уведомления. Например: "Невозможно прочитать значение параметра XXXXXX!"
	1. Строка уведомлений. Цвет в зависимости от сигнала:
		- песочный, пиктограмма "Птичка", сообщения об удачных загрузках или сохранениях конфигураций системы. 
		- красный, пиктограмма "Восклицательный знак", сообщения об ошибках при сохранении, загрузке параметров конфигурации, при ошибках в работе программы, полученных от обработчика ошибок.
	1. Содержимое комбобокса "Загрузка по умолчанию:".
		1. Первый пункт всегда "Последняя удачная загрузка".
		1. Список из доступных ОС для загрузки.
	1. Поля "Параметры командной строки" заполняются автоматически при выборе необходимых параметров в таблицах соответствующих блоков (активация через чекбоксы), в поле передаётся название параметра и его значение (если значение имеется), разделение через пробел.
	1. При удалении параметра из поля "Параметры командной строки" соответствующий параметр теряет свой статус активности (галочка снимается) в таблице соответствующего блока.
	1. При редактировании (изменении) параметра в поле "Параметры командной строки" соответствующий параметр теряет свой статус активности (галочка снимается) в таблице соответствующего блока.
	1. Значения параметров, передаваемых ядру, берутся из файла /usr/share/${NAME_APPLICATION}/cmdline-linux.csv
	1. Значения параметров, терминала для ввода, берутся из файла /usr/share/${NAME_APPLICATION}/grub-terminal-input.csv
	1. Значения параметров, терминала для вывода, берутся из файла /usr/share/${NAME_APPLICATION}/grub-terminal-output.csv
	1. Вывод файлов csv так же должен быть локализован средствами pot-, po-, mo- файлов.

1. **КОМАНДЫ**
	1. Справка, О приложении > Домашняя страница проекта:
`xdg-open \${URLWIKI} &`
	1. Меню загрузки
		1. Таймер выбора варианта загрузки:
			1. Чтение значения:
				1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_TIMEOUT`
				1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_TIMEOUT`
			1. Установить значение:
				1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_TIMEOUT=$VALUE`
				1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_TIMEOUT=$VALUE`
где \$VALUE - параметр, цифровой, от 1 до 60.
		1. Загрузка по умолчанию:
			1. Должен быть получен список ОС и вариантов загрузки.
			1. Получить активный выбор:
				1. Чтение значения:
					1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_DEFAULT`
					1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_DEFAULT`
			1. Задать параметр загрузки:
				1. Установить значение:
					1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_DEFAULT=$VALUE`
					1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_DEFAULT=$VALUE`
где \$VALUE - параметр, строковый, получен из содержимого выбранной строки комбобокса выбора "Загрузка по умолчанию".
		1. Режим загрузки:
			1. Чтение значения:
				1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_BOOT_SILENT`
				1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_BOOT_SILENT`
			1. Установить значение:
				1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_BOOT_SILENT=$VALUE`
				1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_BOOT_SILENT=$VALUE`
где \$VALUE - параметр, строковый. Соответствие: 
*splash* - анимация загрузки, полный лог
*splash quiet ub.silent* - анимация загрузки, нет лога
*quiet ub.silent* - без анимации загрузки, минимальный лог
*plymouth.enable=0* - без анимации загрузки, полный лог
		1. Имя пользователя меню загрузки:
			1. Чтение значения:
				1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default get boot GRUB_USER`, если получено (null), то значение пустое.
			1. Установить значение:
				1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_USER=$VALUE`
				1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_USER=$VALUE`
где \$VALUE - параметр, строковый. Если выбран параметр комбобокса "Вручную" значение взять из поля "Имя пользователя меню загрузки:".
		1. Пароль пользователя меню загрузки:
			1. Чтение значения:
				1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_PASSWORD`
				1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_PASSWORD`
			1. Установить значение:
				1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_PASSWORD=$VALUE`
				1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_PASSWORD=$VALUE`
где \$VALUE - параметр, строковый. Если выбран параметр комбобокса "Вручную" значение взять из поля "Пароль пользователя меню загрузки:".
	1. Параметры, передаваемые ядру
		1. через функции фронтенда передавать выбранный параметр в поле "Параметры командной строки" блока "Параметры, передаваемые ядру"
		1. Параметры командной строки:
			1. Чтение значения:
				1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_CMDLINE_LINUX`
				1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_CMDLINE_LINUX`
			1. Установить значение:
				1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_CMDLINE_LINUX=$VALUE`
				1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_CMDLINE_LINUX=$VALUE`
где \$VALUE - перечень параметров, полученных исходя из выбранных опций в блоке "Параметры, передаваемые ядру", разделённых пробелом.
	1. Терминал для ввода
		1. через функции фронтенда передавать выбранный параметр в поле "Параметры командной строки" блока "Терминал для ввода"
	1. Параметры командной строки:
		1. Чтение значения:
			1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_TERMINAL_INPUT`
			1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_TERMINAL_INPUT`
		1. Установить значение:
			1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_TERMINAL_INPUT=$VALUE`
			1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_TERMINAL_INPUT=$VALUE`
где \$VALUE - перечень параметров, полученных исходя из выбранных опций в блоке "Терминал для ввода", разделённых пробелом.
	1. Терминал для вывода
		1. через функции фронтенда передавать выбранный параметр в поле "Параметры командной строки" блока "Терминал для вывода"
		1. Параметры командной строки:
			1. Чтение значения:
				1. из локального конфигурационного файла: `/usr/bin/ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT`
				1. из глобального конфигурационного файла: `/usr/bin/ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT`
			1. Установить значение:
				1. в локальный конфигурационный файл:  `/usr/bin/ubconfig --target system set boot GRUB_TERMINAL_OUTPUT=$VALUE`
				1. в глобальный конфигурационный файл: `/usr/bin/ubconfig --target global set boot GRUB_TERMINAL_OUTPUT=$VALUE`
где \$VALUE - перечень параметров, полученных исходя из выбранных опций в блоке "Терминал для вывода", разделённых пробелом.

1. **ПОМОЩЬ И ПАРАМЕТРЫ ЗАПУСКА**
	1. Помощь
		- Пример вывода:
			> ${NAME_APPLICATION} version: \$VERSION
			> Application Description for UBLinux
			> 
			> Использование:  ${NAME_APPLICATION} [OPTIONS...]
			> Параметры приложения:
			> \$OPTIONS

			Где \$OPTIONS - параметры запуска, \$VERSION - версия программы (переменная version_application).

	1. Параметры запуска:
		1. *-h, --help* - Показать параметры справки
		1. *-V, --version* - Показать текущую версию
		1. *--lock-help* - Блокировка вызова справки
		1. *--lock-save* - Блокировка сохранения локальной и глобальной конфигурации
		1. *--lock-save-local* - Блокировка сохранения локальной конфигурации
		1. *--lock-save-global* - Блокировка сохранения глобальной конфигурации
		1. *--lock-load-global* - Блокировка загрузки глобальной конфигурации
	1. Действия при указанных параметрах:
		1. *--lock-help* - делать неактивным пункт "Справка"  в выпадающем списке кнопки с иконкой.
		1. *--lock-save* - делать неактивной кнопку "Сохранить".
		1. *--lock-save-local* - делать неактивным пункт "Сохранить локальную конфигурацию"  в выпадающем списке кнопки "Сохранить".
		1. *--lock-save-global* - делать неактивным пункт "Сохранить глобальную и локальную конфигурацию" и "Сохранить глобальную конфигурацию"  в выпадающем списке кнопки "Сохранить".
		1. *--lock-load-global* - делать неактивным пункт "Сохранить глобальную и локальную конфигурацию" и "Загрузить глобальную конфигурацию"  в выпадающем списке кнопки "Загрузить".

1. **ПРИБЛИЗИТЕЛЬНЫЙ МАКЕТ ПРИЛОЖЕНИЯ.**
    1. Главное окно
        
 ![](https://gitea.ublinux.ru/miramax166/design-ubl-settings-apps/raw/commit/88ef0880aa8a7a70768b8d145775894be0d6f67c/ubl-settings-bootloader/pic/01%28ru_RU%29.png)
