Ticket #2314: scriptClosing.patch
File scriptClosing.patch, 4.5 KB (added by mira, 15 years ago) |
---|
-
src/main/java/org/sophie2/extra/func/scripting/logic/ScriptingLogic.java
### Eclipse Workspace Patch 1.0 #P org.sophie2.extra.func.scripting
7 7 import java.io.IOException; 8 8 import java.io.InputStreamReader; 9 9 import java.io.Reader; 10 import java.util.ArrayList; 11 import java.util.List; 10 12 11 13 import org.sophie2.base.dialogs.DialogManager; 14 import org.sophie2.base.layout.model.DocView; 12 15 import org.sophie2.base.menus.MenuItem; 13 16 import org.sophie2.base.model.resources.r4.ResourceRefR4; 14 17 import org.sophie2.base.model.resources.r4.access.ResourceAccess; … … 25 28 import org.sophie2.extra.func.scripting.view.ScriptResourcePreviewProvider.ScriptResourcePreview; 26 29 import org.sophie2.extra.func.scripting.view.ScriptResourcePreviewProvider.ScriptResourcePreview.OpenScriptButton; 27 30 import org.sophie2.main.app.commons.app.AppMainWindow; 31 import org.sophie2.main.app.commons.app.DocumentsLogic; 28 32 import org.sophie2.main.app.commons.book.BookDocView; 29 33 import org.sophie2.main.app.commons.util.AppViewUtil; 30 34 import org.sophie2.main.dialogs.input.DialogUtils; … … 228 232 229 233 return true; 230 234 } 235 }, 236 237 /** 238 * When a book is closed by the DocumentsLogic checks if there are any 239 * opened script doc views to be closed also. 240 */ 241 @SortKey("mmm-close-script-documents") 242 ON_CLOSE_BOOK { 243 244 public void defineFilter(EventFilterBuilder filter) { 245 filter.setSourceClass(DocumentsLogic.class); 246 filter.setEventId(DocumentsLogic.EventIds.BOOK_CLOSED); 247 filter.setTipClass(AppMainWindow.class); 248 } 249 250 public boolean handle(EventR3 event) { 251 ResourceRefR4 bookRef = event.getEventParam(0, ResourceRefR4.class); 252 AppMainWindow mainWindow = event.getTip(AppMainWindow.class); 253 254 List<DocView> closedDocs = new ArrayList<DocView>(); 255 DocView current = mainWindow.currentDocument().get(); 256 for (DocView docView : mainWindow.documents().get()) { 257 if (docView instanceof ScriptDocView) { 258 ScriptDocView scriptView = (ScriptDocView) docView; 259 ResourceAccess scriptAccess = scriptView.getAccess(); 260 ResourceRefR4 scriptRef = scriptAccess.getRef(); 261 if (scriptRef.getLocation().startsWith(bookRef.getLocation())) { 262 closedDocs.add(scriptView); 263 } 264 } 265 } 266 for (DocView toRemove : closedDocs) { 267 mainWindow.documents().get().remove(toRemove); 268 } 269 if (closedDocs.contains(current)) { 270 mainWindow.currentDocument().set(null); 271 } 272 273 return true; 274 } 231 275 }; 232 276 } -
src/main/java/org/sophie2/main/app/commons/app/DocumentsLogic.java
#P org.sophie2.main.app.commons
2 2 3 3 import org.sophie2.base.dialogs.DialogManager; 4 4 import org.sophie2.base.layout.impl.DefaultDocView; 5 import org.sophie2.base.model.resources.r4.ResourceRefR4; 6 import org.sophie2.base.model.resources.r4.access.ResourceAccess; 5 7 import org.sophie2.core.logging.SophieLog; 6 8 import org.sophie2.core.mvc.EventFilterBuilder; 9 import org.sophie2.core.mvc.EventParams; 10 import org.sophie2.core.mvc.LogicR3; 7 11 import org.sophie2.core.mvc.OperationDef; 8 12 import org.sophie2.core.mvc.SortKey; 9 13 import org.sophie2.core.mvc.events.EventR3; … … 112 116 assert mainWindow.documents().get().contains(docView) : "Document not in list?"; 113 117 mainWindow.documents().get().remove(docView); 114 118 mainWindow.currentDocument().set(null); 115 116 119 } 117 docView.getAccess().close(); 120 if (docView instanceof BookDocView) { 121 //We should close only the book accesses 122 ResourceAccess access = docView.getAccess(); 123 access.close(); 124 ResourceRefR4 bookRef = access.getRef(); 125 LogicR3.fire(this, null, mainWindow, event, EventIds.BOOK_CLOSED, bookRef); 126 } 118 127 } 119 128 120 129 return true; 121 130 } 131 122 132 }, 123 133 124 134 … … 141 151 } 142 152 143 153 }; 154 155 /** 156 * Notification of event triggered by action in this logic. 157 * 158 * @author mira 159 */ 160 public enum EventIds { 161 162 /** 163 * A book view has been closed. 164 */ 165 @EventParams({ResourceRefR4.class}) 166 BOOK_CLOSED; 167 168 } 144 169 }