Ticket #2310: pagereorder.patch

File pagereorder.patch, 5.2 KB (added by tanya, 15 years ago)
  • src/main/java/org/sophie2/main/app/layout/left/pages/PagePreviewPaletteLogic.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.app.layout
     
    66import org.sophie2.base.commons.util.position.ImmRect; 
    77import org.sophie2.base.dialogs.DialogManager; 
    88import org.sophie2.base.dnd.DndData; 
     9import org.sophie2.base.dnd.DndTransferable; 
    910import org.sophie2.base.dnd.SophieDragDropHandler; 
     11import org.sophie2.base.dnd.SophieTransferable; 
     12import org.sophie2.base.dnd.SophieDragDropHandler.DndExport; 
    1013import org.sophie2.base.dnd.SophieDragDropHandler.DndImport; 
    1114import org.sophie2.base.dnd.SophieDragDropHandler.DndPreImport; 
     15import org.sophie2.base.layout.model.ListPalette; 
    1216import org.sophie2.base.model.book.BookH; 
    1317import org.sophie2.base.model.book.PageH; 
     18import org.sophie2.base.model.resources.r4.ResourceRefList; 
    1419import org.sophie2.base.model.resources.r4.ResourceRefR4; 
     20import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     21import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    1522import org.sophie2.base.visual.BaseVisualElement; 
    1623import org.sophie2.core.mvc.EventFilterBuilder; 
    1724import org.sophie2.core.mvc.LogicR3; 
     
    3037import org.sophie2.main.app.layout.left.pages.PagePreviewPalette.PageItem; 
    3138import org.sophie2.main.dialogs.input.ConfirmDialogInput; 
    3239import org.sophie2.main.dnd.TemplateRefData; 
     40import org.sophie2.main.dnd.dnddata.ResourceRefData; 
     41import org.sophie2.main.dnd.transferables.ResourceTransferable; 
    3342 
    3443/** 
    3544 * Event handlers for the {@link PagePreviewPalette}. 
     
    164173                                                SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
    165174                                                DndPreImport.class); 
    166175 
    167                                 preImport.setImportable(TemplateRefData.class); 
     176                                preImport.setImportable(ResourceRefData.class, TemplateRefData.class); 
     177                        } 
     178                        return true; 
     179                } 
     180        }, 
     181         
     182        /** 
     183         * Handles dragging out a page from {@link PagePreviewPalette}. 
     184         */ 
     185        ON_DND_PAGE_EXPORT { 
     186 
     187                public void defineFilter(EventFilterBuilder filter) { 
     188                        filter.setSourceClass(PagePreviewPalette.class); 
     189                        filter.setEventId(SophieDragDropHandler.TransferEventIds.DND_EXPORT); 
     190                } 
     191 
     192                public boolean handle(EventR3 event) { 
     193                        Object firstItem = event.getSource(ListPalette.class).firstSelectedItem().get(); 
     194                        if (firstItem == null || !(firstItem instanceof PageItem)) { 
     195                                return false; 
    168196                        } 
     197                        ResourceH resource = ((PageItem) firstItem).pageView().get().model().get(); 
     198                         
     199                        SophieTransferable rt = new ResourceTransferable(resource); 
     200 
     201                        DndExport export = event.getEventParam( 
     202                                        SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
     203                                        DndExport.class); 
     204 
     205                        export.setTransferable(rt); 
     206                         
    169207                        return true; 
    170208                } 
     209                 
    171210        }, 
    172211         
    173212        /** 
     
    254293                         
    255294                        return false; 
    256295                } 
     296        }, 
     297         
     298        /** 
     299         * Handles dropping a page over the {@link PagePreviewPalette}. 
     300         * Reorders pages if the transferred object is a page and the page is from the same book. 
     301         */ 
     302        ON_DND_PAGE_REORDER { 
     303 
     304                public void defineFilter(EventFilterBuilder filter) { 
     305                        filter.setSourceClass(PagePreviewPalette.class); 
     306                        filter.setEventId(SophieDragDropHandler.TransferEventIds.DND_IMPORT); 
     307                } 
     308 
     309                public boolean handle(final EventR3 event) { 
     310                         
     311                        DndImport dndImport = event.getEventParam( 
     312                                        SophieDragDropHandler.TransferEventIds.TRANSACTION_PARAM_INDEX, 
     313                                        DndImport.class); 
     314                        DndTransferable transferable = dndImport.getTransferable(); 
     315                        ResourceRefData data = transferable.getDndData(ResourceRefData.class); 
     316                         
     317                        if (data == null) { 
     318                                return false; 
     319                        } 
     320                         
     321                        ImmPoint point = event.getEventParam( 
     322                                        SophieDragDropHandler.TransferEventIds.POINT_PARAM_INDEX, 
     323                                        ImmPoint.class); 
     324                         
     325                        PagePreviewPalette palette = event.getSource(PagePreviewPalette.class); 
     326                        final int dropIndex = palette.mainComponent().get().locationToIndex(point.toPoint()); 
     327                         
     328                        BookH book = AppViewUtil.getCurrentBook(palette); 
     329                        final int dragIndex = book.getIndexOf(data.getResourceRef()); 
     330                         
     331                        if (dragIndex == -1 || dropIndex == -1) { 
     332                                return false; 
     333                        } 
     334                         
     335                        final ResourceRefList pages = book.getPages(); 
     336                         
     337                        new AutoAction("Reorder Pages.", true) { 
     338 
     339                                @Override 
     340                                public void performAuto() { 
     341                                        BookH.movePage(getChanger(), pages, dragIndex, dropIndex); 
     342                                } 
     343                                 
     344                        }.register(book.getAccess()); 
     345                         
     346                        return true; 
     347                } 
    257348        }; 
    258349 
    259350        /** 
  • src/main/java/org/sophie2/main/app/layout/left/pages/PagePreviewPalette.java

     
    261261        @Override 
    262262        protected JComponent initHead() { 
    263263                SophieDragDropHandler.registerComponent(mainComponent().get(), 
    264                                 PagePreviewPalette.this, null, null, false, true); 
     264                                PagePreviewPalette.this, null, null, true, true); 
    265265                 
    266266                JPanel res = new JPanel(); 
    267267                res.setLayout(new BoxLayout(res, BoxLayout.X_AXIS));