00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
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
00043
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
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
00073
00074 DatebookdayAllday::~DatebookdayAllday()
00075 {
00076
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("<"),"<");
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("<"),"<");
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
00144
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
00161
00162
00163
00164
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
00178
00179 QDateTime start( m_Ev.event().start() );
00180 QDateTime end ( m_Ev.event().end () );
00181
00182
00183
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
00194
00195
00196
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 }