OpendTect  6.6
transl.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: A.H.Bril
8  Date: 21-10-1995
9  Contents: Translators
10 RCS: $Id$
11 ________________________________________________________________________
12 
13 A translator is an object specific for a certain storage mechanism coupled with
14 specific details about how to interpret/write a certain format.
15 
16 A Translator is member of a group, e.g. the Wavelet Translator group.
17 Translator groups have a description of IOObj context needed to select an
18 object of that type.
19 
20 */
21 
22 #include "generalmod.h"
23 #include "refcount.h"
24 #include "objectset.h"
25 #include "callback.h"
26 #include "bufstring.h"
27 #include "streamconn.h"
28 #include "ctxtioobj.h"
29 #include "uistring.h"
30 class Translator;
31 
32 #define mDGBKey "dGB"
33 #define mdTectKey "dTect"
34 
35 #define mObjSelUnrelated 0
36 #define mObjSelRelated 1
37 #define mObjSelMatch 2
38 mGlobal(General) int defaultSelector(const char*,const char*);
39 
40 
57 public:
58 
59  TranslatorGroup( const char* clssnm );
60 
61  virtual FixedString groupName() const = 0;
62  virtual uiString typeName(int num=1) const = 0;
63  virtual Translator* make(const char*,bool usrnm) const;
64  const Translator* getTemplate(const char*,bool usrnm) const;
65 
66  const ObjectSet<const Translator>& templates() const { return templs_; }
67 
68  virtual const IOObjContext& ioCtxt() const = 0;
69  virtual int objSelector(const char*) const = 0;
71 
72  bool hasConnType(const char*) const;
73  virtual const char* defExtension() const { return 0; }
75  void clearSelHist();
76 
77  static const ObjectSet<TranslatorGroup>& groups() { return getGroups(); }
78  static TranslatorGroup& getGroup(const char* nm);
79  static bool hasGroup(const char* nm);
80  static void clearSelHists();
81 
82  // Called from macros
83  bool add(Translator*);
85 
86  int defTranslIdx() const { return deftridx_; }
87  void setDefTranslIdx( int i ) { deftridx_ = i; }
88 
89  virtual const char* getSurveyDefaultKey(const IOObj* = 0) const;
90 
91  virtual const char* translationApplication() const;
92 
93 protected:
94 
95  const OD::String& clssName() const { return clssname_; }
96 
99  int deftridx_;
101 
103 
104 };
105 
106 
122 mExpClass(General) Translator : public CallBacker
124 public:
125  Translator(const char* nm,const char* usr_nm);
126  virtual ~Translator() {}
127 
128  const OD::String& typeName() const { return typname_; }
129  const OD::String& userName() const { return usrname_; }
130  const TranslatorGroup* group() const { return group_; }
131 
132  virtual Translator* getNew() const = 0;
133 
134  virtual bool implExists(const IOObj*,bool forread) const;
135  virtual bool implReadOnly(const IOObj*) const;
136  virtual bool implRename(const IOObj*,const char*,
137  const CallBack* cb=0) const;
138  virtual bool implManagesObjects(const IOObj*) const;
139  virtual bool implRemove(const IOObj*) const;
140  virtual bool implSetReadOnly(const IOObj*,bool) const;
141 
142  virtual const char* connType() const;
143  virtual void usePar(const IOPar&) {}
144  virtual const char* defExtension() const
145  { return group_ ? group_->defExtension() : 0; }
146 
147  void setGroup( TranslatorGroup* g ) { group_ = g; }
148 
149  virtual bool isUserSelectable( bool forread=true ) const
150  { return true; }
152  const MultiID&) const;
153  virtual const char* iconName() const { return "od"; }
154  const char* getDisplayName() const;
155  static const Translator* getTemplateInstance(const char* displayname);
156 
157 protected:
158 
162 
164  const char* extension);
165  static BufferString getAssociatedFileName(const char* fnm,
166  const char* extension);
167  static bool renameAssociatedFile(const char* fnm,
168  const char* ext,const char* newnm);
169  static bool removeAssociatedFile(const char* fnm,
170  const char* ext);
171  static bool setPermAssociatedFile(const char* fnm,
172  const char* ext,bool setwritable);
173  static bool renameLargeFile(const char* fnm,
174  const char* newfnm,const CallBack* cb=0);
175 
176 public:
177 
181 
182 };
183 
184 
185 
186 
187 // Essential macros for implementing the concept
188 #define mImplTranslatorInitClass( spec, clss, usrnm ) \
189 { \
190  spec##clss##Translator* tr = new spec##clss##Translator( #spec, usrnm ); \
191  clss##TranslatorGroup::theInst().add( tr ); \
192 }
193 
194 #define mImplTranslatorGroupTheInst( clss ) \
195 { \
196  mDefineStaticLocalObject(RefMan<TranslatorGroup>, inst, \
197  = &TranslatorGroup::addGroup( new clss##TranslatorGroup ));\
198  return *inst; \
199 }
200 
201 
203 #define isTranslatorGroupBody(clss) \
204 protected: \
205  ~clss##TranslatorGroup() {} \
206 public: \
207  static int selector(const char*); \
208  static void initClass() { theInst(); } \
209  static const IOObjContext& ioContext(); \
210  static FixedString sGroupName(); \
211  static uiString sTypeName(int num=1); \
212  virtual FixedString groupName() const { return sGroupName(); } \
213  virtual uiString typeName(int num=1) const \
214  { return sTypeName(num); } \
215  virtual const IOObjContext& ioCtxt() const { return ioContext(); } \
216  virtual int objSelector( const char* s ) const { return selector(s); } \
217  static TranslatorGroup& theInst()
218 
219 
220 #define isTranslatorGroup( clss ) \
221 mTextTranslationClass( clss##TranslatorGroup, \
222  clss##TranslatorGroup::theInst().translationApplication() ) \
223 isTranslatorGroupBody(clss);
224 
225 #define isTranslatorGroupWithInst( clss ) \
226 isTranslatorGroupBody( clss ) \
227 mImplTranslatorGroupTheInst( clss )
228 
229 
231 #define isTranslatorBody(spec,clss) \
232 public: \
233  Translator* getNew() const \
234  { \
235  Translator* trans = new spec##clss##Translator(typeName().buf(), \
236  userName().buf()); \
237  trans->setGroup( group_ ); return trans; \
238  } \
239  static spec##clss##Translator* getInstance(); \
240  static const char* translKey(); \
241  static void initClass()
242 
243 
244 #define isTranslator( spec, clss ) \
245 isTranslatorBody( spec, clss );
246 
247 #define mIsTranslatorWithInitClass( spec, clss, usrnm ) \
248 isTranslatorBody(spec, clss) \
249 mImplTranslatorInitClass(spec, clss, usrnm )
250 
252 #define defineTranslatorGroup(clss,groupname) \
253 FixedString clss##TranslatorGroup::sGroupName() \
254 { return groupname; } \
255 TranslatorGroup& clss##TranslatorGroup::theInst() \
256 mImplTranslatorGroupTheInst( clss )
257 
259 #define defineTranslator(spec,clss,usrnm) \
260 spec##clss##Translator* spec##clss##Translator::getInstance() \
261 { return new spec##clss##Translator(#clss,usrnm); } \
262 const char* spec##clss##Translator::translKey() { return usrnm; } \
263 void spec##clss##Translator::initClass() \
264 mImplTranslatorInitClass( spec, clss, usrnm )
265 
266 
269 #define mDefEmptyTranslatorGroupConstructor(clss) \
270  clss##TranslatorGroup() \
271  : TranslatorGroup(#clss) {}
272 
275 #define mDefEmptyTranslatorBaseConstructor(clss) \
276  clss##Translator( const char* nm, const char* unm ) \
277  : Translator(nm,unm) {}
278 
281 #define mDefEmptyTranslatorConstructor(spec,clss) \
282  spec##clss##Translator( const char* nm, const char* unm ) \
283  : clss##Translator(nm,unm) {}
284 
288 #define mDeclEmptyTranslatorBundle(mod,clss,fmt,defext) \
289 mExpClass(mod) clss##TranslatorGroup : public TranslatorGroup \
290 { isTranslatorGroup(clss) \
291  mDefEmptyTranslatorGroupConstructor(clss) \
292  const char* defExtension() const { return defext; } \
293 }; \
294  \
295 mExpClass(mod) clss##Translator : public Translator \
296 { public: \
297  mDefEmptyTranslatorBaseConstructor(clss) \
298 }; \
299  \
300 mExpClass(mod) fmt##clss##Translator : public clss##Translator \
301 { isTranslator(fmt,clss) \
302  mDefEmptyTranslatorConstructor(fmt,clss) \
303 };
304 
308 #define mDefSimpleTranslatorInstances(clss,usrnm,fmt) \
309 defineTranslatorGroup(clss,usrnm) \
310 uiString clss##TranslatorGroup::sTypeName(int) { return toUiString(usrnm); } \
311 defineTranslator(fmt,clss,#fmt)
312 
315 #define mDefSimpleTranslatorSelector(clss) \
316 int clss##TranslatorGroup::selector( const char* s ) \
317 { return defaultSelector(clss##TranslatorGroup::sGroupName(),s); }
318 
322 #define mDefSimpleTranslatorioContextWithExtra(clss,stdtyp,extra) \
323 const IOObjContext& clss##TranslatorGroup::ioContext() \
324 { \
325  mDefineStaticLocalObject( PtrMan<IOObjContext>, ctxt, = nullptr ); \
326  if ( !ctxt ) \
327  { \
328  ctxt = new IOObjContext( nullptr ); \
329  ctxt->stdseltype_ = IOObjContext::stdtyp; \
330  extra; \
331  } \
332  ctxt->trgroup_ = &theInst(); \
333  return *ctxt; \
334 }
335 
338 #define mDefSimpleTranslatorioContext(clss,stdtyp) \
339  mDefSimpleTranslatorioContextWithExtra(clss,stdtyp,)
340 
344 #define mDefSimpleTranslators(clss,usrnm,fmt,stdtyp) \
345 mDefSimpleTranslatorSelector(clss)\
346 mDefSimpleTranslatorInstances(clss,usrnm,fmt) \
347 mDefSimpleTranslatorioContext(clss,stdtyp)
348 
352 #define mDefSimpleTranslatorsWithCtioExtra(clss,usrnm,fmt,stdtyp,extra) \
353 mDefSimpleTranslatorInstances(clss,usrnm,fmt) \
354 mDefSimpleTranslatorSelector(clss) \
355 mDefSimpleTranslatorioContextWithExtra(clss,stdtyp,extra)
356 
361 #define mDefSimpleTranslatorsWithSelKey(clss,usrnm,fmt,stdtyp,selky) \
362  mDefSimpleTranslatorsWithCtioExtra(clss,usrnm,fmt,stdtyp, \
363  ctxt->selkey_ = selky)
364 
370 #define mDefEmptyTranslatorBundle(clss,fmt,stdtyp,fmtky,usrnm,uistrfn) \
371  defineTranslatorGroup(clss,usrnm); \
372  uiString clss##TranslatorGroup::sTypeName( int num ) \
373  { return uistrfn(); } \
374  defineTranslator(fmt,clss,fmtky); \
375  mDefSimpleTranslatorioContext(clss,stdtyp); \
376  mDefSimpleTranslatorSelector(clss)
377 
378 // Convenience macros when using Translator(Group)-related classes
379 
380 #define mIOObjContext(trgrp) \
381  trgrp##TranslatorGroup::ioContext()
382 
383 #define mTranslGroupName(trgrp) \
384  trgrp##TranslatorGroup::sGroupName()
385 
386 #define mTranslTemplInstance(trgrp,tr) \
387  (*trgrp##TranslatorGroup::theInst() \
388  .getTemplate(tr##trgrp##Translator::translKey(),true))
389 
390 #define mTranslCreate(trgrp,tr) \
391  (trgrp##Translator*)trgrp##TranslatorGroup::theInst().make(tr)
392 
393 #define mTranslKey(trgrp,tr) \
394  tr##trgrp##Translator::translKey()
395 
396 #define mMkCtxtIOObj(trgrp) \
397  new CtxtIOObj(trgrp##TranslatorGroup::ioContext())
398 
399 #define mSelHist(trgrp) \
400  trgrp##TranslatorGroup::theInst().selHist()
TranslatorGroup::groups
static const ObjectSet< TranslatorGroup > & groups()
Definition: transl.h:77
defaultSelector
int defaultSelector(const char *, const char *)
TranslatorGroup::clearSelHist
void clearSelHist()
TranslatorGroup::getTemplate
const Translator * getTemplate(const char *, bool usrnm) const
TranslatorGroup::selhist_
IOPar * selhist_
Definition: transl.h:100
TranslatorGroup::setDefTranslIdx
void setDefTranslIdx(int i)
Definition: transl.h:87
TranslatorGroup::defExtension
virtual const char * defExtension() const
Definition: transl.h:73
Translator::removeAssociatedFile
static bool removeAssociatedFile(const char *fnm, const char *ext)
Translator::createWriteIOObj
virtual IOObj * createWriteIOObj(const IOObjContext &, const MultiID &) const
uistring.h
Translator::isUserSelectable
virtual bool isUserSelectable(bool forread=true) const
Definition: transl.h:149
TranslatorGroup::templates
const ObjectSet< const Translator > & templates() const
Definition: transl.h:66
mGlobal
#define mGlobal(module)
Definition: commondefs.h:180
ObjectSet< const Translator >
TranslatorGroup::templs_
ObjectSet< const Translator > templs_
Definition: transl.h:98
TranslatorGroup::addGroup
static TranslatorGroup & addGroup(TranslatorGroup *)
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
TranslatorGroup::make
virtual Translator * make(const char *, bool usrnm) const
TranslatorGroup::mRefCountImpl
mRefCountImpl(TranslatorGroup)
TranslatorGroup::selHist
IOPar & selHist()
Translator::implRemove
virtual bool implRemove(const IOObj *) const
TranslatorGroup::hasGroup
static bool hasGroup(const char *nm)
callback.h
CallBacker
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
Translator::getTemplateInstance
static const Translator * getTemplateInstance(const char *displayname)
TranslatorGroup::TranslatorGroup
TranslatorGroup(const char *clssnm)
Translator::defExtension
virtual const char * defExtension() const
Definition: transl.h:144
mODTextTranslationClass
#define mODTextTranslationClass(clss)
Definition: uistring.h:40
bufstring.h
Translator::userName
const OD::String & userName() const
Definition: transl.h:129
Translator::implSetReadOnly
virtual bool implSetReadOnly(const IOObj *, bool) const
Translator::sBadConnection
static uiString sBadConnection()
TranslatorGroup::getGroup
static TranslatorGroup & getGroup(const char *nm)
TranslatorGroup::getGroups
static ObjectSet< TranslatorGroup > & getGroups()
Translator::~Translator
virtual mODTextTranslationClass(Translator) public ~Translator()
Definition: transl.h:126
CallBack
CallBacks object-oriented (object + method).
Definition: callback.h:62
Translator::implExists
virtual bool implExists(const IOObj *, bool forread) const
Translator::getAssociatedFileName
static BufferString getAssociatedFileName(const IOObj &, const char *extension)
IOObjContext
Holds the context for selecting and/or creating IOObjs.
Definition: ctxtioobj.h:62
TranslatorGroup::deftridx_
int deftridx_
Definition: transl.h:99
Translator::sSelObjectIsWrongType
uiString sSelObjectIsWrongType()
TranslatorGroup::objSelector
virtual int objSelector(const char *) const =0
Return value mObjSelUnrelated etc.
IOObj
Definition: ioobj.h:58
Translator::getDisplayName
const char * getDisplayName() const
"username [group]"
FixedString
OD::String that holds an existing text string.
Definition: fixedstring.h:29
TranslatorGroup
Group of Translators. Has a static factory.
Definition: transl.h:56
TranslatorGroup::translationApplication
virtual const char * translationApplication() const
Translator::group
const TranslatorGroup * group() const
Definition: transl.h:130
TranslatorGroup::clearSelHists
static void clearSelHists()
Translator::setPermAssociatedFile
static bool setPermAssociatedFile(const char *fnm, const char *ext, bool setwritable)
Translator::renameAssociatedFile
static bool renameAssociatedFile(const char *fnm, const char *ext, const char *newnm)
MultiID
Compound key consisting of ints.
Definition: multiid.h:24
TranslatorGroup::hasConnType
bool hasConnType(const char *) const
Translator::implManagesObjects
virtual bool implManagesObjects(const IOObj *) const
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
ctxtioobj.h
TranslatorGroup::add
bool add(Translator *)
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
Translator::typname_
BufferString typname_
Definition: transl.h:159
OD::String
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:31
Translator::sNoIoobjMsg
static uiString sNoIoobjMsg()
TranslatorGroup::clssName
const OD::String & clssName() const
Definition: transl.h:95
Translator::group_
TranslatorGroup * group_
Definition: transl.h:161
Translator::renameLargeFile
static bool renameLargeFile(const char *fnm, const char *newfnm, const CallBack *cb=0)
Translator::getNew
virtual Translator * getNew() const =0
Translator
I/O Interpreter class for a certain object type.
Definition: transl.h:123
Translator::usrname_
BufferString usrname_
Definition: transl.h:160
Translator::getAssociatedFileName
static BufferString getAssociatedFileName(const char *fnm, const char *extension)
refcount.h
Translator::usePar
virtual void usePar(const IOPar &)
Definition: transl.h:143
Translator::typeName
const OD::String & typeName() const
Definition: transl.h:128
Translator::implReadOnly
virtual bool implReadOnly(const IOObj *) const
Translator::implRename
virtual bool implRename(const IOObj *, const char *, const CallBack *cb=0) const
Translator::iconName
virtual const char * iconName() const
Definition: transl.h:153
TranslatorGroup::typeName
virtual uiString typeName(int num=1) const =0
Translator::setGroup
void setGroup(TranslatorGroup *g)
Definition: transl.h:147
TranslatorGroup::defTranslIdx
int defTranslIdx() const
Definition: transl.h:86
TranslatorGroup::clssname_
BufferString clssname_
Definition: transl.h:97
objectset.h
TranslatorGroup::getSurveyDefaultKey
virtual const char * getSurveyDefaultKey(const IOObj *=0) const
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
TranslatorGroup::ioCtxt
virtual const IOObjContext & ioCtxt() const =0
Translator::connType
virtual const char * connType() const
TranslatorGroup::groupName
virtual FixedString groupName() const =0
streamconn.h

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