scaffold  1.0.0
Generates files and directories based on templates and user input
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
generator.h
Go to the documentation of this file.
1 /* ========================================================================= */
2 /* ------------------------------------------------------------------------- *//*
12 
13 
14  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15  Please read COPYING and README files in root folder
16  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 */
18 /* ------------------------------------------------------------------------- */
19 /* ========================================================================= */
20 #ifndef __GENERATOR_INC__
21 #define __GENERATOR_INC__
22 //
23 //
24 //
25 //
26 /* INCLUDES ------------------------------------------------------------ */
27 
28 #include <scaffold/scaffold.h>
29 
30 /* INCLUDES ============================================================ */
31 //
32 //
33 //
34 //
35 /* DEFINITIONS --------------------------------------------------------- */
36 
37 namespace scaffold {
38 
39 /* DEFINITIONS ========================================================= */
40 //
41 //
42 //
43 //
44 /* CLASS --------------------------------------------------------------- */
45 
59 class Generator : public List2De, public bbb::VarMap, public MemTrack {
60  BBM_TRACK( Generator );
61 
62  //
63  //
64  //
65  //
66  /* DEFINITIONS ----------------------------------------------------- */
67 
68 public:
69 
71 # define VGEN_TEMPLATES "TEMPLATES"
72 
73 # define VGEN_NAME "NAME"
74 
75 # define VGEN_OUTPATH "OUTPATH"
76 
77 
79  typedef Generator * (*generatorFactory) ( Project * p, const QString & s_name );
80 
83  OVERWRITE,
84  KEEP,
85  BLEND
86  };
87 
88 
89  /* DEFINITIONS ===================================================== */
90  //
91  //
92  //
93  //
94  /* DATA ------------------------------------------------------------ */
95 
96 private:
97 
99  Project * parent_;
100 
102  QString name_;
103 
105  ExistingPolicy existp_;
106 
108  static QMap<QString,generatorFactory> factories_;
109 
110 
111  /* DATA ============================================================ */
112  //
113  //
114  //
115  //
116  /* FUNCTIONS ------------------------------------------------------- */
117 
118 public:
119 
121  Generator ( Project * p, const QString & s_name );
122 
124  virtual ~Generator ( void );
125 
127  inline Project * parent ( void ) const
128  { return parent_; }
129 
131  const QString & name ( void ) const
132  { return name_; }
133 
135  QString outputPath ( void ) const
136  { return valueS( VGEN_OUTPATH ); }
137 
140  { return existp_; }
141 
144  { existp_ = new_p; }
145 
146 
147  /* -------------------------------------------------------------------- */
151 
152 
154 
166  virtual bool addTemplate (
167  const QString & s_path
168  ) = 0;
169 
171  virtual bool generate ( void ) = 0;
172 
174  /* ==================================================================== */
175 
176 
177  /* -------------------------------------------------------------------- */
181 
182 
184  static void addGeneratorFactory (
185  const QString & s_gen_name,
187  );
188 
190  static void remGeneratorFactory (
191  const QString & s_gen_name
192  );
193 
195  static generatorFactory factory (
196  const QString & s_name
197  );
198 
200  /* ==================================================================== */
201 
202 
203 
204 
205  /* FUNCTIONS ======================================================= */
206  //
207  //
208  //
209  //
210 
211 }; /* class Generator */
212 
213 /* CLASS =============================================================== */
214 //
215 //
216 //
217 //
218 
219 } // namespace scaffold
220 
221 #endif // __GENERATOR_INC__
222 /* ------------------------------------------------------------------------- */
223 /* ========================================================================= */