static void configure_fields_dialog (ETableConfig *config, GladeXML *gui) { GtkWidget *scrolled; scrolled = glade_xml_get_widget (gui, "custom-available"); config->available = e_table_scrolled_get_table (E_TABLE_SCROLLED (scrolled)); g_object_get (config->available, "model", &config->available_model, NULL); gtk_widget_show_all (scrolled); scrolled = glade_xml_get_widget (gui, "custom-shown"); config->shown = e_table_scrolled_get_table (E_TABLE_SCROLLED (scrolled)); g_object_get (config->shown, "model", &config->shown_model, NULL); gtk_widget_show_all (scrolled); connect_button (config, gui, "button-add", G_CALLBACK (config_button_add)); connect_button (config, gui, "button-remove", G_CALLBACK (config_button_remove)); connect_button (config, gui, "button-up", G_CALLBACK (config_button_up)); connect_button (config, gui, "button-down", G_CALLBACK (config_button_down)); setup_fields (config); }
static void config_button_add (GtkWidget *widget, ETableConfig *config) { GList *columns = NULL; GList *column; int count; int i; e_table_selected_row_foreach (config->available, add_column, &columns); columns = g_list_reverse (columns); count = g_list_length (columns); config->temp_state->columns = g_renew (int, config->temp_state->columns, config->temp_state->col_count + count); config->temp_state->expansions = g_renew (double, config->temp_state->expansions, config->temp_state->col_count + count); i = config->temp_state->col_count; for (column = columns; column; column = column->next) { config->temp_state->columns[i] = get_source_model_col_index (config, GPOINTER_TO_INT (column->data)); config->temp_state->expansions[i] = config->source_spec->columns[config->temp_state->columns[i]]->expansion; i++; } config->temp_state->col_count += count; g_list_free (columns); setup_fields (config); }
void Base::connect(std::shared_ptr<Connection> connection) { _connection = connection; // expect override define_schema(_schema); setup_fields(); }
static void config_button_up (GtkWidget *widget, ETableConfig *config) { GList *columns = NULL; GList *column; int *new_shown; double *new_expansions; int next_col; double next_expansion; int i; e_table_selected_row_foreach (config->shown, add_column, &columns); /* if no columns left, just return */ if (columns == NULL) return; columns = g_list_reverse (columns); new_shown = g_new (int, config->temp_state->col_count); new_expansions = g_new (double, config->temp_state->col_count); column = columns; next_col = config->temp_state->columns[0]; next_expansion = config->temp_state->expansions[0]; for (i = 1; i < config->temp_state->col_count; i++) { if (column && (GPOINTER_TO_INT (column->data) == i)) { new_expansions[i - 1] = config->temp_state->expansions[i]; new_shown[i - 1] = config->temp_state->columns[i]; column = column->next; } else { new_shown[i - 1] = next_col; next_col = config->temp_state->columns[i]; new_expansions[i - 1] = next_expansion; next_expansion = config->temp_state->expansions[i]; } } new_shown[i - 1] = next_col; new_expansions[i - 1] = next_expansion; g_free (config->temp_state->columns); g_free (config->temp_state->expansions); config->temp_state->columns = new_shown; config->temp_state->expansions = new_expansions; g_list_free (columns); setup_fields (config); }
static void do_fields_config_dialog (ETableConfig *config) { int response, running = 1; gtk_widget_ensure_style (config->dialog_show_fields); gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (config->dialog_show_fields)->vbox), 0); gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (config->dialog_show_fields)->action_area), 12); config->temp_state = e_table_state_duplicate (config->state); setup_fields (config); gtk_window_set_transient_for (GTK_WINDOW (config->dialog_show_fields), GTK_WINDOW (config->dialog_toplevel)); do { response = gtk_dialog_run (GTK_DIALOG(config->dialog_show_fields)); switch (response){ case GTK_RESPONSE_OK: g_object_unref (config->state); config->state = config->temp_state; config->temp_state = NULL; running = 0; config_dialog_changed (config); break; case GTK_RESPONSE_DELETE_EVENT: case GTK_RESPONSE_CANCEL: g_object_unref (config->temp_state); config->temp_state = NULL; running = 0; break; } } while (running); gtk_widget_hide (GTK_WIDGET (config->dialog_show_fields)); config_fields_info_update (config); }
static void config_button_remove (GtkWidget *widget, ETableConfig *config) { GList *columns = NULL; GList *column; e_table_selected_row_foreach (config->shown, add_column, &columns); for (column = columns; column; column = column->next) { int row = GPOINTER_TO_INT (column->data); memmove (config->temp_state->columns + row, config->temp_state->columns + row + 1, sizeof (int) * (config->temp_state->col_count - row - 1)); memmove (config->temp_state->expansions + row, config->temp_state->expansions + row + 1, sizeof (double) * (config->temp_state->col_count - row - 1)); config->temp_state->col_count --; } config->temp_state->columns = g_renew (int, config->temp_state->columns, config->temp_state->col_count); config->temp_state->expansions = g_renew (double, config->temp_state->expansions, config->temp_state->col_count); g_list_free (columns); setup_fields (config); }