summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/tools/designer/plugins/dlg
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2019-04-21 23:28:33 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2019-04-21 23:28:33 +0900
commit1df632a0e6e550a5a100247c6b4713078e78f413 (patch)
treee8577c3d310285ebb4c8beea37998f408286bda3 /tqtinterface/qt4/tools/designer/plugins/dlg
parent012b00740f33c01949c88d7ea97e2dee81fabb41 (diff)
downloadexperimental-r14.0.7.tar.gz
experimental-r14.0.7.zip
Removed unnecessary and/or TDE-unrelated code.r14.0.7
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it> Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
Diffstat (limited to 'tqtinterface/qt4/tools/designer/plugins/dlg')
-rw-r--r--tqtinterface/qt4/tools/designer/plugins/dlg/dlg.pro13
-rw-r--r--tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.cpp1632
-rw-r--r--tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.h144
-rw-r--r--tqtinterface/qt4/tools/designer/plugins/dlg/main.cpp108
4 files changed, 0 insertions, 1897 deletions
diff --git a/tqtinterface/qt4/tools/designer/plugins/dlg/dlg.pro b/tqtinterface/qt4/tools/designer/plugins/dlg/dlg.pro
deleted file mode 100644
index ee93cb9..0000000
--- a/tqtinterface/qt4/tools/designer/plugins/dlg/dlg.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-TEMPLATE = lib
-CONFIG += qt warn_on release plugin
-HEADERS = dlg2ui.h
-SOURCES = main.cpp dlg2ui.cpp
-DESTDIR = ../../../../plugins/designer
-DEFINES += QT_INTERNAL_XML
-include( ../../../../src/qt_professional.pri )
-TARGET = dlgplugin
-INCLUDEPATH += ../../interfaces
-
-
-target.path += $$plugins.path/designer
-INSTALLS += target
diff --git a/tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.cpp b/tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.cpp
deleted file mode 100644
index 6f45017..0000000
--- a/tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.cpp
+++ /dev/null
@@ -1,1632 +0,0 @@
-/**********************************************************************
-**
-** Converts a TQt Architect 2.1+ .dlg file into a .ui file.
-**
-** Copyright (C) 2000-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 "dlg2ui.h"
-#include <tqfile.h>
-#include <tqframe.h>
-#include <tqmessagebox.h>
-#include <tqregexp.h>
-#include <tqtextstream.h>
-
-/*
- Possible improvements:
-
- 1. Convert tqlayout stretch factors to size policy stretches, now
- that TQt Designer supports the latter.
-*/
-
-/*
- These big tables could be more or less eliminated by using TQt's
- TQMetaObject and TQMetaProperty classes. However, the interface of
- these classes is unwieldy for an otherwise non-GUI program like this
- one, as we would have to create one dummy object for most TQObject
- subclasses in TQt. Let's take the safe road.
-*/
-
-static const char *widgetTypes[] = {
- "Button", "ButtonGroup", "CheckBox", "ComboBox", "Dial", "DlgWidget",
- "Frame", "Grid", "GroupBox", "HBox", "HButtonGroup", "HGroupBox",
- "IconView", "LCDNumber", "Label", "LineEdit", "ListBox", "ListView",
- "MenuBar", "MultiLineEdit", "ProgressBar", "PushButton", "RadioButton",
- "ScrollBar", "ScrollView", "Slider", "SpinBox", "Splitter", "TabBar",
- "TextBrowser", "TextView", "User", "VBox", "VButtonGroup", "VGroupBox", 0
-};
-
-/*
- This table maps TQt Architect properties to TQt Designer properties.
- If there is no corresponding TQt Designer property, qtName is 0 and
- the property can be handled explicitly.
-*/
-static const struct {
- const char *widgetName;
- const char *architectName;
- const char *qtName;
- const char *type;
-} propertyDefs[] = {
- { "Button", "AutoRepeat", "autoRepeat", "boolean" },
- { "Button", "AutoResize", 0, 0 },
- { "Button", "Text", "text", "qstring" },
- { "ButtonGroup", "Exclusive", "exclusive", "boolean" },
- { "ButtonGroup", "RadioButtonExclusive", "radioButtonExclusive",
- "boolean" },
- { "CheckBox", "Checked", "checked", "boolean" },
- { "ComboBox", "AutoCompletion", "autoCompletion", "boolean" },
- { "ComboBox", "AutoResize", 0, 0 },
- { "ComboBox", "DuplicatesEnabled", "duplicatesEnabled", "boolean" },
- { "ComboBox", "MaxCount", "maxCount", "integer" },
- { "ComboBox", "Policy", "insertionPolicy", "enum" },
- { "ComboBox", "SizeLimit", "sizeLimit", "integer" },
- { "ComboBox", "Style", 0, 0 },
- { "Dial", "Initial", "value", "integer" },
- { "Dial", "LineStep", "lineStep", "integer" },
- { "Dial", "MaxValue", "maxValue", "integer" },
- { "Dial", "MinValue", "minValue", "integer" },
- { "Dial", "NotchTarget", "notchTarget", "double" },
- { "Dial", "PageStep", "pageStep", "integer" },
- { "Dial", "ShowNotches", "notchesVisible", "boolean" },
- { "Dial", "Tracking", "tracking", "boolean" },
- { "Dial", "Wrapping", "wrapping", "boolean" },
- { "DlgWidget", "AdjustSize", 0, 0 },
- { "DlgWidget", "BackgroundMode", "backgroundMode", "enum" },
- { "DlgWidget", "BackgroundOrigin", "backgroundOrigin", "enum" },
- { "DlgWidget", "BackgroundPixmap", "backgroundPixmap", "qpixmap" },
- { "DlgWidget", "DataLenName", 0, 0 },
- { "DlgWidget", "DataVarName", 0, 0 },
- { "DlgWidget", "Enabled", "enabled", "boolean" },
- { "DlgWidget", "FocusPolicy", "focusPolicy", "enum" },
- { "DlgWidget", "Font", "font", "qfont" },
- { "DlgWidget", "FontPropagation", 0, 0 },
- { "DlgWidget", "MaximumSize", "tqmaximumSize", "qsize" },
- { "DlgWidget", "MinimumSize", "tqminimumSize", "qsize" },
- { "DlgWidget", "Name", 0, 0 },
- { "DlgWidget", "Palette", "palette", "qpalette" },
- { "DlgWidget", "PalettePropagation", 0, 0 },
- { "DlgWidget", "ReadPixmapFromData", 0, 0 },
- { "DlgWidget", "Rect", 0, 0 },
- { "DlgWidget", "SignalConnection", 0, 0 },
- { "DlgWidget", "UseBackgroudPixmap", 0, 0 },
- { "DlgWidget", "Variable", 0, 0 },
- { "Frame", "FrameMargin", "margin", "integer" },
- { "Frame", "LineWidth", "lineWidth", "integer" },
- { "Frame", "MidLineWidth", "midLineWidth", "integer" },
- { "Frame", "Style", 0, 0 },
- { "GroupBox", "Title", "title", "qstring" },
- { "IconView", "AlignMode", 0, 0 },
- { "IconView", "Aligning", 0, 0 },
- { "IconView", "Arrangement", "arrangement", "enum" },
- { "IconView", "AutoArrange", "autoArrange", "boolean" },
- { "IconView", "EnableMoveItems", "itemsMovable", "boolean" },
- { "IconView", "GridX", "gridX", "integer" },
- { "IconView", "GridY", "gridY", "integer" },
- { "IconView", "ItemTextPos", "itemTextPos", "enum" },
- { "IconView", "ItemsMovable", "itemsMovable", "boolean" },
- { "IconView", "MaxItemTextLength", "maxItemTextLength", "integer" },
- { "IconView", "MaxItemWidth", "maxItemWidth", "integer" },
- { "IconView", "ResizeMode", "resizeMode", "enum" },
- { "IconView", "SelectionMode", "selectionMode", "enum" },
- { "IconView", "ShowToolTips", "showToolTips", "boolean" },
- { "IconView", "SortAscending", "sortDirection", "bool" },
- { "IconView", "Spacing", "spacing", "integer" },
- { "IconView", "WordWrapIconText", "wordWrapIconText", "boolean" },
- { "LCDNumber", "Digits", "numDigits", "integer" },
- { "LCDNumber", "Mode", "mode", "enum" },
- { "LCDNumber", "SegmentStyle", "segmentStyle", "enum" },
- { "LCDNumber", "SmallDecimalPoint", "smallDecimalPoint", "boolean" },
- { "LCDNumber", "Value", 0, 0 },
- { "Label", "AutoResize", 0, 0 },
- { "Label", "Indent", "indent", "integer" },
- { "Label", "Text", "text", "qstring" },
- { "Label", "TextFormat", "textFormat", "enum" },
- { "LineEdit", "EchoMode", "echoMode", "enum" },
- { "LineEdit", "FrameShown", "frame", "boolean" },
- { "LineEdit", "MaxLength", "maxLength", "integer" },
- { "LineEdit", "Text", "text", "qstring" },
- { "ListBox", "AutoScroll", 0, 0 },
- { "ListBox", "AutoUpdate", 0, 0 },
- { "ListBox", "ColumnMode", "columnMode", "enum" },
- { "ListBox", "DragSelect", 0, 0 },
- { "ListBox", "RowMode", "rowMode", "enum" },
- { "ListBox", "SelectionMode", "selectionMode", "enum" },
- { "ListBox", "SmoothScrolling", 0, 0 },
- { "ListView", "AllColumnsShowFocus", "allColumnsShowFocus", "boolean" },
- { "ListView", "HeaderInformation", 0, 0 },
- { "ListView", "ItemMargin", "itemMargin", "integer" },
- { "ListView", "MultiSelection", "multiSelection", "boolean" },
- { "ListView", "RootIsDecorated", "rootIsDecorated", "boolean" },
- { "ListView", "TreeStepSize", "treeStepSize", "boolean" },
- { "MultiLineEdit", "AutoUpdate", 0, 0 },
- { "MultiLineEdit", "EchoMode", 0, 0 },
- { "MultiLineEdit", "HorizontalMargin", 0, 0 },
- { "MultiLineEdit", "MaxLength", 0, 0 },
- { "MultiLineEdit", "MaxLineLength", 0, 0 },
- { "MultiLineEdit", "MaxLines", 0, 0 },
- { "MultiLineEdit", "OverwriteMode", 0, 0 },
- { "MultiLineEdit", "ReadOnly", 0, 0 },
- { "MultiLineEdit", "Text", 0, 0 },
- { "MultiLineEdit", "UndoDepth", "undoDepth", "integer" },
- { "MultiLineEdit", "UndoEnabled", 0, 0 },
- { "MultiLineEdit", "WordWrap", 0, 0 },
- { "MultiLineEdit", "WrapColumnOrWidth", 0, 0 },
- { "MultiLineEdit", "WrapPolicy", 0, 0 },
- { "ProgressBar", "CenterIndicator", "centerIndicator", "boolean" },
- { "ProgressBar", "IndicatorFollowsStyle", "indicatorFollowsStyle",
- "boolean" },
- { "ProgressBar", "Progress", "progress", "integer" },
- { "ProgressBar", "TotalSteps", "totalSteps", "integer" },
- { "PushButton", "AutoDefault", "autoDefault", "boolean" },
- { "PushButton", "Default", "default", "boolean" },
- { "PushButton", "IsMenuButton", 0, 0 },
- { "PushButton", "ToggleButton", "toggleButton", "boolean" },
- { "RadioButton", "Checked", "checked", "boolean" },
- { "ScrollBar", "Initial", "value", "integer" },
- { "ScrollBar", "LineStep", "lineStep", "integer" },
- { "ScrollBar", "MaxValue", "maxValue", "integer" },
- { "ScrollBar", "MinValue", "minValue", "integer" },
- { "ScrollBar", "Qt::Orientation", "orientation", "enum" },
- { "ScrollBar", "PageStep", "pageStep", "integer" },
- { "ScrollBar", "Tracking", "tracking", "boolean" },
- { "ScrollView", "DragAutoScroll", "dragAutoScroll", "boolean" },
- { "ScrollView", "HScrollBarMode", "hScrollBarMode", "enum" },
- { "ScrollView", "ResizePolicy", "resizePolicy", "enum" },
- { "ScrollView", "VScrollBarMode", "vScrollBarMode", "enum" },
- { "Slider", "Initial", "value", "integer" },
- { "Slider", "LineStep", "lineStep", "integer" },
- { "Slider", "MaxValue", "maxValue", "integer" },
- { "Slider", "MinValue", "minValue", "integer" },
- { "Slider", "Qt::Orientation", "orientation", "enum" },
- { "Slider", "PageStep", "pageStep", "integer" },
- { "Slider", "TickInterval", "tickInterval", "integer" },
- { "Slider", "Tickmarks", "tickmarks", "enum" },
- { "Slider", "Tracking", "tracking", "boolean" },
- { "SpinBox", "ButtonSymbols", "buttonSymbols", "enum" },
- { "SpinBox", "MaxValue", "maxValue", "integer" },
- { "SpinBox", "MinValue", "minValue", "integer" },
- { "SpinBox", "Prefix", "prefix", "qstring" },
- { "SpinBox", "SpecialValue", "specialValueText", "qstring" },
- { "SpinBox", "Step", "lineStep", "integer" },
- { "SpinBox", "Suffix", "suffix", "qstring" },
- { "SpinBox", "Wrapping", "wrapping", "boolean" },
- { "Splitter", "OpaqueResize", 0, 0 },
- { "Splitter", "Qt::Orientation", "orientation", "enum" },
- { "TabBar", "Shape", "tqshape", "enum" },
- { "TabBar", "TabNames", 0, 0 },
- { "TextView", "Context", 0, 0 },
- { "TextView", "LinkUnderline", "linkUnderline", "boolean" },
- { "TextView", "Text", "text", "qstring" },
- { "TextView", "TextFormat", "textFormat", "enum" },
- { "User", "UserClassHeader", 0, 0 },
- { "User", "UserClassName", 0, 0 },
- { 0, 0, 0, 0 }
-};
-
-/*
- This is the number of supported color groups in a palette, and
- supported color roles in a color group. Changing these constants is
- dangerous.
-*/
-static const int NumColorRoles = 14;
-
-static bool isTrue( const TQString& val )
-{
- return val.lower() == TQString( "true" );
-}
-
-static AttributeMap attribute( const TQString& name, const TQString& val )
-{
- AttributeMap attr;
- attr.insert( name, val );
- return attr;
-}
-
-static TQString entitize( const TQString& str )
-{
- TQString t = str;
- t.replace( '&', TQString("&amp;") );
- t.replace( '>', TQString("&gt;") );
- t.replace( '<', TQString("&lt;") );
- t.replace( '"', TQString("&quot;") );
- t.replace( '\'', TQString("&apos;") );
- return t;
-}
-
-TQString Dlg2Ui::alias( const TQString& name ) const
-{
- if ( yyAliasMap.contains(name) )
- return yyAliasMap[name];
- else
- return name;
-}
-
-TQString Dlg2Ui::opening( const TQString& tag, const AttributeMap& attr )
-{
- TQString t = TQChar( '<' ) + tag;
- AttributeMap::ConstIterator a = attr.begin();
- while ( a != attr.end() ) {
- t += TQChar( ' ' ) + a.key() + TQString( "=\"" ) + entitize( *a ) +
- TQChar( '"' );
- ++a;
- }
- t += TQChar( '>' );
- return t;
-}
-
-TQString Dlg2Ui::closing( const TQString& tag )
-{
- return opening( TQChar('/') + tag );
-}
-
-void Dlg2Ui::error( const TQString& message )
-{
- if ( numErrors++ == 0 )
- TQMessageBox::warning( 0, yyFileName, message );
-}
-
-void Dlg2Ui::syntaxError()
-{
- error( TQString("Sorry, I met a random syntax error. I did what I could, but"
- " that was not enough."
- "<p>You might want to write to"
- " <tt>qt-bugs@trolltech.com</tt> about this incident.") );
-}
-
-TQString Dlg2Ui::getTextValue( const TQDomNode& node )
-{
- if ( node.childNodes().count() > 1 ) {
- syntaxError();
- return TQString();
- }
-
- if ( node.childNodes().count() == 0 )
- return TQString();
-
- TQDomText child = node.firstChild().toText();
- if ( child.isNull() ) {
- syntaxError();
- return TQString();
- }
- TQString t = child.data().stripWhiteSpace();
- t.replace( "\\\\", "\\" );
- t.replace( "\\n", "\n" );
- return t;
-}
-
-TQVariant Dlg2Ui::getValue( const TQDomNodeList& tqchildren, const TQString& tagName,
- const TQString& type )
-{
- for ( int i = 0; i < (int) tqchildren.count(); i++ ) {
- TQDomNode n = tqchildren.item( i );
- if ( n.toElement().tagName() == tagName )
- return getValue( n.toElement(), tagName, type );
- }
- return TQVariant();
-}
-
-void Dlg2Ui::emitHeader()
-{
- yyOut += TQString( "<!DOCTYPE UI><UI version=\"3.0\" stdsetdef=\"1\">\n" );
-}
-
-void Dlg2Ui::emitFooter()
-{
- yyOut += TQString( "</UI>\n" );
-}
-
-void Dlg2Ui::emitSimpleValue( const TQString& tag, const TQString& value,
- const AttributeMap& attr )
-{
- yyOut += yyIndentStr + opening( tag, attr ) + entitize( value ) +
- closing( tag ) + TQChar( '\n' );
-}
-
-void Dlg2Ui::emitOpening( const TQString& tag, const AttributeMap& attr )
-{
- yyOut += yyIndentStr + opening( tag, attr ) + TQChar( '\n' );
- yyIndentStr += TQString( " " );
-}
-
-void Dlg2Ui::emitClosing( const TQString& tag )
-{
- yyIndentStr.truncate( yyIndentStr.length() - 4 );
- yyOut += yyIndentStr + closing( tag ) + TQChar( '\n' );
-}
-
-void Dlg2Ui::emitOpeningWidget( const TQString& className )
-{
- AttributeMap attr = attribute( TQString("class"), className );
- if ( yyGridColumn >= 0 ) {
- attr.insert( TQString("row"), TQString::number(yyGridRow) );
- attr.insert( TQString("column"), TQString::number(yyGridColumn) );
- yyGridColumn = -1;
- }
- emitOpening( TQString("widget"), attr );
-}
-
-TQString Dlg2Ui::widgetClassName( const TQDomElement& e )
-{
- if ( e.tagName() == TQString("User") ) {
- return getValue( e.childNodes(), TQString("UserClassName") )
- .toString();
- } else if ( e.tagName() == TQString("DlgWidget") ) {
- return TQString( "TQWidget" );
- } else {
- return TQChar( 'Q' ) + e.tagName();
- }
-}
-
-void Dlg2Ui::emitColor( const TQColor& color )
-{
- emitOpening( TQString("color") );
- emitSimpleValue( TQString("red"), TQString::number(color.red()) );
- emitSimpleValue( TQString("green"), TQString::number(color.green()) );
- emitSimpleValue( TQString("blue"), TQString::number(color.blue()) );
- emitClosing( TQString("color") );
-}
-
-void Dlg2Ui::emitColorGroup( const TQString& name, const TQColorGroup& group )
-{
- emitOpening( name );
- for ( int i = 0; i < NumColorRoles; i++ )
- emitColor( group.color((TQColorGroup::ColorRole) i) );
- emitClosing( name );
-}
-
-void Dlg2Ui::emitVariant( const TQVariant& val, const TQString& stringType )
-{
- if ( val.isValid() ) {
- switch ( val.type() ) {
- case TQVariant::String:
- emitSimpleValue( stringType, val.toString() );
- break;
- case TQVariant::CString:
- emitSimpleValue( TQString("cstring"), val.toString() );
- break;
- case TQVariant::Bool:
- emitSimpleValue( TQString("bool"),
- TQString(val.toBool() ? "true" : "false") );
- break;
- case TQVariant::Int:
- case TQVariant::UInt:
- emitSimpleValue( TQString("number"), val.toString() );
- break;
- case TQVariant::Rect:
- emitOpening( TQString("rect") );
- emitSimpleValue( TQString("x"), TQString::number(val.toRect().x()) );
- emitSimpleValue( TQString("y"), TQString::number(val.toRect().y()) );
- emitSimpleValue( TQString("width"),
- TQString::number(val.toRect().width()) );
- emitSimpleValue( TQString("height"),
- TQString::number(val.toRect().height()) );
- emitClosing( TQString("rect") );
- break;
- case TQVariant::Point:
- emitOpening( TQString("point") );
- emitSimpleValue( TQString("x"), TQString::number(val.toPoint().x()) );
- emitSimpleValue( TQString("y"), TQString::number(val.toPoint().y()) );
- emitClosing( TQString("point") );
- break;
- case TQVariant::Size:
- emitOpening( TQString("size") );
- emitSimpleValue( TQString("width"),
- TQString::number(val.toSize().width()) );
- emitSimpleValue( TQString("height"),
- TQString::number(val.toSize().height()) );
- emitClosing( TQString("size") );
- break;
- case TQVariant::Color:
- emitColor( val.toColor() );
- break;
- case TQVariant::Font:
- emitOpening( TQString("font") );
- emitSimpleValue( TQString("family"), val.toFont().family() );
- emitSimpleValue( TQString("pointsize"),
- TQString::number(val.toFont().pointSize()) );
- if ( val.toFont().bold() )
- emitSimpleValue( TQString("bold"), TQChar('1') );
- if ( val.toFont().italic() )
- emitSimpleValue( TQString("italic"), TQChar('1') );
- if ( val.toFont().underline() )
- emitSimpleValue( TQString("underline"), TQChar('1') );
- if ( val.toFont().strikeOut() )
- emitSimpleValue( TQString("strikeout"), TQChar('1') );
- emitClosing( TQString("font") );
- break;
- case TQVariant::Palette:
- emitOpening( TQString("palette") );
- emitColorGroup( TQString("active"), val.toPalette().active() );
- emitColorGroup( TQString("disabled"), val.toPalette().disabled() );
- emitColorGroup( TQString("inactive"), val.toPalette().inactive() );
- emitClosing( TQString("palette") );
- break;
- default:
- emitSimpleValue( TQString("fnord"), TQString() );
- }
- }
-}
-
-void Dlg2Ui::emitProperty( const TQString& prop, const TQVariant& val,
- const TQString& stringType )
-{
- emitOpening( TQString("property"), attribute(TQString("name"), prop) );
- emitVariant( val, stringType );
- emitClosing( TQString("property") );
-}
-
-void Dlg2Ui::emitAttribute( const TQString& attr, const TQVariant& val,
- const TQString& stringType )
-{
- emitOpening( TQString("attribute"), attribute(TQString("name"), attr) );
- emitVariant( val, stringType );
- emitClosing( TQString("attribute") );
-}
-
-void Dlg2Ui::emitOpeningLayout( bool needsWidget, const TQString& layoutKind,
- const TQString& name, int border,
- int autoBorder )
-{
- TQString namex = name;
-
- if ( namex.isEmpty() )
- namex = TQString( "Layout%1" ).arg( uniqueLayout++ );
-
- if ( needsWidget ) {
- emitOpeningWidget( TQString("TQLayoutWidget") );
- emitProperty( TQString("name"), namex.latin1() );
- }
- emitOpening( layoutKind );
- if ( !needsWidget )
- emitProperty( TQString("name"), namex.latin1() );
- if ( border != 5 )
- emitProperty( TQString("margin"), border );
- if ( autoBorder != 5 )
- emitProperty( TQString("spacing"), autoBorder );
- yyLayoutDepth++;
-}
-
-void Dlg2Ui::flushWidgets()
-{
- TQRegExp widgetForLayout( TQString("Q(?:[HV]Box|Grid)") );
-
- while ( !yyWidgetMap.isEmpty() ) {
- TQString className = widgetClassName( *yyWidgetMap.begin() );
- if ( !widgetForLayout.exactMatch(className) ) {
- emitOpeningWidget( className );
- emitWidgetBody( *yyWidgetMap.begin(), FALSE );
- emitClosing( TQString("widget") );
- }
- yyWidgetMap.remove( yyWidgetMap.begin() );
- }
-}
-
-void Dlg2Ui::emitClosingLayout( bool needsWidget, const TQString& layoutKind )
-{
- yyLayoutDepth--;
- /*
- TQt Designer can deal with layouted widgets and with
- fixed-position widgets, but not both at the same time. If such a
- thing happens, we arbitrarily put the fixed-position widgets in
- the tqlayout so that they at least show up in TQt Designer.
- */
- if ( yyLayoutDepth == 0 )
- flushWidgets();
-
- emitClosing( layoutKind );
- if ( needsWidget )
- emitClosing( TQString("widget") );
-}
-
-bool Dlg2Ui::isWidgetType( const TQDomElement& e )
-{
- return yyWidgetTypeSet.contains( e.tagName() );
-}
-
-void Dlg2Ui::emitSpacer( int spacing, int stretch )
-{
- TQString orientationStr;
- TQSize tqsizeHint;
- TQString sizeType = TQString( "Fixed" );
-
- if ( yyBoxKind == TQString("hbox") ) {
- orientationStr = TQString( "Horizontal" );
- tqsizeHint = TQSize( spacing, 20 );
- } else {
- orientationStr = TQString( "Vertical" );
- tqsizeHint = TQSize( 20, spacing );
- }
- if ( stretch > 0 )
- sizeType = TQString( "Expanding" );
-
- emitOpening( TQString("spacer") );
- emitProperty( TQString("name"),
- TQString("Spacer%1").arg(uniqueSpacer++).latin1() );
- emitProperty( TQString("orientation"), orientationStr, TQString("enum") );
- if ( spacing > 0 )
- emitProperty( TQString("tqsizeHint"), tqsizeHint, TQString("qsize") );
- emitProperty( TQString("sizeType"), sizeType, TQString("enum") );
- emitClosing( TQString("spacer") );
-}
-
-TQString Dlg2Ui::filteredFlags( const TQString& flags, const TQRegExp& filter )
-{
- TQRegExp evil( TQString("[^0-9A-Z_a-z|]") );
-
- TQString f = flags;
- f.replace( evil, TQString() );
- TQStringList splitted = TQStringList::split( TQChar('|'), f );
- return splitted.grep( filter ).join( TQChar('|') );
-}
-
-void Dlg2Ui::emitFrameStyleProperty( int style )
-{
- TQString tqshape;
- TQString shadow;
-
- switch ( style & TQFrame::MShape ) {
- case TQFrame::Box:
- tqshape = TQString( "Box" );
- break;
- case TQFrame::Panel:
- tqshape = TQString( "Panel" );
- break;
- case TQFrame::WinPanel:
- tqshape = TQString( "WinPanel" );
- break;
- case TQFrame::HLine:
- tqshape = TQString( "HLine" );
- break;
- case TQFrame::VLine:
- tqshape = TQString( "VLine" );
- break;
- case TQFrame::StyledPanel:
- tqshape = TQString( "StyledPanel" );
- break;
- case TQFrame::PopupPanel:
- tqshape = TQString( "PopupPanel" );
- break;
- case TQFrame::MenuBarPanel:
- tqshape = TQString( "MenuBarPanel" );
- break;
- case TQFrame::ToolBarPanel:
- tqshape = TQString( "ToolBarPanel" );
- break;
- case TQFrame::LineEditPanel:
- tqshape = TQString( "LineEditPanel" );
- break;
- case TQFrame::TabWidgetPanel:
- tqshape = TQString( "TabWidgetPanel" );
- break;
- case TQFrame::GroupBoxPanel:
- tqshape = TQString( "GroupBoxPanel" );
- break;
- default:
- tqshape = TQString( "NoFrame" );
- }
-
- switch ( style & TQFrame::MShadow ) {
- case TQFrame::Raised:
- shadow = TQString( "Raised" );
- break;
- case TQFrame::Sunken:
- shadow = TQString( "Sunken" );
- break;
- default:
- shadow = TQString( "Plain" );
- }
-
- emitProperty( TQString("frameShape"), tqshape, TQString("enum") );
- emitProperty( TQString("frameShadow"), shadow, TQString("enum") );
-}
-
-void Dlg2Ui::emitWidgetBody( const TQDomElement& e, bool layouted )
-{
- TQRegExp align( TQString("^(?:Align|WordBreak$)") );
- TQRegExp frameShape( TQString(
- "^(?:NoFrame|Box|(?:Win|Styled|Popup|(?:Menu|Tool)Bar)?Panel|"
- "[HV]Line)$") );
- TQRegExp frameShadow( TQString( "^(?:Plain|Raised|Sunken)$") );
- TQRegExp numeric( TQString("[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+") );
- TQRegExp connex( TQString(
- "\\s*\\[(BaseClass|P(?:ublic|rotected))\\]\\s*([0-9A-Z_a-z]+)\\s*"
- "-->\\s*([0-9A-Z_a-z]+)\\s*(\\([^()]*\\))\\s*") );
- TQRegExp qdialogSlots( TQString(
- "done\\(\\s*int\\s*\\)|(?:accept|reject)\\(\\s*\\)") );
-
- TQString userClassHeader;
- TQString userClassName;
- TQString parentTagName;
- TQString name;
- TQString variableName;
- TQMap<TQString, int> pp;
-
- TQDomNode n = e;
- while ( !n.isNull() ) {
- if ( isWidgetType(n.toElement()) ) {
- parentTagName = n.toElement().tagName();
- pp = yyPropertyMap[parentTagName];
- n = n.firstChild();
- } else {
- TQString tagName = n.toElement().tagName();
-
- TQMap<TQString, int>::ConstIterator p = pp.find( tagName );
- if ( p == pp.end() ) {
- /*
- These properties are not in the propertyDefs table,
- since they are found in many classes anyway and need
- to be treated the same in each case.
- */
- if ( tagName == TQString("Alignement") ||
- tagName == TQString("Alignment") ) {
- TQString flags = getValue( n.toElement(), tagName )
- .toString();
- flags = filteredFlags( flags, align );
- if ( !flags.isEmpty() )
- emitProperty( TQString("tqalignment"), flags,
- TQString("set") );
- } else if ( tagName == TQString("ItemList") ) {
- TQDomNode child = n.firstChild();
- while ( !child.isNull() ) {
- if ( child.toElement().tagName() == TQString("Item") ) {
- TQString text = getTextValue( child );
- emitOpening( TQString("item") );
- emitProperty( TQString("text"), text );
- emitClosing( TQString("item") );
- }
- child = child.nextSibling();
- }
- }
- } else {
- TQString propertyName( propertyDefs[*p].qtName );
-
- if ( propertyName.isEmpty() ) {
- /*
- These properties are in the propertyDefs table,
- but they have no direct TQt equivalent.
- */
- if ( parentTagName == TQString("ComboBox") ) {
- if ( tagName == TQString("Style") ) {
- if ( getTextValue(n) == TQString("ReadWrite") )
- emitProperty( TQString("editable"),
- TQVariant(TRUE, 0) );
- }
- } else if ( parentTagName == TQString("DlgWidget") ) {
- if ( tagName == TQString("Name") ) {
- name = getTextValue( n );
- } else if ( tagName == TQString("Rect") ) {
- TQRect rect = getValue( n.toElement(), tagName,
- TQString("qrect") )
- .toRect();
- if ( !layouted )
- emitProperty( TQString("geometry"), rect,
- TQString("qrect") );
- } else if ( tagName == TQString("SignalConnection") ) {
- TQDomNode child = n.firstChild();
- while ( !child.isNull() ) {
- if ( child.toElement().tagName() ==
- TQString("Signal") ) {
- TQString text = getTextValue( child );
- if ( connex.exactMatch(text) ) {
- DlgConnection c;
- c.sender = getValue(
- n.parentNode().childNodes(),
- TQString("Name") ).toString();
- c.signal = connex.cap( 2 ) +
- connex.cap( 4 );
- c.slot = connex.cap( 3 ) +
- connex.cap( 4 );
- yyConnections.append( c );
-
- if ( connex.cap(1) !=
- TQString("BaseClass") &&
- !qdialogSlots.exactMatch(c.slot) )
- yySlots.insert( c.slot,
- connex.cap(1) );
- }
- }
- child = child.nextSibling();
- }
- } else if ( tagName == TQString("Variable") ) {
- variableName = getTextValue( n );
- }
- } else if ( parentTagName == TQString("Frame") ) {
- if ( tagName == TQString("Style") ) {
- int style = getValue( n.toElement(), tagName,
- TQString("integer") ).toInt();
- emitFrameStyleProperty( style );
- }
- } else if ( parentTagName == TQString("LCDNumber") ) {
- if ( tagName == TQString("Value") ) {
- TQString text = getValue( n.toElement(), tagName )
- .toString();
- if ( numeric.exactMatch(text) )
- emitProperty( TQString("value"),
- text.toDouble() );
- }
- } else if ( parentTagName == TQString("ListView") ) {
- if ( tagName == TQString("HeaderInformation") ) {
- int columnNo = 1;
- TQDomNode child = n.firstChild();
- while ( !child.isNull() ) {
- if ( child.toElement().tagName() ==
- TQString("Header") ) {
- TQString text = getValue( child.childNodes(),
- TQString("Text") )
- .toString();
- if ( text.isEmpty() )
- text = TQString( "Column %1" )
- .arg( columnNo );
- emitOpening( TQString("column") );
- emitProperty( TQString("text"), text );
- emitClosing( TQString("column") );
- }
- child = child.nextSibling();
- columnNo++;
- }
- }
- } else if ( parentTagName == TQString("TabBar") ) {
- if ( tagName == TQString("TabNames") ) {
- TQDomNode child = n.firstChild();
- while ( !child.isNull() ) {
- if ( child.toElement().tagName() ==
- TQString("Tab") ) {
- TQString text = getTextValue( child );
- emitOpeningWidget( TQString("TQWidget") );
- emitProperty( TQString("name"), "tab" );
- emitAttribute( TQString("title"), text );
- emitClosing( TQString("widget") );
- }
- child = child.nextSibling();
- }
- }
- } else if ( parentTagName == TQString("User") ) {
- if ( tagName == TQString("UserClassHeader") ) {
- userClassHeader = getTextValue( n );
- } else if ( tagName == TQString("UserClassName") ) {
- userClassName = getTextValue( n );
- }
- }
- } else {
- /*
- These properties are in the propertyDefs table;
- they have a direct TQt equivalent.
- */
- TQString type( propertyDefs[*p].type );
- TQVariant val = getValue( n.toElement(), tagName, type );
-
- if ( type == TQString("qstring") )
- type = TQString( "string" );
-
- bool omit = FALSE;
- if ( propertyName == TQString("backgroundOrigin") &&
- val.toString() == TQString("WidgetOrigin") )
- omit = TRUE;
- if ( propertyName == TQString("enabled") && val.toBool() )
- omit = TRUE;
- if ( propertyName == TQString("tqminimumSize") &&
- val.toSize() == TQSize(-1, -1) )
- omit = TRUE;
- if ( propertyName == TQString("tqmaximumSize") &&
- val.toSize() == TQSize(32767, 32767) )
- omit = TRUE;
-
- if ( !omit )
- emitProperty( propertyName, val, type );
- }
- }
- n = n.nextSibling();
- }
- }
-
- if ( !variableName.isEmpty() ) {
- yyAliasMap.insert( name, variableName );
- name = variableName;
- }
- if ( !name.isEmpty() )
- emitProperty( TQString("name"), name.latin1() );
-
- if ( !userClassName.isEmpty() )
- yyCustomWidgets.insert( userClassName, userClassHeader );
-}
-
-bool Dlg2Ui::checkTagName( const TQDomElement& e, const TQString& tagName )
-{
- bool ok = ( e.tagName() == tagName );
- if ( !ok )
- syntaxError();
- return ok;
-}
-
-TQString Dlg2Ui::normalizeType( const TQString& type )
-{
- TQString t = type;
- if ( t.isEmpty() || t == TQString("enum") || t == TQString( "qcstring" ) ||
- t == TQString("set") )
- t = TQString( "qstring" );
- return t;
-}
-
-TQVariant Dlg2Ui::getValue( const TQDomElement& e, const TQString& tagName,
- const TQString& type )
-{
- TQVariant val;
-
- if ( e.tagName() != tagName )
- return val;
-
- TQString t = e.attributes().namedItem( "type" ).toAttr().value();
- if ( normalizeType(t) != normalizeType(type) )
- return val;
-
- if ( type == TQString("integer") ) {
- return getTextValue( e ).toInt();
- } else if ( type == TQString("boolean") ) {
- return TQVariant( isTrue(getTextValue(e)), 0 );
- } else if ( type == TQString("double") ) {
- return getTextValue( e ).toDouble();
- } else if ( type == TQString("qcstring") ) {
- return getTextValue( e ).latin1();
- } else if ( type == TQString("enum") || type == TQString("qstring") ||
- type == TQString("set") ) {
- return getTextValue( e );
- } else {
- TQDomNodeList tqchildren = e.childNodes();
-
- if ( type == TQString("qsize") ) {
- int width = getValue( tqchildren, TQString("Width"),
- TQString("integer") ).toInt();
- int height = getValue( tqchildren, TQString("Height"),
- TQString("integer") ).toInt();
- return TQSize( width, height );
- } else if ( type == TQString("qrect") ) {
- int x = getValue( tqchildren, TQString("X"), TQString("integer") )
- .toInt();
- int y = getValue( tqchildren, TQString("Y"), TQString("integer") )
- .toInt();
- int width = getValue( tqchildren, TQString("Width"),
- TQString("integer") ).toInt();
- int height = getValue( tqchildren, TQString("Height"),
- TQString("integer") ).toInt();
- return TQRect( x, y, width, height );
- } else if ( type == TQString("qpoint") ) {
- int x = getValue( tqchildren, TQString("X"), TQString("integer") )
- .toInt();
- int y = getValue( tqchildren, TQString("Y"), TQString("integer") )
- .toInt();
- return TQPoint( x, y );
- } else if ( type == TQString("qpalette") ) {
- TQColorGroup active = getValue( tqchildren, TQString("Active"),
- TQString("qcolorgroup") )
- .toColorGroup();
- TQColorGroup disabled = getValue( tqchildren, TQString("Disabled"),
- TQString("qcolorgroup") )
- .toColorGroup();
- TQColorGroup inactive = getValue( tqchildren, TQString("Inactive"),
- TQString("qcolorgroup") )
- .toColorGroup();
- return TQPalette( active, disabled, inactive );
- } else if ( type == TQString("qfont") ) {
- TQString family = getValue( tqchildren, TQString("Family"),
- TQString("qstring") ).toString();
- int pointSize = getValue( tqchildren, TQString("PointSize"),
- TQString("integer") ).toInt();
- int weight = getValue( tqchildren, TQString("weight"),
- TQString("integer") ).toInt();
- bool italic = getValue( tqchildren, TQString("Italic"),
- TQString("boolean") ).toBool();
- bool underline = getValue( tqchildren, TQString("Underline"),
- TQString("boolean") ).toBool();
- bool strikeOut = getValue( tqchildren, TQString("StrikeOut"),
- TQString("boolean") ).toBool();
- int tqstyleHint = getValue( tqchildren, TQString("StyleHint"),
- TQString("integer") ).toInt();
-
- TQFont f;
- if ( !family.isEmpty() )
- f.setFamily( family );
- if ( pointSize != 0 )
- f.setPointSize( pointSize );
- if ( weight != 0 )
- f.setWeight( weight );
- f.setItalic( italic );
- f.setUnderline( underline );
- f.setStrikeOut( strikeOut );
- if ( tqstyleHint != 0 )
- f.setStyleHint( (TQFont::StyleHint) tqstyleHint );
- return f;
- } else if ( type == TQString("qcolor") ) {
- // if any component missing, zero is to be assumed
- int red = getValue( tqchildren, TQString("Red"), TQString("integer") )
- .toInt();
- int green = getValue( tqchildren, TQString("Green"),
- TQString("integer") ).toInt();
- int blue = getValue( tqchildren, TQString("Blue"), TQString("integer") )
- .toInt();
- return TQColor( red, green, blue );
- } else if ( type == TQString("qcolorgroup") ) {
- static const TQColorGroup::ColorRole roles[NumColorRoles] = {
- TQColorGroup::Foreground, TQColorGroup::Button,
- TQColorGroup::Light, TQColorGroup::Midlight, TQColorGroup::Dark,
- TQColorGroup::Mid, TQColorGroup::Text, TQColorGroup::BrightText,
- TQColorGroup::ButtonText, TQColorGroup::Base,
- TQColorGroup::Background, TQColorGroup::Shadow,
- TQColorGroup::Highlight, TQColorGroup::HighlightedText
- };
- static const char * const roleNames[NumColorRoles] = {
- "Foreground", "Button", "Light", "MidLight", "Dark", "Mid",
- "Text", "BrightText", "ButtonText", "Base", "Background",
- "Shadow", "HighLighted", "HighLightedText"
- };
- TQColorGroup group;
-
- for ( int i = 0; i < NumColorRoles; i++ )
- group.setColor( roles[i],
- getValue(tqchildren, TQString(roleNames[i]),
- TQString("qcolor")).toColor() );
- return group;
- } else {
- syntaxError();
- }
- }
- return val;
-}
-
-void Dlg2Ui::matchDialogCommon( const TQDomElement& dialogCommon )
-{
- if ( !checkTagName(dialogCommon, TQString("DialogCommon")) )
- return;
-
- TQString sourceDir;
- TQString classHeader;
- TQString classSource;
- TQString dataHeader;
- TQString dataSource;
- TQString dataName;
- TQString windowBaseClass( "TQDialog" );
- bool isCustom = FALSE;
- TQString customBaseHeader;
- TQString windowCaption;
-
- yyClassName = "Form1";
-
- TQDomNode n = dialogCommon.firstChild();
- while ( !n.isNull() ) {
- TQString tagName = n.toElement().tagName();
- TQString val = getTextValue( n );
-
- if ( tagName == TQString("SourceDir") ) {
- sourceDir = val;
- } else if ( tagName == TQString("ClassHeader") ) {
- classHeader = val;
- } else if ( tagName == TQString("ClassSource") ) {
- classSource = val;
- } else if ( tagName == TQString("ClassName") ) {
- yyClassName = val;
- } else if ( tagName == TQString("DataHeader") ) {
- dataHeader = val;
- } else if ( tagName == TQString("DataSource") ) {
- dataSource = val;
- } else if ( tagName == TQString("DataName") ) {
- dataName = val;
- } else if ( tagName == TQString("WindowBaseClass") ) {
- if ( val == TQString("Custom") )
- isCustom = TRUE;
- else
- windowBaseClass = val;
- } else if ( tagName == TQString("IsModal") ) {
- } else if ( tagName == TQString("CustomBase") ) {
- windowBaseClass = val;
- } else if ( tagName == TQString("CustomBaseHeader") ) {
- customBaseHeader = val;
- } else if ( tagName == TQString("WindowCaption") ) {
- windowCaption = val;
- }
- n = n.nextSibling();
- }
-
- emitSimpleValue( TQString("class"), yyClassName );
- emitOpeningWidget( windowBaseClass );
-
- if ( windowCaption.isEmpty() )
- windowCaption = yyClassName;
- emitProperty( TQString("name"), yyClassName.latin1() );
- emitProperty( TQString("caption"), windowCaption );
-
- if ( isCustom )
- yyCustomWidgets.insert( windowBaseClass, customBaseHeader );
-}
-
-bool Dlg2Ui::needsTQLayoutWidget( const TQDomElement& e )
-{
- TQRegExp widgetExists( TQString("WidgetLayout|Layout_Widget") );
-
- // we should also check that the widget is not a TQHBox, TQVBox, or TQGrid
- TQString grandpa = e.parentNode().parentNode().toElement().tagName();
- return !widgetExists.exactMatch( grandpa );
-}
-
-void Dlg2Ui::matchBoxLayout( const TQDomElement& boxLayout )
-{
- TQString directionStr;
- TQString prevBoxKind = yyBoxKind;
- int border = 5;
- int autoBorder = 5;
- TQString name;
- bool needsWidget = needsTQLayoutWidget( boxLayout );
- bool opened = FALSE;
-
- TQDomNode n = boxLayout.firstChild();
- while ( !n.isNull() ) {
- TQString tagName = n.toElement().tagName();
-
- if ( tagName == TQString("Children") ) {
- if ( !opened ) {
- emitOpeningLayout( needsWidget, yyBoxKind, name, border,
- autoBorder );
- if ( !directionStr.isEmpty() )
- emitProperty( TQString("direction"), directionStr,
- TQString("enum") );
- opened = TRUE;
- }
- matchLayout( n.toElement() );
- } else {
- TQString val = getTextValue( n );
-
- if ( tagName == TQString("Direction") ) {
- if ( val == TQString("LeftToRight") ) {
- yyBoxKind = TQString( "hbox" );
- } else if ( val == TQString("RightToLeft") ) {
- directionStr = val;
- yyBoxKind = TQString( "hbox" );
- } else if ( val == TQString("TopToBottom") ) {
- yyBoxKind = TQString( "vbox" );
- } else if ( val == TQString("BottomToTop") ) {
- directionStr = val;
- yyBoxKind = TQString( "vbox" );
- } else {
- syntaxError();
- }
- } else if ( tagName == TQString("Border") ) {
- border = val.toInt();
- } else if ( tagName == TQString("AutoBorder") ) {
- autoBorder = val.toInt();
- } else if ( tagName == TQString("Name") ) {
- name = val;
- }
- }
-
- n = n.nextSibling();
- }
- if ( opened ) {
- emitClosingLayout( needsWidget, yyBoxKind );
- yyBoxKind = prevBoxKind;
- }
-}
-
-void Dlg2Ui::matchBoxSpacing( const TQDomElement& boxSpacing )
-{
- int spacing = 7;
-
- TQDomNode n = boxSpacing.firstChild();
- while ( !n.isNull() ) {
- TQString val = getTextValue( n );
-
- if ( n.toElement().tagName() == TQString("Spacing") )
- spacing = val.toInt();
- n = n.nextSibling();
- }
- emitSpacer( spacing, 0 );
-}
-
-void Dlg2Ui::matchBoxStretch( const TQDomElement& boxStretch )
-{
- int stretch = 1;
-
- TQDomNode n = boxStretch.firstChild();
- while ( !n.isNull() ) {
- TQString val = getTextValue( n );
-
- if ( n.toElement().tagName() == TQString("Stretch") )
- stretch = val.toInt();
- n = n.nextSibling();
- }
- emitSpacer( 0, stretch );
-}
-
-void Dlg2Ui::matchGridLayout( const TQDomElement& gridLayout )
-{
- int oldGridRow = yyGridRow;
- int oldGridColumn = yyGridColumn;
- int border = 5;
- int autoBorder = 5;
- TQString name;
- TQString menu;
- bool needsWidget = needsTQLayoutWidget( gridLayout );
- bool opened = FALSE;
-
- TQDomNode n = gridLayout.firstChild();
- while ( !n.isNull() ) {
- TQString tagName = n.toElement().tagName();
-
- if ( tagName == TQString("Children") ) {
- if ( !opened ) {
- emitOpeningLayout( needsWidget, TQString("grid"), name, border,
- autoBorder );
- yyGridRow = -1;
- yyGridColumn = -1;
- opened = TRUE;
- }
- matchLayout( n.toElement() );
- } else {
- if ( tagName == TQString("Border") ) {
- border = getTextValue( n ).toInt();
- } else if ( tagName == TQString("AutoBorder") ) {
- autoBorder = getTextValue( n ).toInt();
- } else if ( tagName == TQString("Name") ) {
- name = getTextValue( n );
- } else if ( tagName == TQString("Menu") ) {
- menu = getTextValue( n );
- }
- }
- n = n.nextSibling();
- }
- if ( opened )
- emitClosingLayout( needsWidget, TQString("grid") );
- yyGridRow = oldGridRow;
- yyGridColumn = oldGridColumn;
-}
-
-void Dlg2Ui::matchGridRow( const TQDomElement& gridRow )
-{
- yyGridRow++;
-
- TQDomNode n = gridRow.firstChild();
- while ( !n.isNull() ) {
- TQString tagName = n.toElement().tagName();
-
- if ( tagName == TQString("Children") ) {
- yyGridColumn = 0;
- matchLayout( n.toElement() );
- }
- n = n.nextSibling();
- }
-}
-
-void Dlg2Ui::matchGridSpacer( const TQDomElement& gridSpacer )
-{
- if ( !gridSpacer.firstChild().isNull() )
- syntaxError();
-}
-
-void Dlg2Ui::matchLayoutWidget( const TQDomElement& layoutWidget )
-{
- TQDomElement tqchildren;
- TQString widget;
-
- TQDomNode n = layoutWidget.firstChild();
- while ( !n.isNull() ) {
- TQString tagName = n.toElement().tagName();
-
- if ( tagName == TQString("Children") )
- tqchildren = n.toElement();
- else if ( tagName == TQString("Widget") )
- widget = getTextValue( n );
- n = n.nextSibling();
- }
-
- if ( !widget.isEmpty() ) {
- TQMap<TQString, TQDomElement>::Iterator w = yyWidgetMap.find( widget );
- if ( w == yyWidgetMap.end() ) {
- syntaxError();
- } else {
- TQString className = widgetClassName( *w );
- if ( className == TQString("TQHBox") ||
- className == TQString("TQVBox") ) {
- bool needsWidget = needsTQLayoutWidget( layoutWidget );
-
- TQString prevBoxKind = yyBoxKind;
- yyBoxKind = className.mid( 1 ).lower();
-
- int spacing = getValue( (*w).childNodes(), TQString("Spacing"),
- TQString("integer") ).toInt();
- if ( spacing < 1 )
- spacing = 5;
-
- emitOpeningLayout( needsWidget, yyBoxKind, widget, 0, spacing );
- if ( !tqchildren.isNull() )
- matchLayout( tqchildren );
- emitClosingLayout( needsWidget, yyBoxKind );
- yyBoxKind = prevBoxKind;
- } else if ( className == TQString("TQGrid") ) {
- bool needsWidget = needsTQLayoutWidget( layoutWidget );
- int n = 0;
-
- TQString direction = getValue( (*w).childNodes(),
- TQString("Direction") ).toString();
- int rowsCols = getValue( (*w).childNodes(), TQString("RowCols"),
- TQString("integer") ).toInt();
- if ( rowsCols == 0 )
- rowsCols = getValue( (*w).childNodes(),
- TQString("RowsCols"),
- TQString("integer") ).toInt();
- if ( rowsCols < 1 )
- rowsCols = 5;
- int spacing = getValue( (*w).childNodes(), TQString("Spacing"),
- TQString("integer") ).toInt();
- if ( spacing < 1 )
- spacing = 5;
-
- emitOpeningLayout( needsWidget, TQString("grid"), widget, 0,
- spacing );
-
- TQDomNode child = tqchildren.firstChild();
- while ( !child.isNull() ) {
- if ( direction == TQString("Vertical") ) {
- yyGridColumn = n / rowsCols;
- yyGridRow = n % rowsCols;
- } else {
- yyGridColumn = n % rowsCols;
- yyGridRow = n / rowsCols;
- }
- matchBox( child.toElement() );
- n++;
- child = child.nextSibling();
- }
- yyGridColumn = -1;
- yyGridRow = -1;
- emitClosingLayout( needsWidget, TQString("grid") );
- } else {
- emitOpeningWidget( widgetClassName(*w) );
- emitWidgetBody( *w, TRUE );
- if ( !tqchildren.isNull() )
- matchLayout( tqchildren );
- emitClosing( TQString("widget") );
- }
- yyWidgetMap.remove( w );
- }
- }
-}
-
-void Dlg2Ui::matchBox( const TQDomElement& box )
-{
- /*
- What is this jump table doing in here?
- */
- static const struct {
- const char *tagName;
- void (Dlg2Ui::*matchFunc)( const TQDomElement& );
- } jumpTable[] = {
- { "Box_Layout", &Dlg2Ui::matchBoxLayout },
- { "Box_Spacing", &Dlg2Ui::matchBoxSpacing },
- { "Box_Stretch", &Dlg2Ui::matchBoxStretch },
- { "Grid_Layout", &Dlg2Ui::matchGridLayout },
- { "Grid_Row", &Dlg2Ui::matchGridRow },
- { "Grid_Spacer", &Dlg2Ui::matchGridSpacer },
- { "Layout_Widget", &Dlg2Ui::matchLayoutWidget },
- { 0, 0 }
- };
-
- int i = 0;
- while ( jumpTable[i].tagName != 0 ) {
- if ( TQString(jumpTable[i].tagName) == box.tagName() ) {
- (this->*jumpTable[i].matchFunc)( box );
- break;
- }
- i++;
- }
- if ( jumpTable[i].tagName == 0 )
- syntaxError();
-}
-
-void Dlg2Ui::matchLayout( const TQDomElement& tqlayout )
-{
- int column = yyGridColumn;
-
- TQDomNode n = layout.firstChild();
- while ( !n.isNull() ) {
- if ( column != -1 )
- yyGridColumn = column++;
- matchBox( n.toElement() );
- n = n.nextSibling();
- }
-}
-
-void Dlg2Ui::matchWidgetLayoutCommon( const TQDomElement& widgetLayoutCommon )
-{
- TQDomNodeList tqchildren = widgetLayoutCommon.childNodes();
-
- /*
- Since we do not respect the spacing and margins specified in
- the .dlg file, the specified tqgeometry is slightly wrong (too
- small). It still seems to be better to take it in.
- */
-#if 1
- TQPoint initialPos = getValue( tqchildren, TQString("InitialPos"),
- TQString("qpoint") ).toPoint();
- TQSize size = getValue( tqchildren, TQString("Size"), TQString("qsize") )
- .toSize();
-#endif
- TQSize minSize = getValue( tqchildren, TQString("MinSize"), TQString("qsize") )
- .toSize();
- TQSize maxSize = getValue( tqchildren, TQString("MaxSize"), TQString("qsize") )
- .toSize();
-
-#if 1
- if ( initialPos == TQPoint(-1, -1) )
- initialPos = TQPoint( 0, 0 );
-
- emitProperty( TQString("geometry"), TQRect(initialPos, size) );
-#endif
- if ( minSize != TQSize(-1, -1) )
- emitProperty( TQString("tqminimumSize"), minSize );
- if ( maxSize != TQSize(32767, 32767) )
- emitProperty( TQString("tqmaximumSize"), maxSize );
-}
-
-void Dlg2Ui::matchWidget( const TQDomElement& widget )
-{
- TQString name;
-
- TQDomNode n = widget;
- while ( !n.isNull() ) {
- if ( isWidgetType(n.toElement()) ) {
- n = n.firstChild();
- } else {
- if ( n.toElement().tagName() == TQString("Name") ) {
- name = getTextValue( n );
- break;
- }
- n = n.nextSibling();
- }
- }
- if ( name.isEmpty() )
- name = TQString( "Widget%1" ).arg( uniqueWidget++ );
-
- if ( yyWidgetMap.contains(name) )
- syntaxError();
- yyWidgetMap.insert( name, widget );
-}
-
-void Dlg2Ui::matchWidgets( const TQDomElement& widgets )
-{
- TQDomNode n = widgets.firstChild();
- while ( !n.isNull() ) {
- matchWidget( n.toElement() );
- n = n.nextSibling();
- }
-}
-
-void Dlg2Ui::matchTabOrder( const TQDomElement& tabOrder )
-{
- TQDomNode n = tabOrder.firstChild();
- while ( !n.isNull() ) {
- if ( n.toElement().tagName() == TQString("Widget") )
- yyTabStops.append( getTextValue(n.toElement()) );
- n = n.nextSibling();
- }
-}
-
-void Dlg2Ui::matchWidgetLayout( const TQDomElement& widgetLayout )
-{
- if ( !checkTagName(widgetLayout, TQString("WidgetLayout")) )
- return;
-
- TQDomNode n = widgetLayout.firstChild();
- while ( !n.isNull() ) {
- TQString tagName = n.toElement().tagName();
-
- if ( tagName == TQString("WidgetLayoutCommon") ) {
- matchWidgetLayoutCommon( n.toElement() );
- } else if ( tagName == TQString("Widgets") ) {
- matchWidgets( n.toElement() );
- } else if ( tagName == TQString("TabOrder") ) {
- matchTabOrder( n.toElement() );
- } else if ( tagName == TQString("Layout") ) {
- matchLayout( n.toElement() );
- }
- n = n.nextSibling();
- }
-}
-
-void Dlg2Ui::matchDialog( const TQDomElement& dialog )
-{
- if ( !checkTagName(dialog, TQString("Dialog")) )
- return;
-
- TQDomNodeList nodes = dialog.childNodes();
- if ( nodes.count() == 2 ) {
- matchDialogCommon( nodes.item(0).toElement() );
- matchWidgetLayout( nodes.item(1).toElement() );
- flushWidgets();
- emitClosing( TQString("widget") );
-
- if ( !yyCustomWidgets.isEmpty() ) {
- emitOpening( TQString("customwidgets") );
-
- TQMap<TQString, TQString>::Iterator w = yyCustomWidgets.begin();
- while ( w != yyCustomWidgets.end() ) {
- emitOpening( TQString("customwidget") );
- emitSimpleValue( TQString("class"), w.key() );
- if ( !(*w).isEmpty() )
- emitSimpleValue( TQString("header"), *w,
- attribute(TQString("location"),
- TQString("local")) );
- emitClosing( TQString("customwidget") );
- ++w;
- }
- emitClosing( TQString("customwidgets") );
- }
-
- if ( yyConnections.count() + yySlots.count() > 0 ) {
- emitOpening( TQString("connections") );
-
- TQValueList<DlgConnection>::Iterator c = yyConnections.begin();
- while ( c != yyConnections.end() ) {
- emitOpening( TQString("connection") );
- emitSimpleValue( TQString("sender"), alias((*c).sender) );
- emitSimpleValue( TQString("signal"), (*c).signal );
- emitSimpleValue( TQString("receiver"), yyClassName );
- emitSimpleValue( TQString("slot"), (*c).slot );
- emitClosing( TQString("connection") );
- ++c;
- }
-
- TQMap<TQString, TQString>::Iterator s = yySlots.begin();
- while ( s != yySlots.end() ) {
- AttributeMap attr;
- attr.insert( TQString("access"), *s );
- attr.insert( TQString("language"), TQString("C++") );
- attr.insert( TQString("returntype"), TQString("void") );
- emitSimpleValue( TQString("slot"), s.key(), attr );
- ++s;
- }
- emitClosing( TQString("connections") );
- }
-
- if ( !yyTabStops.isEmpty() ) {
- emitOpening( TQString("tabstops") );
- TQStringList::ConstIterator t = yyTabStops.begin();
- while ( t != yyTabStops.end() ) {
- emitSimpleValue( TQString("tabstop"), alias(*t) );
- ++t;
- }
- emitClosing( TQString("tabstops") );
- }
- }
-}
-
-TQStringList Dlg2Ui::convertTQtArchitectDlgFile( const TQString& fileName )
-{
- int i;
-
- yyFileName = fileName;
- yyLayoutDepth = 0;
- yyGridRow = -1;
- yyGridColumn = -1;
-
- numErrors = 0;
- uniqueLayout = 1;
- uniqueSpacer = 1;
- uniqueWidget = 1;
-
- i = 0;
- while ( widgetTypes[i] != 0 ) {
- yyWidgetTypeSet.insert( TQString(widgetTypes[i]), 0 );
- i++;
- }
-
- i = 0;
- while ( propertyDefs[i].widgetName != 0 ) {
- yyPropertyMap[TQString(propertyDefs[i].widgetName)]
- .insert( TQString(propertyDefs[i].architectName), i );
- i++;
- }
-
- TQDomDocument doc( TQString("TQtArch") );
- TQFile f( fileName );
- if ( !f.open(IO_ReadOnly) ) {
- return TQStringList();
- }
- if ( !doc.setContent(&f) ) {
- TQString firstLine;
- f.at( 0 );
- f.readLine( firstLine, 128 );
- firstLine = firstLine.stripWhiteSpace();
- if ( firstLine.startsWith(TQString("DlgEdit:v1")) ) {
- error( TQString("This file is a TQt Architect 1.x file. TQt Designer"
- " can only read XML dialog files, as generated by TQt"
- " Architect 2.1 or above."
- "<p>To convert this file to the right format,"
- " first install TQt Architect 2.1 (available at"
- " <tt>http://qtarch.sourceforge.net/</tt>). Use the"
- " <i>update20.pl</i> Perl script to update the file"
- " to the 2.0 format. Load that file in TQt"
- " Architect and save it. The file should now be in"
- " XML format and loadable in TQt Designer.") );
- } else if ( firstLine.startsWith(TQString("DlgEdit::v2")) ) {
- error( TQString("This file is a TQt Architect 2.0 file. TQt Designer"
- " can only read XML dialog files, as generated by TQt"
- " Architect 2.1 or above."
- "<p>To convert this file to the right format,"
- " first install TQt Architect 2.1 (available at"
- " <tt>http://qtarch.sourceforge.net/</tt>). Load the"
- " 2.0 file in TQt Architect and save it. The file"
- " should now be in XML format and loadable in TQt"
- " Designer.") );
- } else {
- error( TQString("The file you gave me is not an XML file, as far as"
- " I can tell.") );
- }
-
- f.close();
- return TQStringList();
- }
- f.close();
-
- TQDomElement root = doc.documentElement();
- if ( root.tagName() != TQString("TQtArch") ||
- root.attributeNode("type").value() != TQString("Dialog") ) {
- error( TQString("The file you gave me is not a TQt Architect dialog"
- " file.") );
- return TQStringList();
- }
-
- emitHeader();
-
- TQDomNode n = root.firstChild();
- while ( !n.isNull() ) {
- // there should be only one
- matchDialog( n.toElement() );
- n = n.nextSibling();
- }
-
- emitFooter();
-
- TQFile outf;
- TQString outFileName = yyClassName + TQString( ".ui" );
-
- outf.setName( outFileName );
- if ( !outf.open(IO_WriteOnly) ) {
- qWarning( "dlg2ui: Could not open output file '%s'",
- outFileName.latin1() );
- return TQStringList();
- }
-
- TQTextStream out;
- out.setEncoding( TQTextStream::Latin1 );
- out.setDevice( &outf );
- out << yyOut;
- outf.close();
-
- return TQStringList( outFileName );
-}
diff --git a/tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.h b/tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.h
deleted file mode 100644
index 99564ad..0000000
--- a/tqtinterface/qt4/tools/designer/plugins/dlg/dlg2ui.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/**********************************************************************
-**
-** Copyright (C) 2000-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.
-**
-**********************************************************************/
-
-#ifndef DLG2UI_H
-#define DLG2UI_H
-
-#include <tqdom.h>
-#include <tqmap.h>
-#include <tqstring.h>
-#include <tqvariant.h>
-
-typedef TQMap<TQString, TQString> AttributeMap;
-
-struct DlgConnection
-{
- TQString sender;
- TQString signal;
- TQString slot;
-
-#if defined(TQ_FULL_TEMPLATE_INSTANTIATION)
- bool operator==( const DlgConnection& ) const {
- return sender == sender && signal == signal && slot == slot;
- }
-#endif
-};
-
-class Dlg2Ui
-{
-public:
- TQStringList convertTQtArchitectDlgFile( const TQString& fileName );
-
-private:
- TQString alias( const TQString& name ) const;
- TQString opening( const TQString& tag,
- const AttributeMap& attr = AttributeMap() );
- TQString closing( const TQString& tag );
- void error( const TQString& message );
- void syntaxError();
- TQString getTextValue( const TQDomNode& node );
- TQVariant getValue( const TQDomNodeList& tqchildren, const TQString& tagName,
- const TQString& type = "qstring" );
- void emitHeader();
- void emitFooter();
- void emitSimpleValue( const TQString& tag, const TQString& value,
- const AttributeMap& attr = AttributeMap() );
- void emitOpening( const TQString& tag,
- const AttributeMap& attr = AttributeMap() );
- void emitClosing( const TQString& tag );
- void emitOpeningWidget( const TQString& className );
- TQString widgetClassName( const TQDomElement& e );
- void emitColor( const TQColor& color );
- void emitColorGroup( const TQString& name, const TQColorGroup& group );
- void emitVariant( const TQVariant& val,
- const TQString& stringType = "string" );
- void emitProperty( const TQString& prop, const TQVariant& val,
- const TQString& stringType = "string" );
- void emitAttribute( const TQString& attr, const TQVariant& val,
- const TQString& stringType = "string" );
- void emitOpeningLayout( bool needsWidget, const TQString& layoutKind,
- const TQString& name, int border, int autoBorder );
- void flushWidgets();
- void emitClosingLayout( bool needsWidget, const TQString& layoutKind );
- bool isWidgetType( const TQDomElement& e );
- void emitSpacer( int spacing, int stretch );
- TQString filteredFlags( const TQString& flags, const TQRegExp& filter );
- void emitFrameStyleProperty( int style );
- void emitWidgetBody( const TQDomElement& e, bool layouted );
- bool checkTagName( const TQDomElement& e, const TQString& tagName );
- TQString normalizeType( const TQString& type );
- TQVariant getValue( const TQDomElement& e, const TQString& tagName,
- const TQString& type = "qstring" );
- void matchDialogCommon( const TQDomElement& dialogCommon );
- bool needsTQLayoutWidget( const TQDomElement& e );
- void matchBoxLayout( const TQDomElement& boxLayout );
- void matchBoxSpacing( const TQDomElement& boxSpacing );
- void matchBoxStretch( const TQDomElement& boxStretch );
- void matchGridLayout( const TQDomElement& gridLayout );
- void matchGridRow( const TQDomElement& gridRow );
- void matchGridSpacer( const TQDomElement& gridSpacer );
- void matchLayoutWidget( const TQDomElement& layoutWidget );
- void matchBox( const TQDomElement& box );
- void matchLayout( const TQDomElement& tqlayout );
- void matchWidgetLayoutCommon( const TQDomElement& widgetLayoutCommon );
- void matchWidget( const TQDomElement& widget );
- void matchWidgets( const TQDomElement& widgets );
- void matchTabOrder( const TQDomElement& tabOrder );
- void matchWidgetLayout( const TQDomElement& widgetLayout );
- void matchDialog( const TQDomElement& dialog );
-
- TQString yyOut;
- TQString yyIndentStr;
- TQString yyFileName;
- TQString yyClassName;
- TQMap<TQString, int> yyWidgetTypeSet;
- TQMap<TQString, TQMap<TQString, int> > yyPropertyMap;
- TQMap<TQString, TQDomElement> yyWidgetMap;
- TQMap<TQString, TQString> yyCustomWidgets;
- TQValueList<DlgConnection> yyConnections;
- TQMap<TQString, TQString> yySlots;
- TQMap<TQString, TQString> yyAliasMap;
- TQStringList yyTabStops;
- TQString yyBoxKind;
- int yyLayoutDepth;
- int yyGridRow;
- int yyGridColumn;
-
- int numErrors;
- int uniqueLayout;
- int uniqueSpacer;
- int uniqueWidget;
-};
-
-#endif
diff --git a/tqtinterface/qt4/tools/designer/plugins/dlg/main.cpp b/tqtinterface/qt4/tools/designer/plugins/dlg/main.cpp
deleted file mode 100644
index 0acebb1..0000000
--- a/tqtinterface/qt4/tools/designer/plugins/dlg/main.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/**********************************************************************
-**
-** Copyright (C) 2000-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 <filterinterface.h>
-#include <tqapplication.h>
-
-#include "dlg2ui.h"
-
-class DlgFilter : public ImportFilterInterface, public TQLibraryInterface
-{
-public:
- DlgFilter();
-
- TQRESULT queryInterface( const TQUuid&, TQUnknownInterface **iface );
- TQ_REFCOUNT;
-
- TQStringList featureList() const;
- TQStringList import( const TQString& filter, const TQString& filename );
-
- bool init();
- void cleanup();
- bool canUnload() const;
-};
-
-DlgFilter::DlgFilter()
-{
-}
-
-TQRESULT DlgFilter::queryInterface( const TQUuid &uuid, TQUnknownInterface **iface )
-{
- *iface = 0;
- if ( uuid == IID_TQUnknown )
- *iface = (TQUnknownInterface*)(ImportFilterInterface*)this;
- else if ( uuid == IID_TQFeatureList )
- *iface = (TQFeatureListInterface*)this;
- else if ( uuid == IID_ImportFilter )
- *iface = (ImportFilterInterface*)this;
- else if ( uuid == IID_TQLibrary )
- *iface = (TQLibraryInterface*)this;
- else
- return TQE_NOINTERFACE;
-
- (*iface)->addRef();
- return TQS_OK;
-}
-
-TQStringList DlgFilter::featureList() const
-{
- TQStringList list;
- list << "TQt Architect Dialog Files (*.dlg)" ;
- return list;
-}
-
-TQStringList DlgFilter::import( const TQString &, const TQString& filename )
-{
- Dlg2Ui d;
- return d.convertTQtArchitectDlgFile( filename );
-}
-
-bool DlgFilter::init()
-{
- return TRUE;
-}
-
-void DlgFilter::cleanup()
-{
-}
-
-bool DlgFilter::canUnload() const
-{
- return TRUE;
-}
-
-TQ_EXPORT_COMPONENT()
-{
- TQ_CREATE_INSTANCE( DlgFilter )
-}