00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include "config.h"
00022
#include <koGlobal.h>
00023
#include <kdebug.h>
00024
#include <klocale.h>
00025
#include <kprinter.h>
00026
#include <qfont.h>
00027
#include <qfontinfo.h>
00028
#include <kglobalsettings.h>
00029
#include <kglobal.h>
00030
#include <ksimpleconfig.h>
00031
#include <kstandarddirs.h>
00032
#include <kstaticdeleter.h>
00033
#include <kimageio.h>
00034
#include <kiconloader.h>
00035
#include <kstandarddirs.h>
00036
00037
struct PageFormatInfo
00038 {
00039 KoFormat format;
00040 KPrinter::PageSize kprinter;
00041
const char* shortName;
00042
const char* descriptiveName;
00043
double width;
00044
double height;
00045 };
00046
00047
00048
00049
00050
00051
const PageFormatInfo pageFormatInfo[]=
00052 {
00053 { PG_DIN_A3, KPrinter::A3,
"A3", I18N_NOOP(
"ISO A3"), 297.0, 420.0 },
00054 { PG_DIN_A4, KPrinter::A4,
"A4", I18N_NOOP(
"ISO A4"), 210.0, 297.0 },
00055 { PG_DIN_A5, KPrinter::A5,
"A5", I18N_NOOP(
"ISO A5"), 148.0, 210.0 },
00056 { PG_US_LETTER, KPrinter::Letter,
"Letter", I18N_NOOP(
"US Letter"), 216.0, 279.0 },
00057 { PG_US_LEGAL, KPrinter::Legal,
"Legal", I18N_NOOP(
"US Legal"), 216.0, 356.0 },
00058 { PG_SCREEN, KPrinter::A4,
"Screen", I18N_NOOP(
"Screen"), PG_A4_HEIGHT, PG_A4_WIDTH },
00059 { PG_CUSTOM, KPrinter::A4,
"Custom", I18N_NOOP(
"Custom"), PG_A4_WIDTH, PG_A4_HEIGHT },
00060 { PG_DIN_B5, KPrinter::B5,
"B5", I18N_NOOP(
"ISO B5"), 182.0, 257.0 },
00061 { PG_US_EXECUTIVE, KPrinter::Executive,
"Executive", I18N_NOOP(
"US Executive"), 191.0, 254.0 },
00062 { PG_DIN_A0, KPrinter::A0,
"A0", I18N_NOOP(
"ISO A0"), 841.0, 1189.0 },
00063 { PG_DIN_A1, KPrinter::A1,
"A1", I18N_NOOP(
"ISO A1"), 594.0, 841.0 },
00064 { PG_DIN_A2, KPrinter::A2,
"A2", I18N_NOOP(
"ISO A2"), 420.0, 594.0 },
00065 { PG_DIN_A6, KPrinter::A6,
"A6", I18N_NOOP(
"ISO A6"), 105.0, 148.0 },
00066 { PG_DIN_A7, KPrinter::A7,
"A7", I18N_NOOP(
"ISO A7"), 74.0, 105.0 },
00067 { PG_DIN_A8, KPrinter::A8,
"A8", I18N_NOOP(
"ISO A8"), 52.0, 74.0 },
00068 { PG_DIN_A9, KPrinter::A9,
"A9", I18N_NOOP(
"ISO A9"), 37.0, 52.0 },
00069 { PG_DIN_B0, KPrinter::B0,
"B0", I18N_NOOP(
"ISO B0"), 1030.0, 1456.0 },
00070 { PG_DIN_B1, KPrinter::B1,
"B1", I18N_NOOP(
"ISO B1"), 728.0, 1030.0 },
00071 { PG_DIN_B10, KPrinter::B10,
"B10", I18N_NOOP(
"ISO B10"), 32.0, 45.0 },
00072 { PG_DIN_B2, KPrinter::B2,
"B2", I18N_NOOP(
"ISO B2"), 515.0, 728.0 },
00073 { PG_DIN_B3, KPrinter::B3,
"B3", I18N_NOOP(
"ISO B3"), 364.0, 515.0 },
00074 { PG_DIN_B4, KPrinter::B4,
"B4", I18N_NOOP(
"ISO B4"), 257.0, 364.0 },
00075 { PG_DIN_B6, KPrinter::B6,
"B6", I18N_NOOP(
"ISO B6"), 128.0, 182.0 },
00076 { PG_ISO_C5, KPrinter::C5E,
"C5", I18N_NOOP(
"ISO C5"), 163.0, 229.0 },
00077 { PG_US_COMM10, KPrinter::Comm10E,
"Comm10", I18N_NOOP(
"US Common 10"), 105.0, 241.0 },
00078 { PG_ISO_DL, KPrinter::DLE,
"DL", I18N_NOOP(
"ISO DL"), 110.0, 220.0 },
00079 { PG_US_FOLIO, KPrinter::Folio,
"Folio", I18N_NOOP(
"US Folio"), 210.0, 330.0 },
00080 { PG_US_LEDGER, KPrinter::Ledger,
"Ledger", I18N_NOOP(
"US Ledger"), 432.0, 279.0 },
00081 { PG_US_TABLOID, KPrinter::Tabloid,
"Tabloid", I18N_NOOP(
"US Tabloid"), 279.0, 432.0 }
00082 };
00083
00084
int KoPageFormat::printerPageSize( KoFormat format )
00085 {
00086
if ( format == PG_SCREEN )
00087 {
00088 kdWarning() <<
"You use the page layout SCREEN. Printing in DIN A4 LANDSCAPE." << endl;
00089
return KPrinter::A4;
00090 }
00091
else if ( format == PG_CUSTOM )
00092 {
00093 kdWarning() <<
"The used page layout (CUSTOM) is not supported by KPrinter. Printing in A4." << endl;
00094
return KPrinter::A4;
00095 }
00096
else if ( format <= PG_LAST_FORMAT )
00097
return pageFormatInfo[ format ].kprinter;
00098
else
00099
return KPrinter::A4;
00100 }
00101
00102
double KoPageFormat::width( KoFormat format, KoOrientation orientation )
00103 {
00104
if ( orientation == PG_LANDSCAPE )
00105
return height( format, PG_PORTRAIT );
00106
if ( format <= PG_LAST_FORMAT )
00107
return pageFormatInfo[ format ].width;
00108
return PG_A4_WIDTH;
00109 }
00110
00111
double KoPageFormat::height( KoFormat format, KoOrientation orientation )
00112 {
00113
if ( orientation == PG_LANDSCAPE )
00114
return width( format, PG_PORTRAIT );
00115
if ( format <= PG_LAST_FORMAT )
00116
return pageFormatInfo[ format ].height;
00117
return PG_A4_HEIGHT;
00118 }
00119
00120 KoFormat KoPageFormat::guessFormat(
double width,
double height )
00121 {
00122
for (
int i = 0 ; i <= PG_LAST_FORMAT ; ++i )
00123 {
00124
00125
00126
if ( i != PG_CUSTOM
00127 && kAbs( width - pageFormatInfo[i].width ) < 1.0
00128 && kAbs( height - pageFormatInfo[i].height ) < 1.0 )
00129
return static_cast<KoFormat>(i);
00130 }
00131
return PG_CUSTOM;
00132 }
00133
00134
QString KoPageFormat::formatString( KoFormat format )
00135 {
00136
if ( format <= PG_LAST_FORMAT )
00137
return QString::fromLatin1( pageFormatInfo[ format ].shortName );
00138
return QString::fromLatin1(
"A4" );
00139 }
00140
00141 KoFormat KoPageFormat::formatFromString(
const QString & string )
00142 {
00143
for (
int i = 0 ; i <= PG_LAST_FORMAT ; ++i )
00144 {
00145
if (string == QString::fromLatin1( pageFormatInfo[ i ].shortName ))
00146
return pageFormatInfo[ i ].format;
00147 }
00148
00149
return PG_CUSTOM;
00150 }
00151
00152
QString KoPageFormat::name( KoFormat format )
00153 {
00154
if ( format <= PG_LAST_FORMAT )
00155
return i18n( pageFormatInfo[ format ].descriptiveName );
00156
return i18n( pageFormatInfo[ PG_DIN_A4 ].descriptiveName );
00157 }
00158
00159
QStringList KoPageFormat::allFormats()
00160 {
00161
QStringList lst;
00162
for (
int i = 0 ; i <= PG_LAST_FORMAT ; ++i )
00163 {
00164 lst << i18n( pageFormatInfo[ i ].descriptiveName );
00165 }
00166
return lst;
00167 }
00168
00169 KoGlobal* KoGlobal::s_global = 0L;
00170
static KStaticDeleter<KoGlobal> sdg;
00171
00172 KoGlobal* KoGlobal::self()
00173 {
00174
if ( !s_global )
00175 sdg.setObject( s_global,
new KoGlobal );
00176
return s_global;
00177 }
00178
00179 KoGlobal::KoGlobal()
00180 : m_pointSize( -1 ), m_kofficeConfig( 0L )
00181 {
00182
00183 KGlobal::locale()->insertCatalogue(
"koffice");
00184
00185 KImageIO::registerFormats();
00186
00187
00188 KGlobal::dirs()->addPrefix(PREFIX);
00189
00190
00191 KGlobal::iconLoader()->addAppDir(
"koffice");
00192 }
00193
00194 KoGlobal::~KoGlobal()
00195 {
00196
delete m_kofficeConfig;
00197 }
00198
00199
QFont KoGlobal::_defaultFont()
00200 {
00201
QFont font = KGlobalSettings::generalFont();
00202
00203
if ( font.
pointSize() == -1 )
00204 {
00205
00206
if ( m_pointSize == -1 )
00207 m_pointSize =
QFontInfo(font).pointSize();
00208 Q_ASSERT( m_pointSize != -1 );
00209 font.setPointSize( m_pointSize );
00210 }
00211
00212
00213
return font;
00214 }
00215
00216
QStringList KoGlobal::_listTagOfLanguages()
00217 {
00218
if ( m_languageTag.isEmpty() )
00219 createListOfLanguages();
00220
return m_languageTag;
00221 }
00222
00223
QStringList KoGlobal::_listOfLanguages()
00224 {
00225
if ( m_languageList.empty() )
00226 createListOfLanguages();
00227
return m_languageList;
00228 }
00229
00230
void KoGlobal::createListOfLanguages()
00231 {
00232
QStringList alllang = KGlobal::dirs()->findAllResources(
"locale",
00233 QString::fromLatin1(
"*/entry.desktop"));
00234
QStringList langlist=alllang;
00235
for ( QStringList::ConstIterator it = langlist.begin();
00236 it != langlist.end(); ++it )
00237 {
00238 KSimpleConfig entry(*it);
00239 entry.setGroup(
"KCM Locale");
00240
QString name = entry.readEntry(
"Name",
00241 KGlobal::locale()->translate(
"without name"));
00242
00243
QString tag = *it;
00244
int index = tag.findRev(
'/');
00245 tag = tag.left(index);
00246 index = tag.findRev(
'/');
00247 tag = tag.mid(index+1);
00248 m_languageList.append(name);
00249 m_languageTag.append(tag);
00250 }
00251
00252 }
00253
00254
QString KoGlobal::tagOfLanguage(
const QString & _lang)
00255 {
00256
00257
int pos =
self()->m_languageList.findIndex( _lang );
00258
if ( pos != -1)
00259 {
00260
return self()->m_languageTag[ pos ];
00261 }
00262
return QString::null;
00263 }
00264
00265
int KoGlobal::languageIndexFromTag(
const QString &_lang )
00266 {
00267
return self()->m_languageTag.findIndex( _lang );
00268 }
00269
00270
QString KoGlobal::languageFromTag(
const QString &_lang )
00271 {
00272
00273
int pos =
self()->m_languageTag.findIndex( _lang );
00274
if ( pos != -1)
00275
return self()->m_languageList[ pos ];
00276
else
00277
return QString::null;
00278 }
00279
00280 KConfig* KoGlobal::_kofficeConfig()
00281 {
00282
if ( !m_kofficeConfig ) {
00283 m_kofficeConfig =
new KConfig(
"kofficerc" );
00284 }
00285
return m_kofficeConfig;
00286 }