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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
/***************************************************************************
framestack.cpp - description
-------------------
begin : Sun Aug 8 1999
copyright : (C) 1999 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. *
* *
***************************************************************************/
#include "framestackwidget.h"
#include "jdbparser.h"
#include <klocale.h>
#include <qlistbox.h>
#include <qstrlist.h>
#include <ctype.h>
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
namespace JAVADebugger
{
FramestackWidget::FramestackWidget(QWidget *parent, const char *name)
: QListBox(parent, name),
currentFrame_(0),
currentList_(0)
{
connect( this, SIGNAL(highlighted(int)), SLOT(slotHighlighted(int)) );
connect( this, SIGNAL(selected(int)), SLOT(slotHighlighted(int)) );
}
/***************************************************************************/
FramestackWidget::~FramestackWidget()
{
delete currentList_;
}
/***************************************************************************/
void FramestackWidget::slotHighlighted(int frame)
{
// always set this as the current frame and emit a signal
// because this will display the source file if it's not visible
// due to the user having opened a different file.
currentFrame_ = frame;
emit selectFrame(frame);
}
/***************************************************************************/
// someone (the vartree :-)) wants us to select this frame.
void FramestackWidget::slotSelectFrame(int frame)
{
if (isSelected(frame))
slotHighlighted(frame); // force this when we're already selected
else
setCurrentItem(frame);
}
/***************************************************************************/
void FramestackWidget::clearList() {
clear();
delete currentList_;
currentList_ = new QStrList(true); // make deep copies of the data
currentList_->setAutoDelete(true); // delete items when they are removed
}
void FramestackWidget::addItem(QCString s) {
currentList_->append(s); // This copies the string (deepcopies = true above)
}
void FramestackWidget::parseJDBBacktraceList(char */*str*/)
{
}
void FramestackWidget::updateDone()
{
insertStrList(currentList_);
currentFrame_ = 0;
}
/***************************************************************************/
QCString FramestackWidget::getFrameParams(int frame)
{
if (!currentList_) {
if (char *frameData = currentList_->at(frame)) {
if (char *paramStart = strchr(frameData, '(')) {
JDBParser parser;
if (char *paramEnd = parser.skipDelim(paramStart, '(', ')')) {
// allow for operator()(params)
if (paramEnd == paramStart+2) {
if (*(paramEnd+1) == '(') {
paramStart = paramEnd+1;
paramEnd = parser.skipDelim(paramStart, '(', ')');
if (!paramEnd)
return QCString();
}
}
// The parameters are contained _within_ the brackets.
if (paramEnd-paramStart > 2)
return QCString (paramStart+1, paramEnd-paramStart-1);
}
}
}
}
return QCString();
}
/***************************************************************************/
QString FramestackWidget::getFrameName(int frame)
{
if (currentList_) {
if (char *frameData = currentList_->at(frame)) {
if (char *paramStart = strchr(frameData, '(')) {
char *fnstart = paramStart-2;
while (fnstart > frameData) {
if (isspace(*fnstart))
break;
fnstart--;
}
QString frameName(QString().sprintf("#%d %s(...)", frame,
QCString(fnstart, paramStart-fnstart+1).data()));
return frameName;
}
}
}
return i18n("No stack");
}
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
}
#include "framestackwidget.moc"
|