diff options
Diffstat (limited to 'src/docmanager.h')
-rw-r--r-- | src/docmanager.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/docmanager.h b/src/docmanager.h new file mode 100644 index 0000000..0ba300e --- /dev/null +++ b/src/docmanager.h @@ -0,0 +1,169 @@ +/*************************************************************************** + * 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 DOCMANAGER_H +#define DOCMANAGER_H + +#include <kurl.h> +#include <qguardedptr.h> + +class CircuitDocument; +class DocManager; +class DocManagerIface; +class Document; +class FlowCodeDocument; +class KTechlab; +class MechanicsDocument; +class TextDocument; +class View; +class ViewArea; + +class KAction; + +typedef QValueList<Document*> DocumentList; +typedef QMap< KURL, Document* > URLDocumentMap; +typedef QValueList<KAction*> KActionList; + +/** +@author David Saxton +*/ +class DocManager : public QObject +{ +Q_OBJECT +public: + static DocManager * self( KTechlab * ktechlab = 0l ); + ~DocManager(); + + /** + * Attempts to close all open documents, returning true if successful + */ + bool closeAll(); + /** + * Goes to the given line in the given text file (if the file exists) + */ + void gotoTextLine( const KURL &url, int line ); + /** + * Attempts to open the document at the given url. + * @param ViewArea if non-null, will open the new view into the ViewArea + */ + Document* openURL( const KURL &url, ViewArea *viewArea = 0l ); + /** + * Returns the focused View + */ + View *getFocusedView() const { return p_focusedView; } + /** + * Returns the focused Document (the document of the focused view) + */ + Document *getFocusedDocument() const; + /** + * Get a unique name, e.g. Untitled (circuit) - n" depending on the types + * of Document and whether it is the first one or not + * @param type Document::DocumentType - type of Document + */ + QString untitledName( int type ); + /** + * Checks to see if a document with the given URL is already open, and + * returns a pointer to that Document if so - otherwises returns null + * @see associateDocument + */ + Document *findDocument( const KURL &url ) const; + /** + * Associates a url with a pointer to a document. When findFile is called + * with the given url, it will return a pointer to this document if it still + * exists. + * @see findDocument + */ + void associateDocument( const KURL &url, Document *document ); + /** + * Gives the given document focus. If it has no open views, one will be + * created for it if viewAreaForNew is non-null + */ + void giveDocumentFocus( Document * toFocus, ViewArea * viewAreaForNew = 0l ); + void removeDocumentAssociations( Document *document ); + void disableContextActions(); + +public slots: + /** + * Creates an empty text document (with an open view) + */ + TextDocument *createTextDocument(); + /** + * Creates an empty circuit document (with an open view), and shows the + * component selector. + */ + CircuitDocument *createCircuitDocument(); + /** + * Creates an empty flowcode document (with an open view), and shows the + * flowpart selector. + */ + FlowCodeDocument *createFlowCodeDocument(); + /** + * Creates an empty mechanics document (with an open view), and shows the + * mechanics selector. + */ + MechanicsDocument *createMechanicsDocument(); + +signals: + /** + * Emitted when a file is successfully opened + */ + void fileOpened( const KURL &url ); + +protected slots: + /** + * Does the appropriate enabling / disabling of actions, connections, etc + */ + void slotViewFocused( View *view ); + /** + * Does the appropriate enabling / disabling of actions, connections, etc + */ + void slotViewUnfocused(); + void documentDestroyed( QObject *obj ); + +protected: + /** + * This function should be called after creating a new document to add it + * to the appropriate lists and connect it up as appropriate + */ + void handleNewDocument( Document *document, ViewArea *viewArea = 0l ); + /** + * Takes the document, creates a new view and shoves it in a new + * ViewContainer + */ + View *createNewView( Document *document, ViewArea *viewArea = 0l ); + CircuitDocument *openCircuitFile( const KURL &url, ViewArea *viewArea = 0l ); + FlowCodeDocument *openFlowCodeFile( const KURL &url, ViewArea *viewArea = 0l ); + MechanicsDocument *openMechanicsFile( const KURL &url, ViewArea *viewArea = 0l ); + TextDocument *openTextFile( const KURL &url, ViewArea *viewArea = 0l ); + + DocumentList m_documentList; + URLDocumentMap m_associatedDocuments; + + // Keeps track of how many + // new files have been made + // for the purpose of making + // titles of the form Untitled (n) + int m_countCircuit; + int m_countFlowCode; + int m_countMechanics; + int m_countOther; + + KTechlab * const p_ktechlab; + QGuardedPtr<View> p_focusedView; + QGuardedPtr<Document> p_connectedDocument; + DocManagerIface *m_pIface; + unsigned m_nextDocumentID; + +private: + DocManager( KTechlab *ktechlab ); + static DocManager * m_pSelf; +}; + +#endif |