20#include "kptdoublelistviewbase.h"
22#include "kptproject.h"
30#include <tqptrvector.h>
31#include <tqsplitter.h>
33#include <tqvaluelist.h>
36#include <kcalendarsystem.h>
46void ListView::paintToPrinter(TQPainter * p,
int cx,
int cy,
int cw,
int ch) {
50 TQRegion r = p->clipRegion(TQPainter::CoordPainter);
51 p->setClipRegion(r.intersect(TQRegion(cx, 0, cw, ch)), TQPainter::CoordPainter);
52 TQColor bgc(193, 223, 255);
54 p->setBackgroundMode(TQt::OpaqueMode);
55 p->setBackgroundColor(bgc);
56 TQHeader *h = header();
58 for (
int s = 0; s < h->count(); ++s) {
59 TQRect r = h->sectionRect(s);
62 viewportToContents(r.x(), r.y(), x, y);
63 TQRect sr(x, y, r.width(), r.height());
65 if (sr.x()+sr.width() <= cx || sr.x() >= cx+cw) {
75 p->drawText(tr, columnAlignment(s)|TQt::AlignVCenter, h->label(s), -1);
76 hei = TQMAX(tr.height(), hei);
78 r = p->clipRegion(TQPainter::CoordPainter);
82 p->translate(0, hei+2);
83 r = p->clipRegion(TQPainter::CoordPainter);
85 p->setClipRegion(r.intersect(TQRegion(cx, cy, cw, ch)), TQPainter::CoordPainter);
86 drawContentsOffset(p, 0, 0, cx, cy, cw, ch);
91DoubleListViewBase::SlaveListItem::SlaveListItem(DoubleListViewBase::MasterListItem *master, TQListView *parent, TQListViewItem *after,
bool highlight)
92 : TDEListViewItem(parent, after),
95 m_highlight(highlight),
99 setExpandable(master->isExpandable());
100 setOpen(master->isOpen());
103DoubleListViewBase::SlaveListItem::SlaveListItem(DoubleListViewBase::MasterListItem *master, TQListViewItem *parent, TQListViewItem *after,
bool highlight)
104 : TDEListViewItem(parent, after),
105 m_masterItem(master),
107 m_highlight(highlight),
111 setExpandable(master->isExpandable());
112 setOpen(master->isOpen());
115DoubleListViewBase::SlaveListItem::~SlaveListItem() {
118 m_masterItem->slaveItemDeleted();
121void DoubleListViewBase::SlaveListItem::clearColumn(
int col) {
122 if (col >= listView()->columns()) {
125 listView()->setColumnText(col,
"");
129void DoubleListViewBase::SlaveListItem::setColumn(
int col,
double value) {
130 if (col < listView()->columns()) {
132 setText(col, TDEGlobal::locale()->formatNumber(value, m_prec));
133 m_valueMap.replace(col, value);
138void DoubleListViewBase::SlaveListItem::setLimit(
int col,
double limit) {
139 m_limitMap[col] = limit;
142void DoubleListViewBase::SlaveListItem::paintCell(TQPainter *p,
const TQColorGroup &cg,
int column,
int width,
int align) {
146 if (m_limitMap.contains(column)) {
147 if (m_valueMap[column] > m_limitMap[column]) {
148 g.setColor(TQColorGroup::Text, TQColor(red));
149 }
else if (m_valueMap[column] < m_limitMap[column]) {
150 g.setColor(TQColorGroup::Text, TQColor(green));
154 TDEListViewItem::paintCell(p, g, column, width, align);
157void DoubleListViewBase::SlaveListItem::setFormat(
int fieldwidth,
char fmt,
int prec) {
158 m_fieldwidth = fieldwidth;
164DoubleListViewBase::MasterListItem::MasterListItem(TQListView *parent,
bool highlight)
165 : TDEListViewItem(parent),
169 m_highlight(highlight) {
175DoubleListViewBase::MasterListItem::MasterListItem(TQListView *parent, TQString text,
bool highlight)
176 : TDEListViewItem(parent, text),
180 m_highlight(highlight) {
186DoubleListViewBase::MasterListItem::MasterListItem(TQListViewItem *parent,
bool highlight)
187 : TDEListViewItem(parent),
191 m_highlight(highlight) {
197DoubleListViewBase::MasterListItem::MasterListItem(TQListViewItem *parent, TQString text,
bool highlight)
198 : TDEListViewItem(parent, text),
202 m_highlight(highlight) {
208DoubleListViewBase::MasterListItem::~MasterListItem() {
210 m_slaveItem->masterItemDeleted();
213void DoubleListViewBase::MasterListItem::createSlaveItems(TQListView *lv, TQListViewItem *after) {
216 kdError()<<k_funcinfo<<
"Slave item allready exists"<<endl;
219 m_slaveItem =
new DoubleListViewBase::SlaveListItem(
this, lv, after);
221 m_slaveItem =
new DoubleListViewBase::SlaveListItem(
this,
static_cast<DoubleListViewBase::MasterListItem*
>(parent())->m_slaveItem, after);
224 DoubleListViewBase::SlaveListItem *prev = 0;
225 for (TQListViewItem *item = firstChild(); item; item = item->nextSibling()) {
226 static_cast<DoubleListViewBase::MasterListItem*
>(item)->createSlaveItems(lv, prev);
227 prev =
static_cast<DoubleListViewBase::MasterListItem*
>(item)->m_slaveItem;
231void DoubleListViewBase::MasterListItem::setSlaveOpen(
bool on) {
233 m_slaveItem->setOpen(on);
236void DoubleListViewBase::MasterListItem::slaveItemDeleted() {
241void DoubleListViewBase::MasterListItem::setTotal(
double tot) {
244 setText(1, TDEGlobal::locale()->formatNumber(tot, m_prec));
248void DoubleListViewBase::MasterListItem::addToTotal(
double v) {
251 setText(1, TDEGlobal::locale()->formatNumber(m_value, m_prec));
254double DoubleListViewBase::MasterListItem::calcTotal() {
256 TQListViewItem *item=firstChild();
260 for (; item; item = item->nextSibling()) {
261 tot +=
static_cast<DoubleListViewBase::MasterListItem*
>(item)->calcTotal();
268void DoubleListViewBase::MasterListItem::setSlaveItem(
int col,
double value) {
270 m_slaveItem->setColumn(col, value);
274void DoubleListViewBase::MasterListItem::clearColumn(
int col) {
275 for (TQListViewItem *item=firstChild(); item; item=item->nextSibling()) {
276 static_cast<DoubleListViewBase::MasterListItem*
>(item)->clearColumn(col);
279 if (m_slaveItem == 0) {
280 kdError()<<k_funcinfo<<
"No m_slaveItem"<<endl;
283 m_slaveItem->clearColumn(0);
286void DoubleListViewBase::MasterListItem::calcSlaveItems() {
287 if (m_slaveItem == 0 || m_slaveItem->listView() == 0) {
288 kdError()<<k_funcinfo<<
"No m_slaveItem or m_slaveItem->listView()"<<endl;
291 int cols = m_slaveItem->listView()->columns();
292 for (
int i = 0; i < cols; ++i) {
297double DoubleListViewBase::MasterListItem::calcSlaveItems(
int col) {
298 if (m_slaveItem == 0)
300 TQListViewItem *item=firstChild();
302 return m_slaveItem->value(col);
305 for (; item; item = item->nextSibling()) {
306 tot +=
static_cast<DoubleListViewBase::MasterListItem*
>(item)->calcSlaveItems(col);
309 setSlaveItem(col, tot);
313void DoubleListViewBase::MasterListItem::setSlaveLimit(
int col,
double limit) {
315 m_slaveItem->setLimit(col, limit);
319void DoubleListViewBase::MasterListItem::setSlaveHighlight(
bool on) {
321 m_slaveItem->setHighlight(on);
325void DoubleListViewBase::MasterListItem::paintCell(TQPainter *p,
const TQColorGroup &cg,
int column,
int width,
int align) {
328 if (column == 1 && m_highlight) {
329 if (m_value > m_limit) {
330 g.setColor(TQColorGroup::Text, TQColor(red));
331 }
else if (m_value < m_limit) {
332 g.setColor(TQColorGroup::Text, TQColor(green));
335 TDEListViewItem::paintCell(p, g, column, width, align);
338void DoubleListViewBase::MasterListItem::setFormat(
int fieldwidth,
char fmt,
int prec) {
339 m_fieldwidth = fieldwidth;
345DoubleListViewBase::DoubleListViewBase(TQWidget *parent,
bool description)
346 : TQSplitter(parent),
351 setOrientation(TQt::Horizontal);
352 setHandleWidth(TQMIN(2, handleWidth()));
354 m_masterList =
new ListView(
this);
355 m_masterList->setSelectionMode(TQListView::NoSelection);
356 m_masterList->setItemMargin(2);
357 m_masterList->setRootIsDecorated(
true);
358 m_masterList->setShadeSortColumn(
false);
359 m_masterList->setSortColumn(-1);
360 m_masterList->addColumn(i18n(
"Name"));
361 m_masterList->addColumn(i18n(
"Total"));
362 m_masterList->setColumnAlignment(1, AlignRight);
364 m_masterList->addColumn(i18n(
"Description"));
365 m_masterList->header()->moveSection(2, 1);
366 m_masterList->header()->setStretchEnabled(
true, 1);
368 m_masterList->header()->setStretchEnabled(
true, 0);
370 m_masterList->setVScrollBarMode(TQScrollView::AlwaysOff);
371 m_masterList->setHScrollBarMode(TQScrollView::AlwaysOn);
373 m_slaveList =
new ListView(
this);
374 m_slaveList->setSelectionMode(TQListView::NoSelection);
375 m_slaveList->setItemMargin(2);
376 m_slaveList->setSortColumn(-1);
377 m_slaveList->setTreeStepSize(0);
378 m_slaveList->setHScrollBarMode(TQScrollView::AlwaysOn);
381 connect(m_slaveList->verticalScrollBar(), TQ_SIGNAL(valueChanged(
int)),
382 m_masterList->verticalScrollBar(), TQ_SLOT(setValue(
int)));
384 connect(m_masterList, TQ_SIGNAL(expanded(TQListViewItem*)), TQ_SLOT(slotExpanded(TQListViewItem*)));
385 connect(m_masterList, TQ_SIGNAL(collapsed(TQListViewItem*)), TQ_SLOT(slotCollapsed(TQListViewItem*)));
389TQSize DoubleListViewBase::sizeHint()
const {
391 return minimumSizeHint();
394void DoubleListViewBase::clearSlaveList() {
395 while (m_slaveList->columns() > 0) {
396 m_slaveList->removeColumn(0);
398 m_slaveList->clear();
401void DoubleListViewBase::createSlaveItems() {
403 DoubleListViewBase::SlaveListItem *prev = 0;
404 for (TQListViewItem *item = m_masterList->firstChild(); item; item = item->nextSibling()) {
405 static_cast<DoubleListViewBase::MasterListItem*
>(item)->createSlaveItems(m_slaveList, prev);
406 prev =
static_cast<DoubleListViewBase::MasterListItem*
>(item)->slaveItem();
411void DoubleListViewBase::print(KPrinter &printer) {
412 kdDebug()<<k_funcinfo<<endl;
416void DoubleListViewBase::setOpen(TQListViewItem *item,
bool open) {
418 m_masterList->setOpen(item, open);
421void DoubleListViewBase::slotExpanded(TQListViewItem* item) {
424 static_cast<DoubleListViewBase::MasterListItem*
>(item)->setSlaveOpen(
true);
428void DoubleListViewBase::slotCollapsed(TQListViewItem*item) {
431 static_cast<DoubleListViewBase::MasterListItem*
>(item)->setSlaveOpen(
false);
435void DoubleListViewBase::setDescriptionHeader(TQString text) {
436 m_masterList->setColumnText(1, text);
439void DoubleListViewBase::setNameHeader(TQString text) {
440 m_masterList->setColumnText(0, text);
443void DoubleListViewBase::setTotalHeader(TQString text) {
444 m_masterList->setColumnText(2, text);
447void DoubleListViewBase::addSlaveColumn(TQString text) {
448 m_slaveList->addColumn(text);
449 m_slaveList->setColumnAlignment(m_slaveList->columns()-1, AlignRight);
452void DoubleListViewBase::calculate() {
453 for (TQListViewItem *lvi=m_masterList->firstChild(); lvi; lvi = lvi->nextSibling()) {
454 static_cast<DoubleListViewBase::MasterListItem *
>(lvi)->calcSlaveItems();
455 static_cast<DoubleListViewBase::MasterListItem *
>(lvi)->calcTotal();
459void DoubleListViewBase::clearLists() {
460 m_slaveList->clear();
461 m_masterList->clear();
464void DoubleListViewBase::setMasterFormat(
int fieldwidth,
char fmt,
int prec) {
465 TQListViewItemIterator it = m_masterList;
466 for (; it.current(); ++it) {
467 static_cast<DoubleListViewBase::MasterListItem*
>(it.current())->setFormat(fieldwidth, fmt, prec);
470void DoubleListViewBase::setSlaveFormat(
int fieldwidth,
char fmt,
int prec) {
471 TQListViewItemIterator it = m_slaveList;
472 for (; it.current(); ++it) {
473 static_cast<DoubleListViewBase::SlaveListItem*
>(it.current())->setFormat(fieldwidth, fmt, prec);
477void DoubleListViewBase::setFormat(
int fieldwidth,
char fmt,
int prec) {
478 m_fieldwidth = fieldwidth;
481 setMasterFormat(fieldwidth, fmt, prec);
482 setSlaveFormat(fieldwidth, fmt, prec);
485void DoubleListViewBase::paintContents(TQPainter *p) {
487 TQRect cm = m_masterList->contentsRect();
488 TQRect cs = m_slaveList->contentsRect();
490 m_masterList->contentsToViewport(cm.x(), cm.y(), mx, my);
491 m_slaveList->contentsToViewport(cs.x(), cs.y(), sx, sy);
492 if (sizes()[0] > 0) {
494 p->translate(mx, my);
495 m_masterList->paintToPrinter(p, -mx, -my, cm.width(), cm.height());
498 if (sizes()[1] > 0) {
500 p->translate(cm.width() + 8 + sx, sy);
501 m_slaveList->paintToPrinter(p, -sx, -sy, cs.width(), cs.height());
509#include "kptdoublelistviewbase.moc"