/* * This file is part of KDevelop * * Copyright 2008 Vladimir Prus * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "breakpointdetails.h" #include #include #include #include #include #include #include #include "../breakpoint/breakpoint.h" #include "../interfaces/idebugsession.h" #include "../../interfaces/icore.h" #include "../interfaces/ibreakpointcontroller.h" #include "../../interfaces/idebugcontroller.h" using namespace KDevelop; BreakpointDetails::BreakpointDetails(QWidget *parent) : QWidget(parent), m_currentBreakpoint(0) { QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(11, 0, 0, 11); status_ = new QLabel(this); connect(status_, SIGNAL(linkActivated(QString)), this, SLOT(showExplanation(QString))); layout->addWidget(status_); QGridLayout* hitsLayout = new QGridLayout(); layout->addLayout(hitsLayout); hitsLayout->setContentsMargins(0, 0, 0, 0); hits_ = new QLabel(i18n("Not hit yet"), this); hits_->setWordWrap(true); hitsLayout->addWidget(hits_, 0, 0, 1, 3); QFrame* frame = new QFrame(this); frame->setFrameShape(QFrame::HLine); hitsLayout->addWidget(frame, 1, 0, 1, 3); QLabel *l2 = new QLabel(i18n("Ignore"), this); hitsLayout->addWidget(l2, 2, 0); ignore_ = new QSpinBox(this); hitsLayout->addWidget(ignore_, 2, 1); ignore_->setRange(0, 99999); connect(ignore_, SIGNAL(valueChanged(int)), SLOT(setIgnoreHits(int))); QLabel *l3 = new QLabel(i18n("next hits"), this); hitsLayout->addWidget(l3, 2, 2); layout->addStretch(); setItem(0); //initialize with no breakpoint active } void KDevelop::BreakpointDetails::setIgnoreHits(int ignoreHits) { if (!m_currentBreakpoint) return; m_currentBreakpoint->setIgnoreHits(ignoreHits); } void BreakpointDetails::setItem(Breakpoint *b) { m_currentBreakpoint = b; if (!b) { status_->hide(); hits_->hide(); ignore_->setEnabled(false); return; } ignore_->setValue(b->ignoreHits()); if (b->state() == Breakpoint::NotStartedState) { status_->hide(); hits_->hide(); ignore_->setEnabled(true); return; } status_->show(); hits_->show(); ignore_->setEnabled(true); if (b->errors().isEmpty()) { switch (b->state()) { case Breakpoint::NotStartedState: Q_ASSERT(0); break; case Breakpoint::PendingState: status_->setText(i18n("Breakpoint is pending")); break; case Breakpoint::DirtyState: status_->setText(i18n("Breakpoint is dirty")); break; case Breakpoint::CleanState: status_->setText(i18n("Breakpoint is active")); break; } if (b->hitCount() == -1) hits_->setText(""); else if (b->hitCount()) hits_->setText(i18np("Hit %1 time", "Hit %1 times", b->hitCount())); else hits_->setText(i18n("Not hit yet")); } else { status_->setText(i18n("Breakpoint has errors")); hits_->setText(b->errorText()); } } void BreakpointDetails::showExplanation(const QString& link) { QPoint pos = status_->mapToGlobal(status_->geometry().topLeft()); if (link == "pending") { QWhatsThis::showText(pos, i18n("Breakpoint is pending" "

Pending breakpoints are those that have " "been passed to GDB, but which are not yet " "installed in the target, because GDB cannot " "find the function or file to which the breakpoint " "refers. The most common case is a breakpoint " "in a shared library: GDB will insert this " "breakpoint only when the library is loaded.

"), status_); } else if (link == "dirty") { QWhatsThis::showText(pos, i18n("Breakpoint is dirty" "

The breakpoint has not yet been passed " "to the debugger.

"), status_); } } #include "moc_breakpointdetails.cpp"