diff options
Diffstat (limited to 'tqtinterface/qt4/tools/designer/uic/uic.cpp')
-rw-r--r-- | tqtinterface/qt4/tools/designer/uic/uic.cpp | 1129 |
1 files changed, 0 insertions, 1129 deletions
diff --git a/tqtinterface/qt4/tools/designer/uic/uic.cpp b/tqtinterface/qt4/tools/designer/uic/uic.cpp deleted file mode 100644 index ea1bc14..0000000 --- a/tqtinterface/qt4/tools/designer/uic/uic.cpp +++ /dev/null @@ -1,1129 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at sales@trolltech.com. -** -** Licensees holding valid TQt Commercial licenses may use this file in -** accordance with the TQt Commercial License Agreement provided with -** the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "uic.h" -#include "parser.h" -#include "widgetdatabase.h" -#include "domtool.h" -#include <tqfile.h> -#include <tqstringlist.h> -#include <tqdatetime.h> -#define NO_STATIC_COLORS -#include <globaldefs.h> -#include <tqregexp.h> -#include <stdio.h> -#include <stdlib.h> - -bool Uic::isMainWindow = FALSE; - -TQString Uic::getComment( const TQDomNode& n ) -{ - TQDomNode child = n.firstChild(); - while ( !child.isNull() ) { - if ( child.toElement().tagName() == "comment" ) - return child.toElement().firstChild().toText().data(); - child = child.nextSibling(); - } - return TQString(); -} - -TQString Uic::mkBool( bool b ) -{ - return b? "TRUE" : "FALSE"; -} - -TQString Uic::mkBool( const TQString& s ) -{ - return mkBool( s == "true" || s == "1" ); -} - -bool Uic::toBool( const TQString& s ) -{ - return s == "true" || s.toInt() != 0; -} - -TQString Uic::fixString( const TQString &str, bool encode ) -{ - TQString s; - if ( !encode ) { - s = str; - s.replace( "\\", "\\\\" ); - s.replace( "\"", "\\\"" ); - s.replace( "\r", "" ); - s.replace( "\n", "\\n\"\n\"" ); - } else { - TQCString utf8 = str.utf8(); - const int l = utf8.length(); - - for ( int i = 0; i < l; ++i ) { - uchar c = (uchar)utf8[i]; - if (c != 0x0d) // skip \r - s += "\\x" + TQString::number(c, 16); - - if (i && (i % 20) == 0) - s += "\"\n \""; - } - } - - return "\"" + s + "\""; -} - -TQString Uic::trcall( const TQString& sourceText, const TQString& comment ) -{ - if ( sourceText.isEmpty() && comment.isEmpty() ) - return "TQString()"; - - TQString t = trmacro; - bool encode = FALSE; - if ( t.isNull() ) { - t = "tqtr"; - for ( int i = 0; i < (int) sourceText.length(); i++ ) { - if ( sourceText[i].tqunicode() >= 0x80 ) { - t = "trUtf8"; - encode = TRUE; - break; - } - } - } - - if ( comment.isEmpty() ) { - return t + "( " + fixString( sourceText, encode ) + " )"; - } else { - return t + "( " + fixString( sourceText, encode ) + ", " + - fixString( comment, encode ) + " )"; - } -} - -TQString Uic::mkStdSet( const TQString& prop ) -{ - return TQString( "set" ) + prop[0].upper() + prop.mid(1); -} - - - -/*! - \class Uic uic.h - \brief User Interface Compiler - - The class Uic encapsulates the user interface compiler (uic). - */ -Uic::Uic( const TQString &fn, const char *outputFn, TQTextStream &outStream, - TQDomDocument doc, bool decl, bool subcl, const TQString &trm, - const TQString& subClass, bool omitForwardDecls ) - : out( outStream ), trout( &languageChangeBody ), - outputFileName( outputFn ), trmacro( trm ), nofwd( omitForwardDecls ) -{ - fileName = fn; - writeFunctImpl = TRUE; - defMargin = BOXLAYOUT_DEFAULT_MARGIN; - defSpacing = BOXLAYOUT_DEFAULT_SPACING; - externPixmaps = FALSE; - indent = " "; // default indent - - item_used = cg_used = pal_used = 0; - - layouts << "hbox" << "vbox" << "grid"; - tags = layouts; - tags << "widget"; - - pixmapLoaderFunction = getPixmapLoaderFunction( doc.firstChild().toElement() ); - nameOfClass = getFormClassName( doc.firstChild().toElement() ); - - uiFileVersion = doc.firstChild().toElement().attribute("version"); - stdsetdef = toBool( doc.firstChild().toElement().attribute("stdsetdef") ); - - if ( doc.firstChild().isNull() || doc.firstChild().firstChild().isNull() ) - return; - TQDomElement e = doc.firstChild().firstChild().toElement(); - TQDomElement widget; - while ( !e.isNull() ) { - if ( e.tagName() == "widget" ) { - widget = e; - } else if ( e.tagName() == "pixmapinproject" ) { - externPixmaps = TRUE; - } else if ( e.tagName() == "layoutdefaults" ) { - defSpacing = e.attribute( "spacing", defSpacing.toString() ); - defMargin = e.attribute( "margin", defMargin.toString() ); - } else if ( e.tagName() == "layoutfunctions" ) { - defSpacing = e.attribute( "spacing", defSpacing.toString() ); - bool ok; - defSpacing.toInt( &ok ); - if ( !ok ) { - TQString buf = defSpacing.toString(); - defSpacing = TQT_TQSTRING_OBJECT(buf.append( "()" )); - } - defMargin = e.attribute( "margin", defMargin.toString() ); - defMargin.toInt( &ok ); - if ( !ok ) { - TQString buf = defMargin.toString(); - defMargin = TQT_TQSTRING_OBJECT(buf.append( "()" )); - } - } - e = e.nextSibling().toElement(); - } - e = widget; - - if ( nameOfClass.isEmpty() ) - nameOfClass = getObjectName( e ); - namespaces = TQStringList::split( "::", nameOfClass ); - bareNameOfClass = namespaces.last(); - namespaces.remove( namespaces.fromLast() ); - - if ( subcl ) { - if ( decl ) - createSubDecl( e, subClass ); - else - createSubImpl( e, subClass ); - } else { - if ( decl ) - createFormDecl( e ); - else - createFormImpl( e ); - } - -} - -/*! Extracts a pixmap loader function from \a e - */ -TQString Uic::getPixmapLoaderFunction( const TQDomElement& e ) -{ - TQDomElement n; - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "pixmapfunction" ) - return n.firstChild().toText().data(); - } - return TQString(); -} - - -/*! Extracts the forms class name from \a e - */ -TQString Uic::getFormClassName( const TQDomElement& e ) -{ - TQDomElement n; - TQString cn; - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "class" ) { - TQString s = n.firstChild().toText().data(); - int i; - while ( ( i = s.find(' ' )) != -1 ) - s[i] = '_'; - cn = s; - } - } - return cn; -} - -/*! Extracts a class name from \a e. - */ -TQString Uic::getClassName( const TQDomElement& e ) -{ - TQString s = e.attribute( "class" ); - if ( s.isEmpty() && e.tagName() == "toolbar" ) - s = "TQToolBar"; - else if ( s.isEmpty() && e.tagName() == "menubar" ) - s = "TQMenuBar"; - return s; -} - -/*! Returns TRUE if database framework code is generated, else FALSE. -*/ - -bool Uic::isFrameworkCodeGenerated( const TQDomElement& e ) -{ - TQDomElement n = getObjectProperty( e, "frameworkCode" ); - if ( n.attribute("name") == "frameworkCode" && - !DomTool::elementToVariant( n.firstChild().toElement(), TQVariant( TRUE, 0 ) ).toBool() ) - return FALSE; - return TRUE; -} - -/*! Extracts an object name from \a e. It's stored in the 'name' - property. - */ -TQString Uic::getObjectName( const TQDomElement& e ) -{ - TQDomElement n = getObjectProperty( e, "name" ); - if ( n.firstChild().toElement().tagName() == "cstring" ) - return n.firstChild().toElement().firstChild().toText().data(); - return TQString(); -} - -/*! Extracts an tqlayout name from \a e. It's stored in the 'name' - property of the preceeding sibling (the first child of a TQLayoutWidget). - */ -TQString Uic::getLayoutName( const TQDomElement& e ) -{ - TQDomElement p = e.parentNode().toElement(); - TQString name; - - if ( getClassName(p) != "TQLayoutWidget" ) - name = "Layout"; - - TQDomElement n = getObjectProperty( p, "name" ); - if ( n.firstChild().toElement().tagName() == "cstring" ) { - name.prepend( n.firstChild().toElement().firstChild().toText().data() ); - return TQStringList::split( "::", name ).last(); - } - return e.tagName(); -} - - -TQString Uic::getDatabaseInfo( const TQDomElement& e, const TQString& tag ) -{ - TQDomElement n; - TQDomElement n1; - int child = 0; - // database info is a stringlist stored in this order - if ( tag == "connection" ) - child = 0; - else if ( tag == "table" ) - child = 1; - else if ( tag == "field" ) - child = 2; - else - return TQString(); - n = getObjectProperty( e, "database" ); - if ( n.firstChild().toElement().tagName() == "stringlist" ) { - // find correct stringlist entry - TQDomElement n1 = n.firstChild().firstChild().toElement(); - for ( int i = 0; i < child && !n1.isNull(); ++i ) - n1 = n1.nextSibling().toElement(); - if ( n1.isNull() ) - return TQString(); - return n1.firstChild().toText().data(); - } - return TQString(); -} - - -void Uic::registerLayouts( const TQDomElement &e ) -{ - if ( layouts.contains(e.tagName())) { - createObjectDecl(e); - TQString t = e.tagName(); - if ( t == "vbox" || t == "hbox" || t == "grid" ) - createSpacerDecl( e ); - } - - TQDomNodeList nl = e.childNodes(); - for ( int i = 0; i < (int) nl.length(); ++i ) - registerLayouts( nl.item(i).toElement() ); -} - - -/*! - Returns include file for class \a className or a null string. - */ -TQString Uic::getInclude( const TQString& className ) -{ - int wid = WidgetDatabase::idFromClassName( className ); - if ( wid != -1 ) - return WidgetDatabase::includeFile( wid ); - return TQString(); -} - - -void Uic::createActionDecl( const TQDomElement& e ) -{ - TQString objClass = e.tagName() == "action" ? "TQAction" : "TQActionGroup"; - TQString objName = getObjectName( e ); - if ( objName.isEmpty() ) - return; - out << " " << objClass << "* " << objName << ";" << endl; - if ( e.tagName() == "actiongroup" ) { - for ( TQDomElement n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "action" || n.tagName() == "actiongroup" ) - createActionDecl( n ); - } - } -} - -void Uic::createToolbarDecl( const TQDomElement &e ) -{ - if ( e.tagName() == "toolbar" ) - out << " " << "TQToolBar *" << getObjectName( e ) << ";" << endl; -} - -void Uic::createMenuBarDecl( const TQDomElement &e ) -{ - if ( e.tagName() == "item" ) { - out << " " << "TQPopupMenu *" << e.attribute( "name" ) << ";" << endl; - createPopupMenuDecl( e ); - } -} - -void Uic::createPopupMenuDecl( const TQDomElement &e ) -{ - for ( TQDomElement n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "action" || n.tagName() == "actiongroup" ) { - TQDomElement n2 = n.nextSibling().toElement(); - if ( n2.tagName() == "item" ) { // the action has a sub menu - out << " " << "TQPopupMenu *" << n2.attribute( "name" ) << ";" << endl; - createPopupMenuDecl( n2 ); - n = n2; - } - } - } -} - -void Uic::createActionImpl( const TQDomElement &n, const TQString &parent ) -{ - for ( TQDomElement ae = n; !ae.isNull(); ae = ae.nextSibling().toElement() ) { - TQString objName = registerObject( getObjectName( ae ) ); - if ( ae.tagName() == "action" ) - out << indent << objName << " = new TQAction( " << parent << ", \"" << objName << "\" );" << endl; - else if ( ae.tagName() == "actiongroup" ) - out << indent << objName << " = new TQActionGroup( " << parent << ", \"" << objName << "\" );" << endl; - else - continue; - bool subActionsDone = FALSE; - bool hasMenuText = FALSE; - TQString actionText; - for ( TQDomElement n2 = ae.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { - if ( n2.tagName() == "property" ) { - bool stdset = stdsetdef; - if ( n2.hasAttribute( "stdset" ) ) - stdset = toBool( n2.attribute( "stdset" ) ); - TQString prop = n2.attribute("name"); - if ( prop == "name" ) - continue; - TQString value = setObjectProperty( "TQAction", objName, prop, n2.firstChild().toElement(), stdset ); - if ( value.isEmpty() ) - continue; - - TQString call = objName + "->"; - if ( stdset ) { - call += mkStdSet( prop ) + "( "; - } else { - call += "setProperty( \"" + prop + "\", "; - } - call += value + " );"; - - if (prop == "menuText") - hasMenuText = TRUE; - else if (prop == "text") - actionText = value; - - if ( n2.firstChild().toElement().tagName() == "string" ) { - trout << indent << call << endl; - } else { - out << indent << call << endl; - } - } else if ( !subActionsDone && ( n2.tagName() == "actiongroup" || n2.tagName() == "action" ) ) { - createActionImpl( n2, objName ); - subActionsDone = TRUE; - } - } - // workaround for loading pre-3.3 files expecting bogus TQAction behavior - if (!hasMenuText && !actionText.isEmpty() && uiFileVersion < "3.3") - trout << indent << objName << "->setMenuText(" << actionText << ");" << endl; - } -} - -TQString get_dock( const TQString &d ) -{ - if ( d == "0" ) - return "TQt::DockUnmanaged"; - if ( d == "1" ) - return "TQt::DockTornOff"; - if ( d == "2" ) - return "TQt::DockTop"; - if ( d == "3" ) - return "TQt::DockBottom"; - if ( d == "4" ) - return "TQt::DockRight"; - if ( d == "5" ) - return "TQt::DockLeft"; - if ( d == "6" ) - return "TQt::DockMinimized"; - return ""; -} - -void Uic::createToolbarImpl( const TQDomElement &n, const TQString &parentClass, const TQString &parent ) -{ - TQDomNodeList nl = n.elementsByTagName( "toolbar" ); - for ( int i = 0; i < (int) nl.length(); i++ ) { - TQDomElement ae = nl.item( i ).toElement(); - TQString dock = get_dock( ae.attribute( "dock" ) ); - TQString objName = getObjectName( ae ); - out << indent << objName << " = new TQToolBar( TQString(\"\"), this, " << dock << " ); " << endl; - createObjectImpl( ae, parentClass, parent ); - for ( TQDomElement n2 = ae.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { - if ( n2.tagName() == "action" ) { - out << indent << n2.attribute( "name" ) << "->addTo( " << objName << " );" << endl; - } else if ( n2.tagName() == "separator" ) { - out << indent << objName << "->addSeparator();" << endl; - } else if ( n2.tagName() == "widget" ) { - if ( n2.attribute( "class" ) != "Spacer" ) { - createObjectImpl( n2, "TQToolBar", objName ); - } else { - TQString child = createSpacerImpl( n2, parentClass, parent, objName ); - out << indent << "TQApplication::sendPostedEvents( " << objName - << ", TQEvent::ChildInserted );" << endl; - out << indent << objName << "->boxLayout()->addItem( " << child << " );" << endl; - } - } - } - } -} - -void Uic::createMenuBarImpl( const TQDomElement &n, const TQString &parentClass, const TQString &parent ) -{ - TQString objName = getObjectName( n ); - out << indent << objName << " = new TQMenuBar( this, \"" << objName << "\" );" << endl; - createObjectImpl( n, parentClass, parent ); - int i = 0; - TQDomElement c = n.firstChild().toElement(); - while ( !c.isNull() ) { - if ( c.tagName() == "item" ) { - TQString itemName = c.attribute( "name" ); - out << endl; - out << indent << itemName << " = new TQPopupMenu( this );" << endl; - createPopupMenuImpl( c, parentClass, itemName ); - out << indent << objName << "->insertItem( TQString(\"\"), " << itemName << ", " << i << " );" << endl; - TQString findItem(objName + "->findItem(%1)"); - findItem = findItem.arg(i); - trout << indent << "if (" << findItem << ")" << endl; - trout << indent << indent << findItem << "->setText( " << trcall( c.attribute( "text" ) ) << " );" << endl; - } else if ( c.tagName() == "separator" ) { - out << endl; - out << indent << objName << "->insertSeparator( " << i << " );" << endl; - } - c = c.nextSibling().toElement(); - i++; - } -} - -void Uic::createPopupMenuImpl( const TQDomElement &e, const TQString &parentClass, const TQString &parent ) -{ - int i = 0; - for ( TQDomElement n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "action" || n.tagName() == "actiongroup" ) { - TQDomElement n2 = n.nextSibling().toElement(); - if ( n2.tagName() == "item" ) { // the action has a sub menu - TQString itemName = n2.attribute( "name" ); - TQString itemText = n2.attribute( "text" ); - out << indent << itemName << " = new TQPopupMenu( this );" << endl; - out << indent << parent << "->insertItem( " << n.attribute( "name" ) << "->iconSet(), "; - out << trcall( itemText ) << ", " << itemName << " );" << endl; - trout << indent << parent << "->changeItem( " << parent << "->idAt( " << i << " ), "; - trout << trcall( itemText ) << " );" << endl; - createPopupMenuImpl( n2, parentClass, itemName ); - n = n2; - } else { - out << indent << n.attribute( "name" ) << "->addTo( " << parent << " );" << endl; - } - } else if ( n.tagName() == "separator" ) { - out << indent << parent << "->insertSeparator();" << endl; - } - ++i; - } -} - -/*! - Creates implementation of an listbox item tag. -*/ - -TQString Uic::createListBoxItemImpl( const TQDomElement &e, const TQString &parent, - TQString *value ) -{ - TQDomElement n = e.firstChild().toElement(); - TQString txt; - TQString com; - TQString pix; - while ( !n.isNull() ) { - if ( n.tagName() == "property" ) { - TQString attrib = n.attribute( "name" ); - TQVariant v = DomTool::elementToVariant( n.firstChild().toElement(), TQVariant() ); - if ( attrib == "text" ) { - txt = v.toString(); - com = getComment( n ); - } else if ( attrib == "pixmap" ) { - pix = v.toString(); - if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { - pix.prepend( pixmapLoaderFunction + "( " + TQString( externPixmaps ? "\"" : "" ) ); - pix.append( TQString( externPixmaps ? "\"" : "" ) + " )" ); - } - } - } - n = n.nextSibling().toElement(); - } - - if ( value ) - *value = trcall( txt, com ); - - if ( pix.isEmpty() ) { - return parent + "->insertItem( " + trcall( txt, com ) + " );"; - } else { - return parent + "->insertItem( " + pix + ", " + trcall( txt, com ) + " );"; - } -} - -/*! - Creates implementation of an iconview item tag. -*/ - -TQString Uic::createIconViewItemImpl( const TQDomElement &e, const TQString &parent ) -{ - TQDomElement n = e.firstChild().toElement(); - TQString txt; - TQString com; - TQString pix; - while ( !n.isNull() ) { - if ( n.tagName() == "property" ) { - TQString attrib = n.attribute( "name" ); - TQVariant v = DomTool::elementToVariant( n.firstChild().toElement(), TQVariant() ); - if ( attrib == "text" ) { - txt = v.toString(); - com = getComment( n ); - } else if ( attrib == "pixmap" ) { - pix = v.toString(); - if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { - pix.prepend( pixmapLoaderFunction + "( " + TQString( externPixmaps ? "\"" : "" ) ); - pix.append( TQString( externPixmaps ? "\"" : "" ) + " )" ); - } - } - } - n = n.nextSibling().toElement(); - } - - if ( pix.isEmpty() ) - return "(void) new TQIconViewItem( " + parent + ", " + trcall( txt, com ) + " );"; - else - return "(void) new TQIconViewItem( " + parent + ", " + trcall( txt, com ) + ", " + pix + " );"; -} - -/*! - Creates implementation of an listview item tag. -*/ - -TQString Uic::createListViewItemImpl( const TQDomElement &e, const TQString &parent, - const TQString &parentItem ) -{ - TQString s; - - TQDomElement n = e.firstChild().toElement(); - - bool hasChildren = e.elementsByTagName( "item" ).count() > 0; - TQString item; - - if ( hasChildren ) { - item = registerObject( "item" ); - s = indent + "TQListViewItem * " + item + " = "; - } else { - item = "item"; - if ( item_used ) - s = indent + item + " = "; - else - s = indent + "TQListViewItem * " + item + " = "; - item_used = TRUE; - } - - if ( !parentItem.isEmpty() ) - s += "new TQListViewItem( " + parentItem + ", " + lastItem + " );\n"; - else - s += "new TQListViewItem( " + parent + ", " + lastItem + " );\n"; - - TQStringList texts; - TQStringList pixmaps; - while ( !n.isNull() ) { - if ( n.tagName() == "property" ) { - TQString attrib = n.attribute("name"); - TQVariant v = DomTool::elementToVariant( n.firstChild().toElement(), TQVariant() ); - if ( attrib == "text" ) - texts << v.toString(); - else if ( attrib == "pixmap" ) { - TQString pix = v.toString(); - if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { - pix.prepend( pixmapLoaderFunction + "( " + TQString( externPixmaps ? "\"" : "" ) ); - pix.append( TQString( externPixmaps ? "\"" : "" ) + " )" ); - } - pixmaps << pix; - } - } else if ( n.tagName() == "item" ) { - s += indent + item + "->setOpen( TRUE );\n"; - s += createListViewItemImpl( n, parent, item ); - } - n = n.nextSibling().toElement(); - } - - for ( int i = 0; i < (int)texts.count(); ++i ) { - if ( !texts[ i ].isEmpty() ) - s += indent + item + "->setText( " + TQString::number( i ) + ", " + trcall( texts[ i ] ) + " );\n"; - if ( !pixmaps[ i ].isEmpty() ) - s += indent + item + "->setPixmap( " + TQString::number( i ) + ", " + pixmaps[ i ] + " );\n"; - } - - lastItem = item; - return s; -} - -/*! - Creates implementation of an listview column tag. -*/ - -TQString Uic::createListViewColumnImpl( const TQDomElement &e, const TQString &parent, - TQString *value ) -{ - TQDomElement n = e.firstChild().toElement(); - TQString txt; - TQString com; - TQString pix; - bool clickable = FALSE, resizable = FALSE; - while ( !n.isNull() ) { - if ( n.tagName() == "property" ) { - TQString attrib = n.attribute("name"); - TQVariant v = DomTool::elementToVariant( n.firstChild().toElement(), TQVariant() ); - if ( attrib == "text" ) { - txt = v.toString(); - com = getComment( n ); - } else if ( attrib == "pixmap" ) { - pix = v.toString(); - if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { - pix.prepend( pixmapLoaderFunction + "( " + TQString( externPixmaps ? "\"" : "" ) ); - pix.append( TQString( externPixmaps ? "\"" : "" ) + " )" ); - } - } else if ( attrib == "clickable" ) - clickable = v.toBool(); - else if ( attrib == "resizable" || attrib == "resizeable" ) - resizable = v.toBool(); - } - n = n.nextSibling().toElement(); - } - - if ( value ) - *value = trcall( txt, com ); - - TQString s; - s = indent + parent + "->addColumn( " + trcall( txt, com ) + " );\n"; - if ( !pix.isEmpty() ) - s += indent + parent + "->header()->setLabel( " + parent + "->header()->count() - 1, " + pix + ", " + trcall( txt, com ) + " );\n"; - if ( !clickable ) - s += indent + parent + "->header()->setClickEnabled( FALSE, " + parent + "->header()->count() - 1 );\n"; - if ( !resizable ) - s += indent + parent + "->header()->setResizeEnabled( FALSE, " + parent + "->header()->count() - 1 );\n"; - return s; -} - -TQString Uic::createTableRowColumnImpl( const TQDomElement &e, const TQString &parent, - TQString *value ) -{ - TQString objClass = getClassName( e.parentNode().toElement() ); - TQDomElement n = e.firstChild().toElement(); - TQString txt; - TQString com; - TQString pix; - TQString field; - bool isRow = e.tagName() == "row"; - while ( !n.isNull() ) { - if ( n.tagName() == "property" ) { - TQString attrib = n.attribute("name"); - TQVariant v = DomTool::elementToVariant( n.firstChild().toElement(), TQVariant() ); - if ( attrib == "text" ) { - txt = v.toString(); - com = getComment( n ); - } else if ( attrib == "pixmap" ) { - pix = v.toString(); - if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { - pix.prepend( pixmapLoaderFunction + "( " + TQString( externPixmaps ? "\"" : "" ) ); - pix.append( TQString( externPixmaps ? "\"" : "" ) + " )" ); - } - } else if ( attrib == "field" ) - field = v.toString(); - } - n = n.nextSibling().toElement(); - } - - if ( value ) - *value = trcall( txt, com ); - - // ### This generated code sucks! We have to set the number of - // rows/cols before and then only do setLabel/() - // ### careful, though, since TQDataTable has an API which makes this code pretty good - - TQString s; - if ( isRow ) { - s = indent + parent + "->setNumRows( " + parent + "->numRows() + 1 );\n"; - if ( pix.isEmpty() ) - s += indent + parent + "->verticalHeader()->setLabel( " + parent + "->numRows() - 1, " - + trcall( txt, com ) + " );\n"; - else - s += indent + parent + "->verticalHeader()->setLabel( " + parent + "->numRows() - 1, " - + pix + ", " + trcall( txt, com ) + " );\n"; - } else { - if ( objClass == "TQTable" ) { - s = indent + parent + "->setNumCols( " + parent + "->numCols() + 1 );\n"; - if ( pix.isEmpty() ) - s += indent + parent + "->horizontalHeader()->setLabel( " + parent + "->numCols() - 1, " - + trcall( txt, com ) + " );\n"; - else - s += indent + parent + "->horizontalHeader()->setLabel( " + parent + "->numCols() - 1, " - + pix + ", " + trcall( txt, com ) + " );\n"; - } else if ( objClass == "TQDataTable" ) { - if ( !txt.isEmpty() && !field.isEmpty() ) { - if ( pix.isEmpty() ) - out << indent << parent << "->addColumn( " << fixString( field ) << ", " << trcall( txt, com ) << " );" << endl; - else - out << indent << parent << "->addColumn( " << fixString( field ) << ", " << trcall( txt, com ) << ", " << pix << " );" << endl; - } - } - } - return s; -} - -/*! - Creates the implementation of a tqlayout tag. Called from createObjectImpl(). - */ -TQString Uic::createLayoutImpl( const TQDomElement &e, const TQString& parentClass, const TQString& parent, const TQString& tqlayout ) -{ - TQDomElement n; - TQString objClass, objName; - objClass = e.tagName(); - - TQString qtqlayout = "TQVBoxLayout"; - if ( objClass == "hbox" ) - qtqlayout = "TQHBoxLayout"; - else if ( objClass == "grid" ) - qtqlayout = "TQGridLayout"; - - bool isGrid = e.tagName() == "grid" ; - objName = registerObject( getLayoutName( e ) ); - layoutObjects += objName; - - TQString margin = DomTool::readProperty( e, "margin", defMargin ).toString(); - TQString spacing = DomTool::readProperty( e, "spacing", defSpacing ).toString(); - TQString resizeMode = DomTool::readProperty( e, "resizeMode", TQString() ).toString(); - - TQString optcells; - if ( isGrid ) - optcells = "1, 1, "; - if ( (parentClass == "TQGroupBox" || parentClass == "TQButtonGroup") && tqlayout.isEmpty() ) { - // special case for group box - out << indent << parent << "->setColumnLayout(0, Qt::Vertical );" << endl; - out << indent << parent << "->tqlayout()->setSpacing( " << spacing << " );" << endl; - out << indent << parent << "->tqlayout()->setMargin( " << margin << " );" << endl; - out << indent << objName << " = new " << qtqlayout << "( " << parent << "->tqlayout() );" << endl; - out << indent << objName << "->tqsetAlignment( TQt::AlignTop );" << endl; - } else { - out << indent << objName << " = new " << qtqlayout << "( "; - if ( tqlayout.isEmpty() ) - out << parent; - else { - out << "0"; - if ( !DomTool::hasProperty( e, "margin" ) ) - margin = "0"; - } - out << ", " << optcells << margin << ", " << spacing << ", \"" << objName << "\"); " << endl; - } - if ( !resizeMode.isEmpty() ) - out << indent << objName << "->setResizeMode( TQLayout::" << resizeMode << " );" << endl; - - if ( !isGrid ) { - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "spacer" ) { - TQString child = createSpacerImpl( n, parentClass, parent, objName ); - out << indent << objName << "->addItem( static_cast<TQLayoutItem*>(static_cast<QLayoutItem*>( " << child << " )) );" << endl; - } else if ( tags.contains( n.tagName() ) ) { - TQString child = createObjectImpl( n, parentClass, parent, objName ); - if ( isLayout( child ) ) - out << indent << objName << "->addLayout( static_cast<TQLayout*>(static_cast<QLayout*>( " << child << " )) );" << endl; - else - out << indent << objName << "->addWidget( " << child << " );" << endl; - } - } - } else { - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - TQDomElement ae = n; - int row = ae.attribute( "row" ).toInt(); - int col = ae.attribute( "column" ).toInt(); - int rowspan = ae.attribute( "rowspan" ).toInt(); - int colspan = ae.attribute( "colspan" ).toInt(); - if ( rowspan < 1 ) - rowspan = 1; - if ( colspan < 1 ) - colspan = 1; - if ( n.tagName() == "spacer" ) { - TQString child = createSpacerImpl( n, parentClass, parent, objName ); - if ( rowspan * colspan != 1 ) - out << indent << objName << "->addMultiCell( " << child << ", " - << row << ", " << ( row + rowspan - 1 ) << ", " << col << ", " << ( col + colspan - 1 ) << " );" << endl; - else - out << indent << objName << "->addItem( " << child << ", " - << row << ", " << col << " );" << endl; - } else if ( tags.contains( n.tagName() ) ) { - TQString child = createObjectImpl( n, parentClass, parent, objName ); - out << endl; - TQString o = "Widget"; - if ( isLayout( child ) ) - o = "Layout"; - if ( rowspan * colspan != 1 ) - out << indent << objName << "->addMultiCell" << o << "( " << child << ", " - << row << ", " << ( row + rowspan - 1 ) << ", " << col << ", " << ( col + colspan - 1 ) << " );" << endl; - else - out << indent << objName << "->add" << o << "( " << child << ", " - << row << ", " << col << " );" << endl; - } - } - } - - return objName; -} - - - -TQString Uic::createSpacerImpl( const TQDomElement &e, const TQString& /*parentClass*/, const TQString& /*parent*/, const TQString& /*tqlayout*/) -{ - TQDomElement n; - TQString objClass, objName; - objClass = e.tagName(); - objName = registerObject( getObjectName( e ) ); - - TQSize size = DomTool::readProperty( e, "tqsizeHint", TQSize( 0, 0 ) ).toSize(); - TQString sizeType = DomTool::readProperty( e, "sizeType", "Expanding" ).toString(); - bool isVspacer = DomTool::readProperty( e, "orientation", "Horizontal" ) == "Vertical"; - - if ( sizeType != "Expanding" && sizeType != "MinimumExpanding" && - DomTool::hasProperty( e, "geometry" ) ) { // compatibility TQt 2.2 - TQRect geom = DomTool::readProperty( e, "geometry", TQRect(0,0,0,0) ).toRect(); - size = geom.size(); - } - - if ( isVspacer ) - out << " " << objName << " = new TQSpacerItem( " - << size.width() << ", " << size.height() - << ", TQSizePolicy::Minimum, TQSizePolicy::" << sizeType << " );" << endl; - else - out << " " << objName << " = new TQSpacerItem( " - << size.width() << ", " << size.height() - << ", TQSizePolicy::" << sizeType << ", TQSizePolicy::Minimum );" << endl; - - return objName; -} - -static const char* const ColorRole[] = { - "Foreground", "Button", "Light", "Midlight", "Dark", "Mid", - "Text", "BrightText", "ButtonText", "Base", "Background", "Shadow", - "Highlight", "HighlightedText", "Link", "LinkVisited", 0 -}; - - -/*! - Creates a colorgroup with name \a name from the color group \a cg - */ -void Uic::createColorGroupImpl( const TQString& name, const TQDomElement& e ) -{ - TQColorGroup cg; - int r = -1; - TQDomElement n = e.firstChild().toElement(); - TQString color; - while ( !n.isNull() ) { - if ( n.tagName() == "color" ) { - r++; - TQColor col = DomTool::readColor( n ); - color = "TQColor( %1, %2, %3)"; - color = color.arg( col.red() ).arg( col.green() ).arg( col.blue() ); - if ( col == white ) - color = "white"; - else if ( col == black ) - color = "black"; - if ( n.nextSibling().toElement().tagName() != "pixmap" ) { - out << indent << name << ".setColor( TQColorGroup::" << ColorRole[r] << ", " << color << " );" << endl; - } - } else if ( n.tagName() == "pixmap" ) { - TQString pixmap = n.firstChild().toText().data(); - if ( !pixmapLoaderFunction.isEmpty() ) { - pixmap.prepend( pixmapLoaderFunction + "( " + TQString( externPixmaps ? "\"" : "" ) ); - pixmap.append( TQString( externPixmaps ? "\"" : "" ) + " )" ); - } - out << indent << name << ".setBrush( TQColorGroup::" - << ColorRole[r] << ", TQBrush( " << color << ", " << pixmap << " ) );" << endl; - } - n = n.nextSibling().toElement(); - } -} - -/*! - Auxiliary function to load a color group. The colorgroup must not - contain pixmaps. - */ -TQColorGroup Uic::loadColorGroup( const TQDomElement &e ) -{ - TQColorGroup cg; - int r = -1; - TQDomElement n = e.firstChild().toElement(); - TQColor col; - while ( !n.isNull() ) { - if ( n.tagName() == "color" ) { - r++; - cg.setColor( (TQColorGroup::ColorRole)r, (col = DomTool::readColor( n ) ) ); - } - n = n.nextSibling().toElement(); - } - return cg; -} - -/*! Returns TRUE if the widget properties specify that it belongs to - the database \a connection and \a table. -*/ - -bool Uic::isWidgetInTable( const TQDomElement& e, const TQString& connection, const TQString& table ) -{ - TQString conn = getDatabaseInfo( e, "connection" ); - TQString tab = getDatabaseInfo( e, "table" ); - if ( conn == connection && tab == table ) - return TRUE; - return FALSE; -} - -/*! - Registers all database connections, cursors and forms. -*/ - -void Uic::registerDatabases( const TQDomElement& e ) -{ - TQDomElement n; - TQDomNodeList nl; - int i; - nl = e.parentNode().toElement().elementsByTagName( "widget" ); - for ( i = 0; i < (int) nl.length(); ++i ) { - n = nl.item(i).toElement(); - TQString conn = getDatabaseInfo( n, "connection" ); - TQString tab = getDatabaseInfo( n, "table" ); - TQString fld = getDatabaseInfo( n, "field" ); - if ( !conn.isNull() ) { - dbConnections += conn; - if ( !tab.isNull() ) { - dbCursors[conn] += tab; - if ( !fld.isNull() ) - dbForms[conn] += tab; - } - } - } -} - -/*! - Registers an object with name \a name. - - The returned name is a valid variable identifier, as similar to \a - name as possible and guaranteed to be unique within the form. - - \sa registeredName(), isObjectRegistered() - */ -TQString Uic::registerObject( const TQString& name ) -{ - if ( objectNames.isEmpty() ) { - // some temporary variables we need - objectNames += "img"; - objectNames += "item"; - objectNames += "cg"; - objectNames += "pal"; - } - - TQString result = name; - int i; - while ( ( i = result.find(' ' )) != -1 ) { - result[i] = '_'; - } - - if ( objectNames.contains( result ) ) { - int i = 2; - while ( objectNames.contains( result + "_" + TQString::number(i) ) ) - i++; - result += "_"; - result += TQString::number(i); - } - objectNames += result; - objectMapper.insert( name, result ); - return result; -} - -/*! - Returns the registered name for the original name \a name - or \a name if \a name wasn't registered. - - \sa registerObject(), isObjectRegistered() - */ -TQString Uic::registeredName( const TQString& name ) -{ - if ( !objectMapper.contains( name ) ) - return name; - return objectMapper[name]; -} - -/*! - Returns whether the object \a name was registered yet or not. - */ -bool Uic::isObjectRegistered( const TQString& name ) -{ - return objectMapper.contains( name ); -} - - -/*! - Unifies the entries in stringlist \a list. Should really be a TQStringList feature. - */ -TQStringList Uic::unique( const TQStringList& list ) -{ - if ( list.isEmpty() ) - return list; - - TQStringList result; - for ( TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it ) { - if ( !result.contains(*it) ) - result += *it; - } - return result; -} - - - -/*! - Creates an instance of class \a objClass, with parent \a parent and name \a objName - */ -TQString Uic::createObjectInstance( const TQString& objClass, const TQString& parent, const TQString& objName ) -{ - - if ( objClass.mid( 2 ) == "ComboBox" ) { - return objClass + "( FALSE, " + parent + ", \"" + objName + "\" )"; - } - return objClass + "( " + parent + ", \"" + objName + "\" )"; -} - -bool Uic::isLayout( const TQString& name ) const -{ - return layoutObjects.contains( name ); -} - - - |