Add simplistic modal for part instantiation.
This commit is contained in:
parent
f464902399
commit
8fa2e22d55
@ -478,4 +478,10 @@ class CanvasView extends View implements PartGrid {
|
|||||||
this._viewOrigin = new Tuple2<>(0, 0);
|
this._viewOrigin = new Tuple2<>(0, 0);
|
||||||
this.invalidate();
|
this.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Tuple2<Integer, Integer> getCenteredOn() {
|
||||||
|
int xOffset = _viewOrigin.item1 + getWidth() / 2;
|
||||||
|
int yOffset = _viewOrigin.item2 + getHeight() / 2;
|
||||||
|
return new Tuple2<>(xOffset, yOffset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
package com.codigoparallevar.minicards;
|
package com.codigoparallevar.minicards;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
|
||||||
import com.codigoparallevar.minicards.parts.samples.ColorBox;
|
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
CanvasView canvasView;
|
CanvasView canvasView;
|
||||||
@ -25,7 +24,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
boolean devMode = false;
|
boolean devMode = false;
|
||||||
FloatingActionButton removePartFab;
|
FloatingActionButton removePartFab;
|
||||||
|
private PartsHolder partsHolder;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -43,6 +42,8 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
canvasView = (CanvasView) findViewById(R.id.canvasView);
|
canvasView = (CanvasView) findViewById(R.id.canvasView);
|
||||||
canvasView.setParentActivity(this);
|
canvasView.setParentActivity(this);
|
||||||
|
|
||||||
|
partsHolder = new PartsHolder(this);
|
||||||
|
|
||||||
removePartFab = (FloatingActionButton) findViewById(R.id.remove_part_fab);
|
removePartFab = (FloatingActionButton) findViewById(R.id.remove_part_fab);
|
||||||
canvasView.setDropZone(
|
canvasView.setDropZone(
|
||||||
removePartFab.getX(), removePartFab.getX() + removePartFab.getWidth(),
|
removePartFab.getX(), removePartFab.getX() + removePartFab.getWidth(),
|
||||||
@ -59,18 +60,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
AddPartButton.setOnClickListener(new View.OnClickListener() {
|
AddPartButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (canvasView != null) {
|
partsHolder.openAddPartModal(canvasView);
|
||||||
Part buttonPart = new RoundButton(
|
|
||||||
canvasView,
|
|
||||||
500, 1200,
|
|
||||||
80, 100);
|
|
||||||
canvasView.addPart(buttonPart);
|
|
||||||
|
|
||||||
Part boxPart = new ColorBox(canvasView,
|
|
||||||
400, 1100,
|
|
||||||
500, 1200);
|
|
||||||
canvasView.addPart(boxPart);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.codigoparallevar.minicards;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
|
||||||
|
public abstract class PartInstantiator {
|
||||||
|
protected abstract Part instantiate(PartGrid grid, Tuple2<Integer, Integer> center);
|
||||||
|
|
||||||
|
public Part build(CanvasView canvasView) {
|
||||||
|
Tuple2<Integer, Integer> center = canvasView.getCenteredOn();
|
||||||
|
|
||||||
|
return instantiate(canvasView, center);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package com.codigoparallevar.minicards;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
||||||
|
import com.codigoparallevar.minicards.parts.samples.ColorBox;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
class PartsHolder {
|
||||||
|
private final Context context;
|
||||||
|
|
||||||
|
private final static List<Tuple2<String, PartInstantiator>> BuiltInParts =
|
||||||
|
new Vector<Tuple2<String, PartInstantiator>>(){{
|
||||||
|
add(new Tuple2<String, PartInstantiator>("Round button", RoundButton.getInstantiator()));
|
||||||
|
add(new Tuple2<String, PartInstantiator>("Red/Green box", ColorBox.getInstantiator()));
|
||||||
|
}};
|
||||||
|
|
||||||
|
public PartsHolder(Context context) {
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openAddPartModal(final CanvasView canvasView) {
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
|
builder.setTitle("Choose part type")
|
||||||
|
.setItems(getPartTypes(), new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
if ((which >= 0) && (which < BuiltInParts.size())){
|
||||||
|
Log.d("Minicards partsHolder",
|
||||||
|
"Spawning " + BuiltInParts.get(which).item1);
|
||||||
|
PartInstantiator instantiator = BuiltInParts.get(which).item2;
|
||||||
|
PartsHolder.this.runInstantiator(instantiator, canvasView);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Dialog dialog = builder.create();
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runInstantiator(PartInstantiator instantiator, CanvasView canvasView) {
|
||||||
|
Part part = instantiator.build(canvasView);
|
||||||
|
canvasView.addPart(part);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] getPartTypes() {
|
||||||
|
String[] partTypes = new String[BuiltInParts.size()];
|
||||||
|
for (int i = 0; i < BuiltInParts.size(); i++){
|
||||||
|
partTypes[i] = BuiltInParts.get(i).item1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return partTypes;
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,10 @@
|
|||||||
package com.codigoparallevar.minicards.parts.buttons;
|
package com.codigoparallevar.minicards.parts.buttons;
|
||||||
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.PartInstantiator;
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
import com.codigoparallevar.minicards.types.PartConnection;
|
import com.codigoparallevar.minicards.types.PartConnection;
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
@ -39,6 +39,8 @@ public class RoundButton implements Part {
|
|||||||
private final int _pathRunWay = 200;
|
private final int _pathRunWay = 200;
|
||||||
private List<OutputConnector> _outputConnectors;
|
private List<OutputConnector> _outputConnectors;
|
||||||
private final RoundOutputConnector _pressedOuputConnector;
|
private final RoundOutputConnector _pressedOuputConnector;
|
||||||
|
private final static int DEFAULT_INNER_RADIUS = 80;
|
||||||
|
private final static int DEFAULT_OUTER_RADIUS = 100;
|
||||||
|
|
||||||
|
|
||||||
private RoundButton(String id, PartGrid partGrid, int xCenter, int yCenter, int innerRadius, int outerRadius) {
|
private RoundButton(String id, PartGrid partGrid, int xCenter, int yCenter, int innerRadius, int outerRadius) {
|
||||||
@ -249,4 +251,15 @@ public class RoundButton implements Part {
|
|||||||
input.unlink();
|
input.unlink();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PartInstantiator getInstantiator() {
|
||||||
|
return new PartInstantiator() {
|
||||||
|
@Override
|
||||||
|
protected Part instantiate(PartGrid grid, Tuple2<Integer, Integer> center) {
|
||||||
|
return new RoundButton(grid,
|
||||||
|
center.item1, center.item2,
|
||||||
|
DEFAULT_INNER_RADIUS, DEFAULT_OUTER_RADIUS);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@ import android.graphics.Paint;
|
|||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.PartInstantiator;
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.Moveable;
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
@ -25,6 +27,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class ColorBox implements Part {
|
public class ColorBox implements Part {
|
||||||
private static final String TOGGLE_INPUT_CONNECTOR_ID = "toggle_input_connector";
|
private static final String TOGGLE_INPUT_CONNECTOR_ID = "toggle_input_connector";
|
||||||
|
private static final int DEFAULT_SIDE_SIZE = 100;
|
||||||
private final String _id;
|
private final String _id;
|
||||||
private final PartGrid _partGrid;
|
private final PartGrid _partGrid;
|
||||||
private boolean _activated;
|
private boolean _activated;
|
||||||
@ -228,4 +231,16 @@ public class ColorBox implements Part {
|
|||||||
public int getInputConnectorCenterY() {
|
public int getInputConnectorCenterY() {
|
||||||
return (getTop() + getBottom()) / 2;
|
return (getTop() + getBottom()) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PartInstantiator getInstantiator() {
|
||||||
|
final int halfSideSize = DEFAULT_SIDE_SIZE / 2;
|
||||||
|
return new PartInstantiator() {
|
||||||
|
@Override
|
||||||
|
protected Part instantiate(PartGrid grid, Tuple2<Integer, Integer> center) {
|
||||||
|
return new ColorBox(grid,
|
||||||
|
center.item1 - halfSideSize, center.item2 - halfSideSize,
|
||||||
|
center.item1 + halfSideSize, center.item2 + halfSideSize);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user