Commit 057233e1f21337281df2f208c56e916edcd54e6d

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

Finishing the new "save" dialog.

src/dialogs/save/save.c
@@ -335,6 +335,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon @@ -335,6 +335,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon
335 switch(dialog->mode) 335 switch(dialog->mode)
336 { 336 {
337 case LIB3270_CONTENT_ALL: 337 case LIB3270_CONTENT_ALL:
  338 + dynamic = g_new0(GList,1);
  339 + dynamic->data = (gpointer) lib3270_get_selection(v3270_get_session(dialog->terminal),0,1);
  340 + selection = dynamic;
338 break; 341 break;
339 342
340 case LIB3270_CONTENT_COPY: 343 case LIB3270_CONTENT_COPY:
@@ -343,7 +346,7 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon @@ -343,7 +346,7 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon
343 346
344 case LIB3270_CONTENT_SELECTED: 347 case LIB3270_CONTENT_SELECTED:
345 dynamic = g_new0(GList,1); 348 dynamic = g_new0(GList,1);
346 - dynamic->data = (gpointer) lib3270_get_selection(v3270_get_session(dialog->terminal),0); 349 + dynamic->data = (gpointer) lib3270_get_selection(v3270_get_session(dialog->terminal),0,0);
347 selection = dynamic; 350 selection = dynamic;
348 break; 351 break;
349 352
@@ -366,15 +369,15 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon @@ -366,15 +369,15 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon
366 switch(gtk_combo_box_get_active(GTK_COMBO_BOX(dialog->format))) 369 switch(gtk_combo_box_get_active(GTK_COMBO_BOX(dialog->format)))
367 { 370 {
368 case 0: // "Plain text" 371 case 0: // "Plain text"
369 - text = v3270_get_selection_as_text(GTK_V3270(dialog->terminal), selection, encoding); 372 + text = v3270_get_selection_as_text(GTK_V3270(dialog->terminal), selection, encoding, dialog->mode == LIB3270_CONTENT_ALL);
370 break; 373 break;
371 374
372 case 1: // "Comma-separated values (CSV)" 375 case 1: // "Comma-separated values (CSV)"
373 - text = v3270_get_selection_as_table(GTK_V3270(dialog->terminal),selection,";",encoding); 376 + text = v3270_get_selection_as_table(GTK_V3270(dialog->terminal),selection,";",encoding, dialog->mode == LIB3270_CONTENT_ALL);
374 break; 377 break;
375 378
376 case 2: // "HyperText Markup Language (HTML)" 379 case 2: // "HyperText Markup Language (HTML)"
377 - text = v3270_get_selection_as_html_div(GTK_V3270(dialog->terminal),selection,encoding); 380 + text = v3270_get_selection_as_html_div(GTK_V3270(dialog->terminal),selection,encoding, dialog->mode == LIB3270_CONTENT_ALL);
378 break; 381 break;
379 382
380 default: 383 default:
src/include/clipboard.h
@@ -87,13 +87,13 @@ @@ -87,13 +87,13 @@
87 87
88 G_GNUC_INTERNAL void v3270_update_system_clipboard(GtkWidget *widget); 88 G_GNUC_INTERNAL void v3270_update_system_clipboard(GtkWidget *widget);
89 G_GNUC_INTERNAL const char * v3270_update_selected_text(GtkWidget *widget, gboolean cut); 89 G_GNUC_INTERNAL const char * v3270_update_selected_text(GtkWidget *widget, gboolean cut);
90 - G_GNUC_INTERNAL GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection); 90 + G_GNUC_INTERNAL GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection, gboolean all);
91 91
92 /// @brief Get contents. 92 /// @brief Get contents.
93 - G_GNUC_INTERNAL gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, const gchar *encoding);  
94 - G_GNUC_INTERNAL gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, const gchar *delimiter, const gchar *encoding);  
95 - G_GNUC_INTERNAL gchar * v3270_get_selection_as_html_div(v3270 * terminal, const GList *selection, const gchar *encoding);  
96 - G_GNUC_INTERNAL gchar * v3270_get_selection_as_html_table(v3270 * terminal, const GList *selection, const gchar *encoding); 93 + G_GNUC_INTERNAL gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, const gchar *encoding, gboolean all);
  94 + G_GNUC_INTERNAL gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, const gchar *delimiter, const gchar *encoding, gboolean all);
  95 + G_GNUC_INTERNAL gchar * v3270_get_selection_as_html_div(v3270 * terminal, const GList *selection, const gchar *encoding, gboolean all);
  96 + G_GNUC_INTERNAL gchar * v3270_get_selection_as_html_table(v3270 * terminal, const GList *selection, const gchar *encoding, gboolean all);
97 97
98 G_GNUC_INTERNAL const GList * v3270_get_selection_blocks(GtkWidget *widget); 98 G_GNUC_INTERNAL const GList * v3270_get_selection_blocks(GtkWidget *widget);
99 99
src/selection/copy.c
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 32
33 static void do_copy(v3270 *terminal, gboolean cut) 33 static void do_copy(v3270 *terminal, gboolean cut)
34 { 34 {
35 - lib3270_selection * selection = lib3270_get_selection(terminal->host,cut); 35 + lib3270_selection * selection = lib3270_get_selection(terminal->host,cut,0);
36 36
37 if(selection) 37 if(selection)
38 { 38 {
src/selection/html.c
@@ -49,7 +49,7 @@ static void get_element_colors(v3270 * terminal, unsigned short attr, gchar **fg @@ -49,7 +49,7 @@ static void get_element_colors(v3270 * terminal, unsigned short attr, gchar **fg
49 } 49 }
50 50
51 /// @brief Get formatted contents as HTML DIV. 51 /// @brief Get formatted contents as HTML DIV.
52 -static gchar * get_as_div(v3270 * terminal, const GList *selection) 52 +static gchar * get_as_div(v3270 * terminal, const GList *selection, gboolean all)
53 { 53 {
54 const GList * element = selection; 54 const GList * element = selection;
55 GString * string = g_string_new(""); 55 GString * string = g_string_new("");
@@ -110,7 +110,7 @@ static gchar * get_as_div(v3270 * terminal, const GList *selection) @@ -110,7 +110,7 @@ static gchar * get_as_div(v3270 * terminal, const GList *selection)
110 110
111 } 111 }
112 112
113 - if(block->contents[src].attribute.visual & LIB3270_ATTR_SELECTED && !isspace(block->contents[src].chr)) 113 + if( (block->contents[src].attribute.visual & LIB3270_ATTR_SELECTED || all) && !isspace(block->contents[src].chr))
114 { 114 {
115 g_string_append_c(string,block->contents[src].chr); 115 g_string_append_c(string,block->contents[src].chr);
116 } 116 }
@@ -144,7 +144,7 @@ static gchar * get_as_div(v3270 * terminal, const GList *selection) @@ -144,7 +144,7 @@ static gchar * get_as_div(v3270 * terminal, const GList *selection)
144 } 144 }
145 145
146 /// @brief Get formatted contents as HTML TABLE. 146 /// @brief Get formatted contents as HTML TABLE.
147 -static gchar * get_as_table(v3270 * terminal, const GList *selection) 147 +static gchar * get_as_table(v3270 * terminal, const GList *selection, gboolean all)
148 { 148 {
149 const GList * element = selection; 149 const GList * element = selection;
150 GString * string = g_string_new("<table><tbody>"); 150 GString * string = g_string_new("<table><tbody>");
@@ -155,7 +155,7 @@ static gchar * get_as_table(v3270 * terminal, const GList *selection) @@ -155,7 +155,7 @@ static gchar * get_as_table(v3270 * terminal, const GList *selection)
155 GList * column; 155 GList * column;
156 156
157 // Get contents 157 // Get contents
158 - GList * columns = v3270_getColumns_from_selection(terminal, selection); 158 + GList * columns = v3270_getColumns_from_selection(terminal, selection, all);
159 159
160 while(element) 160 while(element)
161 { 161 {
@@ -214,15 +214,15 @@ static gchar * get_as_table(v3270 * terminal, const GList *selection) @@ -214,15 +214,15 @@ static gchar * get_as_table(v3270 * terminal, const GList *selection)
214 214
215 } 215 }
216 216
217 -gchar * v3270_get_selection_as_html_div(v3270 * terminal, const GList *selection, const gchar *encoding) 217 +gchar * v3270_get_selection_as_html_div(v3270 * terminal, const GList *selection, const gchar *encoding, gboolean all)
218 { 218 {
219 - g_autofree char * text = get_as_div(terminal, selection); 219 + g_autofree char * text = get_as_div(terminal, selection, all);
220 return g_convert(text, -1, (encoding ? encoding : "UTF-8"), lib3270_get_display_charset(terminal->host), NULL, NULL, NULL); 220 return g_convert(text, -1, (encoding ? encoding : "UTF-8"), lib3270_get_display_charset(terminal->host), NULL, NULL, NULL);
221 } 221 }
222 222
223 -gchar * v3270_get_selection_as_html_table(v3270 * terminal, const GList *selection, const gchar *encoding) 223 +gchar * v3270_get_selection_as_html_table(v3270 * terminal, const GList *selection, const gchar *encoding, gboolean all)
224 { 224 {
225 - g_autofree char * text = get_as_table(terminal, selection); 225 + g_autofree char * text = get_as_table(terminal, selection, all);
226 return g_convert(text, -1, (encoding ? encoding : "UTF-8"), lib3270_get_display_charset(terminal->host), NULL, NULL, NULL); 226 return g_convert(text, -1, (encoding ? encoding : "UTF-8"), lib3270_get_display_charset(terminal->host), NULL, NULL, NULL);
227 } 227 }
228 228
@@ -230,8 +230,8 @@ gchar * v3270_get_copy_as_html(v3270 * terminal, const gchar *encoding) @@ -230,8 +230,8 @@ gchar * v3270_get_copy_as_html(v3270 * terminal, const gchar *encoding)
230 { 230 {
231 231
232 if(terminal->selection.format == V3270_SELECT_TABLE) 232 if(terminal->selection.format == V3270_SELECT_TABLE)
233 - return v3270_get_selection_as_html_table(terminal, terminal->selection.blocks, encoding); 233 + return v3270_get_selection_as_html_table(terminal, terminal->selection.blocks, encoding, FALSE);
234 234
235 - return v3270_get_selection_as_html_div(terminal, terminal->selection.blocks, encoding); 235 + return v3270_get_selection_as_html_div(terminal, terminal->selection.blocks, encoding, FALSE);
236 236
237 } 237 }
src/selection/table.c
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35
36 /// @brief Check if column has data. 36 /// @brief Check if column has data.
37 -static gboolean hasDataOnColumn(v3270 * terminal, unsigned int col, const GList *selection) 37 +static gboolean hasDataOnColumn(v3270 * terminal, unsigned int col, const GList *selection, gboolean all)
38 { 38 {
39 while(selection) 39 while(selection)
40 { 40 {
@@ -47,7 +47,7 @@ static gboolean hasDataOnColumn(v3270 * terminal, unsigned int col, const GList @@ -47,7 +47,7 @@ static gboolean hasDataOnColumn(v3270 * terminal, unsigned int col, const GList
47 47
48 for(row = 0; row < block->bounds.height; row++) 48 for(row = 0; row < block->bounds.height; row++)
49 { 49 {
50 - if( (block->contents[pos].attribute.visual & LIB3270_ATTR_SELECTED) && !isspace(block->contents[pos].chr)) 50 + if( ((block->contents[pos].attribute.visual & LIB3270_ATTR_SELECTED) || all) && !isspace(block->contents[pos].chr))
51 { 51 {
52 return TRUE; 52 return TRUE;
53 } 53 }
@@ -63,7 +63,7 @@ static gboolean hasDataOnColumn(v3270 * terminal, unsigned int col, const GList @@ -63,7 +63,7 @@ static gboolean hasDataOnColumn(v3270 * terminal, unsigned int col, const GList
63 } 63 }
64 64
65 /// @brief Get column list. 65 /// @brief Get column list.
66 -GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection) 66 +GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection, gboolean all)
67 { 67 {
68 unsigned int col = 0; 68 unsigned int col = 0;
69 GList *rc = NULL; 69 GList *rc = NULL;
@@ -73,7 +73,7 @@ GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection @@ -73,7 +73,7 @@ GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection
73 // debug("col(%u): %s", col, hasDataOnColumn(terminal,col) ? "yes" : "no"); 73 // debug("col(%u): %s", col, hasDataOnColumn(terminal,col) ? "yes" : "no");
74 74
75 // Get first column. 75 // Get first column.
76 - while(!hasDataOnColumn(terminal,col,selection)) { 76 + while(!hasDataOnColumn(terminal,col,selection,all)) {
77 if(col >= lib3270_get_width(terminal->host)) 77 if(col >= lib3270_get_width(terminal->host))
78 return rc; 78 return rc;
79 col++; 79 col++;
@@ -85,7 +85,7 @@ GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection @@ -85,7 +85,7 @@ GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection
85 rc = g_list_append(rc,columndescription); 85 rc = g_list_append(rc,columndescription);
86 86
87 // Get width. 87 // Get width.
88 - while(hasDataOnColumn(terminal,col++,selection)) { 88 + while(hasDataOnColumn(terminal,col++,selection,all)) {
89 columndescription->width++; 89 columndescription->width++;
90 if(col >= lib3270_get_width(terminal->host)) 90 if(col >= lib3270_get_width(terminal->host))
91 return rc; 91 return rc;
@@ -96,11 +96,11 @@ GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection @@ -96,11 +96,11 @@ GList * v3270_getColumns_from_selection(v3270 * terminal, const GList *selection
96 96
97 } 97 }
98 98
99 -gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, const gchar *delimiter, const gchar *encoding) 99 +gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, const gchar *delimiter, const gchar *encoding, gboolean all)
100 { 100 {
101 GString * string = g_string_new(""); 101 GString * string = g_string_new("");
102 102
103 - GList * columns = v3270_getColumns_from_selection(terminal, selection); 103 + GList * columns = v3270_getColumns_from_selection(terminal, selection, all);
104 104
105 debug("columns=%p",columns); 105 debug("columns=%p",columns);
106 106
@@ -136,7 +136,7 @@ gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, c @@ -136,7 +136,7 @@ gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, c
136 memset(line,' ',width); 136 memset(line,' ',width);
137 for(col=0; col<block->bounds.width; col++) 137 for(col=0; col<block->bounds.width; col++)
138 { 138 {
139 - if(block->contents[src].attribute.visual & LIB3270_ATTR_SELECTED) 139 + if((block->contents[src].attribute.visual & LIB3270_ATTR_SELECTED) || all)
140 { 140 {
141 line[block->bounds.col+col] = block->contents[src].chr; 141 line[block->bounds.col+col] = block->contents[src].chr;
142 } 142 }
@@ -170,6 +170,6 @@ gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, c @@ -170,6 +170,6 @@ gchar * v3270_get_selection_as_table(v3270 * terminal, const GList *selection, c
170 /// @brief Get formatted contents as single text. 170 /// @brief Get formatted contents as single text.
171 gchar * v3270_get_copy_as_table(v3270 * terminal, const gchar *delimiter, const gchar *encoding) 171 gchar * v3270_get_copy_as_table(v3270 * terminal, const gchar *delimiter, const gchar *encoding)
172 { 172 {
173 - return v3270_get_selection_as_table(terminal, terminal->selection.blocks, delimiter, encoding); 173 + return v3270_get_selection_as_table(terminal, terminal->selection.blocks, delimiter, encoding, FALSE);
174 } 174 }
175 175
src/selection/text.c
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 /*--[ Implement ]------------------------------------------------------------------------------------*/ 33 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 34
35 /// @brief Get formatted contents as single text. 35 /// @brief Get formatted contents as single text.
36 -gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, const gchar *encoding) 36 +gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, const gchar *encoding, gboolean all)
37 { 37 {
38 GString * string = g_string_new(""); 38 GString * string = g_string_new("");
39 39
@@ -46,7 +46,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co @@ -46,7 +46,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co
46 { 46 {
47 for(col=0; col<block->bounds.width; col++) 47 for(col=0; col<block->bounds.width; col++)
48 { 48 {
49 - if(block->contents[src].attribute.visual & LIB3270_ATTR_SELECTED) 49 + if( (block->contents[src].attribute.visual & LIB3270_ATTR_SELECTED) || all )
50 g_string_append_c(string,block->contents[src].chr); 50 g_string_append_c(string,block->contents[src].chr);
51 51
52 src++; 52 src++;
@@ -68,7 +68,7 @@ gchar * v3270_get_copy_as_text(v3270 * terminal, const gchar *encoding) @@ -68,7 +68,7 @@ gchar * v3270_get_copy_as_text(v3270 * terminal, const gchar *encoding)
68 { 68 {
69 if(terminal->selection.format == V3270_SELECT_TABLE) 69 if(terminal->selection.format == V3270_SELECT_TABLE)
70 return v3270_get_copy_as_table(terminal,"\t",encoding); 70 return v3270_get_copy_as_table(terminal,"\t",encoding);
71 - return v3270_get_selection_as_text(terminal, terminal->selection.blocks, encoding); 71 + return v3270_get_selection_as_text(terminal, terminal->selection.blocks, encoding, FALSE);
72 } 72 }
73 73
74 LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const gchar *encoding) 74 LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const gchar *encoding)