5 #include <qtextcodec.h>
7 #include <DDS_DicItem.h>
8 #include <DDS_Dictionary.h>
10 #include <TCollection_HAsciiString.hxx>
11 #include <TCollection_HExtendedString.hxx>
13 QValueList<QDS_Datum*> QDS::_datumList;
15 QString QDS::toQString( const TCollection_AsciiString& src )
17 QTextCodec* codec = QTextCodec::codecForLocale();
20 res = codec ? codec->toUnicode( (char*)src.ToCString(), src.Length() ) :
21 QString( (char*)src.ToCString() );
25 QString QDS::toQString( const TCollection_ExtendedString& src )
28 return toQString( TCollection_AsciiString( src ) );
30 return QString( (QChar*)src.ToExtString(), src.Length() );
33 QString QDS::toQString( const Handle(TCollection_HAsciiString)& src )
38 return toQString( src->String() );
41 QString QDS::toQString( const Handle(TCollection_HExtendedString)& src )
46 return toQString( src->String() );
49 TCollection_AsciiString QDS::toAsciiString( const QString& src )
51 TCollection_AsciiString res;
54 QTextCodec* codec = QTextCodec::codecForLocale();
58 QCString str = codec->fromUnicode( src, len );
59 res = TCollection_AsciiString( (Standard_CString)(const char*)str, len );
62 res = TCollection_AsciiString( (char*)src.latin1() );
67 TCollection_AsciiString QDS::toAsciiString( const TCollection_ExtendedString& src )
69 return TCollection_AsciiString( src );
72 TCollection_AsciiString QDS::toAsciiString( const Handle(TCollection_HExtendedString)& src )
74 TCollection_AsciiString res;
76 res = toAsciiString( src->String() );
80 TCollection_ExtendedString QDS::toExtString( const QString& src )
83 return TCollection_ExtendedString();
85 Standard_Integer len = src.length();
86 Standard_ExtString extStr = new Standard_ExtCharacter[( len + 1 ) * 2];
87 memcpy( extStr, src.unicode(), len * 2 );
90 TCollection_ExtendedString trg( extStr );
97 TCollection_ExtendedString QDS::toExtString( const TCollection_AsciiString& src )
99 return TCollection_ExtendedString( src );
102 bool QDS::load( const QString& dictPath )
104 if ( dictPath.isEmpty() )
107 return DDS_Dictionary::Load( toAsciiString( dictPath ) );
110 QString QDS::unitSystemLabel( const QString& sys, const QString& comp )
113 TCollection_AsciiString system = toAsciiString( sys );
114 Handle(DDS_Dictionary) dic = DDS_Dictionary::Get();
116 lab = toQString( comp.isEmpty() ? dic->GetUnitSystemLabel( system ) :
117 dic->GetUnitSystemLabel( system, toAsciiString( comp ) ) );
121 QString QDS::activeUnitSystem( const QString& comp )
124 Handle(DDS_Dictionary) dic = DDS_Dictionary::Get();
126 sys = toQString( comp.isEmpty() ? dic->GetActiveUnitSystem() :
127 dic->GetActiveUnitSystem( toAsciiString( comp ) ) );
131 void QDS::setActiveUnitSystem( const QString& sys, const QString& comp )
133 Handle(DDS_Dictionary) dic = DDS_Dictionary::Get();
137 TCollection_AsciiString system = toAsciiString( sys );
138 comp.isEmpty() ? dic->SetActiveUnitSystem( system ) :
139 dic->SetActiveUnitSystem( system, toAsciiString( comp ) );
141 QString unitSys = activeUnitSystem( comp );
142 if ( sys == unitSys )
145 TCollection_AsciiString aComp = toAsciiString( comp );
146 for ( QValueList<QDS_Datum*>::iterator it = _datumList.begin(); it != _datumList.end(); ++it )
148 QDS_Datum* datum = *it;
152 bool ok = aComp.IsEmpty();
155 Handle(DDS_DicItem) item = datum->dicItem();
156 ok = !item.IsNull() && aComp == item->GetComponent();
160 datum->unitSystemChanged( unitSys );
164 void QDS::insertDatum( QDS_Datum* datum )
169 _datumList.append( datum );
172 void QDS::removeDatum( QDS_Datum* datum )
177 _datumList.remove( datum );