Пользовательские дополнения

На главную


CategoryDragAndDrop

BlurpSearch: CategoryLuaApi CategoryDragAndDrop

Функции и события для работы с drag&drop. Реализовано для всех типов WidgetSafe.

Схема работы:

Регистрируются виджеты, которые будут обрабатываться механизмом drag&drop. Каждому контролу должен быть назначен уникальный идентификатор (может быть выбран автоматически), который используется во всех дальнейших операциях. Если при работе с drag&drop нужно вернуть идентификатор, не относящийся ни к одному из зарегистированных окон, то используется неопределенный идентификатор, DND_INVALID_ID (объявлен как глобальная константа). Для упрощения регистрации в базовом скрипте описаны несколько вспомогательных глобальных переменных и функций, позволяющих группировать контролы (экипировка, инвентарь и т.д., список расширяется по необходимости). При необходимости контролы можно разрегистрировать.

Система drag&drop отслеживает операции с зарегистрированными контролами и отправляет в скрипт различные уведомления: события вида EVENT_DND_... В ответ на них скрипт может подтверждать те или иные операции (например, начало или окончание drag&drop), игнорировать их, а также выполнять работу по корректной визуализации текущего состояния (например, перемещать курсор правильного вида в указанную позицию, подсвечивать слоты и т.п.). Возможно досрочное прерывание drag&drop из скрипта.

Замечание: Процесс drag&drop автоматически прерывается при переходе в невидимое состояние виджета (в том числе транзитивно), который инициировал процесс drag&drop.

Замечание: При назначении идентификаторов для работы с Drag&drop необходимо использовать следующую формулу

DNDId = id * DND_CONTAINER_STEP + DNDContainer, где
DNDId - результирующий ID
id - идентификатор сущности: ObjectId для игровых сущностей или инкрементируемый уникальный ид для виджетов (смотри Widget:GetId)
DND_CONTAINER_STEP - максимальное число типов контейнеров DND, глобальная константа.
DNDContainer - тип контейнера, на текущий момент определены
Global( "DND_EQUIPMENT", 0 )
Global( "DND_INVENTORY", 1 )
Global( "DND_ACTIONBAR", 2 )
Global( "DND_SPELLBOOK", 3 )
Global( "DND_VENDOR", 4 )
Global( "DND_DEPOSITE", 5 )
Global( "DND_WORLD", 6 )
Global( "DND_ALCHEMY", 7 )
Global( "DND_ARMOR_CRAFT", 8 )
Global( "DND_CHARACTER_CONTROL3D", 9 )
Global( "DND_MAIL", 10 )
Global( "DND_AUCTION", 11 )
Global( "DND_LOOTBAG", 12 )
Global( "DND_PLAYER_TRADE", 13 )
Global( "DND_WIDGET_MOVE", 14 )
Global( "DND_WIDGET_RESIZE", 15 )
Global( "DND_MOUNT", 16 )
Global( "DND_LOOT", 17 )
Global( "DND_EMOTEBOOK", 18 )
Global( "DND_METAUPDATE", 19 )
Global( "DND_EQUIPMENT_RITUAL", 20 )
Global( "DND_MOUNT_SKIN", 21 )
Global( "DND_INVENTORY_OVERFLOW", 22 )
Global( "DND_DICE_CRAFT", 23 )
Global( "DND_ENCHANT", 24 )
Global( "DND_BESTIARY", 25 )
Global( "DND_MOUNT_METAMORPH", 26 )
Global( "DND_LIFESTYLE_WEAPON", 27 )
Global( "DND_TALENT", 28 )
Global( "DND_CHECKROOM", 30 )
Global( "DND_CHAT_TAB", 100 )
Global( "DND_CHAT_PANEL", 101 )
Global( "DND_CHAT_AREA", 102 )
Global( "DND_RAID_PLATE", 110 )
Global( "DND_GENERIC_WIDGET", 254 )        -- Использование в пользовательских дополнениях запрещено, зарезервировано за интерфейсом.
Global( "DND_GENERIC_WIDGET_CLIENT", 255 ) -- Использование в скриптах запрещено, зарезервировано в клиенте.
Global( "DND_GENERIC_WIDGET_USER", 256 )   -- Использование в интерфейсе запрещено, зарезервировано за пользовательскими дополнениями.

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

CategoryDragAndDrop
EnumWidgetDNDState
EventWidgetDNDDragCancelled
EventWidgetDNDDragOver
EventWidgetDNDDragTo
EventWidgetDNDDropAttempt
EventWidgetDNDPickAttempt
FunctionWidgetDNDCancelDrag
FunctionWidgetDNDConfirmDropAttempt
FunctionWidgetDNDConfirmPickAttempt
FunctionWidgetDNDEnable
FunctionWidgetDNDGetState
FunctionWidgetDNDRegister
FunctionWidgetDNDRegisterGeneric
FunctionWidgetDNDUnregister


CategoryLuaApi CategoryMission

На главную