Isis 3 Programmer Reference
ControlList.h
1#ifndef ControlList_H
2#define ControlList_H
3
10/* SPDX-License-Identifier: CC0-1.0 */
11
12#include <QDebug>
13#include <QList>
14#include <QMetaType>
15#include <QObject>
16
17#include "Control.h"
18#include "ControlDisplayProperties.h"
19#include "XmlStackedHandler.h"
20
21class QStringList;
22class QXmlStreamWriter;
23
24namespace Isis {
25 class FileName;
26 class XmlStackedHandlerReader;
27
44 class ControlList : public QObject, public QList<Control *> {
45 Q_OBJECT
46
47 public:
48
49 ControlList(QString name, QString path, QObject *parent = NULL);
50 explicit ControlList(QObject *parent = NULL);
51 explicit ControlList(QList<Control *>, QObject *parent = NULL);
52 explicit ControlList(Project *project, XmlStackedHandlerReader *xmlReader,
53 QObject *parent = NULL);
54 explicit ControlList(QStringList &);
55 ControlList(const ControlList &);
57
58 // These are overridden (-ish) in order to add notifications to the list changing
59 void append(Control * const &value);
60 void append(const QList<Control *> &value);
61
62 void clear();
63
64 iterator erase(iterator pos);
65 iterator erase(iterator begin, iterator end);
66
67 void insert(int i, Control * const &value);
68 iterator insert(iterator before, Control * const &value);
69
70 void prepend(Control * const &value);
71 void push_back(Control * const &value);
72 void push_front(Control * const &value);
73 int removeAll(Control * const &value);
74 void removeAt(int i);
75 void removeFirst();
76 void removeLast();
77 bool removeOne(Control * const &value);
78 void swap(QList<Control *> &other);
79 Control *takeAt(int i);
82
83 ControlList &operator+=(const QList<Control *> &other);
84 ControlList &operator+=(Control * const &other);
85 ControlList &operator<<(const QList<Control *> &other);
86 ControlList &operator<<(Control * const &other);
87 ControlList &operator=(const QList<Control *> &rhs);
88
89 // This is our own assignment, but it needs to notify just like the operator=(QList)
91
92 // Done overriding (-ish)
93
94
95 QList<QAction *> supportedActions(Project *project = NULL);
96 bool allSupport(ControlDisplayProperties::Property prop);
97
98 void setName(QString newName);
99 void setPath(QString newPath);
100
101 QString name() const;
102 QString path() const;
103
104 void deleteFromDisk(Project *project);
105 void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;
106
107
108 signals:
109 void countChanged(int newCount);
110 void deletingList(ControlList *list);
111
112 private:
113
114
126 class CopyControlDataFunctor : public std::function<void *(Control * const &)> {
127 public:
128 CopyControlDataFunctor(const Project *project, FileName newProjectRoot);
131
132 void *operator()(Control * const &controlToCopy);
133
135
136 private:
139 };
140
153 public:
154 XmlHandler(ControlList *controlList, Project *project);
155
156 virtual bool startElement(const QString &namespaceURI, const QString &localName,
157 const QString &qName, const QXmlAttributes &atts);
158 virtual bool endElement(const QString &namespaceURI, const QString &localName,
159 const QString &qName);
160
161 private:
162 Q_DISABLE_COPY(XmlHandler);
163
166 };
167
168
169 private:
170 QString m_name;
171
182 QString m_path;
183 };
184}
185
186Q_DECLARE_METATYPE(Isis::ControlList *);
187
188#endif
Property
This is a list of properties and actions that are possible.
This represents an ISIS control net in a project-based GUI interface.
Definition Control.h:66
This functor is used for copying the control nets between two projects quickly.
CopyControlDataFunctor & operator=(const CopyControlDataFunctor &rhs)
CopyControlDataFunctor assignment operator.
~CopyControlDataFunctor()
CopyControlDataFunctor destructor.
void * operator()(Control *const &controlToCopy)
Copies the Control from one project to another.
const Project * m_project
Project to copy the control list to.
FileName m_newProjectRoot
The filename of the destination project's root.
CopyControlDataFunctor(const Project *project, FileName newProjectRoot)
CopyControlDataFunctor constructor.
Nested class used to write the ControlList object information to an XML file for the purposes of savi...
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
Handle an XML end element.
Project * m_project
Project that contains the control list.
XmlHandler(ControlList *controlList, Project *project)
Create an XML Handler (reader/writer) that can populate the ControlList class data.
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
Handle an XML start element.
ControlList * m_controlList
Control list to be read or written.
Maintains a list of Controls so that control nets can easily be copied from one Project to another,...
Definition ControlList.h:44
void deleteFromDisk(Project *project)
Delete all of the contained Controls from disk.
void removeLast()
Removes the last control pointer from the control list.
iterator erase(iterator pos)
Erases a control pointer from the control list at the specified position.
void append(Control *const &value)
Appends a control pointer to the control list.
~ControlList()
Destructor.
void push_back(Control *const &value)
Equivalent to append(value)
ControlList & operator+=(const QList< Control * > &other)
Appends control pointers from the other list to this control list.
void insert(int i, Control *const &value)
Inserts a control pointer at the specified position in the control list.
QString path() const
Get the path to these controls in the control list (relative to project root).
QString name() const
Get the human-readable name of this control list.
void setName(QString newName)
Set the human-readable name of this control list.
void removeAt(int i)
Removes the control pointer at the specified index.
bool removeOne(Control *const &value)
Removes the first occurence of the control pointer from the control list.
void push_front(Control *const &value)
Equivalent to prepend(value)
Control * takeAt(int i)
Remove the control pointer at the specified index and returns it.
Control * takeFirst()
Removes the first control pointer from the control list and returns it.
ControlList & operator=(const QList< Control * > &rhs)
Assigns another list of control pointers to this control list.
int removeAll(Control *const &value)
Removes all occurences of the control pointer in the control list.
void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const
Convert this control list into XML format for saving/restoring capabilities.
void setPath(QString newPath)
Set the relative path (from the project root) to this control list's folder.
void prepend(Control *const &value)
Prepends a control pointer to the control list.
QString m_name
Name of the ControlList.
ControlList & operator<<(const QList< Control * > &other)
Appends a list of other control pointers to this control list.
void swap(QList< Control * > &other)
Swaps this control list's control pointers with the other list of control pointers.
void clear()
Clears the control list.
QString m_path
This stores the directory name that contains the controls in this control list.
Control * takeLast()
Removes the last control pointer from the control list and returns it.
void removeFirst()
Removes the first control pointer from the control list.
ControlList(QString name, QString path, QObject *parent=NULL)
Create an control list from a control list name and path (does not read Controls).
File name manipulation and expansion.
Definition FileName.h:100
The main project for ipce.
Definition Project.h:289
XML Handler that parses XMLs in a stack-oriented way.
Manage a stack of content handlers for reading XML files.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16