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>
22 #include <qfileinfo.h>
23 #include <qfiledialog.h>
25 #include "QtxIntSpinBox.h"
26 #include "QtxDblSpinBox.h"
27 #include "QtxComboBox.h"
28 #include "QtxDirListEditor.h"
31 Class: QtxListResourceEdit
32 Descr: GUI implementation of QtxResourceEdit - manager of resources
35 QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
37 QtxResourceEdit( mgr )
39 QVBoxLayout* main = new QVBoxLayout( this, 0, 5 );
40 QGroupBox* base = new QGroupBox( 1, Qt::Vertical, "", this );
41 base->setFrameStyle( QFrame::NoFrame );
42 base->setInsideMargin( 0 );
43 main->addWidget( base );
45 myList = new QListBox( base );
46 myStack = new QWidgetStack( base );
48 myList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
49 myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
51 myList->setSelectionMode( QListBox::Single );
53 connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
55 setFocusProxy( myList );
60 QtxListResourceEdit::~QtxListResourceEdit()
64 void QtxListResourceEdit::setItemProperty( const int id, const QString& prop, const QVariant& val )
70 bool prev = i->isEmpty();
72 QtxResourceEdit::setItemProperty( id, prop, val );
74 bool next = i->isEmpty();
80 void QtxListResourceEdit::onSelectionChanged()
82 QString title = myList->text( myList->index( myList->selectedItem() ) );
83 if ( title.isEmpty() )
89 for ( QPtrListIterator<Item> it( lst ); it.current() && !i; ++it )
91 if ( it.current()->title() == title )
96 myStack->raiseWidget( i->id() );
99 void QtxListResourceEdit::itemAdded( QtxResourceEdit::Item* i )
104 QPtrList<Item> items;
107 if ( items.contains( i ) || items.contains( i->parentItem() ) )
111 QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
113 Item* i = item( title, -1 );
117 Category* category = new Category( this, myStack );
118 myStack->addWidget( category, category->id() );
122 if ( !myList->selectedItem() )
123 myList->setSelected( 0, true );
130 void QtxListResourceEdit::changedResources( const QMap<Item*, QString>& map )
132 QMap<int, QString> idMap;
133 for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
135 idMap.insert( it.key()->id(), it.data() );
137 emit resourceChanged( it.key()->id() );
140 it.key()->resource( sec, param );
141 emit resourceChanged( sec, param );
144 emit resourcesChanged( idMap );
147 void QtxListResourceEdit::updateState()
149 if ( myList->selectedItem() && myStack->visibleWidget() )
155 void QtxListResourceEdit::updateVisible()
157 QPtrList<Item> items;
160 QString name = myList->text( myList->index( myList->selectedItem() ) );
163 for ( QPtrListIterator<Item> it( items ); it.current(); ++it )
165 if ( it.current()->isEmpty() )
168 myList->insertItem( it.current()->title() );
172 for ( int i = 0; i < (int)myList->count() && idx == -1; i++ )
174 if ( myList->text( i ) == name )
178 myList->setSelected( QMAX( idx, 0 ), true );
184 Class: QtxListResourceEdit::Category
185 Descr: GUI implementation of preferences category.
188 QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
192 QVBoxLayout* main = new QVBoxLayout( this );
193 QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
194 base->setFrameStyle( QFrame::NoFrame );
195 base->setInsideMargin( 0 );
196 main->addWidget( base, 1 );
198 myTabs = new QTabWidget( base );
199 myInfo = new QLabel( base );
201 myInfo->setAlignment( Qt::AlignCenter );
202 myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
203 myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
208 QtxListResourceEdit::Category::~Category()
212 bool QtxListResourceEdit::Category::isEmpty() const
214 return Item::isEmpty() && myInfo->text().isEmpty();
217 int QtxListResourceEdit::Category::type() const
222 void QtxListResourceEdit::Category::store()
226 void QtxListResourceEdit::Category::retrieve()
230 QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
233 if ( prop == QString( "information" ) || prop == QString( "info" ) )
234 var = myInfo->text();
238 void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
241 if ( !prop.cast( QVariant::String ) )
244 if ( name == QString( "information" ) || name == QString( "info" ) )
245 myInfo->setText( prop.toString() );
250 QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
252 Item* i = item( title, id() );
256 Tab* tab = new Tab( resourceEdit(), this, this );
257 myTabs->addTab( tab, title );
264 void QtxListResourceEdit::Category::updateState()
266 if ( myTabs->count() )
271 if ( !myTabs->count() && !myInfo->text().isEmpty() )
278 Class: QtxListResourceEdit::Tab
279 Descr: GUI implementation of resources tab.
282 QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
286 QVBoxLayout* main = new QVBoxLayout( this );
287 QVBox* vbox = new QVBox( this );
288 vbox->setMargin( 5 );
290 main->addWidget( myMainFrame );
291 main->addStretch( 1 );
294 QtxListResourceEdit::Tab::~Tab()
298 int QtxListResourceEdit::Tab::type() const
303 void QtxListResourceEdit::Tab::store()
307 void QtxListResourceEdit::Tab::retrieve()
311 void QtxListResourceEdit::Tab::polish()
318 QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
320 Item* i = item( title, id() );
324 Group* group = new Group( title, resourceEdit(), this, myMainFrame );
329 void QtxListResourceEdit::Tab::adjustLabels()
331 QObjectList* labels = queryList( "QLabel" );
335 for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
337 if ( it1.current()->isWidgetType() )
339 QWidget* wid = (QWidget*)it1.current();
340 w = QMAX( w, wid->sizeHint().width() );
343 for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
345 if ( it2.current()->isWidgetType() )
347 QWidget* wid = (QWidget*)it2.current();
348 wid->setMinimumWidth( w );
356 Class: QtxListResourceEdit::Group
357 Descr: GUI implementation of resources group.
360 QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
361 : QGroupBox( 2, Qt::Horizontal, title, parent ),
366 QtxListResourceEdit::Group::~Group()
370 int QtxListResourceEdit::Group::type() const
375 void QtxListResourceEdit::Group::store()
379 void QtxListResourceEdit::Group::retrieve()
383 QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
386 if ( prop == "columns" )
387 var = QVariant( columns() );
388 else if ( prop == "orientation" )
389 var = QVariant( orientation() );
390 else if ( prop == "frame" )
391 var = QVariant( frameStyle() != QFrame::NoFrame );
395 void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
398 if ( !prop.cast( QVariant::Int ) )
401 if ( name == QString( "columns" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
402 setColumns( prop.toInt() );
403 else if ( name == QString( "orientation" ) && prop.cast( QVariant::Int ) )
405 int o = prop.toInt();
406 if ( o == Qt::Horizontal || o == Qt::Vertical )
407 setOrientation( (Orientation)o );
409 else if ( name == "frame" && prop.cast( QVariant::Bool ) )
411 setInsideMargin( prop.toBool() ? 5 : 0 );
412 QGroupBox::setTitle( prop.toBool() ? Item::title() : QString::null );
413 setFrameStyle( prop.toBool() ? QFrame::Box | QFrame::Sunken : QFrame::NoFrame );
417 void QtxListResourceEdit::Group::setTitle( const QString& title )
419 Item::setTitle( title );
420 QGroupBox::setTitle( title );
423 QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
430 item = new ColorItem( title, resourceEdit(), this, this );
433 item = new StateItem( title, resourceEdit(), this, this );
436 item = new StringItem( title, resourceEdit(), this, this );
439 item = new SelectItem( title, resourceEdit(), this, this );
442 item = new DoubleSpinItem( title, resourceEdit(), this, this );
445 item = new IntegerSpinItem( title, resourceEdit(), this, this );
448 item = new DoubleEditItem( title, resourceEdit(), this, this );
451 item = new IntegerEditItem( title, resourceEdit(), this, this );
454 item = new Spacer( resourceEdit(), this, this );
457 item = new Group( title, resourceEdit(), this, this );
460 item = new FontItem( title, resourceEdit(), this, this );
463 item = new DirListItem( title, resourceEdit(), this, this );
466 item = new FileItem( title, resourceEdit(), this, this );
474 Class: QtxListResourceEdit::PrefItem
475 Descr: Base class for preferences items.
478 QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
486 QtxListResourceEdit::PrefItem::~PrefItem()
490 int QtxListResourceEdit::PrefItem::type() const
495 QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
501 Class: QtxListResourceEdit::Spacer
502 Descr: GUI implementation of resources spacer.
505 QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
506 : PrefItem( Space, edit, pItem, parent )
508 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
511 QtxListResourceEdit::Spacer::~Spacer()
515 void QtxListResourceEdit::Spacer::store()
519 void QtxListResourceEdit::Spacer::retrieve()
524 Class: QtxListResourceEdit::SelectItem
525 Descr: GUI implementation of resources list item.
528 QtxListResourceEdit::SelectItem::SelectItem( const QString& title, QtxResourceEdit* edit,
529 Item* pItem, QWidget* parent )
530 : PrefItem( Selector, edit, pItem, parent )
532 new QLabel( title, this );
533 myList = new QComboBox( false, this );
534 myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
537 QtxListResourceEdit::SelectItem::~SelectItem()
541 void QtxListResourceEdit::SelectItem::store()
543 int idx = myList->currentItem();
544 if ( myIndex.contains( idx ) )
545 setInteger( myIndex[idx] );
548 void QtxListResourceEdit::SelectItem::retrieve()
550 int id = getInteger( -1 );
553 for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
555 if ( it.data() == id )
559 myList->setCurrentItem( idx );
562 QVariant QtxListResourceEdit::SelectItem::property( const QString& name ) const
565 if ( name == QString( "strings" ) )
568 for ( int i = 0; i < (int)myList->count(); i++ )
569 lst.append( myList->text( i ) );
570 val = QVariant( lst );
572 else if ( name == QString( "indexes" ) )
574 QValueList<QVariant> lst;
575 for ( int i = 0; i < (int)myList->count(); i++ )
576 lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
577 val = QVariant( lst );
582 void QtxListResourceEdit::SelectItem::setProperty( const QString& name, const QVariant& val )
584 if ( name == QString( "strings" ) )
586 else if ( name == QString( "indexes" ) )
590 void QtxListResourceEdit::SelectItem::setStrings( const QVariant& var )
592 if ( var.type() != QVariant::StringList )
595 setStrings( var.toStringList() );
598 void QtxListResourceEdit::SelectItem::setIndexes( const QVariant& var )
600 if ( var.type() != QVariant::List )
603 QValueList<QVariant> varList = var.toList();
605 for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
607 if ( (*it).canCast( QVariant::Int ) )
608 lst.append( (*it).toInt() );
613 void QtxListResourceEdit::SelectItem::setStrings( const QStringList& lst )
616 myList->insertStringList( lst );
619 void QtxListResourceEdit::SelectItem::setIndexes( const QValueList<int>& lst )
624 for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
625 myIndex.insert( idx, *it );
629 Class: QtxListResourceEdit::StateItem
630 Descr: GUI implementation of resources bool item.
633 QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
634 Item* pItem, QWidget* parent )
635 : PrefItem( Bool, edit, pItem, parent )
637 myState = new QCheckBox( title, this );
638 myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
641 QtxListResourceEdit::StateItem::~StateItem()
645 void QtxListResourceEdit::StateItem::store()
647 setBoolean( myState->isChecked() );
650 void QtxListResourceEdit::StateItem::retrieve()
652 myState->setChecked( getBoolean() );
656 Class: QtxListResourceEdit::StringItem
657 Descr: GUI implementation of resources string item.
660 QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
661 Item* pItem, QWidget* parent )
662 : PrefItem( String, edit, pItem, parent )
664 new QLabel( title, this );
665 myString = new QLineEdit( this );
666 myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
669 QtxListResourceEdit::StringItem::~StringItem()
673 void QtxListResourceEdit::StringItem::store()
675 setString( myString->text() );
678 void QtxListResourceEdit::StringItem::retrieve()
680 myString->setText( getString() );
684 Class: QtxListResourceEdit::IntegerEditItem
685 Descr: GUI implementation of resources integer item.
688 QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
689 : PrefItem( Integer, edit, pItem, parent )
691 new QLabel( title, this );
692 myInteger = new QLineEdit( this );
693 myInteger->setValidator( new QIntValidator( myInteger ) );
694 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
697 QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
701 void QtxListResourceEdit::IntegerEditItem::store()
703 setString( myInteger->text() );
706 void QtxListResourceEdit::IntegerEditItem::retrieve()
708 myInteger->setText( getString() );
712 Class: QtxListResourceEdit::IntegerSpinItem
713 Descr: GUI implementation of resources integer item.
716 QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
717 : PrefItem( IntSpin, edit, pItem, parent )
719 new QLabel( title, this );
720 myInteger = new QtxIntSpinBox( this );
721 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
724 QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
728 void QtxListResourceEdit::IntegerSpinItem::store()
730 setInteger( myInteger->value() );
733 void QtxListResourceEdit::IntegerSpinItem::retrieve()
735 myInteger->setValue( getInteger() );
738 QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
741 if ( name == QString( "minimum" ) || name == QString( "min" ) )
742 var = QVariant( myInteger->minValue() );
743 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
744 var = QVariant( myInteger->maxValue() );
745 else if ( name == QString( "step" ) )
746 var = QVariant( myInteger->lineStep() );
747 else if ( name == QString( "special" ) )
748 var = QVariant( myInteger->specialValueText() );
749 else if ( name == QString( "prefix" ) )
750 var = QVariant( myInteger->prefix() );
751 else if ( name == QString( "suffix" ) )
752 var = QVariant( myInteger->suffix() );
756 void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
760 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Int ) )
761 myInteger->setMinValue( prop.toInt() );
762 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Int ) )
763 myInteger->setMaxValue( prop.toInt() );
764 else if ( name == QString( "step" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
765 myInteger->setLineStep( prop.toInt() );
766 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
767 myInteger->setSpecialValueText( prop.toString() );
768 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
769 myInteger->setPrefix( prop.toString() );
770 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
771 myInteger->setSuffix( prop.toString() );
775 Class: QtxListResourceEdit::DoubleEditItem
776 Descr: GUI implementation of resources string item.
779 QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
780 Item* pItem, QWidget* parent )
781 : PrefItem( Double, edit, pItem, parent )
783 new QLabel( title, this );
784 myDouble = new QLineEdit( this );
785 myDouble->setValidator( new QDoubleValidator( myDouble ) );
786 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
789 QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
793 void QtxListResourceEdit::DoubleEditItem::store()
795 setString( myDouble->text() );
798 void QtxListResourceEdit::DoubleEditItem::retrieve()
800 myDouble->setText( getString() );
804 Class: QtxListResourceEdit::DoubleSpinItem
805 Descr: GUI implementation of resources double item.
808 QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
809 Item* pItem, QWidget* parent )
810 : PrefItem( DblSpin, edit, pItem, parent )
812 new QLabel( title, this );
813 myDouble = new QtxDblSpinBox( this );
814 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
817 QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
821 void QtxListResourceEdit::DoubleSpinItem::store()
823 setDouble( myDouble->value() );
826 void QtxListResourceEdit::DoubleSpinItem::retrieve()
828 myDouble->setValue( getDouble() );
831 QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
834 if ( name == QString( "minimum" ) || name == QString( "min" ) )
835 var = QVariant( myDouble->minValue() );
836 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
837 var = QVariant( myDouble->maxValue() );
838 else if ( name == QString( "precision" ) )
839 var = QVariant( myDouble->precision() );
840 else if ( name == QString( "step" ) )
841 var = QVariant( myDouble->lineStep() );
842 else if ( name == QString( "special" ) )
843 var = QVariant( myDouble->specialValueText() );
844 else if ( name == QString( "prefix" ) )
845 var = QVariant( myDouble->prefix() );
846 else if ( name == QString( "suffix" ) )
847 var = QVariant( myDouble->suffix() );
851 void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
855 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Double ) )
856 myDouble->setMinValue( prop.toDouble() );
857 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Double ) )
858 myDouble->setMaxValue( prop.toDouble() );
859 else if ( name == QString( "step" ) && prop.cast( QVariant::Double ) && prop.toDouble() > 0 )
860 myDouble->setLineStep( prop.toDouble() );
861 else if ( name == QString( "precision" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
862 myDouble->setPrecision( prop.toInt() );
863 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
864 myDouble->setSpecialValueText( prop.toString() );
865 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
866 myDouble->setPrefix( prop.toString() );
867 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
868 myDouble->setSuffix( prop.toString() );
872 Class: QtxListResourceEdit::ColorItem
873 Descr: GUI implementation of resources color item.
876 QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
877 Item* pItem, QWidget* parent )
878 : PrefItem( Color, edit, pItem, parent )
880 class ColorSelector : public QLabel
883 ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
885 setFrameStyle( WinPanel | Raised );
887 virtual ~ColorSelector() {}
888 virtual QSize minimumSizeHint() const
890 return QLabel::minimumSizeHint() + QSize( 0, 2 );
894 virtual void mousePressEvent( QMouseEvent* e )
896 if ( e->button() == LeftButton )
898 setFrameStyle( WinPanel | Sunken );
899 QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
901 setPaletteBackgroundColor( c );
903 setFrameStyle( WinPanel | Raised );
908 new QLabel( title, this );
909 myColor = new ColorSelector( this );
910 myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
913 QtxListResourceEdit::ColorItem::~ColorItem()
917 void QtxListResourceEdit::ColorItem::store()
919 setColor( myColor->paletteBackgroundColor() );
922 void QtxListResourceEdit::ColorItem::retrieve()
924 myColor->setPaletteBackgroundColor( getColor() );
929 Class: QtxListResourceEdit::FontItem
930 Descr: GUI implementation of resources font item.
932 QtxListResourceEdit::FontItem::FontItem( const QString& title, QtxResourceEdit* edit,
933 Item* pItem, QWidget* parent )
934 : PrefItem( Font, edit, pItem, parent )
936 new QLabel( title, this );
937 myFamilies = new QtxComboBox( false, this );
938 mySizes = new QtxComboBox( true, this );
939 mySizes->setInsertionPolicy( QComboBox::NoInsertion );
940 myBold = new QCheckBox( tr( "Bold" ), this );
941 myItalic = new QCheckBox( tr( "Italic" ), this );
942 myUnderline = new QCheckBox( tr( "Underline" ), this );
943 myPreview = new QToolButton( this );
944 myPreview->setText( "..." );
946 myFamilies->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
947 mySizes->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
949 connect( myFamilies, SIGNAL( activated( int ) ), this, SLOT( onActivateFamily( int ) ) );
950 connect( myPreview, SIGNAL( clicked() ), this, SLOT( onPreview() ) );
952 setProperty( "system", ( bool )true );
953 setProperty( "widget_flags", ( int )All );
956 QtxListResourceEdit::FontItem::~FontItem()
960 void QtxListResourceEdit::FontItem::store()
962 QFont f( family(), size() );
963 bool bold, italic, underline;
964 params( bold, italic, underline );
966 f.setItalic( italic );
967 f.setUnderline( underline );
971 void QtxListResourceEdit::FontItem::retrieve()
974 setFamily( f.family() );
975 setSize( f.pointSize() );
976 setParams( f.bold(), f.italic(), f.underline() );
979 QVariant QtxListResourceEdit::FontItem::property( const QString& name ) const
984 else if( name=="widget_flags" )
985 return ( int )myFlags;
989 if( name=="families" )
992 return fdb.families();
995 else if( name=="default_family" )
998 QStringList fam = fdb.families();
1002 return QString::null;
1007 QStringList parts = QStringList::split( ":", name );
1008 if( parts.count()==2 )
1010 if( parts[1]=="default_bold" || parts[1]=="default_italic" || parts[1]=="default_underline" )
1013 else if( parts[1]=="sizes" )
1016 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1017 QValueList<QVariant> vsizes;
1018 QValueList<int>::const_iterator anIt = sizes.begin(),
1019 aLast = sizes.end();
1020 for( ; anIt!=aLast; anIt++ )
1021 vsizes.append( *anIt );
1026 else if( parts[1]=="default_size" )
1028 if( parts[0].isEmpty() )
1032 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1033 if( sizes.count()>0 )
1034 return sizes.first();
1042 else if( myProperties.contains( name ) )
1043 return myProperties[ name ];
1048 void QtxListResourceEdit::FontItem::setProperty( const QString& name, const QVariant& value )
1050 if( name=="system" )
1052 if( !value.canCast( QVariant::Bool ) )
1055 bool isSystem = value.toBool();
1056 if( myIsSystem==isSystem )
1059 myIsSystem = isSystem;
1061 QVariant families = property( "families" );
1062 QString fam = family();
1064 myFamilies->clear();
1065 if( families.canCast( QVariant::StringList ) )
1067 QStringList list = families.toStringList();
1068 myFamilies->insertStringList( list );
1072 setSize( -1 ); //set default size
1075 else if( name=="widget_flags" )
1077 if( !value.canCast( QVariant::Int ) )
1080 int wf = value.toInt();
1083 myFamilies ->setShown( wf & Family );
1084 mySizes ->setShown( wf & Size );
1085 mySizes->lineEdit()->setReadOnly( ( wf & UserSize )==0 );
1086 myBold ->setShown( wf & Bold );
1087 myItalic ->setShown( wf & Italic );
1088 myUnderline->setShown( wf & Underline );
1089 bool isSystem = property( "system" ).canCast( QVariant::Bool ) ? property( "system" ).toBool() : false;
1090 myPreview->setShown( ( wf & Preview ) && isSystem );
1096 myProperties[ name ] = value;
1099 void QtxListResourceEdit::FontItem::setFamily( const QString& f )
1102 if( myFamilies->isShown() )
1104 if( myFamilies->listBox()->findItem( f, Qt::ExactMatch ) )
1109 QVariant deffam = property( "default_family" );
1110 if( deffam.canCast( QVariant::String ) )
1111 curtext = deffam.toString();
1115 for ( int i = 0; i < (int)myFamilies->count() && idx < 0; i++ )
1117 if ( myFamilies->text( i ) == curtext )
1122 myFamilies->setCurrentItem( idx );
1124 onActivateFamily( idx );
1127 QString QtxListResourceEdit::FontItem::family() const
1129 return myFamilies->currentText();
1132 void QtxListResourceEdit::FontItem::setSize( const int s )
1135 if( mySizes->isShown() && s>0 )
1137 if( ( myFlags & UserSize ) || mySizes->listBox()->findItem( QString( "%1" ).arg( s ), Qt::ExactMatch ) )
1142 QVariant defsize = property( QString( "%1:default_size" ).arg( family() ) );
1143 if( defsize.canCast( QVariant::Int ) )
1144 cursize = defsize.toInt();
1147 mySizes->setCurrentText( cursize>0 ? QString( "%1" ).arg( cursize ) : "" );
1150 int QtxListResourceEdit::FontItem::size() const
1152 QString s = mySizes->currentText();
1154 int pSize = s.toInt( &ok );
1155 return ( ok ? pSize : 0 );
1158 void QtxListResourceEdit::FontItem::setParams( const bool bold, const bool italic, const bool underline )
1160 bool curbold = false, curitalic = false, curunderline = false;
1161 if( myBold->isShown() )
1165 QVariant def = property( QString( "%1:default_bold" ).arg( family() ) );
1166 if( def.canCast( QVariant::Bool ) )
1167 curbold = def.toBool();
1169 if( myItalic->isShown() )
1173 QVariant def = property( QString( "%1:default_italic" ).arg( family() ) );
1174 if( def.canCast( QVariant::Bool ) )
1175 curitalic = def.toBool();
1177 if( myUnderline->isShown() )
1178 curunderline = underline;
1181 QVariant def = property( QString( "%1:default_underline" ).arg( family() ) );
1182 if( def.canCast( QVariant::Bool ) )
1183 curunderline = def.toBool();
1185 myBold->setChecked( curbold );
1186 myItalic->setChecked( curitalic );
1187 myUnderline->setChecked( curunderline );
1190 void QtxListResourceEdit::FontItem::params( bool& bold, bool& italic, bool& underline )
1192 bold = myBold->isChecked();
1193 italic = myItalic->isChecked();
1194 underline = myUnderline->isChecked();
1197 void QtxListResourceEdit::FontItem::internalUpdate()
1199 //update internal selection of font properties
1200 setFamily( family() );
1203 params( b1, b2, b3 );
1204 setParams( b1, b2, b3 );
1207 void QtxListResourceEdit::FontItem::onActivateFamily( int )
1209 QVariant sizes = property( QString( "%1:sizes" ).arg( family() ) );
1213 if( sizes.canCast( QVariant::List ) )
1215 QValueList<QVariant> list = sizes.toList();
1216 QStringList sizeItems;
1217 QValueList<QVariant>::const_iterator anIt = list.begin(),
1219 for( ; anIt!=aLast; anIt++ )
1220 if( (*anIt).canCast( QVariant::Int ) && (*anIt).toInt()>0 )
1221 sizeItems.append( QString( "%1" ).arg( (*anIt).toInt() ) );
1222 mySizes->insertStringList( sizeItems );
1227 void QtxListResourceEdit::FontItem::onPreview()
1229 QFont f( family(), size() );
1230 bool bold, italic, underline;
1231 params( bold, italic, underline );
1233 f.setItalic( italic );
1234 f.setUnderline( underline );
1237 f = QFontDialog::getFont( &ok, f );
1241 setFamily( f.family() );
1242 setSize( f.pointSize() );
1243 setParams( f.bold(), f.italic(), f.underline() );
1252 Class: QtxListResourceEdit::DirListItem
1255 QtxListResourceEdit::DirListItem::DirListItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
1256 : PrefItem( Font, edit, pItem, parent )
1258 myDirListEditor = new QtxDirListEditor( this );
1261 QtxListResourceEdit::DirListItem::~DirListItem()
1265 void QtxListResourceEdit::DirListItem::store()
1268 myDirListEditor->getPathList(list);
1269 setString( QString(list.join(";")) );
1272 void QtxListResourceEdit::DirListItem::retrieve()
1274 myDirListEditor->setPathList(QStringList::split(";", getString()));
1280 Class: QtxListResourceEdit::FileItem
1281 Descr: GUI implementation of resources file item.
1283 QtxListResourceEdit::FileItem::FileItem( const QString& title, QtxResourceEdit* edit,
1284 Item* pItem, QWidget* parent )
1285 : PrefItem( Font, edit, pItem, parent ),
1286 myFlags( QFileInfo::ReadUser ),
1287 myIsExisting( true ),
1290 new QLabel( title, this );
1291 myFile = new QLineEdit( this );
1292 myFile->setValidator( new FileValidator( this, myFile ) );
1293 myFile->setReadOnly( true );
1294 myOpenFile = new QToolButton( this );
1295 myOpenFile->setText( "..." );
1296 connect( myOpenFile, SIGNAL( clicked() ), this, SLOT( onOpenFile() ) );
1299 QtxListResourceEdit::FileItem::~FileItem()
1305 void QtxListResourceEdit::FileItem::store()
1307 setString( myFile->text() );
1310 void QtxListResourceEdit::FileItem::retrieve()
1312 myFile->setText( getString() );
1315 QVariant QtxListResourceEdit::FileItem::property( const QString& name ) const
1317 if( name=="filter" )
1319 else if( name=="existing" )
1320 return myIsExisting;
1321 else if( name=="flags" )
1327 void QtxListResourceEdit::FileItem::setProperty( const QString& name, const QVariant& value )
1329 if( name=="filter" )
1331 if( value.canCast( QVariant::String ) )
1334 myFilter.append( value.toString() );
1336 else if( value.canCast( QVariant::StringList ) )
1337 myFilter = value.toStringList();
1339 else if( name=="existing" && value.canCast( QVariant::Bool ) )
1340 myIsExisting = value.toBool();
1342 else if( name=="flags" && value.canCast( QVariant::UInt ) )
1343 myFlags = value.toUInt();
1346 void QtxListResourceEdit::FileItem::onOpenFile()
1350 myFileDlg = new QFileDialog( "." );
1351 connect( myFileDlg, SIGNAL( fileHighlighted( const QString& ) ), this, SLOT( onFileSelected( const QString& ) ) );
1354 myFileDlg->setCaption( title() );
1355 myFileDlg->setFilters( myFilter );
1356 myFileDlg->setMode( myIsExisting ? QFileDialog::ExistingFile : QFileDialog::AnyFile );
1358 if( myFileDlg->exec()==QDialog::Accepted )
1360 myFile->setText( myFileDlg->selectedFile() );
1364 bool QtxListResourceEdit::FileItem::isFileCorrect( const QString& f ) const
1367 QFileInfo info( f );
1368 if( !myIsExisting || info.exists() )
1369 res = info.isFile() && info.permission( myFlags );
1374 void QtxListResourceEdit::FileItem::onFileSelected( const QString& f )
1376 if( myFileDlg && !isFileCorrect( f ) )
1377 myFileDlg->setSelection( "" );
1382 QtxListResourceEdit::FileItem::FileValidator::FileValidator( FileItem* item, QObject* parent )
1383 : QValidator( parent ),
1388 QtxListResourceEdit::FileItem::FileValidator::~FileValidator()
1392 QValidator::State QtxListResourceEdit::FileItem::FileValidator::validate( QString& f, int& ) const
1394 if( myItem && myItem->isFileCorrect( f ) )
1395 return QValidator::Acceptable;
1397 return QValidator::Intermediate;