You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
7.2 KiB
184 lines
7.2 KiB
#include "libublsettings-gtk3.h"
|
|
|
|
dictionary *yon_gtk_tree_store_get_children(GtkTreeStore *tree, GtkTreeIter *parent,int column){
|
|
g_return_val_if_fail(GTK_IS_TREE_STORE(tree),NULL);
|
|
dictionary *children = NULL;
|
|
GtkTreeIter iter;
|
|
if(gtk_tree_model_iter_has_child){
|
|
gtk_tree_model_iter_children(GTK_TREE_MODEL(tree),&iter,parent);
|
|
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(tree),&iter);
|
|
for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(tree),&iter)){
|
|
void *result = NULL;
|
|
gtk_tree_model_get(GTK_TREE_MODEL(tree),&iter,column,&result,-1);
|
|
dictionary *child_children = yon_gtk_tree_store_get_children(tree,&iter,column);
|
|
yon_dictionary_add_or_create_if_exists_with_data(children,result,child_children);
|
|
}
|
|
return children;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void yon_gtk_tree_store_fill_children(GtkTreeStore *tree, GtkTreeIter *parent, dictionary *data, int column){
|
|
GtkTreeIter iter;
|
|
dictionary *dict=NULL;
|
|
for_dictionaries(dict,data){
|
|
gtk_tree_store_append(tree,&iter,parent);
|
|
gtk_tree_store_set(tree,&iter,column,data->key,-1);
|
|
if (data->data){
|
|
yon_gtk_tree_store_fill_children(tree,&iter,data->data,column);
|
|
}
|
|
}
|
|
}
|
|
|
|
void yon_on_password_visibility_changed(GtkEntry *self, GtkEntryIconPosition position){
|
|
if (position==GTK_ENTRY_ICON_SECONDARY){
|
|
int status = gtk_entry_get_visibility(self);
|
|
gtk_entry_set_visibility(self,!status);
|
|
}
|
|
}
|
|
|
|
void yon_gtk_entry_set_password_visibility_icon(GtkEntry *target){
|
|
g_return_if_fail(GTK_IS_ENTRY(target));
|
|
gtk_entry_set_icon_from_icon_name(target,GTK_ENTRY_ICON_SECONDARY,"com.ublinux.libublsettingsui-gtk3.view-symbolic");
|
|
g_signal_connect(G_OBJECT(target),"icon-release",G_CALLBACK(yon_on_password_visibility_changed),NULL);
|
|
}
|
|
|
|
void yon_gtk_tree_store_copy_recursive(GtkTreeModel *sourceModel, GtkTreeIter *sourceIter, GtkTreeStore *destination, GtkTreeIter *parentIter) {
|
|
GtkTreeIter destIter;
|
|
|
|
gtk_tree_store_append(destination, &destIter, parentIter);
|
|
|
|
gint nColumns = gtk_tree_model_get_n_columns(sourceModel);
|
|
for (gint col = 0; col < nColumns; col++) {
|
|
GValue value = G_VALUE_INIT;
|
|
|
|
gtk_tree_model_get_value(sourceModel, sourceIter, col, &value);
|
|
|
|
gtk_tree_store_set_value(destination, &destIter, col, &value);
|
|
|
|
g_value_unset(&value);
|
|
}
|
|
|
|
if (gtk_tree_model_iter_has_child(sourceModel, sourceIter)) {
|
|
GtkTreeIter childIter;
|
|
gboolean validChild = gtk_tree_model_iter_children(sourceModel, &childIter, sourceIter);
|
|
while (validChild) {
|
|
yon_gtk_tree_store_copy_recursive(sourceModel, &childIter, destination, &destIter);
|
|
validChild = gtk_tree_model_iter_next(sourceModel, &childIter);
|
|
}
|
|
}
|
|
}
|
|
|
|
void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destination) {
|
|
GtkTreeModel *sourceModel = GTK_TREE_MODEL(source);
|
|
GtkTreeIter iter;
|
|
gboolean valid;
|
|
|
|
valid = gtk_tree_model_get_iter_first(sourceModel, &iter);
|
|
|
|
while (valid) {
|
|
yon_gtk_tree_store_copy_recursive(sourceModel, &iter, destination, NULL);
|
|
|
|
valid = gtk_tree_model_iter_next(sourceModel, &iter);
|
|
}
|
|
}
|
|
|
|
gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter){
|
|
g_return_val_if_fail(GTK_IS_COMBO_BOX(combo),0);
|
|
g_return_val_if_fail(GTK_IS_TREE_MODEL(model),0);
|
|
const char *id = gtk_combo_box_get_active_id(combo);
|
|
if (yon_char_is_empty(id)) return 0;
|
|
gtk_tree_model_get_iter_from_string(model,iter,id);
|
|
return 1;
|
|
}
|
|
|
|
gboolean yon_gtk_tree_model_check_exist(GtkTreeModel *model, GtkTreeIter *iter, char *id, int column){
|
|
g_return_val_if_fail(model&>K_IS_TREE_MODEL(model),0);
|
|
g_return_val_if_fail(iter,0);
|
|
for_iter(model,iter){
|
|
char *check_target;
|
|
gtk_tree_model_get(model,iter,column,&check_target,-1);
|
|
if (!yon_char_is_empty(check_target)&&!strcmp(id,check_target)){
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
gboolean yon_gtk_list_store_copy_full(GtkListStore *target, GtkListStore *source){
|
|
gtk_list_store_clear(target);
|
|
GtkTreeIter iter, itar;
|
|
g_return_val_if_fail(GTK_IS_LIST_STORE(target),0);
|
|
g_return_val_if_fail(GTK_IS_LIST_STORE(source),0);
|
|
int columns = gtk_tree_model_get_n_columns(GTK_TREE_MODEL(source));
|
|
int target_columns = gtk_tree_model_get_n_columns(GTK_TREE_MODEL(target));
|
|
if (columns!=target_columns){
|
|
g_log((gchar*)0,G_LOG_LEVEL_WARNING,"%s\n","Target and source models have different number of columns");
|
|
return 0;
|
|
}
|
|
for_iter(source,&iter){
|
|
gtk_list_store_append(target,&itar);
|
|
for(int i=0;i<columns;i++){
|
|
GValue value = G_VALUE_INIT;
|
|
gtk_tree_model_get_value(GTK_TREE_MODEL(source), &iter, i, &value);
|
|
gtk_list_store_set_value(target, &itar, i, &value);
|
|
|
|
g_value_unset(&value);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void yon_gtk_tree_view_column_set_fixed_size(GtkTreeView *target,int column_num){
|
|
g_return_if_fail(GTK_IS_TREE_VIEW(target));
|
|
GtkTreeIter iter;
|
|
GtkTreeModel *model = gtk_tree_view_get_model(target);
|
|
GtkTreeViewColumn *current_column = gtk_tree_view_get_column(target,column_num);
|
|
int column_size = 0;
|
|
|
|
for_iter(model,&iter){
|
|
GList *list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(current_column));
|
|
int cur_size=0;
|
|
for (int i=0;i<g_list_length(list);i++){
|
|
int cur_width;
|
|
gtk_cell_renderer_get_preferred_width(g_list_nth_data(list,i),GTK_WIDGET(target),&cur_width,NULL);
|
|
cur_size+=cur_width;
|
|
}
|
|
g_list_free(list);
|
|
if (column_size<cur_size) {
|
|
column_size=cur_size;
|
|
}
|
|
}
|
|
gtk_tree_view_column_set_fixed_width(current_column,column_size+10);
|
|
}
|
|
|
|
int yon_gtk_tree_view_set_fixed_size(GtkTreeView *target,...){
|
|
va_list args;
|
|
va_start(args,target);
|
|
int current;
|
|
int target_columns = gtk_tree_view_get_n_columns(target);
|
|
GtkTreeModel *model = gtk_tree_view_get_model(target);
|
|
|
|
while ((current=va_arg(args,int))!=-1){
|
|
if (current>target_columns) return 0;
|
|
yon_gtk_tree_view_column_set_fixed_size(target,current);
|
|
}
|
|
va_end(args);
|
|
return 1;
|
|
}
|
|
|
|
void yon_tree_model_sort_filter_get_child_iter(GtkTreeModelSort *target, GtkTreeIter *iter, GtkTreeIter *converted_iter){
|
|
GtkTreeIter filter_iter;
|
|
GtkTreeModel *filter_model = gtk_tree_model_sort_get_model(target);
|
|
GtkTreeModel *model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(filter_model));
|
|
gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(filter_model),&filter_iter,iter);
|
|
gtk_tree_model_sort_convert_child_iter_to_iter(target,converted_iter,&filter_iter);
|
|
}
|
|
|
|
void yon_tree_model_sort_filter_get_model_iter(GtkTreeModelSort *target, GtkTreeIter *iter, GtkTreeIter *converted_iter){
|
|
GtkTreeIter filter_iter;
|
|
GtkTreeModel *filter_model = gtk_tree_model_sort_get_model(target);
|
|
GtkTreeModel *model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(filter_model));
|
|
gtk_tree_model_sort_convert_iter_to_child_iter(target,&filter_iter,iter);
|
|
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter_model),converted_iter,&filter_iter);
|
|
} |