Added exit window when config has unsaved parameters

pull/52/head
parent 2b5e6de689
commit b73fa28557
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -376,3 +376,11 @@ msgstr ""
#: source/libublsettingsui-gtk3.h:492
msgid "service is inactive"
msgstr ""
#: source/libublsettingsui-gtk3.h:492
msgid "The changes were not saved to either the local or global configuration file. Quit without saving?"
msgstr ""
#: source/libublsettingsui-gtk3.h:492
msgid "Exit"
msgstr ""

@ -383,3 +383,11 @@ msgstr "служба активна"
#: source/libublsettingsui-gtk3.h:492
msgid "service is inactive"
msgstr "служба неактивна"
#: source/libublsettingsui-gtk3.h:492
msgid "The changes were not saved to either the local or global configuration file. Quit without saving?"
msgstr "Изменения не сохранены ни в локальный, ни в глобальный конфигурационный файл. Выйти без сохранения?"
#: source/libublsettingsui-gtk3.h:492
msgid "Exit"
msgstr "Выход"

@ -600,3 +600,28 @@ template_saving_window *yon_save_proceed(char *path,YON_CONFIG_TYPE type, ...){
on_save_window_parameter_switched(NULL,NULL,window);
return window;
}
//-------------------------
template_saving_window *yon_exit_window_new(){
template_saving_window *window = yon_saving_window_new();
yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"remove_status",UNSAVED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
gtk_button_set_label(GTK_BUTTON(window->SaveButton),EXIT_LABEL);
g_signal_handlers_disconnect_by_func(G_OBJECT(window->SaveButton), G_CALLBACK(on_save_parameters),window);
g_signal_handlers_disconnect_by_func(G_OBJECT(window->ToggleCell), G_CALLBACK(on_save_window_parameter_switched),window);
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(gtk_main_quit),NULL);
int current_size=0;
struct loaded_config *config_compare=NULL;
config_str current_config = yon_config_get_all_modified(&current_size); // get INTERNAL config
struct loaded_config *current_loaded = yon_config_convert_parameter(current_config,current_size); // convert INTERNAL config into struct
gtk_tree_view_remove_column(GTK_TREE_VIEW(window->ParametersTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->ParametersTree),0));
yon_save_window_loaded_config_init(window,current_loaded,config_compare);
yon_save_window_compared_config_init_unfound(window,current_loaded,config_compare);
if (!yon_save_window_destroy_if_empty(window))
return NULL;
return window;
}

@ -233,6 +233,15 @@ int yon_ubl_connect_config(_template_config *config){
return replaces;
}
gboolean on_window_delete (GtkWidget *, GdkEvent *,template_main_window *widgets){
template_saving_window *window = yon_exit_window_new();
if (window){
gtk_widget_show(window->Window);
return 1;
}
return 0;
}
template_main_window *setup_window(){
/* Widgets getting | Получение виджетов */
template_main_window *widgets = malloc(sizeof(template_main_window));
@ -305,6 +314,7 @@ template_main_window *setup_window(){
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),template_app_information.wiki_link);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),template_app_information.app_version);
g_signal_connect(G_OBJECT(widgets->Window),"delete-event",G_CALLBACK(on_window_delete),widgets);
if (yon_char_is_empty(__yon_config_mode)){
int size;

@ -18,28 +18,57 @@
#define _(String) gettext(String)
/**Префикс для всех икнок из библиотеки.*/
#define yon_dull_icon_path "com.ublinux.libublsettingsui-gtk3"
/**Путь до файла основного окна утилит ubl-settings-**/
#define ui_glade_path "/com/ublinux/ui/libublsettingsui-gtk3.glade"
/**Путь до файла подтверждения открытия документации утилит ubl-settings-**/
#define ui_glade_path_documentation "/com/ublinux/ui/libublsettingsui-gtk3-documentation.glade"
/**Путь до файла окна "О программе" утилит ubl-settings-**/
#define ui_glade_path_about "/com/ublinux/ui/libublsettingsui-gtk3-about.glade"
/**Путь до файла окна сохранения утилит ubl-settings-**/
#define ui_glade_path_saving "/com/ublinux/ui/libublsettingsui-gtk3-saving.glade"
/**Путь до файла окна выбора файлов утилит ubl-settings-**/
#define ui_glade_path_filechooser "/com/ublinux/ui/libublsettingsui-gtk3-filechooser.glade"
/**Путь до файла окна отладки утилит ubl-settings-**/
#define ui_glade_path_debug "/com/ublinux/ui/libublsettingsui-gtk3-debugger.glade"
/**Путь до файла окна управления юнитами утилит ubl-settings-**/
#define ui_glade_path_service "/com/ublinux/ui/libublsettingsui-gtk3-service-control.glade"
/**Путь до файла окна выбора приложений утилит ubl-settings-**/
#define ui_glade_path_app_chooser "/com/ublinux/ui/libublsettingsui-gtk3-app-chooser.glade"
/**Путь до основного баннера утилит ubl-settings-**/
#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"
/**Команда создания файла конфигурации ubconfig
* @target - путь до создаваемого файла
*/
#define ubconfig_file_create(target) yon_char_unite("ubconfig --target \"",target,"\" create",NULL)
/**Типы */
typedef enum SAVE_MODE_TYPE {
SAVE_MODE_FULL,
SAVE_MODE_MODULE,
@ -49,12 +78,27 @@ typedef enum SAVE_MODE_TYPE {
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_GET_COMMAND в SAVE_MODE_TYPE*/
SAVE_MODE_TYPE yon_ubl_save_mode_get_type(char *type);
/**Структура с информацией об утилите, использующей библиотеку.
* @interface - виджет, корень интерфейса запущенной утилиты. Добавляется в окно из библиотеки
* @app_locale - имя файла локализации откуда будет загружаться локализация утилиты
* @css_path - путь до файла css стилей утилиты
* @app_title - Название утилиты для отображения на баннере и на окнах из библиотеки
* @app_description - описание утилиты для отображения на баннере.
* @app_texh_name - техническое название утилиты (ubl-settings-*)
* @app_version - текстовая строка с версией утилиты
* @wiki_link - ссылка на страницу wiki утилиты
*/
typedef struct {
GtkWidget *interface;
@ -73,7 +117,8 @@ typedef struct {
extern template_app_info template_app_information;
/**Стандартные поля для конфигурации утилиты.
* template_config_fields ДОЛЖЕН РАСПОЛАГАТЬСЯ ПЕРВЫМ В СТРУКТУРЕ КОНФИГУРАЦИИ*/
#define template_config_fields\
int socket_id;\
int load_socket_id;\
@ -95,11 +140,13 @@ typedef struct {
template_config_fields
} _template_config;
/**Указатель на конфиг. В него попадает указатель на основной конфиг утилиты с полями @template_fields*/
extern _template_config *template_config;
[[maybe_unused]]
extern _template_config *template_config;
/**Поля структуры основного окна утилиты, настраивыемые через бибилотеку. template_window_fields ДОЛЖЕН РАСПОЛАГАТЬСЯ ПЕРВЫМ В СТРУКТУРЕ*/
#define template_window_fields\
GtkWidget *Window;\
GtkWidget *HeadLabel;\
@ -132,11 +179,12 @@ extern _template_config *template_config;
GtkWidget *InterfaceBox;\
//}
/**Структура с основным окном утилиты*/
typedef struct {
template_window_fields
} template_main_window;
/**Структура с окном подтверждения перехода к документации*/
typedef struct {
GtkWidget *Window;
GtkWidget *HeaderLabel;
@ -147,6 +195,7 @@ typedef struct {
GtkWidget *AcceptButton;
} template_documentation_confirmation_window;
/**Структура с окном режима отладки*/
typedef struct {
GtkWidget *Window;
GtkWidget *HeaderTopic;
@ -155,6 +204,12 @@ typedef struct {
GtkWidget *Vte;
} template_debug_window;
/**Структура для диалогового окна подтверждения.
* @void (*function)(void*,void*) - указатель на функцию выполняюзуюся в случае нажатия на кнопку "Принять". Первый параметр - Указатель на окно или виджета, расположенного в этом окне
* @data - параметр, передающийся в функцию
* @action_text - отображаемый в диалоговом окне текст действия, требующего подтверждения
* @title - текст в шапке диалогового окна
*/
typedef struct {
void (*function)(void*,void*);
void *data;
@ -162,6 +217,14 @@ typedef struct {
char *title;
} dialog_confirmation_data;
/**Структура для окна выбора файлов.
* @Window - виджет окна
* @StatusBox - виджет для показа статусных сообщений, пустой GtkBox с вертикальной ориентацией
* @HeaderTopic - виджет текста в шапке окна
* @MainFileChooser - виджет выбора файлов.
* @SaveButton - Кнопка принятия выбора. Закрывает окно и устанавливает responce равным GTK_RESPONCE_ACCEPT если был выбран файл
* @CancelButton - кнопка отмены. Закрывает окно и
*/
typedef struct {
GtkWidget *Window;
GtkWidget *StatusBox;
@ -312,6 +375,7 @@ 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, ...);
template_saving_window *yon_exit_window_new();
char *yon_gtk_entry_check_restricted(GtkEntry *target);
@ -511,4 +575,6 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise);
#define _SERVICE_ACTIVE_STATUS_LABEL(target) yon_char_unite("\"",target,"\" ", yon_char_get_localised_from_lib(_("service is active")),NULL)
#define _SERVICE_INACTIVE_STATUS_LABEL(target) yon_char_unite("\"",target,"\" ",yon_char_get_localised_from_lib(_("service is inactive")),NULL)
#define UNSAVED_LABEL yon_char_get_localised_from_lib("The changes were not saved to either the local or global configuration file. Quit without saving?")
#define EXIT_LABEL yon_char_get_localised_from_lib("Exit")
#endif
Loading…
Cancel
Save