Isis 3 Developer Reference
ShapeList.h
Go to the documentation of this file.
1 #ifndef ShapeList_H
2 #define ShapeList_H
3 
4 #include <QDebug>
5 #include <QObject>
6 #include <QList>
7 #include <QMetaType>
8 
9 #include "Shape.h"
10 #include "ShapeDisplayProperties.h"
11 #include "SerialNumberList.h"
12 #include "WorkOrder.h"
13 #include "XmlStackedHandler.h"
14 
15 class QStringList;
16 class QXmlStreamWriter;
17 
18 namespace Isis {
19  class FileName;
20  class XmlStackedHandlerReader;
21 
33  class ShapeList : public QObject, public QList<Shape *> {
34  Q_OBJECT
35 
36  public:
37  ShapeList(QString name, QString path, QObject *parent = NULL);
38  explicit ShapeList(QObject *parent = NULL);
39  explicit ShapeList(QList<Shape *>, QObject *parent = NULL);
40  explicit ShapeList(Project *project,
41  XmlStackedHandlerReader *xmlReader, QObject *parent = NULL);
42  explicit ShapeList(QStringList &);
43  ShapeList(const ShapeList &);
44  ~ShapeList();
45 
47 
48  // These are overridden (-ish) in order to add notifications to the list changing
49  void append(Shape * const & value);
50  void append(const QList<Shape *> &value);
51 
52  void clear();
53 
54  iterator erase(iterator pos);
55  iterator erase(iterator begin, iterator end);
56 
57  void insert(int i, Shape * const & value);
58  iterator insert(iterator before, Shape * const & value);
59 
60  void prepend(Shape * const & value);
61  void push_back(Shape * const & value);
62  void push_front(Shape * const & value);
63  int removeAll(Shape * const & value);
64  void removeAt(int i);
65  void removeFirst();
66  void removeLast();
67  bool removeOne(Shape * const & value);
68  void swap(QList<Shape *> &other);
69  Shape *takeAt(int i);
70  Shape *takeFirst();
71  Shape *takeLast();
72 
73  ShapeList &operator+=(const QList<Shape *> &other);
74  ShapeList &operator+=(Shape * const &other);
75  ShapeList &operator<<(const QList<Shape *> &other);
76  ShapeList &operator<<(Shape * const &other);
77  ShapeList &operator=(const QList<Shape *> &rhs);
78 
79  // This is our own assignment, but it needs to notify just like the operator=(QList)
80  ShapeList &operator=(const ShapeList &rhs);
81 
82  // Done overriding (-ish)
83 
84  void setName(QString newName);
85  void setPath(QString newPath);
86 
87  QString name() const;
88  QString path() const;
89 
90  void deleteFromDisk(Project *project);
91  void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
92 
93 
94  signals:
95  void countChanged(int newCount);
96 
97  private:
105  class XmlHandler : public XmlStackedHandler {
106  public:
107  XmlHandler(ShapeList *shapeList, Project *project);
108 
109  virtual bool startElement(const QString &namespaceURI, const QString &localName,
110  const QString &qName, const QXmlAttributes &atts);
111  virtual bool endElement(const QString &namespaceURI, const QString &localName,
112  const QString &qName);
113 
114  private:
115  Q_DISABLE_COPY(XmlHandler);
116 
120  ShapeList *m_shapeList;
124  Project *m_project;
125  };
126 
127 
137  class CopyShapeDataFunctor : public std::unary_function<Shape * const &, void *> {
138  public:
139  CopyShapeDataFunctor(const Project *project, FileName newProjectRoot);
140  CopyShapeDataFunctor(const CopyShapeDataFunctor &other);
141  ~CopyShapeDataFunctor();
142 
143  void *operator()(Shape * const &shapeToCopy);
144 
145  CopyShapeDataFunctor &operator=(const CopyShapeDataFunctor &rhs);
146 
147  private:
151  const Project *m_project;
155  FileName m_newProjectRoot;
156  };
157 
158  private slots:
159 
160  private:
164  QString m_name;
165 
176  QString m_path;
177  };
178 
179 }
180 
182 
183 #endif
ShapeList & operator+=(const QList< Shape *> &other)
Appends a list of shapes to the end of the shape list.
Definition: ShapeList.cpp:433
Internalizes a list of shapes and allows for operations on the entire list.
Definition: ShapeList.h:33
QString path() const
Get the path to the shapes in the shape list (relative to project root).
Definition: ShapeList.cpp:580
The main project for ipce.
Definition: Project.h:289
void countChanged(int newCount)
ShapeList & operator<<(const QList< Shape *> &other)
Appends a list of shapes to the end of the shape list.
Definition: ShapeList.cpp:471
File name manipulation and expansion.
Definition: FileName.h:116
void prepend(Shape *const &value)
Inserts an shape at the beginning of the shape list.
Definition: ShapeList.cpp:254
void deleteFromDisk(Project *project)
Delete all of the contained Shapes from disk.
Definition: ShapeList.cpp:592
~ShapeList()
Destructor.
Definition: ShapeList.cpp:120
void setPath(QString newPath)
Set the relative path (from the project root) to this shape list&#39;s folder.
Definition: ShapeList.cpp:559
void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const
Convert this shape list into XML format for saving/restoring capabilities.
Definition: ShapeList.cpp:629
void setName(QString newName)
Set the human-readable name of this shape list.
Definition: ShapeList.cpp:548
void clear()
Clears the shape list.
Definition: ShapeList.cpp:171
void removeLast()
Removes the shape at the end of the shape list.
Definition: ShapeList.cpp:337
void removeFirst()
Removes the shape at the front of the shape list.
Definition: ShapeList.cpp:326
ShapeList & operator=(const QList< Shape *> &rhs)
Assigns another list of shapes to the shape list.
Definition: ShapeList.cpp:508
void swap(QList< Shape *> &other)
Swaps the shape list with another list of shapes.
Definition: ShapeList.cpp:370
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
void removeAt(int i)
Removes the shape at an index.
Definition: ShapeList.cpp:315
void append(Shape *const &value)
Appends an shape to the shape list.
Definition: ShapeList.cpp:147
XML Handler that parses XMLs in a stack-oriented way.
Definition: XmlStackedHandler.h:112
SerialNumberList serialNumberList()
Creates a SerialNumberList from the shape list.
Definition: ShapeList.cpp:129
ShapeList(QString name, QString path, QObject *parent=NULL)
Creates an shape list from an shape list name and path (does not read Shapes).
Definition: ShapeList.cpp:49
Q_DECLARE_METATYPE(Isis::ShapeList *)
void push_back(Shape *const &value)
Appends an shape to the end of the shape list.
Definition: ShapeList.cpp:268
bool removeOne(Shape *const &value)
Removes the first occurance of an shape.
Definition: ShapeList.cpp:352
This represents a shape in a project-based GUI interface.
Definition: Shape.h:78
Shape * takeFirst()
Removes and returns the first shape.
Definition: ShapeList.cpp:402
Shape * takeLast()
Removes and returns the last shape.
Definition: ShapeList.cpp:416
Definition: BoxcarCachingAlgorithm.h:29
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
QString name() const
Get the human-readable name of this shape list.
Definition: ShapeList.cpp:569
Serial Number list generator.
Definition: SerialNumberList.h:80
Manage a stack of content handlers for reading XML files.
Definition: XmlStackedHandlerReader.h:25
void insert(int i, Shape *const &value)
Inserts an shape into the shape list at an index.
Definition: ShapeList.cpp:223
int removeAll(Shape *const &value)
Removes all occurances of an shape.
Definition: ShapeList.cpp:297
Shape * takeAt(int i)
Removes the shape at an index and returns it.
Definition: ShapeList.cpp:388
void push_front(Shape *const &value)
Prepends an shape to the beginning of the shape list.
Definition: ShapeList.cpp:282
iterator erase(iterator pos)
Erases a single shape from the shape list.
Definition: ShapeList.cpp:189