OpendTect  6.3
uistring.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: K. Tingdahl
8  Date: Jan 2014
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "gendefs.h"
14 #include "threadlock.h"
15 #include "string2.h"
16 #include "objectset.h"
17 
18 class uiStringData;
19 class uiStringSet;
20 class uiRetVal;
21 
22 mFDQtclass( QString );
23 mFDQtclass( QStringList );
24 mFDQtclass( QTranslator );
25 
26 
27 #define mTextTranslationClass(clss,application) \
28 private: \
29  static inline uiString tr( const char* text, const char* disambiguation = 0, \
30  int pluralnr=-1 ) \
31  { return uiString( text, #clss, application, disambiguation, pluralnr ); } \
32  static inline uiString legacyTr( const char* text, \
33  const char* disambiguation = 0, \
34  int pluralnr=-1 ) \
35  { return uiString( text, #clss, application, disambiguation, pluralnr ); }
36 
37 #define mODTextTranslationClass(clss) \
38 mTextTranslationClass( clss, uiString::sODLocalizationApplication() )
39 
40 
90 public:
91  uiString();
92  uiString(const uiString&);
93  ~uiString();
94 
95  uiString& set(const char*);
96  bool isEmpty() const;
97  void setEmpty();
98  uiString& toLower(bool yn=true);
101  bool operator!() const { return isEmpty(); }
102 
103  uiString& operator=(const uiString&);
104  bool operator>(const uiString& b) const;
105  bool operator<(const uiString& b) const;
106  int size() const;
107  static const uiString& emptyString() { return emptystring_; }
108 
109 
112  template <class T>
113  uiString& arg(const T& var);
114  uiString& arg(const uiString&);
115 
120  uiString& append(const char*, bool withnewline=false);
121  uiString& append(const OD::String&, bool withnewline=false);
122  uiString& append(const uiString&, bool withnewline=false);
123 
124 
126  const OD::String& getFullString(BufferString* = 0) const;
132  wchar_t* createWCharString() const;
135  const char* getOriginalString() const;
136  const mQtclass(QString)& getQString() const;
138  const mQtclass(QString)& fillQString(QString&) const;
140  const BufferString& fillUTF8String(BufferString&) const;
144  void getHexEncoded(BufferString&) const;
147  bool setFromHexEncoded(const char*);
149 private:
150 
151  inline operator bool() const { return !isEmpty(); }
152  bool isCacheValid() const;
153  const mQtclass(QString)& getQStringInternal() const;
154 
155  friend class uiStringData;
156 
157  char* debugstr_;
158  /*<!< Contains getFullString() for easy debuggin
159  Only filled in in debug builds. */
160 
161  mutable uiStringData* data_;
163  static const uiString emptystring_;
164 
165  bool operator==( const uiString& oth ) const
166  { return isEqualTo( oth ); }
167  bool operator!=( const uiString& oth ) const
168  { return !isEqualTo( oth ); }
169 
170 public:
171 
172  //Only for expert users
173  mDeprecated uiString(const char* inp);
174  mDeprecated uiString(const OD::String&);
175  mDeprecated uiString& operator=(const char*);
176  mDeprecated uiString& operator=(const OD::String&);
177  mDeprecated bool isSet() const { return !isEmpty(); }
178 
181  bool isEqualTo(const uiString& oth) const;
183 
184  static const char* sODLocalizationApplication() { return "od"; }
185 
186  void makeIndependent();
188  uiString(const char* original,
189  const char* context,
190  const char* application,
191  const char* disambiguation,
192  int pluralnr);
193  void setFrom(const mQtclass(QString)&);
196  void addLegacyVersion(const uiString&);
206  bool translate(const mQtclass(QTranslator)&,
207  mQtclass(QString)&) const;
209 
210  static uiString getOrderString(int);
211  //Returns 1st, 2nd, 3rd
212 
213  uiString& addSpace(int nr=1);
214  uiString& addTab(int nrtabs=1);
215  uiString& addNewLine(int nrnl=1);
216 };
217 
218 
219 mGlobal(Basic) uiString toUiString(const uiString&);
220 mGlobal(Basic) uiString toUiString(const char*);
221 mGlobal(Basic) uiString toUiString(const OD::String&);
226 mGlobal(Basic) uiString toUiString(float);
227 mGlobal(Basic) uiString toUiString(double);
228 mGlobal(Basic) uiString toUiString(float,int nrdec);
229 mGlobal(Basic) uiString toUiString(double,int nrdec);
230 
231 
232 
233 /*\brief Set of uiStrings */
234 
236 { mODTextTranslationClass(uiStringSet);
237 public:
238 
240  typedef size_type IdxType;
241 
243  uiStringSet( const uiString& s ) { set(s); }
244  uiStringSet( const uiStringSet& oth ) { *this = oth; }
245  uiStringSet(const uiString[]);
247  ~uiStringSet();
248  uiStringSet& operator =(const uiStringSet&);
249 
250  inline size_type size() const { return strs_.size(); }
251  inline bool validIdx( IdxType i ) const { return strs_.validIdx(i);}
252  bool isEmpty() const { return strs_.isEmpty(); }
253  bool isPresent(const uiString&) const;
254  IdxType indexOf(const uiString&) const;
255  uiString get(IdxType) const;
256  uiString& operator[]( IdxType idx ) { return *strs_[idx]; }
257  const uiString& operator[]( IdxType idx ) const { return *strs_[idx]; }
258 
259  void setEmpty();
260  uiStringSet& set(const uiString&);
261  uiStringSet& set( const uiStringSet& oth ) { return (*this=oth); }
262  uiStringSet& set(const uiRetVal&);
263  uiStringSet& add(const uiString&);
264  uiStringSet& add(const uiStringSet&);
265  uiStringSet& add(const uiRetVal&);
266  uiStringSet& append( const uiStringSet& ss ) { return add(ss); }
267  uiStringSet& insert(IdxType,const uiString&);
268  uiStringSet& operator +=( const uiString& s ) { return add(s); }
269  void removeSingle(IdxType,bool keep_order=true);
270  void removeRange(IdxType,IdxType);
271 
272  uiString cat(const char* sepstr="\n") const;
273  uiString createOptionString(bool use_and=true,int maxnritems=-1,
274  bool separate_using_newlines=false) const;
276 
277  void fill(mQtclass(QStringList)&) const;
278  void sort(const bool caseinsens,bool asc);
279  void sort(bool);
280  void useIndexes( const IdxType* idxs );
281  IdxType* getSortIndexes(bool caseinsens,bool asc) const;
282 
283 
284 
285 protected:
286 
288 
289 };
290 
291 
292 /*\brief allows returning status and accompanying user info.
293 
294  This class helps us make sure there is always user info on errors. Therefore,
295  you will find a 'setIsOK' but not OK means setting a non-empty message.
296 
297 */
298 
300 {
301 public:
302 
303  uiRetVal() {}
304  uiRetVal(const uiString&);
305  uiRetVal(const uiStringSet&);
306  uiRetVal(const uiRetVal&);
307  static uiRetVal OK() { return ok_; }
308  static uiRetVal Empty() { return ok_; }
309  uiRetVal& operator =(const uiRetVal&);
310  uiRetVal& operator =(const uiString&);
311  uiRetVal& operator =(const uiStringSet&);
312  operator uiString() const;
313  operator uiStringSet() const;
314 
315  bool isOK() const;
316  inline bool isEmpty() const { return isOK(); }
317  inline bool isError() const { return !isOK(); }
318  bool isMultiMessage() const;
319  uiStringSet messages() const;
320  bool isSingleWord(const uiString&) const;
321 
322  inline uiRetVal& setOK() { *this = ok_; return *this; }
323  inline uiRetVal& setEmpty() { return setOK(); }
324  uiRetVal& insert(const uiString&);
325  uiRetVal& set(const uiRetVal&);
326  uiRetVal& set(const uiString&);
327  uiRetVal& set(const uiStringSet&);
328  uiRetVal& add(const uiRetVal&);
329  uiRetVal& add(const uiString&);
330  uiRetVal& add(const uiStringSet&);
331 
332  BufferString getText() const;
333 
334 private:
335 
338 
339  static const uiRetVal ok_;
340 
341 };
342 
343 
344 mGlobal(Basic) bool isFinished(const uiRetVal&);
345 mGlobal(Basic) bool isCancelled(const uiRetVal&);
346 mGlobal(Basic) uiString toUiString(float,char format,int precision);
347 mGlobal(Basic) uiString toUiString(double,char format,int precision);
348 
349 
350 //User when string should be revisited later
351 #define mToUiStringTodo(i) ::toUiString(i)
352 #define mFromUiStringTodo(i) i.getFullString()
353 
354 
355 //Legacy Will be removed
356 mGlobal(Basic) mDeprecated inline uiString mkUiString(const char* var)
357 { return toUiString(var); }
358 
378 mGlobal(Basic) uiString od_static_tr( const char* function, const char* text,
379  const char* disambiguation = 0, int pluralnr=-1 );
380 mGlobal(Basic) uiString getUiYesNoString(bool res);
381 
382 template <class T> inline
383 uiString& uiString::arg( const T& var )
384 {
385  return arg( toUiString(var) );
386 }
bool operator!() const
Definition: uistring.h:101
#define mExpClass(module)
Definition: commondefs.h:157
bool operator>(const NamedObject &obj1, const NamedObject &obj2)
Definition: namedobj.h:75
#define mQtclass(cls)
Definition: commondefs.h:232
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
bool operator==(const uiString &oth) const
Definition: uistring.h:165
size_type IdxType
Definition: uistring.h:240
bool isError() const
Definition: uistring.h:317
uiString getUiYesNoString(bool res)
short IdxType
Definition: seisblocksdata.h:39
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
Threads::Lock lock_
Definition: uistring.h:337
#define mGlobal(module)
Definition: commondefs.h:160
char * debugstr_
Definition: uistring.h:157
static uiRetVal OK()
Definition: uistring.h:307
#define od_int64
Definition: plftypes.h:34
static const uiRetVal ok_
Definition: uistring.h:339
uiRetVal()
Definition: uistring.h:303
uiStringData * data_
Definition: uistring.h:161
uiStringSet & append(const uiStringSet &ss)
Definition: uistring.h:266
bool validIdx(IdxType i) const
Definition: uistring.h:251
uiStringSet msgs_
Definition: uistring.h:336
static const uiString & emptyString()
Definition: uistring.h:107
uiRetVal & setOK()
Definition: uistring.h:322
bool isEmpty() const
Definition: uistring.h:252
Definition: uistring.h:88
ObjectSet< T >::size_type indexOf(const ObjectSet< T > &os, const S &val)
Locate object in set.
Definition: objectset.h:173
uiString & operator[](IdxType idx)
Definition: uistring.h:256
uiString mkUiString(const char *var)
Definition: uistring.h:356
Threads::Lock datalock_
Protects data_ variable.
Definition: uistring.h:162
bool append(TypeSetBase< T, I > &to, const TypeSetBase< S, J > &from)
append allowing a different type to be merged into set
Definition: typeset.h:205
Set of pointers to objects.
Definition: commontypes.h:28
uiRetVal & operator=(const uiRetVal &)
bool isCancelled(const uiRetVal &)
size_type size() const
Definition: uistring.h:250
static uiRetVal Empty()
Definition: uistring.h:308
uiStringSet(const uiString &s)
Definition: uistring.h:243
bool operator!=(const uiString &oth) const
Definition: uistring.h:167
#define od_uint32
Definition: plftypes.h:30
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:29
const uiString & operator[](IdxType idx) const
Definition: uistring.h:257
#define mFDQtclass(cls)
Definition: commondefs.h:231
uiString toUiString(const uiString &)
uiStringSet()
Definition: uistring.h:242
void removeRange(ODSET &inst, size_type start, size_type stop)
Removes a range from the set.
Definition: odset.h:55
bool isSet() const
Definition: uistring.h:177
uiString & arg(const T &var)
Definition: uistring.h:383
#define od_uint64
Definition: plftypes.h:35
uiStringSet(const uiStringSet &oth)
Definition: uistring.h:244
#define od_int32
Definition: plftypes.h:29
#define mDeprecated
Definition: plfdefs.h:213
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
bool isEmpty() const
Definition: uistring.h:316
bool isEmpty(const char *)
void sort(ObjectSet< T > &os)
Sort ObjectSet. Must have operator > defined for elements.
Definition: objectset.h:224
Definition: uistring.h:299
ObjectSet< uiString > strs_
Definition: uistring.h:287
Definition: uistring.h:235
ObjectSet< uiString >::size_type size_type
Definition: uistring.h:236
bool isFinished(const uiRetVal &)
uiString od_static_tr(const char *function, const char *text, const char *disambiguation=0, int pluralnr=-1)
static const char * sODLocalizationApplication()
Definition: uistring.h:184
uiRetVal & setEmpty()
Definition: uistring.h:323
static const uiString emptystring_
Definition: uistring.h:163

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017