// // C++ Interface: kxedocument // // Description: // // // Author: Adam Charytoniuk , (C) 2004 // // Copyright: See COPYING file that comes with this distribution // // #ifndef KXEDOCUMENT_H #define KXEDOCUMENT_H #include #include #include #include #include #define SCHEMA_NAMESPACE "http://www.w3.org/2001/XMLSchema-instance" #define SCHEMA_ATTRIBUTE "schemaLocation" #define SCHEMA_ATTRIBUTE_XSI "xsi:schemaLocation" class QString; class KCommand; /** @file */ /** @short Base class for documents in KXMLEditor. Stores XML document data which can be manipulated by KXMLEditor application. @author Adam Charytoniuk */ class KXEDocument : public QObject, public QDomDocument, public KXMLGUIClient { Q_OBJECT public: /** @short Constructor */ KXEDocument(QObject *parent=0, const char *name=0); /** @short Destructor */ ~KXEDocument(); /** @short Saves document into given file */ bool save(const QString &); /** @short Loads document from given file */ bool open(const QString &); /** @short Sets modification flag. Should be called after every operation done on the document content */ void setModified(bool value=true); /** @short Returns true if this document was modified and not saved yet */ bool isModified() {return m_bIsModified;} /** @short Changes document url */ void setURL(KURL url); /** @short Executes given command and adds it into internal document command history list @param pCmd pointer to KXECommand object which encapsulates required operations on a document content */ /** @short Notifies views about creating new element @param node newly created node */ void updateNodeCreated(const QDomNode & node); /** @short Notifies views about deleting node This should be called before given node from the document will be deleted. This will give a chanse to the views to remove that node visualization. @param node that is going to be deleted */ void updateNodeDeleted(const QDomNode & node); /** @short Notifies views about element properties changes Should be called after element name or element attributes are changed. @param domElement element that has changed */ void updateNodeChanged( const QDomElement & domElement ); /** @short Notifies views after change char. data properties Should be called after any kind of character data is changed (including texts, comments, .CDATA sections). @param node character data node that has changed */ void updateNodeChanged( const QDomCharacterData & node ) ; /** @short Notifies views after change proc. instr. properties Should be called after any processing intruction is changed. @param domProcInstr processing instruction that has changed */ void updateNodeChanged( const QDomProcessingInstruction &domProcInstr ); /** @short Notifies views after moving node Should be called if any node in the document was moved. @param node XML node that has been moved */ void updateNodeMoved( const QDomNode & node ); /** @short Removes spec. processing instruction from XML file. @param target name of the proc. instruction target @warning Removes processing instruction from DomDocument children node list only (no subnodes are modiified). @sa setSpecProcInstr() */ void removeSpecProcInstr(const QString &target); /** @short Adds or changes (if already exists) processing instruction. Processing instruction will be added as a child in QDomDocument object. @param target processing intruction target @param data processing intruction data @sa removeSpecProcInstr() */ virtual void setSpecProcInstr(const QString& target, const QString& data); /** @short Returns processing instruction located in QDomDocument. If given processing intruction is not found, null node is returned. @param target name of the processing instruction target. @sa setSpecProcInstr() */ QDomNode getSpecProcInstr(const QString& target); /** @short Attaches stylesheet to current XML file. If file is already attached to stylesheet, this attachment will be overriten. @param stylesheet url to stylesheet location @sa detachStylesheet() */ virtual void attachStylesheet(const KURL& stylesheet); /** @short Detaches stylesheet from current XML file. @sa attachStylesheet()*/ virtual void detachStylesheet(); /** Attaches schema to current XML file. If file is already attached to schema, this attachment will be overriten. @param schema url to schema location @sa detachSchema()*/ virtual void attachSchema(const KURL& schema); /** @short Detaches schema from current XML file. @sa attachSchema()*/ virtual void detachSchema(); /** @short prepares content of newly created document. The preparation will be done accordingly to settings. In addition, signal sigOpened() is emited to notify all views about the change.*/ virtual void newFile(); /** @short Inserts special proc.instruction into document. */ KCommand * actVersionEncoding(); /** @short Called on user's action response. Creates processing instruction with reference to specified stylesheet URI. */ KCommand * actAttachStylesheet(); /** @short Called on user's action response. */ KCommand * actDetachStylesheet(); /** @short Called on user's action response */ KCommand * actDetachSchema(); /** @short Called on user's action response */ KCommand * actAttachSchema(); private: QString m_strCompressedTarEntryName; /** Equals true if document was opened from compressed file */ bool m_bDocIsCompressed; /** @short Stores modification flag */ bool m_bIsModified; KURL m_url; signals: /** @short Emmited when document has a new content. This may happen in the following scenarios: - document was opened from the fille or URL, - document has modified big part of the content - document initialized it's content after creations @sa newFile() */ void sigOpened(); /** @short Emitted when document content have been changed. This allows to notify all attached views about that event.*/ void sigModified(bool value); void sigURLChanged(KURL url); /** @short Emitted when new node was added to document.*/ void sigNodeCreated(const QDomNode & node); /** @short Emitted everytime node was deleted from document.*/ void sigNodeDeleted(const QDomNode & node); /** @short Emitted everytime document element was changed .*/ void sigNodeChanged( const QDomElement & domElement ); /** @short Emitted everytime character data node was changed. This is the case for nodes like: - text, - comments, - CDATA sections, */ void sigNodeChanged( const QDomCharacterData & node ) ; /** @short Emitted everytime processing instruction in document was changed .*/ void sigNodeChanged( const QDomProcessingInstruction &domProcInstr ); /** @short Emitted everytime document node was moved was changed .*/ void sigNodeMoved( const QDomNode & node ); }; #endif