OpendTect  6.6
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  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "string2.h"
15 #include "threadlock.h"
16 #include "bufstring.h"
17 #include "keystrs.h"
18 
19 class BufferStringSet;
20 class uiStringData;
21 class uiStringSet;
22 class uiRetVal;
23 namespace Pos { class IdxPair; }
24 
25 mFDQtclass( QString );
26 mFDQtclass( QStringList );
27 mFDQtclass( QTranslator );
28 
29 #define mTextTranslationClass(clss,pkgkey) \
30 private: \
31 static inline uiString tr( const char* text, \
32  const char* disambiguation = nullptr, \
33  int pluralnr=-1 ) \
34 { return uiString( text, #clss, pkgkey, disambiguation, pluralnr ); } \
35 static inline uiString legacyTr( const char* text, \
36  const char* disambiguation = nullptr, \
37  int pluralnr=-1 ) \
38 { return uiString( text, #clss, pkgkey, disambiguation, pluralnr ); }
39 
40 #define mODTextTranslationClass(clss) \
41 mTextTranslationClass( clss, uiString::sODLocalizationApplication() )
42 
43 
122 public:
123 
125  uiString(const uiString&);
127  bool operator==( const uiString& oth ) const
128  { return isEqualTo(oth); }
129  bool operator!=( const uiString& oth ) const
130  { return !isEqualTo(oth); }
132 
133 #ifdef mNoTranslation
134  uiString(const char* str) { set( str ); }
135  uiString& operator =(const char* str) { set( str ); return *this; }
136 #else
137  uiString(const char*) = delete; // try 'set()'
138  uiString& operator =(const char*) = delete; // try 'set()'
139 #endif
140 
141  uiString& set(const char*);
142  uiString& set( const uiString& s ) { return (*this = s); }
143  bool isEmpty() const;
144  void setEmpty();
145  uiString& toLower(bool yn=true);
146  uiString& toUpper( bool yn=true ) { return toLower(!yn); }
147  bool operator!() const { return isEmpty(); }
148 
149  bool operator>(const uiString& b) const;
150  bool operator<(const uiString& b) const;
151  int size() const;
152  bool isPlainAscii() const;
153 
154  static const uiString& empty() { return emptystring_; }
155  static uiString& dummy() { return dummystring_; }
156 
157 
162  template <class T>
163  inline uiString& arg(const T&);
164  inline uiString& arg(float,int nrdecimals);
165  inline uiString& arg(double,int nrdecimals);
167 
168 
169 # define muiStringAppendDefArgs \
170  SeparType septyp=uiString::CloseLine, \
171  AppendType apptyp=uiString::OnNewLine
172 
178  enum SeparType { NoSep, CloseLine, Space, Tab, Comma, MoreInfo,
179  SemiColon };
180  enum AppendType { OnSameLine, OnNewLine, AfterEmptyLine };
181 
185  uiString& appendPlainText(const char*,bool addspace=false,
186  bool addquotes=false);
187  uiString& appendPlainText(const OD::String&,bool addspace=false,
188  bool addquotes=false);
189 
190  uiString& appendPhraseSameLine(const uiString&);
191  uiString& appendAfterList(const uiString&);
192  uiString& constructWordWith(const uiString&,bool addspace=false);
193  uiString& preFixWord(const uiString&);
194  uiString& postFixWord(const uiString&);
195  uiString& embed(const char* open,const char* close);
196  uiString& quote(bool single);
200  uiString& withUnit(const char*);
205  uiString& withNumber(od_int64); // simple add number like "well 1"
206  uiString& addMoreInfo(const uiString&,bool newline=false);
208  uiString& addMoreInfo(const char*);
209  template <class T>
210  uiString& addMoreInfo(const T&);
211 
212  inline uiString& appendIncorrect(const uiString&,char sep=' ');
213  inline uiString& appendIncorrect(const char*,char sep=' ');
214  inline uiString& appendIncorrect(const OD::String&,char sep=' ');
215 
216  // TEMP-- comment out to fix a directory at a time
217  inline uiString& append( const uiString& s, bool nl=false )
218  { return appendIncorrect(s,nl?'\n':' '); }
219  inline uiString& append( const char* s, bool nl=false )
220  { return appendIncorrect(s,nl?'\n':' '); }
221  inline uiString& append( const OD::String& s, bool nl=false )
222  { return appendIncorrect(s,nl?'\n':' '); }
223  inline uiString& addSpace( int =1 ) { return append(" "); }
224  inline uiString& addTab( int =1 ) { return append("\t"); }
225  inline uiString& addNewLine( int =1 ) { return append("\n"); }
226  // End TEMP
227 
228  static uiString getOrderString(int);
229 
230  // UNtranslated:
231  const char* getOriginalString() const;
235 
236  // Translated:
239  const mQtclass(QString)& fillQString(QString&) const;
241  wchar_t* createWCharString() const;
243 
244 protected:
245 
246  bool isEqualTo(const uiString& oth) const;
247 
248 private:
249 
250  bool isCacheValid() const;
251  const mQtclass(QString)& getQStringInternal() const;
252 
253  friend class uiStringData;
254  mutable char* debugstr_; //<! full string only when __debug__
255  mutable uiStringData* data_;
257  static const uiString emptystring_;
259 
260  operator bool() const = delete;
261  operator int() const = delete;
262  operator float() const = delete;
263  operator double() const = delete;
264 
265 public:
266 
267  // The functions in this section are most likely not for you.
268 
269  uiString(const char* original,
270  const char* context,
271  const char* package,
272  const char* disambiguation,
273  int pluralnr);
274 
276  int useEncodedStorageString(const char*);
281  bool setFromHexEncoded(const char*);
285  uiString& setArg(int,const uiString&);
286  void setFrom(const mQtclass(QString)&);
290  void addLegacyVersion( const uiString& uistr )
291  { addAlternateVersion(uistr); }
292  bool translate(const mQtclass(QTranslator)&,
293  mQtclass(QString)&) const;
295 
296  static const char* sODLocalizationApplication() { return "od"; }
297 
299 
300  static const uiString& emptyString() { return empty(); }
301  bool isSet() const { return !isEmpty(); }
302 
303  const OD::String& getFullString(BufferString* =nullptr) const;
304 
305  mDeprecated ("Use fillQString")
306  const mQtclass(QString)& getQString() const;
307 
308 };
309 
310 
311 typedef uiString uiWord;
313 
314 
316 mGlobal(Basic) uiString toUiString(const char*);
323 mGlobal(Basic) uiString toUiString(double);
324 mGlobal(Basic) uiString toUiString(float,int nrdec);
325 mGlobal(Basic) uiString toUiString(double,int nrdec);
326 mGlobal(Basic) uiString toUiString(float,char format,int precision);
327 mGlobal(Basic) uiString toUiString(double,char format,int precision);
330 
331 mGlobal(Basic) const char* toString(const uiString&);
332 
333 template <class T1,class T2>
334 uiString toUiString( const std::pair<T1,T2>& pair )
335 {
336  return toUiString( "%1/%2" ).arg( pair.first ).arg( pair.second );
337 }
338 
339 mGlobal(Basic) uiString toUiString(const mQtclass(QString)&);
340 
341 
343 { return appendPhrase( str, CloseLine, OnSameLine ); }
345 { return appendPhrase( str, NoSep, OnNewLine ); }
346 inline uiString& uiString::constructWordWith( const uiString& str, bool addspc )
347 { return appendPhrase( str, addspc ? Space : NoSep, OnSameLine ); }
349 { const uiString kp(*this); *this = str; return postFixWord(kp); }
351 { return constructWordWith( str, true ); }
352 inline uiString& uiString::withUnit( const char* str )
353 { return withUnit( toUiString(str) ); }
355 { return postFixWord( toUiString(nr) ); }
356 inline uiString& uiString::addMoreInfo( const uiString& str, bool newline )
357 { return appendPhrase( str, MoreInfo, newline? OnNewLine : OnSameLine ); }
358 inline uiString& uiString::addMoreInfo( const char* str )
359 { return appendPhrase( toUiString(str), MoreInfo, OnSameLine ); }
360 template <class T>
361 inline uiString& uiString::addMoreInfo( const T& t )
362 { return appendPhrase( toUiString(t), MoreInfo, OnSameLine ); }
363 
364 
365 // Use when string should be revisited later
366 #define mToUiStringTodo(i) ::toUiString(i)
367 #define mFromUiStringTodo(i) ::toString(i)
368 
369 
376 mGlobal(Basic) uiString od_static_tr(const char* function_name,const char* text,
377  const char* disambiguation=nullptr,int pluralnr=-1);
378 
380 
381 template <class T> inline
382 uiString& uiString::arg( const T& var )
383 {
384  return arg( toUiString(var) );
385 }
386 
387 inline uiString& uiString::arg( float val, int nrdec )
388 {
389  return arg( toUiString(val,nrdec) );
390 }
391 
392 inline uiString& uiString::arg( double val, int nrdec )
393 {
394  return arg( toUiString(val,nrdec) );
395 }
396 
397 
398 #define mGetQStr( qstr, uistring_var ) \
399  QString qstr; (uistring_var).fillQString( qstr )
400 
401 #define mDefIncorrectAppendPhrArgs \
402  sep=='\n' ? NoSep : (sep=='\t' ? Tab : Space), \
403  sep=='\n' ? OnNewLine : OnSameLine
404 
405 inline uiString& uiString::appendIncorrect( const uiString& str, char sep )
406 { return appendPhrase( str, mDefIncorrectAppendPhrArgs ); }
407 inline uiString& uiString::appendIncorrect( const char* str, char sep )
409 inline uiString& uiString::appendIncorrect( const OD::String& str, char sep )
411 
412 
415 #define mStoreduiStringPreamble "^&"
416 
417 
418 // We need the sets so often that we include it here
419 #include "uistringset.h"
od_uint64
#define od_uint64
Definition: plftypes.h:36
uiString::isCacheValid
bool isCacheValid() const
uiString::getHexEncoded
void getHexEncoded(BufferString &) const
uiString::arg
uiString & arg(const T &)
Definition: uistring.h:382
uiString::uiString
uiString(const char *)=delete
uiString::operator>
bool operator>(const uiString &b) const
uiString::OnSameLine
@ OnSameLine
Definition: uistring.h:180
uiString::withSurvXYUnit
uiString & withSurvXYUnit()
uiString::uiString
uiString(const uiString &)
no copy, ref counted
uiString::sODLocalizationApplication
static const char * sODLocalizationApplication()
Will be deprecated (soon):
Definition: uistring.h:296
uistringset.h
uiString::Tab
@ Tab
Definition: uistring.h:178
uiString::size
int size() const
Pos
Position.
Definition: commontypes.h:78
keystrs.h
mGlobal
#define mGlobal(module)
Definition: commondefs.h:180
string2.h
uiStringSet
Definition: uistringset.h:23
BufferStringSet
Set of BufferString objects.
Definition: bufstringset.h:26
uiString::getOriginalString
const char * getOriginalString() const
untranslated, no argument substitution
uiString::SeparType
SeparType
Definition: uistring.h:178
uiString::NoSep
@ NoSep
Definition: uistring.h:178
uiString::addTab
uiString & addTab(int=1)
Definition: uistring.h:224
uiString::quote
uiString & quote(bool single)
uiString::setEmpty
void setEmpty()
od_int64
#define od_int64
Definition: plftypes.h:35
uiString::set
uiString & set(const char *)
uiString::MoreInfo
@ MoreInfo
Definition: uistring.h:178
OD
OpendTect.
Definition: commontypes.h:28
mFDQtclass
#define mFDQtclass(cls)
Definition: commondefs.h:233
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
uiString::AppendType
AppendType
Definition: uistring.h:180
uiString::isSet
bool isSet() const
Definition: uistring.h:301
uiString::withSurvZUnit
uiString & withSurvZUnit()
uiString::addSpace
uiString & addSpace(int=1)
Definition: uistring.h:223
uiString::withUnit
uiString & withUnit(const char *)
just the unit itself, please
Definition: uistring.h:352
uiString::createWCharString
wchar_t * createWCharString() const
returns new string: use 'delete []'.
uiString::fillUTF8String
void fillUTF8String(BufferString &) const
translated with arguments inserted
toString
const char * toString(const uiString &)
uiRetVal
Definition: uistringset.h:105
uiString::setFromHexEncoded
bool setFromHexEncoded(const char *)
uiString::addNewLine
uiString & addNewLine(int=1)
Definition: uistring.h:225
uiString::embedFinalState
uiString & embedFinalState()
uiString::withUnit
uiString & withUnit(const uiString &)
uiString::isEmpty
bool isEmpty() const
uiString::appendPlainText
uiString & appendPlainText(const char *, bool addspace=false, bool addquotes=false)
uiString::withNumber
uiString & withNumber(int64_t)
Definition: uistring.h:354
mODTextTranslationClass
#define mODTextTranslationClass(clss)
Definition: uistring.h:40
bufstring.h
uiString::appendAfterList
uiString & appendAfterList(const uiString &)
Definition: uistring.h:344
uiString::setFrom
void setFrom(const ::QString &)
uiString::emptystring_
static const uiString emptystring_
Definition: uistring.h:257
isEmpty
bool isEmpty(const NLAModel *mdl)
OD::JSON::String
@ String
Definition: odjson.h:40
uiString::appendPhrases
uiString & appendPhrases(const uiStringSet &, SeparType septyp=uiString::CloseLine, AppendType apptyp=uiString::OnNewLine)
uiString::postFixWord
uiString & postFixWord(const uiString &)
Definition: uistring.h:350
uiString::constructWordWith
uiString & constructWordWith(const uiString &, bool addspace=false)
Definition: uistring.h:346
Coord
A cartesian coordinate in 2D space.
Definition: coord.h:25
IdxPair
A pair of numbers; base class for BinID et al.
Definition: idxpair.h:30
toUiString
uiString toUiString(const uiString &)
uiString::appendPhrase
uiString & appendPhrase(const uiString &, SeparType septyp=uiString::CloseLine, AppendType apptyp=uiString::OnNewLine)
uiString::encodeStorageString
void encodeStorageString(BufferString &) const
uiString::OnNewLine
@ OnNewLine
Definition: uistring.h:180
uiString::dummy
static uiString & dummy()
Definition: uistring.h:155
uiString::addLegacyVersion
void addLegacyVersion(const uiString &uistr)
Definition: uistring.h:290
uiString::toLower
uiString & toLower(bool yn=true)
applied before arg subst.
uiString::optional
uiString & optional()
mDeprecated
#define mDeprecated(msg)
Definition: plfdefs.h:215
uiString::debugstr_
char * debugstr_
Definition: uistring.h:254
uiString::CloseLine
@ CloseLine
Definition: uistring.h:178
uiString::getFullString
const OD::String & getFullString(BufferString *=nullptr) const
uiString::appendPhraseSameLine
uiString & appendPhraseSameLine(const uiString &)
Definition: uistring.h:342
uiString::addMoreInfo
uiString & addMoreInfo(const uiString &, bool newline=false)
will deliver ": the string with more info"
Definition: uistring.h:356
uiString::operator=
uiString & operator=(const uiString &)
no copy, ref counted
uiString::uiString
uiString(const char *original, const char *context, const char *package, const char *disambiguation, int pluralnr)
od_static_tr
uiString od_static_tr(const char *function_name, const char *text, const char *disambiguation=nullptr, int pluralnr=-1)
uiString::fillQString
const ::QString & fillQString(QString &) const
translated with arguments inserted
uiString::isPlainAscii
bool isPlainAscii() const
Conv::set
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
uiString::dummystring_
static uiString dummystring_
Definition: uistring.h:258
uiString::getQStringInternal
const ::QString & getQStringInternal() const
uiString::operator!=
bool operator!=(const uiString &oth) const
Definition: uistring.h:129
mDefIncorrectAppendPhrArgs
#define mDefIncorrectAppendPhrArgs
Definition: uistring.h:401
uiString::operator!
bool operator!() const
Definition: uistring.h:147
uiString::embed
uiString & embed(const char *open, const char *close)
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
uiString::parenthesize
uiString & parenthesize()
uiString::setArg
uiString & setArg(int, const uiString &)
uiString::toUpper
uiString & toUpper(bool yn=true)
Definition: uistring.h:146
uiString::uiString
uiString()
uiString::getOrderString
static uiString getOrderString(int)
1st, 2nd, 3rd, ...
mQtclass
#define mQtclass(cls)
Definition: commondefs.h:234
uiString::translate
bool translate(const ::QTranslator &, ::QString &) const
Returns true if the translation succeeded.
uiString::appendPlainText
uiString & appendPlainText(const OD::String &, bool addspace=false, bool addquotes=false)
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
uiString::emptyString
static const uiString & emptyString()
Definition: uistring.h:300
od_int32
#define od_int32
Definition: plftypes.h:30
uiString::preFixWord
uiString & preFixWord(const uiString &)
Definition: uistring.h:348
std
Definition: fixedstreambuf.h:20
OD::String
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:31
threadlock.h
uiString::data_
uiStringData * data_
Definition: uistring.h:255
append
bool append(OD::ValVec< T, IT > &to, const OD::ValVec< S, J > &from)
append allowing a different type to be merged into set
Definition: typeset.h:239
uiString::isEqualTo
bool isEqualTo(const uiString &oth) const
uiString::datalock_
Threads::Lock datalock_
Definition: uistring.h:256
uiString::set
uiString & set(const uiString &s)
Definition: uistring.h:142
uiString::append
uiString & append(const OD::String &s, bool nl=false)
Definition: uistring.h:221
uiString::operator==
bool operator==(const uiString &oth) const
Definition: uistring.h:127
uiString::useEncodedStorageString
int useEncodedStorageString(const char *)
returns -1 for fail, >= 0 the number of chars used
uiString::Space
@ Space
Definition: uistring.h:178
uiString::append
uiString & append(const char *s, bool nl=false)
Definition: uistring.h:219
uiString::arg
uiString & arg(const uiString &)
uiString::withSurvDepthUnit
uiString & withSurvDepthUnit()
muiStringAppendDefArgs
#define muiStringAppendDefArgs
Definition: uistring.h:169
uiString::addAlternateVersion
void addAlternateVersion(const uiString &)
uiString::operator<
bool operator<(const uiString &b) const
od_uint32
#define od_uint32
Definition: plftypes.h:31
getUiYesNoString
uiString getUiYesNoString(bool res)
Threads::Lock
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
uiString::empty
static const uiString & empty()
Definition: uistring.h:154
uiString::getString
BufferString getString() const
untranslated but arguments evaluated
uiString::append
uiString & append(const uiString &s, bool nl=false)
Definition: uistring.h:217
uiString::~uiString
~uiString()
uiString::appendIncorrect
uiString & appendIncorrect(const uiString &, char sep=' ')
Definition: uistring.h:405
uiString::makeIndependent
void makeIndependent()
Reads hex-data and sets the translated str.

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