summaryrefslogtreecommitdiff
path: root/core/pim/datebook/datebookdayallday.cpp
Unidiff
Diffstat (limited to 'core/pim/datebook/datebookdayallday.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookdayallday.cpp226
1 files changed, 226 insertions, 0 deletions
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp
new file mode 100644
index 0000000..985f31a
--- a/dev/null
+++ b/core/pim/datebook/datebookdayallday.cpp
@@ -0,0 +1,226 @@
1/****************************************************************************
2** GPL by Rajko Albrecht
3**
4**
5**
6**
7**
8****************************************************************************/
9#include "datebookdayallday.h"
10
11#include <qpushbutton.h>
12#include <qlayout.h>
13#include <qvariant.h>
14#include <qtooltip.h>
15#include <qwhatsthis.h>
16#include <qobjectlist.h>
17#include <qpe/event.h>
18#include <qpe/ir.h>
19#include <qpe/datebookdb.h>
20#include <qpe/resource.h>
21#include <qpopupmenu.h>
22#include <qtimer.h>
23#include <qregexp.h>
24#include <qdatetime.h>
25
26#include "datebookday.h"
27
28/*
29 * Constructs a DatebookdayAllday which is a child of 'parent', with the
30 * name 'name' and widget flags set to 'f'
31 */
32DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags fl )
33 : QWidget( parent, name,fl ),item_count(0),dateBook(db)
34{
35 if ( !name )
36 setName( "DatebookdayAllday" );
37 setMinimumSize( QSize( 0, 0 ) );
38
39 datebookdayalldayLayout = new QVBoxLayout( this );
40 datebookdayalldayLayout->setSpacing( 0 );
41 datebookdayalldayLayout->setMargin( 0 );
42
43 lblDesc = new DatebookEventDesc(parent->parentWidget(),"");
44 lblDesc->setBackgroundColor(Qt::yellow);
45 lblDesc->hide();
46 subWidgets.setAutoDelete(true);
47}
48
49/*
50 * Destroys the object and frees any allocated resources
51 */
52DatebookdayAllday::~DatebookdayAllday()
53{
54 // no need to delete child widgets, Qt does it all for us
55}
56
57DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev)
58{
59 DatebookAlldayDisp * lb;
60 lb = new DatebookAlldayDisp(dateBook,ev,this,NULL);
61 datebookdayalldayLayout->addWidget(lb);
62 subWidgets.append(lb);
63
64 connect(lb,SIGNAL(displayMe(const Event &)),lblDesc,SLOT(disp_event(const Event&)));
65 ++item_count;
66
67 return lb;
68}
69
70void DatebookdayAllday::removeAllEvents()
71{
72 subWidgets.clear();
73 item_count = 0;
74}
75
76DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev,
77 QWidget* parent,const char* name,WFlags f)
78 : QLabel(parent,name,f),m_Ev(ev),dateBook(db)
79{
80 QString strDesc = m_Ev.description();
81 strDesc = strDesc.replace(QRegExp("<"),"&#60;");
82 setBackgroundColor(yellow);
83 setText(strDesc);
84 setFrameStyle(QFrame::Raised|QFrame::Panel);
85 QSize s = sizeHint();
86 setMaximumSize( QSize( 32767, s.height()-4 ) );
87 setMinimumSize( QSize( 0, s.height()-4 ) );
88}
89
90DatebookAlldayDisp::~DatebookAlldayDisp()
91{
92}
93
94void DatebookAlldayDisp::beam_single_event()
95{
96 // create an Event and beam it...
97 /*
98 * Start with the easy stuff. If start and end date is the same we can just use
99 * the values of effective m_Events
100 * If it is a multi day m_Event we need to find the real start and end date...
101 */
102 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) {
103 Event m_Event( m_Ev.event() );
104
105 QDateTime dt( m_Ev.date(), m_Ev.start() );
106 m_Event.setStart( dt );
107
108 dt.setTime( m_Ev.end() );
109 m_Event.setEnd( dt );
110 emit beamMe( m_Event );
111 }else {
112 /*
113 * at least the the Times are right now
114 */
115 QDateTime start( m_Ev.event().start() );
116 QDateTime end ( m_Ev.event().end () );
117
118 /*
119 * ok we know the start date or we need to find it
120 */
121 if ( m_Ev.start() != QTime( 0, 0, 0 ) ) {
122 start.setDate( m_Ev.date() );
123 }else {
124 QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook );
125 start.setDate( dt );
126 }
127
128 /*
129 * ok we know now the end date...
130 * else
131 * get to know the offset btw the real start and real end
132 * and then add it to the new start date...
133 */
134 if ( m_Ev.end() != QTime(23, 59, 59 ) ) {
135 end.setDate( m_Ev.date() );
136 }else{
137 int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() );
138 end.setDate( start.date().addDays( days ) );
139 }
140 Event m_Event( m_Ev.event() );
141 m_Event.setStart( start );
142 m_Event.setEnd ( end );
143 emit beamMe( m_Event );
144 }
145}
146
147void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e)
148{
149 QColor b = backgroundColor();
150 setBackgroundColor(green);
151 update();
152 QPopupMenu m;
153 m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 );
154 m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 );
155 m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 );
156 if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 );
157 if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 );
158 m.insertItem( tr( "Info"),6);
159 int r = m.exec( e->globalPos() );
160 setBackgroundColor(b);
161 update();
162 switch (r) {
163 case 1:
164 emit editMe( m_Ev.event() );
165 break;
166 case 2:
167 emit deleteMe( m_Ev.event() );
168 break;
169 case 3:
170 emit beamMe( m_Ev.event() );
171 break;
172 case 4:
173 emit duplicateMe( m_Ev.event() );
174 break;
175 case 5:
176 beam_single_event();
177 break;
178 case 6:
179 emit displayMe( m_Ev.event() );
180 break;
181 default:
182 break;
183 }
184}
185
186DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name)
187 :QLabel(parent,name)
188{
189 m_Timer=new QTimer(this);
190 connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide()));
191 setFrameStyle(QFrame::Sunken|QFrame::Panel);
192 setTextFormat(RichText);
193}
194
195DatebookEventDesc::~DatebookEventDesc()
196{
197}
198
199void DatebookEventDesc::mousePressEvent(QMouseEvent*)
200{
201 hide();
202 if (m_Timer->isActive()) m_Timer->stop();
203}
204
205void DatebookEventDesc::disp_event(const Event&e)
206{
207 if (m_Timer->isActive()) m_Timer->stop();
208 QString text;
209 text = "<b><i>"+e.description()+"</i></b><br>";
210 if (e.notes().length()>0) {
211 text+="<b>"+e.notes()+"</b><br>";
212 }
213 if (e.location().length()>0) {
214 text+="<i>"+e.location()+"</i><br>";
215 }
216 text = text.replace(QRegExp("\n"),"<br>");
217 setText(text);
218 QSize s = sizeHint();
219 s+=QSize(10,10);
220 resize(s);
221 move( QMAX(0,(parentWidget()->width()-width()) / 2),
222 (parentWidget()->height()-height())/2 );
223 show();
224 m_Timer->start(2000,true);
225}
226