forked from qt-creator/qt-creator
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "mainwindow.h"
 | 
						|
#include <QFileDialog>
 | 
						|
#include <QTextStream>
 | 
						|
#include <QDebug>
 | 
						|
 | 
						|
MainWindow::MainWindow()
 | 
						|
:   QMainWindow(0, 0)
 | 
						|
{
 | 
						|
    setupUi(this);
 | 
						|
 | 
						|
    connect(&m_debugger, SIGNAL(debugOutput(const QString&)), SLOT(appendOutput(const QString&)));
 | 
						|
    connect(&m_debugger, SIGNAL(debuggeePaused()), SLOT(onDebuggeePaused()));
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::setDebuggee(const QString& filename)
 | 
						|
{
 | 
						|
    m_debugger.openProcess(filename);
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::on_actionOpen_triggered()
 | 
						|
{
 | 
						|
    QString exeName;
 | 
						|
    exeName = QFileDialog::getOpenFileName(this, "Open Executable", ".", "*.exe");
 | 
						|
    if (!exeName.isNull())
 | 
						|
        m_debugger.openProcess(exeName);
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::on_actionExit_triggered()
 | 
						|
{
 | 
						|
    close();
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::on_actionBreak_triggered()
 | 
						|
{
 | 
						|
    m_debugger.breakAtCurrentPosition();
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::on_actionRun_triggered()
 | 
						|
{
 | 
						|
    m_debugger.continueProcess();
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::on_lstStack_itemClicked(QListWidgetItem* item)
 | 
						|
{
 | 
						|
    Debugger::StackFrame sf = m_stackTrace[ lstStack->row(item) ];
 | 
						|
    QFile f(sf.filename);
 | 
						|
    if (!f.exists())
 | 
						|
        return;
 | 
						|
 | 
						|
    f.open(QFile::ReadOnly);
 | 
						|
    QTextStream ts(&f);
 | 
						|
    int cursorPos = 0;
 | 
						|
    int currentLine = 0;
 | 
						|
    QString fullText;
 | 
						|
    do {
 | 
						|
        QString strLine = ts.readLine();
 | 
						|
        currentLine++;
 | 
						|
        if (currentLine < sf.line)
 | 
						|
            cursorPos += strLine.length();
 | 
						|
        fullText.append(strLine + "\n");
 | 
						|
    } while (!ts.atEnd());
 | 
						|
    codeWindow->setPlainText(fullText);
 | 
						|
 | 
						|
    //QList<QTextEdit::ExtraSelection> extraSelections;
 | 
						|
    //extraSelections.append(QTextEdit::ExtraSelection());
 | 
						|
 | 
						|
    //QTextEdit::ExtraSelection& exsel = extraSelections.first();
 | 
						|
    //exsel.cursor.setPosition(cursorPos, QTextCursor::MoveAnchor);
 | 
						|
    //exsel.cursor.select(QTextCursor::LineUnderCursor);
 | 
						|
    //exsel.format.setBackground(Qt::red);
 | 
						|
    //exsel.format.setFontUnderline(true);
 | 
						|
    //codeWindow->setExtraSelections(extraSelections);
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::appendOutput(const QString& str)
 | 
						|
{
 | 
						|
    teOutput->setPlainText(teOutput->toPlainText() + str);
 | 
						|
}
 | 
						|
 | 
						|
void MainWindow::onDebuggeePaused()
 | 
						|
{
 | 
						|
    lstStack->clear();
 | 
						|
    m_stackTrace = m_debugger.stackTrace();
 | 
						|
    foreach (Debugger::StackFrame sf, m_stackTrace) {
 | 
						|
        QString str = sf.symbol;
 | 
						|
        if (!sf.filename.isEmpty())
 | 
						|
            str.append(" at " + sf.filename + ":" + QString::number(sf.line));
 | 
						|
        lstStack->addItem(str);
 | 
						|
    }
 | 
						|
}
 |