You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktechlab/src/textdocument.h

250 lines
6.9 KiB

/***************************************************************************
* 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
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "document.h"
#include <tqguardedptr.h>
#include <kate/document.h>
class GpsimDebugger;
class SourceLine;
class TextView;
typedef TQValueList<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 TQString& 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;
TQString 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 TQString & 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( TQWidget *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 TQPixmap* inactiveBreakpointPixmap();
static const TQPixmap* activeBreakpointPixmap();
static const TQPixmap* reachedBreakpointPixmap();
static const TQPixmap* disabledBreakpointPixmap();
static const TQPixmap* 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.
*/
TQString outputFilePath( const TQString &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;
TQGuardedPtr<TextDocument> m_pLastTextOutputTarget;
private slots:
void setLastTextOutputTarget( TextDocument * target );
void slotSyncModifiedStates();
void slotCODCreationSucceeded();
void slotCODCreationFailed();
void slotDebuggerDestroyed();
void slotBookmarkRequested();
void slotSelectionmChanged();
private:
TextDocument( const TQString& caption, KTechlab *parent, const char *name = 0L );
bool m_constructorSuccessful;
CodeType m_guessedCodeType;
TQPtrList<TDEAction> m_bookmarkActions;
#ifndef NO_GPSIM
bool b_lockSyncBreakpoints; // Used to avoid calling syncMarks() when we are currently doing so
bool m_bOwnDebugger;
TQGuardedPtr<GpsimDebugger> m_pDebugger;
TQString m_symbolFile;
TQString m_debugFile;
#endif
};
#endif