00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "driveritem.h"
00021 #include "driver.h"
00022
00023 #include <qpainter.h>
00024 #include <kiconloader.h>
00025 #include <kdebug.h>
00026
00027 DriverItem::DriverItem(QListView *parent, DrBase *item)
00028 : QListViewItem(parent), m_item(item), m_conflict(false)
00029 {
00030 setOpen(depth() < 3);
00031 setPixmap(0,SmallIcon("fileprint"));
00032 updateText();
00033 }
00034
00035 DriverItem::DriverItem(QListViewItem *parent, QListViewItem *after, DrBase *item)
00036 : QListViewItem(parent, after), m_item(item), m_conflict(false)
00037 {
00038 setOpen(depth() < 3);
00039 if (item) setPixmap(0,SmallIcon((item->isOption() ? "document" : "folder")));
00040 updateText();
00041 }
00042
00043 void DriverItem::updateText()
00044 {
00045 if (m_item)
00046 {
00047 QString s(m_item->get("text"));
00048 if (m_item->isOption())
00049 s.append(QString::fromLatin1(": <%1>").arg(m_item->prettyText()));
00050 if (m_item->type() == DrBase::List)
00051 {
00052
00053
00054
00055 while (firstChild())
00056 delete firstChild();
00057 DrBase *ch = static_cast<DrListOption*>(m_item)->currentChoice();
00058 if (ch && ch->type() == DrBase::ChoiceGroup)
00059 {
00060
00061 static_cast<DrChoiceGroup*>(ch)->createItem(this);
00062 setOpen(true);
00063 }
00064 }
00065 setText(0,s);
00066 }
00067 else
00068 setText(0,"ERROR");
00069 widthChanged();
00070 }
00071
00072 void DriverItem::paintCell(QPainter *p, const QColorGroup& cg, int, int width, int)
00073 {
00074
00075 p->fillRect(0, 0, width, height(), cg.base());
00076
00077
00078 if (isSelected())
00079 p->fillRect(0, 0, width, height(), (m_conflict ? red : cg.highlight()));
00080
00081
00082 int w(0);
00083 if (pixmap(0) && !pixmap(0)->isNull())
00084 {
00085 int h((height()-pixmap(0)->height())/2);
00086 p->drawPixmap(w,h,*pixmap(0));
00087 w += (pixmap(0)->width()+2);
00088 }
00089
00090
00091 if (!m_item || !m_item->isOption() || isSelected())
00092 {
00093 p->setPen((isSelected() ? cg.highlightedText() : (m_conflict ? red : cg.text())));
00094 p->drawText(w,0,width-w,height(),Qt::AlignLeft|Qt::AlignVCenter,text(0));
00095 }
00096 else
00097 {
00098 int w1(0);
00099 QString s(m_item->get("text") + ": <");
00100 w1 = p->fontMetrics().width(s);
00101 p->setPen(cg.text());
00102 p->drawText(w,0,w1,height(),Qt::AlignLeft|Qt::AlignVCenter,s);
00103 w += w1;
00104 p->setPen((m_conflict ? red : darkGreen));
00105 s = m_item->prettyText();
00106 w1 = p->fontMetrics().width(s);
00107 p->drawText(w,0,w1,height(),Qt::AlignLeft|Qt::AlignVCenter,s);
00108 w += w1;
00109 p->setPen(cg.text());
00110 s = QString::fromLatin1(">");
00111 w1 = p->fontMetrics().width(s);
00112 p->drawText(w,0,w1,height(),Qt::AlignLeft|Qt::AlignVCenter,s);
00113 }
00114 }
00115
00116 bool DriverItem::updateConflict()
00117 {
00118 m_conflict = false;
00119 if (m_item)
00120 {
00121 if (!m_item->isOption())
00122 {
00123 DriverItem *item = (DriverItem*)firstChild();
00124 while (item)
00125 {
00126 if (item->updateConflict())
00127 m_conflict = true;
00128 item = (DriverItem*)item->nextSibling();
00129 }
00130 }
00131 else
00132 {
00133 m_conflict = (m_item->conflict());
00134 }
00135 }
00136 repaint();
00137 return m_conflict;
00138 }
00139
00140 void DriverItem::updateTextRecursive()
00141 {
00142 if ( m_item->isOption() )
00143 updateText();
00144
00145 DriverItem *item = static_cast<DriverItem*>( firstChild() );
00146 while ( item )
00147 {
00148 item->updateTextRecursive();
00149 item = static_cast<DriverItem*>( item->nextSibling() );
00150 }
00151 }