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 
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 }
Isis::Color
This class is designed to serialize QColor in a human-readable form.
Definition: Color.h:26
Isis::TargetBodyDisplayProperties
This is the GUI communication mechanism for target body objects.
Definition: TargetBodyDisplayProperties.h:63
QList
This is free and unencumbered software released into the public domain.
Definition: BoxcarCachingAlgorithm.h:13
Isis::TargetBodyDisplayProperties::getValue
QVariant getValue(Property prop) const
Get a property's associated data.
Definition: TargetBodyDisplayProperties.cpp:119
Isis::TargetBodyDisplayProperties::TargetBodyDisplayProperties
TargetBodyDisplayProperties(QString displayName, QObject *parent=NULL)
TargetBodyDisplayProperties constructor.
Definition: TargetBodyDisplayProperties.cpp:24
Isis::FileName
File name manipulation and expansion.
Definition: FileName.h:100
Isis::XmlStackedHandlerReader::pushContentHandler
virtual void pushContentHandler(XmlStackedHandler *newHandler)
Push a contentHandler and maybe continue parsing...
Definition: XmlStackedHandlerReader.cpp:55
Isis::TargetBodyDisplayProperties::setColor
void setColor(QColor newColor)
Change the color associated with this target.
Definition: TargetBodyDisplayProperties.cpp:176
Isis::DisplayProperties
Definition: DisplayProperties.h:34
Isis::TargetBodyDisplayProperties::senderToData
static QList< TargetBodyDisplayProperties * > senderToData(QObject *sender)
Return display properties associated with a slot.
Definition: TargetBodyDisplayProperties.cpp:329
Isis::TargetBodyDisplayProperties::~TargetBodyDisplayProperties
virtual ~TargetBodyDisplayProperties()
The destructor.
Definition: TargetBodyDisplayProperties.cpp:55
Isis::TargetBodyDisplayProperties::ShowLabel
@ ShowLabel
True if the control net should show its display name (bool)
Definition: TargetBodyDisplayProperties.h:77
Isis::XmlStackedHandlerReader
Manage a stack of content handlers for reading XML files.
Definition: XmlStackedHandlerReader.h:30
Isis::TargetBodyDisplayProperties::Selected
@ Selected
The selection state of this control net (bool)
Definition: TargetBodyDisplayProperties.h:75
Isis::TargetBodyDisplayProperties::setSelected
void setSelected(bool)
Change the selected state associated with this target.
Definition: TargetBodyDisplayProperties.cpp:186
Isis::Project
The main project for ipce.
Definition: Project.h:289
Isis::TargetBodyDisplayProperties::save
void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const
Saves this object to an XML file.
Definition: TargetBodyDisplayProperties.cpp:152
Isis::TargetBodyDisplayProperties::m_propertyValues
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...
Definition: TargetBodyDisplayProperties.h:154
Isis::TargetBodyDisplayProperties::Property
Property
This is a list of properties and actions that are possible.
Definition: TargetBodyDisplayProperties.h:69
Isis::DisplayProperties::displayName
QString displayName() const
Returns the display name.
Definition: DisplayProperties.cpp:88
Isis::TargetBodyDisplayProperties::XmlHandler::XmlHandler
XmlHandler(TargetBodyDisplayProperties *displayProperties)
Constructor for the XmlHandler class.
Definition: TargetBodyDisplayProperties.cpp:228
Isis::TargetBodyDisplayProperties::None
@ None
Null display property for bit-flag purposes.
Definition: TargetBodyDisplayProperties.h:71
Isis::TargetBodyDisplayProperties::XmlHandler
Process an XML file containing information about a WorkOrder.
Definition: TargetBodyDisplayProperties.h:117
Isis::TargetBodyDisplayProperties::XmlHandler::characters
virtual bool characters(const QString &ch)
This implementation of a virtual function calls QXmlDefaultHandler::characters(QString &ch) which in ...
Definition: TargetBodyDisplayProperties.cpp:269
Isis::TargetBodyDisplayProperties::randomColor
static QColor randomColor()
Creates and returns a random color for the initial color of the footprint polygon.
Definition: TargetBodyDisplayProperties.cpp:129
Isis::TargetBodyDisplayProperties::setValue
void setValue(Property prop, QVariant value)
This is the generic mutator for properties.
Definition: TargetBodyDisplayProperties.cpp:309
Isis::TargetBodyDisplayProperties::addSupport
void addSupport(Property prop)
Call this with every property you support, otherwise they will not communicate properly between widge...
Definition: TargetBodyDisplayProperties.cpp:95
Isis::TargetBodyDisplayProperties::supports
bool supports(Property prop)
Support for this may come later.
Definition: TargetBodyDisplayProperties.cpp:108
QMap< int, QVariant >
Isis::TargetBodyDisplayProperties::XmlHandler::endElement
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.
Definition: TargetBodyDisplayProperties.cpp:288
Isis::TargetBodyDisplayProperties::m_propertiesUsed
Property m_propertiesUsed
This indicated whether any widgets with this DisplayProperties is using a particular property.
Definition: TargetBodyDisplayProperties.h:148
Isis::TargetBodyDisplayProperties::XmlHandler::startElement
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 ...
Definition: TargetBodyDisplayProperties.cpp:243
QObject
QAction
Isis::TargetBodyDisplayProperties::setShowLabel
void setShowLabel(bool)
Change the visibility of the display name associated with this target.
Definition: TargetBodyDisplayProperties.cpp:196
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::TargetBodyDisplayProperties::toggleShowLabel
void toggleShowLabel()
Change the visibility of the display name.
Definition: TargetBodyDisplayProperties.cpp:208