Subversion Repositories Scribus

Rev

Rev 18199 | Rev 18217 | 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>
9338 fschmid 23
#include <QTabWidget>
11800 cbradney 24
#include <QTextStream>
12574 jghali 25
#include <QToolTip>
9338 fschmid 26
#include <QWidget>
1641 cbradney 27
 
12570 cbradney 28
#include "about.h"
5364 cbradney 29
#include "commonstrings.h"
2688 craig 30
#include "scconfig.h"
11800 cbradney 31
#include "scpaths.h"
10108 cbradney 32
#include "sctextbrowser.h"
9898 avox 33
 
34
#include <cairo.h>
35
 
10212 cbradney 36
#include "util_ghostscript.h"
10200 cbradney 37
#include "util_icon.h"
18194 fschmid 38
#ifndef USE_QT5
39
        #include "upgradechecker.h"
40
#endif
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) );
98
        setWindowIcon(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 );
14712 cbradney 110
        pixmapLabel1->setPixmap(loadIcon("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);
18194 fschmid 117
        QString BUILD_DAY = "10";
118
        QString BUILD_MONTH = CommonStrings::march;
18056 mrdocs 119
        QString BUILD_YEAR = "2013";
9697 craig 120
        QString BUILD_TIME = "";
121
        QString BUILD_TZ = "";
122
        QString BUILD_NAME = "";
3587 avox 123
 
9697 craig 124
// This is the old way:
125
        QString built = tr("%1 %2 %3").arg(BUILD_DAY).arg(BUILD_MONTH).arg(BUILD_YEAR);
3587 avox 126
 
9697 craig 127
// This is my way, only activated when envvar BUILD_NAME is set :-)  AV
128
//#include "about_builddate.inc"
129
        QString version = VERSION;
130
        if (BUILD_NAME != "")
131
                version += " \"" + BUILD_NAME + "\"";
132
        if (BUILD_NAME == "BleedingEdge")
12531 cbradney 133
                built = tr("%3-%2-%1 %4 %5").arg(BUILD_DAY).arg(BUILD_MONTH).arg(BUILD_YEAR).arg(BUILD_TIME).arg(BUILD_TZ);
9697 craig 134
 
3579 avox 135
        QString bu;
1641 cbradney 136
        bu += "C";
137
        bu += "-";
138
#ifdef HAVE_CUPS
139
        bu += "C";
140
#else
141
        bu += "*";
142
#endif
143
        bu += "-";
144
        bu += "T";
145
        bu += "-";
146
#ifdef HAVE_FONTCONFIG
147
        bu += "F";
148
#else
149
        bu += "*";
150
#endif
3113 fschmid 151
        bu += "-";
16281 jghali 152
#ifdef HAVE_PRIVATE_CAIRO
153
        bu += "PC";
154
        bu += cairo_version_string();
155
#else
3113 fschmid 156
        bu += "C";
9898 avox 157
        bu += cairo_version_string();
3113 fschmid 158
#endif
1641 cbradney 159
 
3587 avox 160
// Some more information if we are not on a 32bit little endian Unix machine
161
#if defined(Q_OS_WIN)
162
        bu += "-Windows";
163
#elif defined(Q_OS_MAC)
164
        bu += "-Mac/";
9898 avox 165
#elif defined(Q_OS_DARWIN)
166
        // dunno if anyone uses this...
167
        bu += "-Darwin";
168
#endif
10501 cbradney 169
        if (QSysInfo::WordSize != 32)
10493 fschmid 170
                bu += QString("-%1bit").arg(QSysInfo::WordSize);
171
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
10501 cbradney 172
        if (QSysInfo::ByteOrder==QSysInfo::BigEndian)
3587 avox 173
                bu += "-Big";
10493 fschmid 174
#endif
2840 craig 175
        QString gsver(getGSVersion());
12574 jghali 176
        if (!gsver.isEmpty())
3583 cbradney 177
                gsver = tr("Using Ghostscript version %1").arg(gsver);
2840 craig 178
        else
3583 cbradney 179
                gsver = tr("No Ghostscript version available");
9770 fschmid 180
        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 181
        tabLayout1->addWidget( buildID, 0, Qt::AlignHCenter );
9338 fschmid 182
        tabWidget2->addTab( tab, tr( "&About" ) );
10493 fschmid 183
        tab_2 = new QWidget( tabWidget2 );
9338 fschmid 184
        tabLayout = new QHBoxLayout( tab_2 );
1641 cbradney 185
        tabLayout->setSpacing( 6 );
186
        tabLayout->setMargin( 10 );
4363 mrdocs 187
 
2618 cbradney 188
 
12574 jghali 189
        /*! AUTHORS tab */
190
        // /usr/local/scribus14/share/doc/scribus-1.3.5svn/AUTHORS
12531 cbradney 191
        textView1 = new ScTextBrowser( tab_2 );
13530 pierre 192
        textView1->setHtml(About::parseAuthorFile(ScPaths::instance().docDir() + "AUTHORS"));
2916 mrdocs 193
 
1641 cbradney 194
        tabLayout->addWidget( textView1 );
9338 fschmid 195
        tabWidget2->addTab( tab_2, tr( "A&uthors" ) );
10493 fschmid 196
        tab_3 = new QWidget( tabWidget2 );
9338 fschmid 197
        tabLayout_2 = new QHBoxLayout( tab_3 );
1641 cbradney 198
        tabLayout_2->setSpacing( 6 );
199
        tabLayout_2->setMargin( 10 );
10108 cbradney 200
        textView2 = new ScTextBrowser( tab_3);
12787 pierre 201
//      LanguageManager langmgr;
202
//      langmgr.init(false);
12531 cbradney 203
 
12574 jghali 204
        /*! TRANSLATION tab */
205
        // /usr/local/scribus14/share/doc/scribus-1.3.5svn/TRANSLATION
13530 pierre 206
        textView2->setHtml(About::parseTranslationFile(ScPaths::instance().docDir() + "TRANSLATION"));
12531 cbradney 207
 
12574 jghali 208
        tabLayout_2->addWidget( textView2 );
9338 fschmid 209
        tabWidget2->addTab( tab_3, tr( "&Translations" ) );
1641 cbradney 210
 
12531 cbradney 211
        /*! ONLINE tab (03/04/2004 petr vanek) */
12574 jghali 212
        // /usr/local/scribus14/share/doc/scribus-1.3.5svn/LINKS
10493 fschmid 213
        tab_4 = new QWidget( tabWidget2 );
10108 cbradney 214
        textView4 = new ScTextBrowser( tab_4 );
13530 pierre 215
        textView4->setHtml(About::parseLinksFile(ScPaths::instance().docDir() + "LINKS"));
9338 fschmid 216
        tabLayout_4 = new QHBoxLayout( tab_4 );
1641 cbradney 217
        tabLayout_4->setSpacing( 6 );
218
        tabLayout_4->setMargin( 10 );
219
        tabLayout_4->addWidget( textView4 );
9338 fschmid 220
        tabWidget2->addTab( tab_4, tr( "&Online" ) );
12531 cbradney 221
        /*! UPDATE tab */
10493 fschmid 222
        tab_5 = new QWidget( tabWidget2 );
223
        tabWidget2->addTab( tab_5, tr( "&Updates" ) );
9338 fschmid 224
        updateLayout = new QVBoxLayout( tab_5 );
5923 cbradney 225
        updateLayout->setSpacing( 6 );
226
        updateLayout->setMargin( 10 );
10926 cbradney 227
        checkForUpdateButton = new QPushButton( tr( "Check for Updates" ), tab_5 );
10108 cbradney 228
        textView5 = new ScTextBrowser( tab_5);
5923 cbradney 229
        updateLayout->addWidget( checkForUpdateButton );
230
        updateLayout->addWidget( textView5 );
11800 cbradney 231
 
12531 cbradney 232
        /*! LICENCE tab */
11800 cbradney 233
        tab_Licence = new QWidget( tabWidget2 );
234
        tabWidget2->addTab( tab_Licence, tr( "&Licence" ) );
235
        licenceLayout = new QVBoxLayout( tab_Licence );
236
        licenceLayout->setSpacing( 6 );
237
        licenceLayout->setMargin( 10 );
238
        textViewLicence = new ScTextBrowser( tab_Licence);
239
        licenceLayout->addWidget( textViewLicence );
240
 
241
        QFile licenceFile(ScPaths::instance().docDir() + "/COPYING");
12531 cbradney 242
        if (!licenceFile.open(QIODevice::ReadOnly | QIODevice::Text))
13530 pierre 243
                textViewLicence->setSimpleText( tr("Unable to open licence file. Please check your install directory or the Scribus website for licencing information.") );
12531 cbradney 244
        else
11800 cbradney 245
        {
246
                QTextStream inTS(&licenceFile);
247
                QString licenceText = inTS.readAll();
13530 pierre 248
                textViewLicence->setSimpleText(licenceText);
12531 cbradney 249
        }
11800 cbradney 250
 
251
        //Add tab widget to about window
1641 cbradney 252
        aboutLayout->addWidget( tabWidget2 );
7368 subik 253
 
9338 fschmid 254
        layout2 = new QHBoxLayout;
1641 cbradney 255
        layout2->setSpacing( 6 );
256
        layout2->setMargin( 0 );
257
        QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
258
        layout2->addItem( spacer );
10493 fschmid 259
        okButton = new QPushButton( tr( "&Close" ), this );
1641 cbradney 260
        okButton->setDefault( true );
261
        layout2->addWidget( okButton );
262
        aboutLayout->addLayout( layout2 );
263
        setMaximumSize(sizeHint());
264
 
4363 mrdocs 265
 
12574 jghali 266
        //tooltips
10397 cbradney 267
        buildID->setToolTip( "<qt>" + tr( "This panel shows the version, build date and compiled in library support in Scribus.")+"<br>"
12531 cbradney 268
        + 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>"
269
        + tr("Missing library support is indicated by a *. This also indicates the version of Ghostscript which Scribus has detected.")+"<br>"
270
        + tr("The Windows version does not use fontconfig or CUPS libraries." ) + "</qt>" );
10397 cbradney 271
        checkForUpdateButton->setToolTip( "<qt>" + tr( "Check for updates to Scribus. No data from your machine will be transferred off it." ) + "</qt>" );
5220 mrdocs 272
        // signals and slots connections
273
        connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
5923 cbradney 274
        connect( checkForUpdateButton, SIGNAL( clicked() ), this, SLOT( runUpdateCheck() ) );
14952 fschmid 275
        resize(minimumSizeHint());
5273 mrdocs 276
}
5923 cbradney 277
 
12531 cbradney 278
 
10913 jghali 279
void About::showEvent (QShowEvent * event)
280
{
281
        if (m_mode == About::CheckUpdates && m_firstShow)
282
                tabWidget2->setCurrentIndex(4);
283
        QDialog::showEvent(event);
284
}
285
 
12531 cbradney 286
 
287
 
288
QString About::trAuthorTitle(QString title)
289
{
290
        QString result;
291
        if ( title == "Development Team:" )
292
                result = tr("Development Team:");
293
        else if ( title == "Mac OS&#174; X Aqua Port:" )
294
                result = tr("Mac OS&#174; X Aqua Port:");
295
        else if ( title == "OS/2&#174;/eComStation&#8482; Port:" )
296
                result = tr("OS/2&#174;/eComStation&#8482; Port:");
297
        else if ( title == "Windows&#174; Port:" )
298
                result = tr("Windows&#174; Port:");
299
        else if ( title == "Contributions from:" )
300
                result = tr("Contributions from:");
301
        else if ( title == "Official Documentation:" )
302
                result = tr("Official Documentation:");
303
        else if ( title == "Doc Translators:" )
304
                result = tr("Doc Translators:");
305
        else if ( title == "Other Documentation:" )
306
                result = tr("Other Documentation:");
307
        else if ( title == "Webmasters:" )
308
                result = tr("Webmasters:");
309
        else if ( title == "Splash Screen:" )
310
                result = tr("Splash Screen:");
311
        else if ( title == "Tango Project Icons:" )
312
                result = tr("Tango Project Icons:");
313
        else
12967 fschmid 314
        {
12531 cbradney 315
                std::cout << "please add the untranslated title \"" << qPrintable(title) << "\" to About::trAuthorTitle()" << std::endl;
316
                result = title;
12967 fschmid 317
        }
12531 cbradney 318
        return result;
319
}
320
QString About::trTranslationTitle(QString title)
321
{
322
        QString result;
323
        if ( title == "Official Translations and Translators:" )
324
                result = tr("Official Translations and Translators:");
325
        else if ( title == "Previous Translation Contributors:" )
326
                result = tr("Previous Translation Contributors:");
327
        else
12967 fschmid 328
        {
16756 craig 329
                std::cout << "please add the untranslated title \"" << qPrintable(title) << "\" to About::trTranslationTitle()" << std::endl;
12531 cbradney 330
                result = title;
12967 fschmid 331
        }
12531 cbradney 332
        return result;
333
}
334
 
335
 
336
QString About::trLinksTitle(QString title)
337
{
338
        QString result;
339
        if ( title == "Homepage" )
340
                result = tr("Homepage");
341
        else if ( title == "Online Reference" )
342
                result = tr("Online Reference");
343
        else if ( title == "Wiki" )
344
                result = tr("Wiki");
345
        else if ( title == "Bugs and Feature Requests" )
346
                result = tr("Bugs and Feature Requests");
347
        else if ( title == "Developer Blog" )
348
                result = tr("Developer Blog");
349
        else if ( title == "Mailing List" )
350
                result = tr("Mailing List");
351
        else
12967 fschmid 352
        {
12531 cbradney 353
                std::cout << "please add the untranslated title \"" << qPrintable(title) << "\" to About::trLinksTitle()" << std::endl;
354
                result = title;
12967 fschmid 355
        }
12531 cbradney 356
        return result;
357
}
358
 
359
 
360
/*!
361
* parse a text file and return an author list in an html table:
362
* left the names and right the contact address
363
* the html table can be "split" in sections
364
* @param QString fileName the file to be parsed
365
* @return QString the html table
366
*/
367
QString About::parseAuthorFile(QString fileName)
368
{
369
        QString result;
370
        QString file;
371
        QFile authorsFile(fileName);
372
        if (authorsFile.open(QIODevice::ReadOnly | QIODevice::Text))
373
        {
374
                QTextStream inTS(&authorsFile);
15267 jghali 375
                inTS.setCodec("UTF-8");
376
                inTS.setAutoDetectUnicode(true);
12531 cbradney 377
                QString lineTS;
378
                QStringList fieldTS;
379
                QString name;
380
                QString contact;
381
                bool isTitle = true;
382
                bool startText = false;
383
                bool startTitle = false;
384
                result = "<table>";
385
                while (!inTS.atEnd())
386
                {
387
                        lineTS = inTS.readLine();
388
                        // convert (r) "�" to &#174, "�" to &#8482
389
                        // lineTS = QString::fromUtf8(lineTS);
390
                        lineTS.replace("<", "&lt;");
391
                        lineTS.replace(">", "&gt;");
392
                        lineTS.replace("�", "&#174;");
393
                        lineTS.replace("�", "&#8482;");
394
                        name = "";
395
                        contact = "";
396
                        if (!lineTS.isEmpty())
397
                        {
398
                                if (isTitle)
399
                                {
400
                                        startTitle = false;
401
                                        result += "<tr><td><b>"+About::trAuthorTitle(lineTS)+"</b></td><td></td></tr>";
402
 
403
                                } // if is title
404
                                else
405
                                {
406
                                        startText = false;
407
                                        fieldTS = lineTS.split(" ");
408
                                        contact = (fieldTS.isEmpty() ? "" : fieldTS.takeLast());
409
                                        name = (fieldTS.isEmpty() ? "" : fieldTS.join(" "));
410
                                        result += "<tr><td>"+name+"</td><td>"+(contact == "@" ? "" : contact)+"</td></tr>";
411
                                } // else is title
412
                        } // if is empty line
413
                        else
414
                        {
415
                                // empty lines switch between title and text
416
                                if (!startText && !startTitle)
417
                                {
418
                                        isTitle = !isTitle;
419
                                        if (isTitle)
420
                                        {
421
                                                result += "<tr><td></td><td></td></tr>";
422
                                                startTitle = true;
423
                                        }
424
                                        else
425
                                        {
426
                                                startText = true;
427
                                        }
428
                                }
429
                        } // else is empty line
430
                } // while ! atEnd
431
                result += "<table>";
432
        } // if file found
433
        else
434
        {
435
                if (!fileName.isEmpty())
436
                {
437
                        QStringList field = fileName.split("/");
438
                        if (!field.isEmpty())
439
                        {
440
                                file = field.takeLast();
441
                        }
442
                }
443
                result = tr("Unable to open %1 file. Please check your install directory or the Scribus website for %1 information.").arg(file);
444
                result = "";
445
        } // else file found
446
        return result;
447
} // parseTextFile()
448
 
449
/*!
450
* parse a text file and return an author list in an html table:
451
* left the names and right the contact address
452
* the html table can be "split" in sections
453
* @param QString fileName the file to be parsed
454
* @return QString the html table
455
*/
456
QString About::parseTranslationFile(QString fileName)
457
{
458
        QString result;
459
        QString file;
460
        QFile translationFile(fileName);
461
        if (translationFile.open(QIODevice::ReadOnly | QIODevice::Text))
462
        {
463
                QTextStream inTS(&translationFile);
15267 jghali 464
                inTS.setCodec("UTF-8");
465
                inTS.setAutoDetectUnicode(true);
12531 cbradney 466
                QString lineTS;
467
                QStringList fieldTS;
468
                QString code;
469
                QString name;
470
                QString contact;
12787 pierre 471
//              LanguageManager langmgr;
472
//              langmgr.init(false);
12531 cbradney 473
                bool isSectionTitle = true;
474
                bool isTitle = false;
475
                bool startText = false;
476
                bool startTitle = false;
477
                result = "<table>";
478
                while (!inTS.atEnd())
479
                {
480
                        lineTS = inTS.readLine();
481
                        lineTS.replace("<", "&lt;");
482
                        lineTS.replace(">", "&gt;");
483
                        name = "";
484
                        contact = "";
485
                        if (!lineTS.isEmpty())
486
                        {
487
                                if  (isSectionTitle)
488
                                {
489
                                        result += "<tr><td><b><i>"+About::trTranslationTitle(lineTS)+"</i></b></td><td></td></tr>";
490
                                        isSectionTitle = false;
491
                                        isTitle = false;
492
                                        startTitle = false;
493
                                }
494
                                else if (isTitle)
495
                                {
496
                                        startTitle = false;
497
                                        fieldTS = lineTS.split(" ");
498
                                        code = (fieldTS.isEmpty() ? "" : fieldTS.takeLast());
499
                                        if (!code.isEmpty())
500
                                        {
501
                                                code.replace("(", "");
502
                                                code.replace(")", "");
12967 fschmid 503
                                                code = LanguageManager::instance()->getLangFromAbbrev(code);
12531 cbradney 504
                                        }
505
                                        result += "<tr><td><b>"+code+"</b></td><td></td></tr>";
506
                                        isTitle = false;
507
 
508
                                } // if is title
509
                                else
510
                                {
511
                                        startText = false;
512
                                        fieldTS = lineTS.split(" ");
513
                                        contact = (fieldTS.isEmpty() ? "" : fieldTS.takeLast());
514
                                        contact.replace("(", "");
515
                                        contact.replace(")", "");
516
                                        name = (fieldTS.isEmpty() ? "" : fieldTS.join(" "));
517
                                        result += "<tr><td>"+name+"</td><td>"+(contact == "@" ? "" : contact)+"</td></tr>";
518
                                } // else is title
519
                        } // if is empty line
520
                        else
521
                        {
522
                                // empty lines switch between title and text
523
                                if (!startText && !startTitle)
524
                                {
525
                                        isTitle = !isTitle;
526
                                        if (isTitle)
527
                                        {
528
                                                result += "<tr><td></td><td></td></tr>";
529
                                                startTitle = true;
530
                                        }
531
                                        else
532
                                        {
533
                                                startText = true;
534
                                        }
535
                                //
536
                                // multiple empty lines start a section instead of marking a title
537
                                }
538
                                else if (startTitle)
539
                                {
540
                                        isTitle = false;
541
                                        isSectionTitle = true;
542
                                }
543
                        } // else is empty line
544
                } // while ! atEnd
545
                result += "<table>";
546
        } // if file found
547
        else
548
        {
549
                if (!fileName.isEmpty())
550
                {
551
                        QStringList field = fileName.split("/");
552
                        if (!field.isEmpty())
553
                        {
554
                                file = field.takeLast();
555
                        }
556
                }
557
                result = tr("Unable to open %1 file. Please check your install directory or the Scribus website for %1 information.").arg(file);
558
                result = "";
559
        } // else file found
560
        return result;
561
} // parseTranslationFile()
562
 
563
/*!
564
* parse a text file and return a links list in html format:
565
* left the names and right the contact address
566
* the html table can be "split" in sections
567
* @param QString fileName the file to be parsed
568
* @return QString the html table
569
*/
570
QString About::parseLinksFile(QString fileName)
571
{
572
        QString result;
573
        QString file;
574
        QFile linksFile(fileName);
575
        if (linksFile.open(QIODevice::ReadOnly | QIODevice::Text))
576
        {
577
                QTextStream inTS(&linksFile);
578
                inTS.setCodec("UTF-8");
15267 jghali 579
                inTS.setAutoDetectUnicode(true);
12531 cbradney 580
                QString lineTS;
581
                bool isTitle = true;
582
                result = "<table>";
583
                while (!inTS.atEnd())
584
                {
585
                        lineTS = inTS.readLine();
586
                        // convert (r) "�" to &#174, "�" to &#8482
587
                        // lineTS = QString::fromUtf8(lineTS);
588
                        lineTS.replace("<", "&lt;");
589
                        lineTS.replace(">", "&gt;");
590
                        lineTS.replace("�", "&#174;");
591
                        lineTS.replace("�", "&#8482;");
592
                        if (!lineTS.isEmpty())
593
                        {
594
                                if (isTitle)
595
                                {
596
                                        isTitle = false;
597
                                        result += "<tr><td><b>"+About::trLinksTitle(lineTS)+"</b></td></tr>";
598
 
599
                                } // if is title
600
                                else
601
                                {
602
                                        result += "<tr><td><a href=\""+lineTS+"\">"+lineTS+"</a></td></tr>";
603
                                } // else is title
604
                        } // if is empty line
605
                        else
606
                        {
607
                                // empty lines switch to title (one line)
608
                          result += "<tr><td></td></tr>";
609
                          isTitle = true;
610
                        } // else is empty line
611
                } // while ! atEnd
612
                result += "<table>";
613
        } // if file found
614
        else
615
        {
616
                if (!fileName.isEmpty())
617
                {
618
                        QStringList field = fileName.split("/");
619
                        if (!field.isEmpty())
620
                        {
621
                                file = field.takeLast();
622
                        }
623
                }
624
                result = tr("Unable to open %1 file. Please check your install directory or the Scribus website for %1 information.").arg(file);
625
                result = "";
626
        } // else file found
627
        return result;
628
} // parseLinksFile()
629
 
10913 jghali 630
void About::setVisible (bool visible)
631
{
632
        QDialog::setVisible(visible);
633
        if (m_firstShow  && (m_mode == About::CheckUpdates) && visible)
634
        {
635
                m_firstShow = false;
636
                runUpdateCheck();
637
        }
638
}
639
 
5923 cbradney 640
void About::runUpdateCheck()
641
{
10926 cbradney 642
        textView5->clear();
18194 fschmid 643
#ifndef USE_QT5
5924 cbradney 644
        UpgradeCheckerGUI uc(textView5);
10926 cbradney 645
        disconnect( checkForUpdateButton, SIGNAL( clicked() ), this, SLOT( runUpdateCheck() ) );
646
        connect(checkForUpdateButton, SIGNAL( clicked() ), &uc, SLOT( abort() ));
647
        checkForUpdateButton->setText( tr("Abort Update Check") );
648
        uc.fetch();
649
        checkForUpdateButton->setText( tr("Check for Updates") );
650
        connect( checkForUpdateButton, SIGNAL( clicked() ), this, SLOT( runUpdateCheck() ) );
18194 fschmid 651
#endif
5923 cbradney 652
}