EnglishРусский  

   ..

   addustr.g

   app.g

   btn.g

   btnpic.g

   comp.g

   ctrl.g

   design_menu.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

   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\design_menu.g
  1 include {
  2    "form.g"
  3    "treeview.g"
  4 }
  5 
  6 
  7 define {
  8    mSelectComp = $vForm_last
  9    
 10    vCompEditForm_last 
 11 } 
 12 
 13 
 14 type vMenuDesign <inherit=vForm>
 15 {   
 16    vTreeView tv
 17    vBtn      bAdd
 18    vBtn      bAddChild
 19    vBtn      bDel
 20    uint      flgnew
 21    uint      curitem
 22    uint      flgediting
 23    
 24    uint      Menu
 25    uint      MainForm
 26    
 27    //eventQueryCreate OnQueryCreate
 28    oneventpos OnQueryCreate
 29    evEvent    OnQuerySelect
 30    evEvent   OnDestroy
 31 }
 32 
 33 
 34 method vMenuDesign.NewItem( TVItem newitem )
 35 { 
 36    .tv.Selected = newitem   
 37    .flgnew = 1
 38    .tv.Edit()
 39    uint he = FindWindowEx( .tv.hwnd, 0, "Edit".ustr().ptr(), 0 )
 40    if he
 41    {      
 42       .flgediting = 1
 43       //SendMessage( he, $EM_SETMODIFY, 1, 0 )
 44       .tv.WinMsg( $WM_COMMAND, $EN_UPDATE << 16, he )
 45       //SendMessage( .tv.hwnd, $WM_COMMAND, ($EN_CHANGE << 16) /*| 0x01*/, he ) 
 46    }
 47    //print( "Newitem 2\n" )
 48 }
 49 
 50 method vMenuDesign.bAdd_click <alias=vMenuDesign_bAdd_click> ( evparEvent ev )
 51 {
 52    uint curitem 
 53    curitem as this.tv.Selected()
 54    if &curitem
 55    {
 56       //previtem as curitem.Prev
 57       curitem as curitem.Parent
 58       //print( "previtem =\( &previtem )\n" )      
 59    }   
 60    if !&curitem   
 61    {      
 62       curitem as .tv.Root
 63    }     
 64    .NewItem( curitem.AppendChild( "New".ustr(), 0 ) )   
 65 }
 66 
 67 method vMenuDesign.bIns_click <alias=vMenuDesign_bIns_click> ( evparEvent ev )
 68 {
 69    uint curitem, previtem as TVItem
 70    curitem as this.tv.Selected()
 71    if &curitem
 72    {
 73       previtem as curitem.Prev
 74       curitem as curitem.Parent
 75      // print( "previtem =\( &previtem )\n" )      
 76    }   
 77    if !&curitem   
 78    {      
 79       curitem as .tv.Root
 80    }     
 81    .NewItem( curitem.InsertChild( "New".ustr(), 0, 0->ustr, previtem ))   
 82 }
 83 
 84 method vMenuDesign.bAddChild_click <alias=vMenuDesign_bAddChild_click> ( evparEvent ev )
 85 {
 86    uint curitem 
 87    curitem as this.tv.Selected()      
 88    if !&curitem   
 89    {      
 90       curitem as .tv.Root
 91    }     
 92    curitem.Expanded = 1
 93    .NewItem( curitem.AppendChild( "New child".ustr(), 0 ) )    
 94 }
 95 
 96 method vMenuDesign.bDel_click <alias=vMenuDesign_bDel_click> ( evparEvent ev )
 97 {
 98    uint curitem 
 99    curitem as this.tv.Selected()      
100    if &curitem
101    {
102       if curitem.Tag
103       {
104          curitem.Tag->vComp.DestroyComp()
105       }
106       curitem.Del()
107    }   
108     
109 }
110 
111 method vMenuDesign.tv_AfterEdit <alias=MenuDesign_tv_AfterEdit> ( /*vComp sender,*/ evparTVEdit etve )
112 {  
113    .flgediting = 0
114    uint curtvitem as .tv.Selected
115    if .flgnew 
116    {
117       .flgnew = 0
118       if etve.flgCancel || !*etve.NewLabel
119       {  
120          etve.flgCancel = 1         
121          curtvitem.Del()         
122       }
123       else
124       {
125          uint owner as vCustomMenu
126          if (&curtvitem.Parent()) && (&curtvitem.Parent()) != (&.tv.Root()) 
127          {            
128             owner as curtvitem.Parent.Tag
129          }
130          else 
131          {              
132             owner as .Menu
133          } 
134          //uint cim as .Owner->newcompdes( vMenuItem, owner )->vMenuItem
135          evparQueryCreate eQC
136          eQC.Owner = &owner
137          eQC.TypeId = vMenuItem
138          //print( "1a \(eQC.Owner) \(eQC.TypeId)\n" )         
139          .OnQueryCreate.run( eQC )
140          //print( "1b\n" )
141          uint cim as eQC.NewComp->vMenuItem
142          //print( "1c\n" )
143          if &cim
144          {
145             //print( "2 \(curtvitem.Label.str())\n" )
146             cim.Caption = etve.NewLabel// curtvitem.Label
147             curtvitem.Tag = &cim
148             .tv.Selected = 0->TVItem
149             .tv.Selected = curtvitem
150          }
151          else
152          {
153             //print( "3\n" )
154             etve.flgCancel = 1         
155             curtvitem.Del()       
156          }         
157       }
158    }
159    else
160    {
161       if !etve.flgCancel
162       {
163          uint menuitem as .tv.Selected.Tag->vMenuItem
164          if &menuitem
165          {
166             menuitem.Caption = etve.NewLabel
167             evparValUint eu
168             eu.val = &menuitem
169             .OnQuerySelect.run( eu )
170          }
171       } 
172    }
173    
174 }
175 
176 method vMenuDesign.tv_Key <alias=MenuDesign_tv_Key>( /*vComp sender,*/ evparKey ek )
177 {
178    if ek.evktype == $evkDown
179    {      
180       switch ek.key 
181       {
182          case $VK_INSERT: .bIns_click( 0->evparEvent )           
183          case $VK_DELETE: .bDel_click( 0->evparEvent )
184          case $VK_DOWN
185          {           
186             //print( "KEY\n" ) 
187             if (ek.mstate == $mstShift) || !&(.tv.Selected()) || ( &(.tv.Selected()) == &(.tv.Root.LastChild()) && !&.tv.Root.LastChild.Child() )
188             {
189                .bAdd_click( 0->evparEvent )
190             }
191          }
192          case $VK_RIGHT
193          {            
194             if  /*(ek.mstate == $mstCtrl) ||*/ !&(.tv.Selected()) || ( &(.tv.Selected()) && !&(.tv.Selected.Child()) )
195             {
196                .bAddChild_click( 0->evparEvent )   
197             }
198          }                  
199       }      
200    }  
201     
202 }
203 
204 method vMenuDesign.tv_BeforeSelect <alias=MenuDesign_tv_BeforeSelect>( /*vComp sender,*/ evparTVBefore etvb )
205 {
206    if .flgediting 
207    {
208       etvb.flgCancel = 1
209    }   
210 }
211 
212 method vMenuDesign.tv_Select <alias=MenuDesign_tv_Select>( /*vComp sender,*/ evparTVAfter etva )
213 {
214    
215    //print( "sel 1 \(etva.CurItem) \n" )
216    if etva.CurItem 
217    {
218    //print( "sel 2\n" )
219       uint comp
220       if comp = etva.CurItem->TVItem.Tag
221       {
222       //print( "sel \(comp)3\n" )
223          evparValUint eu
224          eu.val = comp
225          .OnQuerySelect.run( eu )
226       } 
227    }
228 }
229 
230 method vMenuDesign.tv_ItemMoved <alias=MenuDesign_tv_ItemMoved>( evparItemMoved evpIM )
231 {
232    uint cur as evpIM.SrcItem->TVItem.Tag->vMenuItem
233    switch evpIM.Flag
234    {
235       case $TREE_FIRST :
236       case $TREE_LAST  
237       {         
238          if evpIM.DestItem  
239          {          
240             uint owner as evpIM.DestItem->TVItem.Tag->vMenuItem            
241             if &owner && &owner != &cur.Owner()
242             {
243                cur.Owner = owner
244             }
245             else
246             {
247                cur.CompIndex = *cur.Owner.Comps - 1
248             }                       
249             
250          }
251       }
252       case $TREE_AFTER :       
253       case $TREE_BEFORE
254       {         
255          if evpIM.DestItem  
256          {
257             uint next as evpIM.DestItem->TVItem.Tag->vMenuItem
258             //uint newidx = next.CompIndex
259             uint owner as next.Owner->vMenuItem
260             cur.Owner = 0->vComp
261             print( "owner = \( &owner )\n" )
262             //if &owner && &owner != &cur.Owner()
263             //print( "
264             {
265                cur.Owner = owner
266             }
267             //else            
268             //if next
269             {               
270                cur.CompIndex = next.CompIndex//newidx 
271             } 
272          }
273       }                  
274    }
275 }
276 
277 method vMenuDesign.MenuDesign_CloseQuery <alias=MenuDesign_CloseQuery>( evparQuery evpQ )
278 {
279    //print( "CLOSEQUERY\n" )   
280    evpQ.flgCancel = 1
281    this.DestroyComp()
282 }
283 
284 method vMenuDesign vMenuDesign.mCreateWin <alias=vMenuDesign_mCreateWin>( )   
285 {   
286    this->vForm.mCreateWin()
287    ustr ustmp
288    uint comp
289 	comp as this
290    //print( "create des 1\n" )
291 	with comp
292 	{	
293 		.Caption="Menu Designer".ustr()		
294 		.Height=300				
295 		.Visible=0
296 		.Width=200
297       .OnCloseQuery.Set( this, MenuDesign_CloseQuery )
298 	}
299 	comp as this.tv
300 	comp.Owner = this
301 	with comp
302 	{
303 	   .HorzAlign = $alhClient
304       .VertAlign = $alvTopBottom
305       .Bottom = 25
306       .ShowSelection = 1      
307       .RowSelect = 1
308       .LabelEdit = 1
309       .OnAfterEdit.Set( this, MenuDesign_tv_AfterEdit )
310       .OnKey.Set( this, MenuDesign_tv_Key )
311       .OnBeforeSelect.Set( this, MenuDesign_tv_BeforeSelect )
312       .OnAfterSelect.Set( this, MenuDesign_tv_Select )
313       .OnItemMoved.Set( this, MenuDesign_tv_ItemMoved )      
314 	}
315    uint left = 0
316    uint width = 70
317    comp as this.bAdd
318 	comp.Owner = this
319 	with comp
320 	{	   
321       .VertAlign = $alvBottom
322       .Caption = "New".ustr()
323       .Bottom = 0
324       .Left = left
325       .Width = width
326       left += .Width
327       .OnClick.Set(this,vMenuDesign_bAdd_click)
328 	}
329    comp as this.bAddChild
330 	comp.Owner = this
331 	with comp
332 	{	   
333       .VertAlign = $alvBottom
334       .Caption = "New child".ustr()
335       .Bottom = 0
336       .Left = left
337       .Width = width
338       left += .Width
339       .OnClick.Set(this,vMenuDesign_bAddChild_click)
340 	}
341    comp as this.bDel
342 	comp.Owner = this
343 	with comp
344 	{	   
345       .VertAlign = $alvBottom
346       .Caption = "Delete".ustr()
347       .Bottom = 0
348       .Left = left
349       .Width = width
350       left += .Width
351       .OnClick.Set(this,vMenuDesign_bDel_click)
352 	}
353 	//print( "create des 10\n" )
354 	return this
355 }
356 
357 method vMenuDesign vMenuDesign.init( )
358 {
359    this.pTypeId = vMenuDesign         
360    return this
361 }
362 
363 method vMenuDesign.mSelectComp <alias=vMenuDesign_mSelectComp> ( vComp newcomp )
364 {
365 //print( "menudes 0 \(&this)\n" )
366    if &newcomp 
367    {      
368    //print( "menudes 1\n" )
369       uint tvitem as .tv.Root()       
370       while tvitem
371       {
372       //print( "menudes 2\n" )         
373          if tvitem.Tag == &newcomp
374          {       
375             tvitem.Label = newcomp->vMenuItem.Caption
376             return 
377          }         
378          tvitem as tvitem.NextInList         
379       
380       }         
381       this.DestroyComp()         
382    }
383 }
384 
385 method vCustomMenu.ToMenuDesign( TVItem ownertvitem )
386 {
387    uint i
388    //print( "tomenu \(*.Comps)\n" )
389    fornum i, *.Comps
390    {
391       uint submenu as .Comps[i]->vMenuItem
392       //print( "submenu \(.Comps[i]->vComp.Name)\n" )
393       submenu.ToMenuDesign( ownertvitem.AppendChild( submenu.Caption, &submenu ) )
394    }
395 }
396 
397 
398 
399 method vForm vCustomMenu.Design( vForm mainform, uint QueryCreate, QuerySelect, CompEditDelete )
400 {
401    uint win
402    //print( "zdes 1\n" )
403    /*win as new( vMenuDesign )->vMenuDesign   
404    win.fDynamic = 1  
405    win.flgpopup = 1*/   
406    win as 0->vComp.CreateComp( vMenuDesign )->vMenuDesign   
407    //win.flgpopup = 1
408    //win.Owner = mainform
409    
410    //win as mainform.CreateComp( vMenuDesign )->vMenuDesign
411    //SetParent( win.hwnd, 0 ) 
412    //SetWindowPos(win.hwnd, $HWND_TOPMOST, 0, 0, 0, 0, $SWP_NOMOVE |
413    //       $SWP_NOSIZE | $SWP_NOACTIVATE);
414    //print( "zdes 2\(&mainform), \(QueryCreate) \n" )
415    win.OnQueryCreate.Set( mainform, QueryCreate )   
416    win.OnQuerySelect.Set( mainform, QuerySelect )
417    //print( "zdes 4\n" )
418    win.OnDestroy.Set( mainform, CompEditDelete )
419    //print( "zdes 5\n" )
420       
421    
422    //print( "zdes 6 \(&this)\n" )
423    win.Menu = &this
424    //print( "zdes 7 \( &win.tv->vTreeView.Root() )\n" )   
425    win.ShowPopup( mainform )
426    
427    this->vMenuItem.ToMenuDesign( win.tv->vTreeView.Root )
428    
429    
430    //win.ShowModal()
431    //win.Visible = 1   
432    //print( "zdes 8\n" )
433    return win   
434 }
435 
436 method vMenuDesign.mPreDel <alias=vMenuDesign_mPreDel>
437 {
438 //print( "mPreDel menudesign 1\n" )
439    .OnDestroy.run( )
440    this->vForm.mPreDel()
441 //print( "mPreDel menudesign 2\n" )      
442 }
443 
444 func init_vMenuDesign <entry>()
445 {
446    regcomp( vMenuDesign, "vMenuDesign", vForm, $vCompEditForm_last,
447       %{ %{$mCreateWin,     vMenuDesign_mCreateWin},
448          %{$mSelectComp,    vMenuDesign_mSelectComp},
449          %{$mPreDel,        vMenuDesign_mPreDel }},
450       0->collection )     
451 }
Edit