November 25, 2020, 05:54:45 AM

Author Topic: [bmx] Vector Editor by JoshK [ 1+ years ago ]  (Read 568 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] Vector Editor by JoshK [ 1+ years ago ]
« on: June 29, 2017, 12:28:39 AM »
Title : Vector Editor
Author : JoshK
Posted : 1+ years ago

Description : Edit a vector with any number of components

Code :
Code: BlitzMax
  1. SuperStrict
  2.  
  3. Import MaxGui.Drivers
  4. Import "Spinner.bmx"
  5.  
  6. Rem
  7. Local window:TGadget
  8.  
  9. window=CreateWindow("vectoredit Example",40,40,320,240)
  10.  
  11. Local label:TGadget
  12. Local vectoredit:Tvectoredit
  13. Local x:Int=4,y:Int=4
  14.  
  15. label=CreateLabel("vec3 with negative numbers:",x,y,200,18,window)
  16. SetGadgetLayout label,1,0,1,0
  17. y:+18
  18. vectoredit=CreatevectorEdit(x,y,180,20,window)
  19. SetVectorEditRange(vectoredit,-1,1)
  20. SetVectorEditValue(vectoredit,[-1.0,0.0,0.5])
  21. SetGadgetLayout vectoredit,1,1,1,0
  22. y:+22
  23.  
  24. label=CreateLabel("vec4:",x,y,120,18,window)
  25. SetGadgetLayout label,1,0,1,0
  26. y:+18
  27. vectoredit=CreatevectorEdit(x,y,180,20,window,4)
  28. SetGadgetLayout vectoredit,1,1,1,0
  29. y:+22
  30.  
  31.  
  32. While True
  33.         WaitEvent
  34.         Print CurrentEvent.ToString()
  35.         Select EventID()
  36.                 Case EVENT_WINDOWCLOSE
  37.                         End
  38.         End Select
  39. Wend
  40.  
  41. EndRem
  42.  
  43. '-------------------------------------------------------------------
  44.  
  45.  
  46. Type TVectorEdit Extends TProxygadget
  47.        
  48.         Field panel:TGadget
  49.         Field spinner:TSpinner[]
  50.         Field style:Int
  51.                
  52.         Method Cleanup()
  53.                 RemoveHook(EmitEventHook,EventHook,Self)
  54.                 Super.cleanup()
  55.         EndMethod
  56.  
  57.         Method SetRange_(minimum:Double,maximum:Double,accuracy:Int=1)
  58.                 Local n:Int
  59.                 For n=0 To spinner.length-1
  60.                         spinner[n].SetRange_(minimum,maximum,accuracy)
  61.                 Next           
  62.         EndMethod
  63.  
  64.         Method SetColor(r:Int,g:Int,b:Int)
  65.                 Local n:Int
  66.                 panel.SetColor(r,g,b)
  67.                 For n=0 To spinner.length-1
  68.                         spinner[n].SetColor(r,g,b)
  69.                 Next
  70.         EndMethod
  71.        
  72.         Method SetTextColor(r:Int,g:Int,b:Int)
  73.                 Local n:Int
  74.                 panel.SetTextColor(r,g,b)
  75.                 For n=0 To spinner.length-1
  76.                         spinner[n].SetTextColor(r,g,b)
  77.                 Next
  78.         EndMethod
  79.        
  80.         Method SetValue_(t:Float[])
  81.                 Local n:Int
  82.                 For n=0 To spinner.length-1
  83.                         SetSpinnerValue(spinner[n],t[n])
  84.                 Next
  85.         EndMethod
  86.  
  87.         Method GetValue_:Float[]()
  88.                 Local t:Float[spinner.length]
  89.                 Local n:Int
  90.                 For n=0 To spinner.length-1
  91.                         t[n]=SpinnerValue(spinner[n])
  92.                 Next
  93.                 Return t
  94.         EndMethod
  95.        
  96.         Function Create:TVectorEdit(x:Int,y:Int,width:Int,height:Int,group:TGadget,components:Int=3)
  97.                 Local vectoredit:Tvectoredit
  98.                 Local sw:Int
  99.                 Local k:Int
  100.                                
  101.                 vectoredit=New Tvectoredit
  102.                 'vectoredit.style=style
  103.                
  104.                 vectoredit.panel=CreatePanel(x,y,width,height,group)
  105.                
  106.                 sw=vectoredit.panel.ClientWidth()/components
  107.                
  108.                 vectoredit.spinner=New TSpinner[components]
  109.                
  110.                 For Local n:Int=0 To components-1
  111.                         vectoredit.spinner[n]=CreateSpinner(sw*n,0,sw,vectoredit.panel.ClientHeight(),vectoredit.panel)
  112.                         SetSpinnerRange vectoredit.spinner[n],0,1,1
  113.                         Select n
  114.                         Case 0 SetGadgetLayout vectoredit.spinner[n],1,2,1,1
  115.                         Case components-1 SetGadgetLayout vectoredit.spinner[n],2,1,1,1
  116.                         Default SetGadgetLayout vectoredit.spinner[n],2,2,1,1
  117.                         EndSelect
  118.                 Next
  119.                                
  120.                 vectoredit.setproxy(vectoredit.panel)
  121.                
  122.                 AddHook(EmitEventHook,EventHook,vectoredit)
  123.                 Return vectoredit
  124.         EndFunction
  125.  
  126.         Function EventHook:Object(id:Int,data:Object,context:Object)
  127.                 Local event:TEvent
  128.                 Local vectoredit:Tvectoredit
  129.                 Local n:Int
  130.                
  131.                 event=TEvent(data)
  132.                 If event
  133.                         vectoredit=Tvectoredit(context)
  134.                         If vectoredit
  135.                                 Select event.id                
  136.                                 Case EVENT_GADGETACTION
  137.                                         For n=0 To vectoredit.spinner.length-1
  138.                                                 If event.source=vectoredit.spinner[n]
  139.                                                         EmitEvent CreateEvent(EVENT_GADGETACTION,vectoredit)
  140.                                                         Return Null
  141.                                                 EndIf
  142.                                         Next
  143.                                 EndSelect
  144.                         EndIf
  145.                 EndIf
  146.                 Return data
  147.         EndFunction
  148.        
  149. EndType
  150.  
  151. Rem
  152. bbdoc:
  153. EndRem
  154. Function CreateVectorEdit:TVectorEdit(x:Int,y:Int,width:Int,height:Int,group:TGadget,components:Int=3)
  155.         Return TVectorEdit.Create(x,y,width,height,group,components)
  156. EndFunction
  157.  
  158. Rem
  159. bbdoc:
  160. EndRem
  161. Function VectorEditValue:Float[](vectoredit:TVectorEdit)
  162.         Return vectoredit.GetValue_()
  163. EndFunction
  164.  
  165. Rem
  166. bbdoc:
  167. EndRem
  168. Function SetVectorEditRange(vectoredit:TVectorEdit,minimum:Double,maximum:Double,accuracy:Int=1)
  169.         vectoredit.SetRange_(minimum,maximum,accuracy)
  170. EndFunction
  171.  
  172. Rem
  173. bbdoc:
  174. EndRem
  175. Function SetVectorEditValue:Int(vectoredit:TVectorEdit,t:Float[])
  176.         Return vectoredit.SetValue_(t)
  177. EndFunction


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal