Subversion Repositories Scribus

Rev

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