Salome HOME
Fixing a bug : Salome GUI style needs addLibraryPath() method to be called
[modules/gui.git] / src / Qtx / QtxListResourceEdit.cxx
1 // File:      QtxListResourceEdit.cxx
2 // Author:    Sergey TELKOV
3
4 #include "QtxListResourceEdit.h"
5
6 #include <qhbox.h>
7 #include <qvbox.h>
8 #include <qlabel.h>
9 #include <qlayout.h>
10 #include <qlistbox.h>
11 #include <qcombobox.h>
12 #include <qlineedit.h>
13 #include <qcheckbox.h>
14 #include <qtabwidget.h>
15 #include <qvalidator.h>
16 #include <qobjectlist.h>
17 #include <qcolordialog.h>
18 #include <qwidgetstack.h>
19
20 #include "QtxIntSpinBox.h"
21 #include "QtxDblSpinBox.h"
22
23 /*
24   Class: QtxListResourceEdit
25   Descr: GUI implementation of QtxResourceEdit - manager of resources
26 */
27
28 QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
29 : QFrame( parent ),
30 QtxResourceEdit( mgr )
31 {
32   QVBoxLayout* main = new QVBoxLayout( this, 0, 5 );
33   QGroupBox* base = new QGroupBox( 1, Qt::Vertical, "", this );
34   base->setFrameStyle( QFrame::NoFrame );
35   base->setInsideMargin( 0 );
36   main->addWidget( base );
37
38   myList  = new QListBox( base );
39   myStack = new QWidgetStack( base );
40
41   myList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
42   myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
43
44   myList->setSelectionMode( QListBox::Single );
45
46   connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
47
48   setFocusProxy( myList );
49
50   updateState();
51 }
52
53 QtxListResourceEdit::~QtxListResourceEdit()
54 {
55 }
56
57 void QtxListResourceEdit::onSelectionChanged()
58 {
59   int idx = myList->index( myList->selectedItem() );
60   if ( idx < 0 )
61     return;
62
63   myStack->raiseWidget( idx );
64 }
65
66 QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
67 {
68   Item* i = item( title, -1 );
69   if ( i )
70     return i;
71
72   Category* category = new Category( this, myStack );
73   myList->insertItem( title );
74   int id = myList->count() - 1;
75   myStack->addWidget( category, id );
76
77   if ( !myList->selectedItem() )
78     myList->setSelected( 0, true );
79
80   updateState();
81
82   return category;
83 }
84
85 void QtxListResourceEdit::changedResources( const QMap<Item*, QString>& map )
86 {
87   QMap<int, QString> idMap;
88   for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
89   {
90     idMap.insert( it.key()->id(), it.data() );
91
92     emit resourceChanged( it.key()->id() );
93
94     QString sec, param;
95     it.key()->resource( sec, param );
96     emit resourceChanged( sec, param );
97   }
98
99   emit resourcesChanged( idMap );
100 }
101
102 void QtxListResourceEdit::updateState()
103 {
104   if ( myStack->visibleWidget() )
105     myStack->show();
106   else
107     myStack->hide();
108 }
109
110 /*
111   Class: QtxListResourceEdit::Category
112   Descr: GUI implementation of preferences category.
113 */
114
115 QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
116 : QFrame( parent ),
117 Item( edit )
118 {
119   QVBoxLayout* main = new QVBoxLayout( this );
120   QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
121   base->setFrameStyle( QFrame::NoFrame );
122   base->setInsideMargin( 0 );
123   main->addWidget( base, 1 );
124
125   myTabs = new QTabWidget( base );
126   myInfo = new QLabel( base );
127
128   myInfo->setAlignment( Qt::AlignCenter );
129   myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
130   myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
131
132   updateState();
133 }
134
135 QtxListResourceEdit::Category::~Category()
136 {
137 }
138
139 int QtxListResourceEdit::Category::type() const
140 {
141   return -1;
142 }
143
144 void QtxListResourceEdit::Category::store()
145 {
146 }
147
148 void QtxListResourceEdit::Category::retrieve()
149 {
150 }
151
152 QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
153 {
154   QVariant var;
155   if ( prop == QString( "information" ) || prop == QString( "info" ) )
156     var = myInfo->text();
157   return var;
158 }
159
160 void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
161 {
162   QVariant prop = var;
163   if ( !prop.cast( QVariant::String ) )
164     return;
165
166   if ( name == QString( "information" ) || name == QString( "info" ) )
167     myInfo->setText( prop.toString() );
168
169   updateState();
170 }
171
172 QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
173 {
174   Item* i = item( title, id() );
175   if ( i )
176     return i;
177
178   Tab* tab = new Tab( resourceEdit(), this, this );
179   myTabs->addTab( tab, title );
180
181   updateState();
182
183   return tab;
184 }
185
186 void QtxListResourceEdit::Category::updateState()
187 {
188   if ( myTabs->count() )
189     myTabs->show();
190   else
191     myTabs->hide();
192
193   if ( !myTabs->count() && !myInfo->text().isEmpty() )
194     myInfo->show();
195   else
196     myInfo->hide();
197 }
198
199 /*
200   Class: QtxListResourceEdit::Tab
201   Descr: GUI implementation of resources tab.
202 */
203
204 QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
205 : QFrame( parent ),
206 Item( edit, pItem )
207 {
208   QVBoxLayout* main = new QVBoxLayout( this );
209   QVBox* vbox = new QVBox( this );
210   vbox->setMargin( 5 );
211   myMainFrame = vbox;
212   main->addWidget( myMainFrame );
213   main->addStretch( 1 );
214 }
215
216 QtxListResourceEdit::Tab::~Tab()
217 {
218 }
219
220 int QtxListResourceEdit::Tab::type() const
221 {
222   return -1;
223 }
224
225 void QtxListResourceEdit::Tab::store()
226 {
227 }
228
229 void QtxListResourceEdit::Tab::retrieve()
230 {
231 }
232
233 void QtxListResourceEdit::Tab::polish()
234 {
235   QFrame::polish();
236
237   adjustLabels();
238 }
239
240 QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
241 {
242   Item* i = item( title, id() );
243   if ( i )
244     return i;
245
246   Group* group = new Group( title, resourceEdit(), this, myMainFrame );
247
248   return group;
249 }
250
251 void QtxListResourceEdit::Tab::adjustLabels()
252 {
253   QObjectList* labels = queryList( "QLabel" );
254   if ( labels )
255   {
256     int w = 0;
257     for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
258     {
259       if ( it1.current()->isWidgetType() )
260       {
261         QWidget* wid = (QWidget*)it1.current();
262         w = QMAX( w, wid->sizeHint().width() );
263       }
264     }
265     for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
266     {
267       if ( it2.current()->isWidgetType() )
268       {
269         QWidget* wid = (QWidget*)it2.current();
270         wid->setMinimumWidth( w );
271       }
272     }
273     delete labels;
274   }
275 }
276
277 /*
278   Class: QtxListResourceEdit::Group
279   Descr: GUI implementation of resources group.
280 */
281
282 QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
283 : QGroupBox( 2, Qt::Horizontal, title, parent ),
284 Item( edit, pItem )
285 {
286 }
287
288 QtxListResourceEdit::Group::~Group()
289 {
290 }
291
292 int QtxListResourceEdit::Group::type() const
293 {
294   return -1;
295 }
296
297 void QtxListResourceEdit::Group::store()
298 {
299 }
300
301 void QtxListResourceEdit::Group::retrieve()
302 {
303 }
304
305 QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
306 {
307   QVariant var;
308   if ( prop == "columns" )
309     var = QVariant( columns() );
310   return var;
311 }
312
313 void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
314 {
315   QVariant prop = var;
316   if ( !prop.cast( QVariant::Int ) )
317     return;
318
319   if ( name == QString( "columns" ) && prop.toInt() > 0 )
320     setColumns( prop.toInt() );
321 }
322
323 void QtxListResourceEdit::Group::setTitle( const QString& title )
324 {
325   Item::setTitle( title );
326   QGroupBox::setTitle( title );
327 }
328
329 QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
330 {
331   Item* item = 0;
332
333   switch ( type )
334   {
335   case Color:
336     item = new ColorItem( title, resourceEdit(), this, this );
337     break;
338   case Bool:
339     item = new StateItem( title, resourceEdit(), this, this );
340     break;
341   case String:
342     item = new StringItem( title, resourceEdit(), this, this );
343     break;
344   case Selector:
345     item = new ListItem( title, resourceEdit(), this, this );
346     break;
347   case DblSpin:
348     item = new DoubleSpinItem( title, resourceEdit(), this, this );
349     break;
350   case IntSpin:
351     item = new IntegerSpinItem( title, resourceEdit(), this, this );
352     break;
353   case Double:
354     item = new DoubleEditItem( title, resourceEdit(), this, this );
355     break;
356   case Integer:
357     item = new IntegerEditItem( title, resourceEdit(), this, this );
358     break;
359   case Space:
360     item = new Spacer( resourceEdit(), this, this );
361     break;
362   }
363
364   return item;
365 }
366
367 /*
368   Class: QtxListResourceEdit::PrefItem
369   Descr: Base class for preferences items.
370 */
371
372 QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
373 : QHBox( parent ),
374 Item( edit, pi ),
375 myType( type )
376 {
377   setSpacing( 5 );
378 }
379
380 QtxListResourceEdit::PrefItem::~PrefItem()
381 {
382 }
383
384 int QtxListResourceEdit::PrefItem::type() const
385 {
386   return myType;
387 }
388
389 QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
390 {
391   return 0;
392 }
393
394 /*
395   Class: QtxListResourceEdit::Spacer
396   Descr: GUI implementation of resources spacer.
397 */
398
399 QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
400 : PrefItem( Space, edit, pItem, parent )
401 {
402   setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
403 }
404
405 QtxListResourceEdit::Spacer::~Spacer()
406 {
407 }
408
409 void QtxListResourceEdit::Spacer::store()
410 {
411 }
412
413 void QtxListResourceEdit::Spacer::retrieve()
414 {
415 }
416
417 /*
418   Class: QtxListResourceEdit::ListItem
419   Descr: GUI implementation of resources list item.
420 */
421
422 QtxListResourceEdit::ListItem::ListItem( const QString& title, QtxResourceEdit* edit,
423                                          Item* pItem, QWidget* parent )
424 : PrefItem( Selector, edit, pItem, parent )
425 {
426   new QLabel( title, this );
427   myList = new QComboBox( false, this );
428   myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
429 }
430
431 QtxListResourceEdit::ListItem::~ListItem()
432 {
433 }
434
435 void QtxListResourceEdit::ListItem::store()
436 {
437   int idx = myList->currentItem();
438   if ( myIndex.contains( idx ) )
439     setInteger( myIndex[idx] );
440 }
441
442 void QtxListResourceEdit::ListItem::retrieve()
443 {
444   int id = getInteger( -1 );
445
446   int idx = -1;
447   for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
448   {
449     if ( it.data() == id )
450       idx = it.key();
451   }
452
453   myList->setCurrentItem( idx );
454 }
455
456 QVariant QtxListResourceEdit::ListItem::property( const QString& name ) const
457 {
458   QVariant val;
459   if ( name == QString( "strings" ) )
460   {
461     QStringList lst;
462     for ( int i = 0; i < (int)myList->count(); i++ )
463       lst.append( myList->text( i ) );
464     val = QVariant( lst );
465   }
466   else if ( name == QString( "indexes" ) )
467   {
468     QValueList<QVariant> lst;
469     for ( int i = 0; i < (int)myList->count(); i++ )
470       lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
471     val = QVariant( lst );
472   }
473   return val;
474 }
475
476 void QtxListResourceEdit::ListItem::setProperty( const QString& name, const QVariant& val )
477 {
478   if ( name == QString( "strings" ) )
479     setStrings( val );
480   else if ( name == QString( "indexes" ) )
481     setIndexes( val );
482 }
483
484 void QtxListResourceEdit::ListItem::setStrings( const QVariant& var )
485 {
486   if ( var.type() != QVariant::StringList )
487     return;
488
489   setStrings( var.toStringList() );
490 }
491
492 void QtxListResourceEdit::ListItem::setIndexes( const QVariant& var )
493 {
494   if ( var.type() != QVariant::List )
495     return;
496
497   QValueList<QVariant> varList = var.toList();
498   QValueList<int> lst;
499   for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
500   {
501     if ( (*it).canCast( QVariant::Int ) )
502       lst.append( (*it).toInt() );
503   }
504   setIndexes( lst );
505 }
506
507 void QtxListResourceEdit::ListItem::setStrings( const QStringList& lst )
508 {
509   myList->clear();
510   myList->insertStringList( lst );
511 }
512
513 void QtxListResourceEdit::ListItem::setIndexes( const QValueList<int>& lst )
514 {
515   myIndex.clear();
516
517   int idx = 0;
518   for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
519     myIndex.insert( idx, *it );
520 }
521
522 /*
523   Class: QtxListResourceEdit::StateItem
524   Descr: GUI implementation of resources bool item.
525 */
526
527 QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
528                                            Item* pItem, QWidget* parent )
529 : PrefItem( Bool, edit, pItem, parent )
530 {
531   myState = new QCheckBox( title, this );
532   myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
533 }
534
535 QtxListResourceEdit::StateItem::~StateItem()
536 {
537 }
538
539 void QtxListResourceEdit::StateItem::store()
540 {
541   setBoolean( myState->isChecked() );
542 }
543
544 void QtxListResourceEdit::StateItem::retrieve()
545 {
546   myState->setChecked( getBoolean() );
547 }
548
549 /*
550   Class: QtxListResourceEdit::StringItem
551   Descr: GUI implementation of resources string item.
552 */
553
554 QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
555                                              Item* pItem, QWidget* parent )
556 : PrefItem( String, edit, pItem, parent )
557 {
558   new QLabel( title, this );
559   myString = new QLineEdit( this );
560   myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
561 }
562
563 QtxListResourceEdit::StringItem::~StringItem()
564 {
565 }
566
567 void QtxListResourceEdit::StringItem::store()
568 {
569   setString( myString->text() );
570 }
571
572 void QtxListResourceEdit::StringItem::retrieve()
573 {
574   myString->setText( getString() );
575 }
576
577 /*
578   Class: QtxListResourceEdit::IntegerEditItem
579   Descr: GUI implementation of resources integer item.
580 */
581
582 QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
583 : PrefItem( Integer, edit, pItem, parent )
584 {
585   new QLabel( title, this );
586   myInteger = new QLineEdit( this );
587   myInteger->setValidator( new QIntValidator( myInteger ) );
588   myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
589 }
590
591 QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
592 {
593 }
594
595 void QtxListResourceEdit::IntegerEditItem::store()
596 {
597   setString( myInteger->text() );
598 }
599
600 void QtxListResourceEdit::IntegerEditItem::retrieve()
601 {
602   myInteger->setText( getString() );
603 }
604
605 /*
606   Class: QtxListResourceEdit::IntegerSpinItem
607   Descr: GUI implementation of resources integer item.
608 */
609
610 QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
611 : PrefItem( IntSpin, edit, pItem, parent )
612 {
613   new QLabel( title, this );
614   myInteger = new QtxIntSpinBox( this );
615   myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
616 }
617
618 QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
619 {
620 }
621
622 void QtxListResourceEdit::IntegerSpinItem::store()
623 {
624   setInteger( myInteger->value() );
625 }
626
627 void QtxListResourceEdit::IntegerSpinItem::retrieve()
628 {
629   myInteger->setValue( getInteger() );
630 }
631
632 QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
633 {
634   QVariant var;
635   if ( name == QString( "minimum" ) || name == QString( "min" ) )
636     var = QVariant( myInteger->minValue() );
637   else if ( name == QString( "maximum" ) || name == QString( "max" ) )
638     var = QVariant( myInteger->maxValue() );
639   else if ( name == QString( "step" ) )
640     var = QVariant( myInteger->lineStep() );
641   return var;
642 }
643
644 void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
645 {
646   QVariant prop = var;
647   if ( !prop.cast( QVariant::Int ) )
648     return;
649
650   int val = prop.toInt();
651   if ( name == QString( "minimum" ) || name == QString( "min" ) )
652     myInteger->setMinValue( val );
653   else if ( name == QString( "maximum" ) || name == QString( "max" ) )
654     myInteger->setMaxValue( val );
655   else if ( name == QString( "step" ) && val > 0 )
656     myInteger->setLineStep( val );
657 }
658
659 /*
660   Class: QtxListResourceEdit::DoubleEditItem
661   Descr: GUI implementation of resources string item.
662 */
663
664 QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
665                                                      Item* pItem, QWidget* parent )
666 : PrefItem( Double, edit, pItem, parent )
667 {
668   new QLabel( title, this );
669   myDouble = new QLineEdit( this );
670   myDouble->setValidator( new QDoubleValidator( myDouble ) );
671   myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
672 }
673
674 QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
675 {
676 }
677
678 void QtxListResourceEdit::DoubleEditItem::store()
679 {
680   setString( myDouble->text() );
681 }
682
683 void QtxListResourceEdit::DoubleEditItem::retrieve()
684 {
685   myDouble->setText( getString() );
686 }
687
688 /*
689   Class: QtxListResourceEdit::DoubleSpinItem
690   Descr: GUI implementation of resources double item.
691 */
692
693 QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
694                                                      Item* pItem, QWidget* parent )
695 : PrefItem( DblSpin, edit, pItem, parent )
696 {
697   new QLabel( title, this );
698   myDouble = new QtxDblSpinBox( this );
699   myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
700 }
701
702 QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
703 {
704 }
705
706 void QtxListResourceEdit::DoubleSpinItem::store()
707 {
708   setDouble( myDouble->value() );
709 }
710
711 void QtxListResourceEdit::DoubleSpinItem::retrieve()
712 {
713   myDouble->setValue( getDouble() );
714 }
715
716 QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
717 {
718   QVariant var;
719   if ( name == QString( "minimum" ) || name == QString( "min" ) )
720     var = QVariant( myDouble->minValue() );
721   else if ( name == QString( "maximum" ) || name == QString( "max" ) )
722     var = QVariant( myDouble->maxValue() );
723   else if ( name == QString( "precision" ) )
724     var = QVariant( myDouble->precision() );
725   else if ( name == QString( "step" ) )
726     var = QVariant( myDouble->lineStep() );
727   return var;
728 }
729
730 void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
731 {
732   QVariant prop = var;
733   if ( prop.cast( QVariant::Double ) )
734   {
735     double val = prop.toDouble();
736     if ( name == QString( "minimum" ) || name == QString( "min" ) )
737       myDouble->setMinValue( val );
738     else if ( name == QString( "maximum" ) || name == QString( "max" ) )
739       myDouble->setMaxValue( val );
740     else if ( name == QString( "step" ) && val > 0 )
741       myDouble->setLineStep( val );
742   }
743   else
744   {
745     QVariant prop = var;
746     if ( prop.cast( QVariant::Int ) && name == QString( "precision" ) && prop.toInt() > 0 )
747       myDouble->setPrecision( prop.toInt() );
748   }
749 }
750
751 /*
752   Class: QtxListResourceEdit::ColorItem
753   Descr: GUI implementation of resources color item.
754 */
755
756 QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
757                                            Item* pItem, QWidget* parent )
758 : PrefItem( Color, edit, pItem, parent )
759 {
760   class ColorSelector : public QLabel
761   {
762   public:
763     ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
764     {
765       setFrameStyle( WinPanel | Raised );
766     }
767     virtual ~ColorSelector() {}
768     virtual QSize minimumSizeHint() const
769     {
770       return QLabel::minimumSizeHint() + QSize( 0, 2 );
771     }
772
773   protected:
774     virtual void mousePressEvent( QMouseEvent* e )
775     {
776       if ( e->button() == LeftButton )
777       {
778         setFrameStyle( WinPanel | Sunken );
779         QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
780         if ( c.isValid() )
781           setPaletteBackgroundColor( c );
782
783         setFrameStyle( WinPanel | Raised );
784       }
785     }
786   };
787
788   new QLabel( title, this );
789   myColor = new ColorSelector( this );
790   myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
791 }
792
793 QtxListResourceEdit::ColorItem::~ColorItem()
794 {
795 }
796
797 void QtxListResourceEdit::ColorItem::store()
798 {
799   setColor( myColor->paletteBackgroundColor() );
800 }
801
802 void QtxListResourceEdit::ColorItem::retrieve()
803 {
804   myColor->setPaletteBackgroundColor( getColor() );
805 }