Ticket #2436: 2436-frame-template-editing-de.patch

File 2436-frame-template-editing-de.patch, 51.5 KB (added by deni, 15 years ago)
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/file/SaveBookItem.java

    ### Eclipse Workspace Patch 1.0
    #P sophie
     
    99import org.sophie2.base.skins.SkinElementId; 
    1010import org.sophie2.base.visual.skins.ElementPartCreator; 
    1111import org.sophie2.base.visual.skins.SkinPartDef; 
    12 import org.sophie2.main.app.commons.book.BookView; 
     12import org.sophie2.main.app.commons.book.BaseBookView; 
     13import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1314import org.sophie2.main.app.commons.util.AppViewUtil; 
    1415import org.sophie2.main.app.menus.AppMenuItem; 
    1516 
     
    3233 
    3334        @Override 
    3435        protected boolean computeEnabled() { 
    35                 BookView bv = AppViewUtil.getCurrentBookView(this);  
     36                BaseBookView bv = AppViewUtil.getCurrentBaseBookView(this);  
    3637 
    3738                return  bv != null && !bv.getViewOptions().isPreviewMode()   
    38                                 && bv.getViewOptions().isShowControls()  
     39                                && bv.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0  
    3940                                && !(bv.getAccess() instanceof DelegatingServerAccess);  
    4041        } 
    4142} 
  • modules/org.sophie2.main.func.timelines/src/main/java/org/sophie2/main/func/timelines/hud/TimelinesHudButton.java

     
    99import org.sophie2.base.visual.skins.RelatedChildren; 
    1010import org.sophie2.base.visual.skins.SkinPartDef; 
    1111import org.sophie2.base.visual.skins.VisualElementDef; 
    12 import org.sophie2.main.app.commons.frame.FrameView; 
     12import org.sophie2.main.app.commons.book.BookViewOptions; 
     13import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1314import org.sophie2.main.app.commons.page.PageWorkArea; 
    1415import org.sophie2.main.app.halos.common.AppHaloUtil; 
    1516import org.sophie2.main.app.halos.shared.MainHaloMenu; 
     
    4546         
    4647        @Override 
    4748        protected boolean computeVisible() { 
    48                 PageWorkArea pwa =  AppHaloUtil.getWorkArea(this); 
    49                 if (pwa == null) { 
    50                         return false; 
    51                 } 
    52  
    53                 FrameView frameView = AppHaloUtil.getSingleFrameView(this); 
    54                 if (frameView != null) { 
    55                         // A frame is selected 
     49                if (AppHaloUtil.getSingleFrameView(this) != null) { 
    5650                        return true; 
    5751                } 
    58  
    59                 if (0 == pwa.getSel().getSelected().size()) { 
    60                         // Nothing is selected 
    61                         if (pwa.getRootPageView() != null) { 
    62                                 // There is root page view. 
    63                                 return true; 
    64                         } 
     52                 
     53                PageWorkArea pwa = AppHaloUtil.getWorkArea(this);                
     54                if (pwa == null || pwa.getRootPageView() == null || pwa.getSel().getSelected().size() != 0) { 
     55                        return false; 
    6556                } 
    66                 // selected element view is not frame view. 
    67                 return false; 
     57                 
     58                BookViewOptions viewOptions = pwa.bookView().get().getViewOptions(); 
     59                return viewOptions.getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0;        
    6860        } 
    6961 
    7062} 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/FrameTemplateLogic.java

     
    2222import org.sophie2.core.mvc.OperationDef; 
    2323import org.sophie2.core.mvc.events.EventR3; 
    2424import org.sophie2.main.app.commons.book.BaseBookDocView; 
     25import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    2526import org.sophie2.main.app.commons.element.ElementView; 
    2627import org.sophie2.main.app.commons.frame.FrameView; 
    2728import org.sophie2.main.app.commons.page.MainPageView; 
     
    102103                         
    103104                        PageWorkArea workArea = event.getSource(PageWorkArea.class); 
    104105                        MainPageView pageView = workArea.getRootPageView().mainPartView().get(); 
    105                         if (pageView.getViewOptions().isPreviewMode()) { 
     106                        if (pageView.getViewOptions().isPreviewMode() 
     107                                        || pageView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.PAGE) < 0) { 
    106108                                return false; 
    107109                        } 
    108110                         
  • modules/org.sophie2.main.app.halos/src/main/java/org/sophie2/main/app/halos/page/resize/PageResizeHaloMenu.java

     
    99import org.sophie2.base.visual.skins.RelatedChildren; 
    1010import org.sophie2.base.visual.skins.VisualElementDef; 
    1111import org.sophie2.main.app.commons.app.AppMainWindow; 
    12 import org.sophie2.main.app.commons.book.BookView; 
     12import org.sophie2.main.app.commons.book.BaseBookView; 
    1313import org.sophie2.main.app.commons.book.BookViewOptions; 
     14import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1415import org.sophie2.main.app.commons.page.PageWorkArea; 
    1516import org.sophie2.main.app.commons.util.AppViewUtil; 
    1617import org.sophie2.main.app.halos.common.AppHaloUtil; 
     
    4546        @Override 
    4647        protected boolean computeVisible() { 
    4748 
    48                 BookView bookView = AppViewUtil.getCurrentBookView(this); 
     49                BaseBookView bookView = AppViewUtil.getCurrentBaseBookView(this); 
    4950                if (bookView == null) { 
    5051                        return false; 
    5152                } 
    5253                 
    5354                BookViewOptions options = bookView.getViewOptions(); 
    54                 if (options.isPreviewMode() || !options.isShowControls()) { 
    55                         return false; 
    56                 } 
    57                 return true; 
     55                return !options.isPreviewMode()  
     56                        && options.getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0; 
    5857        } 
    5958} 
  • modules/org.sophie2.main.app.halos/src/main/java/org/sophie2/main/app/halos/shared/AddTemplateHaloButton.java

     
    3535import org.sophie2.core.mvc.OperationDef; 
    3636import org.sophie2.core.mvc.events.EventR3; 
    3737import org.sophie2.main.app.commons.book.BaseBookView; 
     38import org.sophie2.main.app.commons.book.BookViewOptions; 
     39import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    3840import org.sophie2.main.app.commons.dialogs.CreateTemplateDialog; 
    3941import org.sophie2.main.app.commons.dialogs.TemplateInfo; 
    4042import org.sophie2.main.app.commons.element.ElementView; 
     
    7981        } 
    8082 
    8183        @Override 
    82         protected boolean computeVisible() { 
    83                  
    84                 if (AppHaloUtil.getSingleFrameView(this) != null) { 
    85                         return true; 
    86                 } 
    87                  
     84        protected boolean computeVisible() {             
    8885                PageWorkArea pwa = AppHaloUtil.getWorkArea(this); 
    8986                if (pwa == null || pwa.getRootPageView() == null) { 
    9087                        return false; 
    9188                } 
    9289                 
     90                FrameView frameView = AppHaloUtil.getSingleFrameView(this); 
     91                BookH book = pwa.bookView().get().model().get(); 
     92                if (frameView != null && !TemplateUtil.isFrameTemplate(book, frameView.model().get().getRef())) { 
     93                        return true; 
     94                } 
     95                 
     96                // the model might be the page 
    9397                if (pwa.getSel().getSelected().size() != 0) { 
    9498                        return false; 
     99                }                
     100                if (TemplateUtil.isPageTemplate(book, pwa.getRootPageView().model().get().getRef())) { 
     101                        return false; 
    95102                } 
    96                          
    97                 return !TemplateUtil.isPageTemplate(pwa.bookView().get().model().get(),  
    98                                 pwa.getRootPageView().model().get().getRef());           
     103                 
     104                BookViewOptions viewOptions = pwa.bookView().get().getViewOptions(); 
     105                return viewOptions.getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0; 
    99106        } 
    100107 
    101108        @Override 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/book/SaveBookAsTemplateItem.java

     
    55import org.sophie2.base.skins.SkinElementId; 
    66import org.sophie2.base.visual.skins.ElementPartCreator; 
    77import org.sophie2.base.visual.skins.SkinPartDef; 
     8import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    89import org.sophie2.main.app.menus.AppMenuItem; 
    910 
    1011/** 
     
    2526 
    2627 
    2728        @Override 
    28         protected boolean computeEnabled() { 
     29        protected boolean computeEnabled() {             
    2930                return getCurrentBookDocView() != null  
    3031                        && !getCurrentBookDocView().bookView().get().getViewOptions().isPreviewMode() 
    31                         && getCurrentBookDocView().bookView().get().getViewOptions().isShowControls();  
     32                        && getCurrentBookDocView().bookView().get().getViewOptions().getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0;  
    3233        } 
    3334} 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/book/BaseBookDocView.java

     
    232232 
    233233                                modelSwing.setLayout(new BorderLayout()); 
    234234 
    235                                 if (bookView().get().getViewOptions().isShowControls()) { 
     235                                if (bookView().get().getViewOptions().isShowViewControls()) { 
    236236                                        modelSwing.add(viewOptionsScrollPane().get(), BorderLayout.NORTH); 
    237237                                        modelSwing.add(workAreaPane().get(), BorderLayout.CENTER); 
    238238                                } else { 
     
    270270 
    271271                        @Override 
    272272                        protected void setup(JScrollPane res) { 
    273                                 if (bookView().get().getViewOptions().isShowControls()) { 
     273                                if (bookView().get().getViewOptions().isShowViewControls()) { 
    274274                                        res.setViewportView(workArea().get().swingComponent().get()); 
    275275                                } 
    276276                                res.validate(); 
  • modules/org.sophie2.main.app.halos/src/main/java/org/sophie2/main/app/halos/shared/MainHaloMenu.java

     
    8888                // we are not in preview mode. 
    8989                if (pwa.getSel().getSelected().size() == 0) { 
    9090                        // nothing is selected 
    91                         if (!viewOptions.isShowControls()) { 
     91                        if (!viewOptions.isShowViewControls()) { 
    9292                                // show controls view option is off. 
    9393                                return false; 
    9494                        } 
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/file/SaveBookAsTemplateItem.java

     
    55import org.sophie2.base.skins.SkinElementId; 
    66import org.sophie2.base.visual.skins.ElementPartCreator; 
    77import org.sophie2.base.visual.skins.SkinPartDef; 
    8 import org.sophie2.main.app.commons.book.BookView; 
     8import org.sophie2.main.app.commons.book.BaseBookView; 
     9import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    910import org.sophie2.main.app.commons.util.AppViewUtil; 
    1011import org.sophie2.main.app.menus.AppMenuItem; 
    1112 
     
    2829 
    2930        @Override 
    3031        protected boolean computeEnabled() { 
    31                 BookView bookView = AppViewUtil.getCurrentBookView(this); 
     32                BaseBookView bookView = AppViewUtil.getCurrentBaseBookView(this); 
    3233                return bookView != null && !bookView.getViewOptions().isPreviewMode() 
    33                         && bookView.getViewOptions().isShowControls();  
     34                        && bookView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0;  
    3435        } 
    3536} 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/page/PageTemplatesPalette.java

     
    2727import org.sophie2.core.prolib.interfaces.Prop; 
    2828import org.sophie2.main.app.commons.app.AppMainWindow; 
    2929import org.sophie2.main.app.commons.book.BaseBookDocView; 
     30import org.sophie2.main.app.commons.book.BookViewOptions; 
    3031import org.sophie2.main.app.commons.book.SinglePageBookDocView; 
     32import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    3133import org.sophie2.main.app.commons.util.AppViewUtil; 
    3234 
    3335/** 
     
    223225 
    224226                                SinglePageBookDocView window =  
    225227                                        AppViewUtil.getView(mainWindow, newAccess, SinglePageBookDocView.class); 
     228                                window.bookView().get().setViewOptions( 
     229                                                new BookViewOptions(1.0f, false, true, false, true, BookEditLevel.PAGE)); 
    226230                                window.initPageRef(bookToTemplateRef); 
     231                                window.initDeletePageOnClose(false); 
    227232                                mainWindow.documents().add(window); 
    228233                                mainWindow.currentDocument().set(window); 
    229234 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/app/DocumentsLogic.java

     
    44import org.sophie2.base.layout.impl.DefaultDocView; 
    55import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    66import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
     7import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     8import org.sophie2.base.skins.Message; 
    79import org.sophie2.core.logging.SophieLog; 
    810import org.sophie2.core.modularity.SortKey; 
    911import org.sophie2.core.mvc.EventFilterBuilder; 
     
    1214import org.sophie2.core.mvc.OperationDef; 
    1315import org.sophie2.core.mvc.events.EventR3; 
    1416import org.sophie2.main.app.commons.book.BookDocView; 
     17import org.sophie2.main.app.commons.book.SinglePageBookDocView; 
    1518import org.sophie2.main.app.commons.util.AppViewUtil; 
    1619import org.sophie2.main.app.commons.util.SaveDocUtil; 
    1720import org.sophie2.main.dialogs.input.ConfirmDialogInput; 
     
    6265                        return true; 
    6366                } 
    6467        }, 
     68         
     69        /** 
     70         * If necessary, deletes the temporary page shown by a {@link SinglePageBookDocView} 
     71         * before closing it. 
     72         */ 
     73        @SortKey("ooo-delete-page-on-document-close") 
     74        ON_CLOSE_SINGLE_PAGE_BOOK_DOC_VIEW { 
    6575 
     76                public void defineFilter(EventFilterBuilder filter) { 
     77                        filter.setSourceClass(SinglePageBookDocView.class); 
     78                        filter.setEventId(DefaultDocView.EventIds.CLOSE); 
     79                } 
     80 
     81                public boolean handle(EventR3 event) { 
     82                         
     83                        SinglePageBookDocView window = event.getSource(SinglePageBookDocView.class); 
     84                        if (window.deletePageOnClose().get()) { 
     85                                 
     86                                final ResourceRefR4 pageRef = window.getPageRef(); 
     87                                System.out.println(pageRef);                     
     88                                 
     89                                new AutoAction(Message.create("aaa!"), true) { 
     90 
     91                                        @Override 
     92                                        public void performAuto() { 
     93                                                getChanger().removeResource(pageRef); 
     94                                        } 
     95                                         
     96                                }.register(window.model().get().getAccess()); 
     97                        } 
     98 
     99                        return false; 
     100                }                
     101        }, 
     102 
    66103        /** 
    67104         * Handles a user request to close the document window. Asks for 
    68105         * confirmation before closing. 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/element/ElementLogic.java

     
    4444import org.sophie2.main.app.commons.app.AppMainWindow; 
    4545import org.sophie2.main.app.commons.book.BaseBookDocView; 
    4646import org.sophie2.main.app.commons.book.BaseBookView; 
     47import org.sophie2.main.app.commons.book.BookViewOptions; 
     48import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    4749import org.sophie2.main.app.commons.frame.FrameView; 
    4850import org.sophie2.main.app.commons.page.PageWorkArea; 
    4951import org.sophie2.main.app.commons.page.PwaSelector; 
     
    148150                        if (docView == null) { 
    149151                                return false; 
    150152                        } 
     153                         
     154                        BookViewOptions viewOptions = docView.bookView().get().getViewOptions(); 
     155                        if (viewOptions.isPreviewMode() 
     156                                        || viewOptions.getBookEditLevel().compareTo(BookEditLevel.PAGE) < 0) { 
     157                                return false; 
     158                        } 
     159                         
    151160                        PageWorkArea workArea = docView.workArea().get(); 
    152161                         
    153162                        ElementView parentView = workArea.getSel().getEditScope(); 
     
    222231                                                parentCh.setRaw(CompositeElement.KEY_SUB_ELEMENTS, newChannels); 
    223232                                        } 
    224233                                }.register(book.getAccess()); 
     234                                 
     235                                return true; 
    225236                        } 
    226237                         
    227238                        return false; 
     
    305316 
    306317        private static void handleCutOrCopy(VisualElement source, Operation operation) { 
    307318                BaseBookDocView docView = AppViewUtil.getCurrentBookDocView(source); 
    308                 if (docView == null || docView.bookView().get().getViewOptions().isPreviewMode()) { 
     319                if (docView == null || docView.bookView().get().getViewOptions().isPreviewMode() 
     320                                || docView.bookView().get().getViewOptions().getBookEditLevel().compareTo( 
     321                                                BookEditLevel.PAGE) < 0) { 
    309322                        return; 
    310323                } 
    311324                PageWorkArea workArea = docView.workArea().get(); 
  • modules/org.sophie2.main.app.halos/src/main/java/org/sophie2/main/app/halos/frame/FrameRemoveHaloButton.java

     
    99import org.sophie2.base.visual.skins.ElementPartCreator; 
    1010import org.sophie2.base.visual.skins.SkinPartDef; 
    1111import org.sophie2.base.visual.skins.VisualElementDef; 
     12import org.sophie2.main.app.commons.book.BaseBookView; 
     13import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
     14import org.sophie2.main.app.commons.util.AppViewUtil; 
    1215import org.sophie2.main.app.halos.common.AppHaloUtil; 
    1316import org.sophie2.main.app.halos.shared.MainHaloMenu; 
    1417 
     
    3639 
    3740        @Override 
    3841        protected boolean computeVisible() { 
    39                 return AppHaloUtil.getSingleFrameView(this) != null; 
     42                if (AppHaloUtil.getSingleFrameView(this) == null) { 
     43                        return false; 
     44                } 
     45                 
     46                BaseBookView bookView = AppViewUtil.getCurrentBaseBookView(this); 
     47                return bookView != null 
     48                        && bookView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0; 
    4049        } 
    4150 
    4251        @Override 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/book/SinglePageBookDocView.java

     
    88import org.sophie2.base.model.resources.r4.changes.AutoAction; 
    99import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    1010import org.sophie2.base.skins.Message; 
     11import org.sophie2.core.prolib.interfaces.Prop; 
    1112import org.sophie2.main.app.commons.app.AppMainWindow; 
    1213import org.sophie2.main.app.commons.util.AppViewUtil; 
    1314 
     
    4849                SinglePageBookView view = new SinglePageBookView(getAccess(), viewOptions); 
    4950                getBean().init(bookView(), view);                
    5051        } 
     52         
     53        /** 
     54         * Whether the page should be deleted on closing the window.  
     55         * This might be necessary if a temporary page was created in order to show some 
     56         * page elements (for example, frame templates). 
     57         *  
     58         * @return 
     59         *              The property. 
     60         */ 
     61        public Prop<Boolean> deletePageOnClose() { 
     62                return getBean().makeFinalProp("deletePageOnClose", Boolean.class); 
     63        } 
     64         
     65        /** 
     66         * Initializes the option whether to delete the page on closing the window. 
     67         *  
     68         * @param deletePageOnClose 
     69         *              Whether to delete the page on closing the window. 
     70         */ 
     71        public void initDeletePageOnClose(boolean deletePageOnClose) { 
     72                getBean().init(deletePageOnClose(), deletePageOnClose); 
     73        } 
    5174 
    5275        /** 
    5376         * Initializes the page that should be displayed. 
     
    5982                ((SinglePageBookView)bookView().get()).initPageRef(pageRef); 
    6083        } 
    6184         
     85        /** 
     86         * Gets a reference to the page that should be displayed. 
     87         *  
     88         * @return 
     89         *              A reference to the page that should be displayed. 
     90         */ 
     91        public ResourceRefR4 getPageRef() { 
     92                return ((SinglePageBookView)bookView().get()).pageRef().get(); 
     93        } 
     94         
    6295        @Override 
    6396        protected String computeTitle() { 
    6497                if (model() != null) { 
     
    83116                SinglePageBookDocView newView = new SinglePageBookDocView(clone.getAccess(),  
    84117                                BookViewOptions.DEFAULT_READER); 
    85118                ResourceRefR4 pageRef = ((SinglePageBookView) bookView().get()).pageRef().get(); 
     119                newView.initDeletePageOnClose(false); 
    86120                newView.initPageRef(pageRef); 
    87121                 
    88122                PageH page = ((SinglePageBookView) newView.bookView().get()).page().get(); 
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/insert/InsertMenu.java

     
    77import org.sophie2.base.visual.skins.SkinPartDef; 
    88import org.sophie2.main.app.commons.book.BaseBookView; 
    99import org.sophie2.main.app.commons.book.BookView; 
     10import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1011import org.sophie2.main.app.menus.AppMenu; 
    1112 
    1213/** 
     
    3940         */ 
    4041        // TODO: Why is this method here ??? 
    4142        public static boolean isEditable(BaseBookView bookWindow) { 
    42                 return bookWindow != null && !bookWindow.getViewOptions().isPreviewMode(); 
     43                return bookWindow != null && !bookWindow.getViewOptions().isPreviewMode() 
     44                        && bookWindow.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0; 
    4345        }        
    4446} 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/MainFuncTemplatesModule.java

     
    6767                SimpleOperation.fillExtensions(res, CompositeTemplateLogic.class); 
    6868                 
    6969                SimpleOperation.fillExtensions(res, PageTemplatesPalette.PaletteLogic.class); 
     70                SimpleOperation.fillExtensions(res, FrameTemplatesPalette.PaletteLogic.class); 
    7071                 
    7172                res.add(new SimpleSophieExtension<Dialog>(Dialog.class, 
    7273                                new ApplyPageTemplateDialog())); 
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/file/SaveBookAsItem.java

     
    99import org.sophie2.base.skins.SkinElementId; 
    1010import org.sophie2.base.visual.skins.ElementPartCreator; 
    1111import org.sophie2.base.visual.skins.SkinPartDef; 
    12 import org.sophie2.main.app.commons.book.BookView; 
     12import org.sophie2.main.app.commons.book.BaseBookView; 
     13import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1314import org.sophie2.main.app.commons.util.AppViewUtil; 
    1415import org.sophie2.main.app.menus.AppMenuItem; 
    1516 
     
    3334 
    3435        @Override 
    3536        protected boolean computeEnabled() { 
    36                 BookView bookView = AppViewUtil.getCurrentBookView(this); 
     37                BaseBookView bookView = AppViewUtil.getCurrentBaseBookView(this); 
    3738                return bookView != null && !bookView.getViewOptions().isPreviewMode() 
    38                         && bookView.getViewOptions().isShowControls(); 
     39                        && bookView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0; 
    3940        } 
    4041} 
  • modules/org.sophie2.main.func.links/src/main/java/org/sophie2/main/func/links/ElementLinksHaloButton.java

     
    11package org.sophie2.main.func.links; 
    22 
    3 import java.util.List; 
    4  
    53import org.sophie2.base.commons.skin.IconId; 
    64import org.sophie2.base.commons.skin.IconsSet; 
    75import org.sophie2.base.commons.util.ImageUtil; 
     
    119import org.sophie2.base.visual.skins.RelatedChildren; 
    1210import org.sophie2.base.visual.skins.SkinPartDef; 
    1311import org.sophie2.base.visual.skins.VisualElementDef; 
    14 import org.sophie2.main.app.commons.element.ElementView; 
     12import org.sophie2.main.app.commons.book.BookViewOptions; 
     13import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1514import org.sophie2.main.app.commons.page.PageWorkArea; 
    1615import org.sophie2.main.app.halos.common.AppHaloUtil; 
    1716import org.sophie2.main.app.halos.shared.MainHaloMenu; 
     
    4241 
    4342        @Override 
    4443        protected boolean computeVisible() { 
    45                 PageWorkArea pwa = AppHaloUtil.getWorkArea(this); 
     44                if (AppHaloUtil.getSingleFrameView(this) != null) { 
     45                        return true; 
     46                } 
    4647                 
    47                 if (pwa == null) { 
     48                PageWorkArea pwa = AppHaloUtil.getWorkArea(this);                
     49                if (pwa == null || pwa.getRootPageView() == null || pwa.getSel().getSelected().size() != 0) { 
    4850                        return false; 
    4951                } 
    50                                  
    51                 List<ElementView> selected = pwa.getSel().getSelected(); 
    52                 return ((AppHaloUtil.getSingleFrameView(this) != null) 
    53                                         || selected.size() == 0); 
     52                 
     53                BookViewOptions viewOptions = pwa.bookView().get().getViewOptions(); 
     54                return viewOptions.getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0;        
    5455        } 
    5556 
    5657        @Override 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/frame/FrameTemplatesPalette.java

     
    99import org.sophie2.base.dnd.SophieDragDropHandler; 
    1010import org.sophie2.base.layout.model.ListPalette; 
    1111import org.sophie2.base.layout.model.ListPaletteItem; 
     12import org.sophie2.base.model.book.BookH; 
    1213import org.sophie2.base.model.book.FrameH; 
     14import org.sophie2.base.model.book.PageH; 
     15import org.sophie2.base.model.book.interfaces.CompositeElement; 
     16import org.sophie2.base.model.book.resource.r4.PageR4; 
     17import org.sophie2.base.model.book.timelines.ActivationChannel; 
    1318import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    1419import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
     20import org.sophie2.base.model.resources.r4.changes.AutoAction; 
     21import org.sophie2.base.model.resources.r4.changes.ResourceChanger; 
    1522import org.sophie2.base.model.resources.r4.resources.ResourceH; 
     23import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
     24import org.sophie2.base.skins.Message; 
    1625import org.sophie2.base.skins.SkinElementId; 
    1726import org.sophie2.base.visual.BaseVisualElement; 
    1827import org.sophie2.base.visual.skins.ElementPartCreator; 
    1928import org.sophie2.base.visual.skins.SkinPartDef; 
     29import org.sophie2.core.mvc.EventFilterBuilder; 
    2030import org.sophie2.core.mvc.EventParams; 
    2131import org.sophie2.core.mvc.LogicR3; 
     32import org.sophie2.core.mvc.OperationDef; 
     33import org.sophie2.core.mvc.events.EventR3; 
    2234import org.sophie2.core.prolib.impl.AutoProperty; 
    2335import org.sophie2.core.prolib.interfaces.Prop; 
     36import org.sophie2.main.app.commons.app.AppMainWindow; 
    2437import org.sophie2.main.app.commons.book.BaseBookDocView; 
     38import org.sophie2.main.app.commons.book.BookViewOptions; 
     39import org.sophie2.main.app.commons.book.SinglePageBookDocView; 
     40import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    2541import org.sophie2.main.app.commons.util.AppViewUtil; 
    2642 
     43 
    2744/** 
    2845 * Frames templates palette. Used to contain frame templates which could be 
    2946 * applied to a frame by double clicking on an item in the list. 
     
    103120 
    104121                @Override 
    105122                public void doubleClicked() { 
    106                         LogicR3.fire(FrameTemplatesPalette.this, null, null, null, FrameTemplatesPalette.EventIds.APPLY_FRAME_TEMPLATE); 
    107                 } 
     123                        LogicR3.fire(this, FrameTemplatesPalette.this, 
     124                                        null, null, FrameTemplatesPalette.EventIds.OPEN_FRAME_TEMPLATE);                } 
    108125 
    109126                @Override 
    110127                public void keyPressed(KeyEvent e) { 
     
    171188                 * Deletes a frame template. 
    172189                 */ 
    173190                @EventParams( {}) 
    174                 DELETE_FRAME_TEMPLATE; 
     191                DELETE_FRAME_TEMPLATE, 
     192                 
     193                /** 
     194                 * Opens the selected frame template for editing in its own window. 
     195                 */ 
     196                @EventParams({}) 
     197                OPEN_FRAME_TEMPLATE; 
    175198        } 
     199         
     200        /** 
     201         * Logic connected to {@link FrameTemplatesPalette}. 
     202         *  
     203         * @author deni 
     204         */ 
     205        public enum PaletteLogic implements OperationDef { 
     206                 
     207                /** 
     208                 * Opens a frame template for editing in its own window. 
     209                 */ 
     210                ON_OPEN_FRAME_TEMPLATE { 
     211 
     212                        public void defineFilter(EventFilterBuilder filter) { 
     213                                filter.setSourceClass(FrameTemplateItem.class); 
     214                                filter.setEventId(EventIds.OPEN_FRAME_TEMPLATE);                                 
     215                        } 
     216 
     217                        public boolean handle(EventR3 event) { 
     218                                                                 
     219                                FrameTemplatesPalette palette = event.getContext(FrameTemplatesPalette.class);           
     220                                BaseBookDocView bdw = AppViewUtil.getCurrentBookDocView(palette); 
     221                                if (bdw.bookView().get().getViewOptions().isPreviewMode()) { 
     222                                        return false; 
     223                                } 
     224                                BookH book = bdw.model().get(); 
     225                                AppMainWindow mainWindow = AppViewUtil.findMainWindow(palette); 
     226                                 
     227                                FrameTemplateItem source = event.getSource(FrameTemplateItem.class); 
     228                                FrameH templateH = source.frame().get(); 
     229                                 
     230                                final ResourceRefR4 pageRef = ResourceRefR4.generateRandomSub(PageH.NAME_PREFIX); 
     231                                final String pageTitle = templateH.getTitle(); 
     232                                 
     233                                ResourceRefR4 pageToFrameRef = ResourceRefR4.getRelativeRef( 
     234                                                book.getRef().append(pageRef), templateH.getRef()); 
     235                                final ImmList<ActivationChannel> subelements =  
     236                                        ImmTreeList.create(new ActivationChannel(pageToFrameRef)); 
     237                                 
     238                                ResourceAccess newAccess = book.getAccess().open(ResourceRefR4.CURRENT_REF, 
     239                                                book.getAccess().getAccessOptions().modifyViewId()); 
     240                                 
     241                                new AutoAction(Message.create("New page"), false) { 
     242 
     243                                        @Override 
     244                                        public void performAuto() { 
     245                                                ResourceChanger bookChanger = getChanger();                                              
     246                                                bookChanger.makeResource(pageRef); 
     247                                                 
     248                                                ResourceChanger pageChanger = bookChanger.getSub(pageRef); 
     249                                                // TODO: different kind 
     250                                                pageChanger.setRaw(ResourceR4.KEY_KIND, PageR4.KIND); 
     251                                                pageChanger.setRaw(ResourceR4.KEY_TITLE, pageTitle); 
     252                                                pageChanger.setRaw(CompositeElement.KEY_SUB_ELEMENTS, subelements); 
     253                                        } 
     254 
     255                                }.register(newAccess); 
     256 
     257                                SinglePageBookDocView window = new SinglePageBookDocView(newAccess); 
     258                                window.bookView().get().setViewOptions( 
     259                                                new BookViewOptions(1.0f, false, true, false, true, BookEditLevel.FRAME)); 
     260                                window.initPageRef(pageRef); 
     261                                window.initDeletePageOnClose(true); 
     262                                mainWindow.documents().add(window); 
     263                                mainWindow.currentDocument().set(window); 
     264 
     265                                return true; 
     266                        } 
     267                } 
     268        } 
    176269} 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/MainAppModule.java

     
    1313import org.sophie2.base.model.book.resource.r4.PageExtraR4; 
    1414import org.sophie2.base.model.book.resource.r4.PageR4; 
    1515import org.sophie2.base.model.resources.r4.resources.ResourceH; 
     16import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    1617import org.sophie2.base.persistence.persister.Persister; 
    1718import org.sophie2.base.visual.AutoVisualProvider; 
    1819import org.sophie2.base.visual.SimpleVisualProvider; 
     
    6061import org.sophie2.main.app.commons.frame.FrameView; 
    6162import org.sophie2.main.app.commons.links.LinkAttachmentPersister; 
    6263import org.sophie2.main.app.commons.links.LinkProcessorLogic; 
     64import org.sophie2.main.app.commons.page.DummyPageR4; 
    6365import org.sophie2.main.app.commons.page.ExtraPageView; 
    6466import org.sophie2.main.app.commons.page.MainPageView; 
    6567import org.sophie2.main.app.commons.page.PageWorkArea; 
     
    238240                        res.add(new SimpleSophieExtension<Persister>(Persister.class, 
    239241                                        new LinkAttachmentPersister())); 
    240242                        } 
     243                         
     244                        ResourceR4.registerAsExtension(res, DummyPageR4.class); 
    241245        } 
    242246} 
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/file/BookPropertiesItem.java

     
    55import org.sophie2.base.skins.SkinElementId; 
    66import org.sophie2.base.visual.skins.ElementPartCreator; 
    77import org.sophie2.base.visual.skins.SkinPartDef; 
    8 import org.sophie2.main.app.commons.book.BookView; 
     8import org.sophie2.main.app.commons.book.BaseBookView; 
     9import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    910import org.sophie2.main.app.commons.util.AppViewUtil; 
    1011import org.sophie2.main.app.menus.AppMenuItem; 
    1112 
     
    2829         
    2930        @Override 
    3031        protected boolean computeEnabled() { 
    31                 BookView bookView = AppViewUtil.getCurrentBookView(this); 
     32                BaseBookView bookView = AppViewUtil.getCurrentBaseBookView(this); 
    3233                return bookView != null && !bookView.getViewOptions().isPreviewMode() 
    33                         && bookView.getViewOptions().isShowControls(); 
     34                        && bookView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0; 
    3435        } 
    3536} 
  • modules/org.sophie2.main.app.layout/src/main/java/org/sophie2/main/app/layout/left/pages/PagePreviewPalette.java

     
    4646import org.sophie2.main.app.commons.book.BaseBookDocView; 
    4747import org.sophie2.main.app.commons.book.BookDocView; 
    4848import org.sophie2.main.app.commons.book.BookView; 
     49import org.sophie2.main.app.commons.book.BookViewOptions; 
     50import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    4951import org.sophie2.main.app.commons.element.ElementView; 
    5052import org.sophie2.main.app.commons.page.RootPageView; 
    5153import org.sophie2.main.app.commons.util.AppViewUtil; 
     
    590592        static boolean shouldShowButtons(VisualElement button) { 
    591593                 
    592594                BaseBookDocView docView = AppViewUtil.getCurrentBookDocView(button); 
     595                if (docView == null || docView.bookView().get() == null) { 
     596                        return false; 
     597                } 
     598                BookViewOptions viewOptions = docView.bookView().get().getViewOptions(); 
    593599                 
    594                 return (docView != null   
    595                                 && !docView.bookView().get().getViewOptions().isPreviewMode()  
    596                                 && docView.bookView().get().getViewOptions().isShowControls());  
     600                return !viewOptions.isPreviewMode()  
     601                                && viewOptions.getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0;  
    597602        } 
    598603         
    599604        /** 
  • modules/org.sophie2.main.func.resources/src/main/java/org/sophie2/main/func/resources/logic/ResourceImportLogic.java

     
    4242import org.sophie2.main.app.commons.book.BaseBookDocView; 
    4343import org.sophie2.main.app.commons.book.BookView; 
    4444import org.sophie2.main.app.commons.book.BookViewOptions; 
     45import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    4546import org.sophie2.main.app.commons.element.ElementView; 
    4647import org.sophie2.main.app.commons.frame.FrameView; 
    4748import org.sophie2.main.app.commons.page.MainPageView; 
     
    204205 
    205206                        if (bookDocView != null) { 
    206207                                BookViewOptions viewOptions = bookDocView.bookView().get().getViewOptions(); 
    207                                 if (!viewOptions.isPreviewMode()) { 
     208                                if (!viewOptions.isPreviewMode()  
     209                                                && viewOptions.getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0) { 
    208210 
    209211                                        DndTransferable transferable = event.getEventParam( 
    210212                                                        ImportEventIds.DND_TRANSFERABLE_PARAM_INDEX, 
     
    342344                public boolean handle(EventR3 event) { 
    343345                        PageWorkArea pwa = event.getSource(PageWorkArea.class); 
    344346                        MainPageView view = pwa.getRootPageView().mainPartView().get(); 
    345                         if (view.getViewOptions().isPreviewMode()) { 
     347                        if (view.getViewOptions().isPreviewMode() 
     348                                        || view.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.PAGE) < 0) { 
    346349                                return false; 
    347350                        } 
    348351                         
  • modules/org.sophie2.extra.comment/src/test/java/org/sophie2/extra/comment/logic/CommentLogicTest.java

     
    4747import org.sophie2.main.app.commons.book.BookDocView; 
    4848import org.sophie2.main.app.commons.book.BookView; 
    4949import org.sophie2.main.app.commons.book.BookViewOptions; 
     50import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    5051import org.sophie2.main.app.commons.book.panels.PreviewModePanel; 
    5152import org.sophie2.main.app.commons.testing.AppTestBase; 
    5253import org.sophie2.main.app.menus.MainAppMenusModule; 
     
    6768 
    6869                ResourceAccess bookAccess = makeBookAccess(); 
    6970                BookDocView window = new BookDocView(bookAccess, new BookViewOptions(1, true, false, false, 
    70                                 true)); 
     71                                true, BookEditLevel.BOOK)); 
    7172                getAppMainWindow().documents().add(window); 
    7273                getAppMainWindow().currentDocument().set(window); 
    7374        } 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/page/PageTemplateLogic.java

     
    2424import org.sophie2.core.mvc.events.EventR3; 
    2525import org.sophie2.main.app.commons.book.BaseBookDocView; 
    2626import org.sophie2.main.app.commons.book.BaseBookView; 
     27import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    2728import org.sophie2.main.app.commons.element.ElementView; 
    2829import org.sophie2.main.app.commons.frame.FrameView; 
    2930import org.sophie2.main.app.commons.page.MainPageView; 
     
    6465                                        DndPreImport.class); 
    6566                         
    6667                        RootPageView pageView = event.getSource(RootPageView.class); 
    67                         if (pageView.getViewOptions().isPreviewMode()) { 
     68                        if (pageView.getViewOptions().isPreviewMode()  
     69                                        || pageView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.PAGE) < 0) { 
    6870                                return false; 
    6971                        } 
    7072                         
  • modules/org.sophie2.main.app.halos/src/main/java/org/sophie2/main/app/halos/frame/RightSideHaloMenu.java

     
    44import org.sophie2.base.visual.skins.RelatedChildren; 
    55import org.sophie2.base.visual.skins.VisualElementDef; 
    66import org.sophie2.main.app.commons.app.AppMainWindow; 
     7import org.sophie2.main.app.commons.book.BookViewOptions; 
     8import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    79import org.sophie2.main.app.commons.page.PageWorkArea; 
    810import org.sophie2.main.app.halos.common.AppHaloUtil; 
    911import org.sophie2.main.app.halos.shared.SelectionHaloMenu; 
     
    2527 
    2628        @Override 
    2729        protected boolean computeVisible() { 
     30                if (AppHaloUtil.getSingleFrameView(this) == null) { 
     31                        return false; 
     32                } 
     33                 
    2834                PageWorkArea pwa = AppHaloUtil.getWorkArea(this); 
    29  
    30                 if (pwa == null 
    31                                 || pwa.bookView().get() == null 
    32                                 || pwa.bookView().get().getViewOptions().isPreviewMode() 
    33                                 || (pwa.getSel().getSelected().size() == 0 && !pwa.bookView().get() 
    34                                                 .getViewOptions().isShowControls())) { 
     35                if (pwa == null || pwa.bookView().get() == null) { 
    3536                        return false; 
    36                 } 
    37  
    38                 return true; 
     37                }                
     38                BookViewOptions viewOptions = pwa.bookView().get().getViewOptions(); 
     39                return !viewOptions.isPreviewMode() 
     40                        && viewOptions.getBookEditLevel().compareTo(BookEditLevel.PAGE) >= 0; 
    3941        } 
    4042 
    4143} 
  • modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/book/BookViewOptions.java

     
    1212 * </ul> 
    1313 */ 
    1414@Immutable 
    15 public class BookViewOptions { 
     15public class BookViewOptions {   
    1616         
    17          
    1817        private final float zoom; 
    1918        private final boolean previewMode; 
    2019        private final boolean outlineFrames; 
    2120        private final boolean outlineConnections; 
    22         private final boolean showControls; 
     21        private final boolean showViewControls;  
     22        private final BookEditLevel bookEditLevel; 
    2323         
    2424        /** 
    2525         * The default book view options that should be used in reader mode. 
    2626         */ 
    2727        public static final BookViewOptions DEFAULT_READER =  
    28                 new BookViewOptions(1.0f, true, false, false, true); 
     28                new BookViewOptions(1.0f, true, false, false, true, BookEditLevel.BOOK); 
    2929         
    3030        /** 
    3131         * The default book view options that should be used in author mode. 
    3232         */ 
    3333        public static final BookViewOptions DEFAULT_AUTHOR =  
    34                 new BookViewOptions(1.0f, false, true, false, true); 
     34                new BookViewOptions(1.0f, false, true, false, true, BookEditLevel.BOOK); 
    3535         
    3636        /** 
    3737         * The default book view options that should be used for the desktop book. 
    3838         */ 
    3939        public static final BookViewOptions DEFAULT_DESKTOP =  
    40                 new BookViewOptions(1.0f, false, true, false, false); 
    41  
     40                new BookViewOptions(1.0f, false, true, false, false, BookEditLevel.PAGE); 
     41         
    4242        /** 
    4343         * Creates a new <code>BookViewOptions</code> object by the given 
    4444         * parameters. 
     
    5353         *              Whether the connections between frames should be outlined.  
    5454         * @param showControls 
    5555         *              Whether book controls should be shown.  
     56         * @param bookEditLevel 
     57         *              The book edit level.  
    5658         */              
    5759        public BookViewOptions(float zoom, boolean previewMode, boolean outlineFrames, 
    58                         boolean outlineConnections, boolean showControls) { 
     60                        boolean outlineConnections, boolean showControls, BookEditLevel bookEditLevel) { 
    5961                super(); 
    6062                this.zoom = zoom; 
    6163                this.previewMode = previewMode; 
    6264                this.outlineFrames = outlineFrames; 
    6365                this.outlineConnections = outlineConnections; 
    64                 this.showControls = showControls; 
     66                this.showViewControls = showControls; 
     67                this.bookEditLevel = bookEditLevel; 
    6568        } 
    66  
     69         
    6770        /** 
    6871         * Gets the zoom level. 
    6972         *  
     
    107110         
    108111         
    109112        /** 
    110          * Retrieves whether the controls of the corresponding {@link BookView} 
    111          * are visible. 
     113         * Retrieves whether the view controls of the corresponding {@link BookView} 
     114         * are visible. Currently they are in the {@link BookPanel}. 
    112115         *  
    113116         * @return 
    114117         *                      Whether the controls of the view are shown. 
    115118         */ 
    116         public boolean isShowControls() { 
    117                 return this.showControls; 
     119        public boolean isShowViewControls() { 
     120                return this.showViewControls; 
    118121        } 
     122         
     123        /** 
     124         * Retrieves the book edit level. 
     125         *  
     126         * @return 
     127         *                      The book edit level. 
     128         */ 
     129        public BookEditLevel getBookEditLevel() { 
     130                return this.bookEditLevel; 
     131        } 
    119132 
    120133        /** 
    121134         * Returns a <code>BookViewOptions</code> object which has the same 
     
    134147                        return this; 
    135148                } 
    136149                return new BookViewOptions(newZoom, this.previewMode, this.outlineFrames, 
    137                                 this.outlineConnections, this.showControls); 
     150                                this.outlineConnections, this.showViewControls, this.bookEditLevel); 
    138151        } 
    139152 
    140153        /** 
     
    154167                        return this; 
    155168                } 
    156169                return new BookViewOptions(this.zoom, this.previewMode, outlineFrames, 
    157                                 this.outlineConnections, this.showControls); 
     170                                this.outlineConnections, this.showViewControls, this.bookEditLevel); 
    158171        } 
    159172 
    160173        /** 
     
    175188                        return this; 
    176189                } 
    177190                return new BookViewOptions(this.zoom, this.previewMode, this.outlineFrames, 
    178                                 outlineConnections, this.showControls); 
     191                                outlineConnections, this.showViewControls, this.bookEditLevel); 
    179192        } 
    180193         
    181194        /** 
     
    188201         *                      The modified options. 
    189202         */ 
    190203        public BookViewOptions modifyShowControls(boolean controlsShown) { 
    191                 if (this.showControls == controlsShown) { 
     204                if (this.showViewControls == controlsShown) { 
    192205                        return this; 
    193206                }  
    194                 return new BookViewOptions(this.zoom, this.previewMode, 
    195                                         this.outlineFrames, this.outlineConnections, controlsShown); 
     207                return new BookViewOptions(this.zoom, this.previewMode, this.outlineFrames, 
     208                                this.outlineConnections, controlsShown, this.bookEditLevel); 
    196209                 
    197210        } 
     211         
     212        /** 
     213         * Creates new <code>BookViewOptions</code> copy of this, but 
     214         * with <var>bookEditLevel</var> as the passed ones. 
     215         *  
     216         * @param bookEditLevel 
     217         *                      The value of <var>bookEditLevel</var> of the new options.  
     218         * @return 
     219         *                      The modified options. 
     220         */ 
     221        @SuppressWarnings("hiding") 
     222        public BookViewOptions modifyBookEditLevel(BookEditLevel bookEditLevel) { 
     223                if (this.bookEditLevel == bookEditLevel) { 
     224                        return this; 
     225                }  
     226                return new BookViewOptions(this.zoom, this.previewMode, this.outlineFrames, 
     227                                this.outlineConnections, this.showViewControls, bookEditLevel); 
     228                 
     229        } 
    198230 
    199231        @Override 
    200232        public int hashCode() { 
     
    203235                result = prime * result + (this.outlineConnections ? 1231 : 1237); 
    204236                result = prime * result + (this.outlineFrames ? 1231 : 1237); 
    205237                result = prime * result + (this.previewMode ? 1231 : 1237); 
    206                 result = prime * result + (this.showControls ? 1231 : 1237); 
     238                result = prime * result + (this.showViewControls ? 1231 : 1237); 
    207239                result = prime * result + Float.floatToIntBits(this.zoom); 
     240                result = prime * result + this.bookEditLevel.hashCode(); 
    208241                return result; 
    209242        } 
    210  
    211         @Override 
    212         public boolean equals(Object obj) { 
    213                 if (this == obj) { 
    214                         return true; 
    215                 } 
    216                 if (obj == null) { 
    217                         return false; 
    218                 } 
    219                 if (getClass() != obj.getClass()) { 
    220                         return false; 
    221                 } 
    222                 BookViewOptions other = (BookViewOptions) obj; 
     243         
     244        /** 
     245         * Defines the edit level of a {@link BookView}. Can be used to determine 
     246         * whether some controls are visible or enabled. 
     247         *  
     248         * @author deni 
     249         */ 
     250        public static enum BookEditLevel { 
    223251                 
    224                 return this.outlineConnections == other.outlineConnections  
    225                                 && this.outlineFrames == other.outlineFrames 
    226                                 && this.previewMode == other.previewMode 
    227                                 && this.showControls == other.showControls 
    228                                 && Float.floatToIntBits(this.zoom) == Float.floatToIntBits(other.zoom); 
     252                // The definition order is important. 
    229253                 
     254                /** 
     255                 * Only a single frame can be edited. 
     256                 */ 
     257                FRAME, 
    230258                 
    231         }        
     259                /** 
     260                 * A single page (including all its sub-elements) can be edited. 
     261                 */ 
     262                PAGE, 
     263                 
     264                /** 
     265                 * The whole book can be edited. 
     266                 */ 
     267                BOOK; 
     268        } 
    232269} 
     270 No newline at end of file 
  • modules/org.sophie2.main.func.servers/src/main/java/org/sophie2/main/func/servers/view/SaveBookOnServerItem.java

     
    99import org.sophie2.base.skins.SkinElementId; 
    1010import org.sophie2.base.visual.skins.ElementPartCreator; 
    1111import org.sophie2.base.visual.skins.SkinPartDef; 
    12 import org.sophie2.main.app.commons.book.BookView; 
     12import org.sophie2.main.app.commons.book.BaseBookView; 
     13import org.sophie2.main.app.commons.book.BookViewOptions.BookEditLevel; 
    1314import org.sophie2.main.app.commons.util.AppViewUtil; 
    1415import org.sophie2.main.app.menus.AppMenuItem; 
    1516 
     
    3334 
    3435        @Override 
    3536        protected boolean computeEnabled() { 
    36                 BookView bookView = AppViewUtil.getCurrentBookView(this); 
     37                BaseBookView bookView = AppViewUtil.getCurrentBaseBookView(this); 
    3738                return bookView != null && !bookView.getViewOptions().isPreviewMode() 
    38                         && bookView.getViewOptions().isShowControls();  
     39                        && bookView.getViewOptions().getBookEditLevel().compareTo(BookEditLevel.BOOK) >= 0;  
    3940        } 
    4041} 
  • modules/org.sophie2.main.app.halos/src/main/java/org/sophie2/main/app/halos/frame/MainTitleBarHalo.java

     
    191191                        protected PageH compute() { 
    192192                                PageH res = null; 
    193193                                PageWorkArea pwa = workArea().get(); 
    194                                 if (pwa != null && pwa.getSel().getSelected().size() > 0) { 
     194                                if (pwa != null && pwa.getRootPageView() != null  
     195                                                && pwa.getSel().getSelected().size() > 0) { 
    195196                                        res = pwa.getRootPageView().model().get(); 
    196197                                } 
    197198                                return res; 
     
    332333                                        new AutoAction(Message.create(SET_LOCATION), false) { 
    333334                                                @Override 
    334335                                                public void performAuto() { 
    335                                                         ResourceChanger subChanger = getChanger().getSub(frameRef); 
    336  
    337                                                         subChanger.setRaw(MemberElement.KEY_LOCATION, oldChanel 
    338                                                                         .setValue(time, newValue)); 
     336                                                        ResourceChanger changer = getChanger(); 
     337                                                        changer.setRaw(MemberElement.KEY_LOCATION,  
     338                                                                        oldChanel.setValue(time, newValue)); 
    339339                                                } 
    340                                         }.register(pageAccess); 
     340                                        }.register(frameAccess); 
    341341                                } 
    342342                        } 
    343343