Ticket #2423: extract-template-autoactions.patch
File extract-template-autoactions.patch, 36.8 KB (added by deni, 15 years ago) |
---|
-
modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/CreateGroupForTemplate.java
### Eclipse Workspace Patch 1.0 #P sophie
1 package org.sophie2.main.app.commons.actions; 2 3 import org.sophie2.base.commons.util.ImmList; 4 import org.sophie2.base.commons.util.NaiveImmList; 5 import org.sophie2.base.model.book.interfaces.CompositeElement; 6 import org.sophie2.base.model.book.resource.r4.ElementGroupR4; 7 import org.sophie2.base.model.book.timelines.ActivationChannel; 8 import org.sophie2.base.model.resources.r4.ResourceRefR4; 9 import org.sophie2.base.model.resources.r4.changes.AutoAction; 10 import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 11 import org.sophie2.base.model.resources.r4.keys.Key; 12 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 13 import org.sophie2.base.model.resources.r4.resources.ResourceR4; 14 import org.sophie2.base.skins.Message; 15 16 /** 17 * An {@link AutoAction} that creates a new empty group by given template. 18 * 19 * @author deni 20 */ 21 public final class CreateGroupForTemplate extends AutoAction { 22 23 private final String groupTitle; 24 private final ResourceRefR4 groupRef; 25 private final ResourceRefR4 groupToTemplateRef; 26 private final NaiveImmList<TemplatedKey<?>> keys; 27 private final ImmList<ActivationChannel> parentElements; 28 29 /** 30 * Creates a new <code>CreateGroupForTemplate</code>. 31 * 32 * @param description 33 * The description of the new <code>AutoAction</code>. 34 * @param significant 35 * The significance of the new <code>AutoAction</code>. 36 * @param groupTitle 37 * The title of the group to create. 38 * @param groupRef 39 * A child reference to the group to create. 40 * @param groupToTemplateRef 41 * A reference from the group that will be created to the template it should use. 42 * @param keys 43 * The list of keys whose mode should be set to USE_TEMPLATE. 44 * @param parentElements 45 * The current children of the parent of the new group. 46 */ 47 public CreateGroupForTemplate(Message description, boolean significant, String groupTitle, 48 ResourceRefR4 groupRef, ResourceRefR4 groupToTemplateRef, 49 NaiveImmList<TemplatedKey<?>> keys, ImmList<ActivationChannel> parentElements) { 50 super(description, significant); 51 this.groupTitle = groupTitle; 52 this.groupRef = groupRef; 53 this.groupToTemplateRef = groupToTemplateRef; 54 this.keys = keys; 55 this.parentElements = parentElements; 56 } 57 58 @Override 59 public void performAuto() { 60 ResourceChanger ch = getChanger(); 61 ch.makeResource(this.groupRef); 62 ch.setRaw(CompositeElement.KEY_SUB_ELEMENTS, 63 this.parentElements.add(new ActivationChannel(this.groupRef))); 64 65 ResourceChanger groupCh = ch.getSub(this.groupRef); 66 groupCh.setRaw(ResourceR4.KEY_KIND, ElementGroupR4.KIND); 67 groupCh.setRaw(ResourceR4.KEY_TITLE, this.groupTitle); 68 69 groupCh.setRaw(ResourceR4.KEY_TEMPLATE, this.groupToTemplateRef); 70 for (Key<?> key : this.keys) { 71 groupCh.setRaw(key, null); 72 } 73 } 74 } 75 No newline at end of file -
modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/util/TemplateUtil.java
9 9 import org.sophie2.base.commons.util.ImmList; 10 10 import org.sophie2.base.commons.util.ImmMap; 11 11 import org.sophie2.base.commons.util.NaiveImmList; 12 import org.sophie2.base.commons.util.ImmMap.ImmEntry;13 12 import org.sophie2.base.model.book.AutoActionsUtil; 14 13 import org.sophie2.base.model.book.BookH; 15 14 import org.sophie2.base.model.book.ElementGroupH; … … 21 20 import org.sophie2.base.model.book.interfaces.MemberElement; 22 21 import org.sophie2.base.model.book.interfaces.ResourceFrame; 23 22 import org.sophie2.base.model.book.resource.r4.BookR4; 24 import org.sophie2.base.model.book.resource.r4.ElementGroupR4;25 23 import org.sophie2.base.model.book.timelines.ActivationChannel; 26 24 import org.sophie2.base.model.resources.r4.ResourceRefList; 27 25 import org.sophie2.base.model.resources.r4.ResourceRefR4; … … 34 32 import org.sophie2.base.model.resources.r4.resources.ResourceR4; 35 33 import org.sophie2.base.skins.Message; 36 34 import org.sophie2.base.visual.VisualElement; 35 import org.sophie2.main.app.commons.actions.ApplyFrameTemplateAction; 36 import org.sophie2.main.app.commons.actions.ApplyTemplateAction; 37 import org.sophie2.main.app.commons.actions.CreateFrameByTemplateAction; 38 import org.sophie2.main.app.commons.actions.CreateGroupForTemplate; 39 import org.sophie2.main.app.commons.actions.CreateTemplateAction; 37 40 import org.sophie2.main.app.commons.app.AppMainWindow; 38 41 import org.sophie2.main.app.commons.book.BookView; 39 42 import org.sophie2.main.app.commons.element.ElementView; … … 116 119 * @param isSign 117 120 * The significance of the change that creates it. 118 121 * @param createDefaultTemplate 119 * True if the template will 122 * True if the template will be used as a default one, false otherwise. 120 123 */ 121 124 public static void createTemplate(final String templateTitle, 122 125 final ImmMap<ResourceRefR4, ImmList<Key<?>>> resourcesKeys, … … 157 160 final ResourceRefList templates = book.get(templatesKey); 158 161 final ResourceRefR4 relativeRef = 159 162 ResourceRefR4.getRelativeRef(bookAccess.getRef(), ref); 160 final String kind = templatedElement.model().get().getKind();161 163 final ResourceRefList newTemplates = 162 164 templates.contains(templateRef) ? templates : templates.add(templateRef); 163 165 … … 182 184 * the unneeded sub-elements (also removes their activation channels from the 183 185 * corresponding parent's KEY_SUB_ELEMENTS key). 184 186 */ 185 new AutoAction(description, true) { 186 @Override 187 public void performAuto() { 188 getChanger().copyResource(relativeRef, templateRef); 189 getChanger().setRaw(templatesKey, newTemplates); 190 191 ResourceChanger subCh = getChanger().getSub(templateRef); 192 193 subCh.setRaw(ResourceR4.KEY_TITLE, templateTitle); 194 subCh.setRaw(ResourceR4.KEY_KIND, kind); 195 196 if (resourcesKeys != null) { 197 for (ImmEntry<ResourceRefR4, ImmList<Key<?>>> entry : resourcesKeys) { 198 ResourceChanger subChanger = 199 (entry.getKey().equals(ref) ? subCh : subCh.getSub (entry.getKey())); 200 201 for (Key<?> key : entry.getValue()) { 202 subChanger.setRaw(((TemplatedKey<?>) key).getApplyKey(), false); 203 } 204 } 205 } 206 207 if(createDefaultTemplate) { 208 getChanger().setRaw(defaultTemplateKey, templateRef); 209 } 210 211 for (ResourceRefR4 iterRef : finalRootsToDelete) { 212 ResourceRefR4 parent = iterRef.getParentRef(), parentToIterRef = ResourceRefR4.getRelativeRef(parent, iterRef); 213 ResourceChanger parentChanger = subCh.getSub(parent); 214 215 ImmList<ActivationChannel> channels = parentChanger.getRaw(CompositeElement.KEY_SUB_ELEMENTS); 216 217 for (ActivationChannel channel : channels) { 218 ResourceRefR4 elRes = channel.getElementResource(); 219 220 if (elRes.equals(parentToIterRef) ) { 221 channels = channels.remove(channel); 222 break; 223 } 224 } 225 parentChanger.setRaw(CompositeElement.KEY_SUB_ELEMENTS, channels); 226 227 subCh.removeResource(iterRef); 228 } 229 } 230 }.register(bookAccess); 187 new CreateTemplateAction(description, true, ref, createDefaultTemplate, resourcesKeys, 188 newTemplates, relativeRef, templateRef, templateTitle, templatesKey, 189 defaultTemplateKey, finalRootsToDelete).register(bookAccess); 231 190 } 232 191 233 192 /** … … 390 349 // template page properties other than page elements 391 350 final ImmList<TemplatedKey<?>> pageImmKeys = templateH.getApplicableTemplatedKeys(); 392 351 393 new AutoAction(Message.create(APPLY_PAGE_TEMPLATE), false) { 394 @Override 395 public void performAuto() { 396 ResourceChanger ch = getChanger(); 397 ch.setRaw(ResourceR4.KEY_TEMPLATE, pageToTemplateRef); 352 new ApplyTemplateAction(Message.create(APPLY_PAGE_TEMPLATE), false, 353 pageToTemplateRef, pageImmKeys).register(page.getAccess()); 398 354 399 for (TemplatedKey<?> key : pageImmKeys) {400 ch.setRaw(key, null);401 ch.setRaw(key.getLockKey(), false);402 }403 }404 }.register(page.getAccess());405 406 355 // template page elements 407 356 List<ResourceRefR4> elementsToCreate = list != null ? list : new ArrayList<ResourceRefR4>(); 408 357 Map<ResourceRefR4, ResourceRefR4> existingElelements = … … 446 395 final ResourceRefR4 groupToTemplateRef = 447 396 ResourceRefR4.getRelativeRef(groupAccess.getRef(), templateH.getRef()); 448 397 449 new AutoAction(Message.create(TEMPLATE_GROUP), false) { 450 451 @Override 452 public void performAuto() { 453 ResourceChanger ch = getChanger(); 454 ch.setRaw(ResourceR4.KEY_TEMPLATE, groupToTemplateRef); 455 for (Key<?> key : keys) { 456 ch.setRaw(key, null); 457 } 458 } 459 460 }.register(groupAccess); 398 new ApplyTemplateAction(Message.create(TEMPLATE_GROUP), false, groupToTemplateRef, 399 keys).register(groupAccess); 461 400 } 462 401 463 402 ResourceAccess groupAccess = parent.getAccess().open(nextParentRef, null); … … 489 428 ResourceRefR4.getRelativeRef(parent.getRef(), templateH.getRef())); 490 429 final NaiveImmList<TemplatedKey<?>> keys = templateH.getApplicableTemplatedKeys(); 491 430 431 new CreateGroupForTemplate(Message.create(CREATE_GROUP_FOR_TEMPLATE), false, groupTitle, 432 groupRef, groupToTemplateRef, keys, parentElements).register(parent.getAccess()); 492 433 493 new AutoAction(Message.create(CREATE_GROUP_FOR_TEMPLATE), false) {494 495 @Override496 public void performAuto() {497 ResourceChanger ch = getChanger();498 ch.makeResource(groupRef);499 ch.setRaw(CompositeElement.KEY_SUB_ELEMENTS,500 parentElements.add(new ActivationChannel(groupRef)));501 502 ResourceChanger groupCh = ch.getSub(groupRef);503 groupCh.setRaw(ResourceR4.KEY_KIND, ElementGroupR4.KIND);504 groupCh.setRaw(ResourceR4.KEY_TITLE, groupTitle);505 506 groupCh.setRaw(ResourceR4.KEY_TEMPLATE, groupToTemplateRef);507 for (Key<?> key : keys) {508 groupCh.setRaw(key, null);509 }510 }511 512 }.register(parent.getAccess());513 514 434 return groupRef; 515 435 } 516 436 … … 523 443 final String frameTitle = templateH.getTitle(); 524 444 525 445 final ResourceRefR4 parentRef = parent.getRef(); 446 final ResourceRefR4 frameToTemplateRef = ResourceRefR4.getRelativeRef( 447 parentRef.append(frameRef), templateRef); 526 448 final ImmList<ActivationChannel> elements = 527 449 CompositeElement.KEY_SUB_ELEMENTS.get(parent.getAccess()); 528 450 529 new AutoAction(Message.create(CREATE_FRAME_FOR_TEMPLATE), false) { 530 @Override 531 public void performAuto() { 532 ResourceChanger ch = getChanger(); 533 534 FrameH.create(ch, frameRef, frameTitle, elements, frameKind, 535 MemberElement.DEFAULT_LOCATION, FrameR4.DEFAULT_FRAME_SIZE); 536 537 ResourceRefR4 frameToTemplateRef = ResourceRefR4.getRelativeRef( 538 parentRef.append(frameRef), templateRef); 539 TemplateUtil.applyFrameTemplate(ch.getSub(frameRef), 540 immKeys.asList(), 541 frameToTemplateRef, false, frameKind, false); 542 } 543 }.register(parent.getAccess()); 451 new CreateFrameByTemplateAction(Message.create(CREATE_FRAME_FOR_TEMPLATE), false, 452 frameTitle, frameRef, immKeys, frameToTemplateRef, frameKind, elements, 453 null).register(parent.getAccess()); 544 454 } 545 455 546 456 private static void applyFrameTemplate(FrameH templateH, ElementH parent, ResourceRefR4 frameRef) { … … 552 462 553 463 final ResourceRefR4 targetToTemplateRef = 554 464 ResourceRefR4.getRelativeRef(frameRef, templateH.getRef()); 555 new AutoAction(Message.create(APPLYING_FRAME_TEMPLATE), false) { 556 557 @Override 558 public void performAuto() { 559 TemplateUtil.applyFrameTemplate(getChanger(), templatedKeys.asList(), 560 targetToTemplateRef, false, frameTemplateKind, false); 561 } 562 563 }.register(frameAccess); 465 466 new ApplyFrameTemplateAction(Message.create(APPLYING_FRAME_TEMPLATE), false, templatedKeys, 467 frameTemplateKind, targetToTemplateRef).register(frameAccess); 564 468 } 565 469 566 470 } -
modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/ApplyFrameTemplateHandler.java
9 9 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 10 10 import org.sophie2.base.model.resources.r4.resources.ResourceH; 11 11 import org.sophie2.base.skins.Message; 12 import org.sophie2.main.app.commons.actions.ApplyFrameTemplateAction; 12 13 import org.sophie2.main.app.commons.element.ElementDropHandler; 13 14 import org.sophie2.main.app.commons.frame.FrameView; 14 import org.sophie2.main.app.commons.util.TemplateUtil;15 15 import org.sophie2.main.dnd.TemplateRefData; 16 16 17 17 /** … … 60 60 final String templateKind = templateH.getKind(); 61 61 final NaiveImmList<TemplatedKey<?>> immKeys = templateH.getApplicableTemplatedKeys(); 62 62 63 new AutoAction(Message.create(FRAME_TEMPLATE), true) { 64 65 @Override 66 public void performAuto() { 67 TemplateUtil.applyFrameTemplate(getChanger(), immKeys.asList(), 68 templateRef, false, templateKind, false); 69 } 70 71 }.register(frameAccess); 63 new ApplyFrameTemplateAction(Message.create(FRAME_TEMPLATE), true, immKeys, templateKind, 64 templateRef).register(frameAccess); 72 65 } 73 66 74 67 /** -
modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/FrameTemplateLogic.java
11 11 import org.sophie2.base.model.book.frame.BoundMode; 12 12 import org.sophie2.base.model.book.frame.FrameR4; 13 13 import org.sophie2.base.model.book.resource.r4.BookR4; 14 import org.sophie2.base.model.resources.r4.ResourceRefList;15 14 import org.sophie2.base.model.resources.r4.ResourceRefR4; 16 15 import org.sophie2.base.model.resources.r4.changes.AutoAction; 17 16 import org.sophie2.base.model.resources.r4.resources.ResourceH; … … 31 30 import org.sophie2.main.app.commons.util.TemplateUtil; 32 31 import org.sophie2.main.dnd.TemplateRefData; 33 32 import org.sophie2.main.func.templates.TemplatePaletteUtil; 33 import org.sophie2.main.func.templates.actions.DeleteTemplateAction; 34 34 import org.sophie2.main.func.templates.frame.FrameTemplatesPalette.FrameTemplateItem; 35 35 36 36 /** … … 186 186 187 187 String frameTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 188 188 if (TemplatePaletteUtil.confirmDeletion(frameTitle, bookDocView.swingComponent().get())) { 189 new AutoAction(Message.create(DELETE_FRAME_TEMPLATE), true) { 189 new DeleteTemplateAction(Message.create(DELETE_FRAME_TEMPLATE), true, 190 relativeRef, BookR4.KEY_FRAME_TEMPLATES).register(bookDocView.getAccess()); 190 191 191 @Override192 public void performAuto() {193 ResourceRefList templates = getChanger().getRaw(BookR4.KEY_FRAME_TEMPLATES);194 templates = templates.remove(relativeRef);195 getChanger().setRaw(BookR4.KEY_FRAME_TEMPLATES, templates);196 }197 }.register(bookDocView.getAccess());198 199 192 return true; 200 193 } 201 194 return false; -
modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/CreateTemplateAction.java
1 package org.sophie2.main.app.commons.actions; 2 3 import org.sophie2.base.commons.util.ImmList; 4 import org.sophie2.base.commons.util.ImmMap; 5 import org.sophie2.base.commons.util.ImmMap.ImmEntry; 6 import org.sophie2.base.model.book.interfaces.CompositeElement; 7 import org.sophie2.base.model.book.resource.r4.BookR4; 8 import org.sophie2.base.model.book.timelines.ActivationChannel; 9 import org.sophie2.base.model.resources.r4.ResourceRefList; 10 import org.sophie2.base.model.resources.r4.ResourceRefR4; 11 import org.sophie2.base.model.resources.r4.changes.AutoAction; 12 import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 13 import org.sophie2.base.model.resources.r4.keys.Key; 14 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 15 import org.sophie2.base.model.resources.r4.resources.ResourceR4; 16 import org.sophie2.base.skins.Message; 17 18 /** 19 * An {@link AutoAction} that applies a creates a new page or frame template. 20 * 21 * @author astea 22 */ 23 public final class CreateTemplateAction extends AutoAction { 24 25 private final ResourceRefR4 ref; 26 private final boolean createDefaultTemplate; 27 private final ImmMap<ResourceRefR4, ImmList<Key<?>>> resourcesKeys; 28 private final ResourceRefList newTemplates; 29 private final ResourceRefR4 relativeRef; 30 private final ResourceRefR4 templateRef; 31 private final String templateTitle; 32 private final Key<ResourceRefList> templatesKey; 33 private final Key<ResourceRefR4> defaultTemplateKey; 34 private final ImmList<ResourceRefR4> finalRootsToDelete; 35 36 /** 37 * Creates a new <code>CreateTemplateAction</code>. 38 * 39 * @param description 40 * The description of the new <code>AutoAction</code>. 41 * @param significant 42 * The significance of the new <code>AutoAction</code>. 43 * @param ref 44 * An absolute reference to the resource from which the template will be created. 45 * @param createDefaultTemplate 46 * Whether the new template should be used as a default one. 47 * @param resourcesKeys 48 * A map describing which keys should be *excluded* from the template for which elements. 49 * @param newTemplates 50 * The new value of the <code>templatesKey<code>. It should contain 51 * <code>relativeRef</code>. 52 * @param relativeRef 53 * A relative reference to the resource from which the template will be created. 54 * @param templateRef 55 * A reference to the location where the new template should be created. 56 * @param templateTitle 57 * The title of the new template. 58 * @param templatesKey 59 * The key holding references to all templates of the appropriate kind in the book. 60 * For example, {@link BookR4#KEY_FRAME_TEMPLATES} or {@link BookR4#KEY_PAGE_TEMPLATES}. 61 * @param defaultTemplateKey 62 * The key that holds the default template of the appropriate kind. Will be used only if 63 * <code>createDefaultTemplate</code> is true. 64 * @param finalRootsToDelete 65 * List of references to resources that should be removed from the template 66 * (sub-elements that should not be included). 67 */ 68 public CreateTemplateAction(Message description, boolean significant, ResourceRefR4 ref, 69 boolean createDefaultTemplate, 70 ImmMap<ResourceRefR4, ImmList<Key<?>>> resourcesKeys, ResourceRefList newTemplates, 71 ResourceRefR4 relativeRef, ResourceRefR4 templateRef, 72 String templateTitle, Key<ResourceRefList> templatesKey, 73 Key<ResourceRefR4> defaultTemplateKey, ImmList<ResourceRefR4> finalRootsToDelete) { 74 super(description, significant); 75 this.ref = ref; 76 this.createDefaultTemplate = createDefaultTemplate; 77 this.resourcesKeys = resourcesKeys; 78 this.newTemplates = newTemplates; 79 this.relativeRef = relativeRef; 80 this.templateRef = templateRef; 81 this.templateTitle = templateTitle; 82 this.templatesKey = templatesKey; 83 this.defaultTemplateKey = defaultTemplateKey; 84 this.finalRootsToDelete = finalRootsToDelete; 85 } 86 87 @Override 88 public void performAuto() { 89 getChanger().copyResource(this.relativeRef, this.templateRef); 90 getChanger().setRaw(this.templatesKey, this.newTemplates); 91 92 ResourceChanger subCh = getChanger().getSub(this.templateRef); 93 94 subCh.setRaw(ResourceR4.KEY_TITLE, this.templateTitle); 95 96 if (this.resourcesKeys != null) { 97 for (ImmEntry<ResourceRefR4, ImmList<Key<?>>> entry : this.resourcesKeys) { 98 ResourceChanger subChanger = 99 (entry.getKey().equals(this.ref) ? subCh : subCh.getSub (entry.getKey())); 100 101 for (Key<?> key : entry.getValue()) { 102 subChanger.setRaw(((TemplatedKey<?>) key).getApplyKey(), false); 103 } 104 } 105 } 106 107 if(this.createDefaultTemplate) { 108 getChanger().setRaw(this.defaultTemplateKey, this.templateRef); 109 } 110 111 for (ResourceRefR4 iterRef : this.finalRootsToDelete) { 112 ResourceRefR4 parent = iterRef.getParentRef(), parentToIterRef = ResourceRefR4.getRelativeRef(parent, iterRef); 113 ResourceChanger parentChanger = subCh.getSub(parent); 114 115 ImmList<ActivationChannel> channels = parentChanger.getRaw(CompositeElement.KEY_SUB_ELEMENTS); 116 117 for (ActivationChannel channel : channels) { 118 ResourceRefR4 elRes = channel.getElementResource(); 119 120 if (elRes.equals(parentToIterRef) ) { 121 channels = channels.remove(channel); 122 break; 123 } 124 } 125 parentChanger.setRaw(CompositeElement.KEY_SUB_ELEMENTS, channels); 126 127 subCh.removeResource(iterRef); 128 } 129 } 130 } 131 No newline at end of file -
modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/ApplyTemplateAction.java
1 package org.sophie2.main.app.commons.actions; 2 3 import org.sophie2.base.commons.util.ImmList; 4 import org.sophie2.base.model.resources.r4.ResourceRefR4; 5 import org.sophie2.base.model.resources.r4.changes.AutoAction; 6 import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 7 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 8 import org.sophie2.base.model.resources.r4.resources.ResourceR4; 9 import org.sophie2.base.skins.Message; 10 11 /** 12 * An {@link AutoAction} that applies a template. 13 * 14 * @author deni 15 */ 16 public final class ApplyTemplateAction extends AutoAction { 17 18 private final ResourceRefR4 templateRef; 19 private final ImmList<TemplatedKey<?>> immKeys; 20 21 /** 22 * Creates a new <code>ApplyTemplateAction</code>. 23 * 24 * @param description 25 * The description of the new <code>AutoAction</code>. 26 * @param significant 27 * The significance of the new <code>AutoAction</code>. 28 * @param templateRef 29 * A reference to the template that should be applied. 30 * Should be relative from the resource to which it will be applied. 31 * @param immKeys 32 * The list of keys whose mode should be set to USE_TEMPLATE. 33 */ 34 public ApplyTemplateAction(Message description, boolean significant, 35 ResourceRefR4 templateRef, ImmList<TemplatedKey<?>> immKeys) { 36 super(description, significant); 37 this.templateRef = templateRef; 38 this.immKeys = immKeys; 39 } 40 41 /** 42 * Gets a reference to the template that should be applied. 43 * 44 * @return 45 * A reference to the template that should be applied. 46 */ 47 public ResourceRefR4 getTemplateRef() { 48 return this.templateRef; 49 } 50 51 /** 52 * Gets a list of keys whose mode should be set to USE_TEMPLATE. 53 * 54 * @return 55 * The list of keys whose mode should be set to USE_TEMPLATE. 56 */ 57 public ImmList<TemplatedKey<?>> getImmKeys() { 58 return this.immKeys; 59 } 60 61 @Override 62 public void performAuto() { 63 ResourceChanger ch = getChanger(); 64 ch.setRaw(ResourceR4.KEY_TEMPLATE, getTemplateRef()); 65 66 for (TemplatedKey<?> key : getImmKeys()) { 67 ch.setRaw(key, null); 68 ch.setRaw(key.getLockKey(), false); 69 } 70 } 71 } 72 No newline at end of file -
modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/CreateFrameByTemplateAction.java
1 package org.sophie2.main.app.commons.actions; 2 3 import org.sophie2.base.commons.util.ImmList; 4 import org.sophie2.base.commons.util.NaiveImmList; 5 import org.sophie2.base.commons.util.position.ImmPoint; 6 import org.sophie2.base.model.book.FrameH; 7 import org.sophie2.base.model.book.frame.FrameR4; 8 import org.sophie2.base.model.book.timelines.ActivationChannel; 9 import org.sophie2.base.model.resources.r4.ResourceRefR4; 10 import org.sophie2.base.model.resources.r4.changes.AutoAction; 11 import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 12 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 13 import org.sophie2.base.skins.Message; 14 import org.sophie2.main.app.commons.util.TemplateUtil; 15 16 /** 17 * An {@link AutoAction} that creates a new frame by given frame template. 18 * 19 * @author deni 20 */ 21 public final class CreateFrameByTemplateAction extends AutoAction { 22 23 private final String frameTitle; 24 private final ResourceRefR4 frameRef; 25 private final NaiveImmList<TemplatedKey<?>> immKeys; 26 private final ResourceRefR4 frameToTemplateRef; 27 private final String kind; 28 private final ImmList<ActivationChannel> elements; 29 private final ImmPoint pos; 30 31 /** 32 * Creates a new <code>CreateFrameByTemplateAction</code>. 33 * 34 * @param description 35 * The description of the new <code>AutoAction</code>. 36 * @param significant 37 * The significance of the new <code>AutoAction</code>. 38 * @param frameTitle 39 * The title of the new frame. 40 * @param frameRef 41 * The child reference of the frame that should be created. 42 * @param immKeys 43 * The list of keys whose mode should be set to USE_TEMPLATE. 44 * @param frameToTemplateRef 45 * A reference to the template from which a new frame should be created. 46 * Should be relative from the new frame. 47 * @param kind 48 * The kind of the frame template (respectively, of the new frame). 49 * @param elements 50 * The current children of group or page where the new frame will be created. 51 * @param pos 52 * The position of the new frame. Please note that if this argument is not null, 53 * it will be used even if the template defines a location value. 54 */ 55 public CreateFrameByTemplateAction(Message description, 56 boolean significant, String frameTitle, ResourceRefR4 frameRef, 57 NaiveImmList<TemplatedKey<?>> immKeys, 58 ResourceRefR4 frameToTemplateRef, String kind, 59 ImmList<ActivationChannel> elements, ImmPoint pos) { 60 super(description, significant); 61 this.frameTitle = frameTitle; 62 this.frameRef = frameRef; 63 this.immKeys = immKeys; 64 this.frameToTemplateRef = frameToTemplateRef; 65 this.kind = kind; 66 this.elements = elements; 67 this.pos = pos; 68 } 69 70 @Override 71 public void performAuto() { 72 ResourceChanger changer = getChanger(); 73 74 FrameH.create(changer, this.frameRef, this.frameTitle, this.elements, this.kind, 75 this.pos, FrameR4.DEFAULT_FRAME_SIZE); 76 77 boolean skipLocation = (this.pos != null); 78 TemplateUtil.applyFrameTemplate(changer.getSub(this.frameRef), 79 this.immKeys.asList(), this.frameToTemplateRef, skipLocation, this.kind, false); 80 } 81 } 82 No newline at end of file -
modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/actions/ApplyFrameTemplateAction.java
1 package org.sophie2.main.app.commons.actions; 2 3 import org.sophie2.base.commons.util.NaiveImmList; 4 import org.sophie2.base.model.resources.r4.ResourceRefR4; 5 import org.sophie2.base.model.resources.r4.changes.AutoAction; 6 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 7 import org.sophie2.base.skins.Message; 8 import org.sophie2.main.app.commons.util.TemplateUtil; 9 10 /** 11 * An {@link AutoAction} that applies a frame template. 12 * 13 * @author deni 14 */ 15 public final class ApplyFrameTemplateAction extends AutoAction { 16 17 private final NaiveImmList<TemplatedKey<?>> immKeys; 18 private final String templateKind; 19 private final ResourceRefR4 templateRef; 20 21 /** 22 * Creates a new <code>ApplyFrameTemplateAction</code>. 23 * 24 * @param description 25 * The description of the new <code>AutoAction</code>. 26 * @param significant 27 * The significance of the new <code>AutoAction</code>. 28 * @param immKeys 29 * The list of keys whose mode should be set to USE_TEMPLATE. 30 * @param templateKind 31 * The kind of the frame template. 32 * @param templateRef 33 * A reference to the frame template that should be applied. 34 * Should be relative from the frame to which it will be applied. 35 */ 36 public ApplyFrameTemplateAction(Message description, boolean significant, 37 NaiveImmList<TemplatedKey<?>> immKeys, 38 String templateKind, ResourceRefR4 templateRef) { 39 super(description, significant); 40 this.immKeys = immKeys; 41 this.templateKind = templateKind; 42 this.templateRef = templateRef; 43 } 44 45 @Override 46 public void performAuto() { 47 TemplateUtil.applyFrameTemplate(getChanger(), this.immKeys.asList(), 48 this.templateRef, false, this.templateKind, false); 49 } 50 } 51 No newline at end of file -
modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/actions/DeleteTemplateAction.java
1 package org.sophie2.main.func.templates.actions; 2 3 import org.sophie2.base.model.book.resource.r4.BookR4; 4 import org.sophie2.base.model.resources.r4.ResourceRefList; 5 import org.sophie2.base.model.resources.r4.ResourceRefR4; 6 import org.sophie2.base.model.resources.r4.changes.AutoAction; 7 import org.sophie2.base.model.resources.r4.keys.Key; 8 import org.sophie2.base.skins.Message; 9 10 /** 11 * An {@link AutoAction} that deletes a given page or frame template. 12 * 13 * @author deni 14 */ 15 public final class DeleteTemplateAction extends AutoAction { 16 17 private final ResourceRefR4 templateRef; 18 private Key<ResourceRefList> templateKey; 19 20 /** 21 * Creates a new <code>DeleteFrameTemplateAction</code>. 22 * 23 * @param description 24 * The description of the new <code>AutoAction</code>. 25 * @param significant 26 * The significance of the new <code>AutoAction</code>. 27 * @param templateRef 28 * A reference to the template to delete. 29 * @param templateKey 30 * The key holding references to all templates of the appropriate kind in the book. 31 * For example, {@link BookR4#KEY_FRAME_TEMPLATES} or {@link BookR4#KEY_PAGE_TEMPLATES}. 32 */ 33 public DeleteTemplateAction(Message description, boolean significant, 34 ResourceRefR4 templateRef, Key<ResourceRefList> templateKey) { 35 super(description, significant); 36 this.templateRef = templateRef; 37 this.templateKey = templateKey; 38 } 39 40 @Override 41 public void performAuto() { 42 ResourceRefList templates = getChanger().getRaw(BookR4.KEY_FRAME_TEMPLATES); 43 templates = templates.remove(this.templateRef); 44 getChanger().setRaw(this.templateKey, templates); 45 } 46 } 47 No newline at end of file -
modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/page/PageTemplateLogic.java
12 12 import org.sophie2.base.model.book.BookH; 13 13 import org.sophie2.base.model.book.frame.BoundMode; 14 14 import org.sophie2.base.model.book.resource.r4.BookR4; 15 import org.sophie2.base.model.resources.r4.ResourceRefList;16 15 import org.sophie2.base.model.resources.r4.ResourceRefR4; 17 16 import org.sophie2.base.model.resources.r4.changes.AutoAction; 18 17 import org.sophie2.base.model.resources.r4.resources.ResourceH; … … 37 36 import org.sophie2.main.app.layout.left.pages.PageStructurePalette.PageStructureItem; 38 37 import org.sophie2.main.dnd.TemplateRefData; 39 38 import org.sophie2.main.func.templates.TemplatePaletteUtil; 39 import org.sophie2.main.func.templates.actions.DeleteTemplateAction; 40 40 import org.sophie2.main.func.templates.frame.ApplyFrameTemplateHandler; 41 41 import org.sophie2.main.func.templates.page.PageTemplatesPalette.PageTemplateItem; 42 42 … … 323 323 String pageTitle = ResourceR4.KEY_TITLE.get(bookDocView.getAccess().open(template, null)); 324 324 325 325 if (TemplatePaletteUtil.confirmDeletion(pageTitle, bookDocView.swingComponent().get())) { 326 new AutoAction(Message.create(DELETE_PAGE_TEMPLATE), true) { 327 328 @Override 329 public void performAuto() { 330 ResourceRefList templates = getChanger().getRaw(BookR4.KEY_PAGE_TEMPLATES); 331 templates = templates.remove(relativeRef); 332 getChanger().setRaw(BookR4.KEY_PAGE_TEMPLATES, templates); 333 } 334 }.register(bookDocView.getAccess()); 326 new DeleteTemplateAction(Message.create(DELETE_PAGE_TEMPLATE), true, 327 relativeRef, BookR4.KEY_PAGE_TEMPLATES).register(bookDocView.getAccess()); 335 328 return true; 336 329 } 337 330 -
modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/CreateFrameByTemplateHandler.java
12 12 import org.sophie2.base.model.resources.r4.ResourceUtil; 13 13 import org.sophie2.base.model.resources.r4.access.ResourceAccess; 14 14 import org.sophie2.base.model.resources.r4.changes.AutoAction; 15 import org.sophie2.base.model.resources.r4.changes.ResourceChanger;16 15 import org.sophie2.base.model.resources.r4.keys.TemplatedKey; 17 16 import org.sophie2.base.model.resources.r4.resources.ResourceH; 18 17 import org.sophie2.base.model.resources.r4.resources.ResourceR4; 19 18 import org.sophie2.base.skins.Message; 19 import org.sophie2.main.app.commons.actions.CreateFrameByTemplateAction; 20 20 import org.sophie2.main.app.commons.element.ElementDropHandler; 21 21 import org.sophie2.main.app.commons.page.MainPageView; 22 import org.sophie2.main.app.commons.util.TemplateUtil;23 22 import org.sophie2.main.dnd.TemplateRefData; 24 23 25 24 /** … … 80 79 CompositeElement.KEY_SUB_ELEMENTS.get(parentAccess); 81 80 82 81 final ImmPoint pos = getPoint(); 83 new AutoAction(Message.create(CREATE_FRAME_FROM_TEMPLATE), true) { 84 @Override 85 public void performAuto() { 86 ResourceChanger changer = getChanger(); 82 new CreateFrameByTemplateAction(Message.create(CREATE_FRAME_FROM_TEMPLATE), true, frameTitle, frameRef, 83 immKeys, frameToTemplate, kind, elements, pos).register(parentAccess); 87 84 88 FrameH.create(changer, frameRef, frameTitle, elements, kind,89 pos, FrameR4.DEFAULT_FRAME_SIZE);90 91 TemplateUtil.applyFrameTemplate(changer.getSub(frameRef),92 immKeys.asList(), frameToTemplate, true, kind, false);93 }94 }.register(parentAccess);95 96 85 this.getView().getPwa().getSel().getEditScope().selectLastElement(); 97 86 } 98 87 }