Merge pull request 'master' (#38) from YanTheKaller/libublsettingsui-gtk3:master into master
Reviewed-on: #38master v1.35
commit
3e07baab08
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 543 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.38.2 -->
|
||||||
|
<interface domain="libublsettingsui-gtk3">
|
||||||
|
<requires lib="gtk+" version="3.24"/>
|
||||||
|
<!-- interface-css-provider-path libublsettingsui-gtk3.css -->
|
||||||
|
<object class="GtkWindow" id="Window">
|
||||||
|
<property name="width-request">450</property>
|
||||||
|
<property name="height-request">200</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="icon-name">com.ublinux.libublsettingsui-gtk3</property>
|
||||||
|
<property name="type-hint">dialog</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">5</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="StatusBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
|
<property name="margin-bottom">5</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">True</property>
|
||||||
|
<property name="shadow-type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkViewport">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="WorkZoneBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="margin-start">5</property>
|
||||||
|
<property name="margin-end">5</property>
|
||||||
|
<property name="margin-top">5</property>
|
||||||
|
<property name="margin-bottom">5</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">5</property>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="titlebar">
|
||||||
|
<object class="GtkHeaderBar">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="show-close-button">True</property>
|
||||||
|
<child type="title">
|
||||||
|
<object class="GtkLabel" id="HeaderTopic">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Application settigs</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage" id="HeaderImage">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can-focus">False</property>
|
||||||
|
<property name="pixel-size">32</property>
|
||||||
|
<property name="icon-name">com.ublinux.libublsettingsui-gtk3</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<style>
|
||||||
|
<class name="toolbar"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<object class="GtkListStore" id="liststore1">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name Active -->
|
||||||
|
<column type="gboolean"/>
|
||||||
|
<!-- column-name Parameter -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name OldValue -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name NewValue -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name CompareString -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Color -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Show -->
|
||||||
|
<column type="gboolean"/>
|
||||||
|
<!-- column-name Section -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
</columns>
|
||||||
|
</object>
|
||||||
|
<object class="GtkListStore" id="liststore1fwe">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name Active -->
|
||||||
|
<column type="gboolean"/>
|
||||||
|
<!-- column-name Parameter -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name OldValue -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name NewValue -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name CompareString -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Color -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name Show -->
|
||||||
|
<column type="gboolean"/>
|
||||||
|
<!-- column-name SaveCommand -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
</columns>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
@ -0,0 +1,266 @@
|
|||||||
|
#include "libublsettingsui-gtk3.h"
|
||||||
|
|
||||||
|
void on_confuguration_combo_box_changed(GtkComboBox *self, char *id);
|
||||||
|
void __yon_on_boolean_parameter_toggled(GtkToggleButton *self ,char *id);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *id;
|
||||||
|
GtkWidget *Box;
|
||||||
|
GtkWidget *CheckButton;
|
||||||
|
} yon_configuration_boolean_parameter;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *id;
|
||||||
|
GtkWidget *Box;
|
||||||
|
GtkWidget *Label;
|
||||||
|
GtkWidget *Entry;
|
||||||
|
} yon_configuration_entry_parameter;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *id;
|
||||||
|
GtkWidget *Box;
|
||||||
|
GtkWidget *Label;
|
||||||
|
GtkWidget *ComboBox;
|
||||||
|
} yon_configuration_combo_parameter;
|
||||||
|
|
||||||
|
// typedef struct {
|
||||||
|
// char *id;
|
||||||
|
// GtkWidget *Label;
|
||||||
|
// GtkWidget *GtkTreeView;
|
||||||
|
// GtkListStore *list;
|
||||||
|
// } yon_configuration_list_parameter;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct yon_configuration_parameters {
|
||||||
|
dictionary_fields(yon_configuration_parameters);
|
||||||
|
char *label;
|
||||||
|
char *value;
|
||||||
|
GCallback func;
|
||||||
|
enum CONFIGURATION_PARAMETER_TYPE type;
|
||||||
|
} yon_configuration_parameters;
|
||||||
|
|
||||||
|
yon_configuration_entry_parameter *yon_configuration_entry_parameter_new(char *id, char *label_text){
|
||||||
|
yon_configuration_entry_parameter *parameter = malloc(sizeof(yon_configuration_entry_parameter));
|
||||||
|
parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
|
||||||
|
parameter->Label = gtk_label_new(label_text);
|
||||||
|
parameter->Entry = gtk_entry_new();
|
||||||
|
parameter->id = yon_char_new(id);
|
||||||
|
gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->Label,1,1,0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->Entry,1,1,0);
|
||||||
|
gtk_widget_show_all(parameter->Box);
|
||||||
|
return parameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
yon_configuration_parameters *__yon_settings_parameters = NULL;
|
||||||
|
|
||||||
|
yon_configuration_combo_parameter *yon_configuration_combo_box_parameter_new(char *id, char *label_text, config_str parameters){
|
||||||
|
yon_configuration_combo_parameter *parameter = malloc(sizeof(yon_configuration_combo_parameter));
|
||||||
|
parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
|
||||||
|
parameter->Label = gtk_label_new(label_text);
|
||||||
|
parameter->ComboBox = gtk_combo_box_text_new();
|
||||||
|
parameter->id = yon_char_new(id);
|
||||||
|
gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->Label,0,0,0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->ComboBox,0,0,0);
|
||||||
|
for (int i=0;parameters[i]&¶meters[i+1];i+=2){
|
||||||
|
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(parameter->ComboBox),parameters[i],parameters[i+1]);
|
||||||
|
}
|
||||||
|
char *value = NULL;
|
||||||
|
yon_window_config_get_parameter("settings",id,&value,YON_TYPE_STRING);
|
||||||
|
if (!yon_char_is_empty(value)){
|
||||||
|
gtk_combo_box_set_active_id(GTK_COMBO_BOX(parameter->ComboBox),value);
|
||||||
|
} else {
|
||||||
|
gtk_combo_box_set_active(GTK_COMBO_BOX(parameter->ComboBox),0);
|
||||||
|
}
|
||||||
|
g_signal_connect(G_OBJECT(parameter->ComboBox),"changed",G_CALLBACK(on_confuguration_combo_box_changed),id);
|
||||||
|
yon_configuration_parameters *target = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id);
|
||||||
|
if (target){
|
||||||
|
if (target->func){
|
||||||
|
g_signal_connect(G_OBJECT(parameter->ComboBox),"changed",G_CALLBACK(target->func),target->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gtk_widget_show_all(parameter->Box);
|
||||||
|
return parameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
ubl_settings_window *yon_ubl_settings_window_new(){
|
||||||
|
ubl_settings_window *window = malloc(sizeof(ubl_settings_window));
|
||||||
|
GtkBuilder *builder = gtk_builder_new_from_resource("/com/ublinux/ui/libublsettingsui-gtk3-config-window.glade");
|
||||||
|
window->window = yon_gtk_builder_get_widget(builder,"Window");
|
||||||
|
window->WorkZoneBox = yon_gtk_builder_get_widget(builder,"WorkZoneBox");
|
||||||
|
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||||
|
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
yon_configuration_boolean_parameter *__yon_configuration_boolean_parameter_new(char *id, char *label_text){
|
||||||
|
yon_configuration_boolean_parameter *parameter = malloc(sizeof(yon_configuration_boolean_parameter));
|
||||||
|
parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
|
||||||
|
parameter->CheckButton = gtk_check_button_new_with_label(label_text);
|
||||||
|
parameter->id = yon_char_new(id);
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(parameter->CheckButton),"toggled",G_CALLBACK(__yon_on_boolean_parameter_toggled),parameter->id);
|
||||||
|
gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->CheckButton,0,0,0);
|
||||||
|
return parameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
//parameter section
|
||||||
|
|
||||||
|
yon_configuration_parameters *yon_configuration_parameter_new()
|
||||||
|
{
|
||||||
|
yon_configuration_parameters *dict = malloc(sizeof(yon_configuration_parameters));
|
||||||
|
dict->data = NULL;
|
||||||
|
dict->key = NULL;
|
||||||
|
dict->next = NULL;
|
||||||
|
dict->prev = NULL;
|
||||||
|
dict->data = NULL;
|
||||||
|
dict->value = NULL;
|
||||||
|
dict->func = NULL;
|
||||||
|
dict->first = (struct yon_configuration_parameters*)dict;
|
||||||
|
dict->data_type = DICTIONARY_OTHER_TYPE;
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
yon_configuration_parameters *yon_configuration_parameter_append(yon_configuration_parameters *targetdict)
|
||||||
|
{
|
||||||
|
targetdict = (yon_configuration_parameters*)yon_dictionary_get_last((dictionary*)targetdict);
|
||||||
|
targetdict->next = (struct yon_configuration_parameters*)yon_configuration_parameter_new();
|
||||||
|
targetdict->next->prev = (struct yon_configuration_parameters*)targetdict;
|
||||||
|
targetdict->next->first = targetdict->first;
|
||||||
|
targetdict->next->data_type = DICTIONARY_OTHER_TYPE;
|
||||||
|
targetdict->next->data = NULL;
|
||||||
|
targetdict->next->value = NULL;
|
||||||
|
targetdict->next->func = NULL;
|
||||||
|
return targetdict->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
yon_configuration_parameters *yon_configuration_parameter_new_with_label(char *key, void *data)
|
||||||
|
{
|
||||||
|
yon_configuration_parameters *dct = yon_configuration_parameter_new();
|
||||||
|
dct->key = yon_char_new(key);
|
||||||
|
dct->label = data;
|
||||||
|
dct->data_type = DICTIONARY_OTHER_TYPE;
|
||||||
|
return dct;
|
||||||
|
}
|
||||||
|
|
||||||
|
yon_configuration_parameters *yon_configuration_parameter_append_with_label(yon_configuration_parameters *dict, char *key, void *data)
|
||||||
|
{
|
||||||
|
yon_configuration_parameters *dct = yon_configuration_parameter_append(dict);
|
||||||
|
dct->key = yon_char_new(key);
|
||||||
|
dct->label = data;
|
||||||
|
dct->data_type = DICTIONARY_OTHER_TYPE;
|
||||||
|
return dct;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define yon_configuration_parameter_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_configuration_parameter_new_with_label(key,data); \
|
||||||
|
else dict=yon_configuration_parameter_append_with_label(dict,key,data);}
|
||||||
|
|
||||||
|
void yon_configuration_window_add_boolean_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label){
|
||||||
|
yon_configuration_parameter_add_or_create_if_exists_with_data(__yon_settings_parameters,id,label);
|
||||||
|
yon_configuration_parameters *parameter = (yon_configuration_parameters*)yon_dictionary_get_last((dictionary*)__yon_settings_parameters);
|
||||||
|
if (parameter){
|
||||||
|
parameter->type = CONFIGURATION_PARAMETER_BOOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *yon_settings_configuration_get(char *id){
|
||||||
|
char *return_val = NULL;
|
||||||
|
yon_window_config_get_parameter("settings",id,&return_val,YON_TYPE_STRING);
|
||||||
|
return return_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
//signnals section
|
||||||
|
|
||||||
|
void __yon_on_ubl_settings_window_open(){
|
||||||
|
if (!__yon_settings_parameters) return;
|
||||||
|
ubl_settings_window *window = yon_ubl_settings_window_new();
|
||||||
|
dictionary *current = NULL;
|
||||||
|
for_dictionaries(current,(dictionary*)__yon_settings_parameters){
|
||||||
|
switch(((yon_configuration_parameters*)current)->type){
|
||||||
|
case CONFIGURATION_PARAMETER_BOOL:{
|
||||||
|
yon_configuration_boolean_parameter *cur = __yon_configuration_boolean_parameter_new(((yon_configuration_parameters*)current)->key,((yon_configuration_parameters*)current)->label);
|
||||||
|
gtk_box_pack_start(GTK_BOX(window->WorkZoneBox),cur->Box,0,0,0);
|
||||||
|
gtk_widget_show_all(window->WorkZoneBox);
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case CONFIGURATION_PARAMETER_ENTRY:{
|
||||||
|
// yon_configuration_entry_parameter *cur = __yon_configuration_entry_parameter_new(current->key,current->label);
|
||||||
|
// gtk_box_pack_start(GTK_BOX(window->WorkZoneBox),cur->Box,0,0,0);
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case CONFIGURATION_PARAMETER_COMBO_BOX:{
|
||||||
|
yon_configuration_combo_parameter *cur = yon_configuration_combo_box_parameter_new(((yon_configuration_parameters*)current)->key,((yon_configuration_parameters*)current)->label,(config_str)((yon_configuration_parameters*)current)->data);
|
||||||
|
gtk_box_pack_start(GTK_BOX(window->WorkZoneBox),cur->Box,0,0,0);
|
||||||
|
gtk_widget_show_all(window->WorkZoneBox);
|
||||||
|
} break;
|
||||||
|
case CONFIGURATION_PARAMETER_LIST_MULTIPLE:{
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gtk_widget_show(window->window);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __yon_on_boolean_parameter_toggled(GtkToggleButton *self ,char *id){
|
||||||
|
yon_configuration_parameters *current = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id);
|
||||||
|
if (current){
|
||||||
|
current->data= gtk_toggle_button_get_active(self)?(void*)1:(void*)0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_confuguration_combo_box_changed(GtkComboBox *self, char *id){
|
||||||
|
yon_configuration_parameters *cur = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id);
|
||||||
|
if (cur){
|
||||||
|
char *cur_value = yon_char_new((char*)gtk_combo_box_get_active_id(self));
|
||||||
|
if (yon_window_config_check_init()){
|
||||||
|
yon_window_config_add_instant_parameter(id,"settings",cur_value,YON_TYPE_STRING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//init section
|
||||||
|
|
||||||
|
void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label, GCallback func, gpointer data,...){
|
||||||
|
yon_configuration_parameter_add_or_create_if_exists_with_data(__yon_settings_parameters,id,label);
|
||||||
|
va_list args;
|
||||||
|
va_start(args,data);
|
||||||
|
char *cur=NULL;
|
||||||
|
int size=0;
|
||||||
|
config_str variants = NULL;
|
||||||
|
while ((cur=va_arg(args,char*))){
|
||||||
|
yon_char_parsed_add_or_create_if_exists(variants,&size,cur);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
char *target=NULL;
|
||||||
|
yon_window_config_get_parameter("settings",id,&target,YON_TYPE_STRING);
|
||||||
|
if (yon_char_is_empty(target)){
|
||||||
|
yon_window_config_add_instant_parameter(id,"settings",variants[0],YON_TYPE_STRING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yon_char_parsed_add_or_create_if_exists(variants,&size,NULL);
|
||||||
|
yon_configuration_parameters *parameter = (yon_configuration_parameters*)yon_dictionary_get_last((dictionary*)__yon_settings_parameters);
|
||||||
|
if (parameter){
|
||||||
|
|
||||||
|
parameter->data = (void*)variants;
|
||||||
|
parameter->type = CONFIGURATION_PARAMETER_COMBO_BOX;
|
||||||
|
parameter->func = func;
|
||||||
|
parameter->value = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void yon_ubl_settings_window_init(GtkMenu *menu){
|
||||||
|
GtkWidget *menu_item = gtk_menu_item_new();
|
||||||
|
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
|
||||||
|
textdomain(template_ui_LocaleName);
|
||||||
|
GtkWidget *label = gtk_label_new(CONFIG_WINDOW_MENU_LABEL);
|
||||||
|
textdomain(template_app_information.app_locale);
|
||||||
|
gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitemtop");
|
||||||
|
GtkWidget *image = gtk_image_new_from_icon_name("com.ublinux.libublsettingsui-gtk3.settings-symbolic",GTK_ICON_SIZE_BUTTON);
|
||||||
|
gtk_menu_shell_prepend(GTK_MENU_SHELL(menu),menu_item);
|
||||||
|
gtk_container_add(GTK_CONTAINER(menu_item),box);
|
||||||
|
gtk_box_pack_start(GTK_BOX(box),image,0,0,5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(box),label,0,0,5);
|
||||||
|
gtk_widget_show_all(menu_item);
|
||||||
|
g_signal_connect(G_OBJECT(menu_item),"activate",G_CALLBACK(__yon_on_ubl_settings_window_open),NULL);
|
||||||
|
}
|
||||||
@ -0,0 +1,120 @@
|
|||||||
|
#include "libublsettingsui-gtk3.h"
|
||||||
|
|
||||||
|
void on_file_chooser_accept(GtkWidget *, filechooser_window *window){
|
||||||
|
switch (gtk_file_chooser_get_action(GTK_FILE_CHOOSER(window->MainFileChooser))){
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_SAVE:
|
||||||
|
window->responce=GTK_RESPONSE_APPLY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_OPEN:
|
||||||
|
window->responce = GTK_RESPONSE_ACCEPT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gtk_widget_destroy(window->Window);
|
||||||
|
gtk_main_quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_file_chooser_cancel(GtkWidget *, filechooser_window *window){
|
||||||
|
window->responce=GTK_RESPONSE_CANCEL;
|
||||||
|
gtk_widget_destroy(window->Window);
|
||||||
|
gtk_main_quit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_file_chooser_selected(GtkWidget *self, filechooser_window *window){
|
||||||
|
if (window->last_any_selection) free(window->last_any_selection);
|
||||||
|
if (window->last_success_selection) free(window->last_success_selection);
|
||||||
|
|
||||||
|
GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(window->MainFileChooser));
|
||||||
|
config_str paths_all = NULL;
|
||||||
|
config_str paths_success = NULL;
|
||||||
|
int all_size=0;
|
||||||
|
int success_size=0;
|
||||||
|
GtkFileChooserAction action = gtk_file_chooser_get_action(GTK_FILE_CHOOSER(window->MainFileChooser));
|
||||||
|
for (int i=0;i<g_slist_length(list);i++){
|
||||||
|
char *data = (char*)g_slist_nth_data(list,i);
|
||||||
|
if ((action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER&&success_size==0) ||
|
||||||
|
(action == GTK_FILE_CHOOSER_ACTION_OPEN&>k_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ChooseFolderCheck))&&yon_file_is_directory(data)) ||
|
||||||
|
(action == GTK_FILE_CHOOSER_ACTION_OPEN&&!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ChooseFolderCheck))&&!yon_file_is_directory(data)) ||
|
||||||
|
(action == GTK_FILE_CHOOSER_ACTION_SAVE&&!yon_file_is_directory(data)) ||
|
||||||
|
(action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER&&yon_file_is_directory(data))
|
||||||
|
){
|
||||||
|
yon_char_parsed_add_or_create_if_exists(paths_success,&success_size,data);
|
||||||
|
}
|
||||||
|
|
||||||
|
yon_char_parsed_add_or_create_if_exists(paths_all,&all_size,data);
|
||||||
|
}
|
||||||
|
char *full_success = yon_char_parsed_to_string(paths_success,success_size,",");
|
||||||
|
char *full_all = yon_char_parsed_to_string(paths_all,all_size,",");
|
||||||
|
window->last_any_selection = yon_char_is_empty(full_all)?NULL:full_all;
|
||||||
|
window->last_success_selection = yon_char_is_empty(full_success)?NULL:full_success;
|
||||||
|
if (all_size) yon_char_parsed_free(paths_all,all_size);
|
||||||
|
if (success_size) yon_char_parsed_free(paths_success,success_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
filechooser_window *__yon_filechooser_window = NULL;
|
||||||
|
|
||||||
|
void yon_file_chooser_set_button_label(char *label){
|
||||||
|
if (__yon_filechooser_window){
|
||||||
|
gtk_button_set_label(GTK_BUTTON(__yon_filechooser_window->SaveButton),label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_file_chooser_exit(GtkWidget *, filechooser_window *){
|
||||||
|
__yon_filechooser_window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action){
|
||||||
|
if (!__yon_filechooser_window){
|
||||||
|
filechooser_window *window = malloc(sizeof(filechooser_window));
|
||||||
|
__yon_filechooser_window = window;
|
||||||
|
GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_filechooser);
|
||||||
|
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||||
|
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
|
||||||
|
window->HeaderTopic = yon_gtk_builder_get_widget(builder,"HeaderTopic");
|
||||||
|
window->MainFileChooser = yon_gtk_builder_get_widget(builder,"MainFileChooser");
|
||||||
|
window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton");
|
||||||
|
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||||
|
window->ChooseFolderCheck = yon_gtk_builder_get_widget(builder,"ChooseFolderCheck");
|
||||||
|
window->last_any_selection=NULL;
|
||||||
|
window->last_success_selection=NULL;
|
||||||
|
g_signal_connect(G_OBJECT(window->MainFileChooser),"selection-changed",G_CALLBACK(on_file_chooser_selected),window);
|
||||||
|
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_file_chooser_cancel),window);
|
||||||
|
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_file_chooser_accept),window);
|
||||||
|
g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_file_chooser_exit),window);
|
||||||
|
|
||||||
|
gtk_file_chooser_set_action(GTK_FILE_CHOOSER(window->MainFileChooser),action);
|
||||||
|
switch(action){
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
|
||||||
|
gtk_widget_hide(window->ChooseFolderCheck);
|
||||||
|
gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(CREATE_FOLDER_LABEL));
|
||||||
|
break;
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_OPEN:
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_SAVE:
|
||||||
|
gtk_widget_hide(window->ChooseFolderCheck);
|
||||||
|
gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(SAVE_LABEL));
|
||||||
|
break;
|
||||||
|
case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ChooseFolderCheck),1);
|
||||||
|
gtk_widget_hide(window->ChooseFolderCheck);
|
||||||
|
gtk_button_set_label(GTK_BUTTON(window->SaveButton),yon_char_get_localised_from_lib(SELECT_FOLDER_LABEL));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
||||||
|
return window;
|
||||||
|
} else {
|
||||||
|
return __yon_filechooser_window;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkResponseType yon_file_chooser_start(filechooser_window *window){
|
||||||
|
gtk_widget_show(window->Window);
|
||||||
|
gtk_main();
|
||||||
|
|
||||||
|
return window->responce;
|
||||||
|
}
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
struct loaded_config {
|
||||||
|
dictionary_fields(loaded_config);
|
||||||
|
char *section;
|
||||||
|
};
|
||||||
|
|
||||||
|
template_saving_window *yon_saving_window_new();
|
||||||
|
|
||||||
|
struct loaded_config *yon_config_convert_parameter(config_str parsed, int size);
|
||||||
|
|
||||||
|
struct save_return {
|
||||||
|
void *save_success_argument;
|
||||||
|
config_str file_return;
|
||||||
|
int file_save;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**function and argument, which called after successful config saving.
|
||||||
|
* Example:
|
||||||
|
* void on_save_done(main_window *widgets, config_str output, int size)
|
||||||
|
*/
|
||||||
|
void (*save_success_function)(void*,config_str,int)=NULL;
|
||||||
|
void *save_success_argument=NULL;
|
||||||
|
void (*save_failure_function)(void*,config_str,int)=NULL;
|
||||||
|
void *save_failure_argument=NULL;
|
||||||
|
|
||||||
|
#define default_config_command(target, data) yon_char_unite("ubconfig --source default --raw get ",target," ",data,NULL)
|
||||||
|
void on_save_parameters(GtkWidget *self, template_saving_window *window);
|
||||||
Loading…
Reference in new issue