1 // File: QtxListResourceEdit.cxx
2 // Author: Sergey TELKOV
4 #include "QtxListResourceEdit.h"
10 #include <qcombobox.h>
11 #include <qlineedit.h>
12 #include <qcheckbox.h>
13 #include <qtabwidget.h>
14 #include <qvalidator.h>
15 #include <qobjectlist.h>
16 #include <qcolordialog.h>
17 #include <qwidgetstack.h>
19 #include "QtxIntSpinBox.h"
20 #include "QtxDblSpinBox.h"
23 Class: QtxListResourceEdit
24 Descr: GUI implementation of QtxResourceEdit - manager of resources
27 QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
29 QtxResourceEdit( mgr )
31 QHBoxLayout* main = new QHBoxLayout( this, 0, 5 );
33 myList = new QListBox( this );
34 myStack = new QWidgetStack( this );
36 myList->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) );
37 myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
39 main->addWidget( myList );
40 main->addWidget( myStack );
42 myList->setSelectionMode( QListBox::Single );
44 connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
46 setFocusProxy( myList );
51 QtxListResourceEdit::~QtxListResourceEdit()
55 void QtxListResourceEdit::onSelectionChanged()
57 int idx = myList->index( myList->selectedItem() );
61 myStack->raiseWidget( idx );
64 QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
66 Item* i = item( title, -1 );
70 Category* category = new Category( this, myStack );
71 myList->insertItem( title );
72 int id = myList->count() - 1;
73 myStack->addWidget( category, id );
75 if ( !myList->selectedItem() )
76 myList->setSelected( 0, true );
83 void QtxListResourceEdit::updateState()
85 if ( myStack->visibleWidget() )
92 Class: QtxListResourceEdit::Category
93 Descr: GUI implementation of preferences category.
96 QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
100 QVBoxLayout* main = new QVBoxLayout( this );
101 QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
102 base->setFrameStyle( QFrame::NoFrame );
103 base->setInsideMargin( 0 );
104 main->addWidget( base, 1 );
106 myTabs = new QTabWidget( base );
107 myInfo = new QLabel( base );
109 myInfo->setAlignment( Qt::AlignCenter );
110 myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
111 myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
116 QtxListResourceEdit::Category::~Category()
120 int QtxListResourceEdit::Category::type() const
125 void QtxListResourceEdit::Category::store()
129 void QtxListResourceEdit::Category::retrieve()
133 QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
136 if ( prop == QString( "information" ) || prop == QString( "info" ) )
137 var = myInfo->text();
141 void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
144 if ( !prop.cast( QVariant::String ) )
147 if ( name == QString( "information" ) || name == QString( "info" ) )
148 myInfo->setText( prop.toString() );
153 QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
155 Item* i = item( title, id() );
159 Tab* tab = new Tab( resourceEdit(), this, this );
160 myTabs->addTab( tab, title );
167 void QtxListResourceEdit::Category::updateState()
169 if ( myTabs->count() )
174 if ( !myTabs->count() && !myInfo->text().isEmpty() )
181 Class: QtxListResourceEdit::Tab
182 Descr: GUI implementation of resources tab.
185 QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
189 QVBoxLayout* main = new QVBoxLayout( this );
190 myMainFrame = new QGroupBox( 1, Qt::Horizontal, "", this );
191 myMainFrame->setFrameStyle( QFrame::NoFrame );
192 myMainFrame->setInsideMargin( 5 );
193 main->addWidget( myMainFrame );
196 QtxListResourceEdit::Tab::~Tab()
200 int QtxListResourceEdit::Tab::type() const
205 void QtxListResourceEdit::Tab::store()
209 void QtxListResourceEdit::Tab::retrieve()
213 void QtxListResourceEdit::Tab::polish()
220 QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
222 Item* i = item( title, id() );
226 Group* group = new Group( title, resourceEdit(), this, myMainFrame );
231 void QtxListResourceEdit::Tab::adjustLabels()
233 QObjectList* labels = queryList( "QLabel" );
237 for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
239 if ( it1.current()->isWidgetType() )
241 QWidget* wid = (QWidget*)it1.current();
242 w = QMAX( w, wid->sizeHint().width() );
245 for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
247 if ( it2.current()->isWidgetType() )
249 QWidget* wid = (QWidget*)it2.current();
250 wid->setMinimumWidth( w );
258 Class: QtxListResourceEdit::Group
259 Descr: GUI implementation of resources group.
262 QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
263 : QGroupBox( 2, Qt::Horizontal, title, parent ),
268 QtxListResourceEdit::Group::~Group()
272 int QtxListResourceEdit::Group::type() const
277 void QtxListResourceEdit::Group::store()
281 void QtxListResourceEdit::Group::retrieve()
285 QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
288 if ( prop == "columns" )
289 var = QVariant( columns() );
293 void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
296 if ( !prop.cast( QVariant::Int ) )
299 if ( name == QString( "columns" ) && prop.toInt() > 0 )
300 setColumns( prop.toInt() );
303 void QtxListResourceEdit::Group::setTitle( const QString& title )
305 Item::setTitle( title );
306 QGroupBox::setTitle( title );
309 QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
316 item = new ColorItem( title, resourceEdit(), this, this );
319 item = new StateItem( title, resourceEdit(), this, this );
322 item = new StringItem( title, resourceEdit(), this, this );
325 item = new ListItem( title, resourceEdit(), this, this );
328 item = new DoubleSpinItem( title, resourceEdit(), this, this );
331 item = new IntegerSpinItem( title, resourceEdit(), this, this );
334 item = new DoubleEditItem( title, resourceEdit(), this, this );
337 item = new IntegerEditItem( title, resourceEdit(), this, this );
340 item = new Spacer( resourceEdit(), this, this );
348 Class: QtxListResourceEdit::PrefItem
349 Descr: Base class for preferences items.
352 QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
360 QtxListResourceEdit::PrefItem::~PrefItem()
364 int QtxListResourceEdit::PrefItem::type() const
369 QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
375 Class: QtxListResourceEdit::Spacer
376 Descr: GUI implementation of resources spacer.
379 QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
380 : PrefItem( Space, edit, pItem, parent )
382 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
385 QtxListResourceEdit::Spacer::~Spacer()
389 void QtxListResourceEdit::Spacer::store()
393 void QtxListResourceEdit::Spacer::retrieve()
398 Class: QtxListResourceEdit::ListItem
399 Descr: GUI implementation of resources list item.
402 QtxListResourceEdit::ListItem::ListItem( const QString& title, QtxResourceEdit* edit,
403 Item* pItem, QWidget* parent )
404 : PrefItem( List, edit, pItem, parent )
406 new QLabel( title, this );
407 myList = new QComboBox( false, this );
408 myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
411 QtxListResourceEdit::ListItem::~ListItem()
415 void QtxListResourceEdit::ListItem::store()
417 int idx = myList->currentItem();
418 if ( myIndex.contains( idx ) )
419 setInteger( myIndex[idx] );
422 void QtxListResourceEdit::ListItem::retrieve()
424 int id = getInteger( -1 );
427 for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
429 if ( it.data() == id )
433 myList->setCurrentItem( idx );
436 QVariant QtxListResourceEdit::ListItem::property( const QString& name ) const
439 if ( name == QString( "strings" ) )
442 for ( int i = 0; i < (int)myList->count(); i++ )
443 lst.append( myList->text( i ) );
444 val = QVariant( lst );
446 else if ( name == QString( "indexes" ) )
448 QValueList<QVariant> lst;
449 for ( int i = 0; i < (int)myList->count(); i++ )
450 lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
451 val = QVariant( lst );
456 void QtxListResourceEdit::ListItem::setProperty( const QString& name, const QVariant& val )
458 if ( name == QString( "strings" ) )
460 else if ( name == QString( "indexes" ) )
464 void QtxListResourceEdit::ListItem::setStrings( const QVariant& var )
466 if ( var.type() != QVariant::StringList )
469 setStrings( var.toStringList() );
472 void QtxListResourceEdit::ListItem::setIndexes( const QVariant& var )
474 if ( var.type() != QVariant::List )
477 QValueList<QVariant> varList = var.toList();
479 for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
481 if ( (*it).canCast( QVariant::Int ) )
482 lst.append( (*it).toInt() );
487 void QtxListResourceEdit::ListItem::setStrings( const QStringList& lst )
490 myList->insertStringList( lst );
493 void QtxListResourceEdit::ListItem::setIndexes( const QValueList<int>& lst )
498 for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
499 myIndex.insert( idx, *it );
503 Class: QtxListResourceEdit::StateItem
504 Descr: GUI implementation of resources bool item.
507 QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
508 Item* pItem, QWidget* parent )
509 : PrefItem( Bool, edit, pItem, parent )
511 myState = new QCheckBox( title, this );
512 myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
515 QtxListResourceEdit::StateItem::~StateItem()
519 void QtxListResourceEdit::StateItem::store()
521 setBoolean( myState->isChecked() );
524 void QtxListResourceEdit::StateItem::retrieve()
526 myState->setChecked( getBoolean() );
530 Class: QtxListResourceEdit::StringItem
531 Descr: GUI implementation of resources string item.
534 QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
535 Item* pItem, QWidget* parent )
536 : PrefItem( String, edit, pItem, parent )
538 new QLabel( title, this );
539 myString = new QLineEdit( this );
540 myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
543 QtxListResourceEdit::StringItem::~StringItem()
547 void QtxListResourceEdit::StringItem::store()
549 setString( myString->text() );
552 void QtxListResourceEdit::StringItem::retrieve()
554 myString->setText( getString() );
558 Class: QtxListResourceEdit::IntegerEditItem
559 Descr: GUI implementation of resources integer item.
562 QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
563 : PrefItem( IntegerEdit, edit, pItem, parent )
565 new QLabel( title, this );
566 myInteger = new QLineEdit( this );
567 myInteger->setValidator( new QIntValidator( myInteger ) );
568 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
571 QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
575 void QtxListResourceEdit::IntegerEditItem::store()
577 setString( myInteger->text() );
580 void QtxListResourceEdit::IntegerEditItem::retrieve()
582 myInteger->setText( getString() );
586 Class: QtxListResourceEdit::IntegerSpinItem
587 Descr: GUI implementation of resources integer item.
590 QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
591 : PrefItem( IntegerSpin, edit, pItem, parent )
593 new QLabel( title, this );
594 myInteger = new QtxIntSpinBox( this );
595 myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
598 QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
602 void QtxListResourceEdit::IntegerSpinItem::store()
604 setInteger( myInteger->value() );
607 void QtxListResourceEdit::IntegerSpinItem::retrieve()
609 myInteger->setValue( getInteger() );
612 QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
615 if ( name == QString( "minimum" ) || name == QString( "min" ) )
616 var = QVariant( myInteger->minValue() );
617 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
618 var = QVariant( myInteger->maxValue() );
619 else if ( name == QString( "step" ) )
620 var = QVariant( myInteger->lineStep() );
624 void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
627 if ( !prop.cast( QVariant::Int ) )
630 int val = prop.toInt();
631 if ( name == QString( "minimum" ) || name == QString( "min" ) )
632 myInteger->setMinValue( val );
633 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
634 myInteger->setMaxValue( val );
635 else if ( name == QString( "step" ) && val > 0 )
636 myInteger->setLineStep( val );
640 Class: QtxListResourceEdit::DoubleEditItem
641 Descr: GUI implementation of resources string item.
644 QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
645 Item* pItem, QWidget* parent )
646 : PrefItem( RealEdit, edit, pItem, parent )
648 new QLabel( title, this );
649 myDouble = new QLineEdit( this );
650 myDouble->setValidator( new QDoubleValidator( myDouble ) );
651 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
654 QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
658 void QtxListResourceEdit::DoubleEditItem::store()
660 setString( myDouble->text() );
663 void QtxListResourceEdit::DoubleEditItem::retrieve()
665 myDouble->setText( getString() );
669 Class: QtxListResourceEdit::DoubleSpinItem
670 Descr: GUI implementation of resources double item.
673 QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
674 Item* pItem, QWidget* parent )
675 : PrefItem( RealSpin, edit, pItem, parent )
677 new QLabel( title, this );
678 myDouble = new QtxDblSpinBox( this );
679 myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
682 QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
686 void QtxListResourceEdit::DoubleSpinItem::store()
688 setDouble( myDouble->value() );
691 void QtxListResourceEdit::DoubleSpinItem::retrieve()
693 myDouble->setValue( getDouble() );
696 QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
699 if ( name == QString( "minimum" ) || name == QString( "min" ) )
700 var = QVariant( myDouble->minValue() );
701 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
702 var = QVariant( myDouble->maxValue() );
703 else if ( name == QString( "precision" ) )
704 var = QVariant( myDouble->precision() );
705 else if ( name == QString( "step" ) )
706 var = QVariant( myDouble->lineStep() );
710 void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
713 if ( prop.cast( QVariant::Double ) )
715 double val = prop.toDouble();
716 if ( name == QString( "minimum" ) || name == QString( "min" ) )
717 myDouble->setMinValue( val );
718 else if ( name == QString( "maximum" ) || name == QString( "max" ) )
719 myDouble->setMaxValue( val );
720 else if ( name == QString( "step" ) && val > 0 )
721 myDouble->setLineStep( val );
726 if ( prop.cast( QVariant::Int ) && name == QString( "precision" ) && prop.toInt() > 0 )
727 myDouble->setPrecision( prop.toInt() );
732 Class: QtxListResourceEdit::ColorItem
733 Descr: GUI implementation of resources color item.
736 QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
737 Item* pItem, QWidget* parent )
738 : PrefItem( Color, edit, pItem, parent )
740 class ColorSelector : public QLabel
743 ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
745 setFrameStyle( WinPanel | Raised );
747 virtual ~ColorSelector() {}
748 virtual QSize minimumSizeHint() const
750 return QLabel::minimumSizeHint() + QSize( 0, 2 );
754 virtual void mousePressEvent( QMouseEvent* e )
756 if ( e->button() == LeftButton )
758 setFrameStyle( WinPanel | Sunken );
759 QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
761 setPaletteBackgroundColor( c );
763 setFrameStyle( WinPanel | Raised );
768 new QLabel( title, this );
769 myColor = new ColorSelector( this );
770 myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
773 QtxListResourceEdit::ColorItem::~ColorItem()
777 void QtxListResourceEdit::ColorItem::store()
779 setColor( myColor->paletteBackgroundColor() );
782 void QtxListResourceEdit::ColorItem::retrieve()
784 myColor->setPaletteBackgroundColor( getColor() );