summaryrefslogtreecommitdiffstats
path: root/languages/cpp/debugger/gdboutputwidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'languages/cpp/debugger/gdboutputwidget.h')
-rw-r--r--languages/cpp/debugger/gdboutputwidget.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/languages/cpp/debugger/gdboutputwidget.h b/languages/cpp/debugger/gdboutputwidget.h
new file mode 100644
index 00000000..ddf79823
--- /dev/null
+++ b/languages/cpp/debugger/gdboutputwidget.h
@@ -0,0 +1,137 @@
+// *************************************************************************
+// gdboutputwidget.cpp - description
+// -------------------
+// begin : 10th April 2003
+// copyright : (C) 2003 by John Birch
+// email : jbb@kdevelop.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 _GDBOUTPUTWIDGET_H_
+#define _GDBOUTPUTWIDGET_H_
+
+#include <qwidget.h>
+#include <qtextedit.h>
+#include <qtimer.h>
+#include <qstringlist.h>
+
+class KHistoryCombo;
+
+class QTextEdit;
+class QToolButton;
+class QDomElement;
+
+namespace GDBDebugger
+{
+
+class GDBOutputWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ GDBOutputWidget( QWidget *parent=0, const char *name=0 );
+ ~GDBOutputWidget();
+
+ void savePartialProjectSession(QDomElement* el);
+ void restorePartialProjectSession(const QDomElement* el);
+
+ void clear();
+
+public slots:
+ void slotInternalCommandStdout(const char* line);
+ void slotUserCommandStdout(const char* line);
+ void slotReceivedStderr(const char* line);
+ void slotDbgStatus (const QString &status, int statusFlag);
+
+ void slotGDBCmd();
+
+ void flushPending();
+
+protected:
+ virtual void focusInEvent(QFocusEvent *e);
+
+signals:
+ void userGDBCmd(const QString &cmd);
+ void breakInto();
+
+private:
+
+ QString html_escape(const QString& s);
+
+ void newStdoutLine(const QString& line, bool internal);
+
+ /** Arranges for 'line' to be shown to the user.
+ Adds 'line' to pendingOutput_ and makes sure
+ updateTimer_ is running. */
+ void showLine(const QString& line);
+
+ /** Makes 'l' no longer then 'max_size' by
+ removing excessive elements from the top.
+ */
+ void trimList(QStringList& l, unsigned max_size);
+
+ KHistoryCombo* m_userGDBCmdEditor;
+ QToolButton* m_Interrupt;
+ QTextEdit* m_gdbView;
+
+ void setShowInternalCommands(bool);
+ friend class OutputText;
+
+ /** The output from user commands only and from
+ all commands. We keep it here so that if we switch
+ "Show internal commands" on, we can show previous
+ internal commands.
+ */
+ QStringList userCommands_, allCommands_;
+ /** Same output, without any fancy formatting. Keeping it
+ here because I can't find any way to extract raw text,
+ without formatting, out of QTextEdit except for
+ selecting everything and calling 'copy()'. The latter
+ approach is just ugly. */
+ QStringList userCommandsRaw_, allCommandsRaw_;
+
+
+ /** For performance reasons, we don't immediately add new text
+ to QTExtEdit. Instead we add it to pendingOutput_ and
+ flush it on timer.
+ */
+ QString pendingOutput_;
+ QTimer updateTimer_;
+
+ bool showInternalCommands_;
+
+ int maxLines_;
+};
+
+/** Add popup menu specific to gdb output window to QTextEdit.
+*/
+class OutputText : public QTextEdit
+{
+ Q_OBJECT
+public:
+ OutputText(GDBOutputWidget* parent)
+ : QTextEdit(parent),
+ parent_(parent)
+ {}
+
+ QPopupMenu* createPopupMenu(const QPoint& pos);
+
+private slots:
+ void copyAll();
+ void toggleShowInternalCommands();
+
+private:
+ GDBOutputWidget* parent_;
+};
+
+}
+
+#endif