Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

datebookdayallday.cpp

Go to the documentation of this file.
00001 /*
00002                              This file is part of the Opie Project
00003 
00004                              Copyright (C) Rajko Albrecht <>
00005                              Copyright (C) Opie Team <opie-devel@handhelds.org>
00006               =.
00007             .=l.
00008            .>+-=
00009  _;:,     .>    :=|.         This program is free software; you can
00010 .> <`_,   >  .   <=          redistribute it and/or  modify it under
00011 :`=1 )Y*s>-.--   :           the terms of the GNU Library General Public
00012 .="- .-=="i,     .._         License as published by the Free Software
00013  - .   .-<_>     .<>         Foundation; either version 2 of the License,
00014      ._= =}       :          or (at your option) any later version.
00015     .%`+i>       _;_.
00016     .i_,=:_.      -<s.       This program is distributed in the hope that
00017      +  .  -:.       =       it will be useful,  but WITHOUT ANY WARRANTY;
00018     : ..    .:,     . . .    without even the implied warranty of
00019     =_        +     =;=|`    MERCHANTABILITY or FITNESS FOR A
00020   _.=:.       :    :=>`:     PARTICULAR PURPOSE. See the GNU
00021 ..}^=.=       =       ;      Library General Public License for more
00022 ++=   -.     .`     .:       details.
00023 :     =  ...= . :.=-
00024  -.   .:....=;==+<;          You should have received a copy of the GNU
00025   -_. . .   )=.  =           Library General Public License along with
00026     --        :-=`           this library; see the file COPYING.LIB.
00027                              If not, write to the Free Software Foundation,
00028                              Inc., 59 Temple Place - Suite 330,
00029                              Boston, MA 02111-1307, USA.
00030 */
00031 
00032 #include "datebookdayallday.h"
00033 
00034 #include <qlayout.h>
00035 #include <qpe/ir.h>
00036 #include <qpopupmenu.h>
00037 #include <qtimer.h>
00038 
00039 #include "datebookday.h"
00040 
00041 /*
00042  *  Constructs a DatebookdayAllday which is a child of 'parent', with the
00043  *  name 'name' and widget flags set to 'f'
00044  */
00045 DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent,  const char* name, WFlags  )
00046     : QScrollView( parent, name ),item_count(0),dateBook(db)
00047 {
00048     if ( !name )
00049         setName( "DatebookdayAllday" );
00050     setMinimumSize( QSize( 0, 0 ) );
00051     setMaximumHeight(3* (QFontMetrics(font()).height()+4) );
00052 
00053     m_MainFrame = new QFrame(viewport());
00054     m_MainFrame->setFrameStyle(QFrame::NoFrame|QFrame::Plain);
00055     setFrameStyle(QFrame::NoFrame|QFrame::Plain);
00056     //setResizePolicy( QScrollView::Default );
00057     setResizePolicy(QScrollView::AutoOneFit);
00058     setHScrollBarMode( AlwaysOff );
00059     addChild(m_MainFrame);
00060 
00061     datebookdayalldayLayout = new QVBoxLayout( m_MainFrame );
00062     datebookdayalldayLayout->setSpacing( 0 );
00063     datebookdayalldayLayout->setMargin( 0 );
00064 
00065     lblDesc = new DatebookEventDesc(parent->parentWidget(),"");
00066     lblDesc->setBackgroundColor(Qt::yellow);
00067     lblDesc->hide();
00068     subWidgets.setAutoDelete(true);
00069 }
00070 
00071 /*
00072  *  Destroys the object and frees any allocated resources
00073  */
00074 DatebookdayAllday::~DatebookdayAllday()
00075 {
00076     // no need to delete child widgets, Qt does it all for us
00077 }
00078 
00079 DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev)
00080 {
00081     DatebookAlldayDisp * lb;
00082     lb = new DatebookAlldayDisp(dateBook,ev,m_MainFrame,NULL);
00083     lb->show();
00084     datebookdayalldayLayout->addWidget(lb);
00085     subWidgets.append(lb);
00086 
00087     connect(lb,SIGNAL(displayMe(const Event&)),lblDesc,SLOT(disp_event(const Event&)));
00088     ++item_count;
00089 
00090     return lb;
00091 }
00092 
00093 DatebookAlldayDisp* DatebookdayAllday::addHoliday(const QString&e)
00094 {
00095     DatebookAlldayDisp * lb;
00096     lb = new DatebookAlldayDisp(e,m_MainFrame,NULL);
00097     lb->show();
00098     datebookdayalldayLayout->addWidget(lb);
00099     subWidgets.append(lb);
00100 
00101     connect(lb,SIGNAL(displayMe(const Event&)),lblDesc,SLOT(disp_event(const Event&)));
00102     ++item_count;
00103 
00104     return lb;
00105 }
00106 
00107 void DatebookdayAllday::removeAllEvents()
00108 {
00109     subWidgets.clear();
00110     item_count = 0;
00111 }
00112 
00113 DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev,
00114                                        QWidget* parent,const char* name,WFlags f)
00115     : QLabel(parent,name,f),m_Ev(ev),dateBook(db)
00116 {
00117     QString strDesc = m_Ev.description();
00118     strDesc = strDesc.replace(QRegExp("<"),"&#60;");
00119     setBackgroundColor(yellow);
00120     setText(strDesc);
00121     setFrameStyle(QFrame::Raised|QFrame::Panel);
00122 
00123     int s = QFontMetrics(font()).height()+4;
00124     setMaximumHeight( s );
00125     setMinimumSize( QSize( 0, s ) );
00126     m_holiday = false;
00127 }
00128 
00129 DatebookAlldayDisp::DatebookAlldayDisp(const QString&aholiday,QWidget* parent,const char* name, WFlags fl)
00130     : QLabel(parent,name,fl),m_Ev(),dateBook(0)
00131 {
00132     QString strDesc = aholiday;
00133     strDesc = strDesc.replace(QRegExp("<"),"&#60;");
00134     Event ev;
00135     ev.setDescription(strDesc);
00136     ev.setAllDay(true);
00137     m_Ev.setEvent(ev);
00138     setText(strDesc);
00139 
00140     setAlignment(AlignHCenter);
00141     setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum));
00142 
00143     //setFrameStyle(QFrame::Raised|QFrame::Panel);
00144     //setBackgroundColor(yellow);
00145 
00146     int s = QFontMetrics(font()).height()+4;
00147     setMaximumHeight( s );
00148     setMinimumSize( QSize( 0, s ) );
00149 
00150     m_holiday = true;
00151 }
00152 
00153 DatebookAlldayDisp::~DatebookAlldayDisp()
00154 {
00155 }
00156 
00157 void DatebookAlldayDisp::beam_single_event()
00158 {
00159     if (m_holiday) return;
00160     // create an Event and beam it...
00161     /*
00162      * Start with the easy stuff. If start and  end date is the same we can just use
00163      * the values of effective m_Events
00164      * If it is a multi day m_Event we need to find the real start and end date...
00165      */
00166     if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) {
00167         Event m_Event( m_Ev.event() );
00168 
00169         QDateTime dt( m_Ev.date(), m_Ev.start() );
00170         m_Event.setStart( dt );
00171 
00172         dt.setTime( m_Ev.end() );
00173         m_Event.setEnd( dt );
00174         emit beamMe( m_Event );
00175     }else {
00176         /*
00177          * at least the the Times are right now
00178          */
00179         QDateTime start( m_Ev.event().start() );
00180         QDateTime end  ( m_Ev.event().end  () );
00181 
00182         /*
00183          * ok we know the start date or we need to find it
00184          */
00185         if ( m_Ev.start() != QTime( 0, 0, 0 ) ) {
00186             start.setDate( m_Ev.date() );
00187         }else {
00188             QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook );
00189             start.setDate( dt );
00190         }
00191 
00192         /*
00193          * ok we know now the end date...
00194          * else
00195          *   get to know the offset btw the real start and real end
00196          *   and then add it to the new start date...
00197          */
00198         if ( m_Ev.end() != QTime(23, 59, 59 ) ) {
00199             end.setDate( m_Ev.date() );
00200         }else{
00201             int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() );
00202             end.setDate( start.date().addDays( days ) );
00203         }
00204         Event m_Event( m_Ev.event() );
00205         m_Event.setStart( start );
00206         m_Event.setEnd  ( end   );
00207         emit beamMe( m_Event );
00208     }
00209 }
00210 
00211 void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e)
00212 {
00213     Event ev = m_Ev.event();
00214     QColor b = backgroundColor();
00215     setBackgroundColor(green);
00216     update();
00217     QPopupMenu m;
00218     if (ev.isValidUid()) {
00219         m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 );
00220         m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 );
00221         m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 );
00222         if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 );
00223         if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 );
00224     }
00225     m.insertItem( tr( "Info"),6);
00226     int r = m.exec( e->globalPos() );
00227     setBackgroundColor(b);
00228     update();
00229     switch (r) {
00230     case 1:
00231         emit editMe( ev );
00232         break;
00233     case 2:
00234         emit deleteMe( ev );
00235         break;
00236     case 3:
00237         emit beamMe( ev );
00238         break;
00239     case 4:
00240         emit duplicateMe( ev );
00241         break;
00242     case 5:
00243         beam_single_event();
00244         break;
00245     case 6:
00246         emit displayMe( ev );
00247         break;
00248     default:
00249         break;
00250     }
00251 }
00252 
00253 DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name)
00254     :QLabel(parent,name)
00255 {
00256    m_Timer=new QTimer(this);
00257    connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide()));
00258    setFrameStyle(QFrame::Sunken|QFrame::Panel);
00259    setTextFormat(RichText);
00260 }
00261 
00262 DatebookEventDesc::~DatebookEventDesc()
00263 {
00264 }
00265 
00266 void DatebookEventDesc::mousePressEvent(QMouseEvent*)
00267 {
00268     hide();
00269     if (m_Timer->isActive()) m_Timer->stop();
00270 }
00271 
00272 void DatebookEventDesc::disp_event(const Event&e)
00273 {
00274     if (m_Timer->isActive()) m_Timer->stop();
00275     QString text;
00276     text = "<b><i>"+e.description()+"</i></b><br>";
00277     if (e.notes().length()>0) {
00278         text+="<b>"+e.notes()+"</b><br>";
00279     }
00280     if (e.location().length()>0) {
00281         text+="<i>"+e.location()+"</i><br>";
00282     }
00283     text = text.replace(QRegExp("\n"),"<br>");
00284     setText(text);
00285     QSize s = sizeHint();
00286     s+=QSize(10,10);
00287     resize(s);
00288     move( QMAX(0,(parentWidget()->width()-width()) / 2),
00289             (parentWidget()->height()-height())/2 );
00290     show();
00291     m_Timer->start(2000,true);
00292 }

Generated on Sat Nov 5 16:15:48 2005 for OPIE by  doxygen 1.4.2