EnglishРусский  

   ..

   gtsave.g

   prj.g

   prj3.g

   prjnew.g

The project is closed! You can look at a new scripting language. It is available on GitHub.
Also, try our open source cross-platform automation software.

Ads

Installer and installation software
Commercial and Freeware installers.

source\lib\prj\prj.g
  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2006, The Gentee Group. All rights reserved. 
  4 * This file is part of the Gentee open source project - http://www.gentee.com. 
  5 * 
  6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT"). 
  7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS 
  8 * ACCEPTANCE OF THE AGREEMENT.
  9 *
 10 * ID: prj 17.10.06 0.0.A.
 11 *
 12 * Author: Alexey Krivonogov ( gentee )
 13 *
 14 ******************************************************************************/
 15 
 16 include
 17 {
 18    $"..\gt2\gt.g"
 19 }
 20 
 21 /*-----------------------------------------------------------------------------
 22 *
 23 * ID: prj 12.10.06 1.1.A. 
 24 * 
 25 * Summary: Project type
 26 *  
 27 -----------------------------------------------------------------------------*/
 28 
 29 type prj <inherit = gt2 index = str>
 30 {
 31    uint opened       // 1 if there is an open project
 32    uint changed      // 1 if the project was changed
 33    uint nfy          // id of the notify function
 34    str  filename     // The current file name or an empty string
 35    str  program      // The unique program name
 36    uint version      // The unique version
 37    str  update       // Update data for adding missing values
 38 }
 39 
 40 /*-----------------------------------------------------------------------------
 41 *
 42 * ID: prjnfy 12.10.06 1.1.A. 
 43 * 
 44 * Summary: Project notify codes
 45 *  
 46 -----------------------------------------------------------------------------*/
 47 
 48 define <export>
 49 {
 50    PRJNFY_OPEN = 0    // The project was opened
 51    PRJNFY_CLOSE       // The project was closed
 52    PRJNFY_CANCLOSE    // Send when the user tries to close the project
 53    PRJNFY_CHANGE      // The project was chaged. Send one time (after the 
 54                       // first changing )
 55    PRJNFY_NEW         // Request the new project pattern
 56    PRJNFY_NAME        // Change the file name    
 57 }
 58 
 59 global
 60 {
 61    str  prjempty
 62 }
 63 
 64 /*-----------------------------------------------------------------------------
 65 *
 66 * ID: prj_setnotify 12.10.06 1.1.A. 
 67 * 
 68 * Summary: Specify notify function. func uint name( prj iprj, uint code )
 69   where code can be PRJNFY_*
 70 *  
 71 -----------------------------------------------------------------------------*/
 72 
 73 method  prj.settings( uint nfyfunc, str program, uint version )
 74 {
 75    this.nfy = nfyfunc
 76    this.program = program
 77    this.version = version         
 78 }
 79 
 80 /*-----------------------------------------------------------------------------
 81 *
 82 * ID: prj_notify 12.10.06 1.1.A. 
 83 * 
 84 * Summary: Send notify message PRJNFY_*
 85 *  
 86 -----------------------------------------------------------------------------*/
 87 
 88 method uint prj.notify( uint nfy )
 89 {
 90    if this.nfy : return this.nfy->func( this, nfy )
 91    return 0      
 92 }
 93 
 94 /*-----------------------------------------------------------------------------
 95 *
 96 * ID: prj_close 12.10.06 1.1.A. 
 97 * 
 98 * Summary: Close the project
 99 *  
100 -----------------------------------------------------------------------------*/
101 
102 method uint prj.close
103 {
104    if !this.opened : return 1
105    
106    this.notify( $PRJNFY_CANCLOSE ) 
107    
108    this.clear()
109    this.opened = 0
110    this.changed = 0
111 //   this.filename.clear()   
112    
113    this.notify( $PRJNFY_CLOSE )
114    return 1   
115 }
116 
117 /*-----------------------------------------------------------------------------
118 *
119 * ID: prj_new 12.10.06 1.1.A. 
120 * 
121 * Summary: Specify notify function. func uint name( prj iprj, uint code )
122   where code can be PRJNFY_*
123 *  
124 -----------------------------------------------------------------------------*/
125 
126 method uint prj.new
127 {
128    if $DEBUG : print("prj.new > OK \n")
129    if this.opened : this.close()
130    if $DEBUG : print("prj.new >> OK \n")
131    if $DEBUG : print("prj.new >>>\(this.update)<<< \n")
132    if *this.update : this += this.update
133    if $DEBUG : print("prj.new >>>> OK \n")
134 
135    this.notify( $PRJNFY_NEW )
136    this.filename.clear()
137    this.opened = 1
138    this.changed = 1   
139    this.notify( $PRJNFY_OPEN )
140    return 1   
141 }
142 
143 /*-----------------------------------------------------------------------------
144 *
145 * ID: prj_open 12.10.06 1.1.A. 
146 * 
147 * Summary: Load a project from the file
148 *  
149 -----------------------------------------------------------------------------*/
150 
151 method uint prj.open( str filename )
152 {
153    if this.opened : this.close()
154    if *this.update : this += this.update
155    this.read( filename )
156    this.filename = filename
157    this.opened = 1
158    this.notify( $PRJNFY_OPEN )
159    return 1   
160 }
161 
162 /*-----------------------------------------------------------------------------
163 *
164 * ID: prj_save 12.10.06 1.1.A. 
165 * 
166 * Summary: Save a project
167 *  
168 -----------------------------------------------------------------------------*/
169 
170 method uint prj.save()
171 {
172    gt2save gt2s
173    
174    if !this.opened || !*this.filename : return 0
175     
176    gt2s.offstep = 3
177    gt2s.inside = 0
178    gt2s.endname = 0
179    
180    this.write( this.filename, gt2s )
181    if this.changed
182    {
183       this.changed = 0
184       this.notify( $PRJNFY_CHANGE )
185    }
186    return 1   
187 }
188 
189 /*-----------------------------------------------------------------------------
190 *
191 * ID: prj_save 12.10.06 1.1.A. 
192 * 
193 * Summary: Save a project to the filename
194 *  
195 -----------------------------------------------------------------------------*/
196 
197 method uint prj.save( str filename )
198 {
199    uint ret
200    
201    this.filename = filename
202    ret = this.save()   
203    this.notify( $PRJNFY_NAME )
204    return ret
205 }
206 
207 /*-----------------------------------------------------------------------------
208 *
209 * ID: prj_index 12.10.06 1.1.A. 
210 * 
211 * Summary: 
212 *  
213 -----------------------------------------------------------------------------*/
214 
215 method uint prj.index( str name )
216 {
217    uint gti
218    
219    gti as this.find( "project/\(name)" )
220    if >i : return >i.value
221    prjempty.clear()
222    return &prjempty
223 }
224 
225 /*-----------------------------------------------------------------------------
226 *
227 * ID: prj_set 12.10.06 1.1.A. 
228 * 
229 * Summary: Set a project value
230 *  
231 -----------------------------------------------------------------------------*/
232 
233 method prj.set( str name value )
234 {
235    uint  sti
236    
237    sti as this[ name ]
238    if &sti
239    {
240       sti = value
241       if !this.changed
242       {
243          this.changed = 1
244          this.notify( $PRJNFY_CHANGE )
245       }
246    }
247 }
248 
249 /*-----------------------------------------------------------------------------
250 *
251 * ID: prj_set 12.10.06 1.1.A. 
252 * 
253 * Summary: Set a project value
254 *  
255 -----------------------------------------------------------------------------*/
256 
257 method prj.set( gt2item gti, str value )
258 {
259    gti.value = value
260    if !this.changed
261    {
262       this.changed = 1
263       this.notify( $PRJNFY_CHANGE )
264    }
265 }
266 
267 /*-----------------------------------------------------------------------------
268 *
269 * ID: prj_insert 12.10.06 1.1.A. 
270 * 
271 * Summary: Insert project items
272 *  
273 -----------------------------------------------------------------------------*/
274 
275 method gt2item prj.insert( str data, gt2item parent after )
276 {
277    uint  ret
278  
279    if $DEBUG : print("Insert > OK \(&after)\n")
280    ret as parent.load( data, after )
281    if $DEBUG : print("Insert >> OK\n")
282    if !this.changed
283    {
284       this.changed = 1
285       this.notify( $PRJNFY_CHANGE )
286    }
287    if $DEBUG : print("Insert >>> OK\n")
288     
289    return ret->gt2item
290 }
291 
292 /*-----------------------------------------------------------------------------
293 *
294 * ID: prj_moveup 12.10.06 1.1.A. 
295 * 
296 * Summary: Move the project item up
297 *  
298 -----------------------------------------------------------------------------*/
299 
300 method gt2item prj.moveup( gt2item cur )
301 {
302    if cur.moveup() && !this.changed
303    {
304       this.changed = 1
305       this.notify( $PRJNFY_CHANGE )
306    }    
307    return cur
308 }
309 
310 /*-----------------------------------------------------------------------------
311 *
312 * ID: prj_movedown 12.10.06 1.1.A. 
313 * 
314 * Summary: Move the project item down
315 *  
316 -----------------------------------------------------------------------------*/
317 
318 method gt2item prj.movedown( gt2item cur )
319 {
320    if cur.movedown() && !this.changed
321    {
322       this.changed = 1
323       this.notify( $PRJNFY_CHANGE )
324    }    
325    return cur
326 }
327 
328 /*-----------------------------------------------------------------------------
329 *
330 * ID: prj_disable 12.10.06 1.1.A. 
331 * 
332 * Summary: Move the project item down
333 *  
334 -----------------------------------------------------------------------------*/
335 
336 method uint prj.disable( gt2item gti, uint state )
337 {
338    if state : gti.setattrib( "disable" )
339    else : gti.delattrib( "disable" )
340    
341    if !this.changed
342    {
343       this.changed = 1
344       this.notify( $PRJNFY_CHANGE )
345    }    
346    return 1
347 }
348 
349 /*-----------------------------------------------------------------------------
350 *
351 * ID: prj_disable 12.10.06 1.1.A. 
352 * 
353 * Summary: Move the project item down
354 *  
355 -----------------------------------------------------------------------------*/
356 
357 method uint prj.del( gt2item gti )
358 {
359    gti.del()
360       
361    if !this.changed
362    {
363       this.changed = 1
364       this.notify( $PRJNFY_CHANGE )
365    }    
366    return 1
367 }