summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt5
-rw-r--r--korganizer/calendarview.cpp18
-rw-r--r--korganizer/calendarview.h2
-rw-r--r--korganizer/mainwindow.cpp19
-rw-r--r--korganizer/mainwindow.h1
5 files changed, 40 insertions, 5 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index ac70a55..3dbbbb6 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,63 +1,66 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.2 ************ 3********** VERSION 2.0.2 ************
4 4
5KO/Pi: 5KO/Pi:
6Fixed the layout problem of the day label buttons 6Fixed the layout problem of the day label buttons
7of the agenda view introduced in version 2.0.1. 7of the agenda view introduced in version 2.0.1.
8 8
9Added WhatsThis support for the todo view and the list view. 9Added WhatsThis support for the todo view and the list view.
10 10
11Added a quite useful feature to the montview. 11Added a quite useful feature to the montview.
12Just click on the week numbers on the left. 12Just click on the week numbers on the left.
13And on top of the week numbers there is now a "week view quick selector". 13And in the top right corner of month view/agenda view
14there is now a "week number quick selector".
14(Click on the black triangle). 15(Click on the black triangle).
15 16
17Made the quite difficult timezone change in KO/Pi easy.
18
16 19
17********** VERSION 2.0.1 ************ 20********** VERSION 2.0.1 ************
18 21
19Oooops ... I forgot to test on the Zaurus 5500 ... 22Oooops ... I forgot to test on the Zaurus 5500 ...
20 23
21Fixed many problems of new (english) strings (and german translations) 24Fixed many problems of new (english) strings (and german translations)
22introduced in the latest versions, where the text was not fitting on the 25introduced in the latest versions, where the text was not fitting on the
23240x320 display of the Zaurus 5500. 26240x320 display of the Zaurus 5500.
24 27
25KO/Pi: 28KO/Pi:
26Added a popup menu ( press pen and hold to get popup ) to the agenda view 29Added a popup menu ( press pen and hold to get popup ) to the agenda view
27with many useful items (add event/todo, show next week, two weeks, month, journal). 30with many useful items (add event/todo, show next week, two weeks, month, journal).
28 31
29Added items to the todolist popup menu for: 32Added items to the todolist popup menu for:
30Display all opened, all closed or all todos flat. 33Display all opened, all closed or all todos flat.
31The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 34The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
32Made the reparenting of todos on the desktop possible via Drag&Drop. 35Made the reparenting of todos on the desktop possible via Drag&Drop.
33Fixed several bugs in setting the completed datetime for todos. 36Fixed several bugs in setting the completed datetime for todos.
34Added info about completed datetime of todos to the todo viewer. 37Added info about completed datetime of todos to the todo viewer.
35Now displaying a completed todo (with completed datetime set) in the agenda view 38Now displaying a completed todo (with completed datetime set) in the agenda view
36at the time of the completion. Such that now it is possible to see in the agenda view 39at the time of the completion. Such that now it is possible to see in the agenda view
37when what todo was completed. 40when what todo was completed.
38Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 41Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
39Now the behaviour is: 42Now the behaviour is:
40Setting a parent to complete sets all (sub)childs to complete. 43Setting a parent to complete sets all (sub)childs to complete.
41Setting a parent to uncomplete does not change the childs. 44Setting a parent to uncomplete does not change the childs.
42Setting a child to uncomplete sets all parent to uncomplete. 45Setting a child to uncomplete sets all parent to uncomplete.
43Setting a child to complete does not change the parents. 46Setting a child to complete does not change the parents.
44 47
45Smart updating and double buffering of the daymatrix. 48Smart updating and double buffering of the daymatrix.
46Showing holidays in the day matrix. 49Showing holidays in the day matrix.
47Many other small performance updates. 50Many other small performance updates.
48 51
49Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 52Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
50 53
51Now the translation file usertranslation.txt is supposed to be in utf8 format. 54Now the translation file usertranslation.txt is supposed to be in utf8 format.
52If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 55If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu.
53 56
54 57
55********** VERSION 2.0.0 ************ 58********** VERSION 2.0.0 ************
56 59
57Stable release 2.0.0! 60Stable release 2.0.0!
58 61
59KO/Pi: 62KO/Pi:
60Fixed problem in edit dialog recreation at startup. 63Fixed problem in edit dialog recreation at startup.
61Made "toggle view*" menu items enabled context sensitive. 64Made "toggle view*" menu items enabled context sensitive.
62Changed agenda size menu to items 1-10. 65Changed agenda size menu to items 1-10.
63Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 66Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index e0380fa..77de94f 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -2206,98 +2206,114 @@ void CalendarView::edit_cut()
2206 2206
2207 if (mViewManager->currentView()->isEventView()) { 2207 if (mViewManager->currentView()->isEventView()) {
2208 if ( incidence && incidence->type() == "Event" ) { 2208 if ( incidence && incidence->type() == "Event" ) {
2209 anEvent = static_cast<Event *>(incidence); 2209 anEvent = static_cast<Event *>(incidence);
2210 } 2210 }
2211 } 2211 }
2212 2212
2213 if (!anEvent) { 2213 if (!anEvent) {
2214 KNotifyClient::beep(); 2214 KNotifyClient::beep();
2215 return; 2215 return;
2216 } 2216 }
2217 DndFactory factory( mCalendar ); 2217 DndFactory factory( mCalendar );
2218 factory.cutIncidence(anEvent); 2218 factory.cutIncidence(anEvent);
2219 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2219 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2220} 2220}
2221 2221
2222void CalendarView::edit_copy() 2222void CalendarView::edit_copy()
2223{ 2223{
2224 Event *anEvent=0; 2224 Event *anEvent=0;
2225 2225
2226 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2226 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2227 2227
2228 if (mViewManager->currentView()->isEventView()) { 2228 if (mViewManager->currentView()->isEventView()) {
2229 if ( incidence && incidence->type() == "Event" ) { 2229 if ( incidence && incidence->type() == "Event" ) {
2230 anEvent = static_cast<Event *>(incidence); 2230 anEvent = static_cast<Event *>(incidence);
2231 } 2231 }
2232 } 2232 }
2233 2233
2234 if (!anEvent) { 2234 if (!anEvent) {
2235 KNotifyClient::beep(); 2235 KNotifyClient::beep();
2236 return; 2236 return;
2237 } 2237 }
2238 DndFactory factory( mCalendar ); 2238 DndFactory factory( mCalendar );
2239 factory.copyIncidence(anEvent); 2239 factory.copyIncidence(anEvent);
2240} 2240}
2241 2241
2242void CalendarView::edit_paste() 2242void CalendarView::edit_paste()
2243{ 2243{
2244 QDate date = mNavigator->selectedDates().first(); 2244 QDate date = mNavigator->selectedDates().first();
2245 2245
2246 DndFactory factory( mCalendar ); 2246 DndFactory factory( mCalendar );
2247 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 2247 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
2248 2248
2249 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2249 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2250} 2250}
2251 2251
2252void CalendarView::edit_options() 2252void CalendarView::edit_options()
2253{ 2253{
2254 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
2255 emit save();
2256 emit saveStopTimer();
2254 mDialogManager->showOptionsDialog(); 2257 mDialogManager->showOptionsDialog();
2255 //writeSettings(); 2258 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
2259 emit saveStopTimer();
2260 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto apply timezone changes?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
2261 i18n("Timezone settings"),i18n("Reload"))) {
2262 qDebug("KO: TZ reload cancelled ");
2263 return;
2264 }
2265 qDebug("KO: Timezone change ");
2266 openCalendar( MainWindow::defaultFileName() );
2267 setModified(true);
2268 }
2269 else
2270 qDebug("KO: No tz change ");
2271
2256} 2272}
2257 2273
2258 2274
2259void CalendarView::slotSelectPickerDate( QDate d) 2275void CalendarView::slotSelectPickerDate( QDate d)
2260{ 2276{
2261 mDateFrame->hide(); 2277 mDateFrame->hide();
2262 if ( mDatePickerMode == 1 ) { 2278 if ( mDatePickerMode == 1 ) {
2263 mNavigator->slotDaySelect( d ); 2279 mNavigator->slotDaySelect( d );
2264 } else if ( mDatePickerMode == 2 ) { 2280 } else if ( mDatePickerMode == 2 ) {
2265 if ( mMoveIncidence->type() == "Todo" ) { 2281 if ( mMoveIncidence->type() == "Todo" ) {
2266 Todo * to = (Todo *) mMoveIncidence; 2282 Todo * to = (Todo *) mMoveIncidence;
2267 QTime tim; 2283 QTime tim;
2268 if ( to->hasDueDate() ) 2284 if ( to->hasDueDate() )
2269 tim = to->dtDue().time(); 2285 tim = to->dtDue().time();
2270 else { 2286 else {
2271 tim = QTime ( 0,0,0 ); 2287 tim = QTime ( 0,0,0 );
2272 to->setFloats( true ); 2288 to->setFloats( true );
2273 to->setHasDueDate( true ); 2289 to->setHasDueDate( true );
2274 } 2290 }
2275 QDateTime dt ( d,tim ); 2291 QDateTime dt ( d,tim );
2276 to->setDtDue( dt ); 2292 to->setDtDue( dt );
2277 todoChanged( to ); 2293 todoChanged( to );
2278 } else { 2294 } else {
2279 if ( mMoveIncidence->doesRecur() ) { 2295 if ( mMoveIncidence->doesRecur() ) {
2280#if 0 2296#if 0
2281 // PENDING implement this 2297 // PENDING implement this
2282 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2298 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2283 mCalendar()->addIncidence( newInc ); 2299 mCalendar()->addIncidence( newInc );
2284 if ( mMoveIncidence->type() == "Todo" ) 2300 if ( mMoveIncidence->type() == "Todo" )
2285 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2301 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2286 else 2302 else
2287 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2303 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2288 mMoveIncidence = newInc; 2304 mMoveIncidence = newInc;
2289 2305
2290#endif 2306#endif
2291 } 2307 }
2292 QTime tim = mMoveIncidence->dtStart().time(); 2308 QTime tim = mMoveIncidence->dtStart().time();
2293 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2309 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2294 QDateTime dt ( d,tim ); 2310 QDateTime dt ( d,tim );
2295 mMoveIncidence->setDtStart( dt ); 2311 mMoveIncidence->setDtStart( dt );
2296 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2312 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2297 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2313 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2298 } 2314 }
2299 2315
2300 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2316 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2301 } 2317 }
2302} 2318}
2303 2319
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 6ea8287..8d7ff36 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -72,96 +72,98 @@ using namespace KCal;
72 72
73/** 73/**
74 This is the main calendar widget. It provides the different vies on t he 74 This is the main calendar widget. It provides the different vies on t he
75 calendar data as well as the date navigator. It also handles synchronisation 75 calendar data as well as the date navigator. It also handles synchronisation
76 of the different views and controls the different dialogs like preferences, 76 of the different views and controls the different dialogs like preferences,
77 event editor, search dialog etc. 77 event editor, search dialog etc.
78 78
79 @short main calendar view widget 79 @short main calendar view widget
80 @author Cornelius Schumacher 80 @author Cornelius Schumacher
81*/ 81*/
82class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 82class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
83{ 83{
84 Q_OBJECT 84 Q_OBJECT
85 public: 85 public:
86 /** 86 /**
87 Constructs a new calendar view widget. 87 Constructs a new calendar view widget.
88 88
89 @param calendar calendar document 89 @param calendar calendar document
90 @param parent parent window 90 @param parent parent window
91 @param name Qt internal widget object name 91 @param name Qt internal widget object name
92 */ 92 */
93 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 93 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
94 const char *name = 0 ); 94 const char *name = 0 );
95 CalendarView( Calendar *calendar, QWidget *parent = 0, 95 CalendarView( Calendar *calendar, QWidget *parent = 0,
96 const char *name = 0 ); 96 const char *name = 0 );
97 virtual ~CalendarView(); 97 virtual ~CalendarView();
98 98
99 Calendar *calendar() { return mCalendar; } 99 Calendar *calendar() { return mCalendar; }
100 100
101 KOViewManager *viewManager(); 101 KOViewManager *viewManager();
102 KODialogManager *dialogManager(); 102 KODialogManager *dialogManager();
103 103
104 QDate startDate(); 104 QDate startDate();
105 QDate endDate(); 105 QDate endDate();
106 106
107 QWidgetStack *viewStack(); 107 QWidgetStack *viewStack();
108 QWidget *leftFrame(); 108 QWidget *leftFrame();
109 NavigatorBar *navigatorBar(); 109 NavigatorBar *navigatorBar();
110 110
111 DateNavigator *dateNavigator(); 111 DateNavigator *dateNavigator();
112 KDateNavigator *dateNavigatorWidget(); 112 KDateNavigator *dateNavigatorWidget();
113 113
114 void addView(KOrg::BaseView *); 114 void addView(KOrg::BaseView *);
115 void showView(KOrg::BaseView *); 115 void showView(KOrg::BaseView *);
116 KOEventViewerDialog* getEventViewerDialog(); 116 KOEventViewerDialog* getEventViewerDialog();
117 Incidence *currentSelection(); 117 Incidence *currentSelection();
118 118
119 signals: 119 signals:
120 void save ();
121 void saveStopTimer ();
120 void tempDisableBR(bool); 122 void tempDisableBR(bool);
121 /** This todo has been modified */ 123 /** This todo has been modified */
122 void todoModified(Todo *, int); 124 void todoModified(Todo *, int);
123 125
124 /** when change is made to options dialog, the topwidget will catch this 126 /** when change is made to options dialog, the topwidget will catch this
125 * and emit this signal which notifies all widgets which have registered 127 * and emit this signal which notifies all widgets which have registered
126 * for notification to update their settings. */ 128 * for notification to update their settings. */
127 void configChanged(); 129 void configChanged();
128 /** emitted when the topwidget is closing down, so that any attached 130 /** emitted when the topwidget is closing down, so that any attached
129 child windows can also close. */ 131 child windows can also close. */
130 void closingDown(); 132 void closingDown();
131 /** emitted right before we die */ 133 /** emitted right before we die */
132 void closed(QWidget *); 134 void closed(QWidget *);
133 135
134 /** Emitted when state of modified flag changes */ 136 /** Emitted when state of modified flag changes */
135 void modifiedChanged(bool); 137 void modifiedChanged(bool);
136 void signalmodified(); 138 void signalmodified();
137 139
138 /** Emitted when state of read-only flag changes */ 140 /** Emitted when state of read-only flag changes */
139 void readOnlyChanged(bool); 141 void readOnlyChanged(bool);
140 142
141 /** Emitted when the unit of navigation changes */ 143 /** Emitted when the unit of navigation changes */
142 void changeNavStringPrev(const QString &); 144 void changeNavStringPrev(const QString &);
143 void changeNavStringNext(const QString &); 145 void changeNavStringNext(const QString &);
144 146
145 /** Emitted when state of events selection has changed and user is organizer*/ 147 /** Emitted when state of events selection has changed and user is organizer*/
146 void organizerEventsSelected(bool); 148 void organizerEventsSelected(bool);
147 /** Emitted when state of events selection has changed and user is attendee*/ 149 /** Emitted when state of events selection has changed and user is attendee*/
148 void groupEventsSelected(bool); 150 void groupEventsSelected(bool);
149 /** 151 /**
150 Emitted when an incidence gets selected. If the selection is cleared the 152 Emitted when an incidence gets selected. If the selection is cleared the
151 signal is emitted with 0 as argument. 153 signal is emitted with 0 as argument.
152 */ 154 */
153 void incidenceSelected( Incidence * ); 155 void incidenceSelected( Incidence * );
154 /** Emitted, when a todoitem is selected or deselected. */ 156 /** Emitted, when a todoitem is selected or deselected. */
155 void todoSelected( bool ); 157 void todoSelected( bool );
156 158
157 /** 159 /**
158 Emitted, when clipboard content changes. Parameter indicates if paste 160 Emitted, when clipboard content changes. Parameter indicates if paste
159 is possible or not. 161 is possible or not.
160 */ 162 */
161 void pasteEnabled(bool); 163 void pasteEnabled(bool);
162 164
163 /** Emitted, when the number of incoming messages has changed. */ 165 /** Emitted, when the number of incoming messages has changed. */
164 void numIncomingChanged(int); 166 void numIncomingChanged(int);
165 167
166 /** Emitted, when the number of outgoing messages has changed. */ 168 /** Emitted, when the number of outgoing messages has changed. */
167 void numOutgoingChanged(int); 169 void numOutgoingChanged(int);
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 3feb4ab..a2c20a8 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -214,96 +214,98 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
214 qApp->processEvents(); 214 qApp->processEvents();
215 } else { 215 } else {
216 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); 216 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics");
217 finfo.setFile( oldFile ); 217 finfo.setFile( oldFile );
218 if (finfo.exists() ) { 218 if (finfo.exists() ) {
219 KMessageBox::information( this, message); 219 KMessageBox::information( this, message);
220 mView->openCalendar( oldFile ); 220 mView->openCalendar( oldFile );
221 qApp->processEvents(); 221 qApp->processEvents();
222 } 222 }
223 } 223 }
224 mView->saveCalendar( defaultFileName() ); 224 mView->saveCalendar( defaultFileName() );
225 newFile = true; 225 newFile = true;
226 } 226 }
227 227
228 QTime neededSaveTime = QDateTime::currentDateTime().time(); 228 QTime neededSaveTime = QDateTime::currentDateTime().time();
229 mView->openCalendar( defaultFileName() ); 229 mView->openCalendar( defaultFileName() );
230 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 230 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
231 qDebug("KO: Calendar loading time: %d ms",msNeeded ); 231 qDebug("KO: Calendar loading time: %d ms",msNeeded );
232 232
233 if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) { 233 if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) {
234 KOPrefs::instance()->setCategoryDefaults(); 234 KOPrefs::instance()->setCategoryDefaults();
235 int count = mView->addCategories(); 235 int count = mView->addCategories();
236 } 236 }
237 processIncidenceSelection( 0 ); 237 processIncidenceSelection( 0 );
238 connect( mView, SIGNAL( incidenceSelected( Incidence * ) ), 238 connect( mView, SIGNAL( incidenceSelected( Incidence * ) ),
239 SLOT( processIncidenceSelection( Incidence * ) ) ); 239 SLOT( processIncidenceSelection( Incidence * ) ) );
240 connect( mView, SIGNAL( modifiedChanged( bool ) ), 240 connect( mView, SIGNAL( modifiedChanged( bool ) ),
241 SLOT( slotModifiedChanged( bool ) ) ); 241 SLOT( slotModifiedChanged( bool ) ) );
242 242
243 243
244 connect( mView, SIGNAL( tempDisableBR(bool) ), 244 connect( mView, SIGNAL( tempDisableBR(bool) ),
245 SLOT( disableBR(bool) ) ); 245 SLOT( disableBR(bool) ) );
246 connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) ); 246 connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) );
247 mView->setModified( false ); 247 mView->setModified( false );
248 mBlockAtStartup = false; 248 mBlockAtStartup = false;
249 mView->setModified( false ); 249 mView->setModified( false );
250 setCentralWidget( mView ); 250 setCentralWidget( mView );
251 globalFlagBlockStartup = 0; 251 globalFlagBlockStartup = 0;
252 mView->show(); 252 mView->show();
253 delete splash; 253 delete splash;
254 if ( newFile ) 254 if ( newFile )
255 mView->updateConfig(); 255 mView->updateConfig();
256 // qApp->processEvents(); 256 // qApp->processEvents();
257 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 257 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
258 //fillSyncMenu(); 258 //fillSyncMenu();
259 259
260 260
261 connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) ); 261 connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) );
262 connect(mView , SIGNAL( save() ), this, SLOT( save() ) );
263 connect(mView , SIGNAL( saveStopTimer() ), this, SLOT( saveStopTimer() ) );
262 connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); 264 connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) );
263 connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); 265 connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) );
264 mSyncManager->setDefaultFileName( defaultFileName()); 266 mSyncManager->setDefaultFileName( defaultFileName());
265 connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) ); 267 connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) );
266 mSyncManager->fillSyncMenu(); 268 mSyncManager->fillSyncMenu();
267 269
268 270
269 271
270 mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins ); 272 mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins );
271 if ( showWarning ) { 273 if ( showWarning ) {
272 KMessageBox::information( this, 274 KMessageBox::information( this,
273 "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information"); 275 "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information");
274 qApp->processEvents(); 276 qApp->processEvents();
275 mView->dialogManager()->showSyncOptions(); 277 mView->dialogManager()->showSyncOptions();
276 } 278 }
277 279
278 //US listen for result adressed from Ka/Pi 280 //US listen for result adressed from Ka/Pi
279#ifndef DESKTOP_VERSION 281#ifndef DESKTOP_VERSION
280 connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); 282 connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & )));
281#endif 283#endif
282#ifndef DESKTOP_VERSION 284#ifndef DESKTOP_VERSION
283 infrared = 0; 285 infrared = 0;
284#endif 286#endif
285 287
286 mBRdisabled = false; 288 mBRdisabled = false;
287 //toggleBeamReceive(); 289 //toggleBeamReceive();
288} 290}
289MainWindow::~MainWindow() 291MainWindow::~MainWindow()
290{ 292{
291 //qDebug("MainWindow::~MainWindow() "); 293 //qDebug("MainWindow::~MainWindow() ");
292 //save toolbar location 294 //save toolbar location
293 delete mCalendar; 295 delete mCalendar;
294 delete mSyncManager; 296 delete mSyncManager;
295#ifndef DESKTOP_VERSION 297#ifndef DESKTOP_VERSION
296 if ( infrared ) 298 if ( infrared )
297 delete infrared; 299 delete infrared;
298#endif 300#endif
299 301
300 302
301} 303}
302 304
303void MainWindow::disableBR(bool b) 305void MainWindow::disableBR(bool b)
304{ 306{
305#ifndef DESKTOP_VERSION 307#ifndef DESKTOP_VERSION
306 if ( b ) { 308 if ( b ) {
307 if ( infrared ) { 309 if ( infrared ) {
308 toggleBeamReceive(); 310 toggleBeamReceive();
309 mBRdisabled = true; 311 mBRdisabled = true;
@@ -1402,127 +1404,138 @@ void MainWindow::importBday()
1402{ 1404{
1403 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1405 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1404 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), 1406 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"),
1405 i18n("Import!"), i18n("Cancel"), 0, 1407 i18n("Import!"), i18n("Cancel"), 0,
1406 0, 1 ); 1408 0, 1 );
1407 if ( result == 0 ) { 1409 if ( result == 0 ) {
1408 mView->importBday(); 1410 mView->importBday();
1409 1411
1410 } 1412 }
1411 1413
1412 1414
1413} 1415}
1414void MainWindow::importQtopia() 1416void MainWindow::importQtopia()
1415{ 1417{
1416#ifndef DESKTOP_VERSION 1418#ifndef DESKTOP_VERSION
1417 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1419 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1418 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"), 1420 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"),
1419 i18n("Import!"), i18n("Cancel"), 0, 1421 i18n("Import!"), i18n("Cancel"), 0,
1420 0, 1 ); 1422 0, 1 );
1421 if ( result == 0 ) { 1423 if ( result == 0 ) {
1422 QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); 1424 QString datebook = Global::applicationFileName( "datebook", "datebook.xml");
1423 QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); 1425 QString todolist = Global::applicationFileName( "todolist", "todolist.xml");
1424 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; 1426 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml";
1425 mView->importQtopia( categories, datebook, todolist ); 1427 mView->importQtopia( categories, datebook, todolist );
1426 } 1428 }
1427#else 1429#else
1428 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1430 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1429 i18n("Not supported \non desktop!\n"), 1431 i18n("Not supported \non desktop!\n"),
1430 i18n("Ok"), i18n("Cancel"), 0, 1432 i18n("Ok"), i18n("Cancel"), 0,
1431 0, 1 ); 1433 0, 1 );
1432 1434
1433#endif 1435#endif
1434} 1436}
1435 1437
1436void MainWindow::saveOnClose() 1438void MainWindow::saveOnClose()
1437{ 1439{
1438 KOPrefs *p = KOPrefs::instance(); 1440 KOPrefs *p = KOPrefs::instance();
1439 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); 1441 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal );
1440 p->mToolBarUp = iconToolBar->x() > width()/2 || 1442 p->mToolBarUp = iconToolBar->x() > width()/2 ||
1441 iconToolBar->y() > height()/2; 1443 iconToolBar->y() > height()/2;
1442 mView->writeSettings(); 1444 mView->writeSettings();
1443 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) 1445 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName()))
1444 save(); 1446 save();
1445} 1447}
1446void MainWindow::slotModifiedChanged( bool changed ) 1448void MainWindow::slotModifiedChanged( bool changed )
1447{ 1449{
1448 if ( mBlockAtStartup ) 1450 if ( mBlockAtStartup )
1449 return; 1451 return;
1452
1450 int msec; 1453 int msec;
1451 // we store the changes after 1 minute, 1454 // we store the changes after 1 minute,
1452 // and for safety reasons after 10 minutes again 1455 // and for safety reasons after 10 minutes again
1453 if ( !mSyncManager->blockSave() ) 1456 if ( !mSyncManager->blockSave() )
1454 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; 1457 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000;
1455 else 1458 else
1456 msec = 1000 * 600; 1459 msec = 1000 * 600;
1457 mSaveTimer.start( msec, true ); // 1 minute 1460 mSaveTimer.start( msec, true ); // 1 minute
1458 qDebug("KO: Saving File in %d secs!", msec/1000); 1461 qDebug("KO: Saving File in %d secs!", msec/1000);
1459 mCalendarModifiedFlag = true; 1462 mCalendarModifiedFlag = true;
1460} 1463}
1464void MainWindow::saveStopTimer()
1465{
1466 mSaveTimer.stop();
1467 if (mSaveTimer.isActive() )
1468 qDebug("ti active ");
1469 else
1470 qDebug("KO: Save timer stopped");
1471}
1461void MainWindow::save() 1472void MainWindow::save()
1462{ 1473{
1474 if ( !mCalendarModifiedFlag ) {
1475 qDebug("KO: Calendar not modified. Nothing saved.");
1476 return;
1477 }
1463 if ( mSyncManager->blockSave() ) 1478 if ( mSyncManager->blockSave() )
1464 return; 1479 return;
1465 mSyncManager->setBlockSave(true); 1480 mSyncManager->setBlockSave(true);
1466 if ( mView->checkFileVersion( defaultFileName()) ) { 1481 if ( mView->checkFileVersion( defaultFileName()) ) {
1467
1468 QTime neededSaveTime = QDateTime::currentDateTime().time(); 1482 QTime neededSaveTime = QDateTime::currentDateTime().time();
1469 setCaption(i18n("KO/Pi:Saving Data to File ..." )); 1483 setCaption(i18n("KO/Pi:Saving Data to File ..." ));
1470 qDebug("KO: Start saving data to file!"); 1484 qDebug("KO: Start saving data to file!");
1471 mView->saveCalendar( defaultFileName() ); 1485 mView->saveCalendar( defaultFileName() );
1472 1486 mCalendarModifiedFlag = false;
1473 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 1487 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
1474 qDebug("KO: Needed %d ms for saving.",msNeeded ); 1488 qDebug("KO: Needed %d ms for saving.",msNeeded );
1475 QString savemes; 1489 QString savemes;
1476 savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); 1490 savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 );
1477 setCaption(savemes); 1491 setCaption(savemes);
1478 } else 1492 } else
1479 setCaption(i18n("Saving cancelled!")); 1493 setCaption(i18n("Saving cancelled!"));
1480 mCalendarModifiedFlag = false;
1481 mSyncManager->setBlockSave( false ); 1494 mSyncManager->setBlockSave( false );
1482} 1495}
1483 1496
1484void MainWindow::keyReleaseEvent ( QKeyEvent * e) 1497void MainWindow::keyReleaseEvent ( QKeyEvent * e)
1485{ 1498{
1486 if ( !e->isAutoRepeat() ) { 1499 if ( !e->isAutoRepeat() ) {
1487 mFlagKeyPressed = false; 1500 mFlagKeyPressed = false;
1488 } 1501 }
1489} 1502}
1490void MainWindow::keyPressEvent ( QKeyEvent * e ) 1503void MainWindow::keyPressEvent ( QKeyEvent * e )
1491{ 1504{
1492 qApp->processEvents(); 1505 qApp->processEvents();
1493 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 1506 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
1494 e->ignore(); 1507 e->ignore();
1495 // qDebug(" ignore %d",e->isAutoRepeat() ); 1508 // qDebug(" ignore %d",e->isAutoRepeat() );
1496 return; 1509 return;
1497 } 1510 }
1498 if (! e->isAutoRepeat() ) 1511 if (! e->isAutoRepeat() )
1499 mFlagKeyPressed = true; 1512 mFlagKeyPressed = true;
1500 KOPrefs *p = KOPrefs::instance(); 1513 KOPrefs *p = KOPrefs::instance();
1501 bool showSelectedDates = false; 1514 bool showSelectedDates = false;
1502 int size; 1515 int size;
1503 int pro = 0; 1516 int pro = 0;
1504 //qDebug("MainWindow::keyPressEvent "); 1517 //qDebug("MainWindow::keyPressEvent ");
1505 switch ( e->key() ) { 1518 switch ( e->key() ) {
1506 case Qt::Key_Right: 1519 case Qt::Key_Right:
1507 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) 1520 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton)
1508 mView->goNextMonth(); 1521 mView->goNextMonth();
1509 else 1522 else
1510 mView->goNext(); 1523 mView->goNext();
1511 showSelectedDates = true; 1524 showSelectedDates = true;
1512 break; 1525 break;
1513 case Qt::Key_Left: 1526 case Qt::Key_Left:
1514 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1527 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1515 mView->goPreviousMonth(); 1528 mView->goPreviousMonth();
1516 else 1529 else
1517 mView->goPrevious(); 1530 mView->goPrevious();
1518 showSelectedDates = true; 1531 showSelectedDates = true;
1519 break; 1532 break;
1520 case Qt::Key_Down: 1533 case Qt::Key_Down:
1521 mView->viewManager()->agendaView()->scrollOneHourDown(); 1534 mView->viewManager()->agendaView()->scrollOneHourDown();
1522 break; 1535 break;
1523 case Qt::Key_Up: 1536 case Qt::Key_Up:
1524 mView->viewManager()->agendaView()->scrollOneHourUp(); 1537 mView->viewManager()->agendaView()->scrollOneHourUp();
1525 break; 1538 break;
1526 case Qt::Key_I: 1539 case Qt::Key_I:
1527 mView->showIncidence(); 1540 mView->showIncidence();
1528 break; 1541 break;
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h
index 6de0543..8dd55ac 100644
--- a/korganizer/mainwindow.h
+++ b/korganizer/mainwindow.h
@@ -27,96 +27,97 @@ class QPEToolBar;
27 27
28namespace KCal { 28namespace KCal {
29class CalendarLocal; 29class CalendarLocal;
30} 30}
31 31
32using namespace KCal; 32using namespace KCal;
33 33
34class MainWindow : public QMainWindow 34class MainWindow : public QMainWindow
35{ 35{
36 Q_OBJECT 36 Q_OBJECT
37 public: 37 public:
38 MainWindow( QWidget *parent = 0, const char *name = 0, QString command = ""); 38 MainWindow( QWidget *parent = 0, const char *name = 0, QString command = "");
39 ~MainWindow(); 39 ~MainWindow();
40 bool beamReceiveEnabled(); 40 bool beamReceiveEnabled();
41 static QString defaultFileName(); 41 static QString defaultFileName();
42 static QString syncFileName(); 42 static QString syncFileName();
43 static QString resourcePath(); 43 static QString resourcePath();
44 public slots: 44 public slots:
45 virtual void showMaximized (); 45 virtual void showMaximized ();
46 void configureAgenda( int ); 46 void configureAgenda( int );
47 void recieve( const QCString& msg, const QByteArray& data ); 47 void recieve( const QCString& msg, const QByteArray& data );
48 protected slots: 48 protected slots:
49 void setCaptionToDates(); 49 void setCaptionToDates();
50 void about(); 50 void about();
51 void licence(); 51 void licence();
52 void faq(); 52 void faq();
53 void usertrans(); 53 void usertrans();
54 void features(); 54 void features();
55 void synchowto(); 55 void synchowto();
56 void kdesynchowto(); 56 void kdesynchowto();
57 void multisynchowto(); 57 void multisynchowto();
58 void whatsNew(); 58 void whatsNew();
59 void keyBindings(); 59 void keyBindings();
60 void aboutAutoSaving();; 60 void aboutAutoSaving();;
61 void aboutKnownBugs(); 61 void aboutKnownBugs();
62 62
63 void processIncidenceSelection( Incidence * ); 63 void processIncidenceSelection( Incidence * );
64 64
65 void importQtopia(); 65 void importQtopia();
66 void importBday(); 66 void importBday();
67 void importOL(); 67 void importOL();
68 void importIcal(); 68 void importIcal();
69 void importFile( QString, bool ); 69 void importFile( QString, bool );
70 void quickImportIcal(); 70 void quickImportIcal();
71 71
72 void slotModifiedChanged( bool ); 72 void slotModifiedChanged( bool );
73 73
74 void save(); 74 void save();
75 void saveStopTimer();
75 void configureToolBar( int ); 76 void configureToolBar( int );
76 void printSel(); 77 void printSel();
77 void printCal(); 78 void printCal();
78 void saveCalendar(); 79 void saveCalendar();
79 void loadCalendar(); 80 void loadCalendar();
80 void exportVCalendar(); 81 void exportVCalendar();
81 void fillFilterMenu(); 82 void fillFilterMenu();
82 void selectFilter( int ); 83 void selectFilter( int );
83 void exportToPhone( int ); 84 void exportToPhone( int );
84 void toggleBeamReceive(); 85 void toggleBeamReceive();
85 void disableBR(bool); 86 void disableBR(bool);
86 87
87 private slots: 88 private slots:
88 void showConfigureAgenda(); 89 void showConfigureAgenda();
89 void getFile( bool ); 90 void getFile( bool );
90 void syncFileRequest(); 91 void syncFileRequest();
91 92
92 protected: 93 protected:
93 void displayText( QString, QString); 94 void displayText( QString, QString);
94 void enableIncidenceActions( bool ); 95 void enableIncidenceActions( bool );
95 96
96 private: 97 private:
97 bool mBRdisabled; 98 bool mBRdisabled;
98#ifndef DESKTOP_VERSION 99#ifndef DESKTOP_VERSION
99 QCopChannel* infrared; 100 QCopChannel* infrared;
100#endif 101#endif
101 QAction* brAction; 102 QAction* brAction;
102 KSyncManager* mSyncManager; 103 KSyncManager* mSyncManager;
103 bool mClosed; 104 bool mClosed;
104 void saveOnClose(); 105 void saveOnClose();
105 bool mFlagKeyPressed; 106 bool mFlagKeyPressed;
106 bool mBlockAtStartup; 107 bool mBlockAtStartup;
107 QPEToolBar *iconToolBar; 108 QPEToolBar *iconToolBar;
108 void initActions(); 109 void initActions();
109 void setDefaultPreferences(); 110 void setDefaultPreferences();
110 void keyPressEvent ( QKeyEvent * ) ; 111 void keyPressEvent ( QKeyEvent * ) ;
111 void keyReleaseEvent ( QKeyEvent * ) ; 112 void keyReleaseEvent ( QKeyEvent * ) ;
112 QPopupMenu *configureToolBarMenu; 113 QPopupMenu *configureToolBarMenu;
113 QPopupMenu *selectFilterMenu; 114 QPopupMenu *selectFilterMenu;
114 QPopupMenu *configureAgendaMenu, *syncMenu; 115 QPopupMenu *configureAgendaMenu, *syncMenu;
115 CalendarLocal *mCalendar; 116 CalendarLocal *mCalendar;
116 CalendarView *mView; 117 CalendarView *mView;
117 QAction *mNewSubTodoAction; 118 QAction *mNewSubTodoAction;
118 119
119 QAction *mShowAction; 120 QAction *mShowAction;
120 QAction *mEditAction; 121 QAction *mEditAction;
121 QAction *mDeleteAction; 122 QAction *mDeleteAction;
122 QAction *mCloneAction; 123 QAction *mCloneAction;