int KoReportItemLabel::renderSimpleData(OROPage *page, OROSection *section, const QPointF &offset, const QVariant &data, KRScriptHandler *script) { Q_UNUSED(data) Q_UNUSED(script) OROTextBox * tb = new OROTextBox(); tb->setPosition(m_pos.toScene() + offset); tb->setSize(m_size.toScene()); tb->setFont(font()); tb->setText(text()); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); if (page) { page->addPrimitive(tb); } if (section) { OROPrimitive *clone = tb->clone(); clone->setPosition(m_pos.toScene()); section->addPrimitive(clone); } if (!page) { delete tb; } return 0; //Item doesn't stretch the section height }
void ReportEntityLabel::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { // store any values we plan on changing so we can restore them QFont f = painter->font(); QPen p = painter->pen(); painter->setFont(font()); //painter->setBackgroundMode ( Qt::OpaqueMode ); QColor bg = m_backgroundColor->value().value<QColor>(); bg.setAlpha(m_backgroundOpacity->value().toInt()); painter->setBackground(bg); painter->setPen(m_foregroundColor->value().value<QColor>()); painter->fillRect(QGraphicsRectItem::rect(), bg); painter->drawText(rect(), textFlags(), text()); if ((Qt::PenStyle)m_lineStyle->value().toInt() == Qt::NoPen || m_lineWeight->value().toInt() <= 0) { painter->setPen(QPen(QColor(224, 224, 224))); } else { painter->setPen(QPen(m_lineColor->value().value<QColor>(), m_lineWeight->value().toInt(), (Qt::PenStyle)m_lineStyle->value().toInt())); } painter->drawRect(QGraphicsRectItem::rect()); painter->setBackgroundMode(Qt::TransparentMode); painter->setPen(m_foregroundColor->value().value<QColor>()); drawHandles(painter); // restore an values before we started just in case painter->setFont(f); painter->setPen(p); }
void ReportEntityLabel::buildXML(QDomDocument & doc, QDomElement & parent) { kDebug(); //kdDebug() << "ReportEntityLabel::buildXML()"); QDomElement entity = doc.createElement("label"); // bounding rect buildXMLRect(doc, entity, pointRect()); // name QDomElement n = doc.createElement("name"); n.appendChild(doc.createTextNode(entityName())); entity.appendChild(n); // z QDomElement z = doc.createElement("zvalue"); z.appendChild(doc.createTextNode(QString::number(zValue()))); entity.appendChild(z); // font info //buildXMLFont ( doc,entity,font() ); //text style info buildXMLTextStyle(doc, entity, textStyle()); //Line Style buildXMLLineStyle(doc, entity, lineStyle()); // text alignment int align = textFlags(); // horizontal if ((align & Qt::AlignRight) == Qt::AlignRight) entity.appendChild(doc.createElement("right")); else if ((align & Qt::AlignHCenter) == Qt::AlignHCenter) entity.appendChild(doc.createElement("hcenter")); else // Qt::AlignLeft entity.appendChild(doc.createElement("left")); // vertical if ((align & Qt::AlignBottom) == Qt::AlignBottom) entity.appendChild(doc.createElement("bottom")); else if ((align & Qt::AlignVCenter) == Qt::AlignVCenter) entity.appendChild(doc.createElement("vcenter")); else // Qt::AlignTop entity.appendChild(doc.createElement("top")); // the text string QDomElement string = doc.createElement("string"); string.appendChild(doc.createTextNode(text())); entity.appendChild(string); parent.appendChild(entity); }
void KoReportDesignerItemText::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(option); Q_UNUSED(widget) // store any values we plan on changing so we can restore them QFont f = painter->font(); QPen p = painter->pen(); painter->setFont(font()); QColor bg = m_backgroundColor->value().value<QColor>(); bg.setAlpha((m_backgroundOpacity->value().toInt() / 100) * 255); painter->setBackground(bg); painter->setPen(m_foregroundColor->value().value<QColor>()); painter->fillRect(rect(), m_backgroundColor->value().value<QColor>()); painter->drawText(rect(), textFlags(), dataSourceAndObjectTypeName(itemDataSource(), "textarea")); if ((Qt::PenStyle)m_lineStyle->value().toInt() == Qt::NoPen || m_lineWeight->value().toInt() <= 0) { painter->setPen(QPen(QColor(224, 224, 224))); } else { painter->setPen(QPen(m_lineColor->value().value<QColor>(), m_lineWeight->value().toInt(), (Qt::PenStyle)m_lineStyle->value().toInt())); } painter->drawRect(rect()); painter->setBackgroundMode(Qt::TransparentMode); painter->setPen(m_foregroundColor->value().value<QColor>()); drawHandles(painter); // restore an values before we started just in case painter->setFont(f); painter->setPen(p); }
int KReportItemText::renderSimpleData(OROPage *page, OROSection *section, const QPointF &offset, const QVariant &data, KReportScriptHandler *script) { Q_UNUSED(script); QString qstrValue; QString cs = itemDataSource(); if (!cs.isEmpty()) { if (cs.left(1) == QLatin1String("$")) { //Everything past $ is treated as a string qstrValue = cs.mid(1); } else { qstrValue = data.toString(); } } else { qstrValue = m_itemValue->value().toString(); } QPointF pos = m_pos.toScene(); QSizeF size = m_size.toScene(); pos += offset; QRectF trf(pos, size); qreal intStretch = trf.top() - offset.y(); if (qstrValue.length()) { QRectF rect = trf; int pos = 0; QChar separator; QRegExp re(QLatin1String("\\s")); QPrinter prnt(QPrinter::HighResolution); QFontMetrics fm(font(), &prnt); // int intRectWidth = (int)(trf.width() * prnt.resolution()) - 10; int intRectWidth = (int)((m_size.toPoint().width() / 72) * prnt.resolution()); int intLineCounter = 0; qreal intBaseTop = trf.top(); qreal intRectHeight = trf.height(); while (qstrValue.length()) { int idx = re.indexIn(qstrValue, pos); if (idx == -1) { idx = qstrValue.length(); separator = QLatin1Char('\n'); } else separator = qstrValue.at(idx); if (fm.boundingRect(qstrValue.left(idx)).width() < intRectWidth || pos == 0) { pos = idx + 1; if (separator == QLatin1Char('\n')) { QString line = qstrValue.left(idx); qstrValue.remove(0, idx + 1); pos = 0; rect.setTop(intBaseTop + (intLineCounter * intRectHeight)); rect.setBottom(rect.top() + intRectHeight); OROTextBox * tb = new OROTextBox(); tb->setPosition(rect.topLeft()); tb->setSize(rect.size()); tb->setFont(font()); tb->setText(line); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); if (page) { page->addPrimitive(tb); } if (section) { OROTextBox *tb2 = dynamic_cast<OROTextBox*>(tb->clone()); tb2->setPosition(m_pos.toPoint()); section->addPrimitive(tb2); } if (!page) { delete tb; } intStretch += intRectHeight; intLineCounter++; } } else { QString line = qstrValue.left(pos - 1); qstrValue.remove(0, pos); pos = 0; rect.setTop(intBaseTop + (intLineCounter * intRectHeight)); rect.setBottom(rect.top() + intRectHeight); OROTextBox * tb = new OROTextBox(); tb->setPosition(rect.topLeft()); tb->setSize(rect.size()); tb->setFont(font()); tb->setText(line); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); if (page) page->addPrimitive(tb); intStretch += intRectHeight; intLineCounter++; } } intStretch += (m_bottomPadding / 100.0); } return intStretch; //Item returns its required section height }
QRect KoReportDesignerItemText::getTextRect() { return QFontMetrics(font()).boundingRect(int (x()), int (y()), 0, 0, textFlags(), dataSourceAndObjectTypeName(itemDataSource(), "textarea")); }
QRectF KoReportDesignerItemLabel::getTextRect() { return QFontMetrics(font()).boundingRect(x(), y(), 0, 0, textFlags(), m_text->value().toString()); }
QRectF ReportEntityLabel::getTextRect() { return QFontMetrics(font()).boundingRect(x(), y(), 0, 0, textFlags(), m_text->value().toString()); }
int KReportItemField::renderSimpleData(OROPage *page, OROSection *section, const QPointF &offset, const QVariant &data, KReportScriptHandler *script) { OROTextBox * tb = new OROTextBox(); tb->setPosition(scenePosition(position()) + offset); tb->setSize(sceneSize(size())); tb->setFont(font()); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); tb->setCanGrow(m_canGrow->value().toBool()); tb->setWordWrap(m_wordWrap->value().toBool()); QString str; QString ids = itemDataSource(); if (!ids.isEmpty()) { #ifdef KREPORT_SCRIPTING if (ids.left(1) == QLatin1String("=") && script) { //Everything after = is treated as code if (!ids.contains(QLatin1String("PageTotal()"))) { QVariant v = script->evaluate(ids.mid(1)); str = v.toString(); } else { str = ids.mid(1); tb->setRequiresPostProcessing(true); } } else #else Q_UNUSED(script); #endif if (ids.left(1) == QLatin1String("$")) { //Everything past $ is treated as a string str = ids.mid(1); } else { str = data.toString(); } } else { str = m_itemValue->value().toString(); } tb->setText(str); //Work out the size of the text if (tb->canGrow()) { QRect r; if (tb->wordWrap()) { //Grow vertically QFontMetrics metrics(font()); QRect temp(tb->position().x(), tb->position().y(), tb->size().width(), 5000); // a large vertical height r = metrics.boundingRect(temp, tb->flags(), str); } else { //Grow Horizontally QFontMetrics metrics(font()); QRect temp(tb->position().x(), tb->position().y(), 5000, tb->size().height()); // a large vertical height r = metrics.boundingRect(temp, tb->flags(), str); } tb->setSize(r.size() + QSize(4,4)); } if (page) { page->insertPrimitive(tb); } if (section) { OROPrimitive *clone = tb->clone(); clone->setPosition(scenePosition(position())); section->addPrimitive(clone); } int height = scenePosition(position()).y() + tb->size().height(); //If there is no page to add the item to, delete it now because it wont be deleted later if (!page) { delete tb; } return height; }