int ShowOdbcParamsDialog()

in setupgui/gtk/odbcdialogparams.cc [549:807]


int ShowOdbcParamsDialog(DataSource* params, HWND ParentWnd, BOOL isPrompt)
{
  GtkWidget  *dummy;
  GtkEntry   *entry;
  GError     *error= NULL;
  GdkPixbuf  *pixbuf;
  SQLINTEGER len= SQL_NTS;
  int i = 0;

  db_popped_up= FALSE;
  cs_popped_up= FALSE;

  assert(!BusyIndicator);

  pParams= params;
  g_isPrompt= isPrompt;

  gtk_init(nullptr, nullptr);
  /*
     If prompting (with a DSN name), or not prompting (add/edit DSN),
     we translate the lib path to the actual driver name.
  */
  if (params->opt_DSN || !isPrompt)
  {
    Driver driver;
    if (params->opt_DRIVER)
      driver.lib = params->opt_DRIVER;

    if (driver.lookup_name())
    {
      GtkWidget *msg_box;

      msg_box= gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
                                      "Failure to lookup driver entry at path '%s'('%s')",
                                      (const char*)driver.lib, params->opt_DSN);

      gtk_dialog_run (GTK_DIALOG (msg_box));
      gtk_widget_hide(msg_box);
      gtk_widget_destroy(msg_box);

      return 0;
    }

    params->opt_DRIVER = driver.name;
  }

  dummy= gtk_vbox_new(0,0);
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_image_new();
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_frame_new(0);
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_table_new(0,0,0);
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_label_new(NULL);
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_entry_new();
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_spin_button_new(0, 0., 0);
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_hseparator_new();
  g_object_ref_sink(G_OBJECT (dummy));
  dummy= gtk_combo_box_new();
  g_object_ref_sink(G_OBJECT (dummy));

#if GTK_MAJOR_VERSION >= 3
  dummy= gtk_combo_box_text_new();
  g_object_ref_sink(G_OBJECT (dummy));
#endif
  builder = gtk_builder_new ();
  /* add GUI definitions from ui_xml.h */
  gtk_builder_add_from_string(builder, ui_xml, -1 /* NULL-terminated */,
                              &error);

  if (error)
  {
    g_error ("ERROR: %s\n", error->message);
    return 0;
  }

  pixbuf= gdk_pixbuf_new_from_xpm_data((const char **)connector_odbc_header_xpm);
  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "header"));
  g_object_set(dummy, "pixbuf", pixbuf, NULL);

  dsnEditDialog= GTK_WIDGET (gtk_builder_get_object (builder, "odbcdialog"));

  details_note= GTK_WIDGET (gtk_builder_get_object (builder, "details_note"));
  show_details= GTK_WIDGET (gtk_builder_get_object (builder, "show_details"));
  hide_details= GTK_WIDGET (gtk_builder_get_object (builder, "hide_details"));

  g_signal_connect ((gpointer) show_details, "clicked",
                    G_CALLBACK (on_show_details_clicked), NULL);

  g_signal_connect ((gpointer) hide_details, "clicked",
                      G_CALLBACK (on_hide_details_clicked), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "ok"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_ok_clicked), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "cancel"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_cancel_clicked), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "help"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_help_clicked), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "test"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_test_clicked), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "DATABASE"));

#if GTK_MAJOR_VERSION >= 3
  g_signal_connect ((gpointer) dummy, "set-focus-child",
                    G_CALLBACK (on_database_popup), NULL);
#else
  g_signal_connect ((gpointer) dummy, "notify::popup-shown",
                    G_CALLBACK (on_database_popup), NULL);
#endif

  /* Work around the keyboard-trapping bug in GTKComboBox */
  g_signal_connect ((gpointer) dummy, "key-press-event",
                    G_CALLBACK (on_tab_press), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "CHARSET"));
#if GTK_MAJOR_VERSION >= 3
  g_signal_connect ((gpointer) dummy, "set-focus-child",
                    G_CALLBACK (on_charset_popup), NULL);
#else
  g_signal_connect ((gpointer) dummy, "notify::popup-shown",
                    G_CALLBACK (on_charset_popup), NULL);
#endif
  /* Work around the keyboard-trapping bug in GTKComboBox */
  g_signal_connect ((gpointer) dummy, "key-press-event",
                    G_CALLBACK (on_tab_press), (gpointer)1);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "use_tcp_ip_server"));
  g_signal_connect ((gpointer) dummy, "toggled",
                    G_CALLBACK (on_use_tcp_ip_server_toggled), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "use_socket_file"));
  g_signal_connect ((gpointer) dummy, "toggled",
                    G_CALLBACK (on_use_socket_file_toggled), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "ENABLE_DNS_SRV"));
  g_signal_connect ((gpointer) dummy, "toggled",
                    G_CALLBACK (on_enable_DNS_SRV_toggled), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "SSL_KEY_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "SSL_KEY"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "SSL_CERT_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "SSL_CERT"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "SSL_CA_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "SSL_CA"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "SSL_CAPATH_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "SSL_CAPATH"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_folder_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "RSAKEY_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "RSAKEY"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "SSL_CRL_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "SSL_CRL"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "SSL_CRLPATH_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "SSL_CRLPATH"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_folder_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "cursor_prefetch_active"));
  g_signal_connect ((gpointer) dummy, "toggled",
                    G_CALLBACK (on_check_cursor_prefetch_toggled), NULL);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "plugindir_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "PLUGIN_DIR"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_folder_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "LOAD_DATA_LOCAL_DIR_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "LOAD_DATA_LOCAL_DIR"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_folder_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "OCI_CONFIG_FILE_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "OCI_CONFIG_FILE"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  dummy= GTK_WIDGET (gtk_builder_get_object (builder, "OPENID_TOKEN_FILE_button"));
  entry= GTK_ENTRY (gtk_builder_get_object (builder, "OPENID_TOKEN_FILE"));
  g_signal_connect ((gpointer) dummy, "clicked",
                    G_CALLBACK (on_file_button_clicked), entry);

  gtk_builder_connect_signals(builder, NULL);

  gtk_widget_hide(hide_details);

  {
    GtkListStore *store;
    GtkTreeIter iter;
    GtkComboBox *ssl_mode_combo;

    ssl_mode_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "SSL_MODE"));
    store = gtk_list_store_new(1, G_TYPE_STRING);

    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter, 0, "", -1);

    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter, 0, ODBC_SSL_MODE_DISABLED, -1);

    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter, 0, ODBC_SSL_MODE_PREFERRED, -1);

    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter, 0, ODBC_SSL_MODE_REQUIRED, -1);

    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter, 0, ODBC_SSL_MODE_VERIFY_CA, -1);

    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter, 0, ODBC_SSL_MODE_VERIFY_IDENTITY, -1);


    gtk_combo_box_set_model(ssl_mode_combo, NULL);
    gtk_combo_box_set_model(ssl_mode_combo, GTK_TREE_MODEL(store));
    g_object_unref(store);

  }

  syncForm(ParentWnd, params);
  syncTabs(ParentWnd, params);

  gtk_widget_grab_focus(GTK_WIDGET (dsnEditDialog));

  gtk_widget_show_all(dsnEditDialog);

  gtk_main();

  BusyIndicator= FALSE;

  return OkPressed;
}