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

На главную


## page was renamed from FunctionFormGeWidgetCoreTree

GetWidgetCoreTree( self, indexFunction, tWidgetByInstanceId )

'''Внимание! Функция создана для оптимизации widgetcore и едва-ли применима где-либо еще'''

Возвращает дерево виджетов в формате TWidget начиная с self.

В TWidgetByInstanceId должно быть передано

-- класс
Метод определен у WidgetForm, но может принимать произвольный WidgetSafe в self

-- Семантика
function GetWidgetCoreTree( self, indexFunction, TWidgetByInstanceId )

-- входные параметры
self - WidgetSafe - корень построения дерева виджетов
indexFunction - function - функция __index для метатаблиц виджетов (смотри скриптовый класс widgetcore)
TWidgetByInstanceId - table - hash_map< instanceId, TWidget >, передается по ссылке (!) и изменяется (!).

-- возвращаемое значение
table - TWidget - дерево виджетов в формате TWidget
Структура tWidget:
{
  wtChildName01 = TWidget01,
  wtChildName02 = TWidget02,
  ...
  wtChildNameN = TWidgetN
} with META: {
  __index = indexFunction
  widget - WidgetSafe (userdata) - реальный виджет
  id - instanceId(light userdata) - ид виджета
}
Все данные по ссылкам, таблицы нигде не копируются, одному виджету соответствует ровно одна таблица в дереве и ровно одна ссылка на нее в TWidgetByInstanceId

-- пример
--------------------------------------------------------------------------------
local WIDGET_NAME_PREFIX = "wt" -- Не менять!
--------------------------------------------------------------------------------
local tWidgetByInstanceId = {}
local _widgetcore = {}
local _cppwrap = function()
	---BEGIN_DEBUG---
	error( "widgetcore::__cppwrap: FATAL: Init failed, mainForm not exist" )
	---END_DEBUG---
end
--------------------------------------------------------------------------------
-- Internal
local function _index( obj, key )
	local widget = getmetatable( obj ).widget
	if key == "widget" then
		return widget
	end

	local method = _widgetcore[ key ]

	if not method and type( widget[ key ] ) == "function" then
		method = function( self, ... )
			local widget = self:GetRaw()
			return widget[ key ]( widget, ... )
		end

		_widgetcore[ key ] = method
	end

	return method
end
--------------------------------------------------------------------------------
-- Internal
local function wrap( widget )
	---BEGIN_DEBUG---
	assert( IsTWidget( widget ) or common.IsWidget( widget ), "widgetcore::wrap FATAL: Widget expected, got %s", apitype( widget ) )
	assert( widget:GetAddonName() == ADDON_NAME, "widgetcore::wrap FATAL: Foreign widget wrapping is prohibited" )
	---END_DEBUG---
	return tWidgetByInstanceId[ widget:GetInstanceId() ] or _cppwrap( widget, _index, tWidgetByInstanceId )
end
--------------------------------------------------------------------------------
-- Превратить обычный виджет в TWidget
function TWidget( widget )
	return wrap( widget )
end
--------------------------------------------------------------------------------
-- Получить TWidget по обычному виджету
function GetTWidget( widget )
	return tWidgetByInstanceId[ widget:GetInstanceId() ]
end
--------------------------------------------------------------------------------
-- Получить TWidget по instanceId
function GetTWidgetById( instanceId )
	return instanceId and tWidgetByInstanceId[ instanceId ]
end
--------------------------------------------------------------------------------
-- Проверить что аргумент это TWidget
function IsTWidget( widget )
	local id = widget and type( widget ) == "table" and widget.GetInstanceId and widget:GetInstanceId() or false
	return id and tWidgetByInstanceId[ id ] ~= nil
end
--------------------------------------------------------------------------------
if rawget( _G, "mainForm" ) then
	_cppwrap = mainForm.GetWidgetCoreTree
	mainForm = _cppwrap( mainForm, _index, tWidgetByInstanceId )
end
--------------------------------------------------------------------------------

Связанные страницы: "CategoryLuaApi" "CategoryForm"

CategoryForm
FunctionFormCreateWidgetByDesc
FunctionFormGetFactoryCache
FunctionFormGetWidgetCoreTree
WidgetForm

Связанные страницы: "CategoryLuaApi" "CategoryWidget"

CategoryButton
CategoryControl3D
CategoryDiscreteSlider
CategoryEditBase
CategoryEditBox
CategoryEditLine
CategoryForm
CategoryPanel
CategoryScrollableContainer
CategoryTextContainer
CategoryTextView
CategoryWidget
CategoryWidgetEffects
EnumAFCT
EnumAlignX
EnumAlignY
EnumColorType
EnumKeyboardFlags
EnumMouseButton
EnumWidgetDNDState
EventEffectFinished
EventEffectSequenceFinished
EventEffectSequenceStep
EventValuedObjectClicked
EventValuedObjectDoubleClicked
EventValuedObjectMouseOver
EventWidgetDNDDragCancelled
EventWidgetDNDDragOver
EventWidgetDNDDragTo
EventWidgetDNDDropAttempt
EventWidgetDNDPickAttempt
EventWidgetShowChanged
FunctionFormCreateWidgetByDesc
FunctionFormGetWidgetCoreTree
FunctionTextContainerInsertText
FunctionTextContainerPushBackRawText
FunctionTextContainerPushBackText
FunctionTextContainerPushBackValuedText
FunctionTextContainerPushFrontRawText
FunctionTextContainerPushFrontText
FunctionTextContainerPushFrontValuedText
FunctionTextViewFinishTextScaleEffect
FunctionTextViewPlayTextScaleEffect
FunctionTextViewPlayTextScaleEffectSequence
FunctionWidgetAddChild
FunctionWidgetCreateChildByDesc
FunctionWidgetDestroyWidget
FunctionWidgetDNDCancelDrag
FunctionWidgetDNDConfirmDropAttempt
FunctionWidgetDNDConfirmPickAttempt
FunctionWidgetDNDEnable
FunctionWidgetDNDGetState
FunctionWidgetDNDRegister
FunctionWidgetDNDRegisterGeneric
FunctionWidgetDNDUnregister
FunctionWidgetEnable
FunctionWidgetFinishAllEffects
FunctionWidgetFinishFadeEffect
FunctionWidgetFinishMoveEffect
FunctionWidgetFinishResizeEffect
FunctionWidgetFinishRotationEffect
FunctionWidgetGetActiveChildrenRects
FunctionWidgetGetActiveEffectRemainingMs
FunctionWidgetGetAddonName
FunctionWidgetGetAddonType
FunctionWidgetGetBackgroundColor
FunctionWidgetGetBackgroundTexture
FunctionWidgetGetChildChecked
FunctionWidgetGetChildUnchecked
FunctionWidgetGetDebugInfo
FunctionWidgetGetFade
FunctionWidgetGetForegroundColor
FunctionWidgetGetForegroundTexture
FunctionWidgetGetId
FunctionWidgetGetName
FunctionWidgetGetNamedChildren
FunctionWidgetGetParent
FunctionWidgetGetPickChildrenOnly
FunctionWidgetGetPlacementPlain
FunctionWidgetGetPriority
FunctionWidgetGetRealRect
FunctionWidgetGetRotation
FunctionWidgetGetSmartPlacementPlain
FunctionWidgetGetTabOrder
FunctionWidgetGetTransparentInput
FunctionWidgetGetWidgetDesc
FunctionWidgetHasActiveEffects
FunctionWidgetHasBackground
FunctionWidgetHasForeground
FunctionWidgetIsClipContent
FunctionWidgetIsContentLoaded
FunctionWidgetIsEnabled
FunctionWidgetIsEnabledEx
FunctionWidgetIsFocused
FunctionWidgetIsValid
FunctionWidgetIsVisible
FunctionWidgetIsVisibleEx
FunctionWidgetPlayBackground
FunctionWidgetPlayEffectSequencePack
FunctionWidgetPlayFadeEffect
FunctionWidgetPlayFadeEffectSequence
FunctionWidgetPlayMoveEffect
FunctionWidgetPlayMoveEffectSequence
FunctionWidgetPlayResizeEffect
FunctionWidgetPlayResizeEffectSequence
FunctionWidgetPlayRotationEffect
FunctionWidgetPlayRotationEffectSequence
FunctionWidgetPlayRotationWithChildrenEffect
FunctionWidgetPlayRotationWithChildrenEffectSequence
FunctionWidgetRotate
FunctionWidgetRotateWithChildren
FunctionWidgetSetBackgroundBlendEffect
FunctionWidgetSetBackgroundClearMaskEffect
FunctionWidgetSetBackgroundColor
FunctionWidgetSetBackgroundTexture
FunctionWidgetSetClipContent
FunctionWidgetSetFade
FunctionWidgetSetFocus
FunctionWidgetSetForegroundBlendEffect
FunctionWidgetSetForegroundClearMaskEffect
FunctionWidgetSetForegroundColor
FunctionWidgetSetForegroundTexture
FunctionWidgetSetName
FunctionWidgetSetOnShowNotification
FunctionWidgetSetPickChildrenOnly
FunctionWidgetSetPlacementPlain
FunctionWidgetSetPriority
FunctionWidgetSetSmartPlacementPlain
FunctionWidgetSetTabOrder
FunctionWidgetSetTransparentInput
FunctionWidgetShow
TypeWidgetDesc
Widget
WidgetControlDescription
WidgetsEffectsAlgorithms
WidgetsEffectsFinishEffectTemplate
WidgetsEffectsPlayEffectSequenceTemplate
WidgetsEffectsPlayEffectTemplate
WidgetsEffectsTypes


CategoryLuaApi CategoryFunction CategoryForm CategoryWidget

На главную