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