From 553ee654b1300a9d2151ea41695efd941b8fa94a Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Tue, 24 Aug 2021 18:08:22 +0200 Subject: [PATCH] - Migrate from clone to recopy constructors - Support for cloning Drawers --- .../customcontrols/ControlData.java | 25 ++++++++++++++----- .../customcontrols/ControlDrawerData.java | 11 ++++++++ .../customcontrols/ControlLayout.java | 9 ++++--- .../customcontrols/CustomControls.java | 22 +++++----------- .../handleview/ActionPopupWindow.java | 16 +++++++++--- .../handleview/EditControlDrawerPopup.java | 2 +- 6 files changed, 54 insertions(+), 31 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java index 89bd53cb7..0c3938fb9 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java @@ -12,8 +12,7 @@ import org.lwjgl.glfw.*; import static net.kdt.pojavlaunch.LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN; -public class ControlData implements Cloneable -{ +public class ControlData { public static final int SPECIALBTN_KEYBOARD = -1; public static final int SPECIALBTN_TOGGLECTRL = -2; @@ -141,6 +140,24 @@ public class ControlData implements Cloneable this.strokeWidth = strokeWidth; this.cornerRadius = cornerRadius; } + + //Deep copy constructor + public ControlData(ControlData controlData){ + this( + controlData.name, + controlData.keycodes, + controlData.dynamicX, + controlData.dynamicY, + controlData.width, + controlData.height, + controlData.isToggle, + controlData.opacity, + controlData.bgColor, + controlData.strokeColor, + controlData.strokeWidth, + controlData.cornerRadius + ); + } public void execute(boolean isDown) { for(int keycode : keycodes){ @@ -148,10 +165,6 @@ public class ControlData implements Cloneable } } - - public ControlData clone() { - return new ControlData(name, keycodes, dynamicX, dynamicY, width, height, isToggle, opacity, bgColor, strokeColor,strokeWidth, cornerRadius); - } public float insertDynamicPos(String dynamicPos) { // Values in the map below may be always changed diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlDrawerData.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlDrawerData.java index cdb02339c..aa1478f1a 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlDrawerData.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlDrawerData.java @@ -9,6 +9,8 @@ import static net.kdt.pojavlaunch.customcontrols.ControlDrawerData.Orientation.L import static net.kdt.pojavlaunch.customcontrols.ControlDrawerData.Orientation.RIGHT; import static net.kdt.pojavlaunch.customcontrols.ControlDrawerData.Orientation.UP; +import androidx.annotation.NonNull; + public class ControlDrawerData { public ArrayList buttonProperties; @@ -73,4 +75,13 @@ public class ControlDrawerData { this.orientation = orientation; } + public ControlDrawerData(ControlDrawerData drawerData){ + buttonProperties = new ArrayList<>(drawerData.buttonProperties.size()); + for(ControlData controlData : drawerData.buttonProperties){ + buttonProperties.add(new ControlData(controlData)); + } + properties = new ControlData(drawerData.properties); + orientation = drawerData.orientation; + } + } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java index 8269633cc..9cdb61725 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java @@ -76,10 +76,7 @@ public class ControlLayout extends FrameLayout if(mModifiable) drawer.areButtonsVisible = true; - //CONTROL SUB BUTTON - for (ControlData subButton : drawerData.buttonProperties) { - addSubView(drawer, subButton); - } + } mLayout.scaledAt = LauncherPreferences.PREF_BUTTONSIZE; @@ -126,6 +123,10 @@ public class ControlLayout extends FrameLayout view.setFocusableInTouchMode(false); } addView(view); + //CONTROL SUB BUTTON + for (ControlData subButton : view.getDrawerData().buttonProperties) { + addSubView(view, subButton); + } setModified(true); return view; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java index 398259e43..f5651ed40 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java @@ -27,11 +27,11 @@ public class CustomControls { // Generate default control public CustomControls(Context ctx) { this(); - this.mControlDataList.add(ControlData.getSpecialButtons()[0].clone()); // Keyboard - this.mControlDataList.add(ControlData.getSpecialButtons()[1].clone()); // GUI - this.mControlDataList.add(ControlData.getSpecialButtons()[2].clone()); // Primary Mouse mControlDataList - this.mControlDataList.add(ControlData.getSpecialButtons()[3].clone()); // Secondary Mouse mControlDataList - this.mControlDataList.add(ControlData.getSpecialButtons()[4].clone()); // Virtual mouse toggle + this.mControlDataList.add(new ControlData(ControlData.getSpecialButtons()[0])); // Keyboard + this.mControlDataList.add(new ControlData(ControlData.getSpecialButtons()[1])); // GUI + this.mControlDataList.add(new ControlData(ControlData.getSpecialButtons()[2])); // Primary Mouse mControlDataList + this.mControlDataList.add(new ControlData(ControlData.getSpecialButtons()[3])); // Secondary Mouse mControlDataList + this.mControlDataList.add(new ControlData(ControlData.getSpecialButtons()[4])); // Virtual mouse toggle this.mControlDataList.add(new ControlData(ctx, R.string.control_debug, new int[]{LWJGLGLFWKeycode.GLFW_KEY_F3}, "${margin}", "${margin}", false)); this.mControlDataList.add(new ControlData(ctx, R.string.control_chat, new int[]{LWJGLGLFWKeycode.GLFW_KEY_T}, "${margin} * 2 + ${width}", "${margin}", false)); @@ -53,17 +53,7 @@ public class CustomControls { //The default controls are conform to the V2 version = 3; } - - public ControlData findControlData(int keycode) { - for (ControlData data : mControlDataList) { - for(int dataKeycode : data.keycodes){ - if (dataKeycode == keycode) { - return data; - } - } - } - return null; - } + public void save(String path) throws IOException { //Current version is the V2.3 so the version as to be marked as 3 ! diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ActionPopupWindow.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ActionPopupWindow.java index 4179330af..f4052356b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ActionPopupWindow.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ActionPopupWindow.java @@ -140,10 +140,18 @@ public class ActionPopupWindow extends PinnedPopupWindow implements OnClickListe alertBuilder.setNegativeButton(android.R.string.cancel, null); alertBuilder.show(); }else if(view == mCloneTextView) { - ControlData cloneData = editedButton.getProperties().clone(); - cloneData.dynamicX = "0.5 * ${screen_width}"; - cloneData.dynamicY = "0.5 * ${screen_height}"; - ((ControlLayout) mHandleView.mView.getParent()).addControlButton(cloneData); + if(editedButton instanceof ControlDrawer){ + ControlDrawerData cloneData = new ControlDrawerData(((ControlDrawer)editedButton).getDrawerData()); + cloneData.properties.dynamicX = "0.5 * ${screen_width}"; + cloneData.properties.dynamicY = "0.5 * ${screen_height}"; + ((ControlLayout) mHandleView.mView.getParent()).addDrawer(cloneData); + }else{ + ControlData cloneData = new ControlData(editedButton.getProperties()); + cloneData.dynamicX = "0.5 * ${screen_width}"; + cloneData.dynamicY = "0.5 * ${screen_height}"; + ((ControlLayout) mHandleView.mView.getParent()).addControlButton(cloneData); + } + } hide(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlDrawerPopup.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlDrawerPopup.java index b741631ff..593832452 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlDrawerPopup.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlDrawerPopup.java @@ -60,7 +60,7 @@ public class EditControlDrawerPopup extends EditControlButtonPopup{ builder.setNeutralButton(v.getResources().getString(R.string.customctrl_addsubbutton), (dialogInterface, i) -> { ControlLayout layout = (ControlLayout) drawer.getParent(); - ControlData controlData = drawerData.properties.clone(); + ControlData controlData = new ControlData(drawerData.properties); controlData.name = "new"; layout.addSubButton(drawer, controlData); });