Enable clone view
This commit is contained in:
parent
ac390a4bf5
commit
57d281cca1
|
@ -1 +1 @@
|
|||
1689070711804
|
||||
1689073118617
|
|
@ -1 +1 @@
|
|||
1689070711809
|
||||
1689073118622
|
|
@ -40,6 +40,7 @@ import java.util.stream.Collectors;
|
|||
|
||||
public class EditViewDialog extends FCLDialog implements View.OnClickListener {
|
||||
|
||||
private final CustomControl customControl;
|
||||
private final Callback callback;
|
||||
|
||||
private FCLTextView title;
|
||||
|
@ -47,16 +48,19 @@ public class EditViewDialog extends FCLDialog implements View.OnClickListener {
|
|||
private FCLImageButton event;
|
||||
private FCLButton positive;
|
||||
private FCLButton negative;
|
||||
private FCLButton clone;
|
||||
|
||||
private FCLLinearLayout container;
|
||||
private Details details;
|
||||
|
||||
public interface Callback {
|
||||
void onPositive(CustomControl view);
|
||||
void onClone(CustomControl view);
|
||||
}
|
||||
|
||||
public EditViewDialog(@NonNull Context context, CustomControl cloneView, GameMenu menu, Callback callback) {
|
||||
public EditViewDialog(@NonNull Context context, CustomControl cloneView, GameMenu menu, Callback callback, boolean cloneable) {
|
||||
super(context);
|
||||
this.customControl = cloneView;
|
||||
this.callback = callback;
|
||||
setCancelable(false);
|
||||
setContentView(R.layout.dialog_edit_view);
|
||||
|
@ -70,8 +74,12 @@ public class EditViewDialog extends FCLDialog implements View.OnClickListener {
|
|||
event.setOnClickListener(this);
|
||||
positive = findViewById(R.id.positive);
|
||||
negative = findViewById(R.id.negative);
|
||||
clone = findViewById(R.id.clone);
|
||||
positive.setOnClickListener(this);
|
||||
negative.setOnClickListener(this);
|
||||
clone.setOnClickListener(this);
|
||||
|
||||
clone.setVisibility(cloneable ? View.VISIBLE : View.GONE);
|
||||
|
||||
container = findViewById(R.id.container);
|
||||
assert container != null;
|
||||
|
@ -90,6 +98,10 @@ public class EditViewDialog extends FCLDialog implements View.OnClickListener {
|
|||
if (v == event) {
|
||||
details.onLayoutChange(1);
|
||||
}
|
||||
if (v == clone) {
|
||||
callback.onClone(customControl.cloneView());
|
||||
dismiss();
|
||||
}
|
||||
if (v == positive) {
|
||||
callback.onPositive(details.getView());
|
||||
dismiss();
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.tungsten.fcl.control.data.ButtonStyles;
|
|||
import com.tungsten.fcl.control.data.ControlButtonData;
|
||||
import com.tungsten.fcl.control.data.ControlDirectionData;
|
||||
import com.tungsten.fcl.control.data.ControlViewGroup;
|
||||
import com.tungsten.fcl.control.data.CustomControl;
|
||||
import com.tungsten.fcl.control.data.DirectionStyles;
|
||||
import com.tungsten.fcl.control.data.QuickInputTexts;
|
||||
import com.tungsten.fcl.control.keyboard.LwjglCharSender;
|
||||
|
@ -583,7 +584,17 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
|
|||
if (getViewGroup() == null) {
|
||||
Toast.makeText(getActivity(), getActivity().getString(R.string.edit_view_no_group), Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
EditViewDialog dialog = new EditViewDialog(getActivity(), new ControlButtonData(UUID.randomUUID().toString()), this, view -> viewManager.addView(view));
|
||||
EditViewDialog dialog = new EditViewDialog(getActivity(), new ControlButtonData(UUID.randomUUID().toString()), this, new EditViewDialog.Callback() {
|
||||
@Override
|
||||
public void onPositive(CustomControl view) {
|
||||
viewManager.addView(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClone(CustomControl view) {
|
||||
// Ignore
|
||||
}
|
||||
}, false);
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
|
@ -591,7 +602,17 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
|
|||
if (getViewGroup() == null) {
|
||||
Toast.makeText(getActivity(), getActivity().getString(R.string.edit_view_no_group), Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
EditViewDialog dialog = new EditViewDialog(getActivity(), new ControlDirectionData(UUID.randomUUID().toString()), this, view -> viewManager.addView(view));
|
||||
EditViewDialog dialog = new EditViewDialog(getActivity(), new ControlDirectionData(UUID.randomUUID().toString()), this, new EditViewDialog.Callback() {
|
||||
@Override
|
||||
public void onPositive(CustomControl view) {
|
||||
viewManager.addView(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClone(CustomControl view) {
|
||||
// Ignore
|
||||
}
|
||||
}, false);
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,6 +160,14 @@ public class ControlButtonData implements Cloneable, Observable, CustomControl {
|
|||
return getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomControl cloneView() {
|
||||
ControlButtonData clone = clone();
|
||||
clone.getBaseInfo().setXPosition(0);
|
||||
clone.getBaseInfo().setYPosition(0);
|
||||
return clone;
|
||||
}
|
||||
|
||||
public static class Serializer implements JsonSerializer<ControlButtonData>, JsonDeserializer<ControlButtonData> {
|
||||
@Override
|
||||
public JsonElement serialize(ControlButtonData src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
|
|
|
@ -139,6 +139,14 @@ public class ControlDirectionData implements Cloneable, Observable, CustomContro
|
|||
return getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomControl cloneView() {
|
||||
ControlDirectionData clone = clone();
|
||||
clone.getBaseInfo().setXPosition(0);
|
||||
clone.getBaseInfo().setYPosition(0);
|
||||
return clone;
|
||||
}
|
||||
|
||||
public static class Serializer implements JsonSerializer<ControlDirectionData>, JsonDeserializer<ControlDirectionData> {
|
||||
@Override
|
||||
public JsonElement serialize(ControlDirectionData src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
|
|
|
@ -9,4 +9,5 @@ public interface CustomControl {
|
|||
|
||||
ViewType getType();
|
||||
String getViewId();
|
||||
CustomControl cloneView();
|
||||
}
|
||||
|
|
|
@ -319,14 +319,22 @@ public class ControlButton extends AppCompatButton implements CustomView {
|
|||
&& Math.abs(event.getY() - downY) <= 10) {
|
||||
setX(positionX);
|
||||
setY(positionY);
|
||||
EditViewDialog dialog = new EditViewDialog(getContext(), getData().clone(), menu, view -> {
|
||||
ControlButtonData newData = ((ControlButtonData) view).clone();
|
||||
getData().setText(newData.getText());
|
||||
getData().setBaseInfo(newData.getBaseInfo());
|
||||
getData().setStyle(newData.getStyle());
|
||||
getData().setEvent(newData.getEvent());
|
||||
menu.getViewManager().saveController();
|
||||
});
|
||||
EditViewDialog dialog = new EditViewDialog(getContext(), getData().clone(), menu, new EditViewDialog.Callback() {
|
||||
@Override
|
||||
public void onPositive(CustomControl view) {
|
||||
ControlButtonData newData = ((ControlButtonData) view).clone();
|
||||
getData().setText(newData.getText());
|
||||
getData().setBaseInfo(newData.getBaseInfo());
|
||||
getData().setStyle(newData.getStyle());
|
||||
getData().setEvent(newData.getEvent());
|
||||
menu.getViewManager().saveController();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClone(CustomControl view) {
|
||||
menu.getViewManager().addView(view);
|
||||
}
|
||||
}, true);
|
||||
dialog.show();
|
||||
} else {
|
||||
getData().getBaseInfo().setXPosition((int) ((1000 * getX()) / (screenWidth - getMeasuredWidth())));
|
||||
|
|
|
@ -459,13 +459,21 @@ public class ControlDirection extends RelativeLayout implements CustomView {
|
|||
&& Math.abs(event.getY() - downY) <= 10) {
|
||||
setX(positionX);
|
||||
setY(positionY);
|
||||
EditViewDialog dialog = new EditViewDialog(getContext(), getData().clone(), menu, view -> {
|
||||
ControlDirectionData newData = ((ControlDirectionData) view).clone();
|
||||
getData().setBaseInfo(newData.getBaseInfo());
|
||||
getData().setStyle(newData.getStyle());
|
||||
getData().setEvent(newData.getEvent());
|
||||
menu.getViewManager().saveController();
|
||||
});
|
||||
EditViewDialog dialog = new EditViewDialog(getContext(), getData().clone(), menu, new EditViewDialog.Callback() {
|
||||
@Override
|
||||
public void onPositive(CustomControl view) {
|
||||
ControlDirectionData newData = ((ControlDirectionData) view).clone();
|
||||
getData().setBaseInfo(newData.getBaseInfo());
|
||||
getData().setStyle(newData.getStyle());
|
||||
getData().setEvent(newData.getEvent());
|
||||
menu.getViewManager().saveController();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClone(CustomControl view) {
|
||||
menu.getViewManager().addView(view);
|
||||
}
|
||||
}, true);
|
||||
dialog.show();
|
||||
} else {
|
||||
getData().getBaseInfo().setXPosition((int) ((1000 * getX()) / (screenWidth - getSize())));
|
||||
|
|
|
@ -77,6 +77,16 @@
|
|||
|
||||
</com.tungsten.fcllibrary.component.view.FCLLinearLayout>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLButton
|
||||
android:id="@+id/clone"
|
||||
android:text="@string/edit_view_clone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
<com.tungsten.fcllibrary.component.view.FCLButton
|
||||
android:id="@+id/positive"
|
||||
android:text="@string/dialog_positive"
|
||||
|
|
|
@ -233,6 +233,7 @@
|
|||
<string name="download_failed">下载失败: %1$s,错误码:%2$d</string>
|
||||
<string name="download_failed_empty">没有可供选择的版本</string>
|
||||
|
||||
<string name="edit_view_clone">复制控件</string>
|
||||
<string name="edit_view_event">控件事件</string>
|
||||
<string name="edit_view_info">控件基本信息</string>
|
||||
<string name="edit_view_no_group">请先添加或选择一个控件组!</string>
|
||||
|
|
|
@ -244,6 +244,7 @@
|
|||
<string name="download_failed">Failed to download %1$s, response code: %2$d</string>
|
||||
<string name="download_failed_empty">No versions are available</string>
|
||||
|
||||
<string name="edit_view_clone">Clone View</string>
|
||||
<string name="edit_view_event">View Event</string>
|
||||
<string name="edit_view_info">Base View Info</string>
|
||||
<string name="edit_view_no_group">Please add or select a view group first!</string>
|
||||
|
|
Loading…
Reference in New Issue