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