diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2021-09-05 19:56:21 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2021-09-05 19:59:07 +0900 |
commit | 2fb1ae310058ed5e5fea2f3076580ee4449a24f4 (patch) | |
tree | 786aeb5a4db8f85502894850b742af921a377f61 | |
parent | a590f4db3864ff2acf087e81c1a63c3284ea734f (diff) | |
download | tdebindings-2fb1ae310058ed5e5fea2f3076580ee4449a24f4.tar.gz tdebindings-2fb1ae310058ed5e5fea2f3076580ee4449a24f4.zip |
Fixed up previous commit which contained an invalid file my mistake.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit fbc21ffa80968bbdc9ef720ec5faffe2ab8b3d4b)
-rw-r--r-- | ' | 1017 |
1 files changed, 0 insertions, 1017 deletions
@@ -1,1017 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** Copyright (c) 2002 Germain Garand <germain@ebooksfrance.com> -** -** This file is part of Qt Designer. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ -/* -** 06/2002 : Initial release of puic, the PerlQt User Interface Compiler, -** a work derivated from uic (the Qt User Interface Compiler) -** and pyuic (the PyQt User Interface Compiler). -** -** G.Garand -** -**********************************************************************/ - -#include "uic.h" -#include "parser.h" -#include "widgetdatabase.h" -#include "domtool.h" - -#include <tqstringlist.h> -#include <tqregexp.h> -#include <tqfile.h> -#include <tqfileinfo.h> - -#define NO_STATIC_COLORS -#include <globaldefs.h> - -#include <zlib.h> - -static TQByteArray unzipXPM( TQString data, ulong& length ) -{ - const int lengthOffset = 4; - int baSize = data.length() / 2 + lengthOffset; - uchar *ba = new uchar[ baSize ]; - for ( int i = lengthOffset; i < baSize; ++i ) { - char h = data[ 2 * (i-lengthOffset) ].latin1(); - char l = data[ 2 * (i-lengthOffset) + 1 ].latin1(); - uchar r = 0; - if ( h <= '9' ) - r += h - '0'; - else - r += h - 'a' + 10; - r = r << 4; - if ( l <= '9' ) - r += l - '0'; - else - r += l - 'a' + 10; - ba[ i ] = r; - } - // tqUncompress() expects the first 4 bytes to be the expected length of the - // uncompressed data - ba[0] = ( length & 0xff000000 ) >> 24; - ba[1] = ( length & 0x00ff0000 ) >> 16; - ba[2] = ( length & 0x0000ff00 ) >> 8; - ba[3] = ( length & 0x000000ff ); - TQByteArray baunzip = tqUncompress( ba, baSize ); - delete[] ba; - return baunzip; -} - -static TQString imageDataName(TQString name) { - TQString result = name + "_data"; - result.replace("@", "@@"); - return result; -} - -/*! - Creates an implementation ( cpp-file ) for the form given in \a e - - \sa createFormDecl(), createObjectImpl() - */ -void Uic::createFormImpl( const TQDomElement &e ) -{ - TQDomElement n; - TQDomNodeList nl; - int i; - TQString objClass = getClassName( e ); - if ( objClass.isEmpty() ) - return; - TQString objName = getObjectName( e ); - - if (hasKDEwidget) { - out << indent << "require 'Korundum'" << endl << endl; - } else { - out << indent << "require 'Qt'" << endl << endl; - } - - // generate local and local includes required - TQStringList globalIncludes, localIncludes; - TQStringList::Iterator it; - TQStringList sqlClasses; - - TQMap<TQString, CustomInclude> customWidgetIncludes; - TQMap<TQString, TQString> functionImpls; - - // find additional slots - TQStringList extraSlots; - TQStringList extraSlotTypes; - nl = e.parentNode().toElement().elementsByTagName( "slot" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - n = nl.item(i).toElement(); - if ( n.parentNode().toElement().tagName() != "slots" - && n.parentNode().toElement().tagName() != "connections" ) - continue; - if ( n.attribute( "language", "C++" ) != "C++" ) - continue; - TQString slotName = n.firstChild().toText().data().stripWhiteSpace(); - if ( slotName.endsWith( ";" ) ) - slotName = slotName.left( slotName.length() - 1 ); - - extraSlots += Parser::cleanArgs(slotName); - extraSlotTypes += n.attribute( "returnType", "void" ); - } - - // find signals - TQStringList extraSignals; - nl = e.parentNode().toElement().elementsByTagName( "signal" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - n = nl.item(i).toElement(); - if ( n.parentNode().toElement().tagName() != "signals" - && n.parentNode().toElement().tagName() != "connections" ) - continue; - if ( n.attribute( "language", "C++" ) != "C++" ) - continue; - TQString sigName = n.firstChild().toText().data().stripWhiteSpace(); - if ( sigName.endsWith( ";" ) ) - sigName = sigName.left( sigName.length() - 1 ); - extraSignals += sigName; - } - - //find additional functions - TQStringList extraFunctions; - for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "functions" ) { // compatibility - for ( TQDomElement n2 = n.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { - if ( n2.tagName() == "function" ) { - TQString fname; - if( !n2.attribute("name").isNull() ) - { - fname = n2.attribute( "name" ); - fname = Parser::cleanArgs( fname ); - functionImpls.insert( fname, n2.firstChild().toText().data() ); - } - else - { - fname = n2.text(); - fname = Parser::cleanArgs( fname ); - } - extraFunctions += fname; - } - } - } else if ( n.tagName() == "customwidgets" ) { - TQDomElement n2 = n.firstChild().toElement(); - while ( !n2.isNull() ) { - if ( n2.tagName() == "customwidget" ) { - TQDomElement n3 = n2.firstChild().toElement(); - TQString cl, header; - WidgetDatabaseRecord *r = new WidgetDatabaseRecord; - while ( !n3.isNull() ) { - if ( n3.tagName() == "class" ) { - cl = n3.firstChild().toText().data(); - r->name = cl; - } else if ( n3.tagName() == "header" ) { - CustomInclude ci; - ci.header = n3.firstChild().toText().data(); - ci.location = n3.attribute( "location", "global" ); - r->includeFile = ci.header; - header = ci.header; - customWidgetIncludes.insert( cl, ci ); - } - WidgetDatabase::append( r ); - n3 = n3.nextSibling().toElement(); - } - - if (cl.isEmpty()) - cl = "UnnamedCustomClass"; - - int ext = header.findRev('.'); - - if (ext >= 0) - header.truncate(ext); - - if (header.isEmpty()) - header = cl.lower(); - -// if (!nofwd) -// out << "use " << cl << ";" << endl; // FIXME: what about header ? - } - n2 = n2.nextSibling().toElement(); - } - } - } - - out << "class " << nameOfClass << " < " << objClass << endl << endl; - - // QtRuby sig/slot declaration - - ++indent; - - if ( !extraSlots.isEmpty() ) { - out << indent << "slots 'languageChange()'"; - for ( it = extraSlots.begin(); it != extraSlots.end(); ++it ) { - if (it == extraSlots.begin()) { - out << "," << endl; - } - rubySlot( it ); - out << ( ((*it) == extraSlots.last()) ? "":",") << endl; - } - out << endl; - } - - // create signals - if ( !extraSignals.isEmpty() ) { - out << indent << "signals "; - --indent; - for ( it = extraSignals.begin(); it != extraSignals.end(); ++it ) { - rubySlot( it ); - if (it == extraSignals.begin()) { - ++indent; - } - out << ( ((*it) == extraSignals.last()) ? "":",") << endl; - } - out << endl; - } - - - // children - if( !objectNames.isEmpty() ) - tqWarning(TQString("WARNING : objectNames should be empty at ") + __FILE__ + " line " + __LINE__); - nl = e.parentNode().toElement().elementsByTagName( "widget" ); - for ( i = 1; i < (int) nl.length(); i++ ) - { // start at 1, 0 is the toplevel widget - n = nl.item(i).toElement(); - createAttrDecl( n ); - } - objectNames.clear(); - - ++indent; - - // additional attributes (from Designer) - TQStringList publicVars, protectedVars, privateVars; - nl = e.parentNode().toElement().elementsByTagName( "variable" ); - for ( i = 0; i < (int)nl.length(); i++ ) { - n = nl.item( i ).toElement(); - // Because of compatibility the next lines have to be commented out. - // Someday it should be uncommented. - //if ( n.parentNode().toElement().tagName() != "variables" ) - // continue; - TQString access = n.attribute( "access", "protected" ); - TQString var = n.firstChild().toText().data().stripWhiteSpace(); - if ( var.endsWith( ";" ) ) - var.truncate(var.length() - 1); - if ( access == "public" ) - publicVars += var; - else if ( access == "private" ) - privateVars += var; - else - protectedVars += var; - } - - // Databases Connection holders - - registerDatabases( e ); - dbConnections = unique( dbConnections ); - for ( it = dbConnections.begin(); it != dbConnections.end(); ++it ) { - if ( !(*it).isEmpty() && (*it) != "(default)") { - out << indent << (*it) << "Connection" << endl; - } - } - - --indent; - - // additional includes (local or global ) and forward declaractions - nl = e.parentNode().toElement().elementsByTagName( "include" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - TQDomElement n2 = nl.item(i).toElement(); - TQString s = n2.firstChild().toText().data(); - if ( n2.attribute( "location" ) != "local" ) { - if ( s.right( 5 ) == ".ui.h" && !TQFile::exists( s ) ) - continue; - if ( n2.attribute( "impldecl", "in implementation" ) != "in implementation" ) - continue; - globalIncludes += s; - } - } - - // do the local includes afterwards, since global includes have priority on clashes - for ( i = 0; i < (int) nl.length(); i++ ) { - TQDomElement n2 = nl.item(i).toElement(); - TQString s = n2.firstChild().toText().data(); - if ( n2.attribute( "location" ) == "local" &&!globalIncludes.contains( s ) ) { - if ( s.right( 5 ) == ".ui.h" && !TQFile::exists( s ) ) - continue; - if ( n2.attribute( "impldecl", "in implementation" ) != "in implementation" ) - continue; - localIncludes += s; - } - } - - // additional custom widget headers - nl = e.parentNode().toElement().elementsByTagName( "header" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - TQDomElement n2 = nl.item(i).toElement(); - TQString s = n2.firstChild().toText().data(); - if ( n2.attribute( "location" ) != "local" ) - globalIncludes += s; - else - localIncludes += s; - } - - - // grab slots/funcs defined in ui.h files - for(TQStringList::Iterator it = localIncludes.begin(); it != localIncludes.end(); ++it) - { - if((*it).right( 5 ) == ".ui.h") - { - TQFile f((*it)); - if( f.open( IO_ReadOnly ) ) - { - TQRegExp re("^def\\s+([a-zA-Z0-9_]+)\\s.*$"); - TQRegExp re2("^end\\s*$"); - TQTextStream t( &f ); - TQString s, s2, s3; - while ( !t.eof() ) - { - s = t.readLine(); - int pos = re.search(s); - if(pos == -1) - continue; - s2 = re.cap(1); - s2 += "()"; -// s2 = Parser::cleanArgs(s2); - s3 = "{"; - while( !t.eof() ) - { - s = t.readLine(); - if(re2.search(s) != -1) - break; - s3 += s + "\n"; - } - s3 += "}"; - functionImpls.insert( s2, s3 ); - if( t.eof() ) break; - } - f.close(); - } - } - } - - // includes for child widgets - for ( it = tags.begin(); it != tags.end(); ++it ) { - nl = e.parentNode().toElement().elementsByTagName( *it ); - for ( i = 1; i < (int) nl.length(); i++ ) { // start at 1, 0 is the toplevel widget - TQString name = getClassName( nl.item(i).toElement() ); - if ( name == "Spacer" ) { - globalIncludes += "tqlayout.h"; - globalIncludes += "tqapplication.h"; - continue; - } - if ( name.mid( 4 ) == "ListView" ) - globalIncludes += "tqheader.h"; - if ( name != objClass ) { - int wid = WidgetDatabase::idFromClassName( name.replace( TQRegExp("^TQt::"), "Q" ) ); - TQMap<TQString, CustomInclude>::Iterator it = customWidgetIncludes.find( name ); - if ( it == customWidgetIncludes.end() ) - globalIncludes += WidgetDatabase::includeFile( wid ); - } - } - } - - dbConnections = unique( dbConnections ); - if ( dbConnections.count() ) - sqlClasses += "TQt::SqlDatabase"; - if ( dbCursors.count() ) - sqlClasses += "TQt::SqlCursor"; - bool dbForm = false; - if ( dbForms[ "(default)" ].count() ) - dbForm = true; - bool subDbForms = false; - for ( it = dbConnections.begin(); it != dbConnections.end(); ++it ) { - if ( !(*it).isEmpty() && (*it) != "(default)" ) { - if ( dbForms[ (*it) ].count() ) { - subDbForms = true; - break; - } - } - } - if ( dbForm || subDbForms ) { - sqlClasses += "TQt::SqlForm"; - sqlClasses += "TQt::SqlRecord"; - } - - if (globalIncludes.findIndex("tqdatatable.h") >= 0) - sqlClasses += "TQt::DataTable"; - - if (globalIncludes.findIndex("qtableview.h") >= 0) - sqlClasses += "TQt::TableView"; - - if (globalIncludes.findIndex("tqdatabrowser.h") >= 0) - sqlClasses += "TQt::DataBrowser"; - - out << endl; - - // find out what images are required - TQStringList requiredImages; - static const char *imgTags[] = { "pixmap", "iconset", 0 }; - for ( i = 0; imgTags[i] != 0; i++ ) { - nl = e.parentNode().toElement().elementsByTagName( imgTags[i] ); - for ( int j = 0; j < (int) nl.length(); j++ ) { - TQString img = "@"; - requiredImages += (img + nl.item(j).firstChild().toText().data()); - } - } - - // register the object and unify its name - TQString loadFunction(objName); - objName = registerObject( objName ); - - TQStringList images; - TQStringList xpmImages; - if ( pixmapLoaderFunction.isEmpty() && !externPixmaps ) - { - // create images - for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) - { - if ( n.tagName() == "images" ) - { - nl = n.elementsByTagName( "image" ); - for ( i = 0; i < (int) nl.length(); i++ ) - { - TQString img = registerObject( nl.item(i).toElement().attribute( "name" ) ); - if ( !requiredImages.contains( img ) ) - continue; - TQDomElement tmp = nl.item(i).firstChild().toElement(); - if ( tmp.tagName() != "data" ) - continue; - TQString format = tmp.attribute("format", "PNG" ); - TQString data = tmp.firstChild().toText().data(); - if ( format == "XPM.GZ" ) - { - xpmImages += img; - ulong length = tmp.attribute("length").toULong(); - TQByteArray baunzip = unzipXPM( data, length ); - // shouldn't we test the initial `length' against the - // resulting `length' to catch corrupt UIC files? - int a = 0; - out << indent << imageDataName(img) << " =\n["; - - while ( baunzip[a] != '\"' ) - a++; - for ( ; a < (int) length; a++ ) - { - char ch; - - if ((ch = baunzip[a]) == '}') - { - out << "]\n" << endl; - - break; - } - - out << ch; - } - } - else - { - images += img; - out << indent << imageDataName(img) << " = [ " << endl; - ++indent; - int a ; - for ( a = 0; a < (int) (data.length()/2)-1; a++ ) { - out << "0x" << TQString(data[2*a]) << TQString(data[2*a+1]) << ","; - if ( a % 12 == 11 ) - out << endl << " "; - else - out << " "; - } - out << "0x" << TQString(data[2*a]) << TQString(data[2*a+1]) << " ].pack \"C*\"" << endl; - --indent; - out << endl; - } - } - } - } - out << endl; - } - else if ( externPixmaps ) - { - /* - out << indent << "def uic_load_pixmap_" << loadFunction << "( data )" << endl; - ++indent; - out << indent << "pix = TQt::Pixmap.new()" << endl; - out << indent << "m = TQt::MimeSourceFactory.defaultFactory().data(data)" << endl; - out << endl; - out << indent << "if ! m.nil?" << endl; - ++indent; - out << indent << "TQt::ImageDrag.decode(m, pix)" << endl; - --indent; - out << indent << "end" << endl; - out << endl; - out << indent << "return pix" << endl; - --indent; - out << indent << "end" << endl; - out << endl; - out << endl; - pixmapLoaderFunction = "uic_load_pixmap_" + loadFunction; - */ - pixmapLoaderFunction = "TQt::Pixmap.fromMimeSource"; - } - - - // constructor(s) - if ( objClass == "TQt::Dialog" || objClass == "TQt::Wizard" ) { - out << indent << "def initialize(parent = nil, name = nil, modal = false, fl = 0)" << endl; - ++indent; - out << indent << "super" << endl; - } else if ( objClass == "TQt::Widget") { - out << indent << "def initialize(parent = nil, name = nil, fl = 0)" << endl; - ++indent; - out << indent << "super" << endl; - } else if ( objClass == "TQt::MainWindow" ) { - out << indent << "def initialize(parent = nil, name = nil, fl = WType_TopLevel)" << endl; - ++indent; - out << indent << "super" << endl; - isMainWindow = true; - } else { - out << indent << "def initialize(parent = nil, name = nil)" << endl; - ++indent; - out << indent << "super" << endl; - } - - out << endl; - - // create pixmaps for all images - if ( !images.isEmpty() ) { - TQStringList::Iterator it; - for ( it = images.begin(); it != images.end(); ++it ) { - out << indent << (*it) << " = TQt::Pixmap.new()" << endl; - out << indent << (*it) << ".loadFromData(" << imageDataName(*it) << ", " << imageDataName(*it) << ".length, \"PNG\")" << endl; - } - out << endl; - } - // create pixmaps for all images - if ( !xpmImages.isEmpty() ) { - for ( it = xpmImages.begin(); it != xpmImages.end(); ++it ) { - out << indent << (*it) << " = TQt::Pixmap.new(" << imageDataName(*it) << ")" << endl; - } - out << endl; - } - - if ( isMainWindow ) - out << indent << "statusBar()" << endl; - - // set the properties - TQSize geometry( 0, 0 ); - - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "property" ) { - bool stdset = stdsetdef; - if ( n.hasAttribute( "stdset" ) ) - stdset = toBool( n.attribute( "stdset" ) ); - TQString prop = n.attribute("name"); - TQDomElement n2 = n.firstChild().toElement(); - TQString value = setObjectProperty( objClass, TQString::null, prop, n2, stdset ); - if ( value.isEmpty() ) - continue; - - if ( prop == "geometry" && n2.tagName() == "rect") { - TQDomElement n3 = n2.firstChild().toElement(); - while ( !n3.isNull() ) { - if ( n3.tagName() == "width" ) - geometry.setWidth( n3.firstChild().toText().data().toInt() ); - else if ( n3.tagName() == "height" ) - geometry.setHeight( n3.firstChild().toText().data().toInt() ); - n3 = n3.nextSibling().toElement(); - } - } else { - TQString call; - if ( stdset ) { - call = mkStdSet( prop ) + "(" + value + ")"; - } else { - call = "setProperty(\"" + prop + "\", TQt::Variant.new(" + value + "))"; - } - - if ( n2.tagName() == "string" ) { - trout << indent << call << endl; - } else if ( prop == "name" ) { - out << indent << "if name.nil?" << endl; - out << indent << "\t" << call << endl; - out << indent << "end" << endl; - } else { - out << indent << call << endl; - } - } - } - } - - out << endl; - - // create all children, some forms have special requirements - - if ( objClass == "TQt::Wizard" ) - { - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) - { - if ( tags.contains( n.tagName() ) ) - { - TQString page = createObjectImpl( n, objClass, "self" ); - TQString comment; - TQString label = DomTool::readAttribute( n, "title", "", comment ).toString(); - out << indent << "addPage(" << page << ", "<< trcall( label ) << ")" << endl; - trout << indent << "setTitle( " << page << ", " << trcall( label, comment ) << " )" << endl; - TQVariant def( false ); - if ( DomTool::hasAttribute( n, "backEnabled" ) ) - out << indent << "setBackEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "backEnabled", def).toBool() ) << ");" << endl; - if ( DomTool::hasAttribute( n, "nextEnabled" ) ) - out << indent << "setNextEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "nextEnabled", def).toBool() ) << ");" << endl; - if ( DomTool::hasAttribute( n, "finishEnabled" ) ) - out << indent << "setFinishEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "finishEnabled", def).toBool() ) << ");" << endl; - if ( DomTool::hasAttribute( n, "helpEnabled" ) ) - out << indent << "setHelpEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "helpEnabled", def).toBool() ) << ");" << endl; - if ( DomTool::hasAttribute( n, "finish" ) ) - out << indent << "setFinish( " << page << "," << mkBool( DomTool::readAttribute( n, "finish", def).toBool() ) << ");" << endl; - } - } - } - else - { // standard widgets - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) - { - if ( tags.contains( n.tagName() ) ) - createObjectImpl( n, objName, "self" ); - } - } - - // database support - dbConnections = unique( dbConnections ); - if ( dbConnections.count() ) - out << endl; - for ( it = dbConnections.begin(); it != dbConnections.end(); ++it ) { - if ( !(*it).isEmpty() && (*it) != "(default)") { - out << indent << (*it) << "Connection = TQt::SqlDatabase.database(\"" <<(*it) << "\");" << endl; - } - } - - nl = e.parentNode().toElement().elementsByTagName( "widget" ); - for ( i = 1; i < (int) nl.length(); i++ ) { // start at 1, 0 is the toplevel widget - n = nl.item(i).toElement(); - TQString s = getClassName( n ); - if ( s == "TQt::DataBrowser" || s == "TQt::DataView" ) { - TQString objName = getObjectName( n ); - TQString tab = getDatabaseInfo( n, "table" ); - TQString con = getDatabaseInfo( n, "connection" ); - out << indent << objName << "Form = TQt::SqlForm.new(self, \"" << objName << "Form\")" << endl; - TQDomElement n2; - for ( n2 = n.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) - createFormImpl( n2, objName, con, tab ); - out << indent << objName << ".setForm(" << objName << "Form)" << endl; - } - } - - // actions, toolbars, menubar - bool needEndl = false; - for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "actions" ) { - if ( !needEndl ) - out << endl; - createActionImpl( n.firstChild().toElement(), "self" ); - needEndl = true; - } - } - if ( needEndl ) - out << endl; - needEndl = false; - for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "toolbars" ) { - if ( !needEndl ) - out << endl; - createToolbarImpl( n, objClass, objName ); - needEndl = true; - } - } - if ( needEndl ) - out << endl; - needEndl = false; - for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "menubar" ) { - if ( !needEndl ) - out << endl; - createMenuBarImpl( n, objClass, objName ); - needEndl = true; - } - } - if ( needEndl ) - out << endl; - - out << indent << "languageChange()" << endl; - - // take minimumSizeHint() into account, for height-for-width widgets - if ( !geometry.isNull() ) { - out << indent << "resize( TQt::Size.new(" << geometry.width() << ", " - << geometry.height() << ").expandedTo(minimumSizeHint()) )" << endl; - out << indent << "clearWState( WState_Polished )" << endl; - } - - for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { - if ( n.tagName() == "connections" ) { - // setup signals and slots connections - out << endl; - nl = n.elementsByTagName( "connection" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - TQString sender, receiver, signal, slot; - for ( TQDomElement n2 = nl.item(i).firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { - if ( n2.tagName() == "sender" ) - sender = n2.firstChild().toText().data(); - else if ( n2.tagName() == "receiver" ) - receiver = n2.firstChild().toText().data(); - else if ( n2.tagName() == "signal" ) - signal = n2.firstChild().toText().data(); - else if ( n2.tagName() == "slot" ) - slot = n2.firstChild().toText().data(); - } - if ( sender.isEmpty() || receiver.isEmpty() || signal.isEmpty() || slot.isEmpty() ) - continue; - else if ( sender[0] == '<' || - receiver[0] == '<' || - signal[0] == '<' || - slot[0] == '<' ) - continue; - sender = registeredName( sender ); - receiver = registeredName( receiver ); - - if ( sender == objName ) - sender = "self"; - if ( receiver == objName ) - receiver = "self"; - - out << indent << "TQt::Object.connect(" << sender - << ", TQT_SIGNAL(\"" << signal << "\"), "<< receiver << ", TQT_SLOT(\"" << slot << "\") )" << endl; - } - } else if ( n.tagName() == "tabstops" ) { - // setup tab order - out << endl; - TQString lastName; - TQDomElement n2 = n.firstChild().toElement(); - while ( !n2.isNull() ) { - if ( n2.tagName() == "tabstop" ) { - TQString name = n2.firstChild().toText().data(); - name = registeredName( name ); - if ( !lastName.isEmpty() ) - out << indent << "setTabOrder(" << lastName << ", " << name << ")" << endl; - lastName = name; - } - n2 = n2.nextSibling().toElement(); - } - } - } - -// QtRuby - FIXME: what the heck is this ? - // buddies - bool firstBuddy = true; - for ( TQValueList<Buddy>::Iterator buddy = buddies.begin(); buddy != buddies.end(); ++buddy ) { - if ( isObjectRegistered( (*buddy).buddy ) ) { - if ( firstBuddy ) { - out << endl; - } - out << indent << (*buddy).key << ".setBuddy(" << registeredName( (*buddy).buddy ) << ")" << endl; - firstBuddy = false; - } - - } - if ( extraSlots.find( "init()" ) != extraSlots.end() || - extraFunctions.find( "init()" ) != extraFunctions.end()) - out << endl << indent << "init()" << endl; - - // end of constructor - --indent; - out << indent << "end" << endl; - out << endl; - - - - // handle application events if required - bool needFontEventHandler = false; - bool needSqlTableEventHandler = false; - bool needSqlDataBrowserEventHandler = false; - nl = e.elementsByTagName( "widget" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - if ( !DomTool::propertiesOfType( nl.item(i).toElement() , "font" ).isEmpty() ) - needFontEventHandler = true; - TQString s = getClassName( nl.item(i).toElement() ); - if ( s == "TQt::DataTable" || s == "TQt::DataBrowser" ) { - if ( !isFrameworkCodeGenerated( nl.item(i).toElement() ) ) - continue; - if ( s == "TQt::DataTable" ) - needSqlTableEventHandler = true; - if ( s == "TQt::DataBrowser" ) - needSqlDataBrowserEventHandler = true; - } - if ( needFontEventHandler && needSqlTableEventHandler && needSqlDataBrowserEventHandler ) - break; - } - -// PerlQt - TODO: is this needed ? -// Seems not.. let's ifzero for now... - - if ( 0 && needFontEventHandler) { - // indent = "\t"; // increase indentation for if-clause below - out << endl; - out << "# Main event handler. Reimplemented to handle" << endl; - out << "# application font changes" << endl; - out << endl; - out << "def event( ev )" << endl; - out << " ret = super( ev ) " << endl; - if ( needFontEventHandler ) { - ++indent; - out << " if ev.type() == TQt::Event::ApplicationFontChange " << endl; - for ( i = 0; i < (int) nl.length(); i++ ) { - n = nl.item(i).toElement(); - TQStringList list = DomTool::propertiesOfType( n, "font" ); - for ( it = list.begin(); it != list.end(); ++it ) - createExclusiveProperty( n, *it ); - } - out << " end" << endl; - --indent; - } - out << "end" << endl; - out << endl; - } - - if ( needSqlTableEventHandler || needSqlDataBrowserEventHandler ) { - out << endl; - out << indent << "# Widget polish. Reimplemented to handle default data" << endl; - if ( needSqlTableEventHandler ) - out << indent << "# table initialization." << endl; - if ( needSqlDataBrowserEventHandler ) - out << indent << "# browser initialization." << endl; - out << indent << "def polish" << endl; - ++indent; - if ( needSqlTableEventHandler ) { - for ( i = 0; i < (int) nl.length(); i++ ) { - TQString s = getClassName( nl.item(i).toElement() ); - if ( s == "TQt::DataTable" ) { - n = nl.item(i).toElement(); - TQString c = TQString("@") + getObjectName( n ); - TQString conn = getDatabaseInfo( n, "connection" ); - TQString tab = getDatabaseInfo( n, "table" ); - if ( !( conn.isEmpty() || tab.isEmpty() ) ) { - out << indent << "if " << "!" << c << ".nil?" << endl; - ++indent; - out << indent << "cursor = " << c << ".sqlCursor()" << endl; - out << endl; - out << indent << "if !cursor.nil?" << endl; - ++indent; - if ( conn == "(default)" ) - out << indent << "cursor = TQt::SqlCursor.new(\"" << tab << "\")" << endl; - else - out << indent << "cursor = TQt::SqlCursor.new(\"" << tab << "\", true, " << conn << "Connection)" << endl; - out << indent << "if " << c << ".readOnly? " << endl; - ++indent; - out << indent << "cursor.mode = TQt::SqlCursor::ReadOnly" << endl; - --indent; - out << indent << "end " << endl; - out << indent << c << ".setSqlCursor(cursor, false, true)" << endl; - --indent; - out << endl; - out << indent << "end" << endl; - out << indent << "if !cursor.active?" << endl; - ++indent; - out << indent << c << ".refresh(TQt::DataTable::RefreshAll)" << endl; - --indent; - out << indent << "end" << endl; - --indent; - out << indent << "end" << endl; - } - } - } - } - if ( needSqlDataBrowserEventHandler ) { - nl = e.elementsByTagName( "widget" ); - for ( i = 0; i < (int) nl.length(); i++ ) { - TQString s = getClassName( nl.item(i).toElement() ); - if ( s == "TQt::DataBrowser" ) { - TQString obj = getObjectName( nl.item(i).toElement() ); - TQString tab = getDatabaseInfo( nl.item(i).toElement(), - "table" ); - TQString conn = getDatabaseInfo( nl.item(i).toElement(), - "connection" ); - if ( !(tab).isEmpty() ) { - out << indent << "if " << obj << endl; - ++indent; - out << indent << "if !" << obj << ".sqlCursor()" << endl; - ++indent; - if ( conn == "(default)" ) - out << indent << "cursor = TQt::SqlCursor.new(\"" << tab << "\")" << endl; - else - out << indent << "cursor = TQt::SqlCursor.new(\"" << tab << "\", true, " << conn << "Connection)" << endl; - out << indent << obj << ".setSqlCursor(cursor, true)" << endl; - out << indent << obj << ".refresh()" << endl; - out << indent << obj << ".first()" << endl; - --indent; - out << indent << "end" << endl; - --indent; - out << indent << "end" << endl; - } - } - } - } - out << indent << "super()" << endl; - --indent; - out << indent << "end" << endl; - } - - out << indent << "#" << endl; - out << indent << "# Sets the strings of the subwidgets using the current" << endl; - out << indent << "# language." << endl; - out << indent << "#" << endl; - out << indent << "def " << "languageChange()" << endl; - out << languageChangeBody; - out << indent << "end" << endl; - out << indent << "protected :languageChange" << endl; - out << endl; - - if ( !extraSlots.isEmpty() && writeSlotImpl ) { - for ( it = extraSlots.begin(); it != extraSlots.end(); ++it ) { - out << endl; - int astart = (*it).find('('); - out << indent << "def " << (*it).left(astart) << "(*k)" << endl; - bool createWarning = true; - TQString fname = Parser::cleanArgs( *it ); - TQMap<TQString, TQString>::Iterator fit = functionImpls.find( fname ); - if ( fit != functionImpls.end() ) { - int begin = (*fit).find( "{" ); - TQString body = (*fit).mid( begin + 1, (*fit).findRev( "}" ) - begin - 1 ); - createWarning = body.simplifyWhiteSpace().isEmpty(); - if ( !createWarning ) - out << body << endl; - } - if ( createWarning ) { - ++indent; - if ( *it != "init()" && *it != "destroy()" ) - out << indent << "print(\"" << nameOfClass << "." << (*it) << ": Not implemented yet.\\n\")" << endl; - --indent; - } - out << indent << "end" << endl; - - } - } - - if ( !extraFunctions.isEmpty() ) { - for ( it = extraFunctions.begin(); it != extraFunctions.end(); ++it ) { - out << endl; - int astart = (*it).find('('); - out << indent << "def " << (*it).left(astart) << "(*k)" << endl; - TQString fname = Parser::cleanArgs( *it ); - TQMap<TQString, TQString>::Iterator fit = functionImpls.find( fname ); - if ( fit != functionImpls.end() ) { - int begin = (*fit).find( "{" ); - TQString body = (*fit).mid( begin + 1, (*fit).findRev( "}" ) - begin - 1 ); - body.simplifyWhiteSpace().isEmpty(); - out << body << endl; - } - out << indent << "end" << endl; - - } - } - - - out << endl; - out << "end" << endl; -} - - -/*! Creates form support implementation code for the widgets given - in \a e. - - Traverses recursively over all children. - */ - -void Uic::createFormImpl( const TQDomElement& e, const TQString& form, const TQString& connection, const TQString& table ) -{ - if ( e.tagName() == "widget" && - e.attribute( "class" ) != "TQt::DataTable" ) { - TQString field = getDatabaseInfo( e, "field" ); - if ( !field.isEmpty() ) { - if ( isWidgetInTable( e, connection, table ) ) - out << indent << form << "Form.insert(" << getObjectName( e ) << ", " << fixString( field ) << ")" << endl; - } - } - TQDomElement n; - for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { - createFormImpl( n, form, connection, table ); - } -} - - -// Generate a QtRuby signal/slot definition. - -void Uic::rubySlot(TQStringList::Iterator &it) -{ - out << indent << "'" << (*it) << "'"; -} |