kocore.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "kocore.h"
00026
00027 #include "koprefs.h"
00028 #include "koglobals.h"
00029 #include "koidentitymanager.h"
00030
00031 #include <calendar/plugin.h>
00032 #include <korganizer/part.h>
00033
00034 #include <klibloader.h>
00035 #include <kdebug.h>
00036 #include <kconfig.h>
00037 #include <kxmlguifactory.h>
00038 #include <kstandarddirs.h>
00039 #include <klocale.h>
00040
00041 #include <qwidget.h>
00042
00043 KOCore *KOCore::mSelf = 0;
00044
00045 KOCore *KOCore::self()
00046 {
00047 if ( !mSelf ) {
00048 mSelf = new KOCore;
00049 }
00050
00051 return mSelf;
00052 }
00053
00054 KOCore::KOCore()
00055 : mCalendarDecorationsLoaded( false ), mHolidays( 0 ), mXMLGUIClient( 0 ),
00056 mIdentityManager( 0 )
00057 {
00058 }
00059
00060 KOCore::~KOCore()
00061 {
00062 mSelf = 0;
00063 }
00064
00065 KTrader::OfferList KOCore::availablePlugins( const QString &type, int version )
00066 {
00067 QString constraint;
00068 if ( version >= 0 ) {
00069 constraint = QString("[X-KDE-PluginInterfaceVersion] == %1")
00070 .arg( QString::number( version ) );
00071 }
00072
00073 return KTrader::self()->query( type, constraint );
00074 }
00075
00076 KTrader::OfferList KOCore::availablePlugins()
00077 {
00078 return availablePlugins( KOrg::Plugin::serviceType(),
00079 KOrg::Plugin::interfaceVersion() );
00080 }
00081
00082 KTrader::OfferList KOCore::availableCalendarDecorations()
00083 {
00084 return availablePlugins( KOrg::CalendarDecoration::serviceType(),
00085 KOrg::CalendarDecoration::interfaceVersion() );
00086 }
00087
00088 KTrader::OfferList KOCore::availableParts()
00089 {
00090 return availablePlugins( KOrg::Part::serviceType(),
00091 KOrg::Part::interfaceVersion() );
00092 }
00093
00094 KOrg::Plugin *KOCore::loadPlugin( KService::Ptr service )
00095 {
00096 kdDebug(5850) << "loadPlugin: library: " << service->library() << endl;
00097
00098 if ( !service->hasServiceType( KOrg::Plugin::serviceType() ) ) {
00099 return 0;
00100 }
00101
00102 KLibFactory *factory = KLibLoader::self()->factory(
00103 service->library().latin1() );
00104
00105 if ( !factory ) {
00106 kdDebug(5850) << "KOCore::loadPlugin(): Factory creation failed" << endl;
00107 return 0;
00108 }
00109
00110 KOrg::PluginFactory *pluginFactory =
00111 static_cast<KOrg::PluginFactory *>( factory );
00112
00113 if ( !pluginFactory ) {
00114 kdDebug(5850) << "KOCore::loadPlugin(): Cast to KOrg::PluginFactory failed" << endl;
00115 return 0;
00116 }
00117
00118 return pluginFactory->create();
00119 }
00120
00121 KOrg::Plugin *KOCore::loadPlugin( const QString &name )
00122 {
00123 KTrader::OfferList list = availablePlugins();
00124 KTrader::OfferList::ConstIterator it;
00125 for( it = list.begin(); it != list.end(); ++it ) {
00126 if ( (*it)->desktopEntryName() == name ) {
00127 return loadPlugin( *it );
00128 }
00129 }
00130 return 0;
00131 }
00132
00133 KOrg::CalendarDecoration *KOCore::loadCalendarDecoration(KService::Ptr service)
00134 {
00135 kdDebug(5850) << "loadCalendarDecoration: library: " << service->library() << endl;
00136
00137 KLibFactory *factory = KLibLoader::self()->factory(service->library().latin1());
00138
00139 if (!factory) {
00140 kdDebug(5850) << "KOCore::loadCalendarDecoration(): Factory creation failed" << endl;
00141 return 0;
00142 }
00143
00144 KOrg::CalendarDecorationFactory *pluginFactory =
00145 static_cast<KOrg::CalendarDecorationFactory *>(factory);
00146
00147 if (!pluginFactory) {
00148 kdDebug(5850) << "KOCore::loadCalendarDecoration(): Cast failed" << endl;
00149 return 0;
00150 }
00151
00152 return pluginFactory->create();
00153 }
00154
00155 KOrg::CalendarDecoration *KOCore::loadCalendarDecoration( const QString &name )
00156 {
00157 KTrader::OfferList list = availableCalendarDecorations();
00158 KTrader::OfferList::ConstIterator it;
00159 for( it = list.begin(); it != list.end(); ++it ) {
00160 if ( (*it)->desktopEntryName() == name ) {
00161 return loadCalendarDecoration( *it );
00162 }
00163 }
00164 return 0;
00165 }
00166
00167 KOrg::Part *KOCore::loadPart( KService::Ptr service, KOrg::MainWindow *parent )
00168 {
00169 kdDebug(5850) << "loadPart: library: " << service->library() << endl;
00170
00171 if ( !service->hasServiceType( KOrg::Part::serviceType() ) ) {
00172 return 0;
00173 }
00174
00175 KLibFactory *factory = KLibLoader::self()->factory(
00176 service->library().latin1() );
00177
00178 if ( !factory ) {
00179 kdDebug(5850) << "KOCore::loadPart(): Factory creation failed" << endl;
00180 return 0;
00181 }
00182
00183 KOrg::PartFactory *pluginFactory =
00184 static_cast<KOrg::PartFactory *>( factory );
00185
00186 if ( !pluginFactory ) {
00187 kdDebug(5850) << "KOCore::loadPart(): Cast failed" << endl;
00188 return 0;
00189 }
00190
00191 return pluginFactory->create( parent );
00192 }
00193
00194 void KOCore::setXMLGUIClient( KXMLGUIClient *guiclient )
00195 {
00196 mXMLGUIClient = guiclient;
00197 }
00198
00199
00200 KOrg::Part *KOCore::loadPart( const QString &name, KOrg::MainWindow *parent )
00201 {
00202 KTrader::OfferList list = availableParts();
00203 KTrader::OfferList::ConstIterator it;
00204 for( it = list.begin(); it != list.end(); ++it ) {
00205 if ( (*it)->desktopEntryName() == name ) {
00206 return loadPart( *it, parent );
00207 }
00208 }
00209 return 0;
00210 }
00211
00212 KOrg::CalendarDecoration::List KOCore::calendarDecorations()
00213 {
00214 if ( !mCalendarDecorationsLoaded ) {
00215 QStringList selectedPlugins = KOPrefs::instance()->mSelectedPlugins;
00216
00217 mCalendarDecorations.clear();
00218 KTrader::OfferList plugins = availableCalendarDecorations();
00219 KTrader::OfferList::ConstIterator it;
00220 for( it = plugins.begin(); it != plugins.end(); ++it ) {
00221 if ( (*it)->hasServiceType("Calendar/Decoration") ) {
00222 QString name = (*it)->desktopEntryName();
00223 if ( selectedPlugins.find( name ) != selectedPlugins.end() ) {
00224 KOrg::CalendarDecoration *d = loadCalendarDecoration(*it);
00225 mCalendarDecorations.append( d );
00226 if ( name == "holidays" ) mHolidays = d;
00227 }
00228 }
00229 }
00230 mCalendarDecorationsLoaded = true;
00231 }
00232
00233 return mCalendarDecorations;
00234 }
00235
00236 KOrg::Part::List KOCore::loadParts( KOrg::MainWindow *parent )
00237 {
00238 KOrg::Part::List parts;
00239
00240 QStringList selectedPlugins = KOPrefs::instance()->mSelectedPlugins;
00241
00242 KTrader::OfferList plugins = availableParts();
00243 KTrader::OfferList::ConstIterator it;
00244 for( it = plugins.begin(); it != plugins.end(); ++it ) {
00245 if ( selectedPlugins.find( (*it)->desktopEntryName() ) !=
00246 selectedPlugins.end() ) {
00247 KOrg::Part *part = loadPart( *it, parent );
00248 if ( part ) {
00249 if ( !parent->mainGuiClient() ) {
00250 kdError() << "KOCore::loadParts(): parent has no mainGuiClient."
00251 << endl;
00252 } else {
00253 parent->mainGuiClient()->insertChildClient( part );
00254 parts.append( part );
00255 }
00256 }
00257 }
00258 }
00259 return parts;
00260 }
00261
00262 void KOCore::unloadPlugins()
00263 {
00264 KOrg::CalendarDecoration *plugin;
00265 for( plugin = mCalendarDecorations.first(); plugin;
00266 plugin = mCalendarDecorations.next() ) {
00267 delete plugin;
00268 }
00269 mCalendarDecorations.clear();
00270 mCalendarDecorationsLoaded = false;
00271 mHolidays = 0;
00272 }
00273
00274 void KOCore::unloadParts( KOrg::MainWindow *parent, KOrg::Part::List &parts )
00275 {
00276 KOrg::Part *part;
00277 for( part = parts.first(); part; part = parts.next() ) {
00278 parent->mainGuiClient()->removeChildClient( part );
00279 delete part;
00280 }
00281 parts.clear();
00282 }
00283
00284 KOrg::Part::List KOCore::reloadParts( KOrg::MainWindow *parent,
00285 KOrg::Part::List &parts )
00286 {
00287 KXMLGUIFactory *factory = parent->mainGuiClient()->factory();
00288 factory->removeClient( parent->mainGuiClient() );
00289
00290 unloadParts( parent, parts );
00291 KOrg::Part::List list = loadParts( parent );
00292
00293 factory->addClient( parent->mainGuiClient() );
00294
00295 return list;
00296 }
00297
00298 void KOCore::reloadPlugins()
00299 {
00300 mCalendarDecorationsLoaded = false;
00301
00302 unloadPlugins();
00303 calendarDecorations();
00304 }
00305
00306 QString KOCore::holiday( const QDate &date )
00307 {
00308 calendarDecorations();
00309 if ( mHolidays ) return mHolidays->shortText( date );
00310 else return QString::null;
00311 }
00312
00313 bool KOCore::isWorkDay( const QDate &date )
00314 {
00315 int mask( ~( KOPrefs::instance()->mWorkWeekMask ) );
00316
00317 bool nonWorkDay = ( mask & ( 1 << ( date.dayOfWeek() - 1 ) ) );
00318
00319 nonWorkDay = nonWorkDay || ( KOPrefs::instance()->mExcludeHolidays &&
00320 !holiday( date ).isEmpty() );
00321
00322 return !nonWorkDay;
00323 }
00324
00325 KPIM::IdentityManager* KOCore::identityManager()
00326 {
00327 if ( !mIdentityManager )
00328 mIdentityManager = new KOrg::IdentityManager;
00329 return mIdentityManager;
00330 }
This file is part of the documentation for korganizer Library Version 3.3.2.