EnglishРусский  

   ..

   gtsave.g

   prj.g

   prj3.g

   prjnew.g

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

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