Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions kdbg/dbgmainwnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,13 @@ void DebuggerMainWnd::initKAction()
m_findAction = KStandardAction::find(m_filesWindow, SLOT(slotViewFind()), actionCollection());
KStandardAction::findNext(m_filesWindow, SLOT(slotFindForward()), actionCollection());
KStandardAction::findPrev(m_filesWindow, SLOT(slotFindBackward()), actionCollection());
m_gotoLineAction = KStandardAction::gotoLine(m_filesWindow, &WinStack::slotViewGotoLine, actionCollection());
/*
* Change KStandardAction::gotoLine's internal name to prevent
* auto-generation of the "Go to Line..." action under the "Go" menu
* despite specifying the position of "go_goto_line" in the '.rc' file.
*/
actionCollection()->addAction(QStringLiteral("view_goto_line"), m_gotoLineAction);

struct { QWidget* w; const char* id; QAction** act; } dw[] = {
{ m_btWindow, "view_stack", &m_btWindowAction },
Expand Down Expand Up @@ -518,6 +525,8 @@ void DebuggerMainWnd::updateUI()
{
m_findAction->setChecked(m_filesWindow->m_findDlg.isVisible());
m_findAction->setEnabled(m_filesWindow->hasWindows());
m_gotoLineAction->setChecked(m_filesWindow->m_gotoLineDlg.isVisible());
m_gotoLineAction->setEnabled(m_filesWindow->hasWindows());
m_bpSetAction->setEnabled(m_debugger->canChangeBreakpoints());
m_bpSetTempAction->setEnabled(m_debugger->canChangeBreakpoints());
m_bpEnableAction->setEnabled(m_debugger->canChangeBreakpoints());
Expand Down
1 change: 1 addition & 0 deletions kdbg/dbgmainwnd.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ class DebuggerMainWnd : public KXmlGuiWindow
QAction* m_coreDumpAction;
QAction* m_settingsAction;
QAction* m_findAction;
QAction* m_gotoLineAction;
QAction* m_btWindowAction;
QAction* m_localVariablesAction;
QAction* m_watchesAction;
Expand Down
2 changes: 2 additions & 0 deletions kdbg/kdbgui.rc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
<Action name="view_findnext"/>
<Action name="view_findprev"/>
<Separator/>
<Action name="view_goto_line"/>
<Separator/>
<Action name="view_stack"/>
<Action name="view_locals"/>
<Action name="view_watched_expressions"/>
Expand Down
13 changes: 13 additions & 0 deletions kdbg/sourcewnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,19 @@ void SourceWindow::find(const QString& text, bool caseSensitive, FindDirection d
setTextCursor(cursor);
}

bool SourceWindow::gotoLine(int lineNo)
{
// line is zero-based
lineNo--;

if (lineNo < 0 || lineNo >= int(m_sourceCode.size()))
return false;

scrollToRow(lineToRow(lineNo));

return true;
}

void SourceWindow::infoMousePress(QMouseEvent* ev)
{
// we handle left and middle button
Expand Down
1 change: 1 addition & 0 deletions kdbg/sourcewnd.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class SourceWindow : public QPlainTextEdit
void setPC(bool set, int lineNo, const DbgAddr& address, int frameNo);
enum FindDirection { findForward = 1, findBackward = -1 };
void find(const QString& text, bool caseSensitive, FindDirection dir);
bool gotoLine(int lineNo);
bool wordAtPoint(const QPoint& p, QString& word, QRect& r);
/**
* Translates row number (zero-based) to zero-based source line number.
Expand Down
72 changes: 72 additions & 0 deletions kdbg/winstack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "sourcewnd.h"
#include "dbgdriver.h"
#include <QFileInfo>
#include <QIntValidator>
#include <QMenu>
#include <QContextMenuEvent>
#include <QToolTip>
Expand All @@ -31,6 +32,9 @@ WinStack::WinStack(QWidget* parent) :
connect(&m_findDlg.m_buttonBackward,
SIGNAL(clicked()), SLOT(slotFindBackward()));

connect(&m_gotoLineDlg.m_buttonOk,
&QPushButton::clicked, this, &WinStack::slotGotoLine);

connect(this, SIGNAL(setTabWidth(int)), this, SLOT(slotSetTabWidth(int)));
connect(this, SIGNAL(tabCloseRequested(int)),
this, SLOT(slotCloseTab(int)));
Expand Down Expand Up @@ -245,6 +249,15 @@ void WinStack::slotFindBackward()
SourceWindow::findBackward);
}

void WinStack::slotGotoLine()
{
if (activeWindow()) {
if (activeWindow()->gotoLine(m_gotoLineDlg.lineNumber())) {
m_gotoLineDlg.done(0);
}
}
}

bool WinStack::event(QEvent* evt)
{
if (evt->type() != QEvent::ToolTip)
Expand Down Expand Up @@ -335,6 +348,17 @@ void WinStack::slotViewFind()
}
}

void WinStack::slotViewGotoLine()
{
if (m_gotoLineDlg.isVisible()) {
m_gotoLineDlg.done(0);
} else {
m_gotoLineDlg.show();
m_gotoLineDlg.m_lineText.setFocus();
m_gotoLineDlg.m_lineText.selectAll();
}
}

void WinStack::slotBrkptSet()
{
QString file;
Expand Down Expand Up @@ -437,3 +461,51 @@ void FindDialog::done(int result)
QDialog::done(result);
Q_EMIT closed();
}

GotoLineDialog::GotoLineDialog() :
QDialog(),
m_lineText(this),
m_buttonOk(this),
m_buttonClose(this)
{
setWindowTitle(i18n("Go to Line"));

m_lineText.setMinimumSize(330, 24);
m_lineText.setMaxLength(10000);
m_lineText.setFrame(true);
m_lineText.setFocus();

QIntValidator *validator = new QIntValidator(this);
validator->setBottom(1);
m_lineText.setValidator(validator);

m_buttonOk.setText(i18n("OK"));
m_buttonOk.setDefault(true);
m_buttonClose.setText(i18n("Close"));

connect(&m_buttonClose, &QPushButton::clicked, this, &QDialog::reject);

m_layout.addWidget(&m_lineText);
m_layout.addLayout(&m_buttons);

m_buttons.addWidget(&m_buttonOk);
m_buttons.addWidget(&m_buttonClose);

setLayout(&m_layout);
}

GotoLineDialog::~GotoLineDialog()
{
}

void GotoLineDialog::closeEvent(QCloseEvent* ev)
{
QDialog::closeEvent(ev);
Q_EMIT closed();
}

void GotoLineDialog::done(int result)
{
QDialog::done(result);
Q_EMIT closed();
}
26 changes: 26 additions & 0 deletions kdbg/winstack.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,29 @@ class FindDialog : public QDialog
QHBoxLayout m_buttons;
};

class GotoLineDialog : public QDialog
{
Q_OBJECT
public:
GotoLineDialog();
~GotoLineDialog();

int lineNumber() const { return m_lineText.text().toInt(); }
void done(int result) override;

QLineEdit m_lineText;
QPushButton m_buttonOk;
QPushButton m_buttonClose;

Q_SIGNALS:
void closed();

protected:
void closeEvent(QCloseEvent* ev) override;
QVBoxLayout m_layout;
QHBoxLayout m_buttons;
};


class WinStack : public QTabWidget
{
Expand Down Expand Up @@ -84,6 +107,7 @@ class WinStack : public QTabWidget
public Q_SLOTS:
virtual void slotFindForward();
virtual void slotFindBackward();
virtual void slotGotoLine();
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();
Expand All @@ -92,6 +116,7 @@ public Q_SLOTS:

void slotFileReload();
void slotViewFind();
void slotViewGotoLine();
void slotBrkptSet();
void slotBrkptSetTemp();
void slotBrkptEnable();
Expand Down Expand Up @@ -137,6 +162,7 @@ public Q_SLOTS:
public:
// find dialog
FindDialog m_findDlg;
GotoLineDialog m_gotoLineDlg;
};

#endif // WINSTACK_H