Code archives/Networking/[maxgui] Max Browser

This code has been declared by its author to be Public Domain code.

Download source code

[maxgui] Max Browser by Beaker2005
This web browser code was originally written in B+ and was converted to Bmax to see how quickly it could be done. I was impressed with how easy it was. I think overall it works slightly better than the B+ version.

I haven't tested it on Mac/Linux, and would appreciate feedback from anyone who can test it on these platforms. I'm particularly interested to know how a links menu works, and if you ever get problems with other windows opening.
'MAX BROWSE by Beaker 2005

SuperStrict 

Global window:TGadget
Global html:TGadget


'SETUP WINDOW
window=CreateWindow( "Max Browse",0,0,800,600)
SetMinWindowSize window,200,0


'SETUP MENUS
Local filemenu:Tgadget = CreateMenu ("  &File  ",0,WindowMenu(window))
	Local openmenuitem:Tgadget = CreateMenu ("&Open...",1,filemenu)

CreateMenu ("",999,filemenu)
	Local exitmenuitem:Tgadget = CreateMenu ("E&xit",9,filemenu)

Local bookmenu:Tgadget = CreateMenu ("  &Bookmarks  ",0,WindowMenu(window))
	Local addbookmenuitem:Tgadget = CreateMenu ("&Add bookmark",21,bookmenu)
	Local organisebookmenuitem:Tgadget = CreateMenu ("&Organise bookmarks",22,bookmenu)
	DisableMenu organisebookmenuitem
	Local defaultmenuitem:Tgadget = CreateMenu ("Set as &default homepage",23,bookmenu)
	CreateMenu ("",999,bookmenu)

	
Local bookname$, bookURL$, bookfile:TStream
If FileType("bookmark.txt") <> 1	'Then create a bookmark file with Default bookmarks
	bookfile = WriteFile("bookmark.txt")
	RestoreData bookdata
	ReadData bookname$
	ReadData bookURL$
	While bookname$ <> "END"
		WriteLine bookfile,bookname$
		WriteLine bookfile,bookURL$
		ReadData bookname$
		ReadData bookURL
	Wend
	CloseFile bookfile
EndIf

'read the bookmarks into the bookmark menu
Global bookf:Int=500
bookfile = ReadFile("bookmark.txt")
While Not Eof(bookfile)
	bookname$ = ReadLine(bookfile)
	bookURL$ = ReadLine(bookfile)
	If bookURL<>""
		CreateMenu (bookname,bookf,bookmenu)
		bookf = bookf +1
	EndIf
Wend
CloseFile bookfile
CreateMenu ("",999,bookmenu)

Local helpmenu:Tgadget = CreateMenu("  &Help  ",0,WindowMenu(window))
Local aboutmenu:Tgadget = CreateMenu("&About",1000,helpmenu)

UpdateWindowMenu window


If FileType("default.txt") <> 1	'Then create the default.txt file with the Default homepage
	Local deffile:TStream = WriteFile("default.txt")
		WriteLine deffile,"http://www.blitzbasic.com"
	CloseFile deffile
EndIf

Local deffile:TStream = ReadFile("default.txt")
	Global defURL$ = ReadLine (deffile)
CloseFile deffile




'SETUP BUTTONS
Local panel:Tgadget = CreatePanel (0,0,800,40,window,0)
	SetGadgetLayout panel,1,0,1,0
	Local backbutt:TGadget = CreateButton ("Back",5,5,60,30,panel)
	Local forebutt:TGadget = CreateButton ("Forward",70,5,60,30,panel)
	Local refreshbutt:TGadget = CreateButton ("Refresh",135,5,60,30,panel)
	Local homebutt:TGadget = CreateButton ("Home",200,5,60,30,panel)
	Global URLfield:TGadget = CreateTextField (265,10,350,20,panel)
	Local URLgo:TGadget = CreateButton ("GO!",620,10,60,20,panel,BUTTON_OK)

	

'SETUP HTML VIEW
html:Tgadget=CreateHTMLView( 0,45,ClientWidth(window),ClientHeight(window)-50,window, HTMLVIEW_NONAVIGATE )
SetGadgetLayout html,1,1,1,1


Global current$
GoURL(defURL)

Local localURL$,found:Int,url$

'MAIN LOOP
While WaitEvent()
	Print EventData()
	Select EventID()
		Case EVENT_GADGETDONE	'page loaded
			If EventSource() = html
				SetGadgetText URLfield,HtmlViewCurrentURL(html)			
			EndIf
		Case EVENT_MENUACTION	'MENU EVENTS
			Select EventData()
				Case 1	'Open Local File
					DebugLog "OPEN LOCAL"
					localURL$ = RequestFile("Open local file","Web files - *.htm,html,jpg,gif,png:htm,html,jpg,gif,png;All files:*")
					If FileType (localURL) = 1
						GoURL(localURL)
					EndIf
				Case 9	'Close program
					End
				Case 21	'Add bookmark
					bookfile = OpenFile("bookmark.txt")
					found = False
					While Not Eof(bookfile)
						bookname = ReadLine(bookfile)
						bookURL = ReadLine(bookfile)
						If bookURL = current
							Notify "URL already in bookmarks"
							found = True
							Exit
						EndIf
					Wend
					If found = False
						WriteLine bookfile,current
						WriteLine bookfile,current
						CreateMenu (current,bookf,bookmenu)
						bookf = bookf +1
						UpdateWindowMenu window
					EndIf
					CloseFile bookfile
				Case 23	'Set as Default homepage
					deffile = WriteFile("default.txt")
						WriteLine deffile,current$
					CloseFile deffile
				Case 1000	'About
					Notify "Max Browse by Beaker 2005"+Chr(13)+"(bookmarks are in the bookmark.txt file)"
			End Select
			If EventData() >= 500	'Jump To a specific bookmark
				Local f:Int = 0
				bookfile = ReadFile("bookmark.txt")
				While Not Eof(bookfile)
					bookname$ = ReadLine (bookfile)
					bookURL = ReadLine (bookfile)
					If f = EventData()-500 Then
						GoURL(bookURL)
						Exit
					EndIf
					f = f +1
				Wend
			EndIf	
		Case EVENT_GADGETACTION	'BUTTON EVENTS
			Select EventSource()
				Case html	' Catch clicking on URL links
					goURL String(EventExtra())
				Case backbutt
						HtmlViewBack html
				Case forebutt
						HtmlViewForward html
				Case refreshbutt
						GoURL(HtmlViewCurrentURL(html))
				Case homebutt
					deffile = ReadFile("default.txt")
						GoURL(ReadLine (deffile))
					CloseFile deffile
				Case URLgo
					GoURL(TextFieldText(URLfield))					
			End Select
					
		Case EVENT_WINDOWCLOSE	'WINDOW CLOSED EVENT
			Select EventSource()
				Case window
					End
			End Select
				
	End Select
	

Wend
End



Function GoURL(URL$)
	current = URL$
	SetGadgetText URLfield,current
	DebugLog current
	HtmlViewGo html,current
	SetGadgetText window,"Max Browse - "+current
End Function




#bookdata
DefData "Blitz Basic"
	DefData "http://www.blitzbasic.com"
DefData "gile[s] lightmapper"
	DefData "http://www.frecle.net/giles/"
DefData "GUIde GUI editor"
	DefData "http://members.home.nl/wdw/guide/"
DefData "Game Making Tools forum"
	DefData "http://playerfactory.proboards25.com"
DefData "END"
	DefData "END"

Comments

bruZard2005
First: Excuse my fu**n english ;)

Why i can't hit R
return and the given site is loading? Add a Event-Keydown and this Code is usefull ;) ;)


Beaker2005
Ooh! that did work at one point, Mark must've changed some internal stuff since I wrote it. I will look into it and amend.


Beaker2005
Updated.


rdodson412005
Im on the mac here, I like it works well, though are bookmarks not working? Anyway looks great! By the way I am posting this using Max Browse!


Beaker2006
Updated to incorporate SuperStrict and work with BMax 1.22.

Sushimasta - yes, something isn't working with the user created bookmarks.


Banshee2007
This is a sweet little program, but there's one limit and i've not managed to find a way around it. It cannot cope with opening a link in a new window.

<a href="example.php" target="_blank">


skidracer2007
Banshee, that limitation may not be going away any time soon.

To work around, try catching the clicked link event, hopefully you can detect the nature of the link and invoke the OpenURL command instead to launch the a new browser app instead of redirecting the page with a HTMLViewGo command.


Banshee2007
I tried but for some reason I couldn't find a way of making it detect the event. I'm still not very good with BlitzMax though tbh, so i'm probably missing something.


skidracer2007
You need to use the HTMLVIEW_NONAVIGATE style to intercept user behavior.


Banshee2007
I did that but when a user clicks a link that would normally open a new window then no event data is generated, as far as I can see. Actually HTMLVIEW_NONAVIGATE is in the original code snippet above.


Code Archives Forum