From dd77ed99b3a050b082786d0113253b8d0563f00a Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 12:32:21 +0600 Subject: [PATCH 001/110] init --- #ubl-settings-bootloader.glade# | 1298 +++++++++++++++++ .gitignore | 4 + Makefile | 136 ++ README.md | 29 + bg_top.png | Bin 0 -> 33872 bytes ...pkexec.ubl-settings-bootloader.exec.policy | 24 + screenshot/screenshot.png | Bin 0 -> 139670 bytes source/CMakeLists.txt | 28 + source/main.cc | 50 + source/ubl-settings-bootloader.cc | 238 +++ source/ubl-settings-bootloader.h | 117 ++ style.css | 7 + ubl-settings-bootloader.desktop | 14 + ubl-settings-bootloader.glade | 1282 ++++++++++++++++ ubl-settings-bootloader_ru.po | 116 ++ 15 files changed, 3343 insertions(+) create mode 100644 #ubl-settings-bootloader.glade# create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 bg_top.png create mode 100644 org.ublinux.pkexec.ubl-settings-bootloader.exec.policy create mode 100644 screenshot/screenshot.png create mode 100644 source/CMakeLists.txt create mode 100644 source/main.cc create mode 100644 source/ubl-settings-bootloader.cc create mode 100644 source/ubl-settings-bootloader.h create mode 100644 style.css create mode 100644 ubl-settings-bootloader.desktop create mode 100644 ubl-settings-bootloader.glade create mode 100644 ubl-settings-bootloader_ru.po diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# new file mode 100644 index 0000000..41c24f5 --- /dev/null +++ b/#ubl-settings-bootloader.glade# @@ -0,0 +1,1298 @@ + + + + + + False + О Программе + False + True + center + ubl-settings-datetime + dialog + True + ubl-settings-bootloader + 1.0 + Copyright © 2023 - UBSoft Software LLC + Setting the bootloader + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + ublexec + True + gpl-2-0 + + + False + vertical + 2 + + + False + end + + + + + + False + False + 0 + + + + + + + + + + 750 + 550 + False + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ublexec + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + True + in + + + True + False + + + True + False + vertical + + + True + True + both + True + + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + Load variant selection timer + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Default download + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + False + True + 1 + + + + + The last selection will become the default boot choice + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + vertical + + + True + False + + + splash (Show welcome window) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + quiet (Downloading without text messages) + 362 + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + nоapic (Disable APIC) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + nolapic (Disable local APIC) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + + + no plymouth (Disable Plymouth) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + single (Single User Mode) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + acpi=off (Disable ACPI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + nomodeset (Disable kernel selection and loading of video drivers) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + + + i915.enable_dc=0 (Disable GPU power management) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + ahci.mobile_jpm_policy=1 (Maximum performance, power management) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 7 + + + + + intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state) + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 8 + + + + + intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage) + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 9 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 10 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + vertical + + + console (PC BIOS & console EFI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + serial (Serial terminal) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + ofconsole (Console Open Firmware) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + vertical + + + at_keyboard (Keyboard PC AT (Coreboot)) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + usb_keyboard (Keyboard USB Keyboard (protocol HID Boot)) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Input terminal + + + + + False + True + 3 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + ofconsole (Console Open Firmware) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + serial (Serial terminal) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + console (PC BIOS & console EFI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + vertical + + + gfxterm (Output in graphical mode) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + vga_text (Text output VGA (Coreboot)) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Output terminal + + + + + False + True + 4 + + + + + + + + + True + True + 0 + + + + + True + True + 1 + + + + + + + True + False + True + + + True + False + UBConfig - Loading + + + + + True + False + 32 + ublexec + + + + + True + False + + + True + True + False + True + True + none + + + + + + False + True + 0 + + + + + end + 1 + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..46763c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +ubl-settings-bootloader.glade~ +test.cpp +.vscode +ubl-settings-bootloader \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1341c01 --- /dev/null +++ b/Makefile @@ -0,0 +1,136 @@ +#!/usr/bin/make -f +#!/usr/bin/make -f + +#SHELL := /bin/bash +MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) +MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) + +CMAKE_COMMAND = cmake +#CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +#CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile +CMAKE_SOURCE_DIR = ./source +CMAKE_BUILD_DIR = ./compile +DEPENDS = cmake +#PKGNAME = $(MAKEFILE_DIR) +PKGNAME = ubl-settings-bootloader + +default_target: all +all: init build + +init: + @echo "Initialize ..."; \ + echo "-- Build path: ${CMAKE_BUILD_DIR}" + +depend: + @echo "Check depends ..."; \ + if [ ! -f /bin/${DEPENDS} ]; then \ + echo "-- Depend '${DEPENDS}' not fount !"; \ + exit 1; \ + fi; \ + echo "Check depends: OK" +# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 + +debug: + @echo "Debug ..." + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="/usr"; \ + fi; \ + echo "Debug: OK" + +prepare: + @echo "Prepare ..."; \ + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr"; \ + fi; \ + echo "Prepare: OK" + +check: + @echo "Check ..."; \ + if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \ + echo "Check: OK"; \ + else \ + echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not fount !"; \ + exit 1; \ + fi + +build: depend prepare + @echo "Build ..."; \ + make --directory=${CMAKE_BUILD_DIR}; \ + echo "Build: OK" + +uninstall: + @echo "Uninstall ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + $(RM) "/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + done +# @for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "/usr/share/icons/hicolor/$${SIZE}/apps/${PKGNAME}.svg"; \ + $(RM) "/usr/share/icons/hicolor/$${SIZE}/apps/${PKGNAME}.png"; \ + done +# @for FILE_SVG in $(wildcard *.svg); do \ + for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "/usr/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ + done; \ + done + @$(RM) "/usr/bin/${PKGNAME}" + @$(RM) "/usr/share/applications/${PKGNAME}.desktop" + @$(RM) "/usr/share/polkit-1/actions/ru.ublinux.pkexec.${PKGNAME}.exec.policy" + @$(RM) -rd "/usr/share/${PKGNAME}" + @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ &>/dev/null + @update-desktop-database --quiet 2>/dev/null + @touch /usr/share/applications + @echo "Uninstall: OK" + +install: check uninstall + @echo "Install ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + install -dm755 /usr/share/locale/$${LANG}/LC_MESSAGES; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + echo $${FILE_PO}; \ + msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16 32 48; do \ + install -dm755 /usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps; \ +# rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data ${PKGNAME}.svg -o "/usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/${PKGNAME}.svg"; \ + done + @install -dm755 /usr/share/icons/hicolor/scalable/apps +# @install -Dm644 -t /usr/share/icons/hicolor/scalable/apps/ ${PKGNAME}.svg + @install -Dm755 -t /usr/bin/ ${CMAKE_BUILD_DIR}/${PKGNAME} + @install -Dm644 -t /usr/share/applications/ ${PKGNAME}.desktop + @install -Dm644 -t /usr/share/polkit-1/actions/ org.ublinux.pkexec.${PKGNAME}.exec.policy + @install -dm755 /usr/share/${PKGNAME}/{ui,css,images} + @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade + @install -Dm644 -t /usr/share/${PKGNAME}/css/ style.css + @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png +# @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg +# @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png + @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ + @update-desktop-database --quiet 2>/dev/null + @touch /usr/share/applications + @echo "Install: OK" + +clean: + @echo "Clean ..." + @$(RM) -rd ${CMAKE_BUILD_DIR} + @if [ -d ${CMAKE_BUILD_DIR} ]; then \ + echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ + else \ + echo "Clean: OK"; \ + fi + +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... init" + @echo "... debug" + @echo "... prepare" + @echo "... compile" + @echo "... install" + @echo "... uninstall" + @echo "... clean" \ No newline at end of file diff --git a/README.md b/README.md index f8c2bcf..ecd29db 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,31 @@ # ubl-settings-bootloader +# Настройка grub +[RU] Утилита для настройки grub +Utility for setting the grub + +![alt text](screenshot/screenshot.png) + +# Build +In order to build ubl-settings-bootloader you will need: + +- CMake +- C compiler +- GTK+ 3 & dependencies + +Once you have all the necessary dependencies, you can use: +```sh +$ make +``` + +# Installation +After a successful build, just use: +```sh +$ sudo make install clean +``` + +# Uninstallation +After a successful build, just use: +```sh +$ sudo make uninstall +``` diff --git a/bg_top.png b/bg_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb67cbc38babeaf498d981356cf7e77e2741f12 GIT binary patch literal 33872 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 z + + + + UBLinux + https://ublinux.ru + + + Run "ublexec" as root + Запус "Выполнить" с правами root + Authentication is required to run ublexec + Требуется авторизация для запуска "Выполнить" с правами root + + auth_admin + auth_admin + auth_admin + + /usr/bin/ublexec + true + + + diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..3d555abef05e8f0d46007f4054b7c66a51f1a7d7 GIT binary patch literal 139670 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%0A&o6VZo+#b98v4d;nV0$;gG%B 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

cdWbQ<&Cey>Y(BJzEa6UV6!34s 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 literal 0 HcmV?d00001 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt new file mode 100644 index 0000000..8f211c8 --- /dev/null +++ b/source/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 3.7) +project(ubl-settings-bootloader) + +find_package(PkgConfig REQUIRED) + +pkg_check_modules(GTK REQUIRED gtkmm-3.0) +include_directories(${GTK_INCLUDE_DIRS}) +link_directories(${GTK_LIBRARY_DIRS}) +add_definitions(${GTK_CFLAGS_OTHER}) + +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a -g") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ + -O2 -pipe -fno-plt -fexceptions \ + -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ + -fstack-clash-protection -fcf-protection -g") + +set(SOURCE_FILES + main.cc + ubl-settings-bootloader.cc + ubl-settings-bootloader.h) + +set(LIBRARIES + ${GTK_LIBRARIES} + pthread) + +add_executable(ubl-settings-bootloader ${SOURCE_FILES}) +target_link_libraries(ubl-settings-bootloader ${LIBRARIES}) +install(TARGETS ubl-settings-bootloader DESTINATION bin) diff --git a/source/main.cc b/source/main.cc new file mode 100644 index 0000000..3ebb17f --- /dev/null +++ b/source/main.cc @@ -0,0 +1,50 @@ +#include "ubl-settings-bootloader.h" + +int main(int argc, char** argv) +{ + string str_cmd_argv = ""; + for (int i=1; irun(plug); + return 0; + } + else { + MainWindow* wnd = nullptr; + builder->get_widget_derived("window", wnd); + auto r = app->run(*wnd); + delete wnd; + return r; + } + +} diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc new file mode 100644 index 0000000..7179203 --- /dev/null +++ b/source/ubl-settings-bootloader.cc @@ -0,0 +1,238 @@ + +#include "ubl-settings-bootloader.h" +using namespace std; + +string path_app= "/usr/bin/"; +string path_glade= "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade"; +string path_css = "/usr/share/ubl-settings-bootloader/css/style.css"; +string app_name = "ubl-settings-bootloader"; +CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) +: Glib::OptionGroup{p_name, p_description, p_help} { + Glib::OptionEntry socketIDArg; + socketIDArg.set_long_name("socket-id"); + socketIDArg.set_short_name('s'); + socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); + socketIDArg.set_description("Settings manager socket"); + add_entry(socketIDArg, m_socketID); +} +::Window CmdArgParser::GetSocketID() const{ + return m_socketID; +} + +SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr builder) + : Gtk::Plug{p_socketID} { + MainWindow* wnd = nullptr; + builder->get_widget_derived("window", wnd); + builder->get_widget("plugBox", plugBox); + plugBox->get_parent()->remove(*plugBox); + add(*plugBox); + show_all_children(); +} + +MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) + : Gtk::ApplicationWindow(obj), builder{builder} { + this->builder = builder; + this->settings(); +} + +MainWindow::MainWindow(Glib::RefPtr const& builder) { + this->builder = builder; + this->settings(); +} + +void MainWindow::settings(){ + this->get_builder(); + this->localization(); + this->event(); + this->add_CSS(); +} + +void MainWindow::get_monitor_size(){ + GdkRectangle workarea; + gdk_monitor_get_workarea( + gdk_display_get_primary_monitor(gdk_display_get_default()),&workarea); + screen_width = workarea.width; + screen_hight = workarea.height; +} + +void MainWindow::get_builder(){ + builder->get_widget("chbLoadVariantSelectionTimer", chbLoadVariantSelectionTimer); + builder->get_widget("chbLastSelectionWillBecome", chbLastSelectionWillBecome); + builder->get_widget("chbQuiet", chbQuiet); + builder->get_widget("chbSplash", chbSplash); + builder->get_widget("chbPlymouth", chbPlymouth); + builder->get_widget("chbAcpi", chbAcpi); + builder->get_widget("chbNоapic", chbNоapic); + builder->get_widget("chbNolapic", chbNolapic); + builder->get_widget("chbSingle", chbSingle); + builder->get_widget("chbHomodeset", chbHomodeset); + builder->get_widget("chbI915Enable", chbI915Enable); + builder->get_widget("chbAhci", chbAhci); + builder->get_widget("chbSndIntel", chbSndIntel); + builder->get_widget("chbintelMax1", chbintelMax1); + builder->get_widget("chbintelMax4", chbintelMax4); + builder->get_widget("chbconsoleIT", chbconsoleIT); + builder->get_widget("chbSerialIT", chbSerialIT); + builder->get_widget("chbofConsoleIT", chbofConsoleIT); + builder->get_widget("chbAtKeyboard", chbAtKeyboard); + builder->get_widget("chbUsbKeyboard", chbUsbKeyboard); + builder->get_widget("chbofConsoleOT", chbofConsoleOT); + builder->get_widget("chbSerialOT", chbSerialOT); + builder->get_widget("chbconsoleOT", chbconsoleOT); + builder->get_widget("chbGfxterm", chbGfxterm); + builder->get_widget("chbVgaText", chbVgaText); + + builder->get_widget("lblInfoCommand", lblInfoCommand); + builder->get_widget("lblInfoCommand1", lblInfoCommand1); + builder->get_widget("lblInfoCommand2", lblInfoCommand2); + builder->get_widget("lblInfoDefaultDonw", lblInfoDefaultDonw); + builder->get_widget("lblInfoSeconds", lblInfoSeconds); + builder->get_widget("lblDownloadMenu", lblDownloadMenu); + builder->get_widget("lblInfoInputTerminal", lblInfoInputTerminal); + builder->get_widget("lblInfoOutputTerminal", lblInfoOutputTerminal); + builder->get_widget("lblInfoSeconds", lblInfoSeconds); + builder->get_widget("lblHeaderName", lblHeaderName); + builder->get_widget("lblInfoHead", lblInfoHead); + + builder->get_widget("spbSecond", spbSecond); + builder->get_widget("entryKernel", entryKernel); + builder->get_widget("entryIT", entryIT); + builder->get_widget("entryOT", entryOT); + + builder->get_widget("boxInput1", boxInput1); + builder->get_widget("boxInput2", boxInput2); + builder->get_widget("boxOtput1", boxOtput1); + builder->get_widget("boxOtput2", boxOtput2); + builder->get_widget("boxKernel", boxKernel); + builder->get_widget("boxKernel1", boxKernel1); + builder->get_widget("boxKernel2", boxKernel2); + builder->get_widget("aboutWindows", aboutWindows); + builder->get_widget("boxColor", boxColor); + + + + + +} + +void MainWindow::localization(){ + lblInfoHead->set_text(gettext("Configuring system boot parameters")); + lblHeaderName->set_text(gettext("UBConfig - Loading")); + aboutWindows->set_comments(gettext("Setting bootloader")); + aboutWindows->set_website_label(gettext("Project Home Page")); + lblInfoCommand->set_text(gettext("Command line parameters:")); + lblInfoCommand1->set_text(gettext("Command line parameters:")); + lblInfoCommand2->set_text(gettext("Command line parameters:")); + lblInfoDefaultDonw->set_text(gettext("Default download")); + lblInfoSeconds->set_text(gettext("Seconds")); + lblDownloadMenu->set_text(gettext("Download menu")); + lblInfoInputTerminal->set_text(gettext("Input terminal")); + lblInfoOutputTerminal->set_text(gettext("Output terminal")); + + chbLoadVariantSelectionTimer->set_label(gettext("Load variant selection timer")); + chbLastSelectionWillBecome->set_label(gettext("The last selection will become the default boot choice")); + chbQuiet->set_label(gettext("quiet (Downloading without text messages)")); + chbSplash->set_label(gettext("splash (Show welcome window)")); + chbPlymouth->set_label(gettext("no plymouth (Disable Plymouth)")); + chbAcpi->set_label(gettext("acpi=off (Disable ACPI)")); + chbNоapic->set_label(gettext("nоapic (Disable APIC)")); + chbNolapic->set_label(gettext("nolapic (Disable local APIC)")); + chbSingle->set_label(gettext("single (Single User Mode)")); + chbHomodeset->set_label(gettext("nomodeset (Disable kernel selection and loading of video drivers)")); + chbI915Enable->set_label(gettext("i915.enable_dc=0 (Disable GPU power management)")); + chbAhci->set_label(gettext("ahci.mobile_jpm_policy=1 (Maximum performance, power management)")); + chbSndIntel->set_label(gettext("snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel)")); + chbintelMax1->set_label(gettext("intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state)")); + chbintelMax4->set_label(gettext("intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage)")); + chbconsoleIT->set_label(gettext("console (PC BIOS & console EFI)")); + chbSerialIT->set_label(gettext("serial (Serial terminal)")); + chbofConsoleIT->set_label(gettext("ofconsole (Console Open Firmware)")); + chbAtKeyboard ->set_label(gettext("at_keyboard (Keyboard PC AT (Coreboot))")); + chbUsbKeyboard->set_label(gettext("usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))")); + chbofConsoleOT->set_label(gettext("ofconsole (Console Open Firmware)")); + chbSerialOT->set_label(gettext("serial (Serial terminal)")); + chbconsoleOT->set_label(gettext("console (PC BIOS & console EFI)")); + chbGfxterm->set_label(gettext("gfxterm (Output in graphical mode)")); + chbVgaText->set_label(gettext("chbVgaText")); + + //set_label(gettext("Command line parameters:")); +} + + + +void MainWindow::event(){ + chbintelMax1->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::fn_event_intelMax1)); + chbintelMax4->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::fn_event_intelMax4)); + signal_configure_event().connect(sigc::mem_fun(*this, &MainWindow::gui_set_orientation), false); +} + +void MainWindow::fn_event_intelMax1(){ + chbintelMax4->set_active(false); +} + +void MainWindow::fn_event_intelMax4(){ + chbintelMax1->set_active(false); +} + +bool MainWindow::gui_set_orientation(GdkEventConfigure* event){ + if (event){} + int w,h; + this->get_monitor_size(); + w = this->get_width(); + h = this->get_height(); + int padding = w*0.11; + float padding_interest = 0.6; + if ((width!=w) || heigh!=h){ + if (((screen_width/2)<=w) && ((screen_hight-padding)<=h)){ + boxOtput1->set_orientation(Gtk::ORIENTATION_VERTICAL); + boxOtput2->set_orientation(Gtk::ORIENTATION_VERTICAL); + boxInput1->set_orientation(Gtk::ORIENTATION_VERTICAL); + boxInput2->set_orientation(Gtk::ORIENTATION_VERTICAL); + boxKernel->set_orientation(Gtk::ORIENTATION_VERTICAL); + boxKernel1->set_orientation(Gtk::ORIENTATION_VERTICAL); + boxKernel2->set_orientation(Gtk::ORIENTATION_VERTICAL); + cout << 1 << endl; + } + else if (((screen_width*padding_interest)<=w) && ((screen_hight*padding_interest)<=h)){ + boxOtput1->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + boxOtput2->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + boxInput1->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + boxInput2->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + boxKernel->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + boxKernel1->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + boxKernel2->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + cout << 2 << endl; + } + else{ + } + + + width=w; + heigh=h; + } + + + return false; +} + +void MainWindow::add_CSS(){ + Glib::RefPtr cssProvider = Gtk::CssProvider::create(); + cssProvider->load_from_path(path_css); + Glib::RefPtr styleContext = Gtk::StyleContext::create(); + Glib::RefPtr screen = Gdk::Screen::get_default();//get default screen + styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application + Glib::RefPtr context_box = boxColor->get_style_context(); + Glib::RefPtr context_lbl_head = lblInfoHead->get_style_context(); + context_box->add_class("cssboxColor1"); + context_lbl_head->add_class("textHead"); +} + + + + + + + + + + diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h new file mode 100644 index 0000000..e3865c5 --- /dev/null +++ b/source/ubl-settings-bootloader.h @@ -0,0 +1,117 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +extern string path_app; +extern string app_name; +extern string path_glade; +extern string path_css; +void me_thread(string cmd); +class CmdArgParser : public Glib::OptionGroup +{ +public: + CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help); + ::Window GetSocketID() const; + +private: + int m_socketID = 0; + +}; + +class MainWindow : public Gtk::ApplicationWindow { +public: + MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); + MainWindow(Glib::RefPtr const& builder); + void get_builder(); + void add_CSS(); + void localization(); + void event(); + void settings(); + void fn_event_intelMax1(); + void fn_event_intelMax4(); + void get_monitor_size(); + bool gui_set_orientation(GdkEventConfigure* configure_event); + public: + Glib::RefPtr builder; + Gtk::SpinButton *spbSecond; + + Gtk::Label *lblInfoSeconds; + Gtk::Label *lblInfoDefaultDonw; + Gtk::Label *lblInfoCommand; + Gtk::Label *lblInfoCommand1; + Gtk::Label *lblInfoCommand2; + Gtk::Label *lblDownloadMenu; + Gtk::Label *lblInfoInputTerminal; + Gtk::Label *lblInfoOutputTerminal; + Gtk::Label *lblHeaderName; + Gtk::Label *lblInfoHead; + + Gtk::CheckButton *chbLoadVariantSelectionTimer; + Gtk::CheckButton *chbofConsoleOT; + Gtk::CheckButton *chbSerialOT; + Gtk::CheckButton *chbconsoleOT; + Gtk::CheckButton *chbGfxterm; + Gtk::CheckButton *chbVgaText; + Gtk::CheckButton *chbconsoleIT; + Gtk::CheckButton *chbSerialIT; + Gtk::CheckButton *chbofConsoleIT; + Gtk::CheckButton *chbAtKeyboard; + Gtk::CheckButton *chbUsbKeyboard; + Gtk::CheckButton *chbintelMax4; + Gtk::CheckButton *chbintelMax1; + Gtk::CheckButton *chbSndIntel; + Gtk::CheckButton *chbAhci; + Gtk::CheckButton *chbI915Enable; + Gtk::CheckButton *chbAcpi; + Gtk::CheckButton *chbPlymouth; + Gtk::CheckButton *chbSplash; + Gtk::CheckButton *chbQuiet; + Gtk::CheckButton *chbNоapic; + Gtk::CheckButton *chbNolapic; + Gtk::CheckButton *chbSingle; + Gtk::CheckButton *chbHomodeset; + Gtk::CheckButton *chbLastSelectionWillBecome; + Gtk::Entry *entryKernel; + Gtk::Entry *entryIT; + Gtk::Entry *entryOT; + Gtk::Box *boxOtput1; + Gtk::Box *boxOtput2; + Gtk::Box *boxInput1; + Gtk::Box *boxInput2; + Gtk::Box *boxKernel; + Gtk::Box *boxKernel1; + Gtk::Box *boxKernel2; + Gtk::Box *boxColor; + Gtk::AboutDialog *aboutWindows; + int width; + int heigh; + int screen_width; + int screen_hight; + + + + + +}; + +class SettingsPlug : public Gtk::Plug{ +public: + Gtk::Window *window; + SettingsPlug(::Window p_socketID, Glib::RefPtr builder); + +private: + Gtk::Widget *plugBox; + Gtk::Widget *parent; +}; + + diff --git a/style.css b/style.css new file mode 100644 index 0000000..41a96a0 --- /dev/null +++ b/style.css @@ -0,0 +1,7 @@ +.cssboxColor1{ + background: url("/usr/share/ublexec/images/bg_top.png") no-repeat; +} +.textHead{ + text-shadow: 1px 1px #ffffff; +} + diff --git a/ubl-settings-bootloader.desktop b/ubl-settings-bootloader.desktop new file mode 100644 index 0000000..89ff86d --- /dev/null +++ b/ubl-settings-bootloader.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=ubl-settings-bootloader +Name[ru]=Загрузчик +GenericName=Загрузчик +GenericName[ru]=Загрузчик +Comment=ubl-settings-bootloader +Comment[ru]=Загрузчик +Type=Application +Exec=ubl-settings-bootloader +Icon=ubl-settings-bootloader +Terminal=false +X-XfcePluggable=true +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-SystemSettings; \ No newline at end of file diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade new file mode 100644 index 0000000..71a945c --- /dev/null +++ b/ubl-settings-bootloader.glade @@ -0,0 +1,1282 @@ + + + + + + False + О Программе + False + True + center + ubl-settings-datetime + dialog + True + ubl-settings-bootloader + 1.0 + Copyright © 2023 - UBSoft Software LLC + Setting the bootloader + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + ublexec + True + gpl-2-0 + + + False + vertical + 2 + + + False + end + + + + + + False + False + 0 + + + + + + + + + + 750 + 550 + False + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ublexec + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + True + in + + + True + False + + + True + False + vertical + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + Load variant selection timer + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Default download + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + False + True + 1 + + + + + The last selection will become the default boot choice + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + vertical + + + True + False + + + splash (Show welcome window) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + quiet (Downloading without text messages) + 362 + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + nоapic (Disable APIC) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + nolapic (Disable local APIC) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + + + no plymouth (Disable Plymouth) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + single (Single User Mode) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + acpi=off (Disable ACPI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + nomodeset (Disable kernel selection and loading of video drivers) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + vertical + + + i915.enable_dc=0 (Disable GPU power management) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + ahci.mobile_jpm_policy=1 (Maximum performance, power management) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 7 + + + + + intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state) + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 8 + + + + + intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage) + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 9 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 10 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + vertical + + + console (PC BIOS & console EFI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + serial (Serial terminal) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + ofconsole (Console Open Firmware) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + vertical + + + at_keyboard (Keyboard PC AT (Coreboot)) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + usb_keyboard (Keyboard USB Keyboard (protocol HID Boot)) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Input terminal + + + + + False + True + 3 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + ofconsole (Console Open Firmware) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + serial (Serial terminal) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + console (PC BIOS & console EFI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + vertical + + + gfxterm (Output in graphical mode) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + vga_text (Text output VGA (Coreboot)) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Output terminal + + + + + False + True + 4 + + + + + + + + + True + True + 0 + + + + + True + True + 1 + + + + + + + True + False + True + + + True + False + UBConfig - Loading + + + + + True + False + 32 + ublexec + + + + + True + False + + + True + True + False + True + True + none + + + + + + False + True + 0 + + + + + end + 1 + + + + + + diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po new file mode 100644 index 0000000..d8fc7db --- /dev/null +++ b/ubl-settings-bootloader_ru.po @@ -0,0 +1,116 @@ +# Russian translations for PACKAGE package. +# Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Automatically generated, 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: ubconfig 1.0\n" +"Report-Msgid-Bugs-To: info@ublinux.ru\n" +"POT-Creation-Date: 2020-02-22 23:22+0600\n" +"PO-Revision-Date: 2020-02-22 23:28+0600\n" +"Last-Translator: ublinux \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Configuring the boot loader settings" +msgstr "Настройка параметров загрузчика системы" + +msgid "UBConfig - Loading" +msgstr "UBConfig - Загрузка" + +msgid "Configuring system boot parameters" +msgstr "Настройка параметров загрузки системы" + +msgid "Setting bootloader" +msgstr "Настройка загрузчика" + +msgid "Project Home Page" +msgstr "Домашняя страница проекта" + +msgid "Download menu" +msgstr "Меню загрузки" + +msgid "Load variant selection timer" +msgstr "Таймер выбора варианта загрузки" + +msgid "Seconds" +msgstr "Секунд" + +msgid "Default download" +msgstr "Загрузка по умолчанию:" + +msgid "The last selection will become the default boot choice" +msgstr "Последний выбор станет выбором загрузки по умолчанию" + +msgid "Parameters passed to the kernel" +msgstr "Параметры, передаваемые ядру" + +msgid "quiet (Downloading without text messages)" +msgstr "quiet (Загрузка без текстовых сообщений)" + +msgid "splash (Show welcome window)" +msgstr "splash (Показать окно приветствия)" + +msgid "no plymouth (Disable Plymouth)" +msgstr "no plymouth (Отключить Plymouth" + +msgid "acpi=off (Disable ACPI)" +msgstr "acpi=off (Отключить ACPI)" + +msgid "apic (Disable APIC)" +msgstr "apic (Отключить APIC)" + +msgid "nolapic (Disable local APIC)" +msgstr "nolapic (Отключить локальный APIC)" + +msgid "single (Single User Mode)" +msgstr "single (Однопользовательский режим)" + +msgid "nomodeset (Disable kernel selection and loading of video drivers)" +msgstr "nomodeset (Отключите выбор ядра и загрузку видеодрайверов)" + +msgid "i915.enable_dc=0 (Disable GPU power management)" +msgstr "i915.enable_dc=0 (Отключите управление питанием GPU)" + +msgid "ahci.mobile_jpm_policy=1 (Maximum performance, power management)" +msgstr "ahci.mobile_jpm_policy=1 (Максимальная производительность, управление питанием)" + +msgid "snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel)" +msgstr "snd-intel-dspcfg.dsp_driver=1 (Принудительный выбор драйвера звукового устройства от Intel)" + +msgid "intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state)" +msgstr "intel_idle max_cstate=1 (Предотвращает переход процессора в состояние глубокого сна)" + +msgid "intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage)" +msgstr "intel_idle.max_cstate=4 (Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage)" + +msgid "Command line parameters:" +msgstr "Параметры командной строки:" + +msgid "serial (Serial terminal)" +msgstr "serial (Последовательный терминал)" + +msgid "at_keyboard (Keyboard PC AT (Coreboot))" +msgstr "at_keyboard (Клавиатура PC AT (Coreboot))" + +msgid "usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))" +msgstr "usb_keyboard (Клавиатура USB Keyboard (protocol HID Boot))" + +msgid "Output terminal" +msgstr "Выходной терминал" + +msgid "console (PC BIOS & console EFI)" +msgstr "Консоль (PC BIOS & console EFI)" + +msgid "ofconsole (Console Open Firmware)" +msgstr "ofconsole (Консоль Open Firmware)" + +msgid "gfxterm (Output in graphical mode)" +msgstr "gfxterm (Вывод в графическом режиме)" + +msgid "vga_text (Text output VGA (Coreboot))" +msgstr "vga_text (Текстовый вывод VGA (Coreboot))" From fa533884f48fb3159b072557cd43544dbd23baae Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 14:32:12 +0600 Subject: [PATCH 002/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B5,=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-bootloader.glade# | 1298 ----------------------------- Makefile | 7 +- VERSION.md | 1 + source/ubl-settings-bootloader.cc | 103 ++- source/ubl-settings-bootloader.h | 149 ++-- ubl-settings-bootloader.glade | 40 +- ubl-settings-bootloader_ru.po | 8 +- 7 files changed, 235 insertions(+), 1371 deletions(-) delete mode 100644 #ubl-settings-bootloader.glade# create mode 100644 VERSION.md diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# deleted file mode 100644 index 41c24f5..0000000 --- a/#ubl-settings-bootloader.glade# +++ /dev/null @@ -1,1298 +0,0 @@ - - - - - - False - О Программе - False - True - center - ubl-settings-datetime - dialog - True - ubl-settings-bootloader - 1.0 - Copyright © 2023 - UBSoft Software LLC - Setting the bootloader - https://ublinux.ru/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - ublexec - True - gpl-2-0 - - - False - vertical - 2 - - - False - end - - - - - - False - False - 0 - - - - - - - - - - 750 - 550 - False - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - ublexec - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Running applications as a user with a -specified priority - - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - True - in - - - True - False - - - True - False - vertical - - - True - True - both - True - - - - - - False - True - 0 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - - - Load variant selection timer - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Default download - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - False - True - 1 - - - - - The last selection will become the default boot choice - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download menu - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - vertical - - - True - False - - - splash (Show welcome window) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - quiet (Downloading without text messages) - 362 - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - nоapic (Disable APIC) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - nolapic (Disable local APIC) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - - - no plymouth (Disable Plymouth) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - single (Single User Mode) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - - acpi=off (Disable ACPI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - nomodeset (Disable kernel selection and loading of video drivers) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 1 - - - - - False - True - 1 - - - - - True - False - vertical - - - i915.enable_dc=0 (Disable GPU power management) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - ahci.mobile_jpm_policy=1 (Maximum performance, power management) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 6 - - - - - snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 7 - - - - - intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state) - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 8 - - - - - intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage) - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 9 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 10 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Parameters passed to the kernel - - - - - False - True - 2 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - vertical - - - console (PC BIOS & console EFI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - serial (Serial terminal) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - ofconsole (Console Open Firmware) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - vertical - - - at_keyboard (Keyboard PC AT (Coreboot)) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - usb_keyboard (Keyboard USB Keyboard (protocol HID Boot)) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 6 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Input terminal - - - - - False - True - 3 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - - - ofconsole (Console Open Firmware) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - serial (Serial terminal) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - console (PC BIOS & console EFI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - vertical - - - gfxterm (Output in graphical mode) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - vga_text (Text output VGA (Coreboot)) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 6 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Output terminal - - - - - False - True - 4 - - - - - - - - - True - True - 0 - - - - - True - True - 1 - - - - - - - True - False - True - - - True - False - UBConfig - Loading - - - - - True - False - 32 - ublexec - - - - - True - False - - - True - True - False - True - True - none - - - - - - False - True - 0 - - - - - end - 1 - - - - - - diff --git a/Makefile b/Makefile index 1341c01..ca08828 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,13 @@ all: init build init: @echo "Initialize ..."; \ + version="$$(cat VERSION.md)"; \ + version=$${version:8}; \ + search="s/string version_application.*$&"; \ + replace="string version_application = \"$${version}\";"; \ + sed -i -e "$$search/$$replace/gi" source/ubl-settings-bootloader.h; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" - + depend: @echo "Check depends ..."; \ if [ ! -f /bin/${DEPENDS} ]; then \ diff --git a/VERSION.md b/VERSION.md new file mode 100644 index 0000000..12ebd01 --- /dev/null +++ b/VERSION.md @@ -0,0 +1 @@ +VERSION 1.0 diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 7179203..60aa7d8 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -41,6 +41,7 @@ MainWindow::MainWindow(Glib::RefPtr const& builder) { } void MainWindow::settings(){ + map_cmd_error[""] = ""; this->get_builder(); this->localization(); this->event(); @@ -106,9 +107,13 @@ void MainWindow::get_builder(){ builder->get_widget("boxKernel", boxKernel); builder->get_widget("boxKernel1", boxKernel1); builder->get_widget("boxKernel2", boxKernel2); - builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("boxColor", boxColor); + builder->get_widget("aboutWindows", aboutWindows); + builder->get_widget("btnSynopsis", btnSynopsis); + builder->get_widget("btnAbout", btnAbout); + + @@ -116,6 +121,15 @@ void MainWindow::get_builder(){ } void MainWindow::localization(){ + time_t now = time(0); + tm *ltm = localtime(&now); + unsigned int year = 1900+ ltm->tm_year; + string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); + aboutWindows->set_copyright(str_authors); + aboutWindows->set_comments(gettext("Date and Time")); + aboutWindows->set_website(gettext("https://wiki.ublinux.com")); + aboutWindows->set_version(gettext(version_application.c_str())); + aboutWindows->set_website_label(gettext("Project Home Page")); lblInfoHead->set_text(gettext("Configuring system boot parameters")); lblHeaderName->set_text(gettext("UBConfig - Loading")); aboutWindows->set_comments(gettext("Setting bootloader")); @@ -154,6 +168,8 @@ void MainWindow::localization(){ chbconsoleOT->set_label(gettext("console (PC BIOS & console EFI)")); chbGfxterm->set_label(gettext("gfxterm (Output in graphical mode)")); chbVgaText->set_label(gettext("chbVgaText")); + btnSynopsis->set_label(gettext("Help")); + btnAbout->set_label(gettext("About")); //set_label(gettext("Command line parameters:")); } @@ -164,6 +180,91 @@ void MainWindow::event(){ chbintelMax1->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::fn_event_intelMax1)); chbintelMax4->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::fn_event_intelMax4)); signal_configure_event().connect(sigc::mem_fun(*this, &MainWindow::gui_set_orientation), false); + btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); + btnAbout->signal_activate().connect([&]() {aboutWindows->show();}); +} + +void MainWindow::synopsis_show() { + wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home", "&"); +} + +void MainWindow::wrapper_system(string cmd, string thread_str = "") { + string cmd_new = cmd + " " + thread_str; + int response_cmd = system(cmd_new.c_str()); + if (response_cmd != 0) { + index_error += 1; + //this->log_mess_error(cmd); + } +} + +struct MainWindow::Result MainWindow::wrapper_call(string cmd) { + struct Result obj_result; + string response = this->call(cmd); + if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) { + if (response.find("=") != std::string::npos) { + if (response.find("\n") != std::string::npos) { + response = response.substr(response.find("=")+1,response.length()); + response = response.substr(0,response.find("\n")); + obj_result.response = response; + obj_result.error = 0; + } + else { + obj_result.response = response; + obj_result.error = 1; + index_error += 1; + this->log_mess_error(cmd); + } + } + else { + obj_result.response = response; + obj_result.error = 2; + index_error += 1; + str_cmd_error = cmd; + this->log_mess_error(cmd); + } + } + else { + obj_result.response = response; + obj_result.error = 3; + index_error += 1; + str_cmd_error = cmd; + this->log_mess_error(cmd); + } + return obj_result; +} + +string MainWindow::call(string cmd) { + FILE *fp; + int status; + char path[PATH_MAX] = {0}; + fp = popen(cmd.c_str(), "r"); + if (fp == NULL) { + exit(1); + } + while (fgets(path, PATH_MAX, fp) != NULL) { + break; + } + status = pclose(fp); + if (status == -1) { + exit(1); + } + return path; +} + +void MainWindow::log_mess_error(string &cmd){ + string key = ""; + if (map_cmd_error.find(cmd) != map_cmd_error.end()){ + str_cmd_error = map_cmd_error[cmd]; + } + else { + for ( const auto &map_iter: map_cmd_error ) { + key = map_iter.first; + if (cmd.find(key) != std::string::npos){ + str_cmd_error = map_iter.second; + break; + } + } + } } void MainWindow::fn_event_intelMax1(){ diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index e3865c5..6a23357 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -29,74 +29,91 @@ private: }; class MainWindow : public Gtk::ApplicationWindow { -public: - MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); - MainWindow(Glib::RefPtr const& builder); - void get_builder(); - void add_CSS(); - void localization(); - void event(); - void settings(); - void fn_event_intelMax1(); - void fn_event_intelMax4(); - void get_monitor_size(); - bool gui_set_orientation(GdkEventConfigure* configure_event); - public: - Glib::RefPtr builder; - Gtk::SpinButton *spbSecond; + public: + Glib::RefPtr builder; + Gtk::SpinButton *spbSecond; + Gtk::Label *lblInfoSeconds; + Gtk::Label *lblInfoDefaultDonw; + Gtk::Label *lblInfoCommand; + Gtk::Label *lblInfoCommand1; + Gtk::Label *lblInfoCommand2; + Gtk::Label *lblDownloadMenu; + Gtk::Label *lblInfoInputTerminal; + Gtk::Label *lblInfoOutputTerminal; + Gtk::Label *lblHeaderName; + Gtk::Label *lblInfoHead; + Gtk::CheckButton *chbLoadVariantSelectionTimer; + Gtk::CheckButton *chbofConsoleOT; + Gtk::CheckButton *chbSerialOT; + Gtk::CheckButton *chbconsoleOT; + Gtk::CheckButton *chbGfxterm; + Gtk::CheckButton *chbVgaText; + Gtk::CheckButton *chbconsoleIT; + Gtk::CheckButton *chbSerialIT; + Gtk::CheckButton *chbofConsoleIT; + Gtk::CheckButton *chbAtKeyboard; + Gtk::CheckButton *chbUsbKeyboard; + Gtk::CheckButton *chbintelMax4; + Gtk::CheckButton *chbintelMax1; + Gtk::CheckButton *chbSndIntel; + Gtk::CheckButton *chbAhci; + Gtk::CheckButton *chbI915Enable; + Gtk::CheckButton *chbAcpi; + Gtk::CheckButton *chbPlymouth; + Gtk::CheckButton *chbSplash; + Gtk::CheckButton *chbQuiet; + Gtk::CheckButton *chbNоapic; + Gtk::CheckButton *chbNolapic; + Gtk::CheckButton *chbSingle; + Gtk::CheckButton *chbHomodeset; + Gtk::CheckButton *chbLastSelectionWillBecome; + Gtk::Entry *entryKernel; + Gtk::Entry *entryIT; + Gtk::Entry *entryOT; + Gtk::Box *boxOtput1; + Gtk::Box *boxOtput2; + Gtk::Box *boxInput1; + Gtk::Box *boxInput2; + Gtk::Box *boxKernel; + Gtk::Box *boxKernel1; + Gtk::Box *boxKernel2; + Gtk::Box *boxColor; + Gtk::AboutDialog *aboutWindows; + Gtk::MenuItem *btnAbout; + Gtk::MenuItem *btnSynopsis; - Gtk::Label *lblInfoSeconds; - Gtk::Label *lblInfoDefaultDonw; - Gtk::Label *lblInfoCommand; - Gtk::Label *lblInfoCommand1; - Gtk::Label *lblInfoCommand2; - Gtk::Label *lblDownloadMenu; - Gtk::Label *lblInfoInputTerminal; - Gtk::Label *lblInfoOutputTerminal; - Gtk::Label *lblHeaderName; - Gtk::Label *lblInfoHead; + private: + int width; + int heigh; + int screen_width; + int screen_hight; + string version_application = "1.0"; + int index_error = 0; + string str_cmd_error = ""; + template + struct Result{ + Type response; + int error; + }; + std::map map_cmd_error; - Gtk::CheckButton *chbLoadVariantSelectionTimer; - Gtk::CheckButton *chbofConsoleOT; - Gtk::CheckButton *chbSerialOT; - Gtk::CheckButton *chbconsoleOT; - Gtk::CheckButton *chbGfxterm; - Gtk::CheckButton *chbVgaText; - Gtk::CheckButton *chbconsoleIT; - Gtk::CheckButton *chbSerialIT; - Gtk::CheckButton *chbofConsoleIT; - Gtk::CheckButton *chbAtKeyboard; - Gtk::CheckButton *chbUsbKeyboard; - Gtk::CheckButton *chbintelMax4; - Gtk::CheckButton *chbintelMax1; - Gtk::CheckButton *chbSndIntel; - Gtk::CheckButton *chbAhci; - Gtk::CheckButton *chbI915Enable; - Gtk::CheckButton *chbAcpi; - Gtk::CheckButton *chbPlymouth; - Gtk::CheckButton *chbSplash; - Gtk::CheckButton *chbQuiet; - Gtk::CheckButton *chbNоapic; - Gtk::CheckButton *chbNolapic; - Gtk::CheckButton *chbSingle; - Gtk::CheckButton *chbHomodeset; - Gtk::CheckButton *chbLastSelectionWillBecome; - Gtk::Entry *entryKernel; - Gtk::Entry *entryIT; - Gtk::Entry *entryOT; - Gtk::Box *boxOtput1; - Gtk::Box *boxOtput2; - Gtk::Box *boxInput1; - Gtk::Box *boxInput2; - Gtk::Box *boxKernel; - Gtk::Box *boxKernel1; - Gtk::Box *boxKernel2; - Gtk::Box *boxColor; - Gtk::AboutDialog *aboutWindows; - int width; - int heigh; - int screen_width; - int screen_hight; + public: + MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); + MainWindow(Glib::RefPtr const& builder); + void get_builder(); + void add_CSS(); + void localization(); + void event(); + void settings(); + void fn_event_intelMax1(); + void fn_event_intelMax4(); + void get_monitor_size(); + bool gui_set_orientation(GdkEventConfigure* configure_event); + void synopsis_show(); + string call(string cmd); + void wrapper_system(string cmd, string thread_str); + struct Result wrapper_call(string cmd); + void log_mess_error(string &cmd); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 71a945c..d1d7a08 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -11,10 +11,10 @@ ubl-settings-datetime dialog True - ubl-settings-bootloader - 1.0 + ubl-settings-datetime + 1.2 Copyright © 2023 - UBSoft Software LLC - Setting the bootloader + ubl-settings-bootloader https://ublinux.ru/ Project Home Page Это приложение распространяется без каких-либо гарантий. @@ -49,6 +49,33 @@

+ + True + False + False + False + 4 + + + True + False + Help + + + + + + True + False + About + + + + 750 550 @@ -1259,9 +1286,14 @@ specified priority False True True + menu1 none - + + True + False + open-menu-symbolic + diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index d8fc7db..db88110 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: ubconfig 1.0\n" +"Project-Id-Version: ubl-settings-bootloader 1.0\n" "Report-Msgid-Bugs-To: info@ublinux.ru\n" "POT-Creation-Date: 2020-02-22 23:22+0600\n" "PO-Revision-Date: 2020-02-22 23:28+0600\n" @@ -114,3 +114,9 @@ msgstr "gfxterm (Вывод в графическом режиме)" msgid "vga_text (Text output VGA (Coreboot))" msgstr "vga_text (Текстовый вывод VGA (Coreboot))" + +msgid "About" +msgstr "О программе" + +msgid "Help" +msgstr "Справка" From 4f0a06262299728fc6ec359b872085b5151ecfed Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 15:08:44 +0600 Subject: [PATCH 003/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8=D1=82=D1=8C?= =?UTF-8?q?,=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B8=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 49 +++++-- source/ubl-settings-bootloader.h | 13 ++ style.css | 84 +++++++++++- ubl-settings-bootloader.glade | 207 +++++++++++++++++++++++++++++- ubl-settings-bootloader_ru.po | 21 +++ 5 files changed, 358 insertions(+), 16 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 60aa7d8..cde08ff 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -112,12 +112,14 @@ void MainWindow::get_builder(){ builder->get_widget("btnSynopsis", btnSynopsis); builder->get_widget("btnAbout", btnAbout); - - - - - - + builder->get_widget("btnDonwlodLocal", btnDonwlodLocal); + builder->get_widget("btnDonwlolGlob", btnDonwlolGlob); + builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob); + builder->get_widget("btnSaveLocal", btnSaveLocal); + builder->get_widget("btnSaveGlob", btnSaveGlob); + builder->get_widget("btnSettings", btnSettings); + builder->get_widget("btnDownload", btnDownload); + builder->get_widget("btnSave", btnSave); } void MainWindow::localization(){ @@ -170,8 +172,13 @@ void MainWindow::localization(){ chbVgaText->set_label(gettext("chbVgaText")); btnSynopsis->set_label(gettext("Help")); btnAbout->set_label(gettext("About")); - - //set_label(gettext("Command line parameters:")); + btnSaveLocalGlob->set_label(gettext("Save to global and local configuration")); + btnSaveLocal->set_label(gettext("Save local configuration")); + btnSaveGlob->set_label(gettext("Save global configuration")); + btnDonwlolGlob->set_label(gettext("Load global configuration")); + btnDonwlodLocal->set_label(gettext("Load local configuration")); + btnSave->set_label(gettext("Save")); + btnDownload->set_label(gettext("Donwload")); } @@ -182,8 +189,34 @@ void MainWindow::event(){ signal_configure_event().connect(sigc::mem_fun(*this, &MainWindow::gui_set_orientation), false); btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); btnAbout->signal_activate().connect([&]() {aboutWindows->show();}); + btnDonwlodLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); + btnDonwlolGlob->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); + btnSaveLocalGlob->signal_activate().connect([&]() {save_global_local_cfg();}); + btnSaveLocal->signal_activate().connect([&]() {save_local_cfg();}); + btnSaveGlob->signal_activate().connect([&]() {save_global_cfg();}); +} + +void MainWindow::save_global_local_cfg(){ + } +void MainWindow::save_local_cfg(){ + +} + +void MainWindow::save_global_cfg(){ + +} + +void MainWindow::download_local_cfg(){ + +} + +void MainWindow::download_globl_cfg(){ + +} + + void MainWindow::synopsis_show() { wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home", "&"); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 6a23357..fa8e678 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -81,6 +81,14 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::AboutDialog *aboutWindows; Gtk::MenuItem *btnAbout; Gtk::MenuItem *btnSynopsis; + Gtk::MenuItem *btnSaveLocalGlob; + Gtk::MenuItem *btnSaveLocal; + Gtk::MenuItem *btnSaveGlob; + Gtk::MenuItem *btnDonwlolGlob; + Gtk::MenuItem *btnDonwlodLocal; + Gtk::Button *btnDownload; + Gtk::Button *btnSave; + Gtk::Button *btnSettings; private: int width; @@ -114,6 +122,11 @@ class MainWindow : public Gtk::ApplicationWindow { void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); void log_mess_error(string &cmd); + void save_global_local_cfg(); + void save_local_cfg(); + void save_global_cfg(); + void download_local_cfg(); + void download_globl_cfg(); diff --git a/style.css b/style.css index 41a96a0..3fdf619 100644 --- a/style.css +++ b/style.css @@ -1,7 +1,89 @@ +.boxInfoMessError{ + background-color: #ea9999; +} .cssboxColor1{ - background: url("/usr/share/ublexec/images/bg_top.png") no-repeat; + background: url("/usr/share/ubl-settings-datetime/images/bg_top.png") no-repeat; +} +.boxInfoMessOK{ + background-color: #f3f0ac; } .textHead{ text-shadow: 1px 1px #ffffff; } +.textHeaderBar{ + font-weight: bold; +} +.menuitemtop *{ + margin:2px 2px 0 2px; + padding: 5px 10px 3px 5px; +} +.menuitemmiddle *{ + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; +} +.menuitembottom *{ + margin:0 2px 2px 2px; + padding: 3px 10px 5px 5px; +} +.menuitemtop:hover { + border-radius:3px; + background:@theme_bg_color; +} +.menuitemmiddle:hover { + border-radius:3px; + background:@theme_bg_color; +} +.menuitembottom:hover { + border-radius:3px; + background:@theme_bg_color; + +} +.menuitemtop:hover* { + border-radius:3px; + margin:2px 2px 0 2px; + padding: 5px 10px 3px 5px; + background:@theme_selected_bg_color; + border-color:transparent; +} +.menuitemmiddle:hover* { + border-radius:3px; + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; + background:@theme_selected_bg_color; + border-color:transparent; +} +.menuitembottom:hover* { + border-radius:3px; + margin:0 2px 2px 2px; + padding: 3px 10px 5px 5px; + background:@theme_selected_bg_color; + border-color:transparent; +} +.menuitembottom{ + margin-top:0px; +} +.menuitemmiddle{ + margin-top:0px; + margin-bottom:0px; +} + +.menuitemtop{ + margin-bottom:0px; +} + +.bkimHeadBar{ + opacity:1.0; +} +.bkimButton{ + background-color: transparent; + opacity:1.0; +} +.bkimButtonPlug{ + background-color: transparent; + color: rgb(0, 0, 0); + opacity:1.0; +} +.noborder{ + border:none; +} \ No newline at end of file diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index d1d7a08..0881640 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -49,6 +49,33 @@ + + True + False + False + False + 4 + + + True + False + Load global configuration + + + + + + True + False + Load local configuration + + + + True False @@ -76,6 +103,43 @@ + + True + False + False + False + 4 + + + True + False + Save to global and local configuration + + + + + + True + False + Save global configuration + + + + + + True + False + Save local configuration + + + + 750 550 @@ -1264,7 +1328,7 @@ specified priority True False - UBConfig - Loading + ubl-settings-bootloader @@ -1280,19 +1344,146 @@ specified priority True False - + + True + False + + + True + True + False + True + True + menu2 + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Save + + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + True + True + menu1 + none + + + True + False + open-menu-symbolic + + + + + False + True + 1 + + + + + + False + True + 0 + + + + + end + 1 + + + + + True + False + + True True False True True - menu1 + menu none - + True False - open-menu-symbolic + + + True + False + 5 + 5 + 5 + 5 + Download + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + @@ -1302,10 +1493,12 @@ specified priority 0 + - end - 1 + 2 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index db88110..1fb87d6 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -120,3 +120,24 @@ msgstr "О программе" msgid "Help" msgstr "Справка" + +msgid "Save to global and local configuration" +msgstr "Сохранить глобальную и локальную конфигурацию" + +msgid "Save global configuration" +msgstr "Сохранить глобальную конфигурацию" + +msgid "Save local configuration" +msgstr "Сохранить локальную конфигурацию" + +msgid "Load global configuration" +msgstr "Загрузить глобальную конфигурацию" + +msgid "Load local configuration" +msgstr "Загрузить локальную конфигурацию" + +msgid "Save" +msgstr "Сохранить" + +msgid "Download" +msgstr "Загрузить" From 066af6b9d456b7d636e51e5619af6dab85d07a53 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 15:27:00 +0600 Subject: [PATCH 004/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20plug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 2 + source/ubl-settings-bootloader.cc | 24 ++++++++-- source/ubl-settings-bootloader.h | 6 ++- source/ubl-util-standard.c | 76 +++++++++++++++++++++++++++++++ source/ubl-util-standard.h | 20 ++++++++ ubl-settings-bootloader.desktop | 3 +- 6 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 source/ubl-util-standard.c create mode 100644 source/ubl-util-standard.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 8f211c8..f194fa9 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -15,6 +15,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection -g") set(SOURCE_FILES + ubl-util-standard.h + ubl-util-standard.c main.cc ubl-settings-bootloader.cc ubl-settings-bootloader.h) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index cde08ff..271baed 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -6,14 +6,29 @@ string path_app= "/usr/bin/"; string path_glade= "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade"; string path_css = "/usr/share/ubl-settings-bootloader/css/style.css"; string app_name = "ubl-settings-bootloader"; +int socket_ext_id_I = 0; +int socket_trd_id_I = 0; + CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) : Glib::OptionGroup{p_name, p_description, p_help} { Glib::OptionEntry socketIDArg; socketIDArg.set_long_name("socket-id"); - socketIDArg.set_short_name('s'); socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); socketIDArg.set_description("Settings manager socket"); + + Glib::OptionEntry socketExtId; + socketExtId.set_long_name("socket-ext-id"); + socketExtId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); + socketExtId.set_description("Settings manager secondary socket"); + + Glib::OptionEntry socketTrdId; + socketTrdId.set_long_name("socket-trd-id"); + socketTrdId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); + socketTrdId.set_description("Settings manager secondary socket"); + add_entry(socketIDArg, m_socketID); + add_entry(socketExtId, socket_ext_id_I); + add_entry(socketTrdId, socket_trd_id_I); } ::Window CmdArgParser::GetSocketID() const{ return m_socketID; @@ -44,8 +59,9 @@ void MainWindow::settings(){ map_cmd_error[""] = ""; this->get_builder(); this->localization(); - this->event(); + ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); this->add_CSS(); + this->event(); } void MainWindow::get_monitor_size(){ @@ -120,6 +136,8 @@ void MainWindow::get_builder(){ builder->get_widget("btnSettings", btnSettings); builder->get_widget("btnDownload", btnDownload); builder->get_widget("btnSave", btnSave); + builder->get_widget("boxButton", boxButton); + builder->get_widget("boxSave", boxSave); } void MainWindow::localization(){ @@ -128,7 +146,7 @@ void MainWindow::localization(){ unsigned int year = 1900+ ltm->tm_year; string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); aboutWindows->set_copyright(str_authors); - aboutWindows->set_comments(gettext("Date and Time")); + aboutWindows->set_comments(gettext("ubl-settings-bootloader")); aboutWindows->set_website(gettext("https://wiki.ublinux.com")); aboutWindows->set_version(gettext(version_application.c_str())); aboutWindows->set_website_label(gettext("Project Home Page")); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index fa8e678..4c7bc8a 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -9,13 +9,15 @@ #include #include #include - +#include "ubl-util-standard.c" using namespace std; extern string path_app; extern string app_name; extern string path_glade; extern string path_css; +extern int socket_ext_id_I; +extern int socket_trd_id_I; void me_thread(string cmd); class CmdArgParser : public Glib::OptionGroup { @@ -89,6 +91,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Button *btnDownload; Gtk::Button *btnSave; Gtk::Button *btnSettings; + Gtk::Widget *boxButton; + Gtk::Widget *boxSave; private: int width; diff --git a/source/ubl-util-standard.c b/source/ubl-util-standard.c new file mode 100644 index 0000000..f922043 --- /dev/null +++ b/source/ubl-util-standard.c @@ -0,0 +1,76 @@ +#include "ubl-util-standard.h" +#ifndef __cplusplus +#ifndef UBL_GET_STANDARD_UI +#define UBL_GET_STANDARD_UI + + +inline returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id){ + returnstruct *ret=(returnstruct*)malloc(sizeof(returnstruct*)); + if (left_plug_id>0&&LeftWidget){ + GtkWidget *plug=gtk_plug_new(left_plug_id); + GtkWidget *toplug=LeftWidget; + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + ret->plugLeft=plug; + } + if (right_plug_id>0&&RightWidget){ + GtkWidget *plug=gtk_plug_new(right_plug_id); + GtkWidget *toplug=RightWidget; + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + ret->plugRight=plug; + } + return ret; +} + +#endif + +#else + + +inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id){ + if (left_plug_id>0&&LeftWidget){ + GtkWidget *plug=gtk_plug_new(left_plug_id); + GtkWidget *toplug=GTK_WIDGET(LeftWidget->gobj()); + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkimButtonPlug"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"noborder"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar"); + } + if (right_plug_id>0&&RightWidget){ + GtkWidget *plug=gtk_plug_new(right_plug_id); + GtkWidget *toplug=GTK_WIDGET(RightWidget->gobj()); + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkimButtonPlug"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"noborder"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar"); + + } +} +#endif \ No newline at end of file diff --git a/source/ubl-util-standard.h b/source/ubl-util-standard.h new file mode 100644 index 0000000..3209625 --- /dev/null +++ b/source/ubl-util-standard.h @@ -0,0 +1,20 @@ +#ifndef __cplusplus +#include +#include + +typedef struct { + GtkWidget *plugLeft; + GtkWidget *plugRight; + + +} returnstruct; +static returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id); +#else +#include +#include +#include +#include + + +static void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id); +#endif \ No newline at end of file diff --git a/ubl-settings-bootloader.desktop b/ubl-settings-bootloader.desktop index 89ff86d..4499946 100644 --- a/ubl-settings-bootloader.desktop +++ b/ubl-settings-bootloader.desktop @@ -11,4 +11,5 @@ Exec=ubl-settings-bootloader Icon=ubl-settings-bootloader Terminal=false X-XfcePluggable=true -Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-SystemSettings; \ No newline at end of file +X-UBLPluggable=true +Categories=XFCE;GTK;Settings;DesktopSettings;X-UBL-SettingsManager;X-UBL-SystemSettings; \ No newline at end of file From 53a33bb312fb74e397472a572d24be75d62c60d6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 15:30:30 +0600 Subject: [PATCH 005/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 + checked.svg | 327 +++++++++++++++++++++++++++++++ source/ubl-settings-bootloader.h | 5 - warning.svg | 55 ++++++ 4 files changed, 386 insertions(+), 5 deletions(-) create mode 100644 checked.svg create mode 100644 warning.svg diff --git a/Makefile b/Makefile index ca08828..444e4b2 100644 --- a/Makefile +++ b/Makefile @@ -115,6 +115,10 @@ install: check uninstall @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png + @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" checked.svg + @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" warning.svg + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "checked.svg" + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "warning.svg" @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications diff --git a/checked.svg b/checked.svg new file mode 100644 index 0000000..e3cab42 --- /dev/null +++ b/checked.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 4c7bc8a..d7f2b50 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -131,11 +131,6 @@ class MainWindow : public Gtk::ApplicationWindow { void save_global_cfg(); void download_local_cfg(); void download_globl_cfg(); - - - - - }; class SettingsPlug : public Gtk::Plug{ diff --git a/warning.svg b/warning.svg new file mode 100644 index 0000000..9a90dba --- /dev/null +++ b/warning.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + From c3bb3a5210b39cae8beeac6d7ecf75804b5ef105 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 15:32:52 +0600 Subject: [PATCH 006/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F=20=D0=B2?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=20.po?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader_ru.po | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 1fb87d6..ab3e5cd 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -141,3 +141,28 @@ msgstr "Сохранить" msgid "Download" msgstr "Загрузить" + +msgid "Local configuration reading error" +msgstr "Ошибка чтения локальной конфигурации" + +msgid "Local configuration write error" +msgstr "Ошибка записи локальной конфигурации" + +msgid "Global configuration read error" +msgstr "Ошибка чтения глобальной конфигурации" + +msgid "Global configuration write error" +msgstr "Ошибка записи глобальной конфигурации" + +msgid "Local configuration downloaded successfully" +msgstr "Успешно загружена локальная конфигурация" + +msgid "Global configuration downloaded successfully" +msgstr "Успешно загружена глобальная конфигурация" + +msgid "Global configuration successfully written" +msgstr "Успешно записана глобальная конфигурация" + +msgid "Local configuration successfully written" +msgstr "Успешно записана локальная конфигурация" + From e184af14feb97536e87dcf6a949a461d0de36bff Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 15:38:08 +0600 Subject: [PATCH 007/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D0=BE=D0=B5=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=20=D0=B2=20gui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.h | 1 + ubl-settings-bootloader.glade | 1621 +++++++++++++++--------------- 2 files changed, 831 insertions(+), 791 deletions(-) diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index d7f2b50..c107e1e 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -93,6 +93,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Button *btnSettings; Gtk::Widget *boxButton; Gtk::Widget *boxSave; + private: int width; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 0881640..5ec9804 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -145,10 +145,61 @@ 550 False - + True False vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + checked + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + True @@ -201,41 +252,214 @@ specified priority False True - 0 + 1 - + True - False - vertical + True + in - + True - True - in + False - + True False + vertical - + True False - vertical + 0.019999999552965164 + in - + True False - 0.019999999552965164 - in + 12 - + True False - 12 + vertical + + + True + False + + + Load variant selection timer + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + + + + False + True + 0 + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Default download + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + False + True + 1 + + + + + The last selection will become the default boot choice + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + True False vertical @@ -244,11 +468,13 @@ specified priority True False - - Load variant selection timer + + splash (Show welcome window) + 362 True True False + start 5 5 5 @@ -264,15 +490,19 @@ specified priority - + + quiet (Downloading without text messages) + 362 True True + False 5 5 5 5 6 6 + True False @@ -280,46 +510,98 @@ specified priority 1 + + + False + True + 0 + + + + + True + False + + + nоapic (Disable APIC) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + - + + nolapic (Disable local APIC) True - False + True + False + start 5 5 5 5 6 6 - Seconds + True False True - 2 + 1 False True - 0 + 1 + + + False + True + 0 + + + + + True + False + vertical True False - + + no plymouth (Disable Plymouth) + 362 True - False + True + False + start 5 5 5 5 6 6 - Default download + True False @@ -328,361 +610,52 @@ specified priority - + True False + + + False + True + 1 + + + + + single (Single User Mode) + 362 + True + True + False + start 5 5 5 5 6 6 + True False True - 1 + 2 False True - 1 + 0 - - The last selection will become the default boot choice - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download menu - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - vertical - - - True - False - - - splash (Show welcome window) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - quiet (Downloading without text messages) - 362 - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - nоapic (Disable APIC) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - nolapic (Disable local APIC) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - - - no plymouth (Disable Plymouth) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - single (Single User Mode) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - - acpi=off (Disable ACPI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - nomodeset (Disable kernel selection and loading of video drivers) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 1 - - - - - False - True - 1 - - - - + True False - vertical - - i915.enable_dc=0 (Disable GPU power management) + + acpi=off (Disable ACPI) 362 True True @@ -703,8 +676,19 @@ specified priority - - ahci.mobile_jpm_policy=1 (Maximum performance, power management) + + True + False + + + False + True + 1 + + + + + nomodeset (Disable kernel selection and loading of video drivers) True True False @@ -720,19 +704,32 @@ specified priority False True - 1 + 2 False True - 6 + 1 + + + False + True + 1 + + + + + True + False + vertical - - snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel) + + i915.enable_dc=0 (Disable GPU power management) + 362 True True False @@ -748,15 +745,16 @@ specified priority False True - 7 + 0 - - intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state) + + ahci.mobile_jpm_policy=1 (Maximum performance, power management) True True False + start 5 5 5 @@ -768,186 +766,183 @@ specified priority False True - 8 + 1 + + + False + True + 6 + + + + + snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 7 + + + + + intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state) + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 8 + + + + + intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage) + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 9 + + + + + True + False - - intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage) + True - True - False + False 5 5 5 5 6 6 - True + Command line parameters: False True - 9 + 0 - + True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - + True + 5 + 5 + 5 + 5 + 6 + 6 - False + True True - 10 + 1 + + False + True + 10 + - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Parameters passed to the kernel - - - - False - True - 2 - + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in - + True False - 0.019999999552965164 - in + 12 - + True False - 12 + vertical - + True False vertical - + + console (PC BIOS & console EFI) + 362 True - False - vertical - - - console (PC BIOS & console EFI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - serial (Serial terminal) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - ofconsole (Console Open Firmware) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True False @@ -956,216 +951,294 @@ specified priority - + + serial (Serial terminal) + 362 True - False - vertical - - - at_keyboard (Keyboard PC AT (Coreboot)) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - usb_keyboard (Keyboard USB Keyboard (protocol HID Boot)) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True False True - 6 + 1 - + + ofconsole (Console Open Firmware) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + vertical + + + at_keyboard (Keyboard PC AT (Coreboot)) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + usb_keyboard (Keyboard USB Keyboard (protocol HID Boot)) + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + False + True + 6 + + + + + True + False + + True False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: False True - 7 + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + False + True + 7 + - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Input terminal - - - - False - True - 3 - + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Input terminal + + + + + False + True + 3 + + + + + True + False + 0.019999999552965164 + in - + True False - 0.019999999552965164 - in + 12 - + True False - 12 + vertical - + + True + False + + + ofconsole (Console Open Firmware) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + serial (Serial terminal) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 1 + + + + + console (PC BIOS & console EFI) + 362 + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 0 + + + + True False vertical - + + gfxterm (Output in graphical mode) + 362 True - False - - - ofconsole (Console Open Firmware) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - serial (Serial terminal) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - console (PC BIOS & console EFI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True False @@ -1174,147 +1247,113 @@ specified priority - + + vga_text (Text output VGA (Coreboot)) + 362 True - False - vertical - - - gfxterm (Output in graphical mode) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - vga_text (Text output VGA (Coreboot)) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True False True - 6 + 1 + + + False + True + 6 + + + + + True + False - + True False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: False True - 7 + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + False + True + 7 + - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Output terminal - - - - False - True - 4 - + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Output terminal + + + False + True + 4 + - - True - True - 0 - True True - 1 + 2 From f3d85a338e35ebe11a8c5230fbc02b730bfac07c Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 15:53:30 +0600 Subject: [PATCH 008/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D1=83=D1=81=D0=B0=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 201 +++++++++++++++++++++--------- source/ubl-settings-bootloader.h | 8 +- ubl-settings-bootloader_ru.po | 6 + 3 files changed, 153 insertions(+), 62 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 271baed..e3c8ca9 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -44,6 +44,15 @@ SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr build show_all_children(); } +int MainWindow::check_root() { + if (geteuid() != 0) { + //lblMessageSudo->set_text(_("The program must be run with \nsuperuser privileges!")); + //mess_sudo->show(); + return 1; + } + return 0; +} + MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) : Gtk::ApplicationWindow(obj), builder{builder} { this->builder = builder; @@ -59,9 +68,20 @@ void MainWindow::settings(){ map_cmd_error[""] = ""; this->get_builder(); this->localization(); - ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); this->add_CSS(); this->event(); + ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); + if (this->check_root() == 0) { + + } + else{ + imgInfo->set("/usr/share/icons/hicolor/scalable/status/warning.svg"); + info_status_app("boxInfoMessError"); + lblWarning->set_text(_("The program must be run with superuser privileges!")); + } + + + } void MainWindow::get_monitor_size(){ @@ -138,65 +158,68 @@ void MainWindow::get_builder(){ builder->get_widget("btnSave", btnSave); builder->get_widget("boxButton", boxButton); builder->get_widget("boxSave", boxSave); + builder->get_widget("boxInfoError", boxInfoError); + builder->get_widget("lblWarning", lblWarning); + builder->get_widget("imgInfo", imgInfo); } void MainWindow::localization(){ time_t now = time(0); tm *ltm = localtime(&now); unsigned int year = 1900+ ltm->tm_year; - string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); + string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); aboutWindows->set_copyright(str_authors); - aboutWindows->set_comments(gettext("ubl-settings-bootloader")); - aboutWindows->set_website(gettext("https://wiki.ublinux.com")); - aboutWindows->set_version(gettext(version_application.c_str())); - aboutWindows->set_website_label(gettext("Project Home Page")); - lblInfoHead->set_text(gettext("Configuring system boot parameters")); - lblHeaderName->set_text(gettext("UBConfig - Loading")); - aboutWindows->set_comments(gettext("Setting bootloader")); - aboutWindows->set_website_label(gettext("Project Home Page")); - lblInfoCommand->set_text(gettext("Command line parameters:")); - lblInfoCommand1->set_text(gettext("Command line parameters:")); - lblInfoCommand2->set_text(gettext("Command line parameters:")); - lblInfoDefaultDonw->set_text(gettext("Default download")); - lblInfoSeconds->set_text(gettext("Seconds")); - lblDownloadMenu->set_text(gettext("Download menu")); - lblInfoInputTerminal->set_text(gettext("Input terminal")); - lblInfoOutputTerminal->set_text(gettext("Output terminal")); + aboutWindows->set_comments(_("ubl-settings-bootloader")); + aboutWindows->set_website(_("https://wiki.ublinux.com")); + aboutWindows->set_version(_(version_application.c_str())); + aboutWindows->set_website_label(_("Project Home Page")); + lblInfoHead->set_text(_("Configuring system boot parameters")); + lblHeaderName->set_text(_("UBConfig - Loading")); + aboutWindows->set_comments(_("Setting bootloader")); + aboutWindows->set_website_label(_("Project Home Page")); + lblInfoCommand->set_text(_("Command line parameters:")); + lblInfoCommand1->set_text(_("Command line parameters:")); + lblInfoCommand2->set_text(_("Command line parameters:")); + lblInfoDefaultDonw->set_text(_("Default download")); + lblInfoSeconds->set_text(_("Seconds")); + lblDownloadMenu->set_text(_("Download menu")); + lblInfoInputTerminal->set_text(_("Input terminal")); + lblInfoOutputTerminal->set_text(_("Output terminal")); - chbLoadVariantSelectionTimer->set_label(gettext("Load variant selection timer")); - chbLastSelectionWillBecome->set_label(gettext("The last selection will become the default boot choice")); - chbQuiet->set_label(gettext("quiet (Downloading without text messages)")); - chbSplash->set_label(gettext("splash (Show welcome window)")); - chbPlymouth->set_label(gettext("no plymouth (Disable Plymouth)")); - chbAcpi->set_label(gettext("acpi=off (Disable ACPI)")); - chbNоapic->set_label(gettext("nоapic (Disable APIC)")); - chbNolapic->set_label(gettext("nolapic (Disable local APIC)")); - chbSingle->set_label(gettext("single (Single User Mode)")); - chbHomodeset->set_label(gettext("nomodeset (Disable kernel selection and loading of video drivers)")); - chbI915Enable->set_label(gettext("i915.enable_dc=0 (Disable GPU power management)")); - chbAhci->set_label(gettext("ahci.mobile_jpm_policy=1 (Maximum performance, power management)")); - chbSndIntel->set_label(gettext("snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel)")); - chbintelMax1->set_label(gettext("intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state)")); - chbintelMax4->set_label(gettext("intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage)")); - chbconsoleIT->set_label(gettext("console (PC BIOS & console EFI)")); - chbSerialIT->set_label(gettext("serial (Serial terminal)")); - chbofConsoleIT->set_label(gettext("ofconsole (Console Open Firmware)")); - chbAtKeyboard ->set_label(gettext("at_keyboard (Keyboard PC AT (Coreboot))")); - chbUsbKeyboard->set_label(gettext("usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))")); - chbofConsoleOT->set_label(gettext("ofconsole (Console Open Firmware)")); - chbSerialOT->set_label(gettext("serial (Serial terminal)")); - chbconsoleOT->set_label(gettext("console (PC BIOS & console EFI)")); - chbGfxterm->set_label(gettext("gfxterm (Output in graphical mode)")); - chbVgaText->set_label(gettext("chbVgaText")); - btnSynopsis->set_label(gettext("Help")); - btnAbout->set_label(gettext("About")); - btnSaveLocalGlob->set_label(gettext("Save to global and local configuration")); - btnSaveLocal->set_label(gettext("Save local configuration")); - btnSaveGlob->set_label(gettext("Save global configuration")); - btnDonwlolGlob->set_label(gettext("Load global configuration")); - btnDonwlodLocal->set_label(gettext("Load local configuration")); - btnSave->set_label(gettext("Save")); - btnDownload->set_label(gettext("Donwload")); + chbLoadVariantSelectionTimer->set_label(_("Load variant selection timer")); + chbLastSelectionWillBecome->set_label(_("The last selection will become the default boot choice")); + chbQuiet->set_label(_("quiet (Downloading without text messages)")); + chbSplash->set_label(_("splash (Show welcome window)")); + chbPlymouth->set_label(_("no plymouth (Disable Plymouth)")); + chbAcpi->set_label(_("acpi=off (Disable ACPI)")); + chbNоapic->set_label(_("nоapic (Disable APIC)")); + chbNolapic->set_label(_("nolapic (Disable local APIC)")); + chbSingle->set_label(_("single (Single User Mode)")); + chbHomodeset->set_label(_("nomodeset (Disable kernel selection and loading of video drivers)")); + chbI915Enable->set_label(_("i915.enable_dc=0 (Disable GPU power management)")); + chbAhci->set_label(_("ahci.mobile_jpm_policy=1 (Maximum performance, power management)")); + chbSndIntel->set_label(_("snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel)")); + chbintelMax1->set_label(_("intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state)")); + chbintelMax4->set_label(_("intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage)")); + chbconsoleIT->set_label(_("console (PC BIOS & console EFI)")); + chbSerialIT->set_label(_("serial (Serial terminal)")); + chbofConsoleIT->set_label(_("ofconsole (Console Open Firmware)")); + chbAtKeyboard ->set_label(_("at_keyboard (Keyboard PC AT (Coreboot))")); + chbUsbKeyboard->set_label(_("usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))")); + chbofConsoleOT->set_label(_("ofconsole (Console Open Firmware)")); + chbSerialOT->set_label(_("serial (Serial terminal)")); + chbconsoleOT->set_label(_("console (PC BIOS & console EFI)")); + chbGfxterm->set_label(_("gfxterm (Output in graphical mode)")); + chbVgaText->set_label(_("chbVgaText")); + btnSynopsis->set_label(_("Help")); + btnAbout->set_label(_("About")); + btnSaveLocalGlob->set_label(_("Save to global and local configuration")); + btnSaveLocal->set_label(_("Save local configuration")); + btnSaveGlob->set_label(_("Save global configuration")); + btnDonwlolGlob->set_label(_("Load global configuration")); + btnDonwlodLocal->set_label(_("Load local configuration")); + btnSave->set_label(_("Save")); + btnDownload->set_label(_("Donwload")); } @@ -215,23 +238,23 @@ void MainWindow::event(){ } void MainWindow::save_global_local_cfg(){ - -} - -void MainWindow::save_local_cfg(){ - + info_warning_error(4); } void MainWindow::save_global_cfg(){ - + info_warning_error(3); } -void MainWindow::download_local_cfg(){ - +void MainWindow::save_local_cfg(){ + info_warning_error(2); } void MainWindow::download_globl_cfg(){ + info_warning_error(1); +} +void MainWindow::download_local_cfg(){ + info_warning_error(0); } @@ -244,7 +267,63 @@ void MainWindow::wrapper_system(string cmd, string thread_str = "") { int response_cmd = system(cmd_new.c_str()); if (response_cmd != 0) { index_error += 1; - //this->log_mess_error(cmd); + this->log_mess_error(cmd); + } +} + +void MainWindow::info_status_app(string stule) { + Glib::RefPtr boxInfo = boxInfoError->get_style_context(); + boxInfo->remove_class("boxInfoMessOK"); + boxInfo->remove_class("boxInfoMessError"); + boxInfo->add_class(stule); +} + +void MainWindow::info_warning_error(int mess) { + if (index_error > 0) { + info_status_app("boxInfoMessError"); + imgInfo->set("/usr/share/icons/hicolor/scalable/status/warning.svg"); + index_error = 0; + string mess_error = ""; + if (mess == 0) { + mess_error = string(_("Local configuration reading error")) + str_cmd_error; + lblWarning->set_text(mess_error); + } + else if (mess == 1) { + mess_error = string(_("Global configuration read error")) + str_cmd_error; + lblWarning->set_text(mess_error); + } + else if (mess == 2) { + mess_error = string(_("Local configuration write error")) + str_cmd_error; + lblWarning->set_text(mess_error); + } + else if (mess == 3) { + mess_error = string(_("Global configuration write error")) + str_cmd_error; + lblWarning->set_text(mess_error); + } + else if (mess == 4) { + mess_error = string(_("Error saved local and global configuration")) + str_cmd_error; + lblWarning->set_text(mess_error); + } + str_cmd_error = ""; + } + else { + info_status_app("boxInfoMessOK"); + imgInfo->set("/usr/share/icons/hicolor/scalable/status/checked.svg"); + if (mess == 0) { + lblWarning->set_text(_("Local configuration downloaded successfully")); + } + else if (mess == 1) { + lblWarning->set_text(_("Global configuration downloaded successfully")); + } + else if (mess == 2) { + lblWarning->set_text(_("Local configuration successfully written")); + } + else if (mess == 3) { + lblWarning->set_text(_("Global configuration successfully written")); + } + else if (mess == 4) { + lblWarning->set_text(_("Successfully saved local and global configuration")); + } } } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index c107e1e..e552999 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -9,6 +9,7 @@ #include #include #include +#include #include "ubl-util-standard.c" using namespace std; @@ -93,7 +94,9 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Button *btnSettings; Gtk::Widget *boxButton; Gtk::Widget *boxSave; - + Gtk::Box *boxInfoError; + Gtk::Label *lblWarning; + Gtk::Image *imgInfo; private: int width; @@ -132,6 +135,9 @@ class MainWindow : public Gtk::ApplicationWindow { void save_global_cfg(); void download_local_cfg(); void download_globl_cfg(); + void info_status_app(string stule); + void info_warning_error(int mess); + int check_root(); }; class SettingsPlug : public Gtk::Plug{ diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index ab3e5cd..d650a7b 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -166,3 +166,9 @@ msgstr "Успешно записана глобальная конфигура msgid "Local configuration successfully written" msgstr "Успешно записана локальная конфигурация" +msgid "The program must be run with \nsuperuser privileges!" +msgstr "Программа должна быть запущена с правами \nсуперпользователя!" + +msgid "The program must be run with superuser privileges!" +msgstr "Программа должна быть запущена с правами суперпользователя!" + From 3fdad1e551b8e0a96cec99922d109340eef211fb Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 16:06:16 +0600 Subject: [PATCH 009/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=20=D0=B2=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9?= =?UTF-8?q?=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.glade | 87 +++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 5ec9804..5e8ade1 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -140,6 +140,93 @@ + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Warning! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + 750 550 From aab87e7a9c43d37b607902c92078a8a7dc623d25 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 16:21:28 +0600 Subject: [PATCH 010/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D0=BE=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 4 +++- source/ubl-settings-bootloader.h | 1 + ubl-settings-bootloader.glade | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index e3c8ca9..b3d315f 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -70,6 +70,7 @@ void MainWindow::settings(){ this->localization(); this->add_CSS(); this->event(); + btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { @@ -161,6 +162,7 @@ void MainWindow::get_builder(){ builder->get_widget("boxInfoError", boxInfoError); builder->get_widget("lblWarning", lblWarning); builder->get_widget("imgInfo", imgInfo); + builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); } void MainWindow::localization(){ @@ -174,7 +176,7 @@ void MainWindow::localization(){ aboutWindows->set_version(_(version_application.c_str())); aboutWindows->set_website_label(_("Project Home Page")); lblInfoHead->set_text(_("Configuring system boot parameters")); - lblHeaderName->set_text(_("UBConfig - Loading")); + lblHeaderName->set_text(_("ubl-settings-bootloader")); aboutWindows->set_comments(_("Setting bootloader")); aboutWindows->set_website_label(_("Project Home Page")); lblInfoCommand->set_text(_("Command line parameters:")); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index e552999..9b3e457 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -97,6 +97,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Box *boxInfoError; Gtk::Label *lblWarning; Gtk::Image *imgInfo; + Gtk::ButtonBox *btnBoxAboutDialog; private: int width; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 5e8ade1..a61efd5 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -30,7 +30,7 @@ vertical 2 - + False end From 8622c86df63af9b7d81dd1ea26e26f61a33f6c69 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 14 Mar 2023 16:28:09 +0600 Subject: [PATCH 011/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20gui,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=83=D1=89=D0=B5=D0=BD=D0=BD=D0=BE=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BE=D1=82=20root?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 6 +++++- source/ubl-settings-bootloader.h | 1 + ubl-settings-bootloader.glade | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index b3d315f..0578099 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -76,6 +76,9 @@ void MainWindow::settings(){ } else{ + boxWidgetAll->set_sensitive(false); + btnDownload->set_sensitive(false); + boxSave->set_sensitive(false); imgInfo->set("/usr/share/icons/hicolor/scalable/status/warning.svg"); info_status_app("boxInfoMessError"); lblWarning->set_text(_("The program must be run with superuser privileges!")); @@ -145,8 +148,9 @@ void MainWindow::get_builder(){ builder->get_widget("boxKernel1", boxKernel1); builder->get_widget("boxKernel2", boxKernel2); builder->get_widget("boxColor", boxColor); + builder->get_widget("boxWidgetAll", boxWidgetAll); + builder->get_widget("aboutWindows", aboutWindows); - builder->get_widget("btnSynopsis", btnSynopsis); builder->get_widget("btnAbout", btnAbout); builder->get_widget("btnDonwlodLocal", btnDonwlodLocal); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 9b3e457..4d05652 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -95,6 +95,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Widget *boxButton; Gtk::Widget *boxSave; Gtk::Box *boxInfoError; + Gtk::Box *boxWidgetAll; Gtk::Label *lblWarning; Gtk::Image *imgInfo; Gtk::ButtonBox *btnBoxAboutDialog; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index a61efd5..e3d5b33 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -352,7 +352,7 @@ specified priority True False - + True False vertical From 595cc81c4443f36889fbada01d61980fe5caf0cf Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 15 Mar 2023 15:37:01 +0600 Subject: [PATCH 012/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 6 +- ...blinux.ubl-settings-bootloader.checked.svg | 0 ...blinux.ubl-settings-bootloader.warning.svg | 0 source/ubl-settings-bootloader.cc | 125 +-- source/ubl-settings-bootloader.h | 49 +- ubl-settings-bootloader.glade | 921 +++--------------- ubl-settings-bootloader_ru.po | 7 +- 7 files changed, 195 insertions(+), 913 deletions(-) rename checked.svg => ru.ublinux.ubl-settings-bootloader.checked.svg (100%) rename warning.svg => ru.ublinux.ubl-settings-bootloader.warning.svg (100%) diff --git a/Makefile b/Makefile index 444e4b2..830114d 100644 --- a/Makefile +++ b/Makefile @@ -115,10 +115,8 @@ install: check uninstall @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png - @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" checked.svg - @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" warning.svg - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "checked.svg" - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "warning.svg" + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "ru.ublinux.ubl-settings-bootloader.checked.svg" + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "ru.ublinux.ubl-settings-bootloader.warning.svg" @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications diff --git a/checked.svg b/ru.ublinux.ubl-settings-bootloader.checked.svg similarity index 100% rename from checked.svg rename to ru.ublinux.ubl-settings-bootloader.checked.svg diff --git a/warning.svg b/ru.ublinux.ubl-settings-bootloader.warning.svg similarity index 100% rename from warning.svg rename to ru.ublinux.ubl-settings-bootloader.warning.svg diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 0578099..d726f50 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -77,11 +77,11 @@ void MainWindow::settings(){ } else{ boxWidgetAll->set_sensitive(false); - btnDownload->set_sensitive(false); + btnLoad->set_sensitive(false); boxSave->set_sensitive(false); imgInfo->set("/usr/share/icons/hicolor/scalable/status/warning.svg"); info_status_app("boxInfoMessError"); - lblWarning->set_text(_("The program must be run with superuser privileges!")); + lblWarning->set_text(_("The program must be run as root")); } @@ -99,36 +99,14 @@ void MainWindow::get_monitor_size(){ void MainWindow::get_builder(){ builder->get_widget("chbLoadVariantSelectionTimer", chbLoadVariantSelectionTimer); builder->get_widget("chbLastSelectionWillBecome", chbLastSelectionWillBecome); - builder->get_widget("chbQuiet", chbQuiet); - builder->get_widget("chbSplash", chbSplash); - builder->get_widget("chbPlymouth", chbPlymouth); - builder->get_widget("chbAcpi", chbAcpi); - builder->get_widget("chbNоapic", chbNоapic); - builder->get_widget("chbNolapic", chbNolapic); - builder->get_widget("chbSingle", chbSingle); - builder->get_widget("chbHomodeset", chbHomodeset); - builder->get_widget("chbI915Enable", chbI915Enable); - builder->get_widget("chbAhci", chbAhci); - builder->get_widget("chbSndIntel", chbSndIntel); - builder->get_widget("chbintelMax1", chbintelMax1); - builder->get_widget("chbintelMax4", chbintelMax4); - builder->get_widget("chbconsoleIT", chbconsoleIT); - builder->get_widget("chbSerialIT", chbSerialIT); - builder->get_widget("chbofConsoleIT", chbofConsoleIT); - builder->get_widget("chbAtKeyboard", chbAtKeyboard); - builder->get_widget("chbUsbKeyboard", chbUsbKeyboard); - builder->get_widget("chbofConsoleOT", chbofConsoleOT); - builder->get_widget("chbSerialOT", chbSerialOT); - builder->get_widget("chbconsoleOT", chbconsoleOT); - builder->get_widget("chbGfxterm", chbGfxterm); - builder->get_widget("chbVgaText", chbVgaText); + builder->get_widget("lblInfoCommand", lblInfoCommand); builder->get_widget("lblInfoCommand1", lblInfoCommand1); builder->get_widget("lblInfoCommand2", lblInfoCommand2); builder->get_widget("lblInfoDefaultDonw", lblInfoDefaultDonw); builder->get_widget("lblInfoSeconds", lblInfoSeconds); - builder->get_widget("lblDownloadMenu", lblDownloadMenu); + builder->get_widget("lblLoadMenu", lblLoadMenu); builder->get_widget("lblInfoInputTerminal", lblInfoInputTerminal); builder->get_widget("lblInfoOutputTerminal", lblInfoOutputTerminal); builder->get_widget("lblInfoSeconds", lblInfoSeconds); @@ -140,26 +118,19 @@ void MainWindow::get_builder(){ builder->get_widget("entryIT", entryIT); builder->get_widget("entryOT", entryOT); - builder->get_widget("boxInput1", boxInput1); - builder->get_widget("boxInput2", boxInput2); - builder->get_widget("boxOtput1", boxOtput1); - builder->get_widget("boxOtput2", boxOtput2); - builder->get_widget("boxKernel", boxKernel); - builder->get_widget("boxKernel1", boxKernel1); - builder->get_widget("boxKernel2", boxKernel2); builder->get_widget("boxColor", boxColor); builder->get_widget("boxWidgetAll", boxWidgetAll); builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("btnSynopsis", btnSynopsis); builder->get_widget("btnAbout", btnAbout); - builder->get_widget("btnDonwlodLocal", btnDonwlodLocal); - builder->get_widget("btnDonwlolGlob", btnDonwlolGlob); + builder->get_widget("btnLoadLocal", btnLoadLocal); + builder->get_widget("btnLoadGlob", btnLoadGlob); builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob); builder->get_widget("btnSaveLocal", btnSaveLocal); builder->get_widget("btnSaveGlob", btnSaveGlob); builder->get_widget("btnSettings", btnSettings); - builder->get_widget("btnDownload", btnDownload); + builder->get_widget("btnLoad", btnLoad); builder->get_widget("btnSave", btnSave); builder->get_widget("boxButton", boxButton); builder->get_widget("boxSave", boxSave); @@ -167,6 +138,9 @@ void MainWindow::get_builder(){ builder->get_widget("lblWarning", lblWarning); builder->get_widget("imgInfo", imgInfo); builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); + builder->get_widget("treeViewKernel", treeViewKernel); + builder->get_widget("treeViewOTT", treeViewOTT); + builder->get_widget("treeViewIPT", treeViewIPT); } void MainWindow::localization(){ @@ -188,56 +162,30 @@ void MainWindow::localization(){ lblInfoCommand2->set_text(_("Command line parameters:")); lblInfoDefaultDonw->set_text(_("Default download")); lblInfoSeconds->set_text(_("Seconds")); - lblDownloadMenu->set_text(_("Download menu")); + lblLoadMenu->set_text(_("Download menu")); lblInfoInputTerminal->set_text(_("Input terminal")); lblInfoOutputTerminal->set_text(_("Output terminal")); chbLoadVariantSelectionTimer->set_label(_("Load variant selection timer")); chbLastSelectionWillBecome->set_label(_("The last selection will become the default boot choice")); - chbQuiet->set_label(_("quiet (Downloading without text messages)")); - chbSplash->set_label(_("splash (Show welcome window)")); - chbPlymouth->set_label(_("no plymouth (Disable Plymouth)")); - chbAcpi->set_label(_("acpi=off (Disable ACPI)")); - chbNоapic->set_label(_("nоapic (Disable APIC)")); - chbNolapic->set_label(_("nolapic (Disable local APIC)")); - chbSingle->set_label(_("single (Single User Mode)")); - chbHomodeset->set_label(_("nomodeset (Disable kernel selection and loading of video drivers)")); - chbI915Enable->set_label(_("i915.enable_dc=0 (Disable GPU power management)")); - chbAhci->set_label(_("ahci.mobile_jpm_policy=1 (Maximum performance, power management)")); - chbSndIntel->set_label(_("snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel)")); - chbintelMax1->set_label(_("intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state)")); - chbintelMax4->set_label(_("intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage)")); - chbconsoleIT->set_label(_("console (PC BIOS & console EFI)")); - chbSerialIT->set_label(_("serial (Serial terminal)")); - chbofConsoleIT->set_label(_("ofconsole (Console Open Firmware)")); - chbAtKeyboard ->set_label(_("at_keyboard (Keyboard PC AT (Coreboot))")); - chbUsbKeyboard->set_label(_("usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))")); - chbofConsoleOT->set_label(_("ofconsole (Console Open Firmware)")); - chbSerialOT->set_label(_("serial (Serial terminal)")); - chbconsoleOT->set_label(_("console (PC BIOS & console EFI)")); - chbGfxterm->set_label(_("gfxterm (Output in graphical mode)")); - chbVgaText->set_label(_("chbVgaText")); btnSynopsis->set_label(_("Help")); btnAbout->set_label(_("About")); btnSaveLocalGlob->set_label(_("Save to global and local configuration")); btnSaveLocal->set_label(_("Save local configuration")); btnSaveGlob->set_label(_("Save global configuration")); - btnDonwlolGlob->set_label(_("Load global configuration")); - btnDonwlodLocal->set_label(_("Load local configuration")); + btnLoadGlob->set_label(_("Load global configuration")); + btnLoadLocal->set_label(_("Load local configuration")); btnSave->set_label(_("Save")); - btnDownload->set_label(_("Donwload")); + btnLoad->set_label(_("Load")); } void MainWindow::event(){ - chbintelMax1->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::fn_event_intelMax1)); - chbintelMax4->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::fn_event_intelMax4)); - signal_configure_event().connect(sigc::mem_fun(*this, &MainWindow::gui_set_orientation), false); btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); btnAbout->signal_activate().connect([&]() {aboutWindows->show();}); - btnDonwlodLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); - btnDonwlolGlob->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); + btnLoadLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); + btnLoadGlob->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); btnSaveLocalGlob->signal_activate().connect([&]() {save_global_local_cfg();}); btnSaveLocal->signal_activate().connect([&]() {save_local_cfg();}); btnSaveGlob->signal_activate().connect([&]() {save_global_cfg();}); @@ -411,47 +359,6 @@ void MainWindow::fn_event_intelMax4(){ chbintelMax1->set_active(false); } -bool MainWindow::gui_set_orientation(GdkEventConfigure* event){ - if (event){} - int w,h; - this->get_monitor_size(); - w = this->get_width(); - h = this->get_height(); - int padding = w*0.11; - float padding_interest = 0.6; - if ((width!=w) || heigh!=h){ - if (((screen_width/2)<=w) && ((screen_hight-padding)<=h)){ - boxOtput1->set_orientation(Gtk::ORIENTATION_VERTICAL); - boxOtput2->set_orientation(Gtk::ORIENTATION_VERTICAL); - boxInput1->set_orientation(Gtk::ORIENTATION_VERTICAL); - boxInput2->set_orientation(Gtk::ORIENTATION_VERTICAL); - boxKernel->set_orientation(Gtk::ORIENTATION_VERTICAL); - boxKernel1->set_orientation(Gtk::ORIENTATION_VERTICAL); - boxKernel2->set_orientation(Gtk::ORIENTATION_VERTICAL); - cout << 1 << endl; - } - else if (((screen_width*padding_interest)<=w) && ((screen_hight*padding_interest)<=h)){ - boxOtput1->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - boxOtput2->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - boxInput1->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - boxInput2->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - boxKernel->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - boxKernel1->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - boxKernel2->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - cout << 2 << endl; - } - else{ - } - - - width=w; - heigh=h; - } - - - return false; -} - void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 4d05652..9e7dbbe 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -40,46 +40,19 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblInfoCommand; Gtk::Label *lblInfoCommand1; Gtk::Label *lblInfoCommand2; - Gtk::Label *lblDownloadMenu; + Gtk::Label *lblLoadMenu; Gtk::Label *lblInfoInputTerminal; Gtk::Label *lblInfoOutputTerminal; Gtk::Label *lblHeaderName; Gtk::Label *lblInfoHead; - Gtk::CheckButton *chbLoadVariantSelectionTimer; - Gtk::CheckButton *chbofConsoleOT; - Gtk::CheckButton *chbSerialOT; - Gtk::CheckButton *chbconsoleOT; - Gtk::CheckButton *chbGfxterm; Gtk::CheckButton *chbVgaText; - Gtk::CheckButton *chbconsoleIT; - Gtk::CheckButton *chbSerialIT; - Gtk::CheckButton *chbofConsoleIT; - Gtk::CheckButton *chbAtKeyboard; - Gtk::CheckButton *chbUsbKeyboard; Gtk::CheckButton *chbintelMax4; Gtk::CheckButton *chbintelMax1; - Gtk::CheckButton *chbSndIntel; - Gtk::CheckButton *chbAhci; - Gtk::CheckButton *chbI915Enable; - Gtk::CheckButton *chbAcpi; - Gtk::CheckButton *chbPlymouth; - Gtk::CheckButton *chbSplash; - Gtk::CheckButton *chbQuiet; - Gtk::CheckButton *chbNоapic; - Gtk::CheckButton *chbNolapic; - Gtk::CheckButton *chbSingle; - Gtk::CheckButton *chbHomodeset; + Gtk::CheckButton *chbLoadVariantSelectionTimer; Gtk::CheckButton *chbLastSelectionWillBecome; Gtk::Entry *entryKernel; Gtk::Entry *entryIT; Gtk::Entry *entryOT; - Gtk::Box *boxOtput1; - Gtk::Box *boxOtput2; - Gtk::Box *boxInput1; - Gtk::Box *boxInput2; - Gtk::Box *boxKernel; - Gtk::Box *boxKernel1; - Gtk::Box *boxKernel2; Gtk::Box *boxColor; Gtk::AboutDialog *aboutWindows; Gtk::MenuItem *btnAbout; @@ -87,9 +60,9 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::MenuItem *btnSaveLocalGlob; Gtk::MenuItem *btnSaveLocal; Gtk::MenuItem *btnSaveGlob; - Gtk::MenuItem *btnDonwlolGlob; - Gtk::MenuItem *btnDonwlodLocal; - Gtk::Button *btnDownload; + Gtk::MenuItem *btnLoadGlob; + Gtk::MenuItem *btnLoadLocal; + Gtk::Button *btnLoad; Gtk::Button *btnSave; Gtk::Button *btnSettings; Gtk::Widget *boxButton; @@ -99,6 +72,9 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblWarning; Gtk::Image *imgInfo; Gtk::ButtonBox *btnBoxAboutDialog; + Gtk::TreeView *treeViewKernel; + Gtk::TreeView *treeViewIPT; + Gtk::TreeView *treeViewOTT; private: int width; @@ -126,7 +102,6 @@ class MainWindow : public Gtk::ApplicationWindow { void fn_event_intelMax1(); void fn_event_intelMax4(); void get_monitor_size(); - bool gui_set_orientation(GdkEventConfigure* configure_event); void synopsis_show(); string call(string cmd); void wrapper_system(string cmd, string thread_str); @@ -140,6 +115,14 @@ class MainWindow : public Gtk::ApplicationWindow { void info_status_app(string stule); void info_warning_error(int mess); int check_root(); + class ModelColumns : public Gtk::TreeModel::ColumnRecord + { + public: + ModelColumns() {/*add(checkbox);*/ add(name); add(description); } + //Gtk::TreeModelColumn checkbox; + Gtk::TreeModelColumn name; + Gtk::TreeModelColumn description; + }; }; class SettingsPlug : public Gtk::Plug{ diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index e3d5b33..7e9aec0 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -56,7 +56,7 @@ False 4 - + True False Load global configuration @@ -66,7 +66,7 @@ - + True False Load local configuration @@ -140,93 +140,6 @@ - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Warning! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - 750 550 @@ -510,7 +423,7 @@ specified priority - + True False 5 @@ -546,117 +459,11 @@ specified priority False vertical - + True - False - vertical - - - True - False - - - splash (Show welcome window) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - quiet (Downloading without text messages) - 362 - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - nоapic (Disable APIC) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - nolapic (Disable local APIC) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 1 - + True + + @@ -666,168 +473,20 @@ specified priority - + True False - vertical - - - True - False - - - no plymouth (Disable Plymouth) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - single (Single User Mode) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 0 - - - + True False - - - acpi=off (Disable ACPI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - nomodeset (Disable kernel selection and loading of video drivers) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 1 - - - - - False - True - 1 - - - - - True - False - vertical - - - i915.enable_dc=0 (Disable GPU power management) - 362 - True - True - False - start 5 5 5 5 6 6 - True + Command line parameters: False @@ -836,22 +495,18 @@ specified priority - - ahci.mobile_jpm_policy=1 (Maximum performance, power management) + True True - False - start 5 5 5 5 6 6 - True - False + True True 1 @@ -860,68 +515,61 @@ specified priority False True - 6 - - - - - snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 7 - - - - - intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state) - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 8 + 10 + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical - - intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage) + True True - False - 5 - 5 - 5 - 5 - 6 - 6 - True + + + False True - 9 + 0 @@ -929,7 +577,7 @@ specified priority True False - + True False 5 @@ -947,7 +595,7 @@ specified priority - + True True 5 @@ -967,7 +615,7 @@ specified priority False True - 10 + 7 @@ -975,7 +623,7 @@ specified priority - + True False 5 @@ -984,14 +632,14 @@ specified priority 5 6 6 - Parameters passed to the kernel + Input terminal False True - 2 + 3 @@ -1011,293 +659,11 @@ specified priority False vertical - + True - False - vertical - - - console (PC BIOS & console EFI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - serial (Serial terminal) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - ofconsole (Console Open Firmware) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - vertical - - - at_keyboard (Keyboard PC AT (Coreboot)) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - usb_keyboard (Keyboard USB Keyboard (protocol HID Boot)) - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 6 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Input terminal - - - - - False - True - 3 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - - - ofconsole (Console Open Firmware) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - serial (Serial terminal) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - console (PC BIOS & console EFI) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - + True + + @@ -1306,62 +672,6 @@ specified priority 0 - - - True - False - vertical - - - gfxterm (Output in graphical mode) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - vga_text (Text output VGA (Coreboot)) - 362 - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 1 - - - - - False - True - 6 - - True @@ -1570,7 +880,7 @@ specified priority True False - + True True False @@ -1583,14 +893,14 @@ specified priority True False - + True False 5 5 5 5 - Download + Load False @@ -1599,7 +909,7 @@ specified priority - + True False pan-down-symbolic @@ -1630,4 +940,91 @@ specified priority + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Warning! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index d650a7b..73942b1 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -139,7 +139,7 @@ msgstr "Загрузить локальную конфигурацию" msgid "Save" msgstr "Сохранить" -msgid "Download" +msgid "Load" msgstr "Загрузить" msgid "Local configuration reading error" @@ -166,9 +166,6 @@ msgstr "Успешно записана глобальная конфигура msgid "Local configuration successfully written" msgstr "Успешно записана локальная конфигурация" -msgid "The program must be run with \nsuperuser privileges!" +msgid "The program must be run as root" msgstr "Программа должна быть запущена с правами \nсуперпользователя!" -msgid "The program must be run with superuser privileges!" -msgstr "Программа должна быть запущена с правами суперпользователя!" - From 13476f5cbaa1ec01ba92b22fd46108b44648bea8 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 15 Mar 2023 15:43:59 +0600 Subject: [PATCH 013/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=8D?= =?UTF-8?q?=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D1=8B=20=D0=B2=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD,=20scrolledWindow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.h | 3 +- ubl-settings-bootloader.glade | 56 ++++++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 9e7dbbe..e34c5fc 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -118,7 +118,8 @@ class MainWindow : public Gtk::ApplicationWindow { class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: - ModelColumns() {/*add(checkbox);*/ add(name); add(description); } + ModelColumns() {add(name); add(description); } + //ModelColumns() {add(checkbox); add(name); add(description); } //Gtk::TreeModelColumn checkbox; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 7e9aec0..d400fab 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -459,11 +459,24 @@ specified priority False vertical - + True True - - + in + + + True + False + + + True + True + + + + + + @@ -559,17 +572,27 @@ specified priority False vertical - + True True - - + in + + + True + False + + + True + True + + + False True - 0 + 1 @@ -659,11 +682,24 @@ specified priority False vertical - + True True - - + in + + + True + False + + + True + True + + + + + + From 8d7d35ead59cd3ef9486d100cd6489308bee82bb Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 15 Mar 2023 15:46:45 +0600 Subject: [PATCH 014/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=B2=20makefile,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20csv=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 +++ boot-options.csv | 0 input-options.csv | 0 output-options.csv | 0 4 files changed, 3 insertions(+) create mode 100644 boot-options.csv create mode 100644 input-options.csv create mode 100644 output-options.csv diff --git a/Makefile b/Makefile index 830114d..5653eca 100644 --- a/Makefile +++ b/Makefile @@ -115,6 +115,9 @@ install: check uninstall @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png + @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ input-options.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ output-options.csv @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "ru.ublinux.ubl-settings-bootloader.checked.svg" @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "ru.ublinux.ubl-settings-bootloader.warning.svg" @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ diff --git a/boot-options.csv b/boot-options.csv new file mode 100644 index 0000000..e69de29 diff --git a/input-options.csv b/input-options.csv new file mode 100644 index 0000000..e69de29 diff --git a/output-options.csv b/output-options.csv new file mode 100644 index 0000000..e69de29 From f3965cf6ee3a15f7f9214cc7a7158e94ee38a31f Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 24 Mar 2023 09:27:38 +0600 Subject: [PATCH 015/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=20.csv=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 2 ++ source/ubl-settings-bootloader.cc | 51 ++++++++++++++++--------------- source/ubl-settings-bootloader.h | 27 ++++++++-------- source/util.cc | 41 +++++++++++++++++++++++++ source/util.h | 13 ++++++++ ubl-settings-bootloader_ru.po | 12 ++++++++ 6 files changed, 110 insertions(+), 36 deletions(-) create mode 100644 source/util.cc create mode 100644 source/util.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index f194fa9..bc5f9e8 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -15,6 +15,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection -g") set(SOURCE_FILES + util.h + util.cc ubl-util-standard.h ubl-util-standard.c main.cc diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index d726f50..604b71f 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -70,22 +70,42 @@ void MainWindow::settings(){ this->localization(); this->add_CSS(); this->event(); + btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { - + this->add_colums(treeViewKernel, columns_Kernel); + this->add_colums(treeViewIPT, columns_IPT); + this->add_colums(treeViewOTT, columns_OTT); + this->add_cell(treeViewKernel, columns_Kernel, true, "name", "text"); } else{ boxWidgetAll->set_sensitive(false); btnLoad->set_sensitive(false); boxSave->set_sensitive(false); - imgInfo->set("/usr/share/icons/hicolor/scalable/status/warning.svg"); + imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.warning.svg"); info_status_app("boxInfoMessError"); lblWarning->set_text(_("The program must be run as root")); } +} +void MainWindow::add_colums(Gtk::TreeView *treeView, ModelColumns *m_columns) { + treeView->append_column(_("Active"), m_columns->check_button); + treeView->append_column(_("Option"), m_columns->name); + treeView->append_column(_("Description"), m_columns->description); +} + +void MainWindow::add_cell(Gtk::TreeView *tree_view, ModelColumns *m_colum, bool flag_chk_btn, string name, string desc) { + cout << flag_chk_btn << endl; + Glib::RefPtr list_store; + list_store = Gtk::ListStore::create(*m_colum); + tree_view->set_model(list_store); + Gtk::TreeModel::Row row = *(list_store->append()); + row[m_colum->check_button] = "flag_chk_btn"; + row[m_colum->name] = name; + row[m_colum->description] = desc; } void MainWindow::get_monitor_size(){ @@ -213,7 +233,8 @@ void MainWindow::download_local_cfg(){ void MainWindow::synopsis_show() { - wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home", "&"); + string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; + wrapper_system(cmd, "&"); } void MainWindow::wrapper_system(string cmd, string thread_str = "") { @@ -235,7 +256,7 @@ void MainWindow::info_status_app(string stule) { void MainWindow::info_warning_error(int mess) { if (index_error > 0) { info_status_app("boxInfoMessError"); - imgInfo->set("/usr/share/icons/hicolor/scalable/status/warning.svg"); + imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.warning.svg"); index_error = 0; string mess_error = ""; if (mess == 0) { @@ -262,7 +283,7 @@ void MainWindow::info_warning_error(int mess) { } else { info_status_app("boxInfoMessOK"); - imgInfo->set("/usr/share/icons/hicolor/scalable/status/checked.svg"); + imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.checked.svg"); if (mess == 0) { lblWarning->set_text(_("Local configuration downloaded successfully")); } @@ -283,7 +304,7 @@ void MainWindow::info_warning_error(int mess) { struct MainWindow::Result MainWindow::wrapper_call(string cmd) { struct Result obj_result; - string response = this->call(cmd); + string response = call(cmd); if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) { if (response.find("=") != std::string::npos) { if (response.find("\n") != std::string::npos) { @@ -317,24 +338,6 @@ struct MainWindow::Result MainWindow::wrapper_call(string cmd) { return obj_result; } -string MainWindow::call(string cmd) { - FILE *fp; - int status; - char path[PATH_MAX] = {0}; - fp = popen(cmd.c_str(), "r"); - if (fp == NULL) { - exit(1); - } - while (fgets(path, PATH_MAX, fp) != NULL) { - break; - } - status = pclose(fp); - if (status == -1) { - exit(1); - } - return path; -} - void MainWindow::log_mess_error(string &cmd){ string key = ""; if (map_cmd_error.find(cmd) != map_cmd_error.end()){ diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index e34c5fc..a070ffc 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -11,6 +11,7 @@ #include #include #include "ubl-util-standard.c" +#include "util.h" using namespace std; extern string path_app; @@ -33,6 +34,17 @@ private: class MainWindow : public Gtk::ApplicationWindow { public: + class ModelColumns : public Gtk::TreeModel::ColumnRecord { + public: + ModelColumns() {add(check_button), add(name); add(description); } + //Gtk::TreeModelColumn check_button; + Gtk::TreeModelColumn check_button; + Gtk::TreeModelColumn name; + Gtk::TreeModelColumn description; + }; + ModelColumns *columns_Kernel; + ModelColumns *columns_IPT; + ModelColumns *columns_OTT; Glib::RefPtr builder; Gtk::SpinButton *spbSecond; Gtk::Label *lblInfoSeconds; @@ -76,7 +88,6 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeView *treeViewIPT; Gtk::TreeView *treeViewOTT; - private: int width; int heigh; int screen_width; @@ -91,7 +102,6 @@ class MainWindow : public Gtk::ApplicationWindow { }; std::map map_cmd_error; - public: MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); void get_builder(); @@ -103,27 +113,20 @@ class MainWindow : public Gtk::ApplicationWindow { void fn_event_intelMax4(); void get_monitor_size(); void synopsis_show(); - string call(string cmd); + void add_cell(Gtk::TreeView *tree_view, ModelColumns *m_colum, bool flag_chk_btn, string name, string desc); void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); void log_mess_error(string &cmd); void save_global_local_cfg(); void save_local_cfg(); + void add_colums(Gtk::TreeView *treeView, ModelColumns *m_columns); void save_global_cfg(); void download_local_cfg(); void download_globl_cfg(); void info_status_app(string stule); void info_warning_error(int mess); int check_root(); - class ModelColumns : public Gtk::TreeModel::ColumnRecord - { - public: - ModelColumns() {add(name); add(description); } - //ModelColumns() {add(checkbox); add(name); add(description); } - //Gtk::TreeModelColumn checkbox; - Gtk::TreeModelColumn name; - Gtk::TreeModelColumn description; - }; + }; class SettingsPlug : public Gtk::Plug{ diff --git a/source/util.cc b/source/util.cc new file mode 100644 index 0000000..a69dbaa --- /dev/null +++ b/source/util.cc @@ -0,0 +1,41 @@ +#include "util.h" + +std::array, 2> read_csv(const std::string& filename) { + std::array, 2> array_vectors; + std::vector vec_option; + std::vector vec_opcision; + std::ifstream file(filename); + std::string line; + char delimiter = ','; + getline(file, line); + while (std::getline(file, line)) { + std::stringstream stream(line); + std::string option; + std::string opcision; + getline(stream, option, delimiter); + getline(stream, opcision, delimiter); + vec_option.push_back(option); + vec_opcision.push_back(opcision); + } + array_vectors[0] = vec_option; + array_vectors[1] = vec_opcision; + return array_vectors; +} + +std::string call(std::string cmd) { + FILE *fp; + int status; + char path[PATH_MAX] = {0}; + fp = popen(cmd.c_str(), "r"); + if (fp == NULL) { + exit(1); + } + while (fgets(path, PATH_MAX, fp) != NULL) { + break; + } + status = pclose(fp); + if (status == -1) { + exit(1); + } + return path; +} \ No newline at end of file diff --git a/source/util.h b/source/util.h new file mode 100644 index 0000000..10ba8ce --- /dev/null +++ b/source/util.h @@ -0,0 +1,13 @@ +#include +#include +#include +#include +#include +#include +#include +#include + + + +std::array, 2> read_csv(const std::string& filename); +std::string call(std::string cmd); \ No newline at end of file diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 73942b1..f60bd05 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -16,6 +16,18 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Active" +msgstr "Активно" + +msgid "Option" +msgstr "Опция" + +msgid "Description" +msgstr "Описание" + +msgid "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +msgstr "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/" + msgid "Configuring the boot loader settings" msgstr "Настройка параметров загрузчика системы" From 6d222736583cb32977f3407718aa1f88b411c1d6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 24 Mar 2023 11:40:18 +0600 Subject: [PATCH 016/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20TreeView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boot-options.csv | 14 ++++++ input-options.csv | 6 +++ output-options.csv | 6 +++ source/ubl-settings-bootloader.cc | 72 +++++++++++++++++++++++-------- source/ubl-settings-bootloader.h | 23 +++++++--- ubl-settings-bootloader.glade | 7 +++ 6 files changed, 103 insertions(+), 25 deletions(-) diff --git a/boot-options.csv b/boot-options.csv index e69de29..1aba2df 100644 --- a/boot-options.csv +++ b/boot-options.csv @@ -0,0 +1,14 @@ +Option,Description +quiet,Downloading without text messages +splash,Show welcome window +noplymouth,Disable Plymouth +acpi=off,Disable ACPI +noapic,Disable APIC +nolapic,Disable local APIC +single,Single User Mode +nomodeset,Disable kernel selection and loading of video drivers +915.enable_dc=0,Disable GPU power management +ahci.mobile_lpm_policy=1,"Maximum performance, power management" +snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver +intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state +intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors diff --git a/input-options.csv b/input-options.csv index e69de29..4bd7f47 100644 --- a/input-options.csv +++ b/input-options.csv @@ -0,0 +1,6 @@ +Option,Description +console,PC BIOS & EFI console +serial,Serial terminal +ofconsole,Open Firmware Console +at_keyboard,PC AT Keyboard (Coreboot) +usb_keyboard,USB Keyboard (HID Boot protocol) diff --git a/output-options.csv b/output-options.csv index e69de29..30453d6 100644 --- a/output-options.csv +++ b/output-options.csv @@ -0,0 +1,6 @@ +Option,Description +console,PC BIOS & EFI console +serial,Serial terminal +ofconsole,Open Firmware Console +gfxterm,Output in graphical mode +vga_text,VGA text output (Coreboot) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 604b71f..ca98efc 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -2,10 +2,11 @@ #include "ubl-settings-bootloader.h" using namespace std; -string path_app= "/usr/bin/"; +string path_app = "/usr/bin/"; string path_glade= "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade"; string path_css = "/usr/share/ubl-settings-bootloader/css/style.css"; string app_name = "ubl-settings-bootloader"; +string path_resources = "/usr/share/ubl-settings-bootloader"; int socket_ext_id_I = 0; int socket_trd_id_I = 0; @@ -71,13 +72,12 @@ void MainWindow::settings(){ this->add_CSS(); this->event(); + btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { - this->add_colums(treeViewKernel, columns_Kernel); - this->add_colums(treeViewIPT, columns_IPT); - this->add_colums(treeViewOTT, columns_OTT); - this->add_cell(treeViewKernel, columns_Kernel, true, "name", "text"); + this->fill_in_view(); + } else{ boxWidgetAll->set_sensitive(false); @@ -87,25 +87,61 @@ void MainWindow::settings(){ info_status_app("boxInfoMessError"); lblWarning->set_text(_("The program must be run as root")); } +} + +void MainWindow::fill_in_view() { + list_store_kernel = Gtk::ListStore::create(columns_kernel); + list_store_IPT = Gtk::ListStore::create(columns_IPT); + list_store_OTT = Gtk::ListStore::create(columns_OTT); + treeViewKernel->set_model(list_store_kernel); + treeViewIPT->set_model(list_store_IPT); + treeViewOTT->set_model(list_store_OTT); + Gtk::TreeModel::Row row_kernel = *(list_store_kernel->append()); + Gtk::TreeModel::Row row_IPT = *(list_store_IPT->append()); + Gtk::TreeModel::Row row_OTT = *(list_store_OTT->append()); + + this->read_file_and_view("boot-options.csv",row_kernel, list_store_kernel , columns_kernel); + this->read_file_and_view("input-options.csv",row_IPT, list_store_IPT , columns_IPT); + this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT , columns_OTT); + + this->view_add_colums(*treeViewKernel, columns_kernel); + this->view_add_colums(*treeViewIPT, columns_IPT); + this->view_add_colums(*treeViewOTT, columns_OTT); } -void MainWindow::add_colums(Gtk::TreeView *treeView, ModelColumns *m_columns) { - treeView->append_column(_("Active"), m_columns->check_button); - treeView->append_column(_("Option"), m_columns->name); - treeView->append_column(_("Description"), m_columns->description); + +void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum) { + count_append_cell = 0; + std::array, 2> arr_view = read_csv(path_resources + "/" + file_name); + std::vector vec_Option = arr_view[0]; + std::vector vec_Description = arr_view[1]; + for (size_t index = 0; index < vec_Option.size(); index++) { + string str_option = _(vec_Option[index].c_str()); + string str_description = _(vec_Description[index].c_str()); + this->view_add_cell(row, list_store_m , m_colum, true, str_option, str_description); + } } -void MainWindow::add_cell(Gtk::TreeView *tree_view, ModelColumns *m_colum, bool flag_chk_btn, string name, string desc) { - cout << flag_chk_btn << endl; - Glib::RefPtr list_store; - list_store = Gtk::ListStore::create(*m_colum); - tree_view->set_model(list_store); - Gtk::TreeModel::Row row = *(list_store->append()); - row[m_colum->check_button] = "flag_chk_btn"; - row[m_colum->name] = name; - row[m_colum->description] = desc; +void MainWindow::view_add_colums(Gtk::TreeView &treeView, ModelColumns &m_columns) { + treeView.append_column(_("Active"), m_columns.check_button); + treeView.append_column(_("Option"), m_columns.name); + treeView.append_column(_("Description"), m_columns.description); + +} + +void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum, bool flag_chk_btn, string name, string desc) { + ; + if (count_append_cell != 0) { + row = *(list_store_m->append()); + } + row[m_colum.check_button] = flag_chk_btn; + row[m_colum.name] = name; + row[m_colum.description] = desc; + + count_append_cell += 1; + } void MainWindow::get_monitor_size(){ diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index a070ffc..68721fa 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -38,13 +38,13 @@ class MainWindow : public Gtk::ApplicationWindow { public: ModelColumns() {add(check_button), add(name); add(description); } //Gtk::TreeModelColumn check_button; - Gtk::TreeModelColumn check_button; + Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; }; - ModelColumns *columns_Kernel; - ModelColumns *columns_IPT; - ModelColumns *columns_OTT; + ModelColumns columns_kernel; + ModelColumns columns_IPT; + ModelColumns columns_OTT; Glib::RefPtr builder; Gtk::SpinButton *spbSecond; Gtk::Label *lblInfoSeconds; @@ -87,11 +87,18 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeView *treeViewKernel; Gtk::TreeView *treeViewIPT; Gtk::TreeView *treeViewOTT; - + + Gtk::TreeModel::Row row_kernel; + Gtk::TreeModel::Row row_IPT; + Gtk::TreeModel::Row row_OT; + Glib::RefPtr list_store_kernel; + Glib::RefPtr list_store_IPT; + Glib::RefPtr list_store_OTT; int width; int heigh; int screen_width; int screen_hight; + int count_append_cell = 0; string version_application = "1.0"; int index_error = 0; string str_cmd_error = ""; @@ -113,19 +120,21 @@ class MainWindow : public Gtk::ApplicationWindow { void fn_event_intelMax4(); void get_monitor_size(); void synopsis_show(); - void add_cell(Gtk::TreeView *tree_view, ModelColumns *m_colum, bool flag_chk_btn, string name, string desc); + void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum, bool flag_chk_btn, string name, string desc); void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); void log_mess_error(string &cmd); void save_global_local_cfg(); void save_local_cfg(); - void add_colums(Gtk::TreeView *treeView, ModelColumns *m_columns); + void view_add_colums(Gtk::TreeView &treeView, ModelColumns &m_columns); void save_global_cfg(); + void read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum); void download_local_cfg(); void download_globl_cfg(); void info_status_app(string stule); void info_warning_error(int mess); int check_root(); + void fill_in_view(); }; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index d400fab..ad6223a 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -460,6 +460,7 @@ specified priority vertical + 100 True True in @@ -469,6 +470,7 @@ specified priority False + -1 True True @@ -573,6 +575,7 @@ specified priority vertical + 100 True True in @@ -584,6 +587,9 @@ specified priority True True + + + @@ -683,6 +689,7 @@ specified priority vertical + 100 True True in From 3f24feac67910f163a6214b6c45654d68255c089 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 24 Mar 2023 17:53:51 +0600 Subject: [PATCH 017/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20treeview=20=D0=BD=D0=B0=20CheckButton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boot-options.csv | 28 ++++----- input-options.csv | 12 ++-- output-options.csv | 12 ++-- source/ubl-settings-bootloader.cc | 95 +++++++++++++++++++------------ source/ubl-settings-bootloader.h | 26 +++++---- source/util.cc | 23 ++++++-- source/util.h | 2 +- 7 files changed, 120 insertions(+), 78 deletions(-) diff --git a/boot-options.csv b/boot-options.csv index 1aba2df..775d901 100644 --- a/boot-options.csv +++ b/boot-options.csv @@ -1,14 +1,14 @@ -Option,Description -quiet,Downloading without text messages -splash,Show welcome window -noplymouth,Disable Plymouth -acpi=off,Disable ACPI -noapic,Disable APIC -nolapic,Disable local APIC -single,Single User Mode -nomodeset,Disable kernel selection and loading of video drivers -915.enable_dc=0,Disable GPU power management -ahci.mobile_lpm_policy=1,"Maximum performance, power management" -snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver -intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state -intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors +Get,Set=1,Set=0,Option,Description +cmd_get,cmd_true,cmd_false,quiet,Downloading without text messages +cmd_get,cmd_true,cmd_false,splash,Show welcome window +cmd_get,cmd_true,cmd_false,noplymouth,Disable Plymouth +cmd_get,cmd_true,cmd_false,acpi=off,Disable ACPI +cmd_get,cmd_true,cmd_false,noapic,Disable APIC +cmd_get,cmd_true,cmd_false,nolapic,Disable local APIC +cmd_get,cmd_true,cmd_false,single,Single User Mode +cmd_get,cmd_true,cmd_false,nomodeset,Disable kernel selection and loading of video drivers +cmd_get,cmd_true,cmd_false,915.enable_dc=0,Disable GPU power management +cmd_get,cmd_true,cmd_false,ahci.mobile_lpm_policy=1,"Maximum performance, power management" +cmd_get,cmd_true,cmd_false,snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver +cmd_get,cmd_true,cmd_false,intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state +cmd_get,cmd_true,cmd_false,intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors diff --git a/input-options.csv b/input-options.csv index 4bd7f47..ecd672e 100644 --- a/input-options.csv +++ b/input-options.csv @@ -1,6 +1,6 @@ -Option,Description -console,PC BIOS & EFI console -serial,Serial terminal -ofconsole,Open Firmware Console -at_keyboard,PC AT Keyboard (Coreboot) -usb_keyboard,USB Keyboard (HID Boot protocol) +Get,Set=1,Set=0,Option,Description +cmd_get,cmd_true,cmd_false,console,PC BIOS & EFI console +cmd_get,cmd_true,cmd_false,serial,Serial terminal +cmd_get,cmd_true,cmd_false,ofconsole,Open Firmware Console +cmd_get,cmd_true,cmd_false,at_keyboard,PC AT Keyboard (Coreboot) +cmd_get,cmd_true,cmd_false,usb_keyboard,USB Keyboard (HID Boot protocol) diff --git a/output-options.csv b/output-options.csv index 30453d6..ce2342f 100644 --- a/output-options.csv +++ b/output-options.csv @@ -1,6 +1,6 @@ -Option,Description -console,PC BIOS & EFI console -serial,Serial terminal -ofconsole,Open Firmware Console -gfxterm,Output in graphical mode -vga_text,VGA text output (Coreboot) +Get,Set=1,Set=0,Option,Description +cmd_get,cmd_true,cmd_false,console,PC BIOS & EFI console +cmd_get,cmd_true,cmd_false,serial,Serial terminal +cmd_get,cmd_true,cmd_false,ofconsole,Open Firmware Console +cmd_get,cmd_true,cmd_false,gfxterm,Output in graphical mode +cmd_get,cmd_true,cmd_false,vga_text,VGA text output (Coreboot) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index ca98efc..c741732 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -70,13 +70,12 @@ void MainWindow::settings(){ this->get_builder(); this->localization(); this->add_CSS(); - this->event(); - btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { this->fill_in_view(); + this->event(); } else{ @@ -90,57 +89,76 @@ void MainWindow::settings(){ } void MainWindow::fill_in_view() { - list_store_kernel = Gtk::ListStore::create(columns_kernel); - list_store_IPT = Gtk::ListStore::create(columns_IPT); - list_store_OTT = Gtk::ListStore::create(columns_OTT); + list_store_kernel = Gtk::ListStore::create(m_columns); + list_store_IPT = Gtk::ListStore::create(m_columns); + list_store_OTT = Gtk::ListStore::create(m_columns); treeViewKernel->set_model(list_store_kernel); treeViewIPT->set_model(list_store_IPT); treeViewOTT->set_model(list_store_OTT); - Gtk::TreeModel::Row row_kernel = *(list_store_kernel->append()); - Gtk::TreeModel::Row row_IPT = *(list_store_IPT->append()); - Gtk::TreeModel::Row row_OTT = *(list_store_OTT->append()); - - this->read_file_and_view("boot-options.csv",row_kernel, list_store_kernel , columns_kernel); - this->read_file_and_view("input-options.csv",row_IPT, list_store_IPT , columns_IPT); - this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT , columns_OTT); - - this->view_add_colums(*treeViewKernel, columns_kernel); - this->view_add_colums(*treeViewIPT, columns_IPT); - this->view_add_colums(*treeViewOTT, columns_OTT); + this->read_file_and_view("boot-options.csv", row_kernel, list_store_kernel); + this->read_file_and_view("input-options.csv", row_IPT, list_store_IPT); + this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT); + this->view_add_colums(*treeViewKernel); + this->view_add_colums(*treeViewIPT); + this->view_add_colums(*treeViewOTT); } -void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum) { - count_append_cell = 0; - std::array, 2> arr_view = read_csv(path_resources + "/" + file_name); - std::vector vec_Option = arr_view[0]; - std::vector vec_Description = arr_view[1]; + +void MainWindow::item_selected(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) +{ + const auto iter = list_store_kernel->get_iter(path); + if(iter) { + const auto row = *iter; + Glib::ustring cmd; + bool check_btn = row[m_columns.check_button]; + if (check_btn) { + cmd = row[m_columns.cmd_set_true]; + + } + else { + cmd = row[m_columns.cmd_set_false]; + + } + Glib::ustring name = row[m_columns.name]; + cout << cmd << " " << name << endl; + cmd_selection_global[name] = cmd; + } +} + +void MainWindow::item_selected_row_changed(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &) { + cout << "item selected" << endl; +} + +void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { + std::array, 5> arr_view = read_csv(path_resources + "/" + file_name); + std::vector vec_Option = arr_view[3]; + std::vector vec_Description = arr_view[4]; for (size_t index = 0; index < vec_Option.size(); index++) { - string str_option = _(vec_Option[index].c_str()); - string str_description = _(vec_Description[index].c_str()); - this->view_add_cell(row, list_store_m , m_colum, true, str_option, str_description); + + this->view_add_cell(row, list_store_m , arr_view, index); } } -void MainWindow::view_add_colums(Gtk::TreeView &treeView, ModelColumns &m_columns) { - treeView.append_column(_("Active"), m_columns.check_button); +void MainWindow::view_add_colums(Gtk::TreeView &treeView) { + treeView.append_column_editable(_("Active"), m_columns.check_button); treeView.append_column(_("Option"), m_columns.name); treeView.append_column(_("Description"), m_columns.description); - } -void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum, bool flag_chk_btn, string name, string desc) { - ; - if (count_append_cell != 0) { - row = *(list_store_m->append()); - } - row[m_colum.check_button] = flag_chk_btn; - row[m_colum.name] = name; - row[m_colum.description] = desc; +void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view , size_t index) { + row = *(list_store_m->append()); + bool flag_chb = true; + row[m_columns.cmd_get] = arr_view[0][index]; + row[m_columns.cmd_set_true] = arr_view[1][index]; + row[m_columns.cmd_set_false] = arr_view[2][index]; + row[m_columns.check_button] = flag_chb; + row[m_columns.name] = _(arr_view[3][index].c_str()); + row[m_columns.description] = _(arr_view[4][index].c_str()); - count_append_cell += 1; + } @@ -245,6 +263,11 @@ void MainWindow::event(){ btnSaveLocalGlob->signal_activate().connect([&]() {save_global_local_cfg();}); btnSaveLocal->signal_activate().connect([&]() {save_local_cfg();}); btnSaveGlob->signal_activate().connect([&]() {save_global_cfg();}); + //TreeView_TreeSelection = treeViewKernel->get_selection(); + //TreeView_TreeSelection->signal_changed().connect(sigc::mem_fun(treeViewKernel, &MainWindow::item_selected) ); + Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); + treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected)); + } void MainWindow::save_global_local_cfg(){ diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 68721fa..5dc222b 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "ubl-util-standard.c" #include "util.h" using namespace std; @@ -36,15 +37,16 @@ class MainWindow : public Gtk::ApplicationWindow { public: class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: - ModelColumns() {add(check_button), add(name); add(description); } + ModelColumns() {add(cmd_get),add(cmd_set_true),add(cmd_set_false),add(check_button), add(name); add(description); } //Gtk::TreeModelColumn check_button; + Gtk::TreeModelColumn cmd_get; + Gtk::TreeModelColumn cmd_set_true; + Gtk::TreeModelColumn cmd_set_false; Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; }; - ModelColumns columns_kernel; - ModelColumns columns_IPT; - ModelColumns columns_OTT; + ModelColumns m_columns; Glib::RefPtr builder; Gtk::SpinButton *spbSecond; Gtk::Label *lblInfoSeconds; @@ -88,17 +90,17 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeView *treeViewIPT; Gtk::TreeView *treeViewOTT; - Gtk::TreeModel::Row row_kernel; - Gtk::TreeModel::Row row_IPT; - Gtk::TreeModel::Row row_OT; Glib::RefPtr list_store_kernel; Glib::RefPtr list_store_IPT; Glib::RefPtr list_store_OTT; + Gtk::TreeModel::Row row_kernel; + Gtk::TreeModel::Row row_IPT; + Gtk::TreeModel::Row row_OTT; + std::map cmd_selection_global; int width; int heigh; int screen_width; int screen_hight; - int count_append_cell = 0; string version_application = "1.0"; int index_error = 0; string str_cmd_error = ""; @@ -120,21 +122,23 @@ class MainWindow : public Gtk::ApplicationWindow { void fn_event_intelMax4(); void get_monitor_size(); void synopsis_show(); - void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum, bool flag_chk_btn, string name, string desc); + void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view, size_t index); void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); void log_mess_error(string &cmd); void save_global_local_cfg(); void save_local_cfg(); - void view_add_colums(Gtk::TreeView &treeView, ModelColumns &m_columns); + void view_add_colums(Gtk::TreeView &treeView); void save_global_cfg(); - void read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , ModelColumns &m_colum); + void read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); void download_globl_cfg(); void info_status_app(string stule); void info_warning_error(int mess); int check_root(); void fill_in_view(); + void item_selected(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); + void item_selected_row_changed(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &); }; diff --git a/source/util.cc b/source/util.cc index a69dbaa..501cb80 100644 --- a/source/util.cc +++ b/source/util.cc @@ -1,7 +1,10 @@ #include "util.h" -std::array, 2> read_csv(const std::string& filename) { - std::array, 2> array_vectors; +std::array, 5> read_csv(const std::string& filename) { + std::array, 5> array_vectors; + std::vector vec_cmd_get; + std::vector vec_cmd_set_true; + std::vector vec_cmd_set_false; std::vector vec_option; std::vector vec_opcision; std::ifstream file(filename); @@ -10,15 +13,27 @@ std::array, 2> read_csv(const std::string& filename) { getline(file, line); while (std::getline(file, line)) { std::stringstream stream(line); + std::string cmd_get; + std::string cmd_set_true; + std::string cmd_set_false; std::string option; std::string opcision; + getline(stream, cmd_get, delimiter); + getline(stream, cmd_set_true, delimiter); + getline(stream, cmd_set_false, delimiter); getline(stream, option, delimiter); getline(stream, opcision, delimiter); + vec_cmd_get.push_back(cmd_get); + vec_cmd_set_true.push_back(cmd_set_true); + vec_cmd_set_false.push_back(cmd_set_false); vec_option.push_back(option); vec_opcision.push_back(opcision); } - array_vectors[0] = vec_option; - array_vectors[1] = vec_opcision; + array_vectors[0] = vec_cmd_get; + array_vectors[1] = vec_cmd_set_true; + array_vectors[2] = vec_cmd_set_false; + array_vectors[3] = vec_option; + array_vectors[4] = vec_opcision; return array_vectors; } diff --git a/source/util.h b/source/util.h index 10ba8ce..e7c6db1 100644 --- a/source/util.h +++ b/source/util.h @@ -9,5 +9,5 @@ -std::array, 2> read_csv(const std::string& filename); +std::array, 5> read_csv(const std::string& filename); std::string call(std::string cmd); \ No newline at end of file From e369e800961811b78778295ee7db2553ceda8ad8 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 08:50:03 +0600 Subject: [PATCH 018/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20policy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- ...blinux.pkexec.ubl-settings-bootloader.exec.policy | 12 ++++++------ ubl-settings-bootloader.desktop | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) rename org.ublinux.pkexec.ubl-settings-bootloader.exec.policy => com.ublinux.pkexec.ubl-settings-bootloader.exec.policy (59%) diff --git a/Makefile b/Makefile index 5653eca..fc5b27c 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ install: check uninstall # @install -Dm644 -t /usr/share/icons/hicolor/scalable/apps/ ${PKGNAME}.svg @install -Dm755 -t /usr/bin/ ${CMAKE_BUILD_DIR}/${PKGNAME} @install -Dm644 -t /usr/share/applications/ ${PKGNAME}.desktop - @install -Dm644 -t /usr/share/polkit-1/actions/ org.ublinux.pkexec.${PKGNAME}.exec.policy + @install -Dm644 -t /usr/share/polkit-1/actions/ com.ublinux.pkexec.${PKGNAME}.exec.policy @install -dm755 /usr/share/${PKGNAME}/{ui,css,images} @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade @install -Dm644 -t /usr/share/${PKGNAME}/css/ style.css diff --git a/org.ublinux.pkexec.ubl-settings-bootloader.exec.policy b/com.ublinux.pkexec.ubl-settings-bootloader.exec.policy similarity index 59% rename from org.ublinux.pkexec.ubl-settings-bootloader.exec.policy rename to com.ublinux.pkexec.ubl-settings-bootloader.exec.policy index 3664113..fd07536 100644 --- a/org.ublinux.pkexec.ubl-settings-bootloader.exec.policy +++ b/com.ublinux.pkexec.ubl-settings-bootloader.exec.policy @@ -7,17 +7,17 @@ UBLinux https://ublinux.ru - - Run "ublexec" as root - Запус "Выполнить" с правами root - Authentication is required to run ublexec - Требуется авторизация для запуска "Выполнить" с правами root + + Run "ubl-settings-bootloader" as root + Запус "Загрузка системы" с правами root + Authentication is required to run "ubl-settings-bootloader" + Требуется авторизация для запуска "Загрузка системы" с правами root auth_admin auth_admin auth_admin - /usr/bin/ublexec + /usr/bin/ubl-settings-bootloader true diff --git a/ubl-settings-bootloader.desktop b/ubl-settings-bootloader.desktop index 4499946..05851e4 100644 --- a/ubl-settings-bootloader.desktop +++ b/ubl-settings-bootloader.desktop @@ -7,7 +7,7 @@ GenericName[ru]=Загрузчик Comment=ubl-settings-bootloader Comment[ru]=Загрузчик Type=Application -Exec=ubl-settings-bootloader +Exec=pkexec ubl-settings-bootloader Icon=ubl-settings-bootloader Terminal=false X-XfcePluggable=true From 306e00b7764a25aab2d5126217b464d8ee1264e1 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 09:20:39 +0600 Subject: [PATCH 019/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20logo-background.png?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 +- bg_top.png => logo-background.png | Bin source/ubl-settings-bootloader.cc | 22 +++-- source/ubl-settings-bootloader.h | 3 + source/ubl-util-standard.c | 25 ++++-- style.css | 89 ------------------- ubl-settings-bootloader.css | 143 ++++++++++++++++++++++++++++++ ubl-settings-bootloader.glade | 91 +++++++++++-------- 8 files changed, 237 insertions(+), 140 deletions(-) rename bg_top.png => logo-background.png (100%) delete mode 100644 style.css create mode 100644 ubl-settings-bootloader.css diff --git a/Makefile b/Makefile index fc5b27c..226c241 100644 --- a/Makefile +++ b/Makefile @@ -111,8 +111,8 @@ install: check uninstall @install -Dm644 -t /usr/share/polkit-1/actions/ com.ublinux.pkexec.${PKGNAME}.exec.policy @install -dm755 /usr/share/${PKGNAME}/{ui,css,images} @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade - @install -Dm644 -t /usr/share/${PKGNAME}/css/ style.css - @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png + @install -Dm644 -t /usr/share/${PKGNAME}/css/ ubl-settings-bootloader.css + @install -Dm644 -t /usr/share/${PKGNAME}/images/ logo-background.png # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv diff --git a/bg_top.png b/logo-background.png similarity index 100% rename from bg_top.png rename to logo-background.png diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index c741732..093418c 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -4,9 +4,10 @@ using namespace std; string path_app = "/usr/bin/"; string path_glade= "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade"; -string path_css = "/usr/share/ubl-settings-bootloader/css/style.css"; +string path_css = "/usr/share/ubl-settings-bootloader/css/ubl-settings-bootloader.css"; string app_name = "ubl-settings-bootloader"; string path_resources = "/usr/share/ubl-settings-bootloader"; +const string path_img_head_background = "/usr/share/ubl-settings-bootloader/images/logo-background.png"; int socket_ext_id_I = 0; int socket_trd_id_I = 0; @@ -70,7 +71,9 @@ void MainWindow::settings(){ this->get_builder(); this->localization(); this->add_CSS(); - + Gtk::Widget *boxWidget; + builder->get_widget("boxColor", boxWidget); + overHead->add_overlay(*boxWidget); btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { @@ -215,6 +218,8 @@ void MainWindow::get_builder(){ builder->get_widget("treeViewKernel", treeViewKernel); builder->get_widget("treeViewOTT", treeViewOTT); builder->get_widget("treeViewIPT", treeViewIPT); + builder->get_widget("imgBG", imgBG); + builder->get_widget("overHead", overHead); } void MainWindow::localization(){ @@ -427,10 +432,15 @@ void MainWindow::add_CSS(){ Glib::RefPtr styleContext = Gtk::StyleContext::create(); Glib::RefPtr screen = Gdk::Screen::get_default();//get default screen styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application - Glib::RefPtr context_box = boxColor->get_style_context(); - Glib::RefPtr context_lbl_head = lblInfoHead->get_style_context(); - context_box->add_class("cssboxColor1"); - context_lbl_head->add_class("textHead"); + Glib::RefPtr lblInfoHead_css = lblInfoHead->get_style_context(); + Glib::RefPtr boxButton_css = boxButton->get_style_context(); + Glib::RefPtr boxSave_css = boxSave->get_style_context(); + imgBG->set(path_img_head_background); + if (socket_trd_id_I == 0 && socket_ext_id_I == 0){ + boxButton_css->add_class("bkim_no_plug"); + boxSave_css->add_class("bkim_no_plug"); + } + lblInfoHead_css->add_class("textHead"); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 5dc222b..e2e8f66 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -21,6 +21,7 @@ extern string path_glade; extern string path_css; extern int socket_ext_id_I; extern int socket_trd_id_I; +extern const string path_img_head_background; void me_thread(string cmd); class CmdArgParser : public Glib::OptionGroup { @@ -89,6 +90,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeView *treeViewKernel; Gtk::TreeView *treeViewIPT; Gtk::TreeView *treeViewOTT; + Gtk::Image *imgBG; + Gtk::Overlay *overHead; Glib::RefPtr list_store_kernel; Glib::RefPtr list_store_IPT; diff --git a/source/ubl-util-standard.c b/source/ubl-util-standard.c index f922043..3b753b1 100644 --- a/source/ubl-util-standard.c +++ b/source/ubl-util-standard.c @@ -44,6 +44,14 @@ inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, in if (left_plug_id>0&&LeftWidget){ GtkWidget *plug=gtk_plug_new(left_plug_id); GtkWidget *toplug=GTK_WIDGET(LeftWidget->gobj()); + {GdkScreen *screen = gtk_widget_get_screen(plug); + gtk_widget_set_app_paintable(plug,TRUE); + GdkVisual *colormap = gdk_screen_get_rgba_visual(screen); + gtk_widget_set_visual(plug, colormap);} + {GdkScreen *screen = gtk_widget_get_screen(toplug); + gtk_widget_set_app_paintable(toplug,TRUE); + GdkVisual *colormap = gdk_screen_get_rgba_visual(screen); + gtk_widget_set_visual(toplug, colormap);} if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ g_object_ref(G_OBJECT(toplug)); GtkWidget *parent=gtk_widget_get_parent(toplug); @@ -52,13 +60,21 @@ inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, in } else gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); gtk_widget_show(GTK_WIDGET(plug)); - gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkimButtonPlug"); - gtk_style_context_add_class(gtk_widget_get_style_context(plug),"noborder"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkim"); + gtk_style_context_add_class(gtk_widget_get_style_context(toplug),"bkim"); gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar"); } if (right_plug_id>0&&RightWidget){ GtkWidget *plug=gtk_plug_new(right_plug_id); GtkWidget *toplug=GTK_WIDGET(RightWidget->gobj()); + {GdkScreen *screen = gtk_widget_get_screen(plug); + gtk_widget_set_app_paintable(plug,TRUE); + GdkVisual *colormap = gdk_screen_get_rgba_visual(screen); + gtk_widget_set_visual(plug, colormap);} + {GdkScreen *screen = gtk_widget_get_screen(toplug); + gtk_widget_set_app_paintable(toplug,TRUE); + GdkVisual *colormap = gdk_screen_get_rgba_visual(screen); + gtk_widget_set_visual(toplug, colormap);} if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ g_object_ref(G_OBJECT(toplug)); GtkWidget *parent=gtk_widget_get_parent(toplug); @@ -67,10 +83,9 @@ inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, in } else gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); gtk_widget_show(GTK_WIDGET(plug)); - gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkimButtonPlug"); - gtk_style_context_add_class(gtk_widget_get_style_context(plug),"noborder"); + gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkim"); + gtk_style_context_add_class(gtk_widget_get_style_context(toplug),"bkim"); gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar"); - } } #endif \ No newline at end of file diff --git a/style.css b/style.css deleted file mode 100644 index 3fdf619..0000000 --- a/style.css +++ /dev/null @@ -1,89 +0,0 @@ -.boxInfoMessError{ - background-color: #ea9999; -} -.cssboxColor1{ - background: url("/usr/share/ubl-settings-datetime/images/bg_top.png") no-repeat; -} -.boxInfoMessOK{ - background-color: #f3f0ac; -} -.textHead{ - text-shadow: 1px 1px #ffffff; -} -.textHeaderBar{ - font-weight: bold; -} -.menuitemtop *{ - margin:2px 2px 0 2px; - padding: 5px 10px 3px 5px; -} -.menuitemmiddle *{ - margin:0 2px 0 2px; - padding: 3px 10px 3px 5px; -} -.menuitembottom *{ - margin:0 2px 2px 2px; - padding: 3px 10px 5px 5px; -} -.menuitemtop:hover { - border-radius:3px; - background:@theme_bg_color; -} -.menuitemmiddle:hover { - border-radius:3px; - background:@theme_bg_color; -} -.menuitembottom:hover { - border-radius:3px; - background:@theme_bg_color; - -} -.menuitemtop:hover* { - border-radius:3px; - margin:2px 2px 0 2px; - padding: 5px 10px 3px 5px; - background:@theme_selected_bg_color; - border-color:transparent; -} -.menuitemmiddle:hover* { - border-radius:3px; - margin:0 2px 0 2px; - padding: 3px 10px 3px 5px; - background:@theme_selected_bg_color; - border-color:transparent; -} -.menuitembottom:hover* { - border-radius:3px; - margin:0 2px 2px 2px; - padding: 3px 10px 5px 5px; - background:@theme_selected_bg_color; - border-color:transparent; -} -.menuitembottom{ - margin-top:0px; -} -.menuitemmiddle{ - margin-top:0px; - margin-bottom:0px; -} - -.menuitemtop{ - margin-bottom:0px; -} - -.bkimHeadBar{ - opacity:1.0; -} - -.bkimButton{ - background-color: transparent; - opacity:1.0; -} -.bkimButtonPlug{ - background-color: transparent; - color: rgb(0, 0, 0); - opacity:1.0; -} -.noborder{ - border:none; -} \ No newline at end of file diff --git a/ubl-settings-bootloader.css b/ubl-settings-bootloader.css new file mode 100644 index 0000000..b762407 --- /dev/null +++ b/ubl-settings-bootloader.css @@ -0,0 +1,143 @@ +.textHead{ + text-shadow: 2px 2px @theme_bg_color; + color: @theme_text_color; +} +.bannerbackground { + background-color: #404040; +} +.textHead{ + text-shadow: 1px 1px #ffffff; +} +.view_app { + background-color: @theme_bg_color; +} +.view_app.view.cell:selected { + background-color:@theme_selected_bg_color; + color:@theme_selected_text_color; + transition: 10ms ease-out; + border-radius: 3px; +} +#GnomeIcon{ + border-style:solid; + border-bottom-width: 1px; + border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%); + border-image-slice: 1; +} + +#SepIcon{ + background-color: alpha(@theme_text_color, 0.6); +} + +#iconlabel { + font-size:14px; + font-weight: bold; + +} +.roundborder * { + border-width:0px; + border-radius:5px; +} +.noborder { + border: none; +} +.menu:hover { + border-color:alpha(@theme_text_color, 0.01); +} +.menu { + border-color:alpha(@theme_text_color, 0.01); +} +.menu:hover >* { + border-color:alpha(@theme_text_color, 0.01); +} +.menuitembottom{ + margin-top:0px; + margin-bottom:3px; +} +.menuitemmiddle{ + margin-top:0px; + margin-bottom:0px; +} + +.menuitemtop{ + margin-bottom:0px; +} +.menuitemtop *{ + margin:2px 2px 0 2px; + padding: 5px 10px 3px 5px; +} +.menuitemmiddle *{ + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; +} +.menuitembottom *{ + margin:0 2px 2px 2px; + padding: 3px 10px 5px 5px; +} +.menuitemtop:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; +} +.menuitemmiddle:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; +} +.menuitembottom:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + +} +.menuitemtop:hover* { + margin:2px 2px 0 2px; + padding: 5px 10px 3px 5px; + background:@theme_selected_bg_color; + border-radius:2px; +} +.menuitemmiddle:hover* { + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; + background:@theme_selected_bg_color; + border-radius:2px; +} +.menuitembottom:hover* { + margin:0 2px 2px 2px; + padding: 3px 10px 5px 5px; + background:@theme_selected_bg_color; + border-radius:2px; +} + +.workingbg, #workingbg { + background-color:@theme_base_color; +} +.workingbg.view.cell:selected { + background-color:@theme_selected_bg_color; +} +.workingbg.view.cell:hover { + background-color:darker(@theme_selected_bg_color); + color:@theme_selected_text_color; + border-radius:3px; +} +.bkim { + transition: 200ms ease-out; + background-image: none; +} +.noborder{ +border:none; +} + +.bkim{ +opacity:0.99; +border:none; +} + +.bkim_no_plug{ +background-color: transparent; +opacity:0.99; +} + + diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index ad6223a..51737be 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1,5 +1,5 @@ - + @@ -49,6 +49,54 @@ + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ublexec + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + True False @@ -201,51 +249,18 @@ - + True False - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - ublexec - - - False - True - 0 - - - - + + 81 True False start - 5 - 5 - 5 - 5 - 6 - 6 - Running applications as a user with a -specified priority - - - - - - True - True - 1 + -1 From 0b36495b18c58b6adc865e4181081cf286521d95 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 09:48:25 +0600 Subject: [PATCH 020/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20--help?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 6 +--- source/main.cc | 46 ++++++++++++++++++++++++------- source/ubl-settings-bootloader.cc | 14 ++++++++-- source/ubl-settings-bootloader.h | 4 ++- ubl-settings-bootloader_ru.po | 16 +++++++++++ 5 files changed, 68 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 226c241..fe35571 100644 --- a/Makefile +++ b/Makefile @@ -20,11 +20,7 @@ all: init build init: @echo "Initialize ..."; \ - version="$$(cat VERSION.md)"; \ - version=$${version:8}; \ - search="s/string version_application.*$&"; \ - replace="string version_application = \"$${version}\";"; \ - sed -i -e "$$search/$$replace/gi" source/ubl-settings-bootloader.h; \ +# sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-bootloader.cc; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: diff --git a/source/main.cc b/source/main.cc index 3ebb17f..d73c089 100644 --- a/source/main.cc +++ b/source/main.cc @@ -1,22 +1,23 @@ #include "ubl-settings-bootloader.h" -int main(int argc, char** argv) -{ + +void pars_flag(int index_start, int argc, char* argv[]); + +int main(int argc, char** argv) { + string str_argv= ""; string str_cmd_argv = ""; for (int i=1; i 1){ + str_argv = argv[1]; } - auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug"); - auto builder = Gtk::Builder::create_from_file(path_glade); bindtextdomain("ubl-settings-bootloader", "/usr/share/locale/"); bind_textdomain_codeset("ubl-settings-bootloader", "UTF-8"); textdomain("ubl-settings-bootloader"); - if (argc!=1){ + if (str_argv.find("--socket-id") != std::string::npos) { + auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug"); + auto builder = Gtk::Builder::create_from_file(path_glade); Glib::init(); setlocale(LC_ALL, ""); Glib::OptionContext context; @@ -39,7 +40,11 @@ int main(int argc, char** argv) app->run(plug); return 0; } - else { + else if (str_argv.find("-") != std::string::npos || argc == 1) { + int len_argv = 1; + auto app = Gtk::Application::create(len_argv, argv, "org.gtkmm.example.plug"); + auto builder = Gtk::Builder::create_from_file(path_glade); + pars_flag(1, argc, argv); MainWindow* wnd = nullptr; builder->get_widget_derived("window", wnd); auto r = app->run(*wnd); @@ -48,3 +53,24 @@ int main(int argc, char** argv) } } +void pars_flag(int index_start, int argc, char* argv[]) { + string str_argv = ""; + for (int i = index_start; iadd_class("textHead"); } +void help() { + string version = string(gettext("ubl-settings-datetime version: ")) + version_application + "\n"; + cout << version.c_str(); + string help; + help = "GTK settings bootloader for UBLinux\n\n" + "Usage: ubl-settings-bootloader [OPTIONS...]\n" + "Options:\n" + " -h, --help Show this help\n" + " -V, --version Show package version\n"; + cout << gettext(help.c_str()); - - +} diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index e2e8f66..4ec5629 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -22,6 +22,7 @@ extern string path_css; extern int socket_ext_id_I; extern int socket_trd_id_I; extern const string path_img_head_background; +extern string version_application; void me_thread(string cmd); class CmdArgParser : public Glib::OptionGroup { @@ -104,7 +105,6 @@ class MainWindow : public Gtk::ApplicationWindow { int heigh; int screen_width; int screen_hight; - string version_application = "1.0"; int index_error = 0; string str_cmd_error = ""; template @@ -155,4 +155,6 @@ private: Gtk::Widget *parent; }; +void help(); + diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index f60bd05..997f1d4 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -16,6 +16,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "ubl-settings-bootloader version: " +msgstr "ubl-settings-bootloader версия: " + msgid "Active" msgstr "Активно" @@ -181,3 +184,16 @@ msgstr "Успешно записана локальная конфигурац msgid "The program must be run as root" msgstr "Программа должна быть запущена с правами \nсуперпользователя!" +msgid "" +"GTK settings bootloader for UBLinux\n\n" +"Usage: ubl-settings-bootloader [OPTIONS...]\n" +"Options:\n" +" -h, --help Show this help\n" +" -V, --version Show package version\n" +msgstr "" +"GTK-утилита настройки загрузчика для UBLinux\n" +"\n" +"Использование: ubl-settings-bootloader [Параметры приложения...]\n" +"Параметры приложения:\n" +" -h, --help\t Показать параметры справки\n" +" -V, --version\t Показать версию пакета\n" From 39289d8c279bd1227275c61e6218f0e4b0ff80a8 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 10:17:27 +0600 Subject: [PATCH 021/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 1 + ubl-settings-bootloader_ru.po | 63 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 84ad679..959c740 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -257,6 +257,7 @@ void MainWindow::localization(){ btnLoadLocal->set_label(_("Load local configuration")); btnSave->set_label(_("Save")); btnLoad->set_label(_("Load")); + this->set_title(_("ubl-settings-bootloader")); } diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 997f1d4..84ee3a7 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -15,6 +15,69 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" + +msgid "ubl-settings-bootloader" +msgstr "Загрузка системы" + +msgid "Downloading without text messages" +msgstr "Загрузка без текстовых сообщений" + +msgid "Show welcome window" +msgstr "Показывать окно приветствия" + +msgid "Disable Plymouth" +msgstr "Отключить Plymouth" + +msgid "Disable ACPI" +msgstr "Отключить ACPI" + +msgid "Disable APIC" +msgstr "Отключить APIC" + +msgid "Disable local APIC" +msgstr "Отключить локальный APIC" + +msgid "Single User Mode" +msgstr "Режим одного пользователя" + +msgid "Disable kernel selection and loading of video drivers" +msgstr "Отключить выбор и загрузку ядром драйверов видео" + +msgid "Disable GPU power management" +msgstr "Отключить управление питанием графического процессора" + +msgid "Maximum performance, power management" +msgstr "Максимальная производительность, управление питанием" + +msgid "Forced selection of an Intel sound device driver" +msgstr "Принудительный выбор драйвера звукового устройства от Intel" + +msgid "Prevents the processor from going into a deep sleep state" +msgstr "Предотвращает переход процессора в состояние глубокого сна" + +msgid "Eliminates flickering laptop display on Ultra Voltage processors" +msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" + +msgid "PC BIOS & EFI console" +msgstr "PC BIOS & консоль EFI" + +msgid "Serial terminal" +msgstr "Последовательный терминал" + +msgid "Open Firmware Console" +msgstr "Консоль Open Firmware" + +msgid "PC AT Keyboard (Coreboot)" +msgstr "Клавиатура PC AT (Coreboot)" + +msgid "USB Keyboard (HID Boot protocol)" +msgstr "Клавиатура USB Keyboard (протокол HID Boot)" + +msgid "Output in graphical mode" +msgstr "Вывод в графическом режиме" + +msgid "VGA text output (Coreboot)" +msgstr "Текстовый вывод VGA (Coreboot)" msgid "ubl-settings-bootloader version: " msgstr "ubl-settings-bootloader версия: " From 08f8d9fb36a155ff1351b00d541be7cd2495a182 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 10:46:53 +0600 Subject: [PATCH 022/110] =?UTF-8?q?=D0=9F=D0=BE=D0=B2=D0=B5=D1=88=D0=B0?= =?UTF-8?q?=D0=BB=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=81=D0=B5=20TreeView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 32 ++++++++++++++++++++++++------- source/ubl-settings-bootloader.h | 7 ++++--- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 959c740..68b7e32 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -111,9 +111,27 @@ void MainWindow::fill_in_view() { } -void MainWindow::item_selected(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) +void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { - const auto iter = list_store_kernel->get_iter(path); + + template_item_selected(path, list_store_kernel); + +} + +void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) +{ + template_item_selected(path, list_store_OTT); + +} +void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) +{ + template_item_selected(path, list_store_IPT); + +} + +void MainWindow::template_item_selected(const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { + + const auto iter = list_store->get_iter(path); if(iter) { const auto row = *iter; Glib::ustring cmd; @@ -132,9 +150,6 @@ void MainWindow::item_selected(const Gtk::TreeModel::Path& path, const Gtk::Tree } } -void MainWindow::item_selected_row_changed(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &) { - cout << "item selected" << endl; -} void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { std::array, 5> arr_view = read_csv(path_resources + "/" + file_name); @@ -273,8 +288,11 @@ void MainWindow::event(){ //TreeView_TreeSelection = treeViewKernel->get_selection(); //TreeView_TreeSelection->signal_changed().connect(sigc::mem_fun(treeViewKernel, &MainWindow::item_selected) ); Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); - treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected)); - + treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); + Glib::RefPtr treeViewIPTModel = treeViewIPT->get_model(); + treeViewIPTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_IPT)); + Glib::RefPtr treeViewOTTModel = treeViewOTT->get_model(); + treeViewOTTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_OTT)); } void MainWindow::save_global_local_cfg(){ diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 4ec5629..f422f84 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -140,9 +140,10 @@ class MainWindow : public Gtk::ApplicationWindow { void info_warning_error(int mess); int check_root(); void fill_in_view(); - void item_selected(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); - void item_selected_row_changed(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &); - + void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); + void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); + void item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); + void template_item_selected(const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store); }; class SettingsPlug : public Gtk::Plug{ From ede3f7b0030f436683e96029d35607e00f35db31 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 12:57:12 +0600 Subject: [PATCH 023/110] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D1=82=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BF=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81?= =?UTF-8?q?=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 122 +++++++++++++++++++++++++----- source/ubl-settings-bootloader.h | 23 +++++- ubl-settings-bootloader.css | 6 ++ ubl-settings-bootloader.glade | 10 +-- ubl-settings-bootloader_ru.po | 6 ++ 5 files changed, 137 insertions(+), 30 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 68b7e32..7604bf3 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -79,10 +79,13 @@ void MainWindow::settings(){ ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { this->fill_in_view(); + this->download_local_cfg(); + this->download_globl_cfg(); this->event(); } else{ + this->event(); boxWidgetAll->set_sensitive(false); btnLoad->set_sensitive(false); boxSave->set_sensitive(false); @@ -111,26 +114,39 @@ void MainWindow::fill_in_view() { } -void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) -{ - - template_item_selected(path, list_store_kernel); - +void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { + auto selection_IPT = treeViewIPT->get_selection(); + auto selection_OTT = treeViewOTT->get_selection(); + selection_IPT->unselect_all(); + selection_OTT->unselect_all(); + template_item_selected(map_cmd_selection_kernel, path, list_store_kernel);\ + string str_flags = this->dynamic_update_entry(map_cmd_selection_kernel,map_global_cmd_selection_kernel,map_local_cmd_selection_kernel); + entryKernel->set_text(str_flags); } -void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) -{ - template_item_selected(path, list_store_OTT); +void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { + auto selection_kernel = treeViewKernel->get_selection(); + auto selection_IPT = treeViewIPT->get_selection(); + selection_kernel->unselect_all(); + selection_IPT->unselect_all(); + template_item_selected(map_cmd_selection_OTT , path, list_store_OTT); + string str_flags = this->dynamic_update_entry(map_cmd_selection_OTT, map_global_cmd_selection_OTT,map_local_cmd_selection_OTT); + entryOTT->set_text(str_flags); + } -void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) -{ - template_item_selected(path, list_store_IPT); +void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { + auto selection_kernel = treeViewKernel->get_selection(); + auto selection_OTT = treeViewOTT->get_selection(); + selection_kernel->unselect_all(); + selection_OTT->unselect_all(); + template_item_selected(map_cmd_selection_IPT , path, list_store_IPT); + string str_flags = this->dynamic_update_entry(map_cmd_selection_IPT, map_global_cmd_selection_IPT,map_local_cmd_selection_IPT); + entryIPT->set_text(str_flags); } -void MainWindow::template_item_selected(const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { - +void MainWindow::template_item_selected(std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { const auto iter = list_store->get_iter(path); if(iter) { const auto row = *iter; @@ -146,10 +162,28 @@ void MainWindow::template_item_selected(const Gtk::TreeModel::Path& path, Glib:: } Glib::ustring name = row[m_columns.name]; cout << cmd << " " << name << endl; - cmd_selection_global[name] = cmd; + map_view[name] = cmd; } } +string MainWindow::dynamic_update_entry(std::map &map_view, std::map &map_global_view, std::map &map_local_view) { + string keys = ""; + for(auto &it: map_view) { + string key = it.first; + if (flag_load == true && map_global_view.find(key) != map_global_view.end()) { + if (map_global_view[key] != map_view[key]){ + keys += string(key) + ", "; + } + } + else if (flag_load == false && map_local_view.find(key) != map_local_view.end()) { + if (map_local_view[key] != map_view[key]){ + keys += string(key) + ", "; + } + } + } + return keys; +} + void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { std::array, 5> arr_view = read_csv(path_resources + "/" + file_name); @@ -208,8 +242,8 @@ void MainWindow::get_builder(){ builder->get_widget("spbSecond", spbSecond); builder->get_widget("entryKernel", entryKernel); - builder->get_widget("entryIT", entryIT); - builder->get_widget("entryOT", entryOT); + builder->get_widget("entryIPT", entryIPT); + builder->get_widget("entryOTT", entryOTT); builder->get_widget("boxColor", boxColor); builder->get_widget("boxWidgetAll", boxWidgetAll); @@ -295,24 +329,70 @@ void MainWindow::event(){ treeViewOTTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_OTT)); } -void MainWindow::save_global_local_cfg(){ +void MainWindow::save_global_local_cfg() { + if (flag_save_global == false) { + flag_save_all = true; + } + else if (flag_save_local == false) { + flag_save_all = true; + } + else{ + info_status_app("boxInfoMessOK"); + lblWarning->set_text(gettext("Nothing to save!")); + } + info_warning_error(4); + } -void MainWindow::save_global_cfg(){ +void MainWindow::save_global_cfg() { + if (flag_save_global == false) { + flag_save_global = true; + } + else{ + info_status_app("boxInfoMessOK"); + lblWarning->set_text(gettext("Nothing to save!")); + } info_warning_error(3); + + } -void MainWindow::save_local_cfg(){ +void MainWindow::save_local_cfg() { + if (flag_save_local == false) { + flag_save_local = true; + } + else{ + info_status_app("boxInfoMessOK"); + lblWarning->set_text(gettext("Nothing to save!")); + } + info_warning_error(2); + } -void MainWindow::download_globl_cfg(){ +void MainWindow::download_globl_cfg() { + entryKernel->set_text(""); + entryOTT->set_text(""); + entryIPT->set_text(""); + + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + flag_load = true; info_warning_error(1); } -void MainWindow::download_local_cfg(){ +void MainWindow::download_local_cfg() { + entryKernel->set_text(""); + entryOTT->set_text(""); + entryIPT->set_text(""); + flag_load = false; + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; info_warning_error(0); + } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index f422f84..84f95b4 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -67,8 +67,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::CheckButton *chbLoadVariantSelectionTimer; Gtk::CheckButton *chbLastSelectionWillBecome; Gtk::Entry *entryKernel; - Gtk::Entry *entryIT; - Gtk::Entry *entryOT; + Gtk::Entry *entryIPT; + Gtk::Entry *entryOTT; Gtk::Box *boxColor; Gtk::AboutDialog *aboutWindows; Gtk::MenuItem *btnAbout; @@ -100,7 +100,21 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; Gtk::TreeModel::Row row_OTT; - std::map cmd_selection_global; + std::map map_cmd_selection_kernel; + std::map map_cmd_selection_IPT; + std::map map_cmd_selection_OTT; + + std::map map_global_cmd_selection_kernel; + std::map map_global_cmd_selection_IPT; + std::map map_global_cmd_selection_OTT; + + std::map map_local_cmd_selection_kernel; + std::map map_local_cmd_selection_IPT; + std::map map_local_cmd_selection_OTT; + bool flag_load = false; + bool flag_save_all = false; + bool flag_save_global = false; + bool flag_save_local = false; int width; int heigh; int screen_width; @@ -140,10 +154,11 @@ class MainWindow : public Gtk::ApplicationWindow { void info_warning_error(int mess); int check_root(); void fill_in_view(); + string dynamic_update_entry(std::map &map_view, std::map &map_global_view, std::map &map_local_view) ; void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); - void template_item_selected(const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store); + void template_item_selected(std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store); }; class SettingsPlug : public Gtk::Plug{ diff --git a/ubl-settings-bootloader.css b/ubl-settings-bootloader.css index b762407..ee3ba98 100644 --- a/ubl-settings-bootloader.css +++ b/ubl-settings-bootloader.css @@ -2,6 +2,12 @@ text-shadow: 2px 2px @theme_bg_color; color: @theme_text_color; } +.boxInfoMessError{ + background-color: #ea9999; +} +.boxInfoMessOK{ + background-color: #f3f0ac; +} .bannerbackground { background-color: #404040; } diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 51737be..6efc9f5 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -475,7 +475,7 @@ specified priority vertical - 100 + 140 True True in @@ -590,7 +590,7 @@ specified priority vertical - 100 + 140 True True in @@ -639,7 +639,7 @@ specified priority - + True True 5 @@ -704,7 +704,7 @@ specified priority vertical - 100 + 140 True True in @@ -753,7 +753,7 @@ specified priority - + True True 5 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 84ee3a7..6aaed9d 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -169,6 +169,9 @@ msgstr "intel_idle.max_cstate=4 (Устраняет мерцание диспл msgid "Command line parameters:" msgstr "Параметры командной строки:" +msgid "Nothing to save!" +msgstr "Нечего сохранять!" + msgid "serial (Serial terminal)" msgstr "serial (Последовательный терминал)" @@ -244,6 +247,9 @@ msgstr "Успешно записана глобальная конфигура msgid "Local configuration successfully written" msgstr "Успешно записана локальная конфигурация" +msgid "Successfully saved local and global configuration" +msgstr "Успешно записаны локальная и глобальная конфигурация" + msgid "The program must be run as root" msgstr "Программа должна быть запущена с правами \nсуперпользователя!" From e214290f27892e90834650d448314ec92470b6a0 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 14:56:59 +0600 Subject: [PATCH 024/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D0=B2=20csv=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 6 +-- source/util.cc | 70 +++++++++++++++++++++++-------- source/util.h | 4 +- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 7604bf3..a0916c2 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -109,11 +109,11 @@ void MainWindow::fill_in_view() { this->view_add_colums(*treeViewKernel); this->view_add_colums(*treeViewIPT); this->view_add_colums(*treeViewOTT); - - + // auto iter = list_store_kernel->prepend(); + // row_kernel[m_columns.cmd_set_true]; + // cout << cmd << endl; } - void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { auto selection_IPT = treeViewIPT->get_selection(); auto selection_OTT = treeViewOTT->get_selection(); diff --git a/source/util.cc b/source/util.cc index 501cb80..95a9936 100644 --- a/source/util.cc +++ b/source/util.cc @@ -1,28 +1,53 @@ #include "util.h" -std::array, 5> read_csv(const std::string& filename) { - std::array, 5> array_vectors; - std::vector vec_cmd_get; - std::vector vec_cmd_set_true; - std::vector vec_cmd_set_false; - std::vector vec_option; - std::vector vec_opcision; - std::ifstream file(filename); - std::string line; + +array, 5> read_csv(const string& filename) { + array, 5> array_vectors; + vector vec_cmd_get; + vector vec_cmd_set_true; + vector vec_cmd_set_false; + vector vec_option; + vector vec_opcision; + ifstream file(filename); + string line; char delimiter = ','; getline(file, line); - while (std::getline(file, line)) { - std::stringstream stream(line); - std::string cmd_get; - std::string cmd_set_true; - std::string cmd_set_false; - std::string option; - std::string opcision; + while (getline(file, line)) { + stringstream stream(line); + string cmd_get; + string cmd_set_true; + string cmd_set_false; + string option; + string opcision; getline(stream, cmd_get, delimiter); getline(stream, cmd_set_true, delimiter); getline(stream, cmd_set_false, delimiter); getline(stream, option, delimiter); - getline(stream, opcision, delimiter); + string line_local = stream.str(); + if (line_local.find("\"") != string::npos) { + string str_delimiter = "\""; + vector point = find_all(line_local, str_delimiter); + size_t len = point.size(); + if (len >= 2) { + int index_start = point[len-2]; + int index_end = point[len-1]; + opcision = line_local.substr(index_start, index_end); + index_end = opcision.find("\""); + if (opcision.find("\"") != string::npos) { + opcision.replace(index_end, opcision.length(), ""); + } + + } + else { + opcision = "error"; + } + + + } + else{ + getline(stream, opcision, delimiter); + } + vec_cmd_get.push_back(cmd_get); vec_cmd_set_true.push_back(cmd_set_true); vec_cmd_set_false.push_back(cmd_set_false); @@ -37,7 +62,7 @@ std::array, 5> read_csv(const std::string& filename) { return array_vectors; } -std::string call(std::string cmd) { +string call(string cmd) { FILE *fp; int status; char path[PATH_MAX] = {0}; @@ -53,4 +78,13 @@ std::string call(std::string cmd) { exit(1); } return path; +} +vector find_all(string &str_ntp, string substr) { + size_t index = 0; + vector sub_index; + while ((index = str_ntp.find(substr, index)) != std::string::npos) { + index += substr.length(); + sub_index.push_back(index); + } + return sub_index; } \ No newline at end of file diff --git a/source/util.h b/source/util.h index e7c6db1..c304296 100644 --- a/source/util.h +++ b/source/util.h @@ -6,8 +6,10 @@ #include #include #include +using namespace std; std::array, 5> read_csv(const std::string& filename); -std::string call(std::string cmd); \ No newline at end of file +std::string call(std::string cmd); +vector find_all(string &str_ntp, string substr); \ No newline at end of file From 7426a6016e0409de8d05fa104222822d7c6213dc Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 15:20:12 +0600 Subject: [PATCH 025/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20.pot=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- source/ubl-settings-bootloader.cc | 96 +++---- ubl-settings-bootloader.pot | 326 ++++++++++++++++++++++++ ubl-settings-bootloader_ru.po | 406 ++++++++++++++++++------------ 4 files changed, 617 insertions(+), 214 deletions(-) create mode 100644 ubl-settings-bootloader.pot diff --git a/.gitignore b/.gitignore index 46763c0..86196dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ ubl-settings-bootloader.glade~ test.cpp .vscode -ubl-settings-bootloader \ No newline at end of file +ubl-settings-bootloader +ubl-settings-bootloader_ru.po~ \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index a0916c2..d03570c 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -49,7 +49,7 @@ SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr build int MainWindow::check_root() { if (geteuid() != 0) { - //lblMessageSudo->set_text(_("The program must be run with \nsuperuser privileges!")); + //lblMessageSudo->set_text(gettext("The program must be run with \nsuperuser privileges!")); //mess_sudo->show(); return 1; } @@ -91,7 +91,7 @@ void MainWindow::settings(){ boxSave->set_sensitive(false); imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.warning.svg"); info_status_app("boxInfoMessError"); - lblWarning->set_text(_("The program must be run as root")); + lblWarning->set_text(gettext("The program must be run as root")); } } @@ -196,9 +196,9 @@ void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, } void MainWindow::view_add_colums(Gtk::TreeView &treeView) { - treeView.append_column_editable(_("Active"), m_columns.check_button); - treeView.append_column(_("Option"), m_columns.name); - treeView.append_column(_("Description"), m_columns.description); + treeView.append_column_editable(gettext("Active"), m_columns.check_button); + treeView.append_column(gettext("Option"), m_columns.name); + treeView.append_column(gettext("Description"), m_columns.description); } void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view , size_t index) { @@ -208,8 +208,8 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrtm_year; - string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); + string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); aboutWindows->set_copyright(str_authors); - aboutWindows->set_comments(_("ubl-settings-bootloader")); - aboutWindows->set_website(_("https://wiki.ublinux.com")); - aboutWindows->set_version(_(version_application.c_str())); - aboutWindows->set_website_label(_("Project Home Page")); - lblInfoHead->set_text(_("Configuring system boot parameters")); - lblHeaderName->set_text(_("ubl-settings-bootloader")); - aboutWindows->set_comments(_("Setting bootloader")); - aboutWindows->set_website_label(_("Project Home Page")); - lblInfoCommand->set_text(_("Command line parameters:")); - lblInfoCommand1->set_text(_("Command line parameters:")); - lblInfoCommand2->set_text(_("Command line parameters:")); - lblInfoDefaultDonw->set_text(_("Default download")); - lblInfoSeconds->set_text(_("Seconds")); - lblLoadMenu->set_text(_("Download menu")); - lblInfoInputTerminal->set_text(_("Input terminal")); - lblInfoOutputTerminal->set_text(_("Output terminal")); + aboutWindows->set_comments(gettext("ubl-settings-bootloader")); + aboutWindows->set_website(gettext("https://wiki.ublinux.com")); + aboutWindows->set_version(gettext(version_application.c_str())); + aboutWindows->set_website_label(gettext("Project Home Page")); + lblInfoHead->set_text(gettext("Configuring system boot parameters")); + lblHeaderName->set_text(gettext("ubl-settings-bootloader")); + aboutWindows->set_comments(gettext("Setting bootloader")); + aboutWindows->set_website_label(gettext("Project Home Page")); + lblInfoCommand->set_text(gettext("Command line parameters:")); + lblInfoCommand1->set_text(gettext("Command line parameters:")); + lblInfoCommand2->set_text(gettext("Command line parameters:")); + lblInfoDefaultDonw->set_text(gettext("Default download")); + lblInfoSeconds->set_text(gettext("Seconds")); + lblLoadMenu->set_text(gettext("Download menu")); + lblInfoInputTerminal->set_text(gettext("Input terminal")); + lblInfoOutputTerminal->set_text(gettext("Output terminal")); - chbLoadVariantSelectionTimer->set_label(_("Load variant selection timer")); - chbLastSelectionWillBecome->set_label(_("The last selection will become the default boot choice")); - btnSynopsis->set_label(_("Help")); - btnAbout->set_label(_("About")); - btnSaveLocalGlob->set_label(_("Save to global and local configuration")); - btnSaveLocal->set_label(_("Save local configuration")); - btnSaveGlob->set_label(_("Save global configuration")); - btnLoadGlob->set_label(_("Load global configuration")); - btnLoadLocal->set_label(_("Load local configuration")); - btnSave->set_label(_("Save")); - btnLoad->set_label(_("Load")); - this->set_title(_("ubl-settings-bootloader")); + chbLoadVariantSelectionTimer->set_label(gettext("Load variant selection timer")); + chbLastSelectionWillBecome->set_label(gettext("The last selection will become the default boot choice")); + btnSynopsis->set_label(gettext("Help")); + btnAbout->set_label(gettext("About")); + btnSaveLocalGlob->set_label(gettext("Save to global and local configuration")); + btnSaveLocal->set_label(gettext("Save local configuration")); + btnSaveGlob->set_label(gettext("Save global configuration")); + btnLoadGlob->set_label(gettext("Load global configuration")); + btnLoadLocal->set_label(gettext("Load local configuration")); + btnSave->set_label(gettext("Save")); + btnLoad->set_label(gettext("Load")); + this->set_title(gettext("ubl-settings-bootloader")); } @@ -397,7 +397,7 @@ void MainWindow::download_local_cfg() { void MainWindow::synopsis_show() { - string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; + string cmd = "xdg-open " + string(gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; wrapper_system(cmd, "&"); } @@ -424,23 +424,23 @@ void MainWindow::info_warning_error(int mess) { index_error = 0; string mess_error = ""; if (mess == 0) { - mess_error = string(_("Local configuration reading error")) + str_cmd_error; + mess_error = string(gettext("Local configuration reading error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 1) { - mess_error = string(_("Global configuration read error")) + str_cmd_error; + mess_error = string(gettext("Global configuration read error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 2) { - mess_error = string(_("Local configuration write error")) + str_cmd_error; + mess_error = string(gettext("Local configuration write error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 3) { - mess_error = string(_("Global configuration write error")) + str_cmd_error; + mess_error = string(gettext("Global configuration write error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 4) { - mess_error = string(_("Error saved local and global configuration")) + str_cmd_error; + mess_error = string(gettext("Error saved local and global configuration")) + str_cmd_error; lblWarning->set_text(mess_error); } str_cmd_error = ""; @@ -449,19 +449,19 @@ void MainWindow::info_warning_error(int mess) { info_status_app("boxInfoMessOK"); imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.checked.svg"); if (mess == 0) { - lblWarning->set_text(_("Local configuration downloaded successfully")); + lblWarning->set_text(gettext("Local configuration downloaded successfully")); } else if (mess == 1) { - lblWarning->set_text(_("Global configuration downloaded successfully")); + lblWarning->set_text(gettext("Global configuration downloaded successfully")); } else if (mess == 2) { - lblWarning->set_text(_("Local configuration successfully written")); + lblWarning->set_text(gettext("Local configuration successfully written")); } else if (mess == 3) { - lblWarning->set_text(_("Global configuration successfully written")); + lblWarning->set_text(gettext("Global configuration successfully written")); } else if (mess == 4) { - lblWarning->set_text(_("Successfully saved local and global configuration")); + lblWarning->set_text(gettext("Successfully saved local and global configuration")); } } } @@ -544,7 +544,7 @@ void MainWindow::add_CSS(){ } void help() { - string version = string(gettext("ubl-settings-datetime version: ")) + version_application + "\n"; + string version = string(gettext("ubl-settings-bootloader version: ")) + version_application + "\n"; cout << version.c_str(); string help; help = "GTK settings bootloader for UBLinux\n\n" diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot new file mode 100644 index 0000000..51c8e8e --- /dev/null +++ b/ubl-settings-bootloader.pot @@ -0,0 +1,326 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-27 15:17+0600\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/ubl-settings-bootloader.cc:301 +msgid "About" +msgstr "" + +#: source/ubl-settings-bootloader.cc:199 +msgid "Active" +msgstr "" + +#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 +#: source/ubl-settings-bootloader.cc:291 +msgid "Command line parameters:" +msgstr "" + +#: source/ubl-settings-bootloader.cc:285 +msgid "Configuring system boot parameters" +msgstr "" + +msgid "Configuring the boot loader settings" +msgstr "" + +#: source/ubl-settings-bootloader.cc:279 +msgid "Copyright © UBSoft LLC, 2022 - " +msgstr "" + +#: source/ubl-settings-bootloader.cc:292 +msgid "Default download" +msgstr "" + +#: source/ubl-settings-bootloader.cc:201 +msgid "Description" +msgstr "" + +msgid "Disable ACPI" +msgstr "" + +msgid "Disable APIC" +msgstr "" + +msgid "Disable GPU power management" +msgstr "" + +msgid "Disable Plymouth" +msgstr "" + +msgid "Disable kernel selection and loading of video drivers" +msgstr "" + +msgid "Disable local APIC" +msgstr "" + +#: source/ubl-settings-bootloader.cc:294 +msgid "Download menu" +msgstr "" + +msgid "Downloading without text messages" +msgstr "" + +msgid "Eliminates flickering laptop display on Ultra Voltage processors" +msgstr "" + +#: source/ubl-settings-bootloader.cc:443 +msgid "Error saved local and global configuration" +msgstr "" + +msgid "Forced selection of an Intel sound device driver" +msgstr "" + +msgid "" +"GTK settings bootloader for UBLinux\n" +"\n" +"Usage: ubl-settings-bootloader [OPTIONS...]\n" +"Options:\n" +" -h, --help\t Show this help\n" +" -V, --version\t Show package version\n" +msgstr "" + +#: source/ubl-settings-bootloader.cc:455 +msgid "Global configuration downloaded successfully" +msgstr "" + +#: source/ubl-settings-bootloader.cc:431 +msgid "Global configuration read error" +msgstr "" + +#: source/ubl-settings-bootloader.cc:461 +msgid "Global configuration successfully written" +msgstr "" + +#: source/ubl-settings-bootloader.cc:439 +msgid "Global configuration write error" +msgstr "" + +#: source/ubl-settings-bootloader.cc:300 +msgid "Help" +msgstr "" + +#: source/ubl-settings-bootloader.cc:295 +msgid "Input terminal" +msgstr "" + +#: source/ubl-settings-bootloader.cc:308 +msgid "Load" +msgstr "" + +#: source/ubl-settings-bootloader.cc:305 +msgid "Load global configuration" +msgstr "" + +#: source/ubl-settings-bootloader.cc:306 +msgid "Load local configuration" +msgstr "" + +#: source/ubl-settings-bootloader.cc:298 +msgid "Load variant selection timer" +msgstr "" + +#: source/ubl-settings-bootloader.cc:452 +msgid "Local configuration downloaded successfully" +msgstr "" + +#: source/ubl-settings-bootloader.cc:427 +msgid "Local configuration reading error" +msgstr "" + +#: source/ubl-settings-bootloader.cc:458 +msgid "Local configuration successfully written" +msgstr "" + +#: source/ubl-settings-bootloader.cc:435 +msgid "Local configuration write error" +msgstr "" + +msgid "Maximum performance, power management" +msgstr "" + +#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 +#: source/ubl-settings-bootloader.cc:367 +msgid "Nothing to save!" +msgstr "" + +msgid "Open Firmware Console" +msgstr "" + +#: source/ubl-settings-bootloader.cc:200 +msgid "Option" +msgstr "" + +msgid "Output in graphical mode" +msgstr "" + +#: source/ubl-settings-bootloader.cc:296 +msgid "Output terminal" +msgstr "" + +msgid "PC AT Keyboard (Coreboot)" +msgstr "" + +msgid "PC BIOS & EFI console" +msgstr "" + +msgid "Parameters passed to the kernel" +msgstr "" + +msgid "Prevents the processor from going into a deep sleep state" +msgstr "" + +#: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 +msgid "Project Home Page" +msgstr "" + +#: source/ubl-settings-bootloader.cc:307 +msgid "Save" +msgstr "" + +#: source/ubl-settings-bootloader.cc:304 +msgid "Save global configuration" +msgstr "" + +#: source/ubl-settings-bootloader.cc:303 +msgid "Save local configuration" +msgstr "" + +#: source/ubl-settings-bootloader.cc:302 +msgid "Save to global and local configuration" +msgstr "" + +#: source/ubl-settings-bootloader.cc:293 +msgid "Seconds" +msgstr "" + +msgid "Serial terminal" +msgstr "" + +#: source/ubl-settings-bootloader.cc:287 +msgid "Setting bootloader" +msgstr "" + +msgid "Show welcome window" +msgstr "" + +msgid "Single User Mode" +msgstr "" + +#: source/ubl-settings-bootloader.cc:464 +msgid "Successfully saved local and global configuration" +msgstr "" + +#: source/ubl-settings-bootloader.cc:299 +msgid "The last selection will become the default boot choice" +msgstr "" + +#: source/ubl-settings-bootloader.cc:94 +msgid "The program must be run as root" +msgstr "" + +msgid "UBConfig - Loading" +msgstr "" + +msgid "USB Keyboard (HID Boot protocol)" +msgstr "" + +msgid "VGA text output (Coreboot)" +msgstr "" + +msgid "acpi=off (Disable ACPI)" +msgstr "" + +msgid "ahci.mobile_jpm_policy=1 (Maximum performance, power management)" +msgstr "" + +msgid "apic (Disable APIC)" +msgstr "" + +msgid "at_keyboard (Keyboard PC AT (Coreboot))" +msgstr "" + +msgid "console (PC BIOS & console EFI)" +msgstr "" + +msgid "gfxterm (Output in graphical mode)" +msgstr "" + +#: source/ubl-settings-bootloader.cc:282 +msgid "https://wiki.ublinux.com" +msgstr "" + +#: source/ubl-settings-bootloader.cc:400 +msgid "" +"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +msgstr "" + +msgid "i915.enable_dc=0 (Disable GPU power management)" +msgstr "" + +msgid "" +"intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep " +"state)" +msgstr "" + +msgid "" +"intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors " +"Ultra Voltage)" +msgstr "" + +msgid "no plymouth (Disable Plymouth)" +msgstr "" + +msgid "nolapic (Disable local APIC)" +msgstr "" + +msgid "nomodeset (Disable kernel selection and loading of video drivers)" +msgstr "" + +msgid "ofconsole (Console Open Firmware)" +msgstr "" + +msgid "quiet (Downloading without text messages)" +msgstr "" + +msgid "serial (Serial terminal)" +msgstr "" + +msgid "single (Single User Mode)" +msgstr "" + +msgid "" +"snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver " +"from Intel)" +msgstr "" + +msgid "splash (Show welcome window)" +msgstr "" + +#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 +#: source/ubl-settings-bootloader.cc:309 +msgid "ubl-settings-bootloader" +msgstr "" + +#: source/ubl-settings-bootloader.cc:547 +msgid "ubl-settings-bootloader version: " +msgstr "" + +msgid "usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))" +msgstr "" + +msgid "vga_text (Text output VGA (Coreboot))" +msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 6aaed9d..613661a 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: ubl-settings-bootloader 1.0\n" -"Report-Msgid-Bugs-To: info@ublinux.ru\n" -"POT-Creation-Date: 2020-02-22 23:22+0600\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-27 15:17+0600\n" "PO-Revision-Date: 2020-02-22 23:28+0600\n" "Last-Translator: ublinux \n" "Language-Team: Russian - UBLinux Team \n" @@ -15,18 +15,38 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" - -msgid "ubl-settings-bootloader" -msgstr "Загрузка системы" -msgid "Downloading without text messages" -msgstr "Загрузка без текстовых сообщений" +#: source/ubl-settings-bootloader.cc:301 +msgid "About" +msgstr "О программе" -msgid "Show welcome window" -msgstr "Показывать окно приветствия" +#: source/ubl-settings-bootloader.cc:199 +msgid "Active" +msgstr "Активно" -msgid "Disable Plymouth" -msgstr "Отключить Plymouth" +#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 +#: source/ubl-settings-bootloader.cc:291 +msgid "Command line parameters:" +msgstr "Параметры командной строки:" + +#: source/ubl-settings-bootloader.cc:285 +msgid "Configuring system boot parameters" +msgstr "Настройка параметров загрузки системы" + +msgid "Configuring the boot loader settings" +msgstr "Настройка параметров загрузчика системы" + +#: source/ubl-settings-bootloader.cc:279 +msgid "Copyright © UBSoft LLC, 2022 - " +msgstr "" + +#: source/ubl-settings-bootloader.cc:292 +msgid "Default download" +msgstr "Загрузка по умолчанию:" + +#: source/ubl-settings-bootloader.cc:201 +msgid "Description" +msgstr "Описание" msgid "Disable ACPI" msgstr "Отключить ACPI" @@ -34,235 +54,291 @@ msgstr "Отключить ACPI" msgid "Disable APIC" msgstr "Отключить APIC" -msgid "Disable local APIC" -msgstr "Отключить локальный APIC" +msgid "Disable GPU power management" +msgstr "Отключить управление питанием графического процессора" -msgid "Single User Mode" -msgstr "Режим одного пользователя" +msgid "Disable Plymouth" +msgstr "Отключить Plymouth" msgid "Disable kernel selection and loading of video drivers" msgstr "Отключить выбор и загрузку ядром драйверов видео" -msgid "Disable GPU power management" -msgstr "Отключить управление питанием графического процессора" - -msgid "Maximum performance, power management" -msgstr "Максимальная производительность, управление питанием" +msgid "Disable local APIC" +msgstr "Отключить локальный APIC" -msgid "Forced selection of an Intel sound device driver" -msgstr "Принудительный выбор драйвера звукового устройства от Intel" +#: source/ubl-settings-bootloader.cc:294 +msgid "Download menu" +msgstr "Меню загрузки" -msgid "Prevents the processor from going into a deep sleep state" -msgstr "Предотвращает переход процессора в состояние глубокого сна" +msgid "Downloading without text messages" +msgstr "Загрузка без текстовых сообщений" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" -msgid "PC BIOS & EFI console" -msgstr "PC BIOS & консоль EFI" +#: source/ubl-settings-bootloader.cc:443 +#, fuzzy +msgid "Error saved local and global configuration" +msgstr "Успешно записаны локальная и глобальная конфигурация" -msgid "Serial terminal" -msgstr "Последовательный терминал" +msgid "Forced selection of an Intel sound device driver" +msgstr "Принудительный выбор драйвера звукового устройства от Intel" -msgid "Open Firmware Console" -msgstr "Консоль Open Firmware" +msgid "" +"GTK settings bootloader for UBLinux\n" +"\n" +"Usage: ubl-settings-bootloader [OPTIONS...]\n" +"Options:\n" +" -h, --help\t Show this help\n" +" -V, --version\t Show package version\n" +msgstr "" +"GTK-утилита настройки загрузчика для UBLinux\n" +"\n" +"Использование: ubl-settings-bootloader [Параметры приложения...]\n" +"Параметры приложения:\n" +" -h, --help\t Показать параметры справки\n" +" -V, --version\t Показать версию пакета\n" -msgid "PC AT Keyboard (Coreboot)" -msgstr "Клавиатура PC AT (Coreboot)" +#: source/ubl-settings-bootloader.cc:455 +msgid "Global configuration downloaded successfully" +msgstr "Успешно загружена глобальная конфигурация" -msgid "USB Keyboard (HID Boot protocol)" -msgstr "Клавиатура USB Keyboard (протокол HID Boot)" +#: source/ubl-settings-bootloader.cc:431 +msgid "Global configuration read error" +msgstr "Ошибка чтения глобальной конфигурации" -msgid "Output in graphical mode" -msgstr "Вывод в графическом режиме" +#: source/ubl-settings-bootloader.cc:461 +msgid "Global configuration successfully written" +msgstr "Успешно записана глобальная конфигурация" -msgid "VGA text output (Coreboot)" -msgstr "Текстовый вывод VGA (Coreboot)" +#: source/ubl-settings-bootloader.cc:439 +msgid "Global configuration write error" +msgstr "Ошибка записи глобальной конфигурации" -msgid "ubl-settings-bootloader version: " -msgstr "ubl-settings-bootloader версия: " +#: source/ubl-settings-bootloader.cc:300 +msgid "Help" +msgstr "Справка" -msgid "Active" -msgstr "Активно" +#: source/ubl-settings-bootloader.cc:295 +#, fuzzy +msgid "Input terminal" +msgstr "Выходной терминал" -msgid "Option" -msgstr "Опция" +#: source/ubl-settings-bootloader.cc:308 +msgid "Load" +msgstr "Загрузить" -msgid "Description" -msgstr "Описание" +#: source/ubl-settings-bootloader.cc:305 +msgid "Load global configuration" +msgstr "Загрузить глобальную конфигурацию" -msgid "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" -msgstr "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +#: source/ubl-settings-bootloader.cc:306 +msgid "Load local configuration" +msgstr "Загрузить локальную конфигурацию" -msgid "Configuring the boot loader settings" -msgstr "Настройка параметров загрузчика системы" +#: source/ubl-settings-bootloader.cc:298 +msgid "Load variant selection timer" +msgstr "Таймер выбора варианта загрузки" -msgid "UBConfig - Loading" -msgstr "UBConfig - Загрузка" +#: source/ubl-settings-bootloader.cc:452 +msgid "Local configuration downloaded successfully" +msgstr "Успешно загружена локальная конфигурация" -msgid "Configuring system boot parameters" -msgstr "Настройка параметров загрузки системы" +#: source/ubl-settings-bootloader.cc:427 +msgid "Local configuration reading error" +msgstr "Ошибка чтения локальной конфигурации" -msgid "Setting bootloader" -msgstr "Настройка загрузчика" +#: source/ubl-settings-bootloader.cc:458 +msgid "Local configuration successfully written" +msgstr "Успешно записана локальная конфигурация" -msgid "Project Home Page" -msgstr "Домашняя страница проекта" +#: source/ubl-settings-bootloader.cc:435 +msgid "Local configuration write error" +msgstr "Ошибка записи локальной конфигурации" -msgid "Download menu" -msgstr "Меню загрузки" +msgid "Maximum performance, power management" +msgstr "Максимальная производительность, управление питанием" -msgid "Load variant selection timer" -msgstr "Таймер выбора варианта загрузки" +#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 +#: source/ubl-settings-bootloader.cc:367 +msgid "Nothing to save!" +msgstr "Нечего сохранять!" -msgid "Seconds" -msgstr "Секунд" +msgid "Open Firmware Console" +msgstr "Консоль Open Firmware" -msgid "Default download" -msgstr "Загрузка по умолчанию:" +#: source/ubl-settings-bootloader.cc:200 +msgid "Option" +msgstr "Опция" -msgid "The last selection will become the default boot choice" -msgstr "Последний выбор станет выбором загрузки по умолчанию" +msgid "Output in graphical mode" +msgstr "Вывод в графическом режиме" + +#: source/ubl-settings-bootloader.cc:296 +msgid "Output terminal" +msgstr "Выходной терминал" + +msgid "PC AT Keyboard (Coreboot)" +msgstr "Клавиатура PC AT (Coreboot)" + +msgid "PC BIOS & EFI console" +msgstr "PC BIOS & консоль EFI" msgid "Parameters passed to the kernel" msgstr "Параметры, передаваемые ядру" -msgid "quiet (Downloading without text messages)" -msgstr "quiet (Загрузка без текстовых сообщений)" +msgid "Prevents the processor from going into a deep sleep state" +msgstr "Предотвращает переход процессора в состояние глубокого сна" -msgid "splash (Show welcome window)" -msgstr "splash (Показать окно приветствия)" +#: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 +msgid "Project Home Page" +msgstr "Домашняя страница проекта" -msgid "no plymouth (Disable Plymouth)" -msgstr "no plymouth (Отключить Plymouth" +#: source/ubl-settings-bootloader.cc:307 +msgid "Save" +msgstr "Сохранить" -msgid "acpi=off (Disable ACPI)" -msgstr "acpi=off (Отключить ACPI)" +#: source/ubl-settings-bootloader.cc:304 +msgid "Save global configuration" +msgstr "Сохранить глобальную конфигурацию" -msgid "apic (Disable APIC)" -msgstr "apic (Отключить APIC)" +#: source/ubl-settings-bootloader.cc:303 +msgid "Save local configuration" +msgstr "Сохранить локальную конфигурацию" -msgid "nolapic (Disable local APIC)" -msgstr "nolapic (Отключить локальный APIC)" +#: source/ubl-settings-bootloader.cc:302 +msgid "Save to global and local configuration" +msgstr "Сохранить глобальную и локальную конфигурацию" -msgid "single (Single User Mode)" -msgstr "single (Однопользовательский режим)" +#: source/ubl-settings-bootloader.cc:293 +msgid "Seconds" +msgstr "Секунд" -msgid "nomodeset (Disable kernel selection and loading of video drivers)" -msgstr "nomodeset (Отключите выбор ядра и загрузку видеодрайверов)" +msgid "Serial terminal" +msgstr "Последовательный терминал" -msgid "i915.enable_dc=0 (Disable GPU power management)" -msgstr "i915.enable_dc=0 (Отключите управление питанием GPU)" +#: source/ubl-settings-bootloader.cc:287 +msgid "Setting bootloader" +msgstr "Настройка загрузчика" -msgid "ahci.mobile_jpm_policy=1 (Maximum performance, power management)" -msgstr "ahci.mobile_jpm_policy=1 (Максимальная производительность, управление питанием)" +msgid "Show welcome window" +msgstr "Показывать окно приветствия" -msgid "snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver from Intel)" -msgstr "snd-intel-dspcfg.dsp_driver=1 (Принудительный выбор драйвера звукового устройства от Intel)" +msgid "Single User Mode" +msgstr "Режим одного пользователя" -msgid "intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep state)" -msgstr "intel_idle max_cstate=1 (Предотвращает переход процессора в состояние глубокого сна)" +#: source/ubl-settings-bootloader.cc:464 +msgid "Successfully saved local and global configuration" +msgstr "Успешно записаны локальная и глобальная конфигурация" -msgid "intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors Ultra Voltage)" -msgstr "intel_idle.max_cstate=4 (Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage)" +#: source/ubl-settings-bootloader.cc:299 +msgid "The last selection will become the default boot choice" +msgstr "Последний выбор станет выбором загрузки по умолчанию" -msgid "Command line parameters:" -msgstr "Параметры командной строки:" +#: source/ubl-settings-bootloader.cc:94 +msgid "The program must be run as root" +msgstr "" +"Программа должна быть запущена с правами \n" +"суперпользователя!" -msgid "Nothing to save!" -msgstr "Нечего сохранять!" +msgid "UBConfig - Loading" +msgstr "UBConfig - Загрузка" -msgid "serial (Serial terminal)" -msgstr "serial (Последовательный терминал)" +msgid "USB Keyboard (HID Boot protocol)" +msgstr "Клавиатура USB Keyboard (протокол HID Boot)" -msgid "at_keyboard (Keyboard PC AT (Coreboot))" -msgstr "at_keyboard (Клавиатура PC AT (Coreboot))" +msgid "VGA text output (Coreboot)" +msgstr "Текстовый вывод VGA (Coreboot)" -msgid "usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))" -msgstr "usb_keyboard (Клавиатура USB Keyboard (protocol HID Boot))" +msgid "acpi=off (Disable ACPI)" +msgstr "acpi=off (Отключить ACPI)" -msgid "Output terminal" -msgstr "Выходной терминал" +msgid "ahci.mobile_jpm_policy=1 (Maximum performance, power management)" +msgstr "" +"ahci.mobile_jpm_policy=1 (Максимальная производительность, управление " +"питанием)" + +msgid "apic (Disable APIC)" +msgstr "apic (Отключить APIC)" + +msgid "at_keyboard (Keyboard PC AT (Coreboot))" +msgstr "at_keyboard (Клавиатура PC AT (Coreboot))" msgid "console (PC BIOS & console EFI)" msgstr "Консоль (PC BIOS & console EFI)" -msgid "ofconsole (Console Open Firmware)" -msgstr "ofconsole (Консоль Open Firmware)" - msgid "gfxterm (Output in graphical mode)" msgstr "gfxterm (Вывод в графическом режиме)" -msgid "vga_text (Text output VGA (Coreboot))" -msgstr "vga_text (Текстовый вывод VGA (Coreboot))" - -msgid "About" -msgstr "О программе" - -msgid "Help" -msgstr "Справка" - -msgid "Save to global and local configuration" -msgstr "Сохранить глобальную и локальную конфигурацию" +#: source/ubl-settings-bootloader.cc:282 +msgid "https://wiki.ublinux.com" +msgstr "" -msgid "Save global configuration" -msgstr "Сохранить глобальную конфигурацию" +#: source/ubl-settings-bootloader.cc:400 +msgid "" +"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +msgstr "" +"https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/" -msgid "Save local configuration" -msgstr "Сохранить локальную конфигурацию" +msgid "i915.enable_dc=0 (Disable GPU power management)" +msgstr "i915.enable_dc=0 (Отключите управление питанием GPU)" -msgid "Load global configuration" -msgstr "Загрузить глобальную конфигурацию" +msgid "" +"intel_idle max_cstate=1 (Prevents the processor from going into a deep sleep " +"state)" +msgstr "" +"intel_idle max_cstate=1 (Предотвращает переход процессора в состояние " +"глубокого сна)" -msgid "Load local configuration" -msgstr "Загрузить локальную конфигурацию" +msgid "" +"intel_idle.max_cstate=4 (Eliminates flickering laptop display on processors " +"Ultra Voltage)" +msgstr "" +"intel_idle.max_cstate=4 (Устраняет мерцание дисплея ноутбука на процессорах " +"Ultra Voltage)" -msgid "Save" -msgstr "Сохранить" +msgid "no plymouth (Disable Plymouth)" +msgstr "no plymouth (Отключить Plymouth" -msgid "Load" -msgstr "Загрузить" +msgid "nolapic (Disable local APIC)" +msgstr "nolapic (Отключить локальный APIC)" -msgid "Local configuration reading error" -msgstr "Ошибка чтения локальной конфигурации" +msgid "nomodeset (Disable kernel selection and loading of video drivers)" +msgstr "nomodeset (Отключите выбор ядра и загрузку видеодрайверов)" -msgid "Local configuration write error" -msgstr "Ошибка записи локальной конфигурации" +msgid "ofconsole (Console Open Firmware)" +msgstr "ofconsole (Консоль Open Firmware)" -msgid "Global configuration read error" -msgstr "Ошибка чтения глобальной конфигурации" +msgid "quiet (Downloading without text messages)" +msgstr "quiet (Загрузка без текстовых сообщений)" -msgid "Global configuration write error" -msgstr "Ошибка записи глобальной конфигурации" +msgid "serial (Serial terminal)" +msgstr "serial (Последовательный терминал)" -msgid "Local configuration downloaded successfully" -msgstr "Успешно загружена локальная конфигурация" +msgid "single (Single User Mode)" +msgstr "single (Однопользовательский режим)" -msgid "Global configuration downloaded successfully" -msgstr "Успешно загружена глобальная конфигурация" +msgid "" +"snd-intel-dspcfg.dsp_driver=1 (Forced selection of a sound device driver " +"from Intel)" +msgstr "" +"snd-intel-dspcfg.dsp_driver=1 (Принудительный выбор драйвера звукового " +"устройства от Intel)" -msgid "Global configuration successfully written" -msgstr "Успешно записана глобальная конфигурация" +msgid "splash (Show welcome window)" +msgstr "splash (Показать окно приветствия)" -msgid "Local configuration successfully written" -msgstr "Успешно записана локальная конфигурация" +#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 +#: source/ubl-settings-bootloader.cc:309 +msgid "ubl-settings-bootloader" +msgstr "Загрузка системы" -msgid "Successfully saved local and global configuration" -msgstr "Успешно записаны локальная и глобальная конфигурация" +#: source/ubl-settings-bootloader.cc:547 +msgid "ubl-settings-bootloader version: " +msgstr "ubl-settings-bootloader версия: " -msgid "The program must be run as root" -msgstr "Программа должна быть запущена с правами \nсуперпользователя!" +msgid "usb_keyboard (Keyboard USB Keyboard (protocol HID Boot))" +msgstr "usb_keyboard (Клавиатура USB Keyboard (protocol HID Boot))" -msgid "" -"GTK settings bootloader for UBLinux\n\n" -"Usage: ubl-settings-bootloader [OPTIONS...]\n" -"Options:\n" -" -h, --help Show this help\n" -" -V, --version Show package version\n" -msgstr "" -"GTK-утилита настройки загрузчика для UBLinux\n" -"\n" -"Использование: ubl-settings-bootloader [Параметры приложения...]\n" -"Параметры приложения:\n" -" -h, --help\t Показать параметры справки\n" -" -V, --version\t Показать версию пакета\n" +msgid "vga_text (Text output VGA (Coreboot))" +msgstr "vga_text (Текстовый вывод VGA (Coreboot))" From 23783450094b1b23b2c886afd9430fdb6a7078d4 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 15:25:15 +0600 Subject: [PATCH 026/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index d03570c..6eced2d 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -397,7 +397,11 @@ void MainWindow::download_local_cfg() { void MainWindow::synopsis_show() { - string cmd = "xdg-open " + string(gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; + string cmd = "xdg-open " + string(gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name + " &"; + if (geteuid() == 0) { + string response_user = getlogin(); + cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; + } wrapper_system(cmd, "&"); } From 3e3d0ed8d3e26b3544e16c13c5952853b3f9439b Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 15:53:55 +0600 Subject: [PATCH 027/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=83=D1=82=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D0=BE=D0=BA=20=D0=BD=D0=B0=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20img?= =?UTF-8?q?Info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 ++-- ...blinux.ubl-settings-bootloader.checked.svg | 0 ...blinux.ubl-settings-bootloader.warning.svg | 0 source/ubl-settings-bootloader.cc | 24 +++++++++---------- ubl-settings-bootloader.glade | 3 ++- 5 files changed, 16 insertions(+), 15 deletions(-) rename ru.ublinux.ubl-settings-bootloader.checked.svg => com.ublinux.ubl-settings-bootloader.checked.svg (100%) rename ru.ublinux.ubl-settings-bootloader.warning.svg => com.ublinux.ubl-settings-bootloader.warning.svg (100%) diff --git a/Makefile b/Makefile index fe35571..a1d91ca 100644 --- a/Makefile +++ b/Makefile @@ -114,8 +114,8 @@ install: check uninstall @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv @install -Dm644 -t /usr/share/${PKGNAME}/ input-options.csv @install -Dm644 -t /usr/share/${PKGNAME}/ output-options.csv - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "ru.ublinux.ubl-settings-bootloader.checked.svg" - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "ru.ublinux.ubl-settings-bootloader.warning.svg" + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.ubl-settings-bootloader.checked.svg" + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.ubl-settings-bootloader.warning.svg" @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications diff --git a/ru.ublinux.ubl-settings-bootloader.checked.svg b/com.ublinux.ubl-settings-bootloader.checked.svg similarity index 100% rename from ru.ublinux.ubl-settings-bootloader.checked.svg rename to com.ublinux.ubl-settings-bootloader.checked.svg diff --git a/ru.ublinux.ubl-settings-bootloader.warning.svg b/com.ublinux.ubl-settings-bootloader.warning.svg similarity index 100% rename from ru.ublinux.ubl-settings-bootloader.warning.svg rename to com.ublinux.ubl-settings-bootloader.warning.svg diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 6eced2d..afcb1a9 100644 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -85,13 +85,13 @@ void MainWindow::settings(){ } else{ - this->event(); boxWidgetAll->set_sensitive(false); btnLoad->set_sensitive(false); boxSave->set_sensitive(false); - imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.warning.svg"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); info_status_app("boxInfoMessError"); lblWarning->set_text(gettext("The program must be run as root")); + this->event(); } } @@ -319,14 +319,14 @@ void MainWindow::event(){ btnSaveLocalGlob->signal_activate().connect([&]() {save_global_local_cfg();}); btnSaveLocal->signal_activate().connect([&]() {save_local_cfg();}); btnSaveGlob->signal_activate().connect([&]() {save_global_cfg();}); - //TreeView_TreeSelection = treeViewKernel->get_selection(); - //TreeView_TreeSelection->signal_changed().connect(sigc::mem_fun(treeViewKernel, &MainWindow::item_selected) ); - Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); - treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); - Glib::RefPtr treeViewIPTModel = treeViewIPT->get_model(); - treeViewIPTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_IPT)); - Glib::RefPtr treeViewOTTModel = treeViewOTT->get_model(); - treeViewOTTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_OTT)); + if (this->check_root() == 0) { + Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); + treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); + Glib::RefPtr treeViewIPTModel = treeViewIPT->get_model(); + treeViewIPTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_IPT)); + Glib::RefPtr treeViewOTTModel = treeViewOTT->get_model(); + treeViewOTTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_OTT)); + } } void MainWindow::save_global_local_cfg() { @@ -424,7 +424,7 @@ void MainWindow::info_status_app(string stule) { void MainWindow::info_warning_error(int mess) { if (index_error > 0) { info_status_app("boxInfoMessError"); - imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.warning.svg"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); index_error = 0; string mess_error = ""; if (mess == 0) { @@ -451,7 +451,7 @@ void MainWindow::info_warning_error(int mess) { } else { info_status_app("boxInfoMessOK"); - imgInfo->set("/usr/share/icons/hicolor/scalable/status/ru.ublinux.ubl-settings-bootloader.checked.svg"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); if (mess == 0) { lblWarning->set_text(gettext("Local configuration downloaded successfully")); } diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 6efc9f5..090b261 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -211,7 +211,8 @@ specified priority 5 6 6 - checked + 25 + 1 False From eff66902678880a7e6dbbef3f269ca400d1ff6be Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 15:56:11 +0600 Subject: [PATCH 028/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=86=D0=B2=D0=B5=D1=82=20=D1=88=D1=80?= =?UTF-8?q?=D0=B8=D1=84=D1=82=D0=B0=20"lblWarning"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.glade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 090b261..ec73d37 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -233,7 +233,7 @@ specified priority 6 - + From 6948c2166be78cd9666f45895b37bf6a5eb25107 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Mar 2023 16:07:16 +0600 Subject: [PATCH 029/110] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 ++- ubl-settings-bootloader.glade | 2 +- ubl-settings-bootloader_ru.po | 4 +--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index a1d91ca..875976f 100644 --- a/Makefile +++ b/Makefile @@ -14,13 +14,14 @@ CMAKE_BUILD_DIR = ./compile DEPENDS = cmake #PKGNAME = $(MAKEFILE_DIR) PKGNAME = ubl-settings-bootloader +FILE_VERSION = VERSION.md default_target: all all: init build init: @echo "Initialize ..."; \ -# sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-bootloader.cc; \ + sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-bootloader.cc; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index ec73d37..e06c390 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -375,7 +375,7 @@ specified priority True False - 5 + 8 5 5 5 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 613661a..9cc5300 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -237,9 +237,7 @@ msgstr "Последний выбор станет выбором загрузк #: source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" -msgstr "" -"Программа должна быть запущена с правами \n" -"суперпользователя!" +msgstr "Программа должна быть запущена с правами суперпользователя!" msgid "UBConfig - Loading" msgstr "UBConfig - Загрузка" From 12e24675b8b0769c15468a467d0a8592f33dae6d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 29 Mar 2023 10:46:39 +0600 Subject: [PATCH 030/110] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D1=82=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BF=D0=BE=20=D1=81?= =?UTF-8?q?=D0=B2=D1=8F=D0=B7=D0=B8=20gui=20=D1=81=20ubconfig-=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boot-options.csv | 26 ++++++------ input-options.csv | 10 ++--- output-options.csv | 10 ++--- source/ubl-settings-bootloader.cc | 68 +++++++++++++++++++++++-------- source/ubl-settings-bootloader.h | 7 +--- 5 files changed, 76 insertions(+), 45 deletions(-) mode change 100644 => 100755 source/ubl-settings-bootloader.cc diff --git a/boot-options.csv b/boot-options.csv index 775d901..c76e0a9 100644 --- a/boot-options.csv +++ b/boot-options.csv @@ -1,14 +1,14 @@ Get,Set=1,Set=0,Option,Description -cmd_get,cmd_true,cmd_false,quiet,Downloading without text messages -cmd_get,cmd_true,cmd_false,splash,Show welcome window -cmd_get,cmd_true,cmd_false,noplymouth,Disable Plymouth -cmd_get,cmd_true,cmd_false,acpi=off,Disable ACPI -cmd_get,cmd_true,cmd_false,noapic,Disable APIC -cmd_get,cmd_true,cmd_false,nolapic,Disable local APIC -cmd_get,cmd_true,cmd_false,single,Single User Mode -cmd_get,cmd_true,cmd_false,nomodeset,Disable kernel selection and loading of video drivers -cmd_get,cmd_true,cmd_false,915.enable_dc=0,Disable GPU power management -cmd_get,cmd_true,cmd_false,ahci.mobile_lpm_policy=1,"Maximum performance, power management" -cmd_get,cmd_true,cmd_false,snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver -cmd_get,cmd_true,cmd_false,intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state -cmd_get,cmd_true,cmd_false,intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors +get boot GRUB_BOOT_SILENT,quiet,cmd_false,quiet,Downloading without text messages +get boot GRUB_BOOT_SILENT,splash,cmd_false,splash,Show welcome window +get boot GRUB_BOOT_SILENT,noplymouth,cmd_false,noplymouth,Disable Plymouth +get boot GRUB_BOOT_SILENT,acpi=off,cmd_false,acpi=off,Disable ACPI +get boot GRUB_BOOT_SILENT,noapic,cmd_false,noapic,Disable APIC +get boot GRUB_BOOT_SILENT,nolapic,cmd_false,nolapic,Disable local APIC +get boot GRUB_BOOT_SILENT,single,cmd_false,single,Single User Mode +get boot GRUB_BOOT_SILENT,nomodeset,cmd_false,nomodeset,Disable kernel selection and loading of video drivers +get boot GRUB_BOOT_SILENT,915.enable_dc=0,cmd_false,915.enable_dc=0,Disable GPU power management +get boot GRUB_BOOT_SILENT,ahci.mobile_lpm_policy=1,cmd_false,ahci.mobile_lpm_policy=1,"Maximum performance, power management" +get boot GRUB_BOOT_SILENT,snd-intel-dspcfg.dsp_driver=1,cmd_false,snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver +get boot GRUB_BOOT_SILENT,intel_idle.max_cstate=1,cmd_false,intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state +get boot GRUB_BOOT_SILENT,intel_idle.max_cstate=4,cmd_false,intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors diff --git a/input-options.csv b/input-options.csv index ecd672e..2f0acd3 100644 --- a/input-options.csv +++ b/input-options.csv @@ -1,6 +1,6 @@ Get,Set=1,Set=0,Option,Description -cmd_get,cmd_true,cmd_false,console,PC BIOS & EFI console -cmd_get,cmd_true,cmd_false,serial,Serial terminal -cmd_get,cmd_true,cmd_false,ofconsole,Open Firmware Console -cmd_get,cmd_true,cmd_false,at_keyboard,PC AT Keyboard (Coreboot) -cmd_get,cmd_true,cmd_false,usb_keyboard,USB Keyboard (HID Boot protocol) +ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,console,PC BIOS & EFI console +ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,serial,Serial terminal +ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,ofconsole,Open Firmware Console +ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,at_keyboard,PC AT Keyboard (Coreboot) +ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,usb_keyboard,USB Keyboard (HID Boot protocol) diff --git a/output-options.csv b/output-options.csv index ce2342f..3fb8237 100644 --- a/output-options.csv +++ b/output-options.csv @@ -1,6 +1,6 @@ Get,Set=1,Set=0,Option,Description -cmd_get,cmd_true,cmd_false,console,PC BIOS & EFI console -cmd_get,cmd_true,cmd_false,serial,Serial terminal -cmd_get,cmd_true,cmd_false,ofconsole,Open Firmware Console -cmd_get,cmd_true,cmd_false,gfxterm,Output in graphical mode -cmd_get,cmd_true,cmd_false,vga_text,VGA text output (Coreboot) +ubconfig get boot GRUB_TERMINAL_OUTPUT,console,cmd_false,console,PC BIOS & EFI console +ubconfig get boot GRUB_TERMINAL_OUTPUT,serial,cmd_false,serial,Serial terminal +ubconfig get boot GRUB_TERMINAL_OUTPUT,ofconsole,cmd_false,ofconsole,Open Firmware Console +ubconfig get boot GRUB_TERMINAL_OUTPUT,gfxterm,cmd_false,gfxterm,Output in graphical mode +ubconfig get boot GRUB_TERMINAL_OUTPUT,vga_text,cmd_false,vga_text,VGA text output (Coreboot) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc old mode 100644 new mode 100755 index afcb1a9..76868b9 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -78,6 +78,8 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { + spbSecond->set_range(0, 100000000000); + spbSecond->set_increments(1.0, 1.0); this->fill_in_view(); this->download_local_cfg(); this->download_globl_cfg(); @@ -109,9 +111,9 @@ void MainWindow::fill_in_view() { this->view_add_colums(*treeViewKernel); this->view_add_colums(*treeViewIPT); this->view_add_colums(*treeViewOTT); - // auto iter = list_store_kernel->prepend(); - // row_kernel[m_columns.cmd_set_true]; - // cout << cmd << endl; + std::vector treeViewKernalCol = treeViewKernel->get_columns(); + + //cout << treeViewKernalCol[2]->get_alignment() << endl; } void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { @@ -215,14 +217,6 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrget_widget("chbLoadVariantSelectionTimer", chbLoadVariantSelectionTimer); builder->get_widget("chbLastSelectionWillBecome", chbLastSelectionWillBecome); @@ -309,7 +303,35 @@ void MainWindow::localization(){ this->set_title(gettext("ubl-settings-bootloader")); } +void MainWindow::get_menu_boot(string cmd) { + struct Result res_response = this->wrapper_call(cmd); + + if (res_response.error == 0) { + spbSecond->set_value(atoi(res_response.response.c_str())); + } + else if (res_response.error == 3) { + + } + else { + + } + +} + +void MainWindow::set_menu_boot(string cmd) { + std::string seconds = to_string(spbSecond->get_value()); + cmd += seconds; + struct Result res_response = this->wrapper_call(cmd); + if (res_response.error == 0) { + } + else if (res_response.error == 3) { + + } + else { + + } +} void MainWindow::event(){ btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); @@ -332,9 +354,13 @@ void MainWindow::event(){ void MainWindow::save_global_local_cfg() { if (flag_save_global == false) { flag_save_all = true; + std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOU"; + this->set_menu_boot(cmd_boot_time); } else if (flag_save_local == false) { flag_save_all = true; + std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOU"; + this->set_menu_boot(cmd_boot_time); } else{ info_status_app("boxInfoMessOK"); @@ -347,28 +373,32 @@ void MainWindow::save_global_local_cfg() { void MainWindow::save_global_cfg() { if (flag_save_global == false) { - flag_save_global = true; + flag_save_global = true; + if (flag_save_all == false) { + std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOU"; + this->set_menu_boot(cmd_boot_time); + } } else{ info_status_app("boxInfoMessOK"); lblWarning->set_text(gettext("Nothing to save!")); } info_warning_error(3); - - } void MainWindow::save_local_cfg() { if (flag_save_local == false) { flag_save_local = true; + if (flag_save_all == false) { + std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOU"; + this->set_menu_boot(cmd_boot_time); + } } - else{ + else { info_status_app("boxInfoMessOK"); lblWarning->set_text(gettext("Nothing to save!")); } - info_warning_error(2); - } void MainWindow::download_globl_cfg() { @@ -380,6 +410,8 @@ void MainWindow::download_globl_cfg() { flag_save_global = true; flag_save_all = true; flag_load = true; + std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOU"; + this->get_menu_boot(cmd_boot_time); info_warning_error(1); } @@ -391,6 +423,8 @@ void MainWindow::download_local_cfg() { flag_save_local = true; flag_save_global = true; flag_save_all = true; + std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOU"; + this->get_menu_boot(cmd_boot_time); info_warning_error(0); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 84f95b4..252af13 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -115,10 +115,6 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_save_all = false; bool flag_save_global = false; bool flag_save_local = false; - int width; - int heigh; - int screen_width; - int screen_hight; int index_error = 0; string str_cmd_error = ""; template @@ -130,6 +126,8 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); + void get_menu_boot(string cmd); + void set_menu_boot(string cmd); void get_builder(); void add_CSS(); void localization(); @@ -137,7 +135,6 @@ class MainWindow : public Gtk::ApplicationWindow { void settings(); void fn_event_intelMax1(); void fn_event_intelMax4(); - void get_monitor_size(); void synopsis_show(); void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view, size_t index); void wrapper_system(string cmd, string thread_str); From e31256c2d95542f72902fcdc21832897a2b73035 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 29 Mar 2023 11:00:55 +0600 Subject: [PATCH 031/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- com.ublinux.ubl-settings-bootloader.svg | 3363 +++++++++++++++++++++++ ubl-settings-bootloader.glade | 6 +- 3 files changed, 3367 insertions(+), 4 deletions(-) create mode 100644 com.ublinux.ubl-settings-bootloader.svg diff --git a/Makefile b/Makefile index 875976f..09e1ee1 100644 --- a/Makefile +++ b/Makefile @@ -110,13 +110,13 @@ install: check uninstall @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade @install -Dm644 -t /usr/share/${PKGNAME}/css/ ubl-settings-bootloader.css @install -Dm644 -t /usr/share/${PKGNAME}/images/ logo-background.png -# @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg # @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv @install -Dm644 -t /usr/share/${PKGNAME}/ input-options.csv @install -Dm644 -t /usr/share/${PKGNAME}/ output-options.csv @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.ubl-settings-bootloader.checked.svg" @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.ubl-settings-bootloader.warning.svg" + @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications diff --git a/com.ublinux.ubl-settings-bootloader.svg b/com.ublinux.ubl-settings-bootloader.svg new file mode 100644 index 0000000..ceee7ff --- /dev/null +++ b/com.ublinux.ubl-settings-bootloader.svg @@ -0,0 +1,3363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index e06c390..e2cd7e3 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -21,7 +21,7 @@ Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. UBGroup UBGroup - ublexec + com.ublinux.ubl-settings-bootloader True gpl-2-0 @@ -63,7 +63,7 @@ 6 6 69 - ublexec + com.ublinux.ubl-settings-bootloader False @@ -831,7 +831,7 @@ specified priority True False 32 - ublexec + com.ublinux.ubl-settings-bootloader From 3d358d4ce0d7b65189273855df9b88a5d19cc0cc Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 29 Mar 2023 12:40:40 +0600 Subject: [PATCH 032/110] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=B7=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B0=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?entry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 82 ++++++++++++++++++++++++++----- source/ubl-settings-bootloader.h | 2 + source/util.cc | 27 ++++++++++ source/util.h | 5 +- ubl-settings-bootloader.desktop | 2 +- 5 files changed, 105 insertions(+), 13 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 76868b9..8f0d635 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -303,6 +303,22 @@ void MainWindow::localization(){ this->set_title(gettext("ubl-settings-bootloader")); } +void MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text) { + struct Result res_response = this->wrapper_call(cmd); + if (res_response.error == 0) { + vector vec_cmd_kernel = split(res_response.response, ' '); + str_replace_all(res_response.response, " ", ", "); + str_replace_all(res_response.response, "\"", ""); + entry_text.set_text(res_response.response); + } + else if (res_response.error == 3) { + + } + else { + + } +} + void MainWindow::get_menu_boot(string cmd) { struct Result res_response = this->wrapper_call(cmd); @@ -333,6 +349,20 @@ void MainWindow::set_menu_boot(string cmd) { } } +void MainWindow::cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT) { + string cmd_kernel = entryKernel->get_text(); + string cmd_IPT = entryIPT->get_text(); + string cmd_OTT = entryIPT->get_text(); + str_remove(cmd_kernel, ","); + str_remove(cmd_IPT, ","); + str_remove(cmd_OTT, ","); + cmd_settings_kernel += "\"" + cmd_kernel + "\""; + this->wrapper_call(cmd_settings_kernel); + cmd_settings_IPT += "\"" + cmd_IPT + "\""; + this->wrapper_call(cmd_settings_IPT); + cmd_settings_OTT += "\"" + cmd_OTT + "\""; + this->wrapper_call(cmd_settings_OTT); +} void MainWindow::event(){ btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); btnAbout->signal_activate().connect([&]() {aboutWindows->show();}); @@ -351,16 +381,27 @@ void MainWindow::event(){ } } + + void MainWindow::save_global_local_cfg() { if (flag_save_global == false) { - flag_save_all = true; - std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOU"; + std::string cmd_boot_time = "sudo ubconfig --default --source global set boot GRUB_TIMEOUT"; this->set_menu_boot(cmd_boot_time); + string cmd_settings_kernel = "sudo ubconfig --default --source global set boot GRUB_BOOT_SILENT="; + string cmd_settings_IPT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_OUTPUT="; + string cmd_settings_OTT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_INPUT="; + this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + flag_save_all = true; } else if (flag_save_local == false) { - flag_save_all = true; - std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOU"; + + std::string cmd_boot_time = "sudo ubconfig --default --source system set boot GRUB_TIMEOUT"; this->set_menu_boot(cmd_boot_time); + string cmd_settings_kernel = "sudo ubconfig --default --source system set boot GRUB_BOOT_SILENT="; + string cmd_settings_IPT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_OUTPUT="; + string cmd_settings_OTT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_INPUT="; + this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + flag_save_all = true; } else{ info_status_app("boxInfoMessOK"); @@ -373,10 +414,14 @@ void MainWindow::save_global_local_cfg() { void MainWindow::save_global_cfg() { if (flag_save_global == false) { - flag_save_global = true; if (flag_save_all == false) { - std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOU"; + std::string cmd_boot_time = "sudo ubconfig --default --source global set boot GRUB_TIMEOUT"; this->set_menu_boot(cmd_boot_time); + string cmd_settings_kernel = "sudo ubconfig --default --source global set boot GRUB_BOOT_SILENT="; + string cmd_settings_IPT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_OUTPUT"; + string cmd_settings_OTT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_INPUT="; + this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + flag_save_global = true; } } else{ @@ -388,10 +433,14 @@ void MainWindow::save_global_cfg() { void MainWindow::save_local_cfg() { if (flag_save_local == false) { - flag_save_local = true; if (flag_save_all == false) { - std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOU"; + std::string cmd_boot_time = "sudo ubconfig --default --source system set boot GRUB_TIMEOUT"; this->set_menu_boot(cmd_boot_time); + string cmd_settings_kernel = "sudo ubconfig --default --source system set boot GRUB_BOOT_SILENT="; + string cmd_settings_IPT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_OUTPUT"; + string cmd_settings_OTT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_INPUT="; + this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + flag_save_local = true; } } else { @@ -405,13 +454,18 @@ void MainWindow::download_globl_cfg() { entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - flag_save_local = true; flag_save_global = true; flag_save_all = true; flag_load = true; - std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOU"; + std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); + string cmd_kernel_entry = "sudo ubconfig --default --source global get boot GRUB_BOOT_SILENT"; + this->get_setting_entry_all(cmd_kernel_entry, *entryKernel); + string cmd_ipt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; + this->get_setting_entry_all(cmd_ipt_entry, *entryIPT); + string cmd_opt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; + this->get_setting_entry_all(cmd_opt_entry, *entryOTT); info_warning_error(1); } @@ -423,8 +477,14 @@ void MainWindow::download_local_cfg() { flag_save_local = true; flag_save_global = true; flag_save_all = true; - std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOU"; + std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); + string cmd_kernel_entry = "sudo ubconfig --default --source system get boot GRUB_BOOT_SILENT"; + this->get_setting_entry_all(cmd_kernel_entry, *entryKernel); + string cmd_ipt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; + this->get_setting_entry_all(cmd_ipt_entry, *entryIPT); + string cmd_opt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; + this->get_setting_entry_all(cmd_opt_entry, *entryOTT); info_warning_error(0); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 252af13..ff4377a 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -151,6 +151,8 @@ class MainWindow : public Gtk::ApplicationWindow { void info_warning_error(int mess); int check_root(); void fill_in_view(); + void get_setting_entry_all(string cmd, Gtk::Entry &entry_text); + void cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT); string dynamic_update_entry(std::map &map_view, std::map &map_global_view, std::map &map_local_view) ; void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); diff --git a/source/util.cc b/source/util.cc index 95a9936..22ffc0d 100644 --- a/source/util.cc +++ b/source/util.cc @@ -87,4 +87,31 @@ vector find_all(string &str_ntp, string substr) { sub_index.push_back(index); } return sub_index; +} + +void str_remove(std::string& source, std::string to_remove) { + string::size_type n = to_remove.length(); + for (string::size_type i = source.find(to_remove); + i != string::npos; + i = source.find(to_remove)) + source.erase(i, n); +} + +void str_replace_all(std::string& str_base, string str_find, string sReplacement) +{ + size_t pos = 0, fpos; + while ((fpos = str_base.find(str_find, pos)) != std::string::npos) + { + str_base.replace(fpos, str_find.size(), sReplacement); + pos = fpos + sReplacement.size(); + } +} +std::vector split(std::string text, char delim) { + std::string line; + std::vector vec; + std::stringstream ss(text); + while(std::getline(ss, line, delim)) { + vec.push_back(line); + } + return vec; } \ No newline at end of file diff --git a/source/util.h b/source/util.h index c304296..9bb331f 100644 --- a/source/util.h +++ b/source/util.h @@ -12,4 +12,7 @@ using namespace std; std::array, 5> read_csv(const std::string& filename); std::string call(std::string cmd); -vector find_all(string &str_ntp, string substr); \ No newline at end of file +vector find_all(string &str_ntp, string substr); +void str_remove(std::string& source, std::string to_remove); +void str_replace_all(string &str_base, string str_find, string str_replace); +std::vector split(std::string text, char delim); \ No newline at end of file diff --git a/ubl-settings-bootloader.desktop b/ubl-settings-bootloader.desktop index 05851e4..b279ca8 100644 --- a/ubl-settings-bootloader.desktop +++ b/ubl-settings-bootloader.desktop @@ -8,7 +8,7 @@ Comment=ubl-settings-bootloader Comment[ru]=Загрузчик Type=Application Exec=pkexec ubl-settings-bootloader -Icon=ubl-settings-bootloader +Icon=com.ublinux.ubl-settings-bootloader Terminal=false X-XfcePluggable=true X-UBLPluggable=true From f4fcef5acefd1fabc9762923d27e9c7161abcfa7 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 29 Mar 2023 15:30:32 +0600 Subject: [PATCH 033/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20checkButton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 103 ++++++++++++++++-------------- source/ubl-settings-bootloader.h | 25 ++++---- source/util.cc | 21 ++---- 3 files changed, 72 insertions(+), 77 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 8f0d635..3aa3c3f 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -80,9 +80,10 @@ void MainWindow::settings(){ if (this->check_root() == 0) { spbSecond->set_range(0, 100000000000); spbSecond->set_increments(1.0, 1.0); - this->fill_in_view(); + this->download_local_cfg(); this->download_globl_cfg(); + this->fill_in_view(); this->event(); } @@ -105,9 +106,9 @@ void MainWindow::fill_in_view() { treeViewIPT->set_model(list_store_IPT); treeViewOTT->set_model(list_store_OTT); - this->read_file_and_view("boot-options.csv", row_kernel, list_store_kernel); - this->read_file_and_view("input-options.csv", row_IPT, list_store_IPT); - this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT); + vec_Option_kernel = this->read_file_and_view("boot-options.csv", row_kernel, list_store_kernel); + vec_Option_IPT = this->read_file_and_view("input-options.csv", row_IPT, list_store_IPT); + vec_Option_OTT = this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT); this->view_add_colums(*treeViewKernel); this->view_add_colums(*treeViewIPT); this->view_add_colums(*treeViewOTT); @@ -121,8 +122,8 @@ void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gt auto selection_OTT = treeViewOTT->get_selection(); selection_IPT->unselect_all(); selection_OTT->unselect_all(); - template_item_selected(map_cmd_selection_kernel, path, list_store_kernel);\ - string str_flags = this->dynamic_update_entry(map_cmd_selection_kernel,map_global_cmd_selection_kernel,map_local_cmd_selection_kernel); + template_item_selected(map_cmd_selection, path, list_store_kernel); + string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_kernel); entryKernel->set_text(str_flags); } @@ -131,8 +132,8 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_IPT = treeViewIPT->get_selection(); selection_kernel->unselect_all(); selection_IPT->unselect_all(); - template_item_selected(map_cmd_selection_OTT , path, list_store_OTT); - string str_flags = this->dynamic_update_entry(map_cmd_selection_OTT, map_global_cmd_selection_OTT,map_local_cmd_selection_OTT); + template_item_selected(map_cmd_selection , path, list_store_OTT); + string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_OTT); entryOTT->set_text(str_flags); @@ -142,8 +143,8 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_OTT = treeViewOTT->get_selection(); selection_kernel->unselect_all(); selection_OTT->unselect_all(); - template_item_selected(map_cmd_selection_IPT , path, list_store_IPT); - string str_flags = this->dynamic_update_entry(map_cmd_selection_IPT, map_global_cmd_selection_IPT,map_local_cmd_selection_IPT); + template_item_selected(map_cmd_selection , path, list_store_IPT); + string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_IPT); entryIPT->set_text(str_flags); } @@ -155,30 +156,25 @@ void MainWindow::template_item_selected(std::map &map_view, con Glib::ustring cmd; bool check_btn = row[m_columns.check_button]; if (check_btn) { - cmd = row[m_columns.cmd_set_true]; + cmd = "1"; } else { - cmd = row[m_columns.cmd_set_false]; + cmd = "0"; } Glib::ustring name = row[m_columns.name]; cout << cmd << " " << name << endl; + map_view[name] = cmd; } } -string MainWindow::dynamic_update_entry(std::map &map_view, std::map &map_global_view, std::map &map_local_view) { +string MainWindow::dynamic_update_entry(std::map &map_view, vector &vec_allowed) { string keys = ""; - for(auto &it: map_view) { - string key = it.first; - if (flag_load == true && map_global_view.find(key) != map_global_view.end()) { - if (map_global_view[key] != map_view[key]){ - keys += string(key) + ", "; - } - } - else if (flag_load == false && map_local_view.find(key) != map_local_view.end()) { - if (map_local_view[key] != map_view[key]){ + for (auto &key: vec_allowed) { + if (map_view.find(key) != map_view.end()) { + if (map_view[key] == "1") { keys += string(key) + ", "; } } @@ -187,14 +183,14 @@ string MainWindow::dynamic_update_entry(std::map &map_view, std: } -void MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { +vector MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { std::array, 5> arr_view = read_csv(path_resources + "/" + file_name); - std::vector vec_Option = arr_view[3]; - std::vector vec_Description = arr_view[4]; + std::vector vec_Option = arr_view[0]; for (size_t index = 0; index < vec_Option.size(); index++) { this->view_add_cell(row, list_store_m , arr_view, index); } + return vec_Option; } void MainWindow::view_add_colums(Gtk::TreeView &treeView) { @@ -205,23 +201,21 @@ void MainWindow::view_add_colums(Gtk::TreeView &treeView) { void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view , size_t index) { row = *(list_store_m->append()); - bool flag_chb = true; - row[m_columns.cmd_get] = arr_view[0][index]; - row[m_columns.cmd_set_true] = arr_view[1][index]; - row[m_columns.cmd_set_false] = arr_view[2][index]; + bool flag_chb = false; + string name = arr_view[0][index]; + if (map_cmd_selection.find(name) != map_cmd_selection.end()) { + if (map_cmd_selection[name] == "1"){ + flag_chb = true; + } + } row[m_columns.check_button] = flag_chb; - row[m_columns.name] = gettext(arr_view[3][index].c_str()); - row[m_columns.description] = gettext(arr_view[4][index].c_str()); - - - + row[m_columns.name] = gettext(name.c_str()); + row[m_columns.description] = gettext(arr_view[1][index].c_str()); } void MainWindow::get_builder(){ builder->get_widget("chbLoadVariantSelectionTimer", chbLoadVariantSelectionTimer); builder->get_widget("chbLastSelectionWillBecome", chbLastSelectionWillBecome); - - builder->get_widget("lblInfoCommand", lblInfoCommand); builder->get_widget("lblInfoCommand1", lblInfoCommand1); builder->get_widget("lblInfoCommand2", lblInfoCommand2); @@ -264,6 +258,9 @@ void MainWindow::get_builder(){ builder->get_widget("treeViewIPT", treeViewIPT); builder->get_widget("imgBG", imgBG); builder->get_widget("overHead", overHead); + builder->get_widget("lblDownloadMode", lblDownloadMode); + builder->get_widget("lblSecurityLogin", lblSecurityLogin); + builder->get_widget("lblPasswordProtec", lblPasswordProtec); } void MainWindow::localization(){ @@ -286,8 +283,8 @@ void MainWindow::localization(){ lblInfoDefaultDonw->set_text(gettext("Default download")); lblInfoSeconds->set_text(gettext("Seconds")); lblLoadMenu->set_text(gettext("Download menu")); - lblInfoInputTerminal->set_text(gettext("Input terminal")); - lblInfoOutputTerminal->set_text(gettext("Output terminal")); + lblInfoInputTerminal->set_text(gettext("Terminal for input")); + lblInfoOutputTerminal->set_text(gettext("Terminal for output")); chbLoadVariantSelectionTimer->set_label(gettext("Load variant selection timer")); chbLastSelectionWillBecome->set_label(gettext("The last selection will become the default boot choice")); @@ -301,22 +298,32 @@ void MainWindow::localization(){ btnSave->set_label(gettext("Save")); btnLoad->set_label(gettext("Load")); this->set_title(gettext("ubl-settings-bootloader")); + + lblDownloadMode->set_text(gettext("Download mode:")); + lblSecurityLogin->set_text(gettext("Security login:")); + lblPasswordProtec->set_text(gettext("Password protection:")); } -void MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text) { +vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp) { + vector vec_params; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - vector vec_cmd_kernel = split(res_response.response, ' '); - str_replace_all(res_response.response, " ", ", "); str_replace_all(res_response.response, "\"", ""); + vec_params = split(res_response.response, ' '); + str_replace_all(res_response.response, " ", ", "); entry_text.set_text(res_response.response); + for (auto ¶m: vec_params) { + map_cmd_selection[param] = "1"; + map_temp[param] = "1"; + } } else if (res_response.error == 3) { } else { - } + } + return vec_params; } void MainWindow::get_menu_boot(string cmd) { @@ -461,11 +468,11 @@ void MainWindow::download_globl_cfg() { std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); string cmd_kernel_entry = "sudo ubconfig --default --source global get boot GRUB_BOOT_SILENT"; - this->get_setting_entry_all(cmd_kernel_entry, *entryKernel); + this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_global_cmd_selection); string cmd_ipt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; - this->get_setting_entry_all(cmd_ipt_entry, *entryIPT); + this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_global_cmd_selection); string cmd_opt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; - this->get_setting_entry_all(cmd_opt_entry, *entryOTT); + this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_global_cmd_selection); info_warning_error(1); } @@ -480,11 +487,11 @@ void MainWindow::download_local_cfg() { std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); string cmd_kernel_entry = "sudo ubconfig --default --source system get boot GRUB_BOOT_SILENT"; - this->get_setting_entry_all(cmd_kernel_entry, *entryKernel); + this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_local_cmd_selection); string cmd_ipt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; - this->get_setting_entry_all(cmd_ipt_entry, *entryIPT); + this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_local_cmd_selection); string cmd_opt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; - this->get_setting_entry_all(cmd_opt_entry, *entryOTT); + this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_local_cmd_selection); info_warning_error(0); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index ff4377a..888a542 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -94,23 +94,24 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Image *imgBG; Gtk::Overlay *overHead; + std::vector vec_Option_kernel; + std::vector vec_Option_IPT; + std::vector vec_Option_OTT; + Glib::RefPtr list_store_kernel; Glib::RefPtr list_store_IPT; Glib::RefPtr list_store_OTT; Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; Gtk::TreeModel::Row row_OTT; - std::map map_cmd_selection_kernel; - std::map map_cmd_selection_IPT; - std::map map_cmd_selection_OTT; + std::map map_cmd_selection; + std::map map_global_cmd_selection; + std::map map_local_cmd_selection; - std::map map_global_cmd_selection_kernel; - std::map map_global_cmd_selection_IPT; - std::map map_global_cmd_selection_OTT; + Gtk::Label *lblDownloadMode; + Gtk::Label *lblSecurityLogin; + Gtk::Label *lblPasswordProtec; - std::map map_local_cmd_selection_kernel; - std::map map_local_cmd_selection_IPT; - std::map map_local_cmd_selection_OTT; bool flag_load = false; bool flag_save_all = false; bool flag_save_global = false; @@ -144,16 +145,16 @@ class MainWindow : public Gtk::ApplicationWindow { void save_local_cfg(); void view_add_colums(Gtk::TreeView &treeView); void save_global_cfg(); - void read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); + vector read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); void download_globl_cfg(); void info_status_app(string stule); void info_warning_error(int mess); int check_root(); void fill_in_view(); - void get_setting_entry_all(string cmd, Gtk::Entry &entry_text); + vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT); - string dynamic_update_entry(std::map &map_view, std::map &map_global_view, std::map &map_local_view) ; + string dynamic_update_entry(std::map &map_view, vector &vec_allowed); void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); diff --git a/source/util.cc b/source/util.cc index 22ffc0d..5c66276 100644 --- a/source/util.cc +++ b/source/util.cc @@ -3,9 +3,6 @@ array, 5> read_csv(const string& filename) { array, 5> array_vectors; - vector vec_cmd_get; - vector vec_cmd_set_true; - vector vec_cmd_set_false; vector vec_option; vector vec_opcision; ifstream file(filename); @@ -14,14 +11,8 @@ array, 5> read_csv(const string& filename) { getline(file, line); while (getline(file, line)) { stringstream stream(line); - string cmd_get; - string cmd_set_true; - string cmd_set_false; string option; string opcision; - getline(stream, cmd_get, delimiter); - getline(stream, cmd_set_true, delimiter); - getline(stream, cmd_set_false, delimiter); getline(stream, option, delimiter); string line_local = stream.str(); if (line_local.find("\"") != string::npos) { @@ -48,17 +39,13 @@ array, 5> read_csv(const string& filename) { getline(stream, opcision, delimiter); } - vec_cmd_get.push_back(cmd_get); - vec_cmd_set_true.push_back(cmd_set_true); - vec_cmd_set_false.push_back(cmd_set_false); + vec_option.push_back(option); vec_opcision.push_back(opcision); } - array_vectors[0] = vec_cmd_get; - array_vectors[1] = vec_cmd_set_true; - array_vectors[2] = vec_cmd_set_false; - array_vectors[3] = vec_option; - array_vectors[4] = vec_opcision; + + array_vectors[0] = vec_option; + array_vectors[1] = vec_opcision; return array_vectors; } From 80956fb202e92731e7e0ad58f6c494f40929379e Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 30 Mar 2023 09:44:24 +0600 Subject: [PATCH 034/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boot-options.csv | 26 ++-- input-options.csv | 10 +- output-options.csv | 10 +- source/ubl-settings-bootloader.cc | 54 +++++++- source/ubl-settings-bootloader.h | 14 +- ubl-settings-bootloader.glade | 206 +++++++++++++++++++++++++++--- ubl-settings-bootloader_ru.po | 15 ++- 7 files changed, 285 insertions(+), 50 deletions(-) diff --git a/boot-options.csv b/boot-options.csv index c76e0a9..d755699 100644 --- a/boot-options.csv +++ b/boot-options.csv @@ -1,14 +1,14 @@ Get,Set=1,Set=0,Option,Description -get boot GRUB_BOOT_SILENT,quiet,cmd_false,quiet,Downloading without text messages -get boot GRUB_BOOT_SILENT,splash,cmd_false,splash,Show welcome window -get boot GRUB_BOOT_SILENT,noplymouth,cmd_false,noplymouth,Disable Plymouth -get boot GRUB_BOOT_SILENT,acpi=off,cmd_false,acpi=off,Disable ACPI -get boot GRUB_BOOT_SILENT,noapic,cmd_false,noapic,Disable APIC -get boot GRUB_BOOT_SILENT,nolapic,cmd_false,nolapic,Disable local APIC -get boot GRUB_BOOT_SILENT,single,cmd_false,single,Single User Mode -get boot GRUB_BOOT_SILENT,nomodeset,cmd_false,nomodeset,Disable kernel selection and loading of video drivers -get boot GRUB_BOOT_SILENT,915.enable_dc=0,cmd_false,915.enable_dc=0,Disable GPU power management -get boot GRUB_BOOT_SILENT,ahci.mobile_lpm_policy=1,cmd_false,ahci.mobile_lpm_policy=1,"Maximum performance, power management" -get boot GRUB_BOOT_SILENT,snd-intel-dspcfg.dsp_driver=1,cmd_false,snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver -get boot GRUB_BOOT_SILENT,intel_idle.max_cstate=1,cmd_false,intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state -get boot GRUB_BOOT_SILENT,intel_idle.max_cstate=4,cmd_false,intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors +quiet,Downloading without text messages +splash,Show welcome window +noplymouth,Disable Plymouth +acpi=off,Disable ACPI +noapic,Disable APIC +nolapic,Disable local APIC +single,Single User Mode +nomodeset,Disable kernel selection and loading of video drivers +915.enable_dc=0,Disable GPU power management +ahci.mobile_lpm_policy=1,"Maximum performance, power management" +snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver +intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state +intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors diff --git a/input-options.csv b/input-options.csv index 2f0acd3..f90c724 100644 --- a/input-options.csv +++ b/input-options.csv @@ -1,6 +1,6 @@ Get,Set=1,Set=0,Option,Description -ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,console,PC BIOS & EFI console -ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,serial,Serial terminal -ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,ofconsole,Open Firmware Console -ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,at_keyboard,PC AT Keyboard (Coreboot) -ubconfig get boot GRUB_TERMINAL_INPUT,cmd_true,cmd_false,usb_keyboard,USB Keyboard (HID Boot protocol) +console,PC BIOS & EFI console +serial,Serial terminal +ofconsole,Open Firmware Console +at_keyboard,PC AT Keyboard (Coreboot) +usb_keyboard,USB Keyboard (HID Boot protocol) diff --git a/output-options.csv b/output-options.csv index 3fb8237..3af14be 100644 --- a/output-options.csv +++ b/output-options.csv @@ -1,6 +1,6 @@ Get,Set=1,Set=0,Option,Description -ubconfig get boot GRUB_TERMINAL_OUTPUT,console,cmd_false,console,PC BIOS & EFI console -ubconfig get boot GRUB_TERMINAL_OUTPUT,serial,cmd_false,serial,Serial terminal -ubconfig get boot GRUB_TERMINAL_OUTPUT,ofconsole,cmd_false,ofconsole,Open Firmware Console -ubconfig get boot GRUB_TERMINAL_OUTPUT,gfxterm,cmd_false,gfxterm,Output in graphical mode -ubconfig get boot GRUB_TERMINAL_OUTPUT,vga_text,cmd_false,vga_text,VGA text output (Coreboot) +console,PC BIOS & EFI console +serial,Serial terminal +ofconsole,Open Firmware Console +gfxterm,Output in graphical mode +vga_text,VGA text output (Coreboot) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 3aa3c3f..5c34eb3 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -80,12 +80,12 @@ void MainWindow::settings(){ if (this->check_root() == 0) { spbSecond->set_range(0, 100000000000); spbSecond->set_increments(1.0, 1.0); - + this->fill_in_view(); this->download_local_cfg(); this->download_globl_cfg(); - this->fill_in_view(); this->event(); + } else{ boxWidgetAll->set_sensitive(false); @@ -109,6 +109,9 @@ void MainWindow::fill_in_view() { vec_Option_kernel = this->read_file_and_view("boot-options.csv", row_kernel, list_store_kernel); vec_Option_IPT = this->read_file_and_view("input-options.csv", row_IPT, list_store_IPT); vec_Option_OTT = this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT); + size_kernel = vec_Option_kernel.size(); + size_IPT = vec_Option_IPT.size(); + size_OTT = vec_Option_OTT.size(); this->view_add_colums(*treeViewKernel); this->view_add_colums(*treeViewIPT); this->view_add_colums(*treeViewOTT); @@ -164,8 +167,6 @@ void MainWindow::template_item_selected(std::map &map_view, con } Glib::ustring name = row[m_columns.name]; - cout << cmd << " " << name << endl; - map_view[name] = cmd; } } @@ -203,11 +204,13 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrappend()); bool flag_chb = false; string name = arr_view[0][index]; + /* if (map_cmd_selection.find(name) != map_cmd_selection.end()) { - if (map_cmd_selection[name] == "1"){ + if (map_cmd_selection[name] == "1") { flag_chb = true; } } + */ row[m_columns.check_button] = flag_chb; row[m_columns.name] = gettext(name.c_str()); row[m_columns.description] = gettext(arr_view[1][index].c_str()); @@ -326,6 +329,16 @@ vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_t return vec_params; } +bool MainWindow::focus_out_txt_kernel(GdkEventFocus*) { + return true; +} +bool MainWindow::focus_out_txt_IPT(GdkEventFocus*) { + return true; +} +bool MainWindow::focus_out_txt_OTT(GdkEventFocus*) { + return true; +} + void MainWindow::get_menu_boot(string cmd) { struct Result res_response = this->wrapper_call(cmd); @@ -378,6 +391,9 @@ void MainWindow::event(){ btnSaveLocalGlob->signal_activate().connect([&]() {save_global_local_cfg();}); btnSaveLocal->signal_activate().connect([&]() {save_local_cfg();}); btnSaveGlob->signal_activate().connect([&]() {save_global_cfg();}); + entryKernel->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_kernel)); + entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); + entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); @@ -473,6 +489,9 @@ void MainWindow::download_globl_cfg() { this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_global_cmd_selection); string cmd_opt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_global_cmd_selection); + this->set_row_all(map_global_cmd_selection,list_store_kernel, vec_Option_kernel, size_kernel); + this->set_row_all(map_global_cmd_selection,list_store_IPT, vec_Option_IPT, size_IPT); + this->set_row_all(map_global_cmd_selection,list_store_OTT, vec_Option_OTT, size_OTT); info_warning_error(1); } @@ -492,10 +511,35 @@ void MainWindow::download_local_cfg() { this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_local_cmd_selection); string cmd_opt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_local_cmd_selection); + this->set_row_all(map_local_cmd_selection,list_store_kernel , vec_Option_kernel, size_kernel); + this->set_row_all(map_local_cmd_selection,list_store_IPT , vec_Option_IPT, size_IPT); + this->set_row_all(map_local_cmd_selection,list_store_OTT , vec_Option_OTT, size_OTT); + info_warning_error(0); } +void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size) { + for (auto &name: list_params) { + if (map_cmd.find(name) != map_cmd.end()){ + this->set_row(list_store, size, name, true); + } + else { + this->set_row(list_store, size, name, false); + } + } +} + +void MainWindow::set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox) { + for (int index = 0; index < size; index++) { + Gtk::TreeModel::Row row = list_store->children()[index]; + if(row) { + if (row[m_columns.name] == name) { + row[m_columns.check_button] = flag_chbox; + } + } + } +} void MainWindow::synopsis_show() { string cmd = "xdg-open " + string(gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name + " &"; diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 888a542..23f4090 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -1,4 +1,5 @@ +#include #include #include #include @@ -39,11 +40,8 @@ class MainWindow : public Gtk::ApplicationWindow { public: class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: - ModelColumns() {add(cmd_get),add(cmd_set_true),add(cmd_set_false),add(check_button), add(name); add(description); } + ModelColumns() {add(check_button), add(name); add(description); } //Gtk::TreeModelColumn check_button; - Gtk::TreeModelColumn cmd_get; - Gtk::TreeModelColumn cmd_set_true; - Gtk::TreeModelColumn cmd_set_false; Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; @@ -116,6 +114,9 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_save_all = false; bool flag_save_global = false; bool flag_save_local = false; + size_t size_kernel = 0; + size_t size_IPT = 0; + size_t size_OTT = 0; int index_error = 0; string str_cmd_error = ""; template @@ -129,6 +130,8 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(Glib::RefPtr const& builder); void get_menu_boot(string cmd); void set_menu_boot(string cmd); + void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); + void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); void add_CSS(); void localization(); @@ -151,6 +154,9 @@ class MainWindow : public Gtk::ApplicationWindow { void info_status_app(string stule); void info_warning_error(int mess); int check_root(); + bool focus_out_txt_kernel(GdkEventFocus*); + bool focus_out_txt_IPT(GdkEventFocus*); + bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index e2cd7e3..d294a9a 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -373,9 +373,11 @@ specified priority False + 0 True False - 8 + start + 5 5 5 5 @@ -406,6 +408,27 @@ specified priority 1 + + + The last selection will become the default boot choice + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + False @@ -414,19 +437,45 @@ specified priority - - The last selection will become the default boot choice + True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True + False + + + 0 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download mode + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + False @@ -434,6 +483,133 @@ specified priority 2 + + + True + False + + + 0 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Security login: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 3 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Password protection: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 4 + + @@ -677,7 +853,7 @@ specified priority 5 6 6 - Input terminal + Terminal for input @@ -791,7 +967,7 @@ specified priority 5 6 6 - Output terminal + Terminal for output diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 9cc5300..a82a2b3 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -16,6 +16,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Download mode:" +msgstr "Режим загрузки:" + +msgid "Security login:" +msgstr "Логин защиты:" + +msgid "Password protection:" +msgstr "Пароль защиты:" + #: source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "О программе" @@ -121,8 +130,8 @@ msgstr "Справка" #: source/ubl-settings-bootloader.cc:295 #, fuzzy -msgid "Input terminal" -msgstr "Выходной терминал" +msgid "Terminal for input" +msgstr "Терминал для ввода" #: source/ubl-settings-bootloader.cc:308 msgid "Load" @@ -176,7 +185,7 @@ msgstr "Вывод в графическом режиме" #: source/ubl-settings-bootloader.cc:296 msgid "Output terminal" -msgstr "Выходной терминал" +msgstr "Терминал для вывода" msgid "PC AT Keyboard (Coreboot)" msgstr "Клавиатура PC AT (Coreboot)" From 633dead36dfc080b418eae030ce860fc276d91ab Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 30 Mar 2023 10:39:16 +0600 Subject: [PATCH 035/110] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20"=D0=9F=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8:"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 53 +++++++++++++++++++++---------- source/ubl-settings-bootloader.h | 2 ++ 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 5c34eb3..e3e564b 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -125,9 +125,11 @@ void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gt auto selection_OTT = treeViewOTT->get_selection(); selection_IPT->unselect_all(); selection_OTT->unselect_all(); - template_item_selected(map_cmd_selection, path, list_store_kernel); - string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_kernel); - entryKernel->set_text(str_flags); + if (flag_blocked_tree_view == false) { + template_item_selected(map_cmd_selection, path, list_store_kernel); + string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_kernel); + entryKernel->set_text(str_flags); + } } void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { @@ -135,9 +137,11 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_IPT = treeViewIPT->get_selection(); selection_kernel->unselect_all(); selection_IPT->unselect_all(); - template_item_selected(map_cmd_selection , path, list_store_OTT); - string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_OTT); - entryOTT->set_text(str_flags); + if (flag_blocked_tree_view == false) { + template_item_selected(map_cmd_selection , path, list_store_OTT); + string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_OTT); + entryOTT->set_text(str_flags); + } } @@ -146,9 +150,11 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_OTT = treeViewOTT->get_selection(); selection_kernel->unselect_all(); selection_OTT->unselect_all(); - template_item_selected(map_cmd_selection , path, list_store_IPT); - string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_IPT); - entryIPT->set_text(str_flags); + if (flag_blocked_tree_view == false) { + template_item_selected(map_cmd_selection , path, list_store_IPT); + string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_IPT); + entryIPT->set_text(str_flags); + } } @@ -204,13 +210,6 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrappend()); bool flag_chb = false; string name = arr_view[0][index]; - /* - if (map_cmd_selection.find(name) != map_cmd_selection.end()) { - if (map_cmd_selection[name] == "1") { - flag_chb = true; - } - } - */ row[m_columns.check_button] = flag_chb; row[m_columns.name] = gettext(name.c_str()); row[m_columns.description] = gettext(arr_view[1][index].c_str()); @@ -330,15 +329,33 @@ vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_t } bool MainWindow::focus_out_txt_kernel(GdkEventFocus*) { + this->set_entry_to_tree_view(list_store_kernel, *entryKernel, vec_Option_kernel, size_kernel); return true; } + bool MainWindow::focus_out_txt_IPT(GdkEventFocus*) { + this->set_entry_to_tree_view(list_store_IPT, *entryIPT, vec_Option_IPT, size_IPT); return true; } bool MainWindow::focus_out_txt_OTT(GdkEventFocus*) { + this->set_entry_to_tree_view(list_store_OTT, *entryOTT, vec_Option_OTT, size_OTT); return true; } +void MainWindow::set_entry_to_tree_view(Glib::RefPtr &list_store, Gtk::Entry &entry, std::vector &vec_Option, int size) { + flag_blocked_tree_view = true; + vector vec_params; + std::string text = entry.get_text(); + str_replace_all(text, " ", ""); + vec_params = split(text, ','); + for (auto &name: vec_Option) { + this->set_row(list_store, size, name, false); + } + for (auto &name: vec_params) { + this->set_row(list_store, size, name, true); + } + flag_blocked_tree_view = false; +} void MainWindow::get_menu_boot(string cmd) { struct Result res_response = this->wrapper_call(cmd); @@ -401,6 +418,9 @@ void MainWindow::event(){ treeViewIPTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_IPT)); Glib::RefPtr treeViewOTTModel = treeViewOTT->get_model(); treeViewOTTModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_OTT)); + entryKernel->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_kernel)); + entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); + entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); } } @@ -514,7 +534,6 @@ void MainWindow::download_local_cfg() { this->set_row_all(map_local_cmd_selection,list_store_kernel , vec_Option_kernel, size_kernel); this->set_row_all(map_local_cmd_selection,list_store_IPT , vec_Option_IPT, size_IPT); this->set_row_all(map_local_cmd_selection,list_store_OTT , vec_Option_OTT, size_OTT); - info_warning_error(0); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 23f4090..fe7b57b 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -99,6 +99,7 @@ class MainWindow : public Gtk::ApplicationWindow { Glib::RefPtr list_store_kernel; Glib::RefPtr list_store_IPT; Glib::RefPtr list_store_OTT; + void set_entry_to_tree_view(Glib::RefPtr &list_store, Gtk::Entry &entry, std::vector &vec_Option, int size); Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; Gtk::TreeModel::Row row_OTT; @@ -114,6 +115,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_save_all = false; bool flag_save_global = false; bool flag_save_local = false; + bool flag_blocked_tree_view = false; size_t size_kernel = 0; size_t size_IPT = 0; size_t size_OTT = 0; From 00423cdc76d782d550209a44257d45be2fd0fc79 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 30 Mar 2023 12:10:07 +0600 Subject: [PATCH 036/110] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D1=82=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BF=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81?= =?UTF-8?q?=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-bootloader.glade# | 1265 +++++++++++++++++++++++++++++ source/ubl-settings-bootloader.cc | 106 ++- 2 files changed, 1326 insertions(+), 45 deletions(-) create mode 100644 #ubl-settings-bootloader.glade# diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# new file mode 100644 index 0000000..84887a7 --- /dev/null +++ b/#ubl-settings-bootloader.glade# @@ -0,0 +1,1265 @@ + + + + + + False + О Программе + False + True + center + ubl-settings-datetime + dialog + True + ubl-settings-datetime + 1.2 + Copyright © 2023 - UBSoft Software LLC + ubl-settings-bootloader + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + com.ublinux.ubl-settings-bootloader + True + gpl-2-0 + + + False + vertical + 2 + + + False + end + + + + + + False + False + 0 + + + + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + com.ublinux.ubl-settings-bootloader + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + + + True + False + False + False + 4 + + + True + False + Load global configuration + + + + + + True + False + Load local configuration + + + + + + True + False + False + False + 4 + + + True + False + Help + + + + + + True + False + About + + + + + + True + False + False + False + 4 + + + True + False + Save to global and local configuration + + + + + + True + False + Save global configuration + + + + + + True + False + Save local configuration + + + + + + 750 + 550 + False + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 25 + 1 + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + True + in + + + True + False + + + True + False + vertical + + + True + False + + + 81 + True + False + start + + + -1 + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + Load variant selection timer + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + 0 + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Default download + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + The last selection will become the default boot choice + True + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 2 + + + + + False + True + 1 + + + + + True + False + + + 0 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download mode + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 2 + + + + + True + False + + + 0 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Security login: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 3 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Password protection: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 4 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + in + + + True + False + + + -1 + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 10 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + in + + + True + False + + + True + True + + + + + + + + + + False + True + 1 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for input + + + + + False + True + 3 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + in + + + True + False + + + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for output + + + + + False + True + 4 + + + + + + + + + True + True + 2 + + + + + + + True + False + True + + + True + False + ubl-settings-bootloader + + + + + True + False + 32 + com.ublinux.ubl-settings-bootloader + + + + + True + False + + + True + False + + + True + True + False + True + True + menu2 + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Save + + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + True + True + menu1 + none + + + True + False + open-menu-symbolic + + + + + False + True + 1 + + + + + + False + True + 0 + + + + + end + 1 + + + + + True + False + + + True + True + False + True + True + menu + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Load + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + + 2 + + + + + + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Warning! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index e3e564b..273edd8 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -125,6 +125,9 @@ void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gt auto selection_OTT = treeViewOTT->get_selection(); selection_IPT->unselect_all(); selection_OTT->unselect_all(); + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; if (flag_blocked_tree_view == false) { template_item_selected(map_cmd_selection, path, list_store_kernel); string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_kernel); @@ -137,6 +140,9 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_IPT = treeViewIPT->get_selection(); selection_kernel->unselect_all(); selection_IPT->unselect_all(); + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; if (flag_blocked_tree_view == false) { template_item_selected(map_cmd_selection , path, list_store_OTT); string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_OTT); @@ -150,6 +156,9 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_OTT = treeViewOTT->get_selection(); selection_kernel->unselect_all(); selection_OTT->unselect_all(); + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; if (flag_blocked_tree_view == false) { template_item_selected(map_cmd_selection , path, list_store_IPT); string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_IPT); @@ -372,7 +381,8 @@ void MainWindow::get_menu_boot(string cmd) { } void MainWindow::set_menu_boot(string cmd) { - std::string seconds = to_string(spbSecond->get_value()); + int value = spbSecond->get_value(); + std::string seconds = to_string(value); cmd += seconds; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { @@ -389,16 +399,19 @@ void MainWindow::set_menu_boot(string cmd) { void MainWindow::cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT) { string cmd_kernel = entryKernel->get_text(); string cmd_IPT = entryIPT->get_text(); - string cmd_OTT = entryIPT->get_text(); + string cmd_OTT = entryOTT->get_text(); str_remove(cmd_kernel, ","); str_remove(cmd_IPT, ","); str_remove(cmd_OTT, ","); cmd_settings_kernel += "\"" + cmd_kernel + "\""; - this->wrapper_call(cmd_settings_kernel); cmd_settings_IPT += "\"" + cmd_IPT + "\""; - this->wrapper_call(cmd_settings_IPT); cmd_settings_OTT += "\"" + cmd_OTT + "\""; - this->wrapper_call(cmd_settings_OTT); + str_replace_all(cmd_settings_kernel, " \"", "\""); + str_replace_all(cmd_settings_IPT, " \"", "\""); + str_replace_all(cmd_settings_OTT, " \"", "\""); + this->wrapper_system(cmd_settings_kernel, ""); + this->wrapper_system(cmd_settings_IPT, ""); + this->wrapper_system(cmd_settings_OTT, ""); } void MainWindow::event(){ btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); @@ -427,24 +440,24 @@ void MainWindow::event(){ void MainWindow::save_global_local_cfg() { - if (flag_save_global == false) { - std::string cmd_boot_time = "sudo ubconfig --default --source global set boot GRUB_TIMEOUT"; + if (flag_save_global) { + std::string cmd_boot_time = "sudo ubconfig --target global set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --default --source global set boot GRUB_BOOT_SILENT="; - string cmd_settings_IPT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_OUTPUT="; - string cmd_settings_OTT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "sudo ubconfig --target global set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "sudo ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; + string cmd_settings_OTT = "sudo ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - flag_save_all = true; + flag_save_all = false; } - else if (flag_save_local == false) { + else if (flag_save_local) { - std::string cmd_boot_time = "sudo ubconfig --default --source system set boot GRUB_TIMEOUT"; + std::string cmd_boot_time = "sudo ubconfig --target global set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --default --source system set boot GRUB_BOOT_SILENT="; - string cmd_settings_IPT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_OUTPUT="; - string cmd_settings_OTT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "sudo ubconfig --target global set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "sudo ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; + string cmd_settings_OTT = "sudo ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - flag_save_all = true; + flag_save_all = false; } else{ info_status_app("boxInfoMessOK"); @@ -456,15 +469,15 @@ void MainWindow::save_global_local_cfg() { } void MainWindow::save_global_cfg() { - if (flag_save_global == false) { - if (flag_save_all == false) { - std::string cmd_boot_time = "sudo ubconfig --default --source global set boot GRUB_TIMEOUT"; + if (flag_save_global) { + if (flag_save_all) { + std::string cmd_boot_time = "sudo ubconfig --target global set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --default --source global set boot GRUB_BOOT_SILENT="; - string cmd_settings_IPT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_OUTPUT"; - string cmd_settings_OTT = "sudo ubconfig --default --source global set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "sudo ubconfig --target global set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "sudo ubconfig --target global set boot GRUB_TERMINAL_OUTPUT"; + string cmd_settings_OTT = "sudo ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - flag_save_global = true; + flag_save_global = false; } } else{ @@ -475,13 +488,13 @@ void MainWindow::save_global_cfg() { } void MainWindow::save_local_cfg() { - if (flag_save_local == false) { - if (flag_save_all == false) { - std::string cmd_boot_time = "sudo ubconfig --default --source system set boot GRUB_TIMEOUT"; + if (flag_save_local) { + if (flag_save_all) { + std::string cmd_boot_time = "sudo ubconfig --target system set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --default --source system set boot GRUB_BOOT_SILENT="; - string cmd_settings_IPT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_OUTPUT"; - string cmd_settings_OTT = "sudo ubconfig --default --source system set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "sudo ubconfig --target system set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "sudo ubconfig --target system set boot GRUB_TERMINAL_OUTPUT"; + string cmd_settings_OTT = "sudo ubconfig --target system set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); flag_save_local = true; } @@ -497,21 +510,21 @@ void MainWindow::download_globl_cfg() { entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; + flag_save_local = false; + flag_save_global = false; + flag_save_all = false; flag_load = true; std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); - string cmd_kernel_entry = "sudo ubconfig --default --source global get boot GRUB_BOOT_SILENT"; + string cmd_kernel_entry = "sudo ubconfig --default --source global get boot GRUB_CMDLINE_LINUX"; this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_global_cmd_selection); string cmd_ipt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_global_cmd_selection); string cmd_opt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_global_cmd_selection); - this->set_row_all(map_global_cmd_selection,list_store_kernel, vec_Option_kernel, size_kernel); - this->set_row_all(map_global_cmd_selection,list_store_IPT, vec_Option_IPT, size_IPT); - this->set_row_all(map_global_cmd_selection,list_store_OTT, vec_Option_OTT, size_OTT); + this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); + this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); + this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); info_warning_error(1); } @@ -519,21 +532,21 @@ void MainWindow::download_local_cfg() { entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); + flag_save_local = false; + flag_save_global = false; + flag_save_all = false; flag_load = false; - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); - string cmd_kernel_entry = "sudo ubconfig --default --source system get boot GRUB_BOOT_SILENT"; + string cmd_kernel_entry = "sudo ubconfig --default --source system get boot GRUB_CMDLINE_LINUX"; this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_local_cmd_selection); string cmd_ipt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_local_cmd_selection); string cmd_opt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_local_cmd_selection); - this->set_row_all(map_local_cmd_selection,list_store_kernel , vec_Option_kernel, size_kernel); - this->set_row_all(map_local_cmd_selection,list_store_IPT , vec_Option_IPT, size_IPT); - this->set_row_all(map_local_cmd_selection,list_store_OTT , vec_Option_OTT, size_OTT); + this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); + this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); + this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); info_warning_error(0); } @@ -644,6 +657,7 @@ struct MainWindow::Result MainWindow::wrapper_call(string cmd) { response = response.substr(0,response.find("\n")); obj_result.response = response; obj_result.error = 0; + } else { obj_result.response = response; @@ -670,7 +684,8 @@ struct MainWindow::Result MainWindow::wrapper_call(string cmd) { return obj_result; } -void MainWindow::log_mess_error(string &cmd){ +void MainWindow::log_mess_error(string &cmd) { + cout << cmd << endl; string key = ""; if (map_cmd_error.find(cmd) != map_cmd_error.end()){ str_cmd_error = map_cmd_error[cmd]; @@ -686,6 +701,7 @@ void MainWindow::log_mess_error(string &cmd){ } } + void MainWindow::fn_event_intelMax1(){ chbintelMax4->set_active(false); } From 792eb673551c179b2eb3872491dffb4ba658aa5f Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 30 Mar 2023 13:23:55 +0600 Subject: [PATCH 037/110] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BF=D1=83=D0=BD=D0=BA=D1=82=20"=D0=A0=D0=B5=D0=B6=D0=B8?= =?UTF-8?q?=D0=BC=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8:"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-bootloader.glade# | 1265 ----------------------------- source/ubl-settings-bootloader.cc | 121 ++- source/ubl-settings-bootloader.h | 7 + ubl-settings-bootloader.glade | 24 +- ubl-settings-bootloader_ru.po | 12 + 5 files changed, 123 insertions(+), 1306 deletions(-) delete mode 100644 #ubl-settings-bootloader.glade# diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# deleted file mode 100644 index 84887a7..0000000 --- a/#ubl-settings-bootloader.glade# +++ /dev/null @@ -1,1265 +0,0 @@ - - - - - - False - О Программе - False - True - center - ubl-settings-datetime - dialog - True - ubl-settings-datetime - 1.2 - Copyright © 2023 - UBSoft Software LLC - ubl-settings-bootloader - https://ublinux.ru/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - com.ublinux.ubl-settings-bootloader - True - gpl-2-0 - - - False - vertical - 2 - - - False - end - - - - - - False - False - 0 - - - - - - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - com.ublinux.ubl-settings-bootloader - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Running applications as a user with a -specified priority - - - - - - - - True - True - 1 - - - - - True - False - False - False - 4 - - - True - False - Load global configuration - - - - - - True - False - Load local configuration - - - - - - True - False - False - False - 4 - - - True - False - Help - - - - - - True - False - About - - - - - - True - False - False - False - 4 - - - True - False - Save to global and local configuration - - - - - - True - False - Save global configuration - - - - - - True - False - Save local configuration - - - - - - 750 - 550 - False - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 25 - 1 - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - True - in - - - True - False - - - True - False - vertical - - - True - False - - - 81 - True - False - start - - - -1 - - - - - False - True - 0 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - - - Load variant selection timer - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - - 0 - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Default download - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - The last selection will become the default boot choice - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - - - - False - True - 1 - - - - - True - False - - - 0 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download mode - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 2 - - - - - True - False - - - 0 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Security login: - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 3 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Password protection: - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 4 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download menu - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - in - - - True - False - - - -1 - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 10 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Parameters passed to the kernel - - - - - False - True - 2 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - in - - - True - False - - - True - True - - - - - - - - - - False - True - 1 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for input - - - - - False - True - 3 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - in - - - True - False - - - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for output - - - - - False - True - 4 - - - - - - - - - True - True - 2 - - - - - - - True - False - True - - - True - False - ubl-settings-bootloader - - - - - True - False - 32 - com.ublinux.ubl-settings-bootloader - - - - - True - False - - - True - False - - - True - True - False - True - True - menu2 - none - - - True - False - - - True - False - 5 - 5 - 5 - 5 - Save - - - - False - True - 0 - - - - - True - False - pan-down-symbolic - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - True - False - True - True - menu1 - none - - - True - False - open-menu-symbolic - - - - - False - True - 1 - - - - - - False - True - 0 - - - - - end - 1 - - - - - True - False - - - True - True - False - True - True - menu - none - - - True - False - - - True - False - 5 - 5 - 5 - 5 - Load - - - False - True - 0 - - - - - True - False - pan-down-symbolic - - - False - True - 1 - - - - - - - False - True - 0 - - - - - - 2 - - - - - - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Warning! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 273edd8..c5e4f1e 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -116,8 +116,6 @@ void MainWindow::fill_in_view() { this->view_add_colums(*treeViewIPT); this->view_add_colums(*treeViewOTT); std::vector treeViewKernalCol = treeViewKernel->get_columns(); - - //cout << treeViewKernalCol[2]->get_alignment() << endl; } void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { @@ -167,6 +165,56 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: } +void MainWindow::get_download_mode(string cmd) { + struct Result res_response = this->wrapper_call(cmd); + if (res_response.error == 0) { + str_replace_all(res_response.response, "\"",""); + if (res_response.response == "splash") { + cmbDownloadMode->set_active(0); + } + else if (res_response.response == "splash quiet ub.silent") { + cmbDownloadMode->set_active(1); + } + else if (res_response.response == "quiet ub.silent") { + cmbDownloadMode->set_active(2); + } + else if (res_response.response == "plymouth.enable=0") { + cmbDownloadMode->set_active(3); + } + else{ + cmbDownloadMode->set_active(-1); + } + } + else if (res_response.error == 3) { + cmbDownloadMode->set_active(-1); + } + else { + cmbDownloadMode->set_active(-1); + } +} +void MainWindow::set_download_mode(string cmd) { + int index = cmbDownloadMode->get_active_row_number(); + string key = ""; + if (index == 0) { + key = "splash"; + } + else if (index == 1) { + key = "splash quiet ub.silent"; + } + else if (index == 2) { + key = "quiet ub.silent"; + } + else if (index == 3) { + key = "plymouth.enable=0"; + } + else{ + return; + } + cmd +="\"" + key + "\""; + wrapper_system(cmd, ""); + +} + void MainWindow::template_item_selected(std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { const auto iter = list_store->get_iter(path); if(iter) { @@ -272,6 +320,11 @@ void MainWindow::get_builder(){ builder->get_widget("lblDownloadMode", lblDownloadMode); builder->get_widget("lblSecurityLogin", lblSecurityLogin); builder->get_widget("lblPasswordProtec", lblPasswordProtec); + builder->get_widget("cmbDownloadMode", cmbDownloadMode); + builder->get_widget("chbSecurityLogin", chbSecurityLogin); + builder->get_widget("chbPasswordProtecc", chbPasswordProtecc); + builder->get_widget("entryPasswordProtecc", entryPasswordProtecc); + builder->get_widget("entrySecurityLogin", entrySecurityLogin); } void MainWindow::localization(){ @@ -313,6 +366,11 @@ void MainWindow::localization(){ lblDownloadMode->set_text(gettext("Download mode:")); lblSecurityLogin->set_text(gettext("Security login:")); lblPasswordProtec->set_text(gettext("Password protection:")); + + cmbDownloadMode->append(gettext("Plymouth graphics, full log")); + cmbDownloadMode->append(gettext("Plymouth graphics, no log")); + cmbDownloadMode->append(gettext("No plymouth, minimal log")); + cmbDownloadMode->append(gettext("Without plymouth, full log")); } vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp) { @@ -441,25 +499,27 @@ void MainWindow::event(){ void MainWindow::save_global_local_cfg() { if (flag_save_global) { - std::string cmd_boot_time = "sudo ubconfig --target global set boot GRUB_TIMEOUT="; + std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "sudo ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; - string cmd_settings_OTT = "sudo ubconfig --target global set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; + string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); flag_save_all = false; } - else if (flag_save_local) { + if (flag_save_local) { - std::string cmd_boot_time = "sudo ubconfig --target global set boot GRUB_TIMEOUT="; + std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "sudo ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; - string cmd_settings_OTT = "sudo ubconfig --target global set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT="; + string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); flag_save_all = false; } - else{ + else if (flag_save_local == false && flag_save_local == false) { info_status_app("boxInfoMessOK"); lblWarning->set_text(gettext("Nothing to save!")); } @@ -471,12 +531,13 @@ void MainWindow::save_global_local_cfg() { void MainWindow::save_global_cfg() { if (flag_save_global) { if (flag_save_all) { - std::string cmd_boot_time = "sudo ubconfig --target global set boot GRUB_TIMEOUT="; + std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "sudo ubconfig --target global set boot GRUB_TERMINAL_OUTPUT"; - string cmd_settings_OTT = "sudo ubconfig --target global set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT"; + string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); flag_save_global = false; } } @@ -490,12 +551,13 @@ void MainWindow::save_global_cfg() { void MainWindow::save_local_cfg() { if (flag_save_local) { if (flag_save_all) { - std::string cmd_boot_time = "sudo ubconfig --target system set boot GRUB_TIMEOUT="; + std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "sudo ubconfig --target system set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "sudo ubconfig --target system set boot GRUB_TERMINAL_OUTPUT"; - string cmd_settings_OTT = "sudo ubconfig --target system set boot GRUB_TERMINAL_INPUT="; + string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; + string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT"; + string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); + this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); flag_save_local = true; } } @@ -514,17 +576,18 @@ void MainWindow::download_globl_cfg() { flag_save_global = false; flag_save_all = false; flag_load = true; - std::string cmd_boot_time = "sudo ubconfig --default --source global get boot GRUB_TIMEOUT"; + std::string cmd_boot_time = "ubconfig --default --source global get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); - string cmd_kernel_entry = "sudo ubconfig --default --source global get boot GRUB_CMDLINE_LINUX"; + string cmd_kernel_entry = "ubconfig --default --source global get boot GRUB_CMDLINE_LINUX"; this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_global_cmd_selection); - string cmd_ipt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; + string cmd_ipt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_global_cmd_selection); - string cmd_opt_entry = "sudo ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; + string cmd_opt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_global_cmd_selection); this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); + this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT"); info_warning_error(1); } @@ -536,17 +599,18 @@ void MainWindow::download_local_cfg() { flag_save_global = false; flag_save_all = false; flag_load = false; - std::string cmd_boot_time = "sudo ubconfig --default --source system get boot GRUB_TIMEOUT"; + std::string cmd_boot_time = "ubconfig --default --source system get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time); - string cmd_kernel_entry = "sudo ubconfig --default --source system get boot GRUB_CMDLINE_LINUX"; + string cmd_kernel_entry = "ubconfig --default --source system get boot GRUB_CMDLINE_LINUX"; this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_local_cmd_selection); - string cmd_ipt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; + string cmd_ipt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_local_cmd_selection); - string cmd_opt_entry = "sudo ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; + string cmd_opt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_local_cmd_selection); this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); + this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT"); info_warning_error(0); } @@ -685,7 +749,6 @@ struct MainWindow::Result MainWindow::wrapper_call(string cmd) { } void MainWindow::log_mess_error(string &cmd) { - cout << cmd << endl; string key = ""; if (map_cmd_error.find(cmd) != map_cmd_error.end()){ str_cmd_error = map_cmd_error[cmd]; diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index fe7b57b..99595ac 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -91,6 +91,11 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeView *treeViewOTT; Gtk::Image *imgBG; Gtk::Overlay *overHead; + Gtk::ComboBoxText *cmbDownloadMode; + Gtk::ComboBoxText *chbSecurityLogin; + Gtk::ComboBoxText *chbPasswordProtecc; + Gtk::Entry *entrySecurityLogin; + Gtk::Entry *entryPasswordProtecc; std::vector vec_Option_kernel; std::vector vec_Option_IPT; @@ -142,6 +147,7 @@ class MainWindow : public Gtk::ApplicationWindow { void fn_event_intelMax1(); void fn_event_intelMax4(); void synopsis_show(); + void get_download_mode(string cmd); void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view, size_t index); void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); @@ -160,6 +166,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_IPT(GdkEventFocus*); bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); + void set_download_mode(string cmd); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index d294a9a..792091f 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -392,7 +392,7 @@ specified priority - + True False 5 @@ -403,7 +403,7 @@ specified priority 6 - False + True True 1 @@ -460,7 +460,7 @@ specified priority - + True False 5 @@ -480,7 +480,7 @@ specified priority False True - 2 + 3 @@ -507,7 +507,7 @@ specified priority - + True False 5 @@ -524,9 +524,9 @@ specified priority - + True - False + True 5 5 5 @@ -544,7 +544,7 @@ specified priority False True - 3 + 4 @@ -570,7 +570,7 @@ specified priority - + True False 5 @@ -587,9 +587,9 @@ specified priority - + True - False + True 5 5 5 @@ -607,7 +607,7 @@ specified priority False True - 4 + 5 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index a82a2b3..7e8af3c 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -16,6 +16,18 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Plymouth graphics, full log" +msgstr "Графика plymouth, полный лог" + +msgid "Plymouth graphics, no log" +msgstr "Графика plymouth, нет лога" + +msgid "No plymouth, minimal log" +msgstr "Без plymouth, минимальный лог" + +msgid "Without plymouth, full log" +msgstr "Без plymouth, полный лог" + msgid "Download mode:" msgstr "Режим загрузки:" From 5de6ad547d7cf4781e2be24da5fd8f6cd744f851 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 30 Mar 2023 15:38:09 +0600 Subject: [PATCH 038/110] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BF=D1=83=D0=BD=D0=BA=D1=82=20"=D0=9B=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=B7=D0=B0=D1=89=D0=B8=D1=82=D1=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 79 +++++++++++++++++++++++++++++-- source/ubl-settings-bootloader.h | 2 + ubl-settings-bootloader_ru.po | 6 +++ 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index c5e4f1e..b60f861 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -78,14 +78,13 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { - spbSecond->set_range(0, 100000000000); + spbSecond->set_range(1, 60); spbSecond->set_increments(1.0, 1.0); this->fill_in_view(); this->download_local_cfg(); this->download_globl_cfg(); + entrySecurityLogin->set_sensitive(false); this->event(); - - } else{ boxWidgetAll->set_sensitive(false); @@ -192,6 +191,7 @@ void MainWindow::get_download_mode(string cmd) { cmbDownloadMode->set_active(-1); } } + void MainWindow::set_download_mode(string cmd) { int index = cmbDownloadMode->get_active_row_number(); string key = ""; @@ -215,6 +215,70 @@ void MainWindow::set_download_mode(string cmd) { } +void MainWindow::set_security_login(string cmd) { + int index = chbSecurityLogin->get_active_row_number(); + string key = ""; + if (index == 0){ + key = "superadmin"; + } + else if (index == 1) { + key = string(getlogin()); + } + else { + return; + } + entrySecurityLogin->set_text(key); + cmd = cmd + key; + wrapper_system(cmd, ""); +} +void MainWindow::get_security_login(string cmd) { + struct Result res_response = this->wrapper_call(cmd); + if (res_response.error == 0) { + cout << res_response.response << endl; + str_replace_all(res_response.response, "\"",""); + entrySecurityLogin->set_text(res_response.response); + if (res_response.response == getlogin()) { + chbSecurityLogin->set_active(1); + } + else if (res_response.response.length() != 0) { + chbSecurityLogin->set_active(0); + } + else{ + chbSecurityLogin->set_active(-1); + } + } + else if (res_response.error == 3) { + chbSecurityLogin->set_active(-1); + } + else { + chbSecurityLogin->set_active(-1); + } +} + +void MainWindow::set_password_protec(string cmd) { + struct Result res_response = this->wrapper_call(cmd); + if (res_response.error == 0) { + cout << res_response.response << endl; + str_replace_all(res_response.response, "\"",""); + entrySecurityLogin->set_text(res_response.response); + if (res_response.response == getlogin()) { + chbSecurityLogin->set_active(1); + } + else if (res_response.response.length() != 0) { + chbSecurityLogin->set_active(0); + } + else{ + chbSecurityLogin->set_active(-1); + } + } + else if (res_response.error == 3) { + chbSecurityLogin->set_active(-1); + } + else { + chbSecurityLogin->set_active(-1); + } +} + void MainWindow::template_item_selected(std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { const auto iter = list_store->get_iter(path); if(iter) { @@ -367,6 +431,9 @@ void MainWindow::localization(){ lblSecurityLogin->set_text(gettext("Security login:")); lblPasswordProtec->set_text(gettext("Password protection:")); + chbSecurityLogin->append(gettext("Default")); + chbSecurityLogin->append(gettext("Mine")); + cmbDownloadMode->append(gettext("Plymouth graphics, full log")); cmbDownloadMode->append(gettext("Plymouth graphics, no log")); cmbDownloadMode->append(gettext("No plymouth, minimal log")); @@ -506,6 +573,7 @@ void MainWindow::save_global_local_cfg() { string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); + this->set_security_login("ubconfig --target global set boot GRUB_USER="); flag_save_all = false; } if (flag_save_local) { @@ -517,6 +585,7 @@ void MainWindow::save_global_local_cfg() { string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); + this->set_security_login("ubconfig --target system set boot GRUB_USER="); flag_save_all = false; } else if (flag_save_local == false && flag_save_local == false) { @@ -538,6 +607,7 @@ void MainWindow::save_global_cfg() { string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); + this->set_security_login("ubconfig --target global set boot GRUB_USER="); flag_save_global = false; } } @@ -558,6 +628,7 @@ void MainWindow::save_local_cfg() { string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); + this->set_security_login("ubconfig --target system set boot GRUB_USER="); flag_save_local = true; } } @@ -588,6 +659,7 @@ void MainWindow::download_globl_cfg() { this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT"); + this->get_security_login("ubconfig --default --source global get boot GRUB_USER"); info_warning_error(1); } @@ -611,6 +683,7 @@ void MainWindow::download_local_cfg() { this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT"); + this->get_security_login("ubconfig --default --source system get boot GRUB_USER"); info_warning_error(0); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 99595ac..8a3dbb6 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -166,6 +166,8 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_IPT(GdkEventFocus*); bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); + void set_security_login(string cmd); + void get_security_login(string cmd); void set_download_mode(string cmd); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT); diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 7e8af3c..b48e630 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -19,6 +19,12 @@ msgstr "" msgid "Plymouth graphics, full log" msgstr "Графика plymouth, полный лог" +msgid "Mine" +msgstr "Свой" + +msgid "Default" +msgstr "По умолчанию" + msgid "Plymouth graphics, no log" msgstr "Графика plymouth, нет лога" From c8087ee1644873ffcb1e951f1fdf78a710cc3143 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 30 Mar 2023 21:37:54 +0600 Subject: [PATCH 039/110] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D1=82=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BF=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 279 +++++++++++++++++++++--------- source/ubl-settings-bootloader.h | 6 +- ubl-settings-bootloader_ru.po | 3 + 3 files changed, 210 insertions(+), 78 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index b60f861..1c5f3bf 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -170,25 +170,32 @@ void MainWindow::get_download_mode(string cmd) { str_replace_all(res_response.response, "\"",""); if (res_response.response == "splash") { cmbDownloadMode->set_active(0); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } else if (res_response.response == "splash quiet ub.silent") { cmbDownloadMode->set_active(1); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } else if (res_response.response == "quiet ub.silent") { cmbDownloadMode->set_active(2); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } else if (res_response.response == "plymouth.enable=0") { cmbDownloadMode->set_active(3); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } else{ cmbDownloadMode->set_active(-1); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } } else if (res_response.error == 3) { cmbDownloadMode->set_active(-1); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } else { cmbDownloadMode->set_active(-1); + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; } } @@ -219,7 +226,10 @@ void MainWindow::set_security_login(string cmd) { int index = chbSecurityLogin->get_active_row_number(); string key = ""; if (index == 0){ + // TODO: + // Не правильно key = "superadmin"; + } else if (index == 1) { key = string(getlogin()); @@ -231,6 +241,7 @@ void MainWindow::set_security_login(string cmd) { cmd = cmd + key; wrapper_system(cmd, ""); } + void MainWindow::get_security_login(string cmd) { struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { @@ -239,42 +250,80 @@ void MainWindow::get_security_login(string cmd) { entrySecurityLogin->set_text(res_response.response); if (res_response.response == getlogin()) { chbSecurityLogin->set_active(1); + map_cmd_selection["GRUB_USER"] = ""; } else if (res_response.response.length() != 0) { chbSecurityLogin->set_active(0); + map_cmd_selection["GRUB_USER"] = ""; } else{ chbSecurityLogin->set_active(-1); + map_cmd_selection["GRUB_USER"] = ""; } } else if (res_response.error == 3) { chbSecurityLogin->set_active(-1); + map_cmd_selection["GRUB_USER"] = ""; } else { chbSecurityLogin->set_active(-1); + map_cmd_selection["GRUB_USER"] = ""; } } void MainWindow::set_password_protec(string cmd) { + // TODO: + // Не работает + int index = chbSecurityLogin->get_active_row_number(); + string key = ""; + if (index == 0){ + key = ""; + } + else if (index == 1) { + key = ""; + } + else if (index == 2) { + key = ""; + } + else { + return; + } + entrySecurityLogin->set_text(key); + cmd = cmd + key; + wrapper_system(cmd, ""); +} + +void MainWindow::get_password_protec(string cmd) { + // TODO: + // Не работает struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { cout << res_response.response << endl; str_replace_all(res_response.response, "\"",""); entrySecurityLogin->set_text(res_response.response); if (res_response.response == getlogin()) { + chbSecurityLogin->set_active(0); + map_cmd_selection["GRUB_PASSWORD"] = ""; + } + else if (res_response.response.length() != 0) { chbSecurityLogin->set_active(1); + map_cmd_selection["GRUB_PASSWORD"] = ""; } else if (res_response.response.length() != 0) { - chbSecurityLogin->set_active(0); + chbSecurityLogin->set_active(2); + map_cmd_selection["GRUB_PASSWORD"] = ""; } else{ + map_cmd_selection["GRUB_PASSWORD"] = ""; chbSecurityLogin->set_active(-1); } } else if (res_response.error == 3) { + map_cmd_selection["GRUB_PASSWORD"] = ""; chbSecurityLogin->set_active(-1); } else { + map_cmd_selection["GRUB_PASSWORD"] = ""; chbSecurityLogin->set_active(-1); } } @@ -434,6 +483,10 @@ void MainWindow::localization(){ chbSecurityLogin->append(gettext("Default")); chbSecurityLogin->append(gettext("Mine")); + chbPasswordProtecc->append(gettext("Default")); + chbPasswordProtecc->append(gettext("Mine")); + chbPasswordProtecc->append(gettext("Disabled")); + cmbDownloadMode->append(gettext("Plymouth graphics, full log")); cmbDownloadMode->append(gettext("Plymouth graphics, no log")); cmbDownloadMode->append(gettext("No plymouth, minimal log")); @@ -492,8 +545,8 @@ void MainWindow::set_entry_to_tree_view(Glib::RefPtr &list_store } void MainWindow::get_menu_boot(string cmd) { struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { + map_cmd_selection["GRUB_TIMEOUT"] = res_response.response; spbSecond->set_value(atoi(res_response.response.c_str())); } else if (res_response.error == 3) { @@ -509,34 +562,16 @@ void MainWindow::set_menu_boot(string cmd) { int value = spbSecond->get_value(); std::string seconds = to_string(value); cmd += seconds; - struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { + this->wrapper_system(cmd, ""); - } - else if (res_response.error == 3) { - - } - else { +} - } -} - -void MainWindow::cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT) { - string cmd_kernel = entryKernel->get_text(); - string cmd_IPT = entryIPT->get_text(); - string cmd_OTT = entryOTT->get_text(); - str_remove(cmd_kernel, ","); - str_remove(cmd_IPT, ","); - str_remove(cmd_OTT, ","); - cmd_settings_kernel += "\"" + cmd_kernel + "\""; - cmd_settings_IPT += "\"" + cmd_IPT + "\""; - cmd_settings_OTT += "\"" + cmd_OTT + "\""; - str_replace_all(cmd_settings_kernel, " \"", "\""); - str_replace_all(cmd_settings_IPT, " \"", "\""); - str_replace_all(cmd_settings_OTT, " \"", "\""); - this->wrapper_system(cmd_settings_kernel, ""); - this->wrapper_system(cmd_settings_IPT, ""); - this->wrapper_system(cmd_settings_OTT, ""); +void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings) { + string cmds = entry.get_text(); + str_remove(cmds, ","); + cmd_settings += "\"" + cmds + "\""; + str_replace_all(cmd_settings, " \"", "\""); + this->wrapper_system(cmd_settings, ""); } void MainWindow::event(){ btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); @@ -565,78 +600,116 @@ void MainWindow::event(){ void MainWindow::save_global_local_cfg() { - if (flag_save_global) { - std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; - this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; - string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; - this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); - this->set_security_login("ubconfig --target global set boot GRUB_USER="); - flag_save_all = false; - } - if (flag_save_local) { - - std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; - this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT="; - string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; - this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); - this->set_security_login("ubconfig --target system set boot GRUB_USER="); - flag_save_all = false; - } - else if (flag_save_local == false && flag_save_local == false) { - info_status_app("boxInfoMessOK"); - lblWarning->set_text(gettext("Nothing to save!")); - } - info_warning_error(4); - } void MainWindow::save_global_cfg() { + string flag_save = "global"; + bool flag_no_save = true; if (flag_save_global) { if (flag_save_all) { - std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; - this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT"; - string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; - this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); - this->set_security_login("ubconfig --target global set boot GRUB_USER="); - flag_save_global = false; + if (this->check_save(flag_save, "GRUB_TIMEOUT")) { + std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; + this->set_menu_boot(cmd_boot_time); + flag_no_save = false; + } + if (this->check_save(flag_save, "")) { + string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; + this->cmd_entry_all(*entryKernel, cmd_settings_kernel); + flag_no_save = false; + } + if (this->check_save(flag_save, "")) { + string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT"; + this->cmd_entry_all(*entryIPT, cmd_settings_IPT); + flag_no_save = false; + } + if (this->check_save(flag_save, "")) { + string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; + this->cmd_entry_all(*entryOTT, cmd_settings_OTT); + flag_no_save = false; + } + if (this->check_save(flag_save, "GRUB_BOOT_SILENT")) { + this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); + flag_no_save = false; + } + if (this->check_save(flag_save, "GRUB_USER")) { + this->set_security_login("ubconfig --target global set boot GRUB_USER="); + flag_no_save = false; + } + if (this->check_save(flag_save, "GRUB_PASSWORD")) { + this->set_password_protec("ubconfig --target global set boot GRUB_PASSWORD="); + flag_no_save = false; + } + flag_save_local = true; } } - else{ + else { info_status_app("boxInfoMessOK"); lblWarning->set_text(gettext("Nothing to save!")); } - info_warning_error(3); + map_global_cmd_selection = map_cmd_selection; + map_global_cmd_selection = map_local_cmd_selection; + if (flag_no_save){ + info_status_app("boxInfoMessOK"); + lblWarning->set_text(gettext("Nothing to save!")); + } + else { + info_warning_error(3); + } } void MainWindow::save_local_cfg() { + string flag_save = "local"; + bool flag_no_save = true; if (flag_save_local) { if (flag_save_all) { - std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; - this->set_menu_boot(cmd_boot_time); - string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; - string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT"; - string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; - this->cmd_entry_all(cmd_settings_kernel,cmd_settings_IPT,cmd_settings_OTT); - this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); - this->set_security_login("ubconfig --target system set boot GRUB_USER="); + if (this->check_save(flag_save, "GRUB_TIMEOUT")) { + std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; + this->set_menu_boot(cmd_boot_time); + flag_no_save = false; + } + if (this->check_save(flag_save, "")) { + string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; + this->cmd_entry_all(*entryKernel, cmd_settings_kernel); + flag_no_save = false; + } + if (this->check_save(flag_save, "")) { + string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT"; + this->cmd_entry_all(*entryIPT, cmd_settings_IPT); + flag_no_save = false; + } + if (this->check_save(flag_save, "")) { + string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; + this->cmd_entry_all(*entryOTT, cmd_settings_OTT); + flag_no_save = false; + } + if (this->check_save(flag_save, "GRUB_BOOT_SILENT")) { + this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); + flag_no_save = false; + } + if (this->check_save(flag_save, "GRUB_USER")) { + this->set_security_login("ubconfig --target system set boot GRUB_USER="); + flag_no_save = false; + } + if (this->check_save(flag_save, "GRUB_PASSWORD")) { + this->set_password_protec("ubconfig --target system set boot GRUB_PASSWORD="); + flag_no_save = false; + } flag_save_local = true; } } else { + flag_no_save = false; + } + map_global_cmd_selection = map_cmd_selection; + map_global_cmd_selection = map_local_cmd_selection; + if (flag_no_save){ info_status_app("boxInfoMessOK"); lblWarning->set_text(gettext("Nothing to save!")); } - info_warning_error(2); + else { + info_warning_error(2); + } } void MainWindow::download_globl_cfg() { @@ -660,6 +733,7 @@ void MainWindow::download_globl_cfg() { this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT"); this->get_security_login("ubconfig --default --source global get boot GRUB_USER"); + this->get_password_protec("ubconfig --default --source global get boot GRUB_PASSWORD"); info_warning_error(1); } @@ -684,7 +758,58 @@ void MainWindow::download_local_cfg() { this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT"); this->get_security_login("ubconfig --default --source system get boot GRUB_USER"); + this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD"); info_warning_error(0); +} + +bool MainWindow::check_save(string flag_save, string key_name="") { + std::map :: iterator iter_map_data; + std::map :: iterator iter_map_data_local; + std::map :: iterator iter_map_data_global; + std::map :: iterator iter_map_data_old; + std::map map_config_data; + std::map map_config_data_local; + std::map map_config_data_global; + std::map map_config_data_old; + if (flag_save == "all") { + map_config_data = map_cmd_selection; + } + else if (flag_save == "local") { + map_config_data_old = map_local_cmd_selection; + map_config_data_local = map_local_cmd_selection; + + } + else if (flag_save == "global") { + map_config_data_old = map_global_cmd_selection; + map_config_data_global = map_global_cmd_selection; + } + else { + // TODO: + // Убрать + throw std::logic_error("Ошибка по невнимательности"); + } + + iter_map_data = map_config_data.find(key_name); + iter_map_data_old = map_config_data_old.find(key_name); + if (iter_map_data == map_config_data.end()) { + return false; + } + else if (iter_map_data_old == map_config_data_old.end()) { + return false; + } + else if (iter_map_data->second != iter_map_data_old->second) { + return false; + } + else if (iter_map_data->second.length() == 0 || iter_map_data_old->second.length() == 0) { + return true; + } + else if (iter_map_data->second == iter_map_data_old->second) { + return true; + } + else { + return false; + } + return false; } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 8a3dbb6..4b4ff34 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -160,6 +160,7 @@ class MainWindow : public Gtk::ApplicationWindow { void download_local_cfg(); void download_globl_cfg(); void info_status_app(string stule); + bool check_save(string flag_save, string key_name); void info_warning_error(int mess); int check_root(); bool focus_out_txt_kernel(GdkEventFocus*); @@ -168,9 +169,12 @@ class MainWindow : public Gtk::ApplicationWindow { void fill_in_view(); void set_security_login(string cmd); void get_security_login(string cmd); + bool check_flag_save(string flag_save); void set_download_mode(string cmd); + void get_password_protec(string cmd); + void set_password_protec(string cmd); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); - void cmd_entry_all(string cmd_settings_kernel,string cmd_settings_IPT,string cmd_settings_OTT); + void cmd_entry_all(Gtk::Entry &entry, string cmd_settings); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index b48e630..f1c80e7 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -22,6 +22,9 @@ msgstr "Графика plymouth, полный лог" msgid "Mine" msgstr "Свой" +msgid "Disabled" +msgstr "Отключён" + msgid "Default" msgstr "По умолчанию" From 1388a5b5fba8d45eb8d7dea98fee339edb2bc440 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 31 Mar 2023 11:09:16 +0600 Subject: [PATCH 040/110] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D1=81=D0=BE?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 245 +++++++++++++++++------------- source/ubl-settings-bootloader.h | 18 ++- ubl-settings-bootloader.glade | 3 +- 3 files changed, 154 insertions(+), 112 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 1c5f3bf..244f1e6 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -84,7 +84,9 @@ void MainWindow::settings(){ this->download_local_cfg(); this->download_globl_cfg(); entrySecurityLogin->set_sensitive(false); + this->set_active_boot_second(); this->event(); + } else{ boxWidgetAll->set_sensitive(false); @@ -93,6 +95,7 @@ void MainWindow::settings(){ imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); info_status_app("boxInfoMessError"); lblWarning->set_text(gettext("The program must be run as root")); + this->set_active_boot_second(); this->event(); } } @@ -114,7 +117,6 @@ void MainWindow::fill_in_view() { this->view_add_colums(*treeViewKernel); this->view_add_colums(*treeViewIPT); this->view_add_colums(*treeViewOTT); - std::vector treeViewKernalCol = treeViewKernel->get_columns(); } void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { @@ -161,45 +163,44 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_IPT); entryIPT->set_text(str_flags); } - } -void MainWindow::get_download_mode(string cmd) { +void MainWindow::get_download_mode(string cmd, std::map &map_temp) { struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { str_replace_all(res_response.response, "\"",""); if (res_response.response == "splash") { cmbDownloadMode->set_active(0); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = "splash"; } else if (res_response.response == "splash quiet ub.silent") { cmbDownloadMode->set_active(1); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = "splash quiet ub.silent"; } else if (res_response.response == "quiet ub.silent") { cmbDownloadMode->set_active(2); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = "quiet ub.silent"; } else if (res_response.response == "plymouth.enable=0") { cmbDownloadMode->set_active(3); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = "plymouth.enable=0"; } else{ cmbDownloadMode->set_active(-1); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = ""; } } else if (res_response.error == 3) { cmbDownloadMode->set_active(-1); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = ""; } else { cmbDownloadMode->set_active(-1); - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_temp["GRUB_BOOT_SILENT"] = ""; } } -void MainWindow::set_download_mode(string cmd) { +void MainWindow::set_download_mode(string cmd="") { int index = cmbDownloadMode->get_active_row_number(); string key = ""; if (index == 0) { @@ -217,12 +218,15 @@ void MainWindow::set_download_mode(string cmd) { else{ return; } - cmd +="\"" + key + "\""; - wrapper_system(cmd, ""); + if (cmd.length() !=0 ) { + cmd +="\"" + key + "\""; + wrapper_system(cmd, ""); + } + map_cmd_selection["GRUB_BOOT_SILENT"] = key; } -void MainWindow::set_security_login(string cmd) { +void MainWindow::set_security_login(string cmd="") { int index = chbSecurityLogin->get_active_row_number(); string key = ""; if (index == 0){ @@ -237,41 +241,43 @@ void MainWindow::set_security_login(string cmd) { else { return; } - entrySecurityLogin->set_text(key); - cmd = cmd + key; - wrapper_system(cmd, ""); + if (cmd.length() != 0) { + entrySecurityLogin->set_text(key); + cmd = cmd + key; + wrapper_system(cmd, ""); + } + map_cmd_selection["GRUB_USER"] = key; } -void MainWindow::get_security_login(string cmd) { +void MainWindow::get_security_login(string cmd, std::map &map_temp) { struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - cout << res_response.response << endl; str_replace_all(res_response.response, "\"",""); entrySecurityLogin->set_text(res_response.response); if (res_response.response == getlogin()) { chbSecurityLogin->set_active(1); - map_cmd_selection["GRUB_USER"] = ""; + map_temp["GRUB_USER"] = getlogin(); } else if (res_response.response.length() != 0) { chbSecurityLogin->set_active(0); - map_cmd_selection["GRUB_USER"] = ""; + map_temp["GRUB_USER"] = res_response.response; } else{ chbSecurityLogin->set_active(-1); - map_cmd_selection["GRUB_USER"] = ""; + map_temp["GRUB_USER"] = ""; } } else if (res_response.error == 3) { chbSecurityLogin->set_active(-1); - map_cmd_selection["GRUB_USER"] = ""; + map_temp["GRUB_USER"] = ""; } else { chbSecurityLogin->set_active(-1); - map_cmd_selection["GRUB_USER"] = ""; + map_temp["GRUB_USER"] = ""; } } -void MainWindow::set_password_protec(string cmd) { +void MainWindow::set_password_protec(string cmd="") { // TODO: // Не работает int index = chbSecurityLogin->get_active_row_number(); @@ -290,40 +296,40 @@ void MainWindow::set_password_protec(string cmd) { } entrySecurityLogin->set_text(key); cmd = cmd + key; + map_cmd_selection["GRUB_PASSWORD"] = key; wrapper_system(cmd, ""); } -void MainWindow::get_password_protec(string cmd) { +void MainWindow::get_password_protec(string cmd, std::map &map_temp) { // TODO: // Не работает struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - cout << res_response.response << endl; str_replace_all(res_response.response, "\"",""); entrySecurityLogin->set_text(res_response.response); if (res_response.response == getlogin()) { chbSecurityLogin->set_active(0); - map_cmd_selection["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = ""; } else if (res_response.response.length() != 0) { chbSecurityLogin->set_active(1); - map_cmd_selection["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = ""; } else if (res_response.response.length() != 0) { chbSecurityLogin->set_active(2); - map_cmd_selection["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = ""; } else{ - map_cmd_selection["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = ""; chbSecurityLogin->set_active(-1); } } else if (res_response.error == 3) { - map_cmd_selection["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = ""; chbSecurityLogin->set_active(-1); } else { - map_cmd_selection["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = ""; chbSecurityLogin->set_active(-1); } } @@ -543,10 +549,10 @@ void MainWindow::set_entry_to_tree_view(Glib::RefPtr &list_store } flag_blocked_tree_view = false; } -void MainWindow::get_menu_boot(string cmd) { +void MainWindow::get_menu_boot(string cmd, std::map &map_temp) { struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - map_cmd_selection["GRUB_TIMEOUT"] = res_response.response; + map_temp["GRUB_TIMEOUT"] = res_response.response; spbSecond->set_value(atoi(res_response.response.c_str())); } else if (res_response.error == 3) { @@ -558,11 +564,14 @@ void MainWindow::get_menu_boot(string cmd) { } -void MainWindow::set_menu_boot(string cmd) { +void MainWindow::set_menu_boot(string cmd="") { int value = spbSecond->get_value(); std::string seconds = to_string(value); cmd += seconds; - this->wrapper_system(cmd, ""); + if (cmd.length() != 0) { + this->wrapper_system(cmd, ""); + } + map_cmd_selection["GRUB_TIMEOUT"] = to_string(value); } @@ -573,14 +582,15 @@ void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings) { str_replace_all(cmd_settings, " \"", "\""); this->wrapper_system(cmd_settings, ""); } + void MainWindow::event(){ btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); btnAbout->signal_activate().connect([&]() {aboutWindows->show();}); btnLoadLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); btnLoadGlob->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); - btnSaveLocalGlob->signal_activate().connect([&]() {save_global_local_cfg();}); - btnSaveLocal->signal_activate().connect([&]() {save_local_cfg();}); - btnSaveGlob->signal_activate().connect([&]() {save_global_cfg();}); + btnSaveLocalGlob->signal_activate().connect([&]() {wrapper_save_all_cfg();}); + btnSaveLocal->signal_activate().connect([&]() {wrapper_save_local_cfg();}); + btnSaveGlob->signal_activate().connect([&]() {wrapper_save_global_cfg();}); entryKernel->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_kernel)); entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); @@ -595,35 +605,57 @@ void MainWindow::event(){ entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); } + chbLoadVariantSelectionTimer->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_active_boot_second)); } +void MainWindow::set_active_boot_second() { + spbSecond->set_sensitive(chbLoadVariantSelectionTimer->get_active()); + lblInfoSeconds->set_sensitive(chbLoadVariantSelectionTimer->get_active()); +} +void MainWindow::wrapper_save_all_cfg() { + if (this->save_global_cfg() && this->save_local_cfg()) { + info_status_app("boxInfoMessOK"); + lblWarning->set_text(gettext("Nothing to save!")); + } + else { + info_warning_error(4); + } + +} -void MainWindow::save_global_local_cfg() { - info_warning_error(4); +void MainWindow::wrapper_save_global_cfg() { + if (this->save_global_cfg()) { + info_status_app("boxInfoMessOK"); + lblWarning->set_text(gettext("Nothing to save!")); + } + else { + info_warning_error(3); + } } -void MainWindow::save_global_cfg() { +bool MainWindow::save_global_cfg() { string flag_save = "global"; bool flag_no_save = true; if (flag_save_global) { if (flag_save_all) { + this->set_data_cfg(); if (this->check_save(flag_save, "GRUB_TIMEOUT")) { std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); flag_no_save = false; } - if (this->check_save(flag_save, "")) { + if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; this->cmd_entry_all(*entryKernel, cmd_settings_kernel); flag_no_save = false; } - if (this->check_save(flag_save, "")) { - string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT"; + if (this->check_save(flag_save, "GRUB_TERMINAL_OUTPUT")) { + string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; this->cmd_entry_all(*entryIPT, cmd_settings_IPT); flag_no_save = false; } - if (this->check_save(flag_save, "")) { + if (this->check_save(flag_save, "GRUB_TERMINAL_INPUT")) { string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(*entryOTT, cmd_settings_OTT); flag_no_save = false; @@ -640,45 +672,47 @@ void MainWindow::save_global_cfg() { this->set_password_protec("ubconfig --target global set boot GRUB_PASSWORD="); flag_no_save = false; } - flag_save_local = true; } } else { - info_status_app("boxInfoMessOK"); - lblWarning->set_text(gettext("Nothing to save!")); + flag_no_save = true; } map_global_cmd_selection = map_cmd_selection; - map_global_cmd_selection = map_local_cmd_selection; - if (flag_no_save){ + return flag_no_save; +} + +void MainWindow::wrapper_save_local_cfg() { + if (this->save_local_cfg()){ info_status_app("boxInfoMessOK"); lblWarning->set_text(gettext("Nothing to save!")); } else { - info_warning_error(3); + info_warning_error(2); } } -void MainWindow::save_local_cfg() { +bool MainWindow::save_local_cfg() { string flag_save = "local"; bool flag_no_save = true; if (flag_save_local) { if (flag_save_all) { + this->set_data_cfg(); if (this->check_save(flag_save, "GRUB_TIMEOUT")) { std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; this->set_menu_boot(cmd_boot_time); flag_no_save = false; } - if (this->check_save(flag_save, "")) { + if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; this->cmd_entry_all(*entryKernel, cmd_settings_kernel); flag_no_save = false; } - if (this->check_save(flag_save, "")) { - string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT"; + if (this->check_save(flag_save, "GRUB_TERMINAL_OUTPUT")) { + string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT="; this->cmd_entry_all(*entryIPT, cmd_settings_IPT); flag_no_save = false; } - if (this->check_save(flag_save, "")) { + if (this->check_save(flag_save, "GRUB_TERMINAL_INPUT")) { string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; this->cmd_entry_all(*entryOTT, cmd_settings_OTT); flag_no_save = false; @@ -695,21 +729,31 @@ void MainWindow::save_local_cfg() { this->set_password_protec("ubconfig --target system set boot GRUB_PASSWORD="); flag_no_save = false; } - flag_save_local = true; } } else { - flag_no_save = false; - } - map_global_cmd_selection = map_cmd_selection; - map_global_cmd_selection = map_local_cmd_selection; - if (flag_no_save){ - info_status_app("boxInfoMessOK"); - lblWarning->set_text(gettext("Nothing to save!")); - } - else { - info_warning_error(2); + flag_no_save = true; } + map_local_cmd_selection = map_cmd_selection; + return flag_no_save; +} +void MainWindow::set_data_cfg() { + this->set_security_login(); + this->set_download_mode(); + this->set_password_protec(); + this->set_menu_boot(); + string str_flags = entryKernel->get_text(); + str_remove(str_flags, ","); + str_replace_all(str_flags, " \"", "\""); + map_cmd_selection["GRUB_CMDLINE_LINUX"] = str_flags; + str_flags = entryIPT->get_text(); + str_remove(str_flags, ","); + str_replace_all(str_flags, " \"", "\""); + map_cmd_selection["GRUB_TERMINAL_INPUT"] = str_flags; + str_flags = entryOTT->get_text(); + str_remove(str_flags, ","); + str_replace_all(str_flags, " \"", "\""); + map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; } void MainWindow::download_globl_cfg() { @@ -721,7 +765,7 @@ void MainWindow::download_globl_cfg() { flag_save_all = false; flag_load = true; std::string cmd_boot_time = "ubconfig --default --source global get boot GRUB_TIMEOUT"; - this->get_menu_boot(cmd_boot_time); + this->get_menu_boot(cmd_boot_time, map_global_cmd_selection); string cmd_kernel_entry = "ubconfig --default --source global get boot GRUB_CMDLINE_LINUX"; this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_global_cmd_selection); string cmd_ipt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; @@ -731,10 +775,11 @@ void MainWindow::download_globl_cfg() { this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); - this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT"); - this->get_security_login("ubconfig --default --source global get boot GRUB_USER"); - this->get_password_protec("ubconfig --default --source global get boot GRUB_PASSWORD"); + this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT", map_global_cmd_selection); + this->get_security_login("ubconfig --default --source global get boot GRUB_USER", map_global_cmd_selection); + this->get_password_protec("ubconfig --default --source global get boot GRUB_PASSWORD", map_global_cmd_selection); info_warning_error(1); + map_cmd_selection = map_global_cmd_selection; } void MainWindow::download_local_cfg() { @@ -746,7 +791,7 @@ void MainWindow::download_local_cfg() { flag_save_all = false; flag_load = false; std::string cmd_boot_time = "ubconfig --default --source system get boot GRUB_TIMEOUT"; - this->get_menu_boot(cmd_boot_time); + this->get_menu_boot(cmd_boot_time, map_local_cmd_selection); string cmd_kernel_entry = "ubconfig --default --source system get boot GRUB_CMDLINE_LINUX"; this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_local_cmd_selection); string cmd_ipt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; @@ -756,60 +801,52 @@ void MainWindow::download_local_cfg() { this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); - this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT"); - this->get_security_login("ubconfig --default --source system get boot GRUB_USER"); - this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD"); + this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT", map_local_cmd_selection); + this->get_security_login("ubconfig --default --source system get boot GRUB_USER", map_local_cmd_selection); + this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD", map_local_cmd_selection); info_warning_error(0); + map_cmd_selection = map_local_cmd_selection; } bool MainWindow::check_save(string flag_save, string key_name="") { std::map :: iterator iter_map_data; - std::map :: iterator iter_map_data_local; - std::map :: iterator iter_map_data_global; std::map :: iterator iter_map_data_old; - std::map map_config_data; - std::map map_config_data_local; - std::map map_config_data_global; std::map map_config_data_old; - if (flag_save == "all") { - map_config_data = map_cmd_selection; - } - else if (flag_save == "local") { + if (flag_save == "local") { map_config_data_old = map_local_cmd_selection; - map_config_data_local = map_local_cmd_selection; - } else if (flag_save == "global") { map_config_data_old = map_global_cmd_selection; - map_config_data_global = map_global_cmd_selection; } - else { - // TODO: - // Убрать - throw std::logic_error("Ошибка по невнимательности"); - } - - iter_map_data = map_config_data.find(key_name); + iter_map_data = map_cmd_selection.find(key_name); iter_map_data_old = map_config_data_old.find(key_name); - if (iter_map_data == map_config_data.end()) { - return false; + + if (iter_map_data == map_cmd_selection.end()) { + cout << 1 << endl; + return true; } else if (iter_map_data_old == map_config_data_old.end()) { - return false; + cout << 2 << endl; + return true; } else if (iter_map_data->second != iter_map_data_old->second) { - return false; + cout << 3 << endl; + return true; } else if (iter_map_data->second.length() == 0 || iter_map_data_old->second.length() == 0) { - return true; + cout << 4 << " " << key_name << endl; + return false; } else if (iter_map_data->second == iter_map_data_old->second) { - return true; + cout << 5 << " " << key_name << endl; + return false; } else { - return false; + cout << 6 << endl; + return true; } - return false; + cout << 7 << endl; + return true; } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 4b4ff34..ce06be7 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -135,7 +135,7 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); - void get_menu_boot(string cmd); + void get_menu_boot(string cmd, std::map &map_temp); void set_menu_boot(string cmd); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); @@ -147,15 +147,19 @@ class MainWindow : public Gtk::ApplicationWindow { void fn_event_intelMax1(); void fn_event_intelMax4(); void synopsis_show(); - void get_download_mode(string cmd); + void set_data_cfg(); + void set_active_boot_second(); + void get_download_mode(string cmd, std::map &map_temp); void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view, size_t index); void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); void log_mess_error(string &cmd); - void save_global_local_cfg(); - void save_local_cfg(); + void wrapper_save_all_cfg(); + bool save_local_cfg(); + void wrapper_save_local_cfg(); + void wrapper_save_global_cfg(); void view_add_colums(Gtk::TreeView &treeView); - void save_global_cfg(); + bool save_global_cfg(); vector read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); void download_globl_cfg(); @@ -168,10 +172,10 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); void set_security_login(string cmd); - void get_security_login(string cmd); + void get_security_login(string cmd, std::map &map_temp); bool check_flag_save(string flag_save); void set_download_mode(string cmd); - void get_password_protec(string cmd); + void get_password_protec(string cmd, std::map &map_temp); void set_password_protec(string cmd); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 792091f..3ff4e67 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1,5 +1,5 @@ - + @@ -192,6 +192,7 @@ specified priority 750 550 False + com.ublinux.ubl-settings-bootloader True From dfad291131caa2c51b889adb0e440bd9aa2509b9 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 31 Mar 2023 12:18:37 +0600 Subject: [PATCH 041/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F,=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20cbx=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 54 ++++++++++++++++++++++++------- source/ubl-settings-bootloader.h | 4 ++- ubl-settings-bootloader.glade | 42 ++++++++++++++++++++++-- ubl-settings-bootloader_ru.po | 19 ++++++----- 4 files changed, 95 insertions(+), 24 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 244f1e6..841b5d0 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -85,6 +85,7 @@ void MainWindow::settings(){ this->download_globl_cfg(); entrySecurityLogin->set_sensitive(false); this->set_active_boot_second(); + this->change_password_protecc(); this->event(); } @@ -277,7 +278,7 @@ void MainWindow::get_security_login(string cmd, std::map &map_t } } -void MainWindow::set_password_protec(string cmd="") { +void MainWindow::set_password_protec(string cmd = "", string cmd_remove= "") { // TODO: // Не работает int index = chbSecurityLogin->get_active_row_number(); @@ -286,18 +287,25 @@ void MainWindow::set_password_protec(string cmd="") { key = ""; } else if (index == 1) { - key = ""; + key = entryPasswordProtecc->get_text(); + } else if (index == 2) { - key = ""; + key = "remove"; + if (cmd.length() != 0 && cmd_remove.length() != 0) { + wrapper_system(cmd_remove, ""); + } + cmd = ""; } else { return; } - entrySecurityLogin->set_text(key); - cmd = cmd + key; + if (cmd.length() != 0 && cmd_remove.length() != 0) { + entrySecurityLogin->set_text(key); + cmd = cmd + key; + wrapper_system(cmd, ""); + } map_cmd_selection["GRUB_PASSWORD"] = key; - wrapper_system(cmd, ""); } void MainWindow::get_password_protec(string cmd, std::map &map_temp) { @@ -493,10 +501,10 @@ void MainWindow::localization(){ chbPasswordProtecc->append(gettext("Mine")); chbPasswordProtecc->append(gettext("Disabled")); - cmbDownloadMode->append(gettext("Plymouth graphics, full log")); - cmbDownloadMode->append(gettext("Plymouth graphics, no log")); - cmbDownloadMode->append(gettext("No plymouth, minimal log")); - cmbDownloadMode->append(gettext("Without plymouth, full log")); + cmbDownloadMode->append(gettext("Loading animation, full log")); + cmbDownloadMode->append(gettext("Loading animation, no log")); + cmbDownloadMode->append(gettext("No loading animation, full log.")); + cmbDownloadMode->append(gettext("No loading animation, minimal log.")); } vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp) { @@ -521,6 +529,12 @@ vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_t return vec_params; } +bool MainWindow::focus_out_txt_password(GdkEventFocus*) { + info_status_app("boxInfoMessError"); + lblWarning->set_text(gettext("Enter your password")); + return true; +} + bool MainWindow::focus_out_txt_kernel(GdkEventFocus*) { this->set_entry_to_tree_view(list_store_kernel, *entryKernel, vec_Option_kernel, size_kernel); return true; @@ -594,6 +608,8 @@ void MainWindow::event(){ entryKernel->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_kernel)); entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); + entryPasswordProtecc->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_password)); + chbPasswordProtecc->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_password_protecc)); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); @@ -608,6 +624,16 @@ void MainWindow::event(){ chbLoadVariantSelectionTimer->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_active_boot_second)); } +void MainWindow::change_password_protecc() { + int index = chbPasswordProtecc->get_active_row_number(); + if (index == 0 || index == 2 || index == -1) { + entryPasswordProtecc->set_sensitive(false); + } + else if (index == 1) { + entryPasswordProtecc->set_sensitive(true); + } +} + void MainWindow::set_active_boot_second() { spbSecond->set_sensitive(chbLoadVariantSelectionTimer->get_active()); lblInfoSeconds->set_sensitive(chbLoadVariantSelectionTimer->get_active()); @@ -669,7 +695,9 @@ bool MainWindow::save_global_cfg() { flag_no_save = false; } if (this->check_save(flag_save, "GRUB_PASSWORD")) { - this->set_password_protec("ubconfig --target global set boot GRUB_PASSWORD="); + string cmd_password = "ubconfig --target global set boot GRUB_PASSWORD="; + string cmd_password_remove = "ubconfig --target global remove boot GRUB_PASSWORD="; + this->set_password_protec(cmd_password, cmd_password_remove); flag_no_save = false; } } @@ -726,7 +754,9 @@ bool MainWindow::save_local_cfg() { flag_no_save = false; } if (this->check_save(flag_save, "GRUB_PASSWORD")) { - this->set_password_protec("ubconfig --target system set boot GRUB_PASSWORD="); + string cmd_password = "ubconfig --target system set boot GRUB_PASSWORD="; + string cmd_password_remove = "ubconfig --target system remove boot GRUB_PASSWORD="; + this->set_password_protec(cmd_password, cmd_password_remove); flag_no_save = false; } } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index ce06be7..a01f8cb 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -175,8 +175,10 @@ class MainWindow : public Gtk::ApplicationWindow { void get_security_login(string cmd, std::map &map_temp); bool check_flag_save(string flag_save); void set_download_mode(string cmd); + void change_password_protecc(); + bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(string cmd, std::map &map_temp); - void set_password_protec(string cmd); + void set_password_protec(string cmd, string cmd_remove); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 3ff4e67..72ff405 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -374,7 +374,6 @@ specified priority False - 0 True False start @@ -385,6 +384,7 @@ specified priority 6 6 Default download + start False @@ -443,9 +443,9 @@ specified priority False - 0 True False + start 5 5 5 @@ -453,6 +453,7 @@ specified priority 6 6 Download mode + start False @@ -490,9 +491,9 @@ specified priority False - 0 True False + start 5 5 5 @@ -500,6 +501,7 @@ specified priority 6 6 Security login: + start False @@ -556,6 +558,7 @@ specified priority True False + start 5 5 5 @@ -563,6 +566,7 @@ specified priority 6 6 Password protection: + start False @@ -734,6 +738,7 @@ specified priority True False + start 5 5 5 @@ -741,6 +746,7 @@ specified priority 6 6 Parameters passed to the kernel + start @@ -848,6 +854,7 @@ specified priority True False + start 5 5 5 @@ -855,6 +862,7 @@ specified priority 6 6 Terminal for input + start @@ -962,6 +970,7 @@ specified priority True False + start 5 5 5 @@ -969,6 +978,7 @@ specified priority 6 6 Terminal for output + start @@ -1176,6 +1186,32 @@ specified priority + + both + True + + + + + + + + both + True + + + + + + + + + + + + + + False Внимание! diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index f1c80e7..f74bcd5 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -16,8 +16,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Plymouth graphics, full log" -msgstr "Графика plymouth, полный лог" +msgid "Enter your password" +msgstr "Введите пароль" msgid "Mine" msgstr "Свой" @@ -28,14 +28,17 @@ msgstr "Отключён" msgid "Default" msgstr "По умолчанию" -msgid "Plymouth graphics, no log" -msgstr "Графика plymouth, нет лога" +msgid "Loading animation, full log" +msgstr "Анимация загрузки, полный лог" -msgid "No plymouth, minimal log" -msgstr "Без plymouth, минимальный лог" +msgid "Loading animation, no log" +msgstr "Анимация загрузки, нет лога" -msgid "Without plymouth, full log" -msgstr "Без plymouth, полный лог" +msgid "No loading animation, full log." +msgstr "Без анимации загрузки, полный лог" + +msgid "No loading animation, minimal log." +msgstr "Без анимации загрузки, минимальный лог" msgid "Download mode:" msgstr "Режим загрузки:" From 532d354afbe6b6e9f43be2933d0c6c75c3fa9d5d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 31 Mar 2023 12:55:17 +0600 Subject: [PATCH 042/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20cmb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 42 ++++++++++++++++++++----------- source/ubl-settings-bootloader.h | 1 + 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 841b5d0..543d475 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -86,6 +86,7 @@ void MainWindow::settings(){ entrySecurityLogin->set_sensitive(false); this->set_active_boot_second(); this->change_password_protecc(); + this->change_security_login(); this->event(); } @@ -220,11 +221,10 @@ void MainWindow::set_download_mode(string cmd="") { return; } if (cmd.length() !=0 ) { - cmd +="\"" + key + "\""; + cmd += "\"" + key + "\""; wrapper_system(cmd, ""); } map_cmd_selection["GRUB_BOOT_SILENT"] = key; - } void MainWindow::set_security_login(string cmd="") { @@ -610,6 +610,7 @@ void MainWindow::event(){ entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); entryPasswordProtecc->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_password)); chbPasswordProtecc->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_password_protecc)); + chbSecurityLogin->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_security_login)); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); @@ -624,6 +625,20 @@ void MainWindow::event(){ chbLoadVariantSelectionTimer->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_active_boot_second)); } +void MainWindow::change_security_login() { + int index = chbSecurityLogin->get_active_row_number(); + if (index == 0 || index == -1) { + entrySecurityLogin->set_sensitive(false); + // TODO: + // Добавить заполнение логина по умолчанию + entrySecurityLogin->set_text(""); + } + else if (index == 1) { + entrySecurityLogin->set_sensitive(true); + entrySecurityLogin->set_text(""); + } +} + void MainWindow::change_password_protecc() { int index = chbPasswordProtecc->get_active_row_number(); if (index == 0 || index == 2 || index == -1) { @@ -631,6 +646,7 @@ void MainWindow::change_password_protecc() { } else if (index == 1) { entryPasswordProtecc->set_sensitive(true); + entryPasswordProtecc->set_text(""); } } @@ -665,6 +681,8 @@ bool MainWindow::save_global_cfg() { bool flag_no_save = true; if (flag_save_global) { if (flag_save_all) { + flag_save_all = false; + flag_save_global = false; this->set_data_cfg(); if (this->check_save(flag_save, "GRUB_TIMEOUT")) { std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; @@ -702,9 +720,6 @@ bool MainWindow::save_global_cfg() { } } } - else { - flag_no_save = true; - } map_global_cmd_selection = map_cmd_selection; return flag_no_save; } @@ -724,6 +739,8 @@ bool MainWindow::save_local_cfg() { bool flag_no_save = true; if (flag_save_local) { if (flag_save_all) { + flag_save_all = false; + flag_save_local = false; this->set_data_cfg(); if (this->check_save(flag_save, "GRUB_TIMEOUT")) { std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; @@ -761,9 +778,6 @@ bool MainWindow::save_local_cfg() { } } } - else { - flag_no_save = true; - } map_local_cmd_selection = map_cmd_selection; return flag_no_save; } @@ -790,9 +804,9 @@ void MainWindow::download_globl_cfg() { entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - flag_save_local = false; - flag_save_global = false; - flag_save_all = false; + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; flag_load = true; std::string cmd_boot_time = "ubconfig --default --source global get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time, map_global_cmd_selection); @@ -816,9 +830,9 @@ void MainWindow::download_local_cfg() { entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - flag_save_local = false; - flag_save_global = false; - flag_save_all = false; + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; flag_load = false; std::string cmd_boot_time = "ubconfig --default --source system get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time, map_local_cmd_selection); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index a01f8cb..44e7fe7 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -176,6 +176,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool check_flag_save(string flag_save); void set_download_mode(string cmd); void change_password_protecc(); + void change_security_login(); bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(string cmd, std::map &map_temp); void set_password_protec(string cmd, string cmd_remove); From 52915a3500dc9783697dd8318a926154759146ec Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 31 Mar 2023 16:11:26 +0600 Subject: [PATCH 043/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D1=81=20?= =?UTF-8?q?ComboBoxText?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boot-options.csv | 2 +- input-options.csv | 2 +- output-options.csv | 2 +- source/ubl-settings-bootloader.cc | 116 ++++++++++++++++++------------ source/ubl-settings-bootloader.h | 2 + ubl-settings-bootloader.glade | 13 ++++ ubl-settings-bootloader_ru.po | 3 + 7 files changed, 91 insertions(+), 49 deletions(-) diff --git a/boot-options.csv b/boot-options.csv index d755699..1aba2df 100644 --- a/boot-options.csv +++ b/boot-options.csv @@ -1,4 +1,4 @@ -Get,Set=1,Set=0,Option,Description +Option,Description quiet,Downloading without text messages splash,Show welcome window noplymouth,Disable Plymouth diff --git a/input-options.csv b/input-options.csv index f90c724..4bd7f47 100644 --- a/input-options.csv +++ b/input-options.csv @@ -1,4 +1,4 @@ -Get,Set=1,Set=0,Option,Description +Option,Description console,PC BIOS & EFI console serial,Serial terminal ofconsole,Open Firmware Console diff --git a/output-options.csv b/output-options.csv index 3af14be..30453d6 100644 --- a/output-options.csv +++ b/output-options.csv @@ -1,4 +1,4 @@ -Get,Set=1,Set=0,Option,Description +Option,Description console,PC BIOS & EFI console serial,Serial terminal ofconsole,Open Firmware Console diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 543d475..ddd4367 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -81,12 +81,11 @@ void MainWindow::settings(){ spbSecond->set_range(1, 60); spbSecond->set_increments(1.0, 1.0); this->fill_in_view(); - this->download_local_cfg(); - this->download_globl_cfg(); - entrySecurityLogin->set_sensitive(false); - this->set_active_boot_second(); this->change_password_protecc(); this->change_security_login(); + this->set_active_boot_second(); + this->download_local_cfg(); + this->download_globl_cfg(); this->event(); } @@ -237,14 +236,14 @@ void MainWindow::set_security_login(string cmd="") { } else if (index == 1) { - key = string(getlogin()); + key = entrySecurityLogin->get_text(); } - else { + else if (index == -1) { return; } if (cmd.length() != 0) { entrySecurityLogin->set_text(key); - cmd = cmd + key; + cmd = cmd + "\"" + key + "\""; wrapper_system(cmd, ""); } map_cmd_selection["GRUB_USER"] = key; @@ -252,20 +251,27 @@ void MainWindow::set_security_login(string cmd="") { void MainWindow::get_security_login(string cmd, std::map &map_temp) { struct Result res_response = this->wrapper_call(cmd); + // TODO: + // Убрать в будущем + string default_login = "superadmin"; if (res_response.error == 0) { + str_replace_all(res_response.response, " ",""); str_replace_all(res_response.response, "\"",""); entrySecurityLogin->set_text(res_response.response); - if (res_response.response == getlogin()) { + if (res_response.response != default_login) { chbSecurityLogin->set_active(1); - map_temp["GRUB_USER"] = getlogin(); + entrySecurityLogin->set_sensitive(true); + + map_temp["GRUB_USER"] = res_response.response; } - else if (res_response.response.length() != 0) { + else if (res_response.response == default_login) { chbSecurityLogin->set_active(0); - map_temp["GRUB_USER"] = res_response.response; + map_temp["GRUB_USER"] = default_login; } - else{ + else { chbSecurityLogin->set_active(-1); map_temp["GRUB_USER"] = ""; + } } else if (res_response.error == 3) { @@ -278,30 +284,30 @@ void MainWindow::get_security_login(string cmd, std::map &map_t } } -void MainWindow::set_password_protec(string cmd = "", string cmd_remove= "") { +void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { // TODO: // Не работает - int index = chbSecurityLogin->get_active_row_number(); + int index = chbPasswordProtecc->get_active_row_number(); string key = ""; if (index == 0){ key = ""; } else if (index == 1) { key = entryPasswordProtecc->get_text(); - } else if (index == 2) { key = "remove"; - if (cmd.length() != 0 && cmd_remove.length() != 0) { + if (cmd_remove.length() != 0) { wrapper_system(cmd_remove, ""); + } cmd = ""; } - else { + else if (index == -1){ return; } if (cmd.length() != 0 && cmd_remove.length() != 0) { - entrySecurityLogin->set_text(key); + entryPasswordProtecc->set_text(key); cmd = cmd + key; wrapper_system(cmd, ""); } @@ -309,36 +315,35 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove= "") { } void MainWindow::get_password_protec(string cmd, std::map &map_temp) { - // TODO: - // Не работает struct Result res_response = this->wrapper_call(cmd); + cout << res_response.response << " " << res_response.error << endl; if (res_response.error == 0) { str_replace_all(res_response.response, "\"",""); - entrySecurityLogin->set_text(res_response.response); + entryPasswordProtecc->set_text(res_response.response); + // TODO: + // Не работает if (res_response.response == getlogin()) { - chbSecurityLogin->set_active(0); + chbPasswordProtecc->set_active(0); map_temp["GRUB_PASSWORD"] = ""; } else if (res_response.response.length() != 0) { - chbSecurityLogin->set_active(1); - map_temp["GRUB_PASSWORD"] = ""; - } - else if (res_response.response.length() != 0) { - chbSecurityLogin->set_active(2); + chbPasswordProtecc->set_active(1); map_temp["GRUB_PASSWORD"] = ""; + entryPasswordProtecc->set_sensitive(true); } else{ map_temp["GRUB_PASSWORD"] = ""; - chbSecurityLogin->set_active(-1); + chbPasswordProtecc->set_active(-1); } } - else if (res_response.error == 3) { + else if (res_response.error == 3 && res_response.response.find("null") != string::npos) { + chbPasswordProtecc->set_active(2); map_temp["GRUB_PASSWORD"] = ""; - chbSecurityLogin->set_active(-1); + entryPasswordProtecc->set_text(""); } else { map_temp["GRUB_PASSWORD"] = ""; - chbSecurityLogin->set_active(-1); + chbPasswordProtecc->set_active(-1); } } @@ -530,8 +535,17 @@ vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_t } bool MainWindow::focus_out_txt_password(GdkEventFocus*) { - info_status_app("boxInfoMessError"); - lblWarning->set_text(gettext("Enter your password")); + if (entryPasswordProtecc->get_text().length() == 0) { + info_status_app("boxInfoMessError"); + lblWarning->set_text(gettext("Enter your password")); + } + return true; +} +bool MainWindow::focus_out_txt_login(GdkEventFocus*) { + if (entrySecurityLogin->get_text().length() == 0) { + info_status_app("boxInfoMessError"); + lblWarning->set_text(gettext("Enter login")); + } return true; } @@ -580,9 +594,8 @@ void MainWindow::get_menu_boot(string cmd, std::map &map_temp) void MainWindow::set_menu_boot(string cmd="") { int value = spbSecond->get_value(); - std::string seconds = to_string(value); - cmd += seconds; if (cmd.length() != 0) { + cmd += to_string(value); this->wrapper_system(cmd, ""); } map_cmd_selection["GRUB_TIMEOUT"] = to_string(value); @@ -608,6 +621,7 @@ void MainWindow::event(){ entryKernel->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_kernel)); entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); + entrySecurityLogin->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_login)); entryPasswordProtecc->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_password)); chbPasswordProtecc->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_password_protecc)); chbSecurityLogin->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_security_login)); @@ -627,22 +641,28 @@ void MainWindow::event(){ void MainWindow::change_security_login() { int index = chbSecurityLogin->get_active_row_number(); - if (index == 0 || index == -1) { + if (index == 0) { entrySecurityLogin->set_sensitive(false); // TODO: // Добавить заполнение логина по умолчанию - entrySecurityLogin->set_text(""); + string default_login = "superadmin"; + entrySecurityLogin->set_text(default_login); } else if (index == 1) { entrySecurityLogin->set_sensitive(true); entrySecurityLogin->set_text(""); } + else { + entrySecurityLogin->set_sensitive(false); + entrySecurityLogin->set_text(""); + } } void MainWindow::change_password_protecc() { int index = chbPasswordProtecc->get_active_row_number(); if (index == 0 || index == 2 || index == -1) { entryPasswordProtecc->set_sensitive(false); + entryPasswordProtecc->set_text(""); } else if (index == 1) { entryPasswordProtecc->set_sensitive(true); @@ -657,8 +677,7 @@ void MainWindow::set_active_boot_second() { void MainWindow::wrapper_save_all_cfg() { if (this->save_global_cfg() && this->save_local_cfg()) { - info_status_app("boxInfoMessOK"); - lblWarning->set_text(gettext("Nothing to save!")); + this->info_warning_error(5); } else { info_warning_error(4); @@ -668,8 +687,7 @@ void MainWindow::wrapper_save_all_cfg() { void MainWindow::wrapper_save_global_cfg() { if (this->save_global_cfg()) { - info_status_app("boxInfoMessOK"); - lblWarning->set_text(gettext("Nothing to save!")); + this->info_warning_error(5); } else { info_warning_error(3); @@ -714,7 +732,7 @@ bool MainWindow::save_global_cfg() { } if (this->check_save(flag_save, "GRUB_PASSWORD")) { string cmd_password = "ubconfig --target global set boot GRUB_PASSWORD="; - string cmd_password_remove = "ubconfig --target global remove boot GRUB_PASSWORD="; + string cmd_password_remove = "ubconfig --target global remove boot GRUB_PASSWORD"; this->set_password_protec(cmd_password, cmd_password_remove); flag_no_save = false; } @@ -726,8 +744,7 @@ bool MainWindow::save_global_cfg() { void MainWindow::wrapper_save_local_cfg() { if (this->save_local_cfg()){ - info_status_app("boxInfoMessOK"); - lblWarning->set_text(gettext("Nothing to save!")); + this->info_warning_error(5); } else { info_warning_error(2); @@ -772,7 +789,7 @@ bool MainWindow::save_local_cfg() { } if (this->check_save(flag_save, "GRUB_PASSWORD")) { string cmd_password = "ubconfig --target system set boot GRUB_PASSWORD="; - string cmd_password_remove = "ubconfig --target system remove boot GRUB_PASSWORD="; + string cmd_password_remove = "ubconfig --target system remove boot GRUB_PASSWORD"; this->set_password_protec(cmd_password, cmd_password_remove); flag_no_save = false; } @@ -853,6 +870,8 @@ void MainWindow::download_local_cfg() { } bool MainWindow::check_save(string flag_save, string key_name="") { + if (flag_save.empty() && key_name.empty()) {} + /* std::map :: iterator iter_map_data; std::map :: iterator iter_map_data_old; std::map map_config_data_old; @@ -890,6 +909,7 @@ bool MainWindow::check_save(string flag_save, string key_name="") { return true; } cout << 7 << endl; + */ return true; } @@ -935,7 +955,7 @@ void MainWindow::wrapper_system(string cmd, string thread_str = "") { } void MainWindow::info_status_app(string stule) { - Glib::RefPtr boxInfo = boxInfoError->get_style_context(); + boxInfo->remove_class("boxInfoMessOK"); boxInfo->remove_class("boxInfoMessError"); boxInfo->add_class(stule); @@ -987,6 +1007,9 @@ void MainWindow::info_warning_error(int mess) { else if (mess == 4) { lblWarning->set_text(gettext("Successfully saved local and global configuration")); } + else if (mess == 5) { + lblWarning->set_text(gettext("Nothing to save!")); + } } } @@ -1061,6 +1084,7 @@ void MainWindow::add_CSS(){ Glib::RefPtr lblInfoHead_css = lblInfoHead->get_style_context(); Glib::RefPtr boxButton_css = boxButton->get_style_context(); Glib::RefPtr boxSave_css = boxSave->get_style_context(); + boxInfo = boxInfoError->get_style_context(); imgBG->set(path_img_head_background); if (socket_trd_id_I == 0 && socket_ext_id_I == 0){ boxButton_css->add_class("bkim_no_plug"); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 44e7fe7..05b4bbd 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -125,6 +125,7 @@ class MainWindow : public Gtk::ApplicationWindow { size_t size_IPT = 0; size_t size_OTT = 0; int index_error = 0; + Glib::RefPtr boxInfo; string str_cmd_error = ""; template struct Result{ @@ -176,6 +177,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool check_flag_save(string flag_save); void set_download_mode(string cmd); void change_password_protecc(); + bool focus_out_txt_login(GdkEventFocus*); void change_security_login(); bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(string cmd, std::map &map_temp); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 72ff405..f51a50b 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -385,6 +385,7 @@ specified priority 6 Default download start + 0 False @@ -454,6 +455,7 @@ specified priority 6 Download mode start + 0 False @@ -502,6 +504,7 @@ specified priority 6 Security login: start + 0 False @@ -567,6 +570,7 @@ specified priority 6 Password protection: start + 0 False @@ -1212,6 +1216,15 @@ specified priority + + both + True + + + + + + False Внимание! diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index f74bcd5..4e58ae2 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -16,6 +16,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Enter login" +msgstr "Введите логин" + msgid "Enter your password" msgstr "Введите пароль" From 0057ebdfe7691ddc03d2dbedf17aad00986cfb8c Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 3 Apr 2023 11:06:41 +0600 Subject: [PATCH 044/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 73 ++++++++++++++++++++++------ source/ubl-settings-bootloader.h | 3 +- source/util.cc | 81 +++++++++++++++++++++++++++++++ source/util.h | 12 ++++- 4 files changed, 151 insertions(+), 18 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index ddd4367..8dd814e 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -167,6 +167,7 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: } void MainWindow::get_download_mode(string cmd, std::map &map_temp) { + int start_error = index_error; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { str_replace_all(res_response.response, "\"",""); @@ -194,6 +195,9 @@ void MainWindow::get_download_mode(string cmd, std::map &map_te else if (res_response.error == 3) { cmbDownloadMode->set_active(-1); map_temp["GRUB_BOOT_SILENT"] = ""; + if (start_error != index_error) { + index_error = start_error; + } } else { cmbDownloadMode->set_active(-1); @@ -250,6 +254,7 @@ void MainWindow::set_security_login(string cmd="") { } void MainWindow::get_security_login(string cmd, std::map &map_temp) { + int start_error = index_error; struct Result res_response = this->wrapper_call(cmd); // TODO: // Убрать в будущем @@ -277,6 +282,9 @@ void MainWindow::get_security_login(string cmd, std::map &map_t else if (res_response.error == 3) { chbSecurityLogin->set_active(-1); map_temp["GRUB_USER"] = ""; + if (start_error != index_error) { + index_error = start_error; + } } else { chbSecurityLogin->set_active(-1); @@ -315,8 +323,8 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { } void MainWindow::get_password_protec(string cmd, std::map &map_temp) { + int start_error = index_error; struct Result res_response = this->wrapper_call(cmd); - cout << res_response.response << " " << res_response.error << endl; if (res_response.error == 0) { str_replace_all(res_response.response, "\"",""); entryPasswordProtecc->set_text(res_response.response); @@ -340,6 +348,9 @@ void MainWindow::get_password_protec(string cmd, std::map &map_ chbPasswordProtecc->set_active(2); map_temp["GRUB_PASSWORD"] = ""; entryPasswordProtecc->set_text(""); + if (start_error != index_error) { + index_error = start_error; + } } else { map_temp["GRUB_PASSWORD"] = ""; @@ -513,6 +524,7 @@ void MainWindow::localization(){ } vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp) { + int start_error = index_error; vector vec_params; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { @@ -526,7 +538,9 @@ vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_t } } else if (res_response.error == 3) { - + if (start_error != index_error) { + index_error = start_error; + } } else { @@ -538,6 +552,10 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { if (entryPasswordProtecc->get_text().length() == 0) { info_status_app("boxInfoMessError"); lblWarning->set_text(gettext("Enter your password")); + boxSave->set_sensitive(false); + } + else { + boxSave->set_sensitive(true); } return true; } @@ -545,6 +563,10 @@ bool MainWindow::focus_out_txt_login(GdkEventFocus*) { if (entrySecurityLogin->get_text().length() == 0) { info_status_app("boxInfoMessError"); lblWarning->set_text(gettext("Enter login")); + boxSave->set_sensitive(false); + } + else { + boxSave->set_sensitive(true); } return true; } @@ -578,13 +600,16 @@ void MainWindow::set_entry_to_tree_view(Glib::RefPtr &list_store flag_blocked_tree_view = false; } void MainWindow::get_menu_boot(string cmd, std::map &map_temp) { + int start_error = index_error; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { map_temp["GRUB_TIMEOUT"] = res_response.response; spbSecond->set_value(atoi(res_response.response.c_str())); } else if (res_response.error == 3) { - + if (start_error != index_error) { + index_error = start_error; + } } else { @@ -602,12 +627,17 @@ void MainWindow::set_menu_boot(string cmd="") { } -void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings) { +void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove) { string cmds = entry.get_text(); str_remove(cmds, ","); - cmd_settings += "\"" + cmds + "\""; - str_replace_all(cmd_settings, " \"", "\""); - this->wrapper_system(cmd_settings, ""); + if (cmds.length() != 0) { + cmd_settings += "\"" + cmds + "\""; + str_replace_all(cmd_settings, " \"", "\""); + this->wrapper_system(cmd_settings, ""); + } + else { + this->wrapper_system(cmd_remove, ""); + } } void MainWindow::event(){ @@ -647,14 +677,17 @@ void MainWindow::change_security_login() { // Добавить заполнение логина по умолчанию string default_login = "superadmin"; entrySecurityLogin->set_text(default_login); + boxSave->set_sensitive(true); } else if (index == 1) { entrySecurityLogin->set_sensitive(true); entrySecurityLogin->set_text(""); + boxSave->set_sensitive(true); } else { entrySecurityLogin->set_sensitive(false); entrySecurityLogin->set_text(""); + boxSave->set_sensitive(true); } } @@ -663,10 +696,15 @@ void MainWindow::change_password_protecc() { if (index == 0 || index == 2 || index == -1) { entryPasswordProtecc->set_sensitive(false); entryPasswordProtecc->set_text(""); + boxSave->set_sensitive(true); } else if (index == 1) { entryPasswordProtecc->set_sensitive(true); entryPasswordProtecc->set_text(""); + boxSave->set_sensitive(true); + } + else { + boxSave->set_sensitive(true); } } @@ -709,17 +747,20 @@ bool MainWindow::save_global_cfg() { } if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - this->cmd_entry_all(*entryKernel, cmd_settings_kernel); + string cmd_remove = "ubconfig --target global remove boot GRUB_CMDLINE_LINUX"; + this->cmd_entry_all(*entryKernel, cmd_settings_kernel, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_TERMINAL_OUTPUT")) { string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; - this->cmd_entry_all(*entryIPT, cmd_settings_IPT); + string cmd_remove = "ubconfig --target global remove boot GRUB_TERMINAL_OUTPUT"; + this->cmd_entry_all(*entryIPT, cmd_settings_IPT,cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_TERMINAL_INPUT")) { string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; - this->cmd_entry_all(*entryOTT, cmd_settings_OTT); + string cmd_remove = "ubconfig --target global remove boot GRUB_TERMINAL_INPUT"; + this->cmd_entry_all(*entryOTT, cmd_settings_OTT, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_BOOT_SILENT")) { @@ -766,17 +807,20 @@ bool MainWindow::save_local_cfg() { } if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; - this->cmd_entry_all(*entryKernel, cmd_settings_kernel); + string cmd_remove = "ubconfig --target system remove boot GRUB_CMDLINE_LINUX"; + this->cmd_entry_all(*entryKernel, cmd_settings_kernel, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_TERMINAL_OUTPUT")) { string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT="; - this->cmd_entry_all(*entryIPT, cmd_settings_IPT); + string cmd_remove = "ubconfig --target system remove boot GRUB_TERMINAL_OUTPUT"; + this->cmd_entry_all(*entryIPT, cmd_settings_IPT, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_TERMINAL_INPUT")) { string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; - this->cmd_entry_all(*entryOTT, cmd_settings_OTT); + string cmd_remove = "ubconfig --target system remove boot GRUB_TERMINAL_INPUT"; + this->cmd_entry_all(*entryOTT, cmd_settings_OTT, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_BOOT_SILENT")) { @@ -870,8 +914,6 @@ void MainWindow::download_local_cfg() { } bool MainWindow::check_save(string flag_save, string key_name="") { - if (flag_save.empty() && key_name.empty()) {} - /* std::map :: iterator iter_map_data; std::map :: iterator iter_map_data_old; std::map map_config_data_old; @@ -909,7 +951,6 @@ bool MainWindow::check_save(string flag_save, string key_name="") { return true; } cout << 7 << endl; - */ return true; } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 05b4bbd..dd5fb1f 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -121,6 +121,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_save_global = false; bool flag_save_local = false; bool flag_blocked_tree_view = false; + bool flag_save_block = false; size_t size_kernel = 0; size_t size_IPT = 0; size_t size_OTT = 0; @@ -183,7 +184,7 @@ class MainWindow : public Gtk::ApplicationWindow { void get_password_protec(string cmd, std::map &map_temp); void set_password_protec(string cmd, string cmd_remove); vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); - void cmd_entry_all(Gtk::Entry &entry, string cmd_settings); + void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); diff --git a/source/util.cc b/source/util.cc index 5c66276..18b5446 100644 --- a/source/util.cc +++ b/source/util.cc @@ -101,4 +101,85 @@ std::vector split(std::string text, char delim) { vec.push_back(line); } return vec; +} +unsigned short read_uid_min_max(string filename, string search) { + std::string line; + int uid = 0; + string remove_tab = "\t"; + string remove_space = " "; + std::ifstream in(filename); // окрываем файл для чтения + if (in.is_open()){ + while (getline(in, line)){ + try{ + if (line.find(search) != string::npos && (line.find("SYS_"+search) == string::npos)) { + str_remove(line, search); + str_remove(line, remove_space); + str_remove(line, remove_tab); + uid = atoi(line.c_str()); + } + } + catch (int x) { + if (search == "UID_MIN"){ + uid = 1000; + } + else{ + uid = 65534; + } + + } + + } + } + else{ + if (search == "UID_MIN") { + uid = 1000; + } + else{ + uid = 65534; + } + } + in.close(); + return uid; + +} + +vector pars_users() { + vector vec_users; + unsigned short uid_min = read_uid_min_max("/etc/login.defs", "UID_MIN"); + unsigned short uid_max =read_uid_min_max("/etc/login.defs", "UID_MAX"); + while (true) { + errno = 0; + passwd* entry = getpwent(); + if (!entry) { + if (errno) { + break; + } + break; + } + if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) { + vec_users.push_back(string(entry->pw_name)); + } + } + endpwent(); + return vec_users; +} + +string read_passwd(string username) { + string passwd = ""; + std::string line; + std::ifstream in("/etc/shadow"); + if (in.is_open()) { + while (getline(in, line)) { + if (line.find(username) != string::npos) { + size_t index_start = line.find(":"); + if (index_start != string::npos) { + size_t index_end = line.find(":", index_start + 1); + passwd = line.substr(index_start+1, index_end - index_start-1); + break; + } + } + } + } + in.close(); + return passwd; } \ No newline at end of file diff --git a/source/util.h b/source/util.h index 9bb331f..23b89fb 100644 --- a/source/util.h +++ b/source/util.h @@ -6,13 +6,23 @@ #include #include #include +#include +#include + using namespace std; +struct Passwd { + string user; + int uid; +}; std::array, 5> read_csv(const std::string& filename); std::string call(std::string cmd); vector find_all(string &str_ntp, string substr); void str_remove(std::string& source, std::string to_remove); void str_replace_all(string &str_base, string str_find, string str_replace); -std::vector split(std::string text, char delim); \ No newline at end of file +std::vector split(std::string text, char delim); +unsigned short read_uid_min_max(string filename, string search); +vector pars_users(); +string read_passwd(string username); From cb9204f4f9cbf7cb4642407445ef2035773bf463 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 3 Apr 2023 15:31:46 +0600 Subject: [PATCH 045/110] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D1=81=20=D1=81=D0=BE?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 105 +++++++++++++++++++++--------- source/ubl-settings-bootloader.h | 4 +- 2 files changed, 75 insertions(+), 34 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 8dd814e..02d381a 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -227,6 +227,11 @@ void MainWindow::set_download_mode(string cmd="") { cmd += "\"" + key + "\""; wrapper_system(cmd, ""); } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } map_cmd_selection["GRUB_BOOT_SILENT"] = key; } @@ -250,6 +255,11 @@ void MainWindow::set_security_login(string cmd="") { cmd = cmd + "\"" + key + "\""; wrapper_system(cmd, ""); } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } map_cmd_selection["GRUB_USER"] = key; } @@ -304,14 +314,14 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { key = entryPasswordProtecc->get_text(); } else if (index == 2) { - key = "remove"; + key = ""; if (cmd_remove.length() != 0) { wrapper_system(cmd_remove, ""); } cmd = ""; } - else if (index == -1){ + else if (index == -1) { return; } if (cmd.length() != 0 && cmd_remove.length() != 0) { @@ -319,6 +329,11 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { cmd = cmd + key; wrapper_system(cmd, ""); } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } map_cmd_selection["GRUB_PASSWORD"] = key; } @@ -523,7 +538,7 @@ void MainWindow::localization(){ cmbDownloadMode->append(gettext("No loading animation, minimal log.")); } -vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp) { +vector MainWindow::get_setting_entry_all(string key, string cmd, Gtk::Entry &entry_text, std::map &map_temp) { int start_error = index_error; vector vec_params; struct Result res_response = this->wrapper_call(cmd); @@ -536,6 +551,8 @@ vector MainWindow::get_setting_entry_all(string cmd, Gtk::Entry &entry_t map_cmd_selection[param] = "1"; map_temp[param] = "1"; } + str_remove(res_response.response, ","); + map_temp[key] = res_response.response; } else if (res_response.error == 3) { if (start_error != index_error) { @@ -556,6 +573,7 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { } else { boxSave->set_sensitive(true); + map_cmd_selection["GRUB_PASSWORD"] = entryPasswordProtecc->get_text(); } return true; } @@ -566,6 +584,7 @@ bool MainWindow::focus_out_txt_login(GdkEventFocus*) { boxSave->set_sensitive(false); } else { + map_cmd_selection["GRUB_USER"] = entrySecurityLogin->get_text(); boxSave->set_sensitive(true); } return true; @@ -605,26 +624,46 @@ void MainWindow::get_menu_boot(string cmd, std::map &map_temp) if (res_response.error == 0) { map_temp["GRUB_TIMEOUT"] = res_response.response; spbSecond->set_value(atoi(res_response.response.c_str())); + chbLoadVariantSelectionTimer->set_active(true); + spbSecond->set_sensitive(true); + lblInfoSeconds->set_sensitive(true); } else if (res_response.error == 3) { if (start_error != index_error) { index_error = start_error; } + map_temp["GRUB_TIMEOUT"] = ""; + chbLoadVariantSelectionTimer->set_active(false); + spbSecond->set_sensitive(false); + lblInfoSeconds->set_sensitive(true); } else { - + map_temp["GRUB_TIMEOUT"] = ""; } } -void MainWindow::set_menu_boot(string cmd="") { - int value = spbSecond->get_value(); - if (cmd.length() != 0) { - cmd += to_string(value); - this->wrapper_system(cmd, ""); +void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { + if (chbLoadVariantSelectionTimer->get_active()) { + int value = spbSecond->get_value(); + if (cmd.length() != 0) { + cmd += to_string(value); + this->wrapper_system(cmd, ""); + } + map_cmd_selection["GRUB_TIMEOUT"] = to_string(value); + } + else if (chbLoadVariantSelectionTimer->get_active() == false) { + if (cmd_remove.length() != 0) { + this->wrapper_system(cmd_remove, ""); + } + map_cmd_selection["GRUB_TIMEOUT"] = ""; + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + map_cmd_selection["GRUB_TIMEOUT"] = ""; } - map_cmd_selection["GRUB_TIMEOUT"] = to_string(value); - } void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove) { @@ -638,6 +677,7 @@ void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cm else { this->wrapper_system(cmd_remove, ""); } + } void MainWindow::event(){ @@ -653,8 +693,11 @@ void MainWindow::event(){ entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); entrySecurityLogin->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_login)); entryPasswordProtecc->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_password)); - chbPasswordProtecc->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_password_protecc)); + chbPasswordProtecc->signal_changed().connect([&]() {change_password_protecc();set_password_protec();}); chbSecurityLogin->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_security_login)); + cmbDownloadMode->signal_changed().connect([&]() {set_download_mode();}); + chbSecurityLogin->signal_changed().connect([&]() {set_security_login();}); + spbSecond->signal_changed().connect([&]() {set_menu_boot();}); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); @@ -711,11 +754,13 @@ void MainWindow::change_password_protecc() { void MainWindow::set_active_boot_second() { spbSecond->set_sensitive(chbLoadVariantSelectionTimer->get_active()); lblInfoSeconds->set_sensitive(chbLoadVariantSelectionTimer->get_active()); + this->set_menu_boot(); } void MainWindow::wrapper_save_all_cfg() { if (this->save_global_cfg() && this->save_local_cfg()) { this->info_warning_error(5); + flag_save_all = false; } else { info_warning_error(4); @@ -737,12 +782,12 @@ bool MainWindow::save_global_cfg() { bool flag_no_save = true; if (flag_save_global) { if (flag_save_all) { - flag_save_all = false; flag_save_global = false; this->set_data_cfg(); if (this->check_save(flag_save, "GRUB_TIMEOUT")) { std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; - this->set_menu_boot(cmd_boot_time); + string cmd_remove = "ubconfig --target global remove boot GRUB_TIMEOUT"; + this->set_menu_boot(cmd_boot_time, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { @@ -797,12 +842,12 @@ bool MainWindow::save_local_cfg() { bool flag_no_save = true; if (flag_save_local) { if (flag_save_all) { - flag_save_all = false; flag_save_local = false; this->set_data_cfg(); if (this->check_save(flag_save, "GRUB_TIMEOUT")) { std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; - this->set_menu_boot(cmd_boot_time); + string cmd_remove = "ubconfig --target system remove boot GRUB_TIMEOUT"; + this->set_menu_boot(cmd_boot_time, cmd_remove); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { @@ -843,10 +888,6 @@ bool MainWindow::save_local_cfg() { return flag_no_save; } void MainWindow::set_data_cfg() { - this->set_security_login(); - this->set_download_mode(); - this->set_password_protec(); - this->set_menu_boot(); string str_flags = entryKernel->get_text(); str_remove(str_flags, ","); str_replace_all(str_flags, " \"", "\""); @@ -859,6 +900,7 @@ void MainWindow::set_data_cfg() { str_remove(str_flags, ","); str_replace_all(str_flags, " \"", "\""); map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; + } void MainWindow::download_globl_cfg() { @@ -872,11 +914,11 @@ void MainWindow::download_globl_cfg() { std::string cmd_boot_time = "ubconfig --default --source global get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time, map_global_cmd_selection); string cmd_kernel_entry = "ubconfig --default --source global get boot GRUB_CMDLINE_LINUX"; - this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX",cmd_kernel_entry, *entryKernel, map_global_cmd_selection); string cmd_ipt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; - this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT",cmd_ipt_entry, *entryIPT, map_global_cmd_selection); string cmd_opt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; - this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", cmd_opt_entry, *entryOTT, map_global_cmd_selection); this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); @@ -885,6 +927,7 @@ void MainWindow::download_globl_cfg() { this->get_password_protec("ubconfig --default --source global get boot GRUB_PASSWORD", map_global_cmd_selection); info_warning_error(1); map_cmd_selection = map_global_cmd_selection; + } void MainWindow::download_local_cfg() { @@ -898,11 +941,11 @@ void MainWindow::download_local_cfg() { std::string cmd_boot_time = "ubconfig --default --source system get boot GRUB_TIMEOUT"; this->get_menu_boot(cmd_boot_time, map_local_cmd_selection); string cmd_kernel_entry = "ubconfig --default --source system get boot GRUB_CMDLINE_LINUX"; - this->get_setting_entry_all(cmd_kernel_entry, *entryKernel, map_local_cmd_selection); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX", cmd_kernel_entry, *entryKernel, map_local_cmd_selection); string cmd_ipt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; - this->get_setting_entry_all(cmd_ipt_entry, *entryIPT, map_local_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT", cmd_ipt_entry, *entryIPT, map_local_cmd_selection); string cmd_opt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; - this->get_setting_entry_all(cmd_opt_entry, *entryOTT, map_local_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", cmd_opt_entry, *entryOTT, map_local_cmd_selection); this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); @@ -911,6 +954,7 @@ void MainWindow::download_local_cfg() { this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD", map_local_cmd_selection); info_warning_error(0); map_cmd_selection = map_local_cmd_selection; + } bool MainWindow::check_save(string flag_save, string key_name="") { @@ -926,19 +970,16 @@ bool MainWindow::check_save(string flag_save, string key_name="") { iter_map_data = map_cmd_selection.find(key_name); iter_map_data_old = map_config_data_old.find(key_name); - if (iter_map_data == map_cmd_selection.end()) { - cout << 1 << endl; - return true; - } - else if (iter_map_data_old == map_config_data_old.end()) { + if (iter_map_data_old == map_config_data_old.end() && iter_map_data != map_cmd_selection.end()) { cout << 2 << endl; return true; } else if (iter_map_data->second != iter_map_data_old->second) { + cout << iter_map_data->second << " ||| " << iter_map_data_old->second << endl; cout << 3 << endl; return true; } - else if (iter_map_data->second.length() == 0 || iter_map_data_old->second.length() == 0) { + else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { cout << 4 << " " << key_name << endl; return false; } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index dd5fb1f..52032cc 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -138,7 +138,7 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); void get_menu_boot(string cmd, std::map &map_temp); - void set_menu_boot(string cmd); + void set_menu_boot(string cmd, string cmd_remove); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); @@ -183,7 +183,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(string cmd, std::map &map_temp); void set_password_protec(string cmd, string cmd_remove); - vector get_setting_entry_all(string cmd, Gtk::Entry &entry_text, std::map &map_temp); + vector get_setting_entry_all(string key, string cmd, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); From caa7845f0efd44ed3d3deb40222cdbd93c5bcb53 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 3 Apr 2023 16:00:06 +0600 Subject: [PATCH 046/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=B3=D0=BB=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC=20=D1=81=D0=BE=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 02d381a..a09addf 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -78,8 +78,9 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { - spbSecond->set_range(1, 60); + spbSecond->set_range(0, 60); spbSecond->set_increments(1.0, 1.0); + spbSecond->set_value(1); this->fill_in_view(); this->change_password_protecc(); this->change_security_login(); @@ -627,6 +628,7 @@ void MainWindow::get_menu_boot(string cmd, std::map &map_temp) chbLoadVariantSelectionTimer->set_active(true); spbSecond->set_sensitive(true); lblInfoSeconds->set_sensitive(true); + } else if (res_response.error == 3) { if (start_error != index_error) { @@ -650,12 +652,22 @@ void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { cmd += to_string(value); this->wrapper_system(cmd, ""); } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } map_cmd_selection["GRUB_TIMEOUT"] = to_string(value); } else if (chbLoadVariantSelectionTimer->get_active() == false) { if (cmd_remove.length() != 0) { this->wrapper_system(cmd_remove, ""); } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } map_cmd_selection["GRUB_TIMEOUT"] = ""; } else { @@ -758,7 +770,9 @@ void MainWindow::set_active_boot_second() { } void MainWindow::wrapper_save_all_cfg() { - if (this->save_global_cfg() && this->save_local_cfg()) { + bool _flag_local = this->save_local_cfg(); + bool _flag_global = this->save_global_cfg(); + if (_flag_local && _flag_global) { this->info_warning_error(5); flag_save_all = false; } From a0959676d5aad9f8b16316848079a44003dc78e4 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 4 Apr 2023 09:15:34 +0600 Subject: [PATCH 047/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BD=20=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=20=D0=BF=D1=80=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screenshot/screenshot.png | Bin 139670 -> 144454 bytes source/ubl-settings-bootloader.cc | 14 ++------------ source/ubl-settings-bootloader.h | 2 -- ubl-settings-bootloader.glade | 3 +++ 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png index 3d555abef05e8f0d46007f4054b7c66a51f1a7d7..3fa8cdddb67af82da1aaaa5d6d91d454c4f916b3 100644 GIT binary patch literal 144454 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�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

cdWbQ<&Cey>Y(BJzEa6UV6!34s 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 diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index a09addf..912fa99 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -78,7 +78,7 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); if (this->check_root() == 0) { - spbSecond->set_range(0, 60); + spbSecond->set_range(1, 60); spbSecond->set_increments(1.0, 1.0); spbSecond->set_value(1); this->fill_in_view(); @@ -901,6 +901,7 @@ bool MainWindow::save_local_cfg() { map_local_cmd_selection = map_cmd_selection; return flag_no_save; } + void MainWindow::set_data_cfg() { string str_flags = entryKernel->get_text(); str_remove(str_flags, ","); @@ -914,7 +915,6 @@ void MainWindow::set_data_cfg() { str_remove(str_flags, ","); str_replace_all(str_flags, " \"", "\""); map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; - } void MainWindow::download_globl_cfg() { @@ -968,7 +968,6 @@ void MainWindow::download_local_cfg() { this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD", map_local_cmd_selection); info_warning_error(0); map_cmd_selection = map_local_cmd_selection; - } bool MainWindow::check_save(string flag_save, string key_name="") { @@ -1162,15 +1161,6 @@ void MainWindow::log_mess_error(string &cmd) { } } - -void MainWindow::fn_event_intelMax1(){ - chbintelMax4->set_active(false); -} - -void MainWindow::fn_event_intelMax4(){ - chbintelMax1->set_active(false); -} - void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 52032cc..674346c 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -60,8 +60,6 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblHeaderName; Gtk::Label *lblInfoHead; Gtk::CheckButton *chbVgaText; - Gtk::CheckButton *chbintelMax4; - Gtk::CheckButton *chbintelMax1; Gtk::CheckButton *chbLoadVariantSelectionTimer; Gtk::CheckButton *chbLastSelectionWillBecome; Gtk::Entry *entryKernel; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index f51a50b..e0a1d39 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1015,6 +1015,9 @@ specified priority True False ubl-settings-bootloader + + +

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%0A&o6VZo+#b98v4d;nV0$;gG%B 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

From 53818dde986d78f7c1d3a6792d8a098ec503a27f Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 4 Apr 2023 09:25:01 +0600 Subject: [PATCH 048/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20help=20=D0=B2=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index ecd29db..5f1685b 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,16 @@ After a successful build, just use: ```sh $ sudo make uninstall ``` +# Usage +```sh +$ ubl-settings-bootloader --help +GTK settings bootloader for UBLinux + +Usage: ubl-settings-bootloader [OPTIONS...] +Options: + -h, --help Show this help + -V, --version Show package version + +$ ubl-settings-bootloader --version +ubl-settings-bootloader version: x.xx +``` \ No newline at end of file From 03f214d6981f93e03c0076a05b110a14c46c10b0 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 4 Apr 2023 09:27:03 +0600 Subject: [PATCH 049/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5f1685b..666d502 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # ubl-settings-bootloader -# Настройка grub -[RU] Утилита для настройки grub +# Настройка загрузчика +[RU] Утилита для настройки загрузчика -Utility for setting the grub +Utility for setting the загрузчика ![alt text](screenshot/screenshot.png) From 9a81b9ced554608136152dda6cdaf55619452c71 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 4 Apr 2023 12:10:25 +0600 Subject: [PATCH 050/110] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D1=84?= =?UTF-8?q?=D0=BB=D0=B0=D0=B3=20-g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 2 +- source/ubl-settings-bootloader.cc | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index bc5f9e8..3886b8b 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -12,7 +12,7 @@ add_definitions(${GTK_CFLAGS_OTHER}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ - -fstack-clash-protection -fcf-protection -g") + -fstack-clash-protection -fcf-protection") set(SOURCE_FILES util.h diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 912fa99..8576d9e 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -149,8 +149,6 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk:: string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_OTT); entryOTT->set_text(str_flags); } - - } void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { auto selection_kernel = treeViewKernel->get_selection(); From c417c293b758f6c328612c946a2c48acb2ffe3ec Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 10:06:53 +0600 Subject: [PATCH 051/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20Makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 132 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 58 deletions(-) diff --git a/Makefile b/Makefile index 09e1ee1..ebf196f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ #!/usr/bin/make -f -#!/usr/bin/make -f #SHELL := /bin/bash MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) @@ -7,43 +6,49 @@ MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) CMAKE_COMMAND = cmake -#CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source -#CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile -CMAKE_SOURCE_DIR = ./source -CMAKE_BUILD_DIR = ./compile -DEPENDS = cmake -#PKGNAME = $(MAKEFILE_DIR) -PKGNAME = ubl-settings-bootloader +CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile +#CMAKE_SOURCE_DIR = ./source +#CMAKE_BUILD_DIR = ./compile FILE_VERSION = VERSION.md +DEPENDS = /bin/cmake +PREFIX ?= /usr +PKGNAME = $(MAKEFILE_DIR) +#PKGNAME = ubl-settings-datetime default_target: all + +.PHONY: all init depend debug prepare check build uninstall install clean up_ver help + all: init build init: @echo "Initialize ..."; \ - sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-bootloader.cc; \ + sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-datetime.cc; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" - + depend: - @echo "Check depends ..."; \ - if [ ! -f /bin/${DEPENDS} ]; then \ - echo "-- Depend '${DEPENDS}' not fount !"; \ - exit 1; \ - fi; \ + @echo "Check depends ..." + @for FILE_DEPEND in $(DEPENDS); do \ + if [ ! -f $${FILE_DEPEND} ]; then \ + echo "ERROR: Depend '$${FILE_DEPEND}' not found !"; \ + exit 1; \ + fi; \ + done; \ echo "Check depends: OK" # $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 debug: @echo "Debug ..." if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ - $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="/usr"; \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ fi; \ echo "Debug: OK" prepare: @echo "Prepare ..."; \ if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ - $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr"; \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ fi; \ echo "Prepare: OK" @@ -52,7 +57,7 @@ check: if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \ echo "Check: OK"; \ else \ - echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not fount !"; \ + echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not found !"; \ exit 1; \ fi @@ -66,60 +71,63 @@ uninstall: @for FILE_PO in $(wildcard *.po); do \ LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ - PATH_FILE_MO="/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ - $(RM) "/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + $(RM) "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \ done -# @for SIZE in 16x16 32x32 48x48 scalable; do \ - $(RM) "/usr/share/icons/hicolor/$${SIZE}/apps/${PKGNAME}.svg"; \ - $(RM) "/usr/share/icons/hicolor/$${SIZE}/apps/${PKGNAME}.png"; \ - done -# @for FILE_SVG in $(wildcard *.svg); do \ + @for FILE_SVG in $(wildcard *.svg); do \ for SIZE in 16x16 32x32 48x48 scalable; do \ - $(RM) "/usr/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ done; \ done - @$(RM) "/usr/bin/${PKGNAME}" - @$(RM) "/usr/share/applications/${PKGNAME}.desktop" - @$(RM) "/usr/share/polkit-1/actions/ru.ublinux.pkexec.${PKGNAME}.exec.policy" - @$(RM) -rd "/usr/share/${PKGNAME}" - @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ &>/dev/null - @update-desktop-database --quiet 2>/dev/null - @touch /usr/share/applications + @$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}" + @$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop" + @$(RM) "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/logo-background.png" + @$(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.pkexec.${PKGNAME}.exec.policy" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg" + @$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}" + @if [ -z ${DESTDIR} ]; then \ + [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ + update-desktop-database --quiet &>/dev/null || true; \ + [ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ + fi @echo "Uninstall: OK" install: check uninstall @echo "Install ..." @for FILE_PO in $(wildcard *.po); do \ LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ - install -dm755 /usr/share/locale/$${LANG}/LC_MESSAGES; \ + install -dm755 "${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES"; \ FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ - PATH_FILE_MO="/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ - echo $${FILE_PO}; \ + PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + echo "$${FILE_PO}"; \ msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ done @for SIZE in 16 32 48; do \ - install -dm755 /usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps; \ -# rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data ${PKGNAME}.svg -o "/usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/${PKGNAME}.svg"; \ + install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \ + rsvg-convert -w $${SIZE} -h $${SIZE} -f png --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \ done - @install -dm755 /usr/share/icons/hicolor/scalable/apps -# @install -Dm644 -t /usr/share/icons/hicolor/scalable/apps/ ${PKGNAME}.svg - @install -Dm755 -t /usr/bin/ ${CMAKE_BUILD_DIR}/${PKGNAME} - @install -Dm644 -t /usr/share/applications/ ${PKGNAME}.desktop - @install -Dm644 -t /usr/share/polkit-1/actions/ com.ublinux.pkexec.${PKGNAME}.exec.policy - @install -dm755 /usr/share/${PKGNAME}/{ui,css,images} - @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade - @install -Dm644 -t /usr/share/${PKGNAME}/css/ ubl-settings-bootloader.css - @install -Dm644 -t /usr/share/${PKGNAME}/images/ logo-background.png -# @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png - @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv - @install -Dm644 -t /usr/share/${PKGNAME}/ input-options.csv - @install -Dm644 -t /usr/share/${PKGNAME}/ output-options.csv - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.ubl-settings-bootloader.checked.svg" - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.ubl-settings-bootloader.warning.svg" - @install -Dm644 -t "${pkgdir}/usr/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" - @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ - @update-desktop-database --quiet 2>/dev/null - @touch /usr/share/applications + @install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" + @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" + @install -dm755 "${DESTDIR}${PREFIX}/share/applications" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" + @install -dm755 "${DESTDIR}${PREFIX}/share/polkit-1/actions" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.pkexec.${PKGNAME}.exec.policy" + @install -dm755 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images} + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}.glade" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/css/" "${PKGNAME}.css" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "logo-background.png" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" + @if [ -z ${DESTDIR} ]; then \ + [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ + update-desktop-database --quiet &>/dev/null || true; \ + [ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ + fi @echo "Install: OK" clean: @@ -131,6 +139,14 @@ clean: echo "Clean: OK"; \ fi +up_ver: + @CURRENT=$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2); \ + MAJOR=$$(cut -d. -f1 <<< $${CURRENT}); \ + MINOR=$$(cut -d. -f2 <<< $${CURRENT}); \ + VER="$${MAJOR}.$$(($${MINOR}+1))"; \ + sed "s/VERSION *[[:digit:]]*.*/VERSION $${VER}/" -i ${FILE_VERSION}; \ + echo "Updated version to VERSION.md: $${CURRENT} to $${VER}" + help: @echo "The following are some of the valid targets for this Makefile:" @echo "... all (the default if no target is provided)" @@ -140,4 +156,4 @@ help: @echo "... compile" @echo "... install" @echo "... uninstall" - @echo "... clean" \ No newline at end of file + @echo "... clean" From a0267d31307638d194bf37d3edecb49fc7772ad4 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 10:07:45 +0600 Subject: [PATCH 052/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.glade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index e0a1d39..5b3dd98 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -189,7 +189,7 @@ specified priority
- 750 + 770 550 False com.ublinux.ubl-settings-bootloader From c6f45eadfc60f702503bd68a2b76529d0f845cd3 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 10:09:32 +0600 Subject: [PATCH 053/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BA=D0=BE=D0=B4=20=D0=B2=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=20util.*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/util.cc | 1 - source/util.h | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/source/util.cc b/source/util.cc index 18b5446..ed9a3ce 100644 --- a/source/util.cc +++ b/source/util.cc @@ -1,6 +1,5 @@ #include "util.h" - array, 5> read_csv(const string& filename) { array, 5> array_vectors; vector vec_option; diff --git a/source/util.h b/source/util.h index 23b89fb..54b56fd 100644 --- a/source/util.h +++ b/source/util.h @@ -11,6 +11,11 @@ using namespace std; +template + struct Result{ + Type response; + int error; +}; struct Passwd { string user; From 4434fb4c32bca2354c2c1624d2d8724da5cde2d4 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 10:27:27 +0600 Subject: [PATCH 054/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20Makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 + source/main.cc | 4 +- source/ubl-settings-bootloader.cc | 136 +++++++++++++++--------------- 3 files changed, 73 insertions(+), 70 deletions(-) diff --git a/Makefile b/Makefile index ebf196f..0e20dbe 100644 --- a/Makefile +++ b/Makefile @@ -123,6 +123,9 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "logo-background.png" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" + @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ input-options.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ output-options.csv @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ update-desktop-database --quiet &>/dev/null || true; \ diff --git a/source/main.cc b/source/main.cc index d73c089..ba163a9 100644 --- a/source/main.cc +++ b/source/main.cc @@ -62,13 +62,13 @@ void pars_flag(int index_start, int argc, char* argv[]) { exit(1); } else if (str_argv == "--version" || str_argv == "-v"){ - string version = string(gettext("ubl-settings-bootloader version: ")) + version_application + "\n"; + string version = string(_("ubl-settings-bootloader version: ")) + version_application + "\n"; cout << version.c_str(); exit(1); } else{ if (index_start == 1){ - cout << (gettext("Argument not recognized\n")) << endl; + cout << (_("Argument not recognized\n")) << endl; } } diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 8576d9e..579eb42 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -49,7 +49,7 @@ SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr build int MainWindow::check_root() { if (geteuid() != 0) { - //lblMessageSudo->set_text(gettext("The program must be run with \nsuperuser privileges!")); + //lblMessageSudo->set_text(_("The program must be run with \nsuperuser privileges!")); //mess_sudo->show(); return 1; } @@ -96,7 +96,7 @@ void MainWindow::settings(){ boxSave->set_sensitive(false); imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); info_status_app("boxInfoMessError"); - lblWarning->set_text(gettext("The program must be run as root")); + lblWarning->set_text(_("The program must be run as root")); this->set_active_boot_second(); this->event(); } @@ -415,9 +415,9 @@ vector MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel:: } void MainWindow::view_add_colums(Gtk::TreeView &treeView) { - treeView.append_column_editable(gettext("Active"), m_columns.check_button); - treeView.append_column(gettext("Option"), m_columns.name); - treeView.append_column(gettext("Description"), m_columns.description); + treeView.append_column_editable(_("Active"), m_columns.check_button); + treeView.append_column(_("Option"), m_columns.name); + treeView.append_column(_("Description"), m_columns.description); } void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view , size_t index) { @@ -425,8 +425,8 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrtm_year; - string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); + string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); aboutWindows->set_copyright(str_authors); - aboutWindows->set_comments(gettext("ubl-settings-bootloader")); - aboutWindows->set_website(gettext("https://wiki.ublinux.com")); - aboutWindows->set_version(gettext(version_application.c_str())); - aboutWindows->set_website_label(gettext("Project Home Page")); - lblInfoHead->set_text(gettext("Configuring system boot parameters")); - lblHeaderName->set_text(gettext("ubl-settings-bootloader")); - aboutWindows->set_comments(gettext("Setting bootloader")); - aboutWindows->set_website_label(gettext("Project Home Page")); - lblInfoCommand->set_text(gettext("Command line parameters:")); - lblInfoCommand1->set_text(gettext("Command line parameters:")); - lblInfoCommand2->set_text(gettext("Command line parameters:")); - lblInfoDefaultDonw->set_text(gettext("Default download")); - lblInfoSeconds->set_text(gettext("Seconds")); - lblLoadMenu->set_text(gettext("Download menu")); - lblInfoInputTerminal->set_text(gettext("Terminal for input")); - lblInfoOutputTerminal->set_text(gettext("Terminal for output")); + aboutWindows->set_comments(_("ubl-settings-bootloader")); + aboutWindows->set_website(_("https://wiki.ublinux.com")); + aboutWindows->set_version(_(version_application.c_str())); + aboutWindows->set_website_label(_("Project Home Page")); + lblInfoHead->set_text(_("Configuring system boot parameters")); + lblHeaderName->set_text(_("ubl-settings-bootloader")); + aboutWindows->set_comments(_("Setting bootloader")); + aboutWindows->set_website_label(_("Project Home Page")); + lblInfoCommand->set_text(_("Command line parameters:")); + lblInfoCommand1->set_text(_("Command line parameters:")); + lblInfoCommand2->set_text(_("Command line parameters:")); + lblInfoDefaultDonw->set_text(_("Default download")); + lblInfoSeconds->set_text(_("Seconds")); + lblLoadMenu->set_text(_("Download menu")); + lblInfoInputTerminal->set_text(_("Terminal for input")); + lblInfoOutputTerminal->set_text(_("Terminal for output")); - chbLoadVariantSelectionTimer->set_label(gettext("Load variant selection timer")); - chbLastSelectionWillBecome->set_label(gettext("The last selection will become the default boot choice")); - btnSynopsis->set_label(gettext("Help")); - btnAbout->set_label(gettext("About")); - btnSaveLocalGlob->set_label(gettext("Save to global and local configuration")); - btnSaveLocal->set_label(gettext("Save local configuration")); - btnSaveGlob->set_label(gettext("Save global configuration")); - btnLoadGlob->set_label(gettext("Load global configuration")); - btnLoadLocal->set_label(gettext("Load local configuration")); - btnSave->set_label(gettext("Save")); - btnLoad->set_label(gettext("Load")); - this->set_title(gettext("ubl-settings-bootloader")); - - lblDownloadMode->set_text(gettext("Download mode:")); - lblSecurityLogin->set_text(gettext("Security login:")); - lblPasswordProtec->set_text(gettext("Password protection:")); - - chbSecurityLogin->append(gettext("Default")); - chbSecurityLogin->append(gettext("Mine")); - - chbPasswordProtecc->append(gettext("Default")); - chbPasswordProtecc->append(gettext("Mine")); - chbPasswordProtecc->append(gettext("Disabled")); - - cmbDownloadMode->append(gettext("Loading animation, full log")); - cmbDownloadMode->append(gettext("Loading animation, no log")); - cmbDownloadMode->append(gettext("No loading animation, full log.")); - cmbDownloadMode->append(gettext("No loading animation, minimal log.")); + chbLoadVariantSelectionTimer->set_label(_("Load variant selection timer")); + chbLastSelectionWillBecome->set_label(_("The last selection will become the default boot choice")); + btnSynopsis->set_label(_("Help")); + btnAbout->set_label(_("About")); + btnSaveLocalGlob->set_label(_("Save to global and local configuration")); + btnSaveLocal->set_label(_("Save local configuration")); + btnSaveGlob->set_label(_("Save global configuration")); + btnLoadGlob->set_label(_("Load global configuration")); + btnLoadLocal->set_label(_("Load local configuration")); + btnSave->set_label(_("Save")); + btnLoad->set_label(_("Load")); + this->set_title(_("ubl-settings-bootloader")); + + lblDownloadMode->set_text(_("Download mode:")); + lblSecurityLogin->set_text(_("Security login:")); + lblPasswordProtec->set_text(_("Password protection:")); + + chbSecurityLogin->append(_("Default")); + chbSecurityLogin->append(_("Mine")); + + chbPasswordProtecc->append(_("Default")); + chbPasswordProtecc->append(_("Mine")); + chbPasswordProtecc->append(_("Disabled")); + + cmbDownloadMode->append(_("Loading animation, full log")); + cmbDownloadMode->append(_("Loading animation, no log")); + cmbDownloadMode->append(_("No loading animation, full log.")); + cmbDownloadMode->append(_("No loading animation, minimal log.")); } vector MainWindow::get_setting_entry_all(string key, string cmd, Gtk::Entry &entry_text, std::map &map_temp) { @@ -567,7 +567,7 @@ vector MainWindow::get_setting_entry_all(string key, string cmd, Gtk::En bool MainWindow::focus_out_txt_password(GdkEventFocus*) { if (entryPasswordProtecc->get_text().length() == 0) { info_status_app("boxInfoMessError"); - lblWarning->set_text(gettext("Enter your password")); + lblWarning->set_text(_("Enter your password")); boxSave->set_sensitive(false); } else { @@ -579,7 +579,7 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { bool MainWindow::focus_out_txt_login(GdkEventFocus*) { if (entrySecurityLogin->get_text().length() == 0) { info_status_app("boxInfoMessError"); - lblWarning->set_text(gettext("Enter login")); + lblWarning->set_text(_("Enter login")); boxSave->set_sensitive(false); } else { @@ -1030,7 +1030,7 @@ void MainWindow::set_row(Glib::RefPtr &list_store, int size, std } void MainWindow::synopsis_show() { - string cmd = "xdg-open " + string(gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name + " &"; + string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name + " &"; if (geteuid() == 0) { string response_user = getlogin(); cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; @@ -1061,23 +1061,23 @@ void MainWindow::info_warning_error(int mess) { index_error = 0; string mess_error = ""; if (mess == 0) { - mess_error = string(gettext("Local configuration reading error")) + str_cmd_error; + mess_error = string(_("Local configuration reading error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 1) { - mess_error = string(gettext("Global configuration read error")) + str_cmd_error; + mess_error = string(_("Global configuration read error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 2) { - mess_error = string(gettext("Local configuration write error")) + str_cmd_error; + mess_error = string(_("Local configuration write error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 3) { - mess_error = string(gettext("Global configuration write error")) + str_cmd_error; + mess_error = string(_("Global configuration write error")) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 4) { - mess_error = string(gettext("Error saved local and global configuration")) + str_cmd_error; + mess_error = string(_("Error saved local and global configuration")) + str_cmd_error; lblWarning->set_text(mess_error); } str_cmd_error = ""; @@ -1086,22 +1086,22 @@ void MainWindow::info_warning_error(int mess) { info_status_app("boxInfoMessOK"); imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); if (mess == 0) { - lblWarning->set_text(gettext("Local configuration downloaded successfully")); + lblWarning->set_text(_("Local configuration downloaded successfully")); } else if (mess == 1) { - lblWarning->set_text(gettext("Global configuration downloaded successfully")); + lblWarning->set_text(_("Global configuration downloaded successfully")); } else if (mess == 2) { - lblWarning->set_text(gettext("Local configuration successfully written")); + lblWarning->set_text(_("Local configuration successfully written")); } else if (mess == 3) { - lblWarning->set_text(gettext("Global configuration successfully written")); + lblWarning->set_text(_("Global configuration successfully written")); } else if (mess == 4) { - lblWarning->set_text(gettext("Successfully saved local and global configuration")); + lblWarning->set_text(_("Successfully saved local and global configuration")); } else if (mess == 5) { - lblWarning->set_text(gettext("Nothing to save!")); + lblWarning->set_text(_("Nothing to save!")); } } } @@ -1178,7 +1178,7 @@ void MainWindow::add_CSS(){ } void help() { - string version = string(gettext("ubl-settings-bootloader version: ")) + version_application + "\n"; + string version = string(_("ubl-settings-bootloader version: ")) + version_application + "\n"; cout << version.c_str(); string help; help = "GTK settings bootloader for UBLinux\n\n" @@ -1186,7 +1186,7 @@ void help() { "Options:\n" " -h, --help Show this help\n" " -V, --version Show package version\n"; - cout << gettext(help.c_str()); + cout << _(help.c_str()); } From a8db45bb18afaee263be3570dfbfbfb089c88891 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 11:00:14 +0600 Subject: [PATCH 055/110] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20.csv=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmdline-linux.csv | 14 ++++++++++++++ grub-terminal-input.csv | 6 ++++++ grub-terminal-output.csv | 6 ++++++ 3 files changed, 26 insertions(+) create mode 100644 cmdline-linux.csv create mode 100644 grub-terminal-input.csv create mode 100644 grub-terminal-output.csv diff --git a/cmdline-linux.csv b/cmdline-linux.csv new file mode 100644 index 0000000..1aba2df --- /dev/null +++ b/cmdline-linux.csv @@ -0,0 +1,14 @@ +Option,Description +quiet,Downloading without text messages +splash,Show welcome window +noplymouth,Disable Plymouth +acpi=off,Disable ACPI +noapic,Disable APIC +nolapic,Disable local APIC +single,Single User Mode +nomodeset,Disable kernel selection and loading of video drivers +915.enable_dc=0,Disable GPU power management +ahci.mobile_lpm_policy=1,"Maximum performance, power management" +snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver +intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state +intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors diff --git a/grub-terminal-input.csv b/grub-terminal-input.csv new file mode 100644 index 0000000..4bd7f47 --- /dev/null +++ b/grub-terminal-input.csv @@ -0,0 +1,6 @@ +Option,Description +console,PC BIOS & EFI console +serial,Serial terminal +ofconsole,Open Firmware Console +at_keyboard,PC AT Keyboard (Coreboot) +usb_keyboard,USB Keyboard (HID Boot protocol) diff --git a/grub-terminal-output.csv b/grub-terminal-output.csv new file mode 100644 index 0000000..30453d6 --- /dev/null +++ b/grub-terminal-output.csv @@ -0,0 +1,6 @@ +Option,Description +console,PC BIOS & EFI console +serial,Serial terminal +ofconsole,Open Firmware Console +gfxterm,Output in graphical mode +vga_text,VGA text output (Coreboot) From 7dd0ff72c264810e9a81dda1919bb36849fb965d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 11:01:55 +0600 Subject: [PATCH 056/110] =?UTF-8?q?=D0=92=20Makefile=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?.csv=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 0e20dbe..38cb413 100644 --- a/Makefile +++ b/Makefile @@ -123,9 +123,9 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "logo-background.png" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" - @install -Dm644 -t /usr/share/${PKGNAME}/ boot-options.csv - @install -Dm644 -t /usr/share/${PKGNAME}/ input-options.csv - @install -Dm644 -t /usr/share/${PKGNAME}/ output-options.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ cmdline-linux.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ grub-terminal-input.csv + @install -Dm644 -t /usr/share/${PKGNAME}/ grub-terminal-output.csv @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ update-desktop-database --quiet &>/dev/null || true; \ From b9ecca44c5c72244c4755b184126931dc648d838 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 11:07:49 +0600 Subject: [PATCH 057/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.glade | 41 +++++++-------------------------- ubl-settings-bootloader.pot | 5 +++- ubl-settings-bootloader_ru.po | 43 +++++++++++++++++++++-------------- 3 files changed, 38 insertions(+), 51 deletions(-) diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 5b3dd98..4b3511b 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -2,6 +2,10 @@ + + both + True + False О Программе @@ -410,27 +414,6 @@ specified priority 1 - - - The last selection will become the default boot choice - True - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 2 - - False @@ -453,7 +436,7 @@ specified priority 5 6 6 - Download mode + Load screen display mode: start 0 @@ -495,6 +478,7 @@ specified priority True False + User name to enter boot configuration editing mode start 5 5 @@ -502,7 +486,7 @@ specified priority 5 6 6 - Security login: + Download menu user name: start 0 @@ -568,7 +552,7 @@ specified priority 5 6 6 - Password protection: + Download menu user password: start 0
@@ -1219,15 +1203,6 @@ specified priority
- - both - True - - - - - - False Внимание! diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index 51c8e8e..0d475e2 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -130,7 +130,7 @@ msgid "Load local configuration" msgstr "" #: source/ubl-settings-bootloader.cc:298 -msgid "Load variant selection timer" +msgid "Load option timer" msgstr "" #: source/ubl-settings-bootloader.cc:452 @@ -324,3 +324,6 @@ msgstr "" msgid "vga_text (Text output VGA (Coreboot))" msgstr "" + +msgid "Last Successful Download" +msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 4e58ae2..6a957de 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -31,26 +31,32 @@ msgstr "Отключён" msgid "Default" msgstr "По умолчанию" -msgid "Loading animation, full log" -msgstr "Анимация загрузки, полный лог" +msgid "Loading animation with the magazine" +msgstr "Анимация загрузки с журналом" -msgid "Loading animation, no log" -msgstr "Анимация загрузки, нет лога" +msgid "Loading animation without a magazine" +msgstr "Анимация загрузки без журнала" -msgid "No loading animation, full log." -msgstr "Без анимации загрузки, полный лог" +msgid "No loading animation, full log" +msgstr "Отсутствие анимации загрузки с выводом журнала" -msgid "No loading animation, minimal log." -msgstr "Без анимации загрузки, минимальный лог" +msgid "Lack of loading animation with the output of the abbreviated log" +msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" -msgid "Download mode:" -msgstr "Режим загрузки:" +msgid "Load screen display mode:" +msgstr "Режим отображения экрана загрузки:" -msgid "Security login:" -msgstr "Логин защиты:" +msgid "Download menu user name:" +msgstr "Имя пользователя меню загрузки:" -msgid "Password protection:" -msgstr "Пароль защиты:" +msgid "Not available" +msgstr "Отсутствует" + +msgid "User name to enter boot configuration editing mode" +msgstr "Имя пользователя для входа в режим редактирования конфигурации загрузки" + +msgid "Download menu user password:" +msgstr "Пароль пользователя меню загрузки:" #: source/ubl-settings-bootloader.cc:301 msgid "About" @@ -77,8 +83,8 @@ msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" #: source/ubl-settings-bootloader.cc:292 -msgid "Default download" -msgstr "Загрузка по умолчанию:" +msgid "Load screen display mode:" +msgstr "Режим отображения экрана загрузки:" #: source/ubl-settings-bootloader.cc:201 msgid "Description" @@ -112,6 +118,9 @@ msgstr "Загрузка без текстовых сообщений" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" +msgid "Last Successful Download" +msgstr "Последняя удачная загрузка" + #: source/ubl-settings-bootloader.cc:443 #, fuzzy msgid "Error saved local and global configuration" @@ -173,7 +182,7 @@ msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" #: source/ubl-settings-bootloader.cc:298 -msgid "Load variant selection timer" +msgid "Load option timer" msgstr "Таймер выбора варианта загрузки" #: source/ubl-settings-bootloader.cc:452 From 0c2cc3da9dbe384a94d516dbc4bd1d00ca813b59 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 11:08:45 +0600 Subject: [PATCH 058/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 35 ++++++++++++++++--------------- source/ubl-settings-bootloader.h | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 579eb42..6e21ba3 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -110,9 +110,9 @@ void MainWindow::fill_in_view() { treeViewIPT->set_model(list_store_IPT); treeViewOTT->set_model(list_store_OTT); - vec_Option_kernel = this->read_file_and_view("boot-options.csv", row_kernel, list_store_kernel); - vec_Option_IPT = this->read_file_and_view("input-options.csv", row_IPT, list_store_IPT); - vec_Option_OTT = this->read_file_and_view("output-options.csv", row_OTT, list_store_OTT); + vec_Option_kernel = this->read_file_and_view("cmdline-linux.csv", row_kernel, list_store_kernel); + vec_Option_IPT = this->read_file_and_view("grub-terminal-input.csv", row_IPT, list_store_IPT); + vec_Option_OTT = this->read_file_and_view("grub-terminal-output.csv", row_OTT, list_store_OTT); size_kernel = vec_Option_kernel.size(); size_IPT = vec_Option_IPT.size(); size_OTT = vec_Option_OTT.size(); @@ -431,7 +431,6 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrget_widget("chbLoadVariantSelectionTimer", chbLoadVariantSelectionTimer); - builder->get_widget("chbLastSelectionWillBecome", chbLastSelectionWillBecome); builder->get_widget("lblInfoCommand", lblInfoCommand); builder->get_widget("lblInfoCommand1", lblInfoCommand1); builder->get_widget("lblInfoCommand2", lblInfoCommand2); @@ -482,6 +481,8 @@ void MainWindow::get_builder(){ builder->get_widget("chbPasswordProtecc", chbPasswordProtecc); builder->get_widget("entryPasswordProtecc", entryPasswordProtecc); builder->get_widget("entrySecurityLogin", entrySecurityLogin); + builder->get_widget("cmbDefaultDonw", cmbDefaultDonw); + } void MainWindow::localization(){ @@ -501,14 +502,13 @@ void MainWindow::localization(){ lblInfoCommand->set_text(_("Command line parameters:")); lblInfoCommand1->set_text(_("Command line parameters:")); lblInfoCommand2->set_text(_("Command line parameters:")); - lblInfoDefaultDonw->set_text(_("Default download")); + lblInfoDefaultDonw->set_text(_("Load screen display mode:")); lblInfoSeconds->set_text(_("Seconds")); lblLoadMenu->set_text(_("Download menu")); lblInfoInputTerminal->set_text(_("Terminal for input")); lblInfoOutputTerminal->set_text(_("Terminal for output")); - chbLoadVariantSelectionTimer->set_label(_("Load variant selection timer")); - chbLastSelectionWillBecome->set_label(_("The last selection will become the default boot choice")); + chbLoadVariantSelectionTimer->set_label(_("Load option timer")); btnSynopsis->set_label(_("Help")); btnAbout->set_label(_("About")); btnSaveLocalGlob->set_label(_("Save to global and local configuration")); @@ -519,22 +519,23 @@ void MainWindow::localization(){ btnSave->set_label(_("Save")); btnLoad->set_label(_("Load")); this->set_title(_("ubl-settings-bootloader")); + lblSecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); - lblDownloadMode->set_text(_("Download mode:")); - lblSecurityLogin->set_text(_("Security login:")); - lblPasswordProtec->set_text(_("Password protection:")); + lblDownloadMode->set_text(_("Load screen display mode:")); + lblSecurityLogin->set_text(_("Download menu user name:")); + lblPasswordProtec->set_text(_("Download menu user password:")); - chbSecurityLogin->append(_("Default")); + chbSecurityLogin->append(_("Not available")); chbSecurityLogin->append(_("Mine")); - chbPasswordProtecc->append(_("Default")); + chbPasswordProtecc->append(_("Not available")); chbPasswordProtecc->append(_("Mine")); - chbPasswordProtecc->append(_("Disabled")); - cmbDownloadMode->append(_("Loading animation, full log")); - cmbDownloadMode->append(_("Loading animation, no log")); - cmbDownloadMode->append(_("No loading animation, full log.")); - cmbDownloadMode->append(_("No loading animation, minimal log.")); + cmbDownloadMode->append(_("Loading animation with the magazine")); + cmbDownloadMode->append(_("Loading animation without a magazine")); + cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); + cmbDownloadMode->append(_("Lack of loading animation with the output of the abbreviated log")); + cmbDefaultDonw->append(_("Last Successful Download")); } vector MainWindow::get_setting_entry_all(string key, string cmd, Gtk::Entry &entry_text, std::map &map_temp) { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 674346c..640fc83 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -61,7 +61,6 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblInfoHead; Gtk::CheckButton *chbVgaText; Gtk::CheckButton *chbLoadVariantSelectionTimer; - Gtk::CheckButton *chbLastSelectionWillBecome; Gtk::Entry *entryKernel; Gtk::Entry *entryIPT; Gtk::Entry *entryOTT; @@ -89,6 +88,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::TreeView *treeViewOTT; Gtk::Image *imgBG; Gtk::Overlay *overHead; + Gtk::ComboBoxText *cmbDefaultDonw; Gtk::ComboBoxText *cmbDownloadMode; Gtk::ComboBoxText *chbSecurityLogin; Gtk::ComboBoxText *chbPasswordProtecc; From a02a270030ac3076e18c70c97d683f168a743ac8 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 11:10:04 +0600 Subject: [PATCH 059/110] fix --- boot-options.csv | 14 -------------- input-options.csv | 6 ------ output-options.csv | 6 ------ 3 files changed, 26 deletions(-) delete mode 100644 boot-options.csv delete mode 100644 input-options.csv delete mode 100644 output-options.csv diff --git a/boot-options.csv b/boot-options.csv deleted file mode 100644 index 1aba2df..0000000 --- a/boot-options.csv +++ /dev/null @@ -1,14 +0,0 @@ -Option,Description -quiet,Downloading without text messages -splash,Show welcome window -noplymouth,Disable Plymouth -acpi=off,Disable ACPI -noapic,Disable APIC -nolapic,Disable local APIC -single,Single User Mode -nomodeset,Disable kernel selection and loading of video drivers -915.enable_dc=0,Disable GPU power management -ahci.mobile_lpm_policy=1,"Maximum performance, power management" -snd-intel-dspcfg.dsp_driver=1,Forced selection of an Intel sound device driver -intel_idle.max_cstate=1,Prevents the processor from going into a deep sleep state -intel_idle.max_cstate=4,Eliminates flickering laptop display on Ultra Voltage processors diff --git a/input-options.csv b/input-options.csv deleted file mode 100644 index 4bd7f47..0000000 --- a/input-options.csv +++ /dev/null @@ -1,6 +0,0 @@ -Option,Description -console,PC BIOS & EFI console -serial,Serial terminal -ofconsole,Open Firmware Console -at_keyboard,PC AT Keyboard (Coreboot) -usb_keyboard,USB Keyboard (HID Boot protocol) diff --git a/output-options.csv b/output-options.csv deleted file mode 100644 index 30453d6..0000000 --- a/output-options.csv +++ /dev/null @@ -1,6 +0,0 @@ -Option,Description -console,PC BIOS & EFI console -serial,Serial terminal -ofconsole,Open Firmware Console -gfxterm,Output in graphical mode -vga_text,VGA text output (Coreboot) From f83ed53d20a2957fc536840a32e30736b10d8daf Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 11:50:10 +0600 Subject: [PATCH 060/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20comboBox=20"=D0=98=D0=BC=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8E=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?:"=20=D0=B8=20"=D0=9F=D0=B0=D1=80=D0=BE=D0=BB=D1=8C=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B5=D0=BD=D1=8E=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B8:"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 118 +++++++++++++++--------------- source/ubl-settings-bootloader.h | 2 +- ubl-settings-bootloader_ru.po | 3 - 3 files changed, 58 insertions(+), 65 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 6e21ba3..45faabd 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -234,31 +234,36 @@ void MainWindow::set_download_mode(string cmd="") { map_cmd_selection["GRUB_BOOT_SILENT"] = key; } -void MainWindow::set_security_login(string cmd="") { +void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { int index = chbSecurityLogin->get_active_row_number(); string key = ""; - if (index == 0){ - // TODO: - // Не правильно - key = "superadmin"; - + if (index == 0) { + key = ""; + if (cmd_remove.length() != 0) { + wrapper_system(cmd_remove, ""); + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } } else if (index == 1) { key = entrySecurityLogin->get_text(); + if (cmd.length() != 0) { + entrySecurityLogin->set_text(key); + cmd = cmd + "\"" + key + "\""; + wrapper_system(cmd, ""); + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } } else if (index == -1) { return; } - if (cmd.length() != 0) { - entrySecurityLogin->set_text(key); - cmd = cmd + "\"" + key + "\""; - wrapper_system(cmd, ""); - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } map_cmd_selection["GRUB_USER"] = key; } @@ -271,16 +276,11 @@ void MainWindow::get_security_login(string cmd, std::map &map_t if (res_response.error == 0) { str_replace_all(res_response.response, " ",""); str_replace_all(res_response.response, "\"",""); - entrySecurityLogin->set_text(res_response.response); - if (res_response.response != default_login) { + if (res_response.response.length() > 0) { chbSecurityLogin->set_active(1); - entrySecurityLogin->set_sensitive(true); - map_temp["GRUB_USER"] = res_response.response; - } - else if (res_response.response == default_login) { - chbSecurityLogin->set_active(0); - map_temp["GRUB_USER"] = default_login; + entrySecurityLogin->set_sensitive(true); + entrySecurityLogin->set_text(res_response.response); } else { chbSecurityLogin->set_active(-1); @@ -289,11 +289,13 @@ void MainWindow::get_security_login(string cmd, std::map &map_t } } else if (res_response.error == 3) { - chbSecurityLogin->set_active(-1); map_temp["GRUB_USER"] = ""; if (start_error != index_error) { index_error = start_error; } + chbSecurityLogin->set_active(0); + entrySecurityLogin->set_text(""); + entrySecurityLogin->set_sensitive(false); } else { chbSecurityLogin->set_active(-1); @@ -302,37 +304,35 @@ void MainWindow::get_security_login(string cmd, std::map &map_t } void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { - // TODO: - // Не работает int index = chbPasswordProtecc->get_active_row_number(); string key = ""; if (index == 0){ key = ""; + if (cmd_remove.length() != 0) { + wrapper_system(cmd_remove, ""); + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } } else if (index == 1) { key = entryPasswordProtecc->get_text(); - } - else if (index == 2) { - key = ""; - if (cmd_remove.length() != 0) { - wrapper_system(cmd_remove, ""); - + if (cmd.length() != 0) { + entryPasswordProtecc->set_text(key); + cmd = cmd + "\"" + key + "\""; + wrapper_system(cmd, ""); + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; } - cmd = ""; } else if (index == -1) { return; } - if (cmd.length() != 0 && cmd_remove.length() != 0) { - entryPasswordProtecc->set_text(key); - cmd = cmd + key; - wrapper_system(cmd, ""); - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } map_cmd_selection["GRUB_PASSWORD"] = key; } @@ -341,16 +341,11 @@ void MainWindow::get_password_protec(string cmd, std::map &map_ struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { str_replace_all(res_response.response, "\"",""); - entryPasswordProtecc->set_text(res_response.response); - // TODO: - // Не работает - if (res_response.response == getlogin()) { - chbPasswordProtecc->set_active(0); - map_temp["GRUB_PASSWORD"] = ""; - } - else if (res_response.response.length() != 0) { + // entryPasswordProtecc->set_text(res_response.response); + if (res_response.response.length() != 0) { chbPasswordProtecc->set_active(1); - map_temp["GRUB_PASSWORD"] = ""; + map_temp["GRUB_PASSWORD"] = res_response.response; + entryPasswordProtecc->set_text(""); entryPasswordProtecc->set_sensitive(true); } else{ @@ -358,8 +353,8 @@ void MainWindow::get_password_protec(string cmd, std::map &map_ chbPasswordProtecc->set_active(-1); } } - else if (res_response.error == 3 && res_response.response.find("null") != string::npos) { - chbPasswordProtecc->set_active(2); + else if (res_response.error == 3) { + chbPasswordProtecc->set_active(0); map_temp["GRUB_PASSWORD"] = ""; entryPasswordProtecc->set_text(""); if (start_error != index_error) { @@ -727,10 +722,7 @@ void MainWindow::change_security_login() { int index = chbSecurityLogin->get_active_row_number(); if (index == 0) { entrySecurityLogin->set_sensitive(false); - // TODO: - // Добавить заполнение логина по умолчанию - string default_login = "superadmin"; - entrySecurityLogin->set_text(default_login); + entrySecurityLogin->set_text(""); boxSave->set_sensitive(true); } else if (index == 1) { @@ -826,7 +818,9 @@ bool MainWindow::save_global_cfg() { flag_no_save = false; } if (this->check_save(flag_save, "GRUB_USER")) { - this->set_security_login("ubconfig --target global set boot GRUB_USER="); + string cmd_login = "ubconfig --target global set boot GRUB_USER="; + string cmd_remove_login = "ubconfig --target system remove boot GRUB_USER"; + this->set_security_login(cmd_login, cmd_remove_login); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_PASSWORD")) { @@ -886,7 +880,9 @@ bool MainWindow::save_local_cfg() { flag_no_save = false; } if (this->check_save(flag_save, "GRUB_USER")) { - this->set_security_login("ubconfig --target system set boot GRUB_USER="); + string cmd_login = "ubconfig --target system set boot GRUB_USER="; + string cmd_remove_login = "ubconfig --target system remove boot GRUB_USER"; + this->set_security_login(cmd_login, cmd_remove_login); flag_no_save = false; } if (this->check_save(flag_save, "GRUB_PASSWORD")) { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 640fc83..c4ea0b5 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -171,7 +171,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_IPT(GdkEventFocus*); bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); - void set_security_login(string cmd); + void set_security_login(string cmd, string cmd_remove); void get_security_login(string cmd, std::map &map_temp); bool check_flag_save(string flag_save); void set_download_mode(string cmd); diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 6a957de..7ea8135 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -43,9 +43,6 @@ msgstr "Отсутствие анимации загрузки с выводом msgid "Lack of loading animation with the output of the abbreviated log" msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" -msgid "Load screen display mode:" -msgstr "Режим отображения экрана загрузки:" - msgid "Download menu user name:" msgstr "Имя пользователя меню загрузки:" From ff69c6110c368512ec618cc0eb153280cb23870b Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 14:11:20 +0600 Subject: [PATCH 061/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D1=81=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 22 ++++++++++++++-------- source/ubl-settings-bootloader.h | 1 + ubl-settings-bootloader.glade | 4 ++-- ubl-settings-bootloader_ru.po | 7 +++++-- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 45faabd..18c06ab 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -319,7 +319,7 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { } else if (index == 1) { key = entryPasswordProtecc->get_text(); - if (cmd.length() != 0) { + if (cmd.length() != 0 and key != "************") { entryPasswordProtecc->set_text(key); cmd = cmd + "\"" + key + "\""; wrapper_system(cmd, ""); @@ -333,7 +333,10 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { else if (index == -1) { return; } - map_cmd_selection["GRUB_PASSWORD"] = key; + if (key!= "************") { + map_cmd_selection["GRUB_PASSWORD"] = key; + } + } void MainWindow::get_password_protec(string cmd, std::map &map_temp) { @@ -341,11 +344,10 @@ void MainWindow::get_password_protec(string cmd, std::map &map_ struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { str_replace_all(res_response.response, "\"",""); - // entryPasswordProtecc->set_text(res_response.response); if (res_response.response.length() != 0) { chbPasswordProtecc->set_active(1); map_temp["GRUB_PASSWORD"] = res_response.response; - entryPasswordProtecc->set_text(""); + entryPasswordProtecc->set_text("************"); entryPasswordProtecc->set_sensitive(true); } else{ @@ -497,7 +499,7 @@ void MainWindow::localization(){ lblInfoCommand->set_text(_("Command line parameters:")); lblInfoCommand1->set_text(_("Command line parameters:")); lblInfoCommand2->set_text(_("Command line parameters:")); - lblInfoDefaultDonw->set_text(_("Load screen display mode:")); + lblInfoDefaultDonw->set_text(_("Load default:")); lblInfoSeconds->set_text(_("Seconds")); lblLoadMenu->set_text(_("Download menu")); lblInfoInputTerminal->set_text(_("Terminal for input")); @@ -517,8 +519,8 @@ void MainWindow::localization(){ lblSecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); lblDownloadMode->set_text(_("Load screen display mode:")); - lblSecurityLogin->set_text(_("Download menu user name:")); - lblPasswordProtec->set_text(_("Download menu user password:")); + lblSecurityLogin->set_text(_("Load menu user name:")); + lblPasswordProtec->set_text(_("Load menu user password:")); chbSecurityLogin->append(_("Not available")); chbSecurityLogin->append(_("Mine")); @@ -568,7 +570,11 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { } else { boxSave->set_sensitive(true); - map_cmd_selection["GRUB_PASSWORD"] = entryPasswordProtecc->get_text(); + string key = entryPasswordProtecc->get_text(); + if (key != "************") { + map_cmd_selection["GRUB_PASSWORD"] = key; + } + } return true; } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index c4ea0b5..c6914e5 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -141,6 +141,7 @@ class MainWindow : public Gtk::ApplicationWindow { void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); void add_CSS(); + void show_pass(); void localization(); void event(); void settings(); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 4b3511b..d6bcd4a 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -486,7 +486,7 @@ specified priority 5 6 6 - Download menu user name: + Load menu user name: start 0 @@ -552,7 +552,7 @@ specified priority 5 6 6 - Download menu user password: + Load menu user password: start 0
diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 7ea8135..f97b883 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -43,16 +43,19 @@ msgstr "Отсутствие анимации загрузки с выводом msgid "Lack of loading animation with the output of the abbreviated log" msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" -msgid "Download menu user name:" +msgid "Load menu user name:" msgstr "Имя пользователя меню загрузки:" msgid "Not available" msgstr "Отсутствует" +msgid "Load default:" +msgstr "Загрузка по умолчанию:" + msgid "User name to enter boot configuration editing mode" msgstr "Имя пользователя для входа в режим редактирования конфигурации загрузки" -msgid "Download menu user password:" +msgid "Load menu user password:" msgstr "Пароль пользователя меню загрузки:" #: source/ubl-settings-bootloader.cc:301 From f0ea5a538be2d53e519e16a234ee39826395d257 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 5 Apr 2023 14:14:39 +0600 Subject: [PATCH 062/110] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D1=91?= =?UTF-8?q?=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screenshot/screenshot.png | Bin 144454 -> 146841 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png index 3fa8cdddb67af82da1aaaa5d6d91d454c4f916b3..366fb8b2ba17c42df776956535bf7d0359810820 100644 GIT binary patch literal 146841 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

Vep%+yZ3hy-Y1A{OQ|3Sz;++I&F5 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%0ApnJN*S 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�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 CbJ} Date: Thu, 6 Apr 2023 09:31:02 +0600 Subject: [PATCH 063/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BF=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D0=B2=D0=BE=20=D0=B8=D0=BC=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=B2=20util.cc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 108 ++++++++++++++++++++++++------ source/ubl-settings-bootloader.h | 2 + source/util.cc | 14 ++++ source/util.h | 24 ++++++- ubl-settings-bootloader.glade | 6 +- 5 files changed, 126 insertions(+), 28 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 18c06ab..241e9ca 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -169,7 +169,7 @@ void MainWindow::get_download_mode(string cmd, std::map &map_te int start_error = index_error; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - str_replace_all(res_response.response, "\"",""); + Utils::str_replace_all(res_response.response, "\"",""); if (res_response.response == "splash") { cmbDownloadMode->set_active(0); map_temp["GRUB_BOOT_SILENT"] = "splash"; @@ -274,8 +274,8 @@ void MainWindow::get_security_login(string cmd, std::map &map_t // Убрать в будущем string default_login = "superadmin"; if (res_response.error == 0) { - str_replace_all(res_response.response, " ",""); - str_replace_all(res_response.response, "\"",""); + Utils::str_replace_all(res_response.response, " ",""); + Utils::str_replace_all(res_response.response, "\"",""); if (res_response.response.length() > 0) { chbSecurityLogin->set_active(1); map_temp["GRUB_USER"] = res_response.response; @@ -343,7 +343,7 @@ void MainWindow::get_password_protec(string cmd, std::map &map_ int start_error = index_error; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - str_replace_all(res_response.response, "\"",""); + Utils::str_replace_all(res_response.response, "\"",""); if (res_response.response.length() != 0) { chbPasswordProtecc->set_active(1); map_temp["GRUB_PASSWORD"] = res_response.response; @@ -402,7 +402,7 @@ string MainWindow::dynamic_update_entry(std::map &map_view, vect vector MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { - std::array, 5> arr_view = read_csv(path_resources + "/" + file_name); + std::array, 5> arr_view = Utils::read_csv(path_resources + "/" + file_name); std::vector vec_Option = arr_view[0]; for (size_t index = 0; index < vec_Option.size(); index++) { @@ -540,15 +540,15 @@ vector MainWindow::get_setting_entry_all(string key, string cmd, Gtk::En vector vec_params; struct Result res_response = this->wrapper_call(cmd); if (res_response.error == 0) { - str_replace_all(res_response.response, "\"", ""); - vec_params = split(res_response.response, ' '); - str_replace_all(res_response.response, " ", ", "); + Utils::str_replace_all(res_response.response, "\"", ""); + vec_params = Utils::split(res_response.response, ' '); + Utils::str_replace_all(res_response.response, " ", ", "); entry_text.set_text(res_response.response); for (auto ¶m: vec_params) { map_cmd_selection[param] = "1"; map_temp[param] = "1"; } - str_remove(res_response.response, ","); + Utils::str_remove(res_response.response, ","); map_temp[key] = res_response.response; } else if (res_response.error == 3) { @@ -609,8 +609,8 @@ void MainWindow::set_entry_to_tree_view(Glib::RefPtr &list_store flag_blocked_tree_view = true; vector vec_params; std::string text = entry.get_text(); - str_replace_all(text, " ", ""); - vec_params = split(text, ','); + Utils::str_replace_all(text, " ", ""); + vec_params = Utils::split(text, ','); for (auto &name: vec_Option) { this->set_row(list_store, size, name, false); } @@ -680,10 +680,10 @@ void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove) { string cmds = entry.get_text(); - str_remove(cmds, ","); + Utils::str_remove(cmds, ","); if (cmds.length() != 0) { cmd_settings += "\"" + cmds + "\""; - str_replace_all(cmd_settings, " \"", "\""); + Utils::str_replace_all(cmd_settings, " \"", "\""); this->wrapper_system(cmd_settings, ""); } else { @@ -709,6 +709,7 @@ void MainWindow::event(){ chbSecurityLogin->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_security_login)); cmbDownloadMode->signal_changed().connect([&]() {set_download_mode();}); chbSecurityLogin->signal_changed().connect([&]() {set_security_login();}); + cmbDefaultDonw->signal_changed().connect([&]() {set_default_load("","");}); spbSecond->signal_changed().connect([&]() {set_menu_boot();}); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); @@ -742,6 +743,55 @@ void MainWindow::change_security_login() { boxSave->set_sensitive(true); } } +void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { + int index = cmbDefaultDonw->get_active_row_number(); + if (index == 0) { + if (cmd.length() != 0) { + wrapper_system(cmd, ""); + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } + } + else if (index > 0) { + if (cmd_remove.length() != 0) { + wrapper_system(cmd_remove, ""); + } + else { + flag_save_local = true; + flag_save_global = true; + flag_save_all = true; + } + } + if (index != 0 && index != -1) { + map_cmd_selection["GRUB_DEFAULT"] = cmbDefaultDonw->get_active_text(); + } + else { + map_cmd_selection["GRUB_DEFAULT"] = ""; + } +} + +void MainWindow::get_default_load(string cmd, std::map &map_temp) { + int start_error = index_error; + struct Result res_response = this->wrapper_call(cmd); + if (res_response.error == 0) { + map_temp["GRUB_DEFAULT"] = res_response.response; + cmbDefaultDonw->set_active_text(res_response.response); + } + else if (res_response.error == 3) { + if (start_error != index_error) { + index_error = start_error; + cmbDefaultDonw->set_active(0); + } + map_temp["GRUB_DEFAULT"] = ""; + + } + else { + map_temp["GRUB_DEFAULT"] = ""; + } +} void MainWindow::change_password_protecc() { int index = chbPasswordProtecc->get_active_row_number(); @@ -835,6 +885,12 @@ bool MainWindow::save_global_cfg() { this->set_password_protec(cmd_password, cmd_password_remove); flag_no_save = false; } + if (this->check_save(flag_save, "GRUB_DEFAULT")) { + string cmd_load = "ubconfig --target global set boot GRUB_DEFAULT="; + string cmd_load_remove = "ubconfig --target global remove boot GRUB_DEFAULT"; + this->set_default_load(cmd_load, cmd_load_remove); + flag_no_save = false; + } } } map_global_cmd_selection = map_cmd_selection; @@ -897,6 +953,13 @@ bool MainWindow::save_local_cfg() { this->set_password_protec(cmd_password, cmd_password_remove); flag_no_save = false; } + if (this->check_save(flag_save, "GRUB_DEFAULT")) { + string cmd_load = "ubconfig --target system set boot GRUB_DEFAULT="; + string cmd_load_remove = "ubconfig --target system remove boot GRUB_DEFAULT"; + this->set_default_load(cmd_load, cmd_load_remove); + flag_no_save = false; + } + } } map_local_cmd_selection = map_cmd_selection; @@ -905,16 +968,16 @@ bool MainWindow::save_local_cfg() { void MainWindow::set_data_cfg() { string str_flags = entryKernel->get_text(); - str_remove(str_flags, ","); - str_replace_all(str_flags, " \"", "\""); + Utils::str_remove(str_flags, ","); + Utils::str_replace_all(str_flags, " \"", "\""); map_cmd_selection["GRUB_CMDLINE_LINUX"] = str_flags; str_flags = entryIPT->get_text(); - str_remove(str_flags, ","); - str_replace_all(str_flags, " \"", "\""); + Utils::str_remove(str_flags, ","); + Utils::str_replace_all(str_flags, " \"", "\""); map_cmd_selection["GRUB_TERMINAL_INPUT"] = str_flags; str_flags = entryOTT->get_text(); - str_remove(str_flags, ","); - str_replace_all(str_flags, " \"", "\""); + Utils::str_remove(str_flags, ","); + Utils::str_replace_all(str_flags, " \"", "\""); map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; } @@ -940,6 +1003,7 @@ void MainWindow::download_globl_cfg() { this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT", map_global_cmd_selection); this->get_security_login("ubconfig --default --source global get boot GRUB_USER", map_global_cmd_selection); this->get_password_protec("ubconfig --default --source global get boot GRUB_PASSWORD", map_global_cmd_selection); + this->get_default_load("ubconfig --default --source global get boot GRUB_DEFAULT", map_global_cmd_selection); info_warning_error(1); map_cmd_selection = map_global_cmd_selection; @@ -967,6 +1031,7 @@ void MainWindow::download_local_cfg() { this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT", map_local_cmd_selection); this->get_security_login("ubconfig --default --source system get boot GRUB_USER", map_local_cmd_selection); this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD", map_local_cmd_selection); + this->get_default_load("ubconfig --default --source system get boot GRUB_DEFAULT", map_local_cmd_selection); info_warning_error(0); map_cmd_selection = map_local_cmd_selection; } @@ -1051,7 +1116,6 @@ void MainWindow::wrapper_system(string cmd, string thread_str = "") { } void MainWindow::info_status_app(string stule) { - boxInfo->remove_class("boxInfoMessOK"); boxInfo->remove_class("boxInfoMessError"); boxInfo->add_class(stule); @@ -1111,7 +1175,7 @@ void MainWindow::info_warning_error(int mess) { struct MainWindow::Result MainWindow::wrapper_call(string cmd) { struct Result obj_result; - string response = call(cmd); + string response = Utils::call(cmd); if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) { if (response.find("=") != std::string::npos) { if (response.find("\n") != std::string::npos) { @@ -1152,7 +1216,7 @@ void MainWindow::log_mess_error(string &cmd) { str_cmd_error = map_cmd_error[cmd]; } else { - for ( const auto &map_iter: map_cmd_error ) { + for (const auto &map_iter: map_cmd_error) { key = map_iter.first; if (cmd.find(key) != std::string::npos){ str_cmd_error = map_iter.second; diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index c6914e5..63466d1 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -137,6 +137,7 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(Glib::RefPtr const& builder); void get_menu_boot(string cmd, std::map &map_temp); void set_menu_boot(string cmd, string cmd_remove); + void set_default_load(string cmd, string cmd_remove); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); @@ -179,6 +180,7 @@ class MainWindow : public Gtk::ApplicationWindow { void change_password_protecc(); bool focus_out_txt_login(GdkEventFocus*); void change_security_login(); + void get_default_load(string cmd, std::map &map_temp); bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(string cmd, std::map &map_temp); void set_password_protec(string cmd, string cmd_remove); diff --git a/source/util.cc b/source/util.cc index ed9a3ce..8d8c496 100644 --- a/source/util.cc +++ b/source/util.cc @@ -1,5 +1,7 @@ #include "util.h" +namespace Utils { + array, 5> read_csv(const string& filename) { array, 5> array_vectors; vector vec_option; @@ -65,6 +67,7 @@ string call(string cmd) { } return path; } + vector find_all(string &str_ntp, string substr) { size_t index = 0; vector sub_index; @@ -181,4 +184,15 @@ string read_passwd(string username) { } in.close(); return passwd; +} + +int synopsis_show(string str_link) { + // gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/") + string cmd = "xdg-open " + str_link; + if (geteuid() == 0) { + string response_user = getlogin(); + cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; + } + return system(cmd.c_str()); +} } \ No newline at end of file diff --git a/source/util.h b/source/util.h index 54b56fd..9044b95 100644 --- a/source/util.h +++ b/source/util.h @@ -1,3 +1,5 @@ +#ifndef UTIL_H +#define UTIL_H #include #include #include @@ -8,13 +10,26 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include using namespace std; +namespace Utils { template - struct Result{ - Type response; - int error; +struct Result{ + Type response; + int error; }; struct Passwd { @@ -31,3 +46,6 @@ std::vector split(std::string text, char delim); unsigned short read_uid_min_max(string filename, string search); vector pars_users(); string read_passwd(string username); +int synopsis_show(string str_link); +} +#endif \ No newline at end of file diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index d6bcd4a..2066813 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -12,10 +12,10 @@ False True center - ubl-settings-datetime + ubl-settings-bootloader dialog True - ubl-settings-datetime + ubl-settings-bootloader 1.2 Copyright © 2023 - UBSoft Software LLC ubl-settings-bootloader @@ -387,7 +387,7 @@ specified priority 5 6 6 - Default download + Default load start 0
From 3534fda7dc7b174f4761cb7f2cf655ce0fb39365 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 6 Apr 2023 09:34:29 +0600 Subject: [PATCH 064/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D0=B8=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/load.cc | 33 +++++++++++++++++ source/load.h | 20 ++++++++++ source/my_process.cc | 72 ++++++++++++++++++++++++++++++++++++ source/my_process.h | 34 +++++++++++++++++ source/save.cc | 87 ++++++++++++++++++++++++++++++++++++++++++++ source/save.h | 27 ++++++++++++++ 6 files changed, 273 insertions(+) create mode 100644 source/load.cc create mode 100644 source/load.h create mode 100644 source/my_process.cc create mode 100644 source/my_process.h create mode 100644 source/save.cc create mode 100644 source/save.h diff --git a/source/load.cc b/source/load.cc new file mode 100644 index 0000000..558f211 --- /dev/null +++ b/source/load.cc @@ -0,0 +1,33 @@ +#include "load.h" + +namespace Lib_Load{ + void Load::set_sections(vector vec_sections){ + this->vec_sections = vec_sections; + } + map Load::get_load_data(string str_flag_load) { + string cmd = ""; + string response = ""; + string key = ""; + string value = ""; + map map_data; + for (const string §ion: this->vec_sections) { + cmd = "ubconfig --default --source " + str_flag_load + " get " + section; + response = process.call_all_sections(cmd); + vector vec_str_key_value = Utils::split(response, '\n'); + for (const string ¶m: vec_str_key_value) { + if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) { + if (param.find("=") != std::string::npos) { + size_t index = param.find("="); + key = param.substr(0, index); + value = param.substr(index + 1, param.length()); + map_data[key] = value; + cout << key << "=" << value << endl; + } + } + + } + } + return map_data; + } + +} \ No newline at end of file diff --git a/source/load.h b/source/load.h new file mode 100644 index 0000000..0a42947 --- /dev/null +++ b/source/load.h @@ -0,0 +1,20 @@ +#ifndef LOAD_H +#define LOAD_H + +#include "my_process.h" +namespace Lib_Load{ + class Load { + + private: + vector vec_sections; + My_Process::My_Process_call process = My_Process::My_Process_call(); + public: + Load(/* args */); + ~Load(); + void set_sections(vector vec_sections); + map get_load_data(string str_flag_load); + }; + + +} +#endif \ No newline at end of file diff --git a/source/my_process.cc b/source/my_process.cc new file mode 100644 index 0000000..79dad92 --- /dev/null +++ b/source/my_process.cc @@ -0,0 +1,72 @@ +#include "my_process.h" +#include "util.h" + +namespace My_Process{ +#define debug false +struct Utils::Result My_Process_call::call(string cmd) { + this->i_error_old = this->i_error; + struct Utils::Result obj_result; + string response = Utils::call(cmd); + obj_result.response = response; + if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) { + if (response.find("=") != std::string::npos) { + if (response.find("\n") != std::string::npos) { + response = response.substr(response.find("=")+1,response.length()); + response = response.substr(0,response.find("\n")); + obj_result.response = response; + obj_result.error = 0; + } + else { + obj_result.error = 1; + this->i_error += 1; + this->log_mess_error(cmd); + } + } + else { + obj_result.error = 2; + this->i_error += 1; + str_cmd_error = cmd; + this->log_mess_error(cmd); + } + } + else { + obj_result.error = 3; + this->i_error += 1; + str_cmd_error = cmd; + this->log_mess_error(cmd); + } + return obj_result; +} + +int My_Process::get_count_error() { + return this->i_error; +} + +void My_Process::set_back_count_error() { + this->i_error = this->i_error_old; +} + +void My_Process_system::call(string cmd, string thread_str = "") { + string cmd_new = cmd + " " + thread_str; + int response_cmd = system(cmd_new.c_str()); + if (response_cmd != 0) { + this->i_error += 1; + } +} + +void My_Process::set_count_error(int count_error) { + this->i_error = count_error; + this->str_cmd_error = ""; +} + +void My_Process::log_mess_error(string) { +} + +string My_Process::get_cmd_error() { + return this->str_cmd_error; +} +string My_Process_call::call_all_sections(string cmd) { + string response = Utils::call(cmd); + return response; +} +} \ No newline at end of file diff --git a/source/my_process.h b/source/my_process.h new file mode 100644 index 0000000..809afe5 --- /dev/null +++ b/source/my_process.h @@ -0,0 +1,34 @@ +#ifndef SAVE_H +#define SAVE_H + +#include "util.h" +namespace My_Process{ +class My_Process { + public: + int i_error = 0; + int i_error_old = 0; + string str_cmd_error = ""; + int get_count_error(); + void set_count_error(int count_error); + void set_back_count_error(); + void log_mess_error(string); + string get_cmd_error(); +}; + + +class My_Process_call: public My_Process { + public: + My_Process_call(); + struct Utils::Result call(string cmd); + string call_all_sections(string cmd); + +}; + +class My_Process_system: public My_Process { + public: + My_Process_system(); + void call(string cmd, string thread_str); + +}; +} +#endif \ No newline at end of file diff --git a/source/save.cc b/source/save.cc new file mode 100644 index 0000000..3c155db --- /dev/null +++ b/source/save.cc @@ -0,0 +1,87 @@ +#include "save.h" + +namespace Lib_save { + +vector Save::get_error() { + return this->vec_errors; +} + +bool Save::get_state_save() { + return this->flag_no_save; +} + +void Save::set_data_global(std::map &map_global) { + this->map_global = &map_global; +} + +void Save::set_data_local(std::map &map_local) { + this->map_local = &map_local; +} + +void Save::set_data_gui(std::map &map_gui) { + this->map_gui = &map_gui; +} + +bool Save::check_save(string flag_save, string key_name) { + std::map :: iterator iter_map_data; + std::map :: iterator iter_map_data_old; + std::map *map_data_old; + if (flag_save == "system") { + map_data_old = map_local; + } + else if (flag_save == "global") { + map_data_old = map_global; + } + iter_map_data = (*map_gui).find(key_name); + iter_map_data_old = (*map_data_old).find(key_name); + if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { + return true; + } + else if (iter_map_data->second != iter_map_data_old->second) { + return true; + } + else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { + return false; + } + else if (iter_map_data->second == iter_map_data_old->second) { + return false; + } + else { + return true; + } + return true; +} + +void Save::save(std::map &map_gui, string sections, string str_flag_save) { + string key = ""; + string value = ""; + string cmd = ""; + string str_error = ""; + this->flag_no_save = false; + for (const auto &map_iter: map_gui) { + key = map_iter.first; + value = map_iter.second; + if (this->check_save(str_flag_save, key) == true) { + if (value.length() != 0) { + cmd = "ubconfig --target " + str_flag_save + " set " + sections + " " + + key + "=\"" + value + "\""; + } + else if (value.length() == 0) { + cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key; + } + else { + cmd = ""; + } + if (cmd.length() != 0) { + process.call(cmd, ""); + this->flag_no_save = true; + str_error = process.get_cmd_error(); + if (str_error.length() != 0) { + this->vec_errors.push_back(str_error); + str_error = ""; + } + } + } + } +} +} diff --git a/source/save.h b/source/save.h new file mode 100644 index 0000000..8a9e90e --- /dev/null +++ b/source/save.h @@ -0,0 +1,27 @@ +#ifndef MY_PROCESS_H +#define MY_PROCESS_H + +#include "my_process.h" +namespace Lib_save { + +class Save { +private: + std::map *map_global; + std::map *map_local; + std::map *map_gui; + vector vec_errors; + My_Process::My_Process_system process = My_Process::My_Process_system(); + bool flag_no_save; +public: + Save(/* args */); + ~Save(); + void set_data_global(std::map &map_global); + void set_data_local(std::map &map_local); + void set_data_gui(std::map &map_gui); + bool check_save(string flag_save, string key_name); + bool get_state_save(); + void save(std::map &map_gui, string sections, string str_flag_save) ; + vector get_error(); +}; +} +#endif \ No newline at end of file From 428c65a1890959abfb538e4f9366e4f8ddca3bdb Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 6 Apr 2023 11:30:26 +0600 Subject: [PATCH 065/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 12 +- source/load.cc | 9 +- source/load.h | 4 +- source/my_process.cc | 18 +- source/my_process.h | 2 - source/save.h | 2 - source/ubl-settings-bootloader.cc | 449 +++++++++++++----------------- source/ubl-settings-bootloader.h | 22 +- 8 files changed, 234 insertions(+), 284 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 3886b8b..b698bb7 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -15,13 +15,19 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection") set(SOURCE_FILES + ubl-settings-bootloader.h + ubl-settings-bootloader.cc + save.h + save.cc + load.h + load.cc + my_process.h + my_process.cc util.h util.cc ubl-util-standard.h ubl-util-standard.c - main.cc - ubl-settings-bootloader.cc - ubl-settings-bootloader.h) + main.cc) set(LIBRARIES ${GTK_LIBRARIES} diff --git a/source/load.cc b/source/load.cc index 558f211..88cfbe9 100644 --- a/source/load.cc +++ b/source/load.cc @@ -4,15 +4,15 @@ namespace Lib_Load{ void Load::set_sections(vector vec_sections){ this->vec_sections = vec_sections; } - map Load::get_load_data(string str_flag_load) { + map& Load::get_load_data(std::map &map_temp, string str_flag_load) { string cmd = ""; string response = ""; string key = ""; string value = ""; - map map_data; for (const string §ion: this->vec_sections) { cmd = "ubconfig --default --source " + str_flag_load + " get " + section; response = process.call_all_sections(cmd); + cout << response << endl; vector vec_str_key_value = Utils::split(response, '\n'); for (const string ¶m: vec_str_key_value) { if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) { @@ -20,14 +20,13 @@ namespace Lib_Load{ size_t index = param.find("="); key = param.substr(0, index); value = param.substr(index + 1, param.length()); - map_data[key] = value; - cout << key << "=" << value << endl; + map_temp[key] = value; } } } } - return map_data; + return map_temp; } } \ No newline at end of file diff --git a/source/load.h b/source/load.h index 0a42947..0ec7cac 100644 --- a/source/load.h +++ b/source/load.h @@ -9,10 +9,8 @@ namespace Lib_Load{ vector vec_sections; My_Process::My_Process_call process = My_Process::My_Process_call(); public: - Load(/* args */); - ~Load(); void set_sections(vector vec_sections); - map get_load_data(string str_flag_load); + map& get_load_data(std::map &map_temp, string str_flag_load); }; diff --git a/source/my_process.cc b/source/my_process.cc index 79dad92..8845d86 100644 --- a/source/my_process.cc +++ b/source/my_process.cc @@ -1,7 +1,7 @@ #include "my_process.h" #include "util.h" -namespace My_Process{ +namespace My_Process { #define debug false struct Utils::Result My_Process_call::call(string cmd) { this->i_error_old = this->i_error; @@ -66,7 +66,19 @@ string My_Process::get_cmd_error() { return this->str_cmd_error; } string My_Process_call::call_all_sections(string cmd) { - string response = Utils::call(cmd); - return response; + char buffer[PATH_MAX]; + std::string result = ""; + FILE* pipe = popen(cmd.c_str(), "r"); + if (!pipe) throw std::runtime_error("popen() failed!"); + try { + while (fgets(buffer, sizeof buffer, pipe) != NULL) { + result += buffer; + } + } catch (...) { + pclose(pipe); + throw; + } + pclose(pipe); + return result; } } \ No newline at end of file diff --git a/source/my_process.h b/source/my_process.h index 809afe5..f780860 100644 --- a/source/my_process.h +++ b/source/my_process.h @@ -18,7 +18,6 @@ class My_Process { class My_Process_call: public My_Process { public: - My_Process_call(); struct Utils::Result call(string cmd); string call_all_sections(string cmd); @@ -26,7 +25,6 @@ class My_Process_call: public My_Process { class My_Process_system: public My_Process { public: - My_Process_system(); void call(string cmd, string thread_str); }; diff --git a/source/save.h b/source/save.h index 8a9e90e..ff32a29 100644 --- a/source/save.h +++ b/source/save.h @@ -13,8 +13,6 @@ private: My_Process::My_Process_system process = My_Process::My_Process_system(); bool flag_no_save; public: - Save(/* args */); - ~Save(); void set_data_global(std::map &map_global); void set_data_local(std::map &map_local); void set_data_gui(std::map &map_gui); diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 241e9ca..4a84409 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -165,42 +165,35 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: } } -void MainWindow::get_download_mode(string cmd, std::map &map_temp) { - int start_error = index_error; - struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { - Utils::str_replace_all(res_response.response, "\"",""); - if (res_response.response == "splash") { - cmbDownloadMode->set_active(0); - map_temp["GRUB_BOOT_SILENT"] = "splash"; - } - else if (res_response.response == "splash quiet ub.silent") { - cmbDownloadMode->set_active(1); - map_temp["GRUB_BOOT_SILENT"] = "splash quiet ub.silent"; - } - else if (res_response.response == "quiet ub.silent") { - cmbDownloadMode->set_active(2); - map_temp["GRUB_BOOT_SILENT"] = "quiet ub.silent"; - } - else if (res_response.response == "plymouth.enable=0") { - cmbDownloadMode->set_active(3); - map_temp["GRUB_BOOT_SILENT"] = "plymouth.enable=0"; +void MainWindow::get_download_mode(std::map &map_temp) { + std::map :: iterator iter_map_data; + iter_map_data = map_temp.find("GRUB_BOOT_SILENT"); + if (iter_map_data != map_temp.end()) { + string value = iter_map_data->second; + if (value.length() != 0) { + Utils::str_replace_all(value, "\"",""); + if (value == "splash") { + cmbDownloadMode->set_active(0); + } + else if (value == "splash quiet ub.silent") { + cmbDownloadMode->set_active(1); + } + else if (value == "quiet ub.silent") { + cmbDownloadMode->set_active(2); + } + else if (value == "plymouth.enable=0") { + cmbDownloadMode->set_active(3); + } + else{ + cmbDownloadMode->set_active(-1); + } } - else{ + else { cmbDownloadMode->set_active(-1); - map_temp["GRUB_BOOT_SILENT"] = ""; - } - } - else if (res_response.error == 3) { - cmbDownloadMode->set_active(-1); - map_temp["GRUB_BOOT_SILENT"] = ""; - if (start_error != index_error) { - index_error = start_error; } } else { cmbDownloadMode->set_active(-1); - map_temp["GRUB_BOOT_SILENT"] = ""; } } @@ -224,7 +217,7 @@ void MainWindow::set_download_mode(string cmd="") { } if (cmd.length() !=0 ) { cmd += "\"" + key + "\""; - wrapper_system(cmd, ""); + obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -240,7 +233,7 @@ void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { if (index == 0) { key = ""; if (cmd_remove.length() != 0) { - wrapper_system(cmd_remove, ""); + obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -253,7 +246,7 @@ void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { if (cmd.length() != 0) { entrySecurityLogin->set_text(key); cmd = cmd + "\"" + key + "\""; - wrapper_system(cmd, ""); + obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -267,40 +260,29 @@ void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { map_cmd_selection["GRUB_USER"] = key; } -void MainWindow::get_security_login(string cmd, std::map &map_temp) { - int start_error = index_error; - struct Result res_response = this->wrapper_call(cmd); - // TODO: - // Убрать в будущем - string default_login = "superadmin"; - if (res_response.error == 0) { - Utils::str_replace_all(res_response.response, " ",""); - Utils::str_replace_all(res_response.response, "\"",""); - if (res_response.response.length() > 0) { - chbSecurityLogin->set_active(1); - map_temp["GRUB_USER"] = res_response.response; - entrySecurityLogin->set_sensitive(true); - entrySecurityLogin->set_text(res_response.response); +void MainWindow::get_security_login(std::map &map_temp) { + std::map :: iterator iter_map_data; + iter_map_data = map_temp.find("GRUB_USER"); + if (iter_map_data != map_temp.end()) { + string value = iter_map_data->second; + if (value.length() != 0) { + Utils::str_replace_all(value, " ",""); + Utils::str_replace_all(value, "\"",""); + chbSecurityLogin->set_active(1); + entrySecurityLogin->set_sensitive(true); + entrySecurityLogin->set_text(value); } else { - chbSecurityLogin->set_active(-1); - map_temp["GRUB_USER"] = ""; - + chbSecurityLogin->set_active(0); + entrySecurityLogin->set_text(""); + entrySecurityLogin->set_sensitive(false); } } - else if (res_response.error == 3) { - map_temp["GRUB_USER"] = ""; - if (start_error != index_error) { - index_error = start_error; - } + else { chbSecurityLogin->set_active(0); entrySecurityLogin->set_text(""); entrySecurityLogin->set_sensitive(false); } - else { - chbSecurityLogin->set_active(-1); - map_temp["GRUB_USER"] = ""; - } } void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { @@ -309,7 +291,7 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { if (index == 0){ key = ""; if (cmd_remove.length() != 0) { - wrapper_system(cmd_remove, ""); + obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -322,7 +304,7 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { if (cmd.length() != 0 and key != "************") { entryPasswordProtecc->set_text(key); cmd = cmd + "\"" + key + "\""; - wrapper_system(cmd, ""); + obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -339,32 +321,23 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { } -void MainWindow::get_password_protec(string cmd, std::map &map_temp) { - int start_error = index_error; - struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { - Utils::str_replace_all(res_response.response, "\"",""); - if (res_response.response.length() != 0) { +void MainWindow::get_password_protec(std::map &map_temp) { + std::map :: iterator iter_map_data; + iter_map_data = map_temp.find("GRUB_PASSWORD"); + if (iter_map_data != map_temp.end()) { + string value = iter_map_data->second; + if (value.length() != 0) { + Utils::str_replace_all(value, "\"",""); chbPasswordProtecc->set_active(1); - map_temp["GRUB_PASSWORD"] = res_response.response; entryPasswordProtecc->set_text("************"); entryPasswordProtecc->set_sensitive(true); } else{ - map_temp["GRUB_PASSWORD"] = ""; - chbPasswordProtecc->set_active(-1); - } - } - else if (res_response.error == 3) { - chbPasswordProtecc->set_active(0); - map_temp["GRUB_PASSWORD"] = ""; - entryPasswordProtecc->set_text(""); - if (start_error != index_error) { - index_error = start_error; + chbPasswordProtecc->set_active(0); + entryPasswordProtecc->set_text(""); } } else { - map_temp["GRUB_PASSWORD"] = ""; chbPasswordProtecc->set_active(-1); } } @@ -535,30 +508,33 @@ void MainWindow::localization(){ cmbDefaultDonw->append(_("Last Successful Download")); } -vector MainWindow::get_setting_entry_all(string key, string cmd, Gtk::Entry &entry_text, std::map &map_temp) { - int start_error = index_error; +vector MainWindow::get_setting_entry_all(string key, Gtk::Entry &entry_text, std::map &map_temp) { vector vec_params; - struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { - Utils::str_replace_all(res_response.response, "\"", ""); - vec_params = Utils::split(res_response.response, ' '); - Utils::str_replace_all(res_response.response, " ", ", "); - entry_text.set_text(res_response.response); - for (auto ¶m: vec_params) { - map_cmd_selection[param] = "1"; - map_temp[param] = "1"; + std::map :: iterator iter_map_data; + iter_map_data = map_temp.find(key); + if (iter_map_data != map_temp.end()) { + string value = iter_map_data->second; + if (value.length() != 0) { + Utils::str_replace_all(value, "\"", ""); + vec_params = Utils::split(value, ' '); + Utils::str_replace_all(value, " ", ", "); + entry_text.set_text(value); + for (auto ¶m: vec_params) { + map_cmd_selection[param] = "1"; + map_temp[param] = "1"; + } + Utils::str_remove(value, ","); + map_temp[key] = value; } - Utils::str_remove(res_response.response, ","); - map_temp[key] = res_response.response; - } - else if (res_response.error == 3) { - if (start_error != index_error) { - index_error = start_error; + else { + entry_text.set_text(""); } + } else { - + entry_text.set_text(""); } + return vec_params; } @@ -619,30 +595,28 @@ void MainWindow::set_entry_to_tree_view(Glib::RefPtr &list_store } flag_blocked_tree_view = false; } -void MainWindow::get_menu_boot(string cmd, std::map &map_temp) { - int start_error = index_error; - struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { - map_temp["GRUB_TIMEOUT"] = res_response.response; - spbSecond->set_value(atoi(res_response.response.c_str())); - chbLoadVariantSelectionTimer->set_active(true); - spbSecond->set_sensitive(true); - lblInfoSeconds->set_sensitive(true); - - } - else if (res_response.error == 3) { - if (start_error != index_error) { - index_error = start_error; + +void MainWindow::get_menu_boot(std::map &map_temp) { + std::map :: iterator iter_map_data; + iter_map_data = map_temp.find("GRUB_TIMEOUT"); + if (iter_map_data != map_temp.end()) { + if (iter_map_data->second.length() > 0) { + spbSecond->set_value(atoi(iter_map_data->second.c_str())); + chbLoadVariantSelectionTimer->set_active(true); + spbSecond->set_sensitive(true); + lblInfoSeconds->set_sensitive(true); + } + else { + chbLoadVariantSelectionTimer->set_active(false); + spbSecond->set_sensitive(false); + lblInfoSeconds->set_sensitive(true); } - map_temp["GRUB_TIMEOUT"] = ""; + } + else { chbLoadVariantSelectionTimer->set_active(false); spbSecond->set_sensitive(false); lblInfoSeconds->set_sensitive(true); } - else { - map_temp["GRUB_TIMEOUT"] = ""; - } - } void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { @@ -650,7 +624,7 @@ void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { int value = spbSecond->get_value(); if (cmd.length() != 0) { cmd += to_string(value); - this->wrapper_system(cmd, ""); + obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -661,7 +635,7 @@ void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { } else if (chbLoadVariantSelectionTimer->get_active() == false) { if (cmd_remove.length() != 0) { - this->wrapper_system(cmd_remove, ""); + obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -684,10 +658,10 @@ void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cm if (cmds.length() != 0) { cmd_settings += "\"" + cmds + "\""; Utils::str_replace_all(cmd_settings, " \"", "\""); - this->wrapper_system(cmd_settings, ""); + obj_process_system.call(cmd_settings, ""); } else { - this->wrapper_system(cmd_remove, ""); + obj_process_system.call(cmd_remove, ""); } } @@ -747,7 +721,7 @@ void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { int index = cmbDefaultDonw->get_active_row_number(); if (index == 0) { if (cmd.length() != 0) { - wrapper_system(cmd, ""); + obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -757,7 +731,7 @@ void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { } else if (index > 0) { if (cmd_remove.length() != 0) { - wrapper_system(cmd_remove, ""); + obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -773,23 +747,20 @@ void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { } } -void MainWindow::get_default_load(string cmd, std::map &map_temp) { - int start_error = index_error; - struct Result res_response = this->wrapper_call(cmd); - if (res_response.error == 0) { - map_temp["GRUB_DEFAULT"] = res_response.response; - cmbDefaultDonw->set_active_text(res_response.response); - } - else if (res_response.error == 3) { - if (start_error != index_error) { - index_error = start_error; +void MainWindow::get_default_load(std::map &map_temp) { + std::map :: iterator iter_map_data; + iter_map_data = map_temp.find("GRUB_DEFAULT"); + if (iter_map_data != map_temp.end()) { + string value = iter_map_data->second; + if (value.length() != 0) { + cmbDefaultDonw->set_active_text(value); + } + else { cmbDefaultDonw->set_active(0); } - map_temp["GRUB_DEFAULT"] = ""; - } else { - map_temp["GRUB_DEFAULT"] = ""; + cmbDefaultDonw->set_active(-1); } } @@ -897,6 +868,45 @@ bool MainWindow::save_global_cfg() { return flag_no_save; } +bool MainWindow::check_save(string flag_save, string key_name="") { + std::map :: iterator iter_map_data; + std::map :: iterator iter_map_data_old; + std::map map_config_data_old; + if (flag_save == "local") { + map_config_data_old = map_local_cmd_selection; + } + else if (flag_save == "global") { + map_config_data_old = map_global_cmd_selection; + } + iter_map_data = map_cmd_selection.find(key_name); + iter_map_data_old = map_config_data_old.find(key_name); + + if (iter_map_data_old == map_config_data_old.end() && iter_map_data != map_cmd_selection.end()) { + cout << 2 << endl; + return true; + } + else if (iter_map_data->second != iter_map_data_old->second) { + cout << iter_map_data->second << " ||| " << iter_map_data_old->second << endl; + cout << 3 << endl; + return true; + } + else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { + cout << 4 << " " << key_name << endl; + return false; + } + else if (iter_map_data->second == iter_map_data_old->second) { + cout << 5 << " " << key_name << endl; + return false; + } + else { + cout << 6 << endl; + return true; + } + cout << 7 << endl; + return true; + +} + void MainWindow::wrapper_save_local_cfg() { if (this->save_local_cfg()){ this->info_warning_error(5); @@ -982,6 +992,7 @@ void MainWindow::set_data_cfg() { } void MainWindow::download_globl_cfg() { + this->init_dict(); entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); @@ -989,26 +1000,42 @@ void MainWindow::download_globl_cfg() { flag_save_global = true; flag_save_all = true; flag_load = true; - std::string cmd_boot_time = "ubconfig --default --source global get boot GRUB_TIMEOUT"; - this->get_menu_boot(cmd_boot_time, map_global_cmd_selection); - string cmd_kernel_entry = "ubconfig --default --source global get boot GRUB_CMDLINE_LINUX"; - this->get_setting_entry_all("GRUB_CMDLINE_LINUX",cmd_kernel_entry, *entryKernel, map_global_cmd_selection); - string cmd_ipt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_INPUT"; - this->get_setting_entry_all("GRUB_TERMINAL_INPUT",cmd_ipt_entry, *entryIPT, map_global_cmd_selection); - string cmd_opt_entry = "ubconfig --default --source global get boot GRUB_TERMINAL_OUTPUT"; - this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", cmd_opt_entry, *entryOTT, map_global_cmd_selection); + + vector vec_sections; + vec_sections.push_back("boot"); + obj_load.set_sections(vec_sections); + map_local_cmd_selection = obj_load.get_load_data(map_global_cmd_selection, "global"); + this->get_menu_boot(map_global_cmd_selection); + + this->get_setting_entry_all("GRUB_CMDLINE_LINUX",*entryKernel, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT",*entryIPT, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, map_global_cmd_selection); this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); - this->get_download_mode("ubconfig --default --source global get boot GRUB_BOOT_SILENT", map_global_cmd_selection); - this->get_security_login("ubconfig --default --source global get boot GRUB_USER", map_global_cmd_selection); - this->get_password_protec("ubconfig --default --source global get boot GRUB_PASSWORD", map_global_cmd_selection); - this->get_default_load("ubconfig --default --source global get boot GRUB_DEFAULT", map_global_cmd_selection); + this->get_download_mode(map_global_cmd_selection); + this->get_security_login(map_global_cmd_selection); + this->get_password_protec(map_global_cmd_selection); + this->get_default_load(map_global_cmd_selection); info_warning_error(1); map_cmd_selection = map_global_cmd_selection; } +void MainWindow::init_dict() { + map_cmd_selection["GRUB_TIMEOUT"] = ""; + map_cmd_selection["GRUB_CMDLINE_LINUX"] = ""; + map_cmd_selection["GRUB_TERMINAL_INPUT"] = ""; + map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = ""; + map_cmd_selection["GRUB_BOOT_SILENT"] = ""; + map_cmd_selection["GRUB_USER"] = ""; + map_cmd_selection["GRUB_PASSWORD"] = ""; + map_cmd_selection["GRUB_DEFAULT"] = ""; + map_global_cmd_selection = map_cmd_selection; + map_local_cmd_selection = map_cmd_selection; +} + + void MainWindow::download_local_cfg() { entryKernel->set_text(""); entryOTT->set_text(""); @@ -1017,63 +1044,28 @@ void MainWindow::download_local_cfg() { flag_save_global = true; flag_save_all = true; flag_load = false; - std::string cmd_boot_time = "ubconfig --default --source system get boot GRUB_TIMEOUT"; - this->get_menu_boot(cmd_boot_time, map_local_cmd_selection); - string cmd_kernel_entry = "ubconfig --default --source system get boot GRUB_CMDLINE_LINUX"; - this->get_setting_entry_all("GRUB_CMDLINE_LINUX", cmd_kernel_entry, *entryKernel, map_local_cmd_selection); - string cmd_ipt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_INPUT"; - this->get_setting_entry_all("GRUB_TERMINAL_INPUT", cmd_ipt_entry, *entryIPT, map_local_cmd_selection); - string cmd_opt_entry = "ubconfig --default --source system get boot GRUB_TERMINAL_OUTPUT"; - this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", cmd_opt_entry, *entryOTT, map_local_cmd_selection); + this->init_dict(); + + vector vec_sections; + vec_sections.push_back("boot"); + obj_load.set_sections(vec_sections); + map_local_cmd_selection = obj_load.get_load_data(map_local_cmd_selection, "system"); + + this->get_menu_boot(map_local_cmd_selection); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, map_local_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, map_local_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, map_local_cmd_selection); this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); - this->get_download_mode("ubconfig --default --source system get boot GRUB_BOOT_SILENT", map_local_cmd_selection); - this->get_security_login("ubconfig --default --source system get boot GRUB_USER", map_local_cmd_selection); - this->get_password_protec("ubconfig --default --source system get boot GRUB_PASSWORD", map_local_cmd_selection); - this->get_default_load("ubconfig --default --source system get boot GRUB_DEFAULT", map_local_cmd_selection); + this->get_download_mode(map_local_cmd_selection); + this->get_security_login(map_local_cmd_selection); + this->get_password_protec(map_local_cmd_selection); + this->get_default_load(map_local_cmd_selection); info_warning_error(0); map_cmd_selection = map_local_cmd_selection; } -bool MainWindow::check_save(string flag_save, string key_name="") { - std::map :: iterator iter_map_data; - std::map :: iterator iter_map_data_old; - std::map map_config_data_old; - if (flag_save == "local") { - map_config_data_old = map_local_cmd_selection; - } - else if (flag_save == "global") { - map_config_data_old = map_global_cmd_selection; - } - iter_map_data = map_cmd_selection.find(key_name); - iter_map_data_old = map_config_data_old.find(key_name); - - if (iter_map_data_old == map_config_data_old.end() && iter_map_data != map_cmd_selection.end()) { - cout << 2 << endl; - return true; - } - else if (iter_map_data->second != iter_map_data_old->second) { - cout << iter_map_data->second << " ||| " << iter_map_data_old->second << endl; - cout << 3 << endl; - return true; - } - else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { - cout << 4 << " " << key_name << endl; - return false; - } - else if (iter_map_data->second == iter_map_data_old->second) { - cout << 5 << " " << key_name << endl; - return false; - } - else { - cout << 6 << endl; - return true; - } - cout << 7 << endl; - return true; - -} void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size) { for (auto &name: list_params) { @@ -1103,17 +1095,9 @@ void MainWindow::synopsis_show() { string response_user = getlogin(); cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; } - wrapper_system(cmd, "&"); + obj_process_system.call(cmd, "&"); } -void MainWindow::wrapper_system(string cmd, string thread_str = "") { - string cmd_new = cmd + " " + thread_str; - int response_cmd = system(cmd_new.c_str()); - if (response_cmd != 0) { - index_error += 1; - this->log_mess_error(cmd); - } -} void MainWindow::info_status_app(string stule) { boxInfo->remove_class("boxInfoMessOK"); @@ -1173,59 +1157,6 @@ void MainWindow::info_warning_error(int mess) { } } -struct MainWindow::Result MainWindow::wrapper_call(string cmd) { - struct Result obj_result; - string response = Utils::call(cmd); - if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) { - if (response.find("=") != std::string::npos) { - if (response.find("\n") != std::string::npos) { - response = response.substr(response.find("=")+1,response.length()); - response = response.substr(0,response.find("\n")); - obj_result.response = response; - obj_result.error = 0; - - } - else { - obj_result.response = response; - obj_result.error = 1; - index_error += 1; - this->log_mess_error(cmd); - } - } - else { - obj_result.response = response; - obj_result.error = 2; - index_error += 1; - str_cmd_error = cmd; - this->log_mess_error(cmd); - } - } - else { - obj_result.response = response; - obj_result.error = 3; - index_error += 1; - str_cmd_error = cmd; - this->log_mess_error(cmd); - } - return obj_result; -} - -void MainWindow::log_mess_error(string &cmd) { - string key = ""; - if (map_cmd_error.find(cmd) != map_cmd_error.end()){ - str_cmd_error = map_cmd_error[cmd]; - } - else { - for (const auto &map_iter: map_cmd_error) { - key = map_iter.first; - if (cmd.find(key) != std::string::npos){ - str_cmd_error = map_iter.second; - break; - } - } - } -} - void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 63466d1..f7b7f89 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -14,6 +14,9 @@ #include #include "ubl-util-standard.c" #include "util.h" +#include "save.h" +#include "load.h" +#include "my_process.h" using namespace std; extern string path_app; @@ -114,6 +117,10 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblSecurityLogin; Gtk::Label *lblPasswordProtec; + Lib_save::Save obj_save = Lib_save::Save(); + Lib_Load::Load obj_load = Lib_Load::Load(); + My_Process::My_Process_system obj_process_system = My_Process::My_Process_system(); + My_Process::My_Process_call obj_process_call = My_Process::My_Process_call(); bool flag_load = false; bool flag_save_all = false; bool flag_save_global = false; @@ -132,15 +139,16 @@ class MainWindow : public Gtk::ApplicationWindow { int error; }; std::map map_cmd_error; - + MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); - void get_menu_boot(string cmd, std::map &map_temp); + void get_menu_boot(std::map &map_temp); void set_menu_boot(string cmd, string cmd_remove); void set_default_load(string cmd, string cmd_remove); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); + void init_dict(); void add_CSS(); void show_pass(); void localization(); @@ -151,7 +159,7 @@ class MainWindow : public Gtk::ApplicationWindow { void synopsis_show(); void set_data_cfg(); void set_active_boot_second(); - void get_download_mode(string cmd, std::map &map_temp); + void get_download_mode(std::map &map_temp); void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view, size_t index); void wrapper_system(string cmd, string thread_str); struct Result wrapper_call(string cmd); @@ -174,17 +182,17 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); void set_security_login(string cmd, string cmd_remove); - void get_security_login(string cmd, std::map &map_temp); + void get_security_login(std::map &map_temp); bool check_flag_save(string flag_save); void set_download_mode(string cmd); void change_password_protecc(); bool focus_out_txt_login(GdkEventFocus*); void change_security_login(); - void get_default_load(string cmd, std::map &map_temp); + void get_default_load(std::map &map_temp); bool focus_out_txt_password(GdkEventFocus*); - void get_password_protec(string cmd, std::map &map_temp); + void get_password_protec(std::map &map_temp); void set_password_protec(string cmd, string cmd_remove); - vector get_setting_entry_all(string key, string cmd, Gtk::Entry &entry_text, std::map &map_temp); + vector get_setting_entry_all(string key, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); From daf43d2e8b90d302e318872639fddf34eb62e79a Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 6 Apr 2023 14:14:37 +0600 Subject: [PATCH 066/110] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/load.cc | 3 +- source/save.cc | 54 ++++--- source/save.h | 4 +- source/ubl-settings-bootloader.cc | 237 ++++++------------------------ source/ubl-settings-bootloader.h | 2 +- 5 files changed, 85 insertions(+), 215 deletions(-) diff --git a/source/load.cc b/source/load.cc index 88cfbe9..87f438a 100644 --- a/source/load.cc +++ b/source/load.cc @@ -12,7 +12,6 @@ namespace Lib_Load{ for (const string §ion: this->vec_sections) { cmd = "ubconfig --default --source " + str_flag_load + " get " + section; response = process.call_all_sections(cmd); - cout << response << endl; vector vec_str_key_value = Utils::split(response, '\n'); for (const string ¶m: vec_str_key_value) { if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) { @@ -20,6 +19,8 @@ namespace Lib_Load{ size_t index = param.find("="); key = param.substr(0, index); value = param.substr(index + 1, param.length()); + Utils::str_replace_all(value, " \"",""); + Utils::str_replace_all(value, "\"",""); map_temp[key] = value; } } diff --git a/source/save.cc b/source/save.cc index 3c155db..55343ae 100644 --- a/source/save.cc +++ b/source/save.cc @@ -34,6 +34,7 @@ bool Save::check_save(string flag_save, string key_name) { } iter_map_data = (*map_gui).find(key_name); iter_map_data_old = (*map_data_old).find(key_name); + cout << iter_map_data->second << " ||| " << iter_map_data_old->second << endl; if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { return true; } @@ -52,36 +53,43 @@ bool Save::check_save(string flag_save, string key_name) { return true; } -void Save::save(std::map &map_gui, string sections, string str_flag_save) { +void Save::set_vec_params(vector& vec_param_names) { + this->vec_param_names = &vec_param_names; +} + +void Save::save(string sections, string str_flag_save) { string key = ""; string value = ""; string cmd = ""; string str_error = ""; - this->flag_no_save = false; - for (const auto &map_iter: map_gui) { - key = map_iter.first; - value = map_iter.second; - if (this->check_save(str_flag_save, key) == true) { - if (value.length() != 0) { - cmd = "ubconfig --target " + str_flag_save + " set " + sections + " " + - key + "=\"" + value + "\""; - } - else if (value.length() == 0) { - cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key; - } - else { - cmd = ""; - } - if (cmd.length() != 0) { - process.call(cmd, ""); - this->flag_no_save = true; - str_error = process.get_cmd_error(); - if (str_error.length() != 0) { - this->vec_errors.push_back(str_error); - str_error = ""; + this->flag_no_save = true; + for (const auto &key: *vec_param_names) { + if (map_gui->find(key) != map_gui->end()) { + value = (*map_gui)[key]; + if (this->check_save(str_flag_save, key)) { + if (value.length() != 0) { + cmd = "ubconfig --target " + str_flag_save + " set " + sections + " " + + key + "=\"" + value + "\""; + } + else if (value.length() == 0) { + cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key; + } + else { + cmd = ""; + } + cout << cmd << endl; + if (cmd.length() != 0) { + process.call(cmd, ""); + this->flag_no_save = false; + str_error = process.get_cmd_error(); + if (str_error.length() != 0) { + this->vec_errors.push_back(str_error); + str_error = ""; + } } } } + } } } diff --git a/source/save.h b/source/save.h index ff32a29..e26f4ca 100644 --- a/source/save.h +++ b/source/save.h @@ -10,6 +10,7 @@ private: std::map *map_local; std::map *map_gui; vector vec_errors; + vector* vec_param_names; My_Process::My_Process_system process = My_Process::My_Process_system(); bool flag_no_save; public: @@ -18,7 +19,8 @@ public: void set_data_gui(std::map &map_gui); bool check_save(string flag_save, string key_name); bool get_state_save(); - void save(std::map &map_gui, string sections, string str_flag_save) ; + void set_vec_params(vector& vec_param_names); + void save(string sections, string str_flag_save) ; vector get_error(); }; } diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 4a84409..7000711 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -69,6 +69,14 @@ MainWindow::MainWindow(Glib::RefPtr const& builder) { void MainWindow::settings(){ map_cmd_error[""] = ""; + vec_param_names.push_back("GRUB_TIMEOUT"); + vec_param_names.push_back("GRUB_CMDLINE_LINUX"); + vec_param_names.push_back("GRUB_TERMINAL_INPUT"); + vec_param_names.push_back("GRUB_TERMINAL_OUTPUT"); + vec_param_names.push_back("GRUB_BOOT_SILENT"); + vec_param_names.push_back("GRUB_USER"); + vec_param_names.push_back("GRUB_PASSWORD"); + vec_param_names.push_back("GRUB_DEFAULT"); this->get_builder(); this->localization(); this->add_CSS(); @@ -216,8 +224,6 @@ void MainWindow::set_download_mode(string cmd="") { return; } if (cmd.length() !=0 ) { - cmd += "\"" + key + "\""; - obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -233,7 +239,6 @@ void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { if (index == 0) { key = ""; if (cmd_remove.length() != 0) { - obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -245,8 +250,6 @@ void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { key = entrySecurityLogin->get_text(); if (cmd.length() != 0) { entrySecurityLogin->set_text(key); - cmd = cmd + "\"" + key + "\""; - obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -291,7 +294,6 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { if (index == 0){ key = ""; if (cmd_remove.length() != 0) { - obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -303,8 +305,6 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { key = entryPasswordProtecc->get_text(); if (cmd.length() != 0 and key != "************") { entryPasswordProtecc->set_text(key); - cmd = cmd + "\"" + key + "\""; - obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -318,7 +318,6 @@ void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { if (key!= "************") { map_cmd_selection["GRUB_PASSWORD"] = key; } - } void MainWindow::get_password_protec(std::map &map_temp) { @@ -607,51 +606,20 @@ void MainWindow::get_menu_boot(std::map &map_temp) { lblInfoSeconds->set_sensitive(true); } else { + spbSecond->set_value(1); chbLoadVariantSelectionTimer->set_active(false); spbSecond->set_sensitive(false); lblInfoSeconds->set_sensitive(true); } } else { + spbSecond->set_value(1); chbLoadVariantSelectionTimer->set_active(false); spbSecond->set_sensitive(false); lblInfoSeconds->set_sensitive(true); } } -void MainWindow::set_menu_boot(string cmd = "", string cmd_remove = "") { - if (chbLoadVariantSelectionTimer->get_active()) { - int value = spbSecond->get_value(); - if (cmd.length() != 0) { - cmd += to_string(value); - obj_process_system.call(cmd, ""); - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } - map_cmd_selection["GRUB_TIMEOUT"] = to_string(value); - } - else if (chbLoadVariantSelectionTimer->get_active() == false) { - if (cmd_remove.length() != 0) { - obj_process_system.call(cmd_remove, ""); - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } - map_cmd_selection["GRUB_TIMEOUT"] = ""; - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - map_cmd_selection["GRUB_TIMEOUT"] = ""; - } -} - void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove) { string cmds = entry.get_text(); Utils::str_remove(cmds, ","); @@ -679,12 +647,8 @@ void MainWindow::event(){ entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); entrySecurityLogin->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_login)); entryPasswordProtecc->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_password)); - chbPasswordProtecc->signal_changed().connect([&]() {change_password_protecc();set_password_protec();}); + chbPasswordProtecc->signal_changed().connect([&]() {change_password_protecc();}); chbSecurityLogin->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_security_login)); - cmbDownloadMode->signal_changed().connect([&]() {set_download_mode();}); - chbSecurityLogin->signal_changed().connect([&]() {set_security_login();}); - cmbDefaultDonw->signal_changed().connect([&]() {set_default_load("","");}); - spbSecond->signal_changed().connect([&]() {set_menu_boot();}); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); @@ -721,7 +685,6 @@ void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { int index = cmbDefaultDonw->get_active_row_number(); if (index == 0) { if (cmd.length() != 0) { - obj_process_system.call(cmd, ""); } else { flag_save_local = true; @@ -731,7 +694,6 @@ void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { } else if (index > 0) { if (cmd_remove.length() != 0) { - obj_process_system.call(cmd_remove, ""); } else { flag_save_local = true; @@ -784,7 +746,14 @@ void MainWindow::change_password_protecc() { void MainWindow::set_active_boot_second() { spbSecond->set_sensitive(chbLoadVariantSelectionTimer->get_active()); lblInfoSeconds->set_sensitive(chbLoadVariantSelectionTimer->get_active()); - this->set_menu_boot(); + if (chbLoadVariantSelectionTimer->get_active()) { + int second = spbSecond->get_value(); + map_cmd_selection["GRUB_TIMEOUT"] = to_string(second); + } + else { + spbSecond->set_value(1); + map_cmd_selection["GRUB_TIMEOUT"] = ""; + } } void MainWindow::wrapper_save_all_cfg() { @@ -801,6 +770,7 @@ void MainWindow::wrapper_save_all_cfg() { } void MainWindow::wrapper_save_global_cfg() { + this->set_data_cfg(); if (this->save_global_cfg()) { this->info_warning_error(5); } @@ -810,104 +780,25 @@ void MainWindow::wrapper_save_global_cfg() { } bool MainWindow::save_global_cfg() { - string flag_save = "global"; bool flag_no_save = true; if (flag_save_global) { if (flag_save_all) { flag_save_global = false; - this->set_data_cfg(); - if (this->check_save(flag_save, "GRUB_TIMEOUT")) { - std::string cmd_boot_time = "ubconfig --target global set boot GRUB_TIMEOUT="; - string cmd_remove = "ubconfig --target global remove boot GRUB_TIMEOUT"; - this->set_menu_boot(cmd_boot_time, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { - string cmd_settings_kernel = "ubconfig --target global set boot GRUB_CMDLINE_LINUX="; - string cmd_remove = "ubconfig --target global remove boot GRUB_CMDLINE_LINUX"; - this->cmd_entry_all(*entryKernel, cmd_settings_kernel, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_TERMINAL_OUTPUT")) { - string cmd_settings_IPT = "ubconfig --target global set boot GRUB_TERMINAL_OUTPUT="; - string cmd_remove = "ubconfig --target global remove boot GRUB_TERMINAL_OUTPUT"; - this->cmd_entry_all(*entryIPT, cmd_settings_IPT,cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_TERMINAL_INPUT")) { - string cmd_settings_OTT = "ubconfig --target global set boot GRUB_TERMINAL_INPUT="; - string cmd_remove = "ubconfig --target global remove boot GRUB_TERMINAL_INPUT"; - this->cmd_entry_all(*entryOTT, cmd_settings_OTT, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_BOOT_SILENT")) { - this->set_download_mode("ubconfig --target global set boot GRUB_BOOT_SILENT="); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_USER")) { - string cmd_login = "ubconfig --target global set boot GRUB_USER="; - string cmd_remove_login = "ubconfig --target system remove boot GRUB_USER"; - this->set_security_login(cmd_login, cmd_remove_login); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_PASSWORD")) { - string cmd_password = "ubconfig --target global set boot GRUB_PASSWORD="; - string cmd_password_remove = "ubconfig --target global remove boot GRUB_PASSWORD"; - this->set_password_protec(cmd_password, cmd_password_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_DEFAULT")) { - string cmd_load = "ubconfig --target global set boot GRUB_DEFAULT="; - string cmd_load_remove = "ubconfig --target global remove boot GRUB_DEFAULT"; - this->set_default_load(cmd_load, cmd_load_remove); - flag_no_save = false; - } + obj_save.set_data_local(map_cmd_selection); + obj_save.set_data_global(map_local_cmd_selection); + obj_save.set_data_gui(map_cmd_selection); + obj_save.set_vec_params(vec_param_names); + obj_save.save("boot", "global"); + vector obj_vec_error = obj_save.get_error(); + flag_no_save = obj_save.get_state_save(); } } - map_global_cmd_selection = map_cmd_selection; + map_local_cmd_selection = map_cmd_selection; return flag_no_save; } -bool MainWindow::check_save(string flag_save, string key_name="") { - std::map :: iterator iter_map_data; - std::map :: iterator iter_map_data_old; - std::map map_config_data_old; - if (flag_save == "local") { - map_config_data_old = map_local_cmd_selection; - } - else if (flag_save == "global") { - map_config_data_old = map_global_cmd_selection; - } - iter_map_data = map_cmd_selection.find(key_name); - iter_map_data_old = map_config_data_old.find(key_name); - - if (iter_map_data_old == map_config_data_old.end() && iter_map_data != map_cmd_selection.end()) { - cout << 2 << endl; - return true; - } - else if (iter_map_data->second != iter_map_data_old->second) { - cout << iter_map_data->second << " ||| " << iter_map_data_old->second << endl; - cout << 3 << endl; - return true; - } - else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { - cout << 4 << " " << key_name << endl; - return false; - } - else if (iter_map_data->second == iter_map_data_old->second) { - cout << 5 << " " << key_name << endl; - return false; - } - else { - cout << 6 << endl; - return true; - } - cout << 7 << endl; - return true; - -} - void MainWindow::wrapper_save_local_cfg() { + this->set_data_cfg(); if (this->save_local_cfg()){ this->info_warning_error(5); } @@ -917,59 +808,17 @@ void MainWindow::wrapper_save_local_cfg() { } bool MainWindow::save_local_cfg() { - string flag_save = "local"; bool flag_no_save = true; if (flag_save_local) { if (flag_save_all) { flag_save_local = false; - this->set_data_cfg(); - if (this->check_save(flag_save, "GRUB_TIMEOUT")) { - std::string cmd_boot_time = "ubconfig --target system set boot GRUB_TIMEOUT="; - string cmd_remove = "ubconfig --target system remove boot GRUB_TIMEOUT"; - this->set_menu_boot(cmd_boot_time, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_CMDLINE_LINUX")) { - string cmd_settings_kernel = "ubconfig --target system set boot GRUB_CMDLINE_LINUX="; - string cmd_remove = "ubconfig --target system remove boot GRUB_CMDLINE_LINUX"; - this->cmd_entry_all(*entryKernel, cmd_settings_kernel, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_TERMINAL_OUTPUT")) { - string cmd_settings_IPT = "ubconfig --target system set boot GRUB_TERMINAL_OUTPUT="; - string cmd_remove = "ubconfig --target system remove boot GRUB_TERMINAL_OUTPUT"; - this->cmd_entry_all(*entryIPT, cmd_settings_IPT, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_TERMINAL_INPUT")) { - string cmd_settings_OTT = "ubconfig --target system set boot GRUB_TERMINAL_INPUT="; - string cmd_remove = "ubconfig --target system remove boot GRUB_TERMINAL_INPUT"; - this->cmd_entry_all(*entryOTT, cmd_settings_OTT, cmd_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_BOOT_SILENT")) { - this->set_download_mode("ubconfig --target system set boot GRUB_BOOT_SILENT="); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_USER")) { - string cmd_login = "ubconfig --target system set boot GRUB_USER="; - string cmd_remove_login = "ubconfig --target system remove boot GRUB_USER"; - this->set_security_login(cmd_login, cmd_remove_login); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_PASSWORD")) { - string cmd_password = "ubconfig --target system set boot GRUB_PASSWORD="; - string cmd_password_remove = "ubconfig --target system remove boot GRUB_PASSWORD"; - this->set_password_protec(cmd_password, cmd_password_remove); - flag_no_save = false; - } - if (this->check_save(flag_save, "GRUB_DEFAULT")) { - string cmd_load = "ubconfig --target system set boot GRUB_DEFAULT="; - string cmd_load_remove = "ubconfig --target system remove boot GRUB_DEFAULT"; - this->set_default_load(cmd_load, cmd_load_remove); - flag_no_save = false; - } - + obj_save.set_data_local(map_cmd_selection); + obj_save.set_data_global(map_global_cmd_selection); + obj_save.set_data_gui(map_cmd_selection); + obj_save.set_vec_params(vec_param_names); + obj_save.save("boot", "system"); + vector obj_vec_error = obj_save.get_error(); + flag_no_save = obj_save.get_state_save(); } } map_local_cmd_selection = map_cmd_selection; @@ -989,6 +838,18 @@ void MainWindow::set_data_cfg() { Utils::str_remove(str_flags, ","); Utils::str_replace_all(str_flags, " \"", "\""); map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; + if (chbLoadVariantSelectionTimer->get_active()) { + int second = spbSecond->get_value(); + map_cmd_selection["GRUB_TIMEOUT"] = to_string(second); + } + else { + map_cmd_selection["GRUB_TIMEOUT"] = ""; + } + + this->set_default_load(); + this->set_download_mode(); + this->set_security_login(); + this->set_password_protec(); } void MainWindow::download_globl_cfg() { @@ -999,7 +860,6 @@ void MainWindow::download_globl_cfg() { flag_save_local = true; flag_save_global = true; flag_save_all = true; - flag_load = true; vector vec_sections; vec_sections.push_back("boot"); @@ -1043,7 +903,6 @@ void MainWindow::download_local_cfg() { flag_save_local = true; flag_save_global = true; flag_save_all = true; - flag_load = false; this->init_dict(); vector vec_sections; diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index f7b7f89..13e2ec7 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -119,6 +119,7 @@ class MainWindow : public Gtk::ApplicationWindow { Lib_save::Save obj_save = Lib_save::Save(); Lib_Load::Load obj_load = Lib_Load::Load(); + vector vec_param_names; My_Process::My_Process_system obj_process_system = My_Process::My_Process_system(); My_Process::My_Process_call obj_process_call = My_Process::My_Process_call(); bool flag_load = false; @@ -143,7 +144,6 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); void get_menu_boot(std::map &map_temp); - void set_menu_boot(string cmd, string cmd_remove); void set_default_load(string cmd, string cmd_remove); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); From c6a8dd96fdb64072603209166707a88cf0e54726 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 6 Apr 2023 14:44:35 +0600 Subject: [PATCH 067/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20TreeView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/save.cc | 2 - source/ubl-settings-bootloader.cc | 110 +-- source/ubl-settings-bootloader.h | 9 +- ubl-settings-bootloader.glade | 1071 +++++++++++++++-------------- ubl-settings-bootloader_ru.po | 5 + 5 files changed, 573 insertions(+), 624 deletions(-) diff --git a/source/save.cc b/source/save.cc index 55343ae..4b0b888 100644 --- a/source/save.cc +++ b/source/save.cc @@ -34,7 +34,6 @@ bool Save::check_save(string flag_save, string key_name) { } iter_map_data = (*map_gui).find(key_name); iter_map_data_old = (*map_data_old).find(key_name); - cout << iter_map_data->second << " ||| " << iter_map_data_old->second << endl; if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { return true; } @@ -77,7 +76,6 @@ void Save::save(string sections, string str_flag_save) { else { cmd = ""; } - cout << cmd << endl; if (cmd.length() != 0) { process.call(cmd, ""); this->flag_no_save = false; diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 7000711..77745e1 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -205,7 +205,7 @@ void MainWindow::get_download_mode(std::map &map_temp) { } } -void MainWindow::set_download_mode(string cmd="") { +void MainWindow::set_download_mode() { int index = cmbDownloadMode->get_active_row_number(); string key = ""; if (index == 0) { @@ -223,42 +223,20 @@ void MainWindow::set_download_mode(string cmd="") { else{ return; } - if (cmd.length() !=0 ) { - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } map_cmd_selection["GRUB_BOOT_SILENT"] = key; } -void MainWindow::set_security_login(string cmd = "", string cmd_remove = "") { +void MainWindow::set_security_login() { int index = chbSecurityLogin->get_active_row_number(); string key = ""; if (index == 0) { key = ""; - if (cmd_remove.length() != 0) { - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } } else if (index == 1) { key = entrySecurityLogin->get_text(); - if (cmd.length() != 0) { - entrySecurityLogin->set_text(key); - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } } else if (index == -1) { - return; + key = ""; } map_cmd_selection["GRUB_USER"] = key; } @@ -288,36 +266,24 @@ void MainWindow::get_security_login(std::map &map_temp) { } } -void MainWindow::set_password_protec(string cmd = "", string cmd_remove = "") { +void MainWindow::set_password_protec() { int index = chbPasswordProtecc->get_active_row_number(); string key = ""; if (index == 0){ key = ""; - if (cmd_remove.length() != 0) { - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } } else if (index == 1) { key = entryPasswordProtecc->get_text(); - if (cmd.length() != 0 and key != "************") { - entryPasswordProtecc->set_text(key); - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } } else if (index == -1) { - return; + key = ""; } if (key!= "************") { map_cmd_selection["GRUB_PASSWORD"] = key; } + else { + key = ""; + } } void MainWindow::get_password_protec(std::map &map_temp) { @@ -519,8 +485,8 @@ vector MainWindow::get_setting_entry_all(string key, Gtk::Entry &entry_t Utils::str_replace_all(value, " ", ", "); entry_text.set_text(value); for (auto ¶m: vec_params) { - map_cmd_selection[param] = "1"; - map_temp[param] = "1"; + map_cmd_selection[key+"_" + param] = "1"; + map_temp[key + "_" + param] = "1"; } Utils::str_remove(value, ","); map_temp[key] = value; @@ -681,33 +647,6 @@ void MainWindow::change_security_login() { boxSave->set_sensitive(true); } } -void MainWindow::set_default_load(string cmd = "", string cmd_remove = "") { - int index = cmbDefaultDonw->get_active_row_number(); - if (index == 0) { - if (cmd.length() != 0) { - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } - } - else if (index > 0) { - if (cmd_remove.length() != 0) { - } - else { - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - } - } - if (index != 0 && index != -1) { - map_cmd_selection["GRUB_DEFAULT"] = cmbDefaultDonw->get_active_text(); - } - else { - map_cmd_selection["GRUB_DEFAULT"] = ""; - } -} void MainWindow::get_default_load(std::map &map_temp) { std::map :: iterator iter_map_data; @@ -845,8 +784,13 @@ void MainWindow::set_data_cfg() { else { map_cmd_selection["GRUB_TIMEOUT"] = ""; } - - this->set_default_load(); + int index = cmbDefaultDonw->get_active_row_number(); + if (index != 0 && index != -1) { + map_cmd_selection["GRUB_DEFAULT"] = cmbDefaultDonw->get_active_text(); + } + else { + map_cmd_selection["GRUB_DEFAULT"] = ""; + } this->set_download_mode(); this->set_security_login(); this->set_password_protec(); @@ -867,12 +811,12 @@ void MainWindow::download_globl_cfg() { map_local_cmd_selection = obj_load.get_load_data(map_global_cmd_selection, "global"); this->get_menu_boot(map_global_cmd_selection); - this->get_setting_entry_all("GRUB_CMDLINE_LINUX",*entryKernel, map_global_cmd_selection); - this->get_setting_entry_all("GRUB_TERMINAL_INPUT",*entryIPT, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, map_global_cmd_selection); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, map_global_cmd_selection); this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, map_global_cmd_selection); - this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); - this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); - this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); + this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); + this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); + this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); this->get_download_mode(map_global_cmd_selection); this->get_security_login(map_global_cmd_selection); this->get_password_protec(map_global_cmd_selection); @@ -914,9 +858,9 @@ void MainWindow::download_local_cfg() { this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, map_local_cmd_selection); this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, map_local_cmd_selection); this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, map_local_cmd_selection); - this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel); - this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT); - this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT); + this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); + this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); + this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); this->get_download_mode(map_local_cmd_selection); this->get_security_login(map_local_cmd_selection); this->get_password_protec(map_local_cmd_selection); @@ -926,9 +870,9 @@ void MainWindow::download_local_cfg() { } -void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size) { +void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key="") { for (auto &name: list_params) { - if (map_cmd.find(name) != map_cmd.end()){ + if (map_cmd.find(key + "_" + name) != map_cmd.end()){ this->set_row(list_store, size, name, true); } else { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 13e2ec7..532818e 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -144,8 +144,7 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); void get_menu_boot(std::map &map_temp); - void set_default_load(string cmd, string cmd_remove); - void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size); + void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); void init_dict(); @@ -181,17 +180,17 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_IPT(GdkEventFocus*); bool focus_out_txt_OTT(GdkEventFocus*); void fill_in_view(); - void set_security_login(string cmd, string cmd_remove); + void set_security_login(); void get_security_login(std::map &map_temp); bool check_flag_save(string flag_save); - void set_download_mode(string cmd); + void set_download_mode(); void change_password_protecc(); bool focus_out_txt_login(GdkEventFocus*); void change_security_login(); void get_default_load(std::map &map_temp); bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(std::map &map_temp); - void set_password_protec(string cmd, string cmd_remove); + void set_password_protec(); vector get_setting_entry_all(string key, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); string dynamic_update_entry(std::map &map_view, vector &vec_allowed); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 2066813..8d7cbd6 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -254,28 +254,6 @@ specified priority 0
- - - True - False - - - 81 - True - False - start - - - -1 - - - - - False - True - 1 - - True @@ -286,110 +264,112 @@ specified priority True False - + True False vertical - + + True + False + + + 81 + True + False + start + + + -1 + + + + + False + True + 0 + + + + True False - 0.019999999552965164 - in + vertical - + True False - 12 + 0.019999999552965164 + in - + True False - vertical + 12 True False + vertical - - Load variant selection timer - True - True - False - 5 - 5 - 5 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - + True False - start - 5 - 5 - 5 - 5 - 6 - 6 - Default load - start - 0 + + + Load variant selection timer + True + True + False + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + False @@ -398,296 +378,296 @@ specified priority - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 1 - - - - - True - False - - + True False - start - 5 - 5 - 5 - 5 - 6 - 6 - Load screen display mode: - start - 0 + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Default load + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + False True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True 1 - - - False - True - 3 - - - - - True - False - + True False - User name to enter boot configuration editing mode - start - 5 - 5 - 5 - 5 - 6 - 6 - Load menu user name: - start - 0 + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Load screen display mode: + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + False True - 0 + 3 - + True False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 4 - - - - - True - False - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Load menu user password: - start - 0 + + + True + False + User name to enter boot configuration editing mode + start + 5 + 5 + 5 + 5 + 6 + 6 + Load menu user name: + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + False True - 0 + 4 - + True False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Load menu user password: + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + - True + False True - 2 + 5 - - False - True - 5 - + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + False + True + 0 + - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download menu - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - + True False - 12 + 0.019999999552965164 + in - + True False - vertical + 12 - - 140 + True - True - in + False + vertical - + + 140 True - False + True + in - - -1 + True - True - - + False + + + -1 + True + True + - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - False True @@ -695,231 +675,225 @@ specified priority - + True - True - 5 - 5 - 5 - 5 - 6 - 6 + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + - True + False True - 1 + 10 - - False - True - 10 - + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + start + + + + False + True + 1 + - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Parameters passed to the kernel - start - - - - - False - True - 2 - - - - - True - False - 0.019999999552965164 - in - + True False - 12 + 0.019999999552965164 + in - + True False - vertical + 12 - - 140 + True - True - in + False + vertical - + + 140 True - False + True + in - + True - True - - + False + + + True + True + - - - - False - True - 1 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - False True - 0 + 1 - + True - True - 5 - 5 - 5 - 5 - 6 - 6 + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + - True + False True - 1 + 7 - - False - True - 7 - + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for input + start + + + + False + True + 2 + - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for input - start - - - - - False - True - 3 - - - - - True - False - 0.019999999552965164 - in - + True False - 12 + 0.019999999552965164 + in - + True False - vertical + 12 - - 140 + True - True - in + False + vertical - + + 140 True - False + True + in - + True - True - - + False + + + True + True + - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - False True @@ -927,53 +901,82 @@ specified priority - + True - True - 5 - 5 - 5 - 5 - 6 - 6 + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + - True + False True - 1 + 7 - - False - True - 7 - + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for output + start + + - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for output - start - + + False + True + 3 + False True - 4 + 5 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index f97b883..9f561ea 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -169,6 +169,11 @@ msgstr "Справка" msgid "Terminal for input" msgstr "Терминал для ввода" +#: source/ubl-settings-bootloader.cc:295 +#, fuzzy +msgid "Terminal for output" +msgstr "Терминал для вывода" + #: source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "Загрузить" From 0562684db66c422cfa65f3400aa6782a3b579497 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 6 Apr 2023 16:47:02 +0600 Subject: [PATCH 068/110] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D1=81=20=D1=81=D0=BE?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/save.cc | 10 +- source/ubl-settings-bootloader.cc | 182 ++++++++++++------------------ source/ubl-settings-bootloader.h | 5 +- 3 files changed, 83 insertions(+), 114 deletions(-) diff --git a/source/save.cc b/source/save.cc index 4b0b888..4f7044c 100644 --- a/source/save.cc +++ b/source/save.cc @@ -34,7 +34,15 @@ bool Save::check_save(string flag_save, string key_name) { } iter_map_data = (*map_gui).find(key_name); iter_map_data_old = (*map_data_old).find(key_name); - if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { + if ((*map_local).find(key_name) != (*map_local).end() && (*map_global).find(key_name) != (*map_global).end()) { + if (iter_map_data->second != iter_map_data_old->second) { + return true; + } + else { + return false; + } + } + else if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { return true; } else if (iter_map_data->second != iter_map_data_old->second) { diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 77745e1..9987120 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -134,12 +134,9 @@ void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gt auto selection_OTT = treeViewOTT->get_selection(); selection_IPT->unselect_all(); selection_OTT->unselect_all(); - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; if (flag_blocked_tree_view == false) { - template_item_selected(map_cmd_selection, path, list_store_kernel); - string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_kernel); + template_item_selected("GRUB_CMDLINE_LINUX", map_cmd_selection, path, list_store_kernel); + string str_flags = this->dynamic_update_entry("GRUB_CMDLINE_LINUX", map_cmd_selection, vec_Option_kernel); entryKernel->set_text(str_flags); } } @@ -149,12 +146,9 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_IPT = treeViewIPT->get_selection(); selection_kernel->unselect_all(); selection_IPT->unselect_all(); - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; if (flag_blocked_tree_view == false) { - template_item_selected(map_cmd_selection , path, list_store_OTT); - string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_OTT); + template_item_selected("GRUB_TERMINAL_OUTPUT", map_cmd_selection , path, list_store_OTT); + string str_flags = this->dynamic_update_entry("GRUB_TERMINAL_OUTPUT", map_cmd_selection, vec_Option_OTT); entryOTT->set_text(str_flags); } } @@ -163,12 +157,9 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk:: auto selection_OTT = treeViewOTT->get_selection(); selection_kernel->unselect_all(); selection_OTT->unselect_all(); - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; if (flag_blocked_tree_view == false) { - template_item_selected(map_cmd_selection , path, list_store_IPT); - string str_flags = this->dynamic_update_entry(map_cmd_selection, vec_Option_IPT); + template_item_selected("GRUB_TERMINAL_INPUT", map_cmd_selection , path, list_store_IPT); + string str_flags = this->dynamic_update_entry("GRUB_TERMINAL_INPUT", map_cmd_selection, vec_Option_IPT); entryIPT->set_text(str_flags); } } @@ -307,7 +298,7 @@ void MainWindow::get_password_protec(std::map &map_temp) { } } -void MainWindow::template_item_selected(std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { +void MainWindow::template_item_selected(string key, std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { const auto iter = list_store->get_iter(path); if(iter) { const auto row = *iter; @@ -322,16 +313,18 @@ void MainWindow::template_item_selected(std::map &map_view, con } Glib::ustring name = row[m_columns.name]; + cout << key + "_" + name << endl; map_view[name] = cmd; } } -string MainWindow::dynamic_update_entry(std::map &map_view, vector &vec_allowed) { +string MainWindow::dynamic_update_entry(string key,std::map &map_view, vector &vec_allowed) { string keys = ""; - for (auto &key: vec_allowed) { - if (map_view.find(key) != map_view.end()) { - if (map_view[key] == "1") { - keys += string(key) + ", "; + cout << key << endl; + for (auto &key_local: vec_allowed) { + if (map_view.find(key_local) != map_view.end()) { + if (map_view[key_local] == "1") { + keys += string(key_local) + ", "; } } } @@ -442,7 +435,6 @@ void MainWindow::localization(){ lblLoadMenu->set_text(_("Download menu")); lblInfoInputTerminal->set_text(_("Terminal for input")); lblInfoOutputTerminal->set_text(_("Terminal for output")); - chbLoadVariantSelectionTimer->set_label(_("Load option timer")); btnSynopsis->set_label(_("Help")); btnAbout->set_label(_("About")); @@ -455,17 +447,13 @@ void MainWindow::localization(){ btnLoad->set_label(_("Load")); this->set_title(_("ubl-settings-bootloader")); lblSecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); - lblDownloadMode->set_text(_("Load screen display mode:")); lblSecurityLogin->set_text(_("Load menu user name:")); lblPasswordProtec->set_text(_("Load menu user password:")); - chbSecurityLogin->append(_("Not available")); chbSecurityLogin->append(_("Mine")); - chbPasswordProtecc->append(_("Not available")); chbPasswordProtecc->append(_("Mine")); - cmbDownloadMode->append(_("Loading animation with the magazine")); cmbDownloadMode->append(_("Loading animation without a magazine")); cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); @@ -483,11 +471,12 @@ vector MainWindow::get_setting_entry_all(string key, Gtk::Entry &entry_t Utils::str_replace_all(value, "\"", ""); vec_params = Utils::split(value, ' '); Utils::str_replace_all(value, " ", ", "); - entry_text.set_text(value); + cout << value << endl; for (auto ¶m: vec_params) { - map_cmd_selection[key+"_" + param] = "1"; - map_temp[key + "_" + param] = "1"; + map_cmd_selection[param] = "1"; + map_temp[param] = "1"; } + entry_text.set_text(value); Utils::str_remove(value, ","); map_temp[key] = value; } @@ -696,11 +685,11 @@ void MainWindow::set_active_boot_second() { } void MainWindow::wrapper_save_all_cfg() { - bool _flag_local = this->save_local_cfg(); - bool _flag_global = this->save_global_cfg(); - if (_flag_local && _flag_global) { + this->set_data_cfg(); + bool _flag_save_global = this->save_global_cfg(); + bool _flag_save_local = this->save_local_cfg(); + if (_flag_save_global && _flag_save_local) { this->info_warning_error(5); - flag_save_all = false; } else { info_warning_error(4); @@ -720,25 +709,20 @@ void MainWindow::wrapper_save_global_cfg() { bool MainWindow::save_global_cfg() { bool flag_no_save = true; - if (flag_save_global) { - if (flag_save_all) { - flag_save_global = false; - obj_save.set_data_local(map_cmd_selection); - obj_save.set_data_global(map_local_cmd_selection); - obj_save.set_data_gui(map_cmd_selection); - obj_save.set_vec_params(vec_param_names); - obj_save.save("boot", "global"); - vector obj_vec_error = obj_save.get_error(); - flag_no_save = obj_save.get_state_save(); - } - } - map_local_cmd_selection = map_cmd_selection; + obj_save.set_data_local(map_cmd_selection); + obj_save.set_data_global(map_global_cmd_selection); + obj_save.set_data_gui(map_cmd_selection); + obj_save.set_vec_params(vec_param_names); + obj_save.save("boot", "global"); + vector obj_vec_error = obj_save.get_error(); + flag_no_save = obj_save.get_state_save(); + map_global_cmd_selection = map_cmd_selection; return flag_no_save; } void MainWindow::wrapper_save_local_cfg() { this->set_data_cfg(); - if (this->save_local_cfg()){ + if (this->save_local_cfg()) { this->info_warning_error(5); } else { @@ -748,18 +732,13 @@ void MainWindow::wrapper_save_local_cfg() { bool MainWindow::save_local_cfg() { bool flag_no_save = true; - if (flag_save_local) { - if (flag_save_all) { - flag_save_local = false; - obj_save.set_data_local(map_cmd_selection); - obj_save.set_data_global(map_global_cmd_selection); - obj_save.set_data_gui(map_cmd_selection); - obj_save.set_vec_params(vec_param_names); - obj_save.save("boot", "system"); - vector obj_vec_error = obj_save.get_error(); - flag_no_save = obj_save.get_state_save(); - } - } + obj_save.set_data_local(map_cmd_selection); + obj_save.set_data_global(map_local_cmd_selection); + obj_save.set_data_gui(map_cmd_selection); + obj_save.set_vec_params(vec_param_names); + obj_save.save("boot", "system"); + vector obj_vec_error = obj_save.get_error(); + flag_no_save = obj_save.get_state_save(); map_local_cmd_selection = map_cmd_selection; return flag_no_save; } @@ -797,33 +776,35 @@ void MainWindow::set_data_cfg() { } void MainWindow::download_globl_cfg() { + this->load_template(&map_global_cmd_selection, "global"); +} + +void MainWindow::download_local_cfg() { + this->load_template(&map_local_cmd_selection, "system"); +} + +void MainWindow::load_template(std::map* map_temp, string str_load) { this->init_dict(); entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - vector vec_sections; vec_sections.push_back("boot"); obj_load.set_sections(vec_sections); - map_local_cmd_selection = obj_load.get_load_data(map_global_cmd_selection, "global"); - this->get_menu_boot(map_global_cmd_selection); - - this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, map_global_cmd_selection); - this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, map_global_cmd_selection); - this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, map_global_cmd_selection); - this->set_row_all(map_global_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); - this->set_row_all(map_global_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); - this->set_row_all(map_global_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); - this->get_download_mode(map_global_cmd_selection); - this->get_security_login(map_global_cmd_selection); - this->get_password_protec(map_global_cmd_selection); - this->get_default_load(map_global_cmd_selection); + *map_temp = obj_load.get_load_data(*map_temp, str_load); + this->get_menu_boot(*map_temp); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, *map_temp); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, *map_temp); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, *map_temp); + this->set_row_all(*map_temp, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); + this->set_row_all(*map_temp, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); + this->set_row_all(*map_temp, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); + this->get_download_mode(*map_temp); + this->get_security_login(*map_temp); + this->get_password_protec(*map_temp); + this->get_default_load(*map_temp); info_warning_error(1); - map_cmd_selection = map_global_cmd_selection; - + map_cmd_selection = *map_temp; } void MainWindow::init_dict() { @@ -839,41 +820,20 @@ void MainWindow::init_dict() { map_local_cmd_selection = map_cmd_selection; } - -void MainWindow::download_local_cfg() { - entryKernel->set_text(""); - entryOTT->set_text(""); - entryIPT->set_text(""); - flag_save_local = true; - flag_save_global = true; - flag_save_all = true; - this->init_dict(); - - vector vec_sections; - vec_sections.push_back("boot"); - obj_load.set_sections(vec_sections); - map_local_cmd_selection = obj_load.get_load_data(map_local_cmd_selection, "system"); - - this->get_menu_boot(map_local_cmd_selection); - this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, map_local_cmd_selection); - this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, map_local_cmd_selection); - this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, map_local_cmd_selection); - this->set_row_all(map_local_cmd_selection, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); - this->set_row_all(map_local_cmd_selection, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); - this->set_row_all(map_local_cmd_selection, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); - this->get_download_mode(map_local_cmd_selection); - this->get_security_login(map_local_cmd_selection); - this->get_password_protec(map_local_cmd_selection); - this->get_default_load(map_local_cmd_selection); - info_warning_error(0); - map_cmd_selection = map_local_cmd_selection; -} - - void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key="") { for (auto &name: list_params) { - if (map_cmd.find(key + "_" + name) != map_cmd.end()){ - this->set_row(list_store, size, name, true); + this->set_row(list_store, size, name, false); + } + cout << key << endl; + for (auto &name: list_params) { + if (map_cmd.find(name) != map_cmd.end()) { + if (map_cmd[name] == "1") { + this->set_row(list_store, size, name, true); + } + else { + this->set_row(list_store, size, name, false); + } + } else { this->set_row(list_store, size, name, false); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 532818e..9c1699f 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -191,13 +191,14 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(std::map &map_temp); void set_password_protec(); + void load_template(std::map* map_temp, string str_load); vector get_setting_entry_all(string key, Gtk::Entry &entry_text, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); - string dynamic_update_entry(std::map &map_view, vector &vec_allowed); + string dynamic_update_entry(string key, std::map &map_view, vector &vec_allowed); void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); void item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); - void template_item_selected(std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store); + void template_item_selected(string key, std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store); }; class SettingsPlug : public Gtk::Plug{ From fbac0ac4d3eea42ae9a98b070ca199ec14ca7a60 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 6 Apr 2023 17:58:02 +0600 Subject: [PATCH 069/110] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 136 +++++++++++++++--------------- source/ubl-settings-bootloader.h | 12 +-- 2 files changed, 73 insertions(+), 75 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 9987120..acf79da 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -94,8 +94,8 @@ void MainWindow::settings(){ this->change_security_login(); this->set_active_boot_second(); this->download_local_cfg(); - this->download_globl_cfg(); - this->event(); + //this->download_globl_cfg(); + } else{ @@ -106,8 +106,8 @@ void MainWindow::settings(){ info_status_app("boxInfoMessError"); lblWarning->set_text(_("The program must be run as root")); this->set_active_boot_second(); - this->event(); } + this->event(); } void MainWindow::fill_in_view() { @@ -129,37 +129,48 @@ void MainWindow::fill_in_view() { this->view_add_colums(*treeViewOTT); } -void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { +void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&) { auto selection_IPT = treeViewIPT->get_selection(); auto selection_OTT = treeViewOTT->get_selection(); selection_IPT->unselect_all(); selection_OTT->unselect_all(); if (flag_blocked_tree_view == false) { - template_item_selected("GRUB_CMDLINE_LINUX", map_cmd_selection, path, list_store_kernel); - string str_flags = this->dynamic_update_entry("GRUB_CMDLINE_LINUX", map_cmd_selection, vec_Option_kernel); + string str_flags = template_item_selected(size_kernel, list_store_kernel); + Utils::str_replace_all(str_flags, " \"", "\""); + Utils::str_replace_all(str_flags, "\"", ""); + map_cmd_selection["GRUB_CMDLINE_LINUX"] = str_flags; + Utils::str_replace_all(str_flags, " ", ", "); entryKernel->set_text(str_flags); } } -void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { +void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&) { auto selection_kernel = treeViewKernel->get_selection(); auto selection_IPT = treeViewIPT->get_selection(); selection_kernel->unselect_all(); selection_IPT->unselect_all(); if (flag_blocked_tree_view == false) { - template_item_selected("GRUB_TERMINAL_OUTPUT", map_cmd_selection , path, list_store_OTT); - string str_flags = this->dynamic_update_entry("GRUB_TERMINAL_OUTPUT", map_cmd_selection, vec_Option_OTT); + string str_flags = template_item_selected(size_OTT, list_store_OTT); + Utils::str_replace_all(str_flags, " \"", "\""); + Utils::str_replace_all(str_flags, "\"", ""); + map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; + Utils::str_replace_all(str_flags, " ", ","); entryOTT->set_text(str_flags); } } -void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&) { +void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&) { + // TODO + // Баг auto selection_kernel = treeViewKernel->get_selection(); auto selection_OTT = treeViewOTT->get_selection(); selection_kernel->unselect_all(); selection_OTT->unselect_all(); - if (flag_blocked_tree_view == false) { - template_item_selected("GRUB_TERMINAL_INPUT", map_cmd_selection , path, list_store_IPT); - string str_flags = this->dynamic_update_entry("GRUB_TERMINAL_INPUT", map_cmd_selection, vec_Option_IPT); + if (flag_blocked_tree_view == false) { + string str_flags = template_item_selected(size_IPT, list_store_IPT); + Utils::str_replace_all(str_flags, " \"", "\""); + Utils::str_replace_all(str_flags, "\"", ""); + map_cmd_selection["GRUB_TERMINAL_INPUT"] = str_flags; + Utils::str_replace_all(str_flags, " ", ","); entryIPT->set_text(str_flags); } } @@ -298,37 +309,18 @@ void MainWindow::get_password_protec(std::map &map_temp) { } } -void MainWindow::template_item_selected(string key, std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store) { - const auto iter = list_store->get_iter(path); - if(iter) { - const auto row = *iter; - Glib::ustring cmd; - bool check_btn = row[m_columns.check_button]; - if (check_btn) { - cmd = "1"; - - } - else { - cmd = "0"; - - } - Glib::ustring name = row[m_columns.name]; - cout << key + "_" + name << endl; - map_view[name] = cmd; - } -} - -string MainWindow::dynamic_update_entry(string key,std::map &map_view, vector &vec_allowed) { - string keys = ""; - cout << key << endl; - for (auto &key_local: vec_allowed) { - if (map_view.find(key_local) != map_view.end()) { - if (map_view[key_local] == "1") { - keys += string(key_local) + ", "; +string MainWindow::template_item_selected(int size, Glib::RefPtr &list_store) { + string cmds = ""; + for (int index = 0; index < size; index++) { + Gtk::TreeModel::Row row = list_store->children()[index]; + if(row) { + if (row[m_columns.check_button] == true) { + cmds += row[m_columns.name] + " "; } } } - return keys; + cmds = "\"" + cmds + "\""; + return cmds; } @@ -461,7 +453,7 @@ void MainWindow::localization(){ cmbDefaultDonw->append(_("Last Successful Download")); } -vector MainWindow::get_setting_entry_all(string key, Gtk::Entry &entry_text, std::map &map_temp) { +vector MainWindow::get_setting_entry_all(string key, std::map &map_temp) { vector vec_params; std::map :: iterator iter_map_data; iter_map_data = map_temp.find(key); @@ -471,24 +463,10 @@ vector MainWindow::get_setting_entry_all(string key, Gtk::Entry &entry_t Utils::str_replace_all(value, "\"", ""); vec_params = Utils::split(value, ' '); Utils::str_replace_all(value, " ", ", "); - cout << value << endl; - for (auto ¶m: vec_params) { - map_cmd_selection[param] = "1"; - map_temp[param] = "1"; - } - entry_text.set_text(value); Utils::str_remove(value, ","); map_temp[key] = value; } - else { - entry_text.set_text(""); - } - } - else { - entry_text.set_text(""); - } - return vec_params; } @@ -793,9 +771,9 @@ void MainWindow::load_template(std::map* map_temp, string str_lo obj_load.set_sections(vec_sections); *map_temp = obj_load.get_load_data(*map_temp, str_load); this->get_menu_boot(*map_temp); - this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *entryKernel, *map_temp); - this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *entryIPT, *map_temp); - this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *entryOTT, *map_temp); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *map_temp); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *map_temp); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *map_temp); this->set_row_all(*map_temp, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); this->set_row_all(*map_temp, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); this->set_row_all(*map_temp, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); @@ -803,21 +781,40 @@ void MainWindow::load_template(std::map* map_temp, string str_lo this->get_security_login(*map_temp); this->get_password_protec(*map_temp); this->get_default_load(*map_temp); + this->set_entry(entryKernel, *map_temp, "GRUB_CMDLINE_LINUX"); + this->set_entry(entryIPT, *map_temp, "GRUB_TERMINAL_INPUT"); + this->set_entry(entryOTT, *map_temp, "GRUB_TERMINAL_OUTPUT"); info_warning_error(1); map_cmd_selection = *map_temp; } +void MainWindow::set_entry(Gtk::Entry* entry , std::map &map_temp, string key) { + if (map_temp.find(key) != map_temp.end()) { + string value = map_temp[key]; + Utils::str_replace_all(value, "\"", ""); + Utils::str_replace_all(value, " ", ", "); + cout << value << endl; + entry->set_text(value); + } + else { + entry->set_text(""); + } + +} + void MainWindow::init_dict() { - map_cmd_selection["GRUB_TIMEOUT"] = ""; - map_cmd_selection["GRUB_CMDLINE_LINUX"] = ""; - map_cmd_selection["GRUB_TERMINAL_INPUT"] = ""; - map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = ""; - map_cmd_selection["GRUB_BOOT_SILENT"] = ""; - map_cmd_selection["GRUB_USER"] = ""; - map_cmd_selection["GRUB_PASSWORD"] = ""; - map_cmd_selection["GRUB_DEFAULT"] = ""; - map_global_cmd_selection = map_cmd_selection; - map_local_cmd_selection = map_cmd_selection; + std::map map_cmd_selection_n; + map_cmd_selection_n["GRUB_TIMEOUT"] = ""; + map_cmd_selection_n["GRUB_CMDLINE_LINUX"] = ""; + map_cmd_selection_n["GRUB_TERMINAL_INPUT"] = ""; + map_cmd_selection_n["GRUB_TERMINAL_OUTPUT"] = ""; + map_cmd_selection_n["GRUB_BOOT_SILENT"] = ""; + map_cmd_selection_n["GRUB_USER"] = ""; + map_cmd_selection_n["GRUB_PASSWORD"] = ""; + map_cmd_selection_n["GRUB_DEFAULT"] = ""; + map_cmd_selection = map_cmd_selection_n; + map_global_cmd_selection = map_cmd_selection_n; + map_local_cmd_selection = map_cmd_selection_n; } void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key="") { @@ -828,6 +825,7 @@ void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtrset_row(list_store, size, name, true); } else { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 9c1699f..ede6a38 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -191,14 +191,14 @@ class MainWindow : public Gtk::ApplicationWindow { bool focus_out_txt_password(GdkEventFocus*); void get_password_protec(std::map &map_temp); void set_password_protec(); + void set_entry(Gtk::Entry* entry , std::map &map_temp, string key); void load_template(std::map* map_temp, string str_load); - vector get_setting_entry_all(string key, Gtk::Entry &entry_text, std::map &map_temp); + vector get_setting_entry_all(string key, std::map &map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); - string dynamic_update_entry(string key, std::map &map_view, vector &vec_allowed); - void item_selected_kernel(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); - void item_selected_OTT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); - void item_selected_IPT(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator&); - void template_item_selected(string key, std::map &map_view, const Gtk::TreeModel::Path& path, Glib::RefPtr &list_store); + void item_selected_kernel(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&); + void item_selected_OTT(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&); + void item_selected_IPT(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&); + string template_item_selected(int size, Glib::RefPtr &list_store); }; class SettingsPlug : public Gtk::Plug{ From bec1f559e771ed11273616a53fe3efdecd7b10a6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 09:27:34 +0600 Subject: [PATCH 070/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=BE=D0=B9=20TreeView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index acf79da..342bbf6 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -154,7 +154,7 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path&, const Gtk::TreeM Utils::str_replace_all(str_flags, " \"", "\""); Utils::str_replace_all(str_flags, "\"", ""); map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags; - Utils::str_replace_all(str_flags, " ", ","); + Utils::str_replace_all(str_flags, " ", ", "); entryOTT->set_text(str_flags); } } @@ -170,7 +170,7 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path&, const Gtk::TreeM Utils::str_replace_all(str_flags, " \"", "\""); Utils::str_replace_all(str_flags, "\"", ""); map_cmd_selection["GRUB_TERMINAL_INPUT"] = str_flags; - Utils::str_replace_all(str_flags, " ", ","); + Utils::str_replace_all(str_flags, " ", ", "); entryIPT->set_text(str_flags); } } @@ -793,7 +793,6 @@ void MainWindow::set_entry(Gtk::Entry* entry , std::map &map_tem string value = map_temp[key]; Utils::str_replace_all(value, "\"", ""); Utils::str_replace_all(value, " ", ", "); - cout << value << endl; entry->set_text(value); } else { @@ -817,25 +816,17 @@ void MainWindow::init_dict() { map_local_cmd_selection = map_cmd_selection_n; } -void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key="") { +void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key) { for (auto &name: list_params) { this->set_row(list_store, size, name, false); } - cout << key << endl; - for (auto &name: list_params) { - if (map_cmd.find(name) != map_cmd.end()) { - if (map_cmd[name] == "1") { - cout << name << "|||" << endl; - this->set_row(list_store, size, name, true); - } - else { - this->set_row(list_store, size, name, false); - } - - } - else { - this->set_row(list_store, size, name, false); - } + // TODO: + // Баг + string value = map_cmd[key]; + Utils::str_replace_all(value, "\"", ""); + vector vec_params = Utils::split(value, ' '); + for (auto &name: vec_params) { + this->set_row(list_store, size, name, true); } } From 7431cc1a36cdcbdb91758712f0e85f04a83c7ab8 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 10:05:01 +0600 Subject: [PATCH 071/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BD,=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screenshot/screenshot.png | Bin 146841 -> 147846 bytes source/my_process.cc | 2 +- source/ubl-settings-bootloader.cc | 20 +++++++++----------- ubl-settings-bootloader.glade | 18 ++++++++++++++++++ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png index 366fb8b2ba17c42df776956535bf7d0359810820..31c16fed34cbb63123839e1d5ba193e9aa0511ac 100644 GIT binary patch literal 147846 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

m~7vKRiSG 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 literal 146841 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

Vep%+yZ3hy-Y1A{OQ|3Sz;++I&F5 zS|z;be>f@1y6}&-cJl9AB)!g#gDY(J{&?-ouUwM^?K5?6Q9#QCori}WAj4U0slygq z&{0G1m%p}-_Q<$-`>X3)1%^|yrL!T|GboQ|0~{MdpQX9r1E==xlfdH*r8RNZr z((dkssRWW_N>;6{Ag%a~bGTMXx1+780-|1>^=jD8&PDIWD!{lVFc^XepFE)_c{xJ| zogr}V&93c;^yJ$3^qXgLON2ew$%`}O9XDM%hBvt;J$Je0a)ctXT$0dq$-(6ZWpH*u zvu4Yc3`q+QH^z{v83?v5-I+7uF_ABNznXy{4`8v6bHDEaOL2y5%pD{NgVkfN#UI1r z2#7+Dl$?li7@|fqxMdX-;tyx4BC{xflmGZ*|Hqd2RnhaYu{0F_GJrB3Y{El*i`c{g z9sqBk1av_(M3G94UxY5{!5z^O94^i3R&h^}xyt06rI;PW-~E@?RX(IsDd6uhR!{8R z{^$2esHqYGTT^k$oIe9F1E4|L+LGhRZ`RoA{0%&4SnGa$w3oltl28_zY&~mWWn~rd zUhPvzGCXwnFf0h6{VSwkw1Lc2Pd7xF%~kBB5V}~c`t?e35-V`KoACT?4(0FeFfSbJ z_1@%RgiH`$x5e{t-AoajVSLMfX{a4FIuHk2_;_sGc@(j2N&t>WG7!2eU@~&p^jU)A z1oQ_3vplMyiFRV<@D{yId)Id~y4cy-1M~CkN^HU$bIS9iT3fAEAxOX-Mhc-<)rU3+I|sl9E_2zHQ2O zVPN5BmS36@pGZDy%?6tn74;6g?CKf?df=W+7PEFH$!e`wyWLrFu!7xO@&W5_jd66IiJG2kFP|-LIFdy zU`j`)l^)6sh%1E%aLj21nWcK`WSCP9F$Q zCLdp)0agbX1@$kxeKAn-{(bLOJ=HKIPHL7Jl*GCbZGfz42B3@cw~!*%nBg1B++iSh zmu5*ftk7T1HXhF|Cv&Ik>YPv_f)JDCFe&@S%G5oK#dcln({iUY=3iDQ<@z1{xR{tk z?R<^3(>@52yck86oV_-ZUnMEkBo8|;1XU)&9zIi{7P$YzasXsqwCD(in&c=kso#x9 z7kq{WojErnE$#N97bu4+9bM^hHdfZwLh4e3#c$cU{Eo7>9)u^9IyAo*lVU)@Ul?#x zU`M9N;Ez}#&X7%QD~+ZTjdk%|9!nGQ@~2XZ8|cT_`}gOOqonW}AakJ6{G$HlZoI9d zU7I)58VU*lP&-6Ohs?d_m^-V&kn`8Vqyvyl(`i@36`Rk?P*DZ7)My>SZ&sgPI3~Jf zG{tx3DEyK@q;*$uuMjhaNC(HkcZ$PLo<0K*UU@-O%fMwELa8mcVrggu>{rvg8!`Lk z+-y>oHw`mkq}NNackfWaQ6}5pB-%;8Q1N|?%!yCBX&i2G3U$r$U+rBc&D6PoLGSN12Gbx zW_fy|65o_~V+uy=x_1`gvEh%mR-I zU%V0Lz8wO!R!np>H36^3wKS{Y{##apv4NV!_}bK!bmrMjS09Jzp2TMXODcHXTTiDl z4ue8Qf|e%Tf6O&Sg2qJ>O?QKki5fo9+2=SHv;H|zZn3vV^we1mIhiPKR=enyL~*n2 zR6XLiZ%vT4rUQaF=dXHnBNLxrgMIQ;g9a@z&!)+2wZA9>m>L3hjJmNj3_Is<0x?7+ z7BBzeMQvbGiVOuyp`IM7YB1fhk6DpR+T$j;$Pjxs1jHOC@02>;v9R7+>A#9wN{I(` zP`PH2MfSI#*s!9oFxb7%`&21TQiZUvjX|XmCKwhJlt|;-d_zCOR3f=zyTb+9S}Axeu{=vd^^T+2zGjjTyqwqe0q!?Qd_fsDSimV!4{ZA)K; zvnlpZtzmr1MO<`Dopx99JynG>zDhy+lSTC@!{p1lvuzA?ZZ@RLcgXXk!yEt^1h=Hx z=M_nfFWcHUq(6IpzXa(q;7Z{#|ER%Z7^}6(ux@Uk>bPOxk0>nUOJOU8HFIrkb*Zn%$>qlGvkm3Rt{#s2_ zQf*B=w$(g_^QO?A?F(-^Wm35FNvZj272h`g{3zu{_z)4@?89Htm_`0eKd@2+&RyAz63Y4`_}M(ZTi9+_f2l!L0A81xFP#9s?lIGOqmK8vrhK@9&^k zvH0_k2-H6PFgSg-|JZaYZbC0eN8J8@p4XIWDiTZomoKFocBZAM zMcoyl4#&-eQnr_M^ZYj`gJfWAIKNnBHf@@DqF{IR#^OR1z^d&xcPQ?b8bQ}QzXUWQ zWSF(N>5A^8=IdUs5m|qAn;&ui!iRW;uFy4)r)UI?qO)YPmuFcu_{b;L7%34#^oX2 zS2=9(hba)#2>YA>n+NcnjuK2&1O9mQjXER1*wOVNlhk_dqgmaa66Il?ox-WIf#Y6s#t>7{b?>-ewHt94)u$`^0&kbrX=tLpkJB zV)xQzS`@}lt^i{Hwg65Vyww5}JGRji0cry9xRw3O4$%4@qO48$(QzZ4Mx0gT(z zyxt(%pLff09@*pJ6M>j3ekV9bT&fNoLO~zYKGV|}m?Ta@3HBdqOtR5Hn(X`tdkBp2 z0x&*4(7ADgbq;iC^>I({cq;Q<(DtzC$;gfoG$BOlffLLTvQz3(4L`dpYX>1L(dh+>~yNDhwiU%OX#(S zwbl;2rog?@2xb~{jZ4CFUBd~inOMjQ0P3INvI=)2k1u5%j3j|>qXPN$K$8V+3EM)C zo%x}oN9AqbprB$@?FqAx42X-fe(~7mdv}xF#a7p(M;LJ=`*9e>ry2*PHO&2IUG7AaBS#ZaZyrKBs(Mj<{$;tskC)8-6FuMU@0Nx=SP}ceHEhLZEbCV z7M||DX6g1qgqC*hG9Gw<68-f!-=91NeA=5xPTVKHLF|&&Jcq5LW4?J-cX#(; z(!yY1|eCW^%LtU3`O(Z~dF~1F#q!^f08kD$+ClpjN0`}qCE~yj45Ki5A zx}mP+H(;GjPDwEx&7dU=BS2r zNvd9LCGb-H&vlZS?axv3+mP8lzQ>dj9X#!kiSaq7zn3)c3jQi-vNyxWiONCxKT484 zW`UY^+>3++$0jSo!eeJo*+tN$<07ek7!ZQLkT#FRuSo`$)h*3GuY|mh!v8J_>tDCo z?ZyV1L$%~=KWGMk+KbH>9fl->wCf+L{*h$xh?G`PWytuSTj&31i~sC1@;SbeK>c3j zsq4?PKbrXGFElmm%eK*QgANzFQ?zkukj-okatl2_mYmz^pafm2j zeh@^U>d>67+rPWFHQ&2VB+cnKKltNaiX(OAso#NKE9kl+^q$zU8a+gD2wT*=qMVBu zOW@*+BS!fSmiTC6P9f&i9h4$aI0kl1D%{tdAWX!BQB-u0NKz1b?w7ah(Sh*kTerf2 zD40d-zNzA}Or1;ic!A@z@XnAl8VC-2N2yT8L>Hs?Ix=^4pwn$#7pYioxte@z8|kboPbuBBE{0T}~B zE!h2aqNft9@mg71aLU|DRT+jvnBH6$Mi?x;I7C1a@410_Yeonr*Ts&`X?r+9i~)j< z0XZ32#1axNpjzp6O7tH6woP78$ktNT=qR@KsjjiZJ4BTDwMF07{yxlJWZF4!L8_VS z3cy?n=#EYWV?sbCF(6_nyj1V9GaYe-L-;1_ikk4i2gA4nr`M?h*lEeph(C5O*EJa% z)RA{U&Ss!zOb59IvZR3R3@Nop3e;XD#l^w6?IJW~a9mi<)PWjS4q=^=5~G=Z5BbuS z=}u_+M!w9ZG&jF$UCHV{2X~H;P@hzR1dnwBARJh$Epf}EsY$!ttaOfaab z1%4omn9SNTp27$a;_Z@~$T?f|6KT`tHMa#)vAObgqH8yRk+b)nGh(!~?%XX2s_AsA zTk0V-Kh~aWGxl(z#=T!QL~@7H^H{d3BVapFP|S`K+8z2E^Glz3fK~&!?yq0(fh3FD zfgoPQx-_|q@mOB~t}Uuc@I?~}#3ecStS~%2?$cP{Ag!$AWfmqTiB#E`0JuIkZfvt3 zr4e=NIXxIr{6w_ZKTg@zH6gpSFdxWp=TXiJcv_Q{Shu>OqrpD;b|HUf7(nx!ybg3a zsm&aE_}Un^(vH9+h+T=l0Gj2|%wT3?=p9C|HgA$H{* zw-pZ{x19N<{p-^1x$!l2=tgJnoU3wz8-QsHhu^_WRCB%IFiLUD8I9qtc{8VqF{~f6 zy?Ca;ap&C$H@NNG=GX3_0uwzwp*XXw`Wy_H&E~v$FBU+(LI>30tcCH$;q|2ph#*GQ zC=>``8K>gtd-LiIsnOK5aq6xzpR0r;OESy2t@`Al_gJ?YrEn{?6M5Mwnt~_O+I(f6bpY); zG-9fy<$5E5ikiw`k*DXZ2I~5|M+n>x12@T+QRci;omfiXcP2orxn6UZAw<9c+pT}a zU(ix?V`ELX;A##%x!~aFXxqZHO#?jitSuFegV){4Es_DU0Gwwn%vrk=+a5kz?h(>3 zIjp38dloosGutddU|x|@)Ias3ak)0*SnIGau9rk;D7KeyalYw>8bEzeEVl&E)wI99 zF0ADOxf~!_N?r1>=$QQr&B~V?zb(l-nL>G>wz9wc({^;9HpFY!1uMGJziF9JnuM|w zETV_AfTIS4I}PY}kVUfvMs_V<-V?|CNJ%L!=f)wENd(VHGm=5nWNrsYkr-;v163b; z>oFe!I>}Hd84wpAP?ncJ2X_08c$~eJb#Ioof-XdbYWVs2Q7nBf7q~xRlGS(CHE%&j zSA>!~jfqQ6&a$^c3T_c7QNt1wJ);|G1l@>>XF*7(h2Jc!s557_ZUo*e*`J@SDX(07 zs|V@Y-m^Ul0AZ^9k`RS$OJ>_QH^2mBW~1196jYL*IwMnrC*vQ$Ot;j zwg4j^kxdOANZ;J`$&HPDi>G*@ zZqN76!-&$6um9rh0FT<6hDcT~ zjHtRnNWB0C_nb>JZ90l;PTjz6hI%kbS2!E#A)rVb)NBixzBg7{=87x95o1fOS^)oT z2P0>Yx@Ex~g;8s=5_qr*YrjASL?we3OAMdge_vtD-qse8ceSlx+*_e@L2TzVnQnn2 z{V$~TJHOEJ?}S+S0a}o_|9IHB%*b&lTwsQoXcpm8SJ2s>ep3tfC?$>sH80{Pz8_E7 z{p72z(@jkgyuiaRHW)lu(IX#RR`&7d3*;+yjOQvU6Eo&T{qRg+-z?{xx=;S}D~jXi z?XM@XdVBwIiu@GWK8u42xBfKL`7>96{oI=iiu=S)=RL}PE-H5X2s4BI4d=O_wXH`l zpA?|}415vSxv(nqseC+kLwF^+)MJ`&+=WZs)THD=ii}%s;mtpf|MC+ca7*y9*sWiG zh-Vr8Km1K+59wP4!DHij6ARpmcA2EuV~f0(3yt?sQdwPp3pSsk6y3Ma|K%l&si=La27Q-jjSxDyC=dM(;1x*$eIr(03ayk;qTegr3*a}qZjkVu8wZ&?} z9hS{u2YO)Kuzz{ZKlOF)D@I>R+sfwaxA?5?SlgZ3zG&WIIno?Yr!FP={NRz%YRdg> z8HNj&FMXgDsGF)EU}WI&m5So|GEgcpG`qdR=HzZ3=E7^y9Uc0{gJ5p+msA&2}7cPCOa@Y~|_nlu$(WJehGoG@L`I61pf z`|~K%&gILtc6KjB?VmKi`fNLgUtKCH{_=nE_SSJxuUq&iiegaPpb=C;1qta!w~8XA zG?LOtcY}(Ek^<5#-O^psIdsF&4MR7>UF>uA-gwSFpL_4;^SgKdbv|>(;XCiV?|RpI z*0Y|c_)MKpBqn1BeV&IU7y2|GIEBWnq1 zFw4!)vcB4#W@+T2bZND7aT%-Y>r>l`M$t)0pE1|m&dBer*s1ecPtCk}d=VSBuC?`v z#Uxg)epgBpT9o#hqn#xc?;W=fA3m53r77h_I?3%!gqD}BuC3J}5kD*SGt~Rr-` zPd)gRS!N7^ zN7+R9_|}jqJ%X~Mv8hRWZ%DsCXVzNOh<1N-rR|+l*>Z{K9lp(Ta#rr+ZpwnbApv5u z;txDamxT`Y7@`a&D-;D{qocoq=+FwxG5q}9C3R^>3Bufc<#KnIHMh0RbMiIJf6DXZ=P!BphY&KpRJi<2hza!o6G#tm3z{lqe zjuGC6Hl$CUN*8goF_58GLU+y->h=E?J)_Ufzz}f>U!uCN?*f-{Xo+)$ z3Jw`h((r-%sWaWMXI}i|N6*{XAN@jIYMha!jKPP$lQB@WSh8Hg`LWtF&GyBp;m{dz z^UfW&LqRLQ^4wKiXoI!&cTjPevb^WsARO0Oqscdah5;J-atLkJ>= z_sgegzlhOZi;1ZUf6jFhEH;-%yhso&v3mYOn@gjvZ4v6sq+Zi?zmbzSY$nc{Ek`@G zgrbR!jA-4|oprXbifdIKxg=eT-q)X0Vpnd)KsylGrAr+M4FCR@pw~h_qqyP0YlP5&lYsagW=Q^-_3vcvIDG zHQ#RKNMT{2TGp=mxW&&^&EIeP@Uu|3R6TS_dJgbeI2L;6^Hc!qSBIW%-*!2hTVf>;jTHM z_>6(WwONp}gkR@kj_dArI@7!lQXKb8lhRQQ`=BrrQix|k6c(;)0WgdZeo$&%9 zqmOumuFtSh?V|Z`2JW?%f$*P8Z*Bn}THEof z^sHYc#-+romjL_(GsYIY(VS-XXHPzE4CF5pY(v%})nS4~SgO#Om+yN=3Z)@gd?wa>Wg6s@d4wg$oM!qSvmH zOD~t>Vqtc`HPhNtw(Ha

?$iMgYKa?yGNz>$DF`gAQy#lLcwByVbY(b!*44<4wZBSw3H3+=g2Ytx(&Y$u3gITLpUc5ei zf2SbsU8};l;D0%!kmU@%Ken5c`&-^{Gaxbe`i06Sc>aj04TACIG}+WLa+4P?=x#YL zEm=MZqGw8M4hZu9`n7>xWVB|e*+1X#wM;4!!&z{6q*XL*Ke~GQQ$$Fj+Xdj9>x}G+ z#W!7&3(CxtC_*Z2Z?8{viiECr1R|D^J^Yi-L&rXF{hM8DXJllwSm=+m9vykPVDswL z6)>XN-M7BC@q!zF@IzcHWCrC}6%>eNC&Wdh$o$w^g|7aOSKD-oHoV zr5CYY8ZZa$HLL+Pw#TYTba!Eu+RglCg2ak=2f9~Z)J|Otz8hnbmj1v@^|vwLOrNCdvXA#qr%kdu=@V`K7@r=KQKI&ZcH@$WL``}u{|)rm#5r|P6VKGN2i zH3857AnpnwlEDh5sFo#CFK* zBs6=dD7URm-nqw^Zw90;r+ux=$9+0lIvcgeR_z&vsb&Zyhr?Y;=l%02r#3XS z+-9ThkJ&yIrEW_KKq5#!XGl#`GEpOE`=M07pe8Fd)%VL}{f{Nk#y_0rP!h|)DNVq4 z%v@;uXd0`K??5m~=~>-ZANB}yzcb%b#BEZfA#uc5<>PExnPhcoaLVPgu53n91Ns2B(yXiK*DS%nzugfkXMi7E}p>Ys{&# z#%j%X6iqEHX?Tin`3Q3O{t)zw!NPE9i|B1FX2OP}=l5+u}e~#e6?i z=OeF6lR|QX$7ur_rVmI>Swo1;`wX|&yJue)YI2Jx$$k^qo-j~Sj+k+7I(;M=FJo4s zcVju;t+p>Xa&Ao}Yld<#Dn@SqzKb>y@W@Z#3CF=(=P;8%VDPY+RaE+ZITijsf9}q} zbn_lK9=TuqzDh5@!%}yu&5!r?TV9+~`~J!mU!F{--eZDaUfUy+x-EbDL7v1#zWV?1 z71Q)(4D!4U6ABLj2`cvbg_j2pjj1&3vD#yN56*jw{`zD_rlB{gJPLRs&tW}p%+I#b zUpVji{6F4e7W%~GMgFAl7^|PYi5INQ&!4vsDmK>F^&gzh)UV7=v&F~Uc*8-WOJX$R zMzuw63;F>yk9}IlBArLYQv+M+4S9_u$swEije^k3_j{^hWGH)3Y`wS|8>z?*L~E(P=m3>g@J)`Dk#I^jPVhK2YNEqtqW-X)#SP zUG%QJ(H;%Fo{vJLFMma|(E5LYAbypAL}e(3%hhye^l1r4`imQ6rhU7w-Gx%9*r@{ezpGi63IN2)}6 z7EWW?56nW%S2&%pXyZKjYj~EvWx`-}NRbgFDo?YEu%dcnNXndyEe>1zu1`c#=&Fc@XvL6Nv zv>T#R=SOnri)?KPGF*v>%BzekC{HRF5VS8X6%VR$+N?T&TvD1?M@AzpZF9G1c2s#o z0D}{kOmaTYpTg1a!U~xf6gHk=*XvvKe8y0y3zfrr9v3gJ>U1}Ri6~2Tt%=!f3PZxx z(#LBBo|$3>v)(urYp?C^t(~mP{HH1llwJIhO7o~)5HwS1y~#9;r4&2^_}!XjT6|}j zPX9J{6GhG`rgL2OFl58EnrvMB(8!eA!SYk-j(=snchpoFZdmZ%lqTFr&tHh&x>-s2 z4(d9W6=mKBriaAa%RV}7hpsL5EBBz}Xn>6iR|Z5|HYY-nWC8x+kuUS@pA_9xee(L7 zI;T-Tv`2)5e2VipKFxhodA*Cppva-KGju zWvpzAKE0U3N^g1JEi}<*uhrOp32(ZeApCV`p4vowMC2@HzX8p4#dLChs}B?E^e~)5 ztgOTp^7Xly*=7D>OROXUBsZ3lY?afXqegFYy}5W^F;3(C#yp|hma{N zHr?$1;vvAH6JSCImHHPP5*v1*SYJrfaVYwOmU+uDZ-Q1A)PzMwtL%lvq*?L~mvAp- zWFu2%aue3VQ){$ig(roGaXyizyN1@;o?rx!2{%^zw5rvyB62p|M(~uaSMrWS56t3s zS`Y}GjX(rRcZE;&(c_*;h;^E)m8lQHMlP=IOcvid+S@LnL@!mUMZc=PTaKRGJGS0P ztjRS#3aU-okvkPW83_}IuHbwP)zE62xvq_mU8Tm%yyz0g6Lbzs_aBpF>clv|(7?9I zu466ZMRjI13x4Iu-YM;$BO_%$oeEI9-p7txxE$g^V>? zS&-dW)kMx^^BKtQ502K{R=2k&`uHn0mMT~GfV^lj8n;8kC}di~XZoMO>mzzlNx|FwNb&(b8ccq)W!y?j9&W;{MweiWiXG(aUDU6!yEfYE#|1 z)iExxvA%KdKHY8JJ3&2*9DzJ2BMyIm|BWD@`0~&0IQ4)GE#y(YR5G9eXwEB4AVv-$ zj{#`L*!W7@1xhDR_!L3GC>Ub{jmH6S4C61d&PbWDK%#B-x0V%_ZQ5Y`i2W+AUv3ASWGU}Qg(S1ndx~irN)F9_ z5Q)6D<1x;#2?AUkBUE+p8|0^I%*4U}nDc6Im*69M_p=Fei_*^fPe#_&4~0Rc^$K+6 zz2{(>Z*6@-YuM&U4ffmK`5RHJJV#5R-pIEuGM*E#39#bH>X`i1`dXt@}1Unie{nQornx?rN@p;XNzRj zZjA)x|IZ#(m0#b>T^lJpLqkIY5qqI-Z!kL`z|8e0$(yUxD%IDf z(OI!g*k9o}CnqPDO`_tNG7m?xU z?t$#~e{Lo6HyHht&fQqQQM}H#Fw_!{e376xnS}kDtOAmPi*QD;eS=&mEZ&>)W-ejVBcapX?fNtpisrx`u zm7L3>1&z|~z{L^Ip(=b#WgR$t<<-!e&(eyb2OPV50VC{WaOcgub)qU3D3%xgrI@U^ z20*w6S8BPOCDYDsyZ(Xd)Grz76zX@VKKF)f^hVPL@gALuwo~6PXd=P0h#vpUB#x?ppa_$JLz z(?ohQ5%cZ;cuS++)v9{~-gn+3o@Z3CpIT4&pKWb=FCO#$G+=3G8E(OUwyw{6-3^o( zvv#)#$OX(igSXR3*v)JV-K6UZg-uVwxsCjDLpRCzMD13s_IKrQH)#mwFE`&XIGUh8 z37~*@dvqMJ|1V76q(j5@-#vudX+*_6xcTIFe;NR6ZZnrfGQ5Ep((B3Id+H;0di7Ch z|D1}GXTOD2(V z4U|vv0$vmKWm2dMPAw6C!a@D0FaV2M-eID&z$X`x*4%ySBmB!>KUtxu)@selo?RVD z#NYXPbJj_|P8gdS33Du@?4Cc>n8y}g8?Uch)`ii_c9qD<-Ch)CF`G`=+AIN>Zgbhy z$A=TDS4ijysz2dPr5E%8B$2%Qo5;MqjP-p&4@jy{}f{G!;Yg1$;kxP7LC8G1AkAO&e#vK|~@S6ot%nmGENjZ`G+WugU>QQ`k|g6TM_}-C3B>j7^g-3XF0Z@BkPQ7_-q5sFi^2^UUKhcM7wma0Hk3 zzX0o%$J+hPlp*IJ!gx=U?096I1Vp3HT{v%s8nOP3kW@*lViwf?H0Rf4$UOx;6NBzh z85PBd2cnNw4k)>uZofZRDe7`cOUa5<#5x#ZM`4x-z(+$A36j`zSK3V~6S;##ZkmZ{D^ ztd3}}UcIU}7PwteHt}?zRfd3VoKR8 zG(MBx8FgD4DDeRU1IDu4dm1anxD|p|JEv>M@9Uoi>}p<#2VKm6ZFrq z`#y0|a=}lI2a_SJ&bKxq?JrA6_+THhrRD=uYo=m1(7Z@LL5%gQAA3O*l>7uxGhcgJ;2J0Pn zhKSoUIbZIP%jSDGIns&*=G17p9$9BbW)0hIw6iROwRnH-o)oPonO9Wp*>IJd{HtU+ z34(RdMC02SK5KQH>sHu^ua+|)zd5LQ(oK9tWlWp!SdqhcZ#eQI8lYN8DG#$}t)Zh{ zTYj|m*RwoQ%KYco%V%ns~Tudo=V z$fva zf9Ke@JV0X!MoW7JL)(`#g}DNrzpJ2RWQ;f8WS?)YuMhkFy$cclNSZoU2v28uA75c} z(9CY@^Yp&{1?dvx)HiA9OxZf@S1i>l;b3{{EElI^^YQZ)E_#pOw>3N;lxN@#9NWhl z{Qh70Hb~tjlKjm|u`WlVV`Z;L$4WPFQN^?!_Vb8Su2=c?ah>LrRm)Fg+ z<^Fx08yD{0yEopQJat(_#O>2L-;fYoX=gly%Cp((DQ!Ay&W!;WHxO~0?XRyVOWoQu zmcYkHca)M;EbV!Lq4Z!uiD$FM;Chvt;t#Lftb;_=BAv~P7_g!KRb!1oPY}{;I?rl_ z-d{GTC70H1;xRSJTi4`h$KIHYo4j~s=qAM|=)v?wxDk9K4hj^2!+q(}<+N2&z)mG4 zyWlbJ1(>7>tIjT%O;1}uVFQuPR;w}0#@@CwUo7?Q7TFjI)CxlMq$q1zTc=jb^dAFO zrQ4N2V_a7D=_EwQ=-ANSvR~o+Fn&0b@Z-lt{0mJuAReh+qGY;nUy*oKgyusNpRweh zT!6ANzM@UP1c%&d^8-!~#4d9Cn2PWIN3bRsvpCDk&tEOz4Zjbd8yK^p)#l2hG0>|m z4Jti!IJxxBpq-#3Uj>(1kP~|bjX99ysVUwH3r6ogwz0QgTZ}~7ZX=mw`x99O@lWM2 zzV0VSHz(pb)67H3H->JnVv-t64v+4qsT`cCt(Ap^=r5eVX1C>;z8Z@4>WWQa$wrkM zrAE#`0|Ie}n>$a)F@gbp+iK@;JGhrG*B}ue^5SY@oJLx;0T99Xd=a09jwKu*D>%5d z+Bv>ozuHhp%>N`cZN@z;wx)#ZaIZA#jo56$zhHRTLd6}WH8*eQ7CqH{ZW3Z%fJ@l~ z7gyB*S;5zU05NDvfK(_hD#JEv$oPirTeP(JH2Ie;TkXa2J zb!C$CT78(S!#y)+W6L|Lw8jXB@2q&{7OWUpDL1q=YHbyJ1#Hi^AWo+SaknA+# z{vto`b>BJLJ|jIjm#WHtLiL+3XPR2FvjDghSeEDRBRKLYwK3p*-)0O-W+Zi_Z=kcY z%htTMgqoHX6RwklO>pjtAwGfUnmvL{C%0VYVPlCBbABQ)&YX^E>{{F0ya|hyWsQ8_ z5x;Vz{5~k?POQ*yOJ{-XgOa`O4ZBb55n+9S=~I2G&Kf@pI|8-^^|!(9Sm@9CgKujf z^a-c>{x$rZw_8|%PZG$<$$gI{TL;AP5-)v+0R*BnJ+>Ters%l1kEwQ+@#cxdV=cuN zk=%S?wG$qVnzwn1efj4{9wacJN=qUEX~k^+hXPF6v~UxYFJbL1X=-+lu(~U%GwUGIAmEbXOj5e^&U-n$SCsU5F`g~+h1Y*abUkm);^`J>A8P22JY%6d<@BEF+ON-{ z7_R+nbs`;Vhci$k-yaRNJ45vgHh(2KES&aAxZkqP)m_giQYETi)?s2PJb^8js)ZJl zp}O_Zgt{XCanVh{cBxKcaP{vCn$A6W(7u8Bk3y@L6%}cS|6NwB28}ci@U!bP!qEfA zK<2QK!Z?ZKzzFY6N7iK8JKq_XzFICYnyWwL&TCYW{L?9@wEP1Idwp^i znAdgE>msc;6JXpv z$kIUxlpmm<2@UfseIJ%Mm7*^c*nzu47)}i?PQufVA-0N={pErM`HxdN6^%1*6`MW= zob!ABHC}T2F4YN^=C?8)H_(x{4wzlM2bk zeRG=d7wQMz#zg>FW3ao&XYlSE8Ta4xvt?o&Ul8EG2(ab!+^NT}8Q>O!xM~}WQ%HI& zx)7p_D@yX)lho&|dfc*jv;@8C7T(P*O|*g)PAe)I^rK2yp`&HRS4mF#9^HB>Dv`rZ z&A8VI2uuN}z@SGeO8{y<%x7@%O-$9l^9!K9%Jd_k^A->7y<+RdmICB*iYcFBf#cIY zM!B)^ag|B=g<^B0GbA%S*2Uq5st(E?uTJ&Lo;#jo5oIIF!JK@axk~h`9MrEg^B!oa z{gxgJGUNFyhK{!{k<{khpv8dhz{v_zbMIid#A4 z_-|1Tp+1yMFN-v%~x!b48i}CL8 z!&zG35uN1C1{}Q=$ErYoivi{kSdg2HeAQp#)yc`uRzPo)ZZGZK@DKYUP*%bkt!fNy z(|8S+E-g#=F?dFiyH{W=oDbdq1SX;6q45grm}}(Z&s9_?vWQGLp^bUm07>w$H6mhL zLr-sB)W(JsC{&g6X4OC|0G8DwJg?;cXosX84gYs91MJFcU5!_VP$#{u?@-i0o`6Bh z@i|(dYtC$z!D!#$zndJMLK*=YNuGcRb#-C-r_#d!q{C6GIAJ+g$!o;nqH+18d-G5S z^oI#6wh0^WC7(NwC7p`@Zlq#K3m9u>$i3sUw=Pd-HoA|Jjg^l2q_oLxqODi1SGx!3 z7lG6ATS3-SA;mX``wz?FSMmn2dOye{RER{KV!Q&c%$y+Ct0vZW5+0Ko-EiXXRi_sT zs;CaNBqQNpkj28CYaWlS*K-oS2J|kKbSG={kFZus=eFEre07eJGpj%8joZug@6dWv zRzqFT5>oNi7Qz3tub*B%&(4KErcl2Rk^8oTTtWgLa72ug1`K5O!6j-BK+|<|;R<%8 z2sSbr=<1#~_&;2`b1j(F_zD2M&}L4vFu*7(vNaeyyaza39YX!gSgo8&A~cfuOpXPG zU%VLiO=hjy4&r-T0wPuqj%($XE24r~F3HJhB%gGu|3x>_vlEihIBTQ6Kn+2!A2y?k z@;)VGvXBKFCM1gWg(QN@bp1M^DkbE?J~7gK*M2ku9xJUNa)jR#KaE| zW2kb=)6Rz|3;_G$>}qR);BQ0mv1Jwd7j~)*tf*L6!ejcjbq>5y@4Aq>{2^Z(0Nm7I zBh`Zj$Jl$v<=Iryu*RN%j#wj_+k7}s)e5SM=IsCg|2rx&Yn8}3zu>=0EId`kh&{Tj z0o~5RS0U6UkgA0hIJ5yw{!`WSe% zl09~=?!B6Os8$koM?vy0iF~lb+&$7YXSD)maN2evYga$5nfbw_~&K3)yw3_!jZKja-A5Tg$j z-!*(@h8EnJe{~`&q`$M?z8#LpH?-C@pyj-_va%Ad&R0-T!H4ZY2qn%+u?Cljiei-( zL)ehNyNuz(3&G4Au1?mJycG`* zcaijK&(uvd%K{5%>Ftci4oC5yP24*Hu+_LC4o{~|+?3)W7qPg4r5kDjF4+VtafM5A z`qP3cnmQ1iM4bTHolpyKu7 z`OD~P4c@S*+C))jqSt@dT6O4%F<>|F@ij9&Q0fW34@|HECHRUqyICZ_WDF5u(z{$) z1>By-)>yH{K!^M-dbfl0=TA2ReSL-P>^>cZb^Z~0&xiMwwN1~DKLXZ+LV?pYje5_t zY)7apNJtb)v&R(dJ8z67E0_=L9r^UoIj^9MW0I1B!G90h$>i?wDO;~2Q%1u!Yz4`^ zW`}nK0XOu!8ul1zae5h(J-Y%v2@HMNRL7$x=(QpyXliS_#UvQ@^ZV^=b2Ei9BaP$@ zmB`2?!QXt+Ne9%dt*vSKO~6!SfvkKG?Tqo{qZ?2o+93J^8%sTBV2Q@{41lBG;W_Y+ z4=yPq=&+SvzHCV8LHVn`eE8Z9YY~YQ^;t=5o)Y?BJT47hIcd#v5ZOkLVk-bYgx;5+ zTfMRrAdc@S@w)MX!_13+iC{tnZ9J4^0*pQyOP{w5%Q?ac?3X$_*0)+L2;3Kq%K%!jWi z_DdE5+^kGZZ!xz=ee0HX(@1_>7MPf_Gvn~bzC;~KhznD3-HjG)G(8m0s%MF;>)T{{$ZZz4edw>M50_b= z+%I1~U!;P}5E>#>ky#wl0&`_`MgVs=fN}|{+L@w`dVP?`6o4Rz}!NCGCOJ&+C3%V5q z_l!qjvxl;KY4A1&P(s?S)=KG=U$Uipq zm&DQ?XO!^)w7|z#%}>`U$)C@tIUl|vduWrSfjrAU`3GssyBOn5z}C^Y1EHaqB^L?# zl;Kq5A9aw5|PsDz@VT*qu9wily4-X8(qURqW0RC1U4UTQKwEGeHWjZEU13 zzhn%RWniRXxxHkZgLxXgX1ovMAPlEJ`S$H;-U7B<5r(>7U%gHA?rPPqFKv1LpL#{# z@WNP9gxiMvrY$L0mAMUGup=WGVtt3_HOyq9`RiY`^nfy4rL<>_n)xAcpK2AQnAD#9 z$6Neib)>RyNSuxGRdUfk{R=&L5*`8n=O5%UWc!}TBOl-hHGZt|a9XaN%PbCr+TfEH zCHFA;kDyw;B3YmBSmXj#DgZ@CJ>%Tzz^oD)W{(^$EtRZ?(ZZs|$P3FA_;Asxnyb!? zuK5>1;TSAnj#qKGPiC^OfV4!oc$V+nS}8hyrQNDhiNgjnbxM|kkb7t@IXc8El*a8XREpvQS(Ix zdzy-_C^O66Db+WKQAZfd2*vKL_#0+u*fR+=J||cE4-+p7?*Jo}&2)^q=i^xq&f8X8 z;xzwbCPmFY%pOH?(lLX=FKa#)VdGS#uA;Ik8jmRc@#8a$u_TDhHqZA^ZL8x&I#11&$Ypol(lu`I(KO7TteW&1Zp;bUS2c z;%df9S8TWaDfXKr5!bZ08ovJ-xyh*G#PWfj%5P^L<+`)^2Wm{KNxoqax?|b+XZww+ z`sB~%>=Yb*Ja@s=R#Z_**$cq#_IxpVfGC@C*+WD(=X<=s)E-2`>6W^*bFxet!=4Cz zG(XD2WYpZvd%KvQIX5_cnU62L;`c|&<3=1XePljCD_FTQQn9|lWKVC1nhQc2)?+TnYsye|Cq`SVMAb;gS5cbD+_t4e1h zQ&<9_R~A@N_KDx#seVfPJM;#DxkU!7DI*mM$mi8zb4|?>naszFkpNwGSHa70J6?-`Uw2vbxIV0IF3D&CQAb8fIyTu@On50csbRyM4kb z4jtt$8AP;(Z(js)Q;e2~iqDXu33-(kbvmgk?P8tWLoh!N&PQwO>u00ixLkybhS6Gl zA_0-`Pwhfk?oSK9PUXntBloBKpzr2VV!ziY5rzw_Ymrx`4`Nq{RTh*S6~juL2b$sL z8*+|P;AO1qa<=ym3aV$|RDK47M`waJ=lluU^kg)Wb#eLk#~e>!{n8atB`FGuXPTN^ zFz~{+y~`?UYr%*6{We|M9ceV9@^dKcl?Lv8igFsQ)=Ede(i<}G)0ELjSvsr}qs*BM zi&)y#zOyK}`}t%v03SOB;7@p_X0hr|O6{hn$^_{kn4?ISC3CIi2*oN{o3gB$A{x{s zd6Qu-JeKm06FM0GUHkUX#g+g=%>cb?e$u?p8NmG?bj0F1m8z5;vZcm+u0~~#rt0}bH-IDi6zpsqOgE2nM%_PM$zmOWSF__BNc?^egC*H&4iKOIZ zAJK?QJ-fLm2#dkT6RF!s3DJ;`si|4gWX^)v*fVYC)TT=om+MpAiN?Mp`@{0QspsUi zwVZdJ>!HdQ{eb>gG5y(5fPQgD)OJX@#QDt$gK~cka~ny}3W+o==+dGc5roQ;DFDU)KWkxo4`rG>i>9^kL zMA^suTx{EFTfnvODEk0y3YpOjPxsOI_4`WM;WUi&FK*D^r=#NxO!?^Q3INVQGkNA) zFp4}uMf~cnu1OzaspTUO zHE1u?Fd$S2$(9<}XZlVZ1ynbNy?;0$NmMQHonuD6_r3y zUESj3-P`SAYFbWJ$kBz4(4OOQm1O7thg>Y(>OBWXhfRd= zwaq~?5s;=P(|MIq+*&I$9R{kZBs;BAHu6c(>Sh1oj51pmlrIw}QvMokAu@2*LdKL{ zvL`g05j3W_xoz1Onp<1%x>ViN|02T^AFa*A5a4D%P(cWPlGJ&gOWA5ozHGbK{&l{( zmo_5&^$ZC}f)&n)vD(NEr2f~w8oW$VnX z#jeLd%6VyKmZIXc3@);J3m+a(!G}}3#dhz7(@;shxmCruV?WXpw3x>kq&x4Y8}%gEoWQbCa(?8vouFF%i+{b3;Pb!lL#(M{GwD-1=_^-17ov z3|P)fE1X;IiS_WlA<@Z-C`)leRVYF(;I%S>bD5?2ZC-M8^vm*qQvJl#w_>SeBGcS* z$TkBGz1|TiO(uq(!}_S6;E&^=aA%fmC{rO~d5@DxLJ++fMp1e!9uz6KCoaoLD>pk} z`uaQ{C#OVwy!UHIH?n^#6}&6%9`pVr(6e?wY&$Wa+nO{0bhX{RzH}xqmCFc!k*W8W z%r);*5talEe-P236TXa#`|4%1!glAir|A#HHM6a%FNs#yT*`n?;$NCpr_ksj9a|S@e_l!=~vITo1sLR5Qd>7y68d5c|I!1=l z>AQYL>6GV0WJ)%>Z`@N9qa1iN08wjetr!trPnU#;)$=D8pf4`-O7#W3#_XOKd^Ymi zosytPDk>tE))CxMO(Xo}g3nwSgQ8ZJW|MY~9%A(9b;X;UV(Vr3H>Ja+e2zIn>e3I%?|Yfu5dp8j%^*?u@1 zGbj`{#pm}NG4{A#Lyeu`M|XShIBzn8K)cM)Ot*D*@q;23Rj2au!2-co-cl)5^MRtS zu2@lPj3$37P_*S^LHoQ0DHh0Q?=|>wKWZWf7aC!}E7!NTJIit?fyWRgmznjg$<-#>zVpKMnz?2RII!xJ6bWzGSB_Y zioM=f+SoW{>Gbo*zTdR0jWQ;D3&l& z#kO}gOAd^rC3w_($s$&i#qorl4Uq9Y`hB3jB=P9I_7-YLipWdEq|Rn~%X+JB2-U31 z3=|9rpgF(#`T3TNccU8fTmo4J9803P<=STUz5P_Ok&*#64k2FaWhwvuV7l3fxRl=9 z;w*2)cRdp!kCRsG5f=b*L(*Gz_9{W_ZU^=(N5(Qg@r zhd=4+RR(w!MjQ%RRAZmv_G~a!B=hR<#eM1Xmg{S~k*mL>!v4i8W8*K;-RJ}yzg(uZ z&yW4S-~L^{o9iBpGDBE>@1xh#M;1xXGaUlP%^q-dBgHuJFUb~YkM;=S2zRarP&SUV ziUldNyw05?PwoujdI#k7721rx&#c`HYM9M&s$EU>tL8~St zLPD8G#*v)o&mF%NQ+55rEwJL8o1Udi_3ww@jRuTTYHObK2s?C>>zn=lIQ#Fauqo)?w=nCBEbFg&mNO4J|O!0rH417Ps`MK zwU9Vd?RGQN{r!%2`_@9PW1&t`r>u@%a{5VjMmW!$7Sz?%{KXrI>KAV$(qHUW+Z%qd zTNSD+E5C+;mW$WAemAp{E;T*3TGA_p z#5|abO0pjOEp6J9GazC)_WaX*g{M7)F3AtiY~9SPOd%BeaPRD2vV4_VD@H=>9(dB? zDyDe|N!POr?|WolT>1OEvCmA;uXH9pOMdd#BVauIfAeKPIuLCoo7%HC`~CZOyOzK7 zt1)!L7r+~-ri*F8dp?K#XoXt~U9zXTb62n;nz8r^rY~43&#E{m$H&LhG2ZK__Th`2 z@blXj$7T#=afB&psYPB~Q05ph?ZX@_*Rak*M5c$Eo0)BOe{el{!>CH>lILWPtGU)+ zn$i!C%rjFfIY&*>d8~BhW(Hf2ixV@7A7g@~N6N`JiS_R}hOt1P^y~rl+S;+w@}Q|LZmx+uB6QJBzfZ)Eu}IgGdVVfz(r#*P7PQ6h2sbr1 z_bu5c(s9rh59Vh~3E0m_pT`QN5oTg^5P^A}lMHZr)F04DP?nN~9M0FLpx_fONi_e# zcAuS>Qe%2HdomqrVnUst@0di{VSI0)CrAIhvBUE8ERimJ?S01s#=Tt|`ZqOdUc?;F zq38Yj5dC6#xab+=?4%D2zSdFWn0sq2DB~vqA_RE^GQdA9vAnEAe}a87Vn=XjGf&`X z37dc@=)~p;1d4@yue|B0<5vb71lUYU7p~$r_95i@lr2Lhh6<9+L<6>zWzryaE~d~k z_C8zW0RITp9VD-qR05)RDMU((>~89@6H~qq@>iL+x+l1 z0pXel-dz`jMaiAcpxO4T9nDU}<3Mt(YZXR(CfiJgKL8)*O(Bd7v&^zOD{ z#8Jh5UCD|0iBZWO<)HIew2H$X13!y#pi%KSk8mf-d8u0`th`sb%g8i8nJ$qv&#v_j zT%vC3-zCV+5B9@QDTZMi7DsWHUc35E zX&S1oe!M(X@Cxdt=8dTo*Gwi^kHQ4I?c^e`D3W_+niY4=b#8lkXfCj^Z{9{SJ5puU z{cJ1k*6{}A1&}dnghUPfm^HvJG~rH^t%Bj}0?8x!go(FF-3PO;l7BHdjG#_kVyC<8%8!WALcV=a>fNM#;qAB#n>D7@D; z4+#eO{DskU|BOhJ!$qwv8wg2a-1{SY&cUs}Vy2f{ zmH-bsxY~52=d@`1e{jKM2afg)-oU9+)Z$`nN9?D@<}Pqy)K+HJ{^+#7XB{-ybQ3Q7 zj^m>p9pTQ|u!>i+;%jX~_wMOs%d>QYUxKh?Ghr(MSRz-u`N)Qt%WwIgN~re0!BF)<~I`2WjdSE6q`&{LGsos8##KoMPBhC}<**4nARio)CPA+8iUOJR;!148| zixlisSk2MYq=Q0egHmzKVN{Ko%Lm`8XP!Gm^h~k+VESb|yiO3O+iF@w&1Ko<&>Kd9 zRgBxLAcHU|hvvJ|(o$;S`9K^H+6?4gV5g(|9YjHUrXR?1KD*=5ODpwmW40p}O=l1o z$OEP_uk=O(@+{e{g3HDMt=i zVmhw7KZeP}hi};}$bbJAcp*nh58+5QRjl)i^AnS!noD4?d97@{P968guxgMBTSA>_ z7Xt}6W_KRp^N*Kmvk_0tsO+I6wH)P$nyb4WkB*K8)E)gN{t+Oc=sVb=r=j#$lF@F{ zEpm%%ZR}0@!Ib%kJz^QU2tD8zk~_917qJ8PaX^Is< z8p-MN#|Yt3rj3m~3~4>{LZSeQE?$o=Xb?b^Y-Q`&)7sJaeQO@M$A1qp#PK(` z0%nvI6y?kX!Q2JTGXb*Pt9(GR{P}(1^78T%&u~4xsNceXmn#%rGm8K{-8biTvc2JF074Ko$UCL!)Q$lNl=WRO2WLt&C?vpXhn$ zB%1~0>BCwX-KtMqiGtQM?k7rdljDKtF(pgb*{MaTBWo@Vjqg1L64vSRMY4X^ZxGze z8AxNNH2eyO4Qy#SoY3*WQ=42TR*r~mS`svQ4s%UuugHSTt)J@)jwUrTk;!SL1<&2x zv$5BQ%CBMEBnk2sLXoW!6MDti(3Zt{eM#j}$k$#MA3hH9!L*j~@7IMlFHTAb9Gm00 ze~XNa=?}hp{(R_GRf>;R&VW{9LpQMJ*({zr2TeeSp4S}rPXIzPXu=LGX5a@rdC-%8 z232$CUJ0!Gf`iql26irZYzOUUFv?m^a_^PTP7}?!^ei?F3$o8Pt*5kxb8Mc9y^3XE zqKeGOgL}K<@kXRyMN|}zg)V(+>rAOJ%lV|I9@=)=RllE3j;9sVkqJ6jsvP1 zg7PcHRch@FoZ{W?a7m*tQ2P61`h1VQZBZ?lkzqEgC&L}Fx%t7Bg&3D5R9`V4 zC6O}oYjX-G$&=a=Z_N;Lvuj(U**&4ANTu_;2lQ{cUs`@PUi@R3-AniP)t3jXA1am) z&6Ea)1f<*gFt&F|@JVYa!XTpK3YK2Y>LU=;Ph|-NAx@(*Tfb4&?U?ez1^XiVLOn<} z!Qy3I{k4q#l%!E2*U1%H5?7OgMEA!Knzn)?yg|TZ$|dkk6e~FrVz9F=55?Ci>ZU}qpg<4JrU zp2u)_TuE)I>DA0IK}+JI+7;q{im%5cN|hz zO4j9N=KEtJK;$?vBxjbs5~&KcFd$#Dq2^C*i&(bn@&*1p1<|Ig&pXR&sPKf{-7lsi z4bT>lhiZ9K3J`U3B!-e3IxyM*Ho<1JbQhe5N?W!rP}u#x15?4GXU=T-2V=L@?j*3- z<7uaelqBto$F^N3B%IGr&dFVMt)Et|DhOO`E(-mt*n22;n9VAj9u{=$X(-wB#Y_8- zGFIF*`~BPJPt}CsSgUAD?Wr51R7R%e#})8NVs7z#wRsLn1>dZD`s`bkKOY)HN3o0? z*UMZ^>lu?Ov-T7+{1Rz4BwN>!7mOy>pmbl~bsA%x5gpO6sX7>A#+= z{o(bXev3JqKvA?xkH8|Da|&~e4JyZMO#(gSEsrz~E3CghFxrk{MJVL3?E2L?<>j3J zi?+88t8!htM{()0FcwNl8X!t{hXo2qcb9ZZ_cRt=3Ift1;H0}75s;Q{CNSylW^(Si z_TI|cd;iXLzUy~Bu510V04H<4@AE$QeUCAoG4S8KcD{CPcBzx;{?AvFmiycI9Pl@r z`Txy<%!Ljm`wD@~a&Hw1{{C%$en~OdB z-=mPRSNZ1$#rgM-HoU-hN~sl^E6~AHivoZtk{~0J@GzKt+}Drelhz9F63V1t4&z19 zw{<;Beu#4>Mkd|GptWbD%R=GF6Xg;Y7)P94)>r{xRM+6GTZl|!d#aun_V)BhXi6Mvv*=48j!I!O3^ZTOLUtBzIRnP5|xKWWelV%vixWBbS z4$&TRSri%^aOuD)L0(xoaVIRJ7c6>!AxOt&a&{IdeK+G&h&b*fpqvlaI{pFi5Aguf zEi|nWr2s45)Y{y)PGFi3cI8fvrKaCMxs&j?X8$Ev=TlHv0-(umVTo;Pv1?-zjb;#a zo*qzQ*X@4*DUtJDl!%V2LYU7|oMzU6N0mH5sR)$j{&1Gd#Aj~1#|+q__!6$nT}X@QAM=UTr2}Q zu=NMt&1$zUJO2B^$L`An;M*+jAW^1p#p|(UMc#8t#Cl0)gq3kgC2L+T)Iq!Bimp&B z+@an`m^)x59xhtSXj#+V7H z=2vI7`cSS)=0nlQ1sVxySs-0p_aq`D?qc1YgK5czQc_K|BL0+lY&SXkvcTj9^48k} zo-9Md8Crpn&nj%lRNx<&$~V7M?wa^PTcw`n_-k3VF&f?iP_aUA+?E!x~M8 zGcweoa2lYSNXsH6TL^yV@!72qB+?7emF^Nf7cBTLQ0fo{EqstgOicR~==bAXOH=Cg z{x!K6?~`*iYcpd(Xn;q%3Mt*K39ac!)FcM`K4fJD!E!6G;zWjrhp9vX?t$F;R8~*0ykAU8YKuF4 zc=V!ZNMjy_LTPbE_3UlH-|Xx)7it=R7f8XES#1*Nk@*}bMgTC{^gdDF|7UBzXQQBJ zlXMgTx(=8qMpgX!-k~12=3SzdAs3cqo3E7r<;s-SlM3f1 zmj=pE1EYO?Pkns6rmQ|Nj8+!e762vtAx`Vl7AaR6JZ*;fzjmGKfi5HaGjLjS#2Wns z@+#ghBUV}VcK7e`(mvukM4Q|QKv-6kK}dkFB}(LKtBV*o@xerzkq-9Z81M17n*h~3`Xo`?V{7-}ok#iBh<0`1CranA@ukG2fWJY))ffI=*vC)w060cxxKF$U z4hhS}nx8L-^X~}p|DcljA4ITAiirxT{bUW`W!r+;XwQhtHc#gm-uZPqa2_x$2|4Ds zwEy3fdBet0w}S;f51We{zZPFN<=;O|@iBQ!`QhMg*ppNB{R|>)mqHOw!)Fp7TUM5d& z)pAc8aoJ80pSfZ;vcyw&Yc51eD7@98uQen~?!}X0Du};O%Bm`OqUClJ!&_eju$%VL z-F+^dpZzP&tJ19^{5N`f2|X2RG;V8CMT0q}L3w|u>lT>6PSXuoFcx0+^%LKOLvvV| z3zl*qr4%C(lg^~{)?$Y+;0vE>P9Fey^*VQ8$=P^Zjh3Fav%&$j?C%l`o5f(EpcGJ4 z?<(@;vA+tDW3$12_0NJwRdUrE0%;a1Z^%)L!cnrp>@{(6ZpUXLZ)GynisWII#_nuA zWXhcky!QMm8oYK^gaXun>HK(wsn}{nM&-M#oU&UO%y~XaQ^#SMxqwyQkHD4hN^ z@83<@rlI%%vw*$18a(;2gR6Vtyw;n=0EZIbQKZ5s0kmH}n}Pm{7oD4d{>*HM6xST2 zp0BTM_g0^B>rPOcsnRj{xrkm}pU?jzI?O^w%p_9e5-AlzNC@a3V@QIdy?_5b5(%C{ zMXps6)OFOQR%UN8y&eoSYpM& zH7xY8QGz-i<~WQq7lJhKQ7BL{%F5nU_W{`&a#&P6u+M-wFx*y`W=#~tfBW{$ioc&b zmy(>kxZ~B;Nl$z4-j9xihAH$?hPQXs#UO|wvzd0_zdx0=01z(^j{?}Xbb9MR7*TuG zrf1x+Cx+ zdom<88Z^Jp@3@-X*~LI2X#0uR&R6NV?FUWgE%PNIt9Or>e?IpZPCK>pqc1;Crn!y& zOAGLBdxFj~w4_pRCYIG>3}~Q?BgeN?pkuhpF|Rj*jOvbm%y;AR*`?u%qLzw$TR%YJ zRf9oF1UbedDwo>6fA98HpyY|$+TOO-3{On{US&_gWlEA}EAF{&y#aW$e8M3WPmqS7 zVvS56SpL$)UVw}zHYIi@h>>~+&5Phju}Yl9u&d%hnosG+Am4h^JsSo+y(S{<uf9qDwV2O=XM6rjk@cwq0`TFK2%tjd|1ZB5FTm1&`KapZy7HrIneX7pu zHI#^6+DkSocSlh4xz4V3u=Y7D52gk6n#%*s&9M|1#cuQ<&YFeJMJRQl>jkgOGYYuH zc}K%MY#*4dlbcU8I&JbXOXmekNF6)vlv0IOW`*j^M*509xabP=Q_wcMDN zm|B@ZYPlahhItG^8DTh)Sw=t_%x3?~qx~U!kfE4@&|W1D2CjQlRQ)&D*r}978}H8# zA-xV=-AspnRd;DpJEilZmEv&j*`zmpQKlV`j81GnyB*`wg#U)xc=jD;e`$w&-*uzU zq;I>N73GuhOnu|ad}qqzq@ALb{){C)dpH26rorbRjS>`?w34qt^>@`i4#_New7_N2 ziKQy`_IHhbyb=Uj2f=YCQx)!=-NxiX{$8_XC_I^BVX4rT`ItEUhnjF7= z+ZN~N>$|nVgfQC8ejQ937aoT=dJLg#T|h44U%N)XB+j3}662G{Lm3*-H`FZNr(sjV z>AIbSZRG$xhjT|sFw~f?V4f@ug(m~cad{D?1`zvF`sUp7a;9jXW_-KgvDlFNt|;uC zGVk%48XJ>-jr*^v0v-l$Q&YTrCM*BMD1d|}DKSldqo4O#+W0`3WmOyO?3(+r2eVZ@ zc`igTam?wO`&rN2+I~G}t5pWaHC2M)gS44G@oklOhgF`R4OLox{em=Ne$mM2&~19y z!O#u)b05MPBl{Yt{p)}Kx1f!eSu1DMx6tvAD%SPCu&ysL3Q$h0d{Of}lcvVD!rOKN z_h@6d40Z`=S|yri!l=Y!HL~18WxQ_uEWtR{B`Ki8U~tMLdMzcECHya;8GHnzS(28H z9}v&Mob2`?++9#z9+eWE_vLw9#sC|V7L2Sl_Yu4A4L>-pdc(9;Ue0f)+03nBH$@Et zgq5HilhwOh&6aHw+l=LhMf>C zv*Ysv6@GaEb-^k6bbThM$|nTjACe*5v~)2T7vw=c8xco7UisEryyX8-cL_fgF*?*o zV_~@xGUypQqWng~L5-N9R`4T(OX5S(&hhB`Nt(W1Bl?3CaZQ&wQDD8498t~9a=3Ab z;Q`EM!OsZj2TSackFvwP9_BT8rfB4c6S^97>>OO2=cAUN&?-873|0&>0O2cUX=EWW zN4XSnLTd2b!9m21;ip8&Fs_sy6_VmZkf~ln2v8()#^q|3k;$;(em5yFIjU!Z_E57& zyj_46P}k)Fv}mLArq7IBP5=8y$E_)74EKSW;W%D1<_@}@q0d+P;lmZHvaR^?tMW0|8ruY*4X!&arVSM4gI>;3snH+tShs}Bv1{#>Zl z10C8R7z_>adbn(XAlNG(z8uMMSALB}v#F(M;eo2CfWbK>AV=m0(-=c~OnNZi9tS5T zLFyB9ccmcUBe;Qg7mlby|M(feiL`*3@$q=P$LDC7K&ew#Mv{2{yhez}aRJXAG*EnuaAMdCV3iEWN%szG1Xc|s}9PJ-m zIa&xqd?@1r$SUJ-^*S|8(mm!MiIAFgA80nXw5s|DXrV4%WM2R?)qTAK3!r%HTVr_& zI%kmZxT!cu$vl7l0gybqm7^e&UjLyUD$dfu0=^^V6#_b;U@DE5dmh0i$C+S~Xgoh+ z0~h%j?@RWby$g@+_Na;E`AxunSYoS@yYAjBme*2{li-z> zpPxTmWD+9R37oKkGS&9#sx)MC2GSstv9k@2*{5m2(gzG`?AThS!+fZUSEy|liS5`<^S*VpE8l9#$kJ6>1jveL536MK(-Zla%b;i{?|+0DMbD#vl$X;pB3>jRa_dVA|_ zD>x^8g^Hpx#$lK$q2nH?+VdpwsX~I~>{bMd0QgE4HS@0zAWs1?N1sYGTa*NL;lg`^ z8!R$XYTrFx`?LqC#Kl9F1Um$F()#Um>qXql@74WXQWGcTlaOlcAUY83bjp~3vYHMX z#DbZUm4!uREMiW=$;Anq1-djCi*)&dqTLa4I76ghooJ&ER%0ApnJN*S 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 } string My_Process_call::call_all_sections(string cmd) { - char buffer[PATH_MAX]; + char buffer[PATH_MAX] = {0}; std::string result = ""; FILE* pipe = popen(cmd.c_str(), "r"); if (!pipe) throw std::runtime_error("popen() failed!"); diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 342bbf6..ea99067 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -94,18 +94,19 @@ void MainWindow::settings(){ this->change_security_login(); this->set_active_boot_second(); this->download_local_cfg(); - //this->download_globl_cfg(); + this->download_globl_cfg(); } else{ boxWidgetAll->set_sensitive(false); btnLoad->set_sensitive(false); - boxSave->set_sensitive(false); + btnSave->set_sensitive(false); imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); info_status_app("boxInfoMessError"); lblWarning->set_text(_("The program must be run as root")); this->set_active_boot_second(); + this->fill_in_view(); } this->event(); } @@ -159,8 +160,6 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path&, const Gtk::TreeM } } void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&) { - // TODO - // Баг auto selection_kernel = treeViewKernel->get_selection(); auto selection_OTT = treeViewOTT->get_selection(); selection_kernel->unselect_all(); @@ -687,7 +686,7 @@ void MainWindow::wrapper_save_global_cfg() { bool MainWindow::save_global_cfg() { bool flag_no_save = true; - obj_save.set_data_local(map_cmd_selection); + obj_save.set_data_local(map_local_cmd_selection); obj_save.set_data_global(map_global_cmd_selection); obj_save.set_data_gui(map_cmd_selection); obj_save.set_vec_params(vec_param_names); @@ -710,8 +709,8 @@ void MainWindow::wrapper_save_local_cfg() { bool MainWindow::save_local_cfg() { bool flag_no_save = true; - obj_save.set_data_local(map_cmd_selection); - obj_save.set_data_global(map_local_cmd_selection); + obj_save.set_data_local(map_local_cmd_selection); + obj_save.set_data_global(map_global_cmd_selection); obj_save.set_data_gui(map_cmd_selection); obj_save.set_vec_params(vec_param_names); obj_save.save("boot", "system"); @@ -755,10 +754,12 @@ void MainWindow::set_data_cfg() { void MainWindow::download_globl_cfg() { this->load_template(&map_global_cmd_selection, "global"); + info_warning_error(1); } void MainWindow::download_local_cfg() { this->load_template(&map_local_cmd_selection, "system"); + info_warning_error(0); } void MainWindow::load_template(std::map* map_temp, string str_load) { @@ -784,7 +785,6 @@ void MainWindow::load_template(std::map* map_temp, string str_lo this->set_entry(entryKernel, *map_temp, "GRUB_CMDLINE_LINUX"); this->set_entry(entryIPT, *map_temp, "GRUB_TERMINAL_INPUT"); this->set_entry(entryOTT, *map_temp, "GRUB_TERMINAL_OUTPUT"); - info_warning_error(1); map_cmd_selection = *map_temp; } @@ -820,8 +820,6 @@ void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtrset_row(list_store, size, name, false); } - // TODO: - // Баг string value = map_cmd[key]; Utils::str_replace_all(value, "\"", ""); vector vec_params = Utils::split(value, ' '); @@ -842,7 +840,7 @@ void MainWindow::set_row(Glib::RefPtr &list_store, int size, std } void MainWindow::synopsis_show() { - string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name + " &"; + string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; if (geteuid() == 0) { string response_user = getlogin(); cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 8d7cbd6..20eb89c 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -663,6 +663,9 @@ specified priority -1 True True + + +

@@ -776,6 +779,9 @@ specified priority True True + + + @@ -889,6 +895,9 @@ specified priority True True + + + @@ -1206,6 +1215,15 @@ specified priority
+ + + + + + + + + False Внимание! From 312789af174681d48997c30a6f6fe53d5a707105 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 11:48:13 +0600 Subject: [PATCH 072/110] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20beta=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/load.cc | 31 ++++++-------- source/load.h | 4 +- source/save.cc | 14 +++--- source/ubl-settings-bootloader.cc | 71 +++++++++++++++---------------- source/ubl-settings-bootloader.h | 7 ++- ubl-settings-bootloader.desktop | 10 ++--- ubl-settings-bootloader.glade | 4 +- ubl-settings-bootloader_ru.po | 7 ++- 8 files changed, 74 insertions(+), 74 deletions(-) diff --git a/source/load.cc b/source/load.cc index 87f438a..e336dce 100644 --- a/source/load.cc +++ b/source/load.cc @@ -1,30 +1,27 @@ #include "load.h" namespace Lib_Load{ - void Load::set_sections(vector vec_sections){ - this->vec_sections = vec_sections; + void Load::set_sections(string sections){ + this->sections = sections; } map& Load::get_load_data(std::map &map_temp, string str_flag_load) { string cmd = ""; string response = ""; string key = ""; string value = ""; - for (const string §ion: this->vec_sections) { - cmd = "ubconfig --default --source " + str_flag_load + " get " + section; - response = process.call_all_sections(cmd); - vector vec_str_key_value = Utils::split(response, '\n'); - for (const string ¶m: vec_str_key_value) { - if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) { - if (param.find("=") != std::string::npos) { - size_t index = param.find("="); - key = param.substr(0, index); - value = param.substr(index + 1, param.length()); - Utils::str_replace_all(value, " \"",""); - Utils::str_replace_all(value, "\"",""); - map_temp[key] = value; - } + cmd = "ubconfig --default --source " + str_flag_load + " get " + this->sections; + response = process.call_all_sections(cmd); + vector vec_str_key_value = Utils::split(response, '\n'); + for (const string ¶m: vec_str_key_value) { + if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) { + if (param.find("=") != std::string::npos) { + size_t index = param.find("="); + key = param.substr(0, index); + value = param.substr(index + 1, param.length()); + Utils::str_replace_all(value, " \"",""); + Utils::str_replace_all(value, "\"",""); + map_temp[key] = value; } - } } return map_temp; diff --git a/source/load.h b/source/load.h index 0ec7cac..d7eb473 100644 --- a/source/load.h +++ b/source/load.h @@ -6,10 +6,10 @@ namespace Lib_Load{ class Load { private: - vector vec_sections; + string sections; My_Process::My_Process_call process = My_Process::My_Process_call(); public: - void set_sections(vector vec_sections); + void set_sections(string sections); map& get_load_data(std::map &map_temp, string str_flag_load); }; diff --git a/source/save.cc b/source/save.cc index 4f7044c..e9617e8 100644 --- a/source/save.cc +++ b/source/save.cc @@ -34,27 +34,31 @@ bool Save::check_save(string flag_save, string key_name) { } iter_map_data = (*map_gui).find(key_name); iter_map_data_old = (*map_data_old).find(key_name); + //cout << (*map_local)[key_name] << " || " << (*map_gui)[key_name] << " || " << (*map_global)[key_name] << endl; if ((*map_local).find(key_name) != (*map_local).end() && (*map_global).find(key_name) != (*map_global).end()) { - if (iter_map_data->second != iter_map_data_old->second) { + if ((*map_local)[key_name] != (*map_global)[key_name]) { + //cout << 1 << endl; return true; } - else { - return false; - } } - else if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { + if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { + //cout << 3 << endl; return true; } else if (iter_map_data->second != iter_map_data_old->second) { + //cout << 4 << endl; return true; } else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { + //cout << 5 << endl; return false; } else if (iter_map_data->second == iter_map_data_old->second) { + //cout << 6 << endl; return false; } else { + //cout << 7 << endl; return true; } return true; diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index ea99067..d596e64 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -416,13 +416,13 @@ void MainWindow::localization(){ aboutWindows->set_website_label(_("Project Home Page")); lblInfoHead->set_text(_("Configuring system boot parameters")); lblHeaderName->set_text(_("ubl-settings-bootloader")); - aboutWindows->set_comments(_("Setting bootloader")); + aboutWindows->set_comments(_("System boot")); aboutWindows->set_website_label(_("Project Home Page")); lblInfoCommand->set_text(_("Command line parameters:")); lblInfoCommand1->set_text(_("Command line parameters:")); lblInfoCommand2->set_text(_("Command line parameters:")); lblInfoDefaultDonw->set_text(_("Load default:")); - lblInfoSeconds->set_text(_("Seconds")); + lblInfoSeconds->set_text(_("seconds")); lblLoadMenu->set_text(_("Download menu")); lblInfoInputTerminal->set_text(_("Terminal for input")); lblInfoOutputTerminal->set_text(_("Terminal for output")); @@ -452,18 +452,18 @@ void MainWindow::localization(){ cmbDefaultDonw->append(_("Last Successful Download")); } -vector MainWindow::get_setting_entry_all(string key, std::map &map_temp) { +vector MainWindow::get_setting_entry_all(string key, std::map * map_temp) { vector vec_params; std::map :: iterator iter_map_data; - iter_map_data = map_temp.find(key); - if (iter_map_data != map_temp.end()) { + iter_map_data = (*map_temp).find(key); + if (iter_map_data != (*map_temp).end()) { string value = iter_map_data->second; if (value.length() != 0) { Utils::str_replace_all(value, "\"", ""); vec_params = Utils::split(value, ' '); Utils::str_replace_all(value, " ", ", "); Utils::str_remove(value, ","); - map_temp[key] = value; + (*map_temp)[key] = value; } } return vec_params; @@ -663,63 +663,55 @@ void MainWindow::set_active_boot_second() { void MainWindow::wrapper_save_all_cfg() { this->set_data_cfg(); - bool _flag_save_global = this->save_global_cfg(); - bool _flag_save_local = this->save_local_cfg(); + bool _flag_save_global = this->save_template("boot", "global");; + bool _flag_save_local = this->save_template("boot", "system"); if (_flag_save_global && _flag_save_local) { this->info_warning_error(5); } else { info_warning_error(4); } + map_global_cmd_selection = map_cmd_selection; + map_local_cmd_selection = map_cmd_selection; } void MainWindow::wrapper_save_global_cfg() { this->set_data_cfg(); - if (this->save_global_cfg()) { + if (this->save_template("boot", "global")) { this->info_warning_error(5); } else { info_warning_error(3); } + map_global_cmd_selection = map_cmd_selection; + } -bool MainWindow::save_global_cfg() { +bool MainWindow::save_template(string section, string flag_save) { bool flag_no_save = true; obj_save.set_data_local(map_local_cmd_selection); obj_save.set_data_global(map_global_cmd_selection); obj_save.set_data_gui(map_cmd_selection); obj_save.set_vec_params(vec_param_names); - obj_save.save("boot", "global"); + obj_save.save(section, flag_save); vector obj_vec_error = obj_save.get_error(); flag_no_save = obj_save.get_state_save(); - map_global_cmd_selection = map_cmd_selection; return flag_no_save; } void MainWindow::wrapper_save_local_cfg() { this->set_data_cfg(); - if (this->save_local_cfg()) { + if (this->save_template("boot", "system")) { this->info_warning_error(5); } else { info_warning_error(2); } -} - -bool MainWindow::save_local_cfg() { - bool flag_no_save = true; - obj_save.set_data_local(map_local_cmd_selection); - obj_save.set_data_global(map_global_cmd_selection); - obj_save.set_data_gui(map_cmd_selection); - obj_save.set_vec_params(vec_param_names); - obj_save.save("boot", "system"); - vector obj_vec_error = obj_save.get_error(); - flag_no_save = obj_save.get_state_save(); map_local_cmd_selection = map_cmd_selection; - return flag_no_save; } + void MainWindow::set_data_cfg() { string str_flags = entryKernel->get_text(); Utils::str_remove(str_flags, ","); @@ -755,26 +747,28 @@ void MainWindow::set_data_cfg() { void MainWindow::download_globl_cfg() { this->load_template(&map_global_cmd_selection, "global"); info_warning_error(1); + map_cmd_selection = map_global_cmd_selection; } void MainWindow::download_local_cfg() { this->load_template(&map_local_cmd_selection, "system"); info_warning_error(0); + map_cmd_selection = map_local_cmd_selection; } void MainWindow::load_template(std::map* map_temp, string str_load) { - this->init_dict(); + this->init_dict(str_load); entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - vector vec_sections; - vec_sections.push_back("boot"); - obj_load.set_sections(vec_sections); + string sections; + sections = "boot"; + obj_load.set_sections(sections); *map_temp = obj_load.get_load_data(*map_temp, str_load); this->get_menu_boot(*map_temp); - this->get_setting_entry_all("GRUB_CMDLINE_LINUX", *map_temp); - this->get_setting_entry_all("GRUB_TERMINAL_INPUT", *map_temp); - this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", *map_temp); + this->get_setting_entry_all("GRUB_CMDLINE_LINUX", map_temp); + this->get_setting_entry_all("GRUB_TERMINAL_INPUT", map_temp); + this->get_setting_entry_all("GRUB_TERMINAL_OUTPUT", map_temp); this->set_row_all(*map_temp, list_store_kernel, vec_Option_kernel, size_kernel, "GRUB_CMDLINE_LINUX"); this->set_row_all(*map_temp, list_store_IPT, vec_Option_IPT, size_IPT, "GRUB_TERMINAL_INPUT"); this->set_row_all(*map_temp, list_store_OTT, vec_Option_OTT, size_OTT, "GRUB_TERMINAL_OUTPUT"); @@ -785,7 +779,6 @@ void MainWindow::load_template(std::map* map_temp, string str_lo this->set_entry(entryKernel, *map_temp, "GRUB_CMDLINE_LINUX"); this->set_entry(entryIPT, *map_temp, "GRUB_TERMINAL_INPUT"); this->set_entry(entryOTT, *map_temp, "GRUB_TERMINAL_OUTPUT"); - map_cmd_selection = *map_temp; } void MainWindow::set_entry(Gtk::Entry* entry , std::map &map_temp, string key) { @@ -801,7 +794,7 @@ void MainWindow::set_entry(Gtk::Entry* entry , std::map &map_tem } -void MainWindow::init_dict() { +void MainWindow::init_dict(string flag_load) { std::map map_cmd_selection_n; map_cmd_selection_n["GRUB_TIMEOUT"] = ""; map_cmd_selection_n["GRUB_CMDLINE_LINUX"] = ""; @@ -812,8 +805,12 @@ void MainWindow::init_dict() { map_cmd_selection_n["GRUB_PASSWORD"] = ""; map_cmd_selection_n["GRUB_DEFAULT"] = ""; map_cmd_selection = map_cmd_selection_n; - map_global_cmd_selection = map_cmd_selection_n; - map_local_cmd_selection = map_cmd_selection_n; + if (flag_load == "global") { + map_global_cmd_selection = map_cmd_selection_n; + } + else if (flag_load == "system") { + map_local_cmd_selection = map_cmd_selection_n; + } } void MainWindow::set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key) { @@ -856,7 +853,7 @@ void MainWindow::info_status_app(string stule) { } void MainWindow::info_warning_error(int mess) { - if (index_error > 0) { + if (obj_process_system.get_count_error() > 0 || obj_process_call.get_count_error() > 0) { info_status_app("boxInfoMessError"); imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); index_error = 0; diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index ede6a38..dc79fc7 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -147,7 +147,7 @@ class MainWindow : public Gtk::ApplicationWindow { void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); - void init_dict(); + void init_dict(string flag_load); void add_CSS(); void show_pass(); void localization(); @@ -164,11 +164,10 @@ class MainWindow : public Gtk::ApplicationWindow { struct Result wrapper_call(string cmd); void log_mess_error(string &cmd); void wrapper_save_all_cfg(); - bool save_local_cfg(); void wrapper_save_local_cfg(); void wrapper_save_global_cfg(); + bool save_template(string section, string flag_save); void view_add_colums(Gtk::TreeView &treeView); - bool save_global_cfg(); vector read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); void download_globl_cfg(); @@ -193,7 +192,7 @@ class MainWindow : public Gtk::ApplicationWindow { void set_password_protec(); void set_entry(Gtk::Entry* entry , std::map &map_temp, string key); void load_template(std::map* map_temp, string str_load); - vector get_setting_entry_all(string key, std::map &map_temp); + vector get_setting_entry_all(string key, std::map * map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); void item_selected_kernel(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&); void item_selected_OTT(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&); diff --git a/ubl-settings-bootloader.desktop b/ubl-settings-bootloader.desktop index b279ca8..6e5f0d7 100644 --- a/ubl-settings-bootloader.desktop +++ b/ubl-settings-bootloader.desktop @@ -1,11 +1,11 @@ [Desktop Entry] Encoding=UTF-8 Name=ubl-settings-bootloader -Name[ru]=Загрузчик -GenericName=Загрузчик -GenericName[ru]=Загрузчик -Comment=ubl-settings-bootloader -Comment[ru]=Загрузчик +Name[ru]=Настройка загрузчика +GenericName=Настройка загрузчика +GenericName[ru]=Настройка загрузчика +Comment=Bootloader setup application +Comment[ru]=Приложение для настройки загрузчика Type=Application Exec=pkexec ubl-settings-bootloader Icon=com.ublinux.ubl-settings-bootloader diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 20eb89c..7943ab0 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -321,9 +321,9 @@ specified priority True True False - 5 + 3 5 - 5 + 3 5 6 6 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 9f561ea..d67001a 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -261,8 +261,11 @@ msgid "Save to global and local configuration" msgstr "Сохранить глобальную и локальную конфигурацию" #: source/ubl-settings-bootloader.cc:293 -msgid "Seconds" -msgstr "Секунд" +msgid "seconds" +msgstr "секунд" + +msgid "System boot" +msgstr "Загрузка системы" msgid "Serial terminal" msgstr "Последовательный терминал" From fbd143fed93a3649fa3939dd79f649e9e814c2ab Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 12:10:08 +0600 Subject: [PATCH 073/110] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D0=BF=D0=BE=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/load.cc | 9 +++++++++ source/load.h | 3 +++ source/save.cc | 12 ++++++++++++ source/save.h | 3 +++ source/ubl-settings-bootloader.cc | 5 +++-- source/ubl-settings-bootloader.h | 1 - 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/source/load.cc b/source/load.cc index e336dce..e8a361b 100644 --- a/source/load.cc +++ b/source/load.cc @@ -4,6 +4,12 @@ namespace Lib_Load{ void Load::set_sections(string sections){ this->sections = sections; } + void Load::set_count_error(int count_error) { + process.set_count_error(count_error); + } + string Load::get_cmd_error() { + return process.get_cmd_error(); + } map& Load::get_load_data(std::map &map_temp, string str_flag_load) { string cmd = ""; string response = ""; @@ -26,5 +32,8 @@ namespace Lib_Load{ } return map_temp; } + int Load::get_count_error() { + return process.get_count_error(); + } } \ No newline at end of file diff --git a/source/load.h b/source/load.h index d7eb473..26aaf96 100644 --- a/source/load.h +++ b/source/load.h @@ -10,6 +10,9 @@ namespace Lib_Load{ My_Process::My_Process_call process = My_Process::My_Process_call(); public: void set_sections(string sections); + int get_count_error(); + void set_count_error(int count_error); + string get_cmd_error(); map& get_load_data(std::map &map_temp, string str_flag_load); }; diff --git a/source/save.cc b/source/save.cc index e9617e8..0c753f1 100644 --- a/source/save.cc +++ b/source/save.cc @@ -64,6 +64,18 @@ bool Save::check_save(string flag_save, string key_name) { return true; } +int Save::get_count_error() { + return process.get_count_error(); +} + +string Save::get_cmd_error() { + return process.get_cmd_error(); +} + +void Save::set_count_error(int count_error) { + process.set_count_error(count_error); +} + void Save::set_vec_params(vector& vec_param_names) { this->vec_param_names = &vec_param_names; } diff --git a/source/save.h b/source/save.h index e26f4ca..1730a80 100644 --- a/source/save.h +++ b/source/save.h @@ -19,6 +19,9 @@ public: void set_data_gui(std::map &map_gui); bool check_save(string flag_save, string key_name); bool get_state_save(); + int get_count_error(); + string get_cmd_error(); + void set_count_error(int count_error); void set_vec_params(vector& vec_param_names); void save(string sections, string str_flag_save) ; vector get_error(); diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index d596e64..c0bad27 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -853,10 +853,9 @@ void MainWindow::info_status_app(string stule) { } void MainWindow::info_warning_error(int mess) { - if (obj_process_system.get_count_error() > 0 || obj_process_call.get_count_error() > 0) { + if (obj_load.get_count_error() > 0 || obj_save.get_count_error() > 0) { info_status_app("boxInfoMessError"); imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); - index_error = 0; string mess_error = ""; if (mess == 0) { mess_error = string(_("Local configuration reading error")) + str_cmd_error; @@ -879,6 +878,8 @@ void MainWindow::info_warning_error(int mess) { lblWarning->set_text(mess_error); } str_cmd_error = ""; + obj_load.set_count_error(0); + obj_save.set_count_error(0); } else { info_status_app("boxInfoMessOK"); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index dc79fc7..ac0ca76 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -131,7 +131,6 @@ class MainWindow : public Gtk::ApplicationWindow { size_t size_kernel = 0; size_t size_IPT = 0; size_t size_OTT = 0; - int index_error = 0; Glib::RefPtr boxInfo; string str_cmd_error = ""; template From 14ba70c4b5f129b197e6e6053e85c1420ab23d80 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 12:33:29 +0600 Subject: [PATCH 074/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D1=8B=D1=82=D0=B8=D0=B5=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B8=D0=B7=20=D1=84=D0=BE=D0=BA=D1=83=D1=81=D0=B0=20?= =?UTF-8?q?entry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 6 ++++++ source/ubl-settings-bootloader.h | 1 + 2 files changed, 7 insertions(+) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index c0bad27..a1d91b0 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -592,9 +592,15 @@ void MainWindow::event(){ entryIPT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_IPT)); entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); } + this->signal_delete_event().connect(sigc::mem_fun(*this, &MainWindow::gui_exit)); chbLoadVariantSelectionTimer->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_active_boot_second)); } +bool MainWindow::gui_exit(GdkEventAny*) { + exit(1); + return true; +} + void MainWindow::change_security_login() { int index = chbSecurityLogin->get_active_row_number(); if (index == 0) { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index ac0ca76..eab3aa6 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -146,6 +146,7 @@ class MainWindow : public Gtk::ApplicationWindow { void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); void get_builder(); + bool gui_exit(GdkEventAny*); void init_dict(string flag_load); void add_CSS(); void show_pass(); From 027cd6b2582150ca1a144b10795809e3bac27cb9 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 14:21:14 +0600 Subject: [PATCH 075/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=BE=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/save.cc | 52 ++++++++++++++++++++++++++----- source/save.h | 1 + source/ubl-settings-bootloader.cc | 14 +++++++++ 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/source/save.cc b/source/save.cc index 0c753f1..584e7ea 100644 --- a/source/save.cc +++ b/source/save.cc @@ -34,31 +34,24 @@ bool Save::check_save(string flag_save, string key_name) { } iter_map_data = (*map_gui).find(key_name); iter_map_data_old = (*map_data_old).find(key_name); - //cout << (*map_local)[key_name] << " || " << (*map_gui)[key_name] << " || " << (*map_global)[key_name] << endl; if ((*map_local).find(key_name) != (*map_local).end() && (*map_global).find(key_name) != (*map_global).end()) { if ((*map_local)[key_name] != (*map_global)[key_name]) { - //cout << 1 << endl; return true; } } if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) { - //cout << 3 << endl; return true; } else if (iter_map_data->second != iter_map_data_old->second) { - //cout << 4 << endl; return true; } else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) { - //cout << 5 << endl; return false; } else if (iter_map_data->second == iter_map_data_old->second) { - //cout << 6 << endl; return false; } else { - //cout << 7 << endl; return true; } return true; @@ -114,4 +107,49 @@ void Save::save(string sections, string str_flag_save) { } } +void Save::save_all(string sections, string str_flag_save) { + string key = ""; + string value = ""; + string cmd_all = "ubconfig --target " + str_flag_save + " set " + sections; + size_t len_start_cmd_all = cmd_all.length(); + string str_error = ""; + this->flag_no_save = true; + string cmd = ""; + string cmd_remove = ""; + for (const auto &key: *vec_param_names) { + if (map_gui->find(key) != map_gui->end()) { + value = (*map_gui)[key]; + if (this->check_save(str_flag_save, key)) { + if (value.length() != 0) { + cmd_all += " " + key + "=\"" + value + "\""; + } + else if (value.length() == 0) { + cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key; + } + else { + cmd = ""; + } + if (cmd.length() != 0) { + process.call(cmd, ""); + this->flag_no_save = false; + str_error = process.get_cmd_error(); + if (str_error.length() != 0) { + this->vec_errors.push_back(str_error); + str_error = ""; + } + } + } + } + + } + if (len_start_cmd_all != cmd_all.length()) { + process.call(cmd, ""); + this->flag_no_save = false; + str_error = process.get_cmd_error(); + if (str_error.length() != 0) { + this->vec_errors.push_back(str_error); + str_error = ""; + } + } +} } diff --git a/source/save.h b/source/save.h index 1730a80..bdc2f56 100644 --- a/source/save.h +++ b/source/save.h @@ -21,6 +21,7 @@ public: bool get_state_save(); int get_count_error(); string get_cmd_error(); + void save_all(string sections, string str_flag_save); void set_count_error(int count_error); void set_vec_params(vector& vec_param_names); void save(string sections, string str_flag_save) ; diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index a1d91b0..871bb8c 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -472,10 +472,14 @@ vector MainWindow::get_setting_entry_all(string key, std::map get_text().length() == 0) { info_status_app("boxInfoMessError"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); lblWarning->set_text(_("Enter your password")); boxSave->set_sensitive(false); } else { + info_status_app("boxInfoMessOK"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + lblWarning->set_text(""); boxSave->set_sensitive(true); string key = entryPasswordProtecc->get_text(); if (key != "************") { @@ -488,10 +492,14 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { bool MainWindow::focus_out_txt_login(GdkEventFocus*) { if (entrySecurityLogin->get_text().length() == 0) { info_status_app("boxInfoMessError"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); lblWarning->set_text(_("Enter login")); boxSave->set_sensitive(false); } else { + info_status_app("boxInfoMessOK"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + lblWarning->set_text(""); map_cmd_selection["GRUB_USER"] = entrySecurityLogin->get_text(); boxSave->set_sensitive(true); } @@ -607,6 +615,9 @@ void MainWindow::change_security_login() { entrySecurityLogin->set_sensitive(false); entrySecurityLogin->set_text(""); boxSave->set_sensitive(true); + info_status_app("boxInfoMessOK"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + lblWarning->set_text(""); } else if (index == 1) { entrySecurityLogin->set_sensitive(true); @@ -643,6 +654,9 @@ void MainWindow::change_password_protecc() { entryPasswordProtecc->set_sensitive(false); entryPasswordProtecc->set_text(""); boxSave->set_sensitive(true); + info_status_app("boxInfoMessOK"); + imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + lblWarning->set_text(""); } else if (index == 1) { entryPasswordProtecc->set_sensitive(true); From 0640350e21264860439ec576728e9c485e01b330 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 14:48:09 +0600 Subject: [PATCH 076/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 4 ++-- ubl-settings-bootloader_ru.po | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 871bb8c..e9aaac7 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -442,9 +442,9 @@ void MainWindow::localization(){ lblSecurityLogin->set_text(_("Load menu user name:")); lblPasswordProtec->set_text(_("Load menu user password:")); chbSecurityLogin->append(_("Not available")); - chbSecurityLogin->append(_("Mine")); + chbSecurityLogin->append(_("Manually")); chbPasswordProtecc->append(_("Not available")); - chbPasswordProtecc->append(_("Mine")); + chbPasswordProtecc->append(_("Manually")); cmbDownloadMode->append(_("Loading animation with the magazine")); cmbDownloadMode->append(_("Loading animation without a magazine")); cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index d67001a..c0f2c54 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -264,6 +264,9 @@ msgstr "Сохранить глобальную и локальную конфи msgid "seconds" msgstr "секунд" +msgid "Manually" +msgstr "Вручную" + msgid "System boot" msgstr "Загрузка системы" From de3e1a2ce0f25da3b8a82fa7d47b8adf367720b4 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 15:06:40 +0600 Subject: [PATCH 077/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 2 +- ubl-settings-bootloader_ru.po | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index e9aaac7..1a1c8eb 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -449,7 +449,7 @@ void MainWindow::localization(){ cmbDownloadMode->append(_("Loading animation without a magazine")); cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); cmbDownloadMode->append(_("Lack of loading animation with the output of the abbreviated log")); - cmbDefaultDonw->append(_("Last Successful Download")); + cmbDefaultDonw->append(_("Last successful upload")); } vector MainWindow::get_setting_entry_all(string key, std::map * map_temp) { diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index c0f2c54..c297109 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -118,7 +118,7 @@ msgstr "Загрузка без текстовых сообщений" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" -msgid "Last Successful Download" +msgid "Last successful upload" msgstr "Последняя удачная загрузка" #: source/ubl-settings-bootloader.cc:443 From 027285842d5346ba86ec5ec90546931c5b0d3bce Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 7 Apr 2023 16:50:33 +0600 Subject: [PATCH 078/110] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=20.pot=20=D0=B8=20po=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.pot | 161 +++++++++++++++++------- ubl-settings-bootloader_ru.po | 227 ++++++++++++++++++++-------------- 2 files changed, 250 insertions(+), 138 deletions(-) diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index 0d475e2..204ccc7 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -6,38 +6,39 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-27 15:17+0600\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"Project-Id-Version: ubl-settings-bootloader 1.0\n" +"Report-Msgid-Bugs-To: info@ublinux.com\n" +"POT-Creation-Date: 2023-01-01 00:00+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: UBLinux Team \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/ubl-settings-bootloader.cc:301 +#: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "" -#: source/ubl-settings-bootloader.cc:199 +#: source/ubl-settings-bootloader.cc:337 source/ubl-settings-bootloader.cc:199 msgid "Active" msgstr "" -#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 -#: source/ubl-settings-bootloader.cc:291 +#: source/ubl-settings-bootloader.cc:421 source/ubl-settings-bootloader.cc:422 +#: source/ubl-settings-bootloader.cc:423 source/ubl-settings-bootloader.cc:289 +#: source/ubl-settings-bootloader.cc:290 source/ubl-settings-bootloader.cc:291 msgid "Command line parameters:" msgstr "" -#: source/ubl-settings-bootloader.cc:285 +#: source/ubl-settings-bootloader.cc:417 source/ubl-settings-bootloader.cc:285 msgid "Configuring system boot parameters" msgstr "" msgid "Configuring the boot loader settings" msgstr "" -#: source/ubl-settings-bootloader.cc:279 +#: source/ubl-settings-bootloader.cc:411 source/ubl-settings-bootloader.cc:279 msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" @@ -45,7 +46,7 @@ msgstr "" msgid "Default download" msgstr "" -#: source/ubl-settings-bootloader.cc:201 +#: source/ubl-settings-bootloader.cc:339 source/ubl-settings-bootloader.cc:201 msgid "Description" msgstr "" @@ -67,7 +68,7 @@ msgstr "" msgid "Disable local APIC" msgstr "" -#: source/ubl-settings-bootloader.cc:294 +#: source/ubl-settings-bootloader.cc:426 source/ubl-settings-bootloader.cc:294 msgid "Download menu" msgstr "" @@ -77,7 +78,15 @@ msgstr "" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "" -#: source/ubl-settings-bootloader.cc:443 +#: source/ubl-settings-bootloader.cc:496 +msgid "Enter login" +msgstr "" + +#: source/ubl-settings-bootloader.cc:476 +msgid "Enter your password" +msgstr "" + +#: source/ubl-settings-bootloader.cc:897 source/ubl-settings-bootloader.cc:443 msgid "Error saved local and global configuration" msgstr "" @@ -93,23 +102,23 @@ msgid "" " -V, --version\t Show package version\n" msgstr "" -#: source/ubl-settings-bootloader.cc:455 +#: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" msgstr "" -#: source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.cc:885 source/ubl-settings-bootloader.cc:431 msgid "Global configuration read error" msgstr "" -#: source/ubl-settings-bootloader.cc:461 +#: source/ubl-settings-bootloader.cc:917 source/ubl-settings-bootloader.cc:461 msgid "Global configuration successfully written" msgstr "" -#: source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.cc:893 source/ubl-settings-bootloader.cc:439 msgid "Global configuration write error" msgstr "" -#: source/ubl-settings-bootloader.cc:300 +#: source/ubl-settings-bootloader.cc:430 source/ubl-settings-bootloader.cc:300 msgid "Help" msgstr "" @@ -117,50 +126,93 @@ msgstr "" msgid "Input terminal" msgstr "" -#: source/ubl-settings-bootloader.cc:308 +#: source/ubl-settings-bootloader.cc:451 +msgid "Lack of loading animation with the output of the abbreviated log" +msgstr "" + +msgid "Last Successful Download" +msgstr "" + +#: source/ubl-settings-bootloader.cc:452 +msgid "Last successful upload" +msgstr "" + +#: source/ubl-settings-bootloader.cc:438 source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "" -#: source/ubl-settings-bootloader.cc:305 +#: source/ubl-settings-bootloader.cc:424 +msgid "Load default:" +msgstr "" + +#: source/ubl-settings-bootloader.cc:435 source/ubl-settings-bootloader.cc:305 msgid "Load global configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:306 +#: source/ubl-settings-bootloader.cc:436 source/ubl-settings-bootloader.cc:306 msgid "Load local configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:298 +#: source/ubl-settings-bootloader.cc:442 +msgid "Load menu user name:" +msgstr "" + +#: source/ubl-settings-bootloader.cc:443 +msgid "Load menu user password:" +msgstr "" + +#: source/ubl-settings-bootloader.cc:429 source/ubl-settings-bootloader.cc:298 msgid "Load option timer" msgstr "" -#: source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.cc:441 +msgid "Load screen display mode:" +msgstr "" + +#: source/ubl-settings-bootloader.cc:448 +msgid "Loading animation with the magazine" +msgstr "" + +#: source/ubl-settings-bootloader.cc:449 +msgid "Loading animation without a magazine" +msgstr "" + +#: source/ubl-settings-bootloader.cc:908 source/ubl-settings-bootloader.cc:452 msgid "Local configuration downloaded successfully" msgstr "" -#: source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.cc:881 source/ubl-settings-bootloader.cc:427 msgid "Local configuration reading error" msgstr "" -#: source/ubl-settings-bootloader.cc:458 +#: source/ubl-settings-bootloader.cc:914 source/ubl-settings-bootloader.cc:458 msgid "Local configuration successfully written" msgstr "" -#: source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.cc:889 source/ubl-settings-bootloader.cc:435 msgid "Local configuration write error" msgstr "" +#: source/ubl-settings-bootloader.cc:445 source/ubl-settings-bootloader.cc:447 +msgid "Manually" +msgstr "" + msgid "Maximum performance, power management" msgstr "" -#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 -#: source/ubl-settings-bootloader.cc:367 +#: source/ubl-settings-bootloader.cc:444 source/ubl-settings-bootloader.cc:446 +msgid "Not available" +msgstr "" + +#: source/ubl-settings-bootloader.cc:923 source/ubl-settings-bootloader.cc:341 +#: source/ubl-settings-bootloader.cc:354 source/ubl-settings-bootloader.cc:367 msgid "Nothing to save!" msgstr "" msgid "Open Firmware Console" msgstr "" -#: source/ubl-settings-bootloader.cc:200 +#: source/ubl-settings-bootloader.cc:338 source/ubl-settings-bootloader.cc:200 msgid "Option" msgstr "" @@ -183,23 +235,24 @@ msgstr "" msgid "Prevents the processor from going into a deep sleep state" msgstr "" +#: source/ubl-settings-bootloader.cc:416 source/ubl-settings-bootloader.cc:420 #: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 msgid "Project Home Page" msgstr "" -#: source/ubl-settings-bootloader.cc:307 +#: source/ubl-settings-bootloader.cc:437 source/ubl-settings-bootloader.cc:307 msgid "Save" msgstr "" -#: source/ubl-settings-bootloader.cc:304 +#: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 msgid "Save global configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:303 +#: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 msgid "Save local configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:302 +#: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 msgid "Save to global and local configuration" msgstr "" @@ -220,15 +273,27 @@ msgstr "" msgid "Single User Mode" msgstr "" -#: source/ubl-settings-bootloader.cc:464 +#: source/ubl-settings-bootloader.cc:920 source/ubl-settings-bootloader.cc:464 msgid "Successfully saved local and global configuration" msgstr "" +#: source/ubl-settings-bootloader.cc:419 +msgid "System boot" +msgstr "" + +#: source/ubl-settings-bootloader.cc:427 +msgid "Terminal for input" +msgstr "" + +#: source/ubl-settings-bootloader.cc:428 +msgid "Terminal for output" +msgstr "" + #: source/ubl-settings-bootloader.cc:299 msgid "The last selection will become the default boot choice" msgstr "" -#: source/ubl-settings-bootloader.cc:94 +#: source/ubl-settings-bootloader.cc:107 source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" msgstr "" @@ -238,6 +303,10 @@ msgstr "" msgid "USB Keyboard (HID Boot protocol)" msgstr "" +#: source/ubl-settings-bootloader.cc:440 +msgid "User name to enter boot configuration editing mode" +msgstr "" + msgid "VGA text output (Coreboot)" msgstr "" @@ -259,11 +328,11 @@ msgstr "" msgid "gfxterm (Output in graphical mode)" msgstr "" -#: source/ubl-settings-bootloader.cc:282 +#: source/ubl-settings-bootloader.cc:414 source/ubl-settings-bootloader.cc:282 msgid "https://wiki.ublinux.com" msgstr "" -#: source/ubl-settings-bootloader.cc:400 +#: source/ubl-settings-bootloader.cc:860 source/ubl-settings-bootloader.cc:400 msgid "" "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" msgstr "" @@ -296,6 +365,10 @@ msgstr "" msgid "quiet (Downloading without text messages)" msgstr "" +#: source/ubl-settings-bootloader.cc:425 +msgid "seconds" +msgstr "" + msgid "serial (Serial terminal)" msgstr "" @@ -310,12 +383,13 @@ msgstr "" msgid "splash (Show welcome window)" msgstr "" -#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 -#: source/ubl-settings-bootloader.cc:309 +#: source/ubl-settings-bootloader.cc:413 source/ubl-settings-bootloader.cc:418 +#: source/ubl-settings-bootloader.cc:439 source/ubl-settings-bootloader.cc:281 +#: source/ubl-settings-bootloader.cc:286 source/ubl-settings-bootloader.cc:309 msgid "ubl-settings-bootloader" msgstr "" -#: source/ubl-settings-bootloader.cc:547 +#: source/ubl-settings-bootloader.cc:947 source/ubl-settings-bootloader.cc:547 msgid "ubl-settings-bootloader version: " msgstr "" @@ -325,5 +399,6 @@ msgstr "" msgid "vga_text (Text output VGA (Coreboot))" msgstr "" -msgid "Last Successful Download" +#: source/ubl-settings-bootloader.cc:450 +msgid "Нет анимации загрузки, полный журнал" msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index c297109..13b4dbc 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ubl-settings-bootloader 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-27 15:17+0600\n" +"POT-Creation-Date: 2023-04-07 16:46+0600\n" "PO-Revision-Date: 2020-02-22 23:28+0600\n" "Last-Translator: ublinux \n" "Language-Team: Russian - UBLinux Team \n" @@ -16,77 +16,37 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Enter login" -msgstr "Введите логин" - -msgid "Enter your password" -msgstr "Введите пароль" - -msgid "Mine" -msgstr "Свой" - -msgid "Disabled" -msgstr "Отключён" - -msgid "Default" -msgstr "По умолчанию" - -msgid "Loading animation with the magazine" -msgstr "Анимация загрузки с журналом" - -msgid "Loading animation without a magazine" -msgstr "Анимация загрузки без журнала" - -msgid "No loading animation, full log" -msgstr "Отсутствие анимации загрузки с выводом журнала" - -msgid "Lack of loading animation with the output of the abbreviated log" -msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" - -msgid "Load menu user name:" -msgstr "Имя пользователя меню загрузки:" - -msgid "Not available" -msgstr "Отсутствует" - -msgid "Load default:" -msgstr "Загрузка по умолчанию:" - -msgid "User name to enter boot configuration editing mode" -msgstr "Имя пользователя для входа в режим редактирования конфигурации загрузки" - -msgid "Load menu user password:" -msgstr "Пароль пользователя меню загрузки:" - -#: source/ubl-settings-bootloader.cc:301 +#: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "О программе" -#: source/ubl-settings-bootloader.cc:199 +#: source/ubl-settings-bootloader.cc:337 source/ubl-settings-bootloader.cc:199 msgid "Active" msgstr "Активно" -#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 -#: source/ubl-settings-bootloader.cc:291 +#: source/ubl-settings-bootloader.cc:421 source/ubl-settings-bootloader.cc:422 +#: source/ubl-settings-bootloader.cc:423 source/ubl-settings-bootloader.cc:289 +#: source/ubl-settings-bootloader.cc:290 source/ubl-settings-bootloader.cc:291 msgid "Command line parameters:" msgstr "Параметры командной строки:" -#: source/ubl-settings-bootloader.cc:285 +#: source/ubl-settings-bootloader.cc:417 source/ubl-settings-bootloader.cc:285 msgid "Configuring system boot parameters" msgstr "Настройка параметров загрузки системы" msgid "Configuring the boot loader settings" msgstr "Настройка параметров загрузчика системы" -#: source/ubl-settings-bootloader.cc:279 +#: source/ubl-settings-bootloader.cc:411 source/ubl-settings-bootloader.cc:279 msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" #: source/ubl-settings-bootloader.cc:292 -msgid "Load screen display mode:" -msgstr "Режим отображения экрана загрузки:" +#, fuzzy +msgid "Default download" +msgstr "По умолчанию" -#: source/ubl-settings-bootloader.cc:201 +#: source/ubl-settings-bootloader.cc:339 source/ubl-settings-bootloader.cc:201 msgid "Description" msgstr "Описание" @@ -108,7 +68,7 @@ msgstr "Отключить выбор и загрузку ядром драйв msgid "Disable local APIC" msgstr "Отключить локальный APIC" -#: source/ubl-settings-bootloader.cc:294 +#: source/ubl-settings-bootloader.cc:426 source/ubl-settings-bootloader.cc:294 msgid "Download menu" msgstr "Меню загрузки" @@ -118,10 +78,15 @@ msgstr "Загрузка без текстовых сообщений" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" -msgid "Last successful upload" -msgstr "Последняя удачная загрузка" +#: source/ubl-settings-bootloader.cc:496 +msgid "Enter login" +msgstr "Введите логин" -#: source/ubl-settings-bootloader.cc:443 +#: source/ubl-settings-bootloader.cc:476 +msgid "Enter your password" +msgstr "Введите пароль" + +#: source/ubl-settings-bootloader.cc:897 source/ubl-settings-bootloader.cc:443 #, fuzzy msgid "Error saved local and global configuration" msgstr "Успешно записаны локальная и глобальная конфигурация" @@ -144,80 +109,119 @@ msgstr "" " -h, --help\t Показать параметры справки\n" " -V, --version\t Показать версию пакета\n" -#: source/ubl-settings-bootloader.cc:455 +#: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" msgstr "Успешно загружена глобальная конфигурация" -#: source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.cc:885 source/ubl-settings-bootloader.cc:431 msgid "Global configuration read error" msgstr "Ошибка чтения глобальной конфигурации" -#: source/ubl-settings-bootloader.cc:461 +#: source/ubl-settings-bootloader.cc:917 source/ubl-settings-bootloader.cc:461 msgid "Global configuration successfully written" msgstr "Успешно записана глобальная конфигурация" -#: source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.cc:893 source/ubl-settings-bootloader.cc:439 msgid "Global configuration write error" msgstr "Ошибка записи глобальной конфигурации" -#: source/ubl-settings-bootloader.cc:300 +#: source/ubl-settings-bootloader.cc:430 source/ubl-settings-bootloader.cc:300 msgid "Help" msgstr "Справка" #: source/ubl-settings-bootloader.cc:295 #, fuzzy -msgid "Terminal for input" -msgstr "Терминал для ввода" +msgid "Input terminal" +msgstr "Терминал для вывода" + +#: source/ubl-settings-bootloader.cc:451 +msgid "Lack of loading animation with the output of the abbreviated log" +msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" -#: source/ubl-settings-bootloader.cc:295 #, fuzzy -msgid "Terminal for output" -msgstr "Терминал для вывода" +msgid "Last Successful Download" +msgstr "Последняя удачная загрузка" + +#: source/ubl-settings-bootloader.cc:452 +msgid "Last successful upload" +msgstr "Последняя удачная загрузка" -#: source/ubl-settings-bootloader.cc:308 +#: source/ubl-settings-bootloader.cc:438 source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "Загрузить" -#: source/ubl-settings-bootloader.cc:305 +#: source/ubl-settings-bootloader.cc:424 +msgid "Load default:" +msgstr "Загрузка по умолчанию:" + +#: source/ubl-settings-bootloader.cc:435 source/ubl-settings-bootloader.cc:305 msgid "Load global configuration" msgstr "Загрузить глобальную конфигурацию" -#: source/ubl-settings-bootloader.cc:306 +#: source/ubl-settings-bootloader.cc:436 source/ubl-settings-bootloader.cc:306 msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" -#: source/ubl-settings-bootloader.cc:298 +#: source/ubl-settings-bootloader.cc:442 +msgid "Load menu user name:" +msgstr "Имя пользователя меню загрузки:" + +#: source/ubl-settings-bootloader.cc:443 +msgid "Load menu user password:" +msgstr "Пароль пользователя меню загрузки:" + +#: source/ubl-settings-bootloader.cc:429 source/ubl-settings-bootloader.cc:298 msgid "Load option timer" msgstr "Таймер выбора варианта загрузки" -#: source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.cc:441 +msgid "Load screen display mode:" +msgstr "Режим отображения экрана загрузки:" + +#: source/ubl-settings-bootloader.cc:448 +msgid "Loading animation with the magazine" +msgstr "Анимация загрузки с журналом" + +#: source/ubl-settings-bootloader.cc:449 +msgid "Loading animation without a magazine" +msgstr "Анимация загрузки без журнала" + +#: source/ubl-settings-bootloader.cc:908 source/ubl-settings-bootloader.cc:452 msgid "Local configuration downloaded successfully" msgstr "Успешно загружена локальная конфигурация" -#: source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.cc:881 source/ubl-settings-bootloader.cc:427 msgid "Local configuration reading error" msgstr "Ошибка чтения локальной конфигурации" -#: source/ubl-settings-bootloader.cc:458 +#: source/ubl-settings-bootloader.cc:914 source/ubl-settings-bootloader.cc:458 msgid "Local configuration successfully written" msgstr "Успешно записана локальная конфигурация" -#: source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.cc:889 source/ubl-settings-bootloader.cc:435 msgid "Local configuration write error" msgstr "Ошибка записи локальной конфигурации" +#: source/ubl-settings-bootloader.cc:445 source/ubl-settings-bootloader.cc:447 +msgid "Manually" +msgstr "Вручную" + msgid "Maximum performance, power management" msgstr "Максимальная производительность, управление питанием" -#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 -#: source/ubl-settings-bootloader.cc:367 +#: source/ubl-settings-bootloader.cc:444 source/ubl-settings-bootloader.cc:446 +msgid "Not available" +msgstr "Отсутствует" + +#: source/ubl-settings-bootloader.cc:923 source/ubl-settings-bootloader.cc:341 +#: source/ubl-settings-bootloader.cc:354 source/ubl-settings-bootloader.cc:367 msgid "Nothing to save!" msgstr "Нечего сохранять!" msgid "Open Firmware Console" msgstr "Консоль Open Firmware" -#: source/ubl-settings-bootloader.cc:200 +#: source/ubl-settings-bootloader.cc:338 source/ubl-settings-bootloader.cc:200 msgid "Option" msgstr "Опция" @@ -240,36 +244,32 @@ msgstr "Параметры, передаваемые ядру" msgid "Prevents the processor from going into a deep sleep state" msgstr "Предотвращает переход процессора в состояние глубокого сна" +#: source/ubl-settings-bootloader.cc:416 source/ubl-settings-bootloader.cc:420 #: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 msgid "Project Home Page" msgstr "Домашняя страница проекта" -#: source/ubl-settings-bootloader.cc:307 +#: source/ubl-settings-bootloader.cc:437 source/ubl-settings-bootloader.cc:307 msgid "Save" msgstr "Сохранить" -#: source/ubl-settings-bootloader.cc:304 +#: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 msgid "Save global configuration" msgstr "Сохранить глобальную конфигурацию" -#: source/ubl-settings-bootloader.cc:303 +#: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 msgid "Save local configuration" msgstr "Сохранить локальную конфигурацию" -#: source/ubl-settings-bootloader.cc:302 +#: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 msgid "Save to global and local configuration" msgstr "Сохранить глобальную и локальную конфигурацию" #: source/ubl-settings-bootloader.cc:293 -msgid "seconds" +#, fuzzy +msgid "Seconds" msgstr "секунд" -msgid "Manually" -msgstr "Вручную" - -msgid "System boot" -msgstr "Загрузка системы" - msgid "Serial terminal" msgstr "Последовательный терминал" @@ -283,15 +283,29 @@ msgstr "Показывать окно приветствия" msgid "Single User Mode" msgstr "Режим одного пользователя" -#: source/ubl-settings-bootloader.cc:464 +#: source/ubl-settings-bootloader.cc:920 source/ubl-settings-bootloader.cc:464 msgid "Successfully saved local and global configuration" msgstr "Успешно записаны локальная и глобальная конфигурация" +#: source/ubl-settings-bootloader.cc:419 +msgid "System boot" +msgstr "Загрузка системы" + +#: source/ubl-settings-bootloader.cc:427 +#, fuzzy +msgid "Terminal for input" +msgstr "Терминал для ввода" + +#: source/ubl-settings-bootloader.cc:428 +#, fuzzy +msgid "Terminal for output" +msgstr "Терминал для вывода" + #: source/ubl-settings-bootloader.cc:299 msgid "The last selection will become the default boot choice" msgstr "Последний выбор станет выбором загрузки по умолчанию" -#: source/ubl-settings-bootloader.cc:94 +#: source/ubl-settings-bootloader.cc:107 source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" msgstr "Программа должна быть запущена с правами суперпользователя!" @@ -301,6 +315,11 @@ msgstr "UBConfig - Загрузка" msgid "USB Keyboard (HID Boot protocol)" msgstr "Клавиатура USB Keyboard (протокол HID Boot)" +#: source/ubl-settings-bootloader.cc:440 +msgid "User name to enter boot configuration editing mode" +msgstr "" +"Имя пользователя для входа в режим редактирования конфигурации загрузки" + msgid "VGA text output (Coreboot)" msgstr "Текстовый вывод VGA (Coreboot)" @@ -324,11 +343,11 @@ msgstr "Консоль (PC BIOS & console EFI)" msgid "gfxterm (Output in graphical mode)" msgstr "gfxterm (Вывод в графическом режиме)" -#: source/ubl-settings-bootloader.cc:282 +#: source/ubl-settings-bootloader.cc:414 source/ubl-settings-bootloader.cc:282 msgid "https://wiki.ublinux.com" msgstr "" -#: source/ubl-settings-bootloader.cc:400 +#: source/ubl-settings-bootloader.cc:860 source/ubl-settings-bootloader.cc:400 msgid "" "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" msgstr "" @@ -366,6 +385,10 @@ msgstr "ofconsole (Консоль Open Firmware)" msgid "quiet (Downloading without text messages)" msgstr "quiet (Загрузка без текстовых сообщений)" +#: source/ubl-settings-bootloader.cc:425 +msgid "seconds" +msgstr "секунд" + msgid "serial (Serial terminal)" msgstr "serial (Последовательный терминал)" @@ -382,12 +405,13 @@ msgstr "" msgid "splash (Show welcome window)" msgstr "splash (Показать окно приветствия)" -#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 -#: source/ubl-settings-bootloader.cc:309 +#: source/ubl-settings-bootloader.cc:413 source/ubl-settings-bootloader.cc:418 +#: source/ubl-settings-bootloader.cc:439 source/ubl-settings-bootloader.cc:281 +#: source/ubl-settings-bootloader.cc:286 source/ubl-settings-bootloader.cc:309 msgid "ubl-settings-bootloader" msgstr "Загрузка системы" -#: source/ubl-settings-bootloader.cc:547 +#: source/ubl-settings-bootloader.cc:947 source/ubl-settings-bootloader.cc:547 msgid "ubl-settings-bootloader version: " msgstr "ubl-settings-bootloader версия: " @@ -396,3 +420,16 @@ msgstr "usb_keyboard (Клавиатура USB Keyboard (protocol HID Boot))" msgid "vga_text (Text output VGA (Coreboot))" msgstr "vga_text (Текстовый вывод VGA (Coreboot))" + +#: source/ubl-settings-bootloader.cc:450 +msgid "Нет анимации загрузки, полный журнал" +msgstr "" + +#~ msgid "Mine" +#~ msgstr "Свой" + +#~ msgid "Disabled" +#~ msgstr "Отключён" + +#~ msgid "No loading animation, full log" +#~ msgstr "Отсутствие анимации загрузки с выводом журнала" From cc08d3dbba9d0738cc1ec3ae25e373344f2811c6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 12 Apr 2023 11:01:19 +0000 Subject: [PATCH 079/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 666d502..85c8e4b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Настройка загрузчика [RU] Утилита для настройки загрузчика -Utility for setting the загрузчика +Utility for setting the bootloader ![alt text](screenshot/screenshot.png) From d54cae5d80bf660add8a571a57bc6e20a92dc86c Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 14 Apr 2023 12:00:40 +0000 Subject: [PATCH 080/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 ++-- ubl-settings-bootloader.pot | 8 ++++---- ubl-settings-bootloader_ru.po | 9 +++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 38cb413..76288d0 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ FILE_VERSION = VERSION.md DEPENDS = /bin/cmake PREFIX ?= /usr PKGNAME = $(MAKEFILE_DIR) -#PKGNAME = ubl-settings-datetime +#PKGNAME = ubl-settings-bootloader default_target: all @@ -24,7 +24,7 @@ all: init build init: @echo "Initialize ..."; \ - sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-datetime.cc; \ + sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-bootloader.cc; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index 204ccc7..d3c66ce 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -1,7 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# Language translations for ubl-settings-bootloader package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-bootloader package. +# UBLinux Team , 2022 # #, fuzzy msgid "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 13b4dbc..36a1c5f 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -1,8 +1,9 @@ -# Russian translations for PACKAGE package. -# Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Automatically generated, 2023. +# Russian translations for ubl-settings-bootloader package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-bootloader package. +# UBLinux Team , 2022 # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: ubl-settings-bootloader 1.0\n" From 2d72e52ffd981a026521eb1e685c4f93dc0ffbdb Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 14 Apr 2023 12:08:59 +0000 Subject: [PATCH 081/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=B4=20polkit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- com.ublinux.pkexec.ubl-settings-bootloader.exec.policy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.ublinux.pkexec.ubl-settings-bootloader.exec.policy b/com.ublinux.pkexec.ubl-settings-bootloader.exec.policy index fd07536..50b1000 100644 --- a/com.ublinux.pkexec.ubl-settings-bootloader.exec.policy +++ b/com.ublinux.pkexec.ubl-settings-bootloader.exec.policy @@ -9,9 +9,9 @@ Run "ubl-settings-bootloader" as root - Запус "Загрузка системы" с правами root + Запуск утилиты "ubl-settings-bootloader" с правами root Authentication is required to run "ubl-settings-bootloader" - Требуется авторизация для запуска "Загрузка системы" с правами root + Требуется авторизация для запуска утилиты "ubl-settings-bootloader" с правами root auth_admin auth_admin From 6549b28a3b423b71c74959adbccb2e0373dcb127 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 14 Apr 2023 16:51:53 +0600 Subject: [PATCH 082/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.glade | 47 ++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 7943ab0..aa7a1fc 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -193,7 +193,7 @@ specified priority - 770 + 750 550 False com.ublinux.ubl-settings-bootloader @@ -254,10 +254,33 @@ specified priority 0 + + + True + False + + + 81 + True + False + start + + + -1 + + + + + False + True + 1 + + True True + never in @@ -268,28 +291,6 @@ specified priority True False vertical - - - True - False - - - 81 - True - False - start - - - -1 - - - - - False - True - 0 - - True From 040bce8ec7484a7ff60d0daf89759f657136830d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 17 Apr 2023 16:46:52 +0600 Subject: [PATCH 083/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=20?= =?UTF-8?q?=D0=B8=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 66 +++++++++-------------- source/ubl-settings-bootloader.h | 7 +-- ubl-settings-bootloader.glade | 90 +++++++------------------------ ubl-settings-bootloader_ru.po | 13 +++-- 4 files changed, 56 insertions(+), 120 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 1a1c8eb..ce9b768 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -228,21 +228,19 @@ void MainWindow::set_download_mode() { } void MainWindow::set_security_login() { - int index = chbSecurityLogin->get_active_row_number(); + bool index = chbSecurityLogin->get_active(); string key = ""; - if (index == 0) { + if (index == false) { key = ""; } - else if (index == 1) { + else if (index == true) { key = entrySecurityLogin->get_text(); } - else if (index == -1) { - key = ""; - } map_cmd_selection["GRUB_USER"] = key; } void MainWindow::get_security_login(std::map &map_temp) { + // Todo; std::map :: iterator iter_map_data; iter_map_data = map_temp.find("GRUB_USER"); if (iter_map_data != map_temp.end()) { @@ -268,23 +266,17 @@ void MainWindow::get_security_login(std::map &map_temp) { } void MainWindow::set_password_protec() { - int index = chbPasswordProtecc->get_active_row_number(); + bool index = chbPasswordProtecc->get_active(); string key = ""; - if (index == 0){ + if (index == false){ key = ""; } - else if (index == 1) { + else if (index == true) { key = entryPasswordProtecc->get_text(); } - else if (index == -1) { - key = ""; - } - if (key!= "************") { + if (key != "************") { map_cmd_selection["GRUB_PASSWORD"] = key; } - else { - key = ""; - } } void MainWindow::get_password_protec(std::map &map_temp) { @@ -393,8 +385,6 @@ void MainWindow::get_builder(){ builder->get_widget("imgBG", imgBG); builder->get_widget("overHead", overHead); builder->get_widget("lblDownloadMode", lblDownloadMode); - builder->get_widget("lblSecurityLogin", lblSecurityLogin); - builder->get_widget("lblPasswordProtec", lblPasswordProtec); builder->get_widget("cmbDownloadMode", cmbDownloadMode); builder->get_widget("chbSecurityLogin", chbSecurityLogin); builder->get_widget("chbPasswordProtecc", chbPasswordProtecc); @@ -426,7 +416,7 @@ void MainWindow::localization(){ lblLoadMenu->set_text(_("Download menu")); lblInfoInputTerminal->set_text(_("Terminal for input")); lblInfoOutputTerminal->set_text(_("Terminal for output")); - chbLoadVariantSelectionTimer->set_label(_("Load option timer")); + chbLoadVariantSelectionTimer->set_label(_("Boot selection menu timer")); btnSynopsis->set_label(_("Help")); btnAbout->set_label(_("About")); btnSaveLocalGlob->set_label(_("Save to global and local configuration")); @@ -437,14 +427,14 @@ void MainWindow::localization(){ btnSave->set_label(_("Save")); btnLoad->set_label(_("Load")); this->set_title(_("ubl-settings-bootloader")); - lblSecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); - lblDownloadMode->set_text(_("Load screen display mode:")); - lblSecurityLogin->set_text(_("Load menu user name:")); - lblPasswordProtec->set_text(_("Load menu user password:")); - chbSecurityLogin->append(_("Not available")); - chbSecurityLogin->append(_("Manually")); - chbPasswordProtecc->append(_("Not available")); - chbPasswordProtecc->append(_("Manually")); + // Todo: check + entrySecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); + entryPasswordProtecc->set_tooltip_text(gettext("User password to enter boot configuration edit mode")); + chbSecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); + chbPasswordProtecc->set_tooltip_text(gettext("User password to enter boot configuration edit mode")); + lblDownloadMode->set_text(_("Boot screen display mode:")); + chbSecurityLogin->set_label(_("Boot menu user name:")); + chbPasswordProtecc->set_label(_("Boot menu user password:")); cmbDownloadMode->append(_("Loading animation with the magazine")); cmbDownloadMode->append(_("Loading animation without a magazine")); cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); @@ -587,8 +577,8 @@ void MainWindow::event(){ entryOTT->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_OTT)); entrySecurityLogin->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_login)); entryPasswordProtecc->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_password)); - chbPasswordProtecc->signal_changed().connect([&]() {change_password_protecc();}); - chbSecurityLogin->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::change_security_login)); + chbPasswordProtecc->signal_toggled().connect([&]() {change_password_protecc();}); + chbSecurityLogin->signal_toggled().connect([&]() {change_security_login();}); if (this->check_root() == 0) { Glib::RefPtr treeViewKernelModel = treeViewKernel->get_model(); treeViewKernelModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::item_selected_kernel)); @@ -610,8 +600,8 @@ bool MainWindow::gui_exit(GdkEventAny*) { } void MainWindow::change_security_login() { - int index = chbSecurityLogin->get_active_row_number(); - if (index == 0) { + bool index = chbSecurityLogin->get_active(); + if (index == false) { entrySecurityLogin->set_sensitive(false); entrySecurityLogin->set_text(""); boxSave->set_sensitive(true); @@ -619,16 +609,11 @@ void MainWindow::change_security_login() { imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); } - else if (index == 1) { + else if (index == true) { entrySecurityLogin->set_sensitive(true); entrySecurityLogin->set_text(""); boxSave->set_sensitive(true); } - else { - entrySecurityLogin->set_sensitive(false); - entrySecurityLogin->set_text(""); - boxSave->set_sensitive(true); - } } void MainWindow::get_default_load(std::map &map_temp) { @@ -649,8 +634,9 @@ void MainWindow::get_default_load(std::map &map_temp) { } void MainWindow::change_password_protecc() { - int index = chbPasswordProtecc->get_active_row_number(); - if (index == 0 || index == 2 || index == -1) { + // Todo; + bool index = chbPasswordProtecc->get_active(); + if (index == false) { entryPasswordProtecc->set_sensitive(false); entryPasswordProtecc->set_text(""); boxSave->set_sensitive(true); @@ -658,7 +644,7 @@ void MainWindow::change_password_protecc() { imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); } - else if (index == 1) { + else if (index == true) { entryPasswordProtecc->set_sensitive(true); entryPasswordProtecc->set_text(""); boxSave->set_sensitive(true); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index eab3aa6..aea4d16 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -93,8 +93,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Overlay *overHead; Gtk::ComboBoxText *cmbDefaultDonw; Gtk::ComboBoxText *cmbDownloadMode; - Gtk::ComboBoxText *chbSecurityLogin; - Gtk::ComboBoxText *chbPasswordProtecc; + Gtk::CheckButton *chbSecurityLogin; + Gtk::CheckButton *chbPasswordProtecc; Gtk::Entry *entrySecurityLogin; Gtk::Entry *entryPasswordProtecc; @@ -114,9 +114,6 @@ class MainWindow : public Gtk::ApplicationWindow { std::map map_local_cmd_selection; Gtk::Label *lblDownloadMode; - Gtk::Label *lblSecurityLogin; - Gtk::Label *lblPasswordProtec; - Lib_save::Save obj_save = Lib_save::Save(); Lib_Load::Load obj_load = Lib_Load::Load(); vector vec_param_names; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index aa7a1fc..3f57d18 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1,11 +1,13 @@ - + both True + + False О Программе @@ -318,7 +320,7 @@ specified priority False - Load variant selection timer + Boot selection menu timer True True False @@ -481,20 +483,18 @@ specified priority True False - + + Boot menu user name: True - False - User name to enter boot configuration editing mode - start - 5 + True + False + 2 5 - 5 + 2 5 6 6 - Load menu user name: - start - 0 + True False @@ -502,23 +502,6 @@ specified priority 0 - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - True @@ -548,19 +531,18 @@ specified priority True False - + + Boot menu user password: True - False - start - 5 + True + False + 2 5 - 5 + 2 5 6 6 - Load menu user password: - start - 0 + True False @@ -568,23 +550,6 @@ specified priority 0 - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - True @@ -1202,27 +1167,12 @@ specified priority both True - - - - - - - - - - - - - - - - - + + diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 36a1c5f..95b5c2b 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -164,19 +164,19 @@ msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" #: source/ubl-settings-bootloader.cc:442 -msgid "Load menu user name:" +msgid "Boot menu user name:" msgstr "Имя пользователя меню загрузки:" #: source/ubl-settings-bootloader.cc:443 -msgid "Load menu user password:" +msgid "Boot menu user password:" msgstr "Пароль пользователя меню загрузки:" #: source/ubl-settings-bootloader.cc:429 source/ubl-settings-bootloader.cc:298 -msgid "Load option timer" -msgstr "Таймер выбора варианта загрузки" +msgid "Boot selection menu timer" +msgstr "Таймер меню выбора варианта загрузки" #: source/ubl-settings-bootloader.cc:441 -msgid "Load screen display mode:" +msgid "Boot screen display mode:" msgstr "Режим отображения экрана загрузки:" #: source/ubl-settings-bootloader.cc:448 @@ -316,6 +316,9 @@ msgstr "UBConfig - Загрузка" msgid "USB Keyboard (HID Boot protocol)" msgstr "Клавиатура USB Keyboard (протокол HID Boot)" +msgid "User password to enter boot configuration edit mode" +msgstr "Пароль пользователя для входа в режим редактирования конфигурации загрузки" + #: source/ubl-settings-bootloader.cc:440 msgid "User name to enter boot configuration editing mode" msgstr "" From 416dcc550d7d0aeea40d5facd1b010b7d1165c52 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 17 Apr 2023 16:55:48 +0600 Subject: [PATCH 084/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screenshot/screenshot.png | Bin 147846 -> 126245 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png index 31c16fed34cbb63123839e1d5ba193e9aa0511ac..9f7ddbf8b6c5f3942d64247bc349045868f69348 100644 GIT binary patch literal 126245 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 z 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 literal 147846 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

m~7vKRiSG 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 From 65f13c466237fbd1cf196a1f832fcd28cc87c34d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 20 Apr 2023 16:30:02 +0600 Subject: [PATCH 085/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 1 + source/load.cc | 7 +--- source/load.h | 1 - source/my_cmd.h | 13 ++++++++ source/save.cc | 55 +++++++++++++++---------------- source/save.h | 4 ++- source/ubl-settings-bootloader.cc | 30 +++++++++-------- source/ubl-settings-bootloader.h | 5 +-- 8 files changed, 63 insertions(+), 53 deletions(-) create mode 100644 source/my_cmd.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b698bb7..93b3c4d 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -17,6 +17,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin set(SOURCE_FILES ubl-settings-bootloader.h ubl-settings-bootloader.cc + my_cmd.h save.h save.cc load.h diff --git a/source/load.cc b/source/load.cc index e8a361b..77873dc 100644 --- a/source/load.cc +++ b/source/load.cc @@ -1,21 +1,16 @@ #include "load.h" namespace Lib_Load{ - void Load::set_sections(string sections){ - this->sections = sections; - } void Load::set_count_error(int count_error) { process.set_count_error(count_error); } string Load::get_cmd_error() { return process.get_cmd_error(); } - map& Load::get_load_data(std::map &map_temp, string str_flag_load) { - string cmd = ""; + map& Load::get_load_data(std::map &map_temp, string cmd) { string response = ""; string key = ""; string value = ""; - cmd = "ubconfig --default --source " + str_flag_load + " get " + this->sections; response = process.call_all_sections(cmd); vector vec_str_key_value = Utils::split(response, '\n'); for (const string ¶m: vec_str_key_value) { diff --git a/source/load.h b/source/load.h index 26aaf96..b4d4a38 100644 --- a/source/load.h +++ b/source/load.h @@ -9,7 +9,6 @@ namespace Lib_Load{ string sections; My_Process::My_Process_call process = My_Process::My_Process_call(); public: - void set_sections(string sections); int get_count_error(); void set_count_error(int count_error); string get_cmd_error(); diff --git a/source/my_cmd.h b/source/my_cmd.h new file mode 100644 index 0000000..177897b --- /dev/null +++ b/source/my_cmd.h @@ -0,0 +1,13 @@ +#ifndef CMD_H +#define CMD_H + +#define global_load "ubconfig --default --source global get boot" +#define system_load "ubconfig --default --source system get boot" + + +#define global_save "ubconfig --target global set boot " +#define system_save "ubconfig --target system set boot " +#define global_remove "ubconfig --target global remove boot " +#define system_remove "ubconfig --target system remove boot " + +#endif \ No newline at end of file diff --git a/source/save.cc b/source/save.cc index 584e7ea..1b9949f 100644 --- a/source/save.cc +++ b/source/save.cc @@ -107,49 +107,46 @@ void Save::save(string sections, string str_flag_save) { } } -void Save::save_all(string sections, string str_flag_save) { +void Save::save_one_cmd(string cmd1, string cmd_remove, string str_flag_save) { string key = ""; string value = ""; - string cmd_all = "ubconfig --target " + str_flag_save + " set " + sections; - size_t len_start_cmd_all = cmd_all.length(); - string str_error = ""; - this->flag_no_save = true; string cmd = ""; - string cmd_remove = ""; + this->flag_no_save = true; + cmd = cmd1; + string remove = cmd_remove; for (const auto &key: *vec_param_names) { if (map_gui->find(key) != map_gui->end()) { value = (*map_gui)[key]; if (this->check_save(str_flag_save, key)) { if (value.length() != 0) { - cmd_all += " " + key + "=\"" + value + "\""; + cmd = cmd + key + "=\"" + value + "\" "; } else if (value.length() == 0) { - cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key; - } - else { - cmd = ""; - } - if (cmd.length() != 0) { - process.call(cmd, ""); - this->flag_no_save = false; - str_error = process.get_cmd_error(); - if (str_error.length() != 0) { - this->vec_errors.push_back(str_error); - str_error = ""; - } + remove = remove + key + " "; } + } } - } - if (len_start_cmd_all != cmd_all.length()) { - process.call(cmd, ""); - this->flag_no_save = false; - str_error = process.get_cmd_error(); - if (str_error.length() != 0) { - this->vec_errors.push_back(str_error); - str_error = ""; - } + if (cmd.length() != cmd1.length()) { + this->template_save(cmd); + } + if (cmd_remove.length() != remove.length()) { + this->template_save(remove); } } + +void Save::template_save(string cmd) { + string str_error = ""; + cout << cmd << endl; + process.call(cmd, ""); + this->flag_no_save = false; + str_error = process.get_cmd_error(); + if (str_error.length() != 0) { + this->vec_errors.push_back(str_error); + str_error = ""; + } + +} + } diff --git a/source/save.h b/source/save.h index bdc2f56..40b13a1 100644 --- a/source/save.h +++ b/source/save.h @@ -13,15 +13,17 @@ private: vector* vec_param_names; My_Process::My_Process_system process = My_Process::My_Process_system(); bool flag_no_save; + void template_save(string cmd); public: void set_data_global(std::map &map_global); void set_data_local(std::map &map_local); void set_data_gui(std::map &map_gui); bool check_save(string flag_save, string key_name); bool get_state_save(); + + void save_one_cmd(string cmd1, string cmd_remove, string str_flag_save); int get_count_error(); string get_cmd_error(); - void save_all(string sections, string str_flag_save); void set_count_error(int count_error); void set_vec_params(vector& vec_param_names); void save(string sections, string str_flag_save) ; diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index ce9b768..e89f94a 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -669,8 +669,8 @@ void MainWindow::set_active_boot_second() { void MainWindow::wrapper_save_all_cfg() { this->set_data_cfg(); - bool _flag_save_global = this->save_template("boot", "global");; - bool _flag_save_local = this->save_template("boot", "system"); + bool _flag_save_global = this->save_template(global_save, global_remove , "global"); + bool _flag_save_local = this->save_template(system_save, system_remove , "global"); if (_flag_save_global && _flag_save_local) { this->info_warning_error(5); } @@ -684,7 +684,7 @@ void MainWindow::wrapper_save_all_cfg() { void MainWindow::wrapper_save_global_cfg() { this->set_data_cfg(); - if (this->save_template("boot", "global")) { + if (this->save_template(global_save, global_remove , "global")) { this->info_warning_error(5); } else { @@ -694,13 +694,13 @@ void MainWindow::wrapper_save_global_cfg() { } -bool MainWindow::save_template(string section, string flag_save) { +bool MainWindow::save_template(string cmd, string cmd_remove, string flag_save) { bool flag_no_save = true; obj_save.set_data_local(map_local_cmd_selection); obj_save.set_data_global(map_global_cmd_selection); obj_save.set_data_gui(map_cmd_selection); obj_save.set_vec_params(vec_param_names); - obj_save.save(section, flag_save); + obj_save.save_one_cmd(cmd, cmd_remove ,flag_save); vector obj_vec_error = obj_save.get_error(); flag_no_save = obj_save.get_state_save(); return flag_no_save; @@ -708,7 +708,7 @@ bool MainWindow::save_template(string section, string flag_save) { void MainWindow::wrapper_save_local_cfg() { this->set_data_cfg(); - if (this->save_template("boot", "system")) { + if (this->save_template(system_save, system_remove , "global")) { this->info_warning_error(5); } else { @@ -751,26 +751,28 @@ void MainWindow::set_data_cfg() { } void MainWindow::download_globl_cfg() { - this->load_template(&map_global_cmd_selection, "global"); + this->load_template(&map_global_cmd_selection, global_load); info_warning_error(1); map_cmd_selection = map_global_cmd_selection; } void MainWindow::download_local_cfg() { - this->load_template(&map_local_cmd_selection, "system"); + this->load_template(&map_local_cmd_selection, system_load); info_warning_error(0); map_cmd_selection = map_local_cmd_selection; } -void MainWindow::load_template(std::map* map_temp, string str_load) { - this->init_dict(str_load); +void MainWindow::load_template(std::map* map_temp, string cmd) { + if (cmd.find("system") != string::npos) { + this->init_dict("system"); + } + else { + this->init_dict("global"); + } entryKernel->set_text(""); entryOTT->set_text(""); entryIPT->set_text(""); - string sections; - sections = "boot"; - obj_load.set_sections(sections); - *map_temp = obj_load.get_load_data(*map_temp, str_load); + *map_temp = obj_load.get_load_data(*map_temp, cmd); this->get_menu_boot(*map_temp); this->get_setting_entry_all("GRUB_CMDLINE_LINUX", map_temp); this->get_setting_entry_all("GRUB_TERMINAL_INPUT", map_temp); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index aea4d16..5d4a3ae 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -12,6 +12,7 @@ #include #include #include +#include "my_cmd.h" #include "ubl-util-standard.c" #include "util.h" #include "save.h" @@ -163,7 +164,7 @@ class MainWindow : public Gtk::ApplicationWindow { void wrapper_save_all_cfg(); void wrapper_save_local_cfg(); void wrapper_save_global_cfg(); - bool save_template(string section, string flag_save); + bool save_template(string cmd, string cmd_remove, string flag_save); void view_add_colums(Gtk::TreeView &treeView); vector read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); @@ -188,7 +189,7 @@ class MainWindow : public Gtk::ApplicationWindow { void get_password_protec(std::map &map_temp); void set_password_protec(); void set_entry(Gtk::Entry* entry , std::map &map_temp, string key); - void load_template(std::map* map_temp, string str_load); + void load_template(std::map* map_temp, string cmd); vector get_setting_entry_all(string key, std::map * map_temp); void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove); void item_selected_kernel(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&); From b8c9cf21758ff6c26eda2fbc2b55b24673275861 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 20 Apr 2023 17:46:30 +0600 Subject: [PATCH 086/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20gui.=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=20help?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/main.cc | 20 +++++++++- source/my_cmd.h | 2 + source/ubl-settings-bootloader.cc | 63 +++++++++++++++++++++++++------ source/ubl-settings-bootloader.h | 8 +++- ubl-settings-bootloader.glade | 6 +++ ubl-settings-bootloader_ru.po | 10 +++++ 6 files changed, 94 insertions(+), 15 deletions(-) diff --git a/source/main.cc b/source/main.cc index ba163a9..bc66d05 100644 --- a/source/main.cc +++ b/source/main.cc @@ -66,11 +66,29 @@ void pars_flag(int index_start, int argc, char* argv[]) { cout << version.c_str(); exit(1); } + else if (str_argv == "--lock-help") { + flag_lock_help = true; + } + else if (str_argv == "--lock-save") { + flag_save = true; + flag_save_local = true; + flag_save_global = true; + } + else if (str_argv == "--lock-save-local"){ + flag_save_local = true; + } + else if (str_argv == "--lock-save-global"){ + flag_save_global = true; + } + else if (str_argv == "--lock-load-global"){ + flag_load_global = true; + } else{ if (index_start == 1){ - cout << (_("Argument not recognized\n")) << endl; + g_print(_("Argument not recognized\n")); } } + } } \ No newline at end of file diff --git a/source/my_cmd.h b/source/my_cmd.h index 177897b..268e218 100644 --- a/source/my_cmd.h +++ b/source/my_cmd.h @@ -9,5 +9,7 @@ #define system_save "ubconfig --target system set boot " #define global_remove "ubconfig --target global remove boot " #define system_remove "ubconfig --target system remove boot " +#define open_link "xdg-open " +#define other_user "su -l {} -c \" DISPLAY=$DISPLAY {} \"" #endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index e89f94a..9390c9f 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -10,6 +10,11 @@ string path_resources = "/usr/share/ubl-settings-bootloader"; const string path_img_head_background = "/usr/share/ubl-settings-bootloader/images/logo-background.png"; int socket_ext_id_I = 0; int socket_trd_id_I = 0; +bool flag_save = false; +bool flag_save_local = false; +bool flag_save_global = false; +bool flag_load_global = false; +bool flag_lock_help = false; string version_application = "1.0"; CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) @@ -85,6 +90,7 @@ void MainWindow::settings(){ overHead->add_overlay(*boxWidget); btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); + this->flag_block_gui(); if (this->check_root() == 0) { spbSecond->set_range(1, 60); spbSecond->set_increments(1.0, 1.0); @@ -95,8 +101,6 @@ void MainWindow::settings(){ this->set_active_boot_second(); this->download_local_cfg(); this->download_globl_cfg(); - - } else{ boxWidgetAll->set_sensitive(false); @@ -111,6 +115,29 @@ void MainWindow::settings(){ this->event(); } +void MainWindow::flag_block_gui() { + if (flag_load_global == true) { + btnLoadGlob->set_sensitive(false); + } + if (flag_save_local == true && flag_save_global == true) { + btnSave->set_sensitive(false); + } + if (flag_save == true) { + btnSave->set_sensitive(false); + } + if (flag_save_local == true) { + btnSaveLocal->set_sensitive(false); + btnSaveLocalGlob->set_sensitive(false); + } + if (flag_save_global == true) { + btnSaveGlob->set_sensitive(false); + btnSaveLocalGlob->set_sensitive(false); + } + if (flag_lock_help == true) { + btnSynopsis->set_sensitive(false); + } +} + void MainWindow::fill_in_view() { list_store_kernel = Gtk::ListStore::create(m_columns); list_store_IPT = Gtk::ListStore::create(m_columns); @@ -669,9 +696,15 @@ void MainWindow::set_active_boot_second() { void MainWindow::wrapper_save_all_cfg() { this->set_data_cfg(); - bool _flag_save_global = this->save_template(global_save, global_remove , "global"); - bool _flag_save_local = this->save_template(system_save, system_remove , "global"); - if (_flag_save_global && _flag_save_local) { + bool _flag_save_global1 = true; + bool _flag_save_local1 = true; + if (flag_save_global == true) { + _flag_save_global1 = this->save_template(global_save, global_remove , "global"); + } + if (flag_save_local == true) { + _flag_save_local1 = this->save_template(system_save, system_remove , "system"); + } + if (_flag_save_global1 && _flag_save_local1) { this->info_warning_error(5); } else { @@ -708,7 +741,7 @@ bool MainWindow::save_template(string cmd, string cmd_remove, string flag_save) void MainWindow::wrapper_save_local_cfg() { this->set_data_cfg(); - if (this->save_template(system_save, system_remove , "global")) { + if (this->save_template(system_save, system_remove , "system")) { this->info_warning_error(5); } else { @@ -845,7 +878,7 @@ void MainWindow::set_row(Glib::RefPtr &list_store, int size, std } void MainWindow::synopsis_show() { - string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; + string cmd = open_link + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; if (geteuid() == 0) { string response_user = getlogin(); cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; @@ -935,11 +968,17 @@ void help() { string version = string(_("ubl-settings-bootloader version: ")) + version_application + "\n"; cout << version.c_str(); string help; - help = "GTK settings bootloader for UBLinux\n\n" - "Usage: ubl-settings-bootloader [OPTIONS...]\n" - "Options:\n" - " -h, --help Show this help\n" - " -V, --version Show package version\n"; + help = "GTK settings bootloader for UBLinux\n" + "\n" + "Usage: ubl-settings-bootloader [OPTIONS...]\n" + "Options:\n" + " -h, --help\t Show this help\n" + " -V, --version\t Show package version\n" + " --lock-help Lock utility help\n" + " --lock-save Lock saving local and global configuration\n" + " --lock-save-local Lock save global configuration\n" + " --lock-save-global Lock load global configuration\n" + " --lock-load-global Lock load global configuration\n"; cout << _(help.c_str()); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 5d4a3ae..a50f0b5 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -28,6 +28,11 @@ extern int socket_ext_id_I; extern int socket_trd_id_I; extern const string path_img_head_background; extern string version_application; +extern bool flag_save; +extern bool flag_save_local; +extern bool flag_save_global; +extern bool flag_load_global; +extern bool flag_lock_help; void me_thread(string cmd); class CmdArgParser : public Glib::OptionGroup { @@ -122,8 +127,6 @@ class MainWindow : public Gtk::ApplicationWindow { My_Process::My_Process_call obj_process_call = My_Process::My_Process_call(); bool flag_load = false; bool flag_save_all = false; - bool flag_save_global = false; - bool flag_save_local = false; bool flag_blocked_tree_view = false; bool flag_save_block = false; size_t size_kernel = 0; @@ -169,6 +172,7 @@ class MainWindow : public Gtk::ApplicationWindow { vector read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); void download_globl_cfg(); + void flag_block_gui(); void info_status_app(string stule); bool check_save(string flag_save, string key_name); void info_warning_error(int mess); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 3f57d18..942e4aa 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -629,6 +629,8 @@ specified priority -1 True True + 5 + 5 @@ -745,6 +747,8 @@ specified priority True True + 5 + 5 @@ -861,6 +865,8 @@ specified priority True True + 5 + 5 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 95b5c2b..b73d9bb 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -102,6 +102,11 @@ msgid "" "Options:\n" " -h, --help\t Show this help\n" " -V, --version\t Show package version\n" +" --lock-help Lock utility help\n" +" --lock-save Lock saving local and global configuration\n" +" --lock-save-local Lock save global configuration\n" +" --lock-save-global Lock load global configuration\n" +" --lock-load-global Lock load global configuration\n" msgstr "" "GTK-утилита настройки загрузчика для UBLinux\n" "\n" @@ -109,6 +114,11 @@ msgstr "" "Параметры приложения:\n" " -h, --help\t Показать параметры справки\n" " -V, --version\t Показать версию пакета\n" +" --lock-help Блокировка вызова справки\n" +" --lock-save Блокировка сохранения локальной и глобальной конфигурации\n" +" --lock-save-local Блокировка сохранения локальной конфигурации\n" +" --lock-save-global Блокировка сохранения глобальной конфигурации\n" +" --lock-load-global Блокировка загрузки глобальной конфигурации\n" #: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" From 17f053d5a77017fb96de02b3d0ff25eb1dd1751d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Thu, 20 Apr 2023 17:54:06 +0600 Subject: [PATCH 087/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD,=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 4 ++-- ubl-settings-bootloader.glade | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 9390c9f..d1d4614 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -698,10 +698,10 @@ void MainWindow::wrapper_save_all_cfg() { this->set_data_cfg(); bool _flag_save_global1 = true; bool _flag_save_local1 = true; - if (flag_save_global == true) { + if (flag_save_global == false) { _flag_save_global1 = this->save_template(global_save, global_remove , "global"); } - if (flag_save_local == true) { + if (flag_save_local == false) { _flag_save_local1 = this->save_template(system_save, system_remove , "system"); } if (_flag_save_global1 && _flag_save_local1) { diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 942e4aa..3082b74 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -619,6 +619,8 @@ specified priority 140 True True + 5 + 5 in @@ -629,8 +631,6 @@ specified priority -1 True True - 5 - 5 @@ -738,6 +738,8 @@ specified priority 140 True True + 5 + 5 in @@ -747,8 +749,6 @@ specified priority True True - 5 - 5 @@ -856,6 +856,8 @@ specified priority 140 True True + 5 + 5 in @@ -865,8 +867,6 @@ specified priority True True - 5 - 5 From 8a10a9af3c81b1e25a339b6cee5c6573e2e1dbe6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 21 Apr 2023 14:39:37 +0600 Subject: [PATCH 088/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20webView,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D0=BE=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-bootloader.glade# | 1326 +++++++++++++++++++++++++++++ source/CMakeLists.txt | 7 +- source/my_cmd.h | 6 +- source/ubl-settings-bootloader.cc | 22 +- source/ubl-settings-bootloader.h | 6 + ubl-settings-bootloader.glade | 72 +- ubl-settings-bootloader_ru.po | 3 + 7 files changed, 1421 insertions(+), 21 deletions(-) create mode 100644 #ubl-settings-bootloader.glade# diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# new file mode 100644 index 0000000..baa9878 --- /dev/null +++ b/#ubl-settings-bootloader.glade# @@ -0,0 +1,1326 @@ + + + + + + both + True + + + + + False + False + True + center + com.ublinux.ubl-settings-diskquota + dialog + True + True + ubl-settings-bootloader + 1.0 + Copyright © 2022 - 2023, UBSoft LLC + ubl-settings-bootloader + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + UBGroup + UBGroup + com.ublinux.ubl-settings-bootloader + True + gpl-2-0 + + + True + False + vertical + 2 + + + False + end + + + False + False + 1 + + + + + + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-bootloader + + + + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + com.ublinux.ubl-settings-bootloader + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + + + True + False + False + False + 4 + + + True + False + Load global configuration + + + + + + True + False + Load local configuration + + + + + + True + False + False + False + 4 + + + True + False + Help + + + + + + True + False + About + + + + + + True + False + False + False + 4 + + + True + False + Save to global and local configuration + + + + + + True + False + Save global configuration + + + + + + True + False + Save local configuration + + + + + + 750 + 550 + False + com.ublinux.ubl-settings-bootloader + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 25 + 1 + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + + + 81 + True + False + start + + + -1 + + + + + False + True + 1 + + + + + True + True + never + in + + + True + False + + + True + False + vertical + + + True + False + vertical + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + Boot selection menu timer + True + True + False + 3 + 5 + 3 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Default load + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Load screen display mode: + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 3 + + + + + True + False + + + Boot menu user name: + True + True + False + 2 + 5 + 2 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 4 + + + + + True + False + + + Boot menu user password: + True + True + False + 2 + 5 + 2 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 5 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + 5 + 5 + in + + + True + False + + + -1 + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 10 + + + + + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + start + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + 5 + 5 + in + + + True + False + + + True + True + + + + + + + + + + False + True + 1 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for input + start + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + 5 + 5 + in + + + True + False + + + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for output + start + + + + + False + True + 3 + + + + + False + True + 5 + + + + + + + + + True + True + 2 + + + + + + + True + False + True + + + True + False + ubl-settings-bootloader + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-bootloader + + + + + True + False + + + True + False + + + True + True + False + True + True + menu2 + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Save + + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + True + True + menu1 + none + + + True + False + open-menu-symbolic + + + + + False + True + 1 + + + + + + False + True + 0 + + + + + end + 1 + + + + + True + False + + + True + True + False + True + True + menu + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Load + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + + 2 + + + + + + + both + True + + + + + + + + both + True + + + + + + + + + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Warning! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + 800 + 600 + False + True + True + com.ublinux.ubl-settings-datetime + + + + + + True + False + True + + + True + False + + + + + True + False + 32 + com.ublinux.ubl-settings-bootloader + 5 + + + + + + diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 93b3c4d..34ed8ce 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -8,6 +8,11 @@ include_directories(${GTK_INCLUDE_DIRS}) link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) +pkg_check_modules(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) +include_directories(${WEBKIT_INCLUDE_DIRS}) +link_directories(${WEBKIT_LIBRARY_DIRS}) +add_definitions(${WEBKIT_CFLAGS_OTHER}) + #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a -g") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ -O2 -pipe -fno-plt -fexceptions \ @@ -35,5 +40,5 @@ set(LIBRARIES pthread) add_executable(ubl-settings-bootloader ${SOURCE_FILES}) -target_link_libraries(ubl-settings-bootloader ${LIBRARIES}) +target_link_libraries(ubl-settings-bootloader ${LIBRARIES} ${WEBKIT_LIBRARIES}) install(TARGETS ubl-settings-bootloader DESTINATION bin) diff --git a/source/my_cmd.h b/source/my_cmd.h index 268e218..43d9705 100644 --- a/source/my_cmd.h +++ b/source/my_cmd.h @@ -1,5 +1,5 @@ -#ifndef CMD_H -#define CMD_H +#ifndef MY_CMD_H +#define MY_CMD_H #define global_load "ubconfig --default --source global get boot" #define system_load "ubconfig --default --source system get boot" @@ -9,7 +9,7 @@ #define system_save "ubconfig --target system set boot " #define global_remove "ubconfig --target global remove boot " #define system_remove "ubconfig --target system remove boot " -#define open_link "xdg-open " +#define link_doc "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" #define other_user "su -l {} -c \" DISPLAY=$DISPLAY {} \"" #endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index d1d4614..b080100 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -90,6 +90,9 @@ void MainWindow::settings(){ overHead->add_overlay(*boxWidget); btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); + one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); + three = Glib::wrap( GTK_WIDGET( one ) ); + wndWeb->add( *three ); this->flag_block_gui(); if (this->check_root() == 0) { spbSecond->set_range(1, 60); @@ -367,7 +370,8 @@ void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtrget_widget("lblHeaderAboutTopic", lblHeaderAboutTopic); builder->get_widget("chbLoadVariantSelectionTimer", chbLoadVariantSelectionTimer); builder->get_widget("lblInfoCommand", lblInfoCommand); builder->get_widget("lblInfoCommand1", lblInfoCommand1); @@ -418,14 +422,16 @@ void MainWindow::get_builder(){ builder->get_widget("entryPasswordProtecc", entryPasswordProtecc); builder->get_widget("entrySecurityLogin", entrySecurityLogin); builder->get_widget("cmbDefaultDonw", cmbDefaultDonw); - + builder->get_widget("wndWeb", wndWeb); + builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb); } void MainWindow::localization(){ time_t now = time(0); tm *ltm = localtime(&now); unsigned int year = 1900+ ltm->tm_year; - string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); + string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); + aboutWindows->set_program_name(gettext("ubl-settings-bootloader")); aboutWindows->set_copyright(str_authors); aboutWindows->set_comments(_("ubl-settings-bootloader")); aboutWindows->set_website(_("https://wiki.ublinux.com")); @@ -434,6 +440,7 @@ void MainWindow::localization(){ lblInfoHead->set_text(_("Configuring system boot parameters")); lblHeaderName->set_text(_("ubl-settings-bootloader")); aboutWindows->set_comments(_("System boot")); + lblHeaderAboutTopic->set_label(gettext("About ubl-settings-bootloader")); aboutWindows->set_website_label(_("Project Home Page")); lblInfoCommand->set_text(_("Command line parameters:")); lblInfoCommand1->set_text(_("Command line parameters:")); @@ -446,6 +453,7 @@ void MainWindow::localization(){ chbLoadVariantSelectionTimer->set_label(_("Boot selection menu timer")); btnSynopsis->set_label(_("Help")); btnAbout->set_label(_("About")); + lblHeadeWndWeb->set_text(_("ubl-settings-bootloader")); btnSaveLocalGlob->set_label(_("Save to global and local configuration")); btnSaveLocal->set_label(_("Save local configuration")); btnSaveGlob->set_label(_("Save global configuration")); @@ -878,12 +886,8 @@ void MainWindow::set_row(Glib::RefPtr &list_store, int size, std } void MainWindow::synopsis_show() { - string cmd = open_link + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; - if (geteuid() == 0) { - string response_user = getlogin(); - cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; - } - obj_process_system.call(cmd, "&"); + webkit_web_view_load_uri(one, link_doc); + wndWeb->show_all(); } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index a50f0b5..20ba41a 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -17,6 +17,7 @@ #include "util.h" #include "save.h" #include "load.h" +#include #include "my_process.h" using namespace std; @@ -62,6 +63,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblInfoDefaultDonw; Gtk::Label *lblInfoCommand; Gtk::Label *lblInfoCommand1; + Gtk::Label *lblHeaderAboutTopic; Gtk::Label *lblInfoCommand2; Gtk::Label *lblLoadMenu; Gtk::Label *lblInfoInputTerminal; @@ -103,6 +105,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::CheckButton *chbPasswordProtecc; Gtk::Entry *entrySecurityLogin; Gtk::Entry *entryPasswordProtecc; + Gtk::Label *lblHeadeWndWeb; std::vector vec_Option_kernel; std::vector vec_Option_IPT; @@ -111,6 +114,9 @@ class MainWindow : public Gtk::ApplicationWindow { Glib::RefPtr list_store_kernel; Glib::RefPtr list_store_IPT; Glib::RefPtr list_store_OTT; + Gtk::Window *wndWeb; + Gtk::Widget *three; + WebKitWebView * one; void set_entry_to_tree_view(Glib::RefPtr &list_store, Gtk::Entry &entry, std::vector &vec_Option, int size); Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 3082b74..87b585c 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -10,28 +10,31 @@ False - О Программе False True center - ubl-settings-bootloader + com.ublinux.ubl-settings-diskquota dialog + True True ubl-settings-bootloader - 1.2 - Copyright © 2023 - UBSoft Software LLC + 1.0 + Copyright © 2022 - 2023, UBSoft LLC ubl-settings-bootloader https://ublinux.ru/ Project Home Page Это приложение распространяется без каких-либо гарантий. Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. UBGroup + UBGroup + UBGroup UBGroup com.ublinux.ubl-settings-bootloader True gpl-2-0 + True False vertical 2 @@ -39,14 +42,11 @@ False end - - - False False - 0 + 1 @@ -54,6 +54,28 @@ + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-bootloader + + + + + + + True @@ -1268,4 +1290,38 @@ specified priority + + 800 + 600 + False + True + True + com.ublinux.ubl-settings-datetime + + + + + + True + False + True + + + True + False + ubl-settings-datetime + + + + + True + False + 32 + com.ublinux.ubl-settings-bootloader + 5 + + + + + diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index b73d9bb..eeb6861 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -17,6 +17,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "About ubl-settings-bootloader" +msgstr "О программе Загрузка системы" + #: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "О программе" From 37512d22f2908b1c8e6c45165c529e16803a5665 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 21 Apr 2023 15:33:20 +0600 Subject: [PATCH 089/110] fix --- #ubl-settings-bootloader.glade# | 1326 ----------------------------- source/ubl-settings-bootloader.cc | 8 +- source/ubl-settings-bootloader.h | 3 +- ubl-settings-bootloader.glade | 2 +- 4 files changed, 8 insertions(+), 1331 deletions(-) delete mode 100644 #ubl-settings-bootloader.glade# diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# deleted file mode 100644 index baa9878..0000000 --- a/#ubl-settings-bootloader.glade# +++ /dev/null @@ -1,1326 +0,0 @@ - - - - - - both - True - - - - - False - False - True - center - com.ublinux.ubl-settings-diskquota - dialog - True - True - ubl-settings-bootloader - 1.0 - Copyright © 2022 - 2023, UBSoft LLC - ubl-settings-bootloader - https://ublinux.ru/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - UBGroup - UBGroup - com.ublinux.ubl-settings-bootloader - True - gpl-2-0 - - - True - False - vertical - 2 - - - False - end - - - False - False - 1 - - - - - - - - - - True - False - True - - - True - False - 5 - 5 - 5 - 5 - 2 - ubl-settings-bootloader - - - - - - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - com.ublinux.ubl-settings-bootloader - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Running applications as a user with a -specified priority - - - - - - - - True - True - 1 - - - - - True - False - False - False - 4 - - - True - False - Load global configuration - - - - - - True - False - Load local configuration - - - - - - True - False - False - False - 4 - - - True - False - Help - - - - - - True - False - About - - - - - - True - False - False - False - 4 - - - True - False - Save to global and local configuration - - - - - - True - False - Save global configuration - - - - - - True - False - Save local configuration - - - - - - 750 - 550 - False - com.ublinux.ubl-settings-bootloader - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 25 - 1 - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - 81 - True - False - start - - - -1 - - - - - False - True - 1 - - - - - True - True - never - in - - - True - False - - - True - False - vertical - - - True - False - vertical - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - - - Boot selection menu timer - True - True - False - 3 - 5 - 3 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Default load - start - 0 - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 1 - - - - - True - False - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Load screen display mode: - start - 0 - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 3 - - - - - True - False - - - Boot menu user name: - True - True - False - 2 - 5 - 2 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 4 - - - - - True - False - - - Boot menu user password: - True - True - False - 2 - 5 - 2 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 5 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download menu - - - - - False - True - 0 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - 5 - 5 - in - - - True - False - - - -1 - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 10 - - - - - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Parameters passed to the kernel - start - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - 5 - 5 - in - - - True - False - - - True - True - - - - - - - - - - False - True - 1 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for input - start - - - - - False - True - 2 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - 5 - 5 - in - - - True - False - - - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for output - start - - - - - False - True - 3 - - - - - False - True - 5 - - - - - - - - - True - True - 2 - - - - - - - True - False - True - - - True - False - ubl-settings-bootloader - - - - - - - - True - False - 32 - com.ublinux.ubl-settings-bootloader - - - - - True - False - - - True - False - - - True - True - False - True - True - menu2 - none - - - True - False - - - True - False - 5 - 5 - 5 - 5 - Save - - - - False - True - 0 - - - - - True - False - pan-down-symbolic - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - True - False - True - True - menu1 - none - - - True - False - open-menu-symbolic - - - - - False - True - 1 - - - - - - False - True - 0 - - - - - end - 1 - - - - - True - False - - - True - True - False - True - True - menu - none - - - True - False - - - True - False - 5 - 5 - 5 - 5 - Load - - - False - True - 0 - - - - - True - False - pan-down-symbolic - - - False - True - 1 - - - - - - - False - True - 0 - - - - - - 2 - - - - - - - both - True - - - - - - - - both - True - - - - - - - - - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Warning! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - 800 - 600 - False - True - True - com.ublinux.ubl-settings-datetime - - - - - - True - False - True - - - True - False - - - - - True - False - 32 - com.ublinux.ubl-settings-bootloader - 5 - - - - - - diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index b080100..0cfab96 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -91,8 +91,8 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); - three = Glib::wrap( GTK_WIDGET( one ) ); - wndWeb->add( *three ); + three = Glib::wrap(GTK_WIDGET(one)); + wndWeb->add(*three); this->flag_block_gui(); if (this->check_root() == 0) { spbSecond->set_range(1, 60); @@ -949,7 +949,9 @@ void MainWindow::info_warning_error(int mess) { } } } - +MainWindow::~MainWindow() { + free(one); +} void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 20ba41a..16ffb81 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -116,7 +116,7 @@ class MainWindow : public Gtk::ApplicationWindow { Glib::RefPtr list_store_OTT; Gtk::Window *wndWeb; Gtk::Widget *three; - WebKitWebView * one; + WebKitWebView *one; void set_entry_to_tree_view(Glib::RefPtr &list_store, Gtk::Entry &entry, std::vector &vec_Option, int size); Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; @@ -149,6 +149,7 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); + ~MainWindow(); void get_menu_boot(std::map &map_temp); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 87b585c..2f182ae 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1309,7 +1309,7 @@ specified priority True False - ubl-settings-datetime + ubl-settings-bootloader From f744279996212dd55302468fcc2befe0f06d6b19 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 21 Apr 2023 16:41:06 +0600 Subject: [PATCH 090/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B8=20webView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 12 +++++++++++ source/my_cmd.h | 4 ++-- source/ubl-settings-bootloader.cc | 33 +++++++++++++++++++++++++------ source/ubl-settings-bootloader.h | 12 ++++++++--- ubl-settings-bootloader_ru.po | 4 ++-- 5 files changed, 52 insertions(+), 13 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 34ed8ce..be4d54f 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -8,6 +8,18 @@ include_directories(${GTK_INCLUDE_DIRS}) link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) +find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + +if(DEFINED WEBKIT_LIBRARIES_FOUND) + option(WEBKIT_FOUND "is webkit found" ON) + message("WEBKIT FOUND") + PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + include_directories(${WEBKIT_INCLUDE_DIRS}) + link_directories(${WEBKIT_LIBRARY_DIRS}) + add_definitions(${WEBKIT_CFLAGS_OTHER}) +endif() + + pkg_check_modules(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) include_directories(${WEBKIT_INCLUDE_DIRS}) link_directories(${WEBKIT_LIBRARY_DIRS}) diff --git a/source/my_cmd.h b/source/my_cmd.h index 43d9705..34c7867 100644 --- a/source/my_cmd.h +++ b/source/my_cmd.h @@ -10,6 +10,6 @@ #define global_remove "ubconfig --target global remove boot " #define system_remove "ubconfig --target system remove boot " #define link_doc "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" -#define other_user "su -l {} -c \" DISPLAY=$DISPLAY {} \"" - +#define cmd_xdg "xdg-open " +#define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \"" #endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 0cfab96..a3fa4e0 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -90,9 +90,11 @@ void MainWindow::settings(){ overHead->add_overlay(*boxWidget); btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); - one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); - three = Glib::wrap(GTK_WIDGET(one)); - wndWeb->add(*three); + #ifdef WEBKIT_FOUND + one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); + three = Glib::wrap(GTK_WIDGET(one)); + wndWeb->add(*three); + #endif this->flag_block_gui(); if (this->check_root() == 0) { spbSecond->set_range(1, 60); @@ -422,7 +424,9 @@ void MainWindow::get_builder() { builder->get_widget("entryPasswordProtecc", entryPasswordProtecc); builder->get_widget("entrySecurityLogin", entrySecurityLogin); builder->get_widget("cmbDefaultDonw", cmbDefaultDonw); + #ifdef WEBKIT_FOUND builder->get_widget("wndWeb", wndWeb); + #endif builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb); } @@ -886,8 +890,23 @@ void MainWindow::set_row(Glib::RefPtr &list_store, int size, std } void MainWindow::synopsis_show() { - webkit_web_view_load_uri(one, link_doc); - wndWeb->show_all(); + #ifdef WEBKIT_FOUND + webkit_web_view_load_uri(one, link_doc); + wndWeb->show_all(); + #else + string cmd = cmd_xdg + string(gettext(link_doc)) + " &"; + string buf = ""; + if (geteuid() == 0) { + string response_user = getlogin(); + int size_s = std::snprintf(nullptr, 0, cmd_execute, response_user.c_str(), cmd.c_str()) + 1; + auto size = static_cast(size_s); + std::unique_ptr buf(new char[ size ]); + std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() ); + cmd = std::string( buf.get(), buf.get() + size - 1 ); + } + obj_process_system.call(cmd, "&"); + #endif + } @@ -950,7 +969,9 @@ void MainWindow::info_warning_error(int mess) { } } MainWindow::~MainWindow() { - free(one); + #ifdef WEBKIT_FOUND + free(one); + #endif } void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 16ffb81..38bd07c 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -17,7 +17,10 @@ #include "util.h" #include "save.h" #include "load.h" +#ifdef WEBKIT_FOUND #include +#endif + #include "my_process.h" using namespace std; @@ -114,9 +117,12 @@ class MainWindow : public Gtk::ApplicationWindow { Glib::RefPtr list_store_kernel; Glib::RefPtr list_store_IPT; Glib::RefPtr list_store_OTT; - Gtk::Window *wndWeb; - Gtk::Widget *three; - WebKitWebView *one; + #ifdef WEBKIT_FOUND + Gtk::Window *wndWeb; + Gtk::Widget *three; + WebKitWebView *one; + #endif + void set_entry_to_tree_view(Glib::RefPtr &list_store, Gtk::Entry &entry, std::vector &vec_Option, int size); Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index eeb6861..3073ef9 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -366,9 +366,9 @@ msgstr "" #: source/ubl-settings-bootloader.cc:860 source/ubl-settings-bootloader.cc:400 msgid "" -"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" msgstr "" -"https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +"https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" msgid "i915.enable_dc=0 (Disable GPU power management)" msgstr "i915.enable_dc=0 (Отключите управление питанием GPU)" From 7d536ceeb626180cea576cc85067f3e269539e74 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 21 Apr 2023 17:50:43 +0600 Subject: [PATCH 091/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 21 +++++++++++++-------- source/ubl-settings-bootloader.h.in | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 source/ubl-settings-bootloader.h.in diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index be4d54f..a8e6163 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -10,20 +10,21 @@ add_definitions(${GTK_CFLAGS_OTHER}) find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) -if(DEFINED WEBKIT_LIBRARIES_FOUND) - option(WEBKIT_FOUND "is webkit found" ON) - message("WEBKIT FOUND") +option(WEBKIT_FOUND "No" OFF) + +find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) +message("${WEBKIT_LIBRARIES_FOUND}") +if(WEBKIT_LIBRARIES_FOUND) + option(WEBKIT_FOUND "Yes" ON) + message("Webkit is located at ${WEBKIT_LIBRARIES_FOUND}") PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) include_directories(${WEBKIT_INCLUDE_DIRS}) link_directories(${WEBKIT_LIBRARY_DIRS}) add_definitions(${WEBKIT_CFLAGS_OTHER}) endif() +configure_file(ubl-settings-bootloader.h.in ubl-settings-bootloader-cm.h) -pkg_check_modules(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) -include_directories(${WEBKIT_INCLUDE_DIRS}) -link_directories(${WEBKIT_LIBRARY_DIRS}) -add_definitions(${WEBKIT_CFLAGS_OTHER}) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a -g") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ @@ -52,5 +53,9 @@ set(LIBRARIES pthread) add_executable(ubl-settings-bootloader ${SOURCE_FILES}) -target_link_libraries(ubl-settings-bootloader ${LIBRARIES} ${WEBKIT_LIBRARIES}) +if(WEBKIT_LIBRARIES_FOUND) + target_link_libraries(ubl-settings-bootloader ${LIBRARIES} ${WEBKIT_LIBRARIES}) +else() + target_link_libraries(ubl-settings-bootloader ${LIBRARIES}) +endif() install(TARGETS ubl-settings-bootloader DESTINATION bin) diff --git a/source/ubl-settings-bootloader.h.in b/source/ubl-settings-bootloader.h.in new file mode 100644 index 0000000..17ba454 --- /dev/null +++ b/source/ubl-settings-bootloader.h.in @@ -0,0 +1 @@ +#cmakedefine WEBKIT_FOUND \ No newline at end of file From 96872d00da1e250fd8acde9b33e05cfdadbf64be Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 24 Apr 2023 10:02:31 +0600 Subject: [PATCH 092/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 13 +- source/ubl-settings-bootloader.cc | 34 ++++- source/ubl-settings-bootloader.h | 13 +- ubl-settings-bootloader.glade | 201 +++++++++++++++++++++++++++++- ubl-settings-bootloader.pot | 18 +++ ubl-settings-bootloader_ru.po | 19 +++ 6 files changed, 286 insertions(+), 12 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index a8e6163..dc55e84 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -13,10 +13,8 @@ find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) option(WEBKIT_FOUND "No" OFF) find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) -message("${WEBKIT_LIBRARIES_FOUND}") if(WEBKIT_LIBRARIES_FOUND) option(WEBKIT_FOUND "Yes" ON) - message("Webkit is located at ${WEBKIT_LIBRARIES_FOUND}") PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) include_directories(${WEBKIT_INCLUDE_DIRS}) link_directories(${WEBKIT_LIBRARY_DIRS}) @@ -33,6 +31,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection") set(SOURCE_FILES + ubl-settings-bootloader-cm.h ubl-settings-bootloader.h ubl-settings-bootloader.cc my_cmd.h @@ -53,9 +52,9 @@ set(LIBRARIES pthread) add_executable(ubl-settings-bootloader ${SOURCE_FILES}) -if(WEBKIT_LIBRARIES_FOUND) - target_link_libraries(ubl-settings-bootloader ${LIBRARIES} ${WEBKIT_LIBRARIES}) -else() - target_link_libraries(ubl-settings-bootloader ${LIBRARIES}) -endif() +target_link_libraries(ubl-settings-bootloader PUBLIC ${WEBKIT_LIBRARIES} ${LIBRARIES}) +target_include_directories(ubl-settings-bootloader PUBLIC + "${PROJECT_BINARY_DIR}" + ${WEBKIT_INCLUDE_DIRS} + ) install(TARGETS ubl-settings-bootloader DESTINATION bin) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index a3fa4e0..ab57923 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -428,6 +428,15 @@ void MainWindow::get_builder() { builder->get_widget("wndWeb", wndWeb); #endif builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb); + + builder->get_widget("lblwebHeaderName", lblwebHeaderName); + builder->get_widget("lblhelpText", lblhelpText); + builder->get_widget("lblhelpHeader", lblhelpHeader); + builder->get_widget("chkAlwaysOpenHelp", chkAlwaysOpenHelp); + builder->get_widget("btnReadHelp", btnReadHelp); + builder->get_widget("btnCancelHelp", btnCancelHelp); + builder->get_widget("wndShowWeb", wndShowWeb); + } void MainWindow::localization(){ @@ -479,6 +488,14 @@ void MainWindow::localization(){ cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); cmbDownloadMode->append(_("Lack of loading animation with the output of the abbreviated log")); cmbDefaultDonw->append(_("Last successful upload")); + + lblhelpHeader->set_text(_("Would you like to read documentation in the Web?")); + lblhelpText->set_text(_("You will be redirected to documentation site, where user help pages are " + "translated and supported by community.")); + btnReadHelp->set_label(_("Read online")); + btnCancelHelp->set_label(_("Cancel")); + chkAlwaysOpenHelp->set_label(_("Always redirect")); + lblwebHeaderName->set_label(_("ubl-settings-bootloader")); } vector MainWindow::get_setting_entry_all(string key, std::map * map_temp) { @@ -604,6 +621,9 @@ void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cm } void MainWindow::event(){ + btnCancelHelp->signal_clicked().connect([&]() {wndShowWeb->hide();}); + chkAlwaysOpenHelp->signal_toggled().connect([&]() {flag_open_browser = true;}); + btnReadHelp->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_browser)); btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); btnAbout->signal_activate().connect([&]() {aboutWindows->show();}); btnLoadLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); @@ -890,6 +910,16 @@ void MainWindow::set_row(Glib::RefPtr &list_store, int size, std } void MainWindow::synopsis_show() { + if (flag_open_browser == true) { + this->open_browser(); + } + else { + wndShowWeb->show_all(); + } + +} + +void MainWindow::open_browser() { #ifdef WEBKIT_FOUND webkit_web_view_load_uri(one, link_doc); wndWeb->show_all(); @@ -904,12 +934,10 @@ void MainWindow::synopsis_show() { std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() ); cmd = std::string( buf.get(), buf.get() + size - 1 ); } - obj_process_system.call(cmd, "&"); + obj_process_system.call(cmd, "&"); #endif - } - void MainWindow::info_status_app(string stule) { boxInfo->remove_class("boxInfoMessOK"); boxInfo->remove_class("boxInfoMessError"); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 38bd07c..0557ade 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -17,6 +17,7 @@ #include "util.h" #include "save.h" #include "load.h" +#include "ubl-settings-bootloader-cm.h" #ifdef WEBKIT_FOUND #include #endif @@ -109,7 +110,15 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Entry *entrySecurityLogin; Gtk::Entry *entryPasswordProtecc; Gtk::Label *lblHeadeWndWeb; - + + Gtk::Label *lblwebHeaderName; + Gtk::Label *lblhelpText; + Gtk::Label *lblhelpHeader; + Gtk::CheckButton *chkAlwaysOpenHelp; + Gtk::Button *btnReadHelp; + Gtk::Button *btnCancelHelp; + Gtk::Window *wndShowWeb; + std::vector vec_Option_kernel; std::vector vec_Option_IPT; std::vector vec_Option_OTT; @@ -141,6 +150,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_save_all = false; bool flag_blocked_tree_view = false; bool flag_save_block = false; + bool flag_open_browser = false; size_t size_kernel = 0; size_t size_IPT = 0; size_t size_OTT = 0; @@ -156,6 +166,7 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); ~MainWindow(); + void open_browser(); void get_menu_boot(std::map &map_temp); void set_row_all(std::map &map_cmd, Glib::RefPtr &list_store, vector &list_params, size_t size,string key); void set_row(Glib::RefPtr &list_store, int size, std::string name, bool flag_chbox); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 2f182ae..075d966 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1,5 +1,5 @@ - + @@ -1290,6 +1290,205 @@ specified priority + + False + start + start + False + 450 + 250 + dialog-question-symbolic + + + True + False + vertical + + + True + False + + + True + False + start + 20 + 20 + dialog-question-symbolic + 6 + + + False + True + 0 + + + + + True + False + vertical + + + True + False + start + 10 + 5 + Would you like to read documentation in the Web? + True + 0 + + + + + + + False + True + 0 + + + + + True + False + start + start + 10 + 10 + You will be redirected to documentation website where documentation is translated and supported by community. + True + 0 + + + + True + True + 1 + + + + + Always redirect to online documentation + True + True + False + end + 10 + True + + + + False + True + 2 + + + + + + True + True + 1 + + + + + + True + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + 30 + True + + + Cancel + True + True + True + + + + True + True + 0 + + + + + Read Online + True + True + True + + + + True + True + 1 + + + + + False + True + 1 + + + + + + + True + False + + + True + False + ubl-settings-bootloader + + + + + + + + True + False + 32 + dialog-question-symbolic + + + + + 800 600 diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index d3c66ce..c0b9030 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -17,6 +17,24 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" + +msgid "Would you like to read documentation in the Web?" +msgstr "" + +msgid "" +"You will be redirected to documentation site, where user help pages are " +"translated and supported by community." +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Read online" +msgstr "" + +msgid "Always redirect" +msgstr "" + #: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 3073ef9..6d412a4 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -17,6 +17,25 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Would you like to read documentation in the Web?" +msgstr "Вы хотите прочитать справку в Сети?" + +msgid "" +"You will be redirected to documentation site, where user help pages are " +"translated and supported by community." +msgstr "" +"Вы будете перенаправлены на сайт с документацией где страницы помощи " +"переводятся и поддерживаются сообществом." + +msgid "Cancel" +msgstr "Отменить" + +msgid "Always redirect" +msgstr "Всегда перенаправлять" + +msgid "Read online" +msgstr "Прочитать онлайн" + msgid "About ubl-settings-bootloader" msgstr "О программе Загрузка системы" From 412495a2226f11f75f99c5c452de8fe3616887dd Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 24 Apr 2023 14:37:51 +0600 Subject: [PATCH 093/110] =?UTF-8?q?=D0=9B=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 1 + source/main.cc | 4 +- source/my_cmd.h | 2 + source/my_localization.h | 64 +++++++++++ source/ubl-settings-bootloader.cc | 173 ++++++++++++++---------------- source/ubl-settings-bootloader.h | 1 + ubl-settings-bootloader.pot | 1 - ubl-settings-bootloader_ru.po | 8 +- 8 files changed, 152 insertions(+), 102 deletions(-) create mode 100644 source/my_localization.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index dc55e84..c58563a 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -31,6 +31,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection") set(SOURCE_FILES + my_localization.h ubl-settings-bootloader-cm.h ubl-settings-bootloader.h ubl-settings-bootloader.cc diff --git a/source/main.cc b/source/main.cc index bc66d05..edab5c2 100644 --- a/source/main.cc +++ b/source/main.cc @@ -62,7 +62,7 @@ void pars_flag(int index_start, int argc, char* argv[]) { exit(1); } else if (str_argv == "--version" || str_argv == "-v"){ - string version = string(_("ubl-settings-bootloader version: ")) + version_application + "\n"; + string version = string(str_version) + version_application + "\n"; cout << version.c_str(); exit(1); } @@ -85,7 +85,7 @@ void pars_flag(int index_start, int argc, char* argv[]) { } else{ if (index_start == 1){ - g_print(_("Argument not recognized\n")); + g_print(_(no_recognized)); } } diff --git a/source/my_cmd.h b/source/my_cmd.h index 34c7867..f8e9e2a 100644 --- a/source/my_cmd.h +++ b/source/my_cmd.h @@ -12,4 +12,6 @@ #define link_doc "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" #define cmd_xdg "xdg-open " #define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \"" +#define icon_checked "com.ublinux.ubl-settings-bootloader.checked" +#define icon_warning "com.ublinux.ubl-settings-bootloader.warning" #endif \ No newline at end of file diff --git a/source/my_localization.h b/source/my_localization.h new file mode 100644 index 0000000..4bd86cb --- /dev/null +++ b/source/my_localization.h @@ -0,0 +1,64 @@ + +#ifndef MY_LOCALIZATION +#define MY_LOCALIZATION +#include +#define copyright _("Copyright © UBSoft LLC, 2022 - ") +#define name_app _("ubl-settings-bootloader") +#define website _("https://wiki.ublinux.com") +#define project_Home_page _("Project Home Page") +#define configuring_system_boot _("Configuring system boot parameters") +#define system_boot _("System boot") +#define str_about _("About ubl-settings-bootloader") +#define command_line_parameters _("Command line parameters:") +#define load_default _("Load default:") +#define seconds _("seconds") +#define download_menu _("Download menu") +#define terminal_for_input _("Terminal for input") +#define terminal_for_output _("Terminal for output") +#define boot_selection_menu_timer _("Boot selection menu timer") +#define str_help _("Help") +#define str_about_1 _("About") +#define str_save _("Save") +#define str_load _("Load") +#define save_all _("Save to global and local configuration") +#define save_local _("Save local configuration") +#define save_global _("Save global configuration") +#define load_global _("Load global configuration") +#define load_local _("Load local configuration") +#define read_online _("Read online") +#define cancel _("Cancel") +#define always_redirect _("Always redirect") +#define boot_screen_display_mode _("Boot screen display mode:") +#define no_loading_animation _("No loading animation, full log") +#define boot_menu_user_name _("Boot menu user name:") +#define boot_menu_user_password _("Boot menu user password:") +#define last_successful_upload _("Last successful upload") +#define read_documentation_web _("Would you like to read documentation in the Web?") +#define redirected_documentation _("You will be redirected to documentation site, where user help pages are ""translated and supported by community.") +#define user_name_configuration_editing_code _("User name to enter boot configuration editing mode") +#define user_password_configuration_edit_mode _("User password to enter boot configuration edit mode") +#define loading_animation_with _("Loading animation with the magazine") +#define loading_animation_without _("Loading animation without a magazine") +#define lack_loading_animation _("Lack of loading animation with the output of the abbreviated log") +#define web_url _("https://wiki.ublinux.com") +#define enter_password _("Enter your password") +#define enter_login _("Enter login") +#define str_version _("ubl-settings-bootloader version: ") +#define local_read_error _("Local configuration reading error") +#define global_read_error _("Global configuration read error") +#define local_write_error _("Local configuration write error") +#define global_write_error _("Global configuration write error") +#define error_save_all _("Error saved local and global configuration") +#define local_load_ok _("Local configuration downloaded successfully") +#define global_load_ok _("Global configuration downloaded successfully") +#define local_ok_written _("Local configuration successfully written") +#define global_ok_written _("Global configuration successfully written") +#define successfully_save_all _("Successfully saved local and global configuration") +#define nothing_save _("Nothing to save!") +#define program_as_root _("The program must be run as root") +#define str_active _("Active") +#define str_option _("Option") +#define str_description _("Description") +#define str_help_h _("GTK settings bootloader for UBLinux\n""\n""Usage: ubl-settings-bootloader [OPTIONS...]\n""Options:\n"" -h, --help\t Show this help\n"" -V, --version\t Show package version\n"" --lock-help Lock utility help\n"" --lock-save Lock saving local and global configuration\n"" --lock-save-local Lock save global configuration\n"" --lock-save-global Lock load global configuration\n"" --lock-load-global Lock load global configuration\n") +#define no_recognized _("Argument not recognized\n") +#endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index ab57923..aeb5a52 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -54,8 +54,6 @@ SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr build int MainWindow::check_root() { if (geteuid() != 0) { - //lblMessageSudo->set_text(_("The program must be run with \nsuperuser privileges!")); - //mess_sudo->show(); return 1; } return 0; @@ -111,9 +109,9 @@ void MainWindow::settings(){ boxWidgetAll->set_sensitive(false); btnLoad->set_sensitive(false); btnSave->set_sensitive(false); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); info_status_app("boxInfoMessError"); - lblWarning->set_text(_("The program must be run as root")); + lblWarning->set_text(program_as_root); this->set_active_boot_second(); this->fill_in_view(); } @@ -358,9 +356,9 @@ vector MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel:: } void MainWindow::view_add_colums(Gtk::TreeView &treeView) { - treeView.append_column_editable(_("Active"), m_columns.check_button); - treeView.append_column(_("Option"), m_columns.name); - treeView.append_column(_("Description"), m_columns.description); + treeView.append_column_editable(str_active, m_columns.check_button); + treeView.append_column(str_option, m_columns.name); + treeView.append_column(str_description, m_columns.description); } void MainWindow::view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m , std::array, 5> &arr_view , size_t index) { @@ -443,59 +441,58 @@ void MainWindow::localization(){ time_t now = time(0); tm *ltm = localtime(&now); unsigned int year = 1900+ ltm->tm_year; - string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); - aboutWindows->set_program_name(gettext("ubl-settings-bootloader")); + string str_authors = string(copyright) + to_string(year); + aboutWindows->set_program_name(name_app); aboutWindows->set_copyright(str_authors); - aboutWindows->set_comments(_("ubl-settings-bootloader")); - aboutWindows->set_website(_("https://wiki.ublinux.com")); + aboutWindows->set_comments(name_app); + aboutWindows->set_website(web_url); aboutWindows->set_version(_(version_application.c_str())); - aboutWindows->set_website_label(_("Project Home Page")); - lblInfoHead->set_text(_("Configuring system boot parameters")); - lblHeaderName->set_text(_("ubl-settings-bootloader")); - aboutWindows->set_comments(_("System boot")); - lblHeaderAboutTopic->set_label(gettext("About ubl-settings-bootloader")); - aboutWindows->set_website_label(_("Project Home Page")); - lblInfoCommand->set_text(_("Command line parameters:")); - lblInfoCommand1->set_text(_("Command line parameters:")); - lblInfoCommand2->set_text(_("Command line parameters:")); - lblInfoDefaultDonw->set_text(_("Load default:")); - lblInfoSeconds->set_text(_("seconds")); - lblLoadMenu->set_text(_("Download menu")); - lblInfoInputTerminal->set_text(_("Terminal for input")); - lblInfoOutputTerminal->set_text(_("Terminal for output")); - chbLoadVariantSelectionTimer->set_label(_("Boot selection menu timer")); - btnSynopsis->set_label(_("Help")); - btnAbout->set_label(_("About")); - lblHeadeWndWeb->set_text(_("ubl-settings-bootloader")); - btnSaveLocalGlob->set_label(_("Save to global and local configuration")); - btnSaveLocal->set_label(_("Save local configuration")); - btnSaveGlob->set_label(_("Save global configuration")); - btnLoadGlob->set_label(_("Load global configuration")); - btnLoadLocal->set_label(_("Load local configuration")); - btnSave->set_label(_("Save")); - btnLoad->set_label(_("Load")); - this->set_title(_("ubl-settings-bootloader")); + aboutWindows->set_website_label(project_Home_page); + lblInfoHead->set_text(configuring_system_boot); + lblHeaderName->set_text(name_app); + aboutWindows->set_comments(system_boot); + lblHeaderAboutTopic->set_label(str_about); + aboutWindows->set_website_label(project_Home_page); + lblInfoCommand->set_text(command_line_parameters); + lblInfoCommand1->set_text(command_line_parameters); + lblInfoCommand2->set_text(command_line_parameters); + lblInfoDefaultDonw->set_text(str_about); + lblInfoSeconds->set_text(seconds); + lblLoadMenu->set_text(download_menu); + lblInfoInputTerminal->set_text(terminal_for_input); + lblInfoOutputTerminal->set_text(terminal_for_output); + chbLoadVariantSelectionTimer->set_label(boot_selection_menu_timer); + btnSynopsis->set_label(str_help); + btnAbout->set_label(str_about_1); + lblHeadeWndWeb->set_text(name_app); + btnSaveLocalGlob->set_label(save_all); + btnSaveLocal->set_label(save_local); + btnSaveGlob->set_label(save_global); + btnLoadGlob->set_label(load_global); + btnLoadLocal->set_label(load_local); + btnSave->set_label(str_save); + btnLoad->set_label(str_load); + this->set_title(name_app); // Todo: check - entrySecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); - entryPasswordProtecc->set_tooltip_text(gettext("User password to enter boot configuration edit mode")); - chbSecurityLogin->set_tooltip_text(gettext("User name to enter boot configuration editing mode")); - chbPasswordProtecc->set_tooltip_text(gettext("User password to enter boot configuration edit mode")); - lblDownloadMode->set_text(_("Boot screen display mode:")); - chbSecurityLogin->set_label(_("Boot menu user name:")); - chbPasswordProtecc->set_label(_("Boot menu user password:")); - cmbDownloadMode->append(_("Loading animation with the magazine")); - cmbDownloadMode->append(_("Loading animation without a magazine")); - cmbDownloadMode->append(_("Нет анимации загрузки, полный журнал")); - cmbDownloadMode->append(_("Lack of loading animation with the output of the abbreviated log")); - cmbDefaultDonw->append(_("Last successful upload")); - - lblhelpHeader->set_text(_("Would you like to read documentation in the Web?")); - lblhelpText->set_text(_("You will be redirected to documentation site, where user help pages are " - "translated and supported by community.")); - btnReadHelp->set_label(_("Read online")); - btnCancelHelp->set_label(_("Cancel")); - chkAlwaysOpenHelp->set_label(_("Always redirect")); - lblwebHeaderName->set_label(_("ubl-settings-bootloader")); + entrySecurityLogin->set_tooltip_text(loading_animation_without); + entryPasswordProtecc->set_tooltip_text(user_password_configuration_edit_mode); + chbSecurityLogin->set_tooltip_text(loading_animation_without); + chbPasswordProtecc->set_tooltip_text(user_password_configuration_edit_mode); + lblDownloadMode->set_text(boot_screen_display_mode); + chbSecurityLogin->set_label(boot_screen_display_mode); + chbPasswordProtecc->set_label(boot_menu_user_password); + cmbDownloadMode->append(loading_animation_with); + cmbDownloadMode->append(loading_animation_without); + cmbDownloadMode->append(no_loading_animation); + cmbDownloadMode->append(lack_loading_animation); + cmbDefaultDonw->append(last_successful_upload); + + lblhelpHeader->set_text(read_documentation_web); + lblhelpText->set_text(_(redirected_documentation)); + btnReadHelp->set_label(read_online); + btnCancelHelp->set_label(cancel); + chkAlwaysOpenHelp->set_label(always_redirect); + lblwebHeaderName->set_label(name_app); } vector MainWindow::get_setting_entry_all(string key, std::map * map_temp) { @@ -518,13 +515,13 @@ vector MainWindow::get_setting_entry_all(string key, std::map get_text().length() == 0) { info_status_app("boxInfoMessError"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); - lblWarning->set_text(_("Enter your password")); + imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); + lblWarning->set_text(enter_password); boxSave->set_sensitive(false); } else { info_status_app("boxInfoMessOK"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); boxSave->set_sensitive(true); string key = entryPasswordProtecc->get_text(); @@ -538,13 +535,13 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { bool MainWindow::focus_out_txt_login(GdkEventFocus*) { if (entrySecurityLogin->get_text().length() == 0) { info_status_app("boxInfoMessError"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); - lblWarning->set_text(_("Enter login")); + imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); + lblWarning->set_text(enter_login); boxSave->set_sensitive(false); } else { info_status_app("boxInfoMessOK"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); map_cmd_selection["GRUB_USER"] = entrySecurityLogin->get_text(); boxSave->set_sensitive(true); @@ -665,7 +662,7 @@ void MainWindow::change_security_login() { entrySecurityLogin->set_text(""); boxSave->set_sensitive(true); info_status_app("boxInfoMessOK"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); } else if (index == true) { @@ -700,7 +697,7 @@ void MainWindow::change_password_protecc() { entryPasswordProtecc->set_text(""); boxSave->set_sensitive(true); info_status_app("boxInfoMessOK"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); } else if (index == true) { @@ -924,7 +921,7 @@ void MainWindow::open_browser() { webkit_web_view_load_uri(one, link_doc); wndWeb->show_all(); #else - string cmd = cmd_xdg + string(gettext(link_doc)) + " &"; + string cmd = cmd_xdg + string(_(link_doc)) + " &"; string buf = ""; if (geteuid() == 0) { string response_user = getlogin(); @@ -947,26 +944,26 @@ void MainWindow::info_status_app(string stule) { void MainWindow::info_warning_error(int mess) { if (obj_load.get_count_error() > 0 || obj_save.get_count_error() > 0) { info_status_app("boxInfoMessError"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.warning", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); string mess_error = ""; if (mess == 0) { - mess_error = string(_("Local configuration reading error")) + str_cmd_error; + mess_error = string(local_read_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 1) { - mess_error = string(_("Global configuration read error")) + str_cmd_error; + mess_error = string(global_read_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 2) { - mess_error = string(_("Local configuration write error")) + str_cmd_error; + mess_error = string(local_write_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 3) { - mess_error = string(_("Global configuration write error")) + str_cmd_error; + mess_error = string(global_write_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 4) { - mess_error = string(_("Error saved local and global configuration")) + str_cmd_error; + mess_error = string(error_save_all) + str_cmd_error; lblWarning->set_text(mess_error); } str_cmd_error = ""; @@ -975,24 +972,24 @@ void MainWindow::info_warning_error(int mess) { } else { info_status_app("boxInfoMessOK"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-bootloader.checked", Gtk::ICON_SIZE_MENU); + imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); if (mess == 0) { - lblWarning->set_text(_("Local configuration downloaded successfully")); + lblWarning->set_text(local_load_ok); } else if (mess == 1) { - lblWarning->set_text(_("Global configuration downloaded successfully")); + lblWarning->set_text(global_load_ok); } else if (mess == 2) { - lblWarning->set_text(_("Local configuration successfully written")); + lblWarning->set_text(local_ok_written); } else if (mess == 3) { - lblWarning->set_text(_("Global configuration successfully written")); + lblWarning->set_text(global_ok_written); } else if (mess == 4) { - lblWarning->set_text(_("Successfully saved local and global configuration")); + lblWarning->set_text(successfully_save_all); } else if (mess == 5) { - lblWarning->set_text(_("Nothing to save!")); + lblWarning->set_text(nothing_save); } } } @@ -1001,6 +998,7 @@ MainWindow::~MainWindow() { free(one); #endif } + void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); @@ -1020,21 +1018,10 @@ void MainWindow::add_CSS(){ } void help() { - string version = string(_("ubl-settings-bootloader version: ")) + version_application + "\n"; - cout << version.c_str(); + string version = string(str_version) + version_application + "\n"; + cout << version; string help; - help = "GTK settings bootloader for UBLinux\n" - "\n" - "Usage: ubl-settings-bootloader [OPTIONS...]\n" - "Options:\n" - " -h, --help\t Show this help\n" - " -V, --version\t Show package version\n" - " --lock-help Lock utility help\n" - " --lock-save Lock saving local and global configuration\n" - " --lock-save-local Lock save global configuration\n" - " --lock-save-global Lock load global configuration\n" - " --lock-load-global Lock load global configuration\n"; - cout << _(help.c_str()); + cout << str_help_h; } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 0557ade..ef07669 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -21,6 +21,7 @@ #ifdef WEBKIT_FOUND #include #endif +#include "my_localization.h" #include "my_process.h" using namespace std; diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index c0b9030..d19a63c 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -17,7 +17,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" - msgid "Would you like to read documentation in the Web?" msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 6d412a4..180ba69 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -457,15 +457,11 @@ msgstr "usb_keyboard (Клавиатура USB Keyboard (protocol HID Boot))" msgid "vga_text (Text output VGA (Coreboot))" msgstr "vga_text (Текстовый вывод VGA (Coreboot))" -#: source/ubl-settings-bootloader.cc:450 -msgid "Нет анимации загрузки, полный журнал" -msgstr "" - #~ msgid "Mine" #~ msgstr "Свой" #~ msgid "Disabled" #~ msgstr "Отключён" -#~ msgid "No loading animation, full log" -#~ msgstr "Отсутствие анимации загрузки с выводом журнала" +msgid "No loading animation, full log1" +msgstr "Отсутствие анимации загрузки с выводом журнала" From 2de795e0809cb7ef6b22d4ca20c7d11868c28cf1 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 24 Apr 2023 16:56:37 +0600 Subject: [PATCH 094/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D1=8F=20webkit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/my_localization.h | 1 + source/ubl-settings-bootloader.cc | 58 +++++++++++++++++++++---------- source/ubl-settings-bootloader.h | 3 ++ 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/source/my_localization.h b/source/my_localization.h index 4bd86cb..88f8d03 100644 --- a/source/my_localization.h +++ b/source/my_localization.h @@ -61,4 +61,5 @@ #define str_description _("Description") #define str_help_h _("GTK settings bootloader for UBLinux\n""\n""Usage: ubl-settings-bootloader [OPTIONS...]\n""Options:\n"" -h, --help\t Show this help\n"" -V, --version\t Show package version\n"" --lock-help Lock utility help\n"" --lock-save Lock saving local and global configuration\n"" --lock-save-local Lock save global configuration\n"" --lock-save-global Lock load global configuration\n"" --lock-load-global Lock load global configuration\n") #define no_recognized _("Argument not recognized\n") + #endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index aeb5a52..8ff48dd 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -89,9 +89,13 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); #ifdef WEBKIT_FOUND - one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); - three = Glib::wrap(GTK_WIDGET(one)); - wndWeb->add(*three); + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); + three = Glib::wrap(GTK_WIDGET(one)); + wndWeb->add(*three); + } #endif this->flag_block_gui(); if (this->check_root() == 0) { @@ -423,7 +427,11 @@ void MainWindow::get_builder() { builder->get_widget("entrySecurityLogin", entrySecurityLogin); builder->get_widget("cmbDefaultDonw", cmbDefaultDonw); #ifdef WEBKIT_FOUND - builder->get_widget("wndWeb", wndWeb); + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + builder->get_widget("wndWeb", wndWeb); + } #endif builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb); @@ -918,23 +926,33 @@ void MainWindow::synopsis_show() { void MainWindow::open_browser() { #ifdef WEBKIT_FOUND - webkit_web_view_load_uri(one, link_doc); - wndWeb->show_all(); - #else - string cmd = cmd_xdg + string(_(link_doc)) + " &"; - string buf = ""; - if (geteuid() == 0) { - string response_user = getlogin(); - int size_s = std::snprintf(nullptr, 0, cmd_execute, response_user.c_str(), cmd.c_str()) + 1; - auto size = static_cast(size_s); - std::unique_ptr buf(new char[ size ]); - std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() ); - cmd = std::string( buf.get(), buf.get() + size - 1 ); + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + webkit_web_view_load_uri(one, link_doc); + wndWeb->show_all(); + } + else { + this->template_open_browser(); } - obj_process_system.call(cmd, "&"); + #else + this->template_open_browser(); #endif } +void MainWindow::template_open_browser() { + string cmd = cmd_xdg + string(_(link_doc)) + " &"; + string buf = ""; + if (geteuid() == 0) { + string response_user = getlogin(); + int size_s = std::snprintf(nullptr, 0, cmd_execute, response_user.c_str(), cmd.c_str()) + 1; + auto size = static_cast(size_s); + std::unique_ptr buf(new char[ size ]); + std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() ); + cmd = std::string( buf.get(), buf.get() + size - 1 ); + } + index_error = system(cmd.c_str()); +} void MainWindow::info_status_app(string stule) { boxInfo->remove_class("boxInfoMessOK"); boxInfo->remove_class("boxInfoMessError"); @@ -995,7 +1013,11 @@ void MainWindow::info_warning_error(int mess) { } MainWindow::~MainWindow() { #ifdef WEBKIT_FOUND - free(one); + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + free(one); + } #endif } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index ef07669..f8d1b41 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -18,6 +18,7 @@ #include "save.h" #include "load.h" #include "ubl-settings-bootloader-cm.h" +#include #ifdef WEBKIT_FOUND #include #endif @@ -152,6 +153,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_blocked_tree_view = false; bool flag_save_block = false; bool flag_open_browser = false; + int index_error = 0; size_t size_kernel = 0; size_t size_IPT = 0; size_t size_OTT = 0; @@ -196,6 +198,7 @@ class MainWindow : public Gtk::ApplicationWindow { void view_add_colums(Gtk::TreeView &treeView); vector read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m); void download_local_cfg(); + void template_open_browser(); void download_globl_cfg(); void flag_block_gui(); void info_status_app(string stule); From 646ab2f2d3ee9e7269433d286397b256fc872d8e Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 24 Apr 2023 17:04:49 +0600 Subject: [PATCH 095/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader_ru.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 180ba69..6f2fcd3 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -463,5 +463,5 @@ msgstr "vga_text (Текстовый вывод VGA (Coreboot))" #~ msgid "Disabled" #~ msgstr "Отключён" -msgid "No loading animation, full log1" +msgid "No loading animation, full log" msgstr "Отсутствие анимации загрузки с выводом журнала" From 085c66ec44ae2c31fa6eed915b18a3958c8a8ffe Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 24 Apr 2023 17:13:37 +0600 Subject: [PATCH 096/110] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B5=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/util.cc | 29 ----------------------------- ubl-settings-bootloader.glade | 1 + 2 files changed, 1 insertion(+), 29 deletions(-) diff --git a/source/util.cc b/source/util.cc index 8d8c496..3236cc1 100644 --- a/source/util.cc +++ b/source/util.cc @@ -166,33 +166,4 @@ vector pars_users() { return vec_users; } -string read_passwd(string username) { - string passwd = ""; - std::string line; - std::ifstream in("/etc/shadow"); - if (in.is_open()) { - while (getline(in, line)) { - if (line.find(username) != string::npos) { - size_t index_start = line.find(":"); - if (index_start != string::npos) { - size_t index_end = line.find(":", index_start + 1); - passwd = line.substr(index_start+1, index_end - index_start-1); - break; - } - } - } - } - in.close(); - return passwd; -} - -int synopsis_show(string str_link) { - // gettext("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/") - string cmd = "xdg-open " + str_link; - if (geteuid() == 0) { - string response_user = getlogin(); - cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; - } - return system(cmd.c_str()); -} } \ No newline at end of file diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 075d966..0b6ec9d 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -1468,6 +1468,7 @@ specified priority True False + True True From 7ba4533fc0db6da2006bea16d76a6e023f4c9e5f Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 24 Apr 2023 17:29:52 +0600 Subject: [PATCH 097/110] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D1=8C=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 2 +- source/{my_cmd.h => my_cmd_and_path.h} | 11 +++++++++++ source/ubl-settings-bootloader.cc | 14 ++++---------- source/ubl-settings-bootloader.h | 7 +------ 4 files changed, 17 insertions(+), 17 deletions(-) rename source/{my_cmd.h => my_cmd_and_path.h} (59%) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index c58563a..5c46ea0 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -35,7 +35,7 @@ set(SOURCE_FILES ubl-settings-bootloader-cm.h ubl-settings-bootloader.h ubl-settings-bootloader.cc - my_cmd.h + my_cmd_and_path.h save.h save.cc load.h diff --git a/source/my_cmd.h b/source/my_cmd_and_path.h similarity index 59% rename from source/my_cmd.h rename to source/my_cmd_and_path.h index f8e9e2a..5e65601 100644 --- a/source/my_cmd.h +++ b/source/my_cmd_and_path.h @@ -14,4 +14,15 @@ #define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \"" #define icon_checked "com.ublinux.ubl-settings-bootloader.checked" #define icon_warning "com.ublinux.ubl-settings-bootloader.warning" +#define kernel_csv "cmdline-linux.csv" +#define IPT_csv "grub-terminal-input.csv" +#define OTT_csv "grub-terminal-output.csv" + + +#define path_app "/usr/bin/" +#define path_glade "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade" +#define path_css "/usr/share/ubl-settings-bootloader/css/ubl-settings-bootloader.css" +#define app_name "ubl-settings-bootloader" +#define path_resources "/usr/share/ubl-settings-bootloader" +#define path_img_head_background "/usr/share/ubl-settings-bootloader/images/logo-background.png" #endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 8ff48dd..6531511 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -2,12 +2,6 @@ #include "ubl-settings-bootloader.h" using namespace std; -string path_app = "/usr/bin/"; -string path_glade= "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade"; -string path_css = "/usr/share/ubl-settings-bootloader/css/ubl-settings-bootloader.css"; -string app_name = "ubl-settings-bootloader"; -string path_resources = "/usr/share/ubl-settings-bootloader"; -const string path_img_head_background = "/usr/share/ubl-settings-bootloader/images/logo-background.png"; int socket_ext_id_I = 0; int socket_trd_id_I = 0; bool flag_save = false; @@ -153,9 +147,9 @@ void MainWindow::fill_in_view() { treeViewIPT->set_model(list_store_IPT); treeViewOTT->set_model(list_store_OTT); - vec_Option_kernel = this->read_file_and_view("cmdline-linux.csv", row_kernel, list_store_kernel); - vec_Option_IPT = this->read_file_and_view("grub-terminal-input.csv", row_IPT, list_store_IPT); - vec_Option_OTT = this->read_file_and_view("grub-terminal-output.csv", row_OTT, list_store_OTT); + vec_Option_kernel = this->read_file_and_view(kernel_csv, row_kernel, list_store_kernel); + vec_Option_IPT = this->read_file_and_view(IPT_csv, row_IPT, list_store_IPT); + vec_Option_OTT = this->read_file_and_view(OTT_csv, row_OTT, list_store_OTT); size_kernel = vec_Option_kernel.size(); size_IPT = vec_Option_IPT.size(); size_OTT = vec_Option_OTT.size(); @@ -350,7 +344,7 @@ string MainWindow::template_item_selected(int size, Glib::RefPtr vector MainWindow::read_file_and_view(string file_name ,Gtk::TreeModel::Row &row, Glib::RefPtr list_store_m) { - std::array, 5> arr_view = Utils::read_csv(path_resources + "/" + file_name); + std::array, 5> arr_view = Utils::read_csv(string(path_resources) + "/" + file_name); std::vector vec_Option = arr_view[0]; for (size_t index = 0; index < vec_Option.size(); index++) { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index f8d1b41..3e5beb6 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -12,7 +12,7 @@ #include #include #include -#include "my_cmd.h" +#include "my_cmd_and_path.h" #include "ubl-util-standard.c" #include "util.h" #include "save.h" @@ -27,13 +27,8 @@ #include "my_process.h" using namespace std; -extern string path_app; -extern string app_name; -extern string path_glade; -extern string path_css; extern int socket_ext_id_I; extern int socket_trd_id_I; -extern const string path_img_head_background; extern string version_application; extern bool flag_save; extern bool flag_save_local; From cf0200d95fc47217c9adbdfb251ec39b8ffc83dd Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 11:02:29 +0600 Subject: [PATCH 098/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20CMakeLists?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 5c46ea0..ccbf2ca 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -8,19 +8,14 @@ include_directories(${GTK_INCLUDE_DIRS}) link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) -find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) +option(WEBKIT_FOUND "" ON) -option(WEBKIT_FOUND "No" OFF) - -find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) -if(WEBKIT_LIBRARIES_FOUND) - option(WEBKIT_FOUND "Yes" ON) +if(WEBKIT_FOUND) PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) include_directories(${WEBKIT_INCLUDE_DIRS}) link_directories(${WEBKIT_LIBRARY_DIRS}) add_definitions(${WEBKIT_CFLAGS_OTHER}) endif() -configure_file(ubl-settings-bootloader.h.in ubl-settings-bootloader-cm.h) @@ -32,7 +27,6 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin set(SOURCE_FILES my_localization.h - ubl-settings-bootloader-cm.h ubl-settings-bootloader.h ubl-settings-bootloader.cc my_cmd_and_path.h From 33bd148f2ca5f09b9f67b8d90912e311de541332 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 11:03:10 +0600 Subject: [PATCH 099/110] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=20=D0=9E=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/my_cmd_and_path.h | 2 ++ source/save.cc | 1 - source/ubl-settings-bootloader.cc | 29 +++++++++++++++++++++++++++++ source/ubl-settings-bootloader.h | 5 ++++- source/ubl-settings-bootloader.h.in | 1 - 5 files changed, 35 insertions(+), 3 deletions(-) delete mode 100644 source/ubl-settings-bootloader.h.in diff --git a/source/my_cmd_and_path.h b/source/my_cmd_and_path.h index 5e65601..116fca4 100644 --- a/source/my_cmd_and_path.h +++ b/source/my_cmd_and_path.h @@ -25,4 +25,6 @@ #define app_name "ubl-settings-bootloader" #define path_resources "/usr/share/ubl-settings-bootloader" #define path_img_head_background "/usr/share/ubl-settings-bootloader/images/logo-background.png" +#define cmd_pars_list_os "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry" +#define cmd_last_launched_os "/usr/lib/ublinux/scripts/grub-functions exec_get_last_menuentry" #endif \ No newline at end of file diff --git a/source/save.cc b/source/save.cc index 1b9949f..c824093 100644 --- a/source/save.cc +++ b/source/save.cc @@ -138,7 +138,6 @@ void Save::save_one_cmd(string cmd1, string cmd_remove, string str_flag_save) { void Save::template_save(string cmd) { string str_error = ""; - cout << cmd << endl; process.call(cmd, ""); this->flag_no_save = false; str_error = process.get_cmd_error(); diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 6531511..833c202 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -100,6 +100,10 @@ void MainWindow::settings(){ this->change_password_protecc(); this->change_security_login(); this->set_active_boot_second(); + this->str_last_launched_os = this->pars_last_launched_os(); + vector os_control_list; + this->pars_os(os_control_list); + this->write_list_entry_os(os_control_list); this->download_local_cfg(); this->download_globl_cfg(); } @@ -116,6 +120,23 @@ void MainWindow::settings(){ this->event(); } +vector MainWindow::pars_os(vector &os_control_list) { + string str_list_os = obj_process_call.call_all_sections(cmd_pars_list_os); + os_control_list = Utils::split(str_list_os, '\n'); + return os_control_list; +} +string MainWindow::pars_last_launched_os() { + string str_list_os = obj_process_call.call_all_sections(cmd_last_launched_os); + Utils::str_replace_all(str_list_os, "\n" , ""); + return str_list_os; +} + +void MainWindow::write_list_entry_os(vector &os_control_list) { + for (string &name_os: os_control_list) { + cmbDefaultDonw->append(name_os); + } +} + void MainWindow::flag_block_gui() { if (flag_load_global == true) { btnLoadGlob->set_sensitive(false); @@ -851,6 +872,14 @@ void MainWindow::load_template(std::map* map_temp, string cmd) { this->set_entry(entryKernel, *map_temp, "GRUB_CMDLINE_LINUX"); this->set_entry(entryIPT, *map_temp, "GRUB_TERMINAL_INPUT"); this->set_entry(entryOTT, *map_temp, "GRUB_TERMINAL_OUTPUT"); + string str_last_launched_os_ubconfig = (*map_temp)["GRUB_DEFAULT"]; + if (str_last_launched_os_ubconfig.length() != 0) { + cmbDefaultDonw->set_active_text(str_last_launched_os_ubconfig); + } + else { + cmbDefaultDonw->set_active_text(str_last_launched_os); + } + } void MainWindow::set_entry(Gtk::Entry* entry , std::map &map_temp, string key) { diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 3e5beb6..54c1da5 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -17,7 +17,6 @@ #include "util.h" #include "save.h" #include "load.h" -#include "ubl-settings-bootloader-cm.h" #include #ifdef WEBKIT_FOUND #include @@ -148,6 +147,7 @@ class MainWindow : public Gtk::ApplicationWindow { bool flag_blocked_tree_view = false; bool flag_save_block = false; bool flag_open_browser = false; + string str_last_launched_os = ""; int index_error = 0; size_t size_kernel = 0; size_t size_IPT = 0; @@ -176,7 +176,10 @@ class MainWindow : public Gtk::ApplicationWindow { void localization(); void event(); void settings(); + string pars_last_launched_os(); + vector pars_os(vector &os_control_list); void fn_event_intelMax1(); + void write_list_entry_os(vector &os_control_list); void fn_event_intelMax4(); void synopsis_show(); void set_data_cfg(); diff --git a/source/ubl-settings-bootloader.h.in b/source/ubl-settings-bootloader.h.in deleted file mode 100644 index 17ba454..0000000 --- a/source/ubl-settings-bootloader.h.in +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine WEBKIT_FOUND \ No newline at end of file From e4e499fe6154029757251a9a82fc96bee3b2988b Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 11:06:03 +0600 Subject: [PATCH 100/110] =?UTF-8?q?define=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BE=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B8=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 2 - source/my_cmd_and_path.h | 30 --------- source/my_localization.h | 65 ------------------- source/ubl-settings-bootloader.h | 103 ++++++++++++++++++++++++++++++- 4 files changed, 101 insertions(+), 99 deletions(-) delete mode 100644 source/my_cmd_and_path.h delete mode 100644 source/my_localization.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index ccbf2ca..5800f09 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -26,10 +26,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection") set(SOURCE_FILES - my_localization.h ubl-settings-bootloader.h ubl-settings-bootloader.cc - my_cmd_and_path.h save.h save.cc load.h diff --git a/source/my_cmd_and_path.h b/source/my_cmd_and_path.h deleted file mode 100644 index 116fca4..0000000 --- a/source/my_cmd_and_path.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef MY_CMD_H -#define MY_CMD_H - -#define global_load "ubconfig --default --source global get boot" -#define system_load "ubconfig --default --source system get boot" - - -#define global_save "ubconfig --target global set boot " -#define system_save "ubconfig --target system set boot " -#define global_remove "ubconfig --target global remove boot " -#define system_remove "ubconfig --target system remove boot " -#define link_doc "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" -#define cmd_xdg "xdg-open " -#define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \"" -#define icon_checked "com.ublinux.ubl-settings-bootloader.checked" -#define icon_warning "com.ublinux.ubl-settings-bootloader.warning" -#define kernel_csv "cmdline-linux.csv" -#define IPT_csv "grub-terminal-input.csv" -#define OTT_csv "grub-terminal-output.csv" - - -#define path_app "/usr/bin/" -#define path_glade "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade" -#define path_css "/usr/share/ubl-settings-bootloader/css/ubl-settings-bootloader.css" -#define app_name "ubl-settings-bootloader" -#define path_resources "/usr/share/ubl-settings-bootloader" -#define path_img_head_background "/usr/share/ubl-settings-bootloader/images/logo-background.png" -#define cmd_pars_list_os "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry" -#define cmd_last_launched_os "/usr/lib/ublinux/scripts/grub-functions exec_get_last_menuentry" -#endif \ No newline at end of file diff --git a/source/my_localization.h b/source/my_localization.h deleted file mode 100644 index 88f8d03..0000000 --- a/source/my_localization.h +++ /dev/null @@ -1,65 +0,0 @@ - -#ifndef MY_LOCALIZATION -#define MY_LOCALIZATION -#include -#define copyright _("Copyright © UBSoft LLC, 2022 - ") -#define name_app _("ubl-settings-bootloader") -#define website _("https://wiki.ublinux.com") -#define project_Home_page _("Project Home Page") -#define configuring_system_boot _("Configuring system boot parameters") -#define system_boot _("System boot") -#define str_about _("About ubl-settings-bootloader") -#define command_line_parameters _("Command line parameters:") -#define load_default _("Load default:") -#define seconds _("seconds") -#define download_menu _("Download menu") -#define terminal_for_input _("Terminal for input") -#define terminal_for_output _("Terminal for output") -#define boot_selection_menu_timer _("Boot selection menu timer") -#define str_help _("Help") -#define str_about_1 _("About") -#define str_save _("Save") -#define str_load _("Load") -#define save_all _("Save to global and local configuration") -#define save_local _("Save local configuration") -#define save_global _("Save global configuration") -#define load_global _("Load global configuration") -#define load_local _("Load local configuration") -#define read_online _("Read online") -#define cancel _("Cancel") -#define always_redirect _("Always redirect") -#define boot_screen_display_mode _("Boot screen display mode:") -#define no_loading_animation _("No loading animation, full log") -#define boot_menu_user_name _("Boot menu user name:") -#define boot_menu_user_password _("Boot menu user password:") -#define last_successful_upload _("Last successful upload") -#define read_documentation_web _("Would you like to read documentation in the Web?") -#define redirected_documentation _("You will be redirected to documentation site, where user help pages are ""translated and supported by community.") -#define user_name_configuration_editing_code _("User name to enter boot configuration editing mode") -#define user_password_configuration_edit_mode _("User password to enter boot configuration edit mode") -#define loading_animation_with _("Loading animation with the magazine") -#define loading_animation_without _("Loading animation without a magazine") -#define lack_loading_animation _("Lack of loading animation with the output of the abbreviated log") -#define web_url _("https://wiki.ublinux.com") -#define enter_password _("Enter your password") -#define enter_login _("Enter login") -#define str_version _("ubl-settings-bootloader version: ") -#define local_read_error _("Local configuration reading error") -#define global_read_error _("Global configuration read error") -#define local_write_error _("Local configuration write error") -#define global_write_error _("Global configuration write error") -#define error_save_all _("Error saved local and global configuration") -#define local_load_ok _("Local configuration downloaded successfully") -#define global_load_ok _("Global configuration downloaded successfully") -#define local_ok_written _("Local configuration successfully written") -#define global_ok_written _("Global configuration successfully written") -#define successfully_save_all _("Successfully saved local and global configuration") -#define nothing_save _("Nothing to save!") -#define program_as_root _("The program must be run as root") -#define str_active _("Active") -#define str_option _("Option") -#define str_description _("Description") -#define str_help_h _("GTK settings bootloader for UBLinux\n""\n""Usage: ubl-settings-bootloader [OPTIONS...]\n""Options:\n"" -h, --help\t Show this help\n"" -V, --version\t Show package version\n"" --lock-help Lock utility help\n"" --lock-save Lock saving local and global configuration\n"" --lock-save-local Lock save global configuration\n"" --lock-save-global Lock load global configuration\n"" --lock-load-global Lock load global configuration\n") -#define no_recognized _("Argument not recognized\n") - -#endif \ No newline at end of file diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 54c1da5..2a7f5af 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -12,7 +12,6 @@ #include #include #include -#include "my_cmd_and_path.h" #include "ubl-util-standard.c" #include "util.h" #include "save.h" @@ -21,7 +20,6 @@ #ifdef WEBKIT_FOUND #include #endif -#include "my_localization.h" #include "my_process.h" using namespace std; @@ -35,6 +33,107 @@ extern bool flag_save_global; extern bool flag_load_global; extern bool flag_lock_help; void me_thread(string cmd); + +#define copyright _("Copyright © UBSoft LLC, 2022 - ") +#define name_app _("ubl-settings-bootloader") +#define website _("https://wiki.ublinux.com") +#define project_Home_page _("Project Home Page") +#define configuring_system_boot _("Configuring system boot parameters") +#define system_boot _("System boot") +#define str_about _("About ubl-settings-bootloader") +#define command_line_parameters _("Command line parameters:") +#define load_default _("Load default:") +#define seconds _("seconds") +#define download_menu _("Download menu") +#define terminal_for_input _("Terminal for input") +#define terminal_for_output _("Terminal for output") +#define boot_selection_menu_timer _("Boot selection menu timer") +#define str_help _("Help") +#define str_about_1 _("About") +#define str_save _("Save") +#define str_load _("Load") +#define save_all _("Save to global and local configuration") +#define save_local _("Save local configuration") +#define save_global _("Save global configuration") +#define load_global _("Load global configuration") +#define load_local _("Load local configuration") +#define read_online _("Read online") +#define cancel _("Cancel") +#define always_redirect _("Always redirect") +#define boot_screen_display_mode _("Boot screen display mode:") +#define no_loading_animation _("No loading animation, full log") +#define boot_menu_user_name _("Boot menu user name:") +#define boot_menu_user_password _("Boot menu user password:") +#define last_successful_upload _("Last successful upload") +#define read_documentation_web _("Would you like to read documentation in the Web?") +#define redirected_documentation _("You will be redirected to documentation site, where user help pages are ""translated and supported by community.") +#define user_name_configuration_editing_code _("User name to enter boot configuration editing mode") +#define user_password_configuration_edit_mode _("User password to enter boot configuration edit mode") +#define loading_animation_with _("Loading animation with the magazine") +#define loading_animation_without _("Loading animation without a magazine") +#define lack_loading_animation _("Lack of loading animation with the output of the abbreviated log") +#define web_url _("https://wiki.ublinux.com") +#define enter_password _("Enter your password") +#define enter_login _("Enter login") +#define str_version _("ubl-settings-bootloader version: ") +#define local_read_error _("Local configuration reading error") +#define global_read_error _("Global configuration read error") +#define local_write_error _("Local configuration write error") +#define global_write_error _("Global configuration write error") +#define error_save_all _("Error saved local and global configuration") +#define local_load_ok _("Local configuration downloaded successfully") +#define global_load_ok _("Global configuration downloaded successfully") +#define local_ok_written _("Local configuration successfully written") +#define global_ok_written _("Global configuration successfully written") +#define successfully_save_all _("Successfully saved local and global configuration") +#define nothing_save _("Nothing to save!") +#define program_as_root _("The program must be run as root") +#define str_active _("Active") +#define str_option _("Option") +#define str_description _("Description") +#define str_help_h _("GTK settings bootloader for UBLinux\n""\n""Usage: ubl-settings-bootloader [OPTIONS...]\n""Options:\n"" -h, --help\t Show this help\n"" -V, --version\t Show package version\n"" --lock-help Lock utility help\n"" --lock-save Lock saving local and global configuration\n"" --lock-save-local Lock save global configuration\n"" --lock-save-global Lock load global configuration\n"" --lock-load-global Lock load global configuration\n") +#define no_recognized _("Argument not recognized\n") + + +#define global_load "ubconfig --default --source global get boot" +#define system_load "ubconfig --default --source system get boot" +#define global_save "ubconfig --target global set boot " +#define system_save "ubconfig --target system set boot " +#define global_remove "ubconfig --target global remove boot " +#define system_remove "ubconfig --target system remove boot " +#define link_doc "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" +#define cmd_xdg "xdg-open " +#define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \"" +#define icon_checked "com.ublinux.ubl-settings-bootloader.checked" +#define icon_warning "com.ublinux.ubl-settings-bootloader.warning" +#define kernel_csv "cmdline-linux.csv" +#define IPT_csv "grub-terminal-input.csv" +#define OTT_csv "grub-terminal-output.csv" +#define path_app "/usr/bin/" +#define path_glade "/usr/share/ubl-settings-bootloader/ui/ubl-settings-bootloader.glade" +#define path_css "/usr/share/ubl-settings-bootloader/css/ubl-settings-bootloader.css" +#define app_name "ubl-settings-bootloader" +#define path_resources "/usr/share/ubl-settings-bootloader" +#define path_img_head_background "/usr/share/ubl-settings-bootloader/images/logo-background.png" +#define cmd_pars_list_os "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry" +#define cmd_last_launched_os "/usr/lib/ublinux/scripts/grub-functions exec_get_last_menuentry" + + + + + + + + + + + + + + + + + class CmdArgParser : public Glib::OptionGroup { public: From 7fb35b8e9c9f680e4353a11bc64e12a97e957c8d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 11:10:11 +0600 Subject: [PATCH 101/110] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.h | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 2a7f5af..1b091da 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -119,21 +119,6 @@ void me_thread(string cmd); #define cmd_last_launched_os "/usr/lib/ublinux/scripts/grub-functions exec_get_last_menuentry" - - - - - - - - - - - - - - - class CmdArgParser : public Glib::OptionGroup { public: From 6fc59b69641e386f6e9b09eec8c8b60a30bc980d Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 11:14:39 +0600 Subject: [PATCH 102/110] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5=20css=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 22 +++++++++++----------- source/ubl-settings-bootloader.h | 3 ++- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 833c202..e7207ba 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -112,7 +112,7 @@ void MainWindow::settings(){ btnLoad->set_sensitive(false); btnSave->set_sensitive(false); imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); - info_status_app("boxInfoMessError"); + info_status_app(info_box_error_css); lblWarning->set_text(program_as_root); this->set_active_boot_second(); this->fill_in_view(); @@ -537,13 +537,13 @@ vector MainWindow::get_setting_entry_all(string key, std::map get_text().length() == 0) { - info_status_app("boxInfoMessError"); + info_status_app(info_box_error_css); imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); lblWarning->set_text(enter_password); boxSave->set_sensitive(false); } else { - info_status_app("boxInfoMessOK"); + info_status_app(info_box_ok_css); imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); boxSave->set_sensitive(true); @@ -557,13 +557,13 @@ bool MainWindow::focus_out_txt_password(GdkEventFocus*) { } bool MainWindow::focus_out_txt_login(GdkEventFocus*) { if (entrySecurityLogin->get_text().length() == 0) { - info_status_app("boxInfoMessError"); + info_status_app(info_box_error_css); imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); lblWarning->set_text(enter_login); boxSave->set_sensitive(false); } else { - info_status_app("boxInfoMessOK"); + info_status_app(info_box_ok_css); imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); map_cmd_selection["GRUB_USER"] = entrySecurityLogin->get_text(); @@ -684,7 +684,7 @@ void MainWindow::change_security_login() { entrySecurityLogin->set_sensitive(false); entrySecurityLogin->set_text(""); boxSave->set_sensitive(true); - info_status_app("boxInfoMessOK"); + info_status_app(info_box_ok_css); imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); } @@ -719,7 +719,7 @@ void MainWindow::change_password_protecc() { entryPasswordProtecc->set_sensitive(false); entryPasswordProtecc->set_text(""); boxSave->set_sensitive(true); - info_status_app("boxInfoMessOK"); + info_status_app(info_box_ok_css); imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); lblWarning->set_text(""); } @@ -977,14 +977,14 @@ void MainWindow::template_open_browser() { index_error = system(cmd.c_str()); } void MainWindow::info_status_app(string stule) { - boxInfo->remove_class("boxInfoMessOK"); - boxInfo->remove_class("boxInfoMessError"); + boxInfo->remove_class(info_box_ok_css); + boxInfo->remove_class(info_box_error_css); boxInfo->add_class(stule); } void MainWindow::info_warning_error(int mess) { if (obj_load.get_count_error() > 0 || obj_save.get_count_error() > 0) { - info_status_app("boxInfoMessError"); + info_status_app(info_box_error_css); imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); string mess_error = ""; if (mess == 0) { @@ -1012,7 +1012,7 @@ void MainWindow::info_warning_error(int mess) { obj_save.set_count_error(0); } else { - info_status_app("boxInfoMessOK"); + info_status_app(info_box_ok_css); imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); if (mess == 0) { lblWarning->set_text(local_load_ok); diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 1b091da..730095f 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -117,7 +117,8 @@ void me_thread(string cmd); #define path_img_head_background "/usr/share/ubl-settings-bootloader/images/logo-background.png" #define cmd_pars_list_os "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry" #define cmd_last_launched_os "/usr/lib/ublinux/scripts/grub-functions exec_get_last_menuentry" - +#define info_box_ok_css "boxInfoMessOK" +#define info_box_error_css "boxInfoMessError" class CmdArgParser : public Glib::OptionGroup { From cc57a1dce2b3dc42b3cad800721bc75f41b4ce2f Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 15:00:10 +0600 Subject: [PATCH 103/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.glade | 1 + ubl-settings-bootloader.pot | 220 ++++++++++++++++++++---------- ubl-settings-bootloader_ru.po | 245 ++++++++++++++++++++++------------ 3 files changed, 316 insertions(+), 150 deletions(-) diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 0b6ec9d..c1e8f69 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -221,6 +221,7 @@ specified priority 550 False com.ublinux.ubl-settings-bootloader + center True diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index d19a63c..65e54d9 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -1,61 +1,81 @@ -# Language translations for ubl-settings-bootloader package. -# Copyright (C) 2022, UBTech LLC -# This file is distributed under the same license as the ubl-settings-bootloader package. -# UBLinux Team , 2022 +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: ubl-settings-bootloader 1.0\n" -"Report-Msgid-Bugs-To: info@ublinux.com\n" -"POT-Creation-Date: 2023-01-01 00:00+0600\n" -"PO-Revision-Date: 2023-01-01 00:00+0600\n" -"Last-Translator: UBLinux Team \n" -"Language-Team: UBLinux Team \n" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-25 14:57+0600\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Would you like to read documentation in the Web?" +#: source/ubl-settings-bootloader.h:52 source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.cc:301 +msgid "About" msgstr "" -msgid "" -"You will be redirected to documentation site, where user help pages are " -"translated and supported by community." +#: source/ubl-settings-bootloader.h:43 +msgid "About ubl-settings-bootloader" msgstr "" -msgid "Cancel" +#: source/ubl-settings-bootloader.h:91 source/ubl-settings-bootloader.cc:337 +#: source/ubl-settings-bootloader.cc:199 +msgid "Active" msgstr "" -msgid "Read online" +#: source/ubl-settings-bootloader.h:62 +msgid "Always redirect" msgstr "" -msgid "Always redirect" +#: source/ubl-settings-bootloader.h:95 +msgid "Argument not recognized\n" msgstr "" -#: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 -msgid "About" +#: source/ubl-settings-bootloader.h:65 +msgid "Boot menu user name:" msgstr "" -#: source/ubl-settings-bootloader.cc:337 source/ubl-settings-bootloader.cc:199 -msgid "Active" +#: source/ubl-settings-bootloader.h:66 +msgid "Boot menu user password:" msgstr "" -#: source/ubl-settings-bootloader.cc:421 source/ubl-settings-bootloader.cc:422 -#: source/ubl-settings-bootloader.cc:423 source/ubl-settings-bootloader.cc:289 -#: source/ubl-settings-bootloader.cc:290 source/ubl-settings-bootloader.cc:291 +#: source/ubl-settings-bootloader.h:63 +msgid "Boot screen display mode:" +msgstr "" + +#: source/ubl-settings-bootloader.h:50 +msgid "Boot selection menu timer" +msgstr "" + +#: source/ubl-settings-bootloader.h:61 +msgid "Cancel" +msgstr "" + +#: source/ubl-settings-bootloader.h:44 source/ubl-settings-bootloader.cc:421 +#: source/ubl-settings-bootloader.cc:422 source/ubl-settings-bootloader.cc:423 +#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 +#: source/ubl-settings-bootloader.cc:291 msgid "Command line parameters:" msgstr "" -#: source/ubl-settings-bootloader.cc:417 source/ubl-settings-bootloader.cc:285 +#: source/ubl-settings-bootloader.h:41 source/ubl-settings-bootloader.cc:417 +#: source/ubl-settings-bootloader.cc:285 msgid "Configuring system boot parameters" msgstr "" msgid "Configuring the boot loader settings" msgstr "" -#: source/ubl-settings-bootloader.cc:411 source/ubl-settings-bootloader.cc:279 +#: source/ubl-settings-bootloader.h:37 source/ubl-settings-bootloader.cc:411 +#: source/ubl-settings-bootloader.cc:279 msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" @@ -63,7 +83,8 @@ msgstr "" msgid "Default download" msgstr "" -#: source/ubl-settings-bootloader.cc:339 source/ubl-settings-bootloader.cc:201 +#: source/ubl-settings-bootloader.h:93 source/ubl-settings-bootloader.cc:339 +#: source/ubl-settings-bootloader.cc:201 msgid "Description" msgstr "" @@ -85,7 +106,8 @@ msgstr "" msgid "Disable local APIC" msgstr "" -#: source/ubl-settings-bootloader.cc:426 source/ubl-settings-bootloader.cc:294 +#: source/ubl-settings-bootloader.h:47 source/ubl-settings-bootloader.cc:426 +#: source/ubl-settings-bootloader.cc:294 msgid "Download menu" msgstr "" @@ -95,15 +117,16 @@ msgstr "" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "" -#: source/ubl-settings-bootloader.cc:496 +#: source/ubl-settings-bootloader.h:77 source/ubl-settings-bootloader.cc:496 msgid "Enter login" msgstr "" -#: source/ubl-settings-bootloader.cc:476 +#: source/ubl-settings-bootloader.h:76 source/ubl-settings-bootloader.cc:476 msgid "Enter your password" msgstr "" -#: source/ubl-settings-bootloader.cc:897 source/ubl-settings-bootloader.cc:443 +#: source/ubl-settings-bootloader.h:83 source/ubl-settings-bootloader.cc:897 +#: source/ubl-settings-bootloader.cc:443 msgid "Error saved local and global configuration" msgstr "" @@ -119,23 +142,43 @@ msgid "" " -V, --version\t Show package version\n" msgstr "" -#: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 +#: source/ubl-settings-bootloader.h:94 +msgid "" +"GTK settings bootloader for UBLinux\n" +"\n" +"Usage: ubl-settings-bootloader [OPTIONS...]\n" +"Options:\n" +" -h, --help\t Show this help\n" +" -V, --version\t Show package version\n" +" --lock-help Lock utility help\n" +" --lock-save Lock saving local and global configuration\n" +" --lock-save-local Lock save global configuration\n" +" --lock-save-global Lock load global configuration\n" +" --lock-load-global Lock load global configuration\n" +msgstr "" + +#: source/ubl-settings-bootloader.h:85 source/ubl-settings-bootloader.cc:911 +#: source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" msgstr "" -#: source/ubl-settings-bootloader.cc:885 source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.h:80 source/ubl-settings-bootloader.cc:885 +#: source/ubl-settings-bootloader.cc:431 msgid "Global configuration read error" msgstr "" -#: source/ubl-settings-bootloader.cc:917 source/ubl-settings-bootloader.cc:461 +#: source/ubl-settings-bootloader.h:87 source/ubl-settings-bootloader.cc:917 +#: source/ubl-settings-bootloader.cc:461 msgid "Global configuration successfully written" msgstr "" -#: source/ubl-settings-bootloader.cc:893 source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.h:82 source/ubl-settings-bootloader.cc:893 +#: source/ubl-settings-bootloader.cc:439 msgid "Global configuration write error" msgstr "" -#: source/ubl-settings-bootloader.cc:430 source/ubl-settings-bootloader.cc:300 +#: source/ubl-settings-bootloader.h:51 source/ubl-settings-bootloader.cc:430 +#: source/ubl-settings-bootloader.cc:300 msgid "Help" msgstr "" @@ -143,30 +186,33 @@ msgstr "" msgid "Input terminal" msgstr "" -#: source/ubl-settings-bootloader.cc:451 +#: source/ubl-settings-bootloader.h:74 source/ubl-settings-bootloader.cc:451 msgid "Lack of loading animation with the output of the abbreviated log" msgstr "" msgid "Last Successful Download" msgstr "" -#: source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:67 source/ubl-settings-bootloader.cc:452 msgid "Last successful upload" msgstr "" -#: source/ubl-settings-bootloader.cc:438 source/ubl-settings-bootloader.cc:308 +#: source/ubl-settings-bootloader.h:54 source/ubl-settings-bootloader.cc:438 +#: source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "" -#: source/ubl-settings-bootloader.cc:424 +#: source/ubl-settings-bootloader.h:45 source/ubl-settings-bootloader.cc:424 msgid "Load default:" msgstr "" -#: source/ubl-settings-bootloader.cc:435 source/ubl-settings-bootloader.cc:305 +#: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.cc:305 msgid "Load global configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:436 source/ubl-settings-bootloader.cc:306 +#: source/ubl-settings-bootloader.h:59 source/ubl-settings-bootloader.cc:436 +#: source/ubl-settings-bootloader.cc:306 msgid "Load local configuration" msgstr "" @@ -186,27 +232,31 @@ msgstr "" msgid "Load screen display mode:" msgstr "" -#: source/ubl-settings-bootloader.cc:448 +#: source/ubl-settings-bootloader.h:72 source/ubl-settings-bootloader.cc:448 msgid "Loading animation with the magazine" msgstr "" -#: source/ubl-settings-bootloader.cc:449 +#: source/ubl-settings-bootloader.h:73 source/ubl-settings-bootloader.cc:449 msgid "Loading animation without a magazine" msgstr "" -#: source/ubl-settings-bootloader.cc:908 source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:84 source/ubl-settings-bootloader.cc:908 +#: source/ubl-settings-bootloader.cc:452 msgid "Local configuration downloaded successfully" msgstr "" -#: source/ubl-settings-bootloader.cc:881 source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:79 source/ubl-settings-bootloader.cc:881 +#: source/ubl-settings-bootloader.cc:427 msgid "Local configuration reading error" msgstr "" -#: source/ubl-settings-bootloader.cc:914 source/ubl-settings-bootloader.cc:458 +#: source/ubl-settings-bootloader.h:86 source/ubl-settings-bootloader.cc:914 +#: source/ubl-settings-bootloader.cc:458 msgid "Local configuration successfully written" msgstr "" -#: source/ubl-settings-bootloader.cc:889 source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.h:81 source/ubl-settings-bootloader.cc:889 +#: source/ubl-settings-bootloader.cc:435 msgid "Local configuration write error" msgstr "" @@ -217,19 +267,25 @@ msgstr "" msgid "Maximum performance, power management" msgstr "" +#: source/ubl-settings-bootloader.h:64 +msgid "No loading animation, full log" +msgstr "" + #: source/ubl-settings-bootloader.cc:444 source/ubl-settings-bootloader.cc:446 msgid "Not available" msgstr "" -#: source/ubl-settings-bootloader.cc:923 source/ubl-settings-bootloader.cc:341 -#: source/ubl-settings-bootloader.cc:354 source/ubl-settings-bootloader.cc:367 +#: source/ubl-settings-bootloader.h:89 source/ubl-settings-bootloader.cc:923 +#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 +#: source/ubl-settings-bootloader.cc:367 msgid "Nothing to save!" msgstr "" msgid "Open Firmware Console" msgstr "" -#: source/ubl-settings-bootloader.cc:338 source/ubl-settings-bootloader.cc:200 +#: source/ubl-settings-bootloader.h:92 source/ubl-settings-bootloader.cc:338 +#: source/ubl-settings-bootloader.cc:200 msgid "Option" msgstr "" @@ -252,24 +308,33 @@ msgstr "" msgid "Prevents the processor from going into a deep sleep state" msgstr "" -#: source/ubl-settings-bootloader.cc:416 source/ubl-settings-bootloader.cc:420 -#: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 +#: source/ubl-settings-bootloader.h:40 source/ubl-settings-bootloader.cc:416 +#: source/ubl-settings-bootloader.cc:420 source/ubl-settings-bootloader.cc:284 +#: source/ubl-settings-bootloader.cc:288 msgid "Project Home Page" msgstr "" -#: source/ubl-settings-bootloader.cc:437 source/ubl-settings-bootloader.cc:307 +#: source/ubl-settings-bootloader.h:60 +msgid "Read online" +msgstr "" + +#: source/ubl-settings-bootloader.h:53 source/ubl-settings-bootloader.cc:437 +#: source/ubl-settings-bootloader.cc:307 msgid "Save" msgstr "" -#: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 +#: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.cc:434 +#: source/ubl-settings-bootloader.cc:304 msgid "Save global configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 +#: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.cc:433 +#: source/ubl-settings-bootloader.cc:303 msgid "Save local configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 +#: source/ubl-settings-bootloader.h:55 source/ubl-settings-bootloader.cc:432 +#: source/ubl-settings-bootloader.cc:302 msgid "Save to global and local configuration" msgstr "" @@ -290,19 +355,20 @@ msgstr "" msgid "Single User Mode" msgstr "" -#: source/ubl-settings-bootloader.cc:920 source/ubl-settings-bootloader.cc:464 +#: source/ubl-settings-bootloader.h:88 source/ubl-settings-bootloader.cc:920 +#: source/ubl-settings-bootloader.cc:464 msgid "Successfully saved local and global configuration" msgstr "" -#: source/ubl-settings-bootloader.cc:419 +#: source/ubl-settings-bootloader.h:42 source/ubl-settings-bootloader.cc:419 msgid "System boot" msgstr "" -#: source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:48 source/ubl-settings-bootloader.cc:427 msgid "Terminal for input" msgstr "" -#: source/ubl-settings-bootloader.cc:428 +#: source/ubl-settings-bootloader.h:49 source/ubl-settings-bootloader.cc:428 msgid "Terminal for output" msgstr "" @@ -310,7 +376,8 @@ msgstr "" msgid "The last selection will become the default boot choice" msgstr "" -#: source/ubl-settings-bootloader.cc:107 source/ubl-settings-bootloader.cc:94 +#: source/ubl-settings-bootloader.h:90 source/ubl-settings-bootloader.cc:107 +#: source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" msgstr "" @@ -320,13 +387,27 @@ msgstr "" msgid "USB Keyboard (HID Boot protocol)" msgstr "" -#: source/ubl-settings-bootloader.cc:440 +#: source/ubl-settings-bootloader.h:70 source/ubl-settings-bootloader.cc:440 msgid "User name to enter boot configuration editing mode" msgstr "" +#: source/ubl-settings-bootloader.h:71 +msgid "User password to enter boot configuration edit mode" +msgstr "" + msgid "VGA text output (Coreboot)" msgstr "" +#: source/ubl-settings-bootloader.h:68 +msgid "Would you like to read documentation in the Web?" +msgstr "" + +#: source/ubl-settings-bootloader.h:69 +msgid "" +"You will be redirected to documentation site, where user help pages are " +"translated and supported by community." +msgstr "" + msgid "acpi=off (Disable ACPI)" msgstr "" @@ -345,6 +426,7 @@ msgstr "" msgid "gfxterm (Output in graphical mode)" msgstr "" +#: source/ubl-settings-bootloader.h:39 source/ubl-settings-bootloader.h:75 #: source/ubl-settings-bootloader.cc:414 source/ubl-settings-bootloader.cc:282 msgid "https://wiki.ublinux.com" msgstr "" @@ -382,7 +464,7 @@ msgstr "" msgid "quiet (Downloading without text messages)" msgstr "" -#: source/ubl-settings-bootloader.cc:425 +#: source/ubl-settings-bootloader.h:46 source/ubl-settings-bootloader.cc:425 msgid "seconds" msgstr "" @@ -400,13 +482,15 @@ msgstr "" msgid "splash (Show welcome window)" msgstr "" -#: source/ubl-settings-bootloader.cc:413 source/ubl-settings-bootloader.cc:418 -#: source/ubl-settings-bootloader.cc:439 source/ubl-settings-bootloader.cc:281 -#: source/ubl-settings-bootloader.cc:286 source/ubl-settings-bootloader.cc:309 +#: source/ubl-settings-bootloader.h:38 source/ubl-settings-bootloader.cc:413 +#: source/ubl-settings-bootloader.cc:418 source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 +#: source/ubl-settings-bootloader.cc:309 msgid "ubl-settings-bootloader" msgstr "" -#: source/ubl-settings-bootloader.cc:947 source/ubl-settings-bootloader.cc:547 +#: source/ubl-settings-bootloader.h:78 source/ubl-settings-bootloader.cc:947 +#: source/ubl-settings-bootloader.cc:547 msgid "ubl-settings-bootloader version: " msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 6f2fcd3..b1187e2 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ubl-settings-bootloader 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-07 16:46+0600\n" +"POT-Creation-Date: 2023-04-25 14:57+0600\n" "PO-Revision-Date: 2020-02-22 23:28+0600\n" "Last-Translator: ublinux \n" "Language-Team: Russian - UBLinux Team \n" @@ -17,50 +17,65 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Would you like to read documentation in the Web?" -msgstr "Вы хотите прочитать справку в Сети?" +#: source/ubl-settings-bootloader.h:52 source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.cc:301 +msgid "About" +msgstr "О программе" -msgid "" -"You will be redirected to documentation site, where user help pages are " -"translated and supported by community." -msgstr "" -"Вы будете перенаправлены на сайт с документацией где страницы помощи " -"переводятся и поддерживаются сообществом." +#: source/ubl-settings-bootloader.h:43 +msgid "About ubl-settings-bootloader" +msgstr "О программе Загрузка системы" -msgid "Cancel" -msgstr "Отменить" +#: source/ubl-settings-bootloader.h:91 source/ubl-settings-bootloader.cc:337 +#: source/ubl-settings-bootloader.cc:199 +msgid "Active" +msgstr "Активно" +#: source/ubl-settings-bootloader.h:62 msgid "Always redirect" msgstr "Всегда перенаправлять" -msgid "Read online" -msgstr "Прочитать онлайн" +#: source/ubl-settings-bootloader.h:95 +msgid "Argument not recognized\n" +msgstr "" -msgid "About ubl-settings-bootloader" -msgstr "О программе Загрузка системы" +#: source/ubl-settings-bootloader.h:65 +msgid "Boot menu user name:" +msgstr "Имя пользователя меню загрузки:" -#: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 -msgid "About" -msgstr "О программе" +#: source/ubl-settings-bootloader.h:66 +msgid "Boot menu user password:" +msgstr "Пароль пользователя меню загрузки:" -#: source/ubl-settings-bootloader.cc:337 source/ubl-settings-bootloader.cc:199 -msgid "Active" -msgstr "Активно" +#: source/ubl-settings-bootloader.h:63 +msgid "Boot screen display mode:" +msgstr "Режим отображения экрана загрузки:" + +#: source/ubl-settings-bootloader.h:50 +msgid "Boot selection menu timer" +msgstr "Таймер меню выбора варианта загрузки" + +#: source/ubl-settings-bootloader.h:61 +msgid "Cancel" +msgstr "Отменить" -#: source/ubl-settings-bootloader.cc:421 source/ubl-settings-bootloader.cc:422 -#: source/ubl-settings-bootloader.cc:423 source/ubl-settings-bootloader.cc:289 -#: source/ubl-settings-bootloader.cc:290 source/ubl-settings-bootloader.cc:291 +#: source/ubl-settings-bootloader.h:44 source/ubl-settings-bootloader.cc:421 +#: source/ubl-settings-bootloader.cc:422 source/ubl-settings-bootloader.cc:423 +#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 +#: source/ubl-settings-bootloader.cc:291 msgid "Command line parameters:" msgstr "Параметры командной строки:" -#: source/ubl-settings-bootloader.cc:417 source/ubl-settings-bootloader.cc:285 +#: source/ubl-settings-bootloader.h:41 source/ubl-settings-bootloader.cc:417 +#: source/ubl-settings-bootloader.cc:285 msgid "Configuring system boot parameters" msgstr "Настройка параметров загрузки системы" msgid "Configuring the boot loader settings" msgstr "Настройка параметров загрузчика системы" -#: source/ubl-settings-bootloader.cc:411 source/ubl-settings-bootloader.cc:279 +#: source/ubl-settings-bootloader.h:37 source/ubl-settings-bootloader.cc:411 +#: source/ubl-settings-bootloader.cc:279 msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" @@ -69,7 +84,8 @@ msgstr "" msgid "Default download" msgstr "По умолчанию" -#: source/ubl-settings-bootloader.cc:339 source/ubl-settings-bootloader.cc:201 +#: source/ubl-settings-bootloader.h:93 source/ubl-settings-bootloader.cc:339 +#: source/ubl-settings-bootloader.cc:201 msgid "Description" msgstr "Описание" @@ -91,7 +107,8 @@ msgstr "Отключить выбор и загрузку ядром драйв msgid "Disable local APIC" msgstr "Отключить локальный APIC" -#: source/ubl-settings-bootloader.cc:426 source/ubl-settings-bootloader.cc:294 +#: source/ubl-settings-bootloader.h:47 source/ubl-settings-bootloader.cc:426 +#: source/ubl-settings-bootloader.cc:294 msgid "Download menu" msgstr "Меню загрузки" @@ -101,15 +118,16 @@ msgstr "Загрузка без текстовых сообщений" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" -#: source/ubl-settings-bootloader.cc:496 +#: source/ubl-settings-bootloader.h:77 source/ubl-settings-bootloader.cc:496 msgid "Enter login" msgstr "Введите логин" -#: source/ubl-settings-bootloader.cc:476 +#: source/ubl-settings-bootloader.h:76 source/ubl-settings-bootloader.cc:476 msgid "Enter your password" msgstr "Введите пароль" -#: source/ubl-settings-bootloader.cc:897 source/ubl-settings-bootloader.cc:443 +#: source/ubl-settings-bootloader.h:83 source/ubl-settings-bootloader.cc:897 +#: source/ubl-settings-bootloader.cc:443 #, fuzzy msgid "Error saved local and global configuration" msgstr "Успешно записаны локальная и глобальная конфигурация" @@ -117,6 +135,16 @@ msgstr "Успешно записаны локальная и глобальна msgid "Forced selection of an Intel sound device driver" msgstr "Принудительный выбор драйвера звукового устройства от Intel" +msgid "" +"GTK settings bootloader for UBLinux\n" +"\n" +"Usage: ubl-settings-bootloader [OPTIONS...]\n" +"Options:\n" +" -h, --help\t Show this help\n" +" -V, --version\t Show package version\n" +msgstr "" + +#: source/ubl-settings-bootloader.h:94 msgid "" "GTK settings bootloader for UBLinux\n" "\n" @@ -137,28 +165,34 @@ msgstr "" " -h, --help\t Показать параметры справки\n" " -V, --version\t Показать версию пакета\n" " --lock-help Блокировка вызова справки\n" -" --lock-save Блокировка сохранения локальной и глобальной конфигурации\n" +" --lock-save Блокировка сохранения локальной и глобальной " +"конфигурации\n" " --lock-save-local Блокировка сохранения локальной конфигурации\n" " --lock-save-global Блокировка сохранения глобальной конфигурации\n" " --lock-load-global Блокировка загрузки глобальной конфигурации\n" -#: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 +#: source/ubl-settings-bootloader.h:85 source/ubl-settings-bootloader.cc:911 +#: source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" msgstr "Успешно загружена глобальная конфигурация" -#: source/ubl-settings-bootloader.cc:885 source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.h:80 source/ubl-settings-bootloader.cc:885 +#: source/ubl-settings-bootloader.cc:431 msgid "Global configuration read error" msgstr "Ошибка чтения глобальной конфигурации" -#: source/ubl-settings-bootloader.cc:917 source/ubl-settings-bootloader.cc:461 +#: source/ubl-settings-bootloader.h:87 source/ubl-settings-bootloader.cc:917 +#: source/ubl-settings-bootloader.cc:461 msgid "Global configuration successfully written" msgstr "Успешно записана глобальная конфигурация" -#: source/ubl-settings-bootloader.cc:893 source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.h:82 source/ubl-settings-bootloader.cc:893 +#: source/ubl-settings-bootloader.cc:439 msgid "Global configuration write error" msgstr "Ошибка записи глобальной конфигурации" -#: source/ubl-settings-bootloader.cc:430 source/ubl-settings-bootloader.cc:300 +#: source/ubl-settings-bootloader.h:51 source/ubl-settings-bootloader.cc:430 +#: source/ubl-settings-bootloader.cc:300 msgid "Help" msgstr "Справка" @@ -167,7 +201,7 @@ msgstr "Справка" msgid "Input terminal" msgstr "Терминал для вывода" -#: source/ubl-settings-bootloader.cc:451 +#: source/ubl-settings-bootloader.h:74 source/ubl-settings-bootloader.cc:451 msgid "Lack of loading animation with the output of the abbreviated log" msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" @@ -175,63 +209,73 @@ msgstr "Отсутствие анимации загрузки с выводом msgid "Last Successful Download" msgstr "Последняя удачная загрузка" -#: source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:67 source/ubl-settings-bootloader.cc:452 msgid "Last successful upload" msgstr "Последняя удачная загрузка" -#: source/ubl-settings-bootloader.cc:438 source/ubl-settings-bootloader.cc:308 +#: source/ubl-settings-bootloader.h:54 source/ubl-settings-bootloader.cc:438 +#: source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "Загрузить" -#: source/ubl-settings-bootloader.cc:424 +#: source/ubl-settings-bootloader.h:45 source/ubl-settings-bootloader.cc:424 msgid "Load default:" msgstr "Загрузка по умолчанию:" -#: source/ubl-settings-bootloader.cc:435 source/ubl-settings-bootloader.cc:305 +#: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.cc:305 msgid "Load global configuration" msgstr "Загрузить глобальную конфигурацию" -#: source/ubl-settings-bootloader.cc:436 source/ubl-settings-bootloader.cc:306 +#: source/ubl-settings-bootloader.h:59 source/ubl-settings-bootloader.cc:436 +#: source/ubl-settings-bootloader.cc:306 msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" #: source/ubl-settings-bootloader.cc:442 -msgid "Boot menu user name:" +#, fuzzy +msgid "Load menu user name:" msgstr "Имя пользователя меню загрузки:" #: source/ubl-settings-bootloader.cc:443 -msgid "Boot menu user password:" +#, fuzzy +msgid "Load menu user password:" msgstr "Пароль пользователя меню загрузки:" #: source/ubl-settings-bootloader.cc:429 source/ubl-settings-bootloader.cc:298 -msgid "Boot selection menu timer" -msgstr "Таймер меню выбора варианта загрузки" +msgid "Load option timer" +msgstr "" #: source/ubl-settings-bootloader.cc:441 -msgid "Boot screen display mode:" +#, fuzzy +msgid "Load screen display mode:" msgstr "Режим отображения экрана загрузки:" -#: source/ubl-settings-bootloader.cc:448 +#: source/ubl-settings-bootloader.h:72 source/ubl-settings-bootloader.cc:448 msgid "Loading animation with the magazine" msgstr "Анимация загрузки с журналом" -#: source/ubl-settings-bootloader.cc:449 +#: source/ubl-settings-bootloader.h:73 source/ubl-settings-bootloader.cc:449 msgid "Loading animation without a magazine" msgstr "Анимация загрузки без журнала" -#: source/ubl-settings-bootloader.cc:908 source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:84 source/ubl-settings-bootloader.cc:908 +#: source/ubl-settings-bootloader.cc:452 msgid "Local configuration downloaded successfully" msgstr "Успешно загружена локальная конфигурация" -#: source/ubl-settings-bootloader.cc:881 source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:79 source/ubl-settings-bootloader.cc:881 +#: source/ubl-settings-bootloader.cc:427 msgid "Local configuration reading error" msgstr "Ошибка чтения локальной конфигурации" -#: source/ubl-settings-bootloader.cc:914 source/ubl-settings-bootloader.cc:458 +#: source/ubl-settings-bootloader.h:86 source/ubl-settings-bootloader.cc:914 +#: source/ubl-settings-bootloader.cc:458 msgid "Local configuration successfully written" msgstr "Успешно записана локальная конфигурация" -#: source/ubl-settings-bootloader.cc:889 source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.h:81 source/ubl-settings-bootloader.cc:889 +#: source/ubl-settings-bootloader.cc:435 msgid "Local configuration write error" msgstr "Ошибка записи локальной конфигурации" @@ -242,19 +286,25 @@ msgstr "Вручную" msgid "Maximum performance, power management" msgstr "Максимальная производительность, управление питанием" +#: source/ubl-settings-bootloader.h:64 +msgid "No loading animation, full log" +msgstr "Отсутствие анимации загрузки с выводом журнала" + #: source/ubl-settings-bootloader.cc:444 source/ubl-settings-bootloader.cc:446 msgid "Not available" msgstr "Отсутствует" -#: source/ubl-settings-bootloader.cc:923 source/ubl-settings-bootloader.cc:341 -#: source/ubl-settings-bootloader.cc:354 source/ubl-settings-bootloader.cc:367 +#: source/ubl-settings-bootloader.h:89 source/ubl-settings-bootloader.cc:923 +#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 +#: source/ubl-settings-bootloader.cc:367 msgid "Nothing to save!" msgstr "Нечего сохранять!" msgid "Open Firmware Console" msgstr "Консоль Open Firmware" -#: source/ubl-settings-bootloader.cc:338 source/ubl-settings-bootloader.cc:200 +#: source/ubl-settings-bootloader.h:92 source/ubl-settings-bootloader.cc:338 +#: source/ubl-settings-bootloader.cc:200 msgid "Option" msgstr "Опция" @@ -277,24 +327,33 @@ msgstr "Параметры, передаваемые ядру" msgid "Prevents the processor from going into a deep sleep state" msgstr "Предотвращает переход процессора в состояние глубокого сна" -#: source/ubl-settings-bootloader.cc:416 source/ubl-settings-bootloader.cc:420 -#: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 +#: source/ubl-settings-bootloader.h:40 source/ubl-settings-bootloader.cc:416 +#: source/ubl-settings-bootloader.cc:420 source/ubl-settings-bootloader.cc:284 +#: source/ubl-settings-bootloader.cc:288 msgid "Project Home Page" msgstr "Домашняя страница проекта" -#: source/ubl-settings-bootloader.cc:437 source/ubl-settings-bootloader.cc:307 +#: source/ubl-settings-bootloader.h:60 +msgid "Read online" +msgstr "Прочитать онлайн" + +#: source/ubl-settings-bootloader.h:53 source/ubl-settings-bootloader.cc:437 +#: source/ubl-settings-bootloader.cc:307 msgid "Save" msgstr "Сохранить" -#: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 +#: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.cc:434 +#: source/ubl-settings-bootloader.cc:304 msgid "Save global configuration" msgstr "Сохранить глобальную конфигурацию" -#: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 +#: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.cc:433 +#: source/ubl-settings-bootloader.cc:303 msgid "Save local configuration" msgstr "Сохранить локальную конфигурацию" -#: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 +#: source/ubl-settings-bootloader.h:55 source/ubl-settings-bootloader.cc:432 +#: source/ubl-settings-bootloader.cc:302 msgid "Save to global and local configuration" msgstr "Сохранить глобальную и локальную конфигурацию" @@ -316,20 +375,21 @@ msgstr "Показывать окно приветствия" msgid "Single User Mode" msgstr "Режим одного пользователя" -#: source/ubl-settings-bootloader.cc:920 source/ubl-settings-bootloader.cc:464 +#: source/ubl-settings-bootloader.h:88 source/ubl-settings-bootloader.cc:920 +#: source/ubl-settings-bootloader.cc:464 msgid "Successfully saved local and global configuration" msgstr "Успешно записаны локальная и глобальная конфигурация" -#: source/ubl-settings-bootloader.cc:419 +#: source/ubl-settings-bootloader.h:42 source/ubl-settings-bootloader.cc:419 msgid "System boot" msgstr "Загрузка системы" -#: source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:48 source/ubl-settings-bootloader.cc:427 #, fuzzy msgid "Terminal for input" msgstr "Терминал для ввода" -#: source/ubl-settings-bootloader.cc:428 +#: source/ubl-settings-bootloader.h:49 source/ubl-settings-bootloader.cc:428 #, fuzzy msgid "Terminal for output" msgstr "Терминал для вывода" @@ -338,7 +398,8 @@ msgstr "Терминал для вывода" msgid "The last selection will become the default boot choice" msgstr "Последний выбор станет выбором загрузки по умолчанию" -#: source/ubl-settings-bootloader.cc:107 source/ubl-settings-bootloader.cc:94 +#: source/ubl-settings-bootloader.h:90 source/ubl-settings-bootloader.cc:107 +#: source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" msgstr "Программа должна быть запущена с правами суперпользователя!" @@ -348,17 +409,31 @@ msgstr "UBConfig - Загрузка" msgid "USB Keyboard (HID Boot protocol)" msgstr "Клавиатура USB Keyboard (протокол HID Boot)" -msgid "User password to enter boot configuration edit mode" -msgstr "Пароль пользователя для входа в режим редактирования конфигурации загрузки" - -#: source/ubl-settings-bootloader.cc:440 +#: source/ubl-settings-bootloader.h:70 source/ubl-settings-bootloader.cc:440 msgid "User name to enter boot configuration editing mode" msgstr "" "Имя пользователя для входа в режим редактирования конфигурации загрузки" +#: source/ubl-settings-bootloader.h:71 +msgid "User password to enter boot configuration edit mode" +msgstr "" +"Пароль пользователя для входа в режим редактирования конфигурации загрузки" + msgid "VGA text output (Coreboot)" msgstr "Текстовый вывод VGA (Coreboot)" +#: source/ubl-settings-bootloader.h:68 +msgid "Would you like to read documentation in the Web?" +msgstr "Вы хотите прочитать справку в Сети?" + +#: source/ubl-settings-bootloader.h:69 +msgid "" +"You will be redirected to documentation site, where user help pages are " +"translated and supported by community." +msgstr "" +"Вы будете перенаправлены на сайт с документацией где страницы помощи " +"переводятся и поддерживаются сообществом." + msgid "acpi=off (Disable ACPI)" msgstr "acpi=off (Отключить ACPI)" @@ -379,15 +454,18 @@ msgstr "Консоль (PC BIOS & console EFI)" msgid "gfxterm (Output in graphical mode)" msgstr "gfxterm (Вывод в графическом режиме)" +#: source/ubl-settings-bootloader.h:39 source/ubl-settings-bootloader.h:75 #: source/ubl-settings-bootloader.cc:414 source/ubl-settings-bootloader.cc:282 msgid "https://wiki.ublinux.com" msgstr "" #: source/ubl-settings-bootloader.cc:860 source/ubl-settings-bootloader.cc:400 +#, fuzzy msgid "" -"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" +"https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/" msgstr "" -"https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-bootloader" +"https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/" +"ubl-settings-bootloader" msgid "i915.enable_dc=0 (Disable GPU power management)" msgstr "i915.enable_dc=0 (Отключите управление питанием GPU)" @@ -421,7 +499,7 @@ msgstr "ofconsole (Консоль Open Firmware)" msgid "quiet (Downloading without text messages)" msgstr "quiet (Загрузка без текстовых сообщений)" -#: source/ubl-settings-bootloader.cc:425 +#: source/ubl-settings-bootloader.h:46 source/ubl-settings-bootloader.cc:425 msgid "seconds" msgstr "секунд" @@ -441,13 +519,15 @@ msgstr "" msgid "splash (Show welcome window)" msgstr "splash (Показать окно приветствия)" -#: source/ubl-settings-bootloader.cc:413 source/ubl-settings-bootloader.cc:418 -#: source/ubl-settings-bootloader.cc:439 source/ubl-settings-bootloader.cc:281 -#: source/ubl-settings-bootloader.cc:286 source/ubl-settings-bootloader.cc:309 +#: source/ubl-settings-bootloader.h:38 source/ubl-settings-bootloader.cc:413 +#: source/ubl-settings-bootloader.cc:418 source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 +#: source/ubl-settings-bootloader.cc:309 msgid "ubl-settings-bootloader" msgstr "Загрузка системы" -#: source/ubl-settings-bootloader.cc:947 source/ubl-settings-bootloader.cc:547 +#: source/ubl-settings-bootloader.h:78 source/ubl-settings-bootloader.cc:947 +#: source/ubl-settings-bootloader.cc:547 msgid "ubl-settings-bootloader version: " msgstr "ubl-settings-bootloader версия: " @@ -457,11 +537,12 @@ msgstr "usb_keyboard (Клавиатура USB Keyboard (protocol HID Boot))" msgid "vga_text (Text output VGA (Coreboot))" msgstr "vga_text (Текстовый вывод VGA (Coreboot))" +#: source/ubl-settings-bootloader.cc:450 +msgid "Нет анимации загрузки, полный журнал" +msgstr "" + #~ msgid "Mine" #~ msgstr "Свой" #~ msgid "Disabled" #~ msgstr "Отключён" - -msgid "No loading animation, full log" -msgstr "Отсутствие анимации загрузки с выводом журнала" From 41fc517f9d102da8b3c91153e39a4107c2018d0e Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 15:01:44 +0600 Subject: [PATCH 104/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20pot=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-bootloader.pot | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index 65e54d9..0b829e3 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -1,17 +1,21 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +Toni ?????, [24.04.2023 11:42] +msgmerge --update ubl-settings-datetime_ru.po ubl-settings-datetime.pot + +Toni ?????, [25.04.2023 14:57] +# Language translations for ubl-settings-bootloader package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-bootloader package. +# UBLinux Team , 2022 # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-25 14:57+0600\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"Project-Id-Version: ubl-settings-bootloader 1.0\n" +"Report-Msgid-Bugs-To: info@ublinux.com\n" +"POT-Creation-Date: 2023-01-01 00:00+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: UBLinux Team \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" From 6513f71550af37ba1a0a3bdb912b55aa46ced9b5 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 15:13:29 +0600 Subject: [PATCH 105/110] fix --- ubl-settings-bootloader_ru.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index b1187e2..34fa9bc 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ubl-settings-bootloader 1.0\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: info@ublinux.com\n" "POT-Creation-Date: 2023-04-25 14:57+0600\n" "PO-Revision-Date: 2020-02-22 23:28+0600\n" "Last-Translator: ublinux \n" From af627ceebe77e2cac4c2ef6760cb28497e211f02 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 15:37:17 +0600 Subject: [PATCH 106/110] fix --- source/CMakeLists.txt | 12 +- source/ubl-settings-bootloader.cc | 31 +---- source/ubl-settings-bootloader.h | 1 + source/ubl-settings-bootloader.h.in | 1 + ubl-settings-bootloader.glade | 1 - ubl-settings-bootloader.pot | 205 +++++++++++++++------------- ubl-settings-bootloader_ru.po | 203 ++++++++++++++------------- 7 files changed, 232 insertions(+), 222 deletions(-) create mode 100644 source/ubl-settings-bootloader.h.in diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 5800f09..39fe799 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -8,14 +8,19 @@ include_directories(${GTK_INCLUDE_DIRS}) link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) -option(WEBKIT_FOUND "" ON) +find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) -if(WEBKIT_FOUND) +option(WEBKIT_FOUND "No" OFF) + +find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) +if(WEBKIT_LIBRARIES_FOUND) + option(WEBKIT_FOUND "Yes" ON) PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) include_directories(${WEBKIT_INCLUDE_DIRS}) link_directories(${WEBKIT_LIBRARY_DIRS}) add_definitions(${WEBKIT_CFLAGS_OTHER}) endif() +configure_file(ubl-settings-bootloader.h.in ubl-settings-bootloader-cm.h) @@ -26,6 +31,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -fstack-clash-protection -fcf-protection") set(SOURCE_FILES + ubl-settings-bootloader-cm.h ubl-settings-bootloader.h ubl-settings-bootloader.cc save.h @@ -50,4 +56,4 @@ target_include_directories(ubl-settings-bootloader PUBLIC "${PROJECT_BINARY_DIR}" ${WEBKIT_INCLUDE_DIRS} ) -install(TARGETS ubl-settings-bootloader DESTINATION bin) +install(TARGETS ubl-settings-bootloader DESTINATION bin) \ No newline at end of file diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index e7207ba..29852c6 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -83,13 +83,9 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); #ifdef WEBKIT_FOUND - void *handle=NULL; - handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); - if (handle) { - one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); - three = Glib::wrap(GTK_WIDGET(one)); - wndWeb->add(*three); - } + one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); + three = Glib::wrap(GTK_WIDGET(one)); + wndWeb->add(*three); #endif this->flag_block_gui(); if (this->check_root() == 0) { @@ -442,11 +438,7 @@ void MainWindow::get_builder() { builder->get_widget("entrySecurityLogin", entrySecurityLogin); builder->get_widget("cmbDefaultDonw", cmbDefaultDonw); #ifdef WEBKIT_FOUND - void *handle=NULL; - handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); - if (handle) { builder->get_widget("wndWeb", wndWeb); - } #endif builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb); @@ -949,15 +941,8 @@ void MainWindow::synopsis_show() { void MainWindow::open_browser() { #ifdef WEBKIT_FOUND - void *handle=NULL; - handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); - if (handle) { - webkit_web_view_load_uri(one, link_doc); - wndWeb->show_all(); - } - else { - this->template_open_browser(); - } + webkit_web_view_load_uri(one, link_doc); + wndWeb->show_all(); #else this->template_open_browser(); #endif @@ -1036,11 +1021,7 @@ void MainWindow::info_warning_error(int mess) { } MainWindow::~MainWindow() { #ifdef WEBKIT_FOUND - void *handle=NULL; - handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); - if (handle) { - free(one); - } + free(one); #endif } diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 730095f..83756fb 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -17,6 +17,7 @@ #include "save.h" #include "load.h" #include +#include "ubl-settings-bootloader-cm.h" #ifdef WEBKIT_FOUND #include #endif diff --git a/source/ubl-settings-bootloader.h.in b/source/ubl-settings-bootloader.h.in new file mode 100644 index 0000000..17ba454 --- /dev/null +++ b/source/ubl-settings-bootloader.h.in @@ -0,0 +1 @@ +#cmakedefine WEBKIT_FOUND \ No newline at end of file diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index c1e8f69..0b6ec9d 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -221,7 +221,6 @@ specified priority 550 False com.ublinux.ubl-settings-bootloader - center True diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index 0b829e3..565dbd6 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -1,7 +1,3 @@ -Toni ?????, [24.04.2023 11:42] -msgmerge --update ubl-settings-datetime_ru.po ubl-settings-datetime.pot - -Toni ?????, [25.04.2023 14:57] # Language translations for ubl-settings-bootloader package. # Copyright (C) 2022, UBTech LLC # This file is distributed under the same license as the ubl-settings-bootloader package. @@ -21,65 +17,65 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/ubl-settings-bootloader.h:52 source/ubl-settings-bootloader.cc:431 -#: source/ubl-settings-bootloader.cc:301 +#: source/ubl-settings-bootloader.h:53 source/ubl-settings-bootloader.h:52 +#: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "" -#: source/ubl-settings-bootloader.h:43 +#: source/ubl-settings-bootloader.h:44 source/ubl-settings-bootloader.h:43 msgid "About ubl-settings-bootloader" msgstr "" -#: source/ubl-settings-bootloader.h:91 source/ubl-settings-bootloader.cc:337 -#: source/ubl-settings-bootloader.cc:199 +#: source/ubl-settings-bootloader.h:92 source/ubl-settings-bootloader.h:91 +#: source/ubl-settings-bootloader.cc:337 source/ubl-settings-bootloader.cc:199 msgid "Active" msgstr "" -#: source/ubl-settings-bootloader.h:62 +#: source/ubl-settings-bootloader.h:63 source/ubl-settings-bootloader.h:62 msgid "Always redirect" msgstr "" -#: source/ubl-settings-bootloader.h:95 +#: source/ubl-settings-bootloader.h:96 source/ubl-settings-bootloader.h:95 msgid "Argument not recognized\n" msgstr "" -#: source/ubl-settings-bootloader.h:65 +#: source/ubl-settings-bootloader.h:66 source/ubl-settings-bootloader.h:65 msgid "Boot menu user name:" msgstr "" -#: source/ubl-settings-bootloader.h:66 +#: source/ubl-settings-bootloader.h:67 source/ubl-settings-bootloader.h:66 msgid "Boot menu user password:" msgstr "" -#: source/ubl-settings-bootloader.h:63 +#: source/ubl-settings-bootloader.h:64 source/ubl-settings-bootloader.h:63 msgid "Boot screen display mode:" msgstr "" -#: source/ubl-settings-bootloader.h:50 +#: source/ubl-settings-bootloader.h:51 source/ubl-settings-bootloader.h:50 msgid "Boot selection menu timer" msgstr "" -#: source/ubl-settings-bootloader.h:61 +#: source/ubl-settings-bootloader.h:62 source/ubl-settings-bootloader.h:61 msgid "Cancel" msgstr "" -#: source/ubl-settings-bootloader.h:44 source/ubl-settings-bootloader.cc:421 -#: source/ubl-settings-bootloader.cc:422 source/ubl-settings-bootloader.cc:423 -#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 -#: source/ubl-settings-bootloader.cc:291 +#: source/ubl-settings-bootloader.h:45 source/ubl-settings-bootloader.h:44 +#: source/ubl-settings-bootloader.cc:421 source/ubl-settings-bootloader.cc:422 +#: source/ubl-settings-bootloader.cc:423 source/ubl-settings-bootloader.cc:289 +#: source/ubl-settings-bootloader.cc:290 source/ubl-settings-bootloader.cc:291 msgid "Command line parameters:" msgstr "" -#: source/ubl-settings-bootloader.h:41 source/ubl-settings-bootloader.cc:417 -#: source/ubl-settings-bootloader.cc:285 +#: source/ubl-settings-bootloader.h:42 source/ubl-settings-bootloader.h:41 +#: source/ubl-settings-bootloader.cc:417 source/ubl-settings-bootloader.cc:285 msgid "Configuring system boot parameters" msgstr "" msgid "Configuring the boot loader settings" msgstr "" -#: source/ubl-settings-bootloader.h:37 source/ubl-settings-bootloader.cc:411 -#: source/ubl-settings-bootloader.cc:279 +#: source/ubl-settings-bootloader.h:38 source/ubl-settings-bootloader.h:37 +#: source/ubl-settings-bootloader.cc:411 source/ubl-settings-bootloader.cc:279 msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" @@ -87,8 +83,8 @@ msgstr "" msgid "Default download" msgstr "" -#: source/ubl-settings-bootloader.h:93 source/ubl-settings-bootloader.cc:339 -#: source/ubl-settings-bootloader.cc:201 +#: source/ubl-settings-bootloader.h:94 source/ubl-settings-bootloader.h:93 +#: source/ubl-settings-bootloader.cc:339 source/ubl-settings-bootloader.cc:201 msgid "Description" msgstr "" @@ -110,8 +106,8 @@ msgstr "" msgid "Disable local APIC" msgstr "" -#: source/ubl-settings-bootloader.h:47 source/ubl-settings-bootloader.cc:426 -#: source/ubl-settings-bootloader.cc:294 +#: source/ubl-settings-bootloader.h:48 source/ubl-settings-bootloader.h:47 +#: source/ubl-settings-bootloader.cc:426 source/ubl-settings-bootloader.cc:294 msgid "Download menu" msgstr "" @@ -121,16 +117,18 @@ msgstr "" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "" -#: source/ubl-settings-bootloader.h:77 source/ubl-settings-bootloader.cc:496 +#: source/ubl-settings-bootloader.h:78 source/ubl-settings-bootloader.h:77 +#: source/ubl-settings-bootloader.cc:496 msgid "Enter login" msgstr "" -#: source/ubl-settings-bootloader.h:76 source/ubl-settings-bootloader.cc:476 +#: source/ubl-settings-bootloader.h:77 source/ubl-settings-bootloader.h:76 +#: source/ubl-settings-bootloader.cc:476 msgid "Enter your password" msgstr "" -#: source/ubl-settings-bootloader.h:83 source/ubl-settings-bootloader.cc:897 -#: source/ubl-settings-bootloader.cc:443 +#: source/ubl-settings-bootloader.h:84 source/ubl-settings-bootloader.h:83 +#: source/ubl-settings-bootloader.cc:897 source/ubl-settings-bootloader.cc:443 msgid "Error saved local and global configuration" msgstr "" @@ -146,7 +144,7 @@ msgid "" " -V, --version\t Show package version\n" msgstr "" -#: source/ubl-settings-bootloader.h:94 +#: source/ubl-settings-bootloader.h:95 source/ubl-settings-bootloader.h:94 msgid "" "GTK settings bootloader for UBLinux\n" "\n" @@ -161,28 +159,28 @@ msgid "" " --lock-load-global Lock load global configuration\n" msgstr "" -#: source/ubl-settings-bootloader.h:85 source/ubl-settings-bootloader.cc:911 -#: source/ubl-settings-bootloader.cc:455 +#: source/ubl-settings-bootloader.h:86 source/ubl-settings-bootloader.h:85 +#: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" msgstr "" -#: source/ubl-settings-bootloader.h:80 source/ubl-settings-bootloader.cc:885 -#: source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.h:81 source/ubl-settings-bootloader.h:80 +#: source/ubl-settings-bootloader.cc:885 source/ubl-settings-bootloader.cc:431 msgid "Global configuration read error" msgstr "" -#: source/ubl-settings-bootloader.h:87 source/ubl-settings-bootloader.cc:917 -#: source/ubl-settings-bootloader.cc:461 +#: source/ubl-settings-bootloader.h:88 source/ubl-settings-bootloader.h:87 +#: source/ubl-settings-bootloader.cc:917 source/ubl-settings-bootloader.cc:461 msgid "Global configuration successfully written" msgstr "" -#: source/ubl-settings-bootloader.h:82 source/ubl-settings-bootloader.cc:893 -#: source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.h:83 source/ubl-settings-bootloader.h:82 +#: source/ubl-settings-bootloader.cc:893 source/ubl-settings-bootloader.cc:439 msgid "Global configuration write error" msgstr "" -#: source/ubl-settings-bootloader.h:51 source/ubl-settings-bootloader.cc:430 -#: source/ubl-settings-bootloader.cc:300 +#: source/ubl-settings-bootloader.h:52 source/ubl-settings-bootloader.h:51 +#: source/ubl-settings-bootloader.cc:430 source/ubl-settings-bootloader.cc:300 msgid "Help" msgstr "" @@ -190,33 +188,36 @@ msgstr "" msgid "Input terminal" msgstr "" -#: source/ubl-settings-bootloader.h:74 source/ubl-settings-bootloader.cc:451 +#: source/ubl-settings-bootloader.h:75 source/ubl-settings-bootloader.h:74 +#: source/ubl-settings-bootloader.cc:451 msgid "Lack of loading animation with the output of the abbreviated log" msgstr "" msgid "Last Successful Download" msgstr "" -#: source/ubl-settings-bootloader.h:67 source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:68 source/ubl-settings-bootloader.h:67 +#: source/ubl-settings-bootloader.cc:452 msgid "Last successful upload" msgstr "" -#: source/ubl-settings-bootloader.h:54 source/ubl-settings-bootloader.cc:438 -#: source/ubl-settings-bootloader.cc:308 +#: source/ubl-settings-bootloader.h:55 source/ubl-settings-bootloader.h:54 +#: source/ubl-settings-bootloader.cc:438 source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "" -#: source/ubl-settings-bootloader.h:45 source/ubl-settings-bootloader.cc:424 +#: source/ubl-settings-bootloader.h:46 source/ubl-settings-bootloader.h:45 +#: source/ubl-settings-bootloader.cc:424 msgid "Load default:" msgstr "" -#: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.cc:435 -#: source/ubl-settings-bootloader.cc:305 +#: source/ubl-settings-bootloader.h:59 source/ubl-settings-bootloader.h:58 +#: source/ubl-settings-bootloader.cc:435 source/ubl-settings-bootloader.cc:305 msgid "Load global configuration" msgstr "" -#: source/ubl-settings-bootloader.h:59 source/ubl-settings-bootloader.cc:436 -#: source/ubl-settings-bootloader.cc:306 +#: source/ubl-settings-bootloader.h:60 source/ubl-settings-bootloader.h:59 +#: source/ubl-settings-bootloader.cc:436 source/ubl-settings-bootloader.cc:306 msgid "Load local configuration" msgstr "" @@ -236,31 +237,33 @@ msgstr "" msgid "Load screen display mode:" msgstr "" -#: source/ubl-settings-bootloader.h:72 source/ubl-settings-bootloader.cc:448 +#: source/ubl-settings-bootloader.h:73 source/ubl-settings-bootloader.h:72 +#: source/ubl-settings-bootloader.cc:448 msgid "Loading animation with the magazine" msgstr "" -#: source/ubl-settings-bootloader.h:73 source/ubl-settings-bootloader.cc:449 +#: source/ubl-settings-bootloader.h:74 source/ubl-settings-bootloader.h:73 +#: source/ubl-settings-bootloader.cc:449 msgid "Loading animation without a magazine" msgstr "" -#: source/ubl-settings-bootloader.h:84 source/ubl-settings-bootloader.cc:908 -#: source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:85 source/ubl-settings-bootloader.h:84 +#: source/ubl-settings-bootloader.cc:908 source/ubl-settings-bootloader.cc:452 msgid "Local configuration downloaded successfully" msgstr "" -#: source/ubl-settings-bootloader.h:79 source/ubl-settings-bootloader.cc:881 -#: source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:80 source/ubl-settings-bootloader.h:79 +#: source/ubl-settings-bootloader.cc:881 source/ubl-settings-bootloader.cc:427 msgid "Local configuration reading error" msgstr "" -#: source/ubl-settings-bootloader.h:86 source/ubl-settings-bootloader.cc:914 -#: source/ubl-settings-bootloader.cc:458 +#: source/ubl-settings-bootloader.h:87 source/ubl-settings-bootloader.h:86 +#: source/ubl-settings-bootloader.cc:914 source/ubl-settings-bootloader.cc:458 msgid "Local configuration successfully written" msgstr "" -#: source/ubl-settings-bootloader.h:81 source/ubl-settings-bootloader.cc:889 -#: source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.h:82 source/ubl-settings-bootloader.h:81 +#: source/ubl-settings-bootloader.cc:889 source/ubl-settings-bootloader.cc:435 msgid "Local configuration write error" msgstr "" @@ -271,7 +274,7 @@ msgstr "" msgid "Maximum performance, power management" msgstr "" -#: source/ubl-settings-bootloader.h:64 +#: source/ubl-settings-bootloader.h:65 source/ubl-settings-bootloader.h:64 msgid "No loading animation, full log" msgstr "" @@ -279,17 +282,17 @@ msgstr "" msgid "Not available" msgstr "" -#: source/ubl-settings-bootloader.h:89 source/ubl-settings-bootloader.cc:923 -#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 -#: source/ubl-settings-bootloader.cc:367 +#: source/ubl-settings-bootloader.h:90 source/ubl-settings-bootloader.h:89 +#: source/ubl-settings-bootloader.cc:923 source/ubl-settings-bootloader.cc:341 +#: source/ubl-settings-bootloader.cc:354 source/ubl-settings-bootloader.cc:367 msgid "Nothing to save!" msgstr "" msgid "Open Firmware Console" msgstr "" -#: source/ubl-settings-bootloader.h:92 source/ubl-settings-bootloader.cc:338 -#: source/ubl-settings-bootloader.cc:200 +#: source/ubl-settings-bootloader.h:93 source/ubl-settings-bootloader.h:92 +#: source/ubl-settings-bootloader.cc:338 source/ubl-settings-bootloader.cc:200 msgid "Option" msgstr "" @@ -312,33 +315,33 @@ msgstr "" msgid "Prevents the processor from going into a deep sleep state" msgstr "" -#: source/ubl-settings-bootloader.h:40 source/ubl-settings-bootloader.cc:416 -#: source/ubl-settings-bootloader.cc:420 source/ubl-settings-bootloader.cc:284 -#: source/ubl-settings-bootloader.cc:288 +#: source/ubl-settings-bootloader.h:41 source/ubl-settings-bootloader.h:40 +#: source/ubl-settings-bootloader.cc:416 source/ubl-settings-bootloader.cc:420 +#: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 msgid "Project Home Page" msgstr "" -#: source/ubl-settings-bootloader.h:60 +#: source/ubl-settings-bootloader.h:61 source/ubl-settings-bootloader.h:60 msgid "Read online" msgstr "" -#: source/ubl-settings-bootloader.h:53 source/ubl-settings-bootloader.cc:437 -#: source/ubl-settings-bootloader.cc:307 +#: source/ubl-settings-bootloader.h:54 source/ubl-settings-bootloader.h:53 +#: source/ubl-settings-bootloader.cc:437 source/ubl-settings-bootloader.cc:307 msgid "Save" msgstr "" -#: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.cc:434 -#: source/ubl-settings-bootloader.cc:304 +#: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.h:57 +#: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 msgid "Save global configuration" msgstr "" -#: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.cc:433 -#: source/ubl-settings-bootloader.cc:303 +#: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.h:56 +#: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 msgid "Save local configuration" msgstr "" -#: source/ubl-settings-bootloader.h:55 source/ubl-settings-bootloader.cc:432 -#: source/ubl-settings-bootloader.cc:302 +#: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.h:55 +#: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 msgid "Save to global and local configuration" msgstr "" @@ -359,20 +362,23 @@ msgstr "" msgid "Single User Mode" msgstr "" -#: source/ubl-settings-bootloader.h:88 source/ubl-settings-bootloader.cc:920 -#: source/ubl-settings-bootloader.cc:464 +#: source/ubl-settings-bootloader.h:89 source/ubl-settings-bootloader.h:88 +#: source/ubl-settings-bootloader.cc:920 source/ubl-settings-bootloader.cc:464 msgid "Successfully saved local and global configuration" msgstr "" -#: source/ubl-settings-bootloader.h:42 source/ubl-settings-bootloader.cc:419 +#: source/ubl-settings-bootloader.h:43 source/ubl-settings-bootloader.h:42 +#: source/ubl-settings-bootloader.cc:419 msgid "System boot" msgstr "" -#: source/ubl-settings-bootloader.h:48 source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:49 source/ubl-settings-bootloader.h:48 +#: source/ubl-settings-bootloader.cc:427 msgid "Terminal for input" msgstr "" -#: source/ubl-settings-bootloader.h:49 source/ubl-settings-bootloader.cc:428 +#: source/ubl-settings-bootloader.h:50 source/ubl-settings-bootloader.h:49 +#: source/ubl-settings-bootloader.cc:428 msgid "Terminal for output" msgstr "" @@ -380,8 +386,8 @@ msgstr "" msgid "The last selection will become the default boot choice" msgstr "" -#: source/ubl-settings-bootloader.h:90 source/ubl-settings-bootloader.cc:107 -#: source/ubl-settings-bootloader.cc:94 +#: source/ubl-settings-bootloader.h:91 source/ubl-settings-bootloader.h:90 +#: source/ubl-settings-bootloader.cc:107 source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" msgstr "" @@ -391,22 +397,23 @@ msgstr "" msgid "USB Keyboard (HID Boot protocol)" msgstr "" -#: source/ubl-settings-bootloader.h:70 source/ubl-settings-bootloader.cc:440 +#: source/ubl-settings-bootloader.h:71 source/ubl-settings-bootloader.h:70 +#: source/ubl-settings-bootloader.cc:440 msgid "User name to enter boot configuration editing mode" msgstr "" -#: source/ubl-settings-bootloader.h:71 +#: source/ubl-settings-bootloader.h:72 source/ubl-settings-bootloader.h:71 msgid "User password to enter boot configuration edit mode" msgstr "" msgid "VGA text output (Coreboot)" msgstr "" -#: source/ubl-settings-bootloader.h:68 +#: source/ubl-settings-bootloader.h:69 source/ubl-settings-bootloader.h:68 msgid "Would you like to read documentation in the Web?" msgstr "" -#: source/ubl-settings-bootloader.h:69 +#: source/ubl-settings-bootloader.h:70 source/ubl-settings-bootloader.h:69 msgid "" "You will be redirected to documentation site, where user help pages are " "translated and supported by community." @@ -430,6 +437,7 @@ msgstr "" msgid "gfxterm (Output in graphical mode)" msgstr "" +#: source/ubl-settings-bootloader.h:40 source/ubl-settings-bootloader.h:76 #: source/ubl-settings-bootloader.h:39 source/ubl-settings-bootloader.h:75 #: source/ubl-settings-bootloader.cc:414 source/ubl-settings-bootloader.cc:282 msgid "https://wiki.ublinux.com" @@ -468,7 +476,8 @@ msgstr "" msgid "quiet (Downloading without text messages)" msgstr "" -#: source/ubl-settings-bootloader.h:46 source/ubl-settings-bootloader.cc:425 +#: source/ubl-settings-bootloader.h:47 source/ubl-settings-bootloader.h:46 +#: source/ubl-settings-bootloader.cc:425 msgid "seconds" msgstr "" @@ -486,15 +495,15 @@ msgstr "" msgid "splash (Show welcome window)" msgstr "" -#: source/ubl-settings-bootloader.h:38 source/ubl-settings-bootloader.cc:413 -#: source/ubl-settings-bootloader.cc:418 source/ubl-settings-bootloader.cc:439 -#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 -#: source/ubl-settings-bootloader.cc:309 +#: source/ubl-settings-bootloader.h:39 source/ubl-settings-bootloader.h:38 +#: source/ubl-settings-bootloader.cc:413 source/ubl-settings-bootloader.cc:418 +#: source/ubl-settings-bootloader.cc:439 source/ubl-settings-bootloader.cc:281 +#: source/ubl-settings-bootloader.cc:286 source/ubl-settings-bootloader.cc:309 msgid "ubl-settings-bootloader" msgstr "" -#: source/ubl-settings-bootloader.h:78 source/ubl-settings-bootloader.cc:947 -#: source/ubl-settings-bootloader.cc:547 +#: source/ubl-settings-bootloader.h:79 source/ubl-settings-bootloader.h:78 +#: source/ubl-settings-bootloader.cc:947 source/ubl-settings-bootloader.cc:547 msgid "ubl-settings-bootloader version: " msgstr "" diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 34fa9bc..32f9be7 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ubl-settings-bootloader 1.0\n" "Report-Msgid-Bugs-To: info@ublinux.com\n" -"POT-Creation-Date: 2023-04-25 14:57+0600\n" +"POT-Creation-Date: 2023-04-25 15:27+0600\n" "PO-Revision-Date: 2020-02-22 23:28+0600\n" "Last-Translator: ublinux \n" "Language-Team: Russian - UBLinux Team \n" @@ -17,65 +17,65 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/ubl-settings-bootloader.h:52 source/ubl-settings-bootloader.cc:431 -#: source/ubl-settings-bootloader.cc:301 +#: source/ubl-settings-bootloader.h:53 source/ubl-settings-bootloader.h:52 +#: source/ubl-settings-bootloader.cc:431 source/ubl-settings-bootloader.cc:301 msgid "About" msgstr "О программе" -#: source/ubl-settings-bootloader.h:43 +#: source/ubl-settings-bootloader.h:44 source/ubl-settings-bootloader.h:43 msgid "About ubl-settings-bootloader" msgstr "О программе Загрузка системы" -#: source/ubl-settings-bootloader.h:91 source/ubl-settings-bootloader.cc:337 -#: source/ubl-settings-bootloader.cc:199 +#: source/ubl-settings-bootloader.h:92 source/ubl-settings-bootloader.h:91 +#: source/ubl-settings-bootloader.cc:337 source/ubl-settings-bootloader.cc:199 msgid "Active" msgstr "Активно" -#: source/ubl-settings-bootloader.h:62 +#: source/ubl-settings-bootloader.h:63 source/ubl-settings-bootloader.h:62 msgid "Always redirect" msgstr "Всегда перенаправлять" -#: source/ubl-settings-bootloader.h:95 +#: source/ubl-settings-bootloader.h:96 source/ubl-settings-bootloader.h:95 msgid "Argument not recognized\n" msgstr "" -#: source/ubl-settings-bootloader.h:65 +#: source/ubl-settings-bootloader.h:66 source/ubl-settings-bootloader.h:65 msgid "Boot menu user name:" msgstr "Имя пользователя меню загрузки:" -#: source/ubl-settings-bootloader.h:66 +#: source/ubl-settings-bootloader.h:67 source/ubl-settings-bootloader.h:66 msgid "Boot menu user password:" msgstr "Пароль пользователя меню загрузки:" -#: source/ubl-settings-bootloader.h:63 +#: source/ubl-settings-bootloader.h:64 source/ubl-settings-bootloader.h:63 msgid "Boot screen display mode:" msgstr "Режим отображения экрана загрузки:" -#: source/ubl-settings-bootloader.h:50 +#: source/ubl-settings-bootloader.h:51 source/ubl-settings-bootloader.h:50 msgid "Boot selection menu timer" msgstr "Таймер меню выбора варианта загрузки" -#: source/ubl-settings-bootloader.h:61 +#: source/ubl-settings-bootloader.h:62 source/ubl-settings-bootloader.h:61 msgid "Cancel" msgstr "Отменить" -#: source/ubl-settings-bootloader.h:44 source/ubl-settings-bootloader.cc:421 -#: source/ubl-settings-bootloader.cc:422 source/ubl-settings-bootloader.cc:423 -#: source/ubl-settings-bootloader.cc:289 source/ubl-settings-bootloader.cc:290 -#: source/ubl-settings-bootloader.cc:291 +#: source/ubl-settings-bootloader.h:45 source/ubl-settings-bootloader.h:44 +#: source/ubl-settings-bootloader.cc:421 source/ubl-settings-bootloader.cc:422 +#: source/ubl-settings-bootloader.cc:423 source/ubl-settings-bootloader.cc:289 +#: source/ubl-settings-bootloader.cc:290 source/ubl-settings-bootloader.cc:291 msgid "Command line parameters:" msgstr "Параметры командной строки:" -#: source/ubl-settings-bootloader.h:41 source/ubl-settings-bootloader.cc:417 -#: source/ubl-settings-bootloader.cc:285 +#: source/ubl-settings-bootloader.h:42 source/ubl-settings-bootloader.h:41 +#: source/ubl-settings-bootloader.cc:417 source/ubl-settings-bootloader.cc:285 msgid "Configuring system boot parameters" msgstr "Настройка параметров загрузки системы" msgid "Configuring the boot loader settings" msgstr "Настройка параметров загрузчика системы" -#: source/ubl-settings-bootloader.h:37 source/ubl-settings-bootloader.cc:411 -#: source/ubl-settings-bootloader.cc:279 +#: source/ubl-settings-bootloader.h:38 source/ubl-settings-bootloader.h:37 +#: source/ubl-settings-bootloader.cc:411 source/ubl-settings-bootloader.cc:279 msgid "Copyright © UBSoft LLC, 2022 - " msgstr "" @@ -84,8 +84,8 @@ msgstr "" msgid "Default download" msgstr "По умолчанию" -#: source/ubl-settings-bootloader.h:93 source/ubl-settings-bootloader.cc:339 -#: source/ubl-settings-bootloader.cc:201 +#: source/ubl-settings-bootloader.h:94 source/ubl-settings-bootloader.h:93 +#: source/ubl-settings-bootloader.cc:339 source/ubl-settings-bootloader.cc:201 msgid "Description" msgstr "Описание" @@ -107,8 +107,8 @@ msgstr "Отключить выбор и загрузку ядром драйв msgid "Disable local APIC" msgstr "Отключить локальный APIC" -#: source/ubl-settings-bootloader.h:47 source/ubl-settings-bootloader.cc:426 -#: source/ubl-settings-bootloader.cc:294 +#: source/ubl-settings-bootloader.h:48 source/ubl-settings-bootloader.h:47 +#: source/ubl-settings-bootloader.cc:426 source/ubl-settings-bootloader.cc:294 msgid "Download menu" msgstr "Меню загрузки" @@ -118,16 +118,18 @@ msgstr "Загрузка без текстовых сообщений" msgid "Eliminates flickering laptop display on Ultra Voltage processors" msgstr "Устраняет мерцание дисплея ноутбука на процессорах Ultra Voltage" -#: source/ubl-settings-bootloader.h:77 source/ubl-settings-bootloader.cc:496 +#: source/ubl-settings-bootloader.h:78 source/ubl-settings-bootloader.h:77 +#: source/ubl-settings-bootloader.cc:496 msgid "Enter login" msgstr "Введите логин" -#: source/ubl-settings-bootloader.h:76 source/ubl-settings-bootloader.cc:476 +#: source/ubl-settings-bootloader.h:77 source/ubl-settings-bootloader.h:76 +#: source/ubl-settings-bootloader.cc:476 msgid "Enter your password" msgstr "Введите пароль" -#: source/ubl-settings-bootloader.h:83 source/ubl-settings-bootloader.cc:897 -#: source/ubl-settings-bootloader.cc:443 +#: source/ubl-settings-bootloader.h:84 source/ubl-settings-bootloader.h:83 +#: source/ubl-settings-bootloader.cc:897 source/ubl-settings-bootloader.cc:443 #, fuzzy msgid "Error saved local and global configuration" msgstr "Успешно записаны локальная и глобальная конфигурация" @@ -144,7 +146,7 @@ msgid "" " -V, --version\t Show package version\n" msgstr "" -#: source/ubl-settings-bootloader.h:94 +#: source/ubl-settings-bootloader.h:95 source/ubl-settings-bootloader.h:94 msgid "" "GTK settings bootloader for UBLinux\n" "\n" @@ -171,28 +173,28 @@ msgstr "" " --lock-save-global Блокировка сохранения глобальной конфигурации\n" " --lock-load-global Блокировка загрузки глобальной конфигурации\n" -#: source/ubl-settings-bootloader.h:85 source/ubl-settings-bootloader.cc:911 -#: source/ubl-settings-bootloader.cc:455 +#: source/ubl-settings-bootloader.h:86 source/ubl-settings-bootloader.h:85 +#: source/ubl-settings-bootloader.cc:911 source/ubl-settings-bootloader.cc:455 msgid "Global configuration downloaded successfully" msgstr "Успешно загружена глобальная конфигурация" -#: source/ubl-settings-bootloader.h:80 source/ubl-settings-bootloader.cc:885 -#: source/ubl-settings-bootloader.cc:431 +#: source/ubl-settings-bootloader.h:81 source/ubl-settings-bootloader.h:80 +#: source/ubl-settings-bootloader.cc:885 source/ubl-settings-bootloader.cc:431 msgid "Global configuration read error" msgstr "Ошибка чтения глобальной конфигурации" -#: source/ubl-settings-bootloader.h:87 source/ubl-settings-bootloader.cc:917 -#: source/ubl-settings-bootloader.cc:461 +#: source/ubl-settings-bootloader.h:88 source/ubl-settings-bootloader.h:87 +#: source/ubl-settings-bootloader.cc:917 source/ubl-settings-bootloader.cc:461 msgid "Global configuration successfully written" msgstr "Успешно записана глобальная конфигурация" -#: source/ubl-settings-bootloader.h:82 source/ubl-settings-bootloader.cc:893 -#: source/ubl-settings-bootloader.cc:439 +#: source/ubl-settings-bootloader.h:83 source/ubl-settings-bootloader.h:82 +#: source/ubl-settings-bootloader.cc:893 source/ubl-settings-bootloader.cc:439 msgid "Global configuration write error" msgstr "Ошибка записи глобальной конфигурации" -#: source/ubl-settings-bootloader.h:51 source/ubl-settings-bootloader.cc:430 -#: source/ubl-settings-bootloader.cc:300 +#: source/ubl-settings-bootloader.h:52 source/ubl-settings-bootloader.h:51 +#: source/ubl-settings-bootloader.cc:430 source/ubl-settings-bootloader.cc:300 msgid "Help" msgstr "Справка" @@ -201,7 +203,8 @@ msgstr "Справка" msgid "Input terminal" msgstr "Терминал для вывода" -#: source/ubl-settings-bootloader.h:74 source/ubl-settings-bootloader.cc:451 +#: source/ubl-settings-bootloader.h:75 source/ubl-settings-bootloader.h:74 +#: source/ubl-settings-bootloader.cc:451 msgid "Lack of loading animation with the output of the abbreviated log" msgstr "Отсутствие анимации загрузки с выводом сокращенного журнала" @@ -209,26 +212,28 @@ msgstr "Отсутствие анимации загрузки с выводом msgid "Last Successful Download" msgstr "Последняя удачная загрузка" -#: source/ubl-settings-bootloader.h:67 source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:68 source/ubl-settings-bootloader.h:67 +#: source/ubl-settings-bootloader.cc:452 msgid "Last successful upload" msgstr "Последняя удачная загрузка" -#: source/ubl-settings-bootloader.h:54 source/ubl-settings-bootloader.cc:438 -#: source/ubl-settings-bootloader.cc:308 +#: source/ubl-settings-bootloader.h:55 source/ubl-settings-bootloader.h:54 +#: source/ubl-settings-bootloader.cc:438 source/ubl-settings-bootloader.cc:308 msgid "Load" msgstr "Загрузить" -#: source/ubl-settings-bootloader.h:45 source/ubl-settings-bootloader.cc:424 +#: source/ubl-settings-bootloader.h:46 source/ubl-settings-bootloader.h:45 +#: source/ubl-settings-bootloader.cc:424 msgid "Load default:" msgstr "Загрузка по умолчанию:" -#: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.cc:435 -#: source/ubl-settings-bootloader.cc:305 +#: source/ubl-settings-bootloader.h:59 source/ubl-settings-bootloader.h:58 +#: source/ubl-settings-bootloader.cc:435 source/ubl-settings-bootloader.cc:305 msgid "Load global configuration" msgstr "Загрузить глобальную конфигурацию" -#: source/ubl-settings-bootloader.h:59 source/ubl-settings-bootloader.cc:436 -#: source/ubl-settings-bootloader.cc:306 +#: source/ubl-settings-bootloader.h:60 source/ubl-settings-bootloader.h:59 +#: source/ubl-settings-bootloader.cc:436 source/ubl-settings-bootloader.cc:306 msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" @@ -251,31 +256,33 @@ msgstr "" msgid "Load screen display mode:" msgstr "Режим отображения экрана загрузки:" -#: source/ubl-settings-bootloader.h:72 source/ubl-settings-bootloader.cc:448 +#: source/ubl-settings-bootloader.h:73 source/ubl-settings-bootloader.h:72 +#: source/ubl-settings-bootloader.cc:448 msgid "Loading animation with the magazine" msgstr "Анимация загрузки с журналом" -#: source/ubl-settings-bootloader.h:73 source/ubl-settings-bootloader.cc:449 +#: source/ubl-settings-bootloader.h:74 source/ubl-settings-bootloader.h:73 +#: source/ubl-settings-bootloader.cc:449 msgid "Loading animation without a magazine" msgstr "Анимация загрузки без журнала" -#: source/ubl-settings-bootloader.h:84 source/ubl-settings-bootloader.cc:908 -#: source/ubl-settings-bootloader.cc:452 +#: source/ubl-settings-bootloader.h:85 source/ubl-settings-bootloader.h:84 +#: source/ubl-settings-bootloader.cc:908 source/ubl-settings-bootloader.cc:452 msgid "Local configuration downloaded successfully" msgstr "Успешно загружена локальная конфигурация" -#: source/ubl-settings-bootloader.h:79 source/ubl-settings-bootloader.cc:881 -#: source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:80 source/ubl-settings-bootloader.h:79 +#: source/ubl-settings-bootloader.cc:881 source/ubl-settings-bootloader.cc:427 msgid "Local configuration reading error" msgstr "Ошибка чтения локальной конфигурации" -#: source/ubl-settings-bootloader.h:86 source/ubl-settings-bootloader.cc:914 -#: source/ubl-settings-bootloader.cc:458 +#: source/ubl-settings-bootloader.h:87 source/ubl-settings-bootloader.h:86 +#: source/ubl-settings-bootloader.cc:914 source/ubl-settings-bootloader.cc:458 msgid "Local configuration successfully written" msgstr "Успешно записана локальная конфигурация" -#: source/ubl-settings-bootloader.h:81 source/ubl-settings-bootloader.cc:889 -#: source/ubl-settings-bootloader.cc:435 +#: source/ubl-settings-bootloader.h:82 source/ubl-settings-bootloader.h:81 +#: source/ubl-settings-bootloader.cc:889 source/ubl-settings-bootloader.cc:435 msgid "Local configuration write error" msgstr "Ошибка записи локальной конфигурации" @@ -286,7 +293,7 @@ msgstr "Вручную" msgid "Maximum performance, power management" msgstr "Максимальная производительность, управление питанием" -#: source/ubl-settings-bootloader.h:64 +#: source/ubl-settings-bootloader.h:65 source/ubl-settings-bootloader.h:64 msgid "No loading animation, full log" msgstr "Отсутствие анимации загрузки с выводом журнала" @@ -294,17 +301,17 @@ msgstr "Отсутствие анимации загрузки с выводом msgid "Not available" msgstr "Отсутствует" -#: source/ubl-settings-bootloader.h:89 source/ubl-settings-bootloader.cc:923 -#: source/ubl-settings-bootloader.cc:341 source/ubl-settings-bootloader.cc:354 -#: source/ubl-settings-bootloader.cc:367 +#: source/ubl-settings-bootloader.h:90 source/ubl-settings-bootloader.h:89 +#: source/ubl-settings-bootloader.cc:923 source/ubl-settings-bootloader.cc:341 +#: source/ubl-settings-bootloader.cc:354 source/ubl-settings-bootloader.cc:367 msgid "Nothing to save!" msgstr "Нечего сохранять!" msgid "Open Firmware Console" msgstr "Консоль Open Firmware" -#: source/ubl-settings-bootloader.h:92 source/ubl-settings-bootloader.cc:338 -#: source/ubl-settings-bootloader.cc:200 +#: source/ubl-settings-bootloader.h:93 source/ubl-settings-bootloader.h:92 +#: source/ubl-settings-bootloader.cc:338 source/ubl-settings-bootloader.cc:200 msgid "Option" msgstr "Опция" @@ -327,33 +334,33 @@ msgstr "Параметры, передаваемые ядру" msgid "Prevents the processor from going into a deep sleep state" msgstr "Предотвращает переход процессора в состояние глубокого сна" -#: source/ubl-settings-bootloader.h:40 source/ubl-settings-bootloader.cc:416 -#: source/ubl-settings-bootloader.cc:420 source/ubl-settings-bootloader.cc:284 -#: source/ubl-settings-bootloader.cc:288 +#: source/ubl-settings-bootloader.h:41 source/ubl-settings-bootloader.h:40 +#: source/ubl-settings-bootloader.cc:416 source/ubl-settings-bootloader.cc:420 +#: source/ubl-settings-bootloader.cc:284 source/ubl-settings-bootloader.cc:288 msgid "Project Home Page" msgstr "Домашняя страница проекта" -#: source/ubl-settings-bootloader.h:60 +#: source/ubl-settings-bootloader.h:61 source/ubl-settings-bootloader.h:60 msgid "Read online" msgstr "Прочитать онлайн" -#: source/ubl-settings-bootloader.h:53 source/ubl-settings-bootloader.cc:437 -#: source/ubl-settings-bootloader.cc:307 +#: source/ubl-settings-bootloader.h:54 source/ubl-settings-bootloader.h:53 +#: source/ubl-settings-bootloader.cc:437 source/ubl-settings-bootloader.cc:307 msgid "Save" msgstr "Сохранить" -#: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.cc:434 -#: source/ubl-settings-bootloader.cc:304 +#: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.h:57 +#: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 msgid "Save global configuration" msgstr "Сохранить глобальную конфигурацию" -#: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.cc:433 -#: source/ubl-settings-bootloader.cc:303 +#: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.h:56 +#: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 msgid "Save local configuration" msgstr "Сохранить локальную конфигурацию" -#: source/ubl-settings-bootloader.h:55 source/ubl-settings-bootloader.cc:432 -#: source/ubl-settings-bootloader.cc:302 +#: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.h:55 +#: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 msgid "Save to global and local configuration" msgstr "Сохранить глобальную и локальную конфигурацию" @@ -375,21 +382,24 @@ msgstr "Показывать окно приветствия" msgid "Single User Mode" msgstr "Режим одного пользователя" -#: source/ubl-settings-bootloader.h:88 source/ubl-settings-bootloader.cc:920 -#: source/ubl-settings-bootloader.cc:464 +#: source/ubl-settings-bootloader.h:89 source/ubl-settings-bootloader.h:88 +#: source/ubl-settings-bootloader.cc:920 source/ubl-settings-bootloader.cc:464 msgid "Successfully saved local and global configuration" msgstr "Успешно записаны локальная и глобальная конфигурация" -#: source/ubl-settings-bootloader.h:42 source/ubl-settings-bootloader.cc:419 +#: source/ubl-settings-bootloader.h:43 source/ubl-settings-bootloader.h:42 +#: source/ubl-settings-bootloader.cc:419 msgid "System boot" msgstr "Загрузка системы" -#: source/ubl-settings-bootloader.h:48 source/ubl-settings-bootloader.cc:427 +#: source/ubl-settings-bootloader.h:49 source/ubl-settings-bootloader.h:48 +#: source/ubl-settings-bootloader.cc:427 #, fuzzy msgid "Terminal for input" msgstr "Терминал для ввода" -#: source/ubl-settings-bootloader.h:49 source/ubl-settings-bootloader.cc:428 +#: source/ubl-settings-bootloader.h:50 source/ubl-settings-bootloader.h:49 +#: source/ubl-settings-bootloader.cc:428 #, fuzzy msgid "Terminal for output" msgstr "Терминал для вывода" @@ -398,8 +408,8 @@ msgstr "Терминал для вывода" msgid "The last selection will become the default boot choice" msgstr "Последний выбор станет выбором загрузки по умолчанию" -#: source/ubl-settings-bootloader.h:90 source/ubl-settings-bootloader.cc:107 -#: source/ubl-settings-bootloader.cc:94 +#: source/ubl-settings-bootloader.h:91 source/ubl-settings-bootloader.h:90 +#: source/ubl-settings-bootloader.cc:107 source/ubl-settings-bootloader.cc:94 msgid "The program must be run as root" msgstr "Программа должна быть запущена с правами суперпользователя!" @@ -409,12 +419,13 @@ msgstr "UBConfig - Загрузка" msgid "USB Keyboard (HID Boot protocol)" msgstr "Клавиатура USB Keyboard (протокол HID Boot)" -#: source/ubl-settings-bootloader.h:70 source/ubl-settings-bootloader.cc:440 +#: source/ubl-settings-bootloader.h:71 source/ubl-settings-bootloader.h:70 +#: source/ubl-settings-bootloader.cc:440 msgid "User name to enter boot configuration editing mode" msgstr "" "Имя пользователя для входа в режим редактирования конфигурации загрузки" -#: source/ubl-settings-bootloader.h:71 +#: source/ubl-settings-bootloader.h:72 source/ubl-settings-bootloader.h:71 msgid "User password to enter boot configuration edit mode" msgstr "" "Пароль пользователя для входа в режим редактирования конфигурации загрузки" @@ -422,11 +433,11 @@ msgstr "" msgid "VGA text output (Coreboot)" msgstr "Текстовый вывод VGA (Coreboot)" -#: source/ubl-settings-bootloader.h:68 +#: source/ubl-settings-bootloader.h:69 source/ubl-settings-bootloader.h:68 msgid "Would you like to read documentation in the Web?" msgstr "Вы хотите прочитать справку в Сети?" -#: source/ubl-settings-bootloader.h:69 +#: source/ubl-settings-bootloader.h:70 source/ubl-settings-bootloader.h:69 msgid "" "You will be redirected to documentation site, where user help pages are " "translated and supported by community." @@ -454,6 +465,7 @@ msgstr "Консоль (PC BIOS & console EFI)" msgid "gfxterm (Output in graphical mode)" msgstr "gfxterm (Вывод в графическом режиме)" +#: source/ubl-settings-bootloader.h:40 source/ubl-settings-bootloader.h:76 #: source/ubl-settings-bootloader.h:39 source/ubl-settings-bootloader.h:75 #: source/ubl-settings-bootloader.cc:414 source/ubl-settings-bootloader.cc:282 msgid "https://wiki.ublinux.com" @@ -499,7 +511,8 @@ msgstr "ofconsole (Консоль Open Firmware)" msgid "quiet (Downloading without text messages)" msgstr "quiet (Загрузка без текстовых сообщений)" -#: source/ubl-settings-bootloader.h:46 source/ubl-settings-bootloader.cc:425 +#: source/ubl-settings-bootloader.h:47 source/ubl-settings-bootloader.h:46 +#: source/ubl-settings-bootloader.cc:425 msgid "seconds" msgstr "секунд" @@ -519,15 +532,15 @@ msgstr "" msgid "splash (Show welcome window)" msgstr "splash (Показать окно приветствия)" -#: source/ubl-settings-bootloader.h:38 source/ubl-settings-bootloader.cc:413 -#: source/ubl-settings-bootloader.cc:418 source/ubl-settings-bootloader.cc:439 -#: source/ubl-settings-bootloader.cc:281 source/ubl-settings-bootloader.cc:286 -#: source/ubl-settings-bootloader.cc:309 +#: source/ubl-settings-bootloader.h:39 source/ubl-settings-bootloader.h:38 +#: source/ubl-settings-bootloader.cc:413 source/ubl-settings-bootloader.cc:418 +#: source/ubl-settings-bootloader.cc:439 source/ubl-settings-bootloader.cc:281 +#: source/ubl-settings-bootloader.cc:286 source/ubl-settings-bootloader.cc:309 msgid "ubl-settings-bootloader" msgstr "Загрузка системы" -#: source/ubl-settings-bootloader.h:78 source/ubl-settings-bootloader.cc:947 -#: source/ubl-settings-bootloader.cc:547 +#: source/ubl-settings-bootloader.h:79 source/ubl-settings-bootloader.h:78 +#: source/ubl-settings-bootloader.cc:947 source/ubl-settings-bootloader.cc:547 msgid "ubl-settings-bootloader version: " msgstr "ubl-settings-bootloader версия: " From 348068e52a20b65d57a962a2365d56f8743e2ba6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 26 Apr 2023 09:19:54 +0600 Subject: [PATCH 107/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.cc | 2 +- ubl-settings-bootloader.glade | 70 +++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 29852c6..1a6d333 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -471,7 +471,7 @@ void MainWindow::localization(){ lblInfoCommand->set_text(command_line_parameters); lblInfoCommand1->set_text(command_line_parameters); lblInfoCommand2->set_text(command_line_parameters); - lblInfoDefaultDonw->set_text(str_about); + lblInfoDefaultDonw->set_text(load_default); lblInfoSeconds->set_text(seconds); lblLoadMenu->set_text(download_menu); lblInfoInputTerminal->set_text(terminal_for_input); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 0b6ec9d..6aab940 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -8,6 +8,46 @@ + + True + True + True + + + True + False + + + True + False + label + + + False + True + 0 + + + + + True + True + False + True + right + + + + + + False + True + 1 + + + + + False False @@ -125,6 +165,10 @@ specified priority + + True + False + True False @@ -444,6 +488,32 @@ specified priority 1 + + + True + True + False + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + False + open-menu-symbolic + + + + + False + True + 2 + + False From 3acabebd85107745b9b9ddf916ec123251f9efdc Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 26 Apr 2023 09:28:15 +0600 Subject: [PATCH 108/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA?= =?UTF-8?q?=20"=D0=A1=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B8=D1=82=D1=8C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-bootloader.h | 6 +++--- ubl-settings-bootloader.pot | 6 +++--- ubl-settings-bootloader_ru.po | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 83756fb..1d2871a 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -53,9 +53,9 @@ void me_thread(string cmd); #define str_about_1 _("About") #define str_save _("Save") #define str_load _("Load") -#define save_all _("Save to global and local configuration") -#define save_local _("Save local configuration") -#define save_global _("Save global configuration") +#define save_all _("Save in global and local configuration") +#define save_local _("Save in local configuration") +#define save_global _("Save in global configuration") #define load_global _("Load global configuration") #define load_local _("Load local configuration") #define read_online _("Read online") diff --git a/ubl-settings-bootloader.pot b/ubl-settings-bootloader.pot index 565dbd6..88dec94 100644 --- a/ubl-settings-bootloader.pot +++ b/ubl-settings-bootloader.pot @@ -332,17 +332,17 @@ msgstr "" #: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.h:57 #: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 -msgid "Save global configuration" +msgid "Save in global configuration" msgstr "" #: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.h:56 #: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 -msgid "Save local configuration" +msgid "Save in local configuration" msgstr "" #: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.h:55 #: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 -msgid "Save to global and local configuration" +msgid "Save in global and local configuration" msgstr "" #: source/ubl-settings-bootloader.cc:293 diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index 32f9be7..73ae7f5 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -351,18 +351,18 @@ msgstr "Сохранить" #: source/ubl-settings-bootloader.h:58 source/ubl-settings-bootloader.h:57 #: source/ubl-settings-bootloader.cc:434 source/ubl-settings-bootloader.cc:304 -msgid "Save global configuration" -msgstr "Сохранить глобальную конфигурацию" +msgid "Save in global configuration" +msgstr "Сохранить в глобальную конфигурацию" #: source/ubl-settings-bootloader.h:57 source/ubl-settings-bootloader.h:56 #: source/ubl-settings-bootloader.cc:433 source/ubl-settings-bootloader.cc:303 -msgid "Save local configuration" -msgstr "Сохранить локальную конфигурацию" +msgid "Save in local configuration" +msgstr "Сохранить в локальную конфигурацию" #: source/ubl-settings-bootloader.h:56 source/ubl-settings-bootloader.h:55 #: source/ubl-settings-bootloader.cc:432 source/ubl-settings-bootloader.cc:302 -msgid "Save to global and local configuration" -msgstr "Сохранить глобальную и локальную конфигурацию" +msgid "Save in global and local configuration" +msgstr "Сохранить в глобальную и локальную конфигурацию" #: source/ubl-settings-bootloader.cc:293 #, fuzzy From dd7c359296f8374f23407ccf04eba3172674affa Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 26 Apr 2023 10:16:41 +0600 Subject: [PATCH 109/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-bootloader.glade# | 1570 +++++++++++++++++++++++++++++++ ubl-settings-bootloader.glade | 1 - 2 files changed, 1570 insertions(+), 1 deletion(-) create mode 100644 #ubl-settings-bootloader.glade# diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# new file mode 100644 index 0000000..c7a83df --- /dev/null +++ b/#ubl-settings-bootloader.glade# @@ -0,0 +1,1570 @@ + + + + + + both + True + + + + + True + True + True + + + True + False + + + True + False + label + + + False + True + 0 + + + + + True + True + False + True + right + + + + + + False + True + 1 + + + + + + + False + False + True + center + com.ublinux.ubl-settings-diskquota + dialog + True + True + ubl-settings-bootloader + 1.0 + Copyright © 2022 - 2023, UBSoft LLC + ubl-settings-bootloader + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + UBGroup + UBGroup + com.ublinux.ubl-settings-bootloader + True + gpl-2-0 + + + True + False + vertical + 2 + + + False + end + + + False + False + 1 + + + + + + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-bootloader + + + + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + com.ublinux.ubl-settings-bootloader + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Running applications as a user with a +specified priority + + + + + + + + True + True + 1 + + + + + True + False + + + True + False + False + False + 4 + + + True + False + Load global configuration + + + + + + True + False + Load local configuration + + + + + + True + False + False + False + 4 + + + True + False + Help + + + + + + True + False + About + + + + + + True + False + False + False + 4 + + + True + False + Save to global and local configuration + + + + + + True + False + Save global configuration + + + + + + True + False + Save local configuration + + + + + + 750 + 550 + False + com.ublinux.ubl-settings-bootloader + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 25 + 1 + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + + + 81 + True + False + start + + + -1 + + + + + False + True + 1 + + + + + True + True + in + + + True + False + + + True + False + vertical + + + True + False + vertical + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + True + False + + + Boot selection menu timer + True + True + False + 3 + 5 + 3 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Seconds + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Default load + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Load screen display mode: + start + 0 + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 3 + + + + + True + False + + + Boot menu user name: + True + True + False + 2 + 5 + 2 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 4 + + + + + True + False + + + Boot menu user password: + True + True + False + 2 + 5 + 2 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 2 + + + + + False + True + 5 + + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download menu + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + 5 + 5 + in + + + True + False + + + -1 + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 10 + + + + + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Parameters passed to the kernel + start + + + + + False + True + 1 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + 5 + 5 + in + + + True + False + + + True + True + + + + + + + + + + False + True + 1 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for input + start + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 12 + + + True + False + vertical + + + 140 + True + True + 5 + 5 + in + + + True + False + + + True + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Command line parameters: + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 1 + + + + + False + True + 7 + + + + + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + Terminal for output + start + + + + + False + True + 3 + + + + + False + True + 5 + + + + + + + + + True + True + 2 + + + + + + + True + False + True + + + True + False + ubl-settings-bootloader + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-bootloader + + + + + True + False + + + True + False + + + True + True + False + True + True + menu2 + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Save + + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + True + True + menu1 + none + + + True + False + open-menu-symbolic + + + + + False + True + 1 + + + + + + False + True + 0 + + + + + end + 1 + + + + + True + False + + + True + True + False + True + True + menu + none + + + True + False + + + True + False + 5 + 5 + 5 + 5 + Load + + + False + True + 0 + + + + + True + False + pan-down-symbolic + + + False + True + 1 + + + + + + + False + True + 0 + + + + + + 2 + + + + + + + both + True + + + + + + + + both + True + + + + + + + + + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Warning! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + False + start + start + False + 450 + 250 + dialog-question-symbolic + + + True + False + vertical + + + True + False + + + True + False + start + 20 + 20 + dialog-question-symbolic + 6 + + + False + True + 0 + + + + + True + False + vertical + + + True + False + start + 10 + 5 + Would you like to read documentation in the Web? + True + 0 + + + + + + + False + True + 0 + + + + + True + False + start + start + 10 + 10 + You will be redirected to documentation website where documentation is translated and supported by community. + True + 0 + + + + True + True + 1 + + + + + Always redirect to online documentation + True + True + False + end + 10 + True + + + + False + True + 2 + + + + + + True + True + 1 + + + + + + True + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + 30 + True + + + Cancel + True + True + True + + + + True + True + 0 + + + + + Read Online + True + True + True + + + + True + True + 1 + + + + + False + True + 1 + + + + + + + True + False + True + + + True + False + ubl-settings-bootloader + + + + + + + + True + False + 32 + dialog-question-symbolic + + + + + + + 800 + 600 + False + True + True + com.ublinux.ubl-settings-datetime + + + + + + True + False + True + + + True + False + ubl-settings-bootloader + + + + + True + False + 32 + com.ublinux.ubl-settings-bootloader + 5 + + + + + + diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 6aab940..7f45f35 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -348,7 +348,6 @@ specified priority True True - never in From e4cdbea90639839f79726d69a69ae959d21647a6 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 26 Apr 2023 10:19:01 +0600 Subject: [PATCH 110/110] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-bootloader.glade# | 1570 ----------------------------- source/ubl-settings-bootloader.cc | 2 +- ubl-settings-bootloader.glade | 26 - 3 files changed, 1 insertion(+), 1597 deletions(-) delete mode 100644 #ubl-settings-bootloader.glade# diff --git a/#ubl-settings-bootloader.glade# b/#ubl-settings-bootloader.glade# deleted file mode 100644 index c7a83df..0000000 --- a/#ubl-settings-bootloader.glade# +++ /dev/null @@ -1,1570 +0,0 @@ - - - - - - both - True - - - - - True - True - True - - - True - False - - - True - False - label - - - False - True - 0 - - - - - True - True - False - True - right - - - - - - False - True - 1 - - - - - - - False - False - True - center - com.ublinux.ubl-settings-diskquota - dialog - True - True - ubl-settings-bootloader - 1.0 - Copyright © 2022 - 2023, UBSoft LLC - ubl-settings-bootloader - https://ublinux.ru/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - UBGroup - UBGroup - com.ublinux.ubl-settings-bootloader - True - gpl-2-0 - - - True - False - vertical - 2 - - - False - end - - - False - False - 1 - - - - - - - - - - True - False - True - - - True - False - 5 - 5 - 5 - 5 - 2 - ubl-settings-bootloader - - - - - - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - com.ublinux.ubl-settings-bootloader - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Running applications as a user with a -specified priority - - - - - - - - True - True - 1 - - - - - True - False - - - True - False - False - False - 4 - - - True - False - Load global configuration - - - - - - True - False - Load local configuration - - - - - - True - False - False - False - 4 - - - True - False - Help - - - - - - True - False - About - - - - - - True - False - False - False - 4 - - - True - False - Save to global and local configuration - - - - - - True - False - Save global configuration - - - - - - True - False - Save local configuration - - - - - - 750 - 550 - False - com.ublinux.ubl-settings-bootloader - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 25 - 1 - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - 81 - True - False - start - - - -1 - - - - - False - True - 1 - - - - - True - True - in - - - True - False - - - True - False - vertical - - - True - False - vertical - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - True - False - - - Boot selection menu timer - True - True - False - 3 - 5 - 3 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Seconds - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Default load - start - 0 - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 1 - - - - - True - False - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Load screen display mode: - start - 0 - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 3 - - - - - True - False - - - Boot menu user name: - True - True - False - 2 - 5 - 2 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 4 - - - - - True - False - - - Boot menu user password: - True - True - False - 2 - 5 - 2 - 5 - 6 - 6 - True - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 2 - - - - - False - True - 5 - - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download menu - - - - - False - True - 0 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - 5 - 5 - in - - - True - False - - - -1 - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 10 - - - - - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Parameters passed to the kernel - start - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - 5 - 5 - in - - - True - False - - - True - True - - - - - - - - - - False - True - 1 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for input - start - - - - - False - True - 2 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 12 - - - True - False - vertical - - - 140 - True - True - 5 - 5 - in - - - True - False - - - True - True - - - - - - - - - - False - True - 0 - - - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Command line parameters: - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 1 - - - - - False - True - 7 - - - - - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Terminal for output - start - - - - - False - True - 3 - - - - - False - True - 5 - - - - - - - - - True - True - 2 - - - - - - - True - False - True - - - True - False - ubl-settings-bootloader - - - - - - - - True - False - 32 - com.ublinux.ubl-settings-bootloader - - - - - True - False - - - True - False - - - True - True - False - True - True - menu2 - none - - - True - False - - - True - False - 5 - 5 - 5 - 5 - Save - - - - False - True - 0 - - - - - True - False - pan-down-symbolic - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - True - False - True - True - menu1 - none - - - True - False - open-menu-symbolic - - - - - False - True - 1 - - - - - - False - True - 0 - - - - - end - 1 - - - - - True - False - - - True - True - False - True - True - menu - none - - - True - False - - - True - False - 5 - 5 - 5 - 5 - Load - - - False - True - 0 - - - - - True - False - pan-down-symbolic - - - False - True - 1 - - - - - - - False - True - 0 - - - - - - 2 - - - - - - - both - True - - - - - - - - both - True - - - - - - - - - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Warning! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - False - start - start - False - 450 - 250 - dialog-question-symbolic - - - True - False - vertical - - - True - False - - - True - False - start - 20 - 20 - dialog-question-symbolic - 6 - - - False - True - 0 - - - - - True - False - vertical - - - True - False - start - 10 - 5 - Would you like to read documentation in the Web? - True - 0 - - - - - - - False - True - 0 - - - - - True - False - start - start - 10 - 10 - You will be redirected to documentation website where documentation is translated and supported by community. - True - 0 - - - - True - True - 1 - - - - - Always redirect to online documentation - True - True - False - end - 10 - True - - - - False - True - 2 - - - - - - True - True - 1 - - - - - - True - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 30 - True - - - Cancel - True - True - True - - - - True - True - 0 - - - - - Read Online - True - True - True - - - - True - True - 1 - - - - - False - True - 1 - - - - - - - True - False - True - - - True - False - ubl-settings-bootloader - - - - - - - - True - False - 32 - dialog-question-symbolic - - - - - - - 800 - 600 - False - True - True - com.ublinux.ubl-settings-datetime - - - - - - True - False - True - - - True - False - ubl-settings-bootloader - - - - - True - False - 32 - com.ublinux.ubl-settings-bootloader - 5 - - - - - - diff --git a/source/ubl-settings-bootloader.cc b/source/ubl-settings-bootloader.cc index 1a6d333..66ee893 100755 --- a/source/ubl-settings-bootloader.cc +++ b/source/ubl-settings-bootloader.cc @@ -494,7 +494,7 @@ void MainWindow::localization(){ chbSecurityLogin->set_tooltip_text(loading_animation_without); chbPasswordProtecc->set_tooltip_text(user_password_configuration_edit_mode); lblDownloadMode->set_text(boot_screen_display_mode); - chbSecurityLogin->set_label(boot_screen_display_mode); + chbSecurityLogin->set_label(boot_menu_user_name); chbPasswordProtecc->set_label(boot_menu_user_password); cmbDownloadMode->append(loading_animation_with); cmbDownloadMode->append(loading_animation_without); diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 7f45f35..c7a83df 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -487,32 +487,6 @@ specified priority 1 - - - True - True - False - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - False - open-menu-symbolic - - - - - False - True - 2 - - False