File indexing completed on 2024-12-01 11:20:17

0001 /***************************************************************************
0002  *   Copyright (C) 2003-2005 by David Saxton                               *
0003  *   david@bluehaze.org                                                    *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  ***************************************************************************/
0010 
0011 #include "dptext.h"
0012 #include "itemdocument.h"
0013 #include "libraryitem.h"
0014 #include "resizeoverlay.h"
0015 
0016 #include <KLocalizedString>
0017 
0018 #include <QPainter>
0019 #include <QTextEdit>
0020 
0021 // #include <q3simplerichtext.h> // 2018.08.13 - not needed anymore
0022 // #include <q3stylesheet.h>
0023 
0024 Item *DPText::construct(ItemDocument *itemDocument, bool newItem, const char *id)
0025 {
0026     return new DPText(itemDocument, newItem, id);
0027 }
0028 
0029 LibraryItem *DPText::libraryItem()
0030 {
0031     QStringList idList;
0032     idList << "dp/text"
0033            << "dp/canvas_text"
0034            << "canvas_text";
0035 
0036     return new LibraryItem(idList, i18n("Canvas Text"), i18n("Other"), QIcon::fromTheme("text"), LibraryItem::lit_drawpart, DPText::construct);
0037 }
0038 
0039 DPText::DPText(ItemDocument *itemDocument, bool newItem, const char *id)
0040     : DrawPart(itemDocument, newItem, id ? id : "canvas_text")
0041 {
0042     m_rectangularOverlay = new RectangularOverlay(this);
0043     m_name = i18n("Text");
0044 
0045     createProperty("text", Variant::Type::RichText);
0046     property("text")->setValue(i18n("Text"));
0047 
0048     createProperty("background", Variant::Type::Bool);
0049     property("background")->setValue(false);
0050     property("background")->setCaption(i18n("Display Background"));
0051     property("background")->setAdvanced(true);
0052 
0053     createProperty("background-color", Variant::Type::Color);
0054     property("background-color")->setValue(QColor(Qt::white));
0055     property("background-color")->setCaption(i18n("Background Color"));
0056     property("background-color")->setAdvanced(true);
0057 
0058     createProperty("frame-color", Variant::Type::Color);
0059     property("frame-color")->setValue(QColor(Qt::black));
0060     property("frame-color")->setCaption(i18n("Frame Color"));
0061     property("frame-color")->setAdvanced(true);
0062 }
0063 
0064 DPText::~DPText()
0065 {
0066 }
0067 
0068 void DPText::setSelected(bool yes)
0069 {
0070     if (yes == isSelected())
0071         return;
0072 
0073     DrawPart::setSelected(yes);
0074     m_rectangularOverlay->showResizeHandles(yes);
0075 }
0076 
0077 void DPText::dataChanged()
0078 {
0079     b_displayBackground = dataBool("background");
0080     m_backgroundColor = dataColor("background-color");
0081     m_frameColor = dataColor("frame-color");
0082 
0083     m_text = dataString("text");
0084 
0085     if (!Qt::mightBeRichText(m_text)) {
0086         // Format the text to be HTML
0087         m_text.replace('\n', "<br>");
0088     }
0089 
0090     update();
0091 }
0092 
0093 void DPText::postResize()
0094 {
0095     setItemPoints(QPolygon(m_sizeRect), false);
0096 }
0097 
0098 QSize DPText::minimumSize() const
0099 {
0100     return QSize(48, 24);
0101 }
0102 
0103 void DPText::drawShape(QPainter &p)
0104 {
0105     QRect bound = m_sizeRect;
0106     bound.setWidth(bound.width() - 2);
0107     bound.setHeight(bound.height() - 2);
0108     bound.translate(int(x() + 1), int(y() + 1));
0109 
0110     if (b_displayBackground) {
0111         p.save();
0112         p.setPen(QPen(m_frameColor, 1, Qt::DotLine));
0113         p.setBrush(m_backgroundColor);
0114         p.drawRect(bound);
0115         p.restore();
0116     }
0117 
0118     const int pad = 6;
0119 
0120     bound.setLeft(bound.left() + pad);
0121     bound.setTop(bound.top());
0122     bound.setRight(bound.right() - pad);
0123     bound.setBottom(bound.bottom() - pad);
0124 
0125     QTextEdit *t = new QTextEdit(m_text);
0126     t->resize(bound.width(), bound.height()); // t->setWidth( bound.width() );
0127     t->viewport()->setAutoFillBackground(false);
0128     t->setFrameStyle(QFrame::NoFrame);
0129 
0130     t->render(&p, bound.topLeft(), QRegion(), QWidget::DrawChildren); // t->draw( &p, bound.left(), bound.top(), bound, QColorGroup() );
0131     delete t;
0132 }