/** Redefined. */ void PlaylistHeaderView::paintEvent(QPaintEvent *) { QStylePainter p(this->viewport()); QLinearGradient vLinearGradient(rect().topLeft(), QPoint(rect().left(), rect().top() + rect().height())); /// XXX QPalette palette = QApplication::palette(); if (SettingsPrivate::instance()->isCustomColors()) { vLinearGradient.setColorAt(0, palette.base().color().lighter(110)); vLinearGradient.setColorAt(1, palette.base().color()); } else { vLinearGradient.setColorAt(0, palette.base().color()); vLinearGradient.setColorAt(1, palette.window().color()); } QStyleOptionHeader opt; opt.initFrom(this->viewport()); p.fillRect(rect(), QBrush(vLinearGradient)); p.setPen(opt.palette.windowText().color()); QRect r; p.save(); if (QGuiApplication::isLeftToRight()) { p.translate(-offset(), 0); } else { p.translate(offset(), 0); } for (int i = 0; i < count(); i++) { QRect r2(sectionPosition(i), viewport()->rect().y(), sectionSize(i), viewport()->rect().height()); p.drawText(r2, Qt::AlignCenter, model()->headerData(i, Qt::Horizontal).toString()); if (r2.contains(mapFromGlobal(QCursor::pos()))) { r = r2; } } p.restore(); if (!r.isNull()) { p.save(); p.setPen(palette.highlight().color()); p.drawLine(r.x(), r.y() + r.height() / 4, r.x(), r.y() + 3 * r.height() / 4); p.drawLine(r.x() + r.width() - 1, r.y() + r.height() / 4, r.x() + r.width() - 1, r.y() + 3 * r.height() / 4); p.restore(); } // Bottom frame p.setPen(QApplication::palette().mid().color()); p.drawLine(rect().bottomLeft(), QPoint(rect().left() + rect().width(), rect().top() + rect().height())); // Vertical frame if (QGuiApplication::isLeftToRight()) { p.drawLine(rect().topLeft(), QPoint(rect().left(), rect().top() + rect().height())); } else { p.drawLine(rect().topRight(), QPoint(rect().right(), rect().top() + rect().height())); } }
void KexiRecordMarker::paintEvent(QPaintEvent *) { QPainter p(this); QRect r(rect()); int first = (r.top() + d->offset) / d->rowHeight; int last = (r.bottom() + d->offset) / d->rowHeight; if (last > (d->rows - 1 + (d->showInsertRow ? 1 : 0))) last = d->rows - 1 + (d->showInsertRow ? 1 : 0); p.setBrush(palette().brush(backgroundRole())); p.save(); for (int i = first; i <= last; i++) { int y = ((d->rowHeight * i) - d->offset); p.drawRect(r); QStyleOptionHeader optionHeader; optionHeader.initFrom(this); optionHeader.orientation = Qt::Vertical; optionHeader.state |= QStyle::State_Raised; if (isEnabled()) optionHeader.state |= QStyle::State_Enabled; if (window()->isActiveWindow()) optionHeader.state |= QStyle::State_Active; optionHeader.rect = QRect(0, y, width(), d->rowHeight); optionHeader.section = 0; // alter background for selected or highlighted row QColor alteredColor; //! @todo Qt4: blend entire QBrush? if (d->currentRow == i) { alteredColor = KexiUtils::blendedColors( palette().color(QPalette::Window), d->selectionBackgroundBrush.color(), 2, 1); } else if (d->highlightedRecord == i) { alteredColor = KexiUtils::blendedColors( palette().color(QPalette::Window), d->selectionBackgroundBrush.color(), 4, 1); optionHeader.state |= QStyle::State_MouseOver; } if (alteredColor.isValid()) { optionHeader.palette.setBrush(QPalette::Button, d->selectionBackgroundBrush); optionHeader.palette.setColor(QPalette::Button, alteredColor); //set background color as well (e.g. for thinkeramik) optionHeader.palette.setBrush(QPalette::Window, d->selectionBackgroundBrush); optionHeader.palette.setColor(QPalette::Window, alteredColor); } style()->drawControl( QStyle::CE_Header, &optionHeader, &p, this); } p.restore(); if (d->editRow != -1 && d->editRow >= first && d->editRow <= (last/*+1 for insert row*/)) { //show pen when editing int ofs = d->rowHeight / 4; int pos = ((d->rowHeight * (d->currentRow >= 0 ? d->currentRow : 0)) - d->offset) - ofs / 2 + 1; p.drawPixmap((d->rowHeight - KexiRecordMarker_static->pen.width()) / 2, (d->rowHeight - KexiRecordMarker_static->pen.height()) / 2 + pos, KexiRecordMarker_static->pen); } else if (d->currentRow >= first && d->currentRow <= last && (!d->showInsertRow || (d->showInsertRow && d->currentRow < last))) { /*don't display marker for 'insert' row*/ //show marker p.setBrush(palette().brush(foregroundRole())); p.setPen(QPen(Qt::NoPen)); QPolygon points(3); int ofs = d->rowHeight / 4; int ofs2 = (width() - ofs) / 2; int pos = ((d->rowHeight * d->currentRow) - d->offset) - ofs / 2 + 2; points.putPoints(0, 3, ofs2, pos + ofs, ofs2 + ofs, pos + ofs*2, ofs2, pos + ofs*3); p.drawPolygon(points); } if (d->showInsertRow && d->editRow < last && last == (d->rows - 1 + (d->showInsertRow ? 1 : 0))) { //show plus sign int pos = ((d->rowHeight * last) - d->offset) + (d->rowHeight - KexiRecordMarker_static->plus.height()) / 2; p.drawPixmap((width() - KexiRecordMarker_static->plus.width()) / 2, pos, KexiRecordMarker_static->plus); } }