OpendTect  6.3
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 ________________________________________________________________________
11 
12 A translator is an object specific for a certain storage mechanism coupled with
13 specific details about how to interpret/write a certain format.
14 
15 A Translator is member of a group, e.g. the Wavelet Translator group.
16 Translator groups have a description of IOObj context needed to select an
17 object of that type.
18 
19 */
20 
21 #include "generalmod.h"
22 #include "refcount.h"
23 #include "objectset.h"
24 #include "callback.h"
25 #include "bufstring.h"
26 #include "streamconn.h"
27 #include "ctxtioobj.h"
28 #include "uistring.h"
29 class Translator;
30 
31 #define mDGBKey "dGB"
32 #define mdTectKey "dTect"
33 
34 #define mObjSelUnrelated 0
35 #define mObjSelRelated 1
36 #define mObjSelMatch 2
37 mGlobal(General) int defaultSelector(const char*,const char*);
38 
39 
54 mExpClass(General) TranslatorGroup : public RefCount::Referenced
55 {
56 public:
57 
58  TranslatorGroup( const char* clssnm );
59 
60  virtual FixedString groupName() const = 0;
61  virtual uiString typeName(int num=1) const = 0;
62  virtual Translator* make(const char*,bool usrnm) const;
63  const Translator* getTemplate(const char*,bool usrnm) const;
64 
65  const ObjectSet<const Translator>& templates() const { return templs_; }
66 
67  virtual const IOObjContext& ioCtxt() const = 0;
68  virtual int objSelector(const char*) const = 0;
70 
71  bool hasConnType(const char*) const;
72  virtual const char* defExtension() const { return 0; }
73  IOPar& selHist();
74  void clearSelHist();
75 
76  static const ObjectSet<TranslatorGroup>& groups() { return getGroups(); }
77  static TranslatorGroup& getGroup(const char* nm);
78  static bool hasGroup(const char* nm);
79  static void clearSelHists();
80 
81  // Called from macros
82  bool add(Translator*);
83  static TranslatorGroup& addGroup(TranslatorGroup*);
84 
85  int defTranslIdx() const { return deftridx_; }
86  void setDefTranslIdx( int i ) { deftridx_ = i; }
87 
88  virtual const char* getSurveyDefaultKey(const IOObj* = 0) const;
89 
90  virtual const char* translationApplication() const;
91 
92 protected:
93  ~TranslatorGroup();
94 
95  const OD::String& clssName() const { return clssname_; }
96 
99  int deftridx_;
101 
102  static ObjectSet<TranslatorGroup>& getGroups();
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; }
151  virtual IOObj* createWriteIOObj(const IOObjContext&,
152  const DBKey&) 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 
163 public:
164  static uiString sNoIoobjMsg();
165  static uiString sBadConnection();
167 };
168 
169 
170 
171 
172 // Essential macros for implementing the concept
173 #define mImplTranslatorInitClass( spec, clss, usrnm ) \
174 { \
175  spec##clss##Translator* tr = new spec##clss##Translator( #spec, usrnm ); \
176  clss##TranslatorGroup::theInst().add( tr ); \
177 }
178 
179 #define mImplTranslatorGroupTheInst( clss ) \
180 { \
181  mDefineStaticLocalObject(RefMan<TranslatorGroup>, inst, \
182  = &TranslatorGroup::addGroup( new clss##TranslatorGroup ));\
183  return *inst; \
184 }
185 
186 
188 #define isTranslatorGroup(clss) \
189 protected: \
190  ~clss##TranslatorGroup() {} \
191 public: \
192  static int selector(const char*); \
193  static void initClass() { theInst(); } \
194  static const IOObjContext& ioContext(); \
195  static FixedString sGroupName(); \
196  static uiString sTypeName(int num=1); \
197  virtual FixedString groupName() const { return sGroupName(); } \
198  virtual uiString typeName(int num=1) const \
199  { return sTypeName(num); } \
200  virtual const IOObjContext& ioCtxt() const { return ioContext(); } \
201  virtual int objSelector( const char* s ) const { return selector(s); } \
202  static TranslatorGroup& theInst()
203 
204 
205 #define isTranslatorGroupWithInst( clss ) \
206 isTranslatorGroupBody( clss ) \
207 mImplTranslatorGroupTheInst( clss )
208 
209 
211 #define isTranslatorBody(spec,clss) \
212 public: \
213  Translator* getNew() const \
214  { \
215  Translator* trans = new spec##clss##Translator(typeName().buf(), \
216  userName().buf()); \
217  trans->setGroup( group_ ); return trans; \
218  } \
219  static spec##clss##Translator* getInstance(); \
220  static const char* translKey(); \
221  static void initClass()
222 
223 
224 #define isTranslator( spec, clss ) \
225 isTranslatorBody( spec, clss );
226 
227 #define mIsTranslatorWithInitClass( spec, clss, usrnm ) \
228 isTranslatorBody(spec, clss) \
229 mImplTranslatorInitClass(spec, clss, usrnm )
230 
232 #define defineTranslatorGroup(clss,groupname) \
233 FixedString clss##TranslatorGroup::sGroupName() \
234 { return groupname; } \
235 TranslatorGroup& clss##TranslatorGroup::theInst() \
236 mImplTranslatorGroupTheInst( clss )
237 
239 #define defineTranslator(spec,clss,usrnm) \
240 spec##clss##Translator* spec##clss##Translator::getInstance() \
241 { return new spec##clss##Translator(#clss,usrnm); } \
242 const char* spec##clss##Translator::translKey() { return usrnm; } \
243 void spec##clss##Translator::initClass() \
244 mImplTranslatorInitClass( spec, clss, usrnm )
245 
246 
249 #define mDefEmptyTranslatorGroupConstructor(clss) \
250  clss##TranslatorGroup() \
251  : TranslatorGroup(#clss) {}
252 
255 #define mDefEmptyTranslatorBaseConstructor(clss) \
256  clss##Translator( const char* nm, const char* unm ) \
257  : Translator(nm,unm) {}
258 
261 #define mDefEmptyTranslatorConstructor(spec,clss) \
262  spec##clss##Translator( const char* nm, const char* unm ) \
263  : clss##Translator(nm,unm) {}
264 
268 #define mDeclEmptyTranslatorBundle(mod,clss,fmt,defext) \
269 mExpClass(mod) clss##TranslatorGroup : public TranslatorGroup \
270 { isTranslatorGroup(clss); \
271 mTextTranslationClass( clss##TranslatorGroup, \
272 clss##TranslatorGroup::theInst().translationApplication() ) \
273  mDefEmptyTranslatorGroupConstructor(clss) \
274  const char* defExtension() const { return defext; } \
275 }; \
276  \
277 mExpClass(mod) clss##Translator : public Translator \
278 { public: \
279  mDefEmptyTranslatorBaseConstructor(clss) \
280 }; \
281  \
282 mExpClass(mod) fmt##clss##Translator : public clss##Translator \
283 { isTranslator(fmt,clss) \
284  mDefEmptyTranslatorConstructor(fmt,clss) \
285 };
286 
290 #define mDefSimpleTranslatorInstances(clss,usrnm,fmt) \
291 defineTranslatorGroup(clss,usrnm) \
292 uiString clss##TranslatorGroup::sTypeName(int) { return toUiString(usrnm); } \
293 defineTranslator(fmt,clss,#fmt)
294 
297 #define mDefSimpleTranslatorSelector(clss) \
298 int clss##TranslatorGroup::selector( const char* s ) \
299 { return defaultSelector(clss##TranslatorGroup::sGroupName(),s); }
300 
304 #define mDefSimpleTranslatorioContextWithExtra(clss,stdtyp,extra) \
305 const IOObjContext& clss##TranslatorGroup::ioContext() \
306 { \
307  static IOObjContext* ctxt = 0; \
308  if ( !ctxt ) \
309  { \
310  ctxt = new IOObjContext( 0 ); \
311  ctxt->stdseltype_ = IOObjContext::stdtyp; \
312  extra; \
313  } \
314  ctxt->trgroup_ = &theInst(); \
315  return *ctxt; \
316 }
317 
320 #define mDefSimpleTranslatorioContext(clss,stdtyp) \
321  mDefSimpleTranslatorioContextWithExtra(clss,stdtyp,)
322 
326 #define mDefSimpleTranslators(clss,usrnm,fmt,stdtyp) \
327 mDefSimpleTranslatorSelector(clss)\
328 mDefSimpleTranslatorInstances(clss,usrnm,fmt) \
329 mDefSimpleTranslatorioContext(clss,stdtyp)
330 
334 #define mDefSimpleTranslatorsWithCtioExtra(clss,usrnm,fmt,stdtyp,extra) \
335 mDefSimpleTranslatorInstances(clss,usrnm,fmt) \
336 mDefSimpleTranslatorSelector(clss) \
337 mDefSimpleTranslatorioContextWithExtra(clss,stdtyp,extra)
338 
343 #define mDefSimpleTranslatorsWithSelKey(clss,usrnm,fmt,stdtyp,selky) \
344  mDefSimpleTranslatorsWithCtioExtra(clss,usrnm,fmt,stdtyp, \
345  ctxt->dirid_ = DBKey::DirID::get(selky))
346 
347 
348 // Convenience macros when using Translator(Group)-related classes
349 
350 #define mIOObjContext(trgrp) \
351  trgrp##TranslatorGroup::ioContext()
352 
353 #define mTranslGroupName(trgrp) \
354  trgrp##TranslatorGroup::sGroupName()
355 
356 #define mTranslTemplInstance(trgrp,tr) \
357  (*trgrp##TranslatorGroup::theInst() \
358  .getTemplate(tr##trgrp##Translator::translKey(),true))
359 
360 #define mTranslCreate(trgrp,tr) \
361  (trgrp##Translator*)trgrp##TranslatorGroup::theInst().make(tr)
362 
363 #define mTranslKey(trgrp,tr) \
364  tr##trgrp##Translator::translKey()
365 
366 #define mMkCtxtIOObj(trgrp) \
367  new CtxtIOObj(trgrp##TranslatorGroup::ioContext())
368 
369 #define mSelHist(trgrp) \
370  trgrp##TranslatorGroup::theInst().selHist()
#define mExpClass(module)
Definition: commondefs.h:157
virtual bool isUserSelectable(bool forread=true) const
Definition: transl.h:149
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
virtual const char * connType() const
virtual IOObj * createWriteIOObj(const IOObjContext &, const DBKey &) const
Definition: ioobj.h:57
virtual const char * iconName() const
Definition: transl.h:153
static uiString sNoIoobjMsg()
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
#define mGlobal(module)
Definition: commondefs.h:160
OD::String that holds an existing text string.
Definition: fixedstring.h:27
virtual bool implExists(const IOObj *, bool forread) const
virtual void usePar(const IOPar &)
Definition: transl.h:143
virtual Translator * getNew() const =0
const OD::String & typeName() const
Definition: transl.h:128
const OD::String & clssName() const
Definition: transl.h:95
static const ObjectSet< TranslatorGroup > & groups()
Definition: transl.h:76
BufferString clssname_
Definition: transl.h:97
Definition: uistring.h:88
const TranslatorGroup * group() const
Definition: transl.h:130
const OD::String & userName() const
Definition: transl.h:129
BufferString usrname_
Definition: transl.h:160
virtual bool implManagesObjects(const IOObj *) const
ObjectSet< const Translator > templs_
Definition: transl.h:98
Group of Translators. Has a static factory.
Definition: transl.h:54
virtual bool implRemove(const IOObj *) const
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
virtual const char * defExtension() const
Definition: transl.h:72
static uiString sBadConnection()
virtual const char * defExtension() const
Definition: transl.h:144
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:29
TranslatorGroup * group_
Definition: transl.h:161
BufferString typname_
Definition: transl.h:159
virtual bool implSetReadOnly(const IOObj *, bool) const
void setDefTranslIdx(int i)
Definition: transl.h:86
int deftridx_
Definition: transl.h:99
I/O Interpreter class for a certain object type.
Definition: transl.h:122
uiString sSelObjectIsWrongType()
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
void setGroup(TranslatorGroup *g)
Definition: transl.h:147
static const Translator * getTemplateInstance(const char *displayname)
int defTranslIdx() const
Definition: transl.h:85
virtual bool implRename(const IOObj *, const char *, const CallBack *cb=0) const
int defaultSelector(const char *, const char *)
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
const ObjectSet< const Translator > & templates() const
Definition: transl.h:65
CallBacks object-oriented (object + method).
Definition: callback.h:62
IOPar * selhist_
Definition: transl.h:100
virtual mODTextTranslationClass(Translator) public ~Translator()
Definition: transl.h:126
const char * getDisplayName() const
"username [group]"
virtual bool implReadOnly(const IOObj *) const
Holds the context for selecting and/or creating IOObjs.
Definition: ioobjctxt.h:59

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