Commit 04a2ace804477886338b119b1969ae7592ca502b
1 parent
7abe674b
Exists in
master
and in
5 other branches
Ativando opção para salvamento do buffer do terminal em um arquivo texto
Showing
5 changed files
with
60 additions
and
3 deletions
Show diff stats
src/gtk/dialog.c
| @@ -194,8 +194,21 @@ | @@ -194,8 +194,21 @@ | ||
| 194 | 194 | ||
| 195 | void save_all_action(GtkAction *action, GtkWidget *widget) | 195 | void save_all_action(GtkAction *action, GtkWidget *widget) |
| 196 | { | 196 | { |
| 197 | + gchar *text = v3270_get_text(widget); | ||
| 198 | + | ||
| 197 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | 199 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); |
| 198 | 200 | ||
| 201 | + if(!text) | ||
| 202 | + return; | ||
| 203 | + | ||
| 204 | + save_dialog( action, | ||
| 205 | + widget, | ||
| 206 | + N_( "Save screen to file" ), | ||
| 207 | + N_( "Can't save screen to file \n%s" ), | ||
| 208 | + text); | ||
| 209 | + | ||
| 210 | + g_free(text); | ||
| 211 | + | ||
| 199 | } | 212 | } |
| 200 | 213 | ||
| 201 | void save_selected_action(GtkAction *action, GtkWidget *widget) | 214 | void save_selected_action(GtkAction *action, GtkWidget *widget) |
src/gtk/v3270/clipboard.c
| @@ -75,6 +75,27 @@ static void clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection, | @@ -75,6 +75,27 @@ static void clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection, | ||
| 75 | } | 75 | } |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | +gchar * v3270_get_text(GtkWidget *widget) | ||
| 79 | +{ | ||
| 80 | + v3270 * terminal; | ||
| 81 | + gchar * text; | ||
| 82 | + char * str; | ||
| 83 | + | ||
| 84 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | ||
| 85 | + | ||
| 86 | + terminal = GTK_V3270(widget); | ||
| 87 | + | ||
| 88 | + str = lib3270_get_text(terminal->host); | ||
| 89 | + | ||
| 90 | + if(!str) | ||
| 91 | + return NULL; | ||
| 92 | + | ||
| 93 | + text = g_convert(str, -1, "UTF-8", lib3270_get_charset(terminal->host), NULL, NULL, NULL); | ||
| 94 | + | ||
| 95 | + free(str); | ||
| 96 | + return text; | ||
| 97 | +} | ||
| 98 | + | ||
| 78 | const gchar * v3270_get_selected_text(GtkWidget *widget) | 99 | const gchar * v3270_get_selected_text(GtkWidget *widget) |
| 79 | { | 100 | { |
| 80 | v3270 *terminal; | 101 | v3270 *terminal; |
src/gtk/v3270/v3270.h
| @@ -202,6 +202,7 @@ | @@ -202,6 +202,7 @@ | ||
| 202 | 202 | ||
| 203 | // Clipboard | 203 | // Clipboard |
| 204 | const gchar * v3270_get_selected_text(GtkWidget *widget); | 204 | const gchar * v3270_get_selected_text(GtkWidget *widget); |
| 205 | + gchar * v3270_get_text(GtkWidget *widget); | ||
| 205 | void v3270_copy_clipboard(GtkWidget *widget); | 206 | void v3270_copy_clipboard(GtkWidget *widget); |
| 206 | void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding); | 207 | void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding); |
| 207 | void v3270_paste_clipboard(GtkWidget *widget); | 208 | void v3270_paste_clipboard(GtkWidget *widget); |
src/include/lib3270.h
| @@ -637,6 +637,15 @@ | @@ -637,6 +637,15 @@ | ||
| 637 | */ | 637 | */ |
| 638 | LIB3270_EXPORT char * lib3270_get_selected(H3270 *h); | 638 | LIB3270_EXPORT char * lib3270_get_selected(H3270 *h); |
| 639 | 639 | ||
| 640 | + /** | ||
| 641 | + * Get all text inside the terminal. | ||
| 642 | + * | ||
| 643 | + * @param h Session Handle. | ||
| 644 | + * | ||
| 645 | + * @return All text if available, or NULL. Release it with free() | ||
| 646 | + * | ||
| 647 | + */ | ||
| 648 | + LIB3270_EXPORT char * lib3270_get_text(H3270 *h); | ||
| 640 | 649 | ||
| 641 | LIB3270_EXPORT int lib3270_set_model(H3270 *session, int model); | 650 | LIB3270_EXPORT int lib3270_set_model(H3270 *session, int model); |
| 642 | LIB3270_EXPORT int lib3270_get_model(H3270 *session); | 651 | LIB3270_EXPORT int lib3270_get_model(H3270 *session); |
src/lib3270/selection.c
| @@ -313,13 +313,13 @@ LIB3270_ACTION( reselect ) | @@ -313,13 +313,13 @@ LIB3270_ACTION( reselect ) | ||
| 313 | return 0; | 313 | return 0; |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | -LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) | 316 | +static char * get_text(H3270 *hSession,unsigned char all) |
| 317 | { | 317 | { |
| 318 | int row, col, baddr; | 318 | int row, col, baddr; |
| 319 | char *ret; | 319 | char *ret; |
| 320 | size_t sz = 0; | 320 | size_t sz = 0; |
| 321 | 321 | ||
| 322 | - if(!hSession->selected || hSession->select.begin == hSession->select.end) | 322 | + if(!lib3270_connected(hSession)) |
| 323 | return NULL; | 323 | return NULL; |
| 324 | 324 | ||
| 325 | ret = malloc(hSession->rows * (hSession->cols+1)); | 325 | ret = malloc(hSession->rows * (hSession->cols+1)); |
| @@ -331,7 +331,7 @@ LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) | @@ -331,7 +331,7 @@ LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) | ||
| 331 | 331 | ||
| 332 | for(col = 0; col < hSession->cols;col++) | 332 | for(col = 0; col < hSession->cols;col++) |
| 333 | { | 333 | { |
| 334 | - if(hSession->text[baddr].attr & LIB3270_ATTR_SELECTED) | 334 | + if(all || hSession->text[baddr].attr & LIB3270_ATTR_SELECTED) |
| 335 | { | 335 | { |
| 336 | cr++; | 336 | cr++; |
| 337 | ret[sz++] = hSession->text[baddr].chr; | 337 | ret[sz++] = hSession->text[baddr].chr; |
| @@ -347,6 +347,19 @@ LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) | @@ -347,6 +347,19 @@ LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) | ||
| 347 | return realloc(ret,sz+1); | 347 | return realloc(ret,sz+1); |
| 348 | } | 348 | } |
| 349 | 349 | ||
| 350 | +LIB3270_EXPORT char * lib3270_get_text(H3270 *hSession) | ||
| 351 | +{ | ||
| 352 | + return get_text(hSession,1); | ||
| 353 | +} | ||
| 354 | + | ||
| 355 | +LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) | ||
| 356 | +{ | ||
| 357 | + if(!hSession->selected || hSession->select.begin == hSession->select.end) | ||
| 358 | + return NULL; | ||
| 359 | + | ||
| 360 | + return get_text(hSession,0); | ||
| 361 | +} | ||
| 362 | + | ||
| 350 | LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir) | 363 | LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir) |
| 351 | { | 364 | { |
| 352 | if(!hSession->selected || hSession->select.begin == hSession->select.end) | 365 | if(!hSession->selected || hSession->select.begin == hSession->select.end) |