You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.2 KiB
137 lines
3.2 KiB
/* This file is part of KCachegrind.
|
|
Copyright (C) 2002, 2003 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
|
|
|
|
KCachegrind 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, version 2.
|
|
|
|
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; see the file COPYING. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <math.h>
|
|
|
|
#include <tqpainter.h>
|
|
#include <tqregexp.h>
|
|
|
|
#include <klocale.h>
|
|
#include <kiconloader.h>
|
|
#include <tdeapplication.h>
|
|
|
|
#include "listutils.h"
|
|
#include "costlistitem.h"
|
|
#include "coverage.h"
|
|
#include "configuration.h"
|
|
|
|
// CostListItem
|
|
|
|
|
|
CostListItem::CostListItem(TQListView* parent, TraceCostItem* costItem,
|
|
TraceCostType* ct, int size)
|
|
:TQListViewItem(parent)
|
|
{
|
|
_groupSize = size;
|
|
_skipped = 0;
|
|
_costItem = costItem;
|
|
setCostType(ct);
|
|
|
|
if (costItem) {
|
|
updateName();
|
|
setPixmap(1, colorPixmap(10, 10,
|
|
Configuration::groupColor(_costItem)));
|
|
}
|
|
}
|
|
|
|
CostListItem::CostListItem(TQListView* parent, int skipped,
|
|
TraceCostItem* costItem, TraceCostType* ct)
|
|
:TQListViewItem(parent)
|
|
{
|
|
_skipped = skipped;
|
|
_costItem = costItem;
|
|
setCostType(ct);
|
|
|
|
setText(1, i18n("(%n item skipped)", "(%n items skipped)", _skipped));
|
|
}
|
|
|
|
void CostListItem::setCostType(TraceCostType* ct)
|
|
{
|
|
_costType = ct;
|
|
update();
|
|
}
|
|
|
|
void CostListItem::updateName()
|
|
{
|
|
if (!_costItem) return;
|
|
|
|
TQString n = _costItem->prettyName();
|
|
if (_groupSize>=0) n += TQString(" (%1)").arg(_groupSize);
|
|
|
|
setText(1, n);
|
|
}
|
|
|
|
void CostListItem::setSize(int s)
|
|
{
|
|
_groupSize = s;
|
|
updateName();
|
|
}
|
|
|
|
void CostListItem::update()
|
|
{
|
|
if (!_costItem) return;
|
|
TraceData* d = _costItem->data();
|
|
|
|
double total = d->subCost(_costType);
|
|
if (total == 0.0) {
|
|
setText(0, TQString("---"));
|
|
setPixmap(0, TQPixmap());
|
|
return;
|
|
}
|
|
|
|
_pure = _costItem->subCost(_costType);
|
|
double pure = 100.0 * _pure / total;
|
|
TQString str;
|
|
if (Configuration::showPercentage())
|
|
str = TQString("%1").arg(pure, 0, 'f', Configuration::percentPrecision());
|
|
else
|
|
str = _costItem->prettySubCost(_costType);
|
|
|
|
if (_skipped) {
|
|
// special handling for skip entries...
|
|
setText(0, TQString("< %1").arg(str));
|
|
return;
|
|
}
|
|
|
|
setText(0, str);
|
|
setPixmap(0, costPixmap(_costType, _costItem, total, false));
|
|
}
|
|
|
|
int CostListItem::compare(TQListViewItem * i, int col, bool ascending ) const
|
|
{
|
|
const CostListItem* fi1 = this;
|
|
const CostListItem* fi2 = (CostListItem*) i;
|
|
|
|
// we always want descending order
|
|
if (ascending) {
|
|
fi1 = fi2;
|
|
fi2 = this;
|
|
}
|
|
|
|
// a skip entry is always sorted last
|
|
if (fi1->_skipped) return -1;
|
|
if (fi2->_skipped) return 1;
|
|
|
|
if (col==0) {
|
|
if (fi1->_pure < fi2->_pure) return -1;
|
|
if (fi1->_pure > fi2->_pure) return 1;
|
|
return 0;
|
|
}
|
|
return TQListViewItem::compare(i, col, ascending);
|
|
}
|