45 #define COLUMN_DESCRIPTION 0 46 #define COLUMN_VALUE 1 47 #define GET_OBJECT(object_name) gtk_builder_get_object(string_list->builder, object_name) 52 gint items_count = gtk_tree_model_iter_n_children(
55 gtk_widget_set_sensitive(GTK_WIDGET(string_list->
button_remove), items_count > 0);
56 gtk_widget_set_sensitive(GTK_WIDGET(string_list->
button_up), items_count > 1);
57 gtk_widget_set_sensitive(GTK_WIDGET(string_list->
button_down), items_count > 1);
66 GtkTreePath *path = gtk_tree_path_new_from_string(path_string);
69 gtk_tree_model_get_iter(GTK_TREE_MODEL(string_list->
liststore_items), &iter, path);
73 gtk_list_store_set(string_list->
liststore_items, &iter, COLUMN_DESCRIPTION, text, -1);
85 gtk_list_store_set(string_list->
liststore_items, &iter, COLUMN_VALUE, text, -1);
87 gtk_tree_path_free(path);
98 path = gtk_tree_model_get_path(GTK_TREE_MODEL(string_list->
liststore_items), from);
99 gtk_tree_view_scroll_to_cell(string_list->
treeview_items, path, NULL, 0, 0, 0);
100 gtk_tree_path_free(path);
106 TRACE_CALL(__func__);
108 GtkTreeIter target_iter;
112 if (gtk_tree_model_iter_next(GTK_TREE_MODEL(string_list->
liststore_items), &target_iter)) {
121 TRACE_CALL(__func__);
123 GtkTreeIter target_iter;
128 path = gtk_tree_model_get_path(GTK_TREE_MODEL(string_list->
liststore_items), &target_iter);
130 if (gtk_tree_path_prev(path)) {
131 gtk_tree_model_get_iter(GTK_TREE_MODEL(string_list->
liststore_items), &target_iter, path);
132 gtk_tree_path_free(path);
141 TRACE_CALL(__func__);
148 path = gtk_tree_model_get_path(GTK_TREE_MODEL(string_list->
liststore_items), &iter);
149 gtk_tree_view_set_cursor_on_cell(string_list->
treeview_items, path,
153 gtk_tree_path_free(path);
160 TRACE_CALL(__func__);
173 TRACE_CALL(__func__);
182 items = g_strsplit(text, STRING_DELIMITOR, -1);
183 for (i = 0; i < g_strv_length(items); i++) {
186 if (g_strv_length(values) > 1) {
189 COLUMN_DESCRIPTION, values[0],
190 COLUMN_VALUE, values[1],
195 COLUMN_VALUE, values[0],
207 TRACE_CALL(__func__);
212 const gchar *item_description;
213 const gchar *item_value;
215 str = g_string_new(NULL);
218 ret = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(string_list->
liststore_items), &iter);
220 gtk_tree_model_get(GTK_TREE_MODEL(string_list->
liststore_items), &iter,
221 COLUMN_DESCRIPTION, &item_description,
222 COLUMN_VALUE, &item_value,
224 if (!item_description)
225 item_description =
"";
226 if (item_value && strlen(item_value) > 0) {
229 g_string_append(str, STRING_DELIMITOR);
235 g_string_append(str, item_description);
239 g_string_append(str, item_value);
241 ret = gtk_tree_model_iter_next(GTK_TREE_MODEL(string_list->
liststore_items), &iter);
243 return g_string_free(str, FALSE);
249 TRACE_CALL(__func__);
257 gtk_window_set_title(GTK_WINDOW(string_list->
dialog),
258 (title1 && strlen(title1) > 0) ? title1 :
"");
260 if (title2 && strlen(title2) > 0) {
261 gtk_label_set_text(string_list->
label_title, title2);
262 gtk_widget_show(GTK_WIDGET(string_list->
label_title));
264 gtk_widget_hide(GTK_WIDGET(string_list->
label_title));
271 TRACE_CALL(__func__);
282 TRACE_CALL(__func__);
287 string_list->
dialog = GTK_DIALOG(gtk_builder_get_object(string_list->
builder,
"DialogStringList"));
289 string_list->
liststore_items = GTK_LIST_STORE(GET_OBJECT(
"liststore_items"));
290 string_list->
treeview_items = GTK_TREE_VIEW(GET_OBJECT(
"treeview_items"));
291 string_list->
treeviewcolumn_item = GTK_TREE_VIEW_COLUMN(GET_OBJECT(
"treeviewcolumn_item"));
292 string_list->
treeview_selection = GTK_TREE_SELECTION(GET_OBJECT(
"treeview_selection"));
295 string_list->
button_add = GTK_BUTTON(GET_OBJECT(
"button_add"));
296 string_list->
button_remove = GTK_BUTTON(GET_OBJECT(
"button_remove"));
297 string_list->
button_up = GTK_BUTTON(GET_OBJECT(
"button_up"));
298 string_list->
button_down = GTK_BUTTON(GET_OBJECT(
"button_down"));
299 string_list->
label_title = GTK_LABEL(GET_OBJECT(
"label_title"));
300 string_list->
label_status = GTK_LABEL(GET_OBJECT(
"label_status"));
303 gtk_builder_connect_signals(string_list->
builder, NULL);
305 if (!fields_separator)
306 fields_separator = STRING_DELIMITOR2;
311 return string_list->
dialog;
static RemminaStringList * string_list
GtkDialog * remmina_string_list_new(gboolean two_columns, const gchar *fields_separator)
RemminaStringListPriv * priv
void remmina_string_list_set_validation_func(RemminaStringListValidationFunc func)
GtkCellRendererText * cellrenderertext_item1
void remmina_string_list_on_action_remove(GtkWidget *widget, gpointer user_data)
static void remmina_string_list_init(void)
RemminaStringListValidationFunc validation_func
GtkTreeViewColumn * treeviewcolumn_item
GtkTreeSelection * treeview_selection
GtkCellRendererText * cellrenderertext_item2
const gchar * fields_separator
void remmina_string_list_on_action_down(GtkWidget *widget, gpointer user_data)
GtkTreeView * treeview_items
GtkBuilder * remmina_public_gtk_builder_new_from_resource(gchar *resource)
gboolean(* RemminaStringListValidationFunc)(const gchar *new_str, gchar **error)
gchar * remmina_public_str_replace(const gchar *string, const gchar *search, const gchar *replacement)
void remmina_string_list_set_text(const gchar *text, const gboolean clear_data)
void remmina_string_list_on_cell_edited(GtkCellRendererText *cell, const gchar *path_string, const gchar *new_text)
void remmina_string_list_set_titles(gchar *title1, gchar *title2)
GtkListStore * liststore_items
void remmina_string_list_update_buttons_state(void)
void remmina_string_list_on_action_add(GtkWidget *widget, gpointer user_data)
static void remmina_string_list_move_iter(GtkTreeIter *from, GtkTreeIter *to)
GtkButton * button_remove
gchar * remmina_string_list_get_text(void)
void remmina_string_list_on_action_up(GtkWidget *widget, gpointer user_data)