1 // File: QtxListResourceEdit.cxx
2 // Author: Sergey TELKOV
4 #include "QtxListResourceEdit.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 #include <qfontdatabase.h>
23 #include "QtxIntSpinBox.h"
24 #include "QtxDblSpinBox.h"
25 #include "QtxComboBox.h"
26 #include "QtxDirListEditor.h"
29 Class: QtxListResourceEdit
30 Descr: GUI implementation of QtxResourceEdit - manager of resources
33 QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
35 QtxResourceEdit( mgr )
37 QVBoxLayout* main = new QVBoxLayout( this, 0, 5 );
38 QGroupBox* base = new QGroupBox( 1, Qt::Vertical, "", this );
39 base->setFrameStyle( QFrame::NoFrame );
40 base->setInsideMargin( 0 );
41 main->addWidget( base );
43 myList = new QListBox( base );
44 myStack = new QWidgetStack( base );
46 myList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
47 myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
49 myList->setSelectionMode( QListBox::Single );
51 connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
53 setFocusProxy( myList );
58 QtxListResourceEdit::~QtxListResourceEdit()
62 void QtxListResourceEdit::setItemProperty( const int id, const QString& prop, const QVariant& val )
68 bool prev = i->isEmpty();
70 QtxResourceEdit::setItemProperty( id, prop, val );
72 bool next = i->isEmpty();
78 void QtxListResourceEdit::onSelectionChanged()
80 QString title = myList->text( myList->index( myList->selectedItem() ) );
81 if ( title.isEmpty() )
87 for ( QPtrListIterator<Item> it( lst ); it.current() && !i; ++it )
89 if ( it.current()->title() == title )
94 myStack->raiseWidget( i->id() );
97 void QtxListResourceEdit::itemAdded( QtxResourceEdit::Item* i )
102 QPtrList<Item> items;
105 if ( items.contains( i ) || items.contains( i->parentItem() ) )
109 QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
111 Item* i = item( title, -1 );
115 Category* category = new Category( this, myStack );
116 myStack->addWidget( category, category->id() );
120 if ( !myList->selectedItem() )
121 myList->setSelected( 0, true );
128 void QtxListResourceEdit::changedResources( const QMap<Item*, QString>& map )
130 QMap<int, QString> idMap;
131 for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
133 idMap.insert( it.key()->id(), it.data() );
135 emit resourceChanged( it.key()->id() );
138 it.key()->resource( sec, param );
139 emit resourceChanged( sec, param );
142 emit resourcesChanged( idMap );
145 void QtxListResourceEdit::updateState()
147 if ( myList->selectedItem() && myStack->visibleWidget() )
153 void QtxListResourceEdit::updateVisible()
155 QPtrList<Item> items;
158 QString name = myList->text( myList->index( myList->selectedItem() ) );
161 for ( QPtrListIterator<Item> it( items ); it.current(); ++it )
163 if ( it.current()->isEmpty() )
166 myList->insertItem( it.current()->title() );
170 for ( int i = 0; i < (int)myList->count() && idx == -1; i++ )
172 if ( myList->text( i ) == name )
176 myList->setSelected( QMAX( idx, 0 ), true );
182 Class: QtxListResourceEdit::Category
183 Descr: GUI implementation of preferences category.
186 QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
190 QVBoxLayout* main = new QVBoxLayout( this );
191 QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
192 base->setFrameStyle( QFrame::NoFrame );
193 base->setInsideMargin( 0 );
194 main->addWidget( base, 1 );
196 myTabs = new QTabWidget( base );
197 myInfo = new QLabel( base );
199 myInfo->setAlignment( Qt::AlignCenter );
200 myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
201 myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
206 QtxListResourceEdit::Category::~Category()
210 bool QtxListResourceEdit::Category::isEmpty() const
212 return Item::isEmpty() && myInfo->text().isEmpty();
215 int QtxListResourceEdit::Category::type() const
220 void QtxListResourceEdit::Category::store()
224 void QtxListResourceEdit::Category::retrieve()
228 QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
231 if ( prop == QString( "information" ) || prop == QString( "info" ) )
232 var = myInfo->text();
236 void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
239 if ( !prop.cast( QVariant::String ) )
242 if ( name == QString( "information" ) || name == QString( "info" ) )
243 myInfo->setText( prop.toString() );
248 QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
250 Item* i = item( title, id() );
254 Tab* tab = new Tab( resourceEdit(), this, this );
255 myTabs->addTab( tab, title );
262 void QtxListResourceEdit::Category::updateState()
264 if ( myTabs->count() )
269 if ( !myTabs->count() && !myInfo->text().isEmpty() )
276 Class: QtxListResourceEdit::Tab
277 Descr: GUI implementation of resources tab.
280 QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
284 QVBoxLayout* main = new QVBoxLayout( this );
285 QVBox* vbox = new QVBox( this );
286 vbox->setMargin( 5 );
288 main->addWidget( myMainFrame );
289 main->addStretch( 1 );
292 QtxListResourceEdit::Tab::~Tab()
296 int QtxListResourceEdit::Tab::type() const
301 void QtxListResourceEdit::Tab::store()
305 void QtxListResourceEdit::Tab::retrieve()
309 void QtxListResourceEdit::Tab::polish()
316 QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
318 Item* i = item( title, id() );
322 Group* group = new Group( title, resourceEdit(), this, myMainFrame );
327 void QtxListResourceEdit::Tab::adjustLabels()
329 QObjectList* labels = queryList( "QLabel" );
333 for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
335 if ( it1.current()->isWidgetType() )
337 QWidget* wid = (QWidget*)it1.current();
338 w = QMAX( w, wid->sizeHint().width() );
341 for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
343 if ( it2.current()->isWidgetType() )
345 QWidget* wid = (QWidget*)it2.current();
346 wid->setMinimumWidth( w );
354 Class: QtxListResourceEdit::Group
355 Descr: GUI implementation of resources group.
358 QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
359 : QGroupBox( 2, Qt::Horizontal, title, parent ),
364 QtxListResourceEdit::Group::~Group()
368 int QtxListResourceEdit::Group::type() const
373 void QtxListResourceEdit::Group::store()
377 void QtxListResourceEdit::Group::retrieve()
381 QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
384 if ( prop == "columns" )
385 var = QVariant( columns() );
386 else if ( prop == "orientation" )
387 var = QVariant( orientation() );
388 else if ( prop == "frame" )
389 var = QVariant( frameStyle() != QFrame::NoFrame );
393 void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
396 if ( !prop.cast( QVariant::Int ) )
399 if ( name == QString( "columns" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
400 setColumns( prop.toInt() );
401 else if ( name == QString( "orientation" ) && prop.cast( QVariant::Int ) )
403 int o = prop.toInt();
404 if ( o == Qt::Horizontal || o == Qt::Vertical )
405 setOrientation( (Orientation)o );
407 else if ( name == "frame" && prop.cast( QVariant::Bool ) )
409 setInsideMargin( prop.toBool() ? 5 : 0 );
410 QGroupBox::setTitle( prop.toBool() ? Item::title() : QString::null );
411 setFrameStyle( prop.toBool() ? QFrame::Box | QFrame::Sunken : QFrame::NoFrame );
415 void QtxListResourceEdit::Group::setTitle( const QString& title )
417 Item::setTitle( title );
418 QGroupBox::setTitle( title );
421 QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
428 item = new ColorItem( title, resourceEdit(), this, this );
431 item = new StateItem( title, resourceEdit(), this, this );
434 item = new StringItem( title, resourceEdit(), this, this );
437 item = new SelectItem( title, resourceEdit(), this, this );
440 item = new DoubleSpinItem( title, resourceEdit(), this, this );
443 item = new IntegerSpinItem( title, resourceEdit(), this, this );
446 item = new DoubleEditItem( title, resourceEdit(), this, this );
449 item = new IntegerEditItem( title, resourceEdit(), this, this );
452 item = new Spacer( resourceEdit(), this, this );
455 item = new Group( title, resourceEdit(), this, this );
458 item = new FontItem( title, resourceEdit(), this, this );
461 item = new DirListItem( title, resourceEdit(), this, this );
469 Class: QtxListResourceEdit::PrefItem
470 Descr: Base class for preferences items.
473 QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
481 QtxListResourceEdit::PrefItem::~PrefItem()
485 int QtxListResourceEdit::PrefItem::type() const
490 QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
496 Class: QtxListResourceEdit::Spacer
497 Descr: GUI implementation of resources spacer.
500 QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
501 : PrefItem( Space, edit, pItem, parent )
503 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
506 QtxListResourceEdit::Spacer::~Spacer()
510 void QtxListResourceEdit::Spacer::store()
514 void QtxListResourceEdit::Spacer::retrieve()
519 Class: QtxListResourceEdit::SelectItem
520 Descr: GUI implementation of resources list item.
523 QtxListResourceEdit::SelectItem::SelectItem( const QString& title, QtxResourceEdit* edit,
524 Item* pItem, QWidget* parent )
525 : PrefItem( Selector, edit, pItem, parent )
527 new QLabel( title, this );
528 myList = new QComboBox( false, this );
529 myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
532 QtxListResourceEdit::SelectItem::~SelectItem()
536 void QtxListResourceEdit::SelectItem::store()
538 int idx = myList->currentItem();
539 if ( myIndex.contains( idx ) )
540 setInteger( myIndex[idx] );
543 void QtxListResourceEdit::SelectItem::retrieve()
545 int id = getInteger( -1 );
548 for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
550 if ( it.data() == id )
554 myList->setCurrentItem( idx );
557 QVariant QtxListResourceEdit::SelectItem::property( const QString& name ) const
560 if ( name == QString( "strings" ) )
563 for ( int i = 0; i < (int)myList->count(); i++ )
564 lst.append( myList->text( i ) );
565 val = QVariant( lst );
567 else if ( name == QString( "indexes" ) )
569 QValueList<QVariant> lst;
570 for ( int i = 0; i < (int)myList->count(); i++ )
571 lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
572 val = QVariant( lst );
577 void QtxListResourceEdit::SelectItem::setProperty( const QString& name, const QVariant& val )
579 if ( name == QString( "strings" ) )
581 else if ( name == QString( "indexes" ) )
585 void QtxListResourceEdit::SelectItem::setStrings( const QVariant& var )
587 if ( var.type() != QVariant::StringList )
590 setStrings( var.toStringList() );
593 void QtxListResourceEdit::SelectItem::setIndexes( const QVariant& var )
595 if ( var.type() != QVariant::List )
598 QValueList<QVariant> varList = var.toList();
600 for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
602 if ( (*it).canCast( QVariant::Int ) )
603 lst.append( (*it).toInt() );
608 void QtxListResourceEdit::SelectItem::setStrings( const QStringList& lst )
611 myList->insertStringList( lst );
614 void QtxListResourceEdit::SelectItem::setIndexes( const QValueList<int>& lst )
619 for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
620 myIndex.insert( idx, *it );
624 Class: QtxListResourceEdit::StateItem
625 Descr: GUI implementation of resources bool item.
628 QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
629 Item* pItem, QWidget* parent )
630 : PrefItem( Bool, edit, pItem, parent )
632 myState = new QCheckBox( title, this );
633 myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
636 QtxListResourceEdit::StateItem::~StateItem()
640 void QtxListResourceEdit::StateItem::store()
642 setBoolean( myState->isChecked() );
645 void QtxListResourceEdit::StateItem::retrieve()
647 myState->setChecked( getBoolean() );
651 Class: QtxListResourceEdit::StringItem
652 Descr: GUI implementation of resources string item.
655 QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
656 Item* pItem, QWidget* parent )
657 : PrefItem( String, edit, pItem, parent )
659 new QLabel( title, this );
660 myString = new QLineEdit( this );
661 myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
664 QtxListResourceEdit::StringItem::~StringItem()
668 void QtxListResourceEdit::StringItem::store()
670 setString( myString->text() );
673 void QtxListResourceEdit::StringItem::retrieve()
675 myString->setText( getString() );
679 Class: QtxListResourceEdit::IntegerEditItem
680 Descr: GUI implementation of resources integer item.
683 QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
684 : PrefItem( Integer, edit, pItem, parent )
686 new QLabel( title, this );
687 myInteger = new QLineEdit( this );
688 myInteger->setValidator( new QIntValidator( myInteger ) );
689 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
692 QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
696 void QtxListResourceEdit::IntegerEditItem::store()
698 setString( myInteger->text() );
701 void QtxListResourceEdit::IntegerEditItem::retrieve()
703 myInteger->setText( getString() );
707 Class: QtxListResourceEdit::IntegerSpinItem
708 Descr: GUI implementation of resources integer item.
711 QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
712 : PrefItem( IntSpin, edit, pItem, parent )
714 new QLabel( title, this );
715 myInteger = new QtxIntSpinBox( this );
716 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
719 QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
723 void QtxListResourceEdit::IntegerSpinItem::store()
725 setInteger( myInteger->value() );
728 void QtxListResourceEdit::IntegerSpinItem::retrieve()
730 myInteger->setValue( getInteger() );
733 QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
736 if ( name == QString( "minimum" ) || name == QString( "min" ) )
737 var = QVariant( myInteger->minValue() );
738 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
739 var = QVariant( myInteger->maxValue() );
740 else if ( name == QString( "step" ) )
741 var = QVariant( myInteger->lineStep() );
742 else if ( name == QString( "special" ) )
743 var = QVariant( myInteger->specialValueText() );
744 else if ( name == QString( "prefix" ) )
745 var = QVariant( myInteger->prefix() );
746 else if ( name == QString( "suffix" ) )
747 var = QVariant( myInteger->suffix() );
751 void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
755 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Int ) )
756 myInteger->setMinValue( prop.toInt() );
757 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Int ) )
758 myInteger->setMaxValue( prop.toInt() );
759 else if ( name == QString( "step" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
760 myInteger->setLineStep( prop.toInt() );
761 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
762 myInteger->setSpecialValueText( prop.toString() );
763 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
764 myInteger->setPrefix( prop.toString() );
765 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
766 myInteger->setSuffix( prop.toString() );
770 Class: QtxListResourceEdit::DoubleEditItem
771 Descr: GUI implementation of resources string item.
774 QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
775 Item* pItem, QWidget* parent )
776 : PrefItem( Double, edit, pItem, parent )
778 new QLabel( title, this );
779 myDouble = new QLineEdit( this );
780 myDouble->setValidator( new QDoubleValidator( myDouble ) );
781 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
784 QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
788 void QtxListResourceEdit::DoubleEditItem::store()
790 setString( myDouble->text() );
793 void QtxListResourceEdit::DoubleEditItem::retrieve()
795 myDouble->setText( getString() );
799 Class: QtxListResourceEdit::DoubleSpinItem
800 Descr: GUI implementation of resources double item.
803 QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
804 Item* pItem, QWidget* parent )
805 : PrefItem( DblSpin, edit, pItem, parent )
807 new QLabel( title, this );
808 myDouble = new QtxDblSpinBox( this );
809 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
812 QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
816 void QtxListResourceEdit::DoubleSpinItem::store()
818 setDouble( myDouble->value() );
821 void QtxListResourceEdit::DoubleSpinItem::retrieve()
823 myDouble->setValue( getDouble() );
826 QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
829 if ( name == QString( "minimum" ) || name == QString( "min" ) )
830 var = QVariant( myDouble->minValue() );
831 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
832 var = QVariant( myDouble->maxValue() );
833 else if ( name == QString( "precision" ) )
834 var = QVariant( myDouble->precision() );
835 else if ( name == QString( "step" ) )
836 var = QVariant( myDouble->lineStep() );
837 else if ( name == QString( "special" ) )
838 var = QVariant( myDouble->specialValueText() );
839 else if ( name == QString( "prefix" ) )
840 var = QVariant( myDouble->prefix() );
841 else if ( name == QString( "suffix" ) )
842 var = QVariant( myDouble->suffix() );
846 void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
850 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Double ) )
851 myDouble->setMinValue( prop.toDouble() );
852 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Double ) )
853 myDouble->setMaxValue( prop.toDouble() );
854 else if ( name == QString( "step" ) && prop.cast( QVariant::Double ) && prop.toDouble() > 0 )
855 myDouble->setLineStep( prop.toDouble() );
856 else if ( name == QString( "precision" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
857 myDouble->setPrecision( prop.toInt() );
858 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
859 myDouble->setSpecialValueText( prop.toString() );
860 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
861 myDouble->setPrefix( prop.toString() );
862 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
863 myDouble->setSuffix( prop.toString() );
867 Class: QtxListResourceEdit::ColorItem
868 Descr: GUI implementation of resources color item.
871 QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
872 Item* pItem, QWidget* parent )
873 : PrefItem( Color, edit, pItem, parent )
875 class ColorSelector : public QLabel
878 ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
880 setFrameStyle( WinPanel | Raised );
882 virtual ~ColorSelector() {}
883 virtual QSize minimumSizeHint() const
885 return QLabel::minimumSizeHint() + QSize( 0, 2 );
889 virtual void mousePressEvent( QMouseEvent* e )
891 if ( e->button() == LeftButton )
893 setFrameStyle( WinPanel | Sunken );
894 QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
896 setPaletteBackgroundColor( c );
898 setFrameStyle( WinPanel | Raised );
903 new QLabel( title, this );
904 myColor = new ColorSelector( this );
905 myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
908 QtxListResourceEdit::ColorItem::~ColorItem()
912 void QtxListResourceEdit::ColorItem::store()
914 setColor( myColor->paletteBackgroundColor() );
917 void QtxListResourceEdit::ColorItem::retrieve()
919 myColor->setPaletteBackgroundColor( getColor() );
924 Class: QtxListResourceEdit::FontItem
925 Descr: GUI implementation of resources font item.
927 QtxListResourceEdit::FontItem::FontItem( const QString& title, QtxResourceEdit* edit,
928 Item* pItem, QWidget* parent )
929 : PrefItem( Font, edit, pItem, parent )
931 new QLabel( title, this );
932 myFamilies = new QtxComboBox( false, this );
933 mySizes = new QtxComboBox( true, this );
934 mySizes->setInsertionPolicy( QComboBox::NoInsertion );
935 myBold = new QCheckBox( tr( "Bold" ), this );
936 myItalic = new QCheckBox( tr( "Italic" ), this );
937 myUnderline = new QCheckBox( tr( "Underline" ), this );
939 myFamilies->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
940 mySizes->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
942 connect( myFamilies, SIGNAL( activated( int ) ), this, SLOT( onActivateFamily( int ) ) );
944 setProperty( "widget_flags", ( int )All );
945 setProperty( "system", ( bool )true );
948 QtxListResourceEdit::FontItem::~FontItem()
952 void QtxListResourceEdit::FontItem::store()
954 QFont f( family(), size() );
955 bool bold, italic, underline;
956 params( bold, italic, underline );
958 f.setItalic( italic );
959 f.setUnderline( underline );
963 void QtxListResourceEdit::FontItem::retrieve()
966 setFamily( f.family() );
967 setSize( f.pointSize() );
968 setParams( f.bold(), f.italic(), f.underline() );
971 QVariant QtxListResourceEdit::FontItem::property( const QString& name ) const
976 else if( name=="widget_flags" )
977 return ( int )myFlags;
981 if( name=="families" )
984 return fdb.families();
987 else if( name=="default_family" )
990 QStringList fam = fdb.families();
994 return QString::null;
999 QStringList parts = QStringList::split( ":", name );
1000 if( parts.count()==2 )
1002 if( parts[1]=="default_bold" || parts[1]=="default_italic" || parts[1]=="default_underline" )
1005 else if( parts[1]=="sizes" )
1008 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1009 QValueList<QVariant> vsizes;
1010 QValueList<int>::const_iterator anIt = sizes.begin(),
1011 aLast = sizes.end();
1012 for( ; anIt!=aLast; anIt++ )
1013 vsizes.append( *anIt );
1018 else if( parts[1]=="default_size" )
1020 if( parts[0].isEmpty() )
1024 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1025 if( sizes.count()>0 )
1026 return sizes.first();
1034 else if( myProperties.contains( name ) )
1035 return myProperties[ name ];
1040 void QtxListResourceEdit::FontItem::setProperty( const QString& name, const QVariant& value )
1042 if( name=="system" )
1044 if( !value.canCast( QVariant::Bool ) )
1047 bool isSystem = value.toBool();
1048 if( myIsSystem==isSystem )
1051 myIsSystem = isSystem;
1053 QVariant families = property( "families" );
1054 QString fam = family();
1056 myFamilies->clear();
1057 if( families.canCast( QVariant::StringList ) )
1059 QStringList list = families.toStringList();
1060 myFamilies->insertStringList( list );
1066 else if( name=="widget_flags" )
1068 if( !value.canCast( QVariant::Int ) )
1071 int wf = value.toInt();
1074 myFamilies ->setShown( wf & Family );
1075 mySizes ->setShown( wf & Size );
1076 mySizes->lineEdit()->setReadOnly( ( wf & UserSize )==0 );
1077 myBold ->setShown( wf & Bold );
1078 myItalic ->setShown( wf & Italic );
1079 myUnderline->setShown( wf & Underline );
1085 myProperties[ name ] = value;
1088 void QtxListResourceEdit::FontItem::setFamily( const QString& f )
1091 if( myFamilies->isShown() )
1093 if( myFamilies->listBox()->findItem( f, Qt::ExactMatch ) )
1098 QVariant deffam = property( "default_family" );
1099 if( deffam.canCast( QVariant::String ) )
1100 curtext = deffam.toString();
1104 for ( int i = 0; i < (int)myFamilies->count() && idx < 0; i++ )
1106 if ( myFamilies->text( i ) == curtext )
1111 myFamilies->setCurrentItem( idx );
1114 QString QtxListResourceEdit::FontItem::family() const
1116 return myFamilies->currentText();
1119 void QtxListResourceEdit::FontItem::setSize( const int s )
1122 if( mySizes->isShown() )
1124 if( ( myFlags & UserSize ) || mySizes->listBox()->findItem( QString( "%1" ).arg( s ), Qt::ExactMatch ) )
1129 QVariant defsize = property( QString( "%1:default_size" ).arg( family() ) );
1130 if( defsize.canCast( QVariant::Int ) )
1131 cursize = defsize.toInt();
1134 mySizes->setCurrentText( cursize>0 ? QString( "%1" ).arg( cursize ) : "" );
1137 int QtxListResourceEdit::FontItem::size() const
1139 QString s = mySizes->currentText();
1141 int pSize = s.toInt( &ok );
1142 return ( ok ? pSize : 0 );
1145 void QtxListResourceEdit::FontItem::setParams( const bool bold, const bool italic, const bool underline )
1147 bool curbold = false, curitalic = false, curunderline = false;
1148 if( myBold->isShown() )
1152 QVariant def = property( QString( "%1:default_bold" ).arg( family() ) );
1153 if( def.canCast( QVariant::Bool ) )
1154 curbold = def.toBool();
1156 if( myItalic->isShown() )
1160 QVariant def = property( QString( "%1:default_italic" ).arg( family() ) );
1161 if( def.canCast( QVariant::Bool ) )
1162 curitalic = def.toBool();
1164 if( myUnderline->isShown() )
1165 curunderline = underline;
1168 QVariant def = property( QString( "%1:default_underline" ).arg( family() ) );
1169 if( def.canCast( QVariant::Bool ) )
1170 curunderline = def.toBool();
1172 myBold->setChecked( curbold );
1173 myItalic->setChecked( curitalic );
1174 myUnderline->setChecked( curunderline );
1177 void QtxListResourceEdit::FontItem::params( bool& bold, bool& italic, bool& underline )
1179 bold = myBold->isChecked();
1180 italic = myItalic->isChecked();
1181 underline = myUnderline->isChecked();
1184 void QtxListResourceEdit::FontItem::internalUpdate()
1186 //update internal selection of font properties
1187 setFamily( family() );
1190 params( b1, b2, b3 );
1191 setParams( b1, b2, b3 );
1194 void QtxListResourceEdit::FontItem::onActivateFamily( int )
1196 QVariant sizes = property( QString( "%1:sizes" ).arg( family() ) );
1200 if( sizes.canCast( QVariant::List ) )
1202 QValueList<QVariant> list = sizes.toList();
1203 QStringList sizeItems;
1204 QValueList<QVariant>::const_iterator anIt = list.begin(),
1206 for( ; anIt!=aLast; anIt++ )
1207 if( (*anIt).canCast( QVariant::Int ) && (*anIt).toInt()>0 )
1208 sizeItems.append( QString( "%1" ).arg( (*anIt).toInt() ) );
1209 mySizes->insertStringList( sizeItems );
1218 Class: QtxListResourceEdit::DirListItem
1221 QtxListResourceEdit::DirListItem::DirListItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
1222 : PrefItem( Font, edit, pItem, parent )
1224 myDirListEditor = new QtxDirListEditor( this );
1227 QtxListResourceEdit::DirListItem::~DirListItem()
1231 void QtxListResourceEdit::DirListItem::store()
1234 myDirListEditor->getPathList(list);
1235 setString( QString(list.join(";")) );
1238 void QtxListResourceEdit::DirListItem::retrieve()
1240 myDirListEditor->setPathList(QStringList::split(";", getString()));