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#if KDE_IS_VERSION(3,3,9)
359 m_masterList->setShadeSortColumn(
false);
361 m_masterList->setSortColumn(-1);
362 m_masterList->addColumn(i18n(
"Name"));
363 m_masterList->addColumn(i18n(
"Total"));
364 m_masterList->setColumnAlignment(1, AlignRight);
366 m_masterList->addColumn(i18n(
"Description"));
367 m_masterList->header()->moveSection(2, 1);
368 m_masterList->header()->setStretchEnabled(
true, 1);
370 m_masterList->header()->setStretchEnabled(
true, 0);
372 m_masterList->setVScrollBarMode(TQScrollView::AlwaysOff);
373 m_masterList->setHScrollBarMode(TQScrollView::AlwaysOn);
375 m_slaveList =
new ListView(
this);
376 m_slaveList->setSelectionMode(TQListView::NoSelection);
377 m_slaveList->setItemMargin(2);
378 m_slaveList->setSortColumn(-1);
379 m_slaveList->setTreeStepSize(0);
380 m_slaveList->setHScrollBarMode(TQScrollView::AlwaysOn);
383 connect(m_slaveList->verticalScrollBar(), TQ_SIGNAL(valueChanged(
int)),
384 m_masterList->verticalScrollBar(), TQ_SLOT(setValue(
int)));
386 connect(m_masterList, TQ_SIGNAL(expanded(TQListViewItem*)), TQ_SLOT(slotExpanded(TQListViewItem*)));
387 connect(m_masterList, TQ_SIGNAL(collapsed(TQListViewItem*)), TQ_SLOT(slotCollapsed(TQListViewItem*)));
391TQSize DoubleListViewBase::sizeHint()
const {
393 return minimumSizeHint();
396void DoubleListViewBase::clearSlaveList() {
397 while (m_slaveList->columns() > 0) {
398 m_slaveList->removeColumn(0);
400 m_slaveList->clear();
403void DoubleListViewBase::createSlaveItems() {
405 DoubleListViewBase::SlaveListItem *prev = 0;
406 for (TQListViewItem *item = m_masterList->firstChild(); item; item = item->nextSibling()) {
407 static_cast<DoubleListViewBase::MasterListItem*
>(item)->createSlaveItems(m_slaveList, prev);
408 prev =
static_cast<DoubleListViewBase::MasterListItem*
>(item)->slaveItem();
413void DoubleListViewBase::print(KPrinter &printer) {
414 kdDebug()<<k_funcinfo<<endl;
418void DoubleListViewBase::setOpen(TQListViewItem *item,
bool open) {
420 m_masterList->setOpen(item, open);
423void DoubleListViewBase::slotExpanded(TQListViewItem* item) {
426 static_cast<DoubleListViewBase::MasterListItem*
>(item)->setSlaveOpen(
true);
430void DoubleListViewBase::slotCollapsed(TQListViewItem*item) {
433 static_cast<DoubleListViewBase::MasterListItem*
>(item)->setSlaveOpen(
false);
437void DoubleListViewBase::setDescriptionHeader(TQString text) {
438 m_masterList->setColumnText(1, text);
441void DoubleListViewBase::setNameHeader(TQString text) {
442 m_masterList->setColumnText(0, text);
445void DoubleListViewBase::setTotalHeader(TQString text) {
446 m_masterList->setColumnText(2, text);
449void DoubleListViewBase::addSlaveColumn(TQString text) {
450 m_slaveList->addColumn(text);
451 m_slaveList->setColumnAlignment(m_slaveList->columns()-1, AlignRight);
454void DoubleListViewBase::calculate() {
455 for (TQListViewItem *lvi=m_masterList->firstChild(); lvi; lvi = lvi->nextSibling()) {
456 static_cast<DoubleListViewBase::MasterListItem *
>(lvi)->calcSlaveItems();
457 static_cast<DoubleListViewBase::MasterListItem *
>(lvi)->calcTotal();
461void DoubleListViewBase::clearLists() {
462 m_slaveList->clear();
463 m_masterList->clear();
466void DoubleListViewBase::setMasterFormat(
int fieldwidth,
char fmt,
int prec) {
467 TQListViewItemIterator it = m_masterList;
468 for (; it.current(); ++it) {
469 static_cast<DoubleListViewBase::MasterListItem*
>(it.current())->setFormat(fieldwidth, fmt, prec);
472void DoubleListViewBase::setSlaveFormat(
int fieldwidth,
char fmt,
int prec) {
473 TQListViewItemIterator it = m_slaveList;
474 for (; it.current(); ++it) {
475 static_cast<DoubleListViewBase::SlaveListItem*
>(it.current())->setFormat(fieldwidth, fmt, prec);
479void DoubleListViewBase::setFormat(
int fieldwidth,
char fmt,
int prec) {
480 m_fieldwidth = fieldwidth;
483 setMasterFormat(fieldwidth, fmt, prec);
484 setSlaveFormat(fieldwidth, fmt, prec);
487void DoubleListViewBase::paintContents(TQPainter *p) {
489 TQRect cm = m_masterList->contentsRect();
490 TQRect cs = m_slaveList->contentsRect();
492 m_masterList->contentsToViewport(cm.x(), cm.y(), mx, my);
493 m_slaveList->contentsToViewport(cs.x(), cs.y(), sx, sy);
494 if (sizes()[0] > 0) {
496 p->translate(mx, my);
497 m_masterList->paintToPrinter(p, -mx, -my, cm.width(), cm.height());
500 if (sizes()[1] > 0) {
502 p->translate(cm.width() + 8 + sx, sy);
503 m_slaveList->paintToPrinter(p, -sx, -sy, cs.width(), cs.height());
511#include "kptdoublelistviewbase.moc"