Ticket #2301: copy-paste-files-to.patch

File copy-paste-files-to.patch, 7.2 KB (added by deni, 15 years ago)
  • modules/org.sophie2.main.func.resources/src/main/java/org/sophie2/main/func/resources/logic/ResourceImportLogic.java

    ### Eclipse Workspace Patch 1.0
    #P sophie
     
    1111 
    1212import org.sophie2.base.commons.util.position.ImmPoint; 
    1313import org.sophie2.base.dialogs.DialogManager; 
     14import org.sophie2.base.dnd.ClipboardManager; 
    1415import org.sophie2.base.dnd.DndTransferable; 
    1516import org.sophie2.base.dnd.SophieDragDropHandler; 
    1617import org.sophie2.base.dnd.SophieDragDropHandler.DndImport; 
     
    374375                        filter.setEventId(SophieDragDropHandler.TransferEventIds.DND_IMPORT); 
    375376                } 
    376377 
     378                @SuppressWarnings("synthetic-access") 
    377379                public boolean handle(EventR3 event) { 
    378380                         
    379381                        PageWorkArea pwa = event.getSource(PageWorkArea.class); 
     
    382384                                        DndImport.class); 
    383385                        ImmPoint pos = event.getEventParam( 
    384386                                        SophieDragDropHandler.TransferEventIds.POINT_PARAM_INDEX, ImmPoint.class); 
    385                          
    386                         BookH book = pwa.bookView().get().model().get(); 
    387                         ElementView parentView = pwa.getSel().getEditScope(); 
    388                         ElementH parent = parentView.model().get(); 
    389                          
     387                                                 
    390388                        FileListData transferable = dndImport.getTransferable().getDndData(FileListData.class); 
    391389                        if (transferable == null) { 
    392390                                return false; 
    393391                        } 
    394392                         
    395                         List<File> invalidFiles = new ArrayList<File>(); 
    396                         List<File> files = addArchived(transferable.getFiles()); 
    397                         for (final File file : files) { 
    398                                  
    399                                 ResourceImportProvider provider = 
    400                                         SimpleResourceImportProvider.getProvider(new ProviderMatcher() { 
     393                        importFilesInNewFrames(transferable, pwa, pos); 
     394                         
     395                        return true; 
     396                } 
     397        }, 
     398         
     399        /** 
     400         * Handles pasting one or multiple files in the current edit scope. 
     401         *  
     402         * @author deni 
     403         */ 
     404        @SortKey("eee-on-paste-file-list") 
     405        ON_PASTE_FILE { 
    401406 
    402                                                 @Override 
    403                                                 public boolean check(ResourceImportProvider curProvider) { 
    404                                                         return curProvider.getFileFilter() != null  
    405                                                                 && curProvider.getFileFilter().accept(file); 
    406                                                 } 
    407                                         }); 
    408                                  
    409                                 if (provider == null) { 
    410                                         invalidFiles.add(file); 
    411                                         continue; 
    412                                 } 
    413                                  
    414                                 // TODO: copied from ON_INSERT_FRAME... maybe move in a helper method 
    415                                 // May be bad... Think of a better way --meddle 2009-10-24  
    416                                 if (provider.getImportManager() instanceof SophieFormatImportManager) { 
    417                                         SophieFormatImportManager manager =  
    418                                                 (SophieFormatImportManager) provider.getImportManager(); 
    419                                         if (!manager.isInitialized()) { 
    420                                                 AppMainWindow mainWindow = AppViewUtil.findMainWindow(pwa); 
    421                                                 ResourceLocator locator = mainWindow.locator().get(); 
    422                                                 manager.initLocator(locator); 
    423                                         } 
    424                                 } 
    425                                  
    426                                 boolean inserted = ResourceImportUtil.dropFile(provider, book, parent, pos, file); 
    427                                 if (!inserted) { 
    428                                         invalidFiles.add(file); 
    429                                 } 
     407                public void defineFilter(EventFilterBuilder filter) { 
     408                        filter.setSourceClass(VisualElement.class); 
     409                        filter.setEventId(SophieDragDropHandler.TransferEventIds.PASTE); 
     410                } 
    430411 
    431                                 pos = pos.translate(50, 50); 
     412                @SuppressWarnings("synthetic-access") 
     413                public boolean handle(EventR3 event) { 
     414                         
     415                        VisualElement source = event.getSource(VisualElement.class); 
     416                        BookDocView docView = AppViewUtil.getCurrentBookDocView(source); 
     417                        if (docView == null) { 
     418                                return false; 
    432419                        } 
     420                        PageWorkArea pwa = docView.workArea().get(); 
     421         
     422                        ClipboardManager manager = ClipboardManager.get(); 
     423                        DndTransferable transferable = manager.getContents(); 
    433424                         
    434                         ResourceImportUtil.showInvalidInfo(invalidFiles); 
     425                        FileListData fileListData = transferable.getDndData(FileListData.class); 
     426                        if (fileListData == null) { 
     427                                return false; 
     428                        } 
    435429                         
     430                        importFilesInNewFrames(fileListData, pwa, null); 
     431                         
    436432                        return true; 
    437433                } 
    438434        }, 
     
    441437         * Handles drop of a resource over page work area. New event is constructed and fired depending on 
    442438         * the imported role of the resource transfered. 
    443439         */ 
    444         @SortKey("eee-on-drop-resource-revision") 
     440        @SortKey("fff-on-drop-resource-revision") 
    445441        ON_DROP_RESOURCE { 
    446442 
    447443                public void defineFilter(EventFilterBuilder filter) { 
     
    660656                return refs; 
    661657        } 
    662658         
     659        private static void importFilesInNewFrames(FileListData fileListData, PageWorkArea pwa, 
     660                        ImmPoint pos) { 
     661                 
     662                BookH book = pwa.bookView().get().model().get(); 
     663                ElementView parentView = pwa.getSel().getEditScope(); 
     664                ElementH parent = parentView.model().get(); 
     665                 
     666                ImmPoint currentPos = pos; 
     667                if (currentPos == null) { 
     668                        currentPos = parent.selectInsertLocation(); 
     669                } 
     670                 
     671                List<File> invalidFiles = new ArrayList<File>(); 
     672                List<File> files = addArchived(fileListData.getFiles()); 
     673                for (final File file : files) { 
     674                         
     675                        ResourceImportProvider provider = 
     676                                SimpleResourceImportProvider.getProvider(new ProviderMatcher() { 
     677 
     678                                        @Override 
     679                                        public boolean check(ResourceImportProvider curProvider) { 
     680                                                return curProvider.getFileFilter() != null  
     681                                                        && curProvider.getFileFilter().accept(file); 
     682                                        } 
     683                                }); 
     684                         
     685                        if (provider == null) { 
     686                                invalidFiles.add(file); 
     687                                continue; 
     688                        } 
     689                         
     690                        // TODO: copied from ON_INSERT_FRAME... maybe move in a helper method 
     691                        // May be bad... Think of a better way --meddle 2009-10-24  
     692                        if (provider.getImportManager() instanceof SophieFormatImportManager) { 
     693                                SophieFormatImportManager manager =  
     694                                        (SophieFormatImportManager) provider.getImportManager(); 
     695                                if (!manager.isInitialized()) { 
     696                                        AppMainWindow mainWindow = AppViewUtil.findMainWindow(pwa); 
     697                                        ResourceLocator locator = mainWindow.locator().get(); 
     698                                        manager.initLocator(locator); 
     699                                } 
     700                        } 
     701                         
     702                        boolean inserted = ResourceImportUtil.dropFile(provider, book, parent, currentPos, file); 
     703                        if (!inserted) { 
     704                                invalidFiles.add(file); 
     705                        } 
     706 
     707                        currentPos = currentPos.translate(ElementH.X_OFFSET, ElementH.Y_OFFSET); 
     708                } 
     709                 
     710                ResourceImportUtil.showInvalidInfo(invalidFiles); 
     711        } 
     712         
    663713} 
  • modules/org.sophie2.base.model.book/src/main/java/org/sophie2/base/model/book/ElementH.java

     
    5353        public ElementH(ResourceAccess access) { 
    5454                super(access); 
    5555        } 
     56         
     57        /** 
     58         * The X-offset to use when trying to choose location for a new child  
     59         * (so that it is not too near to another one). 
     60         */ 
     61        public static final int X_OFFSET = 50; 
     62         
     63        /** 
     64         * The Y-offset to use when trying to choose location for a new child  
     65         * (so that it is not too near to another one). 
     66         */ 
     67        public static final int Y_OFFSET = 50; 
    5668 
    5769        /** 
    5870         * Calculates the bound area of this element in the selected 
     
    462474                                } 
    463475                        } 
    464476                        if (duplicate) { 
    465                                 location = location.translate(50, 50); 
     477                                location = location.translate(X_OFFSET, Y_OFFSET); 
    466478                        } 
    467479                } 
    468480                return location;