Subversion Repositories Scribus

Rev

Rev 22040 | Rev 22048 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
12529 cbradney 1
/*
4430 cbradney 2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
1641 cbradney 7
/***************************************************************************
12531 cbradney 8
*                                                                         *
9
*   This program is free software; you can redistribute it and/or modify  *
10
*   it under the terms of the GNU General Public License as published by  *
11
*   the Free Software Foundation; either version 2 of the License, or     *
12
*   (at your option) any later version.                                   *
13
*                                                                         *
14
***************************************************************************/
15
#include <iostream> // only for debugging
16
 
11800 cbradney 17
#include <QFile>
12574 jghali 18
#include <QLabel>
9338 fschmid 19
#include <QPixmap>
12574 jghali 20
#include <QPushButton>
21
#include <QShowEvent>
22
#include <QString>
19187 craig 23
#include <QStringList>
9338 fschmid 24
#include <QTabWidget>
11800 cbradney 25
#include <QTextStream>
12574 jghali 26
#include <QToolTip>
9338 fschmid 27
#include <QWidget>
1641 cbradney 28
 
19175 craig 29
#include <cairo.h>
30
 
12570 cbradney 31
#include "about.h"
5364 cbradney 32
#include "commonstrings.h"
2688 craig 33
#include "scconfig.h"
11800 cbradney 34
#include "scpaths.h"
19240 craig 35
#ifdef HAVE_SVNVERSION
19226 craig 36
        #include "svnversion.h"
19177 jghali 37
#endif
10212 cbradney 38
#include "util_ghostscript.h"
20185 craig 39
#include "iconmanager.h"
18438 craig 40
#include "upgradechecker.h"
2011 cbradney 41
#include "langmgr.h"
42
 
12531 cbradney 43
 
44
/*
45
* The content for the About dialog is mostly built from the files in
46
* // SCRIBUS_INSTALL_DIRECTORY/share/doc/scribus-1.3.5svn/
47
*
48
* The format of the files should follow this pattern:
49
* - AUTHOR
50
*   Tr(Title)
51
*   first_name name email_address
52
*   first_name name email_address
53
*  
54
*   Tr(Title)
55
*   ...
56
*
57
* - TRANSLATION
58
*   Tr(Title)
59
*  
60
*   Language(language_code)
61
*   first_name name (email_address)
62
*
63
*   Language(language_code)
64
*   first_name name (email_address)
65
*
66
*
67
*   Tr(Title)
68
*   ...
69
* - LINKS
70
*   Tr(Title)
71
*   url
72
*
73
*
74
*   Tr(Title)
75
*   ...
76
*
77
*
78
*  Text which has to be translated has to be added to the local tr...Title()
79
*  methods, otherwise in won't be added to the list of translatable strings
80
*
81
*  a.l.e
82
*/
83
 
1641 cbradney 84
/*!
12531 cbradney 85
\fn About::About( QWidget* parent, AboutMode diaMode )
86
\author Franz Schmid
87
\date
88
\brief Constructor for About dialog box
89
\param parent QWidget pointer to parent window
90
\param diaMode a dialog mode. See AboutMode.
91
\retval About dialog
92
*/
10913 jghali 93
About::About( QWidget* parent, AboutMode diaMode ) : QDialog( parent )
1641 cbradney 94
{
10913 jghali 95
        m_mode = diaMode;
96
        m_firstShow = true;
10493 fschmid 97
        setWindowTitle( tr("About Scribus %1").arg(VERSION) );
20185 craig 98
        setWindowIcon(IconManager::instance()->loadIcon("AppIcon.png", true));
9338 fschmid 99
        setModal(true);
100
        aboutLayout = new QVBoxLayout( this );
1641 cbradney 101
        aboutLayout->setSpacing( 6 );
102
        aboutLayout->setMargin( 10 );
10493 fschmid 103
        tabWidget2 = new QTabWidget( this );
10040 fschmid 104
//      tabWidget2->setMinimumSize( QSize( 438, 258 ) );
10493 fschmid 105
        tab = new QWidget( tabWidget2 );
9338 fschmid 106
        tabLayout1 = new QVBoxLayout( tab );
1641 cbradney 107
        tabLayout1->setSpacing( 6 );
108
        tabLayout1->setMargin( 15 );
10493 fschmid 109
        pixmapLabel1 = new QLabel( tab );
20185 craig 110
        pixmapLabel1->setPixmap(IconManager::instance()->loadPixmap("scribus_splash.png", true));
10040 fschmid 111
        pixmapLabel1->setFixedSize(QSize(pixmapLabel1->pixmap()->width(), pixmapLabel1->pixmap()->height()));
1641 cbradney 112
        pixmapLabel1->setAlignment(Qt::AlignCenter);
113
        tabLayout1->addWidget( pixmapLabel1 );
10493 fschmid 114
        buildID = new QLabel( tab );
1641 cbradney 115
        buildID->setAlignment(Qt::AlignCenter);
13438 cbradney 116
        buildID->setTextInteractionFlags(Qt::TextSelectableByMouse);
22043 craig 117
        QString BUILD_DAY = "23";
22024 craig 118
        QString BUILD_MONTH = CommonStrings::may;
21695 mrdocs 119
        QString BUILD_YEAR = "2017";
9697 craig 120
        QString BUILD_TIME = "";
121
        QString BUILD_TZ = "";
122
        QString BUILD_NAME = "";
3587 avox 123
 
21935 craig 124
        QString built = tr("%1 %2 %3").arg(BUILD_DAY, BUILD_MONTH, BUILD_YEAR);
9697 craig 125
        QString version = VERSION;
126
        if (BUILD_NAME != "")
127
                version += " \"" + BUILD_NAME + "\"";
128
        if (BUILD_NAME == "BleedingEdge")
21935 craig 129
                built = tr("%3-%2-%1 %4 %5").arg(BUILD_DAY, BUILD_MONTH, BUILD_YEAR, BUILD_TIME, BUILD_TZ);
9697 craig 130
 
20968 jghali 131
#if defined(HAVE_SVNVERSION) && defined(SVNVERSION)
132
        QString revText;
133
        revText=QString(tr("SVN Revision: %1")).arg(SVNVERSION);
134
        built+=" - ";
135
        built+=revText;
19177 jghali 136
#endif
3579 avox 137
        QString bu;
1641 cbradney 138
        bu += "C";
139
        bu += "-";
140
        bu += "-";
141
        bu += "T";
142
        bu += "-";
143
#ifdef HAVE_FONTCONFIG
144
        bu += "F";
145
#else
146
        bu += "*";
147
#endif
3113 fschmid 148
        bu += "-";
149
        bu += "C";
9898 avox 150
        bu += cairo_version_string();
1641 cbradney 151
 
3587 avox 152
// Some more information if we are not on a 32bit little endian Unix machine
153
#if defined(Q_OS_WIN)
154
        bu += "-Windows";
155
#elif defined(Q_OS_MAC)
156
        bu += "-Mac/";
9898 avox 157
#elif defined(Q_OS_DARWIN)
158
        // dunno if anyone uses this...
159
        bu += "-Darwin";
160
#endif
10501 cbradney 161
        if (QSysInfo::WordSize != 32)
10493 fschmid 162
                bu += QString("-%1bit").arg(QSysInfo::WordSize);
163
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
10501 cbradney 164
        if (QSysInfo::ByteOrder==QSysInfo::BigEndian)
3587 avox 165
                bu += "-Big";
10493 fschmid 166
#endif
2840 craig 167
        QString gsver(getGSVersion());
12574 jghali 168
        if (!gsver.isEmpty())
3583 cbradney 169
                gsver = tr("Using Ghostscript version %1").arg(gsver);
2840 craig 170
        else
3583 cbradney 171
                gsver = tr("No Ghostscript version available");
9770 fschmid 172
        buildID->setText( tr("<p align=\"center\"><b>%1 %2</b></p><p align=\"center\">%3<br>%4 %5<br>%6</p>").arg( tr("Scribus Version")).arg(version).arg(built).arg( tr("Build ID:")).arg(bu).arg(gsver));
9755 fschmid 173
        tabLayout1->addWidget( buildID, 0, Qt::AlignHCenter );
9338 fschmid 174
        tabWidget2->addTab( tab, tr( "&About" ) );
20197 craig 175
 
176
        /*! AUTHORS tab */
10493 fschmid 177
        tab_2 = new QWidget( tabWidget2 );
9338 fschmid 178
        tabLayout = new QHBoxLayout( tab_2 );
1641 cbradney 179
        tabLayout->setSpacing( 6 );
180
        tabLayout->setMargin( 10 );
20197 craig 181
        authorView = new QTextBrowser( tab_2 );
182
        authorView->setHtml(About::parseAuthorFile(ScPaths::instance().docDir() + "AUTHORS"));
183
        tabLayout->addWidget( authorView );
184
        tabWidget2->addTab( tab_2, tr("A&uthors"));
4363 mrdocs 185
 
20197 craig 186
        /*! TRANSLATION tab */
10493 fschmid 187
        tab_3 = new QWidget( tabWidget2 );
9338 fschmid 188
        tabLayout_2 = new QHBoxLayout( tab_3 );
1641 cbradney 189
        tabLayout_2->setSpacing( 6 );
190
        tabLayout_2->setMargin( 10 );
20197 craig 191
        transView = new QTextBrowser( tab_3);
192
        transView->setHtml(About::parseTranslationFile(ScPaths::instance().docDir() + "TRANSLATION"));
193
        tabLayout_2->addWidget( transView );
9338 fschmid 194
        tabWidget2->addTab( tab_3, tr( "&Translations" ) );
1641 cbradney 195
 
12531 cbradney 196
        /*! ONLINE tab (03/04/2004 petr vanek) */
10493 fschmid 197
        tab_4 = new QWidget( tabWidget2 );
20197 craig 198
        onlineView = new QTextBrowser( tab_4 );
199
        onlineView->setHtml(About::parseLinksFile(ScPaths::instance().docDir() + "LINKS"));
200
        onlineView->setOpenExternalLinks(true);
9338 fschmid 201
        tabLayout_4 = new QHBoxLayout( tab_4 );
1641 cbradney 202
        tabLayout_4->setSpacing( 6 );
203
        tabLayout_4->setMargin( 10 );
20197 craig 204
        tabLayout_4->addWidget( onlineView );
9338 fschmid 205
        tabWidget2->addTab( tab_4, tr( "&Online" ) );
20197 craig 206
 
207
 
12531 cbradney 208
        /*! UPDATE tab */
10493 fschmid 209
        tab_5 = new QWidget( tabWidget2 );
210
        tabWidget2->addTab( tab_5, tr( "&Updates" ) );
9338 fschmid 211
        updateLayout = new QVBoxLayout( tab_5 );
5923 cbradney 212
        updateLayout->setSpacing( 6 );
213
        updateLayout->setMargin( 10 );
10926 cbradney 214
        checkForUpdateButton = new QPushButton( tr( "Check for Updates" ), tab_5 );
20197 craig 215
        updateView = new QTextBrowser( tab_5);
5923 cbradney 216
        updateLayout->addWidget( checkForUpdateButton );
20197 craig 217
        updateLayout->addWidget( updateView );
11800 cbradney 218
 
12531 cbradney 219
        /*! LICENCE tab */
11800 cbradney 220
        tab_Licence = new QWidget( tabWidget2 );
221
        tabWidget2->addTab( tab_Licence, tr( "&Licence" ) );
222
        licenceLayout = new QVBoxLayout( tab_Licence );
223
        licenceLayout->setSpacing( 6 );
224
        licenceLayout->setMargin( 10 );
20197 craig 225
        textViewLicence = new QTextBrowser( tab_Licence);
11800 cbradney 226
        licenceLayout->addWidget( textViewLicence );
227
 
228
        QFile licenceFile(ScPaths::instance().docDir() + "/COPYING");
12531 cbradney 229
        if (!licenceFile.open(QIODevice::ReadOnly | QIODevice::Text))
20197 craig 230
                textViewLicence->setPlainText(tr("Unable to open licence file. Please check your install directory or the Scribus website for licencing information.") );
12531 cbradney 231
        else
11800 cbradney 232
        {
233
                QTextStream inTS(&licenceFile);
18565 jghali 234
                inTS.setAutoDetectUnicode(true);
235
                inTS.setCodec("UTF-8");
11800 cbradney 236
                QString licenceText = inTS.readAll();
20197 craig 237
                textViewLicence->setPlainText(licenceText);
12531 cbradney 238
        }
20197 craig 239
 
11800 cbradney 240
        //Add tab widget to about window
1641 cbradney 241
        aboutLayout->addWidget( tabWidget2 );
7368 subik 242
 
9338 fschmid 243
        layout2 = new QHBoxLayout;
1641 cbradney 244
        layout2->setSpacing( 6 );
245
        layout2->setMargin( 0 );
246
        QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
247
        layout2->addItem( spacer );
10493 fschmid 248
        okButton = new QPushButton( tr( "&Close" ), this );
1641 cbradney 249
        okButton->setDefault( true );
250
        layout2->addWidget( okButton );
251
        aboutLayout->addLayout( layout2 );
252
        setMaximumSize(sizeHint());
253
 
4363 mrdocs 254
 
12574 jghali 255
        //tooltips
10397 cbradney 256
        buildID->setToolTip( "<qt>" + tr( "This panel shows the version, build date and compiled in library support in Scribus.")+"<br>"
12531 cbradney 257
        + tr("The C-C-T-F equates to C=littlecms C=CUPS T=TIFF support F=Fontconfig support.Last Letter is the renderer C=cairo or Q=Qt")+"<br>"
258
        + tr("Missing library support is indicated by a *. This also indicates the version of Ghostscript which Scribus has detected.")+"<br>"
259
        + tr("The Windows version does not use fontconfig or CUPS libraries." ) + "</qt>" );
10397 cbradney 260
        checkForUpdateButton->setToolTip( "<qt>" + tr( "Check for updates to Scribus. No data from your machine will be transferred off it." ) + "</qt>" );
5220 mrdocs 261
        // signals and slots connections
262
        connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
5923 cbradney 263
        connect( checkForUpdateButton, SIGNAL( clicked() ), this, SLOT( runUpdateCheck() ) );
14952 fschmid 264
        resize(minimumSizeHint());
5273 mrdocs 265
}
5923 cbradney 266
 
12531 cbradney 267
 
10913 jghali 268
void About::showEvent (QShowEvent * event)
269
{
270
        if (m_mode == About::CheckUpdates && m_firstShow)
271
                tabWidget2->setCurrentIndex(4);
272
        QDialog::showEvent(event);
273
}
274
 
12531 cbradney 275
 
276
 
277
QString About::trAuthorTitle(QString title)
278
{
279
        QString result;
280
        if ( title == "Development Team:" )
281
                result = tr("Development Team:");
282
        else if ( title == "Mac OS&#174; X Aqua Port:" )
283
                result = tr("Mac OS&#174; X Aqua Port:");
284
        else if ( title == "OS/2&#174;/eComStation&#8482; Port:" )
285
                result = tr("OS/2&#174;/eComStation&#8482; Port:");
286
        else if ( title == "Windows&#174; Port:" )
287
                result = tr("Windows&#174; Port:");
18438 craig 288
        else if ( title == "Haiku Port:" )
289
                result = tr("Haiku Port:");
12531 cbradney 290
        else if ( title == "Contributions from:" )
291
                result = tr("Contributions from:");
292
        else if ( title == "Official Documentation:" )
293
                result = tr("Official Documentation:");
294
        else if ( title == "Doc Translators:" )
295
                result = tr("Doc Translators:");
296
        else if ( title == "Other Documentation:" )
297
                result = tr("Other Documentation:");
298
        else if ( title == "Webmasters:" )
299
                result = tr("Webmasters:");
300
        else if ( title == "Splash Screen:" )
301
                result = tr("Splash Screen:");
302
        else if ( title == "Tango Project Icons:" )
303
                result = tr("Tango Project Icons:");
20319 craig 304
        else if ( title == "Scribus 1.5.1+ Icon Set:" )
305
                result = tr("Scribus 1.5.1+ Icon Set:");
21947 craig 306
        else if ( title == "Refactoring text layout code, the new boxes model & CTL text layout, Oman House of Open Source Technology team:" )
307
                result = tr("Refactoring text layout code, the new boxes model & CTL text layout, Oman House of Open Source Technology team:");
12531 cbradney 308
        else
12967 fschmid 309
        {
12531 cbradney 310
                std::cout << "please add the untranslated title \"" << qPrintable(title) << "\" to About::trAuthorTitle()" << std::endl;
311
                result = title;
12967 fschmid 312
        }
12531 cbradney 313
        return result;
314
}
315
QString About::trTranslationTitle(QString title)
316
{
317
        QString result;
21260 craig 318
        if ( title == "Official Translations and Translators (in order of locale shortcode):" )
319
                result = tr("Official Translations and Translators (in order of locale shortcode):");
12531 cbradney 320
        else if ( title == "Previous Translation Contributors:" )
321
                result = tr("Previous Translation Contributors:");
322
        else
12967 fschmid 323
        {
16756 craig 324
                std::cout << "please add the untranslated title \"" << qPrintable(title) << "\" to About::trTranslationTitle()" << std::endl;
12531 cbradney 325
                result = title;
12967 fschmid 326
        }
12531 cbradney 327
        return result;
328
}
329
 
330
 
331
QString About::trLinksTitle(QString title)
332
{
333
        QString result;
334
        if ( title == "Homepage" )
335
                result = tr("Homepage");
336
        else if ( title == "Online Reference" )
337
                result = tr("Online Reference");
338
        else if ( title == "Wiki" )
339
                result = tr("Wiki");
340
        else if ( title == "Bugs and Feature Requests" )
341
                result = tr("Bugs and Feature Requests");
342
        else if ( title == "Developer Blog" )
343
                result = tr("Developer Blog");
344
        else if ( title == "Mailing List" )
345
                result = tr("Mailing List");
346
        else
12967 fschmid 347
        {
12531 cbradney 348
                std::cout << "please add the untranslated title \"" << qPrintable(title) << "\" to About::trLinksTitle()" << std::endl;
349
                result = title;
12967 fschmid 350
        }
12531 cbradney 351
        return result;
352
}
353
 
354
 
355
/*!
356
* parse a text file and return an author list in an html table:
357
* left the names and right the contact address
358
* the html table can be "split" in sections
359
* @param QString fileName the file to be parsed
360
* @return QString the html table
361
*/
362
QString About::parseAuthorFile(QString fileName)
363
{
364
        QString result;
365
        QString file;
366
        QFile authorsFile(fileName);
367
        if (authorsFile.open(QIODevice::ReadOnly | QIODevice::Text))
368
        {
369
                QTextStream inTS(&authorsFile);
15267 jghali 370
                inTS.setCodec("UTF-8");
371
                inTS.setAutoDetectUnicode(true);
12531 cbradney 372
                QString lineTS;
373
                QStringList fieldTS;
374
                QString name;
375
                QString contact;
376
                bool isTitle = true;
377
                bool startText = false;
378
                bool startTitle = false;
379
                result = "<table>";
380
                while (!inTS.atEnd())
381
                {
382
                        lineTS = inTS.readLine();
383
                        // convert (r) "�" to &#174, "�" to &#8482
384
                        // lineTS = QString::fromUtf8(lineTS);
385
                        lineTS.replace("<", "&lt;");
386
                        lineTS.replace(">", "&gt;");
387
                        lineTS.replace("�", "&#174;");
388
                        lineTS.replace("�", "&#8482;");
389
                        name = "";
390
                        contact = "";
391
                        if (!lineTS.isEmpty())
392
                        {
393
                                if (isTitle)
394
                                {
395
                                        startTitle = false;
396
                                        result += "<tr><td><b>"+About::trAuthorTitle(lineTS)+"</b></td><td></td></tr>";
397
 
398
                                } // if is title
399
                                else
400
                                {
401
                                        startText = false;
402
                                        fieldTS = lineTS.split(" ");
403
                                        contact = (fieldTS.isEmpty() ? "" : fieldTS.takeLast());
404
                                        name = (fieldTS.isEmpty() ? "" : fieldTS.join(" "));
405
                                        result += "<tr><td>"+name+"</td><td>"+(contact == "@" ? "" : contact)+"</td></tr>";
406
                                } // else is title
407
                        } // if is empty line
408
                        else
409
                        {
410
                                // empty lines switch between title and text
411
                                if (!startText && !startTitle)
412
                                {
413
                                        isTitle = !isTitle;
414
                                        if (isTitle)
415
                                        {
416
                                                result += "<tr><td></td><td></td></tr>";
417
                                                startTitle = true;
418
                                        }
419
                                        else
420
                                        {
421
                                                startText = true;
422
                                        }
423
                                }
424
                        } // else is empty line
425
                } // while ! atEnd
426
                result += "<table>";
427
        } // if file found
428
        else
429
        {
430
                if (!fileName.isEmpty())
431
                {
432
                        QStringList field = fileName.split("/");
433
                        if (!field.isEmpty())
434
                        {
435
                                file = field.takeLast();
436
                        }
437
                }
438
                result = tr("Unable to open %1 file. Please check your install directory or the Scribus website for %1 information.").arg(file);
439
                result = "";
440
        } // else file found
441
        return result;
442
} // parseTextFile()
443
 
444
/*!
445
* parse a text file and return an author list in an html table:
446
* left the names and right the contact address
447
* the html table can be "split" in sections
448
* @param QString fileName the file to be parsed
449
* @return QString the html table
450
*/
451
QString About::parseTranslationFile(QString fileName)
452
{
453
        QString result;
454
        QString file;
455
        QFile translationFile(fileName);
456
        if (translationFile.open(QIODevice::ReadOnly | QIODevice::Text))
457
        {
458
                QTextStream inTS(&translationFile);
15267 jghali 459
                inTS.setCodec("UTF-8");
460
                inTS.setAutoDetectUnicode(true);
12531 cbradney 461
                QString lineTS;
462
                QStringList fieldTS;
463
                QString code;
464
                QString name;
465
                QString contact;
12787 pierre 466
//              LanguageManager langmgr;
467
//              langmgr.init(false);
12531 cbradney 468
                bool isSectionTitle = true;
469
                bool isTitle = false;
470
                bool startText = false;
471
                bool startTitle = false;
472
                result = "<table>";
19187 craig 473
 
474
                QMap<QString, QString> sections;
475
                QMap<QString, QString> languages;
476
                QMultiMap<QString, QString> names;
477
                QString currLang;
478
                int section=0;
479
                QString snum;
12531 cbradney 480
                while (!inTS.atEnd())
481
                {
482
                        lineTS = inTS.readLine();
483
                        lineTS.replace("<", "&lt;");
484
                        lineTS.replace(">", "&gt;");
485
                        name = "";
486
                        contact = "";
487
                        if (!lineTS.isEmpty())
488
                        {
489
                                if  (isSectionTitle)
490
                                {
19187 craig 491
                                        ++section;
492
                                        snum.setNum(section);
493
                                        //result += "<tr><td><b><i>"+About::trTranslationTitle(lineTS)+"</i></b></td><td></td></tr>";
494
 
495
                                        sections.insert(snum, "<tr><td><b><i>"+About::trTranslationTitle(lineTS)+"</i></b></td><td></td></tr>");
12531 cbradney 496
                                        isSectionTitle = false;
497
                                        isTitle = false;
498
                                        startTitle = false;
499
                                }
500
                                else if (isTitle)
501
                                {
502
                                        startTitle = false;
503
                                        fieldTS = lineTS.split(" ");
504
                                        code = (fieldTS.isEmpty() ? "" : fieldTS.takeLast());
505
                                        if (!code.isEmpty())
506
                                        {
507
                                                code.replace("(", "");
508
                                                code.replace(")", "");
12967 fschmid 509
                                                code = LanguageManager::instance()->getLangFromAbbrev(code);
12531 cbradney 510
                                        }
19187 craig 511
                                        //result += "<tr><td><b>"+code+"</b></td><td></td></tr>";
512
                                        languages.insert(snum+":"+code, "<tr><td><b>"+code+"</b></td><td></td></tr>");
12531 cbradney 513
                                        isTitle = false;
19187 craig 514
                                        currLang=code;
12531 cbradney 515
 
516
                                } // if is title
517
                                else
518
                                {
519
                                        startText = false;
520
                                        fieldTS = lineTS.split(" ");
521
                                        contact = (fieldTS.isEmpty() ? "" : fieldTS.takeLast());
522
                                        contact.replace("(", "");
523
                                        contact.replace(")", "");
524
                                        name = (fieldTS.isEmpty() ? "" : fieldTS.join(" "));
19187 craig 525
                                        //result += "<tr><td>"+name+"</td><td>"+(contact == "@" ? "" : contact)+"</td></tr>";
526
                                        names.insert(snum+":"+code, "<tr><td>"+name+"</td><td>"+(contact == "@" ? "" : contact)+"</td></tr>");
12531 cbradney 527
                                } // else is title
528
                        } // if is empty line
529
                        else
530
                        {
531
                                // empty lines switch between title and text
532
                                if (!startText && !startTitle)
533
                                {
534
                                        isTitle = !isTitle;
535
                                        if (isTitle)
536
                                        {
19187 craig 537
                                                //result += "<tr><td></td><td></td></tr>";
12531 cbradney 538
                                                startTitle = true;
539
                                        }
540
                                        else
541
                                        {
542
                                                startText = true;
543
                                        }
544
                                //
545
                                // multiple empty lines start a section instead of marking a title
546
                                }
547
                                else if (startTitle)
548
                                {
549
                                        isTitle = false;
550
                                        isSectionTitle = true;
551
                                }
552
                        } // else is empty line
553
                } // while ! atEnd
19187 craig 554
 
555
                QMapIterator<QString, QString> s(sections);
556
                while (s.hasNext())
557
                {
558
                        s.next();
559
                        result += s.value();
21258 jghali 560
                        result += "<tr><td></td><td></td></tr>";
19187 craig 561
                        QMapIterator<QString, QString> l(languages);
562
                        while (l.hasNext())
563
                        {
564
                                l.next();
565
                                QStringList sl=l.key().split(":");
566
                                if (s.key()==sl.first())
567
                                {
568
                                        result += l.value();
569
 
570
                                        QMapIterator<QString, QString> n(names);
571
                                        while (n.hasNext())
572
                                        {
573
                                                n.next();
574
                                                if (n.key()==l.key())
575
                                                        result += n.value();
576
                                        }
577
                                        result += "<tr><td></td><td></td></tr>";
578
                                }
579
                        }
580
                        result += "<tr><td></td><td></td></tr><tr><td></td><td></td></tr>";
581
                }
12531 cbradney 582
                result += "<table>";
583
        } // if file found
584
        else
585
        {
586
                if (!fileName.isEmpty())
587
                {
588
                        QStringList field = fileName.split("/");
589
                        if (!field.isEmpty())
590
                        {
591
                                file = field.takeLast();
592
                        }
593
                }
594
                result = tr("Unable to open %1 file. Please check your install directory or the Scribus website for %1 information.").arg(file);
595
                result = "";
596
        } // else file found
597
        return result;
598
} // parseTranslationFile()
599
 
600
/*!
601
* parse a text file and return a links list in html format:
602
* left the names and right the contact address
603
* the html table can be "split" in sections
604
* @param QString fileName the file to be parsed
605
* @return QString the html table
606
*/
607
QString About::parseLinksFile(QString fileName)
608
{
609
        QString result;
610
        QString file;
611
        QFile linksFile(fileName);
612
        if (linksFile.open(QIODevice::ReadOnly | QIODevice::Text))
613
        {
614
                QTextStream inTS(&linksFile);
615
                inTS.setCodec("UTF-8");
15267 jghali 616
                inTS.setAutoDetectUnicode(true);
12531 cbradney 617
                QString lineTS;
618
                bool isTitle = true;
619
                result = "<table>";
620
                while (!inTS.atEnd())
621
                {
622
                        lineTS = inTS.readLine();
623
                        // convert (r) "�" to &#174, "�" to &#8482
624
                        // lineTS = QString::fromUtf8(lineTS);
625
                        lineTS.replace("<", "&lt;");
626
                        lineTS.replace(">", "&gt;");
627
                        lineTS.replace("�", "&#174;");
628
                        lineTS.replace("�", "&#8482;");
629
                        if (!lineTS.isEmpty())
630
                        {
631
                                if (isTitle)
632
                                {
633
                                        isTitle = false;
634
                                        result += "<tr><td><b>"+About::trLinksTitle(lineTS)+"</b></td></tr>";
635
 
636
                                } // if is title
637
                                else
638
                                {
639
                                        result += "<tr><td><a href=\""+lineTS+"\">"+lineTS+"</a></td></tr>";
640
                                } // else is title
641
                        } // if is empty line
642
                        else
643
                        {
644
                                // empty lines switch to title (one line)
645
                          result += "<tr><td></td></tr>";
646
                          isTitle = true;
647
                        } // else is empty line
648
                } // while ! atEnd
649
                result += "<table>";
650
        } // if file found
651
        else
652
        {
653
                if (!fileName.isEmpty())
654
                {
655
                        QStringList field = fileName.split("/");
656
                        if (!field.isEmpty())
657
                        {
658
                                file = field.takeLast();
659
                        }
660
                }
661
                result = tr("Unable to open %1 file. Please check your install directory or the Scribus website for %1 information.").arg(file);
662
                result = "";
663
        } // else file found
664
        return result;
665
} // parseLinksFile()
666
 
10913 jghali 667
void About::setVisible (bool visible)
668
{
669
        QDialog::setVisible(visible);
670
        if (m_firstShow  && (m_mode == About::CheckUpdates) && visible)
671
        {
672
                m_firstShow = false;
673
                runUpdateCheck();
674
        }
675
}
676
 
5923 cbradney 677
void About::runUpdateCheck()
678
{
20197 craig 679
        updateView->clear();
680
        UpgradeCheckerGUI uc(updateView);
10926 cbradney 681
        disconnect( checkForUpdateButton, SIGNAL( clicked() ), this, SLOT( runUpdateCheck() ) );
682
        uc.fetch();
683
        connect( checkForUpdateButton, SIGNAL( clicked() ), this, SLOT( runUpdateCheck() ) );
5923 cbradney 684
}