All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.examples.viewer.gui.javafx.JavaFXMenuItems Maven / Gradle / Ivy

There is a newer version: 20151002
Show newest version
/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/support/
 *
 * (C) Copyright 1997-2017 IDRsolutions and Contributors.
 *
 * This file is part of JPedal/JPDF2HTML5
 *
     This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


 *
 * ---------------
 * JavaFXMenuItems.java
 * ---------------
 */
package org.jpedal.examples.viewer.gui.javafx;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.*;
import javafx.scene.input.KeyCombination;
import org.jpedal.display.Display;
import org.jpedal.display.GUIDisplay;
import org.jpedal.examples.viewer.Commands;
import org.jpedal.examples.viewer.Values;
import org.jpedal.examples.viewer.gui.CommandListener;
import org.jpedal.examples.viewer.gui.GUI;
import org.jpedal.examples.viewer.gui.generic.GUIButtons;
import org.jpedal.examples.viewer.gui.generic.GUIMenuItems;
import org.jpedal.examples.viewer.utils.PropertiesFile;
import org.jpedal.parser.DecoderOptions;
import org.jpedal.utils.Messages;

/**
 * This class controls everything todo with Menu Items, it holds the objects and
 * their corresponding methods.
 *
 * To initialise the object/class call init()
 */
public class JavaFXMenuItems extends GUIMenuItems {

    
    //holds all menu entries (File, View, Help)
	private MenuBar currentMenu =new MenuBar();
    
    //Menu items for gui
    private Menu fileMenu;
    private Menu openMenu;
    private MenuItem open;
    private MenuItem openUrl;
    private MenuItem save;
    private MenuItem reSaveAsForms;
    private MenuItem find;
    private MenuItem documentProperties;
    private MenuItem signPDF;
    //private MenuItem recentDocuments;
    private MenuItem exit;
    private Menu editMenu;
    private MenuItem copy;
    private MenuItem selectAll;
    private MenuItem deselectAll;
    private MenuItem preferences;
    private Menu viewMenu;
    private Menu goToMenu;
    private MenuItem firstPage;
    private MenuItem backPage;
    private MenuItem forwardPage;
    private MenuItem lastPage;
    private MenuItem goTo;
    private MenuItem previousDocument;
    private MenuItem nextDocument;
    private Menu pageLayoutMenu;
    private MenuItem single;
   
    private MenuItem pageFlow;
    private CheckMenuItem textSelect;
    private CheckMenuItem separateCover;
    private CheckMenuItem panMode;
    private MenuItem fullscreen;
    private Menu windowMenu;
    private MenuItem cascade;
    private MenuItem tile;
    
    private Menu helpMenu;
    private MenuItem visitWebsite;
    private MenuItem tipOfTheDay;
   // private MenuItem checkUpdates;
    private MenuItem about;
    
    private MenuItem helpForum;
    
    private Menu exportMenu;
    private Menu pdfMenu;
    private Menu contentMenu;
    private Menu pageToolsMenu;
    private MenuItem onePerPage;
    private MenuItem nup;
    private MenuItem handouts;
    private MenuItem images;
    private MenuItem text;
    private MenuItem bitmap;
    private MenuItem rotatePages;
    private MenuItem deletePages;
    private MenuItem addPage;
    private MenuItem addHeaderFooter;
    private MenuItem stampText;
    private MenuItem stampImage;
    private MenuItem crop;

    public JavaFXMenuItems(final PropertiesFile properties) {
        super(properties);
    }
    
    private Menu getMenu(final int ID) {
        switch (ID) {
            case Commands.FILEMENU:
                return fileMenu;
            case Commands.EDITMENU:
                return editMenu;
            case Commands.OPENMENU:
                return openMenu;
            case Commands.VIEWMENU:
                return viewMenu;
            case Commands.GOTOMENU:
                return goToMenu;
            case Commands.PAGELAYOUTMENU:
                return pageLayoutMenu;
            case Commands.HELP:
                return helpMenu;
            case Commands.WINDOWMENU:
                return windowMenu;
        }
        return null;
    }
    
    private MenuItem getMenuItem(final int ID) {
        switch (ID) {
            case Commands.FILEMENU:
                return fileMenu;
            case Commands.OPENMENU:
                return openMenu;
            case Commands.OPENFILE:
                return open;
            case Commands.OPENURL:
                return openUrl;
            case Commands.SAVE:
                return save;
            case Commands.RESAVEASFORM:
                return reSaveAsForms;
            case Commands.FIND:
                return find;
            case Commands.DOCINFO:
                return documentProperties;
            case Commands.SIGN:
                return signPDF;
            case Commands.EXIT:
                return exit;
            case Commands.EDITMENU:
                return editMenu;
            case Commands.COPY:
                return copy;
            case Commands.SELECTALL:
                return selectAll;
            case Commands.DESELECTALL:
                return deselectAll;
            case Commands.PREFERENCES:
                return preferences;
            case Commands.VIEWMENU:
                return viewMenu;
            case Commands.GOTOMENU:
                return goToMenu;
            case Commands.FIRSTPAGE:
                return firstPage;
            case Commands.BACKPAGE:
                return backPage;
            case Commands.FORWARDPAGE:
                return forwardPage;
            case Commands.LASTPAGE:
                return lastPage;
            case Commands.GOTO:
                return goTo;
            case Commands.PREVIOUSDOCUMENT:
                return previousDocument;
            case Commands.NEXTDOCUMENT:
                return nextDocument;
            case Commands.PAGELAYOUTMENU:
                return pageLayoutMenu;
            case Commands.SINGLE:
                return single;
            case Commands.PAGEFLOW:
                return pageFlow;
            case Commands.TEXTSELECT:
                return textSelect;
            case Commands.SEPARATECOVER:
                return separateCover;
            case Commands.PANMODE:
                return panMode;
            case Commands.FULLSCREEN:
                return fullscreen;
            case Commands.WINDOWMENU:
                return windowMenu;
            case Commands.CASCADE:
                return cascade;
            case Commands.TILE:
                return tile;
            case Commands.EXPORTMENU:
                return exportMenu;
            case Commands.PDFMENU:
                return pdfMenu;
            case Commands.ONEPERPAGE:
                return onePerPage;
            case Commands.NUP:
                return nup;
            case Commands.CONTENTMENU:
                return contentMenu;
            case Commands.IMAGES:
                return images;
            case Commands.TEXT:
                return text;
            case Commands.BITMAP:
                return bitmap;
            case Commands.HANDOUTS:
                return handouts;
            case Commands.PAGETOOLSMENU:
                return pageToolsMenu;
            case Commands.ROTATE:
                return rotatePages;
            case Commands.DELETE:
                return deletePages;
            case Commands.ADD:
                return addPage;
            case Commands.ADDHEADERFOOTER:
                return addHeaderFooter;
            case Commands.STAMPTEXT:
                return stampText;
            case Commands.STAMPIMAGE:
                return stampImage;
            case Commands.CROP:
                return crop;
            case Commands.HELP:
                return helpMenu;
            case Commands.VISITWEBSITE:
                return visitWebsite;
            case Commands.TIP:
                return tipOfTheDay;
//            case Commands.UPDATE:
//                return checkUpdates;
            case Commands.ABOUT:
                return about;
            case Commands.HELPFORUM:
                return helpForum;
        
        }

        return null;

    }
    
    public MenuBar getCurrentMenuFX(){
        return currentMenu;
    }
    
    @Override
    public void dispose(){
        if(currentMenu!=null) {
            currentMenu.getMenus().removeAll(currentMenu.getMenus());
        }
		currentMenu =null;
    }
    
    @Override
    public void setCheckMenuItemSelected(final int ID, final boolean b){
        
        switch(ID){
            case Commands.TEXTSELECT:
                textSelect.setSelected(b);
                break;
            case Commands.PANMODE:
                panMode.setSelected(b);
                break;
            case Commands.SEPARATECOVER:
                separateCover.setSelected(b);
                break;    
            default:
                if(GUI.debugFX) {
                    System.out.println("Only TEXTSELECT, PANMODE and SEPARATECOVER are Accepted IDs");
                }
                break;
        }
        
    }
    
    @Override
    public void setBackNavigationItemsEnabled(final boolean enabled){
       
    	backPage.setDisable(!enabled);
		firstPage.setDisable(!enabled);
    }
    
    @Override
    public void setForwardNavigationItemsEnabled(final boolean enabled){
    	forwardPage.setDisable(!enabled);
		lastPage.setDisable(!enabled);
    }
    
    @Override
    public void setGoToNavigationItemEnabled(final boolean enabled){
    	goTo.setDisable(!enabled);
    }
    
	protected void addMenuItem(final Menu parentMenu, final String text, final int ID) {

        final boolean isCheckBox = (ID == Commands.SEPARATECOVER || ID == Commands.PANMODE || ID == Commands.TEXTSELECT);

        final JavaFXID menuItem;
        if (isCheckBox) {
            menuItem = new JavaFXCheckBoxMenuItem(text);
            parentMenu.getItems().add((MenuItem) menuItem);
        } else {
            menuItem = new JavaFXMenuItem(text);
            parentMenu.getItems().add((MenuItem) menuItem);
        }

        menuItem.setID(ID);
        setKeyAccelerators(ID, (MenuItem) menuItem);

		//add listener
		menuItem.setOnAction((EventHandler) currentCommandListener.getCommandListener());

                    switch(ID){
                        case Commands.OPENFILE :
                                open = (MenuItem)menuItem;
                                break;
                        case Commands.OPENURL :
                                openUrl = (MenuItem)menuItem;
                                break;
                        case Commands.SAVE :
                                save = (MenuItem)menuItem;
                                break;
                        case Commands.SAVEFORM :
                                reSaveAsForms = (MenuItem)menuItem;
                                //add name to resave option so fest can get to it.
                                reSaveAsForms.setId("resaveForms");
                                break;
                        case Commands.FIND :
                                find = (MenuItem)menuItem;
                                break;
                        case Commands.DOCINFO :
                                documentProperties = (MenuItem)menuItem;
                                break;
                        case Commands.SIGN :
                                signPDF = (MenuItem)menuItem;
                                break;
                        case Commands.EXIT :
                                exit = (MenuItem)menuItem;
                                //set name to exit so fest can find it
                                exit.setId("exit");
                                break;
                        case Commands.COPY :
                                copy = (MenuItem)menuItem;
                                break;
                        case Commands.SELECTALL :
                                selectAll = (MenuItem)menuItem;
                                break;
                        case Commands.DESELECTALL :
                                deselectAll = (MenuItem)menuItem;
                                break;
                        case Commands.PREFERENCES :
                                preferences = (MenuItem)menuItem;
                                break;
                        case Commands.FIRSTPAGE :
                                firstPage = (MenuItem)menuItem;
                                break;
                        case Commands.BACKPAGE :
                                backPage = (MenuItem)menuItem;
                                break;
                        case Commands.FORWARDPAGE :
                                forwardPage = (MenuItem)menuItem;
                                break;
                        case Commands.LASTPAGE :
                                lastPage = (MenuItem)menuItem;
                                break;
                        case Commands.GOTO :
                                goTo = (MenuItem)menuItem;
                                break;
                        case Commands.PREVIOUSDOCUMENT :
                                previousDocument = (MenuItem)menuItem;
                                break;
                        case Commands.NEXTDOCUMENT :
                                nextDocument = (MenuItem)menuItem;
                                break;
                        case Commands.FULLSCREEN :
                                fullscreen = (MenuItem)menuItem;
                                break;
                        case Commands.MOUSEMODE :
                                fullscreen = (MenuItem)menuItem;
                                break;
                        case Commands.PANMODE:
                                panMode = (CheckMenuItem) menuItem;
                                panMode.setSelected(false);
                                break;
                        case Commands.TEXTSELECT :
                                textSelect = (CheckMenuItem)menuItem;
                                textSelect.setSelected(true);
                                break;
                        case Commands.SEPARATECOVER :
                                separateCover = (CheckMenuItem)menuItem;
                                GUIDisplay.default_separateCover = properties.getValue("separateCoverOn").equalsIgnoreCase("true");
                                separateCover.setSelected(true);
                                break;
                        case Commands.CASCADE :
                                cascade = (MenuItem)menuItem;
                                break;
                        case Commands.TILE :
                                tile = (MenuItem)menuItem;
                                break;
                        case Commands.PDF :
                                onePerPage = (MenuItem)menuItem;
                                break;
                        case Commands.NUP :
                                nup = (MenuItem)menuItem;
                                break;
                        case Commands.HANDOUTS :
                                handouts = (MenuItem)menuItem;
                                break;
                        case Commands.IMAGES :
                                images = (MenuItem)menuItem;
                                break;
                        case Commands.TEXT :
                                this.text = (MenuItem)menuItem;
                                break;
                        case Commands.BITMAP :
                                bitmap = (MenuItem)menuItem;
                                break;
                        case Commands.ROTATE :
                                rotatePages = (MenuItem)menuItem; 
                                break;
                        case Commands.DELETE :
                                deletePages = (MenuItem)menuItem;
                                break;
                        case Commands.ADD :
                                addPage = (MenuItem)menuItem;
                                break;
                        case Commands.ADDHEADERFOOTER :
                                addHeaderFooter = (MenuItem)menuItem;
                                break;
                        case Commands.STAMPTEXT :
                                stampText = (MenuItem)menuItem;
                                break;
                        case Commands.STAMPIMAGE :
                                stampImage = (MenuItem)menuItem;
                                break;
                        case Commands.SETCROP :
                                crop = (MenuItem)menuItem;
                                break;
                        case Commands.VISITWEBSITE :
                                visitWebsite = (MenuItem)menuItem;
                                break;
                        case Commands.TIP :
                                tipOfTheDay = (MenuItem)menuItem;
                                break;
        //		case Commands.UPDATE :
        //			checkUpdates = (MenuItem)menuItem;
        //			break;
                        case Commands.ABOUT :
                                about = (MenuItem)menuItem;
                                break;
                        
                        case Commands.HELP :
                                helpForum = (MenuItem)menuItem;
                                break;
                }
        
        disableUnimplementedItems(ID, false);
     
	}

    /**
     * sets up layout menu (controls page views - Multiple, facing,etc)
     */
    protected void initLayoutMenus(final Menu pageLayout, final String[] descriptions, final int[] value, final GUIButtons buttons, final Commands currentCommands) {

        final int count=value.length;
        for(int i=0;i() {
                        @Override
                        public void handle(final ActionEvent t) {
                            currentCommands.executeCommand(Commands.SINGLE, null);
                        }
                    });
            		pageLayout.getItems().add(single);
            		break;
                   
            	case Display.PAGEFLOW :
                    
                    pageFlow = pageView;
                    pageFlow.setOnAction(new EventHandler() {
                        @Override
                        public void handle(final ActionEvent t) {
                            currentCommands.executeCommand(Commands.PAGEFLOW, null);
                        }
                    });
                    pageLayout.getItems().add(pageFlow);
                    
            		break;
                    
            	}        
            }
            disableUnimplementedItems(value[i], true);
        }
        
        //default is off
        buttons.setPageLayoutButtonsEnabled(false);
    }
    
    @Override
    public void setMenusForDisplayMode(final int commandIDForDislayMode, final int mouseMode) {
        
        switch(commandIDForDislayMode){
            
            case Commands.SINGLE:
                textSelect.setDisable(true);
                panMode.setDisable(true);
                textSelect.setSelected(true);
                panMode.setSelected(false);
                break;
            
            case Commands.PAGEFLOW:
                textSelect.setDisable(false);
					panMode.setDisable(false);
					textSelect.setSelected(false);
					panMode.setSelected(true);
                break;
               
            case Commands.MOUSEMODE:
                switch(mouseMode){
                    case 0 : //Text Select
                        textSelect.setSelected(true);
                        panMode.setSelected(false);
                        break;
                    case 1 : //Pan Mode
                        textSelect.setSelected(false);
                        panMode.setSelected(true);
                        break;
                }
        }
    }
    
    /**
     * add MenuItem to main menu
     */
    protected void addToMainMenu(final Menu fileMenuList) {
        //fileMenuList.getPopupMenu().setLightWeightPopupEnabled(!JavaFXHelper.isJavaFXAvailable());
        currentMenu.getMenus().add(fileMenuList);
        currentMenu.setUseSystemMenuBar(true);     
	}
    
    /**
     * create items on drop down menus
     */
	@Override
    public void createMainMenu(final boolean includeAll, final CommandListener currentCommandListener, final boolean isSingle,
            final Values commonValues, final Commands currentCommands, final GUIButtons buttons){

        this.currentCommandListener=currentCommandListener;

        String addSeparator;

		fileMenu = new Menu(Messages.getMessage("PdfViewerFileMenu.text"));

		addToMainMenu(fileMenu);

		 //add open options

		openMenu = new Menu(Messages.getMessage("PdfViewerFileMenuOpen.text"));
        
        //openMenu.getPopupMenu().setLightWeightPopupEnabled(!JavaFXHelper.isJavaFXAvailable());
        
		fileMenu.getItems().add(openMenu);

		addMenuItem(openMenu,Messages.getMessage("PdfViewerFileMenuOpen.text"), Commands.OPENFILE);

		addMenuItem(openMenu,Messages.getMessage("PdfViewerFileMenuOpenurl.text"), Commands.OPENURL);


		addSeparator = properties.getValue("Save")
			+ properties.getValue("Resaveasforms")
			+ properties.getValue("Find");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			fileMenu.getItems().add(new SeparatorMenuItem());
		}
		
		
		addMenuItem(fileMenu,Messages.getMessage("PdfViewerFileMenuSave.text"),
                Commands.SAVE);

        //not set if I just run from jar as no IText....
		if(includeAll) {
            addMenuItem(fileMenu,
                    Messages.getMessage("PdfViewerFileMenuResaveForms.text"),
                    Commands.SAVEFORM);
        }


		// Remember to finish this off
		addMenuItem(fileMenu, Messages.getMessage("PdfViewerFileMenuFind.text"), Commands.FIND);

		// =====================



		addSeparator = properties.getValue("Documentproperties");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			fileMenu.getItems().add(new SeparatorMenuItem());
		}
		addMenuItem(fileMenu,Messages.getMessage("PdfViewerFileMenuDocProperties.text"),
                Commands.DOCINFO);

        if(commonValues.isEncrypOnClasspath()) {
            addMenuItem(fileMenu,Messages.getMessage("PdfViewerFileMenuSignPDF.text"),
                    Commands.SIGN);
        }
        else {
            addMenuItem(fileMenu,Messages.getMessage("PdfViewerFileMenuSignPDF.text"),
                    Commands.SIGN);
        }

		addSeparator = properties.getValue("Recentdocuments");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			fileMenu.getItems().add(new SeparatorMenuItem());
			currentCommands.recentDocumentsOption();
		}

		addSeparator = properties.getValue("Exit");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			fileMenu.getItems().add(new SeparatorMenuItem());
		}
		addMenuItem(fileMenu,Messages.getMessage("PdfViewerFileMenuExit.text"),
                Commands.EXIT);

		//EDIT MENU
		editMenu = new Menu(Messages.getMessage("PdfViewerEditMenu.text"));
		addToMainMenu(editMenu);

		addMenuItem(editMenu,Messages.getMessage("PdfViewerEditMenuCopy.text"),
                Commands.COPY);

		addMenuItem(editMenu,Messages.getMessage("PdfViewerEditMenuSelectall.text"),
                Commands.SELECTALL);

		addMenuItem(editMenu,Messages.getMessage("PdfViewerEditMenuDeselectall.text"),
                Commands.DESELECTALL);

		addSeparator = properties.getValue("Preferences");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			editMenu.getItems().add(new SeparatorMenuItem());
		}
		addMenuItem(editMenu, Messages.getMessage("PdfViewerEditMenuPreferences.text"),
                Commands.PREFERENCES);


		viewMenu = new Menu(Messages.getMessage("PdfViewerViewMenu.text"));
		addToMainMenu(viewMenu);

		goToMenu = new Menu(Messages.getMessage("GoToViewMenuGoto.text"));

        //goToMenu.getPopupMenu().setLightWeightPopupEnabled(!JavaFXHelper.isJavaFXAvailable());

		viewMenu.getItems().add(goToMenu);

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.FirstPage"), Commands.FIRSTPAGE);

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.BackPage"), Commands.BACKPAGE);

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.ForwardPage"), Commands.FORWARDPAGE);

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.LastPage"), Commands.LASTPAGE);

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.GoTo"), Commands.GOTO);

		addSeparator = properties.getValue("Previousdocument")
			+properties.getValue("Nextdocument");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			goToMenu.getItems().add(new SeparatorMenuItem());
		}

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.PreviousDoucment"), Commands.PREVIOUSDOCUMENT);

		addMenuItem(goToMenu,Messages.getMessage("GoToViewMenuGoto.NextDoucment"), Commands.NEXTDOCUMENT);

		//add page layout
        pageLayoutMenu = new Menu(Messages.getMessage("PageLayoutViewMenu.PageLayout"));
        //pageLayoutMenu.getPopupMenu().setLightWeightPopupEnabled(!JavaFXHelper.isJavaFXAvailable());
        viewMenu.getItems().add(pageLayoutMenu);
		
		
		final String[] descriptions={Messages.getMessage("PageLayoutViewMenu.SinglePage"),Messages.getMessage("PageLayoutViewMenu.PageFlow")};
        final int[] value={Display.SINGLE_PAGE, Display.PAGEFLOW};

        initLayoutMenus(pageLayoutMenu, descriptions, value, buttons, currentCommands);
        

        if(properties.getValue("separateCover").equals("true")) {
            addMenuItem(viewMenu, Messages.getMessage("PdfViewerViewMenuSeparateCover.text"), Commands.SEPARATECOVER);
        }

		// addMenuItem(view,Messages.getMessage("PdfViewerViewMenuAutoscroll.text"),Messages.getMessage("PdfViewerViewMenuTooltip.autoscroll"),Commands.AUTOSCROLL);
        if(properties.getValue("panMode").equals("true") || properties.getValue("textSelect").equals("true")){
        	viewMenu.getItems().add(new SeparatorMenuItem());
        	if(properties.getValue("panMode").equals("true")) {
                addMenuItem(viewMenu, Messages.getMessage("PdfViewerViewMenuPanMode.text"), Commands.PANMODE);
            }

        	if(properties.getValue("textSelect").equals("true")) {
                addMenuItem(viewMenu, Messages.getMessage("PdfViewerViewMenuTextSelectMode.text"), Commands.TEXTSELECT);
            }
        	viewMenu.getItems().add(new SeparatorMenuItem());
        }
			
		addSeparator = properties.getValue("Fullscreen");
		if(!addSeparator.isEmpty() && addSeparator.equalsIgnoreCase("true")){
			goToMenu.getItems().add(new SeparatorMenuItem());
		}

		//full page mode
		addMenuItem(viewMenu,Messages.getMessage("PdfViewerViewMenuFullScreenMode.text"), Commands.FULLSCREEN);

		//add export menus
        
//		if(commonValues.isItextOnClasspath()){
			exportMenu = new Menu(Messages.getMessage("PdfViewerExportMenu.text"));
			addToMainMenu(exportMenu);

			/*
			 * external/itext menu option example adding new option to Export menu
			 * Tooltip text can be externalised in Messages.getMessage("PdfViewerTooltip.NEWFUNCTION")
			 * and text added into files in res package
             * addMenuItem(export,"NEW",tooltip,Commands.NEWFUNCTION);
			 */


			pdfMenu = new Menu(Messages.getMessage("PdfViewerExportMenuPDF.text"));
			exportMenu.getItems().add(pdfMenu);

			addMenuItem(pdfMenu,Messages.getMessage("PdfViewerExportMenuOnePerPage.text"), Commands.PDF);

			addMenuItem(pdfMenu,Messages.getMessage("PdfViewerExportMenuNUp.text"), Commands.NUP);

			addMenuItem(pdfMenu,Messages.getMessage("PdfViewerExportMenuHandouts.text"), Commands.HANDOUTS);



			contentMenu=new Menu(Messages.getMessage("PdfViewerExportMenuContent.text"));
			exportMenu.getItems().add(contentMenu);

			addMenuItem(contentMenu,Messages.getMessage("PdfViewerExportMenuImages.text"), Commands.IMAGES);

			addMenuItem(contentMenu,Messages.getMessage("PdfViewerExportMenuText.text"), Commands.TEXT);


			addMenuItem(exportMenu,Messages.getMessage("PdfViewerExportMenuBitmap.text"), Commands.BITMAP);
//		}
        
       /*
        * items options if IText available
        *
	    * if(commonValues.isItextOnClasspath()){
	    *	pageToolsMenu = new Menu(Messages.getMessage("PdfViewerPageToolsMenu.text"));
		*	addToMainMenu(pageToolsMenu);
        *
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuRotate.text"), Commands.ROTATE);
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuDelete.text"), Commands.DELETE);
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuAddPage.text"), Commands.ADD);
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuAddHeaderFooter.text"), Commands.ADDHEADERFOOTER);
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuStampText.text"), Commands.STAMPTEXT);
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuStampImage.text"), Commands.STAMPIMAGE);
		*	addMenuItem(pageToolsMenu,Messages.getMessage("PdfViewerPageToolsMenuSetCrop.text"), Commands.SETCROP);
        *
		* }
        */

		if(includeAll && GUI.debugFX){
			
			//menu option for debugging viewport
			final Menu debugViewport = new Menu("Debug");
			addToMainMenu(debugViewport);

			//reset vieport option button
			addMenuItem(debugViewport,"Reset viewport", Commands.RESET);

			//switch for testing hardware acceleration
			addMenuItem(debugViewport,"Enable acceleration", Commands.ACCELERATIONON);

			//switch for testing hardware acceleration
			addMenuItem(debugViewport,"Disable acceleration", Commands.ACCELERATIONOFF);

			addMenuItem(debugViewport,"Show form NAMES", Commands.SHOWFORMNAMES);

            //delete properties file on exit
            addMenuItem(debugViewport,"Wipe properties on exit", Commands.DELETEPROPERTIESONEXIT);

            addMenuItem(debugViewport,"Always show mouse coords", Commands.ALWAYSSHOWMOUSE);

		}
		
		helpMenu = new Menu(Messages.getMessage("PdfViewerHelpMenu.text"));
		addToMainMenu(helpMenu);

		addMenuItem(helpMenu,Messages.getMessage("PdfViewerHelpMenu.VisitWebsite"), Commands.VISITWEBSITE);
		addMenuItem(helpMenu,Messages.getMessage("PdfViewerHelpMenuTip.text"), Commands.TIP);
		//addMenuItem(helpMenu,Messages.getMessage("PdfViewerHelpMenuUpdates.text"),"",Commands.UPDATE);
		addMenuItem(helpMenu,Messages.getMessage("PdfViewerHelpMenuabout.text"), Commands.ABOUT);

		if(includeExtraMenus){
            addMenuItem(helpMenu,Messages.getMessage("PdfViewerHelpMenuTutorial.text"), Commands.HELP);
        }

	}
    
    
	/**
     * setup keyboard shortcuts
     */
	static void setKeyAccelerators(final int ID, final MenuItem menuItem){
		      switch (ID) {

            case Commands.FIND:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+F"));
                break;
            case Commands.SAVE:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+S"));
                break;
            case Commands.EXIT:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+Q"));
                break;
            case Commands.DOCINFO:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+D"));
                break;
            case Commands.OPENFILE:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+O"));
                break;
            case Commands.OPENURL:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+U"));
                break;
            case Commands.PREVIOUSDOCUMENT:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+LEFT+SHIFT"));
                break;
            case Commands.NEXTDOCUMENT:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+RIGHT+SHIFT"));
                break;
            case Commands.FIRSTPAGE:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+HOME"));
                break;
            case Commands.BACKPAGE:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+UP"));
                break;
            case Commands.FORWARDPAGE:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+DOWN"));
                break;
            case Commands.LASTPAGE:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+END"));
                break;
            case Commands.GOTO:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+N+SHIFT"));
                break;
            case Commands.BITMAP:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+B"));
                break;
            case Commands.COPY:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+C"));
                break;
            case Commands.SELECTALL:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+A"));
                break;
            case Commands.DESELECTALL:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+A+SHIFT"));
                break;
            case Commands.PREFERENCES:
                menuItem.setAccelerator(KeyCombination.keyCombination("Shortcut+K"));
                break;
        }
	}
    
    @Override
    public void ensureNoSeperators() {
        ensureNoSeperators(Commands.FILEMENU);
        ensureNoSeperators(Commands.EDITMENU);
        ensureNoSeperators(Commands.VIEWMENU);
        ensureNoSeperators(Commands.GOTOMENU);
    }
    
    @Override
    public void ensureNoSeperators(final int type) {
        for (int k = 0; k != ((Menu) getMenuItem(type)).getItems().size(); k++) {
            if (((Menu) getMenuItem(type)).getItems().get(k).isVisible()) {
                if (((Menu) getMenuItem(type)).getItems().get(k) instanceof SeparatorMenuItem) {
                    ((Menu) getMenuItem(type)).getItems().remove(k);
                }
                break;
            }
        }
    }
    
    @Override
    public boolean isMenuItemExist(final int ID){
        return getMenuItem(ID) != null;
    }
    
    @Override
    public void setMenuItem(final int ID, final boolean enabled, final boolean visible) {
        
        if(ID == Commands.CURRENTMENU && currentMenu!=null){
            currentMenu.setDisable(!enabled);
            currentMenu.setVisible(visible);
        }else if(getMenuItem(ID)!=null){
            getMenuItem(ID).setDisable(!enabled);
            getMenuItem(ID).setVisible(visible);
        }
        if(ID == Commands.FULLSCREEN  && DecoderOptions.isRunningOnMac){
              fullscreen.setDisable(true);
        }
    }
    
    @Override
    public void addToMenu(final Object menuItem, final int parentMenuID){
        getMenu(parentMenuID).getItems().add((MenuItem)menuItem);
    }

    /**
     * Temporary Method to Disable unimplemented Viewer Items.
     * Edit and Remove the items from this method as we implement features.
     */
    public void disableUnimplementedItems(final int ID,  final boolean disableViewModes){
        
        @SuppressWarnings("PointlessBooleanExpression") final boolean debug = !GUI.debugFX;

        final int ALL = -10;
        
        if(ID != ALL){
            if(!disableViewModes){
                switch(ID){
                     //View Menu.
                    case Commands.SEPARATECOVER:
                        separateCover.setDisable(debug);
                        break;
                    //File Menu.
                    case Commands.FIND:
                        find.setDisable(debug);
                        break;
                    case Commands.SAVEFORM:
                        reSaveAsForms.setDisable(debug);
                        break;
                    case Commands.SIGN:
                        signPDF.setDisable(debug);
                        break;

                }
            }else{
                //Disable View Modes.
                switch(ID){
                   
                    case Display.PAGEFLOW:
                        pageFlow.setDisable(debug);
                        break;
                }
            }
        }else{
            separateCover.setDisable(debug);
            reSaveAsForms.setDisable(debug);
            signPDF.setDisable(debug);
        }
    }   
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy