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.
kdbg/kdbg/winstack.h

148 lines
4.2 KiB

11 years ago
/*
* Copyright Johannes Sixt
* This file is licensed under the GNU General Public License Version 2.
* See the file COPYING in the toplevel directory of the source directory.
*/
#ifndef WINSTACK_H
#define WINSTACK_H
#include <qdialog.h>
#include <qlineedit.h>
#include <qlayout.h>
#include <qcheckbox.h>
#include <qpushbutton.h>
#include <qtooltip.h>
#include <ktabwidget.h>
#include <list>
// forward declarations
class KDebugger;
class WinStack;
class SourceWindow;
class DisassembledCode;
struct DbgAddr;
class FindDialog : public QDialog
{
Q_OBJECT
public:
FindDialog();
~FindDialog();
bool caseSensitive() const { return m_caseCheck.isChecked(); }
QString searchText() const { return m_searchText.text(); }
virtual void done(int result);
QLineEdit m_searchText;
QCheckBox m_caseCheck;
QPushButton m_buttonForward;
QPushButton m_buttonBackward;
QPushButton m_buttonClose;
signals:
void closed();
protected:
virtual void closeEvent(QCloseEvent* ev);
QVBoxLayout m_layout;
QHBoxLayout m_buttons;
};
class ValueTip : public QToolTip
{
public:
ValueTip(WinStack* parent);
virtual ~ValueTip() {} // Qt3's QToolTip lacks virtual dtor!
virtual void maybeTip(const QPoint& p);
void tip(const QRect& r, const QString& s) { QToolTip::tip(r, s); }
};
class WinStack : public KTabWidget
{
Q_OBJECT
public:
WinStack(QWidget* parent, const char* name);
virtual ~WinStack();
/**
* Slot activate also looks in this directory when the specified file is
* a relative path.
*/
void setExtraDirectory(const QString& dir) { m_lastOpenDir = dir; }
void activateFile(const QString& fileName);
bool activeLine(QString& filename, int& lineNo);
bool activeLine(QString& filename, int& lineNo, DbgAddr& address);
void maybeTip(const QPoint& p);
bool hasWindows() const { return count() > 0; }
QString activeFileName() const;
SourceWindow* activeWindow() const;
SourceWindow* windowAt(int i) const;
virtual QSize sizeHint() const;
signals:
void toggleBreak(const QString&, int, const DbgAddr&, bool);
void enadisBreak(const QString&, int, const DbgAddr&);
void newFileLoaded();
void initiateValuePopup(const QString&);
void disassemble(const QString&, int);
void setTabWidth(int numChars);
void moveProgramCounter(const QString&, int, const DbgAddr&);
public slots:
virtual void slotFindForward();
virtual void slotFindBackward();
virtual void activate(const QString& filename, int lineNo, const DbgAddr& address);
void updatePC(const QString& filename, int lineNo, const DbgAddr& address, int frameNo);
void reloadAllFiles();
void updateLineItems(const KDebugger* deb);
void slotSetTabWidth(int numChars);
void slotFileReload();
void slotViewFind();
void slotBrkptSet();
void slotBrkptSetTemp();
void slotBrkptEnable();
void slotMoveProgramCounter();
void slotClose();
// Displays the value tip at m_tipLocation
void slotShowValueTip(const QString& tipText);
// Shows the disassembled code at the location given by file and lineNo
void slotDisassembled(const QString& fileName, int lineNo,
const std::list<DisassembledCode>& disass);
// Updates line items after expanding/collapsing disassembled code
void slotExpandCollapse(int lineNo);
protected:
bool activatePath(QString pathname, int lineNo, const DbgAddr& address);
virtual bool activateWindow(SourceWindow* fw, int lineNo, const DbgAddr& address); /* -1 doesnt change line */
virtual void contextMenuEvent(QContextMenuEvent* e);
void setPC(bool set, const QString& fileName, int lineNo,
const DbgAddr& address, int frameNo);
SourceWindow* findByFileName(const QString& fileName) const;
QString m_lastOpenDir; /* where user opened last file */
// program counter
QString m_pcFile;
int m_pcLine; /* -1 if no PC */
QString m_pcAddress; /* exact address of PC */
int m_pcFrame;
ValueTip m_valueTip;
QRect m_tipLocation; /* where tip should appear */
int m_tabWidth; /* number of chars */
public:
// find dialog
FindDialog m_findDlg;
};
#endif // WINSTACK_H