summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-08-05 19:27:34 (UTC)
committer zautrix <zautrix>2005-08-05 19:27:34 (UTC)
commit78ae7e3faed42b510f4f0a60007115756cd06128 (patch) (unidiff)
tree16947ed0eda107673cb6b437e772a6194861548d
parent7c639808d3d78e323857e0a110237e6d77bf04c8 (diff)
downloadkdepimpi-78ae7e3faed42b510f4f0a60007115756cd06128.zip
kdepimpi-78ae7e3faed42b510f4f0a60007115756cd06128.tar.gz
kdepimpi-78ae7e3faed42b510f4f0a60007115756cd06128.tar.bz2
fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt5
-rw-r--r--desktop/rpm/kdepim_rpm2
-rw-r--r--korganizer/journalentry.cpp4
-rw-r--r--korganizer/koagenda.cpp6
-rw-r--r--korganizer/koagenda.h2
-rw-r--r--korganizer/kotodoview.cpp4
-rw-r--r--version2
7 files changed, 18 insertions, 7 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index d0b2880..f4b3ddb 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,50 +1,55 @@
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.1.19 ************
4
5Fixed a crash in journal view and a crash in setting a todo to stopped when KO/Pi saved the file when "stop todo" dialog was shown.
6Fixed a minor problem with the marcus bains line (whatever that is).
7
3********** VERSION 2.1.18 ************ 8********** VERSION 2.1.18 ************
4 9
5Pi-Sync mode: 10Pi-Sync mode:
6The "Write back file" status dialog was updated too often such that writing back the file on the Z was very slow. Fixed. 11The "Write back file" status dialog was updated too often such that writing back the file on the Z was very slow. Fixed.
7 12
8KO/Pi: 13KO/Pi:
9Fixed a layout problem on the Z 5500 with the calender box right of the location box in the event/todo editor. Thanks to Andrew, who found, reported and fixed this problem ( I did not get that problem - it was working on my 5500 ). 14Fixed a layout problem on the Z 5500 with the calender box right of the location box in the event/todo editor. Thanks to Andrew, who found, reported and fixed this problem ( I did not get that problem - it was working on my 5500 ).
10 15
11Fixed a problem when (imported or added from other applications) events or todos did have attachments. 16Fixed a problem when (imported or added from other applications) events or todos did have attachments.
12Fixed a really ugly and hidden problem in the management of the parent/child relationchip of todos. 17Fixed a really ugly and hidden problem in the management of the parent/child relationchip of todos.
13 18
14 19
15********** VERSION 2.1.17 ************ 20********** VERSION 2.1.17 ************
16 21
17KO/Pi: 22KO/Pi:
18Added option to display times in What's Next View on two lines. 23Added option to display times in What's Next View on two lines.
19(Useful for display on the Zaurus with 240x320 screen) 24(Useful for display on the Zaurus with 240x320 screen)
20Removed "Allday" for allday events of one day duration in What's Next View. 25Removed "Allday" for allday events of one day duration in What's Next View.
21Added date range for allday events of more than one day duration in What's Next View. 26Added date range for allday events of more than one day duration in What's Next View.
22Fixed two problems in the data importing from Outlook: 27Fixed two problems in the data importing from Outlook:
23 Fixed the duplicated import if the summary, location or description had whitespaces at the end. 28 Fixed the duplicated import if the summary, location or description had whitespaces at the end.
24 Fixed a problem importing certain recurrence rules. 29 Fixed a problem importing certain recurrence rules.
25 30
26A journal in an ics file may have no dtStart value (as files from KNotes, which stores its notes in an ics journal file). 31A journal in an ics file may have no dtStart value (as files from KNotes, which stores its notes in an ics journal file).
27If now a journal has no dtStart value the dtStart value is set to the created value of the journal when loading the file. That makes it possible to view and edit "notes" from KNotes. Simply add another Resource in KO/Pi which is a copy of the ics file from KNotes. You will find the "notes" in KO/Pi as a journal entry on the date you created it. 32If now a journal has no dtStart value the dtStart value is set to the created value of the journal when loading the file. That makes it possible to view and edit "notes" from KNotes. Simply add another Resource in KO/Pi which is a copy of the ics file from KNotes. You will find the "notes" in KO/Pi as a journal entry on the date you created it.
28 33
29And some minor fixes in KO/Pi. 34And some minor fixes in KO/Pi.
30 35
31Fixed a crash on the desktop when closing KO/Pi after accessing adressbook data (Linux + Windows ). 36Fixed a crash on the desktop when closing KO/Pi after accessing adressbook data (Linux + Windows ).
32 37
33 38
34********** VERSION 2.1.16 ************ 39********** VERSION 2.1.16 ************
35 40
36Fixed a problem with the menu bar in KO/Pi and using the "Menu" hardware key on the Zaurus. 41Fixed a problem with the menu bar in KO/Pi and using the "Menu" hardware key on the Zaurus.
37Added columns for datetime in todo view: Last modified, created and last modified subtodo 42Added columns for datetime in todo view: Last modified, created and last modified subtodo
38Fixed a bug in agenda view displaying recurring multiday events which are longer than two days. 43Fixed a bug in agenda view displaying recurring multiday events which are longer than two days.
39Made conflict detection up to 4 times faster. 44Made conflict detection up to 4 times faster.
40 45
41********** VERSION 2.1.15 ************ 46********** VERSION 2.1.15 ************
42 47
43Fixed two layout problems on the Z: 48Fixed two layout problems on the Z:
44Made the with of the newly added buttons on the Quick-Todo smaller. 49Made the with of the newly added buttons on the Quick-Todo smaller.
45Made listweek layout in 2 columns on the Z760 in portait screen and full menubar visible. 50Made listweek layout in 2 columns on the Z760 in portait screen and full menubar visible.
46 51
47 52
48********** VERSION 2.1.14 ************ 53********** VERSION 2.1.14 ************
49 54
50Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done. 55Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done.
diff --git a/desktop/rpm/kdepim_rpm b/desktop/rpm/kdepim_rpm
index 133d0d1..a29e4ea 100644
--- a/desktop/rpm/kdepim_rpm
+++ b/desktop/rpm/kdepim_rpm
@@ -1,51 +1,51 @@
1Summary: A collection of PIM programs 1Summary: A collection of PIM programs
2Name: KDE-Pim-Pi 2Name: KDE-Pim-Pi
3Version: 2.1.18 3Version: 2.1.19
4Release: SuSE_9.2 4Release: SuSE_9.2
5Copyright:GPL 5Copyright:GPL
6Group: Productivity/Pim 6Group: Productivity/Pim
7Source:http://sourceforge.net/projects/kdepimpi/ 7Source:http://sourceforge.net/projects/kdepimpi/
8URL:http://sourceforge.net/projects/kdepimpi/ 8URL:http://sourceforge.net/projects/kdepimpi/
9Packager: zautrix 9Packager: zautrix
10 10
11%description 11%description
12This package contains the platform-independent PIM programs from 12This package contains the platform-independent PIM programs from
13www.pi-sync.info, compiled for SuSE 9.2: 13www.pi-sync.info, compiled for SuSE 9.2:
14KTimeTacker/Pi 14KTimeTacker/Pi
15KPhone/Pi 15KPhone/Pi
16KAddressbook/Pi 16KAddressbook/Pi
17KOrganizer/Pi 17KOrganizer/Pi
18PasswordManager/Pi 18PasswordManager/Pi
19KOPieMail/Pi 19KOPieMail/Pi
20 20
21These applications do not need anything from the KDE-desktop 21These applications do not need anything from the KDE-desktop
22at all to run on Linux. However, there is a dependency from 22at all to run on Linux. However, there is a dependency from
23two KDE libs, because a small command line program is included 23two KDE libs, because a small command line program is included
24to make it possible to sync with the KDE-desktop applications. 24to make it possible to sync with the KDE-desktop applications.
25 25
26These applications are independent from the KDE-desktop 26These applications are independent from the KDE-desktop
27environment. That means, nothing of your existing 27environment. That means, nothing of your existing
28KDE-desktop setup will be changed, or any data 28KDE-desktop setup will be changed, or any data
29(calendar-addressbook) used by the KDE-desktop 29(calendar-addressbook) used by the KDE-desktop
30applications will be changed or accessed. 30applications will be changed or accessed.
31These applications stores their data and config in 31These applications stores their data and config in
32$HOME/kdepim/ 32$HOME/kdepim/
33However, because the same file format is used, 33However, because the same file format is used,
34an easy exchange of data with the KDE-desktop 34an easy exchange of data with the KDE-desktop
35is possible. 35is possible.
36A small command line program is included 36A small command line program is included
37to make it possible to sync with the KDE-desktop applications. 37to make it possible to sync with the KDE-desktop applications.
38You do not need to call this program from the commandline, 38You do not need to call this program from the commandline,
39it is called from the KDE-Pim/Pi apps when you choose there: 39it is called from the KDE-Pim/Pi apps when you choose there:
40Sync with KDE_Desktop. 40Sync with KDE_Desktop.
41If something is going wrong, please start the 41If something is going wrong, please start the
42KDE-Pim/Pi program itself from the console to get detailed output. 42KDE-Pim/Pi program itself from the console to get detailed output.
43 43
44After installation, you should have a 44After installation, you should have a
45PIM-pi 45PIM-pi
46folder in your KDE start menu, where you can 46folder in your KDE start menu, where you can
47start the applications from. 47start the applications from.
48 48
49These programs makes it possible to sync your Zaurus easily 49These programs makes it possible to sync your Zaurus easily
50(with the KDE-Pim/Pi programs running on the Zaurus) 50(with the KDE-Pim/Pi programs running on the Zaurus)
51with the KDE-desktop calendar/addressbook data. 51with the KDE-desktop calendar/addressbook data.
diff --git a/korganizer/journalentry.cpp b/korganizer/journalentry.cpp
index 5fc3f2f..7f6f221 100644
--- a/korganizer/journalentry.cpp
+++ b/korganizer/journalentry.cpp
@@ -205,97 +205,99 @@ void JournalEntry::slotLoadTemplate()
205 return; 205 return;
206 QFile fileIn( fileName ); 206 QFile fileIn( fileName );
207 if (!fileIn.open( IO_ReadOnly ) ) { 207 if (!fileIn.open( IO_ReadOnly ) ) {
208 KMessageBox::error( this, i18n("Error loading template file\n '%1'.") 208 KMessageBox::error( this, i18n("Error loading template file\n '%1'.")
209 .arg( fileName ) ); 209 .arg( fileName ) );
210 return; 210 return;
211 } 211 }
212 QTextStream tsIn( &fileIn ); 212 QTextStream tsIn( &fileIn );
213 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 213 tsIn.setCodec( QTextCodec::codecForName("utf8") );
214 QString text = tsIn.read(); 214 QString text = tsIn.read();
215 fileIn.close(); 215 fileIn.close();
216 int line, col; 216 int line, col;
217 mEditor->getCursorPosition (& line, & col ); 217 mEditor->getCursorPosition (& line, & col );
218 mEditor-> insertAt ( text, line, col, true ); 218 mEditor-> insertAt ( text, line, col, true );
219 //mEditor->setIgnoreMark( true ); 219 //mEditor->setIgnoreMark( true );
220} 220}
221void JournalEntry::setDate(const QDate &date) 221void JournalEntry::setDate(const QDate &date)
222{ 222{
223 showOnlyMode = false; 223 showOnlyMode = false;
224 writeJournal(); 224 writeJournal();
225 mDate = date; 225 mDate = date;
226 fillCalendar( mCalendar->defaultCalendar() ); 226 fillCalendar( mCalendar->defaultCalendar() );
227} 227}
228void JournalEntry::fillCalendar( int setToID ) 228void JournalEntry::fillCalendar( int setToID )
229{ 229{
230 mCalendarBox->clear(); 230 mCalendarBox->clear();
231 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 231 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
232 int std = 0; 232 int std = 0;
233 int count = 0; 233 int count = 0;
234 while ( kkf ) { 234 while ( kkf ) {
235 if ( (!kkf->mErrorOnLoad &&! kkf->isReadOnly) || setToID == kkf->mCalNumber ) { 235 if ( (!kkf->mErrorOnLoad &&! kkf->isReadOnly) || setToID == kkf->mCalNumber ) {
236 if ( setToID ) { 236 if ( setToID ) {
237 if ( kkf->mCalNumber == setToID ) 237 if ( kkf->mCalNumber == setToID )
238 std = count; 238 std = count;
239 } else { 239 } else {
240 if ( kkf->isStandard ) { 240 if ( kkf->isStandard ) {
241 std = count; 241 std = count;
242 } 242 }
243 } 243 }
244 ++count; 244 ++count;
245 mCalendarBox->insertItem( kkf->mName ); 245 mCalendarBox->insertItem( kkf->mName );
246 } 246 }
247 kkf = KOPrefs::instance()->mCalendars.next(); 247 kkf = KOPrefs::instance()->mCalendars.next();
248 } 248 }
249 mCalendarBox->setCurrentItem( std ); 249 mCalendarBox->setCurrentItem( std );
250} 250}
251 251
252void JournalEntry::toggleShowJournal() 252void JournalEntry::toggleShowJournal()
253{ 253{
254 if ( mEditor->text().isEmpty() && mTitle->currentText ().isEmpty() )
255 return;
254 if (!mEditor->text().isEmpty() || !mTitle->currentText ().isEmpty()) 256 if (!mEditor->text().isEmpty() || !mTitle->currentText ().isEmpty())
255 flushEntry(); 257 flushEntry();
256 if ( showOnlyMode ) 258 if ( showOnlyMode )
257 emit showJournalOnly( 0 ); 259 emit showJournalOnly( 0 );
258 else { 260 else {
259 // we have to protect mJournal from deleting if mJournal has empty text 261 // we have to protect mJournal from deleting if mJournal has empty text
260 visibleMode = false; // set to true via :setShowOnly() 262 visibleMode = false; // set to true via :setShowOnly()
261 emit showJournalOnly( mJournal ); 263 emit showJournalOnly( mJournal );
262 //QTimer::singleShot( 0, this, SLOT( setVisibleOn() ) ); 264 //QTimer::singleShot( 0, this, SLOT( setVisibleOn() ) );
263 } 265 }
264} 266}
265void JournalEntry::setVisibleOn() 267void JournalEntry::setVisibleOn()
266{ 268{
267 visibleMode = true; 269 visibleMode = true;
268} 270}
269void JournalEntry::setShowOnly() 271void JournalEntry::setShowOnly()
270{ 272{
271 showOnlyMode = true; 273 showOnlyMode = true;
272 if ( mTitle->currentText().isEmpty() ) 274 if ( mTitle->currentText().isEmpty() )
273 mTitle->setFocus(); 275 mTitle->setFocus();
274 else 276 else
275 mEditor->setFocus(); 277 mEditor->setFocus();
276} 278}
277void JournalEntry::setJournal(Journal *journal, bool saveJournal ) 279void JournalEntry::setJournal(Journal *journal, bool saveJournal )
278{ 280{
279 if ( saveJournal ) 281 if ( saveJournal )
280 writeJournal(); 282 writeJournal();
281 mTitle->load( KOLocationBox::SUMMARYJOURNAL ); 283 mTitle->load( KOLocationBox::SUMMARYJOURNAL );
282 284
283 mJournal = journal; 285 mJournal = journal;
284 if ( journal->isReadOnly() ) 286 if ( journal->isReadOnly() )
285 mTitle->lineEdit ()->setText(mJournal->summary()+" ("+i18n("readonly")+")"); 287 mTitle->lineEdit ()->setText(mJournal->summary()+" ("+i18n("readonly")+")");
286 else 288 else
287 mTitle->lineEdit ()->setText(mJournal->summary()); 289 mTitle->lineEdit ()->setText(mJournal->summary());
288 mEditor->setText(mJournal->description()); 290 mEditor->setText(mJournal->description());
289 mTitle->setEnabled (!journal->isReadOnly() ); 291 mTitle->setEnabled (!journal->isReadOnly() );
290 mEditor->setReadOnly ( journal->isReadOnly() ); 292 mEditor->setReadOnly ( journal->isReadOnly() );
291 mCalendarBox->setEnabled (!journal->isReadOnly() ); 293 mCalendarBox->setEnabled (!journal->isReadOnly() );
292 fillCalendar( mJournal->calID() ); 294 fillCalendar( mJournal->calID() );
293} 295}
294 296
295Journal *JournalEntry::journal() const 297Journal *JournalEntry::journal() const
296{ 298{
297 return mJournal; 299 return mJournal;
298} 300}
299 301
300 302
301void JournalEntry::clear() 303void JournalEntry::clear()
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index c738f7e..7e9fa71 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -42,97 +42,100 @@
42#include <kglobal.h> 42#include <kglobal.h>
43 43
44#include "koagendaitem.h" 44#include "koagendaitem.h"
45#include "koprefs.h" 45#include "koprefs.h"
46#include "koglobals.h" 46#include "koglobals.h"
47 47
48#include "koagenda.h" 48#include "koagenda.h"
49 49
50#include <libkcal/event.h> 50#include <libkcal/event.h>
51#include <libkcal/todo.h> 51#include <libkcal/todo.h>
52 52
53#ifndef DESKTOP_VERSION 53#ifndef DESKTOP_VERSION
54#include <qpe/qpeapplication.h> 54#include <qpe/qpeapplication.h>
55#endif 55#endif
56 56
57//extern bool globalFlagBlockPainting; 57//extern bool globalFlagBlockPainting;
58extern int globalFlagBlockAgenda; 58extern int globalFlagBlockAgenda;
59extern int globalFlagBlockAgendaItemPaint; 59extern int globalFlagBlockAgendaItemPaint;
60extern int globalFlagBlockAgendaItemUpdate; 60extern int globalFlagBlockAgendaItemUpdate;
61extern int globalFlagBlockStartup; 61extern int globalFlagBlockStartup;
62 62
63 63
64//////////////////////////////////////////////////////////////////////////// 64////////////////////////////////////////////////////////////////////////////
65MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name) 65MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name)
66 : QFrame(_agenda->viewport(),name), agenda(_agenda) 66 : QFrame(_agenda->viewport(),name), agenda(_agenda)
67{ 67{
68 setLineWidth(0); 68 setLineWidth(0);
69 setMargin(0); 69 setMargin(0);
70 setBackgroundColor(Qt::red); 70 setBackgroundColor(Qt::red);
71 minutes = new QTimer(this); 71 minutes = new QTimer(this);
72 connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc())); 72 connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc()));
73 minutes->start(0, true); 73 minutes->start(0, true);
74 mTimeBox = new QLabel(this); 74 mTimeBox = new QLabel(this);
75 mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom); 75 mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom);
76 QPalette pal = mTimeBox->palette(); 76 QPalette pal = mTimeBox->palette();
77 pal.setColor(QColorGroup::Foreground, Qt::red); 77 pal.setColor(QColorGroup::Foreground, Qt::red);
78 mTimeBox->setPalette(pal); 78 mTimeBox->setPalette(pal);
79 //mTimeBox->setAutoMask(true); 79 //mTimeBox->setAutoMask(true);
80 80
81 agenda->addChild(mTimeBox); 81 agenda->addChild(mTimeBox);
82 82
83 oldToday = -1; 83 oldToday = -1;
84} 84}
85 85
86MarcusBains::~MarcusBains() 86MarcusBains::~MarcusBains()
87{ 87{
88 //delete minutes; 88 //delete minutes;
89} 89}
90 90void MarcusBains::hideMe()
91{
92 hide(); mTimeBox->hide();
93}
91int MarcusBains::todayColumn() 94int MarcusBains::todayColumn()
92{ 95{
93 QDate currentDate = QDate::currentDate(); 96 QDate currentDate = QDate::currentDate();
94 97
95 DateList dateList = agenda->dateList(); 98 DateList dateList = agenda->dateList();
96 DateList::ConstIterator it; 99 DateList::ConstIterator it;
97 int col = 0; 100 int col = 0;
98 for(it = dateList.begin(); it != dateList.end(); ++it) { 101 for(it = dateList.begin(); it != dateList.end(); ++it) {
99 if((*it) == currentDate) 102 if((*it) == currentDate)
100 return KOGlobals::self()->reverseLayout() ? 103 return KOGlobals::self()->reverseLayout() ?
101 agenda->columns() - 1 - col : col; 104 agenda->columns() - 1 - col : col;
102 ++col; 105 ++col;
103 } 106 }
104 107
105 return -1; 108 return -1;
106} 109}
107void MarcusBains::updateLoc() 110void MarcusBains::updateLoc()
108{ 111{
109 updateLocation(); 112 updateLocation();
110} 113}
111void MarcusBains::updateLocation(bool recalculate) 114void MarcusBains::updateLocation(bool recalculate)
112{ 115{
113 116
114 QTime tim = QTime::currentTime(); 117 QTime tim = QTime::currentTime();
115 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1()); 118 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1());
116 if((tim.hour() == 0) && (oldTime.hour()==23)) 119 if((tim.hour() == 0) && (oldTime.hour()==23))
117 recalculate = true; 120 recalculate = true;
118 121
119 int mins = tim.hour()*60 + tim.minute(); 122 int mins = tim.hour()*60 + tim.minute();
120 int minutesPerCell = 24 * 60 / agenda->rows(); 123 int minutesPerCell = 24 * 60 / agenda->rows();
121 int y = mins*agenda->gridSpacingY()/minutesPerCell; 124 int y = mins*agenda->gridSpacingY()/minutesPerCell;
122 int today = recalculate ? todayColumn() : oldToday; 125 int today = recalculate ? todayColumn() : oldToday;
123 int x = agenda->gridSpacingX()*today; 126 int x = agenda->gridSpacingX()*today;
124 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled); 127 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled);
125 128
126 oldTime = tim; 129 oldTime = tim;
127 oldToday = today; 130 oldToday = today;
128 131
129 if(disabled || (today<0)) { 132 if(disabled || (today<0)) {
130 hide(); mTimeBox->hide(); 133 hide(); mTimeBox->hide();
131 return; 134 return;
132 } else { 135 } else {
133 show(); mTimeBox->show(); 136 show(); mTimeBox->show();
134 } 137 }
135 138
136 if(recalculate) 139 if(recalculate)
137 setFixedSize(agenda->gridSpacingX(),1); 140 setFixedSize(agenda->gridSpacingX(),1);
138 agenda->moveChild(this, x, y); 141 agenda->moveChild(this, x, y);
@@ -327,96 +330,97 @@ void KOAgenda::shrinkPixmap()
327{ 330{
328 mPaintPixmap.resize( 20,20); 331 mPaintPixmap.resize( 20,20);
329 mInvalidPixmap = true; 332 mInvalidPixmap = true;
330} 333}
331void KOAgenda::slotContentMove(int,int) 334void KOAgenda::slotContentMove(int,int)
332{ 335{
333 emit sendPing(); 336 emit sendPing();
334 if ( mActionType == NOP ) 337 if ( mActionType == NOP )
335 slotClearSelection(); 338 slotClearSelection();
336 if ( mSelectedItem && !mActionItem ) { 339 if ( mSelectedItem && !mActionItem ) {
337 deselectItem(); 340 deselectItem();
338 emit incidenceSelected( 0 ); 341 emit incidenceSelected( 0 );
339 } 342 }
340} 343}
341void KOAgenda::clear() 344void KOAgenda::clear()
342{ 345{
343 KOAgendaItem *item; 346 KOAgendaItem *item;
344 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 347 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
345 mUnusedItems.append( item ); 348 mUnusedItems.append( item );
346 //item->hide(); 349 //item->hide();
347 } 350 }
348 mItems.clear(); 351 mItems.clear();
349 mSelectedItem = 0; 352 mSelectedItem = 0;
350 clearSelection(); 353 clearSelection();
351} 354}
352 355
353void KOAgenda::clearSelection() 356void KOAgenda::clearSelection()
354{ 357{
355 mSelectionCellX = 0; 358 mSelectionCellX = 0;
356 mSelectionYTop = 0; 359 mSelectionYTop = 0;
357 mSelectionHeight = 0; 360 mSelectionHeight = 0;
358} 361}
359 362
360void KOAgenda::marcus_bains() 363void KOAgenda::marcus_bains()
361{ 364{
362 if(mMarcusBains) mMarcusBains->updateLocation(true); 365 if(mMarcusBains) mMarcusBains->updateLocation(true);
363} 366}
364 367
365 368
366void KOAgenda::changeColumns(int columns) 369void KOAgenda::changeColumns(int columns)
367{ 370{
368 if (columns == 0) { 371 if (columns == 0) {
369 qDebug("KOAgenda::changeColumns() called with argument 0 "); 372 qDebug("KOAgenda::changeColumns() called with argument 0 ");
370 return; 373 return;
371 } 374 }
372 clear(); 375 clear();
373 mColumns = columns; 376 mColumns = columns;
374 computeSizes(); 377 computeSizes();
378 if(mMarcusBains) mMarcusBains->hideMe();
375} 379}
376 380
377/* 381/*
378 This is the eventFilter function, which gets all events from the KOAgendaItems 382 This is the eventFilter function, which gets all events from the KOAgendaItems
379 contained in the agenda. It has to handle moving and resizing for all items. 383 contained in the agenda. It has to handle moving and resizing for all items.
380*/ 384*/
381bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) 385bool KOAgenda::eventFilter ( QObject *object, QEvent *event )
382{ 386{
383 // kdDebug() << "KOAgenda::eventFilter" << endl; 387 // kdDebug() << "KOAgenda::eventFilter" << endl;
384 switch(event->type()) { 388 switch(event->type()) {
385 case QEvent::MouseButtonPress: 389 case QEvent::MouseButtonPress:
386 case QEvent::MouseButtonDblClick: 390 case QEvent::MouseButtonDblClick:
387 case QEvent::MouseButtonRelease: 391 case QEvent::MouseButtonRelease:
388 case QEvent::MouseMove: 392 case QEvent::MouseMove:
389 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event)); 393 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event));
390 394
391 case (QEvent::Leave): 395 case (QEvent::Leave):
392 if (!mActionItem) 396 if (!mActionItem)
393 setCursor(arrowCursor); 397 setCursor(arrowCursor);
394 return true; 398 return true;
395 399
396 default: 400 default:
397 return QScrollView::eventFilter(object,event); 401 return QScrollView::eventFilter(object,event);
398 } 402 }
399} 403}
400void KOAgenda::popupMenu() 404void KOAgenda::popupMenu()
401{ 405{
402 mPopupTimer->stop(); 406 mPopupTimer->stop();
403 if ( mPopupKind == 1 || mPopupKind == 3 ) { 407 if ( mPopupKind == 1 || mPopupKind == 3 ) {
404 if (mActionItem ) { 408 if (mActionItem ) {
405 endItemAction(); 409 endItemAction();
406 } 410 }
407 mLeftMouseDown = false; // no more leftMouse computation 411 mLeftMouseDown = false; // no more leftMouse computation
408 if (mPopupItem) { 412 if (mPopupItem) {
409 //mClickedItem = mPopupItem; 413 //mClickedItem = mPopupItem;
410 selectItem(mPopupItem); 414 selectItem(mPopupItem);
411 if ( mAllAgendaPopup && KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 1 ) 415 if ( mAllAgendaPopup && KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 1 )
412 mAllAgendaPopup->installEventFilter( this ); 416 mAllAgendaPopup->installEventFilter( this );
413 emit showIncidencePopupSignal(mPopupItem->incidence()); 417 emit showIncidencePopupSignal(mPopupItem->incidence());
414 418
415 } 419 }
416 } else if ( mPopupKind == 2 || mPopupKind == 4 ) { 420 } else if ( mPopupKind == 2 || mPopupKind == 4 ) {
417 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action 421 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action
418 endSelectAction( false ); // do not emit new event signal 422 endSelectAction( false ); // do not emit new event signal
419 mLeftMouseDown = false; // no more leftMouse computation 423 mLeftMouseDown = false; // no more leftMouse computation
420 } 424 }
421 if ( KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 2 ) 425 if ( KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 2 )
422 mNewItemPopup->installEventFilter( this ); 426 mNewItemPopup->installEventFilter( this );
diff --git a/korganizer/koagenda.h b/korganizer/koagenda.h
index 86cf2f4..59e7472 100644
--- a/korganizer/koagenda.h
+++ b/korganizer/koagenda.h
@@ -3,97 +3,97 @@
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOAGENDA_H 23#ifndef KOAGENDA_H
24#define KOAGENDA_H 24#define KOAGENDA_H
25 25
26#include <qscrollview.h> 26#include <qscrollview.h>
27#include <qtimer.h> 27#include <qtimer.h>
28#include <qmemarray.h> 28#include <qmemarray.h>
29#include <qpainter.h> 29#include <qpainter.h>
30#include <qpixmap.h> 30#include <qpixmap.h>
31#include <qguardedptr.h> 31#include <qguardedptr.h>
32 32
33#include "koagendaitem.h" 33#include "koagendaitem.h"
34#include "koeventview.h" 34#include "koeventview.h"
35 35
36class QPopupMenu; 36class QPopupMenu;
37class QTime; 37class QTime;
38class KConfig; 38class KConfig;
39class QFrame; 39class QFrame;
40class KOAgenda; 40class KOAgenda;
41class KCal::Event; 41class KCal::Event;
42class KCal::Todo; 42class KCal::Todo;
43 43
44using namespace KCal; 44using namespace KCal;
45 45
46class MarcusBains : public QFrame { 46class MarcusBains : public QFrame {
47 Q_OBJECT 47 Q_OBJECT
48 public: 48 public:
49 MarcusBains(KOAgenda *agenda=0,const char *name=0); 49 MarcusBains(KOAgenda *agenda=0,const char *name=0);
50 virtual ~MarcusBains(); 50 virtual ~MarcusBains();
51 51 void hideMe();
52 public slots: 52 public slots:
53 void updateLocation(bool recalculate=false); 53 void updateLocation(bool recalculate=false);
54 void updateLoc(); 54 void updateLoc();
55 55
56 private: 56 private:
57 int todayColumn(); 57 int todayColumn();
58 QTimer *minutes; 58 QTimer *minutes;
59 QLabel *mTimeBox; 59 QLabel *mTimeBox;
60 KOAgenda *agenda; 60 KOAgenda *agenda;
61 QTime oldTime; 61 QTime oldTime;
62 int oldToday; 62 int oldToday;
63}; 63};
64 64
65 65
66class KOAgenda : public QScrollView 66class KOAgenda : public QScrollView
67{ 67{
68 Q_OBJECT 68 Q_OBJECT
69 public: 69 public:
70 enum MouseActionType { NOP, MOVE, SELECT, 70 enum MouseActionType { NOP, MOVE, SELECT,
71 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT }; 71 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT };
72 72
73 KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0, 73 KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0,
74 const char * name=0, WFlags f=0 ); 74 const char * name=0, WFlags f=0 );
75 KOAgenda ( int columns, QWidget * parent=0, 75 KOAgenda ( int columns, QWidget * parent=0,
76 const char * name=0, WFlags f=0 ); 76 const char * name=0, WFlags f=0 );
77 virtual ~KOAgenda(); 77 virtual ~KOAgenda();
78 bool mInvalidPixmap; 78 bool mInvalidPixmap;
79 79
80 Incidence *selectedIncidence() const; 80 Incidence *selectedIncidence() const;
81 QDate selectedIncidenceDate() const; 81 QDate selectedIncidenceDate() const;
82 82
83 virtual bool eventFilter ( QObject *, QEvent * ); 83 virtual bool eventFilter ( QObject *, QEvent * );
84 84
85 void contentsToGrid (int x, int y, int& gx, int& gy); 85 void contentsToGrid (int x, int y, int& gx, int& gy);
86 void gridToContents (int gx, int gy, int& x, int& y); 86 void gridToContents (int gx, int gy, int& x, int& y);
87 87
88 int timeToY (const QTime &time); 88 int timeToY (const QTime &time);
89 QTime gyToTime (int y); 89 QTime gyToTime (int y);
90 90
91 void setStartHour(int startHour); 91 void setStartHour(int startHour);
92 92
93 KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom); 93 KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom);
94 KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd); 94 KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd);
95 void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, 95 void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd,
96 int YTop,int YBottom); 96 int YTop,int YBottom);
97 97
98 void changeColumns(int columns); 98 void changeColumns(int columns);
99 99
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index f46a103..82c0f4c 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1312,114 +1312,114 @@ void KOTodoView::itemDoubleClicked(QListViewItem *item)
1312 } else { 1312 } else {
1313 if ( row == 1 ) { 1313 if ( row == 1 ) {
1314 mActiveItem = (KOTodoViewItem *) item; 1314 mActiveItem = (KOTodoViewItem *) item;
1315 newSubTodo(); 1315 newSubTodo();
1316 return; 1316 return;
1317 } 1317 }
1318 if ( row == 5 || row == 6 || row == 2) { 1318 if ( row == 5 || row == 6 || row == 2) {
1319 mActiveItem = (KOTodoViewItem *) item; 1319 mActiveItem = (KOTodoViewItem *) item;
1320 Todo * t = mActiveItem->todo(); 1320 Todo * t = mActiveItem->todo();
1321 if ( t->isRunning() ) { 1321 if ( t->isRunning() ) {
1322 if ( t->runTime() < 15) { 1322 if ( t->runTime() < 15) {
1323 t->stopRunning(); 1323 t->stopRunning();
1324 mActiveItem->construct(); 1324 mActiveItem->construct();
1325 topLevelWidget()->setCaption(i18n("Todo stopped - no data saved because runtime was < 15 sec!")); 1325 topLevelWidget()->setCaption(i18n("Todo stopped - no data saved because runtime was < 15 sec!"));
1326 return; 1326 return;
1327 } 1327 }
1328 else 1328 else
1329 toggleRunningItem(); 1329 toggleRunningItem();
1330 return; 1330 return;
1331 } else { 1331 } else {
1332 t->setRunning( true ); 1332 t->setRunning( true );
1333 mActiveItem->construct(); 1333 mActiveItem->construct();
1334 topLevelWidget()->setCaption(i18n("Todo started! Double click again to stop!")); 1334 topLevelWidget()->setCaption(i18n("Todo started! Double click again to stop!"));
1335 return; 1335 return;
1336 } 1336 }
1337 } 1337 }
1338 } 1338 }
1339 if ( KOPrefs::instance()->mEditOnDoubleClick ) 1339 if ( KOPrefs::instance()->mEditOnDoubleClick )
1340 editItem( item ); 1340 editItem( item );
1341 else 1341 else
1342 showItem( item , QPoint(), 0 ); 1342 showItem( item , QPoint(), 0 );
1343} 1343}
1344void KOTodoView::toggleRunningItem() 1344void KOTodoView::toggleRunningItem()
1345{ 1345{
1346 // qDebug("KOTodoView::toggleRunning() "); 1346 // qDebug("KOTodoView::toggleRunning() ");
1347 if ( ! mActiveItem ) 1347 if ( ! mActiveItem )
1348 return; 1348 return;
1349 Todo * t = mActiveItem->todo(); 1349 Todo * t = mActiveItem->todo();
1350 if ( t->isRunning() ) { 1350 if ( t->isRunning() ) {
1351 KOStopTodoPrefs tp ( t, this ); 1351 KOStopTodoPrefs tp ( t, this );
1352 if (QApplication::desktop()->width() <= 800 ){ 1352 if (QApplication::desktop()->width() <= 800 ){
1353 int wid = tp.width(); 1353 int wid = tp.width();
1354 int hei = tp.height(); 1354 int hei = tp.height();
1355 int xx = (QApplication::desktop()->width()-wid)/2; 1355 int xx = (QApplication::desktop()->width()-wid)/2;
1356 int yy = (QApplication::desktop()->height()-hei)/2; 1356 int yy = (QApplication::desktop()->height()-hei)/2;
1357 tp.setGeometry( xx,yy,wid,hei ); 1357 tp.setGeometry( xx,yy,wid,hei );
1358 } 1358 }
1359 tp.exec(); 1359 tp.exec();
1360 mActiveItem->construct(); 1360 updateTodo ( t, 0 );
1361 } else { 1361 } else {
1362 KOStartTodoPrefs tp ( t->summary(), this ); 1362 KOStartTodoPrefs tp ( t->summary(), this );
1363 if (QApplication::desktop()->width() <= 800 ){ 1363 if (QApplication::desktop()->width() <= 800 ){
1364 int wid = tp.width(); 1364 int wid = tp.width();
1365 int hei = tp.height(); 1365 int hei = tp.height();
1366 int xx = (QApplication::desktop()->width()-wid)/2; 1366 int xx = (QApplication::desktop()->width()-wid)/2;
1367 int yy = (QApplication::desktop()->height()-hei)/2; 1367 int yy = (QApplication::desktop()->height()-hei)/2;
1368 tp.setGeometry( xx,yy,wid,hei ); 1368 tp.setGeometry( xx,yy,wid,hei );
1369 } 1369 }
1370 if ( !tp.exec() ) return; 1370 if ( !tp.exec() ) return;
1371 if ( tp.stopAll() ) { 1371 if ( tp.stopAll() ) {
1372 mCalendar->stopAllTodos(); 1372 mCalendar->stopAllTodos();
1373 t->setRunning( true ); 1373 t->setRunning( true );
1374 updateView(); 1374 updateView();
1375 } else { 1375 } else {
1376 t->setRunning( true ); 1376 t->setRunning( true );
1377 mActiveItem->construct(); 1377 updateTodo ( t, 0 );
1378 } 1378 }
1379 } 1379 }
1380} 1380}
1381 1381
1382void KOTodoView::itemClicked(QListViewItem *item) 1382void KOTodoView::itemClicked(QListViewItem *item)
1383{ 1383{
1384 //qDebug("KOTodoView::itemClicked %d", item); 1384 //qDebug("KOTodoView::itemClicked %d", item);
1385 if (!item) { 1385 if (!item) {
1386 if ( pendingSubtodo != 0 ) { 1386 if ( pendingSubtodo != 0 ) {
1387 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1387 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1388 } 1388 }
1389 pendingSubtodo = 0; 1389 pendingSubtodo = 0;
1390 return; 1390 return;
1391 } 1391 }
1392 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1392 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1393 if ( pendingSubtodo != 0 ) { 1393 if ( pendingSubtodo != 0 ) {
1394 bool allowReparent = true; 1394 bool allowReparent = true;
1395 QListViewItem *par = item; 1395 QListViewItem *par = item;
1396 while ( par ) { 1396 while ( par ) {
1397 if ( par == pendingSubtodo ) { 1397 if ( par == pendingSubtodo ) {
1398 allowReparent = false; 1398 allowReparent = false;
1399 break; 1399 break;
1400 } 1400 }
1401 par = par->parent(); 1401 par = par->parent();
1402 } 1402 }
1403 if ( !allowReparent ) { 1403 if ( !allowReparent ) {
1404 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 1404 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
1405 pendingSubtodo = 0; 1405 pendingSubtodo = 0;
1406 } else { 1406 } else {
1407 Todo* newParent = todoItem->todo(); 1407 Todo* newParent = todoItem->todo();
1408 Todo* newSub = pendingSubtodo->todo(); 1408 Todo* newSub = pendingSubtodo->todo();
1409 pendingSubtodo = 0; 1409 pendingSubtodo = 0;
1410 emit reparentTodoSignal( newParent,newSub ); 1410 emit reparentTodoSignal( newParent,newSub );
1411 return; 1411 return;
1412 } 1412 }
1413 } 1413 }
1414 1414
1415} 1415}
1416 1416
1417void KOTodoView::setDocumentId( const QString &id ) 1417void KOTodoView::setDocumentId( const QString &id )
1418{ 1418{
1419 1419
1420 mDocPrefs->setDoc( id ); 1420 mDocPrefs->setDoc( id );
1421} 1421}
1422 1422
1423void KOTodoView::itemStateChanged( QListViewItem *item ) 1423void KOTodoView::itemStateChanged( QListViewItem *item )
1424{ 1424{
1425 if (!item) return; 1425 if (!item) return;
diff --git a/version b/version
index b29da4e..0e55faa 100644
--- a/version
+++ b/version
@@ -1 +1 @@
version = "2.1.18"; version = "2.1.19";