Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Как правильно подключить DnD


GRuSHa

Рекомендуемые сообщения

Доброго времени суток вам.

Помогите, захотел подключить DnD в аддоне и столкнулся с проблемой куда писать код ,представленный в документации к библиотеке.

У меня на паленькой панельке расположены 2 кнопки и написать нужно, как я понимаю DnD.Init( wtPanel, wtPanel, true ) и if DnD.IsDragging() then return end чтобы перетаскивать панельку с кнопками. не могли бы вы на стандартном аддоне SampleReactionHandler, поставить в нужные места код чтобы я понял=))

--------------------------------------------------------------------------------
-- GLOBALS
--------------------------------------------------------------------------------

Global( "wtMainPanel", nil )
Global( "delta", 10 )
Global( "COUNTER_LIMIT", 5 )
Global( "counter", COUNTER_LIMIT )

--------------------------------------------------------------------------------
-- REACTION HANDLERS
--------------------------------------------------------------------------------

-- "execute"
function OnReactionExecute( params )
	LogInfo( "counter: ", counter )
	
	counter = counter - 1
	if counter < 0 then
		counter = COUNTER_LIMIT
		delta = -delta
	end
	
	local place = wtMainPanel:GetPlacementPlain()
	place.posX = place.posX + delta
	wtMainPanel:SetPlacementPlain( place )
end

--------------------------------------------------------------------------------
-- INITIALIZATION
--------------------------------------------------------------------------------
function Init()
	LogInfo( "Reaction handler sample" )

	common.RegisterReactionHandler( OnReactionExecute, "execute" ) 
	
	wtMainPanel = mainForm:GetChildChecked( "MainPanel", false )
end
--------------------------------------------------------------------------------
Init()
--------------------------------------------------------------------------------

или дайте какой нибудь простой аддон где есть DnD, пожалуйста. 

Ссылка на комментарий
Поделиться на другие сайты

или дайте какой нибудь простой аддон где есть DnD, пожалуйста.

 

MyrrhMyrrh

 

 

и написать нужно, как я понимаю DnD.Init( wtPanel, wtPanel, true )

 

Правильно

Для вашего примера прописывать этот вызов надо в Init

 

и if DnD.IsDragging() then return end чтобы перетаскивать панельку с кнопками

 

Это надо написать в самом начале обработчика реакции. В вашем примере - в OnReactionExecute

Ссылка на комментарий
Поделиться на другие сайты

я сделал так

 

Global( "wtMainPanel", nil )

--------------------------------------------------------------------------------
-- REACTION HANDLERS
--------------------------------------------------------------------------------

-- "execute"
function OnReactionExecute( params )

 if DnD.IsDragging() then return end
    

...

end

--------------------------------------------------------------------------------
-- INITIALIZATION
--------------------------------------------------------------------------------
function Init()

    wtMainPanel = mainForm:GetChildChecked( "MainPanel", false )
    DnD.Init( wtPanel, wtPanel, true )
    common.RegisterReactionHandler( OnReactionExecute, "execute" )
end
--------------------------------------------------------------------------------
Init()
 

 

проверил все файлы.

панель намертво застряла и не шивелится

я попробовал 

DnD.Init( wtMainPanel, nil, true )
for _,wtChild in pairs( wtMainPanel:GetNamedChildren() ) do
DnD.Init( wtChild, nil, true, nil, 4, KBF_CTRL )
end

кнопки начали перемещаться по панели, а сама панель нет, подскажите в чём может быть ошибка

Ссылка на комментарий
Поделиться на другие сайты

Все виджеты, за которые осуществляется перемещение, должны создаваться с полями

    <TransparentInput>false</TransparentInput>
    <PickChildrenOnly>false</PickChildrenOnly>
Ссылка на комментарий
Поделиться на другие сайты

не помогло=( я уже посмотрел как в UnknownAstral кнопки сделаны, скопировал в точности, не помогает, то ли я дурак то ли лыжи по асфальту не едут

Ссылка на комментарий
Поделиться на другие сайты

В UnknownAstral кнопки принадлежат главной форме, емнип.

Вот SampleReactionHandler с интегрированной LibDnD.

Различия минимальны:

Прописал LibDnD.lua в AddonDesc.(UIAddon).xdb

Прописал имена виджетам

Добавил в MainPanel.(WidgetPanel).xdb:

    <TransparentInput>false</TransparentInput>
    <PickChildrenOnly>false</PickChildrenOnly>

(хотя у меня нет уверенности, что это действительно необходимо)

 

ScriptSampleReactionHandler.lua:

--------------------------------------------------------------------------------
-- GLOBALS
--------------------------------------------------------------------------------

Global( "wtMainPanel", nil )

--------------------------------------------------------------------------------
-- REACTION HANDLERS
--------------------------------------------------------------------------------

-- "execute"
function OnReactionExecute( params )
    LogInfo( "in reaction: ", DnD.IsDragging() )
    if DnD.IsDragging() then return end
end

--------------------------------------------------------------------------------
-- INITIALIZATION
--------------------------------------------------------------------------------
function Init()
    LogInfo( "Reaction handler sample" )

    common.RegisterReactionHandler( OnReactionExecute, "execute" )
    
    wtMainPanel = mainForm:GetChildChecked( "MainPanel", false )
    DnD:Init(wtMainPanel)

    for _,wtChild in pairs( wtMainPanel:GetNamedChildren() ) do
        DnD:Init( wtChild )
    end
end
--------------------------------------------------------------------------------
Init()
--------------------------------------------------------------------------------

Всё нормально работает и двигается. Прикладываю архив аддона, проверяй.

SampleReactionHandler.zip

Ссылка на комментарий
Поделиться на другие сайты

Вариант с DnD:Init( wtMainPanel, nil, true ) тоже работает, и через точку, и через двоеточие.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования