mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-11 01:32:08 +10:00
apply template to existing components
do not mess up selection on right click popup menu improvements
This commit is contained in:
Binary file not shown.
+4
@@ -12,6 +12,10 @@ public interface ITemplateProcessor {
|
||||
|
||||
List<Template> getTemplatesFor(String categoryName, String componentTypeName);
|
||||
|
||||
List<Template> getTemplatesForSelection();
|
||||
|
||||
void applyTemplateToSelection(Template template);
|
||||
|
||||
void deleteTemplate(String categoryName, String componentTypeName, String templateName);
|
||||
|
||||
public class TemplateAlreadyExistsException extends Exception {
|
||||
|
||||
+23
-10
@@ -233,16 +233,8 @@ public class InstantiationManager {
|
||||
component.setControlPoint(controlPoint, j);
|
||||
}
|
||||
}
|
||||
// Make the component into shape from the template
|
||||
if (template != null && template.getPoints() != null
|
||||
&& template.getPoints().size() >= component
|
||||
.getControlPointCount()) {
|
||||
for (int i = 0; i < component.getControlPointCount(); i++) {
|
||||
Point p = new Point(component.getControlPoint(0));
|
||||
p.translate(template.getPoints().get(i).x, template.getPoints().get(i).y);
|
||||
component.setControlPoint(p, i);
|
||||
}
|
||||
}
|
||||
|
||||
loadComponentShapeFromTemplate(component, template);
|
||||
|
||||
fillWithDefaultProperties(component, template);
|
||||
|
||||
@@ -340,6 +332,27 @@ public class InstantiationManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses stored control points from the template to shape component.
|
||||
*
|
||||
* @param component
|
||||
* @param template
|
||||
*/
|
||||
public void loadComponentShapeFromTemplate(IDIYComponent<?> component,
|
||||
Template template) {
|
||||
if (template != null
|
||||
&& template.getPoints() != null
|
||||
&& template.getPoints().size() >= component
|
||||
.getControlPointCount()) {
|
||||
for (int i = 0; i < component.getControlPointCount(); i++) {
|
||||
Point p = new Point(component.getControlPoint(0));
|
||||
p.translate(template.getPoints().get(i).x, template.getPoints()
|
||||
.get(i).y);
|
||||
component.setControlPoint(p, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tryToRotateComponentSlot() {
|
||||
if (this.componentSlot == null) {
|
||||
LOG.debug("Component slot is empty, cannot rotate");
|
||||
|
||||
+60
-3
@@ -591,7 +591,10 @@ public class Presenter implements IPlugInPort {
|
||||
}
|
||||
} else {
|
||||
// Otherwise just select that one component.
|
||||
newSelection.clear();
|
||||
if (button == BUTTON1
|
||||
|| !selectedComponents.contains(component)) {
|
||||
newSelection.clear();
|
||||
}
|
||||
newSelection
|
||||
.addAll(findAllGroupedComponents(component));
|
||||
}
|
||||
@@ -1007,8 +1010,8 @@ public class Presenter implements IPlugInPort {
|
||||
int dx = (scaledPoint.x - previousDragPoint.x);
|
||||
int dy = (scaledPoint.y - previousDragPoint.y);
|
||||
|
||||
Point actualD = moveComponents(this.controlPointMap, dx,
|
||||
dy, isSnapToGrid());
|
||||
Point actualD = moveComponents(this.controlPointMap, dx, dy,
|
||||
isSnapToGrid());
|
||||
if (actualD == null)
|
||||
return true;
|
||||
|
||||
@@ -2021,6 +2024,60 @@ public class Presenter implements IPlugInPort {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Template> getTemplatesForSelection() {
|
||||
if (this.selectedComponents.isEmpty()) {
|
||||
throw new RuntimeException("No components selected");
|
||||
}
|
||||
ComponentType selectedType = ComponentProcessor
|
||||
.getInstance()
|
||||
.extractComponentTypeFrom(
|
||||
(Class<? extends IDIYComponent<?>>) this.selectedComponents
|
||||
.get(0).getClass());
|
||||
for (int i = 1; i < this.selectedComponents.size(); i++) {
|
||||
ComponentType newType = ComponentProcessor
|
||||
.getInstance()
|
||||
.extractComponentTypeFrom(
|
||||
(Class<? extends IDIYComponent<?>>) this.selectedComponents
|
||||
.get(i).getClass());
|
||||
if (newType.getInstanceClass() != selectedType.getInstanceClass()) {
|
||||
throw new RuntimeException(
|
||||
"Template can be applied on multiple components of the same type only");
|
||||
}
|
||||
}
|
||||
return getTemplatesFor(selectedType.getCategory(), selectedType
|
||||
.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyTemplateToSelection(Template template) {
|
||||
LOG.debug(String.format("applyTemplateToSelection(%s)", template
|
||||
.getName()));
|
||||
|
||||
Project oldProject = currentProject.clone();
|
||||
|
||||
for (IDIYComponent<?> component : this.selectedComponents) {
|
||||
try {
|
||||
drawingManager.invalidateComponent(component);
|
||||
this.instantiationManager.loadComponentShapeFromTemplate(
|
||||
component, template);
|
||||
this.instantiationManager.fillWithDefaultProperties(component,
|
||||
template);
|
||||
} catch (Exception e) {
|
||||
LOG.warn("Could not apply templates to " + component.getName(),
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
||||
// Notify the listeners.
|
||||
if (!oldProject.equals(currentProject)) {
|
||||
messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED,
|
||||
oldProject, currentProject.clone(), "Edit Selection");
|
||||
projectFileManager.notifyFileChange();
|
||||
}
|
||||
messageDispatcher.dispatchMessage(EventType.REPAINT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteTemplate(String categoryName, String componentTypeName,
|
||||
String templateName) {
|
||||
|
||||
Reference in New Issue
Block a user