00001
00002
00003
00004
00005
00006
00007
00008
00009
#include "xQGanttBarView.h"
00010
#include "KGanttBarConfig.h"
00011
00012
00013
00014 xQGanttBarView::xQGanttBarView(
KGanttItem* toplevelitem,
00015
QWidget* parent,
00016
const char * name, WFlags f)
00017 :
QScrollView(parent,name,f)
00018 {
00019 _config = NULL;
00020
00021 _toplevelitem = toplevelitem;
00022
00023 setFrameStyle(QFrame::Sunken);
00024 setLineWidth(1);
00025
00026 _headerBackBrush =
QBrush(
QColor(250,250,250));
00027
00028 setMargins( 1, TOPMARGIN , 1, 1 );
00029
00030 _viewport =
new xQGanttBarViewPort(toplevelitem,
this );
00031
00032 addChild(_viewport);
00033
00034 _viewport->
setMode(xQGanttBarViewPort::Select);
00035
00036 connect(_viewport, SIGNAL(scroll(
int,
int)),
00037
this, SLOT(scrollBy(
int,
int)) );
00038
00039 connect(_viewport, SIGNAL(recalculated()),
00040
this, SLOT(drawHeader()) );
00041
00042 connect(horizontalScrollBar(), SIGNAL(valueChanged(
int)),
00043
this, SLOT(horizontalScrollBarChanged(
int)) );
00044
00045 }
00046
00047
00048
00049 xQGanttBarView::~xQGanttBarView()
00051 {
00052 }
00053
00054
00055
00056
void
00057 xQGanttBarView::horizontalScrollBarChanged(
int x)
00059 {
00060 printf(
"xQGanttBarView::horizontalScrollBarChanged()\n");
00061 drawHeader();
00062 }
00063
00064
00065
00066
void
00067 xQGanttBarView::drawHeader()
00069 {
00070
static QPen _dotPen(
QColor(35,35,35), 0, DotLine);
00071
static QPen _normalPen(
QColor(0,0,0));
00072
static QPen _redPen(
QColor(254,0,0));
00073
static QPen _greyPen(
QColor(150,150,150));
00074
00075
QPainter p(
this);
00076 p.setPen( _normalPen );
00077
00078 p.fillRect(0,0,width(),TOPMARGIN, _headerBackBrush );
00079
00080
static int top = 1;
00081
static int height = 20;
00082
static int skip = 1;
00083
00084
int a,e,tmp;
00085
bool drawDays =
false;
00086
double dayWidth = (
double) ((_viewport->
screenX(144000) - _viewport->
screenX(0))/100.);
00087
00088
int wx = _viewport->
worldX(contentsX());
00089
00090
QDate startDate = _toplevelitem->
getStart().addSecs( wx * 60 ).date();
00091
00092 wx = _viewport->
worldX(contentsX()+width());
00093
QDate endDate = _toplevelitem->
getStart().addSecs( wx * 60 ).date();
00094 endDate = endDate.addDays(1);
00095
00096
int end = (
int) startDate.daysTo(endDate);
00097 drawDays = (end < 12);
00098
00099
00100
00101
QDate t = startDate.addDays(-startDate.dayOfWeek()+1);
00102
00103 tmp = _toplevelitem->
getStart().secsTo(t)/60;
00104 a = _viewport->
screenX(tmp) - contentsX();
00105
00106 p.fillRect(a, top, (
int) (5. * dayWidth), height,
QBrush(
QColor(240,240,240)));
00107 p.drawRect(a, top, (
int) (5. * dayWidth), height );
00108
00109
00110
00111 t = startDate.addDays(-startDate.day()+1);
00112
00113 tmp = _toplevelitem->
getStart().secsTo(t)/60;
00114 a = _viewport->
screenX(tmp) - contentsX();
00115
00116 e = t.daysInMonth();
00117 p.fillRect(a, top + height + skip, (
int) (e*dayWidth), height,
QBrush(
QColor(240,240,240)));
00118 p.drawRect(a, top + height + skip, (
int) (e*dayWidth), height );
00119
00120
if(a<0) a = 0;
00121 p.drawText(a+5, top + height + skip + (0.8*height),
00122 t.shortMonthName(t.month()) +
" " + QString::number(t.year()) );
00123
00124
00125
00126
00127 tmp = _toplevelitem->
getStart().secsTo(startDate)/60;
00128 a = _viewport->
screenX(tmp) - contentsX()+1;
00129
double dx = (
double)
00130 ((_viewport->
screenX(_viewport->
_snapgrid*1000) - _viewport->
screenX(0))/1000.);
00131
double limit = ((1+e-startDate.day()) * 1440)/_viewport->
_snapgrid;
00132
00133
for(
double k=1.; k<limit; k++) {
00134 p.setPen(_greyPen);
00135 p.drawLine(a + (
int)(k * dx + 0.5), top + skip + 2 * height + 1,
00136 a + (
int)(k * dx + 0.5), top + skip + 2 * height + 2);
00137 }
00138
00139
00140
00141
00142 t = startDate;
00143
00144
for(
int i=0; i<end; i++, t = t.addDays(1) ) {
00145
00146 tmp = _toplevelitem->
getStart().secsTo(t)/60;
00147 a = _viewport->
screenX(tmp) - contentsX();
00148
00149 p.setPen(
QPen(
QColor(black)) );
00150
00151
if(t.dayOfWeek() == 1) {
00152
00153 p.fillRect(a, top, (
int) (5. * dayWidth), height,
QBrush(
QColor(240,240,240)));
00154 p.drawRect(a, top, (
int) (5. * dayWidth), height );
00155
00156
if(!drawDays)
00157 p.drawText(a+5, (
int) (top + (0.8*height)), QString::number(t.day()) );
00158
00159 }
00160
00161
if(drawDays) {
00162
00163
if(a<0) a = 0;
00164
00165
QString str = t.shortDayName(t.dayOfWeek()) +
" " + QString::number(t.day());
00166
QRect rect = p.boundingRect(a+5, (0.8 * height),
00167 (
int) dayWidth, height, AlignLeft, str );
00168
00169
if(t.dayOfWeek() > 5)
00170 p.fillRect(rect.x(), rect.y(), rect.width(), -rect.height(), _headerBackBrush );
00171
else
00172 p.fillRect(rect.x(), rect.y(),
00173 rect.width(), -rect.height(),
QBrush(
QColor(240,240,240)));
00174
00175 p.drawText(a+5, (0.8 * height), str );
00176
00177
if(t.dayOfWeek()>1 && t.dayOfWeek()<6) {
00178 p.setPen(_dotPen);
00179 p.drawLine(a, top, a, height);
00180 }
00181
00182 }
00183
00184
if(t.day()==1) {
00185
00186 e = t.daysInMonth();
00187
00188 p.setPen(_normalPen);
00189
00190 p.fillRect(a, top + height + skip,
00191 (
int) (e * dayWidth), height,
QBrush(
QColor(240,240,240)));
00192 p.drawRect(a, top + height + skip, (
int) (e * dayWidth), height );
00193
00194 p.drawText(a+5,
00195 top + (1.8 * height) + skip,
00196 t.shortMonthName(t.month()) +
" " + QString::number(t.year()) );
00197
00198
00199
00200
double limit = (e * 1440)/_viewport->
_snapgrid;
00201
for(
double k=1.; k<limit; k++) {
00202 p.setPen(_greyPen);
00203 p.drawLine(a + 1 + (
int)(k * dx + 0.5), top + skip + 2 * height + 1,
00204 a + 1 + (
int)(k * dx + 0.5), top + skip + 2 * height + 2);
00205 }
00206
00207
00208 }
00209
00210 }
00211
00212 }
00213
00214
00215
00216
void
00217 xQGanttBarView::paintEvent(
QPaintEvent * e)
00218 {
00219 drawHeader();
00220 }
00221
00222
00223
00224 KGanttBarConfig*
00225 xQGanttBarView::getConfig()
00226 {
00227
if(_config)
00228
return _config;
00229
else {
00230 _config =
new KGanttBarConfig(
this);
00231
return _config;
00232 }
00233
00234 }
00235
00236
00237
00238
void
00239 xQGanttBarView::showConfig()
00240 {
00241
getConfig()->show();
00242 }
00243
00244
00245
00246
void
00247 xQGanttBarView::hideConfig()
00248 {
00249
if(_config)
00250 _config->hide();
00251 }
00252
#include "xQGanttBarView.moc"