; --------------------------------------------------------------------------------------------; Copyright (c) Fantaisie Software. All rights reserved.; Dual licensed under the GPL and Fantaisie Software licenses.; See LICENSE and LICENSE-FANTAISIE in the project root for license information.; --------------------------------------------------------------------------------------------Structure WebViewBaseParametercommand.iEndStructureStructure WebViewInitParameter Extends WebViewBaseParameterfilename.ssourcePath.sList includes.s()EndStructureStructure WebViewErrorParameter Extends WebViewBaseParameterlineId.itext.sEndStructureStructure WebViewWarningParameter Extends WebViewBaseParameterlineId.itext.sEndStructureStructure WebViewDebugParameter Extends WebViewBaseParametertext.sEndStructureStructure WebViewControlDebugOutputParameter Extends WebViewBaseParametervalue.ifilename.sEndStructure; Settings here are also in Global variables because they are needed elsewhereProcedure WebView_Callback(JsonParameters$)Debug JsonParameters$; The callback always returns an array of parameters. In our case, we always have only one parameter, with a specific object;ParseJSON(0, JsonParameters$); Get the first element of the parameter arrayParameterJSON = GetJSONElement(JSONValue(0), 0); Get the base parameter, common to all commandsExtractJSONStructure(ParameterJSON, @BaseParameter.WebViewBaseParameter, WebViewBaseParameter)Debug BaseParameter\command; Update the debugger structure*WebViewDebugger\Command\Command = BaseParameter\command*WebViewDebugger\Command\TimeStamp = Date()Select BaseParameter\commandCase #COMMAND_Init ; Init; Map the JSON to a PB structure;ExtractJSONStructure(ParameterJSON, @InitParameter.WebViewInitParameter, WebViewInitParameter)Debug "****** Init"Debug "filename: "+ InitParameter\filenameDebug "sourcePath: "+ InitParameter\sourcePathDebug "ListSize " + ListSize(InitParameter\Includes())ForEach InitParameter\Includes()Debug InitParameter\Includes()Next; Map to the internal IDE debugger structure format, so we can reuse most of the code for the debugger; It's a bit complex as it was though for native PureBasic executable;*WebViewDebugger\FileName$ = InitParameter\filename*WebViewDebugger\NbIncludedFiles = ListSize(InitParameter\includes()); Calc the needed size. The buffer contains the source path, the main filename and all included files as UTF-8IncludeLength = Len(InitParameter\sourcePath) + 1IncludeLength + Len(InitParameter\filename) + 1ForEach InitParameter\Includes()IncludeLength + Len(InitParameter\Includes()) + 1 ; Include the null terminated charNext*WebViewDebugger\IncludedFiles = ReAllocateMemory(*WebViewDebugger\IncludedFiles, IncludeLength * 4) ; At most the UTF-8 encoding take 4 bytes per char*Output = *WebViewDebugger\IncludedFiles; Write the source path as UTF-8 in the buffer*Output + PokeS(*Output, InitParameter\sourcePath, -1, #PB_UTF8) + 1; Write the main filename as UTF-8 in the buffer*Output + PokeS(*Output, InitParameter\filename, -1, #PB_UTF8) + 1; Write the includes as UTF-8 in the bufferForEach InitParameter\Includes()*Output + PokeS(*Output, InitParameter\Includes(), -1, #PB_UTF8) + 1Next; Close any previous window before launching a new one;If IsWindow(*WebViewDebugger\Windows[#DEBUGGER_WINDOW_Debug])CloseWindow(*WebViewDebugger\Windows[#DEBUGGER_WINDOW_Debug])EndIf; The output window is always createdCreateDebugWindow(*WebViewDebugger)Case #COMMAND_Error; Map the JSON To a PB Structure;ExtractJSONStructure(ParameterJSON, @ErrorParameter.WebViewErrorParameter, WebViewErrorParameter)Debug "****** Error"; Map to the internal IDE debugger structure format, so we can reuse most of the code for the debugger;*WebViewDebugger\Command\Value1 = ErrorParameter\lineId*WebViewDebugger\CommandData = UTF8(ErrorParameter\text)DebuggerCallback(*WebViewDebugger)Case #COMMAND_Warning; Map the JSON To a PB Structure;ExtractJSONStructure(ParameterJSON, @WarningParameter.WebViewWarningParameter, WebViewWarningParameter)Debug "****** Warning"; Map to the internal IDE debugger structure format, so we can reuse most of the code for the debugger;*WebViewDebugger\Command\Value1 = WarningParameter\lineId*WebViewDebugger\CommandData = UTF8(WarningParameter\text)DebuggerCallback(*WebViewDebugger)Case #COMMAND_Debug; Map the JSON To a PB Structure;ExtractJSONStructure(ParameterJSON, @DebugParameter.WebViewDebugParameter, WebViewDebugParameter)Debug "****** Debug"Debug DebugParameter\text*WebViewDebugger\IsDebugMessage = #True*WebViewDebugger\DebugMessage$ = DebugParameter\textUpdateDebugOutputWindow(*WebViewDebugger); show the debug window if needed.; Warning it needs to be the very last command of the 'Debug' block or the callback can recurse of HideWindow() and the message will be displayed out of order: https://forums.spiderbasic.com/viewtopic.php?t=2675; It looks like activating a window process some event and the WebView callback is called again.;If *WebViewDebugger\OutputFirstVisibleOpenDebugWindow(*WebViewDebugger, #True)EndIfCase #COMMAND_ControlDebugOutput; Map the JSON To a PB Structure;ExtractJSONStructure(ParameterJSON, @ControlDebugOutputParameter.WebViewControlDebugOutputParameter, WebViewControlDebugOutputParameter)Debug "****** ControlDebugOutput"Debug ControlDebugOutputParameter\value*WebViewDebugger\Command\Value1 = ControlDebugOutputParameter\value; Use a dynamic allocated memory for 'CommandData' as it could be automatically freed*WebViewDebugger\CommandData = AllocateMemory((Len(ControlDebugOutputParameter\filename)+1)*SizeOf(Character))PokeS(*WebViewDebugger\CommandData, ControlDebugOutputParameter\filename)*WebViewDebugger\Command\DataSize = Len(ControlDebugOutputParameter\filename)DebugOutput_DebuggerEvent(*WebViewDebugger)EndSelectProcedureReturn UTF8("")EndProcedureProcedure WebView_CreateFunction(*Entry.ToolsPanelEntry)StringGadget(#GADGET_WebView_Url, 4, 4, 0, 25, "", #PB_String_ReadOnly)ButtonImageGadget(#GADGET_WebView_OpenBrowser, 0, 4, 25, 25, ImageID(#IMAGE_WebView_OpenBrowser))WebViewGadget(#GADGET_WebView_WebView, 0, 33, 0, 0, #PB_WebView_Debug)BindWebViewCallback(#GADGET_WebView_WebView, "spiderDebug", @WebView_Callback())WebViewOpen = #TrueEndProcedureProcedure WebView_DestroyFunction(*Entry.ToolsPanelEntry)WebViewOpen = #FalseEndProcedureProcedure WebView_ResizeHandler(*Entry.ToolsPanelEntry, PanelWidth, PanelHeight)ResizeGadget(#GADGET_WebView_Url , #PB_Ignore , #PB_Ignore, PanelWidth-35, #PB_Ignore)ResizeGadget(#GADGET_WebView_OpenBrowser, PanelWidth-27, #PB_Ignore, #PB_Ignore , #PB_Ignore)ResizeGadget(#GADGET_WebView_WebView, #PB_Ignore, #PB_Ignore, PanelWidth, PanelHeight-GadgetY(#GADGET_WebView_WebView))EndProcedureProcedure WebView_EventHandler(*Entry.ToolsPanelEntry, EventGadgetID)Select EventGadgetIDCase #GADGET_WebView_OpenBrowserOpenSpiderWebBrowser(GetGadgetText(#GADGET_WebView_Url))EndSelectEndProcedureProcedure WebView_PreferenceStart(*Entry.ToolsPanelEntry)EndProcedureProcedure WebView_PreferenceApply(*Entry.ToolsPanelEntry)EndProcedureProcedure WebView_PreferenceCreate(*Entry.ToolsPanelEntry)EndProcedureProcedure WebView_PreferenceDestroy(*Entry.ToolsPanelEntry)EndProcedureProcedure WebView_PreferenceEvents(*Entry.ToolsPanelEntry, EventGadgetID)EndProcedureProcedure WebView_PreferenceChanged(*Entry.ToolsPanelEntry, IsConfigOpen)EndProcedureProcedure SetWebViewUrl(Url$)SetGadgetText(#GADGET_WebView_Url, Url$)SetGadgetText(#GADGET_WebView_WebView, Url$)ActivateTool("WebView")SetActiveGadget(#GADGET_WebView_WebView)EndProcedureProcedure OpenSpiderWebBrowser(Url$)If Url$ = ""ProcedureReturnEndIfCompilerIf #CompileWindowsIf OptionWebBrowser$RunProgram(OptionWebBrowser,ドル Url,ドル "")ElseRunProgram(Url$) ; Will launch the default browserEndIfCompilerElseIf #CompileLinuxIf OptionWebBrowser$RunProgram(OptionWebBrowser,ドル Url,ドル "")ElseRunProgram("xdg-open", Url,ドル "") ; Will launch the default browserEndIfCompilerElseIf #CompileMacIf OptionWebBrowser$RunProgram("open", "-a " + OptionWebBrowser$ + " " + Url,ドル "")ElseRunProgram("open", Url,ドル "") ; Will launch the default browserEndIfCompilerEndIfEndProcedure;- Initialisation code; This will make this Tool available to the editor;WebView_VT.ToolsPanelFunctionsWebView_VT\CreateFunction = @WebView_CreateFunction()WebView_VT\DestroyFunction = @WebView_DestroyFunction()WebView_VT\ResizeHandler = @WebView_ResizeHandler()WebView_VT\EventHandler = @WebView_EventHandler()WebView_VT\PreferenceStart = @WebView_PreferenceStart()WebView_VT\PreferenceApply = @WebView_PreferenceApply()WebView_VT\PreferenceCreate = @WebView_PreferenceCreate()WebView_VT\PreferenceDestroy = @WebView_PreferenceDestroy()WebView_VT\PreferenceEvents = @WebView_PreferenceEvents()WebView_VT\PreferenceChanged = @WebView_PreferenceChanged()AddElement(AvailablePanelTools())AvailablePanelTools()\FunctionsVT = @WebView_VTAvailablePanelTools()\NeedPreferences = 0 ; the one setting is stored in the global sectionAvailablePanelTools()\NeedConfiguration = 0AvailablePanelTools()\PreferencesWidth = 320AvailablePanelTools()\PreferencesHeight = 80AvailablePanelTools()\NeedDestroyFunction = 1AvailablePanelTools()\ToolID$ = "WebView"AvailablePanelTools()\PanelTitle$ = "WebViewShort"AvailablePanelTools()\ToolName$ = "WebViewLong"AvailablePanelTools()\PanelTabOrder = 5
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。