summaryrefslogtreecommitdiffabout
path: root/korganizer/timespanview.cpp
blob: 0908056b9ae3b676f047f55ddcae05108a226e25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

#ifndef DESKTOP_VERSION
#include <qksplitter.h>
#else
#include <qsplitter.h>
#endif
#include <q3listview.h>
#include <qlayout.h>
#include <q3header.h>
#include <qpushbutton.h>
//Added by qt3to4:
#include <Q3HBoxLayout>
#include <Q3VBoxLayout>
#include <Q3ValueList>

#include <klocale.h>
#include <kdebug.h>

#include "lineview.h"
#include "timeline.h"

#include "timespanview.h"


TimeSpanView::TimeSpanView( QWidget *parent, const char *name ) :
  QWidget( parent, name )
{
  Q3BoxLayout *topLayout = new Q3VBoxLayout( this );
#ifndef DESKTOP_VERSION
  mSplitter = new QKSplitter( this );
#else
  mSplitter = new QSplitter( this );
#endif
  topLayout->addWidget( mSplitter );

  mList = new Q3ListView( mSplitter );
  mList->addColumn( i18n("Summary") );
  
  QWidget *rightPane = new QWidget( mSplitter );
  Q3BoxLayout *rightPaneLayout = new Q3VBoxLayout( rightPane );

  mTimeLine = new TimeLine( rightPane );
  mTimeLine->setFixedHeight( mList->header()->height() );
  rightPaneLayout->addWidget( mTimeLine );
  
  mLineView = new LineView( rightPane );
  rightPaneLayout->addWidget( mLineView );

  Q3BoxLayout *buttonLayout = new Q3HBoxLayout( rightPaneLayout );
  
  QPushButton *zoomInButton = new QPushButton( i18n("Zoom In"), rightPane );
  connect( zoomInButton, SIGNAL( clicked() ), SLOT( zoomIn() ) );
  buttonLayout->addWidget( zoomInButton );
  
  QPushButton *zoomOutButton = new QPushButton( i18n("Zoom Out"), rightPane );
  connect( zoomOutButton, SIGNAL( clicked() ), SLOT( zoomOut() ) );
  buttonLayout->addWidget( zoomOutButton );
  
  QPushButton *centerButton = new QPushButton( i18n("Center View"), rightPane );
  connect( centerButton, SIGNAL( clicked() ), SLOT( centerView() ) );
  buttonLayout->addWidget( centerButton );

  connect(mLineView->horizontalScrollBar(),SIGNAL(valueChanged(int)),
          mTimeLine,SLOT(setContentsPos(int)));
}

TimeSpanView::~TimeSpanView()
{
}

Q3ValueList<int> TimeSpanView::splitterSizes()
{
  return mSplitter->sizes();
}

void TimeSpanView::setSplitterSizes( Q3ValueList<int> sizes )
{
  mSplitter->setSizes( sizes );
}

void TimeSpanView::addItem( KCal::Event *event )
{
  new Q3ListViewItem( mList, event->summary() );
  
  QDateTime startDt = event->dtStart();
  QDateTime endDt = event->dtEnd();

//  kdDebug() << "TimeSpanView::addItem(): start: " << startDt.toString()
//            << "  end: " << endDt.toString() << endl;

  int startSecs = mStartDate.secsTo( startDt );
  int durationSecs = startDt.secsTo( endDt );
  
//  kdDebug() << "--- startSecs: " << startSecs << "  dur: " << durationSecs << endl;

  int startX = mStartDate.secsTo( startDt ) / mSecsPerPixel;
  int endX = startX + startDt.secsTo( endDt ) / mSecsPerPixel;
  
//  kdDebug() << "TimeSpanView::addItem(): s: " << startX << "  e: " << endX << endl;
  
  mLineView->addLine( startX, endX );
}

void TimeSpanView::clear()
{
  mList->clear();
  mLineView->clear();
}

void TimeSpanView::updateView()
{
#if QT_VERSION >= 0x030000
  mLineView->updateContents();
  mTimeLine->updateContents();
#else
#endif
}

void TimeSpanView::setDateRange( const QDateTime &start, const QDateTime &end )
{
  mStartDate = start;
  mEndDate = end;
  
  mTimeLine->setDateRange( start, end );

  mSecsPerPixel = mStartDate.secsTo( mEndDate ) / mLineView->pixelWidth();
}

QDateTime TimeSpanView::startDateTime()
{
  return mStartDate;
}

QDateTime TimeSpanView::endDateTime()
{
  return mEndDate;
}

void TimeSpanView::zoomIn()
{
  int span = mStartDate.daysTo( mEndDate );
  setDateRange( mStartDate.addDays( span / 4 ), mEndDate.addDays( span / -4 ) );

  emit dateRangeChanged();
}

void TimeSpanView::zoomOut()
{
  int span = mStartDate.daysTo( mEndDate );
  setDateRange( mStartDate.addDays( span / -4 ), mEndDate.addDays( span / 4 ) );

  emit dateRangeChanged();
}

void TimeSpanView::centerView()
{
  QScrollBar *scrollBar = mLineView->horizontalScrollBar();
  int min = scrollBar->minValue();
  int max = scrollBar->maxValue();
  scrollBar->setValue( min + (max-min) / 2 );
}