File indexing completed on 2024-12-01 08:18:05
0001 /*************************************************************************** 0002 * Copyright (C) 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 "drawpart.h" 0012 #include "itemdocument.h" 0013 #include "itemdocumentdata.h" 0014 #include "variant.h" 0015 0016 #include <KLocalizedString> 0017 #include <QBitArray> 0018 0019 DrawPart::DrawPart(ItemDocument *itemDocument, bool newItem, const char *id) 0020 : Item(itemDocument, newItem, id) 0021 { 0022 if (itemDocument) 0023 itemDocument->registerItem(this); 0024 } 0025 0026 DrawPart::~DrawPart() 0027 { 0028 } 0029 0030 Variant *DrawPart::createProperty(const QString &id, Variant::Type::Value type) 0031 { 0032 if (type == Variant::Type::PenStyle) { 0033 QStringList penStyles; 0034 penStyles << DrawPart::penStyleToName(Qt::SolidLine) << DrawPart::penStyleToName(Qt::DashLine) << DrawPart::penStyleToName(Qt::DotLine) << DrawPart::penStyleToName(Qt::DashDotLine) << DrawPart::penStyleToName(Qt::DashDotDotLine); 0035 0036 Variant *v = createProperty(id, Variant::Type::String); 0037 v->setType(Variant::Type::PenStyle); 0038 v->setAllowed(penStyles); 0039 return v; 0040 } 0041 0042 if (type == Variant::Type::PenCapStyle) { 0043 QStringList penCapStyles; 0044 penCapStyles << DrawPart::penCapStyleToName(Qt::FlatCap) << DrawPart::penCapStyleToName(Qt::SquareCap) << DrawPart::penCapStyleToName(Qt::RoundCap); 0045 0046 Variant *v = createProperty(id, Variant::Type::String); 0047 v->setType(Variant::Type::PenCapStyle); 0048 v->setAllowed(penCapStyles); 0049 return v; 0050 } 0051 0052 return Item::createProperty(id, type); 0053 } 0054 0055 Qt::PenStyle DrawPart::getDataPenStyle(const QString &id) 0056 { 0057 return nameToPenStyle(dataString(id)); 0058 } 0059 Qt::PenCapStyle DrawPart::getDataPenCapStyle(const QString &id) 0060 { 0061 return nameToPenCapStyle(dataString(id)); 0062 } 0063 void DrawPart::setDataPenStyle(const QString &id, Qt::PenStyle value) 0064 { 0065 property(id)->setValue(penStyleToName(value)); 0066 } 0067 void DrawPart::setDataPenCapStyle(const QString &id, Qt::PenCapStyle value) 0068 { 0069 property(id)->setValue(penCapStyleToName(value)); 0070 } 0071 0072 ItemData DrawPart::itemData() const 0073 { 0074 ItemData itemData = Item::itemData(); 0075 0076 const VariantDataMap::const_iterator end = m_variantData.end(); 0077 for (VariantDataMap::const_iterator it = m_variantData.begin(); it != end; ++it) { 0078 switch (it.value()->type()) { 0079 case Variant::Type::PenStyle: 0080 itemData.dataString[it.key()] = penStyleToID(nameToPenStyle(it.value()->value().toString())); 0081 break; 0082 case Variant::Type::PenCapStyle: 0083 itemData.dataString[it.key()] = penCapStyleToID(nameToPenCapStyle(it.value()->value().toString())); 0084 break; 0085 case Variant::Type::String: 0086 case Variant::Type::FileName: 0087 case Variant::Type::Port: 0088 case Variant::Type::Pin: 0089 case Variant::Type::VarName: 0090 case Variant::Type::Combo: 0091 case Variant::Type::Select: 0092 case Variant::Type::Multiline: 0093 case Variant::Type::RichText: 0094 case Variant::Type::Int: 0095 case Variant::Type::Double: 0096 case Variant::Type::Color: 0097 case Variant::Type::Bool: 0098 case Variant::Type::Raw: 0099 case Variant::Type::SevenSegment: 0100 case Variant::Type::KeyPad: 0101 case Variant::Type::None: 0102 // All of these are handled by Item 0103 break; 0104 } 0105 } 0106 0107 return itemData; 0108 } 0109 0110 void DrawPart::restoreFromItemData(const ItemData &itemData) 0111 { 0112 Item::restoreFromItemData(itemData); 0113 0114 const QStringMap::const_iterator stringEnd = itemData.dataString.end(); 0115 for (QStringMap::const_iterator it = itemData.dataString.begin(); it != stringEnd; ++it) { 0116 VariantDataMap::iterator vit = m_variantData.find(it.key()); 0117 if (vit == m_variantData.end()) 0118 continue; 0119 0120 if (vit.value()->type() == Variant::Type::PenStyle) 0121 setDataPenStyle(it.key(), idToPenStyle(it.value())); 0122 0123 else if (vit.value()->type() == Variant::Type::PenCapStyle) 0124 setDataPenCapStyle(it.key(), idToPenCapStyle(it.value())); 0125 } 0126 } 0127 0128 QString DrawPart::penStyleToID(Qt::PenStyle style) 0129 { 0130 switch (style) { 0131 case Qt::SolidLine: 0132 return "SolidLine"; 0133 case Qt::NoPen: 0134 return "NoPen"; 0135 case Qt::DashLine: 0136 return "DashLine"; 0137 case Qt::DotLine: 0138 return "DotLine"; 0139 case Qt::DashDotLine: 0140 return "DashDotLine"; 0141 case Qt::DashDotDotLine: 0142 return "DashDotDotLine"; 0143 case Qt::MPenStyle: 0144 default: 0145 return ""; // ?! 0146 } 0147 } 0148 Qt::PenStyle DrawPart::idToPenStyle(const QString &id) 0149 { 0150 if (id == "NoPen") 0151 return Qt::NoPen; 0152 if (id == "DashLine") 0153 return Qt::DashLine; 0154 if (id == "DotLine") 0155 return Qt::DotLine; 0156 if (id == "DashDotLine") 0157 return Qt::DashDotLine; 0158 if (id == "DashDotDotLine") 0159 return Qt::DashDotDotLine; 0160 return Qt::SolidLine; 0161 } 0162 QString DrawPart::penCapStyleToID(Qt::PenCapStyle style) 0163 { 0164 switch (style) { 0165 case Qt::FlatCap: 0166 return "FlatCap"; 0167 case Qt::SquareCap: 0168 return "SquareCap"; 0169 case Qt::RoundCap: 0170 return "RoundCap"; 0171 case Qt::MPenCapStyle: 0172 default: 0173 return ""; // ?! 0174 } 0175 } 0176 Qt::PenCapStyle DrawPart::idToPenCapStyle(const QString &id) 0177 { 0178 if (id == "SquareCap") 0179 return Qt::SquareCap; 0180 if (id == "RoundCap") 0181 return Qt::RoundCap; 0182 return Qt::FlatCap; 0183 } 0184 0185 QString DrawPart::penStyleToName(Qt::PenStyle style) 0186 { 0187 switch (style) { 0188 case Qt::SolidLine: 0189 return i18n("Solid"); 0190 case Qt::NoPen: 0191 return i18n("None"); 0192 case Qt::DashLine: 0193 return i18n("Dash"); 0194 case Qt::DotLine: 0195 return i18n("Dot"); 0196 case Qt::DashDotLine: 0197 return i18n("Dash Dot"); 0198 case Qt::DashDotDotLine: 0199 return i18n("Dash Dot Dot"); 0200 case Qt::MPenStyle: 0201 default: 0202 return ""; // ?! 0203 } 0204 } 0205 Qt::PenStyle DrawPart::nameToPenStyle(const QString &name) 0206 { 0207 if (name == i18n("None")) 0208 return Qt::NoPen; 0209 if (name == i18n("Dash")) 0210 return Qt::DashLine; 0211 if (name == i18n("Dot")) 0212 return Qt::DotLine; 0213 if (name == i18n("Dash Dot")) 0214 return Qt::DashDotLine; 0215 if (name == i18n("Dash Dot Dot")) 0216 return Qt::DashDotDotLine; 0217 return Qt::SolidLine; 0218 } 0219 QString DrawPart::penCapStyleToName(Qt::PenCapStyle style) 0220 { 0221 switch (style) { 0222 case Qt::FlatCap: 0223 return i18n("Flat"); 0224 case Qt::SquareCap: 0225 return i18n("Square"); 0226 case Qt::RoundCap: 0227 return i18n("Round"); 0228 case Qt::MPenCapStyle: 0229 default: 0230 return ""; // ?! 0231 } 0232 } 0233 Qt::PenCapStyle DrawPart::nameToPenCapStyle(const QString &name) 0234 { 0235 if (name == i18n("Square")) 0236 return Qt::SquareCap; 0237 if (name == i18n("Round")) 0238 return Qt::RoundCap; 0239 return Qt::FlatCap; 0240 }