(the additional files for icons and the x_lib can be found via the link below, i've moved the toolbar button functions into the x_lib, don't worry, it's just a regular pb source file, no fancy libraries for me as i'm not good enough
Code: Select all
; purebasic survival guide - pb3.81 vd3.82
; toolbar_1.pb - 29.03.2004 ejn (blueznl)
; http://www.xs4all.nl/~bluez/datatalk/pure1.htm
;
; - toolbars
; - menus
; - togglebuttons
; - radiobuttons
; - binairy inclusion of icons (made with snicoedit)
; - this is part of something i'm working on, not all code in here makes sense :-)
;
IncludeFile "x_lib.pb"
;
x_init()
;
; enumeration is your best friend! let's use it here to give all menus, windows etc. unique numbers
; any constants / vars starting with w_ deal with windows, m_ are menus, g_ are gadgets
; constant naming reflects place in the window / menu structure
;
Enumeration
#w_main
#m_main
#m_main_file_open
#m_main_file_remember
#m_main_file_quit
#m_main_refresh_0
#m_main_refresh_1
#m_main_refresh_2
#m_main_refresh_3
#m_main_refresh_no_scroll
#m_main_refresh_refresh
#i_icon_refresh
#i_icon_no_scroll
#i_icon_exit
#i_icon_0
#i_icon_1
#i_icon_2
#i_icon_3
EndEnumeration
;
; *** icons (included image data)
;
; icons are small and in this case i want them to be part of the executable, not in an external file
; the image data is stored at the end of the executable, see the labels
; don't forget to 'global' them before using
;
i_icon_refresh_h = CatchImage(#i_icon_refresh, ?i_icon_refresh_data)
i_icon_no_scroll_h = CatchImage(#i_icon_no_scroll, ?i_icon_no_scroll_data)
i_icon_exit_h = CatchImage(#i_icon_exit, ?i_icon_exit_data)
i_icon_0_h = CatchImage(#i_icon_0, ?i_icon_0_data)
i_icon_1_h = CatchImage(#i_icon_1, ?i_icon_1_data)
i_icon_2_h = CatchImage(#i_icon_2, ?i_icon_2_data)
i_icon_3_h = CatchImage(#i_icon_3, ?i_icon_3_data)
;
Procedure main()
Protected done.l, event.l, event_window.l
Protected w_main_x.l, w_main_l.l, w_main_h.l, w_main_w.l
Protected file.s, refresh_speed.l, no_scroll.l
Global i_icon_refresh_h.l, i_icon_no_scroll_h.l, i_icon_exit_h.l
Global i_icon_0_h.l, i_icon_1_h.l, i_icon_2_h.l, i_icon_3_h.l
Global tb_main_h.l
;
; *** main loop
;
; some application defaults
;
w_main_x = 100
w_main_y = 200
w_main_w = 300
w_main_h = 300
file.s = "none"
refresh_speed = 1
no_scroll = 0
;
; ok, let's do a window, toolbar and menu by hand, not using the vd :-) first the window...
;
w_main_whnd.l = OpenWindow(#w_main,w_main_x,w_main_y,w_main_w,w_main_h,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_TitleBar,"Survival Guide - Toolbar 1")
;
; now a menu
;
CreateMenu(#m_main,w_main_whnd)
MenuTitle("&File")
MenuItem(#m_main_file_open,"&Open")
MenuItem(#m_main_file_remember,"&Remember")
MenuBar()
MenuItem(#m_main_file_quit,"&Quit")
MenuTitle("&Refresh")
MenuItem(#m_main_refresh_no_scroll,"&No scroll")
MenuItem(#m_main_refresh_refresh,"&Refresh now")
MenuBar()
MenuItem(#m_main_refresh_0,"0.1 sec")
MenuItem(#m_main_refresh_1,"1 sec")
MenuItem(#m_main_refresh_2,"10 sec")
MenuItem(#m_main_refresh_3,"60 sec")
;
; and a toolbar
;
tb_main_h = CreateToolBar(#w_main,w_main_whnd)
;
; the help file is a bit misleading regarding the parameters for ToolBarStandardButton and ToolBarImageButton
; the first parameter is the message being send, the second parameter the button image
; (i wouldn't mind if this stuff would be part of the vd, including data / catch etc.!)
;
ToolBarStandardButton(#m_main_file_open,#PB_ToolBarIcon_Open)
ToolBarSeparator()
x_toolbar_radiobutton(tb_main_h,#m_main_refresh_0,i_icon_0_h,0)
x_toolbar_radiobutton(tb_main_h,#m_main_refresh_1,i_icon_1_h,0)
x_toolbar_radiobutton(tb_main_h,#m_main_refresh_2,i_icon_2_h,0)
x_toolbar_radiobutton(tb_main_h,#m_main_refresh_3,i_icon_3_h,0)
ToolBarSeparator()
x_toolbar_togglebutton(tb_main_h,#m_main_refresh_no_scroll,i_icon_no_scroll_h,0)
ToolBarImageButton(#m_main_refresh_refresh,i_icon_refresh_h)
ToolBarSeparator()
ToolBarImageButton(#m_main_file_quit,i_icon_exit_h)
;
; got all the info, now let the toolbar and menu reflect settings
;
If file <> ""
SetWindowText_(w_main_whnd,"Survival Guide - Toolbar 1: "+file) ; file being viewed goes into the titlebar
EndIf
Select refresh_speed
Case 0
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_0,1)
SetMenuItemState(#m_main,#m_main_refresh_0,1)
Case 1
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_1,1)
SetMenuItemState(#m_main,#m_main_refresh_1,1)
Case 2
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_2,1)
SetMenuItemState(#m_main,#m_main_refresh_2,1)
Case 3
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_3,1)
SetMenuItemState(#m_main,#m_main_refresh_1,60)
EndSelect
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_refresh,scroll_lock)
;
done.l = #False
While done = #False
event = WaitWindowEvent()
event_window = EventWindowID()
;
Select event
Case #PB_EventMenu ; *** menu's, toolbars, keyboard shortcuts
menuid = EventMenuID()
Select menuid
Case #m_main_file_quit ; file / quit was selected from the menu
done = #True
;
Case #m_main_refresh_refresh
;
Case #m_main_refresh_no_scroll
no_scroll = 1-no_scroll
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_no_scroll,no_scroll)
SetMenuItemState(#m_main,#m_main_refresh_no_scroll,no_scroll)
;
Case #m_main_refresh_0
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,0)
refresh_speed = 0
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,1)
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_0,1)
Case #m_main_refresh_1
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,0)
refresh_speed = 1
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,1)
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_1,1)
Case #m_main_refresh_2
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,0)
refresh_speed = 2
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,1)
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_2,1)
Case #m_main_refresh_3
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,0)
refresh_speed = 3
SetMenuItemState(#m_main,#m_main_refresh_0+refresh_speed,1)
x_toolbar_setbuttonstate(tb_main_h,#m_main_refresh_3,1)
Default
; Debug "menuid: "+Str(menuid)
;
EndSelect
;
Case #PB_EventGadget ; *** purebasic gadgets
;
Case #PB_EventCloseWindow ; *** windows close buttons
done = #True
;
Case #WM_SIZE
;
; small bugfix for pb3.81: toolbars are not auto resized, this fixes that...
; should be fixed in 3.89+ (?)
;
SendMessage_(tb_main_h, #TB_AUTOSIZE, 0, 0)
;
Default ; *** any other events
; Debug "windows event - event: "+Str(event)
;
EndSelect
Wend
EndProcedure
main()
End
;
; *** included image data (icons)
;
i_icon_no_scroll_data:
IncludeBinary "pause.ico"
i_icon_exit_data:
IncludeBinary "exit.ico"
i_icon_refresh_data:
IncludeBinary "refresh.ico"
i_icon_0_data:
IncludeBinary "0_1.ico"
i_icon_1_data:
IncludeBinary "1.ico"
i_icon_2_data:
IncludeBinary "10.ico"
i_icon_3_data:
IncludeBinary "60.ico"