Commit ab6bc6dc8daec59f27bbed446ebe38b08dcee824

Authored by perry.werneck@gmail.com
1 parent a282480c

Implementando ação pastefile em windows

Showing 1 changed file with 112 additions and 6 deletions   Show diff stats
src/gtk/dialog.c
... ... @@ -132,12 +132,6 @@
132 132 }
133 133 }
134 134  
135   - void paste_file_action(GtkAction *action, GtkWidget *widget)
136   - {
137   - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
138   -
139   - }
140   -
141 135 void hostname_action(GtkAction *action, GtkWidget *widget)
142 136 {
143 137 const gchar * title = g_object_get_data(G_OBJECT(action),"title");
... ... @@ -281,3 +275,115 @@
281 275 N_( "Can't save copy to file\n%s" ),
282 276 v3270_get_copy(widget));
283 277 }
  278 +
  279 + static void paste_filename(GtkWidget *widget, const gchar *filename, const gchar *encoding)
  280 + {
  281 + GError *error = NULL;
  282 + gchar *text = NULL;
  283 +
  284 + trace("Loading \"%s\"",filename);
  285 +
  286 + if(!g_file_get_contents(filename,&text,NULL,&error))
  287 + {
  288 + GtkWidget *popup = gtk_message_dialog_new_with_markup(
  289 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  290 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  291 + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
  292 + _( "Error loading %s" ),filename);
  293 +
  294 + gtk_window_set_title(GTK_WINDOW(popup),_("Can´t load file"));
  295 +
  296 + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",error->message);
  297 + g_error_free(error);
  298 +
  299 + gtk_dialog_run(GTK_DIALOG(popup));
  300 + gtk_widget_destroy(popup);
  301 +
  302 + }
  303 +
  304 + if(text)
  305 + {
  306 + v3270_paste_string(widget,text,encoding);
  307 + g_free(text);
  308 + }
  309 +
  310 + }
  311 +
  312 + static void add_encoding(GtkWidget *widget, const gchar **attr)
  313 + {
  314 +// GtkWidget *box;
  315 +// GtkWidget *combo;
  316 + const gchar **charset = NULL;
  317 +// int f;
  318 +
  319 + if(g_get_filename_charsets(&charset))
  320 + {
  321 + *attr = "UTF-8";
  322 + return;
  323 + }
  324 +
  325 +#ifdef WIN32
  326 +
  327 + #warning Confirmar necessidade em windows
  328 +
  329 + box = gtk_hbox_new(FALSE,2);
  330 + combo = gtk_combo_box_text_new();
  331 +
  332 + gtk_box_pack_start(GTK_BOX(box),gtk_label_new(_("Encoding:")),FALSE,FALSE,0);
  333 + gtk_box_pack_start(GTK_BOX(box),combo,FALSE,FALSE,0);
  334 +
  335 + gtk_widget_show_all(box);
  336 + gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(widget),box);
  337 +
  338 +#endif
  339 +}
  340 +
  341 + void paste_file_action(GtkAction *action, GtkWidget *widget)
  342 + {
  343 + const gchar * user_title = g_object_get_data(G_OBJECT(action),"title");
  344 + const gchar * filename = g_object_get_data(G_OBJECT(action),"filename");
  345 + const gchar * encattr = g_object_get_data(G_OBJECT(action),"encoding");
  346 + GtkWidget * dialog;
  347 + gchar * ptr;
  348 +
  349 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  350 +
  351 + if(filename)
  352 + {
  353 + paste_filename(widget,filename,encattr ? encattr : "UTF-8");
  354 + return;
  355 + }
  356 +
  357 + dialog = gtk_file_chooser_dialog_new( gettext(user_title ? user_title : N_( "Paste text file contents" )),
  358 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  359 + GTK_FILE_CHOOSER_ACTION_OPEN,
  360 + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
  361 + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
  362 + NULL );
  363 +
  364 + if(!encattr)
  365 + add_encoding(dialog, &encattr);
  366 +
  367 + ptr = get_string_from_config("load",gtk_action_get_name(action),"");
  368 + if(*ptr)
  369 + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),ptr);
  370 + g_free(ptr);
  371 +
  372 + if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT)
  373 + {
  374 + gtk_widget_destroy(dialog);
  375 + return;
  376 + }
  377 +
  378 + ptr = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
  379 +
  380 + gtk_widget_destroy(dialog);
  381 +
  382 + if(ptr)
  383 + {
  384 + set_string_to_config("load",gtk_action_get_name(action),"%s",ptr);
  385 + paste_filename(widget,ptr,encattr);
  386 + g_free(ptr);
  387 + }
  388 + }
  389 +
... ...