diff --git a/source/libublsettings-gtk3-misc.c b/source/libublsettings-gtk3-misc.c index d2711ff..3b9c095 100644 --- a/source/libublsettings-gtk3-misc.c +++ b/source/libublsettings-gtk3-misc.c @@ -241,11 +241,11 @@ void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *t } -void yon_gtk_widget_set_sensitive_from_switch(GtkSwitch *toggle, GtkWidget *target){ +void yon_gtk_widget_set_sensitive_from_switch(GtkSwitch *toggle, int status, GtkWidget *target){ gtk_widget_set_sensitive(target,gtk_switch_get_active(toggle)); } -void yon_gtk_widget_set_sensitive_from_switch_inversed(GtkSwitch *toggle, GtkWidget *target){ +void yon_gtk_widget_set_sensitive_from_switch_inversed(GtkSwitch *toggle, int status, GtkWidget *target){ gtk_widget_set_sensitive(target,!gtk_switch_get_active(toggle)); } @@ -447,38 +447,19 @@ void yon_gtk_window_set_shrinking_from_revealer_resizing(GtkWindow *window, GtkR g_signal_connect(G_OBJECT(wrapped->revealer),"notify::reveal-child",G_CALLBACK(_yon_on_revealer_switched),wrapped); } -// void on_entry_pattern_inserted(GtkEditable *self, const gchar *text, gint length, gint *position, char *pattern){ -// if (length!=1) { -// return; -// } -// const char *old = gtk_entry_get_text(GTK_ENTRY(self)); -// int old_size = strlen(old); - -// char *final = yon_char_append((char*)old,text); +void on_entry_pattern_inserted(GtkEditable *self, const gchar *text, gint length, gint *position, char *pattern){ + const char *old_text = gtk_entry_get_text(GTK_ENTRY(self)); + char *test_text = yon_char_append(old_text,text); + if (!g_regex_match_simple(pattern,test_text,0,0)){ + g_signal_stop_emission_by_name(G_OBJECT(self),"insert-text"); + } -// switch(pattern[old_size]){ -// case '\1':{ -// if (text[0]>='0'&&text[0]<='9') -// } -// break; -// case '\2': -// break; -// default: -// break; -// } - -// if (strlen(new_text) < strlen(text)) { -// g_signal_handlers_block_by_func(editable, G_CALLBACK(yon_on_space_first_changed), NULL); -// gtk_entry_set_text(editable, new_text); -// g_signal_handlers_unblock_by_func(editable, G_CALLBACK(yon_on_space_first_changed), NULL); -// g_signal_stop_emission_by_name(editable, "changed"); -// } -// } - -// void yon_entry_set_pattern(GtkEntry *target, char *pattern){ -// char *pattern_copy = yon_char_new(pattern); -// g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(on_entry_pattern_inserted),pattern_copy) -// } +} + +void yon_entry_set_pattern(GtkEntry *target, char *pattern){ + char *pattern_copy = yon_char_new(pattern); + g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(on_entry_pattern_inserted),pattern_copy); +} void yon_on_insert_allowed_check(GtkEditable *editable, char *text, int length, int *position,char *symbols){ @@ -506,4 +487,45 @@ void yon_on_insert_allowed_check(GtkEditable *editable, char *text, int length, void yon_on_entry_set_allowed_symbols(GtkEntry *target, char *symbols){ g_return_if_fail(GTK_IS_ENTRY(target)); g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(yon_on_insert_allowed_check),symbols); +} + +int yon_ip_check(char *ip){ + if (!strstr(ip,".")){ + int pixmask = atoi(ip); + if (pixmask > 32) return 0; + } else { + if (!g_regex_match_simple("^(\\d){0,3}\\.(\\d){0,3}\\.(\\d){0,3}\\.(\\d){0,3}$",ip,0,0)) return 0; + int size; + config_str parsed = yon_char_parse(ip,&size,"."); + for (int i=0;i255){ + yon_char_parsed_free(parsed,size); + return 0; + } + } + yon_char_parsed_free(parsed,size); + } + return 1; +} + +int yon_ip_mask_get_bits(char *mask){ + if (!strstr(mask,".")){ + int bits = atoi(mask); + return bits; + } + int size; + config_str parsed = yon_char_parse(mask,&size,"."); + int bits = 32; + for (int i=0;i