~ubuntu-branches/ubuntu/wily/easytag/wily

« back to all changes in this revision

Viewing changes to src/about.c

  • Committer: Package Import Robot
  • Author(s): Alessio Treglia
  • Date: 2013-10-11 17:07:47 UTC
  • mto: (8.1.4 sid)
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: package-import@ubuntu.com-20131011170747-uqvgtx7uyd046j7z
Tags: upstream-2.1.8
Import upstream version 2.1.8

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
19
 */
20
20
 
21
 
#include <config.h>
 
21
#include "config.h"
22
22
 
23
23
#include <gtk/gtk.h>
24
 
#include <gdk/gdkkeysyms.h>
25
24
#include <glib/gi18n-lib.h>
26
 
#include <stdio.h>
27
 
#include <string.h>
28
 
#include <stdlib.h> // for 'system'
29
 
#ifdef ENABLE_MP3
30
 
#   include <id3tag.h>
31
 
#   ifdef ENABLE_ID3LIB
32
 
#   include <id3.h>
33
 
#   endif
34
 
#endif
35
 
#ifdef ENABLE_FLAC
36
 
#   include <FLAC/metadata.h>
37
 
#endif
38
 
#include <errno.h>
39
25
 
40
26
#include "about.h"
41
27
#include "easytag.h"
42
 
#include "misc.h"
43
 
#include "log.h"
44
 
#include "msgbox.h"
45
 
#include "charset.h"
46
 
 
47
 
#ifndef PACKAGE_DATA_DIR
48
 
#   include "../pixmaps/EasyTAG_logo.xpm"
49
 
#endif
50
 
 
51
 
#ifdef WIN32
52
 
#   include "win32/win32dep.h"
53
 
#   include "win32/gtkwin32dep.h"
54
 
#endif
55
 
 
56
 
 
57
 
/****************
58
 
 * Declarations *
59
 
 ****************/
60
 
static GtkWidget *AboutWindow = NULL;
61
 
 
62
 
// Columns for features supported...
63
 
enum
64
 
{
65
 
    // Columns for titles
66
 
    EXTENSION_PIXBUF = 0,
67
 
    EXTENSION_NAME,
68
 
    EXTENSION_STATUT,
69
 
    EXTENSION_COMMENT,
70
 
 
71
 
    EXTENSION_COLUMN_COUNT
72
 
};
73
 
 
74
 
 
75
 
 
76
 
/**************
77
 
 * Prototypes *
78
 
 **************/
79
 
void About_Window_Key_Press (GtkWidget *window, GdkEvent *event);
80
 
void Quit_About_Window (void);
81
 
void About_Window_Go_To_Home_Page (void);
82
 
 
83
 
 
84
 
 
85
 
/*************
86
 
 * Functions *
87
 
 *************/
88
 
/*
89
 
 * Close the window when the 'escape' key is pressed.
90
 
 */
91
 
void About_Window_Key_Press (GtkWidget *window ATTRIBUTE_UNUSED, GdkEvent *event)
92
 
{
93
 
    GdkEventKey *kevent;
94
 
 
95
 
    if (event && event->type == GDK_KEY_PRESS)
96
 
    {
97
 
        kevent = (GdkEventKey *)event;
98
 
        switch(kevent->keyval)
99
 
        {
100
 
            case GDK_Escape:
101
 
                Quit_About_Window();
102
 
                break;
103
 
        }
104
 
    }
105
 
}
106
 
 
107
 
 
108
 
void Quit_About_Window (void)
109
 
{
110
 
    if (AboutWindow)
111
 
    {
112
 
        gtk_widget_destroy(AboutWindow);
113
 
        AboutWindow = (GtkWidget *)NULL;
114
 
        /*gtk_widget_set_sensitive(MainWindow,TRUE);*/
115
 
    }
116
 
}
117
28
 
118
29
void Show_About_Window (void)
119
30
{
120
 
    GtkWidget *AboutNoteBook;
121
 
    GtkWidget *Label;
122
 
    GtkWidget *Frame;
123
 
    GtkWidget *VBox, *hbox;
124
 
    GtkWidget *ScrollWindow;
125
 
    GtkWidget *TextView;
126
 
    GtkTextBuffer *TextBuffer;
127
 
    GtkTextIter textIter;
128
 
    GtkWidget *Button;
129
 
    GtkWidget *Logo;
130
 
    //GdkPixbuf *pixbuf = NULL;
131
 
    GdkPixmap *pixmap;
132
 
    GdkBitmap *mask;
133
 
    gchar  temp[MAX_STRING_LEN];
134
 
    gchar *temp_str;
135
 
    gint i;
136
 
#ifdef PACKAGE_DATA_DIR
137
 
    FILE *file;
138
 
    gchar *tmp = NULL;
139
 
#endif
140
 
    gchar *description_text =
141
 
            _(""
142
 
            "    EasyTAG is an utility for viewing and editing tags for MP3, MP2, "
143
 
            "FLAC, Ogg Vorbis, MP4/AAC, MusePack and Monkey's Audio files. Its "
144
 
            "simple and nice GTK+ interface makes tagging easier under GNU/Linux."
145
 
            "");
146
 
 
147
 
    /* Translation contributions */
148
 
    gchar *translations_thanks_text [][2]= {
149
 
            {"    - Bastian Kleineidam ",           _("(German translation)")},
150
 
            {"    - Adrian Bunk ",                  _("(German translation)")},
151
 
            {"    - Colin Marquardt ",              _("(German translation)")},
152
 
            {"    - Philipp Thomas ",               _("(German translation)")},
153
 
            {"    - Sergey Zhumatiy ",              _("(Russian translation)")},
154
 
            {"    - Andrey Astafiev ",              _("(Russian translation)")},
155
 
            {"    - Vincent van Adrighem ",         _("(Dutch translation)")},
156
 
            {"    - Björn Olievier ",               _("(Dutch translation)")},
157
 
            {"    - Patrik Israelsson ",            _("(Swedish translation)")},
158
 
            {"    - Anders Strömer ",               _("(Swedish translation)")},
159
 
            {"    - Arild Matsson ",                _("(Swedish translation)")},
160
 
            {"    - Szel Miklos ",                  _("(Hungarian translation)")},
161
 
            {"    - Nagy Boldizsar ",               _("(Hungarian translation)")},
162
 
            {"    - Mészáros Csaba ",               _("(Hungarian translation)")},
163
 
            {"    - Cappelletti Lorenzo ",          _("(Italian translation)")},
164
 
            {"    - Costantino Ceoldo ",            _("(Italian translation)")},
165
 
            {"    - Takeshi Aihana ",               _("(Japanese translation)")},
166
 
            {"    - Olexander Kunytsa ",            _("(Ukrainian translation)")},
167
 
            {"    - Cawko Xakep ",                  _("(Ukrainian translation)")},
168
 
            {"    - Milan Siebenburger ",           _("(Czech translation)")},
169
 
            {"    - Zbynek Mrkvicka ",              _("(Czech translation)")},
170
 
            {"    - Jaime Serrano Cartagena ",      _("(Spanish translation)")},
171
 
            {"    - Fernando M. Bueno Moreno ",     _("(Spanish translation)")},
172
 
            {"    - Francisco Javier F. Serrador ", _("(Spanish translation)")},
173
 
            {"    - Maciej Kasprzyk ",              _("(Polish translation)")},
174
 
            {"    - Pauliuc George ",               _("(Romanian translation)")},
175
 
            {"    - Morten Brix Pedersen ",         _("(Danish translation)")},
176
 
            {"    - Apollon Oikonomopoulos ",       _("(Greek translation)")},
177
 
            {"    - doutor zero ",                  _("(Brazilian Portuguese translation)")},
178
 
            {"    - Luchezar P. Petkov ",           _("(Bulgarian translation)")},
179
 
            {"    - Yang Jinsong ",                 _("(Chinese translation)")},
180
 
            {"    - Jose Sun ",                     _("(Chinese (Taiwan) translation)")},
181
 
            {"    - Yuval Hager ",                  _("(Hebrew translation)")},
182
 
            {"    - Miloš Popović ",                _("(Serbian translation)")},
183
 
            {"    - Götz Waschk ",                  _("(German translation)")},
184
 
            {NULL,NULL}
185
 
            };
186
 
 
187
 
    /* General contributions */
188
 
    gchar *general_thanks_text =
189
 
            "    - Daniel Drake (GTK2 port)\n"
190
 
            "    - Mihael Vrbanec (GTK2 port)\n"
191
 
            "    - Michael Pujos (Win32 port)\n"
192
 
            "    - Andrew Shuvalov\n"
193
 
            "    - Sergey Zhumatiy\n"
194
 
            "    - Kevin Venkiteswaran\n"
195
 
            "    - Sheikholeslami Navid\n"
196
 
            "    - Marcus Tegel\n"
197
 
            "    - Robert\n"
198
 
            "    - Lars Bohn\n"
199
 
            "    - Patrik Israelsson\n"
200
 
            "    - Adrian Bunk\n"
201
 
            "    - Alexander D Harkness\n"
202
 
            "    - Vaclav Slavik\n"
203
 
            "    - Charles Kerr\n"
204
 
            "    - Gian\n"
205
 
            "    - Thomas Zajic\n"
206
 
            "    - Szel Miklos\n"
207
 
            "    - Tore Aursand\n"
208
 
            "    - Cappelletti Lorenzo\n"
209
 
            "    - Colin Marquardt\n"
210
 
            "    - Goetz Waschk\n"
211
 
            "    - Holger Schemel\n"
212
 
            "    - Artur Polaczynski\n"
213
 
            "    - Maciej Kasprzyk\n"
214
 
            "    - Daniel Pichler\n"
215
 
            "    - Santtu Lakkala\n"
216
 
            "    - Philipp Thomas\n"
217
 
            "    - Tony Mancill\n"
218
 
            "    - Pavel Minayev\n"
219
 
            "    - Justus Schwartz\n"
220
 
            "    - Fredrik Noring\n"
221
 
            "    - Guilherme Destefani\n"
222
 
            "    - Michael Ihde\n"
223
 
            "    - Stewart Whitman\n"
224
 
            "    - Javier Kohen\n"
225
 
            "    - Alexey Illarionov\n"
226
 
            "    - Der Humph\n"
227
 
            "    - Emmanuel Brun\n"
228
 
            "    - Maarten Maathuis\n"
229
 
            "    - Pierre Dumuid\n"
230
 
            "    - Kip Warner\n"
231
 
            "    - Mark Ferry\n"
232
 
            "    - Gaute Amundsen\n"
233
 
            "";
234
 
 
235
 
    GtkWidget *ExtensionList;
236
 
    GtkListStore *ExtensionListModel;
237
 
    GtkTreeViewColumn* column;
238
 
    GtkCellRenderer* renderer;
239
 
    gchar *ExtensionList_Titles[] = { N_("Extension Name"),
240
 
                                      N_("Status"),
241
 
                                      N_("Comment")
242
 
                                    };
243
 
    GtkTreeIter treeIter;
244
 
    //GError *error = NULL;
245
 
    
246
 
 
247
 
    /* Check if already opened */
248
 
    if (AboutWindow)
249
 
    {
250
 
        gdk_window_raise(AboutWindow->window);
251
 
        return;
252
 
    }
253
 
 
254
 
    /* Dialog window */
255
 
    AboutWindow = gtk_dialog_new();
256
 
 
257
 
    /* Config */
258
 
    gtk_window_set_title(GTK_WINDOW(AboutWindow),_("About..."));
259
 
    gtk_window_set_position(GTK_WINDOW(AboutWindow),GTK_WIN_POS_CENTER);
260
 
 
261
 
    /* Signals connection */
262
 
    g_signal_connect(G_OBJECT(AboutWindow),"destroy", G_CALLBACK(Quit_About_Window),NULL);
263
 
    g_signal_connect(G_OBJECT(AboutWindow),"delete_event",G_CALLBACK(Quit_About_Window),NULL);
264
 
    g_signal_connect(G_OBJECT(AboutWindow),"key_press_event", G_CALLBACK(About_Window_Key_Press),NULL);
265
 
 
266
 
     /* The NoteBook */
267
 
    AboutNoteBook = gtk_notebook_new();
268
 
    gtk_notebook_popup_enable(GTK_NOTEBOOK(AboutNoteBook));
269
 
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(AboutWindow)->vbox),AboutNoteBook,TRUE,TRUE,0);
270
 
 
271
 
 
272
 
    /*
273
 
     * Tab for common informations
274
 
     */
275
 
 
276
 
    Label = gtk_label_new(_("About"));
277
 
    Frame = gtk_frame_new(NULL);
278
 
    gtk_notebook_append_page (GTK_NOTEBOOK(AboutNoteBook),Frame,Label);
279
 
    gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
280
 
 
281
 
    VBox = gtk_vbox_new(FALSE,0);
282
 
    gtk_container_add(GTK_CONTAINER(Frame),VBox);
283
 
 
284
 
    /* EasyTAG Logo */
285
 
    gtk_widget_realize(AboutWindow);
286
 
 
287
 
#ifdef PACKAGE_DATA_DIR
288
 
    pixmap = gdk_pixmap_create_from_xpm(AboutWindow->window,&mask,NULL,PACKAGE_DATA_DIR"/EasyTAG_logo.xpm");
289
 
#else
290
 
    pixmap = gdk_pixmap_create_from_xpm_d(AboutWindow->window,&mask,NULL,EasyTAG_logo_xpm);
291
 
#endif
292
 
    
293
 
    if (pixmap)
294
 
    {
295
 
        Logo = gtk_image_new_from_pixmap(pixmap, mask);
296
 
        g_object_unref(pixmap);
297
 
        g_object_unref(mask);
298
 
        gtk_box_pack_start(GTK_BOX(VBox),Logo,FALSE,TRUE,0);
299
 
        gtk_misc_set_padding(GTK_MISC(Logo),2,2);
300
 
    }
301
 
/*#ifdef PACKAGE_DATA_DIR
302
 
    pixbuf = gdk_pixbuf_new_from_file(PACKAGE_DATA_DIR"/EasyTAG_logo.png",&error);
303
 
#endif
304
 
    
305
 
    if (pixbuf)
306
 
    {
307
 
        Logo = gtk_image_new_from_pixbuf(pixbuf);
308
 
        g_object_unref(pixbuf);
309
 
        gtk_box_pack_start(GTK_BOX(VBox),Logo,FALSE,TRUE,0);
310
 
        gtk_misc_set_padding(GTK_MISC(Logo),2,2);
311
 
    }else
312
 
    {
313
 
        Log_Print(LOG_ERROR,error->message);
314
 
        g_error_free(error);
315
 
    }*/
316
 
 
317
 
    /* Infos */
318
 
    Label = gtk_label_new(NULL);
319
 
    gtk_label_set_markup(GTK_LABEL(Label),"<b>"APPNAME" "VERSION"</b>");
320
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
321
 
 
322
 
    sprintf(temp,_("(compiled: %s)"),__DATE__);
323
 
    Label = gtk_label_new(temp);
324
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
325
 
 
326
 
    sprintf(temp,_("(using: GTK+ %d.%d.%d)"),GTK_MAJOR_VERSION,GTK_MINOR_VERSION,GTK_MICRO_VERSION);
327
 
    Label = gtk_label_new(temp);
328
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
329
 
 
330
 
    /* Insert a blank line */
331
 
    Label = gtk_label_new("");
332
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
333
 
 
334
 
    sprintf(temp,_("Author: %s"),AUTHOR);
335
 
    Label = gtk_label_new(temp);
336
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
337
 
 
338
 
    sprintf(temp,_("E-mail: %s"),EMAIL);
339
 
    Label = gtk_label_new(temp);
340
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
341
 
 
342
 
    hbox = gtk_hbox_new(FALSE,0);
343
 
    gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,TRUE,0);
344
 
    Label = gtk_label_new(_("Web Page: "));
345
 
    gtk_misc_set_alignment(GTK_MISC(Label),1,0.5);
346
 
    gtk_box_pack_start(GTK_BOX(hbox),Label,TRUE,TRUE,0);
347
 
    Button = gtk_button_new_with_label(WEBPAGE);
348
 
    //Button = gtk_link_button_new(WEBPAGE);
349
 
    gtk_box_pack_start(GTK_BOX(hbox),Button,TRUE,TRUE,0);
350
 
    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(About_Window_Go_To_Home_Page),NULL);
351
 
    gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
352
 
 
353
 
    /* Insert a blank line */
354
 
    Label = gtk_label_new("");
355
 
    gtk_box_pack_start(GTK_BOX(VBox),Label,TRUE,TRUE,0);
356
 
 
357
 
    Frame = gtk_frame_new(_("Description:"));
358
 
    gtk_frame_set_shadow_type(GTK_FRAME(Frame),GTK_SHADOW_IN);
359
 
    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,TRUE,0);
360
 
    gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
361
 
    
362
 
    Label = gtk_label_new(_(description_text));
363
 
    gtk_misc_set_padding(GTK_MISC(Label),2,2);
364
 
    gtk_label_set_line_wrap(GTK_LABEL(Label),TRUE);
365
 
    gtk_container_add(GTK_CONTAINER(Frame),Label);
366
 
 
367
 
 
368
 
 
369
 
    /*
370
 
     * Tab for extensions
371
 
     */
372
 
 
373
 
    Label = gtk_label_new(_("Extensions"));
374
 
    Frame = gtk_frame_new(NULL);
375
 
    gtk_notebook_append_page(GTK_NOTEBOOK(AboutNoteBook),Frame,Label);
376
 
 
377
 
    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
378
 
    gtk_container_add(GTK_CONTAINER(Frame),ScrollWindow);
379
 
    gtk_container_set_border_width(GTK_CONTAINER(Frame),2);
380
 
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),
381
 
                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
382
 
 
383
 
    ExtensionListModel = gtk_list_store_new(EXTENSION_COLUMN_COUNT,
384
 
                                            G_TYPE_STRING,      /* Pixbuf, but we use the Stock ID, so don't use GDK_TYPE_PIXBUF */
385
 
                                            G_TYPE_STRING,      /* Extension name */
386
 
                                            G_TYPE_STRING,      /* Statut */
387
 
                                            G_TYPE_STRING       /* Comment */
388
 
                                            );
389
 
    ExtensionList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ExtensionListModel));
390
 
 
391
 
    /* Pixbuf and Extension name */
392
 
    column = gtk_tree_view_column_new();
393
 
    gtk_tree_view_column_set_title(column, _(ExtensionList_Titles[0]));
394
 
 
395
 
    // Cell of the column for the pixbuf
396
 
    renderer = gtk_cell_renderer_pixbuf_new();
397
 
    gtk_tree_view_column_pack_start(column, renderer, FALSE);
398
 
    gtk_tree_view_column_set_attributes(column, renderer,
399
 
                                       "stock-id", EXTENSION_PIXBUF,
400
 
                                        NULL);
401
 
    // Cell of the column for the text
402
 
    renderer = gtk_cell_renderer_text_new();
403
 
    gtk_tree_view_column_pack_start(column, renderer, FALSE);
404
 
    gtk_tree_view_column_set_attributes(column, renderer,
405
 
                                       "text", EXTENSION_NAME,
406
 
                                        NULL);
407
 
    gtk_tree_view_append_column(GTK_TREE_VIEW(ExtensionList), column);
408
 
    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
409
 
 
410
 
    /* Statut */
411
 
    renderer = gtk_cell_renderer_text_new();
412
 
    column = gtk_tree_view_column_new_with_attributes(_(ExtensionList_Titles[1]), renderer,
413
 
                                                      "text", EXTENSION_STATUT,
414
 
                                                      NULL);
415
 
    gtk_tree_view_append_column(GTK_TREE_VIEW(ExtensionList), column);
416
 
    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
417
 
 
418
 
    /* Comment */
419
 
    renderer = gtk_cell_renderer_text_new();
420
 
    column = gtk_tree_view_column_new_with_attributes(_(ExtensionList_Titles[2]), renderer,
421
 
                                                      "text", EXTENSION_COMMENT,
422
 
                                                      NULL);
423
 
    gtk_tree_view_append_column(GTK_TREE_VIEW(ExtensionList), column);
424
 
    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
425
 
 
426
 
    gtk_container_add(GTK_CONTAINER(ScrollWindow),ExtensionList);
427
 
    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(ExtensionList)),
428
 
            GTK_SELECTION_NONE);
429
 
    gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(ExtensionList), FALSE);
430
 
    
431
 
 
432
 
    // Load extensions list
433
 
    // MP3
434
 
#ifdef ENABLE_MP3
435
 
    sprintf(temp, "libid3tag %s", ID3_VERSION);
436
 
#endif
437
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
438
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
439
 
                       EXTENSION_NAME,      _("MP3 file support"),
440
 
#ifdef ENABLE_MP3
441
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
442
 
                       EXTENSION_STATUT,    _("enabled"),
443
 
                       EXTENSION_COMMENT,   temp,
444
 
#else
445
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
446
 
                       EXTENSION_STATUT,    _("disabled"),
447
 
#endif
448
 
                       -1);
449
 
#ifdef ENABLE_MP3
450
 
#if (defined ENABLE_ID3LIB) 
451
 
    sprintf(temp, "id3lib %d.%d.%d", ID3LIB_MAJOR_VERSION, ID3LIB_MINOR_VERSION, ID3LIB_PATCH_VERSION);
452
 
#endif
453
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
454
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
455
 
                       EXTENSION_NAME,      _("ID3v2.3 tags writting support"),
456
 
#if (defined ENABLE_ID3LIB) 
457
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
458
 
                       EXTENSION_STATUT,    _("available"), // May not be used
459
 
                       EXTENSION_COMMENT,   temp,
460
 
#else
461
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
462
 
                       EXTENSION_STATUT,    _("disabled"),
463
 
#endif
464
 
                       -1);
465
 
#endif
466
 
    // Ogg Vorbis
467
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
468
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
469
 
                       EXTENSION_NAME,      _("Ogg Vorbis file support"),
470
 
#ifdef ENABLE_OGG
471
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
472
 
                       EXTENSION_STATUT,    _("enabled"),
473
 
#else
474
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
475
 
                       EXTENSION_STATUT,    _("disabled"),
476
 
#endif
477
 
                       -1);
478
 
    // Speex
479
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
480
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
481
 
                       EXTENSION_NAME,      _("Speex file support"),
482
 
#ifdef ENABLE_SPEEX
483
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
484
 
                       EXTENSION_STATUT,    _("enabled"),
485
 
#else
486
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
487
 
                       EXTENSION_STATUT,    _("disabled"),
488
 
#endif
489
 
                       -1);
490
 
    // FLAC
491
 
#ifdef ENABLE_FLAC
492
 
    sprintf(temp, "flac %s", FLAC__VERSION_STRING);
493
 
#endif
494
 
 
495
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
496
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
497
 
                       EXTENSION_NAME,      _("FLAC file support"),
498
 
#ifdef ENABLE_FLAC
499
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
500
 
                       EXTENSION_STATUT,    _("enabled"),
501
 
                       EXTENSION_COMMENT,   temp,
502
 
#else
503
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
504
 
                       EXTENSION_STATUT,    _("disabled"),
505
 
#endif
506
 
                       -1);
507
 
    // MP4
508
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
509
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
510
 
                       EXTENSION_NAME,      _("MP4/AAC file support"),
511
 
#ifdef ENABLE_MP4
512
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
513
 
                       EXTENSION_STATUT,    _("enabled"),
514
 
#else
515
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
516
 
                       EXTENSION_STATUT,    _("disabled"),
517
 
#endif
518
 
                       -1);
519
 
    // WavPack
520
 
    gtk_list_store_append(ExtensionListModel, &treeIter);
521
 
    gtk_list_store_set(ExtensionListModel, &treeIter,
522
 
                       EXTENSION_NAME,      _("WavPack file support"),
523
 
#ifdef ENABLE_WAVPACK
524
 
                       EXTENSION_PIXBUF,    GTK_STOCK_APPLY,
525
 
                       EXTENSION_STATUT,    _("enabled"),
526
 
#else
527
 
                       EXTENSION_PIXBUF,    GTK_STOCK_CANCEL,
528
 
                       EXTENSION_STATUT,    _("disabled"),
529
 
#endif
530
 
                       -1);
531
 
 
532
 
 
533
 
    /*
534
 
     * Tab for thanks
535
 
     */
536
 
 
537
 
    Label = gtk_label_new(_("Thanks"));
538
 
    Frame = gtk_frame_new(NULL);
539
 
    gtk_notebook_append_page(GTK_NOTEBOOK(AboutNoteBook),Frame,Label);
540
 
 
541
 
    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
542
 
    gtk_container_add(GTK_CONTAINER(Frame),ScrollWindow);
543
 
    gtk_container_set_border_width(GTK_CONTAINER(Frame),2);
544
 
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),
545
 
                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
546
 
 
547
 
    TextBuffer = gtk_text_buffer_new(NULL);
548
 
    gtk_text_buffer_create_tag(TextBuffer, "italic", "style", PANGO_STYLE_ITALIC, NULL);
549
 
    gtk_text_buffer_create_tag(TextBuffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL);
550
 
    gtk_text_buffer_create_tag(TextBuffer, "underline", "underline", PANGO_UNDERLINE_SINGLE, NULL);
551
 
    gtk_text_buffer_create_tag(TextBuffer, "large", "scale", PANGO_SCALE_LARGE, NULL);
552
 
    //gtk_text_buffer_create_tag(TextBuffer, "x-large", "scale", PANGO_SCALE_X_LARGE, NULL);
553
 
    //gtk_text_buffer_create_tag(TextBuffer, "monospace", "family", "monospace", NULL);
554
 
 
555
 
    gtk_text_buffer_get_iter_at_offset(TextBuffer, &textIter, 0);
556
 
 
557
 
    temp_str = _("Translations:\n");
558
 
    gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
559
 
                                             temp_str, -1,
560
 
                                             "bold", "underline", "large", NULL);
561
 
 
562
 
    for (i=0; translations_thanks_text[i][0]!=NULL; i++)
563
 
    {
564
 
        // Translator name
565
 
        /*if (!g_utf8_validate(translations_thanks_text[i][0], -1, NULL))
566
 
            temp_str = convert_string(translations_thanks_text[i][0], "iso-8859-1", "utf-8",TRUE);
567
 
        else
568
 
            temp_str = g_strdup(translations_thanks_text[i][0]);*/
569
 
        temp_str = Try_To_Validate_Utf8_String(translations_thanks_text[i][0]);
570
 
        gtk_text_buffer_insert(TextBuffer, &textIter, temp_str, -1);
571
 
        g_free(temp_str);
572
 
 
573
 
        // Translation language
574
 
        /*if (!g_utf8_validate(translations_thanks_text[i][1], -1, NULL))
575
 
            temp_str = convert_string(translations_thanks_text[i][1], "iso-8859-1", "utf-8",TRUE);
576
 
        else
577
 
            temp_str = g_strdup(translations_thanks_text[i][1]);*/
578
 
        temp_str = Try_To_Validate_Utf8_String(translations_thanks_text[i][1]);
579
 
        gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter, temp_str, -1,
580
 
                                                 "italic", NULL);
581
 
        g_free(temp_str);
582
 
        gtk_text_buffer_insert(TextBuffer, &textIter, "\n", -1);
583
 
    }
584
 
 
585
 
    gtk_text_buffer_insert(TextBuffer, &textIter, "\n", -1);
586
 
 
587
 
    temp_str = _("General:\n");
588
 
    gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
589
 
                                             temp_str, -1,
590
 
                                             "bold", "underline", "large", NULL);
591
 
    gtk_text_buffer_insert(TextBuffer, &textIter, general_thanks_text, -1);
592
 
 
593
 
    TextView = gtk_text_view_new_with_buffer(TextBuffer);
594
 
    gtk_container_add(GTK_CONTAINER(ScrollWindow),TextView);
595
 
    gtk_text_view_set_editable(GTK_TEXT_VIEW(TextView), FALSE);
596
 
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(TextView), GTK_WRAP_WORD);
597
 
 
598
 
 
599
 
    /*
600
 
     * Tab for ChangeLog
601
 
     */
602
 
 
603
 
#ifdef PACKAGE_DATA_DIR
604
 
    Label = gtk_label_new(_("Changes"));
605
 
    Frame = gtk_frame_new(NULL);
606
 
    gtk_notebook_append_page (GTK_NOTEBOOK(AboutNoteBook),Frame,Label);
607
 
 
608
 
    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
609
 
    gtk_container_add(GTK_CONTAINER(Frame),ScrollWindow);
610
 
    gtk_container_set_border_width(GTK_CONTAINER(Frame),2);
611
 
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),
612
 
                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
613
 
 
614
 
    TextBuffer = gtk_text_buffer_new(NULL);
615
 
    gtk_text_buffer_get_iter_at_offset(TextBuffer, &textIter, 0);
616
 
    gtk_text_buffer_create_tag(TextBuffer, "monospace", "family", "monospace", NULL);
617
 
    gtk_text_buffer_create_tag(TextBuffer, "red_foreground", "foreground", "red", NULL);
618
 
    gtk_text_buffer_create_tag(TextBuffer, "blue_foreground", "foreground", "blue", NULL);
619
 
    gtk_text_buffer_create_tag(TextBuffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL);
620
 
 
621
 
    gtk_text_buffer_get_iter_at_offset(TextBuffer, &textIter, 0);
622
 
 
623
 
    // The file 'ChangeLog' to read
624
 
    if ( (file=fopen(PACKAGE_DATA_DIR"/ChangeLog","r"))==0 )
625
 
    {
626
 
        gchar *msg = g_strdup_printf(_("Can't open file '%s' (%s)\n"),PACKAGE_DATA_DIR"/ChangeLog",g_strerror(errno));
627
 
        gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
628
 
                                                 msg, -1,
629
 
                                                 "monospace", "red_foreground", NULL);
630
 
        g_free(msg);
631
 
    } else
632
 
    {
633
 
        gint first_version = 0;
634
 
 
635
 
        while (fgets(temp,sizeof(temp),file))
636
 
        {
637
 
            if (temp[strlen(temp)-1]=='\n')
638
 
                temp[strlen(temp)-1]='\0';
639
 
            if (temp[strlen(temp)-1]=='\r')
640
 
                temp[strlen(temp)-1]='\0';
641
 
 
642
 
            // Convert line to UTF-8
643
 
            /*if (!g_utf8_validate(temp, -1, NULL))
644
 
                tmp = convert_string(temp, "iso-8859-1", "utf-8",TRUE);
645
 
            else
646
 
                tmp = g_strdup(temp);*/
647
 
            tmp = Try_To_Validate_Utf8_String(temp);
648
 
 
649
 
            if (tmp && tmp[0]!=' ') // If first character is a space => 1rst line after title
650
 
            {
651
 
                first_version++;
652
 
                // To set to bold the title of the version and to red the first version
653
 
                if (first_version > 2) // As title takes 2 lines
654
 
                    gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
655
 
                                                             tmp, -1,
656
 
                                                             "monospace", "bold", NULL);
657
 
                else
658
 
                    gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
659
 
                                                             tmp, -1,
660
 
                                                             "monospace", "bold", "blue_foreground", NULL);
661
 
            }else
662
 
            {
663
 
                if (first_version > 2) // As title takes 2 lines
664
 
                    gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
665
 
                                                             tmp, -1,
666
 
                                                             "monospace", NULL);
667
 
                else
668
 
                    gtk_text_buffer_insert_with_tags_by_name(TextBuffer, &textIter,
669
 
                                                             tmp, -1,
670
 
                                                             "monospace", "blue_foreground", NULL);
671
 
            }
672
 
 
673
 
            gtk_text_buffer_insert(TextBuffer, &textIter, "\n", -1);
674
 
            g_free(tmp);
675
 
        }
676
 
        fclose(file);
677
 
    }
678
 
    TextView = gtk_text_view_new_with_buffer(TextBuffer);
679
 
    gtk_container_add(GTK_CONTAINER(ScrollWindow),TextView);
680
 
    gtk_text_view_set_editable(GTK_TEXT_VIEW(TextView), FALSE);
681
 
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(TextView), GTK_WRAP_WORD);
682
 
#endif
683
 
 
684
 
 
685
 
    /*
686
 
     * Close Button
687
 
     */
688
 
    Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
689
 
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(AboutWindow)->action_area),Button,FALSE,FALSE,0);
690
 
    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Quit_About_Window),NULL);
691
 
    GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT);
692
 
    gtk_widget_grab_default(Button);
693
 
 
694
 
 
695
 
    gtk_widget_show_all(AboutWindow);
696
 
    //gtk_container_resize_children(GTK_CONTAINER(AboutNoteBook));
697
 
 
698
 
}
699
 
 
700
 
 
701
 
void About_Window_Go_To_Home_Page (void)
702
 
{
703
 
#ifdef WIN32
704
 
    wineasytag_notify_uri(WEBPAGE);
705
 
#else
706
 
    if (system("gnome-moz-remote "WEBPAGE)!=0)
707
 
        if (system("x-www-browser "WEBPAGE)!=0)
708
 
            system("www-browser "WEBPAGE);
709
 
#endif
 
31
    static const gchar * const artists[] =
 
32
    {
 
33
        "Waqas Qamar <wakas88@gmail.com>",
 
34
        "Der Humph <humph@gmx.de>",
 
35
        NULL
 
36
    };
 
37
 
 
38
    static const gchar * const authors[] =
 
39
    {
 
40
        "David King <amigadave@amigadave.com>",
 
41
        "Kip Warner <kip@thevertigo.com>",
 
42
        "Santtu Lakkala <inzane@ircing.org>",
 
43
        "Jérôme Couderc <easytag@gmail.com>",
 
44
        "Daniel Drake <dsd@gentoo.org>",
 
45
        "Mihael Vrbanec <miqster@gmx.net>",
 
46
        "Michael Pujos <pujos.michael@laposte.net>",
 
47
        "Adrian Bunk <bunk@fs.tum.de>",
 
48
        "Goetz Waschk <waschk@informatik.uni-rostock.de>",
 
49
        "Holger Schemel <aeglos@valinor.owl.de>",
 
50
        "Charles Kerr <charles@superimp.org>",
 
51
        "Maciej Kasprzyk <kasprzol@go2.pl>",
 
52
        "Artur Polaczynski <artii@o2.pl>",
 
53
        "Philipp Thomas <pthomas@suse.de>",
 
54
        "Oliver <oliver@are-b.org>",
 
55
        "Tony Mancill <tony@mancill.com>",
 
56
        "Pavel Minayev <thalion@front.ru>",
 
57
        "Justus Schwartz <justus@gmx.li>",
 
58
        "Fredrik Noring <noring@nocrew.org>",
 
59
        "Paul Giordano <giordano@covad.net>",
 
60
        "Michael Ihde <mike.ihde@randomwalking.com>",
 
61
        "Stewart Whitman <swhitman@cox.net>",
 
62
        "Javier Kohen <jkohen@users.sourceforge.net>",
 
63
        "FutureFog <futurefog@katamail.com>",
 
64
        "Maarten Maathuis <madman2003@gmail.com>",
 
65
        "Pierre Dumuid <pierre.dumuid@adelaide.edu.au>",
 
66
        "Nick Lanham <nick@afternight.org>",
 
67
        "Wojciech Wierchola <admin@webcarrot.pl>",
 
68
        "Julian Taylor <jtaylor@ubuntu.com>",
 
69
        "Honore Doktorr <hdfssk@gmail.com>",
 
70
        "Guilherme Destefani <gd@helixbrasil.com.br>",
 
71
        "Andreas Winkelmann <ml@awinkelmann.de>",
 
72
        "Adrian Bunk <bunk@stusta.de>",
 
73
        NULL
 
74
    };
 
75
 
 
76
    static const gchar * const documenters[] =
 
77
    {
 
78
        "Emmanuel Brun <brunema@wanadoo.fr>",
 
79
        "Daniel Pichler <dpichler@dnet.it>",
 
80
        "Anders Strömer <anders.stromer@comhem.se>",
 
81
        NULL
 
82
    };
 
83
 
 
84
    static const gchar copyright[] = "Copyright © 2012–2013 David King\n"
 
85
                                     "Copyright © 2009–2012 Kip Warner\n"
 
86
                                     "Copyright © 2000–2008 Jérôme Couderc";
 
87
 
 
88
    const gchar *license;
 
89
    const gchar *translators;
 
90
 
 
91
    license =  _("This program is free software; you can redistribute it "
 
92
                 "and/or modify it under the terms of the GNU General Public "
 
93
                 "License as published by the Free Software Foundation; "
 
94
                 "either version 2 of the License, or (at your option) any "
 
95
                 "later version.\n"
 
96
                 "\n"
 
97
                 "This program is distributed in the hope that it will be "
 
98
                 "useful, but WITHOUT ANY WARRANTY; without even the implied "
 
99
                 "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR "
 
100
                 "PURPOSE.  See the GNU General Public License for more "
 
101
                 "details.\n"
 
102
                 "\n"
 
103
                 "You should have received a copy of the GNU General Public "
 
104
                 "License along with this program. If not, see "
 
105
                 "<http://www.gnu.org/licenses/>.");
 
106
 
 
107
    /* Translators: put your own name here to appear in the about dialog. */
 
108
    translators = _("translator-credits");
 
109
 
 
110
    if (!strcmp (translators,"translator-credits"))
 
111
    {
 
112
        translators = NULL;
 
113
    }
 
114
 
 
115
    gtk_show_about_dialog (GTK_WINDOW (MainWindow),
 
116
                           "artists", artists,
 
117
                           "authors", authors,
 
118
                           "comments", _("View and edit tags in audio files"),
 
119
                           "copyright", copyright,
 
120
                           "documenters", documenters,
 
121
                           "license", license,
 
122
                           "logo-icon-name", PACKAGE_TARNAME,
 
123
                           "program-name", PACKAGE_NAME,
 
124
                           "translator-credits", translators,
 
125
                           "version", PACKAGE_VERSION,
 
126
                           "website", PACKAGE_URL,
 
127
                           "wrap-license", TRUE,
 
128
                           NULL);
710
129
}