File indexing completed on 2024-12-01 09:50:25
0001 #ifndef DEBUGDOCUMENT_H 0002 #define DEBUGDOCUMENT_H 0003 0004 #include <QHash> 0005 #include <QObject> 0006 #include <QVector> 0007 #include <QStringList> 0008 0009 #include "misc/shared.h" 0010 0011 namespace KJS 0012 { 0013 class Interpreter; 0014 } 0015 0016 namespace KTextEditor 0017 { 0018 class Document; 0019 class View; 0020 class Editor; 0021 } 0022 0023 namespace KJSDebugger 0024 { 0025 0026 class DebugDocument : public QObject, public khtml::Shared<DebugDocument> 0027 { 0028 Q_OBJECT 0029 public: 0030 typedef SharedPtr<DebugDocument> Ptr; 0031 0032 DebugDocument(KJS::Interpreter *interp, const QString &url, 0033 int sourceId, int baseLine, const QString &source); 0034 ~DebugDocument(); 0035 0036 QString name() const; 0037 QString url() const; 0038 int sid() const; 0039 0040 KTextEditor::Document *viewerDocument(); 0041 KTextEditor::View *viewerView(); 0042 0043 // Marks the document as being discarded for reload, so that new data should be set here. 0044 void markReload(); 0045 bool isMarkedReload() const; 0046 0047 void reloaded(int sourceId, const QString &source); 0048 0049 void setBreakpoint(int lineNumber); 0050 void removeBreakpoint(int lineNumber); 0051 bool hasBreakpoint(int lineNumber); 0052 0053 // We keep track of whether documents have functions, since we can't discard 0054 // eval contexts that do 0055 bool hasFunctions(); 0056 void setHasFunctions(); 0057 0058 KJS::Interpreter *interpreter(); 0059 0060 int baseLine() const; 0061 int length() const; 0062 0063 Q_SIGNALS: 0064 void documentDestroyed(KJSDebugger::DebugDocument *); 0065 private: 0066 QString m_url; 0067 QString m_name; 0068 KJS::Interpreter *m_interpreter; 0069 0070 bool m_hasFunctions; 0071 0072 // This is set to true when we are rebuilding the document. 0073 // in that case, the UI might get undesired mark add/remove events, 0074 // and update the breakpoint set accordingly --- such as removing all of them 0075 // on clear. 0076 bool m_rebuilding; 0077 0078 bool m_reload; 0079 0080 int m_firstLine; 0081 int m_sourceId; 0082 QStringList m_sourceLines; 0083 QString m_md5; // empty if invalid/not computed. 0084 0085 void rebuildViewerDocument(); 0086 void setupViewerDocument(); 0087 0088 // We store breakpoints differently for scopes with URL 0089 // and without it. Those that have it are stored globally, 0090 // so that breakpoints persist across multiple visits of the 0091 // document. For eval scopes, we store them based on the MD5 0092 // of the source code. 0093 static QHash<QString, QVector<int> > *s_perUrlBreakPoints; 0094 static QHash<QString, QVector<int> > *s_perHashBreakPoints; 0095 0096 QVector<int> &breakpoints(); 0097 0098 KTextEditor::Document *m_kteDoc; 0099 KTextEditor::View *m_kteView; 0100 static KTextEditor::Editor *s_kate; 0101 static KTextEditor::Editor *kate(); 0102 }; 0103 0104 } 0105 0106 #endif