--custom window
local _detalhes = _G._detalhes
local gump = _detalhes.gump
local _
local Loc = LibStub ( " AceLocale-3.0 " ) : GetLocale ( " Details " )
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--local pointers
local ipairs = ipairs --lua local
local pairs = pairs --lua local
local tinsert = table.insert --lua local
local setmetatable = setmetatable --lua local
local _GetSpellInfo = _detalhes.getspellinfo --api local
local CreateFrame = CreateFrame --api local
local UIParent = UIParent --api local
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--constants
local CONST_MENU_X_POSITION = 10
local CONST_MENU_Y_POSITION = - 40
local CONST_MENU_WIDTH = 160
local CONST_MENU_HEIGHT = 20
local CONST_INFOBOX_X_POSITION = 220
local CONST_EDITBUTTONS_X_POSITION = 560
local CONST_EDITBOX_Y_POSITION = - 200
local CONST_EDITBOX_WIDTH = 893
local CONST_EDITBOX_HEIGHT = 370
local CONST_EDITBOX_BUTTON_WIDTH = 80
local CONST_EDITBOX_BUTTON_HEIGHT = 20
local CONST_BUTTON_TEMPLATE = gump : GetTemplate ( " button " , " OPTIONS_BUTTON_TEMPLATE " )
local CONST_TEXTENTRY_TEMPLATE = gump : GetTemplate ( " button " , " OPTIONS_BUTTON_TEMPLATE " )
gump : InstallTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BUTTONS " ,
{
icon = { texture = [[Interface\BUTTONS\UI-GuildButton-PublicNote-Up]] } ,
width = 160 ,
} ,
" DETAILS_PLUGIN_BUTTON_TEMPLATE "
)
gump : InstallTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON " ,
{
width = 130 ,
} ,
" DETAILS_PLUGIN_BUTTON_TEMPLATE "
)
gump : InstallTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BOX " , {
backdrop = { edgeFile = [[Interface\Buttons\WHITE8X8]] , edgeSize = 1 , bgFile = [[Interface\Tooltips\UI-Tooltip-Background]] , tileSize = 64 , tile = true } ,
backdropcolor = { .2 , .2 , .2 , 0.6 } ,
backdropbordercolor = { 0 , 0 , 0 , 1 } ,
} )
gump : InstallTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED " , {
backdrop = { edgeFile = [[Interface\Buttons\WHITE8X8]] , edgeSize = 1 , bgFile = [[Interface\Tooltips\UI-Tooltip-Background]] , tileSize = 64 , tile = true } ,
backdropcolor = { .2 , .2 , .2 , 1 } ,
backdropbordercolor = { 0 , 0 , 0 , 1 } ,
} )
gump : InstallTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON " , {
backdrop = { edgeFile = [[Interface\Buttons\WHITE8X8]] , edgeSize = 1 , bgFile = [[Interface\Tooltips\UI-Tooltip-Background]] , tileSize = 64 , tile = true } ,
backdropcolor = { .2 , .2 , .2 , 1 } ,
backdropbordercolor = { 0 , 0 , 0 , 1 } ,
} )
gump : NewColor ( " DETAILS_CUSTOMDISPLAY_ICON " , .7 , .6 , .5 , 1 )
local CONST_CODETEXTENTRY_TEMPLATE = gump : GetTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BOX " )
local CONST_CODETEXTENTRYEXPANDED_TEMPLATE = gump : GetTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED " )
local CONST_CODETEXTENTRYBUTTON_TEMPLATE = gump : GetTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON " )
local CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE = gump : GetTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_CODE_BUTTONS " )
local CONST_REGULAR_BUTTON_TEMPLATE = gump : GetTemplate ( " button " , " DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON " )
local object_keys = {
[ " name " ] = true ,
[ " icon " ] = true ,
[ " attribute " ] = true ,
[ " spellid " ] = true ,
[ " author " ] = true ,
[ " desc " ] = true ,
[ " source " ] = true ,
[ " target " ] = true ,
[ " script " ] = true ,
[ " tooltip " ] = true ,
[ " total_script " ] = true ,
[ " percent_script " ] = true ,
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--create the window
function _detalhes : CloseCustomDisplayWindow ( )
--cancel editing or creation
if ( DetailsCustomPanel.CodeEditing ) then
DetailsCustomPanel : CancelFunc ( )
end
if ( DetailsCustomPanel.IsEditing ) then
DetailsCustomPanel : CancelFunc ( )
end
DetailsCustomPanel : Reset ( )
DetailsCustomPanel : ClearFocus ( )
--hide the frame
_G.DetailsCustomPanel : Hide ( )
end
function _detalhes : InitializeCustomDisplayWindow ( )
local DetailsCustomPanel = CreateFrame ( " frame " , " DetailsCustomPanel " , UIParent , " BackdropTemplate " )
DetailsCustomPanel.Frame = DetailsCustomPanel
DetailsCustomPanel.__name = Loc [ " STRING_SCRIPTS_TITLE " ]
DetailsCustomPanel.real_name = " DETAILS_CUSTOMDISPLAY "
--DetailsCustomPanel.__icon = [[Interface\FriendsFrame\UI-FriendsList-Small-Up]]
DetailsCustomPanel.__icon = [[Interface\AddOns\Details\images\icons]]
DetailsCustomPanel.__iconcoords = { 412 / 512 , 441 / 512 , 43 / 512 , 79 / 512 }
DetailsCustomPanel.__iconcolor = " DETAILS_CUSTOMDISPLAY_ICON "
DetailsPluginContainerWindow.EmbedPlugin ( DetailsCustomPanel , DetailsCustomPanel , true )
function DetailsCustomPanel . RefreshWindow ( )
_detalhes : OpenCustomDisplayWindow ( )
end
end
function _detalhes : OpenCustomDisplayWindow ( )
if ( not _G.DetailsCustomPanel or not DetailsCustomPanel.Initialized ) then
DetailsPluginContainerWindow.OpenPlugin ( DetailsCustomPanel )
local GameCooltip = GameCooltip
DetailsCustomPanel.Initialized = true
--main frame
local customWindow = DetailsCustomPanel or CreateFrame ( " frame " , " DetailsCustomPanel " , UIParent , " BackdropTemplate " )
customWindow : SetPoint ( " center " , UIParent , " center " )
customWindow : SetSize ( 850 , 500 )
customWindow : EnableMouse ( true )
customWindow : SetMovable ( true )
customWindow : SetScript ( " OnMouseDown " , function ( self , button )
if ( button == " LeftButton " ) then
if ( not self.moving ) then
self.moving = true
self : StartMoving ( )
end
elseif ( button == " RightButton " ) then
if ( not self.moving ) then
_detalhes : CloseCustomDisplayWindow ( )
end
end
end )
customWindow : SetScript ( " OnMouseUp " , function ( self )
if ( self.moving ) then
self.moving = false
self : StopMovingOrSizing ( )
end
end )
customWindow : SetScript ( " OnShow " , function ( )
GameCooltip : Hide ( )
end )
tinsert ( UISpecialFrames , " DetailsCustomPanel " )
--menu title bar
local titlebar = CreateFrame ( " frame " , nil , customWindow , " BackdropTemplate " )
titlebar : SetPoint ( " topleft " , customWindow , " topleft " , 2 , - 3 )
titlebar : SetPoint ( " topright " , customWindow , " topright " , - 2 , - 3 )
titlebar : SetHeight ( 20 )
titlebar : SetBackdrop ( { edgeFile = [[Interface\Buttons\WHITE8X8]] , edgeSize = 1 , bgFile = [[Interface\AddOns\Details\images\background]] , tileSize = 64 , tile = true } )
titlebar : SetBackdropColor ( .5 , .5 , .5 , 1 )
titlebar : SetBackdropBorderColor ( 0 , 0 , 0 , 1 )
--menu title
local titleLabel = _detalhes.gump : NewLabel ( titlebar , titlebar , nil , " titulo " , " Details! Custom Displays " , " GameFontNormal " , 12 )
titleLabel : SetPoint ( " center " , titlebar , " center " )
titleLabel : SetPoint ( " top " , titlebar , " top " , 0 , - 4 )
--close button
customWindow.Close = CreateFrame ( " button " , " $parentCloseButton " , customWindow )
customWindow.Close : SetPoint ( " right " , titlebar , " right " , - 2 , 0 )
customWindow.Close : SetSize ( 16 , 16 )
customWindow.Close : SetNormalTexture ( [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]] )
customWindow.Close : SetHighlightTexture ( [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]] )
customWindow.Close : SetPushedTexture ( [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]] )
customWindow.Close : GetNormalTexture ( ) : SetDesaturated ( true )
customWindow.Close : GetHighlightTexture ( ) : SetDesaturated ( true )
customWindow.Close : GetPushedTexture ( ) : SetDesaturated ( true )
customWindow.Close : SetAlpha ( 0.7 )
customWindow.Close : SetScript ( " OnClick " , function ( ) _detalhes : CloseCustomDisplayWindow ( ) end )
customWindow.Close : SetScript ( " OnHide " , function ( )
_detalhes : CloseCustomDisplayWindow ( )
end )
--background
customWindow.bg1 = customWindow : CreateTexture ( nil , " background " )
customWindow.bg1 : SetTexture ( [[Interface\AddOns\Details\images\background]] , true )
customWindow.bg1 : SetAlpha ( 0.7 )
customWindow.bg1 : SetVertexColor ( 0.27 , 0.27 , 0.27 )
customWindow.bg1 : SetVertTile ( true )
customWindow.bg1 : SetHorizTile ( true )
customWindow.bg1 : SetAllPoints ( )
customWindow : SetBackdrop ( { edgeFile = [[Interface\Buttons\WHITE8X8]] , edgeSize = 1 , bgFile = [[Interface\AddOns\Details\images\background]] , tileSize = 64 , tile = true } )
customWindow : SetBackdropColor ( .5 , .5 , .5 , .5 )
customWindow : SetBackdropBorderColor ( 0 , 0 , 0 , 1 )
DetailsCustomPanel.BoxType = 1
DetailsCustomPanel.IsEditing = false
DetailsCustomPanel.IsImporting = false
DetailsCustomPanel.CodeEditing = false
DetailsCustomPanel.current_attribute = " damagedone "
DetailsCustomPanel.code1_default = [ [
--get the parameters passed
local Combat , CustomContainer , Instance = ...
--declade the values to return
local total , top , amount = 0 , 0 , 0
--do the loop
--CustomContainer:AddValue (actor, actor.value)
--loop end
--if not managed inside the loop, get the values of total, top and amount
total , top = CustomContainer : GetTotalAndHighestValue ( )
amount = CustomContainer : GetNumActors ( )
--return the values
return total , top , amount
] ]
DetailsCustomPanel.code1 = DetailsCustomPanel.code1_default
DetailsCustomPanel.code2_default = [ [
--get the parameters passed
local actor , combat , instance = ...
--get the cooltip object (we dont use the convencional GameTooltip here)
local GameCooltip = GameCooltip
--Cooltip code
] ]
DetailsCustomPanel.code2 = DetailsCustomPanel.code2_default
DetailsCustomPanel.code3_default = [ [
local value , top , total , combat , instance = ...
return math.floor ( value )
] ]
DetailsCustomPanel.code3 = DetailsCustomPanel.code3_default
DetailsCustomPanel.code4_default = [ [
local value , top , total , combat , instance = ...
return string.format ( " %.1f " , value / total * 100 )
] ]
DetailsCustomPanel.code4 = DetailsCustomPanel.code4_default
function DetailsCustomPanel : ClearFocus ( )
customWindow.desc_field : ClearFocus ( )
customWindow.name_field : ClearFocus ( )
customWindow.author_field : ClearFocus ( )
end
function DetailsCustomPanel : Reset ( )
self.name_field : SetText ( " " )
self.icon_image : SetTexture ( [[Interface\ICONS\TEMP]] )
self.desc_field : SetText ( " " )
self.author_field : SetText ( UnitName ( " player " ) .. " - " .. GetRealmName ( ) )
self.author_field : Enable ( )
self.source_dropdown : Select ( 1 , true )
self.source_field : SetText ( " " )
self.target_dropdown : Select ( 1 , true )
self.target_field : SetText ( " " )
self.spellid_entry : SetText ( " " )
DetailsCustomPanel.code1 = DetailsCustomPanel.code1_default
DetailsCustomPanel.code2 = DetailsCustomPanel.code2_default
DetailsCustomPanel.code3 = DetailsCustomPanel.code3_default
DetailsCustomPanel.code4 = DetailsCustomPanel.code4_default
DetailsCustomPanel.current_attribute = " damagedone "
DetailsCustomPanelAttributeMenu1 : Click ( )
DetailsCustomPanel : ClearFocus ( )
end
function DetailsCustomPanel : RemoveDisplay ( custom_object , index )
table.remove ( _detalhes.custom , index )
for _ , instance in ipairs ( _detalhes.tabela_instancias ) do
if ( instance.atributo == 5 and instance.sub_atributo == index ) then
instance : ResetAttribute ( )
elseif ( instance.atributo == 5 and instance.sub_atributo > index ) then
instance.sub_atributo = instance.sub_atributo - 1
instance.sub_atributo_last [ 5 ] = 1
else
instance.sub_atributo_last [ 5 ] = 1
end
end
_detalhes.switch : OnRemoveCustom ( index )
_detalhes : ResetCustomFunctionsCache ( )
end
function DetailsCustomPanel : StartEdit ( custom_object , import )
DetailsCustomPanel : Reset ( )
DetailsCustomPanel : ClearFocus ( )
DetailsCustomPanel.IsEditing = custom_object
DetailsCustomPanel.IsImporting = import
self.name_field : SetText ( custom_object : GetName ( ) )
self.desc_field : SetText ( custom_object : GetDesc ( ) )
self.icon_image : SetTexture ( custom_object : GetIcon ( ) )
self.author_field : SetText ( custom_object : GetAuthor ( ) )
self.author_field : Disable ( )
customWindow.codeeditor : SetText ( " " )
if ( custom_object : IsScripted ( ) ) then
customWindow.script_button_attribute : Click ( )
DetailsCustomPanel.code1 = custom_object : GetScript ( )
DetailsCustomPanel.code2 = custom_object : GetScriptToolip ( )
DetailsCustomPanel.code3 = custom_object : GetScriptTotal ( ) or DetailsCustomPanel.code3_default
DetailsCustomPanel.code4 = custom_object : GetScriptPercent ( ) or DetailsCustomPanel.code4_default
else
local attribute = custom_object : GetAttribute ( )
if ( attribute == " damagedone " ) then
DetailsCustomPanelAttributeMenu1 : Click ( )
elseif ( attribute == " healdone " ) then
DetailsCustomPanelAttributeMenu2 : Click ( )
end
local source = custom_object : GetSource ( )
if ( source == " [all] " ) then
self.source_dropdown : Select ( 1 , true )
self.source_field : SetText ( " " )
self.source_field : Disable ( )
elseif ( source == " [raid] " ) then
self.source_dropdown : Select ( 2 , true )
self.source_field : SetText ( " " )
self.source_field : Disable ( )
elseif ( source == " [player] " ) then
self.source_dropdown : Select ( 3 , true )
self.source_field : SetText ( " " )
self.source_field : Disable ( )
else
self.source_dropdown : Select ( 4 , true )
self.source_field : SetText ( source )
self.source_field : Enable ( )
end
local target = custom_object : GetTarget ( )
if ( not target ) then
self.target_dropdown : Select ( 5 , true )
self.target_field : SetText ( " " )
self.target_field : Disable ( )
elseif ( target == " [all] " ) then
self.target_dropdown : Select ( 1 , true )
self.target_field : SetText ( " " )
self.target_field : Disable ( )
elseif ( target == " [raid] " ) then
self.target_dropdown : Select ( 2 , true )
self.target_field : SetText ( " " )
self.target_field : Disable ( )
elseif ( target == " [player] " ) then
self.target_dropdown : Select ( 3 , true )
self.target_field : SetText ( " " )
self.target_field : Disable ( )
else
self.target_dropdown : Select ( 4 , true )
self.target_field : SetText ( target )
self.target_field : Enable ( )
end
self.spellid_entry : SetText ( custom_object : GetSpellId ( ) or " " )
end
if ( import ) then
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_IMPORT_BUTTON " ] )
else
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_SAVE " ] )
end
end
function DetailsCustomPanel : CreateNewCustom ( )
local name = self.name_field : GetText ( )
DetailsCustomPanel : ClearFocus ( )
_detalhes.MicroButtonAlert : Hide ( )
if ( string.len ( name ) < 5 ) then
return false , _detalhes : Msg ( Loc [ " STRING_CUSTOM_SHORTNAME " ] )
elseif ( string.len ( name ) > 32 ) then
return false , _detalhes : Msg ( Loc [ " STRING_CUSTOM_LONGNAME " ] )
end
_detalhes : ResetCustomFunctionsCache ( )
local icon = self.icon_image : GetTexture ( )
local desc = self.desc_field : GetText ( )
local author = self.author_field : GetText ( )
if ( DetailsCustomPanel.BoxType == 1 ) then
local source = self.source_dropdown : GetValue ( )
local target = self.target_dropdown : GetValue ( )
local spellid = self.spellid_entry : GetText ( )
if ( not source ) then
source = self.source_field : GetText ( )
end
if ( not target ) then
target = self.target_field : GetText ( )
elseif ( target == " [none] " ) then
target = false
end
if ( spellid == " " ) then
spellid = false
end
if ( DetailsCustomPanel.IsEditing ) then
local object = DetailsCustomPanel.IsEditing
object.name = name
object.icon = icon
object.desc = desc
object.author = author
object.attribute = DetailsCustomPanel.current_attribute
object.source = source
object.target = target
object.spellid = tonumber ( spellid )
object.script = false
object.tooltip = false
if ( DetailsCustomPanel.IsImporting ) then
_detalhes : Msg ( Loc [ " STRING_CUSTOM_IMPORTED " ] )
else
_detalhes : Msg ( Loc [ " STRING_CUSTOM_SAVED " ] )
end
if ( DetailsCustomPanel.IsImporting ) then
tinsert ( _detalhes.custom , object )
end
DetailsCustomPanel.IsEditing = false
DetailsCustomPanel.IsImporting = false
self.author_field : Enable ( )
return true
else
local new_custom_object = {
[ " name " ] = name ,
[ " icon " ] = icon ,
[ " desc " ] = desc ,
[ " author " ] = author ,
[ " attribute " ] = DetailsCustomPanel.current_attribute ,
[ " source " ] = source ,
[ " target " ] = target ,
[ " spellid " ] = tonumber ( spellid ) ,
[ " script " ] = false ,
[ " tooltip " ] = false ,
}
tinsert ( _detalhes.custom , new_custom_object )
setmetatable ( new_custom_object , _detalhes.atributo_custom )
new_custom_object.__index = _detalhes.atributo_custom
_detalhes : Msg ( Loc [ " STRING_CUSTOM_CREATED " ] )
end
DetailsCustomPanel : Reset ( )
elseif ( DetailsCustomPanel.BoxType == 2 ) then
local main_code = DetailsCustomPanel.code1
local tooltip_code = DetailsCustomPanel.code2
local total_code = DetailsCustomPanel.code3
local percent_code = DetailsCustomPanel.code4
if ( DetailsCustomPanel.IsEditing ) then
local object = DetailsCustomPanel.IsEditing
object.name = name
object.icon = icon
object.desc = desc
object.author = author
object.attribute = false
object.source = false
object.target = false
object.spellid = false
object.script = main_code
object.tooltip = tooltip_code
if ( total_code ~= DetailsCustomPanel.code3_default ) then
object.total_script = total_code
else
object.total_script = false
end
if ( percent_code ~= DetailsCustomPanel.code4_default ) then
object.percent_script = percent_code
else
object.percent_script = false
end
if ( DetailsCustomPanel.IsImporting ) then
_detalhes : Msg ( Loc [ " STRING_CUSTOM_IMPORTED " ] )
else
_detalhes : Msg ( Loc [ " STRING_CUSTOM_SAVED " ] )
end
if ( DetailsCustomPanel.IsImporting ) then
tinsert ( _detalhes.custom , object )
end
DetailsCustomPanel.IsEditing = false
DetailsCustomPanel.IsImporting = false
self.author_field : Enable ( )
return true
else
local new_custom_object = {
[ " name " ] = name ,
[ " icon " ] = icon ,
[ " desc " ] = desc ,
[ " author " ] = author ,
[ " attribute " ] = false ,
[ " source " ] = false ,
[ " target " ] = false ,
[ " spellid " ] = false ,
[ " script " ] = main_code ,
[ " tooltip " ] = tooltip_code ,
}
local total_code = DetailsCustomPanel.code3
local percent_code = DetailsCustomPanel.code4
if ( total_code ~= DetailsCustomPanel.code3_default ) then
new_custom_object.total_script = total_code
else
new_custom_object.total_script = false
end
if ( percent_code ~= DetailsCustomPanel.code4_default ) then
new_custom_object.percent_script = percent_code
else
new_custom_object.percent_script = false
end
tinsert ( _detalhes.custom , new_custom_object )
setmetatable ( new_custom_object , _detalhes.atributo_custom )
new_custom_object.__index = _detalhes.atributo_custom
_detalhes : Msg ( Loc [ " STRING_CUSTOM_CREATED " ] )
end
DetailsCustomPanel : Reset ( )
end
end
function DetailsCustomPanel : AcceptFunc ( )
_detalhes.MicroButtonAlert : Hide ( )
if ( DetailsCustomPanel.CodeEditing ) then
--close the edit box saving the text
if ( DetailsCustomPanel.CodeEditing == 1 ) then
DetailsCustomPanel.code1 = customWindow.codeeditor : GetText ( )
elseif ( DetailsCustomPanel.CodeEditing == 2 ) then
DetailsCustomPanel.code2 = customWindow.codeeditor : GetText ( )
elseif ( DetailsCustomPanel.CodeEditing == 3 ) then
DetailsCustomPanel.code3 = customWindow.codeeditor : GetText ( )
elseif ( DetailsCustomPanel.CodeEditing == 4 ) then
DetailsCustomPanel.code4 = customWindow.codeeditor : GetText ( )
end
DetailsCustomPanel.CodeEditing = false
if ( DetailsCustomPanel.IsImporting ) then
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_IMPORT_BUTTON " ] )
elseif ( DetailsCustomPanel.IsEditing ) then
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_SAVE " ] )
else
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_CREATE " ] )
end
customWindow.codeeditor : Hide ( )
elseif ( DetailsCustomPanel.IsEditing ) then
local succesful_edit = DetailsCustomPanel : CreateNewCustom ( )
if ( succesful_edit ) then
DetailsCustomPanel.IsEditing = false
DetailsCustomPanel.IsImporting = false
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_CREATE " ] )
DetailsCustomPanel : Reset ( )
end
else
DetailsCustomPanel : CreateNewCustom ( )
end
end
function DetailsCustomPanel : CancelFunc ( )
DetailsCustomPanel : ClearFocus ( )
_detalhes.MicroButtonAlert : Hide ( )
if ( DetailsCustomPanel.CodeEditing ) then
--close the edit box without save
customWindow.codeeditor : Hide ( )
DetailsCustomPanel.CodeEditing = false
if ( DetailsCustomPanel.IsImporting ) then
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_IMPORT_BUTTON " ] )
elseif ( DetailsCustomPanel.IsEditing ) then
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_SAVE " ] )
else
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_CREATE " ] )
end
elseif ( DetailsCustomPanel.IsEditing ) then
DetailsCustomPanel.IsEditing = false
DetailsCustomPanel.IsImporting = false
DetailsCustomPanel : SetAcceptButtonText ( Loc [ " STRING_CUSTOM_CREATE " ] )
DetailsCustomPanel : Reset ( )
else
_detalhes : CloseCustomDisplayWindow ( )
end
end
function DetailsCustomPanel : SetAcceptButtonText ( text )
customWindow.box0 . acceptbutton : SetText ( text )
end
function select_attribute ( self )
if ( not self.attribute_table ) then
return
end
DetailsCustomPanel : ClearFocus ( )
customWindow.selected_left : SetPoint ( " topleft " , self , " topleft " )
customWindow.selected_right : SetPoint ( " topright " , self , " topright " )
DetailsCustomPanel.current_attribute = self.attribute_table . attribute
if ( not self.attribute_table . attribute ) then
--is scripted
DetailsCustomPanel.BoxType = 2
customWindow.box1 : Hide ( )
customWindow.box2 : Show ( )
else
--no scripted
--check if is editing the code
if ( DetailsCustomPanel.CodeEditing ) then
DetailsCustomPanel.AcceptFunc ( )
end
DetailsCustomPanel.BoxType = 1
customWindow.box1 : Show ( )
customWindow.box2 : Hide ( )
customWindow.codeeditor : Hide ( )
end
end
function DetailsCustomPanel . StartEditCode ( _ , _ , code )
if ( code == 1 ) then --edit main code
customWindow.codeeditor : SetText ( DetailsCustomPanel.code1 )
elseif ( code == 2 ) then --edit tooltip code
customWindow.codeeditor : SetText ( DetailsCustomPanel.code2 )
elseif ( code == 3 ) then --edit total code
customWindow.codeeditor : SetText ( DetailsCustomPanel.code3 )
elseif ( code == 4 ) then --edit percent code
customWindow.codeeditor : SetText ( DetailsCustomPanel.code4 )
end
customWindow.codeeditor : Show ( )
DetailsCustomPanel.CodeEditing = code
DetailsCustomPanel : SetAcceptButtonText ( " Save Code " ) --Loc ["STRING_CUSTOM_DONE"]
end
--left menu
customWindow.menu = { }
local menu_start = - 50
local menu_up_frame = CreateFrame ( " frame " , nil , customWindow )
menu_up_frame : SetFrameLevel ( customWindow : GetFrameLevel ( ) + 2 )
local onenter = function ( self )
--self.icontexture:SetVertexColor(1, 1, 1, 1)
end
local onleave = function ( self )
--self.icontexture:SetVertexColor(.9, .9, .9, 1)
end
function customWindow : CreateMenuButton ( label , icon , clickfunc , param1 , param2 , tooltip , name , coords )
local index = # customWindow.menu + 1
local button = gump : NewButton ( self , nil , " $parent " .. name , nil , CONST_MENU_WIDTH , CONST_MENU_HEIGHT , clickfunc , param1 , param2 , nil , label )
button : SetPoint ( " topleft " , self , " topleft " , CONST_MENU_X_POSITION , CONST_MENU_Y_POSITION + ( ( index - 1 ) *- 23 ) )
--button:SetTemplate(CONST_BUTTON_TEMPLATE)
button : SetTemplate ( gump : GetTemplate ( " button " , " DETAILS_PLUGIN_BUTTON_TEMPLATE " ) )
button : SetWidth ( 160 )
button : SetIcon ( icon , CONST_MENU_HEIGHT - 4 , CONST_MENU_HEIGHT - 4 , " overlay " , { .1 , .9 , .1 , .9 } , nil , 4 )
button : SetHook ( " OnEnter " , onenter )
button : SetHook ( " OnLeave " , onleave )
button.widget . icontexture = texture
button.tooltip = tooltip
customWindow.menu [ index ] = { circle = circle , icon = texture , button = button }
end
local build_menu = function ( self , button , func , param2 )
GameCooltip : Reset ( )
for index , custom_object in ipairs ( _detalhes.custom ) do
GameCooltip : AddLine ( custom_object : GetName ( ) )
GameCooltip : AddIcon ( custom_object : GetIcon ( ) )
GameCooltip : AddMenu ( 1 , func , custom_object , index , true )
end
GameCooltip : SetOption ( " ButtonsYMod " , - 2 )
GameCooltip : SetOption ( " YSpacingMod " , 0 )
GameCooltip : SetOption ( " TextHeightMod " , 0 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
GameCooltip : SetWallpaper ( 1 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
GameCooltip : SetBackdrop ( 1 , _detalhes.tooltip_backdrop , nil , _detalhes.tooltip_border_color )
GameCooltip : SetBackdrop ( 2 , _detalhes.tooltip_backdrop , nil , _detalhes.tooltip_border_color )
GameCooltip : SetType ( " menu " )
GameCooltip : SetHost ( self , " left " , " right " , - 7 , 0 )
GameCooltip : Show ( )
end
--edit button
local start_edit = function ( _ , _ , custom_object , index )
GameCooltip : Hide ( )
DetailsCustomPanel : StartEdit ( custom_object )
end
customWindow : CreateMenuButton ( Loc [ " STRING_CUSTOM_EDIT " ] , " Interface \\ ICONS \\ INV_Inscription_RunescrollOfFortitude_Red " , build_menu , start_edit , nil , nil , " Edit " , { 0.07 , 0.93 , 0.07 , 0.93 } )
--remove button
local remove_display = function ( _ , _ , custom_object , index )
GameCooltip : Hide ( )
DetailsCustomPanel : RemoveDisplay ( custom_object , index )
end
customWindow : CreateMenuButton ( Loc [ " STRING_CUSTOM_REMOVE " ] , " Interface \\ ICONS \\ Spell_BrokenHeart " , build_menu , remove_display , nil , nil , " Remove " , { 1 , 0 , 0 , 1 } )
--export button
local export_display = function ( _ , _ , custom_object , index )
GameCooltip : Hide ( )
local export_object = { }
for key , value in pairs ( custom_object ) do
if ( object_keys [ key ] ) then
if ( type ( value ) == " table " ) then
export_object [ key ] = Details.CopyTable ( value )
else
export_object [ key ] = value
end
end
end
local encoded = Details : CompressData ( export_object , " print " )
if ( not customWindow.ExportBox ) then
local editbox = _detalhes.gump : NewTextEntry ( customWindow , nil , " $parentExportBox " , " ExportBox " , CONST_EDITBOX_WIDTH , 20 )
editbox : SetPoint ( " bottomleft " , customWindow , " bottomleft " , 10 , 6 )
editbox : SetAutoFocus ( false )
editbox : SetTemplate ( CONST_TEXTENTRY_TEMPLATE )
editbox : SetHook ( " OnEditFocusLost " , function ( )
editbox : Hide ( )
end )
editbox : SetHook ( " OnChar " , function ( )
editbox : Hide ( )
end )
local flashTexture = editbox : CreateTexture ( nil , " overlay " )
flashTexture : SetColorTexture ( 1 , 1 , 1 )
flashTexture : SetAllPoints ( )
flashTexture : SetAlpha ( 0 )
local flashAnimHub = DetailsFramework : CreateAnimationHub ( flashTexture )
DetailsFramework : CreateAnimation ( flashAnimHub , " alpha " , 1 , 0.2 , 0 , 1 )
DetailsFramework : CreateAnimation ( flashAnimHub , " alpha " , 2 , 0.2 , 1 , 0 )
editbox.FlashAnimation = flashAnimHub
end
if ( customWindow.ImportBox ) then
customWindow.ImportBox : Hide ( )
customWindow.exportLabel : Hide ( )
customWindow.ImportConfirm : Hide ( )
end
customWindow.ExportBox : Show ( )
customWindow.ExportBox : SetText ( encoded )
customWindow.ExportBox : HighlightText ( )
customWindow.ExportBox : SetFocus ( )
customWindow.ExportBox . FlashAnimation : Play ( )
end
customWindow : CreateMenuButton ( Loc [ " STRING_CUSTOM_EXPORT " ] , " Interface \\ ICONS \\ INV_Misc_Gift_01 " , build_menu , export_display , nil , nil , " Export " , { 0.00 , 0.9 , 0.07 , 0.93 } ) --localize
--import buttonRaceChange
local import_display = function ( _ , _ , custom_object , index )
GameCooltip : Hide ( )
if ( not customWindow.ImportBox ) then
local export_string = gump : NewLabel ( customWindow , customWindow , " $parenImportLabel " , " exportLabel " , " Import String: " , " GameFontNormal " ) --Loc ["STRING_CUSTOM_PASTE"]
export_string : SetPoint ( " bottomleft " , DetailsCustomPanel , " bottomleft " , 10 , 8 )
local editbox = _detalhes.gump : NewTextEntry ( customWindow , nil , " $parentImportBox " , " ImportBox " , CONST_EDITBOX_WIDTH - export_string.width - CONST_EDITBOX_BUTTON_WIDTH - 4 , 20 )
editbox : SetPoint ( " left " , export_string , " right " , 2 , 0 )
editbox : SetAutoFocus ( false )
editbox : SetTemplate ( CONST_TEXTENTRY_TEMPLATE )
local import = function ( )
local text = editbox : GetText ( )
local deserialized_object = Details : DecompressData ( text , " print " )
if ( not deserialized_object ) then
_detalhes : Msg ( Loc [ " STRING_CUSTOM_IMPORT_ERROR " ] )
return
end
if ( DetailsCustomPanel.CodeEditing ) then
DetailsCustomPanel : CancelFunc ( )
end
setmetatable ( deserialized_object , _detalhes.atributo_custom )
deserialized_object.__index = _detalhes.atributo_custom
_detalhes.MicroButtonAlert . Text : SetText ( Loc [ " STRING_CUSTOM_IMPORT_ALERT " ] )
_detalhes.MicroButtonAlert : SetPoint ( " bottom " , customWindow.box0 . acceptbutton.widget , " top " , 0 , 20 )
_detalhes.MicroButtonAlert : SetHeight ( 200 )
_detalhes.MicroButtonAlert : Show ( )
DetailsCustomPanel : StartEdit ( deserialized_object , true )
customWindow.ImportBox : ClearFocus ( )
customWindow.ImportBox : Hide ( )
customWindow.exportLabel : Hide ( )
customWindow.ImportConfirm : Hide ( )
end
local okey_button = gump : NewButton ( customWindow , nil , " $parentImportConfirm " , " ImportConfirm " , CONST_EDITBOX_BUTTON_WIDTH , CONST_EDITBOX_BUTTON_HEIGHT , import , nil , nil , nil , Loc [ " STRING_CUSTOM_IMPORT_BUTTON " ] )
okey_button : SetTemplate ( CONST_BUTTON_TEMPLATE )
okey_button : SetPoint ( " left " , editbox , " right " , 2 , 0 )
end
if ( customWindow.ExportBox ) then
customWindow.ExportBox : Hide ( )
end
customWindow.ImportBox : SetText ( " " )
customWindow.ImportBox : Show ( )
customWindow.exportLabel : Show ( )
customWindow.ImportConfirm : Show ( )
customWindow.ImportBox : SetFocus ( )
end
customWindow : CreateMenuButton ( Loc [ " STRING_CUSTOM_IMPORT " ] , " Interface \\ ICONS \\ INV_MISC_NOTE_02 " , import_display , nil , nil , nil , " Import " , { 0.00 , 0.9 , 0.07 , 0.93 } ) --localize
local box_types = {
{ } , --normal
{ } , --custom script
}
local attributes = {
--{icon = [[Interface\ICONS\Spell_Fire_Fireball02]], label = Loc ["STRING_CUSTOM_ATTRIBUTE_DAMAGE"], box = 1, attribute = "damagedone", boxtype = 1},
--{icon = [[Interface\ICONS\SPELL_NATURE_HEALINGTOUCH]], label = Loc ["STRING_CUSTOM_ATTRIBUTE_HEAL"], box = 1, attribute = "healdone", boxtype = 1},
{ icon = [[Interface\ICONS\INV_Inscription_Scroll]] , label = Loc [ " STRING_CUSTOM_ATTRIBUTE_SCRIPT " ] , box = 2 , attribute = false , boxtype = 2 } ,
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
}
--create box
local attribute_box = CreateFrame ( " frame " , nil , customWindow )
attribute_box : SetPoint ( " topleft " , customWindow , " topleft " , 200 , - 60 )
attribute_box : SetSize ( 180 , 260 )
attribute_box : Hide ( )
local button_onenter = function ( self )
self : SetBackdropColor ( .3 , .3 , .3 , .3 )
self.icon : SetBlendMode ( " ADD " )
end
local button_onleave = function ( self )
self : SetBackdropColor ( 0 , 0 , 0 , .2 )
self.icon : SetBlendMode ( " BLEND " )
end
local selected_left = attribute_box : CreateTexture ( nil , " overlay " )
selected_left : SetTexture ( [[Interface\Store\Store-Main]] )
selected_left : SetSize ( 50 , 20 )
selected_left : SetVertexColor ( 1 , .8 , 0 , 1 )
selected_left : SetTexCoord ( 960 / 1024 , 1020 / 1024 , 68 / 1024 , 101 / 1024 )
customWindow.selected_left = selected_left
local selected_right = attribute_box : CreateTexture ( nil , " overlay " )
selected_right : SetTexture ( [[Interface\Store\Store-Main]] )
selected_right : SetSize ( 31 , 20 )
selected_right : SetVertexColor ( 1 , .8 , 0 , 1 )
selected_right : SetTexCoord ( 270 / 1024 , 311 / 1024 , 873 / 1024 , 906 / 1024 )
customWindow.selected_right = selected_right
local selected_center = attribute_box : CreateTexture ( nil , " overlay " )
selected_center : SetTexture ( [[Interface\Store\Store-Main]] )
selected_center : SetSize ( 49 , 20 )
selected_center : SetVertexColor ( 1 , .8 , 0 , 1 )
selected_center : SetTexCoord ( 956 / 1024 , 1004 / 1024 , 164 / 1024 , 197 / 1024 )
selected_center : SetPoint ( " left " , selected_left , " right " )
selected_center : SetPoint ( " right " , selected_right , " left " )
local p = 0.0625 --32/512
for i = 1 , 10 do
if ( attributes [ i ] ) then
local button = CreateFrame ( " button " , " DetailsCustomPanelAttributeMenu " .. i , attribute_box , " BackdropTemplate " )
button : SetPoint ( " topleft " , attribute_box , " topleft " , 2 , ( ( i - 1 ) * 23 *- 1 ) + ( - 26 ) )
button : SetPoint ( " topright " , attribute_box , " topright " , 2 , ( ( i - 1 ) * 23 *- 1 ) + ( - 26 ) )
button : SetHeight ( 20 )
button : SetBackdrop ( { bgFile = [[Interface\Tooltips\UI-Tooltip-Background]] , tile = true , tileSize = 16 } )
button : SetBackdropColor ( 0 , 0 , 0 , .2 )
button : SetScript ( " OnEnter " , button_onenter )
button : SetScript ( " OnLeave " , button_onleave )
button.attribute_table = attributes [ i ]
if ( attributes [ i ] and not attributes [ i ] . attribute ) then
customWindow.script_button_attribute = button
end
button : SetScript ( " OnClick " , select_attribute )
button.icon = button : CreateTexture ( nil , " overlay " )
button.icon : SetPoint ( " left " , button , " left " , 6 , 0 )
button.icon : SetSize ( 22 , 22 )
button.icon : SetTexture ( [[Interface\AddOns\Details\images\custom_icones]] )
button.icon : SetTexCoord ( p * ( i - 1 ) , p * ( i ) , 0 , 1 )
button.text = button : CreateFontString ( nil , " overlay " , " GameFontHighlightSmall " )
button.text : SetPoint ( " left " , button.icon , " right " , 4 , 0 )
button.text : SetText ( attributes [ i ] and attributes [ i ] . label or " " )
button.text : SetTextColor ( .9 , .9 , .9 , 1 )
end
end
--create box 0, holds the name, author, desc and icon
local box0 = CreateFrame ( " frame " , " DetailsCustomPanelBox0 " , customWindow )
customWindow.box0 = box0
box0 : SetSize ( 450 , 360 )
box0 : SetPoint ( " topleft " , customWindow , " topleft " , CONST_INFOBOX_X_POSITION , CONST_MENU_Y_POSITION - 4 )
--name
local name_label = gump : NewLabel ( box0 , box0 , " $parenNameLabel " , " name " , Loc [ " STRING_CUSTOM_NAME " ] , " GameFontHighlightLeft " ) --localize-me
name_label : SetPoint ( " topleft " , box0 , " topleft " , 10 , 0 )
local name_field = gump : NewTextEntry ( box0 , nil , " $parentNameEntry " , " nameentry " , 200 , 20 )
name_field : SetPoint ( " left " , name_label , " left " , 62 , 0 )
name_field : SetTemplate ( CONST_TEXTENTRY_TEMPLATE )
name_field.tooltip = Loc [ " STRING_CUSTOM_NAME_DESC " ]
customWindow.name_field = name_field
--author
local author_label = gump : NewLabel ( box0 , box0 , " $parenAuthorLabel " , " author " , Loc [ " STRING_CUSTOM_AUTHOR " ] , " GameFontHighlightLeft " ) --localize-me
author_label : SetPoint ( " topleft " , name_label , " bottomleft " , 0 , - 12 )
local author_field = gump : NewTextEntry ( box0 , nil , " $parentAuthorEntry " , " authorentry " , 200 , 20 )
author_field : SetPoint ( " left " , author_label , " left " , 62 , 0 )
author_field : SetTemplate ( CONST_TEXTENTRY_TEMPLATE )
author_field.tooltip = Loc [ " STRING_CUSTOM_AUTHOR_DESC " ]
author_field : SetText ( UnitName ( " player " ) .. " - " .. GetRealmName ( ) )
customWindow.author_field = author_field
--description
local desc_label = gump : NewLabel ( box0 , box0 , " $parenDescLabel " , " desc " , Loc [ " STRING_CUSTOM_DESCRIPTION " ] , " GameFontHighlightLeft " ) --localize-me
desc_label : SetPoint ( " topleft " , author_label , " bottomleft " , 0 , - 12 )
local desc_field = gump : NewTextEntry ( box0 , nil , " $parentDescEntry " , " descentry " , 200 , 20 )
desc_field : SetPoint ( " left " , desc_label , " left " , 62 , 0 )
desc_field : SetTemplate ( CONST_TEXTENTRY_TEMPLATE )
desc_field.tooltip = Loc [ " STRING_CUSTOM_DESCRIPTION_DESC " ]
customWindow.desc_field = desc_field
--icon
local icon_label = gump : NewLabel ( box0 , box0 , " $parenIconLabel " , " icon " , Loc [ " STRING_CUSTOM_ICON " ] , " GameFontHighlightLeft " ) --localize-me
icon_label : SetPoint ( " topleft " , desc_label , " bottomleft " , 0 , - 12 )
local pickicon_callback = function ( texture )
box0.icontexture : SetTexture ( texture )
end
local pickicon = function ( )
gump : IconPick ( pickicon_callback , true )
end
local icon_image = gump : NewImage ( box0 , [[Interface\ICONS\TEMP]] , 20 , 20 , nil , nil , " icontexture " , " $parentIconTexture " )
local icon_button = gump : NewButton ( box0 , nil , " $parentIconButton " , " IconButton " , 20 , 20 , pickicon )
icon_button : InstallCustomTexture ( )
icon_button : SetPoint ( " left " , icon_label , " left " , 64 , 0 )
icon_image : SetPoint ( " left " , icon_label , " left " , 64 , 0 )
customWindow.icon_image = icon_image
--cancel
local cancel_button = gump : NewButton ( box0 , nil , " $parentCancelButton " , " cancelbutton " , 130 , 20 , DetailsCustomPanel.CancelFunc , nil , nil , nil , Loc [ " STRING_CUSTOM_CANCEL " ] )
--cancel_button:SetPoint("bottomleft", attribute_box, "bottomleft", 2, 0)
cancel_button : SetPoint ( " topleft " , icon_label , " bottomleft " , 0 , - 10 )
cancel_button : SetTemplate ( CONST_REGULAR_BUTTON_TEMPLATE )
--accept
local accept_button = gump : NewButton ( box0 , nil , " $parentAcceptButton " , " acceptbutton " , 130 , 20 , DetailsCustomPanel.AcceptFunc , nil , nil , nil , Loc [ " STRING_CUSTOM_CREATE " ] )
accept_button : SetPoint ( " left " , cancel_button , " right " , 2 , 0 )
accept_button : SetTemplate ( CONST_REGULAR_BUTTON_TEMPLATE )
cancel_button : SetFrameLevel ( 500 )
accept_button : SetFrameLevel ( 500 )
--create box type 1
local box1 = CreateFrame ( " frame " , " DetailsCustomPanelBox1 " , customWindow )
customWindow.box1 = box1
box1 : SetSize ( 450 , 180 )
box1 : SetPoint ( " topleft " , icon_label.widget , " bottomleft " , - 10 , - 20 )
box1 : SetFrameLevel ( box0 : GetFrameLevel ( ) + 1 )
--source
local source_label = gump : NewLabel ( box1 , box1 , " $parenSourceLabel " , " source " , Loc [ " STRING_CUSTOM_SOURCE " ] , " GameFontHighlightLeft " ) --localize-me
source_label : SetPoint ( " topleft " , box1 , " topleft " , 10 , 0 )
local disable_source_field = function ( )
box1.sourceentry : Disable ( )
end
local enable_source_field = function ( )
box1.sourceentry : Enable ( )
box1.sourceentry : SetFocus ( true )
end
local source_icon = [[Interface\COMMON\Indicator-Yellow]]
local targeting_options = {
{ value = " [all] " , label = " All Characters " , desc = " Search for matches in all characters. " , onclick = disable_source_field , icon = source_icon } ,
{ value = " [raid] " , label = " Raid or Party Group " , desc = " Search for matches in all characters which is part of your party or raid group. " , onclick = disable_source_field , icon = source_icon } ,
{ value = " [player] " , label = " Only You " , desc = " Search for matches only in your character. " , onclick = disable_source_field , icon = source_icon } ,
{ value = false , label = " Specific Character " , desc = " Type the name of the character used to search. " , onclick = enable_source_field , icon = source_icon } ,
}
local build_source_list = function ( ) return targeting_options end
local source_dropdown = gump : NewDropDown ( box1 , nil , " $parentSourceDropdown " , " sourcedropdown " , 178 , 20 , build_source_list , 1 )
source_dropdown : SetPoint ( " left " , source_label , " left " , 62 , 0 )
source_dropdown.tooltip = Loc [ " STRING_CUSTOM_SOURCE_DESC " ]
customWindow.source_dropdown = source_dropdown
local source_field = gump : NewTextEntry ( box1 , nil , " $parentSourceEntry " , " sourceentry " , 201 , 20 )
source_field : SetPoint ( " topleft " , source_dropdown , " bottomleft " , 0 , - 2 )
source_field : Disable ( )
customWindow.source_field = source_field
local adds_boss = CreateFrame ( " frame " , nil , box1 )
adds_boss : SetPoint ( " left " , source_dropdown.widget , " right " , 2 , 0 )
adds_boss : SetSize ( 20 , 20 )
local adds_boss_image = adds_boss : CreateTexture ( nil , " overlay " )
adds_boss_image : SetPoint ( " center " , adds_boss )
adds_boss_image : SetTexture ( " Interface \\ Buttons \\ UI-MicroButton-Raid-Up " )
adds_boss_image : SetTexCoord ( 0.046875 , 0.90625 , 0.40625 , 0.953125 )
adds_boss_image : SetWidth ( 20 )
adds_boss_image : SetHeight ( 16 )
local actorsFrame = gump : NewPanel ( customWindow , _ , " DetailsCustomActorsFrame2 " , " actorsFrame " , 1 , 1 )
actorsFrame : SetPoint ( " topleft " , customWindow , " topright " , 5 , - 60 )
actorsFrame : Hide ( )
local modelFrame = CreateFrame ( " playermodel " , " DetailsCustomActorsFrame2Model " , customWindow )
modelFrame : SetSize ( 138 , 261 )
modelFrame : SetPoint ( " topright " , actorsFrame.widget , " topleft " , - 15 , - 8 )
modelFrame : Hide ( )
local modelFrameTexture = modelFrame : CreateTexture ( nil , " background " )
modelFrameTexture : SetAllPoints ( )
local modelFrameBackground = customWindow : CreateTexture ( nil , " artwork " )
modelFrameBackground : SetSize ( 138 , 261 )
modelFrameBackground : SetPoint ( " topright " , actorsFrame.widget , " topleft " , - 15 , - 8 )
modelFrameBackground : SetTexture ( [[Interface\ACHIEVEMENTFRAME\UI-GuildAchievement-Parchment-Horizontal-Desaturated]] )
modelFrameBackground : SetRotation ( 90 )
modelFrameBackground : SetVertexColor ( .5 , .5 , .5 , 0.5 )
local modelFrameBackgroundIcon = customWindow : CreateTexture ( nil , " overlay " )
modelFrameBackgroundIcon : SetPoint ( " center " , modelFrameBackground , " center " )
modelFrameBackgroundIcon : SetTexture ( [[Interface\CHARACTERFRAME\Disconnect-Icon]] )
modelFrameBackgroundIcon : SetVertexColor ( .5 , .5 , .5 , 0.7 )
modelFrameBackground : Hide ( )
modelFrameBackgroundIcon : Hide ( )
local selectedEncounterActor = function ( actorName , model )
source_field : SetText ( actorName )
source_dropdown : Select ( 4 , true )
box1.sourceentry : Enable ( )
actorsFrame : Hide ( )
GameCooltip : Hide ( )
end
local actorsFrameButtons = { }
local buttonMouseOver = function ( button )
button.MyObject . image : SetBlendMode ( " ADD " )
button.MyObject . line : SetBlendMode ( " ADD " )
button.MyObject . label : SetTextColor ( 1 , 1 , 1 , 1 )
GameTooltip : SetOwner ( button , " ANCHOR_TOPLEFT " )
GameTooltip : AddLine ( button.MyObject . actor )
GameTooltip : Show ( )
local name , description , bgImage , buttonImage , loreImage , dungeonAreaMapID , link = DetailsFramework.EncounterJournal . EJ_GetInstanceInfo ( button.MyObject . ej_id )
modelFrameTexture : SetTexture ( bgImage )
modelFrameTexture : SetTexCoord ( 3 / 512 , 370 / 512 , 5 / 512 , 429 / 512 )
modelFrame : Show ( )
modelFrame : SetDisplayInfo ( button.MyObject . model )
end
local buttonMouseOut = function ( button )
button.MyObject . image : SetBlendMode ( " BLEND " )
button.MyObject . line : SetBlendMode ( " BLEND " )
button.MyObject . label : SetTextColor ( .8 , .8 , .8 , .8 )
GameTooltip : Hide ( )
modelFrame : Hide ( )
end
local EncounterSelect = function ( _ , _ , instanceId , bossIndex , ej_id )
DetailsCustomSpellsFrame : Hide ( )
DetailsCustomActorsFrame : Hide ( )
DetailsCustomActorsFrame2 : Show ( )
GameCooltip : Hide ( )
local encounterID = _detalhes : GetEncounterIdFromBossIndex ( instanceId , bossIndex )
if ( encounterID ) then
local actors = _detalhes : GetEncounterActorsName ( encounterID )
local x = 10
local y = 10
local i = 1
for actor , actorTable in pairs ( actors ) do
local thisButton = actorsFrameButtons [ i ]
if ( not thisButton ) then
thisButton = gump : NewButton ( actorsFrame.frame , actorsFrame.frame , " DetailsCustomActorsFrame2Button " .. i , " button " .. i , 130 , 20 , selectedEncounterSpell )
thisButton : SetPoint ( " topleft " , " DetailsCustomActorsFrame2 " , " topleft " , x , - y )
thisButton : SetHook ( " OnEnter " , buttonMouseOver )
thisButton : SetHook ( " OnLeave " , buttonMouseOut )
local t = gump : NewImage ( thisButton , nil , 20 , 20 , nil , nil , " image " , " DetailsCustomActors2EncounterImageButton " .. i )
t : SetPoint ( " left " , thisButton )
t : SetTexture ( [[Interface\MINIMAP\TRACKING\Target]] )
t : SetDesaturated ( true )
t : SetSize ( 20 , 20 )
t : SetAlpha ( 0.7 )
local text = gump : NewLabel ( thisButton , nil , " DetailsCustomActorsFrame2Button " .. i .. " Label " , " label " , " Spell " , nil , 9.5 , { .8 , .8 , .8 , .8 } )
text : SetPoint ( " left " , t.image , " right " , 2 , 0 )
text : SetWidth ( 123 )
text : SetHeight ( 10 )
local border = gump : NewImage ( thisButton , " Interface \\ SPELLBOOK \\ Spellbook-Parts " , 40 , 38 , nil , nil , " border " , " DetailsCustomActors2EncounterBorderButton " .. i )
border : SetTexCoord ( 0.00390625 , 0.27734375 , 0.44140625 , 0.69531250 )
border : SetDrawLayer ( " background " )
border : SetPoint ( " topleft " , thisButton.button , " topleft " , - 9 , 9 )
local line = gump : NewImage ( thisButton , " Interface \\ SPELLBOOK \\ Spellbook-Parts " , 134 , 25 , nil , nil , " line " , " DetailsCustomActors2EncounterLineButton " .. i )
line : SetTexCoord ( 0.31250000 , 0.96484375 , 0.37109375 , 0.52343750 )
line : SetDrawLayer ( " background " )
line : SetPoint ( " left " , thisButton.button , " right " , - 110 , - 3 )
table.insert ( actorsFrameButtons , # actorsFrameButtons + 1 , thisButton )
end
y = y + 20
if ( y >= 260 ) then
y = 10
x = x + 150
end
thisButton.label : SetText ( actor )
thisButton : SetClickFunction ( selectedEncounterActor , actor , actorTable.model )
thisButton.actor = actor
thisButton.ej_id = ej_id
thisButton.model = actorTable.model
thisButton : Show ( )
i = i + 1
end
for maxIndex = i , # actorsFrameButtons do
actorsFrameButtons [ maxIndex ] : Hide ( )
end
i = i - 1
actorsFrame : SetSize ( math.ceil ( i / 13 ) * 160 , math.min ( i * 20 + 20 , 280 ) )
end
end
local BuildEncounterMenu = function ( )
GameCooltip : Reset ( )
GameCooltip : SetType ( " menu " )
GameCooltip : SetOwner ( adds_boss )
for instanceId , instanceTable in pairs ( _detalhes.EncounterInformation ) do
if ( _detalhes : InstanceIsRaid ( instanceId ) ) then
GameCooltip : AddLine ( instanceTable.name , _ , 1 , " white " )
GameCooltip : AddIcon ( instanceTable.icon , 1 , 1 , 64 , 32 )
for index , encounterName in ipairs ( instanceTable.boss_names ) do
GameCooltip : AddMenu ( 2 , EncounterSelect , instanceId , index , instanceTable.ej_id , encounterName , nil , true )
local L , R , T , B , Texture = _detalhes : GetBossIcon ( instanceId , index )
GameCooltip : AddIcon ( Texture , 2 , 1 , 20 , 20 , L , R , T , B )
end
GameCooltip : SetWallpaper ( 2 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
end
end
GameCooltip : SetOption ( " HeightAnchorMod " , - 10 )
GameCooltip : SetOption ( " ButtonsYMod " , - 2 )
GameCooltip : SetOption ( " YSpacingMod " , 0 )
GameCooltip : SetOption ( " TextHeightMod " , 0 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
GameCooltip : SetWallpaper ( 1 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
GameCooltip : ShowCooltip ( )
end
adds_boss : SetScript ( " OnEnter " , function ( )
adds_boss_image : SetBlendMode ( " ADD " )
BuildEncounterMenu ( )
end )
adds_boss : SetScript ( " OnLeave " , function ( )
adds_boss_image : SetBlendMode ( " BLEND " )
end )
--target
local target_label = gump : NewLabel ( box1 , box1 , " $parenTargetLabel " , " target " , Loc [ " STRING_CUSTOM_TARGET " ] , " GameFontHighlightLeft " )
target_label : SetPoint ( " topleft " , source_label , " bottomleft " , 0 , - 40 )
local disable_target_field = function ( )
box1.targetentry : Disable ( )
end
local enable_target_field = function ( )
box1.targetentry : Enable ( )
box1.targetentry : SetFocus ( true )
end
local target_icon = [[Interface\COMMON\Indicator-Yellow]]
local target_icon2 = [[Interface\COMMON\Indicator-Gray]]
local targeting_options = {
{ value = " [all] " , label = " All Characters " , desc = " Search for matches in all characters. " , onclick = disable_target_field , icon = target_icon } ,
{ value = " [raid] " , label = " Raid or Party Group " , desc = " Search for matches in all characters which is part of your party or raid group. " , onclick = disable_target_field , icon = target_icon } ,
{ value = " [player] " , label = " Only You " , desc = " Search for matches only in your character. " , onclick = disable_target_field , icon = target_icon } ,
{ value = false , label = " Specific Character " , desc = " Type the name of the character used to search. " , onclick = enable_target_field , icon = target_icon } ,
{ value = " [none] " , label = " No Target " , desc = " Do not search for targets. " , onclick = disable_target_field , icon = target_icon2 } ,
}
local build_target_list = function ( ) return targeting_options end
local target_dropdown = gump : NewDropDown ( box1 , nil , " $parentTargetDropdown " , " targetdropdown " , 178 , 20 , build_target_list , 1 )
target_dropdown : SetPoint ( " left " , target_label , " left " , 62 , 0 )
target_dropdown.tooltip = Loc [ " STRING_CUSTOM_TARGET_DESC " ]
customWindow.target_dropdown = target_dropdown
local target_field = gump : NewTextEntry ( box1 , nil , " $parentTargetEntry " , " targetentry " , 201 , 20 )
target_field : SetPoint ( " topleft " , target_dropdown , " bottomleft " , 0 , - 2 )
target_field : Disable ( )
customWindow.target_field = target_field
--
local adds_boss = CreateFrame ( " frame " , nil , box1 )
adds_boss : SetPoint ( " left " , target_dropdown.widget , " right " , 2 , 0 )
adds_boss : SetSize ( 20 , 20 )
local adds_boss_image = adds_boss : CreateTexture ( nil , " overlay " )
adds_boss_image : SetPoint ( " center " , adds_boss )
adds_boss_image : SetTexture ( " Interface \\ Buttons \\ UI-MicroButton-Raid-Up " )
adds_boss_image : SetTexCoord ( 0.046875 , 0.90625 , 0.40625 , 0.953125 )
adds_boss_image : SetWidth ( 20 )
adds_boss_image : SetHeight ( 16 )
local actorsFrame = gump : NewPanel ( customWindow , _ , " DetailsCustomActorsFrame " , " actorsFrame " , 1 , 1 )
actorsFrame : SetPoint ( " topleft " , customWindow , " topright " , 5 , - 60 )
actorsFrame : Hide ( )
local modelFrame = CreateFrame ( " playermodel " , " DetailsCustomActorsFrameModel " , customWindow )
modelFrame : SetSize ( 138 , 261 )
modelFrame : SetPoint ( " topright " , actorsFrame.widget , " topleft " , - 15 , - 8 )
modelFrame : Hide ( )
local modelFrameTexture = modelFrame : CreateTexture ( nil , " background " )
modelFrameTexture : SetAllPoints ( )
local selectedEncounterActor = function ( actorName )
target_field : SetText ( actorName )
target_dropdown : Select ( 4 , true )
box1.targetentry : Enable ( )
actorsFrame : Hide ( )
GameCooltip : Hide ( )
end
local actorsFrameButtons = { }
local buttonMouseOver = function ( button )
button.MyObject . image : SetBlendMode ( " ADD " )
button.MyObject . line : SetBlendMode ( " ADD " )
button.MyObject . label : SetTextColor ( 1 , 1 , 1 , 1 )
GameTooltip : SetOwner ( button , " ANCHOR_TOPLEFT " )
GameTooltip : AddLine ( button.MyObject . actor )
GameTooltip : Show ( )
local name , description , bgImage , buttonImage , loreImage , dungeonAreaMapID , link = DetailsFramework.EncounterJournal . EJ_GetInstanceInfo ( button.MyObject . ej_id )
modelFrameTexture : SetTexture ( bgImage )
modelFrameTexture : SetTexCoord ( 3 / 512 , 370 / 512 , 5 / 512 , 429 / 512 )
modelFrame : Show ( )
modelFrame : SetDisplayInfo ( button.MyObject . model )
end
local buttonMouseOut = function ( button )
button.MyObject . image : SetBlendMode ( " BLEND " )
button.MyObject . line : SetBlendMode ( " BLEND " )
button.MyObject . label : SetTextColor ( .8 , .8 , .8 , .8 )
GameTooltip : Hide ( )
modelFrame : Hide ( )
end
local EncounterSelect = function ( _ , _ , instanceId , bossIndex , ej_id )
DetailsCustomSpellsFrame : Hide ( )
DetailsCustomActorsFrame : Show ( )
DetailsCustomActorsFrame2 : Hide ( )
GameCooltip : Hide ( )
local encounterID = _detalhes : GetEncounterIdFromBossIndex ( instanceId , bossIndex )
if ( encounterID ) then
local actors = _detalhes : GetEncounterActorsName ( encounterID )
local x = 10
local y = 10
local i = 1
for actor , actorTable in pairs ( actors ) do
local thisButton = actorsFrameButtons [ i ]
if ( not thisButton ) then
thisButton = gump : NewButton ( actorsFrame.frame , actorsFrame.frame , " DetailsCustomActorsFrameButton " .. i , " button " .. i , 130 , 20 , selectedEncounterSpell )
thisButton : SetPoint ( " topleft " , " DetailsCustomActorsFrame " , " topleft " , x , - y )
thisButton : SetHook ( " OnEnter " , buttonMouseOver )
thisButton : SetHook ( " OnLeave " , buttonMouseOut )
local t = gump : NewImage ( thisButton , nil , 20 , 20 , nil , nil , " image " , " DetailsCustomActorsEncounterImageButton " .. i )
t : SetPoint ( " left " , thisButton )
t : SetTexture ( [[Interface\MINIMAP\TRACKING\Target]] )
t : SetDesaturated ( true )
t : SetSize ( 20 , 20 )
t : SetAlpha ( 0.7 )
local text = gump : NewLabel ( thisButton , nil , " DetailsCustomActorsFrameButton " .. i .. " Label " , " label " , " Spell " , nil , 9.5 , { .8 , .8 , .8 , .8 } )
text : SetPoint ( " left " , t.image , " right " , 2 , 0 )
text : SetWidth ( 123 )
text : SetHeight ( 10 )
local border = gump : NewImage ( thisButton , " Interface \\ SPELLBOOK \\ Spellbook-Parts " , 40 , 38 , nil , nil , " border " , " DetailsCustomActorsEncounterBorderButton " .. i )
border : SetTexCoord ( 0.00390625 , 0.27734375 , 0.44140625 , 0.69531250 )
border : SetDrawLayer ( " background " )
border : SetPoint ( " topleft " , thisButton.button , " topleft " , - 9 , 9 )
local line = gump : NewImage ( thisButton , " Interface \\ SPELLBOOK \\ Spellbook-Parts " , 84 , 25 , nil , nil , " line " , " DetailsCustomActorsEncounterLineButton " .. i )
line : SetTexCoord ( 0.31250000 , 0.96484375 , 0.37109375 , 0.52343750 )
line : SetDrawLayer ( " background " )
line : SetPoint ( " left " , thisButton.button , " right " , - 110 , - 3 )
table.insert ( actorsFrameButtons , # actorsFrameButtons + 1 , thisButton )
end
y = y + 20
if ( y >= 260 ) then
y = 10
x = x + 150
end
thisButton.label : SetText ( actor )
thisButton : SetClickFunction ( selectedEncounterActor , actor )
thisButton.actor = actor
thisButton.ej_id = ej_id
thisButton.model = actorTable.model
thisButton : Show ( )
i = i + 1
end
for maxIndex = i , # actorsFrameButtons do
actorsFrameButtons [ maxIndex ] : Hide ( )
end
i = i - 1
actorsFrame : SetSize ( math.ceil ( i / 13 ) * 160 , math.min ( i * 20 + 20 , 280 ) )
end
end
local BuildEncounterMenu = function ( )
GameCooltip : Reset ( )
GameCooltip : SetType ( " menu " )
GameCooltip : SetOwner ( adds_boss )
for instanceId , instanceTable in pairs ( _detalhes.EncounterInformation ) do
if ( _detalhes : InstanceIsRaid ( instanceId ) ) then
GameCooltip : AddLine ( instanceTable.name , _ , 1 , " white " )
GameCooltip : AddIcon ( instanceTable.icon , 1 , 1 , 64 , 32 )
for index , encounterName in ipairs ( instanceTable.boss_names ) do
GameCooltip : AddMenu ( 2 , EncounterSelect , instanceId , index , instanceTable.ej_id , encounterName , nil , true )
local L , R , T , B , Texture = _detalhes : GetBossIcon ( instanceId , index )
GameCooltip : AddIcon ( Texture , 2 , 1 , 20 , 20 , L , R , T , B )
end
GameCooltip : SetWallpaper ( 2 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
end
end
GameCooltip : SetOption ( " HeightAnchorMod " , - 10 )
GameCooltip : SetOption ( " ButtonsYMod " , - 2 )
GameCooltip : SetOption ( " YSpacingMod " , 0 )
GameCooltip : SetOption ( " TextHeightMod " , 0 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
GameCooltip : SetWallpaper ( 1 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
GameCooltip : ShowCooltip ( )
end
adds_boss : SetScript ( " OnEnter " , function ( )
adds_boss_image : SetBlendMode ( " ADD " )
BuildEncounterMenu ( )
end )
adds_boss : SetScript ( " OnLeave " , function ( )
adds_boss_image : SetBlendMode ( " BLEND " )
end )
--spellid
local spellid_label = gump : NewLabel ( box1 , box1 , " $parenSpellidLabel " , " spellid " , Loc [ " STRING_CUSTOM_SPELLID " ] , " GameFontHighlightLeft " ) --localize-me
spellid_label : SetPoint ( " topleft " , target_label , " bottomleft " , 0 , - 40 )
local spellid_entry = gump : NewSpellEntry ( box1 , function ( ) end , 178 , 20 , nil , nil , " spellidentry " , " $parentSpellIdEntry " )
spellid_entry : SetPoint ( " left " , spellid_label , " left " , 62 , 0 )
spellid_entry.tooltip = Loc [ " STRING_CUSTOM_SPELLID_DESC " ]
customWindow.spellid_entry = spellid_entry
local spell_id_boss = CreateFrame ( " frame " , nil , box1 )
spell_id_boss : SetPoint ( " left " , spellid_entry.widget , " right " , 2 , 0 )
spell_id_boss : SetSize ( 20 , 20 )
local spell_id_boss_image = spell_id_boss : CreateTexture ( nil , " overlay " )
spell_id_boss_image : SetPoint ( " center " , spell_id_boss )
spell_id_boss_image : SetTexture ( " Interface \\ Buttons \\ UI-MicroButton-Raid-Up " )
spell_id_boss_image : SetTexCoord ( 0.046875 , 0.90625 , 0.40625 , 0.953125 )
spell_id_boss_image : SetWidth ( 20 )
spell_id_boss_image : SetHeight ( 16 )
local spellsFrame = gump : NewPanel ( customWindow , _ , " DetailsCustomSpellsFrame " , " spellsFrame " , 1 , 1 )
spellsFrame : SetPoint ( " topleft " , customWindow , " topright " , 5 , 0 )
spellsFrame : Hide ( )
local selectedEncounterSpell = function ( spellId )
local _ , _ , icon = _GetSpellInfo ( spellId )
spellid_entry : SetText ( spellId )
box0.icontexture : SetTexture ( icon )
spellsFrame : Hide ( )
GameCooltip : Hide ( )
end
local spellsFrameButtons = { }
local buttonMouseOver = function ( button )
button.MyObject . image : SetBlendMode ( " ADD " )
button.MyObject . line : SetBlendMode ( " ADD " )
button.MyObject . label : SetTextColor ( 1 , 1 , 1 , 1 )
GameTooltip : SetOwner ( button , " ANCHOR_TOPLEFT " )
_detalhes : GameTooltipSetSpellByID ( button.MyObject . spellid )
GameTooltip : Show ( )
end
local buttonMouseOut = function ( button )
button.MyObject . image : SetBlendMode ( " BLEND " )
button.MyObject . line : SetBlendMode ( " BLEND " )
button.MyObject . label : SetTextColor ( .8 , .8 , .8 , .8 )
GameTooltip : Hide ( )
end
local EncounterSelect = function ( _ , _ , instanceId , bossIndex )
DetailsCustomSpellsFrame : Show ( )
DetailsCustomActorsFrame : Hide ( )
DetailsCustomActorsFrame2 : Hide ( )
GameCooltip : Hide ( )
local spells = _detalhes : GetEncounterSpells ( instanceId , bossIndex )
local x = 10
local y = 10
local i = 1
for spell , _ in pairs ( spells ) do
local thisButton = spellsFrameButtons [ i ]
if ( not thisButton ) then
thisButton = gump : NewButton ( spellsFrame.frame , spellsFrame.frame , " DetailsCustomSpellsFrameButton " .. i , " button " .. i , 80 , 20 , selectedEncounterSpell )
thisButton : SetPoint ( " topleft " , " DetailsCustomSpellsFrame " , " topleft " , x , - y )
thisButton : SetHook ( " OnEnter " , buttonMouseOver )
thisButton : SetHook ( " OnLeave " , buttonMouseOut )
local t = gump : NewImage ( thisButton , nil , 20 , 20 , nil , nil , " image " , " DetailsCustomEncounterImageButton " .. i )
t : SetPoint ( " left " , thisButton )
local text = gump : NewLabel ( thisButton , nil , " DetailsCustomSpellsFrameButton " .. i .. " Label " , " label " , " Spell " , nil , 9.5 , { .8 , .8 , .8 , .8 } )
text : SetPoint ( " left " , t.image , " right " , 2 , 0 )
text : SetWidth ( 73 )
text : SetHeight ( 10 )
local border = gump : NewImage ( thisButton , " Interface \\ SPELLBOOK \\ Spellbook-Parts " , 40 , 38 , nil , nil , " border " , " DetailsCustomEncounterBorderButton " .. i )
border : SetTexCoord ( 0.00390625 , 0.27734375 , 0.44140625 , 0.69531250 )
border : SetDrawLayer ( " background " )
border : SetPoint ( " topleft " , thisButton.button , " topleft " , - 9 , 9 )
local line = gump : NewImage ( thisButton , " Interface \\ SPELLBOOK \\ Spellbook-Parts " , 84 , 25 , nil , nil , " line " , " DetailsCustomEncounterLineButton " .. i )
line : SetTexCoord ( 0.31250000 , 0.96484375 , 0.37109375 , 0.52343750 )
line : SetDrawLayer ( " background " )
line : SetPoint ( " left " , thisButton.button , " right " , - 60 , - 3 )
table.insert ( spellsFrameButtons , # spellsFrameButtons + 1 , thisButton )
end
y = y + 20
if ( y >= 400 ) then
y = 10
x = x + 100
end
local nome_magia , _ , icone_magia = _GetSpellInfo ( spell )
thisButton.image : SetTexture ( icone_magia )
thisButton.label : SetText ( nome_magia )
thisButton : SetClickFunction ( selectedEncounterSpell , spell )
thisButton.spellid = spell
thisButton : Show ( )
i = i + 1
end
for maxIndex = i , # spellsFrameButtons do
spellsFrameButtons [ maxIndex ] : Hide ( )
end
i = i - 1
spellsFrame : SetSize ( math.ceil ( i / 20 ) * 110 , math.min ( i * 20 + 20 , 420 ) )
end
local BuildEncounterMenu = function ( )
GameCooltip : Reset ( )
GameCooltip : SetType ( " menu " )
GameCooltip : SetOwner ( spell_id_boss )
for instanceId , instanceTable in pairs ( _detalhes.EncounterInformation ) do
if ( _detalhes : InstanceisRaid ( instanceId ) ) then
GameCooltip : AddLine ( instanceTable.name , _ , 1 , " white " )
GameCooltip : AddIcon ( instanceTable.icon , 1 , 1 , 64 , 32 )
for index , encounterName in ipairs ( instanceTable.boss_names ) do
GameCooltip : AddMenu ( 2 , EncounterSelect , instanceId , index , nil , encounterName , nil , true )
local L , R , T , B , Texture = _detalhes : GetBossIcon ( instanceId , index )
GameCooltip : AddIcon ( Texture , 2 , 1 , 20 , 20 , L , R , T , B )
end
GameCooltip : SetWallpaper ( 2 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
end
end
GameCooltip : SetOption ( " ButtonsYMod " , - 2 )
GameCooltip : SetOption ( " YSpacingMod " , 0 )
GameCooltip : SetOption ( " TextHeightMod " , 0 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
GameCooltip : SetWallpaper ( 1 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , { .6 , 0.1 , 0 , 0.64453125 } , { 1 , 1 , 1 , 0.1 } , true )
GameCooltip : SetOption ( " HeightAnchorMod " , - 10 )
GameCooltip : ShowCooltip ( )
end
spell_id_boss : SetScript ( " OnEnter " , function ( )
spell_id_boss_image : SetBlendMode ( " ADD " )
BuildEncounterMenu ( )
end )
spell_id_boss : SetScript ( " OnLeave " , function ( )
spell_id_boss_image : SetBlendMode ( " BLEND " )
end )
--select target
--select spell
--create box type 2
local box2 = CreateFrame ( " frame " , " DetailsCustomPanelBox2 " , customWindow )
customWindow.box2 = box2
box2 : SetSize ( 450 , 180 )
box2 : SetPoint ( " topleft " , icon_label.widget , " bottomleft " , - 10 , - 20 )
box2 : SetFrameLevel ( box0 : GetFrameLevel ( ) + 1 )
--edit main code
local maincode_button = gump : NewButton ( box2 , nil , " $parentMainCodeButton " , " maiccodebutton " , 160 , 20 , DetailsCustomPanel.StartEditCode , 1 , nil , nil , Loc [ " STRING_CUSTOM_EDIT_SEARCH_CODE " ] )
maincode_button : SetPoint ( " topleft " , customWindow , " topleft " , CONST_EDITBUTTONS_X_POSITION , CONST_MENU_Y_POSITION )
maincode_button.tooltip = Loc [ " STRING_CUSTOM_EDITCODE_DESC " ]
maincode_button : SetTemplate ( CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE )
--edit tooltip code
local tooltipcode_button = gump : NewButton ( box2 , nil , " $parentTooltipCodeButton " , " tooltipcodebutton " , 160 , 20 , DetailsCustomPanel.StartEditCode , 2 , nil , nil , Loc [ " STRING_CUSTOM_EDIT_TOOLTIP_CODE " ] )
tooltipcode_button : SetPoint ( " topleft " , maincode_button , " bottomleft " , 0 , - 8 )
tooltipcode_button.tooltip = Loc [ " STRING_CUSTOM_EDITTOOLTIP_DESC " ]
tooltipcode_button : SetTemplate ( CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE )
--edit total code
local totalcode_button = gump : NewButton ( box2 , nil , " $parentTotalCodeButton " , " totalcodebutton " , 160 , 20 , DetailsCustomPanel.StartEditCode , 3 , nil , nil , " Edit Total Code " )
totalcode_button : SetPoint ( " topleft " , tooltipcode_button , " bottomleft " , 0 , - 8 )
totalcode_button.tooltip = " This code is responsible for edit the total number shown in the player bar. \n \n This is not necessary if you want show exactly the value gotten in the search code. "
totalcode_button : SetTemplate ( CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE )
--edit percent code
local percentcode_button = gump : NewButton ( box2 , nil , " $parentPercentCodeButton " , " percentcodebutton " , 160 , 20 , DetailsCustomPanel.StartEditCode , 4 , nil , nil , " Edit Percent Code " )
percentcode_button : SetPoint ( " topleft " , totalcode_button , " bottomleft " , 0 , - 8 )
percentcode_button.tooltip = " Edit the code responsible for the percent number in the player bar. \n \n This is not required if you want to use simple percentage (comparing with total). "
percentcode_button : SetTemplate ( CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE )
box2 : Hide ( )
--create the code editbox
local codeEditor = gump : NewSpecialLuaEditorEntry ( customWindow , CONST_EDITBOX_WIDTH , CONST_EDITBOX_HEIGHT , " codeeditor " , " $parentCodeEditor " , false , true )
codeEditor : SetPoint ( " topleft " , customWindow , " topleft " , CONST_MENU_X_POSITION , CONST_EDITBOX_Y_POSITION )
codeEditor : SetFrameLevel ( customWindow : GetFrameLevel ( ) + 4 )
codeEditor : SetBackdrop ( nil )
codeEditor.scroll : SetBackdrop ( nil )
codeEditor.editbox : SetBackdrop ( nil )
DetailsFramework : ReskinSlider ( codeEditor.scroll )
if ( not codeEditor.__background ) then
codeEditor.__background = codeEditor : CreateTexture ( nil , " background " )
end
codeEditor : SetBackdrop ( { edgeFile = [[Interface\Buttons\WHITE8X8]] , edgeSize = 1 } )
codeEditor : SetBackdropBorderColor ( 0 , 0 , 0 , 1 )
codeEditor.__background : SetColorTexture ( 0.2317647 , 0.2317647 , 0.2317647 )
codeEditor.__background : SetVertexColor ( 0.27 , 0.27 , 0.27 )
codeEditor.__background : SetAlpha ( 0.8 )
codeEditor.__background : SetVertTile ( true )
codeEditor.__background : SetHorizTile ( true )
codeEditor.__background : SetAllPoints ( )
codeEditor : HookScript ( " OnUpdate " , function ( )
local script = codeEditor : GetText ( )
local func , errortext = loadstring ( script )
if ( not func ) then
local firstLine = strsplit ( " \n " , script , 2 )
errortext = errortext : gsub ( firstLine , " " )
errortext = errortext : gsub ( " %[string \" " , " " )
errortext = errortext : gsub ( " ... \" ]: " , " " )
errortext = " Line " .. errortext
DetailsCustomPanel.ErrorString . text = errortext
else
DetailsCustomPanel.ErrorString . text = " "
end
end )
--create a background area where the code editor is
local codeEditorBackground = gump : NewButton ( customWindow , nil , nil , nil , 1 , 1 , function ( ) end )
codeEditorBackground : SetAllPoints ( codeEditor )
codeEditorBackground : SetTemplate ( CONST_CODETEXTENTRY_TEMPLATE )
codeEditor : Hide ( )
codeEditor.font_size = 11
local file , size , flags = codeEditor.editbox : GetFont ( )
codeEditor.editbox : SetFont ( file , 11 , flags )
local expand_func = function ( )
if ( codeEditor.expanded ) then
codeEditor : SetSize ( CONST_EDITBOX_WIDTH , CONST_EDITBOX_HEIGHT )
codeEditor.expanded = nil
codeEditorBackground : SetTemplate ( CONST_CODETEXTENTRY_TEMPLATE )
--custom_window.box0.cancelbutton:SetPoint("bottomleft", attribute_box, "bottomright", 37, -10)
--custom_window.box0.acceptbutton:SetPoint("left", cancel_button, "right", 2, 0)
else
codeEditor : SetSize ( CONST_EDITBOX_WIDTH , CONST_EDITBOX_HEIGHT * 1.9 )
codeEditor.expanded = true
codeEditorBackground : SetTemplate ( CONST_CODETEXTENTRYEXPANDED_TEMPLATE )
--custom_window.box0.cancelbutton:SetPoint("bottomleft", attribute_box, "bottomright", -237, -10)
--custom_window.box0.acceptbutton:SetPoint
end
end
local font_change = function ( _ , _ , increase )
if ( increase ) then
local file , size , flags = codeEditor.editbox : GetFont ( )
codeEditor.font_size = codeEditor.font_size + 1
codeEditor.editbox : SetFont ( file , codeEditor.font_size , flags )
else
local file , size , flags = codeEditor.editbox : GetFont ( )
codeEditor.font_size = codeEditor.font_size - 1
codeEditor.editbox : SetFont ( file , codeEditor.font_size , flags )
end
end
local apply_code = function ( )
_detalhes : ResetCustomFunctionsCache ( )
if ( DetailsCustomPanel.CodeEditing == 1 ) then
DetailsCustomPanel.code1 = customWindow.codeeditor : GetText ( )
elseif ( DetailsCustomPanel.CodeEditing == 2 ) then
DetailsCustomPanel.code2 = customWindow.codeeditor : GetText ( )
elseif ( DetailsCustomPanel.CodeEditing == 3 ) then
DetailsCustomPanel.code3 = customWindow.codeeditor : GetText ( )
elseif ( DetailsCustomPanel.CodeEditing == 4 ) then
DetailsCustomPanel.code4 = customWindow.codeeditor : GetText ( )
end
local main_code = DetailsCustomPanel.code1
local tooltip_code = DetailsCustomPanel.code2
local total_code = DetailsCustomPanel.code3
local percent_code = DetailsCustomPanel.code4
local object = DetailsCustomPanel.IsEditing
if ( type ( object ) ~= " table " ) then
return _detalhes : Msg ( " This object need to be saved before. " )
end
object.script = main_code
object.tooltip = tooltip_code
if ( total_code ~= DetailsCustomPanel.code3_default ) then
object.total_script = total_code
else
object.total_script = false
end
if ( percent_code ~= DetailsCustomPanel.code4_default ) then
object.percent_script = percent_code
else
object.percent_script = false
end
return true
end
local supportFrame = CreateFrame ( " frame " , " $parentSupportFrame " , customWindow )
supportFrame : SetFrameLevel ( 500 )
local expand = gump : NewButton ( supportFrame , nil , " $parentExpand " , " expandbutton " , CONST_EDITBOX_BUTTON_WIDTH , CONST_EDITBOX_BUTTON_HEIGHT , expand_func , 4 , nil , nil , " Expand " )
expand : SetPoint ( " bottomleft " , codeEditor , " topleft " , 0 , 1 )
expand : SetTemplate ( CONST_CODETEXTENTRYBUTTON_TEMPLATE )
local font_size1 = gump : NewButton ( supportFrame , nil , " $parentFont1 " , " font1button " , CONST_EDITBOX_BUTTON_WIDTH , CONST_EDITBOX_BUTTON_HEIGHT , font_change , nil , nil , nil , " Aa " )
font_size1 : SetPoint ( " left " , expand , " right " , 2 , 0 )
font_size1 : SetTemplate ( CONST_CODETEXTENTRYBUTTON_TEMPLATE )
local font_size2 = gump : NewButton ( supportFrame , nil , " $parentFont2 " , " font2button " , CONST_EDITBOX_BUTTON_WIDTH , CONST_EDITBOX_BUTTON_HEIGHT , font_change , true , nil , nil , " aA " )
font_size2 : SetPoint ( " left " , font_size1 , " right " , 2 , 0 )
font_size2 : SetTemplate ( CONST_CODETEXTENTRYBUTTON_TEMPLATE )
local apply1 = gump : NewButton ( supportFrame , nil , " $parentApply " , " applybutton " , CONST_EDITBOX_BUTTON_WIDTH , CONST_EDITBOX_BUTTON_HEIGHT , apply_code , nil , nil , nil , " Apply " )
apply1 : SetPoint ( " left " , font_size2 , " right " , 2 , 0 )
apply1 : SetTemplate ( CONST_CODETEXTENTRYBUTTON_TEMPLATE )
local open_API = gump : NewButton ( supportFrame , nil , " $parentOpenAPI " , " openAPIbutton " , CONST_EDITBOX_BUTTON_WIDTH , CONST_EDITBOX_BUTTON_HEIGHT , function ( ) end , nil , nil , nil , " API " ) --_detalhes.OpenAPI - opening the api was cancelling the editing process
open_API : SetPoint ( " left " , apply1 , " right " , 2 , 0 )
open_API : SetTemplate ( CONST_CODETEXTENTRYBUTTON_TEMPLATE )
local errorString = gump : CreateLabel ( supportFrame )
errorString : SetPoint ( " left " , open_API , " right " , 10 , 0 )
errorString.color = " red "
DetailsCustomPanel.ErrorString = errorString
codeEditor : SetScript ( " OnShow " , function ( )
expand : Show ( )
font_size1 : Show ( )
font_size2 : Show ( )
apply1 : Show ( )
open_API : Show ( )
end )
codeEditor : SetScript ( " OnHide " , function ( )
expand : Hide ( )
font_size1 : Hide ( )
font_size2 : Hide ( )
apply1 : Hide ( )
open_API : Hide ( )
end )
expand : Hide ( )
font_size1 : Hide ( )
font_size2 : Hide ( )
apply1 : Hide ( )
open_API : Hide ( )
--select damage
DetailsCustomPanelAttributeMenu1 : Click ( )
else
DetailsPluginContainerWindow.OpenPlugin ( DetailsCustomPanel )
--_G.DetailsCustomPanel:Show()
end
end