Some comments on this UI-setup please

BlitzMax Forums/BlitzMax Beginners Area/Some comments on this UI-setup please

I would like some comments and advice on this setup for a user- interface.
I know my programming is sloppy and I don't comment anything,
but if You find anything else that's just plain wrong or could need some improving, I would like to know.
For instance: would the use of an EmitEventHook be useful to get rid of some of the jittering that occurs when the frames resize?
I'm also not sure if the way I show tabs is redundant.
Well... Things like that...
Thanks in advance for any input.
SuperStrict
'Framework BRL.Win32MaxGUI
'Import BRL.EventQueue

Const SOURCE:Int = 0
Const RESULT:Int = 1
Const PICKER:Int = 2
Const TILER:Int  = 3
Const FRAMES:Int=4

Const SPLITSIZE:Int=2
Const HORIZONTAL:Int=0
Const VERTICAL:Int=1
Const MINSZ:Int=64

Const SliderSize:Int=20
Const COMBOHEIGHT:Int=20
Const OM_DEFAULT:Int=0		'OPERATION MODUS
Const OM_SELECT_QUAD:Int=1
Const OM_SELECT_TRI:Int=2

Global DT:TGadget = Desktop()
Global SW:TSubWindow[4]
Global CONTROL:TTabber
Global MW:TMainWindow = New TMainWindow

MW.createGadgets




'** MainLoop ***
'Local T:Int
Repeat
  	WaitEvent()
	If EventSource()=MW.Vsplit.panel
		MW.Vsplit.OnEvent
		Continue
	EndIf
	If EventSource()=MW.Hsplit.panel
		MW.Hsplit.OnEvent
		Continue
	EndIf
	If EventSource()=MW.Tsplit.panel
		MW.Tsplit.OnEvent
		Continue
	EndIf
  	Select EventSource()
	'Events from the window
	Case MW.Window
		Select EventID()
 	 	Case EVENT_WINDOWCLOSE
    		End
		Case EVENT_APPTERMINATE
			End
		Case EVENT_WINDOWSIZE
'			MW.placeGadgets()
 ' 			RedrawGadget(MW.M_Canvas)
  '			RedrawGadget(MW.S_Canvas)
  '			RedrawGadget(MW.X_Canvas)
  '			RedrawGadget(MW.P_Canvas)
			MW.RecordGadgets()
		Case EVENT_WINDOWMOVE
		'	MW.placeGadgets()
		'	Print "MOVE"
 	 	Case EVENT_GADGETACTION
 	 		Select EventData()
  			Case 0
  	 		'  HideGadget Label1
  	  		' ShowGadget Label
  	 		Case 1
  	   		'HideGadget Label
  	   		'ShowGadget Label1
   			End Select
		End Select
	'Events from the canvas
	Case Control.Panel
		Select EventID()
 	 	Case EVENT_GADGETACTION
 	 		Select EventData()
  			Case 0
  	  		 Control.ShowTab(0)
  	 		Case 1
  	  		 Control.ShowTab(1)
  			Case 2
  	  		 Control.ShowTab(2)
  			Case 3
  	  		 Control.ShowTab(3)
  	 		Case 4
  	  		 Control.ShowTab(4)
   			End Select
		End Select
	Case CONTROL.Canvas 
	    	SetGraphics CanvasGraphics (CONTROL.Canvas)
			SetViewport 0,0,ClientWidth(CONTROL.Canvas),ClientHeight(CONTROL.Canvas)
			Cls
	    	DrawRect  20,20,50,80
	    	Flip 
	Case SW[TILER].Canvas 
	    	SetGraphics CanvasGraphics (SW[TILER].Canvas)
			SetViewport 0,0,ClientWidth(SW[TILER].Canvas),ClientHeight(SW[TILER].Canvas)
			Cls
	    	DrawRect  20,20,50,80
	    	Flip 
	Case SW[source].Canvas 
   			SetGraphics CanvasGraphics (SW[source].Canvas)
			SetViewport 0,0,ClientWidth(SW[source].Canvas),ClientHeight(SW[source].Canvas)
			Cls
   '	DrawRect  20,20,50,80
   		 	Flip 
	Case SW[result].Canvas 
    		SetGraphics CanvasGraphics (SW[result].Canvas)
			SetViewport 0,0,ClientWidth(SW[result].Canvas),ClientHeight(SW[result].Canvas)
			Cls
 '   '	DrawRect  20,20,50,80
   		 	Flip 
	Case SW[picker].Canvas 
	    	SetGraphics CanvasGraphics (SW[picker].Canvas)
			SetViewport 0,0,ClientWidth(SW[picker].Canvas),ClientHeight(SW[picker].Canvas)
			Cls
 '   '	DrawRect  20,20,50,80
    		Flip 
'
	EndSelect

Forever

'*** Types ***


Type TSplitter 

	Field	axis:Int,gadget0:TGadget,gadget1:TGadget,group:TGadget
	Field	panel:TGadget,pos:Int,snap:Int,oldpos:Int,oldsize:Int
	
	Method Position(p:Int)
		Move p-pos
	End Method
		
	Method Move(d:Int)
		Local	w:Int,h:Int,p:Int
		pos:+d
		w=ClientWidth(group)
		h=ClientHeight(group)
		If pos<MINSZ pos=MINSZ
		If axis=VERTICAL
			If pos>w-(SPLITSIZE+MINSZ) pos=w-(SPLITSIZE+MINSZ)
			SetGadgetShape gadget1,pos+SPLITSIZE,0,w-(pos+SPLITSIZE),h
			SetGadgetShape panel,pos-SPLITSIZE,0,SPLITSIZE*2,h
			SetGadgetShape gadget0,0,0,pos-SPLITSIZE,h
		Else
			If pos>h-(SPLITSIZE+MINSZ) pos=h-(SPLITSIZE+MINSZ)
			SetGadgetShape gadget1,0,pos+SPLITSIZE,w,h-(pos+SPLITSIZE)
			SetGadgetShape panel,0,pos-SPLITSIZE,w,SPLITSIZE*2
			SetGadgetShape gadget0,0,0,w,pos-SPLITSIZE
		EndIf
		MW.RecordGadgets()
	End Method
	
	Method OnEvent()
		If EventSource()<>panel Return
		Select EventID()
			Case EVENT_MOUSEDOWN
				snap=True
				If axis
					SetGadgetLayout panel,0,1,1,1
					SetGadgetLayout gadget0,1,1,1,1
					SetGadgetLayout gadget1,0,1,1,1
					oldpos=EventX()
				Else
					SetGadgetLayout panel,1,1,0,1
					SetGadgetLayout gadget0,1,1,1,1
					SetGadgetLayout gadget1,1,1,0,1
					oldpos=EventY()
				EndIf				
			Case EVENT_MOUSEENTER
				If axis
					SetPointer POINTER_SIZEWE
				Else
					SetPointer POINTER_SIZENS
				EndIf
			Case EVENT_MOUSELEAVE
				SetPointer POINTER_DEFAULT
			Case EVENT_MOUSEUP
				SetPointer POINTER_DEFAULT
				If axis
					SetGadgetLayout panel,1,0,1,1
					SetGadgetLayout gadget0,1,0,1,1
					SetGadgetLayout gadget1,1,1,1,1
				Else
					SetGadgetLayout panel,1,1,1,0
					SetGadgetLayout gadget0,1,1,1,0
					SetGadgetLayout gadget1,1,1,1,1
				EndIf				
'		setGadgetLayout HorPanel,1,0,1,1
'		setGadgetLayout SW[TILER].Panel,1,1,1,1 
'		setGadgetLayout SW[SOURCE].Panel,1,0,1,0
'		setGadgetLayout SW[RESULT].Panel,1,0,1,1 
				snap=False
			Case EVENT_MOUSEMOVE
				If axis
					SetPointer POINTER_SIZEWE
					If snap Then Move EventX()-oldpos
				Else
					SetPointer POINTER_SIZENS
					If snap Then Move EventY()-oldpos
				EndIf	
		End Select
	End Method
	
	Method Init()
		If axis
				SetGadgetLayout panel,1,0,1,1
		Else
				SetGadgetLayout panel,1,1,1,0
		EndIf
		Position pos
	End Method
	
	Function Create:TSplitter(axis:Int,pos:Int,gadget0:TGadget,gadget1:TGadget)
		Local	s:TSplitter		
		s=New TSplitter
		s.axis=axis
		s.gadget0=gadget0
		s.gadget1=gadget1
		s.group=GadgetGroup(gadget0)
		s.panel=CreatePanel(0,0,0,0,s.group,PANEL_ACTIVE)
		s.panel.SetColor(160,160,160)
		s.pos=pos
		s.Init 
		Return s
	End Function
End Type

Type TSubWindow
	
	Field x:Int
	Field y:Int
	Field Cx:Int
	Field Cy:Int
	Field width:Int
	Field height:Int
	Field cwidth:Int
	Field cheight:Int
	Field Group:TGadget
	Field Panel:TGadget
	Field Combo:TGadget
	Field pixmap:TPixmap
	Field Zoom:Int
	Field OpMode:Int
	Field Canvas:TGadget
	Field ActiveTab:Int

	Field VSlider:TGadget
	Field HSlider:TGadget
	
	Function Create:TSubWindow(fx:Int,fy:Int,fw:Int,fh:Int,G:TGadget)	
		Local nt:TSubWindow=New TSubWindow
		nt.Group=G
		nt.x=fx
		nt.y=fy
		nt.zoom=1	'default
		nt.Panel= createPanel(0, 0, 0, 0, G)
		nt.width=fw
		nt.Cwidth=fw-SliderSize
		nt.height=fh
		nt.Cheight=fh-(COMBOHEIGHT+SliderSize)
		nt.Cx=0
		nt.Cy=COMBOHEIGHT
		nt.Pixmap=CreatePixmap(nt.Cwidth,nt.Cheight,PF_RGBA8888)
		nt.Canvas  =CreateCanvas(0,0,0,0,nt.Panel)
		setgadgetlayout nt.Canvas  ,1,1,1,1	
		nt.VSlider =CreateSlider(0,0,0,0,nt.Panel, SLIDER_SCROLLBAR | SLIDER_VERTICAL)
		setgadgetlayout nt.VSlider ,0,1,1,1	
		nt.HSlider =CreateSlider(0,0,0,0,nt.Panel, SLIDER_SCROLLBAR | SLIDER_HORIZONTAL)
		setgadgetlayout nt.HSlider ,1,1,0,1	
		nt.Combo=CreateComboBox(0,0,0,0,nt.Panel)
		setgadgetlayout nt.Combo,1,2,1,0	
		AddGadgetItem nt.Combo,"Source:"
		AddGadgetItem nt.Combo,"Result:"
		AddGadgetItem nt.Combo,"Tiler:"
		AddGadgetItem nt.Combo,"Picker:"
		Return nt	
	End Function
	
	Method Place:Tgadget()
		'hidegadget Panel
		SetGadgetShape Panel    ,0, 0, 0, 0
		SetGadgetShape Panel    ,X, Y, width,height
		SetGadgetshape Combo    ,0,0,width/2,COMBOHEIGHT
		SetGadgetshape Canvas   ,0,Cy,Cwidth,Cheight
		SetGadgetShape VSlider  ,Cwidth,Cy,SLiderSize,Cheight        
		SetGadgetShape HSlider  ,0,Cy+Cheight,Cwidth,SLiderSize        
		'showgadget Panel
	End Method
	
	
End Type

Type TTab
	Field Panel:TGadget
	Field Data:TGadget[]
End Type

Type TTabber
	Const HCCHECK:Int=1000000
	Const TABS:Int=5
	
	
	
	Global HC:Int=HCCHECK
	Global VC:Int=HCCHECK
	
	Field x:Int
	Field y:Int
	Field Cx:Int
	Field Cy:Int
	Field width:Int
	Field height:Int
	Field cwidth:Int
	Field cheight:Int
	Field Group:TGadget
	Field Panel:TGadget
'	Field Combo:TGadget
	Field pixmap:TPixmap
'	Field Zoom:Int
'	Field OpMode:Int
	Field Canvas:TGadget
	Field ActiveTab:Int

'	Field VSlider:TGadget
'	Field HSlider:TGadget
	
	
	Field Tab:TTab[TABS]
	
	Function Create:TTabber(fx:Int,fy:Int,fw:Int,fh:Int,G:TGadget)	
		Local nt:TTabber=New TTabber
		nt.Group=G
		nt.x=fx
		nt.y=fy
		nt.Panel= createTabber(0, 0, 0, 0, G)
		SetGadgetLayout nt.Panel,1,0,1,0
		If hc=HCCHECK
			SetGadgetShape nt.Panel,0, 0, 100, 100
			HC=100-clientheight(nt.Panel)
			VC=(100-clientwidth(nt.Panel))
			SetGadgetShape nt.Panel,0, 0, 0, 0
		EndIf
		nt.width=fw
		nt.height=fh+hc+SliderSize
		nt.Cy=fh'-SliderSize
		nt.Cwidth=fw
		nt.Cheight=SliderSize
		nt.Pixmap=CreatePixmap(fw,SliderSize,PF_RGBA8888)
		nt.Canvas  =CreateCanvas(0,0,0,0,nt.Panel)
		setgadgetlayout nt.Canvas  ,1,1,0,1	
		nt.CreateTabs()
		Return nt	
	End Function
	
	Method Place:Tgadget()
		'hidegadget Panel
		SetGadgetShape Panel    ,0, 0, 0, 0
		SetGadgetShape Panel    ,X, Y, width,height
		SetGadgetshape Canvas   ,0,Cy,Cwidth,Cheight
		'showgadget Panel
	End Method
	
	Method CreateTabs()
		Local t:Int
		Local u:Int
		AddGadgetItem Panel,"Source:"
		AddGadgetItem Panel,"Result:"
		AddGadgetItem Panel,"Tiler:"
		AddGadgetItem Panel,"Picker:"
		AddGadgetItem Panel,"Frames:"
		For t=0 To TABS-1
			Tab[t]=New TTab
			Tab[t].Panel=CreatePanel (0,0,0,0,Panel)
			SetGadgetLayout Tab[t].Panel, 1,1,1,1
			hideGadget(Tab[t].Panel)
			SetGadgetFont Tab[t].panel,MW.FontB			
			Tab[t].panel.SetColor (Rand(255),Rand(255),Rand(255))
		Next

'*** FRAMES ***

		Tab[FRAMES].Data:TGadget=Tab[FRAMES].Data[..20]
		For t=0 To 3
			Tab[FRAMES].Data[t]=Createlabel("",10+80*t,10,80,SLIDERSIZE,Tab[FRAMES].Panel)
		Next	
		For u=0 To 3
			Tab[FRAMES].Data[4+4*u]=Createlabel("",10,10+(u+1)*SliderSize,80,SLIDERSIZE,Tab[FRAMES].Panel)
			For t=0 To 2
				Tab[FRAMES].Data[5+4*u+t]=CreateTextField(90+80*t,10+(u+1)*SliderSize,50,SLIDERSIZE,Tab[FRAMES].Panel)
			Next
		Next		
		For t=0 To 14
			setgadgetlayout Tab[FRAMES].Data[t],3,3,3,3
			SetGadgetFont Tab[FRAMES].Data[t],MW.FontB			
		Next	
		SetGadgetText Tab[FRAMES].Data[0], "Frame:"			
		SetGadgetText Tab[FRAMES].Data[1], "Width:"			
		SetGadgetText Tab[FRAMES].Data[2], "Height:"			
		SetGadgetText Tab[FRAMES].Data[3], "Magnification:"			
		SetGadgetText Tab[FRAMES].Data[4], "LeftUp:"			
		SetGadgetText Tab[FRAMES].Data[8], "LeftDown:"			
		SetGadgetText Tab[FRAMES].Data[12],"RightUp:"			
		SetGadgetText Tab[FRAMES].Data[16],"RightDown:"			
		
	End Method
	
	Method ShowTab(T:Int,init:Int=False)
	If T<>ActiveTab Or init=True
		If Not init Then HideGadget(Tab[ActiveTab].Panel)
		ActiveTab=T
		ShowGadget(Tab[ActiveTab].Panel)
		SelectGadgetItem Panel,ActiveTab
	EndIf
	End Method
	
End Type


Type TMainWindow

	Field Window:TGadget
	Field VerPanel:TGadget
	Field HorPanel:TGadget
	Field TopPanel:TGadget
	
	Field Hsplit:TSplitter
	Field Vsplit:TSplitter
	Field Tsplit:TSplitter
	Field TopPanelX:Int
	Field TopPanelY:Int
	Field HorPanelX:Int
	Field HorPanelY:Int
	Field VerPanelX:Int
	Field VerPanelY:Int
	Field TopPanelW:Int
	Field TopPanelH:Int
	Field HorPanelW:Int
	Field HorPanelH:Int
	Field VerPanelW:Int
	Field VerPanelH:Int
	
	Field FontB:TGUIFont 

	Method New()
		
		FontB= LoadGuiFont("Arial", 10, False, False, False)
		Window = createWindow(" Texture Tiler V0.01", ((dt.width / 2) - 400), ((dt.height / 2) - 300), 800, 600, Null ,WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_STATUS | WINDOW_MENU | WINDOW_CLIENTCOORDS)

'*** Menu ***		

		Const MENU_OPEN:Int = 101
		Const MENU_EXIT:Int = 108
		Const MENU_BATCH:Int = 201
		Const MENU_ABOUT:Int = 301
	
		Local filemenu:TGadget = createMenu("&File", 0, WindowMenu(Window))
		createMenu "&Open...", MENU_OPEN, filemenu, KEY_O, MODIFIER_COMMAND
		createMenu "", 0, filemenu
		createMenu "", 0, filemenu
		createMenu "E&xit", MENU_EXIT, filemenu, KEY_X, MODIFIER_COMMAND
	
		Local batchmenu:TGadget = createMenu("&Batch", 0, WindowMenu(Window))
		createMenu "Process &Batch...", MENU_BATCH, batchmenu, KEY_B, MODIFIER_COMMAND
		
		Local helpmenu:TGadget = createMenu("&Help", 0, WindowMenu(Window))
		createMenu "&About...", MENU_ABOUT, helpmenu, KEY_A, MODIFIER_COMMAND
	
		UpdateWindowMenu Window
		
'*** ControlArea ***
	
		
		
	End Method	
	
	Method CreateGadgets:TSubWindow()

		TopPanel=createPanel(0, 0, 0, 0, window)
		VerPanel=createPanel(0, 0, 0, 0, window)
		HorPanel=createPanel(0, 0, 0, 0, VerPanel)
		
		CONTROL=TTabber.Create(0,0,500, 128+SplitSize+SliderSize+COMBOHEIGHT,TopPanel)
		SW[PICKER]  =TSubWindow.Create(500, 0, ClientWidth(WIndow)-(500),Control.Height,TopPanel)
	
		TopPanelX=0
		TopPanelY=0
		TopPanelW=ClientWidth(WIndow)
		TopPanelH=Control.Height
		VerPanelX=0
		VerPanelY=TopPanelH
		VerPanelW=ClientWidth(WIndow)
		VerPanelH=ClientHeight(WIndow)-TopPanelH

		SW=SW:TSubWindow[..TILER+1]


		SW[TILER] =TSubWindow.Create(128+SplitSize+SliderSize,0,Clientwidth(Window)-(128+SplitSize+SliderSize), VerPanelH,VerPanel)

		HorPanelX=0
		HorPanelY=0
		HorPanelW=130+SliderSize
		HorPanelH=VerPanelH

		SW[SOURCE] =TSubWindow.Create(0,0,HorPanelW, 128+SplitSize+SliderSize+COMBOHEIGHT,HorPanel)
		SW[RESULT] =TSubWindow.Create(0,SW[SOURCE].height,HorPanelW, HorPanelH-SW[SOURCE].height,HorPanel)
		

		SelectGadgetItem CONTROL.Panel,FRAMES
		SelectGadgetItem SW[PICKER].Combo,PICKER
		SelectGadgetItem SW[SOURCE].Combo,SOURCE
		SelectGadgetItem SW[RESULT].Combo,RESULT 
		SelectGadgetItem SW[TILER].Combo,TILER 
		
		CONTROL.    ActiveTab=FRAMES
		SW[PICKER]. ActiveTab=PICKER
		SW[SOURCE]. ActiveTab=SOURCE
		SW[RESULT]. ActiveTab=RESULT 
		SW[TILER].  ActiveTab=TILER 
		
		Control.ShowTab(FRAMES,True)
		
		setGadgetLayout TopPanel,1,1,1,0
		setGadgetLayout VerPanel,1,1,1,1
		setGadgetLayout HorPanel,1,0,1,1

		setGadgetLayout CONTROL.Panel,1,0,1,1
		setGadgetLayout SW[PICKER].Panel,1,1,1,1
		setGadgetLayout SW[SOURCE].Panel,1,1,1,0
		setGadgetLayout SW[RESULT].Panel,1,1,1,1 
		setGadgetLayout SW[TILER].Panel,1,1,1,1 
		
		placeGadgets()
		
		Tsplit=TSplitter.Create(HORIZONTAL,TopPanelH,TopPanel,VerPanel)
		Vsplit=TSplitter.Create(VERTICAL,HorPanelW,HorPanel,SW[TILER].Panel)
		Hsplit=TSplitter.Create(HORIZONTAL,SW[SOURCE].height,SW[SOURCE].Panel,SW[RESULT].Panel)
		
	End Method
			
	Method placeGadgets()
	
		SetGadgetShape TopPanel,TopPanelX, TopPanelY, TopPanelW, TopPanelH
		SetGadgetShape VerPanel,VerPanelX, VerPanelY, VerPanelW, VerPanelH
		SetGadgetShape HorPanel,HorPanelX, HorPanelY, HorPanelW, HorPanelH
		Control.place
		For Local t:Int=SOURCE To TILER 
			SW[T].Place
		Next
	EndMethod


	Method RecordGadgets()
		Local T:Int
		'MW.VerPanelX=GAdgetX(VerPanel)
		MW.VerPanelY=GAdgetY(MW.VerPanel)
		MW.VerPanelW=MW.VerPanel.Width
		MW.VerPanelH=MW.VerPanel.Height
		'MW.HorPanelX=GAdgetX(HorPanel)
		'MW.HorPanelY=GAdgetY(HorPanel)
		MW.HorPanelW=MW.HorPanel.Width
		MW.HorPanelH=MW.HorPanel.Height
		For t=SOURCE To TILER
			SW[t].x=GAdgetX(SW[T].Panel)
			SW[t].y=GAdgetY(SW[T].Panel)
			SW[t].cy=GAdgetY(SW[T].Canvas)
			SW[t].Width =SW[T].Panel.width
			SW[t].Height=SW[T].Panel.height
			SW[t].CWidth=SW[T].Canvas.width
			SetGadgetText Control.Tab[FRAMES].Data[5+4*t], String(SW[t].CWidth)+" px"			
			SW[t].CHeight=SW[T].Canvas.Height
			SetGadgetText Control.Tab[FRAMES].Data[6+4*t], String(SW[t].CHeight)+" px"			
		Next	
	EndMethod

EndType

[edit]
oh, if anyone wants to use any of this for there own selfish reasons: feel free to do so.
live and learn/prosper/let die/etc.
[/edit]