diff options
Diffstat (limited to 'src/textdocument.h')
-rw-r--r-- | src/textdocument.h | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/src/textdocument.h b/src/textdocument.h new file mode 100644 index 0000000..1876473 --- /dev/null +++ b/src/textdocument.h @@ -0,0 +1,245 @@ +/*************************************************************************** + * Copyright (C) 2004-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 TEXTDOCUMENT_H +#define TEXTDOCUMENT_H + +#include "config.h" +#include "document.h" + +#include <qguardedptr.h> + +#include <kate/document.h> + +class GpsimDebugger; +class SourceLine; +class TextView; + +typedef QValueList<int> IntList; + +/** +@author David Saxton +*/ +class TextDocument : public Document +{ +Q_OBJECT +public: + ~TextDocument(); + + enum CodeType + { + ct_unknown, + ct_asm, + ct_c, + ct_hex, + ct_microbe + }; + + enum MarkType { + Bookmark = KTextEditor::MarkInterface::markType01, + Breakpoint = KTextEditor::MarkInterface::markType02, + ActiveBreakpoint = KTextEditor::MarkInterface::markType03, + ReachedBreakpoint = KTextEditor::MarkInterface::markType04, + DisabledBreakpoint = KTextEditor::MarkInterface::markType05, + ExecutionPoint = KTextEditor::MarkInterface::markType06 + }; + + virtual View *createView( ViewContainer *viewContainer, uint viewAreaId, const char *name = 0l ); + + /** + * Attempts to construct a new TextDocument object and returns a pointer to + * it if successful, or 0 if it failed. + * @returns pointer to constructed object, or 0 if there was a problem + */ + static TextDocument *constructTextDocument( const QString& caption, KTechlab *parent, const char *name = 0L ); + /** + * @returns the guessed code type that this file is + */ + CodeType guessedCodeType() const { return m_guessedCodeType; } + /** + * Set the given lines as all bookmarks + */ + void setBookmarks( const IntList &lines ); + /** + * Set the given line to a bookmark (or not) + */ + void setBookmark( uint line, bool isBookmark ); + /** + * @return List of bookmarks + */ + IntList bookmarkList() const; + + /** + * Set the given lines as all breakpoints + */ + void setBreakpoints( const IntList &lines ); + /** + * Set the given line to a breakpoint (or not ) + */ + void setBreakpoint( uint line, bool isBreakpoint ); + /** + * @return List of breakpoints + */ + IntList breakpointList() const; + +#ifndef NO_GPSIM + /** + * Attach ourselves to the given debugger. + * @param ownDebugger whether we have permission to delete it. + */ + void setDebugger( GpsimDebugger * debugger, bool ownDebugger ); + GpsimDebugger * debugger() const { return m_pDebugger; } + bool ownDebugger() const { return m_bOwnDebugger; } + /** + * Returns true if the debugger is running (this includes when we are in + * stepping mode) + */ + bool debuggerIsRunning() const; + /** + * Returns true if we are in stepping more + */ + bool debuggerIsStepping() const; + QString debugFile() const { return m_debugFile; } + virtual void clearBreakpoints(); +#endif + + virtual bool openURL(const KURL& url); + void fileSave(const KURL& url); + /** + * Set the document to the given text, making the document unmodified, and + * reseting the undo/redo history/ + * @param asInitial whether the next should be treated as if we had just + * opened the file (no undo/redo history, and unmodified). + */ + void setText( const QString & text, bool asInitial ); + /** + * Attempts to guess the filetype from the file extension, and load an + * appropriate highlighting/etc + * @param allowDisable If false, will simply keep the old scheme if nothing + * appropriate is found + */ + void guessScheme( bool allowDisable = true ); + + virtual void fileSave() { fileSave(url()); } + virtual void fileSaveAs(); + virtual void print(); + virtual void setModified( bool modified ); + + Kate::View* createKateView( QWidget *parent, const char *name = 0l ); + + virtual void undo(); + virtual void redo(); + virtual void cut(); + virtual void copy(); + virtual void paste(); + + virtual bool isModified() const { return m_doc->isModified(); } + virtual bool isUndoAvailable() const { return (m_doc->undoCount() != 0); } + virtual bool isRedoAvailable() const { return (m_doc->redoCount() != 0); } + + void clearBookmarks(); + virtual bool fileClose(); + + static const QPixmap* inactiveBreakpointPixmap(); + static const QPixmap* activeBreakpointPixmap(); + static const QPixmap* reachedBreakpointPixmap(); + static const QPixmap* disabledBreakpointPixmap(); + static const QPixmap* executionPointPixmap(); + /** + * Returns a TextView pointer to the active TextView (if there is one) + */ + TextView *textView() const; + + enum ConvertToTarget + { + MicrobeOutput, // (not used) + AssemblyOutput, + HexOutput, + PICOutput + }; + + Kate::Document * kateDocument() const { return m_doc; } + +public slots: + /** + * @param target as ConvertToTarget + */ + void slotConvertTo( int target ); + void convertToAssembly(); + void convertToHex(); + void convertToPIC(); + void formatAssembly(); + void debugRun(); + void debugInterrupt(); + void debugStep(); + void debugStepOver(); + void debugStepOut(); + void debugStop(); + void slotInitLanguage( CodeType type ); + /** + * Called when change line / toggle marks + */ + void slotUpdateMarksInfo(); + + void slotDebugSetCurrentLine( const SourceLine & line ); + /** + * Initialize the actions appropriate for when the debugger is running + * or stepping + */ + void slotInitDebugActions(); + +protected: + /** + * Returns a filepath with the editor's contents in. If the url of this file + * is non-empty (i.e. the user has already saved the file), then that url is + * returned. Otherwise, a temporary file with the given extension (ext) is + * created, and the location of this file is returned. + */ + QString outputFilePath( const QString &ext ); + void saveDone(); +#ifndef NO_GPSIM + /** + * Looks at the list of marks returned by Kate, and syncs them with the + * marks that we know about + */ + void syncBreakpoints(); + + int m_lastDebugLineAt; // Last line with a debug point reached mark + bool m_bLoadDebuggerAsHLL; +#endif + + Kate::Document *m_doc; + QGuardedPtr<TextDocument> m_pLastTextOutputTarget; + +private slots: + void setLastTextOutputTarget( TextDocument * target ); + void slotSyncModifiedStates(); + void slotCODCreationSucceeded(); + void slotCODCreationFailed(); + void slotDebuggerDestroyed(); + void slotBookmarkRequested(); + void slotSelectionmChanged(); + +private: + TextDocument( const QString& caption, KTechlab *parent, const char *name = 0L ); + bool m_constructorSuccessful; + CodeType m_guessedCodeType; + QPtrList<KAction> m_bookmarkActions; + +#ifndef NO_GPSIM + bool b_lockSyncBreakpoints; // Used to avoid calling syncMarks() when we are currently doing so + bool m_bOwnDebugger; + QGuardedPtr<GpsimDebugger> m_pDebugger; + QString m_symbolFile; + QString m_debugFile; +#endif +}; + +#endif |