GRuSHa Posted January 7, 2015 Share Posted January 7, 2015 Доброго времени суток вам. Помогите, захотел подключить 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, пожалуйста. Quote Link to comment Share on other sites More sharing options...
hal.dll Posted January 8, 2015 Share Posted January 8, 2015 или дайте какой нибудь простой аддон где есть DnD, пожалуйста. MyrrhMyrrh и написать нужно, как я понимаю DnD.Init( wtPanel, wtPanel, true ) Правильно Для вашего примера прописывать этот вызов надо в Init и if DnD.IsDragging() then return end чтобы перетаскивать панельку с кнопками Это надо написать в самом начале обработчика реакции. В вашем примере - в OnReactionExecute Quote Link to comment Share on other sites More sharing options...
GRuSHa Posted January 8, 2015 Author Share Posted January 8, 2015 я сделал так 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() ) doDnD.Init( wtChild, nil, true, nil, 4, KBF_CTRL )end кнопки начали перемещаться по панели, а сама панель нет, подскажите в чём может быть ошибка Quote Link to comment Share on other sites More sharing options...
hal.dll Posted January 8, 2015 Share Posted January 8, 2015 Все виджеты, за которые осуществляется перемещение, должны создаваться с полями <TransparentInput>false</TransparentInput> <PickChildrenOnly>false</PickChildrenOnly> Quote Link to comment Share on other sites More sharing options...
GRuSHa Posted January 8, 2015 Author Share Posted January 8, 2015 не помогло=( я уже посмотрел как в UnknownAstral кнопки сделаны, скопировал в точности, не помогает, то ли я дурак то ли лыжи по асфальту не едут Quote Link to comment Share on other sites More sharing options...
hal.dll Posted January 8, 2015 Share Posted January 8, 2015 В 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 1 Quote Link to comment Share on other sites More sharing options...
hal.dll Posted January 8, 2015 Share Posted January 8, 2015 Вариант с DnD:Init( wtMainPanel, nil, true ) тоже работает, и через точку, и через двоеточие. Quote Link to comment Share on other sites More sharing options...
Recommended Posts