Isis 3 Programmer Reference
TargetBodyDisplayProperties.cpp
1#include "TargetBodyDisplayProperties.h"
2
3#include <QAction>
4#include <QBitArray>
5#include <QBuffer>
6#include <QColorDialog>
7#include <QDebug>
8#include <QInputDialog>
9#include <QMap>
10#include <QVariant>
11#include <QXmlStreamWriter>
12
13#include "FileName.h"
14#include "Pvl.h"
15#include "XmlStackedHandlerReader.h"
16
17namespace Isis {
25 DisplayProperties(displayName, parent) {
26
28 m_propertyValues = new QMap<int, QVariant>;
29
30 // set all of the defaults to prevent unwanted change signals from
31 // being emitted later.
32 setShowLabel(false);
33 setSelected(false);
34
35 setValue(Color, QVariant::fromValue(randomColor()));
36 }
37
44 QObject *parent) : DisplayProperties("", parent) {
46 m_propertyValues = new QMap<int, QVariant>;
47
48 xmlReader->pushContentHandler(new XmlHandler(this));
49 }
50
51
57
58
59// void TargetBodyDisplayProperties::fromPvl(const PvlObject &pvl) {
60// m_displayName = ((IString)pvl["DisplayName"][0]).ToQt();
61
62// QByteArray hexValues(pvl["Values"][0].c_str());
63// QDataStream valuesStream(QByteArray::fromHex(hexValues));
64// valuesStream >> *m_propertyValues;
65// }
66
67
68// /**
69// * Convert to Pvl for project files. This stores all of the data associated
70// * with all of the properties (but not what is supported). This also s tores
71// * the target filename.
72// */
73// PvlObject TargetBodyDisplayProperties::toPvl() const {
74// PvlObject output("DisplayProperties");
75// output += PvlKeyword("DisplayName", m_displayName);
76
77// QBuffer dataBuffer;
78// dataBuffer.open(QIODevice::ReadWrite);
79
80// QDataStream propsStream(&dataBuffer);
81// propsStream << *m_propertyValues;
82// dataBuffer.seek(0);
83
84// output += PvlKeyword("Values", QString(dataBuffer.data().toHex()));
85
86// return output;
87// }
88
89
96 if (!supports(prop)) {
98 emit supportAdded(prop);
99 }
100 }
101
102
109 return (m_propertiesUsed & prop) == prop;
110 }
111
112
120 return (*m_propertyValues)[prop];
121 }
122
123
130 // Gives a random number between 0 and 255
131 int red = 0;
132 int green = 0;
133 int blue = 0;
134
135 // Generate dark
136 while (red + green + blue < 300) {
137 red = rand() % 256;
138 green = rand() % 256;
139 blue = rand() % 256;
140 }
141
142 return QColor(red, green, blue, 60);
143 }
144
152 void TargetBodyDisplayProperties::save(QXmlStreamWriter &stream, const Project *project,
153 FileName newProjectRoot) const {
154 stream.writeStartElement("displayProperties");
155
156 stream.writeAttribute("displayName", displayName());
157
158 // Get hex-encoded data
159 QBuffer dataBuffer;
160 dataBuffer.open(QIODevice::ReadWrite);
161 QDataStream propsStream(&dataBuffer);
162 propsStream << *m_propertyValues;
163 dataBuffer.seek(0);
164
165 stream.writeCharacters(dataBuffer.data().toHex());
166
167 stream.writeEndElement();
168 }
169
170
177 setValue(Color, QVariant::fromValue(newColor));
178 }
179
180
187 setValue(Selected, newValue);
188 }
189
190
197 setValue(ShowLabel, newValue);
198 }
199
200
209 QList<TargetBodyDisplayProperties *> displays = senderToData(sender());
210
211 bool value = getValue(ShowLabel).toBool();
212 value = !value;
213
215 foreach (display, displays) {
216 display->setShowLabel(value);
217 }
218 }
219
220
229 m_displayProperties = displayProperties;
230 }
231
232
244 const QString &localName, const QString &qName, const QXmlAttributes &atts) {
245 if (XmlStackedHandler::startElement(namespaceURI, localName, qName, atts)) {
246 if (localName == "displayProperties") {
247 QString displayName = atts.value("displayName");
248
249 if (!displayName.isEmpty()) {
250 m_displayProperties->setDisplayName(displayName);
251 }
252 }
253 }
254
255 return true;
256 }
257
258
270 m_hexData += ch;
271
272 return XmlStackedHandler::characters(ch);
273 }
274
275
276
289 const QString &localName, const QString &qName) {
290 if (localName == "displayProperties") {
291 QByteArray hexValues(m_hexData.toLatin1());
292 QDataStream valuesStream(QByteArray::fromHex(hexValues));
293 valuesStream >> *m_displayProperties->m_propertyValues;
294 }
295
296 return XmlStackedHandler::endElement(namespaceURI, localName, qName);
297 }
298
299
300
310 if ((*m_propertyValues)[prop] != value) {
311 (*m_propertyValues)[prop] = value;
312
313 if (supports(prop)) {
314 emit propertyChanged(this);
315 }
316 }
317 }
318
319
329 QList<TargetBodyDisplayProperties *> TargetBodyDisplayProperties::senderToData(
330 QObject *senderObj) {
331 QList<TargetBodyDisplayProperties *> data;
332
333 if (senderObj) {
334 QAction *caller = (QAction *)senderObj;
335 QVariant callerData = caller->data();
336
337 if (callerData.canConvert< QList<TargetBodyDisplayProperties *> >() ) {
338 data = callerData.value< QList<TargetBodyDisplayProperties *> >();
339 }
340 }
341
342 return data;
343 }
344
345
346}
This class is designed to serialize QColor in a human-readable form.
Definition Color.h:26
QString displayName() const
Returns the display name.
File name manipulation and expansion.
Definition FileName.h:100
The main project for ipce.
Definition Project.h:289
Process an XML file containing information about a WorkOrder.
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
This overrides the parent startElement function in XmlStackedHandler so the parser can handle an XML ...
XmlHandler(TargetBodyDisplayProperties *displayProperties)
Constructor for the XmlHandler class.
virtual bool characters(const QString &ch)
This implementation of a virtual function calls QXmlDefaultHandler::characters(QString &ch) which in ...
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
The XML reader invokes this method at the end of every element in the XML document.
This is the GUI communication mechanism for target body objects.
Property
This is a list of properties and actions that are possible.
@ Selected
The selection state of this control net (bool)
@ None
Null display property for bit-flag purposes.
@ ShowLabel
True if the control net should show its display name (bool)
Property m_propertiesUsed
This indicated whether any widgets with this DisplayProperties is using a particular property.
void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const
Saves this object to an XML file.
TargetBodyDisplayProperties(QString displayName, QObject *parent=NULL)
TargetBodyDisplayProperties constructor.
static QList< TargetBodyDisplayProperties * > senderToData(QObject *sender)
Return display properties associated with a slot.
void toggleShowLabel()
Change the visibility of the display name.
bool supports(Property prop)
Support for this may come later.
QVariant getValue(Property prop) const
Get a property's associated data.
QMap< int, QVariant > * m_propertyValues
This is a map from Property to value – the reason I use an int is so Qt knows how to serialize this Q...
void setColor(QColor newColor)
Change the color associated with this target.
void setShowLabel(bool)
Change the visibility of the display name associated with this target.
static QColor randomColor()
Creates and returns a random color for the initial color of the footprint polygon.
void setSelected(bool)
Change the selected state associated with this target.
void addSupport(Property prop)
Call this with every property you support, otherwise they will not communicate properly between widge...
void setValue(Property prop, QVariant value)
This is the generic mutator for properties.
Manage a stack of content handlers for reading XML files.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16