1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
/*
* 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>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#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 WinStack : public KTabWidget
{
Q_OBJECT
public:
WinStack(QWidget* parent);
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);
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);
virtual bool event(QEvent* event);
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;
QPoint m_tipLocation; /* where tip should appear */
QRect m_tipRegion; /* where tip should remain */
int m_tabWidth; /* number of chars */
public:
// find dialog
FindDialog m_findDlg;
};
#endif // WINSTACK_H
|