/*************************************************************************** * Copyright (C) 2005 by David Saxton * * david@bluehaze.org * * * * 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 class Connector; class ECSubcircuit; class KURL; class Node; class PinMapping; typedef TQValueList > ConnectorList; typedef TQValueList > ItemList; typedef TQValueList > NodeList; typedef TQMap< TQString, PinMapping > PinMappingMap; typedef TQValueList TQPointList; typedef TQMap BoolMap; typedef TQMap DoubleMap; typedef TQMap IntMap; typedef TQMap TQColorMap; typedef TQMap TQStringMap; typedef TQMap TQBitArrayMap; class ItemData { public: ItemData(); TQString type; double x; double y; int z; TQRect size; bool setSize; int orientation; // used for flowparts, should be set to -1 if not used. double angleDegrees; bool flipped; BoolMap buttonMap; IntMap sliderMap; TQString parentId; BoolMap dataBool; DoubleMap dataNumber; TQColorMap dataColor; TQStringMap dataString; TQBitArrayMap dataRaw; }; typedef TQMap< TQString, ItemData > ItemDataMap; class ConnectorData { public: ConnectorData(); TQPointList route; bool manualRoute; bool startNodeIsChild; bool endNodeIsChild; TQString startNodeCId; TQString endNodeCId; TQString startNodeParent; TQString endNodeParent; TQString startNodeId; TQString endNodeId; }; typedef TQMap< TQString, ConnectorData > ConnectorDataMap; class NodeData { public: NodeData(); double x; double y; }; typedef TQMap< TQString, NodeData > NodeDataMap; class PinData { public: PinData(); PinSettings::pin_type type; PinSettings::pin_state state; }; typedef TQMap< TQString, PinData > PinDataMap; class MicroData { public: MicroData(); void reset(); TQString id; PinDataMap pinMap; TQStringMap 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 */ TQString toXML(); /** * Restore the document from the given xml * @return true if successful */ bool fromXML( const TQString &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, TQString id ); /** * Add the given ConnectorData to the stored data */ void addConnectorData( ConnectorData connectorData, TQString id ); /** * Add the given NodeData to the stored data */ void addNodeData( NodeData nodeData, TQString id ); //END functions for adding data //BEGIN functions for returning strings for saving to xml TQString documentTypeString() const; TQString revisionString() const; //END functions for returning strings for saving to xml protected: //BEGIN functions for generating TQDomElements TQDomElement microDataToElement( TQDomDocument &doc ); TQDomElement itemDataToElement( TQDomDocument &doc, const ItemData &itemData ); TQDomElement nodeDataToElement( TQDomDocument &doc, const NodeData &nodeData ); TQDomElement connectorDataToElement( TQDomDocument &doc, const ConnectorData &connectorData ); //END functions for generating TQDomElements //BEGIN functions for reading TQDomElements to stored data void elementToMicroData( TQDomElement element ); void elementToItemData( TQDomElement element ); void elementToNodeData( TQDomElement element ); void elementToConnectorData( TQDomElement element ); //END functions for reading TQDomElements 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