/*
* Created by LuaView.
* Copyright (c) 2017, Alibaba Group. All rights reserved.
*
* This source code is licensed under the MIT.
* For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
*/
package com.taobao.luaview.view;
import android.support.annotation.NonNull;
import android.view.View;
import android.view.ViewGroup;
import com.taobao.luaview.global.LuaView;
import com.taobao.luaview.userdata.ui.UDCustomPanel;
import com.taobao.luaview.userdata.ui.UDView;
import com.taobao.luaview.userdata.ui.UDViewGroup;
import com.taobao.luaview.util.LuaUtil;
import com.taobao.luaview.util.LuaViewUtil;
import com.taobao.luaview.view.interfaces.ILVNativeViewProvider;
import com.taobao.luaview.view.interfaces.ILVViewGroup;
import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
/**
* LuaView-Container
* 容器类
*
* @author song
* @date 15/8/20
*/
public abstract class LVCustomPanel extends LVViewGroup<UDCustomPanel> implements ILVViewGroup, ILVNativeViewProvider {
public LVCustomPanel(Globals globals, LuaValue metaTable, Varargs varargs) {
super(globals, metaTable, varargs);
initPanel();
}
@NonNull
public UDCustomPanel createUserdata(Globals globals, LuaValue metaTable, Varargs varargs) {
return new UDCustomPanel(this, globals, metaTable, varargs);
}
public void show() {
LVCustomPanel.this.setVisibility(View.VISIBLE);
}
public void hide() {
LVCustomPanel.this.setVisibility(View.GONE);
}
/**
* 初始化Panel
*/
public abstract void initPanel();
/**
* call LuaView 的 global functions
*
* @param objs
*/
public void callLuaFunction(String name, Object... objs) {
UDView userdata = getUserdata();
if (userdata != null) {
Globals globals = userdata.getGlobals();
if (globals != null) {
globals.callLuaFunction(name, objs);
}
}
}
/**
* 子类实现该方法,用于Lua回调该方法
*/
public void callLuaCallback(Object... objs) {
UDView userdata = getUserdata();
if (userdata != null) {
final LuaValue callback = userdata.getCallback();
LuaUtil.callFunction(callback, objs);
}
}
//获取native view
@Override
public View getNativeView() {
if (getChildCount() > 0 && getChildAt(0) != null) {
return getChildAt(0);
}
return null;
}
}