/********************************************************************** ** ** 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 retquirements 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 "kdevdlg2ui.h" #include #include #include /// some little helpers /// void KDEVDLG2UI::wi() { for ( int i = 0; i < indentation; i++ ) *out << " "; } void KDEVDLG2UI::indent() { indentation++; } void KDEVDLG2UI::undent() { indentation--; } void KDEVDLG2UI::writeClass( const TQString& name ) { wi(); *out << "" << name << "" << endl; } void KDEVDLG2UI::writeWidgetStart( const TQString& qclass ) { wi(); *out << "" << endl; } void KDEVDLG2UI::writeWidgetEnd() { wi(); *out << "" << endl; } void KDEVDLG2UI::writeCString( const TQString& name, const TQString& value ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << value << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeString( const TQString& name, const TQString& value ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << value << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeRect( const TQString& name, int x, int y, int w, int h ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << endl; indent(); wi(); *out << "" << x << "" << endl; wi(); *out << "" << y << "" << endl; wi(); *out << "" << w << "" << endl; wi(); *out << "" << h << "" << endl; undent(); wi(); *out << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeFont( const TQString& family, int pointsize ) { wi(); *out << "" << endl; indent(); wi(); *out << "font" << endl; wi(); *out << "" << endl; indent(); wi(); *out << "" << family << "" << endl; wi(); *out << "" << pointsize << "" << endl; undent(); wi(); *out << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeBool( const TQString& name, bool value ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << (value ? "true" : "false") << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeNumber( const TQString& name, int value ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << value << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeEnum( const TQString& name, const TQString& value ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << value << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeSet( const TQString& name, const TQString& value ) { wi(); *out << "" << endl; indent(); wi(); *out << "" << name << "" << endl; wi(); *out << "" << value << "" << endl; undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeItem( const TQString& name, const TQString& value ) { wi(); *out << "" << endl; indent(); writeString( name, value ); undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeColumn( const TQString& name, const TQString& value ) { wi(); *out << "" << endl; indent(); writeString( name, value ); undent(); wi(); *out << "" << endl; } void KDEVDLG2UI::writeColor( const TQString& name, const TQString& value ) { int color = value.toInt(); int r = color & 0x00ff0000 >> 16; int g = color & 0x0000ff00 >> 8; int b = color & 0x000000ff; wi(); *out << "" << endl; indent(); //###FIX wi(); *out << "" << name << "" << endl; wi(); *out << "" << endl; indent(); wi(); *out << "" << r << "" << endl; wi(); *out << "" << g << "" << endl; wi(); *out << "" << b << "" << endl; undent(); wi(); *out << "" << endl; wi(); *out << "" << endl; } void KDEVDLG2UI::writeStyles( const TQStringList styles, bool isFrame ) { if ( isFrame ) { bool defineFrame = FALSE; TQString shadow = "NoFrame"; TQString shape = "StyledPanel"; int width = 2; if ( styles.contains( "WS_EX_STATICEDGE" ) ) { shadow = "Plain"; width = 1; defineFrame = TRUE; } if ( styles.contains( "WS_EX_CLIENTEDGE" ) ) { shadow = "Sunken"; defineFrame = TRUE; } if ( styles.contains( "WS_EX_DLGMODALFRAME" ) ) { shadow = "Raised"; defineFrame = TRUE; } if ( !styles.contains( "WS_BORDER" ) ) { shape = "NoFrame"; defineFrame = TRUE; } if ( defineFrame ) { writeEnum( "frameShape", "StyledPanel" ); writeEnum( "frameShadow", shadow ); writeNumber( "lineWidth", width ); } } if ( styles.contains("WS_DISABLED") ) writeBool("enabled", FALSE ); if ( styles.contains("WS_EX_ACCEPTFILES") ) writeBool("acceptDrops", TRUE ); if ( styles.contains("WS_EX_TRANSPARENT") ) writeBool("autoMask", TRUE ); if ( !styles.contains("WS_TABSTOP") ) writeEnum("focusPolicy", "NoFocus"); } /*! Constructs a KDEVDLG2UI object */ KDEVDLG2UI::KDEVDLG2UI( TQTextStream* input, const TQString& name ) { className = name; writeToFile = TRUE; in = input; indentation = 0; out = 0; } /*! Destructs the KDEVDLG2UI object */ KDEVDLG2UI::~KDEVDLG2UI() { } /*! Parses the input stream and writes the output to files. */ bool KDEVDLG2UI::parse() { TQFile fileOut; TQString buffer; if ( writeToFile ) { TQString outputFile = TQString( className ) + ".ui"; fileOut.setName( outputFile ); if (!fileOut.open( IO_WriteOnly ) ) qFatal( "kdevdlg2ui: Could not open output file '%s'", outputFile.latin1() ); out = new TQTextStream( &fileOut ); targetFiles.append( outputFile ); } else { out = new TQTextStream( &buffer, IO_WriteOnly ); } writeDialog( className ); delete out; out = 0; return TRUE; } /*! Parses the input stream and writes the output in \a get. */ bool KDEVDLG2UI::parse( TQStringList& get ) { writeToFile = FALSE; bool result = parse(); get = target; return result; } /*! Replaces characters like '&', '<' and '>' with the proper encoding. */ void KDEVDLG2UI::cleanString( TQString * text ) { if ( !text ) return; text->replace( "\\n", "\n" ); text->replace( "\\t", "\t" ); text->replace( "&", "&" ); text->replace( "<", "<" ); text->replace( ">", ">" ); } /*! Builds a number of UI dialog out of the current input stream */ bool KDEVDLG2UI::writeDialog( const TQString& name ) { *out << "" << endl; writeClass( name ); while ( !in->eof() ) { line = in->readLine().simplifyWhiteSpace(); if ( line.left( 4 ) == "data" ) { // ignore data section while ( line.left( 1 ) != "}" && !in->eof() ) { line = in->readLine(); } } else if ( line.left( 4 ) == "item" ) { writeWidgetStart( line.section( "//", 0, 0 ).section( " ", 1, 1 ) ); } else if ( line.left( 1 ) == "{" ) { indent(); } else if ( line.left( 1 ) == "}" ) { undent(); writeWidgetEnd(); } else if ( line.left( 4 ) == "Name" ) { TQString name = line.section( "//", 0, 0 ).section("\"", 1, 1 ); writeString( "name", name ); } else if ( line.left( 4 ) == "Font" ) { TQString font = line.section( "//", 0, 0 ).section( "\"", 1 ); TQString family = font.section("\"", 1, 1 ); int pointSize = font.section("\"", 3, 3 ).toInt(); //int weight = font.section("\"", 5, 5 ).toInt(); //bool italic = ( font.section("\"", 7, 7 ) == "TRUE" ); writeFont( family, pointSize ); // weight, italic ? } else if ( line.left( 9 ) == "IsEnabled" ) { bool isEnabled = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "enabled", isEnabled ); } else if ( line.left( 12 ) == "AcceptsDrops" ) { bool acceptDrops = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "acceptDrops", acceptDrops ); } else if ( line.left( 12 ) == "isAutoResize" ) { bool isAutoResize = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "autoResize", isAutoResize ); //###FIX: obsolete } else if ( line.left( 12 ) == "isAutoRepeat" ) { bool isAutoRepeat = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "autoRepeat", isAutoRepeat ); } else if ( line.left( 9 ) == "isDefault" ) { bool isDefault = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "default", isDefault ); } else if ( line.left( 13 ) == "isAutoDefault" ) { bool isAutoDefault = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "autoDefault", isAutoDefault ); } else if ( line.left( 14 ) == "isToggleButton" ) { bool isToggleButton = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "toggleButton", isToggleButton ); } else if ( line.left( 11 ) == "isToggledOn" ) { bool isToggledOn = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "on", isToggledOn ); } else if ( line.left( 8 ) == "hasFrame" ) { bool hasFrame = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "frame", hasFrame ); } else if ( line.left( 10 ) == "isReadOnly" ) { bool isReadOnly = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "readOnly", isReadOnly ); } else if ( line.left( 9 ) == "isChecked" ) { bool isChecked = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "checked", isChecked ); } else if ( line.left( 16 ) == "isAutoCompletion" ) { bool isAutoCompl = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "autoCompletion", isAutoCompl ); } else if ( line.left( 8 ) == "EditText" ) { bool editText = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "editable", editText ); } else if ( line.left( 10 ) == "isTracking" ) { bool isTracking = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "tracking", isTracking ); } else if ( line.left( 16 ) == "isMultiSelection" ) { bool isMultiSel = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "multiSelection", isMultiSel ); } else if ( line.left( 21 ) == "isAllColumnsShowFocus" ) { bool isAllColsShowFocus = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "allColumnsShowFocus", isAllColsShowFocus ); } else if ( line.left( 16 ) == "isRootDecorated" ) { bool isRootDec = ( line.section( "//", 0, 0 ).section("\"", 1, 1 ) == "true" ); writeBool( "rootIsDecorated", isRootDec ); } else if ( line.left( 1 ) == "X" ) { int x = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); line = in->readLine().stripWhiteSpace(); int y = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); line = in->readLine().stripWhiteSpace(); int w = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); line = in->readLine().stripWhiteSpace(); int h = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeRect( "geometry", x, y, w, h ); } else if ( line.left( 8 ) == "MinWidth" ) { int minw = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "minimumWidth", minw ); } else if ( line.left( 9 ) == "MinHeight" ) { int minh = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "minimumHeight", minh ); } else if ( line.left( 8 ) == "MaxWidth" ) { int maxw = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "maximumWidth", maxw ); } else if ( line.left( 9 ) == "MaxHeight" ) { int maxh = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "maximumHeight", maxh ); } else if ( line.left( 4 ) == "Text" ) { TQString text = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & text ); writeString( "text", text ); } else if ( line.left( 5 ) == "Title" ) { TQString title = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & title ); writeString( "title", title ); } else if ( line.left( 5 ) == "Buddy" ) { TQString buddy = line.section( "//", 0, 0 ).section("\"", 1, 1 ); writeString( "buddy", buddy ); } else if ( line.left( 14 ) == "SpecialValText" ) { TQString text = line.section( "//", 0, 0 ).section("\"", 1, 1 ); writeString( "specialValueText", text ); } else if ( line.left( 6 ) == "Prefix" ) { TQString text = line.section( "//", 0, 0 ).section("\"", 1, 1 ); writeString( "prefix", text ); } else if ( line.left( 6 ) == "Suffix" ) { TQString text = line.section( "//", 0, 0 ).section("\"", 1, 1 ); writeString( "suffix", text ); } else if ( line.left( 5 ) == "Value" ) { int v = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "value", v ); } else if ( line.left( 8 ) == "MinValue" ) { int minv = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "minValue", minv ); } else if ( line.left( 8 ) == "MaxValue" ) { int maxv = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "maxValue", maxv ); } else if ( line.left( 9 ) == "SizeLimit" ) { int limit = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "sizeLimit", limit ); } else if ( line.left( 9 ) == "MaxLength" ) { int maxl = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "maxLength", maxl ); } else if ( line.left( 8 ) == "MaxCount" ) { int maxc = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "maxCount", maxc ); } else if ( line.left( 14 ) == "CursorPosition" ) { int pos = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "cursorPosition", pos ); } else if ( line.left( 9 ) == "NumDigits" ) { int digits = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "numDigits", digits ); } else if ( line.left( 10 ) == "TotalSteps" ) { int steps = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "totalSteps", steps ); } else if ( line.left( 12 ) == "TreeStepSize" ) { int stepSize = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "treeStepSize", stepSize ); } else if ( line.left( 10 ) == "ItemMargin" ) { int margin = line.section( "//", 0, 0 ).section("\"", 1, 1 ).toInt(); writeNumber( "itemMargin", margin ); } else if ( line.left( 7 ) == "ToolTip" ) { TQString text = line.section( "//", 0, 0 ).section("\"", 1, 1 ); writeString( "toolTip", text ); } else if ( line.left( 9 ) == "QuickHelp" ) { TQString text = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & text ); writeString( "whatsThis", text ); } else if ( line.left( 15 ) == "InsertionPolicy" ) { TQString policy = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & policy ); writeEnum( "insertionPolicy", policy ); //###FIX: TQComboBox:: } else if ( line.left( 11 ) == "Orientation" ) { TQString orientation = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & orientation ); if ( orientation == "V" ) writeEnum( "orientation", "TQt::Vertical" ); else if ( orientation == "H" ) writeEnum( "orientation", "TQt::Horizontal" ); } else if ( line.left( 14 ) == "vScrollBarMode" ) { TQString mode = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & mode ); writeEnum( "vScrollBarMode", mode ); } else if ( line.left( 14 ) == "hScrollBarMode" ) { TQString mode = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & mode ); writeEnum( "hScrollBarMode", mode ); } else if ( line.left( 7 ) == "Entries" ) { TQString entries = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & entries ); TQStringList l = TQStringList::split( '\n', entries ); for ( TQStringList::Iterator it = l.begin(); it != l.end(); ++it ) writeItem( "text", *it ); } else if ( line.left( 7 ) == "Columns" ) { TQString columns = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & columns ); TQStringList l = TQStringList::split( '\n', columns ); for ( TQStringList::Iterator it = l.begin(); it != l.end(); ++it ) writeColumn( "text", *it ); } else if ( line.left( 6 ) == "BgMode" ) { TQString mode = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & mode ); writeString( "backgroundMode", mode ); //###FIX: TQWidget::: } else if ( line.left( 10 ) == "BgPalColor" ) { TQString color = line.section( "//", 0, 0 ).section("\"", 1, 1 ); cleanString( & color ); writeColor( "paletteBackgroundColor", color ); } //else { //if ( line.length() ) //qDebug( "IGNORED: %s", line.latin1() ); //} } *out << "" << endl; return TRUE; }