local Details = _G.Details local DF = _G.DetailsFramework local _ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -- ~run ~runcode function Details:InitializeRunCodeWindow() local DetailsRunCodePanel = DF:CreateSimplePanel (UIParent, 700, 480, "Details! Run Code", "DetailsRunCodePanel") DetailsRunCodePanel.Frame = DetailsRunCodePanel DetailsRunCodePanel.__name = "Auto Run Code" DetailsRunCodePanel.real_name = "DETAILS_RUNCODEWINDOW" --DetailsRunCodePanel.__icon = [[Interface\AddOns\Details\images\lua_logo]] DetailsRunCodePanel.__icon = [[Interface\AddOns\Details\images\run_code]] --DetailsRunCodePanel.__iconcoords = {0, 1, 0, 1} DetailsRunCodePanel.__iconcoords = {0, 30/32, 0, 25/32} DetailsRunCodePanel.__iconcoords = {0, 1, 0, 1} DetailsRunCodePanel.__iconcolor = "white" DetailsPluginContainerWindow.EmbedPlugin (DetailsRunCodePanel, DetailsRunCodePanel, true) function DetailsRunCodePanel.RefreshWindow() Details.OpenRunCodeWindow() end DetailsRunCodePanel:Hide() end function Details.OpenRunCodeWindow() if (not DetailsRunCodePanel or not DetailsRunCodePanel.Initialized) then DetailsRunCodePanel.Initialized = true local f = DetailsRunCodePanel or DF:CreateSimplePanel (UIParent, 700, 480, "Details! Run Code", "DetailsRunCodePanel") --> lua editor local code_editor = DF:NewSpecialLuaEditorEntry (f, 885, 510, "text", "$parentCodeEditorWindow") f.CodeEditor = code_editor code_editor:SetPoint ("topleft", f, "topleft", 20, -56) --> code editor appearance code_editor.scroll:SetBackdrop (nil) code_editor.editbox:SetBackdrop (nil) code_editor:SetBackdrop (nil) DF:ReskinSlider (code_editor.scroll) if (not code_editor.__background) then code_editor.__background = code_editor:CreateTexture (nil, "background") end code_editor:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1}) code_editor:SetBackdropBorderColor (0, 0, 0, 1) code_editor.__background:SetColorTexture (0.2317647, 0.2317647, 0.2317647) code_editor.__background:SetVertexColor (0.27, 0.27, 0.27) code_editor.__background:SetAlpha (0.8) code_editor.__background:SetVertTile (true) code_editor.__background:SetHorizTile (true) code_editor.__background:SetAllPoints() --> code compile error warning local errortext_frame = CreateFrame ("frame", nil, code_editor,"BackdropTemplate") errortext_frame:SetPoint ("bottomleft", code_editor, "bottomleft", 1, 1) errortext_frame:SetPoint ("bottomright", code_editor, "bottomright", -1, 1) errortext_frame:SetHeight (20) errortext_frame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) errortext_frame:SetBackdropBorderColor (0, 0, 0, 1) errortext_frame:SetBackdropColor (0, 0, 0) DF:CreateFlashAnimation (errortext_frame) local errortext_label = DF:CreateLabel (errortext_frame, "", DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE")) errortext_label.textcolor = "red" errortext_label:SetPoint ("left", errortext_frame, "left", 3, 0) code_editor.NextCodeCheck = 0.33 code_editor:HookScript ("OnUpdate", function (self, deltaTime) code_editor.NextCodeCheck = code_editor.NextCodeCheck - deltaTime if (code_editor.NextCodeCheck < 0) then local script = code_editor:GetText() local func, errortext = loadstring (script, "Q") if (not func) then local firstLine = strsplit ("\n", script, 2) errortext = errortext:gsub (firstLine, "") errortext = errortext:gsub ("%[string \"", "") errortext = errortext:gsub ("...\"]:", "") errortext = errortext:gsub ("Q\"]:", "") errortext = "Line " .. errortext errortext_label.text = errortext else errortext_label.text = "" end code_editor.NextCodeCheck = 0.33 end end) --> script selector local on_select_CodeType_option = function (self, fixedParameter, value) --> set the current editing code type f.EditingCode = Details.RunCodeTypes [value].Value f.EditingCodeKey = Details.RunCodeTypes [value].ProfileKey --> load the code for the event local code = Details.run_code [f.EditingCodeKey] code_editor:SetText (code) end local build_CodeType_dropdown_options = function() local t = {} for i = 1, #Details.RunCodeTypes do local option = Details.RunCodeTypes [i] t [#t + 1] = {label = option.Name, value = option.Value, onclick = on_select_CodeType_option, desc = option.Desc} end return t end local code_type_label = DF:CreateLabel (f, "Event:", DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE")) local code_type_dropdown = DF:CreateDropDown (f, build_CodeType_dropdown_options, 1, 160, 20, "CodeTypeDropdown", _, DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) code_type_dropdown:SetPoint ("left", code_type_label, "right", 2, 0) code_type_dropdown:SetFrameLevel (code_editor:GetFrameLevel() + 10) code_type_label:SetPoint ("bottomleft", code_editor, "topleft", 0, 8) --> create save button local save_script = function() local code = code_editor:GetText() local func, errortext = loadstring (code, "Q") if (func) then Details.run_code [f.EditingCodeKey] = code Details:RecompileAutoRunCode() Details:Msg ("Code saved!") code_editor:ClearFocus() else errortext_frame:Flash (0.2, 0.2, 0.4, true, nil, nil, "NONE") Details:Msg ("Can't save the code: it has errors.") end end local button_y = -6 local save_script_button = DF:CreateButton (f, save_script, 120, 20, "Save", -1, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", "PLATER_BUTTON")) save_script_button:SetIcon ([[Interface\BUTTONS\UI-Panel-ExpandButton-Up]], 20, 20, "overlay", {0.1, .9, 0.1, .9}) save_script_button:SetPoint ("topright", code_editor, "bottomright", 0, button_y) --> create cancel button local cancel_script = function() code_editor:SetText (Details.run_code [f.EditingCodeKey]) Details:Msg ("Code cancelled!") code_editor:ClearFocus() end local cancel_script_button = DF:CreateButton (f, cancel_script, 120, 20, "Cancel", -1, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", "PLATER_BUTTON")) cancel_script_button:SetIcon ([[Interface\BUTTONS\UI-Panel-MinimizeButton-Up]], 20, 20, "overlay", {0.1, .9, 0.1, .9}) cancel_script_button:SetPoint ("topleft", code_editor, "bottomleft", 0, button_y) --> create run now button local execute_script = function() local script = code_editor:GetText() local func, errortext = loadstring (script, "Q") if (func) then DF:SetEnvironment(func) DF:QuickDispatch (func) else errortext_frame:Flash (0.2, 0.2, 0.4, true, nil, nil, "NONE") end end local run_script_button = DF:CreateButton (f, execute_script, 120, 20, "Test Code", -1, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", "PLATER_BUTTON")) run_script_button:SetIcon ([[Interface\BUTTONS\UI-SpellbookIcon-NextPage-Up]], 20, 20, "overlay", {0.05, 0.95, 0.05, 0.95}) run_script_button:SetPoint ("bottomright", code_editor, "topright", 0, 3) end DetailsPluginContainerWindow.OpenPlugin (DetailsRunCodePanel) DetailsRunCodePanel.CodeTypeDropdown:Select (1, true) --> show the initialization code when showing up this window DetailsRunCodePanel.EditingCode = Details.RunCodeTypes [1].Value DetailsRunCodePanel.EditingCodeKey = Details.RunCodeTypes [1].ProfileKey local code = Details.run_code [DetailsRunCodePanel.EditingCodeKey] DetailsRunCodePanel.CodeEditor:SetText (code) end