feat(ui): supports touching gutter to set breakpoint

This commit is contained in:
hyb1996 2018-09-08 18:05:09 +08:00
parent a2c46d0787
commit 031fc56131
5 changed files with 53 additions and 10 deletions

View File

@ -33,7 +33,7 @@ public class CodeEvaluateDialogBuilder extends ThemeColorMaterialDialogBuilder {
customView(view, true);
mResult = view.findViewById(R.id.result);
mCode = view.findViewById(R.id.code);
positiveText(R.string.text_run);
positiveText(R.string.text_execute);
negativeText(R.string.text_close);
autoDismiss(false);
onNegative((dialog, which) -> dialog.dismiss());

View File

@ -31,6 +31,7 @@ import android.util.AttributeSet;
import android.util.Log;
import android.util.TimingLogger;
import android.view.Gravity;
import android.view.MotionEvent;
import org.autojs.autojs.ui.edit.theme.Theme;
import org.autojs.autojs.ui.edit.theme.TokenMapping;
@ -270,7 +271,7 @@ public class CodeEditText extends AppCompatEditText {
return;
}
Layout layout = getLayout();
if(layout == null){
if (layout == null) {
return;
}
int lineTop = layout.getLineTop(line);
@ -390,7 +391,7 @@ public class CodeEditText extends AppCompatEditText {
return;
String line = text.subSequence(lineStart, lineEnd).toString();
int cursor = sel - lineStart;
for(CodeEditor.CursorChangeCallback callback : mCursorChangeCallbacks){
for (CodeEditor.CursorChangeCallback callback : mCursorChangeCallbacks) {
callback.onCursorChange(line, cursor);
}
}
@ -404,7 +405,6 @@ public class CodeEditText extends AppCompatEditText {
}
public void updateHighlightTokens(JavaScriptHighlighter.HighlightTokens highlightTokens) {
mHighlightTokens = highlightTokens;
postInvalidate();
@ -451,4 +451,39 @@ public class CodeEditText extends AppCompatEditText {
super.onRestoreInstanceState(superData);
}
private int mTouchedLine = -1;
private boolean mTouchValid = true;
@Override
public boolean onTouchEvent(MotionEvent event) {
//如果行号区域被按下
if (event.getAction() == MotionEvent.ACTION_DOWN && event.getX() < getPaddingLeft()) {
//则计算当前行如果行号有效记录起来
int line = getLayout().getLineForVertical((int) event.getY());
if (line >= 0) {
mTouchedLine = line;
mTouchValid = true;
return true;
}
} else if (mTouchedLine >= 0) {
//如果之前已经是行号区域被按下了则之后的事件也要处理
//如果之后的触摸区域超出行号区域或者触摸的行号与第一次触摸事件时的不同则这一系列的触摸无效
if (event.getX() >= getPaddingLeft() || (getLayout().getLineForVertical((int) event.getY()) != mTouchedLine)) {
mTouchValid = false;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
//当触摸有效时对那一行设置断点或取消断点
if (mTouchValid) {
if (mBreakpoints.remove(mTouchedLine) == null) {
mBreakpoints.put(mTouchedLine, new CodeEditor.Breakpoint(mTouchedLine));
}
invalidate();
}
mTouchedLine = -1;
}
return true;
}
return super.onTouchEvent(event);
}
}

View File

@ -3,6 +3,7 @@ package org.autojs.autojs.ui.edit.editor;
import android.content.pm.PackageManager;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Parcelable;
import android.text.Layout;
import android.text.TextUtils;
@ -71,4 +72,10 @@ public class LayoutHelper {
return low;
}
public static int getVisibleLineAt(Layout layout, float x, float y) {
if(layout == null) {
return -1;
}
return 0;
}
}

View File

@ -7,15 +7,15 @@
<com.stardust.theme.widget.ThemeColorTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:layout_marginLeft="8dp"
android:text="@string/text_code"
android:textSize="14sp"/>
<EditText
android:id="@+id/code"
android:layout_width="match_parent"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:textSize="15sp"
android:layout_height="wrap_content"
android:textColor="@android:color/primary_text_light"/>
@ -23,14 +23,14 @@
<com.stardust.theme.widget.ThemeColorTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:text="@string/text_result"
android:textSize="14sp"/>
<TextView
android:id="@+id/result"
android:paddingLeft="8dp"
android:layout_marginLeft="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#727377"

View File

@ -378,4 +378,5 @@
<string name="text_code">代码</string>
<string name="text_result">结果</string>
<string name="text_close">关闭</string>
<string name="text_execute">执行</string>
</resources>