Reduce the size of several Gadgets

Mac OSX specific forum
User avatar
Shardik
Addict
Addict
Posts: 2058
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Reduce the size of several Gadgets

Post 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
jesperbrannmark
Enthusiast
Enthusiast
Posts: 536
Joined: Mon Feb 16, 2009 10:42 am
Location: sweden
Contact:

Re: Reduce the size of several Gadgets

Post 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.
User avatar
Shardik
Addict
Addict
Posts: 2058
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Re: Reduce the size of several Gadgets

Post 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
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Reduce the size of several Gadgets

Post by J. Baker »

That's pretty cool and may come in handy. Thanks for posting! ;)
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
Post Reply