#ifndef UBL_UTILS_UI #define UBL_UTILS_UI #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WEBKIT_INCLUDE #include #endif #define ui_WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ublsettingsui-gtk3" #define _(String) gettext(String) #define ui_glade_path "/com/ublinux/ui/libublsettingsui-gtk3.glade" #define ui_glade_path_documentation "/com/ublinux/ui/libublsettingsui-gtk3-documentation.glade" #define ui_glade_path_about "/com/ublinux/ui/libublsettingsui-gtk3-about.glade" #define ui_glade_path_saving "/com/ublinux/ui/libublsettingsui-gtk3-saving.glade" #define ui_glade_path_filechooser "/com/ublinux/ui/libublsettingsui-gtk3-filechooser.glade" #define ui_glade_path_debug "/com/ublinux/ui/libublsettingsui-gtk3-debugger.glade" #define ui_banner_path "/com/ublinux/images/libublsettingsui-gtk3-banner.png" #define ui_CssPath "/com/ublinux/css/libublsettingsui-gtk3.css" #define ui_config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",template_app_information.app_tech_name,"/",template_app_information.app_tech_name,".conf",NULL) #define remove_config_dir_command yon_char_unite("rm -rfd ", yon_ubl_user_get_home_directory(),"/.config/",template_app_information.app_tech_name,"/",NULL) #define dull_parameter_get_command "ubconfig --source global get users PARAMETER" #define SAVE_MODE_GET_COMMAND "ubconfig --raw --source system get [config] SYSTEMBOOT_STATEMODE" #define ubconfig_file_create(target) yon_char_unite("ubconfig --target \"",target,"\" create",NULL) typedef enum SAVE_MODE_TYPE { SAVE_MODE_FULL, SAVE_MODE_MODULE, SAVE_MODE_SANDBOX, SAVE_MODE_RAM_HOME, SAVE_MODE_HDD, SAVE_MODE_HDD_HOME, } SAVE_MODE_TYPE; char *yon_char_get_localised_from_lib(char *string); char *yon_ubl_save_mode_get_icon_name(SAVE_MODE_TYPE type); SAVE_MODE_TYPE yon_ubl_save_mode_get_type(char *type); typedef struct { GtkWidget *interface; char *app_locale; char *css_path; char *app_title; char *app_description; char *app_tech_name; char *app_version; char *wiki_link; gboolean always_open_documentation; } template_app_info; extern template_app_info template_app_information; #define template_config_fields\ int socket_id;\ int load_socket_id;\ int save_socket_id;\ \ int lock_help;\ int lock_save_local;\ int lock_save_global;\ int lock_load_global;\ int lock_load_system;\ \ int load_mode;\ \ int always_open_documentation;\ int debug_mode;\ char *custom_load_path; typedef struct { template_config_fields } _template_config; [[maybe_unused]] extern _template_config *template_config; #define template_window_fields\ GtkWidget *Window;\ GtkWidget *HeadLabel;\ GtkWidget *PlugBox;\ \ GtkWidget *HeadOverlay;\ GtkWidget *HeadImage;\ GtkWidget *HeadBox;\ GtkWidget *HeadTitleLabel;\ GtkWidget *HeadInfoLabel;\ \ GtkWidget *StatusBox;\ GtkWidget *StatusIcon;\ GtkWidget *StatusLabel;\ \ GtkWidget *SaveMenuItem;\ GtkWidget *SaveGlobalMenuItem;\ GtkWidget *SaveLocalMenuItem;\ GtkWidget *SaveCustomMenuItem;\ GtkWidget *RightBox;\ \ GtkWidget *LoadGlobalMenuItem;\ GtkWidget *LoadLocalMenuItem;\ GtkWidget *LoadCustomMenuItem;\ GtkWidget *LeftBox;\ \ GtkWidget *DocumentationMenuItem;\ GtkWidget *AboutMenuItem;\ \ GtkWidget *InterfaceBox;\ //} typedef struct { template_window_fields } template_main_window; typedef struct { GtkWidget *Window; GtkWidget *HeaderLabel; GtkWidget *AlwaysOpenCheck; GtkWidget *CloseButton; GtkWidget *AcceptButton; } template_documentation_confirmation_window; typedef struct { GtkWidget *Window; GtkWidget *HeaderTopic; GtkWidget *HeaderImage; GtkWidget *StatusBox; GtkWidget *Vte; } template_debug_window; typedef struct { void (*function)(void*,void*); void *data; char *action_text; } dialog_confirmation_data; typedef struct { GtkWidget *Window; GtkWidget *StatusBox; GtkWidget *HeaderTopic; GtkWidget *MainFileChooser; GtkWidget *SaveButton; GtkWidget *CancelButton; GtkWidget *ChooseFolderCheck; char *last_success_selection; char *last_any_selection; GtkResponseType responce; } filechooser_window; filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action); GtkResponseType yon_file_chooser_start(filechooser_window *window); void yon_file_chooser_set_button_label(char *label); int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data); /**yon_open_browser(GtkWidget *self, char *link) * [EN] * Opens browser with [link] link. * [RU] * Открывает браузер с [link] ссылкой. */ void yon_open_browser(GtkWidget *self, char *link); char *yon_debug_output(char *pattern,char*text); /**yon_ubl_connect_config(_template_config *config) * [EN] * * [RU] * Присоединяет конфиг основной утилиты (struct config) к стандартному интерфейсу. */ int yon_ubl_connect_config(_template_config *config); void yon_root_button_setup(template_main_window *widgets, config_str args, int args_size); /**yon_ubl_window_init(int argc, char *argv[]) * [EN] * * [RU] * Создаёт и настраивает основное окно приложения. */ template_main_window *yon_ubl_window_setup(); /**yon_ubl_window_setup(GtkWidget *interface, char *app_title, char *app_description, char *locale, char *css, char *tech_name, char *version, char *wiki) * [EN] * * [RU] * Установить важные значения для конфига; * [app_title] - оботражаемое имя утилиты; * [app_description] - отображаемое описание утилиты; * [css] - путь к ресурсу css файла; * [tech_name] - техническое имя утилиты (ubl-settings-) * [version] - строка с версией приложения; * [wiki] - ссылка на вики страницу; */ int yon_ubl_window_init(char *app_title, char *app_description, char *locale, char *css, char *tech_name, char *version, char *wiki); /**on_about() * [EN] * Function for setting up and showing AboutDialog. * Connect it to "activate" signal of Documentation MenuItem. * [RU] * Функиця для настройки и показа окна AboutDialog. * Присоединять к сигналу "activate" кнопки справки типа MenuItem. */ void on_about(GtkWidget *self, char *version_application); /**on_open_documentation_confirmation(GtkWidget *self, char *link) * [EN] * Opens confirmation window for [link] link. * [RU] * Открывает окно подтверждения перехода по ссылке [link]. */ void on_open_documentation_confirmation(GtkWidget *self, char *link); void yon_entry_set_entry_type(GtkEntry *target,GtkBox *status); int yon_ubl_setup_arguments(int argc, char *argv[],config_str *unfound_arguments, int *arguments_size, char *additional_options_output); void yon_gtk_scrolled_window_set_horizontal_at_desired_size(GtkWidget *window, GtkScrolledWindow *target); template_app_info yon_ubl_get_app_info(); typedef struct { GtkWidget *Window; GtkWidget *HeaderTopic; GtkWidget *HeaderImage; GtkWidget *StatusBox; GtkWidget *ParametersTree; GtkCellRenderer *ToggleCell; GtkWidget *CancelButton; GtkWidget *SaveButton; GtkListStore *list; GtkTreeModel *filteredModel; GtkTreeViewColumn *OldValueColumn; GtkCellRenderer *OldValueCell; GtkTreeViewColumn *NewValueColumn; GtkCellRenderer *NewValueCell; YON_CONFIG_TYPE type; char *custom_save_path; } template_saving_window; void yon_save_window_set_postsave_function(void *function, void *data); void yon_save_window_set_postsave_failure_function(void *function, void *data); char *yon_get_default_label_with_parameter(char *command); template_saving_window *yon_save_proceed(char *path,YON_CONFIG_TYPE type, ...); void yon_on_space_first_changed(GtkEntry *editable); enum CONFIGURATION_PARAMETER_TYPE{ CONFIGURATION_PARAMETER_BOOL, CONFIGURATION_PARAMETER_ENTRY, CONFIGURATION_PARAMETER_COMBO_BOX, CONFIGURATION_PARAMETER_LIST_MULTIPLE }; void yon_ubl_settings_window_init(GtkMenu *menu); void *yon_ubl_settings_window_get(char *id); void yon_configuration_window_add_boolean_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label); void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label, GCallback func, gpointer data, ...); char *yon_gtk_entry_check_restricted(GtkEntry *target); typedef struct { GtkWidget *window; GtkWidget *WorkZoneBox; GtkWidget *AcceptButton; GtkWidget *CancelButton; } ubl_settings_window; char *yon_settings_configuration_get(char *id); char *yon_custom_config_init(); #define VERSION_LABEL yon_char_unite(_("Version:")," ",!yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",NULL) #define HELP_LABEL(rest) yon_char_unite(template_app_information.app_tech_name,_(" version:")," ", !yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",\ template_app_information.app_title,"\n",_("Usage:"), " ",template_app_information.app_tech_name," ",_("[OPTIONS]"),"\n",\ _("Options:"),"\n",\ " --help, -h ",_("Show this help"),"\n",\ " --version, -V ",_("Show package version"),"\n",\ " --lock-help ",_("Lock this help menu"),"\n",\ " --lock-save ",_("Lock configuration saving"),"\n",\ " --lock-save-local ",_("Lock local configration saving"),"\n",\ " --lock-save-global ",_("Lock global configration saving"),"\n",\ " --lock-load-global ",_("Lock global configration loading"),"\n",\ " --clear-config, -c ",_("Reset application settings"),"\n",\ !yon_char_is_empty(rest)?rest:NULL,NULL) #define template_ui_LocalePath "/usr/share/locale" #define template_ui_LocaleName "libublsettingsui-gtk3" #define about_label(target) yon_char_unite(_("About")," ",target,NULL) #define SUCCESS_LABEL _("Operation succeeded") #define ROOT_WARNING_LABEL _("Warning! Application was launched without root - root-dependent actions are locked") #define DEFAULT_LABEL _("Default") #define DEFAULT_CUSTOM_LABEL(target) yon_char_unite(_("Default"),!yon_char_is_empty(target)?" (":NULL,target,")",NULL) #define ABOUT_LABEL _("About") #define DOCUMENTATION_LABEL _("Documentation") #define SAVE_CUSTOM_LABEL _("Save to specific file") #define SAVE_LOCAL_LABEL _("Save to local configuration") #define SAVE_GLOBAL_LABEL _("Save to global configuration") #define SAVE_CONFIGURATION_LABEL _("Save configuration") #define SAVE_LABEL _("Save") #define SAVE_PROCESS_LABEL _("Saving...") #define LOAD_CUSTOM_LABEL _("Load from specific file") #define LOAD_LOCAL_LABEL _("Load local configuration") #define LOAD_GLOBAL_LABEL _("Load global configuration") #define LOAD_LABEL _("Load") #define LOAD_CONFIG_LABEL _("Load file") #define CANCEL_LABEL _("Cancel") #define ACCEPT_LABEL _("Accept") #define OPEN_LABEL _("Open") #define CREATE_FOLDER_LABEL _("Create directory") #define SELECT_FOLDER_LABEL _("Select directory") #define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?") #define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.") #define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation") #define OPEN_HELP_LABEL _("Open documentation") #define PROJECT_HOME_LABEL _("Project Home Page") #define NOTHING_CHOSEN_LABEL _("Nothing were chosen") #define AUTHORS_LABEL _(L"Copyright © 2022 - 2023, UBSoft LLC") #define GLOBAL_LOAD_SUCCESS_LABEL _("Global configuration loading succeeded.") #define LOCAL_LOAD_SUCCESS_LABEL _("Local configuration loading succeeded.") #define LOAD_FAILED_LABEL _("Config loading failed") #define GLOBAL_LOCAL_SAVE_SUCCESS_LABEL _("Local and global configuration saving succeeded.") #define GLOBAL_SAVE_SUCCESS_LABEL _("Global configuration saving succeeded.") #define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succeeded.") #define SAVE_SUCCESS_LABEL _("Configuration saving succeeded.") #define PARAMETER_LABEL _("Parameter") #define OLD_VALUE_LABEL _("Old value") #define NEW_VALUE_LABEL _("New value") #define COMPARE_VALUE_LABEL _("Value\n(Old/New)") #define NOTHING_TO_SAVE_LABEL _("Nothing to save") #define SAVING_LOCAL_STATE_LABEL _("Saving into local configuration") #define SAVING_GLOBAL_STATE_LABEL _("Saving into global configuration") #define SAVING_GLOBAL_LOCAL_STATE_LABEL _("Saving into global and local configuration") #define SAVING_CUSTOM_STATE_LABEL(target_path) yon_char_unite(_("Saving into custom configuration at")," ",target_path,NULL) #define SYSTEMBOOT_STATEMODE "SYSTEMBOOT_STATEMODE" #define SYSTEMBOOT_STATEMODE_SECTION "[system]" #define SAVE_MODE_FULL_LABEL _("Full saving mode") #define SAVE_MODE_MODULE_LABEL _("Saving into module") #define SAVE_MODE_SANDBOX_LABEL _("Sandbox mode") #define SAVE_MODE_RAM_HOME_LABEL _("Sandbox with profile saving") #define SAVE_MODE_HDD_LABEL _("HDD sandbox") #define SAVE_MODE_HDD_HOME_LABEL _("HDD sandbox with profile saving") #define CUSTOM_CONFIG_CREATION_ERROR_LABEL _("New configuration file creation failed") #define ROOT_CHECK_LABEL _("Upgrade to root") #define SETTINGS_TITLE_LABEL _("Settings") #define CONFIG_WINDOW_MENU_LABEL _("Application settigs") #define EMAIL_INVALID_LABEL _("Invalid email adress") #define PATH_INVALID_LABEL _("Invalid path") #define CHOOSE_FILE_LABEL _("Choose path") #define FILE_CHOOSER_CHOOSE_FILDER_LABEL _("Choose directory instead of file") #endif