Isis 3 Programmer Reference
Isis::Control Class Reference

This represents an ISIS control net in a project-based GUI interface. More...

#include <Control.h>

Inheritance diagram for Isis::Control:
Inheritance graph
Collaboration diagram for Isis::Control:
Collaboration graph

Classes

class  XmlHandler
 Nested class used to write the Control object information to an XML file for the purpose of saving and restoring the state of the project. More...
 

Public Slots

void updateFileName (Project *)
 Change the on-disk file name for this control to be where the control ought to be in the given project.
 
void closeControlNet ()
 Cleans up the ControlNet pointer.
 

Public Member Functions

 Control (QString cnetFileName, QObject *parent=0)
 Create a Control from control net located on disk.
 
 Control (Project *project, QString cnetFileName, QObject *parent=0)
 Create a Control from control net located on disk associated with a Project.
 
 Control (ControlNet *controlNet, QString cnetFileName, QObject *parent=0)
 Create a Control from a control network that has already been created and read from disk.
 
 Control (FileName cnetFolder, XmlStackedHandlerReader *xmlReader, QObject *parent=0)
 Construct this control from XML.
 
 ~Control ()
 Destroys Control object.
 
ControlNetcontrolNet ()
 Open and return a pointer to the ControlNet for this Control.
 
void openControlNet ()
 Sets the ControlNet from the control net file name provided in the constructor.
 
ControlDisplayPropertiesdisplayProperties ()
 Access a pointer to the display properties for the control network.
 
const ControlDisplayPropertiesdisplayProperties () const
 Access a const pointer to the display properties for the control network.
 
QString fileName () const
 Access the name of the control network file associated with this Control.
 
QString id () const
 Access the unique ID associated with this Control.
 
bool isModified ()
 @description Has this control been modified?
 
void setModified (bool modified=true)
 @description Sets the modification state of this control.
 
bool write ()
 @description Write control net to disk.
 
void save (QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const
 Method to write this Control object's member data to an XML stream.
 
void copyToNewProjectRoot (const Project *project, FileName newProjectRoot)
 Copies the files of the given Project to the given location.
 
void deleteFromDisk ()
 Delete the control net from disk.
 

Public Attributes

ControlNetm_controlNet
 A pointer to the ControlNet object associated with this Control object.
 

Private Member Functions

 Control (const Control &other)
 
Controloperator= (const Control &rhs)
 

Private Attributes

bool m_modified
 
ControlDisplayPropertiesm_displayProperties
 Contains the display properties for this Control object.
 
Projectm_project
 
QString m_fileName
 Project associated with this control.
 
QUuid * m_id
 A unique ID for this Control.
 

Detailed Description

This represents an ISIS control net in a project-based GUI interface.

This encapsulates ideas about a control net such as it's filename and display properties.

Author
2012-06-12 Ken Edmundson and Tracie Sucharski
History

2012-08-02 Kimberly Oyama - Added comments to some of the methods and member variables.

2012-09-11 Tracie Sucharski - Added new constructor that takes a ControlNet *.

2015-10-14 Jeffrey Covington - Declared Control * as a Qt metatype for use with QVariant. References #3949

2016-06-02 Jeannie Backer - Updated documentation. Fixes #3949

2017-08-02 Cole Neuabuer - Added new constructor. This constructor takes a Project and a filename of a controlnet. This was added because the Control object needs to assign a mutex when the control net is opened and by doing this internally we can Close control nets and not have to track whether this step has happened Fixes #5026

2017-08-11 Cole Neuabuer - Added try catch throw to make it so importing an invalid control net throws some type of error/warning Fixes #5064

2017-11-09 Tyler Wilson - Modified the copyToNewProjectRoot function so that the control net is copied to it's new location like a binary file, instead of being recreated from scratch by calling it's write method. Fixes #5212.

2017-12-20 Tracie Sucharski - In copyToNewProjectRoot use string comparison to compare project roots. References #4804, #4849.

2018-01-19 Tracie Sucharski - Do not copy control unless the project root has changed. References #5212.

2018-03-30 Tracie Sucharski - Added setModified and is Modified methods to keep track of the modification state of the control net. Add write method to write the control net to disk. This write method should be called by ipce classes instead of calling the ControlNet::Write directly so that control knows the state of the control net. If a project is performing a "Save As", and there is a modified active control,the cnet is written out to the new location, it is not save in the old project location.

Definition at line 66 of file Control.h.

Constructor & Destructor Documentation

◆ Control() [1/4]

Isis::Control::Control ( QString cNetFileName,
QObject * parent = 0 )
explicit

Create a Control from control net located on disk.

Parameters
cNetFileNameThe name of the control net on disk
parentThe Qt-relationship parent

Definition at line 35 of file Control.cpp.

References m_controlNet, m_displayProperties, m_fileName, m_id, openControlNet(), and Isis::IException::Programmer.

◆ Control() [2/4]

Isis::Control::Control ( Project * project,
QString cNetFileName,
QObject * parent = 0 )
explicit

Create a Control from control net located on disk associated with a Project.

Parameters
cNetFileNameThe name of the control net on disk
parentThe Qt-relationship parent

Definition at line 64 of file Control.cpp.

References m_controlNet, m_displayProperties, m_fileName, and m_id.

◆ Control() [3/4]

Isis::Control::Control ( ControlNet * controlNet,
QString cnetFileName,
QObject * parent = 0 )
explicit

Create a Control from a control network that has already been created and read from disk.

Parameters
controlNetThe actual control network
cnetFileNameThe name of the control net on disk
parentThe Qt-relationship parent

Definition at line 87 of file Control.cpp.

References controlNet(), m_controlNet, m_displayProperties, m_fileName, and m_id.

◆ Control() [4/4]

Isis::Control::Control ( FileName cnetFolder,
XmlStackedHandlerReader * xmlReader,
QObject * parent = 0 )

Construct this control from XML.

Parameters
cnetFolderLocation of control xml
xmlReaderAn XML reader that's up to an <control> tag.
parentThe Qt-relationship parent

Definition at line 111 of file Control.cpp.

References m_controlNet, m_displayProperties, and m_id.

◆ ~Control()

Isis::Control::~Control ( )

Destroys Control object.

Definition at line 126 of file Control.cpp.

References m_controlNet, m_displayProperties, and m_id.

Member Function Documentation

◆ closeControlNet

void Isis::Control::closeControlNet ( )
slot

Cleans up the ControlNet pointer.

This method should be called once there is no more need for this network because the OS will limit how many of these can be open.

Definition at line 214 of file Control.cpp.

References m_controlNet.

Referenced by Isis::Directory::cleanupCnetEditorViewWidgets(), Isis::ImportControlNetWorkOrder::CreateControlsFunctor::operator()(), and updateFileName().

◆ controlNet()

◆ copyToNewProjectRoot()

void Isis::Control::copyToNewProjectRoot ( const Project * project,
FileName newProjectRoot )

Copies the files of the given Project to the given location.

Parameters
projectA pointer to the Project.
newProjectRootThe name of the new root directory where the project will be copied.

Definition at line 294 of file Control.cpp.

References Isis::Project::cnetRoot(), controlNet(), Isis::FileName::dir(), Isis::IException::Io, isModified(), m_fileName, Isis::FileName::name(), Isis::Project::projectRoot(), setModified(), Isis::FileName::toString(), Isis::toString(), write(), and Isis::ControlNet::Write().

◆ deleteFromDisk()

void Isis::Control::deleteFromDisk ( )

Delete the control net from disk.

The control net will no longer be accessible until you call updateFileName().

Exceptions
IException::Io"Could not remove file."

Definition at line 334 of file Control.cpp.

References Isis::IException::Io, and m_fileName.

Referenced by Isis::ControlList::deleteFromDisk().

◆ displayProperties() [1/2]

ControlDisplayProperties * Isis::Control::displayProperties ( )

Access a pointer to the display properties for the control network.

Returns
ControlDisplayProperties * A pointer to the display properties.

Definition at line 252 of file Control.cpp.

References m_displayProperties.

Referenced by Isis::Directory::addCnetEditorView(), and Isis::ExportControlNetWorkOrder::setupExecution().

◆ displayProperties() [2/2]

const ControlDisplayProperties * Isis::Control::displayProperties ( ) const

Access a const pointer to the display properties for the control network.

Returns
ControlDisplayProperties * A pointer to the display properties.

Definition at line 262 of file Control.cpp.

References m_displayProperties.

◆ fileName()

◆ id()

QString Isis::Control::id ( ) const

Access the unique ID associated with this Control.

Returns
QString The Control ID.

Definition at line 282 of file Control.cpp.

References m_id.

Referenced by Isis::Project::addControl(), Isis::ProjectItemModel::onControlAdded(), and Isis::ExportControlNetWorkOrder::setupExecution().

◆ isModified()

bool Isis::Control::isModified ( )

@description Has this control been modified?

Returns
bool Has this control been modified?

Definition at line 229 of file Control.cpp.

Referenced by copyToNewProjectRoot(), and Isis::Project::save().

◆ openControlNet()

void Isis::Control::openControlNet ( )

Sets the ControlNet from the control net file name provided in the constructor.

Exceptions
IException::Programmer"Error opening control net."

Definition at line 165 of file Control.cpp.

References m_controlNet, m_fileName, Isis::Project::mutex(), Isis::IException::Programmer, and Isis::ControlNet::SetMutex().

Referenced by Control(), and controlNet().

◆ save()

void Isis::Control::save ( QXmlStreamWriter & stream,
const Project * project,
FileName newProjectRoot ) const

Method to write this Control object's member data to an XML stream.

Parameters
streamThe stream to which the Control will be saved.
projectThe Project to which this Control will be added.
newProjectRootThe location of the project root directory.

Definition at line 373 of file Control.cpp.

References m_displayProperties, m_fileName, and m_id.

Referenced by Isis::BundleSolutionInfo::save(), and Isis::ControlList::save().

◆ setModified()

void Isis::Control::setModified ( bool modified = true)

@description Sets the modification state of this control.

This is needed for now since many classes make changes to the control net contained in this object, but the control does not know the state of the control net. TODO: Change this class to always know the state of the control Net.

Definition at line 241 of file Control.cpp.

Referenced by copyToNewProjectRoot(), and Isis::CnetEditorWidget::setCnetModified().

◆ updateFileName

void Isis::Control::updateFileName ( Project * project)
slot

Change the on-disk file name for this control to be where the control ought to be in the given project.

Parameters
projectThe project that this control is stored in

Definition at line 355 of file Control.cpp.

References closeControlNet(), Isis::Project::cnetRoot(), Isis::FileName::dir(), m_fileName, and Isis::FileName::name().

◆ write()

bool Isis::Control::write ( )

@description Write control net to disk.

This method is used instead of calling ControlNet::Write directly so that Control knows the modification state of the control net. Note that if there is not a control net opened, there should no be any changes to write.

Returns
bool Returns false if there is not a control net open to write
Exceptions
IException::Programmer"Cannot write control net to disk"

Definition at line 191 of file Control.cpp.

References fileName(), m_controlNet, Isis::IException::Programmer, and Isis::ControlNet::Write().

Referenced by copyToNewProjectRoot(), and Isis::Project::save().

Member Data Documentation

◆ m_controlNet

ControlNet* Isis::Control::m_controlNet

A pointer to the ControlNet object associated with this Control object.

Definition at line 69 of file Control.h.

Referenced by closeControlNet(), Control(), Control(), Control(), Control(), controlNet(), openControlNet(), write(), and ~Control().

◆ m_displayProperties

ControlDisplayProperties* Isis::Control::m_displayProperties
private

Contains the display properties for this Control object.

Definition at line 127 of file Control.h.

Referenced by Control(), Control(), Control(), Control(), displayProperties(), displayProperties(), save(), and ~Control().

◆ m_fileName

QString Isis::Control::m_fileName
private

Project associated with this control.

File name of the control net associated with this control.

Definition at line 130 of file Control.h.

Referenced by Control(), Control(), Control(), copyToNewProjectRoot(), deleteFromDisk(), fileName(), openControlNet(), save(), and updateFileName().

◆ m_id

QUuid* Isis::Control::m_id
private

A unique ID for this Control.

(useful for others to reference this Control when saving to disk).

Definition at line 136 of file Control.h.

Referenced by Control(), Control(), Control(), Control(), id(), save(), and ~Control().

◆ m_modified

bool Isis::Control::m_modified
private

Definition at line 125 of file Control.h.

◆ m_project

Project* Isis::Control::m_project
private

Definition at line 129 of file Control.h.


The documentation for this class was generated from the following files: