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 }