Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
2160 cbradney 1
/***************************************************************************
2
        begin                : May 2005
3
        copyright            : (C) 2005 by Craig Bradney       
4
        email                : cbradney@zip.com.au
5
        copyright            : (C) 2001 by Franz Schmid
6
        email                : Franz.Schmid@altmuehlnet.de
7
***************************************************************************/
8
 
9
/***************************************************************************
10
*                                                                         *
11
*   ScApp program is free software; you can redistribute it and/or modify  *
12
*   it under the terms of the GNU General Public License as published by  *
13
*   the Free Software Foundation; either version 2 of the License, or     *
14
*   (at your option) any later version.                                   *
15
*                                                                         *
16
***************************************************************************/
17
 
18
#include <qfont.h>
19
#include <qstring.h>
20
#include <qtranslator.h>
21
#include <qfileinfo.h>
22
#include <qfile.h>
23
#include <qdir.h>
24
#include <qtextcodec.h>
25
#include <cstdlib>
26
 
27
#include "scribusapp.h"
28
#include "scribus.h"
29
#include "scpaths.h"
30
#include "prefsfile.h"
31
 
32
ScribusQApp::ScribusQApp ( int & argc, char ** argv ) : QApplication(argc, argv)
33
{
34
}
35
 
36
int ScribusQApp::init(bool /*useGUI*/, bool showSplash, QString lang, QString file)
37
{
38
        QStringList langs = getLang(QString(lang));
39
 
2161 cbradney 40
        scribus = new ScribusApp();
2160 cbradney 41
        if (!scribus)
42
                exit(EXIT_FAILURE);
43
        if (!langs.isEmpty())
44
                installTranslators(langs);
45
 
46
        processEvents();
47
 
48
        int scribusRetVal = scribus->initScribus(showSplash, lang);
49
        if (scribusRetVal == 1)
50
                return(EXIT_FAILURE);
51
        scribus->initCrashHandler();
52
        setMainWidget(scribus);
53
        connect(this, SIGNAL(lastWindowClosed()), this, SLOT(quit()));
54
 
55
        scribus->show();
56
        scribus->ShowSubs();
57
        if (file != "")
58
                scribus->loadDoc(file);
59
        return 0;
60
}
61
 
62
/*!
63
\fn void getLang(QString lang)
64
\author Franz Schmid
65
\author Alessandro Rimoldi
66
\date Mon Feb  9 14:07:46 CET 2004
67
\brief If the lang argument is empty, returns the value in the locales
68
 
69
The lang is always a two character code, except for "en_GB" where
70
the whole string is returned. For all the other locales starting
71
with "en", no locale is returned.
72
 
73
(Inspired from Klocale.cpp)
74
 
75
\param lang QString a two letter string describing the lang environement
76
\retval QString A string describing the language environement
77
*/
78
 
79
QStringList ScribusQApp::getLang(QString lang)
80
{
81
        QStringList langs;
82
 
83
        // read the locales
84
        if (lang != "")
85
                langs.push_back(lang);
86
 
87
        //add in user preferences lang, only overridden by lang command line option
88
        QString Pff = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus");
89
        QFileInfo Pffi = QFileInfo(Pff);
90
        if (Pffi.exists())
91
        {
92
                QString PrefsPfad;
93
                if (Pffi.isDir())
94
                        PrefsPfad = Pff;
95
                else
96
                        PrefsPfad = QDir::homeDirPath();
97
                QString prefsXMLFile=QDir::convertSeparators(PrefsPfad + "/prefs13.xml");
98
                QFileInfo infoPrefsFile(prefsXMLFile);
99
                if (infoPrefsFile.exists())
100
                {
101
                        PrefsFile* prefsFile = new PrefsFile(prefsXMLFile);
102
                        if (prefsFile) {
103
                                PrefsContext* userprefsContext = prefsFile->getContext("user_preferences");
104
                                if (userprefsContext) {
105
                                        QString prefslang = userprefsContext->get("gui_language","");
106
                                        if (prefslang!="")
107
                                                langs.push_back(prefslang);
108
                                }
109
                        }
110
                }
111
        }
112
 
113
        if ((lang = ::getenv("LC_ALL")) != "")
114
                langs.push_back(lang);
115
        if ((lang = ::getenv("LC_MESSAGES")) != "")
116
                langs.push_back(lang);
117
        if ((lang = ::getenv("LANG")) != "")
118
                langs.push_back(lang);
119
 
120
        langs.push_back(QString(QTextCodec::locale()));
121
 
122
        // remove duplicate entries...
123
        for (QStringList::Iterator it = langs.fromLast(); it != langs.begin(); --it)
124
                if (langs.contains(*it) > 1)
125
                        it = langs.remove(it);
126
 
127
        return langs;
128
}
129
 
130
 
131
/*!
132
\fn void installTranslators(QApplication *app, QStringList langs)
133
\author Franz Schmid
134
\author Alessandro Rimoldi
135
\date Mon Feb  9 14:07:46 CET 2004
136
\brief Loads the translations for Scribus and for the Plugins
137
\param app QApplication pointer to the application object
138
\param lang QString a two letter string describing the lang environement
139
\retval void
140
*/
141
void ScribusQApp::installTranslators(QStringList langs)
142
{
143
        QString lang = "";
2161 cbradney 144
        static QTranslator *trans = 0;
145
 
146
        if ( trans )
147
        {
148
                removeTranslator( trans );
149
                delete trans;
150
        }
151
        trans = new QTranslator(0);
2160 cbradney 152
        QString path = ScPaths::instance().libDir();
153
        path += "scribus";
154
 
155
        bool loaded = false;
156
        for (QStringList::Iterator it = langs.begin(); it != langs.end() && !loaded; ++it) {
157
                lang=(*it).left(5);
158
                if (lang == "en")
159
                        break;
160
                else if (loaded = trans->load(QString(path + '.' + lang), "."))
161
                        loaded = true;
162
        }
163
 
164
        if (loaded)
165
                installTranslator(trans);
2161 cbradney 166
        /* CB TODO, currently disabled, because its broken broken broken
2160 cbradney 167
        path = ScPaths::instance().pluginDir();
168
        QDir dir(path , "*.*", QDir::Name, QDir::Files | QDir::NoSymLinks);
169
        if (dir.exists() && (dir.count() != 0)) {
170
                for (uint i = 0; i < dir.count(); ++i) {
171
                        QFileInfo file(path + dir[i]);
172
                        if ((file.extension(false).lower() == "qm")
173
                        && (file.extension(true).lower().left(5) == lang)) {
174
                                trans = new QTranslator(0);
175
                                trans->load(QString(path + dir[i]), ".");
176
                                installTranslator(trans);
177
                        }
178
                }
2161 cbradney 179
        }*/
2160 cbradney 180
}
181
 
182
void ScribusQApp::changeGUILanguage(QString newGUILang)
183
{
184
        QStringList newLangs;
185
        if (newGUILang=="")
186
                newLangs.append("en");
187
        else
188
                newLangs.append(newGUILang);
189
        installTranslators(newLangs);
190
}