void LogView::createHeader() { _headerScene->clear(); _hourScene->clear(); QSize size = headerSizeHint(); QLinearGradient grad(0, 0, 0, size.height()); int dark = 210; grad.setColorAt(1, QColor(dark, dark, dark)); grad.setColorAt(0.7, QColor(dark + 20, dark + 20, dark + 20)); grad.setColorAt(0, Qt::white); QBrush background(grad); QPen pen(QColor(220, 220, 220)); QSize sizeHint = _logScene->viewSizeHint(); _headerScene->addRect(0, 0, sizeHint.width() + verticalScrollBar()->width() + 200, size.height() + 1, pen, background)->setZValue(0); int columnSize = _logScene->dayWidth(); DateTime startDate = _logScene->startDate().addDays(-1); DateTime today; today.setHour(0); today.setMin(0); today.setSecs(0); for (int x = 0; x < _logScene->totalDays(); x++) { QPen textPen(Qt::black); QGraphicsSimpleTextItem* text = _headerScene->addSimpleText(startDate.addDays(1).toQDateTime().toString("dd-MMM"), QFont("Arial", 8)); text->setPos((x * columnSize + 2) + 50, 3); text->setVisible(true); // text->setPen(textPen); text->setZValue(1); if (startDate == today) { _todayPos = (x * columnSize + 2); } startDate = startDate.addDays(1); } _headerView.setMaximumHeight(headerSizeHint().height()); for (int x = 0; x < 24; x++) { _hourScene->addRect(0, x*BLOCKSIZE, 50, BLOCKSIZE, pen, background)->setZValue(0); std::stringstream ss; ss << x << ":00"; QGraphicsSimpleTextItem* text = _hourScene->addSimpleText(ss.str().c_str()); text->setPos(10, (x * BLOCKSIZE) + 10); text->setVisible(true); // text->setPen(textPen); text->setZValue(1); } _hourView.setScene(_hourScene); _hourView.setMaximumWidth(50); }
void TimeScene::drawTime(DateTime currentDay, DTime time, QModelIndex index, int groupLevel) { QSize size = sizeHint(index); int bordermargin = (size.height() * .1) / 2; QBrush b; QPen pen(QColor(0, 0, 150)); QBrush textBrush; if (groupLevel == 2) { b = QBrush(Qt::white); pen = QPen(QColor(0, 0, 150)); textBrush = QBrush(Qt::darkBlue); } if (groupLevel == 1) { b = QBrush(Qt::lightGray); pen = QPen(QColor(0, 0, 50)); textBrush = QBrush(Qt::blue); } if (groupLevel == 0) { b = QBrush(Qt::darkGray); pen = QPen(QColor(100, 100, 200)); textBrush = QBrush(Qt::white); } int daysToStart = _startDate.daysTo(currentDay); int x1 = daysToStart * _dayWidth; int y1 = _currentY + bordermargin; int x2 = x1 + _dayWidth; int y2 = _currentY + size.height() - bordermargin; // QGraphicsRectItem* item = this->addRect(x1, y1, (x2 - x1), (y2 - y1), pen, b); QRect rect(x1, y1, (x2 - x1), (y2 - y1)); GraphicsRectItem* item = new GraphicsRectItem(rect, index); this->addItem(item); item->setPen(pen); item->setBrush(b); item->setZValue(1); item->setAcceptHoverEvents(true); connect(item, SIGNAL(itemHoverEnter(QModelIndex)), this, SLOT(receiveItemHoverEnter(QModelIndex))); connect(item, SIGNAL(itemHoverLeave(QModelIndex)), this, SLOT(receiveItemHoverLeave(QModelIndex))); QFont font("Arial", 8); font.setBold((groupLevel <= 1)); font.setItalic((groupLevel == 0)); QGraphicsSimpleTextItem* text = addSimpleText(time.toQString(), font); text->setBrush(textBrush); text->setPos(x1 + 2, y1 + 1); text->setVisible(true); text->setZValue(1); }
void LogScene::getTaskItem(const QModelIndex &index) { Task* task = _model->task(index); Calendar* calendar = task->project()->projectDefaultCalendar(); int hoursInDay = calendar->endHour().hour() - calendar->startHour().hour(); std::vector<TaskLog*>* logs =task->logs(); double startHour = 0;//calendar->startHour().hour(); double endHour = 24;//calendar->endHour().hour() + 1; double minuteSize = (double)24*BLOCKSIZE / (double)((endHour - startHour) * 60); int red = 0; for (std::vector<TaskLog*>::iterator iter = logs->begin(); iter != logs->end(); iter++) { TaskLog* log = *iter; QSize size = sizeHint(index); int bordermargin = (size.height() * .4) / 2; int daysToStart = _startDate.daysTo(*log->start); double x1 = (double)daysToStart * (double)_dayWidth; DTime logStartTime = log->start->time(); double y1 = (double)(logStartTime.totalMinutes() - (startHour*60)) * minuteSize; double x2 = (daysToStart + 1) * (double)_dayWidth; DTime logEndTime = log->end->time(); if (log->end->getDay() != log->start->getDay()) { logEndTime = DTime(23, 59, 59); } double y2 = (double)(logEndTime.totalMinutes() - (startHour*60)) * minuteSize; QBrush b(task->taskColor());//QImage(":/img/task_bar.png"));//(QPixmap(":/img/task_bar.png")); red += 20; QColor penColor((task->taskColor().red() < 100) ? 0: (task->taskColor().red() - 100), (task->taskColor().green() < 100) ? 0: (task->taskColor().green() - 100), (task->taskColor().blue() < 100) ? 0: (task->taskColor().blue() - 100)); QPen pen(penColor); if (log->activeLog) { pen.setWidth(3); } QGraphicsItem* item = this->addRect(x1, y1, (x2 - x1), (y2 - y1), pen, b); item->setZValue(1); if ((y2 - y1) > 20) { QFont f("Arial", 8); f.setWeight(QFont::Light); QBrush brush(penColor); std::string description = *task->shortDescription(); int textY = y1 + 5; while (description.length() > 0) { std::string label; if (description.length() > 15) { label = description.substr(0, 15); description = description.substr(15); if ((label.at(label.length() - 1) != ' ') && (description.at(0) != ' ')) { int pos; if ((pos = label.rfind(' ')) != std::string::npos) { description = label.substr(pos) + description; label = label.substr(0, pos); } } } else { label = description; description = ""; } label = label.erase(label.find_last_not_of(" \n\r\t")+1); description = description.erase(description.find_last_not_of(" \n\r\t")+1); if ((textY + 20) < y2) { QGraphicsSimpleTextItem* text = this->addSimpleText(tr(label.c_str())); text->setPos(x1 + 10, textY); //text->rotate(90); text->setVisible(true); text->setBrush(brush); text->setFont(f); text->setZValue(2); textY += 15; } else { break; } } } _currentY += sizeHint(index).height(); } delete(logs); }