text: /*
   * 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;
      }
  }
  