1 // File: QtxDockAction.cxx
2 // Author: Sergey TELKOV
4 #include "QtxDockAction.h"
6 #include "QtxResourceMgr.h"
10 #include <qdockarea.h>
11 #include <qdockwindow.h>
12 #include <qmainwindow.h>
13 #include <qapplication.h>
16 Name: QtxDockAction [public]
17 Desc: Constructs an Dock action with given main window and name.
20 QtxDockAction::QtxDockAction( QMainWindow* mw, const char* name )
21 : QtxAction( "Windows and Toolbars", "Windows and Toolbars", 0, mw, name ),
31 Name: QtxDockAction [public]
32 Desc: This constructor creates an action with the following properties: the
33 description text, the menu text and. It is a child of given main window
34 and named specified name.
37 QtxDockAction::QtxDockAction( const QString& text, const QString& menuText, QMainWindow* mw, const char* name )
38 : QtxAction( text, menuText, 0, mw, name ),
48 Name: QtxDockAction [public]
49 Desc: This constructor creates an action with the following properties: the
50 description text, the menu text, the icon or iconset icon and keyboard
51 accelerator. It is a child of given main window and named specified name.
54 QtxDockAction::QtxDockAction( const QString& text, const QIconSet& icon, const QString& menuText, QMainWindow* mw, const char* name )
55 : QtxAction( text, icon, menuText, 0, mw, name ),
65 Name: ~QtxDockAction [public]
66 Desc: Removes all added popup items.
69 QtxDockAction::~QtxDockAction()
71 for ( MenuMap::ConstIterator mIt = myMenu.begin(); mIt != myMenu.end(); ++mIt )
72 removeFrom( mIt.key() );
74 for ( InfoMap::ConstIterator iIt = myInfo.begin(); iIt != myInfo.end(); ++iIt )
79 Name: mainWindow [public]
80 Desc: Returns the main window which contains managed dock windows.
83 QMainWindow* QtxDockAction::mainWindow() const
89 Name: isAutoAdd [public]
90 Desc: Returns the auto add property. If this property is setted then all newly
91 appeared dock windows will be automatically added.
94 bool QtxDockAction::isAutoAdd() const
100 Name: setAutoAdd [public]
101 Desc: Sets the auto add property. If this property is setted then all newly
102 appeared dock windows will be automatically added.
105 void QtxDockAction::setAutoAdd( const bool on )
111 Name: isAutoPlace [public]
112 Desc: Returns the auto place property. If this property is setted then all newly
113 added dock windows will be automatically placed according stored place information.
116 bool QtxDockAction::isAutoPlace() const
122 Name: setAutoPlace [public]
123 Desc: Sets the auto place property. If this property is setted then all newly
124 added dock windows will be automatically placed according stored place
128 void QtxDockAction::setAutoPlace( const bool on )
134 Name: isSeparate [public]
135 Desc: Returns the 'separate' property.
138 bool QtxDockAction::isSeparate() const
144 Name: setSeparate [public]
145 Desc: Sets the 'separate' property. If this property is 'true' then toolbars and
146 dock windows menu items will be placed in different popup menus otherwise
147 their will be placed in one common popup menu. This property will be
148 affected in next method 'addTo'.
151 void QtxDockAction::setSeparate( const bool on )
158 Desc: Add the dock windows sub menu item to the end of specified popup.
161 bool QtxDockAction::addTo( QWidget* wid )
163 return addTo( wid, -1 );
168 Desc: Add the dock windows sub menu item to specified popup at the given index.
171 bool QtxDockAction::addTo( QWidget* wid, const int idx )
173 if ( !wid || !wid->inherits( "QPopupMenu" ) )
176 QPopupMenu* pm = (QPopupMenu*)wid;
179 if ( myMenu.contains( pm ) )
183 mInfo.dock = new QPopupMenu( pm );
184 mInfo.tool = isSeparate() ? new QPopupMenu( pm ) : 0;
187 splitMenuText( dock, tool );
189 myMenu.insert( pm, mInfo );
194 iconSet().isNull() ? pm->insertItem ( dock, mInfo.dock, -1, index ) :
195 pm->insertItem ( iconSet(), dock, mInfo.dock, -1, index );
201 iconSet().isNull() ? pm->insertItem ( tool, mInfo.tool, -1, index ) :
202 pm->insertItem ( iconSet(), tool, mInfo.tool, -1, index );
204 connect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
205 connect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
211 Name: removeFrom [public]
212 Desc: Removes dock window sub menu from specified popup.
215 bool QtxDockAction::removeFrom( QWidget* wid )
217 QPopupMenu* pm = (QPopupMenu*)wid;
219 if ( myMenu.contains( pm ) )
221 pm->removeItem( findId( pm, myMenu[pm].dock ) );
222 pm->removeItem( findId( pm, myMenu[pm].tool ) );
224 delete myMenu[pm].dock;
225 delete myMenu[pm].tool;
228 disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
229 disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
232 return QtxAction::removeFrom( wid );
236 Name: addDockWindow [public]
237 Desc: Add dock window to internal data structures. Action will be include all added
238 dock windows in to menu and manage their place configuration.
241 bool QtxDockAction::addDockWindow( QDockWindow* dw )
243 if ( !dw || !mainWindow() )
246 if ( myInfo.contains( dw ) )
249 myInfo.insert( dw, DockInfo() );
251 DockInfo& inf = myInfo[dw];
252 inf.name = windowName( dw );
253 QAction* a = inf.a = new QAction( mainWindow(), 0, true );
255 autoLoadPlaceInfo( dw );
257 bool block = a->signalsBlocked();
258 a->blockSignals( true );
259 a->setOn( dw->isVisibleTo( mainWindow() ) );
260 a->blockSignals( block );
265 dw->installEventFilter( this );
267 connect( a, SIGNAL( toggled( bool ) ), this, SLOT( onToggled( bool ) ) );
268 connect( dw, SIGNAL( destroyed( QObject* ) ), this, SLOT( onWindowDestroyed( QObject* ) ) );
269 connect( dw, SIGNAL( visibilityChanged( bool ) ), this, SLOT( onVisibilityChanged( bool ) ) );
275 Name: removeDockWindow [public]
276 Desc: Remove dock window from internal data structures. Action will not manage this window.
279 bool QtxDockAction::removeDockWindow( QDockWindow* dw )
281 if ( !myInfo.contains( dw ) )
284 myGeom.remove( myInfo[dw].name );
289 dw->removeEventFilter( this );
291 disconnect( dw, SIGNAL( destroyed( QObject* ) ), this, SLOT( onWindowDestroyed( QObject* ) ) );
292 disconnect( dw, SIGNAL( visibilityChanged( bool ) ), this, SLOT( onVisibilityChanged( bool ) ) );
298 Name: eventFilter [public]
299 Desc: Event filter process caption and icon changing of managed dock windows
300 and try to add newly appeared dock windows.
303 bool QtxDockAction::eventFilter( QObject* o, QEvent* e )
305 if ( o->inherits( "QDockWindow" ) && ( e->type() == QEvent::CaptionChange ||
306 e->type() == QEvent::IconChange ) )
307 updateInfo( (QDockWindow*)o );
309 if ( o->inherits( "QDockArea" ) && e->type() == QEvent::ChildRemoved )
311 QChildEvent* ce = (QChildEvent*)e;
312 if ( ce->child() && ce->child()->inherits( "QDockWindow" ) )
313 savePlaceInfo( (QDockWindow*)ce->child() );
316 if ( o->inherits( "QDockArea" ) && e->type() == QEvent::ChildInserted )
318 QChildEvent* ce = (QChildEvent*)e;
319 if ( ce->child() && ce->child()->inherits( "QDockWindow" ) )
320 QApplication::postEvent( this, new QCustomEvent( (QEvent::Type)AutoAdd, ce->child() ) );
327 Name: restoreGeometry [public]
328 Desc: Retrieve the dock window geometry. If dock window specified as 0
329 then all windows geometry will be restored.
332 void QtxDockAction::restoreGeometry( QDockWindow* dw ) const
334 QPtrList<QDockWindow> dwList;
339 dockWindows( dwList );
341 for ( QPtrListIterator<QDockWindow> it( dwList ); it.current(); ++it )
342 loadPlaceInfo( it.current() );
346 Name: storeGeometry [public]
347 Desc: Store the dock window geometry. If dock window specified as 0
348 then all windows geometry will be stored.
351 void QtxDockAction::storeGeometry( QDockWindow* dw )
353 QPtrList<QDockWindow> dwList;
358 dockWindows( dwList );
360 for ( QPtrListIterator<QDockWindow> it( dwList ); it.current(); ++it )
361 savePlaceInfo( it.current() );
365 Name: loadGeometry [public]
366 Desc: Retrieve the dock windows geometry information from the specified resource manager section.
369 void QtxDockAction::loadGeometry( QtxResourceMgr* resMgr, const QString& section, const bool clear )
371 QString sec = section.stripWhiteSpace();
372 if ( !resMgr || sec.isEmpty() )
375 QMap<QString, int> map;
376 QStringList params = resMgr->parameters( sec );
377 for ( QStringList::const_iterator it = params.begin(); it != params.end(); ++it )
379 QString p = QStringList::split( ".", *it, true ).first().stripWhiteSpace();
384 for ( QMap<QString, int>::ConstIterator itr = map.begin(); itr != map.end(); ++itr )
387 if ( !clear && myGeom.contains( itr.key() ) )
388 inf = myGeom[itr.key()];
391 inf.vis = true; inf.newLine = false; inf.place = DockTop;
392 inf.index = 0; inf.offset = 0;
393 inf.x = 0; inf.y = 0; inf.w = 0; inf.h = 0;
394 inf.fixW = -1; inf.fixH = -1;
396 if ( loadGeometry( resMgr, sec, itr.key(), inf ) )
397 myGeom.insert( itr.key(), inf );
402 Name: saveGeometry [public]
403 Desc: Store the dock windows geometry information into the specified resource manager section.
406 void QtxDockAction::saveGeometry( QtxResourceMgr* resMgr, const QString& section, const bool clear ) const
408 QString sec = section.stripWhiteSpace();
409 if ( !resMgr || sec.isEmpty() )
413 resMgr->removeSection( sec );
415 for ( GeomMap::ConstIterator it = myGeom.begin(); it != myGeom.end(); ++it )
416 saveGeometry( resMgr, sec, it.key(), it.data() );
420 Name: onAboutToShow [private slots]
421 Desc: Prepare sub popup with dock windows list when parent popup is shown.
424 void QtxDockAction::onAboutToShow()
426 const QObject* obj = sender();
427 if ( obj && obj->inherits( "QPopupMenu" ) )
429 QPopupMenu* pm = (QPopupMenu*)obj;
431 pm->setItemEnabled( findId( pm, myMenu[pm].dock ), isEnabled() && myMenu[pm].dock && myMenu[pm].dock->count() );
432 pm->setItemEnabled( findId( pm, myMenu[pm].tool ), isEnabled() && myMenu[pm].tool && myMenu[pm].tool->count() );
437 Name: onToggled [private slots]
438 Desc: Show or hide dock window when user toggled window item in popup.
441 void QtxDockAction::onToggled( bool on )
443 QDockWindow* dw = dockWindow( (QAction*)sender() );
445 on ? dw->show() : dw->hide();
449 Name: onPopupDestroyed [private slots]
450 Desc: Remove destroyed popup from data structures.
453 void QtxDockAction::onPopupDestroyed( QObject* obj )
455 myMenu.remove( (QPopupMenu*)obj );
459 Name: onWindowDestroyed [private slots]
460 Desc: Remove information about destroyed dock window.
463 void QtxDockAction::onWindowDestroyed( QObject* obj )
465 QDockWindow* dw = (QDockWindow*)obj;
466 if ( !myInfo.contains( dw ) )
474 Name: onVisibilityChanged [private slots]
475 Desc: Toggle corresponded action when visibility state of dock window changed.
478 void QtxDockAction::onVisibilityChanged( bool on )
480 const QObject* obj = sender();
481 if ( !obj || !obj->inherits( "QDockWindow" ) )
484 QDockWindow* dw = (QDockWindow*)obj;
486 QAction* a = action( dw );
487 if ( a && a->isOn() != on )
489 bool block = a->signalsBlocked();
490 a->blockSignals( true );
492 a->blockSignals( block );
499 Name: onDockWindowPositionChanged [private slots]
500 Desc: Update dock window place information
503 void QtxDockAction::onDockWindowPositionChanged( QDockWindow* dw )
509 Name: event [protected]
510 Desc: Check consistency the popup content and internal datas.
511 Synchronize internal data structures with popup content.
514 bool QtxDockAction::event( QEvent* e )
516 if ( e->type() == AutoAdd )
518 QCustomEvent* ce = (QCustomEvent*)e;
519 QDockWindow* dw = (QDockWindow*)ce->data();
520 if ( !myInfo.contains( dw ) )
522 autoAddDockWindow( dw );
523 autoLoadPlaceInfo( dw );
527 return QtxAction::event( e );
531 Name: checkPopup [private]
532 Desc: Check consistency the popup content and internal datas.
533 Synchronize internal data structures with popup content.
536 void QtxDockAction::checkPopup( QPopupMenu* pm )
538 if ( !myMenu.contains( pm ) )
541 int id = findId( pm, myMenu[pm].dock );
544 delete myMenu[pm].dock;
547 id = findId( pm, myMenu[pm].tool );
550 delete myMenu[pm].tool;
554 if ( !myMenu[pm].dock )
556 delete myMenu[pm].tool;
558 disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
563 Name: fillPopup [private]
564 Desc: Clear the popup and the add to it required actions.
567 void QtxDockAction::fillPopup( QPopupMenu* pm ) const
569 if ( !pm || !mainWindow() )
572 if ( !myMenu.contains( pm ) )
575 QPopupMenu* dockMenu = myMenu[pm].dock;
576 QPopupMenu* toolMenu = myMenu[pm].tool;
578 for ( InfoMap::ConstIterator mit = myInfo.begin(); mit != myInfo.end(); ++mit )
580 mit.data().a->removeFrom( dockMenu );
581 mit.data().a->removeFrom( toolMenu );
590 QPtrList<QDockWindow> dockList;
591 dockWindows( dockList, mainWindow() );
593 if ( dockList.isEmpty() )
596 QPtrList<QAction> toolBars, windows;
597 for ( QPtrListIterator<QDockWindow> it( dockList ); it.current(); ++it )
599 if ( !myInfo.contains( it.current() ) )
601 QtxDockAction* that = (QtxDockAction*)this;
602 that->autoAddDockWindow( it.current() );
605 if ( !mainWindow()->appropriate( it.current() ) ||
606 it.current()->caption().isEmpty() || !action( it.current() ) )
609 if ( isToolBar( it.current() ) )
610 toolBars.append( action( it.current() ) );
612 windows.append( action( it.current() ) );
615 for ( QPtrListIterator<QAction> wit( windows ); wit.current(); ++wit )
616 wit.current()->addTo( dockMenu );
618 dockMenu->insertSeparator();
620 for ( QPtrListIterator<QAction> tit( toolBars ); tit.current(); ++tit )
621 tit.current()->addTo( toolMenu ? toolMenu : dockMenu );
623 Qtx::simplifySeparators( dockMenu );
624 Qtx::simplifySeparators( toolMenu );
628 Name: isToolBar [private]
629 Desc: Returns 'true' if dock window is a toolbar.
632 bool QtxDockAction::isToolBar( QDockWindow* dw ) const
634 return dw && dw->inherits( "QToolBar" );
638 Name: findId [private]
639 Desc: Returns identificator of popup item which contains sub popup 'pm' in the popup 'cont'.
642 int QtxDockAction::findId( QPopupMenu* cont, QPopupMenu* pm ) const
649 for ( int i = 0; i < (int)cont->count() && id == -1; i++ )
652 QMenuItem* item = cont->findItem( cont->idAt( i ), &md );
653 if ( item && md == cont && item->popup() == pm )
660 Name: dockWindows [private]
661 Desc: Returns all dock windows of the main window.
664 void QtxDockAction::dockWindows( QPtrList<QDockWindow>& lst, QMainWindow* main ) const
668 QMainWindow* mw = main ? main : mainWindow();
672 lst = mw->dockWindows();
676 Name: updateInfo [private]
677 Desc: Updates icon and caption info of dock window in the corresponded action.
680 void QtxDockAction::updateInfo( QDockWindow* dw )
682 QAction* a = action( dw );
686 a->setText( dw->caption() );
687 a->setMenuText( dw->caption() );
689 if ( isToolBar( dw ) )
690 a->setStatusTip( tr( "Toggles toolbar \"%1\" on/off" ).arg( dw->caption() ) );
692 a->setStatusTip( tr( "Toggles window \"%1\" on/off" ).arg( dw->caption() ) );
694 const QPixmap* icon = dw->icon();
696 a->setIconSet( *icon );
700 Name: savePlaceInfo [private]
701 Desc: Store the place and geometry information from specified dock window.
704 void QtxDockAction::savePlaceInfo( QDockWindow* dw )
706 if ( !myInfo.contains( dw ) )
709 if ( !myGeom.contains( myInfo[dw].name ) )
710 myGeom.insert( myInfo[dw].name, GeomInfo() );
712 GeomInfo& inf = myGeom[myInfo[dw].name];
715 inf.vis = dw->isVisibleTo( mainWindow() );
716 mainWindow()->getLocation( dw, dock, inf.index, inf.newLine, inf.offset );
722 inf.h = dw->height();
723 inf.fixW = dw->fixedExtent().width();
724 inf.fixH = dw->fixedExtent().height();
728 Name: loadPlaceInfo [private]
729 Desc: Retrieve the stored place and geometry information to specified dock window.
732 void QtxDockAction::loadPlaceInfo( QDockWindow* dw ) const
734 if ( !myInfo.contains( dw ) )
737 QString winName = myInfo[dw].name;
738 if ( winName.isEmpty() || !myGeom.contains( winName ) )
741 GeomInfo inf = myGeom[myInfo[dw].name];
743 mainWindow()->moveDockWindow( dw, (Qt::Dock)inf.place, inf.newLine, inf.index, inf.offset );
744 dw->setGeometry( inf.x, inf.y, inf.w, inf.h );
746 dw->setFixedExtentWidth( inf.fixW );
747 dw->setFixedExtentHeight( inf.fixH );
749 QtxDockAction* that = (QtxDockAction*)this;
750 that->myGeom.insert( myInfo[dw].name, inf );
754 Name: action [private]
755 Desc: Returns action for the given dock window.
758 QAction* QtxDockAction::action( QDockWindow* dw ) const
761 if ( myInfo.contains( dw ) )
767 Name: dockWindow [private]
768 Desc: Returns dock window for the given action.
771 QDockWindow* QtxDockAction::dockWindow( const QAction* a ) const
774 for ( InfoMap::ConstIterator it = myInfo.begin(); it != myInfo.end() && !dw; ++it )
776 if ( it.data().a == a )
783 Name: initialize [private]
784 Desc: Initialisation of the object. Sets the event filters and add existing dock windows.
787 void QtxDockAction::initialize( QMainWindow* mw )
792 QPtrList<QDockWindow> lst;
793 dockWindows( lst, mw );
795 for ( QPtrListIterator<QDockWindow> it( lst ); it.current(); ++it )
796 autoAddDockWindow( it.current() );
799 mw->topDock()->installEventFilter( this );
800 if ( mw->leftDock() )
801 mw->leftDock()->installEventFilter( this );
802 if ( mw->rightDock() )
803 mw->rightDock()->installEventFilter( this );
804 if ( mw->bottomDock() )
805 mw->bottomDock()->installEventFilter( this );
807 connect( mw, SIGNAL( dockWindowPositionChanged( QDockWindow* ) ),
808 this, SLOT( onDockWindowPositionChanged( QDockWindow* ) ) );
812 Name: windowName [private]
813 Desc: Generate the dock window name.
816 QString QtxDockAction::windowName( QDockWindow* dw ) const
822 name = dw->name( "" );
823 if ( name.isEmpty() )
824 name = dw->caption();
831 Name: autoAddDockWindow [private]
832 Desc: Add the dock window if auto add property is setted.
835 bool QtxDockAction::autoAddDockWindow( QDockWindow* dw )
840 return addDockWindow( dw );
844 Name: autoLoadPlaceInfo [private]
845 Desc: Retieve the dock window place geometry if auto place property is setted.
848 void QtxDockAction::autoLoadPlaceInfo( QDockWindow* dw )
855 Name: splitMenuText [private]
859 void QtxDockAction::splitMenuText( QString& dock, QString& tool ) const
861 dock = tool = menuText();
865 QStringList lst = splitText( menuText(), "|" );
866 if ( lst.count() < 2 )
867 lst = splitText( menuText(), "and" );
874 Name: splitText [private]
878 QStringList QtxDockAction::splitText( const QString& str, const QString& sep ) const
882 int idx = str.lower().find( sep.lower() );
885 res.append( str.mid( 0, idx ).stripWhiteSpace() );
886 res.append( str.mid( idx + sep.length() ).stripWhiteSpace() );
893 Name: dockPlace [private]
897 int QtxDockAction::dockPlace( const QString& dockName ) const
899 static QMap<QString, int> dockNameMap;
900 if ( dockNameMap.isEmpty() )
902 dockNameMap["top"] = DockTop;
903 dockNameMap["bottom"] = DockBottom;
904 dockNameMap["left"] = DockLeft;
905 dockNameMap["right"] = DockRight;
906 dockNameMap["tornoff"] = DockTornOff;
907 dockNameMap["torn_off"] = DockTornOff;
908 dockNameMap["outside"] = DockTornOff;
909 dockNameMap["undock"] = DockTornOff;
910 dockNameMap["minimized"] = DockMinimized;
911 dockNameMap["unmanaged"] = DockUnmanaged;
915 if ( dockNameMap.contains( dockName.lower() ) )
916 res = dockNameMap[dockName.lower()];
920 bool QtxDockAction::loadGeometry( QtxResourceMgr* resMgr, const QString& sec,
921 const QString& name, GeomInfo& inf ) const
923 if ( !resMgr || sec.isEmpty() || name.isEmpty() )
926 QString tmpl = QString( "%1.%2" ).arg( name );
928 inf.vis = resMgr->booleanValue( sec, tmpl.arg( "visible" ), inf.vis );
929 inf.newLine = resMgr->booleanValue( sec, tmpl.arg( "new_line" ), inf.newLine );
931 inf.index = resMgr->integerValue( sec, tmpl.arg( "index" ), inf.index );
932 inf.offset = resMgr->integerValue( sec, tmpl.arg( "offset" ), inf.offset );
934 inf.x = resMgr->integerValue( sec, tmpl.arg( "x" ), inf.x );
935 inf.y = resMgr->integerValue( sec, tmpl.arg( "y" ), inf.y );
936 inf.w = resMgr->integerValue( sec, tmpl.arg( "width" ), inf.w );
937 inf.h = resMgr->integerValue( sec, tmpl.arg( "height" ), inf.h );
939 inf.fixW = resMgr->integerValue( sec, tmpl.arg( "fixed_width" ), inf.fixW );
940 inf.fixH = resMgr->integerValue( sec, tmpl.arg( "fixed_height" ), inf.fixH );
943 if ( !resMgr->value( sec, tmpl.arg( "place" ), place ) )
946 if ( resMgr->value( sec, tmpl.arg( "place" ), placeStr ) )
947 place = dockPlace( placeStr );
950 if ( place >= DockUnmanaged && place <= DockMinimized )
956 bool QtxDockAction::saveGeometry( QtxResourceMgr* resMgr, const QString& sec,
957 const QString& name, const GeomInfo& inf ) const
959 if ( !resMgr || sec.isEmpty() || name.isEmpty() )
962 QString tmpl = QString( "%1.%2" ).arg( name );
964 resMgr->setValue( sec, tmpl.arg( "visible" ), inf.vis );
965 resMgr->setValue( sec, tmpl.arg( "new_line" ), inf.newLine );
966 resMgr->setValue( sec, tmpl.arg( "index" ), inf.index );
967 resMgr->setValue( sec, tmpl.arg( "offset" ), inf.offset );
968 resMgr->setValue( sec, tmpl.arg( "x" ), inf.x );
969 resMgr->setValue( sec, tmpl.arg( "y" ), inf.y );
970 resMgr->setValue( sec, tmpl.arg( "width" ), inf.w );
971 resMgr->setValue( sec, tmpl.arg( "height" ), inf.h );
972 resMgr->setValue( sec, tmpl.arg( "fixed_width" ), inf.fixW );
973 resMgr->setValue( sec, tmpl.arg( "fixed_height" ), inf.fixH );
974 resMgr->setValue( sec, tmpl.arg( "place" ), inf.place );