Commit b97d36d378a49dd3428d034cbd33998d8b8b4918

Authored by Perry Werneck
1 parent 3ceaedc5
Exists in master and in 1 other branch develop

Refactoring settings dialog, adding more gtk doc stuff.

src/dialogs/settingsdialog.c 0 → 100644
@@ -0,0 +1,465 @@ @@ -0,0 +1,465 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 +/**
  31 + * SECTION:V3270FTSettingsDialog
  32 + * @Short_description: A dialog for define/edit file transfer.
  33 + * @Title: V3270FTSettingsDialog
  34 + *
  35 + * The #V3270FTSettingsDialog is a complete dialog box for managing a V3270
  36 + * file transfer queue.
  37 + *
  38 + */
  39 +
  40 + #include <internals.h>
  41 + #include <v3270/filetransfer.h>
  42 + #include "private.h"
  43 +
  44 +/*--[ Widget definition ]----------------------------------------------------------------------------*/
  45 +
  46 + struct _V3270FTSettingsDialog
  47 + {
  48 + GtkDialog parent;
  49 +
  50 + GtkWidget * settings;
  51 +
  52 + H3270 * hSession;
  53 + const void * stHandle;
  54 +
  55 + struct
  56 + {
  57 + GtkWidget * insert;
  58 + GtkWidget * update;
  59 + GtkWidget * remove;
  60 + GtkWidget * reset;
  61 + GtkWidget * begin;
  62 + } button;
  63 +
  64 + struct
  65 + {
  66 + GtkWidget * view;
  67 + GtkWidget * load;
  68 + GtkWidget * save;
  69 + GtkWidget * saveAs;
  70 + } queue;
  71 +
  72 + };
  73 +
  74 + struct _V3270FTSettingsDialogClass
  75 + {
  76 + GtkDialogClass parent_class;
  77 + };
  78 +
  79 + G_DEFINE_TYPE(V3270FTSettingsDialog, V3270FTSettingsDialog, GTK_TYPE_DIALOG);
  80 +
  81 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  82 +
  83 +static void finalize(GObject *object)
  84 +{
  85 + debug("%s",__FUNCTION__);
  86 +
  87 + V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG(object);
  88 +
  89 + if(dialog->hSession && dialog->stHandle)
  90 + {
  91 + lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);
  92 + dialog->stHandle = NULL;
  93 + }
  94 +
  95 + G_OBJECT_CLASS(V3270FTSettingsDialog_parent_class)->finalize(object);
  96 +}
  97 +
  98 +static void V3270FTSettingsDialog_class_init(G_GNUC_UNUSED V3270FTSettingsDialogClass *klass)
  99 +{
  100 + G_OBJECT_CLASS(klass)->finalize = finalize;
  101 +}
  102 +
  103 +void activity_selected(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn G_GNUC_UNUSED(*column), V3270FTSettingsDialog *widget)
  104 +{
  105 + GtkTreeIter iter;
  106 + GtkTreeModel * model = gtk_tree_view_get_model(view);
  107 +
  108 + if(gtk_tree_model_get_iter(model, &iter, path))
  109 + {
  110 + GObject * activity = NULL;
  111 + gtk_tree_model_get(model, &iter, 0, &activity, -1);
  112 + v3270_ft_settings_set_activity(widget->settings,activity);
  113 +
  114 + gtk_widget_set_sensitive(widget->button.update,TRUE);
  115 + gtk_widget_set_sensitive(widget->button.remove,TRUE);
  116 + gtk_widget_set_sensitive(widget->button.reset,TRUE);
  117 +
  118 + }
  119 +
  120 +}
  121 +
  122 +static void validity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean valid, V3270FTSettingsDialog *widget)
  123 +{
  124 + debug("The file transfer settings are now %s",valid ? "valid" : "invalid");
  125 + gtk_widget_set_sensitive(widget->button.insert,valid);
  126 + gtk_widget_set_sensitive(widget->button.update,valid);
  127 +}
  128 +
  129 +static void has_activity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean have_activity, V3270FTSettingsDialog *widget)
  130 +{
  131 + gtk_widget_set_sensitive(widget->button.reset,have_activity);
  132 + gtk_widget_set_sensitive(widget->button.update,have_activity);
  133 + gtk_widget_set_sensitive(widget->button.remove,have_activity);
  134 +}
  135 +
  136 +static void reset_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  137 +{
  138 + v3270_ft_settings_reset(widget->settings);
  139 +}
  140 +
  141 +static void update_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  142 +{
  143 + v3270_ft_settings_update(widget->settings);
  144 + gtk_tree_view_columns_autosize(GTK_TREE_VIEW(widget->queue.view));
  145 +}
  146 +
  147 +static void load_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  148 +{
  149 + v3270_activity_list_load(widget->queue.view);
  150 +}
  151 +
  152 +static void save_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  153 +{
  154 + debug("%s",__FUNCTION__);
  155 + v3270_activity_list_save(widget->queue.view);
  156 +}
  157 +
  158 +static void save_queue_as_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  159 +{
  160 + v3270_activity_list_save_as(widget->queue.view);
  161 +}
  162 +
  163 +static void begin_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  164 +{
  165 + gtk_dialog_response(GTK_DIALOG(widget),GTK_RESPONSE_ACCEPT);
  166 +}
  167 +
  168 +static gboolean v3270_activity_compare_filenames(const GObject *a, const GObject *b)
  169 +{
  170 + if(strcmp(v3270_ft_activity_get_local_filename(a),v3270_ft_activity_get_local_filename(b)))
  171 + return FALSE;
  172 +
  173 + if(strcmp(v3270_ft_activity_get_remote_filename(a),v3270_ft_activity_get_remote_filename(b)))
  174 + return FALSE;
  175 +
  176 + return TRUE;
  177 +}
  178 +
  179 +int v3270_ft_settings_dialog_append_activity(GtkWidget *widget, GObject *activity, GError **error)
  180 +{
  181 + V3270FTSettingsDialog *dialog = GTK_V3270_FT_DIALOG(widget);
  182 +
  183 + GtkTreeIter iter;
  184 + GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->queue.view));
  185 +
  186 + if(gtk_tree_model_get_iter_first(model,&iter))
  187 + {
  188 + do
  189 + {
  190 + GObject * a = NULL;
  191 + gtk_tree_model_get(model, &iter, 0, &a, -1);
  192 +
  193 + if(a && v3270_activity_compare_filenames(activity, a))
  194 + {
  195 + // Activity already exist
  196 + if(error && !*error)
  197 + *error = g_error_new_literal(g_quark_from_static_string(PACKAGE_NAME),EPERM,_("Activity already on the queue"));
  198 +
  199 + return -1;
  200 + }
  201 +
  202 + }
  203 + while(gtk_tree_model_iter_next(model,&iter));
  204 + }
  205 +
  206 + // Not found, insert it.
  207 + v3270_activity_list_append(dialog->queue.view,activity);
  208 +
  209 + return 0;
  210 +}
  211 +
  212 +static void insert_clicked(GtkWidget *button, V3270FTSettingsDialog *widget)
  213 +{
  214 + GtkTreeIter iter;
  215 + GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget->queue.view));
  216 +
  217 + if(gtk_tree_model_get_iter_first(model,&iter))
  218 + {
  219 + do
  220 + {
  221 + GObject * activity = NULL;
  222 + gtk_tree_model_get(model, &iter, 0, &activity, -1);
  223 +
  224 + if(activity && v3270_ft_settings_equals(widget->settings,activity))
  225 + {
  226 + // Activity already exist
  227 + GtkWidget * dialog =
  228 + gtk_message_dialog_new(
  229 + GTK_WINDOW(gtk_widget_get_toplevel(button)),
  230 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  231 + GTK_MESSAGE_ERROR,
  232 + GTK_BUTTONS_CLOSE,
  233 + _("Activity already on the queue")
  234 + );
  235 +
  236 + gtk_message_dialog_format_secondary_text(
  237 + GTK_MESSAGE_DIALOG(dialog),
  238 + _( "You can't add more than one acitivity with the same files.")
  239 + );
  240 +
  241 + gtk_window_set_title(GTK_WINDOW(dialog),_("Can't add activity"));
  242 +
  243 + gtk_dialog_run(GTK_DIALOG(dialog));
  244 + gtk_widget_destroy(dialog);
  245 +
  246 + return;
  247 + }
  248 +
  249 + }
  250 + while(gtk_tree_model_iter_next(model,&iter));
  251 + }
  252 +
  253 + // Not found, insert it.
  254 + v3270_activity_list_append(widget->queue.view,v3270_ft_settings_create_activity(widget->settings));
  255 +
  256 +}
  257 +
  258 +static void remove_clicked(GtkWidget G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  259 +{
  260 + v3270_activity_list_remove(widget->queue.view,v3270_ft_settings_get_activity(widget->settings));
  261 + v3270_ft_settings_set_activity(widget->settings,NULL);
  262 +}
  263 +
  264 +static void enable_queue_save(GtkWidget G_GNUC_UNUSED(*save), gboolean enabled, V3270FTSettingsDialog *widget)
  265 +{
  266 + debug("%s: %s",__FUNCTION__,(enabled ? "Enable" : "Disable"));
  267 + gtk_widget_set_sensitive(widget->queue.save,enabled);
  268 +}
  269 +
  270 +static void V3270FTSettingsDialog_init(V3270FTSettingsDialog *widget)
  271 +{
  272 + widget->settings = v3270_ft_settings_new();
  273 + g_signal_connect(G_OBJECT(widget->settings),"validity",G_CALLBACK(validity_changed),widget);
  274 + g_signal_connect(G_OBJECT(widget->settings),"has-activity",G_CALLBACK(has_activity_changed),widget);
  275 +
  276 + // Does the dialog have header bar?
  277 + GtkHeaderBar * header = v3270_dialog_get_header_bar(GTK_WIDGET(widget));
  278 +
  279 + if(header)
  280 + gtk_header_bar_set_title(header,_( "3270 File transfer"));
  281 + else
  282 + gtk_window_set_title(GTK_WINDOW(widget),_( "3270 File transfer"));
  283 +
  284 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  285 + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(widget))),18);
  286 +
  287 + // Create box
  288 + GtkWidget * container = gtk_box_new(GTK_ORIENTATION_VERTICAL,6);
  289 + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(widget))),container,TRUE,TRUE,0);
  290 +
  291 + // Pack settings widget
  292 + gtk_widget_set_halign(GTK_WIDGET(widget->settings),GTK_ALIGN_START);
  293 + gtk_widget_set_hexpand(GTK_WIDGET(widget->settings),FALSE);
  294 + gtk_widget_set_vexpand(GTK_WIDGET(widget->settings),FALSE);
  295 + gtk_box_pack_start(GTK_BOX(container),widget->settings,FALSE,FALSE,0);
  296 +
  297 + // Create action buttons
  298 + {
  299 + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  300 +
  301 + g_object_set(G_OBJECT(box),"margin-top",6,NULL);
  302 + g_object_set(G_OBJECT(box),"margin-end",6,NULL);
  303 +
  304 + widget->button.reset = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Reset"),FALSE,FALSE,0);
  305 + g_signal_connect(widget->button.reset,"clicked",G_CALLBACK(reset_clicked),widget);
  306 +
  307 + widget->button.update = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Update"),FALSE,FALSE,0);
  308 + g_signal_connect(widget->button.update,"clicked",G_CALLBACK(update_clicked),widget);
  309 +
  310 + widget->button.remove = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Delete"),FALSE,FALSE,0);
  311 + g_signal_connect(widget->button.remove,"clicked",G_CALLBACK(remove_clicked),widget);
  312 +
  313 + widget->button.insert = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Insert"),FALSE,FALSE,0);
  314 + g_signal_connect(widget->button.insert,"clicked",G_CALLBACK(insert_clicked),widget);
  315 +
  316 + gtk_widget_set_sensitive(widget->button.update,FALSE);
  317 + gtk_widget_set_sensitive(widget->button.remove,FALSE);
  318 + gtk_widget_set_sensitive(widget->button.insert,FALSE);
  319 + gtk_widget_set_sensitive(widget->button.reset,FALSE);
  320 +
  321 + gtk_box_pack_start(GTK_BOX(container),box,FALSE,FALSE,0);
  322 +
  323 + }
  324 +
  325 + // Create Transfer queue buttons
  326 + {
  327 + // https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
  328 + widget->queue.load = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_SMALL_TOOLBAR);
  329 + gtk_widget_set_tooltip_markup(widget->queue.load,_("Get transfer queue from file"));
  330 + g_signal_connect(widget->queue.load,"clicked",G_CALLBACK(load_queue_clicked),widget);
  331 +
  332 + widget->queue.save = gtk_button_new_from_icon_name("document-save",GTK_ICON_SIZE_SMALL_TOOLBAR);
  333 + gtk_widget_set_tooltip_markup(widget->queue.save,_("Save transfer queue"));
  334 + g_signal_connect(widget->queue.save,"clicked",G_CALLBACK(save_queue_clicked),widget);
  335 + gtk_widget_set_sensitive(widget->queue.save,FALSE);
  336 +
  337 + widget->queue.saveAs = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_SMALL_TOOLBAR);
  338 + gtk_widget_set_tooltip_markup(widget->queue.saveAs,_("Save transfer queue to file"));
  339 + g_signal_connect(widget->queue.saveAs,"clicked",G_CALLBACK(save_queue_as_clicked),widget);
  340 +
  341 + }
  342 +
  343 + // Create file list view
  344 + {
  345 + widget->queue.view = v3270_activity_list_new();
  346 + gtk_widget_set_tooltip_markup(widget->queue.view,_("Files to transfer"));
  347 + g_signal_connect(G_OBJECT(widget->queue.view),"row-activated",G_CALLBACK(activity_selected),widget);
  348 + g_signal_connect(G_OBJECT(widget->queue.view),"has-file",G_CALLBACK(enable_queue_save),widget);
  349 +
  350 + // Put the view inside a scrolled window.
  351 + GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL);
  352 + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
  353 + gtk_container_add(GTK_CONTAINER(scrolled),widget->queue.view);
  354 + gtk_widget_set_size_request(scrolled,50,150);
  355 +
  356 + gtk_widget_set_vexpand(scrolled,TRUE);
  357 + gtk_widget_set_hexpand(scrolled,TRUE);
  358 +
  359 + if(header)
  360 + {
  361 + debug("Dialog %s header bar","have");
  362 +
  363 + GtkWidget * frame = v3270_dialog_create_frame(scrolled,_("Transfer queue"));
  364 + gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);
  365 +
  366 + widget->button.begin = gtk_button_new_from_icon_name("network-transmit",GTK_ICON_SIZE_SMALL_TOOLBAR);
  367 + g_object_set(G_OBJECT(widget->button.begin),"margin-end",12,NULL);
  368 + g_signal_connect(widget->button.begin,"clicked",G_CALLBACK(begin_clicked),widget);
  369 +
  370 + gtk_header_bar_pack_start(header,widget->button.begin);
  371 + gtk_header_bar_pack_start(header,widget->queue.load);
  372 + gtk_header_bar_pack_start(header,widget->queue.save);
  373 + gtk_header_bar_pack_start(header,widget->queue.saveAs);
  374 +
  375 + }
  376 + else
  377 + {
  378 + debug("Dialog %s header bar","don't have");
  379 +
  380 + GtkWidget * hBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  381 + GtkWidget * frame = v3270_dialog_create_frame(hBox,_("Transfer queue"));
  382 + gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);
  383 +
  384 + GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,6));
  385 + gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(box),FALSE,FALSE,0);
  386 +
  387 + gtk_box_pack_start(box,widget->queue.load,FALSE,FALSE,0);
  388 + gtk_box_pack_start(box,widget->queue.save,FALSE,FALSE,0);
  389 + gtk_box_pack_start(box,widget->queue.saveAs,FALSE,FALSE,0);
  390 +
  391 + gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(scrolled),TRUE,TRUE,0);
  392 +
  393 + gtk_dialog_add_button(GTK_DIALOG (widget),_("_Cancel"),GTK_RESPONSE_CANCEL);
  394 + widget->button.begin = gtk_dialog_add_button(GTK_DIALOG (widget),_("B_egin transfer"),GTK_RESPONSE_ACCEPT);
  395 +
  396 + }
  397 +
  398 + // gtk_widget_set_sensitive(widget->button.begin,FALSE);
  399 + gtk_widget_set_tooltip_markup(widget->button.begin,_("Start transfer"));
  400 + gtk_widget_set_sensitive(widget->button.begin,FALSE);
  401 +
  402 +/*
  403 +#ifdef DEBUG
  404 + GObject * activity = v3270_ft_activity_new();
  405 +
  406 + v3270_ft_activity_set_local_filename(activity,"local---");
  407 + v3270_ft_activity_set_remote_filename(activity,"remote---");
  408 + v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP|LIB3270_FT_OPTION_APPEND|LIB3270_FT_RECORD_FORMAT_VARIABLE);
  409 +
  410 + v3270_activity_list_append(widget->queue.view,activity);
  411 +#endif // DEBUG
  412 +*/
  413 +
  414 + }
  415 +
  416 +
  417 +}
  418 +
  419 +LIB3270_EXPORT GtkWidget * v3270_ft_settings_dialog_new(GtkWidget *parent)
  420 +{
  421 + gboolean use_header;
  422 + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);
  423 +
  424 + GtkWidget * dialog =
  425 + GTK_WIDGET(g_object_new(
  426 + GTK_TYPE_V3270_FT_DIALOG,
  427 + "use-header-bar", (use_header ? 1 : 0),
  428 + NULL
  429 + ));
  430 +
  431 + if(parent)
  432 + {
  433 + gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(parent)));
  434 + gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
  435 + gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
  436 + }
  437 +
  438 + if(GTK_IS_V3270(parent))
  439 + v3270_ft_settings_dialog_set_session(dialog,v3270_get_session(parent));
  440 +
  441 + return dialog;
  442 +}
  443 +
  444 +static void connect_changed(H3270 G_GNUC_UNUSED(*hSession), int state, void *widget)
  445 +{
  446 + V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG( ((GtkWidget *) widget) );
  447 + gtk_widget_set_sensitive(dialog->button.begin,state ? TRUE : FALSE);
  448 +}
  449 +
  450 +LIB3270_EXPORT void v3270_ft_settings_dialog_set_session(GtkWidget *widget, H3270 *hSession)
  451 +{
  452 + V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG(widget);
  453 +
  454 + if(dialog->hSession && dialog->stHandle)
  455 + {
  456 + lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);
  457 + dialog->stHandle = NULL;
  458 + }
  459 +
  460 + dialog->hSession = hSession;
  461 + dialog->stHandle = lib3270_register_schange(hSession,LIB3270_STATE_CONNECT,connect_changed,(void *) widget);
  462 +
  463 + gtk_widget_set_sensitive(dialog->button.begin,lib3270_is_connected(hSession) ? TRUE : FALSE);
  464 +
  465 +}
src/filetransfer/dialog.c
@@ -1,455 +0,0 @@ @@ -1,455 +0,0 @@
1 -/*  
2 - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270  
3 - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a  
4 - * aplicativos mainframe. Registro no INPI sob o nome G3270.  
5 - *  
6 - * Copyright (C) <2008> <Banco do Brasil S.A.>  
7 - *  
8 - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob  
9 - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela  
10 - * Free Software Foundation.  
11 - *  
12 - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER  
13 - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO  
14 - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para  
15 - * obter mais detalhes.  
16 - *  
17 - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este  
18 - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin  
19 - * St, Fifth Floor, Boston, MA 02110-1301 USA  
20 - *  
21 - * Este programa está nomeado como - e possui - linhas de código.  
22 - *  
23 - * Contatos:  
24 - *  
25 - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)  
26 - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)  
27 - *  
28 - */  
29 -  
30 - #include <internals.h>  
31 - #include <v3270/filetransfer.h>  
32 - #include "private.h"  
33 -  
34 -/*--[ Widget definition ]----------------------------------------------------------------------------*/  
35 -  
36 - struct _V3270FTDialog  
37 - {  
38 - GtkDialog parent;  
39 -  
40 - GtkWidget * settings;  
41 -  
42 - H3270 * hSession;  
43 - const void * stHandle;  
44 -  
45 - struct  
46 - {  
47 - GtkWidget * insert;  
48 - GtkWidget * update;  
49 - GtkWidget * remove;  
50 - GtkWidget * reset;  
51 - GtkWidget * begin;  
52 - } button;  
53 -  
54 - struct  
55 - {  
56 - GtkWidget * view;  
57 - GtkWidget * load;  
58 - GtkWidget * save;  
59 - GtkWidget * saveAs;  
60 - } queue;  
61 -  
62 - };  
63 -  
64 - struct _V3270FTDialogClass  
65 - {  
66 - GtkDialogClass parent_class;  
67 - };  
68 -  
69 - G_DEFINE_TYPE(V3270FTDialog, V3270FTDialog, GTK_TYPE_DIALOG);  
70 -  
71 -/*--[ Implement ]------------------------------------------------------------------------------------*/  
72 -  
73 -static void finalize(GObject *object)  
74 -{  
75 - debug("%s",__FUNCTION__);  
76 -  
77 - V3270FTDialog * dialog = GTK_V3270_FT_DIALOG(object);  
78 -  
79 - if(dialog->hSession && dialog->stHandle)  
80 - {  
81 - lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);  
82 - dialog->stHandle = NULL;  
83 - }  
84 -  
85 - G_OBJECT_CLASS(V3270FTDialog_parent_class)->finalize(object);  
86 -}  
87 -  
88 -static void V3270FTDialog_class_init(G_GNUC_UNUSED V3270FTDialogClass *klass)  
89 -{  
90 - G_OBJECT_CLASS(klass)->finalize = finalize;  
91 -}  
92 -  
93 -void activity_selected(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn G_GNUC_UNUSED(*column), V3270FTDialog *widget)  
94 -{  
95 - GtkTreeIter iter;  
96 - GtkTreeModel * model = gtk_tree_view_get_model(view);  
97 -  
98 - if(gtk_tree_model_get_iter(model, &iter, path))  
99 - {  
100 - GObject * activity = NULL;  
101 - gtk_tree_model_get(model, &iter, 0, &activity, -1);  
102 - v3270_ft_settings_set_activity(widget->settings,activity);  
103 -  
104 - gtk_widget_set_sensitive(widget->button.update,TRUE);  
105 - gtk_widget_set_sensitive(widget->button.remove,TRUE);  
106 - gtk_widget_set_sensitive(widget->button.reset,TRUE);  
107 -  
108 - }  
109 -  
110 -}  
111 -  
112 -static void validity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean valid, V3270FTDialog *widget)  
113 -{  
114 - debug("The file transfer settings are now %s",valid ? "valid" : "invalid");  
115 - gtk_widget_set_sensitive(widget->button.insert,valid);  
116 - gtk_widget_set_sensitive(widget->button.update,valid);  
117 -}  
118 -  
119 -static void has_activity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean have_activity, V3270FTDialog *widget)  
120 -{  
121 - gtk_widget_set_sensitive(widget->button.reset,have_activity);  
122 - gtk_widget_set_sensitive(widget->button.update,have_activity);  
123 - gtk_widget_set_sensitive(widget->button.remove,have_activity);  
124 -}  
125 -  
126 -static void reset_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
127 -{  
128 - v3270_ft_settings_reset(widget->settings);  
129 -}  
130 -  
131 -static void update_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
132 -{  
133 - v3270_ft_settings_update(widget->settings);  
134 - gtk_tree_view_columns_autosize(GTK_TREE_VIEW(widget->queue.view));  
135 -}  
136 -  
137 -static void load_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
138 -{  
139 - v3270_activity_list_load(widget->queue.view);  
140 -}  
141 -  
142 -static void save_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
143 -{  
144 - debug("%s",__FUNCTION__);  
145 - v3270_activity_list_save(widget->queue.view);  
146 -}  
147 -  
148 -static void save_queue_as_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
149 -{  
150 - v3270_activity_list_save_as(widget->queue.view);  
151 -}  
152 -  
153 -static void begin_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
154 -{  
155 - gtk_dialog_response(GTK_DIALOG(widget),GTK_RESPONSE_ACCEPT);  
156 -}  
157 -  
158 -static gboolean v3270_activity_compare_filenames(const GObject *a, const GObject *b)  
159 -{  
160 - if(strcmp(v3270_ft_activity_get_local_filename(a),v3270_ft_activity_get_local_filename(b)))  
161 - return FALSE;  
162 -  
163 - if(strcmp(v3270_ft_activity_get_remote_filename(a),v3270_ft_activity_get_remote_filename(b)))  
164 - return FALSE;  
165 -  
166 - return TRUE;  
167 -}  
168 -  
169 -int v3270_ft_dialog_append_activity(GtkWidget *widget, GObject *activity, GError **error)  
170 -{  
171 - V3270FTDialog *dialog = GTK_V3270_FT_DIALOG(widget);  
172 -  
173 - GtkTreeIter iter;  
174 - GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->queue.view));  
175 -  
176 - if(gtk_tree_model_get_iter_first(model,&iter))  
177 - {  
178 - do  
179 - {  
180 - GObject * a = NULL;  
181 - gtk_tree_model_get(model, &iter, 0, &a, -1);  
182 -  
183 - if(a && v3270_activity_compare_filenames(activity, a))  
184 - {  
185 - // Activity already exist  
186 - if(error && !*error)  
187 - *error = g_error_new_literal(g_quark_from_static_string(PACKAGE_NAME),EPERM,_("Activity already on the queue"));  
188 -  
189 - return -1;  
190 - }  
191 -  
192 - }  
193 - while(gtk_tree_model_iter_next(model,&iter));  
194 - }  
195 -  
196 - // Not found, insert it.  
197 - v3270_activity_list_append(dialog->queue.view,activity);  
198 -  
199 - return 0;  
200 -}  
201 -  
202 -static void insert_clicked(GtkWidget *button, V3270FTDialog *widget)  
203 -{  
204 - GtkTreeIter iter;  
205 - GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget->queue.view));  
206 -  
207 - if(gtk_tree_model_get_iter_first(model,&iter))  
208 - {  
209 - do  
210 - {  
211 - GObject * activity = NULL;  
212 - gtk_tree_model_get(model, &iter, 0, &activity, -1);  
213 -  
214 - if(activity && v3270_ft_settings_equals(widget->settings,activity))  
215 - {  
216 - // Activity already exist  
217 - GtkWidget * dialog =  
218 - gtk_message_dialog_new(  
219 - GTK_WINDOW(gtk_widget_get_toplevel(button)),  
220 - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,  
221 - GTK_MESSAGE_ERROR,  
222 - GTK_BUTTONS_CLOSE,  
223 - _("Activity already on the queue")  
224 - );  
225 -  
226 - gtk_message_dialog_format_secondary_text(  
227 - GTK_MESSAGE_DIALOG(dialog),  
228 - _( "You can't add more than one acitivity with the same files.")  
229 - );  
230 -  
231 - gtk_window_set_title(GTK_WINDOW(dialog),_("Can't add activity"));  
232 -  
233 - gtk_dialog_run(GTK_DIALOG(dialog));  
234 - gtk_widget_destroy(dialog);  
235 -  
236 - return;  
237 - }  
238 -  
239 - }  
240 - while(gtk_tree_model_iter_next(model,&iter));  
241 - }  
242 -  
243 - // Not found, insert it.  
244 - v3270_activity_list_append(widget->queue.view,v3270_ft_settings_create_activity(widget->settings));  
245 -  
246 -}  
247 -  
248 -static void remove_clicked(GtkWidget G_GNUC_UNUSED(*button), V3270FTDialog *widget)  
249 -{  
250 - v3270_activity_list_remove(widget->queue.view,v3270_ft_settings_get_activity(widget->settings));  
251 - v3270_ft_settings_set_activity(widget->settings,NULL);  
252 -}  
253 -  
254 -static void enable_queue_save(GtkWidget G_GNUC_UNUSED(*save), gboolean enabled, V3270FTDialog *widget)  
255 -{  
256 - debug("%s: %s",__FUNCTION__,(enabled ? "Enable" : "Disable"));  
257 - gtk_widget_set_sensitive(widget->queue.save,enabled);  
258 -}  
259 -  
260 -static void V3270FTDialog_init(V3270FTDialog *widget)  
261 -{  
262 - widget->settings = v3270_ft_settings_new();  
263 - g_signal_connect(G_OBJECT(widget->settings),"validity",G_CALLBACK(validity_changed),widget);  
264 - g_signal_connect(G_OBJECT(widget->settings),"has-activity",G_CALLBACK(has_activity_changed),widget);  
265 -  
266 - // Does the dialog have header bar?  
267 - GtkHeaderBar * header = v3270_dialog_get_header_bar(GTK_WIDGET(widget));  
268 -  
269 - if(header)  
270 - gtk_header_bar_set_title(header,_( "3270 File transfer"));  
271 - else  
272 - gtk_window_set_title(GTK_WINDOW(widget),_( "3270 File transfer"));  
273 -  
274 - // https://developer.gnome.org/hig/stable/visual-layout.html.en  
275 - gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(widget))),18);  
276 -  
277 - // Create box  
278 - GtkWidget * container = gtk_box_new(GTK_ORIENTATION_VERTICAL,6);  
279 - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(widget))),container,TRUE,TRUE,0);  
280 -  
281 - // Pack settings widget  
282 - gtk_widget_set_halign(GTK_WIDGET(widget->settings),GTK_ALIGN_START);  
283 - gtk_widget_set_hexpand(GTK_WIDGET(widget->settings),FALSE);  
284 - gtk_widget_set_vexpand(GTK_WIDGET(widget->settings),FALSE);  
285 - gtk_box_pack_start(GTK_BOX(container),widget->settings,FALSE,FALSE,0);  
286 -  
287 - // Create action buttons  
288 - {  
289 - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);  
290 -  
291 - g_object_set(G_OBJECT(box),"margin-top",6,NULL);  
292 - g_object_set(G_OBJECT(box),"margin-end",6,NULL);  
293 -  
294 - widget->button.reset = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Reset"),FALSE,FALSE,0);  
295 - g_signal_connect(widget->button.reset,"clicked",G_CALLBACK(reset_clicked),widget);  
296 -  
297 - widget->button.update = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Update"),FALSE,FALSE,0);  
298 - g_signal_connect(widget->button.update,"clicked",G_CALLBACK(update_clicked),widget);  
299 -  
300 - widget->button.remove = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Delete"),FALSE,FALSE,0);  
301 - g_signal_connect(widget->button.remove,"clicked",G_CALLBACK(remove_clicked),widget);  
302 -  
303 - widget->button.insert = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Insert"),FALSE,FALSE,0);  
304 - g_signal_connect(widget->button.insert,"clicked",G_CALLBACK(insert_clicked),widget);  
305 -  
306 - gtk_widget_set_sensitive(widget->button.update,FALSE);  
307 - gtk_widget_set_sensitive(widget->button.remove,FALSE);  
308 - gtk_widget_set_sensitive(widget->button.insert,FALSE);  
309 - gtk_widget_set_sensitive(widget->button.reset,FALSE);  
310 -  
311 - gtk_box_pack_start(GTK_BOX(container),box,FALSE,FALSE,0);  
312 -  
313 - }  
314 -  
315 - // Create Transfer queue buttons  
316 - {  
317 - // https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html  
318 - widget->queue.load = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_SMALL_TOOLBAR);  
319 - gtk_widget_set_tooltip_markup(widget->queue.load,_("Get transfer queue from file"));  
320 - g_signal_connect(widget->queue.load,"clicked",G_CALLBACK(load_queue_clicked),widget);  
321 -  
322 - widget->queue.save = gtk_button_new_from_icon_name("document-save",GTK_ICON_SIZE_SMALL_TOOLBAR);  
323 - gtk_widget_set_tooltip_markup(widget->queue.save,_("Save transfer queue"));  
324 - g_signal_connect(widget->queue.save,"clicked",G_CALLBACK(save_queue_clicked),widget);  
325 - gtk_widget_set_sensitive(widget->queue.save,FALSE);  
326 -  
327 - widget->queue.saveAs = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_SMALL_TOOLBAR);  
328 - gtk_widget_set_tooltip_markup(widget->queue.saveAs,_("Save transfer queue to file"));  
329 - g_signal_connect(widget->queue.saveAs,"clicked",G_CALLBACK(save_queue_as_clicked),widget);  
330 -  
331 - }  
332 -  
333 - // Create file list view  
334 - {  
335 - widget->queue.view = v3270_activity_list_new();  
336 - gtk_widget_set_tooltip_markup(widget->queue.view,_("Files to transfer"));  
337 - g_signal_connect(G_OBJECT(widget->queue.view),"row-activated",G_CALLBACK(activity_selected),widget);  
338 - g_signal_connect(G_OBJECT(widget->queue.view),"has-file",G_CALLBACK(enable_queue_save),widget);  
339 -  
340 - // Put the view inside a scrolled window.  
341 - GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL);  
342 - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);  
343 - gtk_container_add(GTK_CONTAINER(scrolled),widget->queue.view);  
344 - gtk_widget_set_size_request(scrolled,50,150);  
345 -  
346 - gtk_widget_set_vexpand(scrolled,TRUE);  
347 - gtk_widget_set_hexpand(scrolled,TRUE);  
348 -  
349 - if(header)  
350 - {  
351 - debug("Dialog %s header bar","have");  
352 -  
353 - GtkWidget * frame = v3270_dialog_create_frame(scrolled,_("Transfer queue"));  
354 - gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);  
355 -  
356 - widget->button.begin = gtk_button_new_from_icon_name("network-transmit",GTK_ICON_SIZE_SMALL_TOOLBAR);  
357 - g_object_set(G_OBJECT(widget->button.begin),"margin-end",12,NULL);  
358 - g_signal_connect(widget->button.begin,"clicked",G_CALLBACK(begin_clicked),widget);  
359 -  
360 - gtk_header_bar_pack_start(header,widget->button.begin);  
361 - gtk_header_bar_pack_start(header,widget->queue.load);  
362 - gtk_header_bar_pack_start(header,widget->queue.save);  
363 - gtk_header_bar_pack_start(header,widget->queue.saveAs);  
364 -  
365 - }  
366 - else  
367 - {  
368 - debug("Dialog %s header bar","don't have");  
369 -  
370 - GtkWidget * hBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);  
371 - GtkWidget * frame = v3270_dialog_create_frame(hBox,_("Transfer queue"));  
372 - gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);  
373 -  
374 - GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,6));  
375 - gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(box),FALSE,FALSE,0);  
376 -  
377 - gtk_box_pack_start(box,widget->queue.load,FALSE,FALSE,0);  
378 - gtk_box_pack_start(box,widget->queue.save,FALSE,FALSE,0);  
379 - gtk_box_pack_start(box,widget->queue.saveAs,FALSE,FALSE,0);  
380 -  
381 - gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(scrolled),TRUE,TRUE,0);  
382 -  
383 - gtk_dialog_add_button(GTK_DIALOG (widget),_("_Cancel"),GTK_RESPONSE_CANCEL);  
384 - widget->button.begin = gtk_dialog_add_button(GTK_DIALOG (widget),_("B_egin transfer"),GTK_RESPONSE_ACCEPT);  
385 -  
386 - }  
387 -  
388 - // gtk_widget_set_sensitive(widget->button.begin,FALSE);  
389 - gtk_widget_set_tooltip_markup(widget->button.begin,_("Start transfer"));  
390 - gtk_widget_set_sensitive(widget->button.begin,FALSE);  
391 -  
392 -/*  
393 -#ifdef DEBUG  
394 - GObject * activity = v3270_ft_activity_new();  
395 -  
396 - v3270_ft_activity_set_local_filename(activity,"local---");  
397 - v3270_ft_activity_set_remote_filename(activity,"remote---");  
398 - v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP|LIB3270_FT_OPTION_APPEND|LIB3270_FT_RECORD_FORMAT_VARIABLE);  
399 -  
400 - v3270_activity_list_append(widget->queue.view,activity);  
401 -#endif // DEBUG  
402 -*/  
403 -  
404 - }  
405 -  
406 -  
407 -}  
408 -  
409 -LIB3270_EXPORT GtkWidget * v3270_ft_dialog_new(GtkWidget *parent)  
410 -{  
411 - gboolean use_header;  
412 - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);  
413 -  
414 - GtkWidget * dialog =  
415 - GTK_WIDGET(g_object_new(  
416 - GTK_TYPE_V3270_FT_DIALOG,  
417 - "use-header-bar", (use_header ? 1 : 0),  
418 - NULL  
419 - ));  
420 -  
421 - if(parent)  
422 - {  
423 - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(parent)));  
424 - gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);  
425 - gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);  
426 - }  
427 -  
428 - if(GTK_IS_V3270(parent))  
429 - v3270_ft_dialog_set_session(dialog,v3270_get_session(parent));  
430 -  
431 - return dialog;  
432 -}  
433 -  
434 -static void connect_changed(H3270 G_GNUC_UNUSED(*hSession), int state, void *widget)  
435 -{  
436 - V3270FTDialog * dialog = GTK_V3270_FT_DIALOG( ((GtkWidget *) widget) );  
437 - gtk_widget_set_sensitive(dialog->button.begin,state ? TRUE : FALSE);  
438 -}  
439 -  
440 -LIB3270_EXPORT void v3270_ft_dialog_set_session(GtkWidget *widget, H3270 *hSession)  
441 -{  
442 - V3270FTDialog * dialog = GTK_V3270_FT_DIALOG(widget);  
443 -  
444 - if(dialog->hSession && dialog->stHandle)  
445 - {  
446 - lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);  
447 - dialog->stHandle = NULL;  
448 - }  
449 -  
450 - dialog->hSession = hSession;  
451 - dialog->stHandle = lib3270_register_schange(hSession,LIB3270_STATE_CONNECT,connect_changed,(void *) widget);  
452 -  
453 - gtk_widget_set_sensitive(dialog->button.begin,lib3270_is_connected(hSession) ? TRUE : FALSE);  
454 -  
455 -}  
src/include/v3270/filetransfer.h
@@ -132,19 +132,19 @@ @@ -132,19 +132,19 @@
132 LIB3270_EXPORT H3270FT * v3270_ft_activity_begin_transfer(GObject * object, H3270 *hSession, const char **message); 132 LIB3270_EXPORT H3270FT * v3270_ft_activity_begin_transfer(GObject * object, H3270 *hSession, const char **message);
133 133
134 // FT Dialog widget 134 // FT Dialog widget
135 - #define GTK_TYPE_V3270_FT_DIALOG (V3270FTDialog_get_type ())  
136 - #define GTK_V3270_FT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_FT_DIALOG, V3270FTDialog))  
137 - #define GTK_V3270_FT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_FT_DIALOG, V3270FTDialogClass)) 135 + #define GTK_TYPE_V3270_FT_DIALOG (V3270FTSettingsDialog_get_type ())
  136 + #define GTK_V3270_FT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_FT_DIALOG, V3270FTSettingsDialog))
  137 + #define GTK_v3270_ft_settings_dialog_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_FT_DIALOG, V3270FTSettingsDialogClass))
138 #define GTK_IS_V3270_FT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_FT_DIALOG)) 138 #define GTK_IS_V3270_FT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_FT_DIALOG))
139 - #define GTK_IS_V3270_FT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270_FT_DIALOG))  
140 - #define GTK_V3270_FT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270_FT_DIALOG, V3270FTDialogClass)) 139 + #define GTK_IS_v3270_ft_settings_dialog_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270_FT_DIALOG))
  140 + #define GTK_v3270_ft_settings_dialog_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270_FT_DIALOG, V3270FTSettingsDialogClass))
141 141
142 - typedef struct _V3270FTDialog V3270FTDialog;  
143 - typedef struct _V3270FTDialogClass V3270FTDialogClass; 142 + typedef struct _V3270FTSettingsDialog V3270FTSettingsDialog;
  143 + typedef struct _V3270FTSettingsDialogClass V3270FTSettingsDialogClass;
144 144
145 - LIB3270_EXPORT GtkWidget * v3270_ft_dialog_new(GtkWidget *parent);  
146 - LIB3270_EXPORT void v3270_ft_dialog_set_session(GtkWidget *widget, H3270 *hSession);  
147 - LIB3270_EXPORT int v3270_ft_dialog_append_activity(GtkWidget *widget, GObject *activity, GError **error); 145 + LIB3270_EXPORT GtkWidget * v3270_ft_settings_dialog_new(GtkWidget *parent);
  146 + LIB3270_EXPORT void v3270_ft_settings_dialog_set_session(GtkWidget *widget, H3270 *hSession);
  147 + LIB3270_EXPORT int v3270_ft_settings_dialog_append_activity(GtkWidget *widget, GObject *activity, GError **error);
148 148
149 G_END_DECLS 149 G_END_DECLS
150 150
src/testprogram/testprogram.c
@@ -162,8 +162,8 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) @@ -162,8 +162,8 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
162 // 162 //
163 // Test settings dialog 163 // Test settings dialog
164 // 164 //
165 - GtkWidget * dialog = v3270_ft_dialog_new(terminal);  
166 - v3270_ft_dialog_append_activity(dialog,activity,NULL); 165 + GtkWidget * dialog = v3270_ft_settings_dialog_new(terminal);
  166 + v3270_ft_settings_dialog_append_activity(dialog,activity,NULL);
167 */ 167 */
168 168
169 // 169 //
@@ -72,6 +72,9 @@ @@ -72,6 +72,9 @@
72 <Unit filename="src/dialogs/security.c"> 72 <Unit filename="src/dialogs/security.c">
73 <Option compilerVar="CC" /> 73 <Option compilerVar="CC" />
74 </Unit> 74 </Unit>
  75 + <Unit filename="src/dialogs/settingsdialog.c">
  76 + <Option compilerVar="CC" />
  77 + </Unit>
75 <Unit filename="src/dialogs/tools.c"> 78 <Unit filename="src/dialogs/tools.c">
76 <Option compilerVar="CC" /> 79 <Option compilerVar="CC" />
77 </Unit> 80 </Unit>
@@ -81,9 +84,6 @@ @@ -81,9 +84,6 @@
81 <Unit filename="src/filetransfer/activitylist.c"> 84 <Unit filename="src/filetransfer/activitylist.c">
82 <Option compilerVar="CC" /> 85 <Option compilerVar="CC" />
83 </Unit> 86 </Unit>
84 - <Unit filename="src/filetransfer/dialog.c">  
85 - <Option compilerVar="CC" />  
86 - </Unit>  
87 <Unit filename="src/filetransfer/filelist.c"> 87 <Unit filename="src/filetransfer/filelist.c">
88 <Option compilerVar="CC" /> 88 <Option compilerVar="CC" />
89 </Unit> 89 </Unit>