Page 1 of 1

Reduce the size of several Gadgets

Posted: Mon Jun 06, 2011 9:54 pm
by Shardik
Have you ever had the problem that not all Gadgets fit into a window
or the window looks too crowded? Apple's ControlManager API lets
you reduce the size of several Gadgets with a function which I have
put into a simple procedure to be called with the number of the Gadget
you want to be reduced in size:

Code: Select all

ImportC ""
  HideControl(ControlRef.L)
  SetControlData(ControlRef.L, ControlPartCode.L, TagName.L, BufferSize.L, *Buffer)
  ShowControl(ControlRef.L)
EndImport

#kControlEntireControl = 0
#kControlSizeSmall = 1
#kControlSizeTag = 'size'

Procedure ReduceGadgetSize(GadgetID.L)
  Protected ControlSize.W

  HideControl(GadgetID(GadgetID))
  ControlSize = #kControlSizeSmall
  SetControlData(GadgetID(GadgetID), #kControlEntireControl, #kControlSizeTag, SizeOf(ControlSize), @ControlSize)
  ShowControl(GadgetID(GadgetID))
EndProcedure

OpenWindow(0, 200, 100, 400, 195, "Normal and small Gadgets")
CheckBoxGadget(0, 10, 10, 180, 20, "Normal CheckBoxGadget")
CheckBoxGadget(1, 210, 10, 180, 20, "Small CheckBoxGadget")
ReduceGadgetSize(1)
OptionGadget(2, 10, 40, 180, 20, "Normal OptionGadget")
OptionGadget(3, 210, 40, 180, 20, "Small OptionGadget")
ReduceGadgetSize(3)
ButtonGadget(4, 10, 70, 180, 20, "Normal ButtonGadget")
ButtonGadget(5, 210, 70, 180, 20, "Small ButtonGadget")
ReduceGadgetSize(5)
TrackBarGadget(6, 10, 100, 180, 20, 0, 20)
TrackBarGadget(7, 210, 102, 180, 20, 0, 20)
ReduceGadgetSize(7)
ScrollBarGadget(8, 10, 130, 180, 20, 0, 20, 1, #PB_ScrollBar_Vertical) 
ScrollBarGadget(9, 210, 132, 180, 20, 0, 20, 1, #PB_ScrollBar_Vertical) 
ReduceGadgetSize(9)
ComboBoxGadget(10, 10, 160, 180, 20)
AddGadgetItem(10, 0, "Normal ComboBox")
SetGadgetState(10, 0)
ComboBoxGadget(11, 210, 162, 180, 20)
AddGadgetItem(11, 0, "Small ComboBox")
SetGadgetState(11, 0)
ReduceGadgetSize(11)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Reduce the size of several Gadgets

Posted: Tue Jun 07, 2011 7:29 am
by jesperbrannmark
Thanks for sharing! That is really useful.
I have a few tricks with this.
If LoadFont(0,"Arial", 10.5)
SetGadgetFont(#PB_Default, FontID(0)) ; Set this as gadget default font
EndIf
Can be real useful for text input (Stringgadgets), they are usually a bit smaller font on windows.

Also small buttons are rounded, I usually need the button to be square to use the little extra space. So Buttonimagegadget (and buttongadget) can often be changed to Imagegadget straight away.

Re: Reduce the size of several Gadgets

Posted: Tue May 15, 2012 9:09 pm
by Shardik
When studying the header file Controls.h of the Snow Leopard SDK
I discovered that it is possible to reduce the Gadget size even to a
smaller size called "Mini" or to even enlarge a Gadget like the
ProgressBarGadget to a size called "Large" . Furthermore I detected
some other Gadgets which can be reduced in size. I therefore
expanded my above example:

Code: Select all

ImportC ""
  HideControl(ControlRef.L)
  SetControlData(ControlRef.L, ControlPartCode.W, TagName.L, BufferSize.L, *Buffer)
  ShowControl(ControlRef.L)
EndImport

#kControlEntireControl = 0
#kControlSizeNormal = 0
#kControlSizeSmall  = 1
#kControlSizeLarge  = 2
#kControlSizeMini   = 3
#kControlSizeTag = 'size'

Procedure ChangeGadgetSize(GadgetID.L, ControlSize.W)
  HideControl(GadgetID(GadgetID))
  SetControlData(GadgetID(GadgetID), #kControlEntireControl, #kControlSizeTag, SizeOf(ControlSize), @ControlSize)
  ShowControl(GadgetID(GadgetID))
EndProcedure

OpenWindow(0, 200, 100, 600, 350, "Gadgets in 2 or 3 different sizes")

CheckBoxGadget(0, 10, 10, 180, 20, "Normal CheckBoxGadget")
CheckBoxGadget(1, 210, 10, 180, 20, "Small CheckBoxGadget")
ChangeGadgetSize(1, #kControlSizeSmall)
CheckBoxGadget(2, 410, 10, 180, 20, "Mini CheckBoxGadget")
ChangeGadgetSize(2, #kControlSizeMini)

OptionGadget(3, 10, 40, 180, 20, "Normal OptionGadget")
OptionGadget(4, 210, 40, 180, 20, "Small OptionGadget")
ChangeGadgetSize(4, #kControlSizeSmall)
OptionGadget(5, 410, 40, 180, 20, "Mini OptionGadget")
ChangeGadgetSize(5, #kControlSizeMini)

ButtonGadget(6, 10, 70, 180, 20, "Normal ButtonGadget")
ButtonGadget(7, 210, 70, 180, 20, "Small ButtonGadget")
ChangeGadgetSize(7, #kControlSizeSmall)
ButtonGadget(8, 410, 70, 180, 20, "Mini ButtonGadget")
ChangeGadgetSize(8, #kControlSizeMini)

ButtonGadget(9, 10, 100, 180, 20, "Normal ToggleButton", #PB_Button_Toggle)
ButtonGadget(10, 210, 100, 180, 20, "Small ToggleButton", #PB_Button_Toggle)
ChangeGadgetSize(10, #kControlSizeSmall)

TrackBarGadget(11, 10, 130, 180, 20, 0, 20)
TrackBarGadget(12, 210, 132, 180, 20, 0, 20)
ChangeGadgetSize(12, #kControlSizeSmall)
TrackBarGadget(13, 410, 132, 180, 20, 0, 20)
ChangeGadgetSize(13, #kControlSizeMini)

ScrollBarGadget(14, 10, 163, 180, 20, 0, 20, 1) 
ScrollBarGadget(15, 210, 165, 180, 20, 0, 20, 1) 
ChangeGadgetSize(15, #kControlSizeSmall)

ComboBoxGadget(16, 10, 190, 180, 20)
AddGadgetItem(16, 0, "Normal ComboBox")
SetGadgetState(16, 0)
ComboBoxGadget(17, 210, 192, 180, 20)
AddGadgetItem(17, 0, "Small ComboBox")
SetGadgetState(17, 0)
ChangeGadgetSize(17, #kControlSizeSmall)
ComboBoxGadget(18, 410, 194, 180, 20)
AddGadgetItem(18, 0, "Small ComboBox")
SetGadgetState(18, 0)
ChangeGadgetSize(18, #kControlSizeMini)

ProgressBarGadget(19, 10, 220, 180, 20, 0, 10)
SetGadgetState(19, 5)
ChangeGadgetSize(19, #kControlSizeLarge)
ProgressBarGadget(20, 210, 224, 180, 20, 0, 10)
SetGadgetState(20, 5)

TextGadget(21, 10, 250, 180, 18, "Normal TextGadget", #PB_Text_Border)
TextGadget(22, 210, 252, 180, 15, "Small TextGadget", #PB_Text_Border)
ChangeGadgetSize(22, #kControlSizeSmall)
TextGadget(23, 410, 254, 180, 13, "Mini TextGadget", #PB_Text_Border)
ChangeGadgetSize(23, #kControlSizeMini)

ListViewGadget(24, 10, 280, 180, 60)
AddGadgetItem(24, -1, "ListViewGadget line 1")
AddGadgetItem(24, -1, "ListViewGadget line 2")
AddGadgetItem(24, -1, "ListViewGadget line 3")
AddGadgetItem(24, -1, "ListViewGadget line 4")
ListViewGadget(25, 210, 285, 180, 50)
AddGadgetItem(25, -1, "ListViewGadget line 1")
AddGadgetItem(25, -1, "ListViewGadget line 2")
AddGadgetItem(25, -1, "ListViewGadget line 3")
ChangeGadgetSize(25, #kControlSizeSmall)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Reduce the size of several Gadgets

Posted: Tue May 15, 2012 10:30 pm
by J. Baker
That's pretty cool and may come in handy. Thanks for posting! ;)