X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-output-window.c;h=788db801a247932275f9958c83dff692bb252027;hb=bcbf301dff22591f0b8b7eccd3502ddc05e68d85;hp=3107547bbdf15e801a09a1493bcfc8a97f3f049d;hpb=e1ada75b2678c524f5089f6b83f2547aa3ee1fd7;p=pspp-builds.git diff --git a/src/ui/gui/psppire-output-window.c b/src/ui/gui/psppire-output-window.c index 3107547b..788db801 100644 --- a/src/ui/gui/psppire-output-window.c +++ b/src/ui/gui/psppire-output-window.c @@ -532,7 +532,8 @@ enum { SELECT_FMT_NULL, SELECT_FMT_TEXT, SELECT_FMT_UTF8, - SELECT_FMT_HTML + SELECT_FMT_HTML, + SELECT_FMT_ODT }; @@ -551,26 +552,91 @@ struct glyph_pair char opt[10]; }; +/* See the table at + http://en.wikipedia.org/wiki/Box-drawing_characters */ struct glyph_pair table[] = { + {0x2500, "box[1010]"}, + {0x2501, "box[2020]"}, + {0x2502, "box[0101]"}, + {0x2503, "box[0202]"}, + {0x250C, "box[1100]"}, - {0x2518, "box[0011]"}, + {0x250D, "box[2100]"}, + {0x250E, "box[1200]"}, + {0x250F, "box[2200]"}, {0x2510, "box[0110]"}, + {0x2511, "box[0110]"}, + {0x2512, "box[0210]"}, + {0x2513, "box[0220]"}, {0x2514, "box[1001]"}, - {0x2502, "box[0101]"}, - {0x2500, "box[1010]"}, - {0x2534, "box[1011]"}, + {0x2515, "box[2001]"}, + {0x2516, "box[1002]"}, + {0x2517, "box[2002]"}, + {0x2518, "box[0011]"}, + {0x2519, "box[0021]"}, + {0x251A, "box[0012]"}, + {0x251B, "box[0022]"}, + {0x251C, "box[1101]"}, + {0x251D, "box[2101]"}, + {0x251E, "box[1102]"}, + {0x251F, "box[1201]"}, + {0x2520, "box[1202]"}, + {0x2521, "box[2102]"}, + {0x2522, "box[2201]"}, + {0x2523, "box[2202]"}, + {0x2524, "box[0111]"}, + {0x2525, "box[0121]"}, + {0x2526, "box[0112]"}, + {0x2527, "box[0211]"}, + {0x2528, "box[0212]"}, + {0x2529, "box[0122]"}, + {0x252A, "box[0221]"}, + {0x252B, "box[0222]"}, {0x252C, "box[1110]"}, - {0x2501, "box[2020]"}, - {0x2503, "box[0202]"}, + {0x252D, "box[1120]"}, + {0x252E, "box[2110]"}, + {0x252F, "box[2120]"}, + {0x2530, "box[1210]"}, + {0x2531, "box[1220]"}, + {0x2532, "box[2210]"}, + {0x2533, "box[2220]"}, + {0x2534, "box[1011]"}, + {0x2535, "box[1021]"}, + {0x2536, "box[2011]"}, + {0x2537, "box[2021]"}, + {0x2538, "box[1012]"}, + {0x2539, "box[1022]"}, + {0x253A, "box[2012]"}, + {0x253B, "box[2022]"}, + {0x253C, "box[1111]"}, + {0x253D, "box[1121]"}, + {0x253E, "box[2111]"}, {0x253F, "box[2121]"}, + {0x2540, "box[1112]"}, + {0x2541, "box[1211]"}, {0x2542, "box[1212]"}, + {0x2543, "box[1122]"}, + {0x2544, "box[2112]"}, + {0x2545, "box[1221]"}, + {0x2546, "box[2211]"}, + {0x2547, "box[2122]"}, + {0x2548, "box[2221]"}, + {0x2549, "box[1222]"}, + {0x254A, "box[2212]"}, {0x254B, "box[2222]"}, - {0x2525, "box[0121]"}, - {0x2530, "box[1210]"}, - {0x2538, "box[1012]"}, - {0x251D, "box[2101]"}, - {0x2537, "box[2021]"}, - {0x252F, "box[2120]"} + + {0x2574, "box[0010]"}, + {0x2575, "box[0001]"}, + {0x2576, "box[1000]"}, + {0x2577, "box[0100]"}, + {0x2578, "box[0020]"}, + {0x2579, "box[0002]"}, + {0x257A, "box[2000]"}, + {0x257B, "box[0200]"}, + {0x257C, "box[2010]"}, + {0x257D, "box[0201]"}, + {0x257E, "box[1020]"}, + {0x257F, "box[0102]"}, }; @@ -624,7 +690,16 @@ clipboard_get_cb (GtkClipboard *clipboard, string_map_insert (&options, "format", "txt"); break; + case SELECT_FMT_HTML: + string_map_insert (&options, "format", "html"); + break; + + case SELECT_FMT_ODT: + string_map_insert (&options, "format", "odt"); + break; + default: + g_print ("unsupportted clip target\n"); goto finish; break; } @@ -647,7 +722,14 @@ clipboard_get_cb (GtkClipboard *clipboard, n = n->next; } - driver->class->flush (driver); + if ( driver->class->flush) + driver->class->flush (driver); + + + /* Some drivers (eg: the odt one) don't write anything until they + are closed */ + output_driver_destroy (driver); + driver = NULL; if ( g_file_get_contents (filename, &text, &length, NULL) ) { @@ -658,7 +740,9 @@ clipboard_get_cb (GtkClipboard *clipboard, finish: - output_driver_destroy (driver); + if (driver != NULL) + output_driver_destroy (driver); + g_free (text); unlink (filename); @@ -683,9 +767,9 @@ static const GtkTargetEntry targets[] = { { "UTF8_STRING", 0, SELECT_FMT_UTF8 }, { "text/plain;charset=utf-8", 0, SELECT_FMT_UTF8 }, - /* - { "text/html", 0, SELECT_FMT_HTML } - */ + { "text/html", 0, SELECT_FMT_HTML }, + + { "application/vnd.oasis.opendocument.text", 0, SELECT_FMT_ODT } }; static void @@ -712,6 +796,15 @@ on_selection_change (GtkTreeSelection *sel, GtkAction *copy_action) gtk_action_set_sensitive (copy_action, gtk_tree_selection_count_selected_rows (sel) > 0); } +static void +on_select_all (PsppireOutputWindow *window) +{ + GtkTreeSelection *sel = gtk_tree_view_get_selection (window->overview); + gtk_tree_view_expand_all (window->overview); + gtk_tree_selection_select_all (sel); +} + + static void psppire_output_window_init (PsppireOutputWindow *window) { @@ -719,16 +812,20 @@ psppire_output_window_init (PsppireOutputWindow *window) GtkCellRenderer *renderer; GtkBuilder *xml; GtkAction *copy_action; + GtkAction *select_all_action; GtkTreeSelection *sel; xml = builder_new ("output-viewer.ui"); copy_action = get_action_assert (xml, "edit_copy"); + select_all_action = get_action_assert (xml, "edit_select-all"); gtk_action_set_sensitive (copy_action, FALSE); g_signal_connect_swapped (copy_action, "activate", G_CALLBACK (on_copy), window); + g_signal_connect_swapped (select_all_action, "activate", G_CALLBACK (on_select_all), window); + gtk_widget_reparent (get_widget_assert (xml, "vbox1"), GTK_WIDGET (window)); window->output = GTK_LAYOUT (get_widget_assert (xml, "output"));