22#include "editoritem.h"
37#include <kiconloader.h>
39#include <tdepopupmenu.h>
40#include <tdeapplication.h>
42#define BRANCHBOX_SIZE 9
45class EditorItemPrivate
50 ~EditorItemPrivate() {}
57static void paintListViewExpander(TQPainter* p, TQWidget* w, int height, const TQColorGroup& cg, bool isOpen)
59 const int marg = (height -2 - BRANCHBOX_SIZE) / 2;
65 TDEStyle* tdestyle = dynamic_cast<TDEStyle* >(widget->style());
67 tdestyle->drawTDEStylePrimitive(
68 TDEStyle::KPE_ListViewExpander, p, w, TQRect( xmarg, marg, BRANCHBOX_SIZE, BRANCHBOX_SIZE ),
69 cg, isOpen ? 0 : TQStyle::Style_On,
70 TQStyleOption::Default);
76 p->setPen( KPROPEDITOR_ITEM_BORDER_COLOR );
77 p->drawRect(xmarg, marg, BRANCHBOX_SIZE, BRANCHBOX_SIZE);
78 p->fillRect(xmarg+1, marg + 1, BRANCHBOX_SIZE-2, BRANCHBOX_SIZE-2,
82 p->setPen( cg.foreground() );
83 p->drawLine(xmarg+2, marg+BRANCHBOX_SIZE/2, xmarg+BRANCHBOX_SIZE-3, marg+BRANCHBOX_SIZE/2);
85 p->drawLine(xmarg+BRANCHBOX_SIZE/2, marg+2,
86 xmarg+BRANCHBOX_SIZE/2, marg+BRANCHBOX_SIZE-3);
93class GroupWidgetBase : public TQWidget
96 GroupWidgetBase(TQWidget* parent)
101 setSizePolicy(TQSizePolicy(TQSizePolicy::Preferred, TQSizePolicy::Fixed, 0, 1));
104 void setText( const TQString &text )
109 void setIcon( const TQPixmap &pix )
114 virtual bool isOpen() const
119 virtual void setOpen( bool set)
124 virtual TQSize sizeHint () const
126 TQSize s( TQWidget::sizeHint() );
127 s.setHeight(fontMetrics().height()*2);
132 virtual void paintEvent(TQPaintEvent *) {
135 TQStyle::StyleFlags flags = m_mouseDown ? TQStyle::Style_Down : TQStyle::Style_Default;
136 kapp->style().drawPrimitive(TQStyle::PE_HeaderSection, &p, r, palette().active(), flags);
138 paintListViewExpander(&p, this, r.height()+2, palette().active(), isOpen());
139 if (!m_miniicon.isNull()) {
140 p.drawPixmap(24, (r.height()-m_miniicon.height())/2, m_miniicon);
143 if (!m_titleStr.isNull())
145 int indent = 16 + (m_miniicon.isNull() ? 0 : (m_miniicon.width()+4));
146 p.setPen(palette().active().text());
150 p.drawText(indent+8, 0, width()-(indent+8),
151 height(), AlignLeft | AlignVCenter | SingleLine,
158 virtual bool event( TQEvent * e ) {
159 if (e->type()==TQEvent::MouseButtonPress || e->type()==TQEvent::MouseButtonRelease) {
160 TQMouseEvent* me = static_cast<TQMouseEvent* >(e);
161 if (me->button() == TQt::LeftButton) {
162 m_mouseDown = e->type()==TQEvent::MouseButtonPress;
166 return TQWidget::event(e);
173 bool m_mouseDown : 1;
176class GroupWidget : public GroupWidgetBase
179 GroupWidget(EditorGroupItem *parentItem)
180 : GroupWidgetBase(parentItem->listView()->viewport())
181 , m_parentItem(parentItem)
185 virtual bool isOpen() const
187 return m_parentItem->isOpen();
191 EditorGroupItem *m_parentItem;
194class GroupContainer::Private
199 GroupWidgetBase *groupWidget;
200 TQGuardedPtr<TQWidget> contents;
207GroupContainer::GroupContainer( const TQString& title, TQWidget* parent)
211 setSizePolicy(TQSizePolicy(TQSizePolicy::Preferred, TQSizePolicy::Fixed, 0, 1));
212 d->lyr = new TQVBoxLayout( this);
213 d->groupWidget = new GroupWidgetBase( this);
214 d->groupWidget->setText( title );
215 d->lyr->addWidget(d->groupWidget);
216 d->lyr->addSpacing(4);
219GroupContainer::~GroupContainer()
224void GroupContainer::setContents( TQWidget* contents )
228 d->lyr->remove(d->contents);
231 d->contents = contents;
233 d->lyr->addWidget(d->contents);
239bool GroupContainer::event( TQEvent * e ) {
240 if (e->type()==TQEvent::MouseButtonPress) {
241 TQMouseEvent* me = static_cast<TQMouseEvent* >(e);
242 if (me->button() == TQt::LeftButton && d->contents && d->groupWidget->rect().contains(me->pos())) {
243 d->groupWidget->setOpen(!d->groupWidget->isOpen());
244 if (d->groupWidget->isOpen())
248 d->lyr->invalidate();
252 return TQWidget::event(e);
259 property->captionForDisplaying().isEmpty() ? property->name() : property->captionForDisplaying())
261 d = new EditorItemPrivate();
265 setMultiLinesEnabled( true);
286 d = new EditorItemPrivate();
289 setMultiLinesEnabled( true);
295 d = new EditorItemPrivate();
298 setMultiLinesEnabled( true);
304 d = new EditorItemPrivate();
307 setMultiLinesEnabled( true);
310EditorItem::~EditorItem()
330 TQFont font = listView()->font();
331 if(d->property->isModified())
334 p->setBrush(cg.highlight());
335 p->setPen(cg.highlightedText());
336 TDEListViewItem::paintCell(p, cg, column, width, align);
337 p->fillRect(parent() ? 0 : 50, 0, width, height()-1,
339 p->setPen(isSelected() ? cg.highlightedText() : cg.text());
340 int delta = -20+KPROPEDITOR_ITEM_MARGIN;
341 if ((firstChild() && dynamic_cast<EditorGroupItem* >(parent()))) {
342 delta = -KPROPEDITOR_ITEM_MARGIN-1;
344 if ( dynamic_cast<EditorDummyItem* >(parent())) {
345 delta = KPROPEDITOR_ITEM_MARGIN*2;
347 else if (parent() && dynamic_cast<EditorDummyItem* >(parent()->parent())) {
348 if ( dynamic_cast<EditorGroupItem* >(parent()))
349 delta += KPROPEDITOR_ITEM_MARGIN*2;
351 delta += KPROPEDITOR_ITEM_MARGIN*5;
354 TQRect(delta,2, width+listView()->columnWidth(1)-KPROPEDITOR_ITEM_MARGIN*2, height()),
355 TQt::AlignLeft | TQt::AlignTop , text(0));
357 p->setPen( KPROPEDITOR_ITEM_BORDER_COLOR );
358 p->drawLine(width-1, 0, width-1, height()-1);
359 p->drawLine(0, -1, width-1, -1);
361 p->setPen( KPROPEDITOR_ITEM_BORDER_COLOR );
362 if ( dynamic_cast<EditorDummyItem* >(parent()))
363 p->drawLine(0, 0, 0, height()-1 );
367 TQColorGroup icg(cg);
370 Widget *widget = d->editor->createWidgetForProperty(d->property, false );
372 TQRect r(0, 0, d->editor->header()->sectionSize(1), height() - (widget-> hasBorders() ? 0 : 1));
373 p->setClipRect(r, TQPainter::CoordPainter);
374 p->setClipping( true);
375 widget-> drawViewer(p, icg, r, d->property->value());
376 p->setClipping( false);
379 p->setPen( KPROPEDITOR_ITEM_BORDER_COLOR );
380 p->drawLine(0, height()-1, width, height()-1 );
386 p->eraseRect(0,0,w,h);
394 TQFont font = listView()->font();
397 if(item->isSelected())
400 if ( dynamic_cast<EditorGroupItem* >(item))
407 p->setPen( KPROPEDITOR_ITEM_BORDER_COLOR );
411 if ( dynamic_cast<EditorGroupItem* >(item->parent())) {
416 if ( dynamic_cast<EditorGroupItem* >(item) || dynamic_cast<EditorDummyItem* >(item->parent()))
422 if ( dynamic_cast<EditorDummyItem* >(item->parent())) {
425 else if (item->parent() && dynamic_cast<EditorDummyItem* >(item->parent()->parent())) {
428 p->fillRect(x+1, 0, fillWidth-1, item->height()-1, TQBrush( backgroundColor));
429 p->drawLine(x, item->height()-1, w, item->height()-1 );
430 if (! dynamic_cast<EditorGroupItem* >(item))
431 p->drawLine(x, 0, x, item->height()-1 );
442 font.setBold( dynamic_cast<EditorGroupItem* >(item)
445 p->setPen(item->isSelected() ? cg.highlightedText() : cg.text());
446 if (item->firstChild() && dynamic_cast<EditorGroupItem* >(item->parent())) {
447 delta = 19-KPROPEDITOR_ITEM_MARGIN-1;
449 else if ( dynamic_cast<EditorDummyItem* >(item->parent())) {
452 if (item->parent() && dynamic_cast<EditorDummyItem* >(item->parent()->parent())) {
453 if ( dynamic_cast<EditorGroupItem* >(item->parent()))
454 delta += KPROPEDITOR_ITEM_MARGIN*2;
456 delta += KPROPEDITOR_ITEM_MARGIN*5;
459 if (! dynamic_cast<EditorDummyItem* >(item->parent()))
460 p->drawText(TQRect(delta+1,0, w+listView()->columnWidth(1), item->height()),
461 TQt::AlignLeft | TQt::AlignVCenter , item->text(0));
463 if(item->firstChild()) {
464 paintListViewExpander(p, listView(), item->height(),
472 TQPixmap pix = SmallIcon(editorItem-> property()-> icon());
474 p->drawPixmap(-19+(19-pix.width())/2, (item->height() - pix.height()) / 2, pix);
477 p->translate(0, item->totalHeight());
484EditorItem::paintFocus(TQPainter *, const TQColorGroup &, const TQRect & )
489EditorItem::compare( TQListViewItem *i, int col, bool ascending ) const
492 return -TQListViewItem::key( col, ascending ).localeAwareCompare( i->key( col, ascending ) );
498 return d->property->sortingKey()
508EditorItem::setHeight( int height )
510 TDEListViewItem::setHeight(height);
515EditorGroupItem::EditorGroupItem( EditorItem *parent, EditorItem *after, const TQString &text, const TQString &icon, int sortOrder)
518 , m_sortOrder(sortOrder)
523EditorGroupItem::EditorGroupItem( EditorItem *parent, const TQString &text, const TQString &icon, int sortOrder)
526 , m_sortOrder(sortOrder)
531EditorGroupItem::~EditorGroupItem()
536TQWidget* EditorGroupItem::label() const
541void EditorGroupItem::init( const TQString &icon)
544 setSelectable( false);
545 m_label = new GroupWidget( this);
546 m_label->setText(text(0));
548 m_label->setIcon( SmallIcon(icon) );
553EditorGroupItem::paintCell(TQPainter *p, const TQColorGroup & cg, int column, int width, int )
585EditorGroupItem::setup()
587 TDEListViewItem::setup();
588 setHeight( height()+4 );
592EditorGroupItem::compare( TQListViewItem *i, int col, bool ascending ) const
596 if ( dynamic_cast<EditorGroupItem* >(i)) {
598 - dynamic_cast<EditorGroupItem* >(i)->m_sortOrder;
605EditorDummyItem::EditorDummyItem( TDEListView *listview)
608 setSelectable( false);
612EditorDummyItem::~EditorDummyItem()
616EditorDummyItem::setup()
Item for a single property displayed within Editor object.
EditorItem(Editor *editor, EditorItem *parent, Property *property, TQListViewItem *after=0)
virtual void paintCell(TQPainter *p, const TQColorGroup &cg, int column, int width, int align)
virtual void paintBranches(TQPainter *p, const TQColorGroup &cg, int w, int y, int h)
A listview to edit properties Editor widgets use property options using Property::option(const char *...
The base class representing a single property.
const TQColor & backgroundColor() TDE_DEPRECATED
Namespace for a set of classes implementing generic properties framework.
|