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
00026
00027
00028
00029
00030
00031
#include "korganizer.h"
00032
00033
#include "komailclient.h"
00034
#include "calprinter.h"
00035
#include "calendarview.h"
00036
#include "koviewmanager.h"
00037
#include "kodialogmanager.h"
00038
#include "kowindowlist.h"
00039
#include "koprefs.h"
00040
#include "kocore.h"
00041
#include "konewstuff.h"
00042
#include "actionmanager.h"
00043
#include "koglobals.h"
00044
#include "alarmclient.h"
00045
#include "resourceview.h"
00046
#include "kogroupware.h"
00047
00048
#include <korganizer/part.h>
00049
00050
#include <libkcal/calendarlocal.h>
00051
#include <libkcal/calendarresources.h>
00052
#include <libkcal/resourcecalendar.h>
00053
#include <libkcal/resourcelocal.h>
00054
00055
#include <kglobal.h>
00056
#include <kdebug.h>
00057
#include <kiconloader.h>
00058
#include <kstandarddirs.h>
00059
#include <kstdaccel.h>
00060
#include <kfiledialog.h>
00061
#include <kaction.h>
00062
#include <kstdaction.h>
00063
#include <kedittoolbar.h>
00064
#include <ktempfile.h>
00065
#include <kio/netaccess.h>
00066
#include <kmessagebox.h>
00067
#include <dcopclient.h>
00068
#include <kprocess.h>
00069
#include <kwin.h>
00070
#include <kkeydialog.h>
00071
#include <ktip.h>
00072
#include <kstdguiitem.h>
00073
00074
#include <qcursor.h>
00075
#include <qtimer.h>
00076
#include <qvbox.h>
00077
#include <qfile.h>
00078
#include <qlabel.h>
00079
00080
#include <stdlib.h>
00081
00082
using namespace KParts;
00083
#include "korganizer.moc"
00084
using namespace KOrg;
00085
00086 KOrganizer::KOrganizer(
const char *name )
00087 : DCOPObject( "KOrganizerIface" ),
00088 KParts::
MainWindow( 0, name ),
00089 KOrg::
MainWindow()
00090 {
00091 kdDebug(5850) <<
"KOrganizer::KOrganizer()" << endl;
00092 KOCore::self()->setXMLGUIClient(
this );
00093
00094
00095 mCalendarView =
new CalendarView(
this,
"KOrganizer::CalendarView" );
00096 setCentralWidget(mCalendarView);
00097
00098 mActionManager =
new ActionManager(
this, mCalendarView,
this,
this,
false );
00099 }
00100
00101 KOrganizer::~KOrganizer()
00102 {
00103
delete mActionManager;
00104 }
00105
00106
void KOrganizer::init(
bool document )
00107 {
00108 kdDebug() <<
"KOrganizer::init() "
00109 << ( document ?
"hasDocument" :
"resources" ) << endl;
00110
00111 setHasDocument( document );
00112
00113
00114
00115
if ( hasDocument() ) {
00116 mActionManager->
createCalendarLocal();
00117 }
else {
00118 mActionManager->
createCalendarResources();
00119 setCaption( i18n(
"Calendar") );
00120 }
00121
00122 mActionManager->
init();
00123 connect( mActionManager, SIGNAL( actionNew(
const KURL & ) ),
00124 SLOT( newMainWindow(
const KURL & ) ) );
00125 connect( mActionManager, SIGNAL( actionKeyBindings() ),
00126 SLOT( configureKeyBindings() ) );
00127
00128 mActionManager->
loadParts();
00129
00130 initActions();
00131
readSettings();
00132
00133 statusBar()->insertItem(
"", ID_GENERAL, 10 );
00134
00135 statusBar()->insertItem( i18n(
" Incoming messages: %1 ").arg( 0 ),
00136 ID_MESSAGES_IN );
00137 statusBar()->insertItem( i18n(
" Outgoing messages: %2 ").arg( 0 ),
00138 ID_MESSAGES_OUT );
00139 statusBar()->setItemAlignment( ID_MESSAGES_IN, AlignRight );
00140 statusBar()->setItemAlignment( ID_MESSAGES_OUT, AlignRight );
00141 connect( statusBar(), SIGNAL( pressed(
int ) ),
00142 SLOT( statusBarPressed(
int ) ) );
00143
00144 connect( mActionManager->
view(), SIGNAL( numIncomingChanged(
int ) ),
00145 SLOT( setNumIncoming(
int ) ) );
00146 connect( mActionManager->
view(), SIGNAL( numOutgoingChanged(
int ) ),
00147 SLOT( setNumOutgoing(
int ) ) );
00148
00149 connect( mActionManager->
view(), SIGNAL( statusMessage(
const QString & ) ),
00150 SLOT(
showStatusMessage(
const QString & ) ) );
00151
00152 setStandardToolBarMenuEnabled(
true );
00153
00154 kdDebug(5850) <<
"KOrganizer::KOrganizer() done" << endl;
00155 }
00156
00157
void KOrganizer::newMainWindow(
const KURL &url )
00158 {
00159
KOrganizer *korg =
new KOrganizer();
00160
if ( url.isValid() || url.isEmpty() ) {
00161 korg->
init(
true );
00162
if ( korg->
openURL( url ) || url.isEmpty() ) {
00163 korg->show();
00164 }
else {
00165
delete korg;
00166 }
00167 }
else {
00168 korg->
init(
false );
00169 korg->show();
00170 }
00171 }
00172
00173 void KOrganizer::readSettings()
00174 {
00175
00176
00177
00178 KConfig *config = KOGlobals::self()->config();
00179
00180 config->setGroup(
"KOrganizer Geometry" );
00181
00182
int windowWidth = config->readNumEntry(
"Width", 600 );
00183
int windowHeight = config->readNumEntry(
"Height", 400 );
00184
00185 resize( windowWidth, windowHeight );
00186
00187 mActionManager->
readSettings();
00188
00189 config->sync();
00190 }
00191
00192
00193 void KOrganizer::writeSettings()
00194 {
00195 kdDebug(5850) <<
"KOrganizer::writeSettings" << endl;
00196
00197 KConfig *config = KOGlobals::self()->config();
00198
00199 config->setGroup(
"KOrganizer Geometry" );
00200 config->writeEntry(
"Width",width() );
00201 config->writeEntry(
"Height",height() );
00202
00203 mActionManager->
writeSettings();
00204 saveMainWindowSettings( config );
00205 config->sync();
00206 }
00207
00208
00209
void KOrganizer::initActions()
00210 {
00211 KStdAction::quit(
this, SLOT( close() ), actionCollection() );
00212 mStatusBarAction = KStdAction::showStatusbar(
this, SLOT( toggleStatusBar() ),
00213 actionCollection() );
00214
00215 KStdAction::configureToolbars(
this, SLOT(
configureToolbars() ),
00216 actionCollection() );
00217
00218 setInstance( KGlobal::instance() );
00219
00220 setXMLFile(
"korganizerui.rc" );
00221 createGUI( 0 );
00222
00223 KConfig *config = KOGlobals::self()->config();
00224
00225 applyMainWindowSettings( config );
00226
00227 mStatusBarAction->setChecked( !statusBar()->isHidden() );
00228 }
00229
00230
#if 0
00231
void KOrganizer::initViews()
00232 {
00233 kdDebug(5850) <<
"KOrganizer::initViews()" << endl;
00234
00235
00236 KOrg::View::List views = KOCore::self()->views(
this );
00237 KOrg::View *it;
00238
for( it = views.first(); it; it = views.next() ) {
00239 guiFactory()->addClient( it );
00240 }
00241 }
00242
#endif
00243
00244 bool KOrganizer::queryClose()
00245 {
00246 kdDebug(5850) <<
"KOrganizer::queryClose()" << endl;
00247
00248
bool close = mActionManager->
queryClose();
00249
00250
00251
00252
if ( close )
writeSettings();
00253
00254
return close;
00255 }
00256
00257
bool KOrganizer::queryExit()
00258 {
00259
00260
00261
00262
return true;
00263 }
00264
00265 void KOrganizer::configureToolbars()
00266 {
00267 saveMainWindowSettings( KOGlobals::self()->config(),
"MainWindow" );
00268
00269 KEditToolbar dlg( factory() );
00270 dlg.exec();
00271 }
00272
00273
void KOrganizer::toggleStatusBar()
00274 {
00275
bool show_statusbar = mStatusBarAction->isChecked();
00276
if (show_statusbar)
00277 statusBar()->show();
00278
else
00279 statusBar()->hide();
00280 }
00281
00282
void KOrganizer::statusBarPressed(
int id )
00283 {
00284
if (
id == ID_MESSAGES_IN )
00285 mCalendarView->
dialogManager()->
showIncomingDialog();
00286
else if (
id == ID_MESSAGES_OUT )
00287 mCalendarView->
dialogManager()->
showOutgoingDialog();
00288 }
00289
00290
void KOrganizer::setNumIncoming(
int num )
00291 {
00292 statusBar()->changeItem( i18n(
" Incoming messages: %1 ").arg( num ),
00293 ID_MESSAGES_IN);
00294 }
00295
00296
void KOrganizer::setNumOutgoing(
int num )
00297 {
00298 statusBar()->changeItem( i18n(
" Outgoing messages: %1 ").arg( num ),
00299 ID_MESSAGES_OUT );
00300 }
00301
00302 void KOrganizer::showStatusMessage(
const QString &message )
00303 {
00304 statusBar()->message(message,2000);
00305 }
00306
00307 bool KOrganizer::openURL(
const KURL &url,
bool merge )
00308 {
00309
return mActionManager->
openURL( url, merge );
00310 }
00311
00312 bool KOrganizer::saveURL()
00313 {
00314
return mActionManager->
saveURL();
00315 }
00316
00317 bool KOrganizer::saveAsURL(
const KURL & kurl )
00318 {
00319
return mActionManager->
saveAsURL( kurl ) ;
00320 }
00321
00322 KURL
KOrganizer::getCurrentURL()
const
00323
{
00324
return mActionManager->
url();
00325 }
00326
00327
void KOrganizer::saveProperties( KConfig *config )
00328 {
00329
return mActionManager->
saveProperties( config );
00330 }
00331
00332
void KOrganizer::readProperties( KConfig *config )
00333 {
00334
return mActionManager->
readProperties( config );
00335 }
00336
00337 bool KOrganizer::deleteEvent( QString uid )
00338 {
00339
return mActionManager->
deleteEvent( uid );
00340 }
00341
00342
bool KOrganizer::eventRequest( QString request, QCString receiver,
00343 QString ical )
00344 {
00345
return mActionManager->
eventRequest( request, receiver, ical );
00346 }
00347
00348
bool KOrganizer::eventReply( QString ical )
00349 {
00350
return mActionManager->
eventReply( ical );
00351 }
00352
00353
KOrg::CalendarViewBase *KOrganizer::view()
const
00354
{
00355
return mActionManager->
view();
00356 }
00357
00358 void KOrganizer::setTitle()
00359 {
00360
00361
00362
if ( !hasDocument() )
return;
00363
00364 QString title;
00365
00366 KURL url = mActionManager->
url();
00367
00368
if ( !url.isEmpty() ) {
00369
if ( url.isLocalFile() ) title = url.fileName();
00370
else title = url.prettyURL();
00371 }
else {
00372 title = i18n(
"New Calendar");
00373 }
00374
00375
if ( mCalendarView->
isReadOnly() ) {
00376 title +=
" [" + i18n(
"read-only") +
"]";
00377 }
00378
00379 setCaption( title, !mCalendarView->
isReadOnly() &&
00380 mCalendarView->
isModified() );
00381 }
00382
00383 QString
KOrganizer::getCurrentURLasString()
const
00384
{
00385
return mActionManager->
getCurrentURLasString();
00386 }
00387
00388 void KOrganizer::closeURL()
00389 {
00390
return mActionManager->
closeURL();
00391 }
00392
00393 bool KOrganizer::openURL( QString url )
00394 {
00395
return mActionManager->
openURL( url );
00396 }
00397
00398 bool KOrganizer::mergeURL( QString url )
00399 {
00400
return mActionManager->
mergeURL( url );
00401 }
00402
00403 bool KOrganizer::saveAsURL( QString url )
00404 {
00405
return mActionManager->
saveAsURL( url );
00406 }
00407
00408
void KOrganizer::configureKeyBindings()
00409 {
00410 KKeyDialog::configure( actionCollection(),
this );
00411 }