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.
[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]
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]