diff options
Diffstat (limited to 'src/itemdocumentdata.h')
-rw-r--r-- | src/itemdocumentdata.h | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/src/itemdocumentdata.h b/src/itemdocumentdata.h new file mode 100644 index 0000000..40c92a6 --- /dev/null +++ b/src/itemdocumentdata.h @@ -0,0 +1,242 @@ +/*************************************************************************** + * Copyright (C) 2005 by David Saxton * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#ifndef ITEMDOCUMENTDATA_H +#define ITEMDOCUMENTDATA_H + +#include "item.h" +#include "microsettings.h" + +#include <qdom.h> + +class Connector; +class ECSubcircuit; +class KURL; +class Node; +class PinMapping; + +typedef QValueList<QGuardedPtr<Connector> > ConnectorList; +typedef QValueList<QGuardedPtr<Item> > ItemList; +typedef QValueList<QGuardedPtr<Node> > NodeList; +typedef QMap< QString, PinMapping > PinMappingMap; + +typedef QValueList<QPoint> QPointList; +typedef QMap<QString, bool> BoolMap; +typedef QMap<QString, double> DoubleMap; +typedef QMap<QString, int> IntMap; +typedef QMap<QString, QColor> QColorMap; +typedef QMap<QString, QString> QStringMap; +typedef QMap<QString, QBitArray> QBitArrayMap; + + +class ItemData +{ + public: + ItemData(); + + QString type; + double x; + double y; + int z; + QRect size; + bool setSize; + int orientation; // used for flowparts, should be set to -1 if not used. + double angleDegrees; + bool flipped; + BoolMap buttonMap; + IntMap sliderMap; + QString parentId; + BoolMap dataBool; + DoubleMap dataNumber; + QColorMap dataColor; + QStringMap dataString; + QBitArrayMap dataRaw; +}; +typedef QMap< QString, ItemData > ItemDataMap; + + +class ConnectorData +{ + public: + ConnectorData(); + + QPointList route; + bool manualRoute; + + bool startNodeIsChild; + bool endNodeIsChild; + + QString startNodeCId; + QString endNodeCId; + + QString startNodeParent; + QString endNodeParent; + + QString startNodeId; + QString endNodeId; +}; +typedef QMap< QString, ConnectorData > ConnectorDataMap; + + +class NodeData +{ + public: + NodeData(); + + double x; + double y; +}; +typedef QMap< QString, NodeData > NodeDataMap; + + +class PinData +{ + public: + PinData(); + + PinSettings::pin_type type; + PinSettings::pin_state state; +}; +typedef QMap< QString, PinData > PinDataMap; + + +class MicroData +{ + public: + MicroData(); + void reset(); + + QString id; + PinDataMap pinMap; + QStringMap variableMap; + PinMappingMap pinMappings; +}; + + +/** +This class encapsulates all or part of an ItemDocument. It is used for writing +the document to file / reading from file, as well as for the clipboard and +undo/redo system. +@author David Saxton +*/ +class ItemDocumentData +{ + public: + ItemDocumentData( uint documentType ); + ~ItemDocumentData(); + /** + * Erases / resets all data to defaults + */ + void reset(); + /** + * Read in data from a saved file. Any existing data in this class will + * be deleted first. + * @returns true iff successful + */ + bool loadData( const KURL &url ); + /** + * Write the data to the given file. + * @returns true iff successful + */ + bool saveData( const KURL &url ); + /** + * Returns the xml used for describing the data + */ + QString toXML(); + /** + * Restore the document from the given xml + * @return true if successful + */ + bool fromXML( const QString &xml ); + /** + * Saves the document to the data + */ + void saveDocumentState( ItemDocument *itemDocument ); + /** + * Restores a document to the state stored in this class + */ + void restoreDocument( ItemDocument *itemDocument ); + /** + * Merges the stuff stored here with the given document. If this is + * being used for e.g. pasting, you should call generateUniqueIDs() + * @param selectNew if true then the newly created items & connectors will be selected + */ + void mergeWithDocument( ItemDocument *itemDocument, bool selectNew ); + /** + * Replaces the IDs of everything with unique ones for the document. + * Used in pasting. + */ + void generateUniqueIDs( ItemDocument *itemDocument ); + /** + * Move all the items, connectors, nodes, etc by the given amount + */ + void translateContents( int dx, int dy ); + /** + * Returns the document type. + * @see Document::DocumentType + */ + uint documentType() const { return m_documentType; } + + //BEGIN functions for adding data + void setMicroData( const MicroData &data ); + void addItems( const ItemList &itemList ); + void addConnectors( const ConnectorList &connectorList ); + void addNodes( const NodeList &nodeList ); + + /** + * Add the given ItemData to the stored data + */ + void addItemData( ItemData itemData, QString id ); + /** + * Add the given ConnectorData to the stored data + */ + void addConnectorData( ConnectorData connectorData, QString id ); + /** + * Add the given NodeData to the stored data + */ + void addNodeData( NodeData nodeData, QString id ); + //END functions for adding data + + //BEGIN functions for returning strings for saving to xml + QString documentTypeString() const; + QString revisionString() const; + //END functions for returning strings for saving to xml + + protected: + //BEGIN functions for generating QDomElements + QDomElement microDataToElement( QDomDocument &doc ); + QDomElement itemDataToElement( QDomDocument &doc, const ItemData &itemData ); + QDomElement nodeDataToElement( QDomDocument &doc, const NodeData &nodeData ); + QDomElement connectorDataToElement( QDomDocument &doc, const ConnectorData &connectorData ); + //END functions for generating QDomElements + + //BEGIN functions for reading QDomElements to stored data + void elementToMicroData( QDomElement element ); + void elementToItemData( QDomElement element ); + void elementToNodeData( QDomElement element ); + void elementToConnectorData( QDomElement element ); + //END functions for reading QDomElements to stored data + + ItemDataMap m_itemDataMap; + ConnectorDataMap m_connectorDataMap; + NodeDataMap m_nodeDataMap; + MicroData m_microData; + uint m_documentType; // See Document::DocumentType +}; + + +class SubcircuitData : public ItemDocumentData +{ + public: + SubcircuitData(); + void initECSubcircuit( ECSubcircuit * ecSubcircuit ); +}; + +#endif |