#include #include #include #include #include #include #include #include #include #include #include #include #include #include "ubl-util-standard.c" #include "util.h" #include "save.h" #include "load.h" #include #include "ubl-settings-bootloader-cm.h" #include "menu_os.h" #ifdef WEBKIT_FOUND #include #endif #include "my_process.h" using namespace std; extern int socket_ext_id_I; extern int socket_trd_id_I; 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); #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 setup") #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 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") #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_title _("Title") #define str_user _("User") #define str_password _("Password") #define str_administrator _("Administrator") #define str_select _("Select") #define str_melody_code _("Melody code") #define str_ringtone_at_startup _("Ringtone at startup") #define str_description _("Description") #define str_title_Boot_Menu_Users _("Boot Menu Users") #define str_title_Ringtone_Startup _("Ringtone at startup") #define str_null_melody_name _("Enter the name and code of the tune in the \"Ringtone at startup\" field") #define str_null_username _("Enter name and password in the \"Boot Menu Users\" field") #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 all_save "ubconfig set boot " #define all_remove "ubconfig remove boot " #define global_save "ubconfig --target global --noexecute set boot " #define system_save "ubconfig --target system set boot " #define global_remove "ubconfig --target global --noexecute remove boot " #define system_remove "ubconfig --target system remove boot " #define const_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 "grub-cmdline-linux.csv" #define melody_csv "grub-play.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" #define info_box_ok_css "boxInfoMessOK" #define info_box_error_css "boxInfoMessError" #define str_add_user _("User added") #define str_add_melody _("Melody added") #define str_del_user _("User deleted") #define str_del_melody _("Melody deleted") 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: 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; }; class ModelColumnsUser : public Gtk::TreeModel::ColumnRecord { public: ModelColumnsUser() { add(check_button), add(name); add(password); } // Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn name; Gtk::TreeModelColumn password; }; class ModelColumnsMelody : public Gtk::TreeModel::ColumnRecord { public: ModelColumnsMelody() { add(check_button), add(title); add(melody_code); } // Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn check_button; Gtk::TreeModelColumn title; Gtk::TreeModelColumn melody_code; }; ModelColumns m_columns; ModelColumnsUser m_columns_user; ModelColumnsMelody m_columns_melody; Glib::RefPtr builder; Gtk::SpinButton *spbSecond; Gtk::Label *lblBootMenuUsers; Gtk::Label *lblRingtoneStartup; Gtk::Label *lblInfoSeconds; Gtk::Label *lblInfoDefaultDonw; Gtk::Label *lblInfoCommand; Gtk::Label *lblInfoCommand1; Gtk::Label *lblHeaderAboutTopic; Gtk::Label *lblInfoCommand2; Gtk::Label *lblLoadMenu; Gtk::Label *lblInfoInputTerminal; Gtk::Label *lblInfoOutputTerminal; Gtk::Label *lblHeaderName; Gtk::Label *lblInfoHead; Gtk::Button *btnAddUser; Gtk::Button *btnRemoveUser; Gtk::Button *btnAddMusic; Gtk::Button *btnRemoveMusic; Gtk::CheckButton *chbVgaText; Gtk::CheckButton *chbLoadVariantSelectionTimer; Gtk::Entry *entryKernel; Gtk::Entry *entryIPT; Gtk::Entry *entryOTT; Gtk::Box *boxColor; Gtk::AboutDialog *aboutWindows; Gtk::MenuItem *btnAbout; Gtk::MenuItem *btnHelp; Gtk::MenuItem *btnSaveLocalGlob; Gtk::MenuItem *btnSaveLocal; Gtk::MenuItem *btnSaveGlob; Gtk::MenuItem *btnLoadGlob; Gtk::MenuItem *btnLoadLocal; Gtk::Button *btnLoad; Gtk::Button *btnSave; Gtk::Button *btnSettings; Gtk::Widget *boxButton; Gtk::Widget *boxSave; Gtk::Box *boxInfoError; Gtk::Box *boxWidgetAll; Gtk::Label *lblWarning; Gtk::Image *imgInfo; Gtk::ButtonBox *btnBoxAboutDialog; Gtk::TreeView *treeViewKernel; Gtk::TreeView *treeViewIPT; Gtk::TreeView *treeViewOTT; Gtk::TreeView *treeViewUser; Gtk::TreeView *treeViewMelody; Gtk::Image *imgBG; Gtk::Overlay *overHead; Gtk::ComboBoxText *cmbDownloadMode; Gtk::CheckButton *chbPasswordProtecc; Gtk::Label *lblHeadeWndWeb; Gtk::Label *lblwebHeaderName; Gtk::Label *lblhelpText; Gtk::Label *lblhelpHeader; Gtk::CheckButton *chkAlwaysOpenHelp; Gtk::Button *btnReadHelp; Gtk::Button *btnCancelHelp; Gtk::Window *wndShowWeb; Gtk::Button *btnOpenMenuOS; Gtk::Entry *entrListOS; 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; Glib::RefPtr list_store_user; Glib::RefPtr list_store_melody; #ifdef WEBKIT_FOUND Gtk::Window *wndWeb; Gtk::Widget *three; WebKitWebView *one; #endif Gtk::TreeModel::Row row_kernel; Gtk::TreeModel::Row row_IPT; Gtk::TreeModel::Row row_OTT; Gtk::TreeModel::Row row_user; Gtk::TreeModel::Row row_melody; std::map map_cmd_selection; std::map map_global_cmd_selection; std::map map_local_cmd_selection; Gtk::TreeModel::iterator iter_user_del; Gtk::TreeModel::iterator iter_melody_del; bool flag_validate_del_user = false; bool flag_validate_del_melody = false; Gtk::Label *lblDownloadMode; Lib_save::Save obj_save = Lib_save::Save(); Lib_Load::Load obj_load = Lib_Load::Load(); Menu_os obj_menu_os = Menu_os(); 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; bool flag_save_all = false; 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; string str_flag_load = ""; size_t size_kernel = 0; size_t size_IPT = 0; size_t size_OTT = 0; size_t len_old_melody = 0; size_t len_old_user = 0; Glib::RefPtr boxInfo; string str_cmd_error = ""; template struct Result { Type response; int error; }; public: std::map map_cmd_error; string global_lick_doc = ""; MainWindow(BaseObjectType *obj, Glib::RefPtr const &builder); MainWindow(Glib::RefPtr const &builder); ~MainWindow(); void open_browser(); void select_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter); void set_entry_to_tree_view(Glib::RefPtr &list_store, Gtk::Entry &entry, std::vector &vec_Option, int size, string key); 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); void get_builder(); bool gui_exit(GdkEventAny *); void init_dict(string flag_load); void add_CSS(); void show_pass(); void localization(); void event(); void remove_user(); void remove_melody(); void settings(); void open_help(); void validate_melody(); void select_line_melody(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter); void view_add_colums_user(Gtk::TreeView &treeView); void view_add_colums_melody(Gtk::TreeView &treeView); void set_bat_save(Gtk::Button *btnSave); string pars_last_launched_os(); vector pars_os(vector &os_control_list); void fn_event_intelMax1(); void fn_event_intelMax4(); void temp_help_show(); void set_data_cfg(); void set_data_csv_melody(); vector>> format_os_list(vector &os_control_list); void set_active_boot_second(); 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); void log_mess_error(string &cmd); void wrapper_save_all_cfg(); void wrapper_save_local_cfg(); void wrapper_save_global_cfg(); 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(); void set_tree_view_user(); void template_open_browser(string link_doc); 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); int check_root(); void focus_out_txt_kernel(); void focus_out_txt_IPT(); void focus_out_txt_OTT(); bool focus_in_txt_entry(GdkEventFocus*); void fill_in_view(); bool focus_tree_view(GdkEventFocus *); bool check_flag_save(string flag_save); void set_download_mode(); void get_default_load(std::map &map_temp); void set_entry(Gtk::Entry *entry, std::map &map_temp, string key); 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 &); 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, string key); void set_add_data_melody(Gtk::TreeModel::Row &row, bool flag, string &name, string &code); void set_init_data_melody(std::map &map_temp); void set_add_data_user(Gtk::TreeModel::Row &row, bool flag, string &name, string &password); void set_init_data_user(std::map &map_temp); void set_init_data_superuser(std::map &map_temp); }; class SettingsPlug : public Gtk::Plug { public: Gtk::Window *window; SettingsPlug(::Window p_socketID, Glib::RefPtr builder); private: Gtk::Widget *plugBox; Gtk::Widget *parent; }; void help(); void wrapper_help_show(GtkWidget *self, char* link, gpointer user_data);