summaryrefslogtreecommitdiffstats
path: root/src/document.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/document.h')
-rw-r--r--src/document.h243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/document.h b/src/document.h
new file mode 100644
index 0000000..eb465ad
--- /dev/null
+++ b/src/document.h
@@ -0,0 +1,243 @@
+/***************************************************************************
+ * 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 DOCUMENT_H
+#define DOCUMENT_H
+
+#include <kurl.h>
+#include <qguardedptr.h>
+
+class DCOPObject;
+class Document;
+class DocumentIface;
+class KTechlab;
+class View;
+class ViewContainer;
+
+typedef QValueList<QGuardedPtr<View> > ViewList;
+
+/**
+@author David Saxton
+*/
+class Document : public QObject
+{
+Q_OBJECT
+public:
+ enum DocumentType
+ {
+ dt_none, // Used to denote document type not known / specified / etc, when appropriate
+ dt_flowcode,
+ dt_circuit,
+ dt_mechanics,
+ dt_text,
+ dt_pinMapEditor
+ };
+ Document( const QString &caption, KTechlab *ktechlab, const char *name = 0 );
+ virtual ~Document();
+ /**
+ * If the user has created a new document from the new file dialog, and
+ * wants to add it to the project, then this must wait until this file is
+ * given a url. Set this to true to add the file to the active project when
+ * it is first saved.
+ */
+ void setAddToProjectOnSave( bool add ) { m_bAddToProjectOnSave = add; }
+ /**
+ * Caption of document, e.g. "Untitled 2"
+ */
+ QString caption() const { return m_caption; }
+ /**
+ * Set the caption of the document, to be displayed in the tab bar when
+ * active
+ */
+ void setCaption( const QString &caption );
+ /**
+ * Return the dcop object for this document
+ */
+ DCOPObject * dcopObject() const;
+ /**
+ * Returns the dcop suffix for this document - a unique ID for the current
+ * app session. DCOP name will be "Document#dcopID()"
+ */
+ unsigned dcopID() const { return m_dcopID; }
+ /**
+ * Sets the dcop suffix. The DCOP object for this document will be renamed.
+ * @see dcopID
+ */
+ void setDCOPID( unsigned id );
+ /**
+ * Returns the active view, which is the last view to be used to edit in
+ */
+ View *activeView() const { return p_activeView; }
+ ViewList viewList() const { return m_viewList; }
+ /**
+ * Returns the type of document.
+ * @see Document::DocumentType
+ */
+ DocumentType type() const { return m_type; }
+ /**
+ * Returns the number of open views.
+ */
+ uint numberOfViews() const { return m_viewList.size(); }
+ /**
+ * Create a view that will display the document data. In all reimplemented
+ * functions, you must call handleNewView after creating the view, so that
+ * the appropriate slots, pointers, etc can all be initialised.
+ */
+ virtual View *createView( ViewContainer *viewContainer, uint viewAreaId, const char *name = 0l ) = 0;
+ /**
+ * Returns the url of the file that the Document refers to
+ */
+ const KURL& url() const { return m_url; }
+ /**
+ * Prompts the user for a url, with the given types for the filter.
+ * If user accepts, returns true, and set the url to the new url.
+ */
+ bool getURL( const QString &types );
+ /**
+ * Attempts to open a url, and returns true if succesful.
+ * You must reinherit this function.
+ */
+ virtual bool openURL( const KURL &url ) = 0;
+ /**
+ * Sets the url of the file that this Document refers to
+ */
+ void setURL( const KURL &url );
+ /**
+ * Sets whether the file is modified or not. Will emit modifiedStateChanged
+ * if state changes. You must emit this signal if you reinherit this
+ */
+ virtual void setModified( bool modified );
+ /**
+ * Returns the modification state since last-save.
+ */
+ virtual bool isModified() const { return b_modified; }
+ /**
+ * Returns true if undo is avilable.
+ */
+ virtual bool isUndoAvailable() const { return false; }
+ /**
+ * Returns true if redo is avilable.
+ */
+ virtual bool isRedoAvailable() const { return false; }
+ /**
+ * Saves the file to a new name.
+ */
+ virtual void fileSaveAs() = 0;
+ /**
+ * Attempts to close the file without saving, prompting the user if the
+ * file has been modified. If succesful, calls QObject::deleteLater(), and
+ * returns true (otherwise returns false).
+ */
+ virtual bool fileClose();
+ /**
+ * Saves the file.
+ */
+ virtual void fileSave() = 0;
+ /**
+ * Prints the file.
+ */
+ virtual void print() {};
+ /**
+ * Cuts whatever is selected.
+ */
+ virtual void cut() {};
+ /**
+ * Copies whatever is selected.
+ */
+ virtual void copy() {};
+ /**
+ * Attempts to paste whatever is in the clipboard.
+ */
+ virtual void paste() {};
+ /**
+ * Undo the last operation. You should reinherit this function.
+ */
+ virtual void undo() {};
+ /**
+ * Redo the undone last operation. You should reinherit this function.
+ */
+ virtual void redo() {};
+ /**
+ * Selects everything in the view.
+ */
+ virtual void selectAll() {};
+
+ virtual void convertToMicrobe() {};
+ virtual void convertToHex() {};
+ virtual void convertToPIC() {};
+ virtual void convertToAssembly() {};
+ virtual void debugRun() {};
+ virtual void debugInterrupt() {};
+ virtual void debugStop() {};
+ virtual void debugStep() {};
+ KTechlab *ktechlab() const { return p_ktechlab; }
+ bool isDeleted() const { return m_bDeleted; }
+
+protected slots:
+ /**
+ * Called when the user changes the configuration.
+ */
+ virtual void slotUpdateConfiguration() {};
+
+#define protected public
+signals:
+ /**
+ * Emitted when an operation has been performed that
+ * has caused the stack of available undo/redo operations to
+ * have changed
+ */
+ void undoRedoStateChanged();
+#undef protected
+
+signals:
+ /**
+ * Emitted when the Document goes from modified to unmodified,
+ * or vice-versa
+ */
+ void modifiedStateChanged();
+ /**
+ * Emitted when the name of the file that the Document refers to
+ * is changed.
+ */
+ void fileNameChanged( const KURL &url );
+
+ void viewFocused( View *view );
+ void viewUnfocused();
+
+private slots:
+ void slotViewDestroyed( QObject *obj );
+ void slotViewFocused( View *view );
+
+protected:
+ /**
+ * You must call this function after creating a new view
+ */
+ virtual void handleNewView( View *view );
+
+ bool b_modified;
+ KTechlab *p_ktechlab;
+ QGuardedPtr<View> p_activeView;
+ DocumentType m_type;
+ ViewList m_viewList;
+ QString m_caption;
+ bool m_bAddToProjectOnSave;
+ DocumentIface * m_pDocumentIface;
+ unsigned m_dcopID;
+ unsigned m_nextViewID;
+
+ // Set to true by the document et subclasses destructors, used to avoid
+ // doing stuff that might lead to crash when being deleted.
+ bool m_bDeleted;
+
+private:
+ KURL m_url;
+};
+
+#endif