00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <iostream>
00023
00024
#include <dcopclient.h>
00025
#include <kaboutdata.h>
00026
#include <kcmdlineargs.h>
00027
#include <kdebug.h>
00028
#include <kiconloader.h>
00029
#include <klocale.h>
00030
#include <kstartupinfo.h>
00031
#include <kuniqueapplication.h>
00032
#include <kwin.h>
00033
#include <ktrader.h>
00034
#include "plugin.h"
00035
00036
#include <qlabel.h>
00037
#include "splash.h"
00038
00039
#include "mainwindow.h"
00040
00041
using namespace std;
00042
00043
static const char description[] =
00044 I18N_NOOP(
"KDE personal information manager" );
00045
00046
static const char version[] =
"1.0";
00047
00048
class KontactApp :
public KUniqueApplication {
00049
public:
00050 KontactApp() : mMainWindow( 0 ) {}
00051 ~KontactApp() {}
00052
00053
int newInstance();
00054
00055
private:
00056 Kontact::MainWindow *mMainWindow;
00057 };
00058
00059
static void listPlugins()
00060 {
00061 KInstance instance(
"kontact" );
00062 KTrader::OfferList offers = KTrader::self()->query(
00063 QString::fromLatin1(
"Kontact/Plugin" ),
00064
QString(
"[X-KDE-KontactPluginVersion] == %1" ).arg( KONTACT_PLUGIN_VERSION ) );
00065
for(KService::List::Iterator it = offers.begin(); it != offers.end(); ++it)
00066 {
00067 KService::Ptr service = (*it);
00068 cout << service->library().remove(
"libkontact_" ).latin1() << endl;
00069 }
00070 }
00071
00072
static KCmdLineOptions options[] =
00073 {
00074 {
"module <module>", I18N_NOOP(
"Start with a specific Kontact module"), 0 },
00075 {
"nosplash", I18N_NOOP(
"Disable the splash screen"), 0 },
00076 {
"list", I18N_NOOP(
"List all possible modules and exit"), 0 },
00077 KCmdLineLastOption
00078 };
00079
00080
00081
int KontactApp::newInstance()
00082 {
00083 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
00084
QString moduleName;
00085
if ( args->isSet(
"module") )
00086 {
00087 moduleName = QString::fromLocal8Bit(args->getOption(
"module"));
00088 }
00089 Kontact::Splash* splash =
new Kontact::Splash( 0,
"splash" );
00090
if ( !mMainWindow && args->isSet(
"splash") )
00091 splash->show();
00092
00093
if ( isRestored() ) {
00094
00095
if ( KMainWindow::canBeRestored( 1 ) ) {
00096 mMainWindow =
new Kontact::MainWindow(splash);
00097 setMainWidget( mMainWindow );
00098 mMainWindow->show();
00099 mMainWindow->restore( 1 );
00100 }
00101 }
else {
00102
if ( !mMainWindow ) {
00103 mMainWindow =
new Kontact::MainWindow(splash);
00104
if ( !moduleName.isEmpty() )
00105 mMainWindow->activePluginModule( moduleName );
00106 mMainWindow->show();
00107 setMainWidget( mMainWindow );
00108 }
00109
else
00110 {
00111
if ( !moduleName.isEmpty() )
00112 mMainWindow->activePluginModule( moduleName );
00113 }
00114 }
00115
00116
00117
00118
return KUniqueApplication::newInstance();
00119 }
00120
00121
int main(
int argc,
char **argv)
00122 {
00123 KAboutData about(
"kontact", I18N_NOOP(
"Kontact" ), version, description,
00124 KAboutData::License_GPL, I18N_NOOP(
"(C) 2001-2004 The Kontact developers"), 0,
"http://kontact.org" );
00125 about.addAuthor(
"Daniel Molkentin", 0,
"molkentin@kde.org" );
00126 about.addAuthor(
"Don Sanders", 0,
"sanders@kde.org" );
00127 about.addAuthor(
"Cornelius Schumacher", 0,
"schumacher@kde.org" );
00128 about.addAuthor(
"Tobias K\303\266nig", 0,
"tokoe@kde.org" );
00129 about.addAuthor(
"David Faure", 0,
"faure@kde.org" );
00130 about.addAuthor(
"Ingo Kl\303\266cker", 0,
"kloecker@kde.org" );
00131 about.addAuthor(
"Sven L\303\274ppken", 0,
"sven@kde.org" );
00132 about.addAuthor(
"Zack Rusin", 0,
"zack@kde.org" );
00133 about.addAuthor(
"Matthias Hoelzer-Kluepfel", I18N_NOOP(
"Original Author"),
"mhk@kde.org" );
00134
00135 KCmdLineArgs::init( argc, argv, &about );
00136 KCmdLineArgs::addCmdLineOptions( options );
00137 KUniqueApplication::addCmdLineOptions();
00138 KApplication::addCmdLineOptions();
00139
00140 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
00141
if ( args->isSet(
"list" ) )
00142 {
00143 listPlugins();
00144
return 0;
00145 }
00146
00147
if ( !KontactApp::start() ) {
00148
00149
return 0;
00150 }
00151
00152 KontactApp app;
00153
bool ret = app.exec();
00154
while ( KMainWindow::memberList->first() )
00155
delete KMainWindow::memberList->first();
00156
00157
return ret;
00158 }