Salome HOME
Libraries for several kinds of controls (line edit, spinbox, combobox, ...). These...
[modules/gui.git] / src / QDS / QDS.cxx
1 #include "QDS.h"
2
3 #include "QDS_Datum.h"
4
5 #include <qtextcodec.h>
6
7 #include <DDS_DicItem.h>
8 #include <DDS_Dictionary.h>
9
10 #include <TCollection_HAsciiString.hxx>
11 #include <TCollection_HExtendedString.hxx>
12
13 QValueList<QDS_Datum*> QDS::_datumList;
14
15 QString QDS::toQString( const TCollection_AsciiString& src )
16 {
17   QTextCodec* codec = QTextCodec::codecForLocale();
18   QString res;
19   if ( !src.IsEmpty() )
20     res = codec ? codec->toUnicode( (char*)src.ToCString(), src.Length() ) :
21                   QString( (char*)src.ToCString() );
22   return res;
23 }
24
25 QString QDS::toQString( const TCollection_ExtendedString& src )
26 {
27   if ( src.IsAscii() )
28     return toQString( TCollection_AsciiString( src ) );
29   else
30     return QString( (QChar*)src.ToExtString(), src.Length() );
31 }
32
33 QString QDS::toQString( const Handle(TCollection_HAsciiString)& src )
34 {
35   if ( src.IsNull() )
36     return QString::null;
37   else
38     return toQString( src->String() );
39 }
40
41 QString QDS::toQString( const Handle(TCollection_HExtendedString)& src )
42 {
43   if ( src.IsNull() )
44     return QString::null;
45   else
46     return toQString( src->String() );
47 }
48
49 TCollection_AsciiString QDS::toAsciiString( const QString& src )
50 {
51   TCollection_AsciiString res;
52   if ( src.latin1() )
53   {
54     QTextCodec* codec = QTextCodec::codecForLocale();
55     if ( codec )
56     {
57       int len = -1;
58       QCString str = codec->fromUnicode( src, len );
59       res = TCollection_AsciiString( (Standard_CString)(const char*)str, len );
60     }
61     else
62       res = TCollection_AsciiString( (char*)src.latin1() );
63   }
64   return res;
65 }
66
67 TCollection_AsciiString QDS::toAsciiString( const TCollection_ExtendedString& src )
68 {
69   return TCollection_AsciiString( src );
70 }
71
72 TCollection_AsciiString QDS::toAsciiString( const Handle(TCollection_HExtendedString)& src )
73 {
74   TCollection_AsciiString res;
75   if ( !src.IsNull() )
76     res = toAsciiString( src->String() );
77   return res;
78 }
79
80 TCollection_ExtendedString QDS::toExtString( const QString& src )
81 {
82   if ( src.isEmpty() )
83     return TCollection_ExtendedString();
84
85   Standard_Integer len = src.length();
86   Standard_ExtString extStr = new Standard_ExtCharacter[( len + 1 ) * 2];
87   memcpy( extStr, src.unicode(), len * 2 );
88   extStr[len] = 0;
89
90   TCollection_ExtendedString trg( extStr );
91
92   delete [] extStr;
93
94   return trg;
95 }
96
97 TCollection_ExtendedString QDS::toExtString( const TCollection_AsciiString& src )
98 {
99   return TCollection_ExtendedString( src );
100 }
101
102 bool QDS::load( const QString& dictPath )
103 {
104   if ( dictPath.isEmpty() )
105     return false;
106
107   return DDS_Dictionary::Load( toAsciiString( dictPath ) );
108 }
109
110 QString QDS::unitSystemLabel( const QString& sys, const QString& comp )
111 {
112   QString lab;
113   TCollection_AsciiString system = toAsciiString( sys );
114   Handle(DDS_Dictionary) dic = DDS_Dictionary::Get();
115   if ( !dic.IsNull() )
116     lab = toQString( comp.isEmpty() ? dic->GetUnitSystemLabel( system ) :
117                                       dic->GetUnitSystemLabel( system, toAsciiString( comp ) ) );
118   return lab;
119 }
120
121 QString QDS::activeUnitSystem( const QString& comp )
122 {
123   QString sys;
124   Handle(DDS_Dictionary) dic = DDS_Dictionary::Get();
125   if ( !dic.IsNull() )
126     sys = toQString( comp.isEmpty() ? dic->GetActiveUnitSystem() :
127                                       dic->GetActiveUnitSystem( toAsciiString( comp ) ) );
128   return sys;
129 }
130
131 void QDS::setActiveUnitSystem( const QString& sys, const QString& comp )
132 {
133   Handle(DDS_Dictionary) dic = DDS_Dictionary::Get();
134   if ( dic.IsNull() )
135     return;
136
137   TCollection_AsciiString system = toAsciiString( sys );
138   comp.isEmpty() ? dic->SetActiveUnitSystem( system ) :
139                    dic->SetActiveUnitSystem( system, toAsciiString( comp ) );
140
141   QString unitSys = activeUnitSystem( comp );
142   if ( sys == unitSys )
143     return;
144
145   TCollection_AsciiString aComp = toAsciiString( comp );
146   for ( QValueList<QDS_Datum*>::iterator it = _datumList.begin(); it != _datumList.end(); ++it )
147   {
148     QDS_Datum* datum = *it;
149     if ( !datum )
150       continue;
151
152     bool ok = aComp.IsEmpty();
153     if ( !ok )
154     {
155       Handle(DDS_DicItem) item = datum->dicItem();
156       ok = !item.IsNull() && aComp == item->GetComponent();
157     }
158
159     if ( ok )
160       datum->unitSystemChanged( unitSys );
161   }
162 }
163
164 void QDS::insertDatum( QDS_Datum* datum )
165 {
166   if ( !datum )
167     return;
168
169   _datumList.append( datum );
170 }
171
172 void QDS::removeDatum( QDS_Datum* datum )
173 {
174   if ( !datum )
175     return;
176
177   _datumList.remove( datum );
178 }