diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 3f85da3..844901d 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1854,6 +1854,62 @@ void on_main_delete(GtkWidget *, main_window *widgets){ } } +void on_user_info_print(GtkWidget *,yon_user_info_window *window){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SAVE); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window),SAVE_USER_INFO_LABEL,icon_path,"filechooser_window"); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.pdf"); + gtk_file_filter_set_name(filter,"PDF"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){ + char *path = dialog->last_success_selection; + char *command = user_info_pdf_command(window->target_user,path); + yon_launch(command); + free(command); + free(dialog); + } +} + +void on_user_info_save(GtkWidget *,yon_user_info_window *window){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SAVE); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window),SAVE_USER_INFO_LABEL,icon_path,"filechooser_window"); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.txt"); + gtk_file_filter_set_name(filter,"TXT"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){ + char *path = dialog->last_success_selection; + char *command = user_info_txt_command(window->target_user,path); + yon_launch(command); + free(command); + free(dialog); + } +} + +yon_user_info_window *yon_user_info_window_new(){ + yon_user_info_window *window = new(yon_user_info_window); + GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_debug); + window->Window = yon_gtk_builder_get_widget(builder,"Window"); + window->Terminal = yon_gtk_builder_get_widget(builder,"DebuggerTerminal"); + window->HeaderImage = yon_gtk_builder_get_widget(builder,"HeaderImage"); + window->PrintButton = gtk_button_new_from_icon_name(icon_path_print,GTK_ICON_SIZE_BUTTON); + window->SaveButton = gtk_button_new_from_icon_name(icon_path_save,GTK_ICON_SIZE_BUTTON); + window->target_user = NULL; + + g_signal_connect(G_OBJECT(window->PrintButton),"clicked",G_CALLBACK(on_user_info_print),window); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_user_info_save),window); + + gtk_image_set_from_icon_name(GTK_IMAGE(window->HeaderImage),icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_set_tooltip_markup(window->PrintButton,PRINT_TOOLTIP_LABEL); + gtk_widget_set_tooltip_markup(window->SaveButton,SAVE_LABEL); + GtkWidget *titlebar = gtk_window_get_titlebar(GTK_WINDOW(window->Window)); + gtk_header_bar_pack_end(GTK_HEADER_BAR(titlebar),window->SaveButton); + gtk_header_bar_pack_end(GTK_HEADER_BAR(titlebar),window->PrintButton); + gtk_widget_show(window->PrintButton); + gtk_widget_show(window->SaveButton); + return window; +} + void on_user_info(GtkWidget *,main_window *widgets){ int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); char *target_user = NULL; @@ -1877,7 +1933,12 @@ void on_user_info(GtkWidget *,main_window *widgets){ } gtk_tree_model_get(model,&iter,2,&target_user,-1); char *command = user_info_command(target_user); - yon_terminal_window_launch(GTK_WINDOW(widgets->Window),command,yon_char_get_localised_from_lib(SUCCESS_LABEL),yon_char_get_localised_from_lib(FAIL_LABEL)); + // yon_terminal_window_launch(GTK_WINDOW(widgets->Window),command,yon_char_get_localised_from_lib(SUCCESS_LABEL),yon_char_get_localised_from_lib(FAIL_LABEL)); + yon_user_info_window *window = yon_user_info_window_new(); + window->target_user = target_user; + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),USER_INFO_LABEL,icon_path,"user_info_window"); + yon_terminal_integrated_start(window->Terminal,command); + gtk_widget_show(window->Window); } void on_config_update(GtkWidget *, main_window *widgets){ diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 16ba897..ca93c78 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -39,6 +39,9 @@ #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define icon_path "com.ublinux.ubl-settings-usergroups" #define sync_parameters_path "resource:///com/ublinux/csv/sync_parameters.csv" + +#define icon_path_print "com.ublinux.libublsettingsui-gtk3.print-symbolic" +#define icon_path_save "com.ublinux.libublsettingsui-gtk3.save-symbolic" #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-usergroups" @@ -99,6 +102,8 @@ #define password_hash_get_command(passwd) yon_char_append("mkpasswd2 ",passwd) #define user_info_command(target) yon_char_append("echo ",target) +#define user_info_pdf_command(target,path) yon_char_unite("echo ",target,path,NULL) +#define user_info_txt_command(target,path) yon_char_unite("echo ",target,path,NULL) #define config_get_command(source) yon_char_unite("ubconfig --source ",source," get users DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC",NULL),yon_char_unite("ubconfig --source ",source," get [system] SYSTEMBOOT_STATEMODE",NULL),yon_char_unite("ubconfig --source ",source," get [save] SAVE_ROOTCOPY_CHANGES",NULL) #define config_get_default_command "ubconfig --source default get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM" @@ -360,6 +365,16 @@ typedef struct{ GtkWidget *NoEncriptionCheck; } ubl_settings_usergroups_password_window; +typedef struct { + GtkWidget *Window; + GtkWidget *Terminal; + GtkWidget *HeaderImage; + GtkWidget *PrintButton; + GtkWidget *SaveButton; + + char *target_user; +} yon_user_info_window; + typedef struct{ GtkListStore *liststore1; GtkListStore *liststore2; @@ -599,4 +614,7 @@ void *yon_passwords_encrypt(dictionary *dict); gboolean on_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets); void on_filter_changed(GtkWidget *self, main_window *widgets); void on_user_info(GtkWidget *,main_window *widgets); +yon_user_info_window *yon_user_info_window_new(); +void on_user_info_save(GtkWidget *,yon_user_info_window *window); +void on_user_info_print(GtkWidget *,yon_user_info_window *window); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 6a4c463..58b7ca2 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -28,6 +28,9 @@ #define EXTRA_OPTIONS_USER_LABEL _("Extra options:") #define CANCEL_LABEL _("Cancel") #define OK_LABEL _("Ok") +#define PRINT_TOOLTIP_LABEL _("Print") +#define USER_INFO_LABEL _("User information") +#define SAVE_USER_INFO_LABEL _("Save user information") #define BLOCK_LABEL _("Block") #define MAIN_GROUP_LABEL _("Main\ngroup") diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index 0d88248..3af9b16 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -1,5 +1,5 @@ -