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>
43 #include "QtxIntSpinBox.h"
44 #include "QtxDblSpinBox.h"
45 #include "QtxComboBox.h"
46 #include "QtxDirListEditor.h"
49 Class: QtxListResourceEdit
50 Descr: GUI implementation of QtxResourceEdit - manager of resources
53 QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
55 QtxResourceEdit( mgr )
57 QVBoxLayout* main = new QVBoxLayout( this, 0, 5 );
58 QGroupBox* base = new QGroupBox( 1, Qt::Vertical, "", this );
59 base->setFrameStyle( QFrame::NoFrame );
60 base->setInsideMargin( 0 );
61 main->addWidget( base );
63 myList = new QListBox( base );
64 myStack = new QWidgetStack( base );
66 myList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
67 myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
69 myList->setSelectionMode( QListBox::Single );
71 connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
73 setFocusProxy( myList );
78 QtxListResourceEdit::~QtxListResourceEdit()
82 void QtxListResourceEdit::setItemProperty( const int id, const QString& prop, const QVariant& val )
88 bool prev = i->isEmpty();
90 QtxResourceEdit::setItemProperty( id, prop, val );
92 bool next = i->isEmpty();
98 void QtxListResourceEdit::onSelectionChanged()
100 QString title = myList->text( myList->index( myList->selectedItem() ) );
101 if ( title.isEmpty() )
107 for ( QPtrListIterator<Item> it( lst ); it.current() && !i; ++it )
109 if ( it.current()->title() == title )
114 myStack->raiseWidget( i->id() );
117 void QtxListResourceEdit::itemAdded( QtxResourceEdit::Item* i )
122 QPtrList<Item> items;
125 if ( items.contains( i ) || items.contains( i->parentItem() ) )
129 QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
131 Item* i = item( title, -1 );
135 Category* category = new Category( this, myStack );
136 myStack->addWidget( category, category->id() );
140 if ( !myList->selectedItem() )
141 myList->setSelected( 0, true );
148 void QtxListResourceEdit::changedResources( const QMap<Item*, QString>& map )
150 QMap<int, QString> idMap;
151 for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
153 idMap.insert( it.key()->id(), it.data() );
155 emit resourceChanged( it.key()->id() );
158 it.key()->resource( sec, param );
159 emit resourceChanged( sec, param );
162 emit resourcesChanged( idMap );
165 void QtxListResourceEdit::updateState()
167 if ( myList->selectedItem() && myStack->visibleWidget() )
172 myList->setShown( myList->count() > 1 );
175 void QtxListResourceEdit::updateVisible()
177 QPtrList<Item> items;
180 QString name = myList->text( myList->index( myList->selectedItem() ) );
183 for ( QPtrListIterator<Item> it( items ); it.current(); ++it )
185 if ( it.current()->isEmpty() )
188 myList->insertItem( it.current()->title() );
192 for ( int i = 0; i < (int)myList->count() && idx == -1; i++ )
194 if ( myList->text( i ) == name )
198 myList->setSelected( QMAX( idx, 0 ), true );
204 Class: QtxListResourceEdit::Category
205 Descr: GUI implementation of preferences category.
208 QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
212 QVBoxLayout* main = new QVBoxLayout( this );
213 QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
214 base->setFrameStyle( QFrame::NoFrame );
215 base->setInsideMargin( 0 );
216 main->addWidget( base, 1 );
218 myTabs = new QTabWidget( base );
219 myInfo = new QLabel( base );
221 myInfo->setAlignment( Qt::AlignCenter );
222 myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
223 myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
228 QtxListResourceEdit::Category::~Category()
232 bool QtxListResourceEdit::Category::isEmpty() const
234 return Item::isEmpty() && myInfo->text().isEmpty();
237 int QtxListResourceEdit::Category::type() const
242 void QtxListResourceEdit::Category::store()
246 void QtxListResourceEdit::Category::retrieve()
250 QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
253 if ( prop == QString( "information" ) || prop == QString( "info" ) )
254 var = myInfo->text();
258 void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
261 if ( !prop.cast( QVariant::String ) )
264 if ( name == QString( "information" ) || name == QString( "info" ) )
265 myInfo->setText( prop.toString() );
270 QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
272 Item* i = item( title, id() );
276 Tab* tab = new Tab( resourceEdit(), this, this );
277 myTabs->addTab( tab, title );
284 void QtxListResourceEdit::Category::updateState()
286 if ( myTabs->count() )
291 if ( !myTabs->count() && !myInfo->text().isEmpty() )
298 Class: QtxListResourceEdit::Tab
299 Descr: GUI implementation of resources tab.
302 QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
306 QVBoxLayout* main = new QVBoxLayout( this );
307 QVBox* vbox = new QVBox( this );
308 vbox->setMargin( 5 );
310 main->addWidget( myMainFrame );
311 main->addStretch( 1 );
314 QtxListResourceEdit::Tab::~Tab()
318 int QtxListResourceEdit::Tab::type() const
323 void QtxListResourceEdit::Tab::store()
327 void QtxListResourceEdit::Tab::retrieve()
331 void QtxListResourceEdit::Tab::polish()
338 QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
340 Item* i = item( title, id() );
344 Group* group = new Group( title, resourceEdit(), this, myMainFrame );
349 void QtxListResourceEdit::Tab::adjustLabels()
351 QObjectList* labels = queryList( "QLabel" );
355 for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
357 if ( it1.current()->isWidgetType() )
359 QWidget* wid = (QWidget*)it1.current();
360 w = QMAX( w, wid->sizeHint().width() );
363 for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
365 if ( it2.current()->isWidgetType() )
367 QWidget* wid = (QWidget*)it2.current();
368 wid->setMinimumWidth( w );
376 Class: QtxListResourceEdit::Group
377 Descr: GUI implementation of resources group.
380 QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
381 : QGroupBox( 2, Qt::Horizontal, title, parent ),
386 QtxListResourceEdit::Group::~Group()
390 int QtxListResourceEdit::Group::type() const
395 void QtxListResourceEdit::Group::store()
399 void QtxListResourceEdit::Group::retrieve()
403 QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
406 if ( prop == "columns" )
407 var = QVariant( columns() );
408 else if ( prop == "orientation" )
409 var = QVariant( orientation() );
410 else if ( prop == "frame" )
411 var = QVariant( frameStyle() != QFrame::NoFrame );
415 void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
418 if ( !prop.cast( QVariant::Int ) )
421 if ( name == QString( "columns" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
422 setColumns( prop.toInt() );
423 else if ( name == QString( "orientation" ) && prop.cast( QVariant::Int ) )
425 int o = prop.toInt();
426 if ( o == Qt::Horizontal || o == Qt::Vertical )
427 setOrientation( (Orientation)o );
429 else if ( name == "frame" && prop.cast( QVariant::Bool ) )
431 setInsideMargin( prop.toBool() ? 5 : 0 );
432 QGroupBox::setTitle( prop.toBool() ? Item::title() : QString::null );
433 setFrameStyle( prop.toBool() ? QFrame::Box | QFrame::Sunken : QFrame::NoFrame );
437 void QtxListResourceEdit::Group::setTitle( const QString& title )
439 Item::setTitle( title );
440 QGroupBox::setTitle( title );
443 QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
450 item = new ColorItem( title, resourceEdit(), this, this );
453 item = new StateItem( title, resourceEdit(), this, this );
456 item = new StringItem( title, resourceEdit(), this, this );
459 item = new SelectItem( title, resourceEdit(), this, this );
462 item = new DoubleSpinItem( title, resourceEdit(), this, this );
465 item = new IntegerSpinItem( title, resourceEdit(), this, this );
468 item = new DoubleEditItem( title, resourceEdit(), this, this );
471 item = new IntegerEditItem( title, resourceEdit(), this, this );
474 item = new Spacer( resourceEdit(), this, this );
477 item = new Group( title, resourceEdit(), this, this );
480 item = new FontItem( title, resourceEdit(), this, this );
483 item = new DirListItem( title, resourceEdit(), this, this );
486 item = new FileItem( title, resourceEdit(), this, this );
494 Class: QtxListResourceEdit::PrefItem
495 Descr: Base class for preferences items.
498 QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
506 QtxListResourceEdit::PrefItem::~PrefItem()
510 int QtxListResourceEdit::PrefItem::type() const
515 QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
521 Class: QtxListResourceEdit::Spacer
522 Descr: GUI implementation of resources spacer.
525 QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
526 : PrefItem( Space, edit, pItem, parent )
528 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
531 QtxListResourceEdit::Spacer::~Spacer()
535 void QtxListResourceEdit::Spacer::store()
539 void QtxListResourceEdit::Spacer::retrieve()
544 Class: QtxListResourceEdit::SelectItem
545 Descr: GUI implementation of resources list item.
548 QtxListResourceEdit::SelectItem::SelectItem( const QString& title, QtxResourceEdit* edit,
549 Item* pItem, QWidget* parent )
550 : PrefItem( Selector, edit, pItem, parent )
552 new QLabel( title, this );
553 myList = new QComboBox( false, this );
554 myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
557 QtxListResourceEdit::SelectItem::~SelectItem()
561 void QtxListResourceEdit::SelectItem::store()
563 int idx = myList->currentItem();
564 if ( myIndex.contains( idx ) )
565 setInteger( myIndex[idx] );
568 void QtxListResourceEdit::SelectItem::retrieve()
570 int id = getInteger( -1 );
573 for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
575 if ( it.data() == id )
579 myList->setCurrentItem( idx );
582 QVariant QtxListResourceEdit::SelectItem::property( const QString& name ) const
585 if ( name == QString( "strings" ) )
588 for ( int i = 0; i < (int)myList->count(); i++ )
589 lst.append( myList->text( i ) );
590 val = QVariant( lst );
592 else if ( name == QString( "indexes" ) )
594 QValueList<QVariant> lst;
595 for ( int i = 0; i < (int)myList->count(); i++ )
596 lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
597 val = QVariant( lst );
602 void QtxListResourceEdit::SelectItem::setProperty( const QString& name, const QVariant& val )
604 if ( name == QString( "strings" ) )
606 else if ( name == QString( "indexes" ) )
610 void QtxListResourceEdit::SelectItem::setStrings( const QVariant& var )
612 if ( var.type() != QVariant::StringList )
615 setStrings( var.toStringList() );
618 void QtxListResourceEdit::SelectItem::setIndexes( const QVariant& var )
620 if ( var.type() != QVariant::List )
623 QValueList<QVariant> varList = var.toList();
625 for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
627 if ( (*it).canCast( QVariant::Int ) )
628 lst.append( (*it).toInt() );
633 void QtxListResourceEdit::SelectItem::setStrings( const QStringList& lst )
636 myList->insertStringList( lst );
639 void QtxListResourceEdit::SelectItem::setIndexes( const QValueList<int>& lst )
644 for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
645 myIndex.insert( idx, *it );
649 Class: QtxListResourceEdit::StateItem
650 Descr: GUI implementation of resources bool item.
653 QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
654 Item* pItem, QWidget* parent )
655 : PrefItem( Bool, edit, pItem, parent )
657 myState = new QCheckBox( title, this );
658 myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
661 QtxListResourceEdit::StateItem::~StateItem()
665 void QtxListResourceEdit::StateItem::store()
667 setBoolean( myState->isChecked() );
670 void QtxListResourceEdit::StateItem::retrieve()
672 myState->setChecked( getBoolean() );
676 Class: QtxListResourceEdit::StringItem
677 Descr: GUI implementation of resources string item.
680 QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
681 Item* pItem, QWidget* parent )
682 : PrefItem( String, edit, pItem, parent )
684 new QLabel( title, this );
685 myString = new QLineEdit( this );
686 myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
689 QtxListResourceEdit::StringItem::~StringItem()
693 void QtxListResourceEdit::StringItem::store()
695 setString( myString->text() );
698 void QtxListResourceEdit::StringItem::retrieve()
700 myString->setText( getString() );
704 Class: QtxListResourceEdit::IntegerEditItem
705 Descr: GUI implementation of resources integer item.
708 QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
709 : PrefItem( Integer, edit, pItem, parent )
711 new QLabel( title, this );
712 myInteger = new QLineEdit( this );
713 myInteger->setValidator( new QIntValidator( myInteger ) );
714 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
717 QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
721 void QtxListResourceEdit::IntegerEditItem::store()
723 setString( myInteger->text() );
726 void QtxListResourceEdit::IntegerEditItem::retrieve()
728 myInteger->setText( getString() );
732 Class: QtxListResourceEdit::IntegerSpinItem
733 Descr: GUI implementation of resources integer item.
736 QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
737 : PrefItem( IntSpin, edit, pItem, parent )
739 new QLabel( title, this );
740 myInteger = new QtxIntSpinBox( this );
741 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
744 QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
748 void QtxListResourceEdit::IntegerSpinItem::store()
750 setInteger( myInteger->value() );
753 void QtxListResourceEdit::IntegerSpinItem::retrieve()
755 myInteger->setValue( getInteger() );
758 QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
761 if ( name == QString( "minimum" ) || name == QString( "min" ) )
762 var = QVariant( myInteger->minValue() );
763 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
764 var = QVariant( myInteger->maxValue() );
765 else if ( name == QString( "step" ) )
766 var = QVariant( myInteger->lineStep() );
767 else if ( name == QString( "special" ) )
768 var = QVariant( myInteger->specialValueText() );
769 else if ( name == QString( "prefix" ) )
770 var = QVariant( myInteger->prefix() );
771 else if ( name == QString( "suffix" ) )
772 var = QVariant( myInteger->suffix() );
776 void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
780 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Int ) )
781 myInteger->setMinValue( prop.toInt() );
782 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Int ) )
783 myInteger->setMaxValue( prop.toInt() );
784 else if ( name == QString( "step" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
785 myInteger->setLineStep( prop.toInt() );
786 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
787 myInteger->setSpecialValueText( prop.toString() );
788 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
789 myInteger->setPrefix( prop.toString() );
790 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
791 myInteger->setSuffix( prop.toString() );
795 Class: QtxListResourceEdit::DoubleEditItem
796 Descr: GUI implementation of resources string item.
799 QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
800 Item* pItem, QWidget* parent )
801 : PrefItem( Double, edit, pItem, parent )
803 new QLabel( title, this );
804 myDouble = new QLineEdit( this );
805 myDouble->setValidator( new QDoubleValidator( myDouble ) );
806 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
809 QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
813 void QtxListResourceEdit::DoubleEditItem::store()
815 setString( myDouble->text() );
818 void QtxListResourceEdit::DoubleEditItem::retrieve()
820 myDouble->setText( getString() );
824 Class: QtxListResourceEdit::DoubleSpinItem
825 Descr: GUI implementation of resources double item.
828 QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
829 Item* pItem, QWidget* parent )
830 : PrefItem( DblSpin, edit, pItem, parent )
832 new QLabel( title, this );
833 myDouble = new QtxDblSpinBox( this );
834 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
837 QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
841 void QtxListResourceEdit::DoubleSpinItem::store()
843 setDouble( myDouble->value() );
846 void QtxListResourceEdit::DoubleSpinItem::retrieve()
848 myDouble->setValue( getDouble() );
851 QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
854 if ( name == QString( "minimum" ) || name == QString( "min" ) )
855 var = QVariant( myDouble->minValue() );
856 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
857 var = QVariant( myDouble->maxValue() );
858 else if ( name == QString( "precision" ) )
859 var = QVariant( myDouble->precision() );
860 else if ( name == QString( "step" ) )
861 var = QVariant( myDouble->lineStep() );
862 else if ( name == QString( "special" ) )
863 var = QVariant( myDouble->specialValueText() );
864 else if ( name == QString( "prefix" ) )
865 var = QVariant( myDouble->prefix() );
866 else if ( name == QString( "suffix" ) )
867 var = QVariant( myDouble->suffix() );
871 void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
875 if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Double ) )
876 myDouble->setMinValue( prop.toDouble() );
877 else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Double ) )
878 myDouble->setMaxValue( prop.toDouble() );
879 else if ( name == QString( "step" ) && prop.cast( QVariant::Double ) && prop.toDouble() > 0 )
880 myDouble->setLineStep( prop.toDouble() );
881 else if ( name == QString( "precision" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
882 myDouble->setPrecision( prop.toInt() );
883 else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
884 myDouble->setSpecialValueText( prop.toString() );
885 else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
886 myDouble->setPrefix( prop.toString() );
887 else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
888 myDouble->setSuffix( prop.toString() );
892 Class: QtxListResourceEdit::ColorItem
893 Descr: GUI implementation of resources color item.
896 QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
897 Item* pItem, QWidget* parent )
898 : PrefItem( Color, edit, pItem, parent )
900 class ColorSelector : public QLabel
903 ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
905 setFrameStyle( WinPanel | Raised );
907 virtual ~ColorSelector() {}
908 virtual QSize minimumSizeHint() const
910 return QLabel::minimumSizeHint() + QSize( 0, 2 );
914 virtual void mousePressEvent( QMouseEvent* e )
916 if ( e->button() == LeftButton )
918 setFrameStyle( WinPanel | Sunken );
919 QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
921 setPaletteBackgroundColor( c );
923 setFrameStyle( WinPanel | Raised );
928 new QLabel( title, this );
929 myColor = new ColorSelector( this );
930 myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
933 QtxListResourceEdit::ColorItem::~ColorItem()
937 void QtxListResourceEdit::ColorItem::store()
939 setColor( myColor->paletteBackgroundColor() );
942 void QtxListResourceEdit::ColorItem::retrieve()
944 myColor->setPaletteBackgroundColor( getColor() );
949 Class: QtxListResourceEdit::FontItem
950 Descr: GUI implementation of resources font item.
952 QtxListResourceEdit::FontItem::FontItem( const QString& title, QtxResourceEdit* edit,
953 Item* pItem, QWidget* parent )
954 : PrefItem( Font, edit, pItem, parent )
956 new QLabel( title, this );
957 myFamilies = new QtxComboBox( false, this );
958 mySizes = new QtxComboBox( true, this );
959 mySizes->setInsertionPolicy( QComboBox::NoInsertion );
960 myBold = new QCheckBox( tr( "Bold" ), this );
961 myItalic = new QCheckBox( tr( "Italic" ), this );
962 myUnderline = new QCheckBox( tr( "Underline" ), this );
963 myPreview = new QToolButton( this );
964 myPreview->setText( "..." );
966 myFamilies->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
967 mySizes->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
969 connect( myFamilies, SIGNAL( activated( int ) ), this, SLOT( onActivateFamily( int ) ) );
970 connect( myPreview, SIGNAL( clicked() ), this, SLOT( onPreview() ) );
972 setProperty( "system", ( bool )true );
973 setProperty( "widget_flags", ( int )All );
976 QtxListResourceEdit::FontItem::~FontItem()
980 void QtxListResourceEdit::FontItem::store()
982 QFont f( family(), size() );
983 bool bold, italic, underline;
984 params( bold, italic, underline );
986 f.setItalic( italic );
987 f.setUnderline( underline );
991 void QtxListResourceEdit::FontItem::retrieve()
994 setFamily( f.family() );
995 setSize( f.pointSize() );
996 setParams( f.bold(), f.italic(), f.underline() );
999 QVariant QtxListResourceEdit::FontItem::property( const QString& name ) const
1001 if( name=="system" )
1004 else if( name=="widget_flags" )
1005 return ( int )myFlags;
1009 if( name=="families" )
1012 return fdb.families();
1015 else if( name=="default_family" )
1018 QStringList fam = fdb.families();
1022 return QString::null;
1027 QStringList parts = QStringList::split( ":", name );
1028 if( parts.count()==2 )
1030 if( parts[1]=="default_bold" || parts[1]=="default_italic" || parts[1]=="default_underline" )
1033 else if( parts[1]=="sizes" )
1036 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1037 QValueList<QVariant> vsizes;
1038 QValueList<int>::const_iterator anIt = sizes.begin(),
1039 aLast = sizes.end();
1040 for( ; anIt!=aLast; anIt++ )
1041 vsizes.append( *anIt );
1046 else if( parts[1]=="default_size" )
1048 if( parts[0].isEmpty() )
1052 QValueList<int> sizes = fdb.pointSizes( parts[0] );
1053 if( sizes.count()>0 )
1054 return sizes.first();
1062 else if( myProperties.contains( name ) )
1063 return myProperties[ name ];
1068 void QtxListResourceEdit::FontItem::setProperty( const QString& name, const QVariant& value )
1070 if( name=="system" )
1072 if( !value.canCast( QVariant::Bool ) )
1075 bool isSystem = value.toBool();
1076 if( myIsSystem==isSystem )
1079 myIsSystem = isSystem;
1081 QVariant families = property( "families" );
1082 QString fam = family();
1084 myFamilies->clear();
1085 if( families.canCast( QVariant::StringList ) )
1087 QStringList list = families.toStringList();
1088 myFamilies->insertStringList( list );
1092 setSize( -1 ); //set default size
1095 else if( name=="widget_flags" )
1097 if( !value.canCast( QVariant::Int ) )
1100 int wf = value.toInt();
1103 myFamilies ->setShown( wf & Family );
1104 mySizes ->setShown( wf & Size );
1105 mySizes->lineEdit()->setReadOnly( ( wf & UserSize )==0 );
1106 myBold ->setShown( wf & Bold );
1107 myItalic ->setShown( wf & Italic );
1108 myUnderline->setShown( wf & Underline );
1109 bool isSystem = property( "system" ).canCast( QVariant::Bool ) ? property( "system" ).toBool() : false;
1110 myPreview->setShown( ( wf & Preview ) && isSystem );
1116 myProperties[ name ] = value;
1119 void QtxListResourceEdit::FontItem::setFamily( const QString& f )
1122 if( myFamilies->isShown() )
1124 if( myFamilies->listBox()->findItem( f, Qt::ExactMatch ) )
1129 QVariant deffam = property( "default_family" );
1130 if( deffam.canCast( QVariant::String ) )
1131 curtext = deffam.toString();
1135 for ( int i = 0; i < (int)myFamilies->count() && idx < 0; i++ )
1137 if ( myFamilies->text( i ) == curtext )
1142 myFamilies->setCurrentItem( idx );
1144 onActivateFamily( idx );
1147 QString QtxListResourceEdit::FontItem::family() const
1149 return myFamilies->currentText();
1152 void QtxListResourceEdit::FontItem::setSize( const int s )
1155 if( mySizes->isShown() && s>0 )
1157 if( ( myFlags & UserSize ) || mySizes->listBox()->findItem( QString( "%1" ).arg( s ), Qt::ExactMatch ) )
1162 QVariant defsize = property( QString( "%1:default_size" ).arg( family() ) );
1163 if( defsize.canCast( QVariant::Int ) )
1164 cursize = defsize.toInt();
1167 mySizes->setCurrentText( cursize>0 ? QString( "%1" ).arg( cursize ) : "" );
1170 int QtxListResourceEdit::FontItem::size() const
1172 QString s = mySizes->currentText();
1174 int pSize = s.toInt( &ok );
1175 return ( ok ? pSize : 0 );
1178 void QtxListResourceEdit::FontItem::setParams( const bool bold, const bool italic, const bool underline )
1180 bool curbold = false, curitalic = false, curunderline = false;
1181 if( myBold->isShown() )
1185 QVariant def = property( QString( "%1:default_bold" ).arg( family() ) );
1186 if( def.canCast( QVariant::Bool ) )
1187 curbold = def.toBool();
1189 if( myItalic->isShown() )
1193 QVariant def = property( QString( "%1:default_italic" ).arg( family() ) );
1194 if( def.canCast( QVariant::Bool ) )
1195 curitalic = def.toBool();
1197 if( myUnderline->isShown() )
1198 curunderline = underline;
1201 QVariant def = property( QString( "%1:default_underline" ).arg( family() ) );
1202 if( def.canCast( QVariant::Bool ) )
1203 curunderline = def.toBool();
1205 myBold->setChecked( curbold );
1206 myItalic->setChecked( curitalic );
1207 myUnderline->setChecked( curunderline );
1210 void QtxListResourceEdit::FontItem::params( bool& bold, bool& italic, bool& underline )
1212 bold = myBold->isChecked();
1213 italic = myItalic->isChecked();
1214 underline = myUnderline->isChecked();
1217 void QtxListResourceEdit::FontItem::internalUpdate()
1219 //update internal selection of font properties
1220 setFamily( family() );
1223 params( b1, b2, b3 );
1224 setParams( b1, b2, b3 );
1227 void QtxListResourceEdit::FontItem::onActivateFamily( int )
1229 QVariant sizes = property( QString( "%1:sizes" ).arg( family() ) );
1233 if( sizes.canCast( QVariant::List ) )
1235 QValueList<QVariant> list = sizes.toList();
1236 QStringList sizeItems;
1237 QValueList<QVariant>::const_iterator anIt = list.begin(),
1239 for( ; anIt!=aLast; anIt++ )
1240 if( (*anIt).canCast( QVariant::Int ) && (*anIt).toInt()>0 )
1241 sizeItems.append( QString( "%1" ).arg( (*anIt).toInt() ) );
1242 mySizes->insertStringList( sizeItems );
1247 void QtxListResourceEdit::FontItem::onPreview()
1249 QFont f( family(), size() );
1250 bool bold, italic, underline;
1251 params( bold, italic, underline );
1253 f.setItalic( italic );
1254 f.setUnderline( underline );
1257 f = QFontDialog::getFont( &ok, f );
1261 setFamily( f.family() );
1262 setSize( f.pointSize() );
1263 setParams( f.bold(), f.italic(), f.underline() );
1272 Class: QtxListResourceEdit::DirListItem
1275 QtxListResourceEdit::DirListItem::DirListItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
1276 : PrefItem( Font, edit, pItem, parent )
1278 myDirListEditor = new QtxDirListEditor( this );
1281 QtxListResourceEdit::DirListItem::~DirListItem()
1285 void QtxListResourceEdit::DirListItem::store()
1288 myDirListEditor->getPathList(list);
1289 setString( QString(list.join(";")) );
1292 void QtxListResourceEdit::DirListItem::retrieve()
1294 myDirListEditor->setPathList(QStringList::split(";", getString()));
1300 Class: QtxListResourceEdit::FileItem
1301 Descr: GUI implementation of resources file item.
1303 QtxListResourceEdit::FileItem::FileItem( const QString& title, QtxResourceEdit* edit,
1304 Item* pItem, QWidget* parent )
1305 : PrefItem( Font, edit, pItem, parent ),
1306 myFlags( QFileInfo::ReadUser ),
1307 myIsExisting( true ),
1308 myIsReadOnly ( true ),
1311 new QLabel( title, this );
1312 myFile = new QLineEdit( this );
1313 myFile->setValidator( new FileValidator( this, myFile ) );
1314 myFile->setReadOnly( myIsReadOnly );
1315 myOpenFile = new QToolButton( this );
1316 myOpenFile->setText( "..." );
1317 connect( myOpenFile, SIGNAL( clicked() ), this, SLOT( onOpenFile() ) );
1320 QtxListResourceEdit::FileItem::~FileItem()
1326 void QtxListResourceEdit::FileItem::store()
1328 setString( myFile->text() );
1331 void QtxListResourceEdit::FileItem::retrieve()
1333 myFile->setText( getString() );
1336 QVariant QtxListResourceEdit::FileItem::property( const QString& name ) const
1338 if( name=="filter" )
1340 else if( name=="existing" )
1341 return myIsExisting;
1342 else if( name=="flags" )
1344 else if( name=="readOnly")
1345 return myIsReadOnly;
1350 void QtxListResourceEdit::FileItem::setProperty( const QString& name, const QVariant& value )
1352 if( name=="filter" )
1354 if( value.canCast( QVariant::String ) )
1357 myFilter.append( value.toString() );
1359 else if( value.canCast( QVariant::StringList ) )
1360 myFilter = value.toStringList();
1362 else if( name=="existing" && value.canCast( QVariant::Bool ) )
1363 myIsExisting = value.toBool();
1365 else if( name=="flags" && value.canCast( QVariant::UInt ) )
1366 myFlags = value.toUInt();
1368 else if( name=="readOnly" && value.canCast( QVariant::Bool) ) {
1369 myIsReadOnly = value.toBool();
1370 myFile->setReadOnly( myIsReadOnly );
1374 void QtxListResourceEdit::FileItem::onOpenFile()
1378 myFileDlg = new QFileDialog( "." );
1379 connect( myFileDlg, SIGNAL( fileHighlighted( const QString& ) ), this, SLOT( onFileSelected( const QString& ) ) );
1382 myFileDlg->setCaption( title() );
1383 myFileDlg->setFilters( myFilter );
1384 myFileDlg->setMode( myIsExisting ? QFileDialog::ExistingFile : QFileDialog::AnyFile );
1386 if( myFileDlg->exec()==QDialog::Accepted )
1388 myFile->setText( myFileDlg->selectedFile() );
1392 bool QtxListResourceEdit::FileItem::isFileCorrect( const QString& f ) const
1395 QFileInfo info( f );
1396 if( !myIsExisting || info.exists() )
1397 res = info.isFile() && info.permission( myFlags );
1402 void QtxListResourceEdit::FileItem::onFileSelected( const QString& f )
1404 if( myFileDlg && !isFileCorrect( f ) )
1405 myFileDlg->setSelection( "" );
1410 QtxListResourceEdit::FileItem::FileValidator::FileValidator( FileItem* item, QObject* parent )
1411 : QValidator( parent ),
1416 QtxListResourceEdit::FileItem::FileValidator::~FileValidator()
1420 QValidator::State QtxListResourceEdit::FileItem::FileValidator::validate( QString& f, int& ) const
1422 if( myItem && myItem->isFileCorrect( f ) )
1423 return QValidator::Acceptable;
1425 return QValidator::Intermediate;