1 // Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/
19 // File: QtxListResourceEdit.cxx
20 // Author: Sergey TELKOV
22 #include "QtxListResourceEdit.h"
29 #include <qcombobox.h>
30 #include <qlineedit.h>
31 #include <qcheckbox.h>
32 #include <qtabwidget.h>
33 #include <qvalidator.h>
34 #include <qobjectlist.h>
35 #include <qcolordialog.h>
36 #include <qwidgetstack.h>
37 #include <qtoolbutton.h>
38 #include <qfontdialog.h>
39 #include <qfontdatabase.h>
40 #include <qfileinfo.h>
41 #include <qfiledialog.h>
42 #include <qapplication.h>
44 #include "QtxIntSpinBox.h"
45 #include "QtxDblSpinBox.h"
46 #include "QtxComboBox.h"
47 #include "QtxDirListEditor.h"
50 Class: QtxListResourceEdit
51 Descr: GUI implementation of QtxResourceEdit - manager of resources
54 QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
56 QtxResourceEdit( mgr )
58 QVBoxLayout* main = new QVBoxLayout( this, 0, 5 );
59 QGroupBox* base = new QGroupBox( 1, Qt::Vertical, "", this );
60 base->setFrameStyle( QFrame::NoFrame );
61 base->setInsideMargin( 0 );
62 main->addWidget( base );
64 myList = new QListBox( base );
65 myStack = new QWidgetStack( base );
67 myList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
68 myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
70 myList->setSelectionMode( QListBox::Single );
72 connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
74 setFocusProxy( myList );
79 QtxListResourceEdit::~QtxListResourceEdit()
83 void QtxListResourceEdit::setItemProperty( const int id, const QString& prop, const QVariant& val )
89 bool prev = i->isEmpty();
91 QtxResourceEdit::setItemProperty( id, prop, val );
93 bool next = i->isEmpty();
99 void QtxListResourceEdit::onSelectionChanged()
101 QString title = myList->text( myList->index( myList->selectedItem() ) );
102 if ( title.isEmpty() )
108 for ( QPtrListIterator<Item> it( lst ); it.current() && !i; ++it )
110 if ( it.current()->title() == title )
115 myStack->raiseWidget( i->id() );
118 void QtxListResourceEdit::itemAdded( QtxResourceEdit::Item* i )
123 QPtrList<Item> items;
126 if ( items.contains( i ) || items.contains( i->parentItem() ) )
130 QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
132 Item* i = item( title, -1 );
136 Category* category = new Category( this, myStack );
137 myStack->addWidget( category, category->id() );
141 if ( !myList->selectedItem() )
142 myList->setSelected( 0, true );
149 void QtxListResourceEdit::changedResources( const QMap<Item*, QString>& map )
151 QMap<int, QString> idMap;
152 for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
154 idMap.insert( it.key()->id(), it.data() );
156 emit resourceChanged( it.key()->id() );
159 it.key()->resource( sec, param );
160 emit resourceChanged( sec, param );
163 emit resourcesChanged( idMap );
166 void QtxListResourceEdit::updateState()
168 if ( myList->selectedItem() && myStack->visibleWidget() )
173 myList->setShown( myList->count() > 1 );
176 void QtxListResourceEdit::updateVisible()
178 QPtrList<Item> items;
181 QString name = myList->text( myList->index( myList->selectedItem() ) );
184 for ( QPtrListIterator<Item> it( items ); it.current(); ++it )
186 if ( it.current()->isEmpty() )
189 myList->insertItem( it.current()->title() );
193 for ( int i = 0; i < (int)myList->count() && idx == -1; i++ )
195 if ( myList->text( i ) == name )
199 myList->setSelected( QMAX( idx, 0 ), true );
205 Class: QtxListResourceEdit::Category
206 Descr: GUI implementation of preferences category.
209 QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
213 QVBoxLayout* main = new QVBoxLayout( this );
214 QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
215 base->setFrameStyle( QFrame::NoFrame );
216 base->setInsideMargin( 0 );
217 main->addWidget( base, 1 );
219 myTabs = new QTabWidget( base );
220 myInfo = new QLabel( base );
222 myInfo->setAlignment( Qt::AlignCenter );
223 myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
224 myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
229 QtxListResourceEdit::Category::~Category()
233 bool QtxListResourceEdit::Category::isEmpty() const
235 return Item::isEmpty() && myInfo->text().isEmpty();
238 int QtxListResourceEdit::Category::type() const
243 void QtxListResourceEdit::Category::store()
247 void QtxListResourceEdit::Category::retrieve()
251 QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
254 if ( prop == QString( "information" ) || prop == QString( "info" ) )
255 var = myInfo->text();
259 void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
262 if ( !prop.cast( QVariant::String ) )
265 if ( name == QString( "information" ) || name == QString( "info" ) )
266 myInfo->setText( prop.toString() );
271 QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
273 Item* i = item( title, id() );
277 Tab* tab = new Tab( resourceEdit(), this, this );
278 myTabs->addTab( tab, title );
285 void QtxListResourceEdit::Category::updateState()
287 if ( myTabs->count() )
292 if ( !myTabs->count() && !myInfo->text().isEmpty() )
299 Class: QtxListResourceEdit::Tab
300 Descr: GUI implementation of resources tab.
303 QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
307 QVBoxLayout* main = new QVBoxLayout( this );
308 QVBox* vbox = new QVBox( this );
309 vbox->setMargin( 5 );
311 main->addWidget( myMainFrame );
312 main->addStretch( 1 );
315 QtxListResourceEdit::Tab::~Tab()
319 int QtxListResourceEdit::Tab::type() const
324 void QtxListResourceEdit::Tab::store()
328 void QtxListResourceEdit::Tab::retrieve()
332 void QtxListResourceEdit::Tab::polish()
339 QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
341 Item* i = item( title, id() );
345 Group* group = new Group( title, resourceEdit(), this, myMainFrame );
350 void QtxListResourceEdit::Tab::adjustLabels()
352 QObjectList* labels = queryList( "QLabel" );
356 for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
358 if ( it1.current()->isWidgetType() )
360 QWidget* wid = (QWidget*)it1.current();
361 w = QMAX( w, wid->sizeHint().width() );
364 for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
366 if ( it2.current()->isWidgetType() )
368 QWidget* wid = (QWidget*)it2.current();
369 wid->setMinimumWidth( w );
377 Class: QtxListResourceEdit::Group
378 Descr: GUI implementation of resources group.
381 QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
382 : QGroupBox( 2, Qt::Horizontal, title, parent ),
387 QtxListResourceEdit::Group::~Group()
391 int QtxListResourceEdit::Group::type() const
396 void QtxListResourceEdit::Group::store()
400 void QtxListResourceEdit::Group::retrieve()
404 QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
407 if ( prop == "columns" )
408 var = QVariant( columns() );
409 else if ( prop == "orientation" )
410 var = QVariant( orientation() );
411 else if ( prop == "frame" )
412 var = QVariant( frameStyle() != QFrame::NoFrame );
416 void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
419 if ( !prop.cast( QVariant::Int ) )
422 if ( name == QString( "columns" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
423 setColumns( prop.toInt() );
424 else if ( name == QString( "orientation" ) && prop.cast( QVariant::Int ) )
426 int o = prop.toInt();
427 if ( o == Qt::Horizontal || o == Qt::Vertical )
428 setOrientation( (Orientation)o );
430 else if ( name == "frame" && prop.cast( QVariant::Bool ) )
432 setInsideMargin( prop.toBool() ? 5 : 0 );
433 QGroupBox::setTitle( prop.toBool() ? Item::title() : QString::null );
434 setFrameStyle( prop.toBool() ? QFrame::Box | QFrame::Sunken : QFrame::NoFrame );
438 void QtxListResourceEdit::Group::setTitle( const QString& title )
440 Item::setTitle( title );
441 QGroupBox::setTitle( title );
444 QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
451 item = new ColorItem( title, resourceEdit(), this, this );
454 item = new StateItem( title, resourceEdit(), this, this );
457 item = new StringItem( title, resourceEdit(), this, this );
460 item = new SelectItem( title, resourceEdit(), this, this );
463 item = new DoubleSpinItem( title, resourceEdit(), this, this );
466 item = new IntegerSpinItem( title, resourceEdit(), this, this );
469 item = new DoubleEditItem( title, resourceEdit(), this, this );
472 item = new IntegerEditItem( title, resourceEdit(), this, this );
475 item = new Spacer( resourceEdit(), this, this );
478 item = new Group( title, resourceEdit(), this, this );
481 item = new FontItem( title, resourceEdit(), this, this );
484 item = new DirListItem( title, resourceEdit(), this, this );
487 item = new FileItem( title, resourceEdit(), this, this );
495 Class: QtxListResourceEdit::PrefItem
496 Descr: Base class for preferences items.
499 QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
507 QtxListResourceEdit::PrefItem::~PrefItem()
511 int QtxListResourceEdit::PrefItem::type() const
516 QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
522 Class: QtxListResourceEdit::Spacer
523 Descr: GUI implementation of resources spacer.
526 QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
527 : PrefItem( Space, edit, pItem, parent )
529 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
532 QtxListResourceEdit::Spacer::~Spacer()
536 void QtxListResourceEdit::Spacer::store()
540 void QtxListResourceEdit::Spacer::retrieve()
545 Class: QtxListResourceEdit::SelectItem
546 Descr: GUI implementation of resources list item.
549 QtxListResourceEdit::SelectItem::SelectItem( const QString& title, QtxResourceEdit* edit,
550 Item* pItem, QWidget* parent )
551 : PrefItem( Selector, edit, pItem, parent )
553 new QLabel( title, this );
554 myList = new QComboBox( false, this );
555 myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
558 QtxListResourceEdit::SelectItem::~SelectItem()
562 void QtxListResourceEdit::SelectItem::store()
564 int idx = myList->currentItem();
565 if ( myIndex.contains( idx ) )
566 setInteger( myIndex[idx] );
569 void QtxListResourceEdit::SelectItem::retrieve()
571 int id = getInteger( -1 );
574 for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
576 if ( it.data() == id )
580 myList->setCurrentItem( idx );
583 QVariant QtxListResourceEdit::SelectItem::property( const QString& name ) const
586 if ( name == QString( "strings" ) )
589 for ( int i = 0; i < (int)myList->count(); i++ )
590 lst.append( myList->text( i ) );
591 val = QVariant( lst );
593 else if ( name == QString( "indexes" ) )
595 QValueList<QVariant> lst;
596 for ( int i = 0; i < (int)myList->count(); i++ )
597 lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
598 val = QVariant( lst );
603 void QtxListResourceEdit::SelectItem::setProperty( const QString& name, const QVariant& val )
605 if ( name == QString( "strings" ) )
607 else if ( name == QString( "indexes" ) )
611 void QtxListResourceEdit::SelectItem::setStrings( const QVariant& var )
613 if ( var.type() != QVariant::StringList )
616 setStrings( var.toStringList() );
619 void QtxListResourceEdit::SelectItem::setIndexes( const QVariant& var )
621 if ( var.type() != QVariant::List )
624 QValueList<QVariant> varList = var.toList();
626 for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
628 if ( (*it).canCast( QVariant::Int ) )
629 lst.append( (*it).toInt() );
634 void QtxListResourceEdit::SelectItem::setStrings( const QStringList& lst )
637 myList->insertStringList( lst );
640 void QtxListResourceEdit::SelectItem::setIndexes( const QValueList<int>& lst )
645 for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
646 myIndex.insert( idx, *it );
650 Class: QtxListResourceEdit::StateItem
651 Descr: GUI implementation of resources bool item.
654 QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
655 Item* pItem, QWidget* parent )
656 : PrefItem( Bool, edit, pItem, parent )
658 myState = new QCheckBox( title, this );
659 myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
662 QtxListResourceEdit::StateItem::~StateItem()
666 void QtxListResourceEdit::StateItem::store()
668 setBoolean( myState->isChecked() );
671 void QtxListResourceEdit::StateItem::retrieve()
673 myState->setChecked( getBoolean() );
677 Class: QtxListResourceEdit::StringItem
678 Descr: GUI implementation of resources string item.
681 QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
682 Item* pItem, QWidget* parent )
683 : PrefItem( String, edit, pItem, parent )
685 new QLabel( title, this );
686 myString = new QLineEdit( this );
687 myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
690 QtxListResourceEdit::StringItem::~StringItem()
694 void QtxListResourceEdit::StringItem::store()
696 setString( myString->text() );
699 void QtxListResourceEdit::StringItem::retrieve()
701 myString->setText( getString() );
705 Class: QtxListResourceEdit::IntegerEditItem
706 Descr: GUI implementation of resources integer item.
709 QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
710 : PrefItem( Integer, edit, pItem, parent )
712 new QLabel( title, this );
713 myInteger = new QLineEdit( this );
714 myInteger->setValidator( new QIntValidator( myInteger ) );
715 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
718 QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
722 void QtxListResourceEdit::IntegerEditItem::store()
724 setString( myInteger->text() );
727 void QtxListResourceEdit::IntegerEditItem::retrieve()
729 myInteger->setText( getString() );
733 Class: QtxListResourceEdit::IntegerSpinItem
734 Descr: GUI implementation of resources integer item.
737 QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
738 : PrefItem( IntSpin, edit, pItem, parent )
740 new QLabel( title, this );
741 myInteger = new QtxIntSpinBox( this );
742 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
745 QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
749 void QtxListResourceEdit::IntegerSpinItem::store()
751 setInteger( myInteger->value() );
754 void QtxListResourceEdit::IntegerSpinItem::retrieve()
756 myInteger->setValue( getInteger() );
759 QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
762 if ( name == QString( "minimum" ) || name == QString( "min" ) )
763 var = QVariant( myInteger->minValue() );
764 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
765 var = QVariant( myInteger->maxValue() );
766 else if ( name == QString( "step" ) )
767 var = QVariant( myInteger->lineStep() );
768 else if ( name == QString( "special" ) )
769 var = QVariant( myInteger->specialValueText() );
770 else if ( name == QString( "prefix" ) )
771 var = QVariant( myInteger->prefix() );
772 else if ( name == QString( "suffix" ) )
773 var = QVariant( myInteger->suffix() );
777 void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
781 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Int ) )
782 myInteger->setMinValue( prop.toInt() );
783 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Int ) )
784 myInteger->setMaxValue( prop.toInt() );
785 else if ( name == QString( "step" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
786 myInteger->setLineStep( prop.toInt() );
787 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
788 myInteger->setSpecialValueText( prop.toString() );
789 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
790 myInteger->setPrefix( prop.toString() );
791 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
792 myInteger->setSuffix( prop.toString() );
796 Class: QtxListResourceEdit::DoubleEditItem
797 Descr: GUI implementation of resources string item.
800 QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
801 Item* pItem, QWidget* parent )
802 : PrefItem( Double, edit, pItem, parent )
804 new QLabel( title, this );
805 myDouble = new QLineEdit( this );
806 myDouble->setValidator( new QDoubleValidator( myDouble ) );
807 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
810 QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
814 void QtxListResourceEdit::DoubleEditItem::store()
816 setString( myDouble->text() );
819 void QtxListResourceEdit::DoubleEditItem::retrieve()
821 myDouble->setText( getString() );
825 Class: QtxListResourceEdit::DoubleSpinItem
826 Descr: GUI implementation of resources double item.
829 QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
830 Item* pItem, QWidget* parent )
831 : PrefItem( DblSpin, edit, pItem, parent )
833 new QLabel( title, this );
834 myDouble = new QtxDblSpinBox( this );
835 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
838 QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
842 void QtxListResourceEdit::DoubleSpinItem::store()
844 setDouble( myDouble->value() );
847 void QtxListResourceEdit::DoubleSpinItem::retrieve()
849 myDouble->setValue( getDouble() );
852 QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
855 if ( name == QString( "minimum" ) || name == QString( "min" ) )
856 var = QVariant( myDouble->minValue() );
857 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
858 var = QVariant( myDouble->maxValue() );
859 else if ( name == QString( "precision" ) )
860 var = QVariant( myDouble->precision() );
861 else if ( name == QString( "step" ) )
862 var = QVariant( myDouble->lineStep() );
863 else if ( name == QString( "special" ) )
864 var = QVariant( myDouble->specialValueText() );
865 else if ( name == QString( "prefix" ) )
866 var = QVariant( myDouble->prefix() );
867 else if ( name == QString( "suffix" ) )
868 var = QVariant( myDouble->suffix() );
872 void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
876 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Double ) )
877 myDouble->setMinValue( prop.toDouble() );
878 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Double ) )
879 myDouble->setMaxValue( prop.toDouble() );
880 else if ( name == QString( "step" ) && prop.cast( QVariant::Double ) && prop.toDouble() > 0 )
881 myDouble->setLineStep( prop.toDouble() );
882 else if ( name == QString( "precision" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
883 myDouble->setPrecision( prop.toInt() );
884 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
885 myDouble->setSpecialValueText( prop.toString() );
886 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
887 myDouble->setPrefix( prop.toString() );
888 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
889 myDouble->setSuffix( prop.toString() );
893 Class: QtxListResourceEdit::ColorItem
894 Descr: GUI implementation of resources color item.
897 QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
898 Item* pItem, QWidget* parent )
899 : PrefItem( Color, edit, pItem, parent )
901 class ColorSelector : public QLabel
904 ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
906 setFrameStyle( WinPanel | Raised );
908 virtual ~ColorSelector() {}
909 virtual QSize minimumSizeHint() const
911 return QLabel::minimumSizeHint() + QSize( 0, 2 );
915 virtual void mousePressEvent( QMouseEvent* e )
917 if ( e->button() == LeftButton )
919 setFrameStyle( WinPanel | Sunken );
920 QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
922 setPaletteBackgroundColor( c );
924 setFrameStyle( WinPanel | Raised );
929 new QLabel( title, this );
930 myColor = new ColorSelector( this );
931 myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
934 QtxListResourceEdit::ColorItem::~ColorItem()
938 void QtxListResourceEdit::ColorItem::store()
940 setColor( myColor->paletteBackgroundColor() );
943 void QtxListResourceEdit::ColorItem::retrieve()
945 myColor->setPaletteBackgroundColor( getColor() );
950 Class: QtxListResourceEdit::FontItem
951 Descr: GUI implementation of resources font item.
953 QtxListResourceEdit::FontItem::FontItem( const QString& title, QtxResourceEdit* edit,
954 Item* pItem, QWidget* parent )
955 : PrefItem( Font, edit, pItem, parent )
957 new QLabel( title, this );
958 myFamilies = new QtxComboBox( false, this );
959 mySizes = new QtxComboBox( true, this );
960 mySizes->setInsertionPolicy( QComboBox::NoInsertion );
961 myBold = new QCheckBox( tr( "Bold" ), this );
962 myItalic = new QCheckBox( tr( "Italic" ), this );
963 myUnderline = new QCheckBox( tr( "Underline" ), this );
964 myPreview = new QToolButton( this );
965 myPreview->setText( "..." );
967 myFamilies->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
968 mySizes->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
970 connect( myFamilies, SIGNAL( activated( int ) ), this, SLOT( onActivateFamily( int ) ) );
971 connect( myPreview, SIGNAL( clicked() ), this, SLOT( onPreview() ) );
973 setProperty( "system", ( bool )true );
974 setProperty( "widget_flags", ( int )All );
977 QtxListResourceEdit::FontItem::~FontItem()
981 void QtxListResourceEdit::FontItem::store()
983 QFont f( family(), size() );
984 bool bold, italic, underline;
985 params( bold, italic, underline );
987 f.setItalic( italic );
988 f.setUnderline( underline );
992 void QtxListResourceEdit::FontItem::retrieve()
995 setFamily( f.family() );
996 setSize( f.pointSize() );
997 setParams( f.bold(), f.italic(), f.underline() );
1000 QVariant QtxListResourceEdit::FontItem::property( const QString& name ) const
1002 if( name=="system" )
1005 else if( name=="widget_flags" )
1006 return ( int )myFlags;
1010 if( name=="families" )
1013 return fdb.families();
1016 else if( name=="default_family" )
1019 QStringList fam = fdb.families();
1023 return QString::null;
1028 QStringList parts = QStringList::split( ":", name );
1029 if( parts.count()==2 )
1031 if( parts[1]=="default_bold" || parts[1]=="default_italic" || parts[1]=="default_underline" )
1034 else if( parts[1]=="sizes" )
1037 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1038 QValueList<QVariant> vsizes;
1039 QValueList<int>::const_iterator anIt = sizes.begin(),
1040 aLast = sizes.end();
1041 for( ; anIt!=aLast; anIt++ )
1042 vsizes.append( *anIt );
1047 else if( parts[1]=="default_size" )
1049 if( parts[0].isEmpty() )
1053 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1054 if( sizes.count()>0 )
1055 return sizes.first();
1063 else if( myProperties.contains( name ) )
1064 return myProperties[ name ];
1069 void QtxListResourceEdit::FontItem::setProperty( const QString& name, const QVariant& value )
1071 if( name=="system" )
1073 if( !value.canCast( QVariant::Bool ) )
1076 bool isSystem = value.toBool();
1077 if( myIsSystem==isSystem )
1080 myIsSystem = isSystem;
1082 QVariant families = property( "families" );
1083 QString fam = family();
1085 myFamilies->clear();
1086 if( families.canCast( QVariant::StringList ) )
1088 QStringList list = families.toStringList();
1089 myFamilies->insertStringList( list );
1093 setSize( -1 ); //set default size
1096 else if( name=="widget_flags" )
1098 if( !value.canCast( QVariant::Int ) )
1101 int wf = value.toInt();
1104 myFamilies ->setShown( wf & Family );
1105 mySizes ->setShown( wf & Size );
1106 mySizes->lineEdit()->setReadOnly( ( wf & UserSize )==0 );
1107 myBold ->setShown( wf & Bold );
1108 myItalic ->setShown( wf & Italic );
1109 myUnderline->setShown( wf & Underline );
1110 bool isSystem = property( "system" ).canCast( QVariant::Bool ) ? property( "system" ).toBool() : false;
1111 myPreview->setShown( ( wf & Preview ) && isSystem );
1117 myProperties[ name ] = value;
1120 void QtxListResourceEdit::FontItem::setFamily( const QString& f )
1123 if( myFamilies->isShown() )
1125 if( myFamilies->listBox()->findItem( f, Qt::ExactMatch ) )
1130 QVariant deffam = property( "default_family" );
1131 if( deffam.canCast( QVariant::String ) )
1132 curtext = deffam.toString();
1135 if ( curtext.isEmpty() )
1136 curtext = (QApplication::font()).family();
1139 for ( int i = 0; i < (int)myFamilies->count() && idx < 0; i++ )
1141 if ( myFamilies->text( i ) == curtext )
1146 myFamilies->setCurrentItem( idx );
1148 onActivateFamily( idx );
1151 QString QtxListResourceEdit::FontItem::family() const
1153 return myFamilies->currentText();
1156 void QtxListResourceEdit::FontItem::setSize( const int s )
1159 if( mySizes->isShown() && s>0 )
1161 if( ( myFlags & UserSize ) || mySizes->listBox()->findItem( QString( "%1" ).arg( s ), Qt::ExactMatch ) )
1166 QVariant defsize = property( QString( "%1:default_size" ).arg( family() ) );
1167 if( defsize.canCast( QVariant::Int ) )
1168 cursize = defsize.toInt();
1171 mySizes->setCurrentText( cursize>0 ? QString( "%1" ).arg( cursize ) : "" );
1174 int QtxListResourceEdit::FontItem::size() const
1176 QString s = mySizes->currentText();
1178 int pSize = s.toInt( &ok );
1179 return ( ok ? pSize : 0 );
1182 void QtxListResourceEdit::FontItem::setParams( const bool bold, const bool italic, const bool underline )
1184 bool curbold = false, curitalic = false, curunderline = false;
1185 if( myBold->isShown() )
1189 QVariant def = property( QString( "%1:default_bold" ).arg( family() ) );
1190 if( def.canCast( QVariant::Bool ) )
1191 curbold = def.toBool();
1193 if( myItalic->isShown() )
1197 QVariant def = property( QString( "%1:default_italic" ).arg( family() ) );
1198 if( def.canCast( QVariant::Bool ) )
1199 curitalic = def.toBool();
1201 if( myUnderline->isShown() )
1202 curunderline = underline;
1205 QVariant def = property( QString( "%1:default_underline" ).arg( family() ) );
1206 if( def.canCast( QVariant::Bool ) )
1207 curunderline = def.toBool();
1209 myBold->setChecked( curbold );
1210 myItalic->setChecked( curitalic );
1211 myUnderline->setChecked( curunderline );
1214 void QtxListResourceEdit::FontItem::params( bool& bold, bool& italic, bool& underline )
1216 bold = myBold->isChecked();
1217 italic = myItalic->isChecked();
1218 underline = myUnderline->isChecked();
1221 void QtxListResourceEdit::FontItem::internalUpdate()
1223 //update internal selection of font properties
1224 setFamily( family() );
1227 params( b1, b2, b3 );
1228 setParams( b1, b2, b3 );
1231 void QtxListResourceEdit::FontItem::onActivateFamily( int )
1233 QVariant sizes = property( QString( "%1:sizes" ).arg( family() ) );
1237 if( sizes.canCast( QVariant::List ) )
1239 QValueList<QVariant> list = sizes.toList();
1240 QStringList sizeItems;
1241 QValueList<QVariant>::const_iterator anIt = list.begin(),
1243 for( ; anIt!=aLast; anIt++ )
1244 if( (*anIt).canCast( QVariant::Int ) && (*anIt).toInt()>0 )
1245 sizeItems.append( QString( "%1" ).arg( (*anIt).toInt() ) );
1246 mySizes->insertStringList( sizeItems );
1251 void QtxListResourceEdit::FontItem::onPreview()
1253 QFont f( family(), size() );
1254 bool bold, italic, underline;
1255 params( bold, italic, underline );
1257 f.setItalic( italic );
1258 f.setUnderline( underline );
1261 f = QFontDialog::getFont( &ok, f );
1265 setFamily( f.family() );
1266 setSize( f.pointSize() );
1267 setParams( f.bold(), f.italic(), f.underline() );
1276 Class: QtxListResourceEdit::DirListItem
1279 QtxListResourceEdit::DirListItem::DirListItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
1280 : PrefItem( Font, edit, pItem, parent )
1282 myDirListEditor = new QtxDirListEditor( this );
1285 QtxListResourceEdit::DirListItem::~DirListItem()
1289 void QtxListResourceEdit::DirListItem::store()
1292 myDirListEditor->getPathList(list);
1293 setString( QString(list.join(";")) );
1296 void QtxListResourceEdit::DirListItem::retrieve()
1298 myDirListEditor->setPathList(QStringList::split(";", getString()));
1304 Class: QtxListResourceEdit::FileItem
1305 Descr: GUI implementation of resources file item.
1307 QtxListResourceEdit::FileItem::FileItem( const QString& title, QtxResourceEdit* edit,
1308 Item* pItem, QWidget* parent )
1309 : PrefItem( Font, edit, pItem, parent ),
1310 myFlags( QFileInfo::ReadUser ),
1311 myIsExisting( true ),
1312 myIsReadOnly ( true ),
1315 new QLabel( title, this );
1316 myFile = new QLineEdit( this );
1317 myFile->setValidator( new FileValidator( this, myFile ) );
1318 myFile->setReadOnly( myIsReadOnly );
1319 myOpenFile = new QToolButton( this );
1320 myOpenFile->setText( "..." );
1321 connect( myOpenFile, SIGNAL( clicked() ), this, SLOT( onOpenFile() ) );
1324 QtxListResourceEdit::FileItem::~FileItem()
1330 void QtxListResourceEdit::FileItem::store()
1332 setString( myFile->text() );
1335 void QtxListResourceEdit::FileItem::retrieve()
1337 myFile->setText( getString() );
1340 QVariant QtxListResourceEdit::FileItem::property( const QString& name ) const
1342 if( name=="filter" )
1344 else if( name=="existing" )
1345 return myIsExisting;
1346 else if( name=="flags" )
1348 else if( name=="readOnly")
1349 return myIsReadOnly;
1354 void QtxListResourceEdit::FileItem::setProperty( const QString& name, const QVariant& value )
1356 if( name=="filter" )
1358 if( value.canCast( QVariant::String ) )
1361 myFilter.append( value.toString() );
1363 else if( value.canCast( QVariant::StringList ) )
1364 myFilter = value.toStringList();
1366 else if( name=="existing" && value.canCast( QVariant::Bool ) )
1367 myIsExisting = value.toBool();
1369 else if( name=="flags" && value.canCast( QVariant::UInt ) )
1370 myFlags = value.toUInt();
1372 else if( name=="readOnly" && value.canCast( QVariant::Bool) ) {
1373 myIsReadOnly = value.toBool();
1374 myFile->setReadOnly( myIsReadOnly );
1378 void QtxListResourceEdit::FileItem::onOpenFile()
1382 myFileDlg = new QFileDialog( "." );
1383 connect( myFileDlg, SIGNAL( fileHighlighted( const QString& ) ), this, SLOT( onFileSelected( const QString& ) ) );
1386 myFileDlg->setCaption( title() );
1387 myFileDlg->setFilters( myFilter );
1388 myFileDlg->setMode( myIsExisting ? QFileDialog::ExistingFile : QFileDialog::AnyFile );
1390 if( myFileDlg->exec()==QDialog::Accepted )
1392 myFile->setText( myFileDlg->selectedFile() );
1396 bool QtxListResourceEdit::FileItem::isFileCorrect( const QString& f ) const
1399 QFileInfo info( f );
1400 if( !myIsExisting || info.exists() )
1401 res = info.isFile() && info.permission( myFlags );
1406 void QtxListResourceEdit::FileItem::onFileSelected( const QString& f )
1408 if( myFileDlg && !isFileCorrect( f ) )
1409 myFileDlg->setSelection( "" );
1414 QtxListResourceEdit::FileItem::FileValidator::FileValidator( FileItem* item, QObject* parent )
1415 : QValidator( parent ),
1420 QtxListResourceEdit::FileItem::FileValidator::~FileValidator()
1424 QValidator::State QtxListResourceEdit::FileItem::FileValidator::validate( QString& f, int& ) const
1426 if( myItem && myItem->isFileCorrect( f ) )
1427 return QValidator::Acceptable;
1429 return QValidator::Intermediate;