EnglishРусский  

   ..

   addustr.g

   app.g

   btn.g

   btnpic.g

   comp.g

   ctrl.g

   dialogs.g

   edit.g

   events.g

   fonts.g

   form.g

   gray.g

   grey.g

   images.g

   label.g

   labeled.g

   locustr.g

   menu.g

   panel.g

   picture.g

   s.txt

   styles.g

   tab.g

   tabitem.g

   tabpage.g

   toolbar.g

   tray.g

   treeviewitem.g

   url.g

   vis.g

   viswin.g

Ads

Perfect Automation tool
All-In-One: Script editor, Launcher, Scheduler, Keyboard & Mouse Recorder. Try now!

CreateInstall
Freeware and commercial installers.

Cell Phone Batteries
Batteries Plus offers batteries for laptop, camcorder, cell phone, camera.

Gentee needs your help!
How to advertise with us
 
laptop battery

source\lib\vis\treeviewitem.g
  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2004-2007, 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: vis.treeviewitem 25.09.07 0.0.A.
 11 *
 12 * Author: Alexander Krivonogov ( gentee )
 13 *
 14 ******************************************************************************/
 15 
 16 extern
 17 {
 18 property TVItem TVItem.Parent
 19 property TVItem TVItem.Next
 20 property TVItem TVItem.Prev
 21 property TVItem TVItem.LastChild
 22 }
 23 
 24 
 25 method TVItem.iItemUpdate( uint mask )
 26 {
 27    TVITEM item
 28    uint   state
 29    item.mask = mask    
 30    item.hItem = .param->treedata.handle      
 31     
 32    
 33    
 34    if .getuint( "bold" ) : state |= $TVIS_BOLD
 35   
 36    item.iImage = -1
 37    item.iSelectedImage = -1
 38    if .param->treedata.treeview && .param->treedata.treeview->vTreeView.ptrImageList
 39    {  
 40       uint tname
 41       ustr imgname   
 42       tname as .get( "image" )
 43       if &tname
 44       {
 45          imgname.fromutf8( tname )
 46          //print( "zzzz \(uint( .get( "disabled", "" ))) \n" )
 47          item.iImage = .param->treedata.treeview->vTreeView.ptrImageList->ImageList.GetImageIdx( .param->treedata.treeview->vTreeView.iNumIml, imgname, uint( .get( "disabled", "" ) ) )         
 48       }
 49       tname as .get( "selectedimage" )
 50       if &tname
 51       {
 52          imgname.fromutf8( tname )
 53          item.iSelectedImage = .param->treedata.treeview->vTreeView.ptrImageList->ImageList.GetImageIdx( .param->treedata.treeview->vTreeView.iNumIml, imgname,  uint( .get( "disabled", "" ) ) )
 54       }         
 55    }
 56    
 57    if item.iImage != -1 && item.iSelectedImage = -1
 58    {
 59       item.iSelectedImage = item.iImage
 60    }
 61    
 62    //print( "image \( item.iImage ) \( item.iSelectedImage )\n" )
 63    //if .param->treedata.inselections { state |= $TVIS_SELECTED//$TVIS_DROPHILITED //| $TVIS_CUT
 64    //item.state = state | $TVIS_EXPANDPARTIAL 
 65    item.stateMask = $TVIS_BOLD //| $TVIS_EXPANDEDONCE /*| $TVIS_BOLD |/ $TVIS_SELECTED //|$TVIS_DROPHILITED//| $TVIS_CUT | $TVIS_EXPANDPARTIAL*/
 66    //print( "l0 \n")
 67    
 68    //.Label      
 69    item.pszText = .Label->locustr.Text( .param->treedata.treeview->vTreeView ).ptr()
 70     
 71    .param->treedata.treeview->vTreeView.WinMsg( $TVM_SETITEMW, 0, &item )
 72    
 73    if mask & $TVIF_STATE
 74    {    
 75     //state |= $TVIS_EXPANDEDONCE    
 76       .param->treedata.treeview->vTreeView.WinMsg( $TVM_EXPAND, ?( .getuint( "expanded" ), $TVE_EXPAND, $TVE_COLLAPSE ), .param->treedata.handle )
 77    }            
 78 }
 79 
 80 method TVItem.iItemInsert( TVItem child )
 81 {   
 82    TVINSERTSTRUCT ti
 83 
 84    uint thisdata as .param->treedata
 85    
 86    uint sorttype = .getuint( "sorttype" )      
 87    if sorttype & $TVSORT_SORT
 88    {
 89       ti.hInsertAfter = $TVI_SORT          
 90    }
 91    else
 92    {
 93       uint prev as child.Prev    
 94       ti.hInsertAfter = ?( &prev, prev.param->treedata.handle, $TVI_FIRST )      
 95       //ti.hInsertAfter = ?( &after, ?( &after==0xFFFFFFFF, $TVI_LAST, after.param->treedata.handle ), $TVI_FIRST )
 96    }
 97    ti.hParent = thisdata.handle
 98    ti.item.mask = $TVIF_PARAM | $TVIF_TEXT
 99    ti.item.lParam = &child
100    //print( "Label \(.Label->locustr.Text( .param->treedata.treeview->vTreeView ).str())\n" )
101    ti.item.pszText = child.Label->locustr.Text( .param->treedata.treeview->vTreeView ).ptr()
102    child.param->treedata.handle = thisdata.treeview->vTreeView.WinMsg( $TVM_INSERTITEMW, 0, &ti )   
103 //   child.iItemUpdate( $TVIF_STATE | $TVIF_TEXT | $TVIF_SELECTEDIMAGE | $TVIF_IMAGE)   
104 }
105 
106 
107 property gtitem TVItem.Children
108 {
109    return .findrel( "/children" )   
110 }
111 
112 
113 method TVItem.Release()
114 {
115    /*if this.InSelections
116    {
117       this.InSelections = 0
118    }*/       
119    if .param
120    {      
121       uint children as .Children
122       if &children
123       {
124          uint prev as children.lastchild()->TVItem
125          while &prev
126          {       
127             prev.Release()
128             prev as prev.Prev
129          }
130          //fornum i = 0, children
131          /*foreach child, children
132          {
133             child->TVItem.Release()
134          }*/
135       }
136       if &this && .param->treedata.treeview
137       {
138          if &this == .param->treedata.treeview->vTreeView.pSelected 
139          {         
140             uint next            
141             if ( (next = &this.Next) && next->TVItem.param ) || 
142                ( (next = &this.Prev) && next->TVItem.param ) || 
143                ( next = &this.Parent ) 
144             {
145             }            
146             .param->treedata.treeview->vTreeView.Selected = next->TVItem
147          }
148          .param->treedata.treeview->vTreeView.WinMsg( $TVM_DELETEITEM, 0, .param->treedata.handle )
149       }
150       if &this != &.param->treedata.treeview->vTreeView.gttree.root()
151       {
152          destroy( .param )      
153          .param = 0   
154       }      
155    }
156 }
157 
158 method TVItem.Del()
159 {
160    this.Release()   
161    this.del()
162    /*if this.InSelections
163    {
164       this.InSelections = 0
165    }*/
166 /*   if .param
167    {
168       if &this == .param->treedata.treeview->vTreeView.pSelected 
169       {
170          .param->treedata.treeview->vTreeView.pSelected = 0
171       }   
172       uint children as .Children
173       if &children
174       {
175          foreach child, children
176          {
177             child->TVItem.Del()
178          }
179       }
180       if &this && .param->treedata.treeview
181       {   
182          .param->treedata.treeview->vTreeView.WinMsg( $TVM_DELETEITEM, 0, .param->treedata.handle )
183       }  
184       
185       if &this != &.param->treedata.treeview->vTreeView.gttree.root()
186       {
187          destroy( .param )
188          this.del()
189       }
190    }*/   
191 }
192 
193 /* Свойство ustr Label - Get Set
194 Устанавливает или определяет заголовок элемента дерева
195 */
196 property ustr TVItem.Label <result>
197 { 
198    uint name as .get( "label" )
199    result.clear()   
200    if &name
201    {
202       result.fromutf8( name ).ptr()
203    }        
204 }
205 
206 property TVItem.Label( ustr val )
207 {
208    .set( "label", val.toutf8( "" ) )
209    .iItemUpdate( $TVIF_TEXT )
210 }
211 
212 /* Свойство ustr vToolBarItem.ImageId - Get Set
213 Устанавливает или получает картинку
214 */
215 property ustr TVItem.ImageId <result>
216 {
217    result.fromutf8( .get( "image" ) ).ptr()
218 }
219 
220 property TVItem.ImageId( ustr val )
221 {
222    //if val != "".ustr().fromutf8( .get( "image" ) )
223    { 
224       .set( "image", val.toutf8( "" ) )
225       .iItemUpdate( $TVIF_IMAGE | $TVIF_SELECTEDIMAGE )     
226    }   
227 }
228 
229 
230 
231 method TVItem TVItem.InsertChild( ustr name, uint tag, ustr image, TVItem after )
232 {   
233    
234    if &this && .param->treedata.treeview
235    {         
236       //uint children as .findrel( "\children" )
237       uint children as .Children      
238       if !&children : children as .insertchild( "children", 0->gtitem )
239    
240       uint thisdata as .param->treedata       
241       uint child as children.insertchild( "", after )->TVItem       
242       uint childdata as new( treedata )->treedata
243       childdata.treeview = thisdata.treeview
244       child.param = &childdata
245       child.set( "label", name.toutf8( "" ) )
246       child.setuint( "tag", tag )      
247       if &image && *image
248       {
249          child.set( "image", image.toutf8( "" ) )
250       } 
251       //print( "add \(&this) \(&child)\n" )
252       //TVINSERTSTRUCT ti
253       //ti.item.pszText = name.ptr()
254       uint sorttype = .getuint( "sorttype" )       
255       if sorttype & $TVSORT_SORT
256       {         
257          //ti.hInsertAfter = $TVI_SORT
258          if sorttype == $TVSORT_SORTRECURSE 
259          {
260             child.setuint( "sorttype", sorttype )
261          }         
262       }
263       .iItemInsert( child )
264       child.iItemUpdate( $TVIF_STATE | $TVIF_TEXT | $TVIF_SELECTEDIMAGE | $TVIF_IMAGE)
265       if !&.param->treedata.treeview->vTreeView.Selected 
266       {
267          .param->treedata.treeview->vTreeView.Selected = child
268       }
269       /*else
270       {
271          ti.hInsertAfter = ?( &after, ?( &after==0xFFFFFFFF, $TVI_LAST, after.param->treedata.handle ), $TVI_FIRST )
272       }
273       ti.hParent = thisdata.handle
274       ti.item.mask = $TVIF_TEXT | $TVIF_PARAM// | $TVIF_SELECTEDIMAGE | $TVIF_IMAGE
275       //ti.item.stateMask = $TVIS_STATEIMAGEMASK
276       //ti.item.state = 0x2000
277       ti.item.lParam = &child
278       ti.item.iImage = -1
279       ti.item.iSelectedImage = -1 
280       childdata.handle = thisdata.treeview->vTreeView.WinMsg( $TVM_INSERTITEMW, 0, &ti )*/
281       return child->TVItem
282    }
283    return 0->TVItem
284 }
285  
286 method TVItem TVItem.InsertFirstChild( ustr name, uint tag, ustr image )
287 {   
288    return this.InsertChild( name, tag, image, 0->TVItem ) 
289 }
290 
291 method TVItem TVItem.AppendChild( ustr name, uint tag, ustr image )
292 {
293    return this.InsertChild( name, tag, image, 0xFFFFFFFF->TVItem )
294 }
295 
296 method TVItem TVItem.InsertFirstChild( ustr name, uint tag )
297 {   
298    return this.InsertChild( name, tag, 0->ustr, 0->TVItem ) 
299 }
300 
301 method TVItem TVItem.AppendChild( ustr name, uint tag )
302 {
303    return this.InsertChild( name, tag, 0->ustr, 0xFFFFFFFF->TVItem )
304 }
305 
306 /*operator uint *( TVItem item )
307 {
308    uint count
309    if &item && item.TreeView
310    {      
311       uint tv as item.TreeView->vTreeView
312       uint cur = tv.WinMsg( $TVM_GETNEXTITEM, $TVGN_CHILD, item.handle )      
313       while cur
314       {  
315          count++
316          tv.WinMsg( $TVM_GETNEXTITEM, $TVGN_NEXT, cur )
317       } 
318    }
319    return count
320    return *item->gtitem
321 }*/
322 
323 method TVItem TVItem.index( uint idx )
324 {
325    /*uint count
326    if &this && .TreeView
327    {      
328       uint tv as .TreeView->vTreeView
329       uint cur = tv.WinMsg( $TVM_GETNEXTITEM, $TVGN_CHILD, this.handle )      
330       while cur
331       {  
332          if count == idx 
333          {
334             TVITEM item
335             item.mask = $TVIF_PARAM
336             item.hItem = cur
337             if tv.WinMsg( $TVM_GETITEMW, 0, &item )
338             {
339                return tv.items[ item.lParam ]
340             }
341             break
342          }
343          count++
344          tv.WinMsg( $TVM_GETNEXTITEM, $TVGN_NEXT, cur )
345       } 
346    }*/
347    return 0->TVItem   
348 }
349 
350 
351 
352 /* Свойство uint Expand - Get Set
353 Устанавливает или определяет открытие ветки
354 0 - ветка закрыта
355 1 - ветка открыта
356 */
357 property uint TVItem.Expanded
358 { 
359    return .getuint( "expanded" )  
360 }
361 
362 property TVItem.Expanded( uint val )
363 {
364    if .getuint( "expanded" ) != val
365    {
366       //.param->treedata.treeview->vTreeView.WinMsg( $TVM_EXPAND, ?( val, $TVE_EXPAND, $TVE_COLLAPSE ), .param->treedata.handle ) 
367       .setuint( "expanded", val )
368       .iItemUpdate( $TVIF_STATE )
369    }
370    //.iItemUpdate( $TVIF_STATE )
371 }
372 
373 
374 /* Свойство uint Tag - Get Set
375 Устанавливает или определяет пользовательский параметр элемента дерева
376 */
377 property uint TVItem.Tag
378 { 
379    return .getuint( "tag" )  
380 }
381 
382 property TVItem.Tag( uint val )
383 {
384    .setuint( "tag", val )
385 }
386 
387 /* Свойство uint Bold - Get Set
388 Устанавливает или определяет пользовательский параметр элемента дерева
389 */
390 property uint TVItem.Bold
391 { 
392    return .getuint( "bold" )  
393 }
394 
395 property TVItem.Bold( uint val )
396 {
397    .setuint( "bold", val )
398    .iItemUpdate( $TVIF_STATE )
399 }
400 
401 /* Свойство uint Checked - Get Set
402 Устанавливает или определяет пользовательский параметр элемента дерева
403 */
404 property uint TVItem.Checked
405 { 
406    return .getuint( "checked" )  
407 }
408 
409 property TVItem.Checked( uint val )
410 {
411    .setuint( "checked", val )
412    //.iItemUpdate( $TVIF_STATE )
413 }
414 
415 /* Свойство uint SortTYpe - Get Set
416 Устанавливает или определяет пользовательский параметр элемента дерева
417 */
418 property uint TVItem.SortType
419 { 
420    return .getuint( "sorttype" )  
421 }
422 
423 property TVItem.SortType( uint val )
424 {  
425    .setuint( "sorttype", ?( val & $TVSORT_SORT, val, $TVSORT_NONE ))
426    if val & $TVSORT_SORT
427    {   
428       .param->treedata.treeview->vTreeView.WinMsg( $TVM_SORTCHILDREN, 0, .param->treedata.handle )
429    }   
430    if val & $TVSORT_RECURSE 
431    {         
432       uint children as .Children
433       if &children
434       {     
435          foreach child, children
436          {       
437             child->TVItem.SortType = val
438          }
439       }
440    }
441    
442    //.iItemUpdate( $TVIF_STATE )
443 }
444 
445 /* Свойство uint Parent - Get
446 Определяет хозяина данной ветки, если ветка в корне то корень, если корень то 0
447 */
448 property TVItem TVItem.Parent
449 {    
450    return this->gtitem.parent().parent()->TVItem
451 
452 //   return this->gtitem.parent()->TVItem 
453 }
454 
455 /* Свойство uint Prev - Get
456 Определяет предыдущий элемент, если он есть, иначе 0
457 */
458 property TVItem TVItem.Prev
459 {    
460    uint x = &(this->gtitem.getprev())
461    //print( "TVItem.Prev \(x)\n" )
462    return x->TVItem
463    //return this->gtitem.getprev()->TVItem
464 }
465 
466 /* Свойство uint Next - Get
467 Определяет следующий элемент, если он есть, иначе 0
468 */
469 property TVItem TVItem.Next
470 {    
471    return this->gtitem.getnext()->TVItem
472 }
473 
474 /* Свойство uint NextInList - Get
475 Определяет следующий элемент в глобальном списке или 0 если больше нет
476 */
477 property TVItem TVItem.NextInList
478 {    
479    uint item
480    uint parent  
481       
482    item as this.Child 
483    if &item : return item
484    parent as this  
485    do 
486    {       
487       item as parent.Next
488       if &item : return item
489       if &parent == &(.param->treedata.treeview->vTreeView.Root())
490       {
491          return 0->TVItem
492       }
493       parent as parent.Parent
494    } while &parent
495    return 0->TVItem
496 }
497 
498 /* Свойство uint LastChild - Get
499 Определяет последний дочерний элемент, если он есть, иначе 0
500 */
501 property TVItem TVItem.LastChild
502 {    
503    uint children as .Children
504    if &children : return children.lastchild()->TVItem 
505    return 0->TVItem
506    //return this->gtitem.lastchild()->TVItem
507 }
508 
509 /* Свойство uint Child - Get
510 Определяет первый дочерний элемент данной ветки, если ветка не имеет дочерних элементов, то 0
511 */
512 property TVItem TVItem.Child
513 {
514    uint children as .Children
515    if &children : return children.child()->TVItem 
516    return 0->TVItem
517 /*        
518    uint res as this.child()    
519    return res->TVItem*/ 
520 }
521 
522 
523 
524 method TVItem.Reinsert()
525 {      
526    uint owner as this.Parent()   
527    
528    owner.iItemInsert( this )
529    uint children as .Children
530    if &children
531    {
532       foreach child, children
533       {
534          child->TVItem.Reinsert()
535       }
536    }
537    this.iItemUpdate( $TVIF_STATE | $TVIF_TEXT | $TVIF_SELECTEDIMAGE | $TVIF_IMAGE)     
538 }
539 
540 method TVItem.Update()
541 {    
542    this.iItemUpdate( $TVIF_IMAGE | $TVIF_SELECTEDIMAGE | $TVIF_TEXT | $TVIF_STATE )   
543    uint children as .Children
544    if &children
545    {
546       foreach child, children
547       {  
548          child->TVItem.Update()
549       }
550    }   
551    if .getuint( "sorttype" ) & $TVSORT_SORT
552    {
553       .param->treedata.treeview->vTreeView.WinMsg( $TVM_SORTCHILDREN, 0, .param->treedata.handle )
554    }  
555 }
556 
557 method TVItem.MoveTo( TVItem dest, uint flag )
558 {
559    uint root as .param->treedata.treeview->vTreeView.Root
560    //print( "owner= \(?(&this.Parent()!=&root,this.Parent.Label.str(),"")) prev= \(?(&this.Prev(),this.Prev.Label.str(),"")) next= \(?(&this.Next(),this.Next.Label.str(),""))  dest= \(?(&dest,dest.Label.str(),""))\n" )
561    if &this.Next() != &dest
562    {      
563       uint tv as .param->treedata.treeview->vTreeView 
564       this.move( dest, flag )
565       //print( "owner= \(?(&this.Parent()!=&root,this.Parent.Label.str(),"")) prev= \(?(&this.Prev(),this.Prev.Label.str(),"")) next= \(?(&this.Next(),this.Next.Label.str(),"")) \n" )
566       tv.WinMsg( $TVM_DELETEITEM, 0, .param->treedata.handle )
567       this.Reinsert()
568       evparItemMoved evpIM
569       evpIM.SrcItem = &this
570       evpIM.DestItem = &dest
571       evpIM.Flag = flag
572       tv.OnItemMoved.run( evpIM )
573    }
574 }
575 
576 /* Свойство uint Selected - Get Set
577 Устанавливает или определяет пользовательский параметр элемента дерева
578 */
579 /*property uint TVItem.Selected
580 { 
581    return .getuint( "Selected" )  
582 }
583 
584 property TVItem.Selected( uint val )
585 {  
586    .setuint( "Selected", ?( val & $TVSORT_SORT, val, $TVSORT_NONE ))
587    if val & $TVSORT_SORT
588    {   
589       .param->treedata.treeview->vTreeView.WinMsg( $TVM_SORTCHILDREN, 0, .param->treedata.handle )
590    }   
591    if val & $TVSORT_RECURSE 
592    {              
593       foreach child, this
594       {       
595          child.Selected = val
596       }
597    }
598    
599    //.iItemUpdate( $TVIF_STATE )
600 }*/
Edit