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
#include "actionmanager.h"
00027
00028
#include <qapplication.h>
00029
#include <qtimer.h>
00030
00031
#include <dcopclient.h>
00032
#include <kaction.h>
00033
#include <kfiledialog.h>
00034
#include <kio/netaccess.h>
00035
#include <kkeydialog.h>
00036
#include <kpopupmenu.h>
00037
#include <kstandarddirs.h>
00038
#include <ktip.h>
00039
#include <ktempfile.h>
00040
#include <kxmlguiclient.h>
00041
#include <kwin.h>
00042
#include <knotifyclient.h>
00043
00044
#include <libkcal/htmlexport.h>
00045
#include <libkcal/calendarlocal.h>
00046
#include <libkcal/calendarresources.h>
00047
#include <libkcal/resourcelocal.h>
00048
00049
#include "alarmclient.h"
00050
#include "calendarview.h"
00051
#include "kocore.h"
00052
#include "kodialogmanager.h"
00053
#include "koglobals.h"
00054
#include "koprefs.h"
00055
#include "koviewmanager.h"
00056
#include "kowindowlist.h"
00057
#include "korganizer.h"
00058
#include "kprocess.h"
00059
#include "konewstuff.h"
00060
#include "history.h"
00061
#include "kogroupware.h"
00062
#include "resourceview.h"
00063
#include "resourceimportdialog.h"
00064
00065
KOWindowList *ActionManager::mWindowList = 0;
00066
00067 ActionManager::ActionManager( KXMLGUIClient *client,
CalendarView *widget,
00068 QObject *parent,
KOrg::MainWindow *mainWindow,
00069
bool isPart )
00070 : QObject( parent ), KCalendarIface(), mRecent( 0 ), mCalendar( 0 ),
00071 mCalendarResources( 0 ), mIsClosing( false )
00072 {
00073 mGUIClient = client;
00074 mACollection = mGUIClient->actionCollection();
00075 mCalendarView = widget;
00076 mIsPart = isPart;
00077 mTempFile = 0;
00078 mNewStuff = 0;
00079 mHtmlExportSync =
false;
00080 mMainWindow = mainWindow;
00081 }
00082
00083 ActionManager::~ActionManager()
00084 {
00085
delete mNewStuff;
00086
00087
00088 KOCore::self()->unloadParts( mMainWindow, mParts );
00089
00090
delete mTempFile;
00091
00092
00093 mWindowList->
removeWindow( mMainWindow );
00094
00095
delete mCalendarView;
00096
00097
delete mCalendar;
00098
delete mCalendarResources;
00099
00100 kdDebug(5850) <<
"~ActionManager() done" << endl;
00101 }
00102
00103
00104
void ActionManager::ActionManager::init()
00105 {
00106
00107
if ( !mWindowList ) {
00108 mWindowList =
new KOWindowList;
00109
00110
if ( !mIsPart )
00111 QTimer::singleShot( 0,
this, SLOT( showTipOnStart() ) );
00112 }
00113
00114
00115
00116 mWindowList->addWindow( mMainWindow );
00117
00118 initActions();
00119
00120
00121 mAutoSaveTimer =
new QTimer(
this );
00122 connect( mAutoSaveTimer,SIGNAL( timeout() ), SLOT( checkAutoSave() ) );
00123
if ( KOPrefs::instance()->mAutoSave &&
00124 KOPrefs::instance()->mAutoSaveInterval > 0 ) {
00125 mAutoSaveTimer->start( 1000 * 60 * KOPrefs::instance()->mAutoSaveInterval );
00126 }
00127
00128 setTitle();
00129
00130 connect( mCalendarView, SIGNAL( modifiedChanged(
bool ) ), SLOT( setTitle() ) );
00131 connect( mCalendarView, SIGNAL( configChanged() ), SLOT( updateConfig() ) );
00132
00133 connect( mCalendarView, SIGNAL( incidenceSelected( Incidence * ) ),
00134
this, SLOT( processIncidenceSelection( Incidence * ) ) );
00135
00136 processIncidenceSelection( 0 );
00137
00138
00139 mCalendarView->checkClipboard();
00140
00141 mCalendarView->lookForOutgoingMessages();
00142 mCalendarView->lookForIncomingMessages();
00143 }
00144
00145 void ActionManager::createCalendarLocal()
00146 {
00147 mCalendar =
new CalendarLocal( KOPrefs::instance()->mTimeZoneId );
00148 mCalendarView->
setCalendar( mCalendar );
00149 mCalendarView->
readSettings();
00150
00151 initCalendar( mCalendar );
00152 }
00153
00154 void ActionManager::createCalendarResources()
00155 {
00156 mCalendarResources = KOCore::self()->calendarResources();
00157
00158 CalendarResourceManager *manager = mCalendarResources->resourceManager();
00159
00160 kdDebug(5850) <<
"CalendarResources used by KOrganizer:" << endl;
00161 CalendarResourceManager::Iterator it;
00162
for( it = manager->begin(); it != manager->end(); ++it ) {
00163 (*it)->dump();
00164 }
00165
00166 setDestinationPolicy();
00167
00168 mCalendarView->
setCalendar( mCalendarResources );
00169 mCalendarView->
readSettings();
00170
00171
00172 KOGroupware::create( mCalendarView, mCalendarResources );
00173
00174 ResourceViewFactory factory( mCalendarResources, mCalendarView );
00175 mCalendarView->
addExtension( &factory );
00176
00177 connect( mCalendarResources, SIGNAL( calendarChanged() ),
00178 mCalendarView, SLOT( slotCalendarChanged() ) );
00179
00180 connect( mCalendarView, SIGNAL(
configChanged() ),
00181 SLOT(
updateConfig() ) );
00182
00183 initCalendar( mCalendarResources );
00184 }
00185
00186
void ActionManager::initCalendar( Calendar *cal )
00187 {
00188 cal->setOwner( KOPrefs::instance()->fullName() );
00189 cal->setEmail( KOPrefs::instance()->email() );
00190
00191 mCalendarView->
setModified(
false );
00192 }
00193
00194
void ActionManager::initActions()
00195 {
00196 KAction *action;
00197
00198
00199
if ( mIsPart ) {
00200
if ( mMainWindow->
hasDocument() ) {
00201
new KAction( i18n(
"&New"),
"filenew", CTRL+Key_N,
this,
00202 SLOT(
file_new() ), mACollection,
"korganizer_openNew" );
00203 KStdAction::open(
this, SLOT(
file_open() ), mACollection,
"korganizer_open" );
00204 mRecent =
new KRecentFilesAction( i18n(
"Open &Recent"), 0, 0,
this,
00205 SLOT(
file_openRecent(
const KURL & ) ),
00206 mACollection,
"korganizer_openRecent" );
00207
new KAction( i18n(
"Re&vert"),
"revert", 0,
this,
00208 SLOT(
file_revert() ), mACollection,
"korganizer_revert" );
00209 KStdAction::saveAs(
this,
00210 SLOT(
file_saveas() ), mACollection,
"korganizer_saveAs" );
00211 KStdAction::close(
this,
00212 SLOT(
file_close() ), mACollection,
"korganizer_close" );
00213 }
00214 KStdAction::save(
this,
00215 SLOT(
file_save() ), mACollection,
"korganizer_save" );
00216 }
else {
00217 KStdAction::openNew(
this, SLOT(
file_new()), mACollection);
00218 KStdAction::open(
this, SLOT(
file_open()), mACollection);
00219 mRecent = KStdAction::openRecent(
this, SLOT(
file_openRecent(
const KURL&)),
00220 mACollection);
00221 KStdAction::revert(
this,SLOT(
file_revert()),mACollection);
00222 KStdAction::save(
this, SLOT(
file_save()), mACollection);
00223 KStdAction::saveAs(
this, SLOT(
file_saveas()), mACollection);
00224 KStdAction::close(
this, SLOT(
file_close()), mACollection);
00225 }
00226
00227 (
void)
new KAction(i18n(
"&Import From Ical"), 0,
this, SLOT(
file_import()),
00228 mACollection,
"import_ical");
00229 (
void)
new KAction(i18n(
"&Merge Calendar..."), 0,
this, SLOT(
file_merge()),
00230 mACollection,
"merge_calendar");
00231 (
void)
new KAction(i18n(
"Archive Old Entries..."), 0,
this, SLOT(
file_archive()),
00232 mACollection,
"file_archive");
00233
00234
00235
00236 (
void)
new KAction(i18n(
"Configure &Date && Time..."), 0,
00237
this,SLOT(
configureDateTime()),
00238 mACollection,
"conf_datetime");
00239
00240 mFilterViewAction =
new KToggleAction(i18n(
"Show Filter"),0,
this,
00241 SLOT(toggleFilterView()),
00242 mACollection,
00243
"show_filter");
00244
00245 KStdAction::tipOfDay(
this, SLOT(
showTip() ), mACollection,
00246
"help_tipofday" );
00247
00248
new KAction( i18n(
"Get Hot New Stuff..."), 0,
this,
00249 SLOT( downloadNewStuff() ), mACollection,
00250
"downloadnewstuff" );
00251
00252
new KAction( i18n(
"Upload Hot New Stuff..."), 0,
this,
00253 SLOT( uploadNewStuff() ), mACollection,
00254
"uploadnewstuff" );
00255
00256 (
void)
new KAction(i18n(
"iCalendar..."), 0,
00257 mCalendarView, SLOT(exportICalendar()),
00258 mACollection,
"export_icalendar");
00259 (
void)
new KAction(i18n(
"vCalendar..."), 0,
00260 mCalendarView, SLOT(exportVCalendar()),
00261 mACollection,
"export_vcalendar");
00262
00263
00264
#if 0
00265
(
void)
new KAction(i18n(
"Print Setup..."), 0,
00266 mCalendarView, SLOT(printSetup()),
00267 mACollection,
"print_setup");
00268
#endif
00269
00270
if (mIsPart) {
00271 KStdAction::print(mCalendarView, SLOT(print()), mACollection,
"korganizer_print" );
00272 }
else {
00273 KStdAction::print(mCalendarView, SLOT(print()), mACollection);
00274 }
00275
00276
#if 1
00277
if (mIsPart) {
00278 KStdAction::printPreview(mCalendarView, SLOT(printPreview()), mACollection,
"korganizer_quickprint" );
00279 }
else {
00280 KStdAction::printPreview(mCalendarView, SLOT(printPreview()),
00281 mACollection);
00282 }
00283
#endif
00284
00285
new KAction( i18n(
"delete completed To-Dos",
"Purge Completed"), 0,
00286 mCalendarView, SLOT( purgeCompleted() ), mACollection,
00287
"purge_completed" );
00288
00289 KOrg::History *h = mCalendarView->
history();
00290
00291 KAction *pasteAction;
00292
00293
if ( mIsPart ) {
00294
00295 mCutAction =
new KAction(i18n(
"Cu&t"),
"editcut", CTRL+Key_X, mCalendarView,
00296 SLOT(edit_cut()), mACollection,
"korganizer_cut");
00297 mCopyAction =
new KAction(i18n(
"&Copy"),
"editcopy", CTRL+Key_C, mCalendarView,
00298 SLOT(edit_copy()), mACollection,
"korganizer_copy");
00299 pasteAction =
new KAction(i18n(
"&Paste"),
"editpaste", CTRL+Key_V, mCalendarView,
00300 SLOT(edit_paste()), mACollection,
"korganizer_paste");
00301 mUndoAction =
new KAction( i18n(
"&Undo"),
"undo", CTRL+Key_Z, h,
00302 SLOT( undo() ), mACollection,
"korganizer_undo" );
00303 mRedoAction =
new KAction( i18n(
"Re&do"),
"redo", CTRL+SHIFT+Key_Z, h,
00304 SLOT( redo() ), mACollection,
"korganizer_redo" );
00305 }
else {
00306 mCutAction = KStdAction::cut(mCalendarView,SLOT(edit_cut()),
00307 mACollection);
00308
00309 mCopyAction = KStdAction::copy(mCalendarView,SLOT(edit_copy()),
00310 mACollection);
00311
00312 pasteAction = KStdAction::paste(mCalendarView,SLOT(edit_paste()),
00313 mACollection);
00314
00315 mUndoAction = KStdAction::undo( h, SLOT( undo() ), mACollection );
00316 mRedoAction = KStdAction::redo( h, SLOT( redo() ), mACollection );
00317 }
00318
00319 pasteAction->setEnabled(
false );
00320 connect( mCalendarView, SIGNAL( pasteEnabled(
bool ) ),
00321 pasteAction, SLOT( setEnabled(
bool ) ) );
00322
00323 connect( h, SIGNAL( undoAvailable(
const QString & ) ),
00324 SLOT( updateUndoAction(
const QString & ) ) );
00325 connect( h, SIGNAL( redoAvailable(
const QString & ) ),
00326 SLOT( updateRedoAction(
const QString & ) ) );
00327 mUndoAction->setEnabled(
false );
00328 mRedoAction->setEnabled(
false );
00329
00330 mDeleteAction =
new KAction(i18n(
"&Delete"),
"editdelete",0,
00331 mCalendarView,SLOT(appointment_delete()),
00332 mACollection,
"edit_delete");
00333
00334
if ( mIsPart ) {
00335
new KAction(i18n(
"&Find..."),
"find",CTRL+Key_F,
00336 mCalendarView->
dialogManager(), SLOT(showSearchDialog()),
00337 mACollection,
"korganizer_find");
00338 }
else {
00339 KStdAction::find(mCalendarView->
dialogManager(), SLOT(showSearchDialog()),
00340 mACollection);
00341 }
00342
00343
00344
00345 (
void)
new KAction(i18n(
"What's &Next"),
"whatsnext", 0,
00346 mCalendarView->
viewManager(), SLOT(showWhatsNextView()),
00347 mACollection,
"view_whatsnext");
00348 (
void)
new KAction(i18n(
"&List"),
"list", 0,
00349 mCalendarView->
viewManager(), SLOT(showListView()),
00350 mACollection,
"view_list");
00351 (
void)
new KAction(i18n(
"&Day"),
"1day", 0,
00352 mCalendarView->
viewManager(), SLOT(showDayView()),
00353 mACollection,
"view_day");
00354 (
void)
new KAction(i18n(
"W&ork Week"),
"5days", 0,
00355 mCalendarView->
viewManager(), SLOT(showWorkWeekView()),
00356 mACollection,
"view_workweek");
00357 (
void)
new KAction(i18n(
"&Week"),
"7days", 0,
00358 mCalendarView->
viewManager(), SLOT(showWeekView()),
00359 mACollection,
"view_week");
00360 mNextXDays =
new KAction(
"",
"xdays", 0,mCalendarView->
viewManager(),
00361 SLOT(showNextXView()),mACollection,
"view_nextx");
00362 mNextXDays->setText(i18n(
"&Next Day",
"Ne&xt %n Days", KOPrefs::instance()->mNextXDays));
00363 (
void)
new KAction(i18n(
"&Month"),
"month", 0,
00364 mCalendarView->
viewManager(), SLOT(showMonthView()),
00365 mACollection,
"view_month");
00366 (
void)
new KAction(i18n(
"&To-Do List"),
"todo", 0,
00367 mCalendarView->
viewManager(), SLOT(showTodoView()),
00368 mACollection,
"view_todo");
00369 (
void)
new KAction(i18n(
"&Journal"),
"journal", 0,
00370 mCalendarView->
viewManager(), SLOT(showJournalView()),
00371 mACollection,
"view_journal");
00372 (
void)
new KAction(i18n(
"&Time Span"),
"timespan", 0,
00373 mCalendarView->
viewManager(), SLOT(showTimeSpanView()),
00374 mACollection,
"view_timespan");
00375 (
void)
new KAction(i18n(
"&Update"), 0,
00376 mCalendarView, SLOT( updateView() ),
00377 mACollection,
"update");
00378
00379
00380
00381 (
void)
new KAction(i18n(
"New E&vent..."),
"appointment", 0,
00382 mCalendarView,SLOT( newEvent() ),
00383 mACollection,
"new_event");
00384 (
void)
new KAction(i18n(
"New &To-Do..."),
"newtodo", 0,
00385 mCalendarView,SLOT(newTodo()),
00386 mACollection,
"new_todo");
00387 action =
new KAction(i18n(
"New Su&b-To-Do..."), 0,
00388 mCalendarView,SLOT(newSubTodo()),
00389 mACollection,
"new_subtodo");
00390 action->setEnabled(
false);
00391 connect(mCalendarView,SIGNAL(todoSelected(
bool)),
00392 action,SLOT(setEnabled(
bool)));
00393
00394 mShowIncidenceAction =
new KAction(i18n(
"&Show"), 0,
00395 mCalendarView,SLOT(showIncidence()),
00396 mACollection,
"show_incidence");
00397 mEditIncidenceAction =
new KAction(i18n(
"&Edit..."), 0,
00398 mCalendarView,SLOT(editIncidence()),
00399 mACollection,
"edit_incidence");
00400 mDeleteIncidenceAction =
new KAction(i18n(
"&Delete"), Key_Delete,
00401 mCalendarView,SLOT(deleteIncidence()),
00402 mACollection,
"delete_incidence");
00403
00404
#if 0
00405
action =
new KAction(i18n(
"T&ake over Event"), 0,
00406 mCalendarView,SLOT(takeOverEvent()),
00407 mACollection,
"takeover_event");
00408 connect(mCalendarView,SIGNAL(eventsSelected(
bool)),
00409 action,SLOT(setEnabled(
bool)));
00410 (
void)
new KAction(i18n(
"T&ake over Calendar"), 0,
00411 mCalendarView,SLOT(takeOverCalendar()),
00412 mACollection,
"takeover_calendar");
00413
00414 action =
new KAction(i18n(
"&Mail Appointment"),
"mail_generic", 0,
00415 mCalendarView,SLOT(action_mail()),
00416 mACollection,
"mail_appointment");
00417 connect(mCalendarView,SIGNAL(eventsSelected(
bool)),
00418 action,SLOT(setEnabled(
bool)));
00419
#endif
00420
00421 action =
new KAction(i18n(
"&Make Sub-To-Do Independent"), 0,
00422 mCalendarView,SLOT(todo_unsub()),
00423 mACollection,
"unsub_todo");
00424 action->setEnabled(
false);
00425 connect(mCalendarView,SIGNAL(todoSelected(
bool)),
00426 action,SLOT(setEnabled(
bool)));
00427
00428
00429
00430 (
void)
new KAction(i18n(
"Outgoing Messages"),0,
00431 mCalendarView->
dialogManager(),SLOT(showOutgoingDialog()),
00432 mACollection,
"outgoing");
00433 (
void)
new KAction(i18n(
"Incoming Messages"),0,
00434 mCalendarView->
dialogManager(),SLOT(showIncomingDialog()),
00435 mACollection,
"incoming");
00436 mPublishEvent =
new KAction(i18n(
"Publish..."),
"mail_send",0,
00437 mCalendarView,SLOT(schedule_publish()),
00438 mACollection,
"publish");
00439 mPublishEvent->setEnabled(
false);
00440 action =
new KAction(i18n(
"Request"),
"mail_generic",0,
00441 mCalendarView,SLOT(schedule_request()),
00442 mACollection,
"request");
00443 action->setEnabled(
false);
00444 connect(mCalendarView,SIGNAL(organizerEventsSelected(
bool)),
00445 action,SLOT(setEnabled(
bool)));
00446 action =
new KAction(i18n(
"Refresh"),0,
00447 mCalendarView,SLOT(schedule_refresh()),
00448 mACollection,
"refresh");
00449 action->setEnabled(
false);
00450 connect(mCalendarView,SIGNAL(groupEventsSelected(
bool)),
00451 action,SLOT(setEnabled(
bool)));
00452 action =
new KAction(KStdGuiItem::cancel(),0,
00453 mCalendarView,SLOT(schedule_cancel()),
00454 mACollection,
"cancel");
00455 action->setEnabled(
false);
00456 connect(mCalendarView,SIGNAL(organizerEventsSelected(
bool)),
00457 action,SLOT(setEnabled(
bool)));
00458
00459
00460
00461
00462
00463 action =
new KAction(i18n(
"Reply"),
"mail_reply",0,
00464 mCalendarView,SLOT(schedule_reply()),
00465 mACollection,
"reply");
00466 action->setEnabled(
false);
00467 connect(mCalendarView,SIGNAL(groupEventsSelected(
bool)),
00468 action,SLOT(setEnabled(
bool)));
00469 action =
new KAction(i18n(
"counter proposal",
"Counter"),0,
00470 mCalendarView,SLOT(schedule_counter()),
00471 mACollection,
"counter");
00472 action->setEnabled(
false);
00473 connect(mCalendarView,SIGNAL(groupEventsSelected(
bool)),
00474 action,SLOT(setEnabled(
bool)));
00475 action =
new KAction(i18n(
"Publish Free Busy Information"),0,
00476 mCalendarView,SLOT(schedule_publish_freebusy()),
00477 mACollection,
"publish_freebusy");
00478 action->setEnabled(
true);
00479
00480
00481
00482
00483
00484
00485
if ( !mIsPart ) {
00486 action =
new KAction(i18n(
"Addressbook"),
"contents",0,
00487 mCalendarView,SLOT(openAddressbook()),
00488 mACollection,
"addressbook");
00489 }
00490
00491
00492
bool isRTL = QApplication::reverseLayout();
00493
00494 (
void)
new KAction(i18n(
"Go to &Today"),
"today", 0,
00495 mCalendarView,SLOT(goToday()),
00496 mACollection,
"go_today");
00497
00498 action =
new KAction(i18n(
"Go &Backward"), isRTL ?
"1rightarrow" :
"1leftarrow", 0,
00499 mCalendarView,SLOT(goPrevious()),
00500 mACollection,
"go_previous");
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511 action =
new KAction(i18n(
"Go &Forward"), isRTL ?
"1leftarrow" :
"1rightarrow", 0,
00512 mCalendarView,SLOT(goNext()),
00513 mACollection,
"go_next");
00514
00515
00516
00517
00518
00519
00520
00521
if ( mIsPart ) {
00522
new KAction( i18n(
"&Configure KOrganizer..."),
00523
"configure", 0, mCalendarView,
00524 SLOT(edit_options()), mACollection,
00525
"korganizer_configure" );
00526
new KAction( i18n(
"Configure S&hortcuts..."),
00527
"configure_shortcuts", 0,
this,
00528 SLOT(keyBindings()), mACollection,
00529
"korganizer_configure_shortcuts" );
00530 }
else {
00531 KStdAction::preferences(mCalendarView, SLOT(edit_options()),
00532 mACollection);
00533 KStdAction::keyBindings(
this, SLOT(keyBindings()), mACollection);
00534 }
00535
00536 (
void)
new KAction(i18n(
"Edit C&ategories..."), 0,
00537 mCalendarView->
dialogManager(),
00538 SLOT(showCategoryEditDialog()),
00539 mACollection,
"edit_categories");
00540 (
void)
new KAction(i18n(
"Edit &Filters..."), 0,
00541 mCalendarView,SLOT(editFilters()),
00542 mACollection,
"edit_filters");
00543 (
void)
new KAction(i18n(
"Configure &Plugins..."), 0,
00544 mCalendarView->
dialogManager(),SLOT(showPluginDialog()),
00545 mACollection,
"configure_plugins");
00546
00547
#if 0
00548
(
void)
new KAction(i18n(
"Show Intro Page"), 0,
00549 mCalendarView,SLOT(showIntro()),
00550 mACollection,
"show_intro");
00551
#endif
00552
00553 KConfig *config = KOGlobals::self()->config();
00554 config->setGroup(
"Settings");
00555 mFilterViewAction->setChecked(config->readBoolEntry(
"Filter Visible",
false));
00556 toggleFilterView();
00557 }
00558
00559 void ActionManager::readSettings()
00560 {
00561
00562
00563
00564 KConfig *config = KOGlobals::self()->config();
00565
if ( mRecent ) mRecent->loadEntries( config );
00566 mCalendarView->
readSettings();
00567 }
00568
00569 void ActionManager::writeSettings()
00570 {
00571 kdDebug(5850) <<
"ActionManager::writeSettings" << endl;
00572 KConfig *config = KOGlobals::self()->config();
00573 mCalendarView->
writeSettings();
00574
00575 config->setGroup(
"Settings" );
00576 config->writeEntry(
"Filter Visible", mFilterViewAction->isChecked() );
00577
if ( mRecent ) mRecent->saveEntries( config );
00578 }
00579
00580 void ActionManager::file_new()
00581 {
00582 emit
actionNew();
00583 }
00584
00585 void ActionManager::file_open()
00586 {
00587 KURL
url;
00588 QString defaultPath = locateLocal(
"data",
"korganizer/");
00589 url = KFileDialog::getOpenURL(defaultPath,i18n(
"*.vcs *.ics|Calendar Files"),
00590 mCalendarView->topLevelWidget());
00591
00592
if (url.isEmpty())
return;
00593
00594
KOrg::MainWindow *korg=
ActionManager::findInstance(url);
00595
if ((0 != korg)&&(korg != mMainWindow)) {
00596 KWin::setActiveWindow(korg->
topLevelWidget()->winId());
00597
return;
00598 }
00599
00600 kdDebug(5850) <<
"ActionManager::file_open(): " << url.prettyURL() << endl;
00601
00602
00603
if (!mCalendarView->
isModified() && mFile.isEmpty() && !mCalendarResources ) {
00604
openURL(url);
00605 }
else {
00606 emit
actionNew( url );
00607 }
00608 }
00609
00610 void ActionManager::file_openRecent(
const KURL& url)
00611 {
00612
if (!url.isEmpty()) {
00613
KOrg::MainWindow *korg=
ActionManager::findInstance(url);
00614
if ((0 != korg)&&(korg != mMainWindow)) {
00615 KWin::setActiveWindow(korg->
topLevelWidget()->winId());
00616
return;
00617 }
00618
openURL(url);
00619 }
00620 }
00621
00622 void ActionManager::file_import()
00623 {
00624
00625
00626
int retVal = -1;
00627 QString progPath;
00628 KTempFile tmpfn;
00629
00630 QString homeDir = QDir::homeDirPath() + QString::fromLatin1(
"/.calendar");
00631
00632
if (!QFile::exists(homeDir)) {
00633 KMessageBox::error(mCalendarView->topLevelWidget(),
00634 i18n(
"You have no ical file in your home directory.\n"
00635
"Import cannot proceed.\n"));
00636
return;
00637 }
00638
00639 KProcess proc;
00640 proc <<
"ical2vcal" << tmpfn.name();
00641
bool success = proc.start( KProcess::Block );
00642
00643
if ( !success ) {
00644 kdDebug(5850) <<
"Error starting ical2vcal." << endl;
00645
return;
00646 }
else {
00647 retVal = proc.exitStatus();
00648 }
00649
00650 kdDebug(5850) <<
"ical2vcal return value: " << retVal << endl;
00651
00652
if (retVal >= 0 && retVal <= 2) {
00653
00654 mCalendarView->
openCalendar(tmpfn.name(),1);
00655
if (!retVal)
00656 KMessageBox::information(mCalendarView->topLevelWidget(),
00657 i18n(
"KOrganizer successfully imported and "
00658
"merged your .calendar file from ical "
00659
"into the currently opened calendar."));
00660
else
00661 KMessageBox::information(mCalendarView->topLevelWidget(),
00662 i18n(
"KOrganizer encountered some unknown fields while "
00663
"parsing your .calendar ical file, and had to "
00664
"discard them. Please check to see that all "
00665
"your relevant data was correctly imported."),
00666 i18n(
"ICal Import Successful With Warning"));
00667 }
else if (retVal == -1) {
00668 KMessageBox::error(mCalendarView->topLevelWidget(),
00669 i18n(
"KOrganizer encountered an error parsing your "
00670
".calendar file from ical. Import has failed."));
00671 }
else if (retVal == -2) {
00672 KMessageBox::error(mCalendarView->topLevelWidget(),
00673 i18n(
"KOrganizer doesn't think that your .calendar "
00674
"file is a valid ical calendar. Import has failed."));
00675 }
00676 tmpfn.unlink();
00677 }
00678
00679 void ActionManager::file_merge()
00680 {
00681 KURL
url = KFileDialog::getOpenURL(locateLocal(
"data",
"korganizer/"),
00682 i18n(
"*.vcs *.ics|Calendar Files"),
00683 mCalendarView->topLevelWidget());
00684
openURL(url,
true);
00685 }
00686
00687 void ActionManager::file_archive()
00688 {
00689 mCalendarView->
archiveCalendar();
00690 }
00691
00692 void ActionManager::file_revert()
00693 {
00694
openURL(mURL);
00695 }
00696
00697 void ActionManager::file_saveas()
00698 {
00699 KURL
url =
getSaveURL();
00700
00701
if (url.isEmpty())
return;
00702
00703
saveAsURL(url);
00704 }
00705
00706 void ActionManager::file_save()
00707 {
00708
if ( mMainWindow->
hasDocument() ) {
00709
if (mURL.isEmpty()) {
00710
file_saveas();
00711 }
else {
00712
saveURL();
00713 }
00714 }
else {
00715 mCalendarView->
calendar()->save();
00716 }
00717 }
00718
00719 void ActionManager::file_close()
00720 {
00721
if (!
saveModifiedURL())
return;
00722
00723 mCalendarView->
closeCalendar();
00724 KIO::NetAccess::removeTempFile(mFile);
00725 mURL=
"";
00726 mFile=
"";
00727
00728 setTitle();
00729 }
00730
00731 bool ActionManager::openURL(
const KURL &url,
bool merge)
00732 {
00733 kdDebug(5850) <<
"ActionManager::openURL()" << endl;
00734
00735
if (url.isEmpty()) {
00736 kdDebug(5850) <<
"ActionManager::openURL(): Error! Empty URL." << endl;
00737
return false;
00738 }
00739
if ( !url.isValid() ) {
00740 kdDebug(5850) <<
"ActionManager::openURL(): Error! URL is malformed." << endl;
00741
return false;
00742 }
00743
00744 QString tmpFile;
00745
if( KIO::NetAccess::download( url, tmpFile, view() ) ) {
00746 kdDebug(5850) <<
"--- Downloaded to " << tmpFile << endl;
00747
bool success = mCalendarView->
openCalendar(tmpFile,merge);
00748
if (merge) {
00749 KIO::NetAccess::removeTempFile(tmpFile);
00750
if (success)
00751 mMainWindow->
showStatusMessage(i18n(
"Merged calendar '%1'.").arg(url.prettyURL()));
00752 }
else {
00753
if (success) {
00754 KIO::NetAccess::removeTempFile(mFile);
00755 mURL = url;
00756 mFile = tmpFile;
00757 KConfig *config = KOGlobals::self()->config();
00758 config->setGroup(
"General");
00759 setTitle();
00760 kdDebug(5850) <<
"-- Add recent URL: " << url.prettyURL() << endl;
00761
if ( mRecent ) mRecent->addURL(url);
00762 mMainWindow->
showStatusMessage(i18n(
"Opened calendar '%1'.").arg(mURL.prettyURL()));
00763 }
00764 }
00765
return success;
00766 }
else {
00767 QString msg;
00768 msg = i18n(
"Cannot download calendar from '%1'.").arg(url.prettyURL());
00769 KMessageBox::error(mCalendarView->topLevelWidget(),msg);
00770
return false;
00771 }
00772 }
00773
00774 void ActionManager::closeURL()
00775 {
00776 kdDebug(5850) <<
"ActionManager::closeURL()" << endl;
00777
00778
file_close();
00779 }
00780
00781 bool ActionManager::saveURL()
00782 {
00783 QString ext;
00784
00785
if ( mURL.isLocalFile() ) {
00786 ext = mFile.right( 4 );
00787 }
else {
00788 ext = mURL.filename().right( 4 );
00789 }
00790
00791
if ( ext ==
".vcs" ) {
00792
int result = KMessageBox::warningContinueCancel(
00793 mCalendarView->topLevelWidget(),
00794 i18n(
"Your calendar will be saved in iCalendar format. Use "
00795
"'Export vCalendar' to save in vCalendar format."),
00796 i18n(
"Format Conversion"), i18n(
"Proceed"),
"dontaskFormatConversion",
00797
true );
00798
if ( result != KMessageBox::Continue )
return false;
00799
00800 QString filename = mURL.fileName();
00801 filename.replace( filename.length() - 4, 4,
".ics" );
00802 mURL.setFileName( filename );
00803
if ( mURL.isLocalFile() ) {
00804 mFile = mURL.path();
00805 }
00806 setTitle();
00807
if ( mRecent ) mRecent->addURL( mURL );
00808 }
00809
00810
if ( !mCalendarView->
saveCalendar( mFile ) ) {
00811 kdDebug(5850) <<
"ActionManager::saveURL(): calendar view save failed."
00812 << endl;
00813
return false;
00814 }
else {
00815 mCalendarView->
setModified(
false );
00816 }
00817
00818
if ( !mURL.isLocalFile() ) {
00819
if ( !KIO::NetAccess::upload( mFile, mURL, view() ) ) {
00820 QString msg = i18n(
"Cannot upload calendar to '%1'")
00821 .arg( mURL.prettyURL() );
00822 KMessageBox::error( mCalendarView->topLevelWidget() ,msg );
00823
return false;
00824 }
00825 }
00826
00827
00828
if (KOPrefs::instance()->mAutoSave) {
00829 mAutoSaveTimer->stop();
00830 mAutoSaveTimer->start(1000*60*KOPrefs::instance()->mAutoSaveInterval);
00831 }
00832
00833 mMainWindow->
showStatusMessage(i18n(
"Saved calendar '%1'.").arg(mURL.prettyURL()));
00834
00835
00836
if ( KOPrefs::instance()->mHtmlWithSave==
true &&
00837 !KOPrefs::instance()->mHtmlExportFile.isNull() ) {
00838 KURL dest( KOPrefs::instance()->mHtmlExportFile );
00839 KCal::HtmlExport mExport( mCalendarView->
calendar() );
00840 mExport.setEmail( KOPrefs::instance()->email() );
00841 mExport.setFullName( KOPrefs::instance()->fullName() );
00842
00843 KConfig *cfg = KOGlobals::self()->config();
00844 cfg->setGroup(
"HtmlExport" );
00845
00846 mExport.setMonthViewEnabled( cfg->readBoolEntry(
"Month",
false ) );
00847 mExport.setEventsEnabled( cfg->readBoolEntry(
"Event",
true ) );
00848 mExport.setTodosEnabled( cfg->readBoolEntry(
"Todo",
true ) );
00849 mExport.setCategoriesEventEnabled( cfg->readBoolEntry(
"CategoriesEvent",
false ) );
00850 mExport.setAttendeesEventEnabled( cfg->readBoolEntry(
"AttendeesEvent",
false ) );
00851 mExport.setExcludePrivateEventEnabled( cfg->readBoolEntry(
"ExcludePrivateEvent",
true ) );
00852 mExport.setExcludeConfidentialEventEnabled( cfg->readBoolEntry(
"ExcludeConfidentialEvent",
true ) );
00853 mExport.setCategoriesTodoEnabled( cfg->readBoolEntry(
"CategoriesTodo",
false ) );
00854 mExport.setAttendeesTodoEnabled( cfg->readBoolEntry(
"AttendeesTodo",
false ) );
00855 mExport.setExcludePrivateTodoEnabled( cfg->readBoolEntry(
"ExcludePrivateTodo",
true ) );
00856 mExport.setExcludeConfidentialTodoEnabled( cfg->readBoolEntry(
"ExcludeConfidentialTodo",
true ) );
00857 mExport.setDueDateEnabled( cfg->readBoolEntry(
"DueDates",
true ) );
00858 QDate qd1;
00859 qd1 = QDate::currentDate();
00860 QDate qd2;
00861 qd2 = QDate::currentDate();
00862
if ( mExport.monthViewEnabled() )
00863 qd2.addMonths( 1 );
00864
else
00865 qd2.addDays( 7 );
00866
00867 mExport.setDateRange( qd1, qd2 );
00868 QDate cdate=qd1;
00869
while (cdate<=qd2)
00870 {
00871
if ( !KOCore::self()->holiday(cdate).isEmpty() )
00872 mExport.addHoliday( cdate, KOCore::self()->holiday(cdate) );
00873 cdate = cdate.addDays(1);
00874 }
00875
00876
if ( dest.isLocalFile() ) {
00877 mExport.save( dest.path() );
00878 }
else {
00879 KTempFile tf;
00880 QString tfile = tf.name();
00881 tf.close();
00882 mExport.save( tfile );
00883
if (!KIO::NetAccess::upload( tfile, dest, view() ) ) {
00884 KNotifyClient::event ( view()->winId(),
00885 i18n(
"Could not upload file.") );
00886 }
00887 tf.unlink();
00888 }
00889 }
00890
00891
return true;
00892 }
00893
00894 bool ActionManager::saveAsURL(
const KURL &url)
00895 {
00896 kdDebug(5850) <<
"ActionManager::saveAsURL() " << url.prettyURL() << endl;
00897
00898
if ( url.isEmpty() ) {
00899 kdDebug(5850) <<
"ActionManager::saveAsURL(): Empty URL." << endl;
00900
return false;
00901 }
00902
if ( !url.isValid() ) {
00903 kdDebug(5850) <<
"ActionManager::saveAsURL(): Malformed URL." << endl;
00904
return false;
00905 }
00906
00907 QString fileOrig = mFile;
00908 KURL URLOrig = mURL;
00909
00910 KTempFile *tempFile = 0;
00911
if (url.isLocalFile()) {
00912 mFile = url.path();
00913 }
else {
00914 tempFile =
new KTempFile;
00915 mFile = tempFile->name();
00916 }
00917 mURL = url;
00918
00919
bool success =
saveURL();
00920
if (success) {
00921
delete mTempFile;
00922 mTempFile = tempFile;
00923 KIO::NetAccess::removeTempFile(fileOrig);
00924 KConfig *config = KOGlobals::self()->config();
00925 config->setGroup(
"General");
00926 setTitle();
00927
if ( mRecent ) mRecent->addURL(mURL);
00928 }
else {
00929 kdDebug(5850) <<
"ActionManager::saveAsURL() failed" << endl;
00930 mURL = URLOrig;
00931 mFile = fileOrig;
00932
delete tempFile;
00933 }
00934
00935
return success;
00936 }
00937
00938
00939 bool ActionManager::saveModifiedURL()
00940 {
00941 kdDebug(5850) <<
"ActionManager::saveModifiedURL()" << endl;
00942
00943
00944
if (!mCalendarView->
isModified())
return true;
00945
00946 mHtmlExportSync =
true;
00947
if (KOPrefs::instance()->mAutoSave && !mURL.isEmpty()) {
00948
00949
return saveURL();
00950 }
else {
00951
int result = KMessageBox::warningYesNoCancel(
00952 mCalendarView->topLevelWidget(),
00953 i18n(
"The calendar has been modified.\nDo you want to save it?"),
00954 QString::null,
00955 KStdGuiItem::save(), KStdGuiItem::discard());
00956
switch(result) {
00957
case KMessageBox::Yes:
00958
if (mURL.isEmpty()) {
00959 KURL
url =
getSaveURL();
00960
return saveAsURL(url);
00961 }
else {
00962
return saveURL();
00963 }
00964
case KMessageBox::No:
00965
return true;
00966
case KMessageBox::Cancel:
00967
default:
00968 {
00969 mHtmlExportSync =
false;
00970
return false;
00971 }
00972 }
00973 }
00974 }
00975
00976
00977 KURL
ActionManager::getSaveURL()
00978 {
00979 KURL
url = KFileDialog::getSaveURL(locateLocal(
"data",
"korganizer/"),
00980 i18n(
"*.vcs *.ics|Calendar Files"),
00981 mCalendarView->topLevelWidget());
00982
00983
if (url.isEmpty())
return url;
00984
00985 QString filename = url.fileName(
false);
00986
00987 QString e = filename.right(4);
00988
if (e !=
".vcs" && e !=
".ics") {
00989
00990 filename +=
".ics";
00991 }
00992
00993 url.setFileName(filename);
00994
00995 kdDebug(5850) <<
"ActionManager::getSaveURL(): url: " << url.url() << endl;
00996
00997
return url;
00998 }
00999
01000
void ActionManager::saveProperties(KConfig *config)
01001 {
01002 kdDebug() <<
"ActionManager::saveProperties" << endl;
01003
01004 config->writeEntry(
"UseResourceCalendar", !mMainWindow->
hasDocument() );
01005
if ( mMainWindow->
hasDocument() ) {
01006 config->writePathEntry(
"Calendar",mURL.url());
01007 }
01008 }
01009
01010
void ActionManager::readProperties(KConfig *config)
01011 {
01012 kdDebug() <<
"ActionManager::readProperties" << endl;
01013
01014
bool isResourceCalendar(
01015 config->readBoolEntry(
"UseResourceCalendar",
true ) );
01016 QString calendarUrl = config->readPathEntry(
"Calendar");
01017
01018
if (!isResourceCalendar && !calendarUrl.isEmpty()) {
01019 mMainWindow->
init(
true );
01020 KURL u(calendarUrl);
01021
openURL(u);
01022 }
else {
01023 mMainWindow->
init(
false );
01024 }
01025 }
01026
01027 void ActionManager::checkAutoSave()
01028 {
01029 kdDebug(5850) <<
"ActionManager::checkAutoSave()" << endl;
01030
01031
01032
if (KOPrefs::instance()->mAutoSaveInterval == 0)
return;
01033
01034
01035
if ( KOPrefs::instance()->mAutoSave ) {
01036
if ( mCalendarResources || ( mCalendar && !
url().isEmpty() ) ) {
01037
saveCalendar();
01038 }
01039 }
01040 }
01041
01042
01043
01044 void ActionManager::updateConfig()
01045 {
01046 kdDebug(5850) <<
"ActionManager::updateConfig()" << endl;
01047
01048
if ( KOPrefs::instance()->mAutoSave && !mAutoSaveTimer->isActive() ) {
01049
checkAutoSave();
01050
if ( KOPrefs::instance()->mAutoSaveInterval > 0) {
01051 mAutoSaveTimer->start( 1000 * 60 *
01052 KOPrefs::instance()->mAutoSaveInterval );
01053 }
01054 }
01055
if ( !KOPrefs::instance()->mAutoSave ) mAutoSaveTimer->stop();
01056 mNextXDays->setText( i18n(
"&Next Day",
"&Next %n Days",
01057 KOPrefs::instance()->mNextXDays ) );
01058
01059 KOCore::self()->reloadPlugins();
01060 mParts = KOCore::self()->reloadParts( mMainWindow, mParts );
01061
01062 setDestinationPolicy();
01063 }
01064
01065
void ActionManager::setDestinationPolicy()
01066 {
01067
if ( mCalendarResources ) {
01068
if ( KOPrefs::instance()->mDestination == KOPrefs::askDestination )
01069 mCalendarResources->setAskDestinationPolicy();
01070
else
01071 mCalendarResources->setStandardDestinationPolicy();
01072 }
01073 }
01074
01075 void ActionManager::configureDateTime()
01076 {
01077 KProcess *proc =
new KProcess;
01078 *proc <<
"kcmshell" <<
"language";
01079
01080 connect(proc,SIGNAL(processExited(KProcess *)),
01081 SLOT(configureDateTimeFinished(KProcess *)));
01082
01083
if (!proc->start()) {
01084 KMessageBox::sorry(mCalendarView->topLevelWidget(),
01085 i18n(
"Couldn't start control module for date and time format."));
01086
delete proc;
01087 }
01088 }
01089
01090 void ActionManager::showTip()
01091 {
01092 KTipDialog::showTip(mCalendarView->topLevelWidget(),QString::null,
true);
01093 }
01094
01095 void ActionManager::showTipOnStart()
01096 {
01097 KTipDialog::showTip(mCalendarView->topLevelWidget());
01098 }
01099
01100 KOrg::MainWindow *
ActionManager::findInstance(
const KURL &url )
01101 {
01102
if ( mWindowList ) {
01103
if ( url.isEmpty() )
return mWindowList->
defaultInstance();
01104
else return mWindowList->
findInstance( url );
01105 }
else {
01106
return 0;
01107 }
01108 }
01109
01110
void ActionManager::dumpText(
const QString &str)
01111 {
01112 kdDebug(5850) <<
"ActionManager::dumpText(): " << str << endl;
01113 }
01114
01115
void ActionManager::toggleFilterView()
01116 {
01117
bool visible = mFilterViewAction->isChecked();
01118 mCalendarView->
showFilter(visible);
01119 }
01120
01121 bool ActionManager::openURL(QString url)
01122 {
01123
return openURL(KURL(url));
01124 }
01125
01126 bool ActionManager::mergeURL(QString url)
01127 {
01128
return openURL(KURL(url),
true);
01129 }
01130
01131 bool ActionManager::saveAsURL(QString url)
01132 {
01133
return saveAsURL(KURL(url));
01134 }
01135
01136 QString
ActionManager::getCurrentURLasString()
const
01137
{
01138
return mURL.url();
01139 }
01140
01141 bool ActionManager::deleteEvent(QString uid)
01142 {
01143
return mCalendarView->
deleteEvent(uid);
01144 }
01145
01146 bool ActionManager::eventRequest(QString request, QCString receiver,
01147 QString ical)
01148 {
01149
if( !KOGroupware::instance() )
return false;
01150
return KOGroupware::instance()->incomingEventRequest(request, receiver,
01151 ical);
01152 }
01153
01154 bool ActionManager::eventReply( QString ical )
01155 {
01156
if( !KOGroupware::instance() )
return false;
01157
return KOGroupware::instance()->incidenceAnswer( ical );
01158 }
01159
01160
void ActionManager::configureDateTimeFinished(KProcess *proc)
01161 {
01162
delete proc;
01163 }
01164
01165
void ActionManager::downloadNewStuff()
01166 {
01167 kdDebug(5850) <<
"ActionManager::downloadNewStuff()" << endl;
01168
01169
if ( !mNewStuff ) mNewStuff =
new KONewStuff( mCalendarView );
01170 mNewStuff->download();
01171 }
01172
01173
void ActionManager::uploadNewStuff()
01174 {
01175
if ( !mNewStuff ) mNewStuff =
new KONewStuff( mCalendarView );
01176 mNewStuff->upload();
01177 }
01178
01179 QString ActionManager::localFileName()
01180 {
01181
return mFile;
01182 }
01183
01184
void ActionManager::processIncidenceSelection( Incidence *incidence )
01185 {
01186
01187
01188
if ( !incidence ) {
01189 enableIncidenceActions(
false );
01190
return;
01191 }
01192
01193 enableIncidenceActions(
true );
01194
01195
if ( incidence->type() ==
"Event" ) {
01196 mShowIncidenceAction->setText( i18n(
"&Show Event") );
01197 mEditIncidenceAction->setText( i18n(
"&Edit Event...") );
01198 mDeleteIncidenceAction->setText( i18n(
"&Delete Event") );
01199 }
else if ( incidence->type() ==
"Todo" ) {
01200 mShowIncidenceAction->setText( i18n(
"&Show To-Do") );
01201 mEditIncidenceAction->setText( i18n(
"&Edit To-Do...") );
01202 mDeleteIncidenceAction->setText( i18n(
"&Delete To-Do") );
01203 }
else {
01204 mShowIncidenceAction->setText( i18n(
"&Show") );
01205 mEditIncidenceAction->setText( i18n(
"&Edit...") );
01206 mDeleteIncidenceAction->setText( i18n(
"&Delete") );
01207 }
01208 }
01209
01210
void ActionManager::enableIncidenceActions(
bool enabled )
01211 {
01212 mShowIncidenceAction->setEnabled( enabled );
01213 mEditIncidenceAction->setEnabled( enabled );
01214 mDeleteIncidenceAction->setEnabled( enabled );
01215
01216 mCutAction->setEnabled( enabled );
01217 mCopyAction->setEnabled( enabled );
01218 mDeleteAction->setEnabled( enabled );
01219 mPublishEvent->setEnabled( enabled );
01220 }
01221
01222
void ActionManager::keyBindings()
01223 {
01224 emit
actionKeyBindings();
01225 }
01226
01227
01228
void ActionManager::loadParts()
01229 {
01230 mParts = KOCore::self()->loadParts( mMainWindow );
01231 }
01232
01233
void ActionManager::setTitle()
01234 {
01235 mMainWindow->
setTitle();
01236 }
01237
01238
KCalendarIface::ResourceRequestReply ActionManager::resourceRequest(
const QValueList<QPair<QDateTime, QDateTime> >&,
01239
const QCString& resource,
01240
const QString& vCalIn )
01241 {
01242 kdDebug(5850) << k_funcinfo <<
"resource=" << resource <<
" vCalIn=" << vCalIn << endl;
01243
KCalendarIface::ResourceRequestReply reply;
01244 reply.
vCalOut =
"VCalOut";
01245
return reply;
01246 }
01247
01248
void ActionManager::openEventEditor( QString text )
01249 {
01250 mCalendarView->
newEvent( text );
01251 }
01252
01253
void ActionManager::openEventEditor( QString summary, QString description,
01254 QString attachment )
01255 {
01256 mCalendarView->
newEvent( summary, description, attachment );
01257 }
01258
01259
void ActionManager::openTodoEditor( QString text )
01260 {
01261 mCalendarView->
newTodo( text );
01262 }
01263
01264
void ActionManager::openTodoEditor( QString summary, QString description,
01265 QString attachment )
01266 {
01267 mCalendarView->
newTodo( summary, description, attachment );
01268 }
01269
01270
void ActionManager::showTodoView()
01271 {
01272 mCalendarView->
viewManager()->
showTodoView();
01273 }
01274
01275
void ActionManager::showEventView()
01276 {
01277 mCalendarView->
viewManager()->
showEventView();
01278 }
01279
01280
void ActionManager::updateUndoAction(
const QString &text )
01281 {
01282
if ( text.isNull() ) {
01283 mUndoAction->setEnabled(
false );
01284 mUndoAction->setText( i18n(
"Undo") );
01285 }
else {
01286 mUndoAction->setEnabled(
true );
01287
if ( text.isEmpty() ) mUndoAction->setText( i18n(
"Undo") );
01288
else mUndoAction->setText( i18n(
"Undo (%1)").arg( text ) );
01289 }
01290 }
01291
01292
void ActionManager::updateRedoAction(
const QString &text )
01293 {
01294
if ( text.isNull() ) {
01295 mRedoAction->setEnabled(
false );
01296 mRedoAction->setText( i18n(
"Redo") );
01297 }
else {
01298 mRedoAction->setEnabled(
true );
01299
if ( text.isEmpty() ) mRedoAction->setText( i18n(
"Redo") );
01300
else mRedoAction->setText( i18n(
"Redo (%1)").arg( text ) );
01301 }
01302 }
01303
01304
bool ActionManager::queryClose()
01305 {
01306 kdDebug() <<
"ActionManager::queryClose()" << endl;
01307
01308
bool close =
true;
01309
01310
if ( mCalendar ) {
01311 close =
saveModifiedURL();
01312 }
else if ( mCalendarResources ) {
01313 mCalendarResources->resourceManager()->writeConfig();
01314
if ( !mIsClosing ) {
01315 kdDebug(5850) <<
"!mIsClosing" << endl;
01316
if ( !
saveResourceCalendar() )
return false;
01317
01318
01319 mIsClosing =
true;
01320
01321
01322
01323 }
01324
if ( mCalendarResources->isSaving() ) {
01325 kdDebug(5850) <<
"KOrganizer::queryClose(): isSaving" << endl;
01326 close =
false;
01327 }
else {
01328 kdDebug(5850) <<
"KOrganizer::queryClose(): close = true" << endl;
01329 close =
true;
01330 }
01331 }
else {
01332 close =
true;
01333 }
01334
01335
return close;
01336 }
01337
01338 void ActionManager::saveCalendar()
01339 {
01340
if ( mCalendar ) {
01341
if ( view()->
isModified() ) {
01342
if ( !
url().isEmpty() ) {
01343
saveURL();
01344 }
else {
01345 QString location = locateLocal(
"data",
"korganizer/kontact.ics" );
01346
saveAsURL( location );
01347 }
01348 }
01349 }
else if ( mCalendarResources ) {
01350 mCalendarResources->save();
01351
01352 }
01353 }
01354
01355 bool ActionManager::saveResourceCalendar()
01356 {
01357
if ( !mCalendarResources )
return false;
01358 CalendarResourceManager *m = mCalendarResources->resourceManager();
01359
01360 CalendarResourceManager::ActiveIterator it;
01361
for ( it = m->activeBegin(); it != m->activeEnd(); ++it ) {
01362
if ( (*it)->readOnly() )
continue;
01363
if ( !(*it)->save() ) {
01364
int result = KMessageBox::warningContinueCancel( view(),
01365 i18n(
"Saving '%1' failed. Please check, if the resource is "
01366
"properly configured.\nIgnore problem and continue without "
01367
"saving or cancel save?").arg( (*it)->resourceName() ),
01368 i18n(
"Save Error"), i18n(
"Don't save") );
01369
if ( result == KMessageBox::Cancel )
return false;
01370 }
01371 }
01372
return true;
01373 }
01374
01375
void ActionManager::importResource(
const QString &url )
01376 {
01377 ResourceImportDialog *dialog;
01378 dialog =
new ResourceImportDialog( url, mMainWindow->
topLevelWidget() );
01379 dialog->show();
01380 }
01381
01382
#include "actionmanager.moc"