virtual void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { switch (element) { case CE_PushButton: { const QStyleOptionButton* vopt = qstyleoption_cast<const QStyleOptionButton *>(option); ATLASSERT(vopt); // if (!vopt->state.testFlag(QStyle::State_Enabled)) { m_imagePushButtonDisabled.Draw(painter, vopt->rect, 0); painter->setPen(m_colorTextDisable); } else if (!vopt->state.testFlag(QStyle::State_Raised)) { m_imagePushButtonPressed.Draw(painter, vopt->rect, 0); painter->setPen(m_colorTextActive); } else if (vopt->state.testFlag(QStyle::State_MouseOver)) { m_imagePushButtonHot.Draw(painter, vopt->rect, 0); painter->setPen(m_colorTextActive); } else { m_imagePushButton.Draw(painter, vopt->rect, 0); painter->setPen(m_colorTextNormal); } // painter->drawText(vopt->rect,Qt::AlignCenter, vopt->text); } break; default: break; } }
void CWizNoteStyle::drawMultiLineItemBackground(const QStyleOptionViewItemV4* vopt, QPainter* pt, const CWizMultiLineListWidget* view) const { if (const CWizAttachmentListView *attachView = dynamic_cast<const CWizAttachmentListView *>(view)) { const CWizAttachmentListViewItem* item = attachView->attachmentItemFromIndex(vopt->index); if (item && (item->isDownloading() || item->isUploading())) { pt->save(); pt->setPen(Qt::NoPen); pt->setBrush(QColor("#43E16C")); QRect rect = vopt->rect; rect.setWidth(rect.width() * item->loadProgress() / 100); pt->drawRect(rect); pt->restore(); return; } } if (vopt->state.testFlag(State_Selected)) { m_multiLineListSelectedItemBackground.Draw(pt, vopt->rect, 0); } }
void CWizNoteStyle::drawMultiLineListWidgetItem(const QStyleOptionViewItemV4 *vopt, QPainter *p, const CWizMultiLineListWidget *view) const { bool imageAlignLeft = view->imageAlignLeft(); int imageWidth = view->imageWidth(); int lineCount = view->lineCount(); int wrapTextLineText = view->wrapTextLineIndex(); const QPixmap img = view->itemImage(vopt->index); p->save(); p->setClipRect(vopt->rect); QRect textLine = vopt->rect; textLine.adjust(4, 0, -4, 0); p->setPen(m_colorDocumentsLine); p->drawLine(textLine.bottomLeft(), textLine.bottomRight()); QRect textRect = vopt->rect; //QRect textRect = subElementRect(SE_ItemViewItemText, vopt, view); // draw the background if (vopt->state.testFlag(State_Selected)) { m_multiLineListSelectedItemBackground.Draw(p, vopt->rect, 0); } if (!img.isNull() && img.width() > 0 && img.height() > 0) { QRect imageRect = textRect; if (imageAlignLeft) { imageRect.setRight(imageRect.left() + imageWidth + 16); imageRect.adjust(4, 4, -4, -4); textRect.setLeft(imageRect.right()); } else { imageRect.setLeft(imageRect.right() - imageWidth + 16); imageRect.adjust(4, 4, -4, -4); textRect.setRight(imageRect.left()); } if (img.width() > imageRect.width() || img.height() > imageRect.height()) { double fRate = std::min<double>(double(imageRect.width()) / img.width(), double(imageRect.height()) / img.height()); int newWidth = int(img.width() * fRate); int newHeight = int(img.height() * fRate); // int adjustX = (imageRect.width() - newWidth) / 2; int adjustY = (imageRect.height() - newHeight) / 2; imageRect.adjust(adjustX, adjustY, -adjustX, -adjustY); } else { int adjustX = (imageRect.width() - img.width()) / 2; int adjustY = (imageRect.height() - img.height()) / 2; imageRect.adjust(adjustX, adjustY, -adjustX, -adjustY); } p->drawPixmap(imageRect, img); } // draw the text QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; if (vopt->state & QStyle::State_Selected) { p->setPen(vopt->palette.color(cg, QPalette::HighlightedText)); } else { p->setPen(vopt->palette.color(cg, QPalette::Text)); } if (vopt->state & QStyle::State_Editing) { p->setPen(vopt->palette.color(cg, QPalette::Text)); p->drawRect(textRect.adjusted(0, 0, -1, -1)); } textRect.adjust(8, 8, -8, -8); bool selected = vopt->state.testFlag(State_Selected); int lineHeight = vopt->fontMetrics.height() + 2; for (int line = 0; line < wrapTextLineText && line < lineCount; line++) { QColor color = (0 == line) ? (selected ? m_colorMultiLineListFirstLineSelected : m_colorMultiLineListFirstLine) : (selected ? m_colorMultiLineListOtherLineSelected : m_colorMultiLineListOtherLine); // CString strText = view->itemText(vopt->index, line); color = view->itemTextColor(vopt->index, line, selected, color); QRect rc = textRect; rc.setTop(rc.top() + line * lineHeight); rc.setHeight(lineHeight); ::WizDrawTextSingleLine(p, rc, strText, Qt::TextSingleLine | Qt::AlignVCenter, color, true); } int line = wrapTextLineText; if (line < lineCount) { CString strText = view->itemText(vopt->index, line); for (; line < lineCount; line++) { QColor color = selected ? m_colorMultiLineListOtherLineSelected : m_colorMultiLineListOtherLine; // color = view->itemTextColor(vopt->index, line, selected, color); QRect rc = textRect; rc.setTop(rc.top() + line * lineHeight); rc.setHeight(lineHeight); bool elidedText = (line == lineCount - 1); ::WizDrawTextSingleLine(p, rc, strText, Qt::TextSingleLine | Qt::AlignVCenter, color, elidedText); } } // draw the focus rect if (vopt->state & QStyle::State_HasFocus) { QStyleOptionFocusRect o; o.QStyleOption::operator=(*vopt); o.rect = subElementRect(SE_ItemViewItemFocusRect, vopt, view); o.state |= QStyle::State_KeyboardFocusChange; o.state |= QStyle::State_Item; QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled; o.backgroundColor = vopt->palette.color(cg, (vopt->state & QStyle::State_Selected) ? QPalette::Highlight : QPalette::Window); proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, p, view); } //draw extra image QRect rcExtra; QPixmap pixExtra; if (view->itemExtraImage(vopt->index, vopt->rect, rcExtra, pixExtra)) { p->drawPixmap(rcExtra, pixExtra); } p->restore(); }