mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
197 lines
4.9 KiB
Lua
197 lines
4.9 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
local PANEL = {}
|
|
|
|
function PANEL:Init()
|
|
|
|
local ButtonSize = 32
|
|
local Margins = 2
|
|
local Spacing = 0
|
|
|
|
self.BackButton = vgui.Create( "DImageButton", self )
|
|
self.BackButton:SetSize( ButtonSize, ButtonSize )
|
|
self.BackButton:SetImage( "gui/HTML/back" )
|
|
self.BackButton:Dock( LEFT )
|
|
self.BackButton:DockMargin( Spacing * 3, Margins, Spacing, Margins )
|
|
self.BackButton.DoClick = function()
|
|
self.BackButton:SetEnabled( false )
|
|
self.Cur = self.Cur - 1
|
|
self.Navigating = true
|
|
self.HTML:GoBack()
|
|
end
|
|
|
|
self.ForwardButton = vgui.Create( "DImageButton", self )
|
|
self.ForwardButton:SetSize( ButtonSize, ButtonSize )
|
|
self.ForwardButton:SetImage( "gui/HTML/forward" )
|
|
self.ForwardButton:Dock( LEFT )
|
|
self.ForwardButton:DockMargin( Spacing, Margins, Spacing, Margins )
|
|
self.ForwardButton.DoClick = function()
|
|
self.ForwardButton:SetEnabled( false )
|
|
self.Cur = self.Cur + 1
|
|
self.Navigating = true
|
|
self.HTML:GoForward()
|
|
end
|
|
|
|
self.RefreshButton = vgui.Create( "DImageButton", self )
|
|
self.RefreshButton:SetSize( ButtonSize, ButtonSize )
|
|
self.RefreshButton:SetImage( "gui/HTML/refresh" )
|
|
self.RefreshButton:Dock( LEFT )
|
|
self.RefreshButton:DockMargin( Spacing, Margins, Spacing, Margins )
|
|
self.RefreshButton.DoClick = function() self.HTML:Refresh() end
|
|
|
|
self.HomeButton = vgui.Create( "DImageButton", self )
|
|
self.HomeButton:SetSize( ButtonSize, ButtonSize )
|
|
self.HomeButton:SetImage( "gui/HTML/home" )
|
|
self.HomeButton:Dock( LEFT )
|
|
self.HomeButton:DockMargin( Spacing, Margins, Spacing * 3, Margins )
|
|
self.HomeButton.DoClick = function()
|
|
if ( self.HTML.URL == self.HomeURL ) then return end
|
|
self.HTML:StopLoading()
|
|
self.HTML:OpenURL( self.HomeURL )
|
|
end
|
|
|
|
self.StopButton = vgui.Create( "DImageButton", self )
|
|
self.StopButton:SetSize( ButtonSize, ButtonSize )
|
|
self.StopButton:SetImage( "gui/HTML/stop" )
|
|
self.StopButton:Dock( RIGHT )
|
|
self.StopButton:DockMargin( Spacing * 3, Margins, Spacing * 3, Margins )
|
|
self.StopButton.DoClick = function() self.HTML:Stop() end
|
|
|
|
self.AddressBar = vgui.Create( "DTextEntry", self )
|
|
self.AddressBar:Dock( FILL )
|
|
self.AddressBar:DockMargin( Spacing, Margins * 3, Margins * 3, Margins * 3 )
|
|
self.AddressBar.OnEnter = function()
|
|
self.HTML:StopLoading()
|
|
self.HTML:OpenURL( self.AddressBar:GetValue() )
|
|
end
|
|
|
|
self:SetHeight( ButtonSize + Margins * 2 )
|
|
|
|
self.History = {}
|
|
self.Cur = 1
|
|
|
|
-- This is the default look, feel free to change it on your created control :)
|
|
self:SetButtonColor( Color( 250, 250, 250, 200 ) )
|
|
self.BorderSize = 4
|
|
self.BackgroundColor = Color( 40, 40, 40, 255 )
|
|
self.HomeURL = "http://www.google.com"
|
|
|
|
end
|
|
|
|
function PANEL:SetHTML( html )
|
|
|
|
self.HTML = html
|
|
|
|
if ( html.URL ) then
|
|
self.HomeURL = self.HTML.URL
|
|
end
|
|
|
|
self.AddressBar:SetText( self.HomeURL )
|
|
self:UpdateHistory( self.HomeURL )
|
|
|
|
local OldFunc = self.HTML.OnBeginLoadingDocument
|
|
self.HTML.OnBeginLoadingDocument = function( panel, url )
|
|
|
|
self.AddressBar:SetText( url )
|
|
self:StartedLoading()
|
|
|
|
if ( OldFunc ) then
|
|
OldFunc( panel, url )
|
|
end
|
|
|
|
self:UpdateHistory( url )
|
|
|
|
end
|
|
|
|
local OldFunc2 = self.HTML.OnFinishLoadingDocument
|
|
self.HTML.OnFinishLoadingDocument = function( panel, url )
|
|
|
|
self:FinishedLoading()
|
|
|
|
if ( OldFunc2 ) then
|
|
OldFunc2( panel, url )
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function PANEL:UpdateHistory( url )
|
|
|
|
self.Cur = math.Clamp( self.Cur, 1, table.Count( self.History ) )
|
|
|
|
if ( self.Navigating ) then
|
|
|
|
self.Navigating = false
|
|
self:UpdateNavButtonStatus()
|
|
return
|
|
|
|
end
|
|
|
|
-- Check if we refreshed or hooked into the panel just after creation.
|
|
if ( self.History[ self.Cur ] == url ) then return end
|
|
|
|
-- We were back in the history queue, but now we're navigating
|
|
-- So clear the front out so we can re-write history!!
|
|
if ( self.Cur < table.Count( self.History ) ) then
|
|
|
|
for i = self.Cur + 1, table.Count( self.History ) do
|
|
self.History[i] = nil
|
|
end
|
|
|
|
end
|
|
|
|
self.Cur = table.insert( self.History, url )
|
|
|
|
self:UpdateNavButtonStatus()
|
|
|
|
end
|
|
|
|
function PANEL:FinishedLoading()
|
|
|
|
self.StopButton:SetEnabled( false )
|
|
self.RefreshButton:SetEnabled( true )
|
|
|
|
end
|
|
|
|
function PANEL:StartedLoading()
|
|
|
|
self.StopButton:SetEnabled( true )
|
|
self.RefreshButton:SetEnabled( false )
|
|
|
|
end
|
|
|
|
function PANEL:UpdateNavButtonStatus()
|
|
|
|
self.ForwardButton:SetEnabled( self.Cur < table.Count( self.History ) )
|
|
self.BackButton:SetEnabled( self.Cur != 1 )
|
|
|
|
end
|
|
|
|
function PANEL:SetButtonColor( col )
|
|
|
|
self.BackButton:SetColor( col )
|
|
self.ForwardButton:SetColor( col )
|
|
self.RefreshButton:SetColor( col )
|
|
self.HomeButton:SetColor( col )
|
|
self.StopButton:SetColor( col )
|
|
|
|
end
|
|
|
|
function PANEL:Paint()
|
|
|
|
draw.RoundedBoxEx( self.BorderSize, 0, 0, self:GetWide(), self:GetTall(), self.BackgroundColor, true, true, false, false )
|
|
|
|
end
|
|
|
|
derma.DefineControl( "DHTMLControls", "", PANEL, "Panel" )
|