/*
* 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.fun.mapper.ui;
import android.text.TextUtils;
import com.taobao.luaview.fun.mapper.LuaViewApi;
import com.taobao.luaview.fun.mapper.LuaViewLib;
import com.taobao.luaview.userdata.constants.UDEllipsize;
import com.taobao.luaview.userdata.ui.UDTextView;
import com.taobao.luaview.util.ColorUtil;
import com.taobao.luaview.util.DimenUtil;
import com.taobao.luaview.util.LuaUtil;
import com.taobao.luaview.util.LuaViewUtil;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
import java.util.List;
@LuaViewLib(revisions = {"20170306已对标"})
public class UITextViewMethodMapper<U extends UDTextView> extends UIViewMethodMapper<U> {
private static final String TAG = "UITextViewMethodMapper";
private static final String[] sMethods = new String[]{
"text",//0
"textColor",//1
"textSize",//2
"fontSize",//3
"fontName",//4
"font",//5
"gravity",//6
"textAlign",//7
"lines",//8 TODO iOS没有这个方法
"maxLines",//9
"lineCount",//10
"minLines",//11
"ellipsize",//12
"adjustTextSize",//13
"adjustFontSize"//14
};
@Override
public List<String> getAllFunctionNames() {
return mergeFunctionNames(TAG, super.getAllFunctionNames(), sMethods);
}
@Override
public Varargs invoke(int code, U target, Varargs varargs) {
final int optcode = code - super.getAllFunctionNames().size();
switch (optcode) {
case 0:
return text(target, varargs);
case 1:
return textColor(target, varargs);
case 2:
return textSize(target, varargs);
case 3:
return fontSize(target, varargs);
case 4:
return fontName(target, varargs);
case 5:
return font(target, varargs);
case 6:
return gravity(target, varargs);
case 7:
return textAlign(target, varargs);
case 8:
return lines(target, varargs);
case 9:
return maxLines(target, varargs);
case 10:
return lineCount(target, varargs);
case 11:
return minLines(target, varargs);
case 12:
return ellipsize(target, varargs);
case 13:
return adjustTextSize(target, varargs);
case 14:
return adjustFontSize(target, varargs);
}
return super.invoke(code, target, varargs);
}
//--------------------------------------- API --------------------------------------------------
/**
* 获得文本
*
* @param view UDTextView
* @param varargs Varargs
* @return LuaValue
*/
public LuaValue text(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setText(view, varargs);
} else {
return getText(view, varargs);
}
}
public LuaValue setText(U view, Varargs varargs) {
final CharSequence text = LuaViewUtil.getText(varargs.optvalue(2, NIL));
return view.setText(text);
}
public LuaValue getText(U view, Varargs varargs) {
return valueOf(String.valueOf(view.getText()));
}
/**
* 获取字体颜色
*
* @param view UDTextView
* @param varargs Varargs
* @return LuaValue
*/
@LuaViewApi(revisions = {"iOS支持多个参数,可以支持alpha"})
public LuaValue textColor(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setTextColor(view, varargs);
} else {
return getTextColor(view, varargs);
}
}
public LuaValue setTextColor(U view, Varargs varargs) {
final Integer color = ColorUtil.parse(LuaUtil.getInt(varargs, 2));
return view.setTextColor(color);
}
public LuaValue getTextColor(U view, Varargs varargs) {
return valueOf(ColorUtil.getHexColor(view.getTextColor()));
}
/**
* 字体大小
*
* @param view UDTextView
* @param varargs Varargs
* @return LuaValue
*/
@Deprecated
public LuaValue textSize(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setTextSize(view, varargs);
} else {
return getTextSize(view, varargs);
}
}
public LuaValue setTextSize(U view, Varargs varargs) {
final float fontSize = (float) varargs.optdouble(2, 12.0);//TODO 这里需要转sp么?
return view.setTextSize(fontSize);
}
public LuaValue getTextSize(U view, Varargs varargs) {
return valueOf(view.getTextSize());
}
/**
* 设置文字大小
*
* @param view
* @param varargs
* @return
*/
public LuaValue fontSize(U view, Varargs varargs) {
return textSize(view, varargs);
}
public LuaValue setFontSize(U view, Varargs varargs) {
return setTextSize(view, varargs);
}
public LuaValue getFontSize(U view, Varargs varargs) {
return getTextSize(view, varargs);
}
/**
* 设置字体
*
* @param view
* @param varargs
* @return
*/
@Deprecated
public LuaValue fontName(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setFontName(view, varargs);
} else {
return getFontName(view, varargs);
}
}
public LuaValue setFontName(U view, Varargs varargs) {
final String fontName = varargs.optjstring(2, null);
return view.setFont(fontName);
}
public LuaValue getFontName(U view, Varargs varargs) {
return valueOf(view.getFont());
}
/**
* 获得文字和大小
*
* @param view
* @param varargs
* @return
*/
@LuaViewApi(revisions = {"需要支持只传一个String"})
public Varargs font(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setFont(view, varargs);
} else {
return getFont(view, varargs);
}
}
public LuaValue setFont(U view, Varargs varargs) {
if (varargs.narg() > 2) {//两个参数
final String fontName = varargs.optjstring(2, null);
final float fontSize = (float) varargs.optdouble(3, -1);
return view.setFont(fontName, fontSize);
} else {//一个参数
final float fontSize = (float) varargs.optdouble(2, -1);
return view.setTextSize(fontSize);
}
}
public Varargs getFont(U view, Varargs varargs) {
return varargsOf(valueOf(view.getFont()), valueOf(view.getTextSize()));
}
/**
* 设置文字对齐方式
*
* @param view
* @param varargs
* @return
*/
@LuaViewApi(revisions = "待废弃,集成到textAlign中")
public LuaValue gravity(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setGravity(view, varargs);
} else {
return getGravity(view, varargs);
}
}
public LuaValue setGravity(U view, Varargs varargs) {
final int gravity = varargs.optint(2, 0);
return view.setGravity(gravity);
}
public LuaValue getGravity(U view, Varargs varargs) {
return valueOf(view.getGravity());
}
/**
* 获得文字的对齐方式
* TODO 需要跟iOS统一alignment的数值
*
* @param view
* @param varargs
* @return
*/
public LuaValue textAlign(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setTextAlign(view, varargs);
} else {
return getTextAlign(view, varargs);
}
}
public LuaValue setTextAlign(U view, Varargs varargs) {
final int alignment = varargs.optint(2, 0);
return view.setTextAlign(alignment);
}
public LuaValue getTextAlign(U view, Varargs varargs) {
return valueOf(view.getTextAlign());
}
/**
* 获得文字行数
*
* @param view
* @param varargs
* @return
*/
public LuaValue lines(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setLines(view, varargs);
} else {
return getLines(view, varargs);
}
}
public LuaValue setLines(U view, Varargs varargs) {
final int lines = varargs.optint(2, -1);
return view.setLines(lines);
}
public LuaValue getLines(U view, Varargs varargs) {
return valueOf(view.getLines());
}
/**
* 获得文字最大行数
*
* @param view
* @param varargs
* @return
*/
@Deprecated
public LuaValue maxLines(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setMaxLines(view, varargs);
} else {
return getMaxLines(view, varargs);
}
}
public LuaValue setMaxLines(U view, Varargs varargs) {
final int lines = varargs.optint(2, -1);
return view.setMaxLines(lines);
}
public LuaValue getMaxLines(U view, Varargs varargs) {
return valueOf(view.getMaxLines());
}
/**
* 文字行数(最大)
*
* @param view
* @param varargs
* @return
*/
@Deprecated
public LuaValue lineCount(U view, Varargs varargs) {
return maxLines(view, varargs);
}
public LuaValue setLineCount(U view, Varargs varargs) {
return setMaxLines(view, varargs);
}
public LuaValue getLineCount(U view, Varargs varargs) {
return getMaxLines(view, varargs);
}
/**
* 获得文字最小行数
*
* @param view
* @param varargs
* @return
*/
@Deprecated
public LuaValue minLines(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setMinLines(view, varargs);
} else {
return getMinLines(view, varargs);
}
}
public LuaValue setMinLines(U view, Varargs varargs) {
final int lines = varargs.optint(2, -1);
return view.setMinLines(lines);
}
public LuaValue getMinLines(U view, Varargs varargs) {
return valueOf(view.getMinLines());
}
/**
* 文字显示不下的时候如何显示...
*/
public LuaValue ellipsize(U view, Varargs varargs) {
if (varargs.narg() > 1) {
return setEllipsize(view, varargs);
} else {
return getEllipsize(view, varargs);
}
}
public LuaValue setEllipsize(U view, Varargs varargs) {
//TODO 这里需要统一
final String ellipsizeName = varargs.optjstring(2, TextUtils.TruncateAt.END.name());
final TextUtils.TruncateAt ellipsize = UDEllipsize.parse(ellipsizeName);
return view.setEllipsize(ellipsize);
}
public LuaValue getEllipsize(U view, Varargs varargs) {
return valueOf(view.getEllipsize());
}
/**
* 让Label字体大小适应宽度, 设置的字体为最大字体, 如果文字超出会缩小字体.
*
* @param view
* @param varargs
* @return
*/
@Deprecated
public LuaValue adjustTextSize(U view, Varargs varargs) {
return view.adjustTextSize();
}
public LuaValue adjustFontSize(U view, Varargs varargs) {
return view.adjustTextSize();
}
}