khtml Library API Documentation

kjs_debugwin.h

00001 /* 00002 * This file is part of the KDE libraries 00003 * Copyright (C) 2000-2001 Harri Porten (porten@kde.org) 00004 * Copyright (C) 2001,2003 Peter Kelly (pmk@post.com) 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Library General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Library General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Library General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 */ 00020 00021 #ifndef _KJS_DEBUGGER_H_ 00022 #define _KJS_DEBUGGER_H_ 00023 00024 #include <qglobal.h> 00025 00026 #define KJS_DEBUGGER 00027 00028 #ifdef KJS_DEBUGGER 00029 00030 #include <qwidget.h> 00031 #include <qmultilineedit.h> 00032 #include <qpixmap.h> 00033 #include <qptrlist.h> 00034 #include <qptrstack.h> 00035 #include <qcheckbox.h> 00036 #include <kdialogbase.h> 00037 #include <kmainwindow.h> 00038 #include <qscrollview.h> 00039 00040 #include <kjs/debugger.h> 00041 00042 #include "dom/dom_misc.h" 00043 00044 class QListBox; 00045 class QComboBox; 00046 class KActionCollection; 00047 class KAction; 00048 00049 namespace KJS { 00050 class FunctionImp; 00051 class List; 00052 class Interpreter; 00053 class KJSDebugWin; 00054 00055 class SourceFile : public DOM::DomShared 00056 { 00057 public: 00058 SourceFile(QString u, QString c, Interpreter *interp) 00059 : url(u), code(c), interpreter(interp) {} 00060 QString getCode(); 00061 QString url; 00062 QString code; 00063 Interpreter *interpreter; 00064 }; 00065 00081 class SourceFragment 00082 { 00083 public: 00084 SourceFragment(int sid, int bl, int el, SourceFile *sf); 00085 ~SourceFragment(); 00086 00087 int sourceId; 00088 int baseLine; 00089 int errorLine; 00090 SourceFile *sourceFile; 00091 }; 00092 00093 class KJSErrorDialog : public KDialogBase { 00094 Q_OBJECT 00095 public: 00096 KJSErrorDialog(QWidget *parent, const QString& errorMessage, bool showDebug); 00097 virtual ~KJSErrorDialog(); 00098 00099 bool debugSelected() const { return m_debugSelected; } 00100 bool dontShowAgain() const { return m_dontShowAgainCb->isChecked(); } 00101 00102 protected slots: 00103 virtual void slotUser1(); 00104 00105 private: 00106 QCheckBox *m_dontShowAgainCb; 00107 bool m_debugSelected; 00108 }; 00109 00110 class EvalMultiLineEdit : public QMultiLineEdit { 00111 Q_OBJECT 00112 public: 00113 EvalMultiLineEdit(QWidget *parent); 00114 const QString & code() const { return m_code; } 00115 protected: 00116 void keyPressEvent(QKeyEvent * e); 00117 private: 00118 QString m_code; 00119 }; 00120 00121 class SourceDisplay : public QScrollView { 00122 Q_OBJECT 00123 public: 00124 SourceDisplay(KJSDebugWin *debugWin, QWidget *parent, const char *name = 0); 00125 ~SourceDisplay(); 00126 00127 void setSource(SourceFile *sourceFile); 00128 void setCurrentLine(int lineno, bool doCenter = true); 00129 00130 signals: 00131 void lineDoubleClicked(int lineno); 00132 00133 protected: 00134 virtual void contentsMousePressEvent(QMouseEvent *e); 00135 virtual void showEvent(QShowEvent *); 00136 virtual void drawContents(QPainter *p, int clipx, int clipy, int clipw, int cliph); 00137 00138 QString m_source; 00139 int m_currentLine; 00140 SourceFile *m_sourceFile; 00141 QStringList m_lines; 00142 00143 KJSDebugWin *m_debugWin; 00144 QFont m_font; 00145 QPixmap m_breakpointIcon; 00146 }; 00147 00157 class KJSDebugWin : public KMainWindow, public Debugger, public KInstance 00158 { 00159 Q_OBJECT 00160 friend class SourceDisplay; 00161 public: 00162 KJSDebugWin(QWidget *parent=0, const char *name=0); 00163 virtual ~KJSDebugWin(); 00164 00165 static KJSDebugWin *createInstance(); 00166 static void destroyInstance(); 00167 static KJSDebugWin *debugWindow() { return kjs_html_debugger; } 00168 00169 enum Mode { Disabled = 0, // No break on any statements 00170 Next = 1, // Will break on next statement in current context 00171 Step = 2, // Will break on next statement in current or deeper context 00172 Continue = 3, // Will continue until next breakpoint 00173 Stop = 4 // The script will stop execution completely, 00174 // as soon as possible 00175 }; 00176 00177 void setSourceLine(int sourceId, int lineno); 00178 void setNextSourceInfo(QString url, int baseLine); 00179 void sourceChanged(Interpreter *interpreter, QString url); 00180 bool inSession() const { return !m_execStates.isEmpty(); } 00181 void setMode(Mode m) { m_mode = m; } 00182 void clearInterpreter(Interpreter *interpreter); 00183 ExecState *getExecState() const { return m_execStates.top(); } 00184 00185 // functions overridden from KJS:Debugger 00186 bool sourceParsed(ExecState *exec, int sourceId, 00187 const UString &source, int errorLine); 00188 bool sourceUnused(ExecState * exec, int sourceId); 00189 bool exception(ExecState *exec, const Value &value, bool inTryCatch); 00190 bool atStatement(ExecState *exec); 00191 bool enterContext(ExecState *exec); 00192 bool exitContext(ExecState *exec, const Completion &completion); 00193 00194 public slots: 00195 void slotNext(); 00196 void slotStep(); 00197 void slotContinue(); 00198 void slotStop(); 00199 void slotBreakNext(); 00200 void slotToggleBreakpoint(int lineno); 00201 void slotShowFrame(int frameno); 00202 void slotSourceSelected(int sourceSelIndex); 00203 void slotEval(); 00204 00205 protected: 00206 00207 void closeEvent(QCloseEvent *e); 00208 bool eventFilter(QObject *obj, QEvent *evt); 00209 void disableOtherWindows(); 00210 void enableOtherWindows(); 00211 00212 private: 00213 00214 SourceFile *getSourceFile(Interpreter *interpreter, QString url); 00215 void setSourceFile(Interpreter *interpreter, QString url, SourceFile *sourceFile); 00216 void removeSourceFile(Interpreter *interpreter, QString url); 00217 00218 void checkBreak(ExecState *exec); 00219 void enterSession(ExecState *exec); 00220 void leaveSession(); 00221 void displaySourceFile(SourceFile *sourceFile, bool forceRefresh); 00222 void updateContextList(); 00223 00224 QString contextStr(const Context &ctx); 00225 00226 struct Breakpoint { 00227 int sourceId; 00228 int lineno; 00229 }; 00230 Breakpoint *m_breakpoints; 00231 int m_breakpointCount; 00232 bool setBreakpoint(int sourceId, int lineno); 00233 bool deleteBreakpoint(int sourceId, int lineno); 00234 bool haveBreakpoint(SourceFile *sourceFile, int line0, int line1); 00235 bool haveBreakpoint(int sourceId, int line0, int line1) const { 00236 for (int i = 0; i < m_breakpointCount; i++) { 00237 if (m_breakpoints[i].sourceId == sourceId && 00238 m_breakpoints[i].lineno >= line0 && 00239 m_breakpoints[i].lineno <= line1) 00240 return true; 00241 } 00242 return false; 00243 } 00244 00245 SourceFile *m_curSourceFile; 00246 Mode m_mode; 00247 QString m_nextSourceUrl; 00248 int m_nextSourceBaseLine; 00249 QPtrStack<ExecState> m_execStates; 00250 ExecState **m_execs; 00251 int m_execsCount; 00252 int m_execsAlloc; 00253 int m_steppingDepth; 00254 00255 QMap<QString,SourceFile*> m_sourceFiles; /* maps url->SourceFile */ 00256 QMap<int,SourceFragment*> m_sourceFragments; /* maps SourceId->SourceFragment */ 00257 QPtrList<SourceFile> m_sourceSelFiles; /* maps combobox index->SourceFile */ 00258 00259 KActionCollection *m_actionCollection; 00260 QPixmap m_stopIcon; 00261 QPixmap m_emptyIcon; 00262 SourceDisplay *m_sourceDisplay; 00263 QListBox *m_contextList; 00264 00265 KAction *m_stepAction; 00266 KAction *m_nextAction; 00267 KAction *m_continueAction; 00268 KAction *m_stopAction; 00269 KAction *m_breakAction; 00270 00271 QComboBox *m_sourceSel; 00272 EvalMultiLineEdit *m_evalEdit; 00273 int m_evalDepth; 00274 00275 static KJSDebugWin *kjs_html_debugger; 00276 }; 00277 00278 } // namespace 00279 00280 #endif // KJS_DEBUGGER 00281 00282 #endif // _KJS_DEBUGGER_H_
KDE Logo
This file is part of the documentation for khtml Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 10 18:56:14 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003