summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-01-30 14:15:42 (UTC)
committer zautrix <zautrix>2005-01-30 14:15:42 (UTC)
commit8d543aa1d1d1ed20001c8b18352d1d29c2979e48 (patch) (side-by-side diff)
tree9ca05f4d3bc1de81bcf0446a2f7471d552089c87
parent1bcef8b3f53419e7155e0862ad61e3e419763d70 (diff)
downloadkdepimpi-8d543aa1d1d1ed20001c8b18352d1d29c2979e48.zip
kdepimpi-8d543aa1d1d1ed20001c8b18352d1d29c2979e48.tar.gz
kdepimpi-8d543aa1d1d1ed20001c8b18352d1d29c2979e48.tar.bz2
many fixes
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt14
-rw-r--r--korganizer/kdatenavigator.cpp4
-rw-r--r--korganizer/koagendaitem.cpp5
-rw-r--r--korganizer/kodaymatrix.cpp100
-rw-r--r--korganizer/kodaymatrix.h5
5 files changed, 91 insertions, 37 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 6c9daad..05aa8fe 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,41 +1,53 @@
Info about the changes in new versions of KDE-Pim/Pi
********** VERSION 2.0.1 ************
Oooops ... I forgot to test on the Zaurus 5500 ...
Fixed many problems of new (english) strings (and german translations)
introduced in the latest versions, where the text was not fitting on the
240x320 display of the Zaurus 5500.
Added a popup menu ( press pen and hold to get popup ) to the agenda view
-with may useful items.
+with many useful items (add event/todo, show next week, two weeks, month, journal).
Added items to the todolist popup menu for:
Display all opened, all closed or all todos flat.
The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
+Made the reparenting of todos on the desktop possible via Drag&Drop.
+Fixed several bugs in setting the completed datetime for todos.
+Added info about completed datetime of todos to the todo viewer.
+Now displaying a completed todo (with completed datetime set) in the agenda view
+at the time of the completion. Such that now it is possible to see in the agenda view
+when what todo was completed.
+Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
+Now the behaviour is:
+Setting a parent to complete sets all (sub)childs to complete.
+Setting a parent to uncomplete does not change the childs.
+Setting a child to uncomplete sets all parent to uncomplete.
+Setting a child to complete does not change the parents.
********** VERSION 2.0.0 ************
Stable release 2.0.0!
KO/Pi:
Fixed problem in edit dialog recreation at startup.
Made "toggle view*" menu items enabled context sensitive.
Changed agenda size menu to items 1-10.
Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
Usebility enhancements in the KO/Pi menus.
Birthday import now adds year to summary.
What's Next view shows age in years for birthday.
OM/Pi:
Added three info lines to display subject, from and to of selected mails.
KA/Pi:
Fixed jump bar behaviour on Zaurus.
Now KA/Pi search field supports searching for a range of starting characters.
E.g. to search for all contact beginning with b to n, type
b-n
in the search field.
diff --git a/korganizer/kdatenavigator.cpp b/korganizer/kdatenavigator.cpp
index b420351..f31e50a 100644
--- a/korganizer/kdatenavigator.cpp
+++ b/korganizer/kdatenavigator.cpp
@@ -204,86 +204,86 @@ void KDateNavigator::updateDates()
QDate dayone( m_MthYr.year(), m_MthYr.month(), m_MthYr.day() );
int d2 = KOGlobals::self()->calendarSystem()->day( dayone );
//int di = d1 - d2 + 1;
dayone = dayone.addDays( -d2 + 1 );
int m_fstDayOfWkCalsys = KOGlobals::self()->calendarSystem()->dayOfWeek( dayone );
// If month begins on Monday and Monday is first day of week,
// month should begin on second line. Sunday doesn't have this problem.
int nextLine = ( ( m_fstDayOfWkCalsys == 1) &&
( KGlobal::locale()->weekStartsMonday() == 1 ) ) ? 7 : 0;
// update the matrix dates
int index = (KGlobal::locale()->weekStartsMonday() ? 1 : 0) - m_fstDayOfWkCalsys - nextLine;
daymatrix->updateView(dayone.addDays(index));
//each updateDates is followed by an updateView -> repaint is issued there !
// daymatrix->repaint();
}
void KDateNavigator::updateDayMatrix()
{
daymatrix->updateView();
- daymatrix->repaint();
+ //daymatrix->repaint();
}
void KDateNavigator::updateView()
{
setUpdatesEnabled( false );
int i;
// kdDebug() << "updateView() -> daymatrix->updateView()" << endl;
daymatrix->updateView();
// set the week numbers.
for(i = 0; i < 6; i++) {
QString weeknum;
// remember, according to ISO 8601, the first week of the year is the
// first week that contains a thursday. Thus we must subtract off 4,
// not just 1.
//ET int dayOfYear = buttons[(i + 1) * 7 - 4]->date().dayOfYear();
int dayOfYear = KOGlobals::self()->calendarSystem()->dayOfYear((daymatrix->getDate((i+1)*7-4)));
int add = 0;
if ( ! KGlobal::locale()->weekStartsMonday() )
++add;
if (dayOfYear % 7 != 0)
weeknum.setNum(dayOfYear / 7 + 1+add);
else
weeknum.setNum(dayOfYear / 7 +add);
weeknos[i]->setText(weeknum);
}
setUpdatesEnabled( true );
// kdDebug() << "updateView() -> repaint()" << endl;
repaint();
- daymatrix->repaint();
+ // daymatrix->repaint();
}
void KDateNavigator::updateConfig()
{
int day;
for(int i=0; i<7; i++) {
// take the first letter of the day name to be the abbreviation
if (KGlobal::locale()->weekStartsMonday()) {
day = i+1;
} else {
if (i==0) day = 7;
else day = i;
}
QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( day,
true );
if ( KOPrefs::instance()->mCompactDialogs ) dayName = dayName.left( 1 );
headings[i]->setText( dayName );
}
updateDates();
updateView();
}
void KDateNavigator::setShowWeekNums(bool enabled)
{
diff --git a/korganizer/koagendaitem.cpp b/korganizer/koagendaitem.cpp
index 39355b4..ee9f39a 100644
--- a/korganizer/koagendaitem.cpp
+++ b/korganizer/koagendaitem.cpp
@@ -448,55 +448,54 @@ void KOAgendaItem::paintEvent ( QPaintEvent *e )
}
int rx, ry, rw, rh;
rx = e->rect().x();
ry = e->rect().y();
rw = e->rect().width();
rh = e->rect().height();
//qDebug(" paintevent %s %d %d %d %d", mIncidence->summary().latin1(), x(), yy, width(), height());
QPixmap* paintFrom ;
if ( mSelected ) {
paintFrom = paintPixSel();
} else {
if ( mAllDay )
paintFrom = paintPixAllday();
else
paintFrom = paintPix();
}
bitBlt (this, rx, ry, paintFrom, x()+rx ,yPaintCoord+ry, rw, rh ,CopyROP);
}
void KOAgendaItem::computeText()
{
mDisplayedText = mIncidence->summary();
if ( (mIncidence->type() == "Todo") ) {
+ if ( static_cast<Todo*>(mIncidence)->hasDueDate() ) {
if ( static_cast<Todo*>(mIncidence)->dtDue().date() < QDate::currentDate() )
mDisplayedText += i18n(" (") +KGlobal::locale()->formatDate((static_cast<Todo*>(mIncidence))->dtDue().date(), true)+")";
else if ( !(mIncidence->doesFloat()))
mDisplayedText += i18n(" (") +KGlobal::locale()->formatTime((static_cast<Todo*>(mIncidence))->dtDue().time())+")";
-
-
-
+ }
} else {
if ( !(mIncidence->doesFloat()) && KOPrefs::instance()->mShowTimeInAgenda)
mDisplayedText += ": " +KGlobal::locale()->formatTime((static_cast<Event*>(mIncidence))->dtStart().time()) + "-" + KGlobal::locale()->formatTime((static_cast<Event*>(mIncidence))->dtEnd().time()) ;
if ( mAllDay ) {
if ( mIncidence->dtStart().date().addDays(3) < mIncidence->dtEnd().date() ) {
mDisplayedText += ": " +KGlobal::locale()->formatDate((static_cast<Event*>(mIncidence))->dtStart().date(), true) + " - " + KGlobal::locale()->formatDate((static_cast<Event*>(mIncidence))->dtEnd().date(), true) ;
}
}
}
if ( !mIncidence->location().isEmpty() ) {
if ( mAllDay )
mDisplayedText += " (";
else
mDisplayedText += "\n(";
mDisplayedText += mIncidence->location() +")";
}
QString tipText = mIncidence->summary();
QWhatsThis::add(this,KIncidenceFormatter::instance()->getFormattedText( mIncidence ));
if ( !mIncidence->doesFloat() ) {
if ( mIncidence->type() == "Event" ) {
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index fc00828..060b4c4 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -87,49 +87,55 @@ const int KODayMatrix::NOSELECTION = -1000;
const int KODayMatrix::NUMDAYS = 42;
KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) :
QFrame(parent, name)
{
mCalendar = calendar;
// initialize dynamic arrays
days = new QDate[NUMDAYS];
daylbls = new QString[NUMDAYS];
events = new int[NUMDAYS];
mToolTip = new DynamicTip(this);
// set default values used for drawing the matrix
mDefaultBackColor = palette().active().base();
mDefaultTextColor = palette().active().foreground();
mDefaultTextColorShaded = getShadedColor(mDefaultTextColor);
mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor);
mSelectedDaysColor = QColor("white");
mTodayMarginWidth = 2;
mSelEnd = mSelStart = NOSELECTION;
setAcceptDrops(true);
//setFont( QFont("Arial", 10) );
- updateView(date);
+
+ mUpdateTimer = new QTimer( this );
+ connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() ));
+ mRepaintTimer = new QTimer( this );
+ connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() ));
+ mDayChanged = false;
+ updateView();
}
QColor KODayMatrix::getShadedColor(QColor color)
{
QColor shaded;
int h=0;
int s=0;
int v=0;
color.hsv(&h,&s,&v);
s = s/4;
v = 192+v/4;
shaded.setHsv(h,s,v);
return shaded;
}
KODayMatrix::~KODayMatrix()
{
delete [] days;
delete [] daylbls;
delete [] events;
delete mToolTip;
}
@@ -181,130 +187,162 @@ void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
}
void KODayMatrix::recalculateToday()
{
today = -1;
for (int i=0; i<NUMDAYS; i++) {
days[i] = startdate.addDays(i);
daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
// if today is in the currently displayed month, hilight today
if (days[i].year() == QDate::currentDate().year() &&
days[i].month() == QDate::currentDate().month() &&
days[i].day() == QDate::currentDate().day()) {
today = i;
}
}
// qDebug(QString("Today is visible at %1.").arg(today));
}
void KODayMatrix::updateView()
{
updateView(startdate);
}
-
-void KODayMatrix::updateView(QDate actdate)
+void KODayMatrix::repaintViewTimed()
{
-
-// kdDebug() << "KODayMatrix::updateView() " << actdate.toString() << endl;
-
- //flag to indicate if the starting day of the matrix has changed by this call
- bool daychanged = false;
- // if a new startdate is to be set then apply Cornelius's calculation
- // of the first day to be shown
- if (actdate != startdate) {
- // reset index of selection according to shift of starting date from startdate to actdate
- if (mSelStart != NOSELECTION) {
- int tmp = actdate.daysTo(startdate);
- //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl;
- // shift selection if new one would be visible at least partly !
-
- if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) {
- // nested if is required for next X display pushed from a different month - correction required
- // otherwise, for month forward and backward, it must be avoided
- if( mSelStart > NUMDAYS || mSelStart < 0 )
- mSelStart = mSelStart + tmp;
- if( mSelEnd > NUMDAYS || mSelEnd < 0 )
- mSelEnd = mSelEnd + tmp;
- }
+ qDebug("KODayMatrix::repaintViewTimed ");
+ mRepaintTimer->stop();
+ repaint(false);
}
+void KODayMatrix::updateViewTimed()
+{
- startdate = actdate;
- daychanged = true;
- }
+ mUpdateTimer->stop();
+ //QDate actdate = mPendingNewDate;
+
+ static int iii = 0;
+ qDebug("KODayMatrix::updateView(QDate actdate) %d", ++iii );
- if (daychanged) {
+ if (mDayChanged) {
recalculateToday();
+ mDayChanged = false;
}
for(int i = 0; i < NUMDAYS; i++) {
// if events are set for the day then remember to draw it bold
QPtrList<Event> eventlist = mCalendar->events(days[i]);
Event *event;
int numEvents = eventlist.count();
for(event=eventlist.first();event != 0;event=eventlist.next()) {
ushort recurType = event->recurrence()->doesRecur();
if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
(recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
numEvents--;
}
}
events[i] = numEvents;
//if it is a holy day then draw it red. Sundays are consider holidays, too
#ifndef KORG_NOPLUGINS
QString holiStr = KOCore::self()->holiday(days[i]);
#else
QString holiStr = QString::null;
#endif
if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
!holiStr.isEmpty()) {
if (holiStr.isNull()) holiStr = "";
mHolidays[i] = holiStr;
} else {
mHolidays[i] = QString::null;
}
}
+ repaint(false);
+ }
+void KODayMatrix::updateView(QDate actdate)
+{
+
+ //flag to indicate if the starting day of the matrix has changed by this call
+ //mDayChanged = false;
+ // if a new startdate is to be set then apply Cornelius's calculation
+ // of the first day to be shown
+ if (actdate != startdate) {
+ // reset index of selection according to shift of starting date from startdate to actdate
+ if (mSelStart != NOSELECTION) {
+ int tmp = actdate.daysTo(startdate);
+ //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl;
+ // shift selection if new one would be visible at least partly !
+
+ if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) {
+ // nested if is required for next X display pushed from a different month - correction required
+ // otherwise, for month forward and backward, it must be avoided
+ if( mSelStart > NUMDAYS || mSelStart < 0 )
+ mSelStart = mSelStart + tmp;
+ if( mSelEnd > NUMDAYS || mSelEnd < 0 )
+ mSelEnd = mSelEnd + tmp;
+ }
+ }
+
+ startdate = actdate;
+ mDayChanged = true;
+ }
+ qDebug("restart Timer %d", mDayChanged );
+ static int iii = 0;
+ if ( iii < 5 ) {
+ ++iii;
+ updateViewTimed();
+ } else {
+ if ( !isVisible() ) {
+ mUpdateTimer->start( 2000 );
+ } else {
+ if ( mDayChanged ) {
+ mUpdateTimer->start( 250 );
+ } else {
+ mRepaintTimer->start( 250 );
+ mUpdateTimer->start( 2000 );
+ }
+ }
+ }
+
}
const QDate& KODayMatrix::getDate(int offset)
{
if (offset < 0 || offset > NUMDAYS-1) {
- kdDebug() << "Wrong offset (" << offset << ") in KODayMatrix::getDate(int)" << endl;
+ qDebug("Wrong offset2 ");
return days[0];
}
return days[offset];
}
QString KODayMatrix::getHolidayLabel(int offset)
{
if (offset < 0 || offset > NUMDAYS-1) {
- kdDebug() << "Wrong offset (" << offset << ") in KODayMatrix::getHolidayLabel(int)" << endl;
+ qDebug("Wrong offset1 ");
return 0;
}
return mHolidays[offset];
}
int KODayMatrix::getDayIndexFrom(int x, int y)
{
return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ?
6 - x/daysize.width() : x/daysize.width());
}
// ----------------------------------------------------------------------------
// M O U S E E V E N T H A N D L I N G
// ----------------------------------------------------------------------------
void KODayMatrix::mousePressEvent (QMouseEvent* e)
{
mSelStart = getDayIndexFrom(e->x(), e->y());
if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
mSelInit = mSelStart;
}
void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
{
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index b4eb2a8..0e9640a 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -151,95 +151,100 @@ public:
* repaint. (?)
*/
void setSelectedDaysFrom(const QDate& start, const QDate& end);
/** Is today visible in the view? Keep this in sync with
* the values today (below) can take.
*/
bool isTodayVisible() const { return today>=0; } ;
/** If today is visible, then we can find out if today is
* near the beginning or the end of the month.
* This is dependent on today remaining the index
* in the array of visible dates and going from
* top left (0) to bottom right (41).
*/
bool isBeginningOfMonth() const { return today<=8; } ;
bool isEndOfMonth() const { return today>=27; } ;
public slots:
/** Recalculates all the flags of the days in the matrix like holidays or events
* on a day (Actually calls above method with the actual startdate).
*/
void updateView();
+ void updateViewTimed();
+ void repaintViewTimed();
/**
* Calculate which square in the matrix should be
* hilighted to indicate it's today.
*/
void recalculateToday();
/*
void setStartDate(QDate);
*/
signals:
/** emitted if the user selects a block of days with the mouse by dragging a rectangle
* inside the matrix
*
* @param daylist list of days that have been selected by the user
*/
void selected( const KCal::DateList &daylist );
/** emitted if the user has dropped an event inside the matrix
*
* @param event the dropped calendar event
*/
void eventDropped(Event *event);
protected:
void paintEvent(QPaintEvent *ev);
void mousePressEvent (QMouseEvent* e);
void mouseReleaseEvent (QMouseEvent* e);
void mouseMoveEvent (QMouseEvent* e);
void dragEnterEvent(QDragEnterEvent *);
void dragMoveEvent(QDragMoveEvent *);
void dragLeaveEvent(QDragLeaveEvent *);
void dropEvent(QDropEvent *);
void resizeEvent(QResizeEvent *);
private:
+ QTimer* mUpdateTimer;
+ QTimer* mRepaintTimer;
+ bool mDayChanged;
/** returns the index of the day located at the matrix's widget (x,y) position.
*
* @param x horizontal coordinate
* @param y vertical coordinate
*/
int getDayIndexFrom(int x, int y);
/** calculates a "shaded" color from the supplied color object.
* (Copied from Cornelius's kdpdatebutton.cpp)
*
* @param color source based on which a shaded color should be calculated.
*/
QColor getShadedColor(QColor color);
/** number of days to be displayed. For now there is no support for any other number then 42.
so change it at your own risk :o) */
static const int NUMDAYS;
/** calendar instance to be queried for holidays, events, ... */
Calendar *mCalendar;
/** starting date of the matrix */
QDate startdate;