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.
140 lines
3.8 KiB
140 lines
3.8 KiB
// *************************************************************************
|
|
// 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 <tqwidget.h>
|
|
#include <tqtextedit.h>
|
|
#include <tqtimer.h>
|
|
#include <tqstringlist.h>
|
|
|
|
class KHistoryCombo;
|
|
|
|
class TQTextEdit;
|
|
class TQToolButton;
|
|
class TQDomElement;
|
|
|
|
namespace GDBDebugger
|
|
{
|
|
|
|
class GDBOutputWidget : public TQWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
GDBOutputWidget( TQWidget *parent=0, const char *name=0 );
|
|
~GDBOutputWidget();
|
|
|
|
void savePartialProjectSession(TQDomElement* el);
|
|
void restorePartialProjectSession(const TQDomElement* el);
|
|
|
|
void clear();
|
|
|
|
public slots:
|
|
void slotInternalCommandStdout(const char* line);
|
|
void slotUserCommandStdout(const char* line);
|
|
void slotReceivedStderr(const char* line);
|
|
void slotDbgStatus (const TQString &status, int statusFlag);
|
|
|
|
void slotGDBCmd();
|
|
|
|
void flushPending();
|
|
|
|
protected:
|
|
virtual void focusInEvent(TQFocusEvent *e);
|
|
|
|
signals:
|
|
void userGDBCmd(const TQString &cmd);
|
|
void breakInto();
|
|
|
|
private:
|
|
|
|
TQString html_escape(const TQString& s);
|
|
|
|
void newStdoutLine(const TQString& 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 TQString& line);
|
|
|
|
/** Makes 'l' no longer then 'max_size' by
|
|
removing excessive elements from the top.
|
|
*/
|
|
void trimList(TQStringList& l, unsigned max_size);
|
|
|
|
KHistoryCombo* m_userGDBCmdEditor;
|
|
TQToolButton* m_Interrupt;
|
|
TQTextEdit* 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.
|
|
*/
|
|
TQStringList 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 TQTextEdit except for
|
|
selecting everything and calling 'copy()'. The latter
|
|
approach is just ugly. */
|
|
TQStringList userCommandsRaw_, allCommandsRaw_;
|
|
|
|
|
|
/** For performance reasons, we don't immediately add new text
|
|
to TQTExtEdit. Instead we add it to pendingOutput_ and
|
|
flush it on timer.
|
|
*/
|
|
TQString pendingOutput_;
|
|
TQTimer updateTimer_;
|
|
|
|
bool showInternalCommands_;
|
|
|
|
int maxLines_;
|
|
};
|
|
|
|
/** Add popup menu specific to gdb output window to TQTextEdit.
|
|
*/
|
|
class OutputText : public TQTextEdit
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
OutputText(GDBOutputWidget* parent)
|
|
: TQTextEdit(parent),
|
|
parent_(parent)
|
|
{}
|
|
|
|
TQPopupMenu* createPopupMenu(const TQPoint& pos);
|
|
|
|
private slots:
|
|
void copyAll();
|
|
void toggleShowInternalCommands();
|
|
|
|
private:
|
|
GDBOutputWidget* parent_;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|