Isis 3 Programmer Reference
TargetBodyDisplayProperties.cpp
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 
17 namespace Isis {
25  DisplayProperties(displayName, parent) {
26 
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) {
47 
48  xmlReader->pushContentHandler(new XmlHandler(this));
49  }
50 
51 
56  }
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 
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 
288  bool TargetBodyDisplayProperties::XmlHandler::endElement(const QString &namespaceURI,
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 
309  void TargetBodyDisplayProperties::setValue(Property prop, QVariant value) {
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 
330  QObject *senderObj) {
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 }
True if the control net should show its display name (bool)
This class is designed to serialize QColor in a human-readable form.
Definition: Color.h:20
The main project for ipce.
Definition: Project.h:289
File name manipulation and expansion.
Definition: FileName.h:116
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 ...
static QColor randomColor()
Creates and returns a random color for the initial color of the footprint polygon.
Property
This is a list of properties and actions that are possible.
This is the GUI communication mechanism for target body objects.
void setValue(Property prop, QVariant value)
This is the generic mutator for properties.
bool supports(Property prop)
Support for this may come later.
QString displayName() const
Returns the display name.
void setShowLabel(bool)
Change the visibility of the display name associated with this target.
Property m_propertiesUsed
This indicated whether any widgets with this DisplayProperties is using a particular property...
void addSupport(Property prop)
Convert to Pvl for project files.
Null display property for bit-flag purposes.
The selection state of this control net (bool)
virtual void pushContentHandler(XmlStackedHandler *newHandler)
Push a contentHandler and maybe continue parsing...
void toggleShowLabel()
Change the visibility of the display name.
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 ...
virtual ~TargetBodyDisplayProperties()
The destructor.
void setColor(QColor newColor)
Change the color associated with this target.
QVariant getValue(Property prop) const
Get a property&#39;s associated data.
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
TargetBodyDisplayProperties(QString displayName, QObject *parent=NULL)
TargetBodyDisplayProperties constructor.
XmlHandler(TargetBodyDisplayProperties *displayProperties)
Constructor for the XmlHandler class.
void setSelected(bool)
Change the selected state associated with this target.
void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const
Saves this object to an XML file.
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.
Process an XML file containing information about a WorkOrder.
Manage a stack of content handlers for reading XML files.
virtual bool characters(const QString &ch)
This implementation of a virtual function calls QXmlDefaultHandler::characters(QString &ch) which in ...
static QList< TargetBodyDisplayProperties * > senderToData(QObject *sender)
Return display properties associated with a slot.