diff --git a/libs/koreport/items/label/KoReportDesignerItemLabel.cpp b/libs/koreport/items/label/KoReportDesignerItemLabel.cpp index 24746b17bac..f0ce30f32a4 100644 --- a/libs/koreport/items/label/KoReportDesignerItemLabel.cpp +++ b/libs/koreport/items/label/KoReportDesignerItemLabel.cpp @@ -1,228 +1,229 @@ /* * OpenRPT report writer and rendering engine * Copyright (C) 2001-2007 by OpenMFG, LLC (info@openmfg.com) * Copyright (C) 2007-2008 by Adam Pigg (adam@piggz.co.uk) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ #include "KoReportDesignerItemLabel.h" #include #include #include "reportscene.h" #include #include #include #include #include #include #include #include #include // // class ReportEntityLabel // void KoReportDesignerItemLabel::init(QGraphicsScene *scene, KoReportDesigner *d) { if (scene) scene->addItem(this); KoReportDesignerItemRectBase::init(&m_pos, &m_size, m_set, d); connect(propertySet(), SIGNAL(propertyChanged(KoProperty::Set&,KoProperty::Property&)), this, SLOT(slotPropertyChanged(KoProperty::Set&,KoProperty::Property&))); setZValue(Z); setFlag(ItemIsFocusable); m_inlineEdit = new BoundedTextItem(this); m_inlineEdit->setVisible(false); m_inlineEdit->setFlag(ItemIsFocusable); m_inlineEdit->setFlag(ItemIsSelectable, false); QTextDocument *doc = new QTextDocument; doc->setDocumentMargin(0); doc->setPlainText(text()); m_inlineEdit->setDocument(doc); connect(m_inlineEdit, SIGNAL(exitEditMode()), this, SLOT(exitInlineEditingMode())); } // methods (constructors) KoReportDesignerItemLabel::KoReportDesignerItemLabel(KoReportDesigner* d, QGraphicsScene * scene, const QPointF &pos) : KoReportDesignerItemRectBase(d) { Q_UNUSED(pos); init(scene, d); setSceneRect(properRect(*d, getTextRect().width(), getTextRect().height())); m_name->setValue(m_reportDesigner->suggestEntityName(typeName())); enterInlineEditingMode(); } KoReportDesignerItemLabel::KoReportDesignerItemLabel(QDomNode & element, KoReportDesigner * d, QGraphicsScene * s) : KoReportItemLabel(element), KoReportDesignerItemRectBase(d), m_inlineEdit(0) { init(s, d); setSceneRect(m_pos.toScene(), m_size.toScene()); } KoReportDesignerItemLabel* KoReportDesignerItemLabel::clone() { QDomDocument d; QDomElement e = d.createElement("clone"); QDomNode n; buildXML(d, e); n = e.firstChild(); return new KoReportDesignerItemLabel(n, designer(), 0); } // methods (deconstructor) KoReportDesignerItemLabel::~KoReportDesignerItemLabel() {} QRectF KoReportDesignerItemLabel::getTextRect() const { return QFontMetrics(font()).boundingRect(x(), y(), 0, 0, textFlags(), m_text->value().toString()); } void KoReportDesignerItemLabel::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(option); Q_UNUSED(widget); if (m_inlineEdit->isVisible()) { return; } // 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::TransparentMode); QColor bg = m_backgroundColor->value().value(); bg.setAlphaF(m_backgroundOpacity->value().toReal() * 0.01); painter->setPen(m_foregroundColor->value().value()); 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(), m_lineWeight->value().toInt(), (Qt::PenStyle)m_lineStyle->value().toInt())); } painter->drawRect(QGraphicsRectItem::rect()); painter->setPen(m_foregroundColor->value().value()); drawHandles(painter); // restore an values before we started just in case painter->setFont(f); painter->setPen(p); } void KoReportDesignerItemLabel::buildXML(QDomDocument & doc, QDomElement & parent) { //kDebug(); QDomElement entity = doc.createElement(QLatin1String("report:") + typeName()); // properties addPropertyAsAttribute(&entity, m_name); addPropertyAsAttribute(&entity, m_text); addPropertyAsAttribute(&entity, m_verticalAlignment); addPropertyAsAttribute(&entity, m_horizontalAlignment); entity.setAttribute("report:z-index", zValue()); // bounding rect buildXMLRect(doc, entity, &m_pos, &m_size); //text style info buildXMLTextStyle(doc, entity, textStyle()); //Line Style buildXMLLineStyle(doc, entity, lineStyle()); parent.appendChild(entity); } void KoReportDesignerItemLabel::slotPropertyChanged(KoProperty::Set &s, KoProperty::Property &p) { Q_UNUSED(s); if (p.name() == "Name") { //For some reason p.oldValue returns an empty string if (!m_reportDesigner->isEntityNameUnique(p.value().toString(), this)) { p.setValue(m_oldName); } else { m_oldName = p.value().toString(); } } else if (p.name() == "caption") { m_inlineEdit->setPlainText(p.value().toString()); } KoReportDesignerItemRectBase::propertyChanged(s, p); if (m_reportDesigner) m_reportDesigner->setModified(true); } void KoReportDesignerItemLabel::enterInlineEditingMode() { if (!m_inlineEdit->isVisible()) { m_inlineEdit->setVisible(true); m_inlineEdit->setPlainText(text()); m_inlineEdit->setFocus(); QTextCursor c = m_inlineEdit->textCursor(); c.select(QTextCursor::Document); m_inlineEdit->setTextCursor(c); m_inlineEdit->setFont(m_font->value().value()); m_inlineEdit->setDefaultTextColor(m_foregroundColor->value().value()); m_inlineEdit->setBackgroudColor(m_backgroundColor->value().value()); m_inlineEdit->setBackgroudOpacity(m_backgroundOpacity->value().toInt()); m_inlineEdit->setForegroundColor(m_foregroundColor->value().value()); m_inlineEdit->setFont(m_font->value().value()); update(); } } void KoReportDesignerItemLabel::exitInlineEditingMode() { if (m_inlineEdit->isVisible()) { m_inlineEdit->setVisible(false); setText(m_inlineEdit->toPlainText()); } } void KoReportDesignerItemLabel::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) { + Q_UNUSED(event) enterInlineEditingMode(); } void KoReportDesignerItemLabel::keyReleaseEvent(QKeyEvent* event) { if (event->key() == Qt::Key_F2) { enterInlineEditingMode(); } else { QGraphicsRectItem::keyReleaseEvent(event); } }