summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp5
-rw-r--r--core/pim/datebook/datebook.h4
-rw-r--r--core/pim/datebook/datebook.pro2
-rw-r--r--core/pim/datebook/modules/monthview/odatebookmonth.cpp392
-rw-r--r--core/pim/datebook/modules/monthview/odatebookmonth.h132
5 files changed, 531 insertions, 4 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index 0579279..cc7bf4b 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -27,6 +27,7 @@
#include "datebooksettings.h"
#include "datebookweek.h"
#include "modules/weeklst/datebookweeklst.h"
+#include "modules/monthview/odatebookmonth.h"
#include "dateentryimpl.h"
#include <opie2/odebug.h>
@@ -35,7 +36,7 @@
#include <opie2/opluginloader.h>
#include <opie2/todayplugininterface.h>
-#include <qpe/datebookmonth.h>
+//#include <qpe/datebookmonth.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/finddialog.h>
@@ -589,7 +590,7 @@ void DateBook::initWeekLst() {
void DateBook::initMonth()
{
if ( !monthView ) {
- monthView = new DateBookMonth( views, "month view", FALSE, db );
+ monthView = new ODateBookMonth( views, "month view", FALSE, db );
views->addWidget( monthView, MONTH );
connect( monthView, SIGNAL( dateClicked(int,int,int) ), this, SLOT( showDay(int,int,int) ) );
connect( this, SIGNAL( newEvent() ), monthView, SLOT( redraw() ) );
diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h
index fb8b083..05ab781 100644
--- a/core/pim/datebook/datebook.h
+++ b/core/pim/datebook/datebook.h
@@ -31,7 +31,7 @@ class QWidgetStack;
class DateBookDay;
class DateBookWeek;
class DateBookWeekLst;
-class DateBookMonth;
+class ODateBookMonth;
class Event;
class QDate;
class Ir;
@@ -108,7 +108,7 @@ private:
QWidgetStack *views;
DateBookDay *dayView;
DateBookWeek *weekView;
- DateBookMonth *monthView;
+ ODateBookMonth *monthView;
DateBookWeekLst *weekLstView;
QAction *dayAction, *weekAction, *weekLstAction, *monthAction;
int weeklistviewconfig;
diff --git a/core/pim/datebook/datebook.pro b/core/pim/datebook/datebook.pro
index 26f4d8d..7813673 100644
--- a/core/pim/datebook/datebook.pro
+++ b/core/pim/datebook/datebook.pro
@@ -11,6 +11,7 @@ HEADERS = datebookday.h \
modules/weeklst/datebookweeklstevent.h \
modules/weeklst/datebookweeklstview.h \
modules/weeklst/datebookweeklstdblview.h \
+ modules/monthview/odatebookmonth.h \
datebookweekheaderimpl.h \
repeatentry.h \
noteentryimpl.h \
@@ -31,6 +32,7 @@ SOURCES = main.cpp \
modules/weeklst/datebookweeklstevent.cpp \
modules/weeklst/datebookweeklstview.cpp \
modules/weeklst/datebookweeklstdblview.cpp \
+ modules/monthview/odatebookmonth.cpp \
datebookweekheaderimpl.cpp \
repeatentry.cpp \
noteentryimpl.cpp \
diff --git a/core/pim/datebook/modules/monthview/odatebookmonth.cpp b/core/pim/datebook/modules/monthview/odatebookmonth.cpp
new file mode 100644
index 0000000..5e2f1bb
--- a/dev/null
+++ b/core/pim/datebook/modules/monthview/odatebookmonth.cpp
@@ -0,0 +1,392 @@
+/* this is a straight copy of datemonthview. We can not make child of
+ * it 'cause the origin view isn't virtual in any form.
+ */
+/**********************************************************************
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+**
+** This file is part of the Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "odatebookmonth.h"
+#include "datebooktypes.h"
+
+#include <qpe/config.h>
+#include <qpe/datebookmonth.h>
+
+#include <qpe/resource.h>
+#include <qpe/qpeapplication.h>
+
+#include <qtoolbutton.h>
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qvaluestack.h>
+#include <qwhatsthis.h>
+
+
+//---------------------------------------------------------------------------
+
+class ODateBookMonthTablePrivate
+{
+public:
+ ODateBookMonthTablePrivate() {};
+ ~ODateBookMonthTablePrivate() { mMonthEvents.clear(); };
+
+ QValueList<EffectiveEvent> mMonthEvents;
+ bool onMonday;
+};
+
+ODateBookMonthTable::ODateBookMonthTable( QWidget *parent, const char *name,
+ DateBookDBHoliday *newDb )
+ : QTable( 6, 7, parent, name ),
+ db( newDb )
+{
+ d = new ODateBookMonthTablePrivate();
+ selYear = -1;
+ selMonth = -1;
+ selDay = -1;
+
+ /* init these as well make valgrind happy and be consistent with Qtopia1.6 -zecke */
+ year = -1;
+ month = -1;
+ day = -1;
+
+ Config cfg( "qpe" );
+ cfg.setGroup( "Time" );
+ d->onMonday = cfg.readBoolEntry( "MONDAY" );
+
+ horizontalHeader()->setResizeEnabled( FALSE );
+ // we have to do this here... or suffer the consequences later...
+ for ( int i = 0; i < 7; i++ ){
+ horizontalHeader()->resizeSection( i, 30 );
+ setColumnStretchable( i, TRUE );
+ }
+ setupLabels();
+
+ verticalHeader()->hide();
+ setLeftMargin( 0 );
+ for ( int i = 0; i < 6; ++i )
+ setRowStretchable( i, TRUE );
+
+ setSelectionMode( NoSelection );
+
+ connect( this, SIGNAL( clicked(int,int,int,const QPoint&) ),
+ this, SLOT( dayClicked(int,int) ) );
+ connect( this, SIGNAL( currentChanged(int,int) ),
+ this, SLOT( dragDay(int,int) ) );
+ setVScrollBarMode( AlwaysOff );
+ setHScrollBarMode( AlwaysOff );
+}
+
+ODateBookMonthTable::~ODateBookMonthTable()
+{
+ monthsEvents.clear();
+ delete d;
+}
+
+void ODateBookMonthTable::setDate(int y, int m, int d)
+{
+ if (month == m && year == y) {
+ if ( selYear == -1 )
+ year = selYear;
+ if ( selMonth == -1 )
+ month = selMonth;
+ int r1, c1, r2, c2;
+ findDay(selDay, r1, c1);
+ selDay = day = d;
+ findDay(selDay, r2, c2);
+ setCurrentCell( r2, c2 );
+ //updateCell(r1,c1);
+ //updateCell(r2,c2);
+ } else {
+ selYear = year = y;
+ selMonth = month = m;
+ selDay = day = d;
+ setupTable();
+ }
+}
+
+void ODateBookMonthTable::redraw()
+{
+ setupLabels();
+ setupTable();
+}
+
+void ODateBookMonthTable::setWeekStart( bool onMonday )
+{
+ d->onMonday = onMonday;
+ setupLabels();
+ setupTable();
+}
+
+void ODateBookMonthTable::setupTable()
+{
+ QValueList<Calendar::Day> days = Calendar::daysOfMonth( year, month, d->onMonday );
+ QValueList<Calendar::Day>::Iterator it = days.begin();
+ int row = 0, col = 0;
+ int crow = 0;
+ int ccol = 0;
+ for ( ; it != days.end(); ++it ) {
+ DayItemMonth *i = (DayItemMonth *)item( row, col );
+ if ( !i ) {
+ i = new DayItemMonth( this, QTableItem::Never, "" );
+ setItem( row, col, i );
+ }
+ Calendar::Day calDay = *it;
+ i->clearEffEvents();
+ i->setDay( calDay.date );
+ i->setType( calDay.type );
+ if ( i->day() == day && calDay.type == Calendar::Day::ThisMonth ) {
+ crow = row;
+ ccol = col;
+ }
+
+ updateCell( row, col );
+
+ if ( col == 6 ) {
+ ++row;
+ col = 0;
+ } else {
+ ++col;
+ }
+ }
+ setCurrentCell( crow, ccol );
+ getEvents();
+}
+
+void ODateBookMonthTable::findDay( int day, int &row, int &col )
+{
+ QDate dtBegin( year, month, 1 );
+ int skips = dtBegin.dayOfWeek();
+ int effective_day = day + skips - 1; // row/columns begin at 0
+ // make an extra adjustment if we start on Mondays.
+ if ( d->onMonday )
+ effective_day--;
+ row = effective_day / 7;
+ col = effective_day % 7;
+}
+
+void ODateBookMonthTable::dayClicked( int row, int col )
+{
+ changeDaySelection( row, col );
+ emit dateClicked( selYear, selMonth, selDay );
+}
+
+void ODateBookMonthTable::dragDay( int row, int col )
+{
+ changeDaySelection( row, col );
+}
+
+void ODateBookMonthTable::changeDaySelection( int row, int col )
+{
+ DayItemMonth *i = (DayItemMonth*)item( row, col );
+ if ( !i )
+ return;
+ switch ( i->type() ) {
+ case Calendar::Day::ThisMonth:
+ selMonth = month;
+ break;
+ case Calendar::Day::PrevMonth:
+ selMonth = month-1;
+ break;
+ default:
+ selMonth = month+1;
+ }
+
+ selYear = year;
+ if ( selMonth <= 0 ) {
+ selMonth = 12;
+ selYear--;
+ } else if ( selMonth > 12 ) {
+ selMonth = 1;
+ selYear++;
+ }
+ selDay = i->day();
+}
+
+
+void ODateBookMonthTable::viewportMouseReleaseEvent( QMouseEvent * )
+{
+ dayClicked( currentRow(), currentColumn() );
+}
+
+void ODateBookMonthTable::getEvents()
+{
+ if ( !db )
+ return;
+
+ QDate dtStart( year, month, 1 );
+ d->mMonthEvents = db->getEffectiveEvents( dtStart,
+ QDate( year, month,
+ dtStart.daysInMonth() ) );
+ QValueListIterator<EffectiveEvent> it = d->mMonthEvents.begin();
+ // now that the events are sorted, basically go through the list, make
+ // a small list for every day and set it for each item...
+ // clear all the items...
+ while ( it != d->mMonthEvents.end() ) {
+ QValueList<EffectiveEvent> dayEvent;
+ EffectiveEvent e = *it;
+ ++it;
+ dayEvent.append( e );
+ while ( it != d->mMonthEvents.end()
+ && e.date() == (*it).date() ) {
+ dayEvent.append( *it );
+ ++it;
+ }
+ int row, col;
+ findDay( e.date().day(), row, col );
+ DayItemMonth* w = static_cast<DayItemMonth*>( item( row, col ) );
+ w->setEvents( dayEvent );
+ updateCell( row, col );
+ dayEvent.clear();
+ }
+}
+
+
+void ODateBookMonthTable::setupLabels()
+{
+ for ( int i = 0; i < 7; ++i ) {
+// horizontalHeader()->resizeSection( i, 30 );
+// setColumnStretchable( i, TRUE );
+ if ( d->onMonday )
+ horizontalHeader()->setLabel( i, Calendar::nameOfDay( i + 1 ) );
+ else {
+ if ( i == 0 )
+ horizontalHeader()->setLabel( i, Calendar::nameOfDay( 7 ) );
+ else
+ horizontalHeader()->setLabel( i, Calendar::nameOfDay( i ) );
+ }
+ }
+}
+
+
+//---------------------------------------------------------------------------
+
+ODateBookMonth::ODateBookMonth( QWidget *parent, const char *name, bool ac,
+ DateBookDBHoliday *data )
+ : QVBox( parent, name ),
+ autoClose( ac )
+{
+ setFocusPolicy(StrongFocus);
+ year = QDate::currentDate().year();
+ month = QDate::currentDate().month();
+ day = QDate::currentDate().day();
+ header = new DateBookMonthHeader( this, "DateBookMonthHeader" );
+ table = new ODateBookMonthTable( this, "DateBookMonthTable", data );
+ header->setDate( year, month );
+ table->setDate( year, month, QDate::currentDate().day() );
+ header->setFocusPolicy(NoFocus);
+ table->setFocusPolicy(NoFocus);
+ connect( header, SIGNAL( dateChanged(int,int) ),
+ this, SLOT( setDate(int,int) ) );
+ connect( table, SIGNAL( dateClicked(int,int,int) ),
+ this, SLOT( finalDate(int,int,int) ) );
+ connect( qApp, SIGNAL(weekChanged(bool)), this,
+ SLOT(slotWeekChange(bool)) );
+ table->setFocus();
+}
+
+ODateBookMonth::~ODateBookMonth()
+{
+
+}
+
+void ODateBookMonth::setDate( int y, int m )
+{
+ /* only change the date if this is a different date,
+ * other wise we may mistakenly overide the day */
+ if ( (y != year) || (m != month) ) {
+ year = y;
+ month = m;
+ QDate nd( y, m, 1 );
+ if ( nd.daysInMonth() < day )
+ day = nd.daysInMonth();
+ table->setDate( year, month, day );
+ }
+}
+
+void ODateBookMonth::setDate( int y, int m, int d )
+{
+ header->setDate( y, m);
+ table->setDate( y, m, d);
+ year = y;
+ month = m;
+ day = d;
+}
+
+/* called when we wish to close or pass back the date */
+void ODateBookMonth::finalDate(int y, int m, int d)
+{
+ setDate( y, m, d );
+
+ emit dateClicked(y, m, d);
+ // emit dateClicked(QDate(y, m, d).toString());
+
+ if ( autoClose && parentWidget() )
+ parentWidget()->close();
+}
+
+void ODateBookMonth::setDate( QDate d)
+{
+ setDate(d.year(), d.month(), d.day());
+}
+
+void ODateBookMonth::redraw()
+{
+ table->setDate( year, month, day );
+ table->redraw();
+}
+
+QDate ODateBookMonth::selectedDate() const
+{
+ if ( !table )
+ return QDate::currentDate();
+ int y, m, d;
+ table->getDate( y, m, d );
+ return QDate( y, m, d );
+}
+
+void ODateBookMonth::slotWeekChange( bool startOnMonday )
+{
+ table->setWeekStart( startOnMonday );
+}
+
+void ODateBookMonth::keyPressEvent( QKeyEvent *e )
+{
+ switch(e->key()) {
+ case Key_Up:
+ setDate(QDate(year, month, day).addDays(-7));
+ break;
+ case Key_Down:
+ setDate(QDate(year, month, day).addDays(7));
+ break;
+ case Key_Left:
+ setDate(QDate(year, month, day).addDays(-1));
+ break;
+ case Key_Right:
+ setDate(QDate(year, month, day).addDays(1));
+ break;
+ case Key_Space:
+ qWarning("space");
+ emit dateClicked(year, month, day);
+ if ( autoClose && parentWidget() )
+ parentWidget()->close();
+ break;
+ default:
+ qWarning("ignore");
+ e->ignore();
+ break;
+ }
+}
diff --git a/core/pim/datebook/modules/monthview/odatebookmonth.h b/core/pim/datebook/modules/monthview/odatebookmonth.h
new file mode 100644
index 0000000..e967abe
--- a/dev/null
+++ b/core/pim/datebook/modules/monthview/odatebookmonth.h
@@ -0,0 +1,132 @@
+/* this is a straight copy of datemonthview. We can not make child of
+ * it 'cause the origin view isn't virtual in any form.
+ */
+/**********************************************************************
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+**
+** This file is part of the Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef ODATEBOOKMONTH
+#define ODATEBOOKMONTH
+
+#include <qtopia/private/event.h>
+#include <qpe/datebookmonth.h>
+
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+#include <qtable.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+
+#include <qpe/calendar.h>
+#include <qpe/timestring.h>
+
+class QToolButton;
+class QComboBox;
+class QSpinBox;
+class Event;
+class DateBookDB;
+class DateBookDBHoliday;
+
+class ODateBookMonthTablePrivate;
+class ODateBookMonthTable : public QTable
+{
+ Q_OBJECT
+
+public:
+ ODateBookMonthTable( QWidget *parent = 0, const char *name = 0,
+ DateBookDBHoliday *newDb = 0 );
+ virtual ~ODateBookMonthTable();
+ void setDate( int y, int m, int d );
+ void redraw();
+
+ QSize minimumSizeHint() const { return sizeHint(); }
+ QSize minimumSize() const { return sizeHint(); }
+ void getDate( int& y, int &m, int &d ) const {y=selYear;m=selMonth;d=selDay;}
+ void setWeekStart( bool onMonday );
+signals:
+ void dateClicked( int year, int month, int day );
+
+protected:
+ virtual void viewportMouseReleaseEvent( QMouseEvent * );
+
+protected slots:
+
+ virtual void keyPressEvent(QKeyEvent *e ) {
+ e->ignore();
+ }
+
+private slots:
+ void dayClicked( int row, int col );
+ void dragDay( int row, int col );
+
+private:
+ void setupTable();
+ void setupLabels();
+
+ void findDay( int day, int &row, int &col );
+ void getEvents();
+ void changeDaySelection( int row, int col );
+
+ int year, month, day;
+ int selYear, selMonth, selDay;
+ QValueList<Event> monthsEvents; // not used anymore...
+ DateBookDBHoliday *db;
+ ODateBookMonthTablePrivate *d;
+};
+
+class ODateBookMonthPrivate;
+class ODateBookMonth : public QVBox
+{
+ Q_OBJECT
+
+public:
+ /* ac = Auto Close */
+ ODateBookMonth( QWidget *parent = 0, const char *name = 0, bool ac = FALSE,
+ DateBookDBHoliday *data = 0 );
+ virtual ~ODateBookMonth();
+ QDate selectedDate() const;
+
+signals:
+ /* ### FIXME add a signal with QDate -zecke */
+ void dateClicked( int year, int month, int day );
+
+public slots:
+ void setDate( int y, int m );
+ void setDate( int y, int m, int d );
+ void setDate( QDate );
+ void redraw();
+ void slotWeekChange( bool );
+
+protected slots:
+ virtual void keyPressEvent(QKeyEvent *e);
+
+private slots:
+ void forwardDateClicked( int y, int m, int d ) { emit dateClicked( y, m, d ); }
+ void finalDate(int, int, int);
+
+private:
+ DateBookMonthHeader *header;
+ ODateBookMonthTable *table;
+ int year, month, day;
+ bool autoClose;
+ class ODateBookMonthPrivate *d;
+};
+
+#endif