master #164

Merged
asmeron merged 30 commits from YanTheKaller/ubl-settings-datetime:master into master 1 year ago

@ -7,20 +7,25 @@ config main_config;
int yon_char_parsed_compare(const void *a, const void *b){
const config_str str_a = (const config_str)a;
const config_str str_b = (const config_str)b;
// if (strstr(*str_a,"+")&&strstr(*str_b,"-")) return 1;
// else if (strstr(*str_a,"-")&&strstr(*str_b,"+")) return -1;
// if (strstr(*str_a,"-")&&strstr(*str_b,"-")) return strcmp(*str_b,*str_a);
if ((strstr(*str_a,"-")||strstr(*str_a,"+"))&&(strstr(*str_b,"-")||strstr(*str_b,"+"))){
int a = atoi(*str_a+3);
int b = atoi(*str_b+3);
if ((strstr(_(*str_a),"-")||strstr(_(*str_a),"+"))&&(strstr(_(*str_b),"-")||strstr(_(*str_b),"+"))){
int a = atoi(_(*str_a)+3);
int b = atoi(_(*str_b)+3);
if (a>b) return 1;
else if (b>a) return -1;
else return 0;
}
return strcmp(*str_a, *str_b);
return strcoll(_(*str_a), _(*str_b));
}
config_str yon_char_parsed_localize(config_str parsed, int size){
config_str new_parsed = yon_char_parsed_copy(parsed,size);
for (int i=0;i<size;i++){
char *temp = yon_char_new(_(new_parsed[i]));
free(new_parsed[i]);
new_parsed[i]=temp;
}
return new_parsed;
}
config_str yon_char_parsed_sort(config_str parsed, int size){
@ -30,94 +35,105 @@ config_str yon_char_parsed_sort(config_str parsed, int size){
}
//Config functions
void yon_save_parameters(main_window *widgets){
int mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->DHCPCombo));
switch(mode){
case 0:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"default");
break;
case 1:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"stop");
break;
case 2:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"dhcp");
break;
case 3:
char *value = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->NTPEntry));
if (yon_char_is_empty(value)) {
yon_ubl_status_box_render(EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(widgets->NTPEntry);
return;
}
yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,value);
break;
}
const char *region = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo));
const char *zone = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo));
void yon_save_parameters(GtkWidget *self, main_window *widgets){
if (self == widgets->DHCPCombo||self == widgets->NTPEntry){
int mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->DHCPCombo));
switch(mode){
case 0:yon_config_remove_by_key(NTPSERVERS_parameter);
break;
case 1:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"dhcp");
break;
case 2:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"default");
break;
case 3:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"ntp-ru");
break;
case 5:yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,"stop");
break;
case 4:
char *value = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->NTPEntry));
if (yon_char_is_empty(value)&&self == widgets->NTPEntry) {
yon_ubl_status_box_render(EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(widgets->NTPEntry);
return;
}
yon_config_register(NTPSERVERS_parameter,NTPSERVERS_parameter_command,value);
break;
}
} else if (self == widgets->TimeSyncTypeCombo){
int hwclock_sync = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->TimeSyncTypeCombo));
if (hwclock_sync==1){
yon_config_register(HWCLOCK_SYNC_parameter,HWCLOCK_SYNC_parameter_command,"localtime");
} else if (hwclock_sync == 2) {
yon_config_register(HWCLOCK_SYNC_parameter,HWCLOCK_SYNC_parameter_command,"utc");
} else {
yon_config_remove_by_key(HWCLOCK_SYNC_parameter);
}
if (!yon_char_is_empty(region)&&!yon_char_is_empty(zone)){
char *zone_parameter = yon_char_unite((char*)region,"/",(char*)zone,NULL);
yon_config_register(ZONE_parameter,ZONE_parameter_command,zone_parameter);
free(zone_parameter);
}
} else if (self == widgets->RegionCombo||self == widgets->ZoneCombo){
const char *region = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo));
const char *zone = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo));
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->TimeSyncTypeCombo))==0){
yon_config_register(HWCLOCK_SYNC_parameter,HWCLOCK_SYNC_parameter_command,"localtime");
} else {
yon_config_register(HWCLOCK_SYNC_parameter,HWCLOCK_SYNC_parameter_command,"utc");
}
if (!yon_char_is_empty(region)&&!yon_char_is_empty(zone)){
char *zone_parameter = yon_char_unite((char*)region,"/",(char*)zone,NULL);
yon_config_register(ZONE_parameter,ZONE_parameter_command,zone_parameter);
}
}
}
void on_config_save(GtkWidget *, main_window *widgets){
void on_config_save(GtkWidget *){
main_config.save_config=2;
yon_save_parameters(widgets);
yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL);
}
void on_config_save_global(GtkWidget *, main_window *widgets){
void on_config_save_global(GtkWidget *){
main_config.save_config=0;
yon_save_parameters(widgets);
yon_save_proceed(NULL,YON_CONFIG_GLOBAL,config_get_global_command,NULL);
}
void on_config_save_local(GtkWidget *, main_window *widgets){
void on_config_save_local(GtkWidget *){
main_config.save_config=1;
yon_save_parameters(widgets);
yon_save_proceed(NULL,YON_CONFIG_LOCAL,config_get_global_command,NULL);
yon_save_proceed(NULL,YON_CONFIG_LOCAL,config_get_local_command,NULL);
}
void on_config_save_custom(GtkWidget *, main_window *widgets){
void on_config_save_custom(GtkWidget *){
main_config.save_config=3;
yon_save_parameters(widgets);
yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_global_command,NULL);
}
void on_config_load_global(){
void on_config_load_global(GtkWidget *,main_window *widgets){
main_config.load_mode=1;
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
yon_load_proceed(YON_CONFIG_GLOBAL);
yon_interface_update(widgets);
}
void on_config_load_local(){
void on_config_load_local(GtkWidget *,main_window *widgets){
main_config.load_mode=0;
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
yon_load_proceed(YON_CONFIG_LOCAL);
yon_interface_update(widgets);
}
void on_config_load_custom(){
void on_config_load_custom(GtkWidget *,main_window *widgets){
main_config.load_mode=2;
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
yon_load_proceed(YON_CONFIG_CUSTOM);
yon_interface_update(widgets);
}
void yon_load_proceed(YON_CONFIG_TYPE type){
yon_config_clean();
if (type!=YON_CONFIG_CUSTOM){
yon_config_clean();
}
if (!yon_char_is_empty(config_get_default_command))
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
if (type==YON_CONFIG_GLOBAL){
@ -142,12 +158,13 @@ void yon_load_proceed(YON_CONFIG_TYPE type){
if (!yon_char_is_empty(file)){
path=file;
}
yon_config_clean();
char *command = yon_config_get_custom_command(path);
yon_config_load_config(type,command,NULL);
gtk_widget_destroy(dialog);
} else {
gtk_widget_destroy(dialog);
}
char *command = yon_config_get_custom_command(path);
yon_config_load_config(type,command,NULL);
}
}
@ -168,8 +185,10 @@ void on_save_done(main_window *widgets, config_str output, int size){
yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
break;
case 2:
case 3:
yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
break;
case 3:
yon_ubl_status_box_render(SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
break;
}
textdomain(LocaleName);
@ -177,48 +196,63 @@ void on_save_done(main_window *widgets, config_str output, int size){
}
void yon_interface_update(main_window *widgets){
char *ntp = config(NTPSERVERS_parameter);
g_signal_handlers_block_by_func(G_OBJECT(widgets->NTPEntry),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->DHCPCombo),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->TimeSyncTypeCombo),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->RegionCombo),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->ZoneCombo),G_CALLBACK(yon_save_parameters),widgets);
char *zone = config(ZONE_parameter);
zone = yon_char_new(zone);
if (!yon_char_is_empty(zone)&&strstr(zone,"/")){
char *region = yon_char_divide_search(zone,"/",-1);
g_signal_handlers_block_by_func(G_OBJECT(widgets->RegionCombo),on_region_changed,widgets);
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->RegionCombo),region);
while (gtk_events_pending()) gtk_main_iteration();
on_region_changed(GTK_COMBO_BOX(widgets->RegionCombo),widgets);
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->ZoneCombo),zone);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->RegionCombo),on_region_changed,widgets);
free(zone);
free(region);
}
char *ntp = config(NTPSERVERS_parameter);
if (!yon_char_is_empty(ntp)){
if (!strcmp(ntp,"stop")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),1);
gtk_widget_set_sensitive(widgets->NTPEntry,0);
if (!strcmp(ntp,"dhcp")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),1);
} else if (!strcmp(ntp,"default")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),0);
gtk_widget_set_sensitive(widgets->NTPEntry,0);
} else if (!strcmp(ntp,"dhcp")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),2);
gtk_widget_set_sensitive(widgets->NTPEntry,0);
} else {
} else if (!strcmp(ntp,"ntp-ru")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),3);
} else if (!strcmp(ntp,"stop")||!strcmp(ntp,"no")||!strcmp(ntp,"disable")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),5);
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),4);
gtk_widget_set_sensitive(widgets->NTPEntry,1);
gtk_entry_set_text(GTK_ENTRY(widgets->NTPEntry),ntp);
}
} else {
gtk_widget_set_sensitive(widgets->NTPEntry,0);
gtk_entry_set_text(GTK_ENTRY(widgets->NTPEntry),"");
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->DHCPCombo),0);
}
char *hwclock_sync = config(HWCLOCK_SYNC_parameter);
if (!yon_char_is_empty(hwclock_sync)){
if (!strcmp(hwclock_sync,"utc")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TimeSyncTypeCombo),2);
} else if (!strcmp(hwclock_sync,"localtime")){
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TimeSyncTypeCombo),1);
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TimeSyncTypeCombo),0);
}
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TimeSyncTypeCombo),0);
}
GDateTime *datetime = g_date_time_new_now_local();
char *time = g_date_time_format(datetime,"%H %M");
char *date = g_date_time_format(datetime,"%Y.%m.%d");
gtk_calendar_select_month(GTK_CALENDAR(widgets->DateCalendar),g_date_time_get_month(datetime),g_date_time_get_year(datetime));
char *date = g_date_time_format(datetime,yon_settings_configuration_get(date_format_parameter));
gtk_calendar_select_month(GTK_CALENDAR(widgets->DateCalendar),g_date_time_get_month(datetime)-1,g_date_time_get_year(datetime));
gtk_calendar_select_day(GTK_CALENDAR(widgets->DateCalendar),g_date_time_get_day_of_month(datetime));
if (!yon_char_is_empty(time)){
@ -239,6 +273,12 @@ void yon_interface_update(main_window *widgets){
} else {
gtk_entry_set_text(GTK_ENTRY(widgets->DateEntry),"");
}
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NTPEntry),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->DHCPCombo),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TimeSyncTypeCombo),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->RegionCombo),G_CALLBACK(yon_save_parameters),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ZoneCombo),G_CALLBACK(yon_save_parameters),widgets);
}
void on_date_clicked(GtkWidget *,main_window *widgets){
@ -255,6 +295,11 @@ void on_region_changed(GtkComboBox *self, main_window *widgets){
config_str parsed_sorted = yon_char_parsed_sort(parsed,size);
yon_char_parsed_free(parsed,size);
for (int i=0;i<size;i++){
if (strstr(parsed_sorted[i],"GMT")){
char *temp = yon_char_unite("UTC",parsed_sorted[i]+3," (",parsed_sorted[i],")",NULL);
free(parsed_sorted[i]);
parsed_sorted[i]=temp;
}
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo),parsed_sorted[i],_(parsed_sorted[i]));
}
if (size) yon_char_parsed_free(parsed_sorted,size);
@ -268,10 +313,34 @@ struct datetime_arg {
const char *date;
};
void *on_sync_error(void*){
gboolean on_sync_error(void*){
yon_ubl_status_box_render(SYNC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
g_thread_exit(NULL);
return NULL;
return G_SOURCE_REMOVE;
}
void yon_date_tooltip_update(main_window *widgets){
char *format = yon_settings_configuration_get(date_format_parameter);
char *temp = yon_char_replace(format,"%Y",YEAR_FORMAT_LABEL);
char *month_temp = yon_char_replace(temp,"%m",MONTH_FORMAT_LABEL);
char *day_temp = yon_char_replace(month_temp,"%d",DAY_FORMAT_LABEL);
char *tooltip = yon_char_unite(DATE_DORMAT_TOOLTIP_LABEL,": ",day_temp,NULL);
gtk_widget_set_tooltip_text(widgets->DateEntry,tooltip);
free(tooltip);
free(temp);
free(month_temp);
free(day_temp);
}
void on_date_format_changed(GtkWidget *, main_window *widgets){
yon_interface_update(widgets);
yon_date_tooltip_update(widgets);
}
gboolean on_operation_success(void*){
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
return G_SOURCE_REMOVE;
}
void *yon_sync_thread_start(void *arg){
@ -282,8 +351,10 @@ void *yon_sync_thread_start(void *arg){
free(command_time);
free(command_date);
if (system(yon_debug_output("%s\n",command))){
g_thread_new("status_thread",(GThreadFunc)on_sync_error,NULL);
};
gdk_threads_add_idle((GSourceFunc)on_sync_error,NULL);
} else {
gdk_threads_add_idle((GSourceFunc)on_operation_success,NULL);
}
pthread_exit(NULL);
}
@ -301,7 +372,23 @@ void on_sync_clicked(GtkWidget *, main_window *widgets){
data->time=time;
if (!yon_char_is_empty(date)){
int size;
config_str parsed = yon_char_parse((char*)date,&size,".");
char *format = yon_settings_configuration_get(date_format_parameter);
config_str parsed = yon_char_parse((char*)date,&size,!strcmp(format,"%d.%m.%Y")?".":!strcmp(format,"%d/%m/%Y")?"/":"-");
if (!strcmp(format,"%m-%d-%Y")){
char *year = parsed[2];
char *month = parsed[0];
char *day = parsed[1];
parsed[0]=year;
parsed[1]=month;
parsed[2]=day;
} else {
char *year = parsed[2];
char *month = parsed[1];
char *day = parsed[0];
parsed[0]=year;
parsed[1]=month;
parsed[2]=day;
}
data->date=yon_char_parsed_to_string(parsed,size,"");
yon_char_parsed_free(parsed,size);
}
@ -318,22 +405,20 @@ void on_sync_clicked(GtkWidget *, main_window *widgets){
void on_ntp_sync(GtkWidget *, main_window *widgets){
int mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->DHCPCombo));
gtk_widget_set_sensitive(widgets->NTPEntry,0);
switch(mode){
case 0:
gtk_widget_set_sensitive(widgets->NTPEntry,0);
if (main_config.ntp_default){
gtk_entry_set_text(GTK_ENTRY(widgets->NTPEntry),main_config.ntp_default);
}
break;
case 1:
gtk_widget_set_sensitive(widgets->NTPEntry,0);
gtk_entry_set_text(GTK_ENTRY(widgets->NTPEntry),"");
break;
case 2:
gtk_widget_set_sensitive(widgets->NTPEntry,0);
case 3:
case 5:
gtk_entry_set_text(GTK_ENTRY(widgets->NTPEntry),"");
break;
case 3:
case 4:
gtk_widget_set_sensitive(widgets->NTPEntry,1);
gtk_entry_set_text(GTK_ENTRY(widgets->NTPEntry),"");
break;
@ -342,7 +427,7 @@ void on_ntp_sync(GtkWidget *, main_window *widgets){
void *yon_sync_hardware_thread_start(void*){
if (system(hardware_datetime_sync_command)){
g_thread_new("status_thread",(GThreadFunc)on_sync_error,NULL);
gdk_threads_add_idle((GSourceFunc)on_sync_error,NULL);
}
pthread_exit(NULL);
}
@ -359,10 +444,8 @@ void on_sync_hardware_clicked(){
void on_date_accept(GtkWidget *,main_window *widgets){
guint year=0, month=0, day=0;
gtk_calendar_get_date(GTK_CALENDAR(widgets->DateCalendar),&year,&month,&day);
char *ye_str = yon_char_from_int(year);
char *mo_str = yon_char_from_int(++month);
char *da_str = yon_char_from_int(day);
char *date = yon_char_unite(ye_str,".",month<10?"0":"",mo_str,".",day<10?"0":"",da_str,NULL);
GDateTime *datetime = g_date_time_new_local(year,++month,day,0,0,0);
char *date = g_date_time_format(datetime,yon_settings_configuration_get(date_format_parameter));
gtk_entry_set_text(GTK_ENTRY(widgets->DateEntry),date);
gtk_popover_popdown(GTK_POPOVER(widgets->DatePopover));
free(date);
@ -391,7 +474,7 @@ void config_init(){
main_config.load_mode=1;
main_config.ntp_default = NULL;
char *ntp_command = yon_config_parameter_prepare_command(NTPSERVERS_parameter_command,"default",NULL,NULL);
char *ntp_command = yon_config_parameter_prepare_command(NTPSERVERS_parameter_raw_command,"default",NULL,NULL);
int size;
config_str parsed = yon_config_load(ntp_command,&size);
if (size>0){
@ -408,8 +491,10 @@ void config_init(){
* [RU]
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
void yon_main_window_complete(main_window **window){
main_window *widgets = yon_remalloc(*window,sizeof(main_window));
(*window) = widgets;
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0);
@ -452,17 +537,26 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->DateButton),"clicked",G_CALLBACK(on_date_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->DateCancelButton),"clicked",G_CALLBACK(on_date_cancel),widgets);
g_signal_connect(G_OBJECT(widgets->DateAcceptButton),"clicked",G_CALLBACK(on_date_accept),widgets);
g_signal_connect(G_OBJECT(widgets->DHCPCombo),"changed",G_CALLBACK(yon_save_parameters),widgets);
g_signal_connect(G_OBJECT(widgets->NTPEntry),"changed",G_CALLBACK(yon_save_parameters),widgets);
g_signal_connect(G_OBJECT(widgets->TimeSyncTypeCombo),"changed",G_CALLBACK(yon_save_parameters),widgets);
g_signal_connect(G_OBJECT(widgets->RegionCombo),"changed",G_CALLBACK(yon_save_parameters),widgets);
g_signal_connect(G_OBJECT(widgets->ZoneCombo),"changed",G_CALLBACK(yon_save_parameters),widgets);
}
// Initial data loading
{
gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->DHCPCombo),yon_get_default_label_with_parameter("network",NTPSERVERS_parameter));
gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->TimeSyncTypeCombo),yon_get_default_label_with_parameter("clock",HWCLOCK_SYNC_parameter));
int size;
config_str parsed = yon_dir_get_contents(zone_path,&size);
config_str sorted = yon_char_parsed_sort(parsed,size);
config_str localized = yon_char_parsed_localize(sorted,size);
for (int i=0;i<size;i++){
if (!strstr(parsed[i],".")&&strcmp(parsed[i],"posix")&&strcmp(parsed[i],"right")){
char *path = yon_char_append(zone_path,parsed[i]);
if (!strstr(sorted[i],".")&&strcmp(sorted[i],"posix")&&strcmp(sorted[i],"right")){
char *path = yon_char_append(zone_path,sorted[i]);
if (yon_file_is_directory(path)){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->RegionCombo),parsed[i],_(parsed[i]));
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->RegionCombo),sorted[i],(localized[i]));
}
free(path);
}
@ -470,13 +564,43 @@ void yon_main_window_complete(main_window *widgets){
if (size) yon_char_parsed_free(parsed,size);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->RegionCombo),0);
}
gtk_window_resize(GTK_WINDOW(widgets->Window),100,150);
while(gtk_events_pending()) gtk_main_iteration();
yon_window_config_setup(GTK_WINDOW(widgets->Window));
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path);
yon_ubl_settings_window_init(GTK_MENU(gtk_widget_get_parent(widgets->DocumentationMenuItem)));
GList *menu_items = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(widgets->DocumentationMenuItem)));
for (guint i=0;i<g_list_length(menu_items);i++){
if (i==0){
gtk_style_context_remove_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitembottom");
gtk_style_context_remove_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitemmiddle");
gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitemtop");
} else if (i==g_list_length(menu_items)-1){
gtk_style_context_remove_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitemmiddle");
gtk_style_context_remove_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitemtop");
gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitembottom");
} else {
gtk_style_context_remove_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitembottom");
gtk_style_context_remove_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitemtop");
gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(menu_items,i)),"menuitemmiddle");
}
}
g_list_free(menu_items);
yon_configuration_window_add_combo_box_parameter(CONFIGURATION_PARAMETER_BOOL,date_format_parameter,DATE_FORMAT_SETTINGS_LABEL,G_CALLBACK(on_date_format_changed),widgets,"%d.%m.%Y",DMY_FORMAT_LABEL,"%d-%m-%Y",DMY_MINUS_FORMAT_LABEL,"%d/%m/%Y",DMY_SLASH_FORMAT_LABEL,"%m-%d-%Y",MDY_FORMAT_LABEL,NULL);
yon_load_proceed(YON_CONFIG_LOCAL);
yon_interface_update(widgets);
yon_save_window_set_postsave_function(on_save_done,widgets);
yon_date_tooltip_update(widgets);
}
int main(int argc, char *argv[]){
setlocale(LC_COLLATE, "ru_RU.UTF-8");
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
@ -488,9 +612,7 @@ int main(int argc, char *argv[]){
yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL);
gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path);
yon_main_window_complete((main_window**)&widgets);
if (getuid()!=0){
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);

@ -32,25 +32,28 @@
#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get clock HWCLOCK_SYNC ZONE","; ", "ubconfig --source ",target," get et network NTPSERVERS",NULL)
#define config_get_local_command "ubconfig --source system get clock HWCLOCK_SYNC ZONE", "ubconfig --source system get network NTPSERVERS"
#define config_get_global_command "ubconfig --source global get clock HWCLOCK_SYNC ZONE", "ubconfig --source global get network NTPSERVERS"
#define config_get_default_command "ubconfig --source default get clock ZONE HWCLOCK_SYNC"
#define config_get_default_command ""
#define config_get_global_only_parameters ""
#define config_get_local_only_parameters ""
#define NTPSERVERS_parameter "NTPSERVERS"
#define NTPSERVERS_parameter_command "ubconfig --source global get network NTPSERVERS"
#define NTPSERVERS_parameter_raw_command "ubconfig --source global --raw get network NTPSERVERS"
#define HWCLOCK_SYNC_parameter "HWCLOCK_SYNC"
#define HWCLOCK_SYNC_parameter_command "ubconfig --source global get clock HWCLOCK_SYNC"
#define ZONE_parameter "ZONE"
#define ZONE_parameter_command "ubconfig --source global get clock ZONE"
#define time_sync_command(time) yon_char_unite("pkexec date +%H:%M:%S -s \"",time,"\"",NULL)
#define date_sync_command(date) yon_char_unite("pkexec date +%Y%m%d -s \"",date,"\"",NULL)
#define date_sync_command(date) yon_char_unite("pkexec date -s \"",date,"\"",NULL)
#define hardware_datetime_sync_command "hwclock --systohc"
#define zone_path "/usr/share/zoneinfo/"
#define date_format_parameter "DateFormat"
typedef char* string;
string version_application;
@ -100,13 +103,13 @@ void yon_load_proceed(YON_CONFIG_TYPE type);
void config_init();
void yon_main_window_complete(main_window *widgets);
void yon_main_window_complete(main_window **widgets);
void on_region_changed(GtkComboBox *self, main_window *widgets);
void yon_interface_update(main_window *widgets);
void *on_sync_error(void*);
gboolean on_sync_error(void*);
void *yon_sync_hardware_thread_start(void*);
void *yon_sync_thread_start(void*);
@ -116,15 +119,15 @@ void on_sync_clicked(GtkWidget *, main_window *widgets);
void on_ntp_sync(GtkWidget *, main_window *widgets);
void yon_save_parameters(main_window *widgets);
void yon_save_parameters(GtkWidget *self,main_window *widgets);
void on_config_save(GtkWidget *, main_window *widgets);
void on_config_save(GtkWidget *);
void on_config_save_global(GtkWidget *, main_window *widgets);
void on_config_save_global(GtkWidget *);
void on_config_save_local(GtkWidget *, main_window *widgets);
void on_config_save_local(GtkWidget *);
void on_config_save_custom(GtkWidget *, main_window *widgets);
void on_config_save_custom(GtkWidget *);
void on_config_load_global();
@ -140,7 +143,12 @@ void on_date_accept(GtkWidget *,main_window *widgets);
void on_date_cancel(GtkWidget *, main_window *widgets);
config_str yon_char_parsed_localize(config_str parsed, int size);
config_str yon_char_parsed_sort(config_str parsed, int size);
int yon_char_parsed_compare(const void *a, const void *b);
void on_save_done(main_window *widgets, config_str output, int size);
void on_save_done(main_window *widgets, config_str output, int size);
void on_date_format_changed(GtkWidget *, main_window *widgets);
void yon_date_tooltip_update(main_window *widgets);
gboolean on_operation_success(void*);

@ -16,9 +16,22 @@
#define SYNC_NTP_LABEL _("Synchronize via NTP")
#define DEFAULT_LABEL _("Default")
#define STOPPED_LABEL _("Stopped")
#define NTP_LABEL _("NTP-servers")
#define NTO_RU_LABEL _("NTP-servers (RU)")
#define MANUAL_LABEL _("Manual")
#define MANUAL_TOOLTIP_LABEL _("Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces.")
#define TIME_ZONE_LABEL _("Time Zone")
#define REGION_LABEL _("Region:")
#define ZONE_LABEL _("Zone:")
#define LOCAL_TIME_LABEL _("Local time")
#define LOCAL_TIME_LABEL _("Local time")
#define DATE_FORMAT_SETTINGS_LABEL _("Date format:")
#define DATE_DORMAT_TOOLTIP_LABEL _("Date\nformat")
#define YEAR_FORMAT_LABEL _("YYYY")
#define MONTH_FORMAT_LABEL _("MM")
#define DAY_FORMAT_LABEL _("DD")
#define DMY_FORMAT_LABEL _("DD.MM.YYYY")
#define DMY_MINUS_FORMAT_LABEL _("DD-MM-YYYY")
#define DMY_SLASH_FORMAT_LABEL _("DD/MM/YYYY")
#define MDY_FORMAT_LABEL _("MM-DD-YYYY")

@ -143,8 +143,8 @@
<property name="width-request">-1</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes" context="Date of&#10;Format: DD.MM.YYYY" comments="Date of&#10;Format: DD.MM.YYYY">Date
Format: DD.MM.YYYY</property>
<property name="tooltip-text" translatable="yes">Date
format</property>
</object>
<packing>
<property name="expand">True</property>
@ -272,10 +272,11 @@ Format: DD.MM.YYYY</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">Stopped</item>
<item translatable="yes">DHCP</item>
<item translatable="yes">NTP-servers</item>
<item translatable="yes">NTP-servers (RU)</item>
<item translatable="yes">Manual</item>
<item translatable="yes">Stopped</item>
</items>
</object>
<packing>

@ -29,6 +29,46 @@ msgstr ""
msgid "Syncronisation error"
msgstr ""
#: source/ubl-strings.h:6
msgid "Important field is empty"
msgstr ""
#: source/ubl-strings.h:6
msgid "Date format:"
msgstr ""
#: source/ubl-strings.h:6
msgid "Date\nformat"
msgstr ""
#: source/ubl-strings.h:29
msgid "YYYY"
msgstr ""
#: source/ubl-strings.h:30
msgid "MM"
msgstr ""
#: source/ubl-strings.h:31
msgid "DD"
msgstr ""
#: source/ubl-strings.h:31
msgid "DD.MM.YYYY"
msgstr ""
#: source/ubl-strings.h:31
msgid "DD-MM-YYYY"
msgstr ""
#: source/ubl-strings.h:31
msgid "DD/MM/YYYY"
msgstr ""
#: source/ubl-strings.h:31
msgid "MM-DD-YYYY"
msgstr ""
#: source/ubl-strings.h:7
msgid "Accept"
msgstr ""
@ -73,6 +113,14 @@ msgstr ""
msgid "Manual"
msgstr ""
#: source/ubl-strings.h:17
msgid "NTP-servers"
msgstr ""
#: source/ubl-strings.h:17
msgid "NTP-servers (RU)"
msgstr ""
#: source/ubl-strings.h:18
msgid ""
"Enter the name of the ntp server or its ip address. When entering multiple "

@ -29,6 +29,46 @@ msgstr "Настройка даты и времени системы"
msgid "Syncronisation error"
msgstr "Ошибка синхронизации аппаратных часов"
#: source/ubl-strings.h:6
msgid "Important field is empty"
msgstr "Пустое важное поле"
#: source/ubl-strings.h:6
msgid "Date format:"
msgstr "Формат даты:"
#: source/ubl-strings.h:6
msgid "Date\nformat"
msgstr "Дата\nформат"
#: source/ubl-strings.h:29
msgid "YYYY"
msgstr "ГГГГ"
#: source/ubl-strings.h:30
msgid "MM"
msgstr "ММ"
#: source/ubl-strings.h:31
msgid "DD"
msgstr "ДД"
#: source/ubl-strings.h:32
msgid "DD.MM.YYYY"
msgstr "ДД.ММ.ГГГГ"
#: source/ubl-strings.h:33
msgid "DD-MM-YYYY"
msgstr "ДД-ММ-ГГГГ"
#: source/ubl-strings.h:34
msgid "DD/MM/YYYY"
msgstr "ДД/ММ/ГГГГ"
#: source/ubl-strings.h:35
msgid "MM-DD-YYYY"
msgstr "ММ-ДД-ГГГГ"
#: source/ubl-strings.h:7
msgid "Accept"
msgstr "Принять"
@ -77,6 +117,14 @@ msgstr "Остановлен"
msgid "Manual"
msgstr "Вручную"
#: source/ubl-strings.h:17
msgid "NTP-servers"
msgstr "NTP-серверы"
#: source/ubl-strings.h:17
msgid "NTP-servers (RU)"
msgstr "NTP-серверы (RU)"
#: source/ubl-strings.h:18
msgid ""
"Enter the name of the ntp server or its ip address. When entering multiple "

Loading…
Cancel
Save