raplamenubar.java

来自「Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI」· Java 代码 · 共 221 行

JAVA
221
字号

/*--------------------------------------------------------------------------*
 | Copyright (C) 2006 Christopher Kohlhaas                                  |
 |                                                                          |
 | This program is free software; you can redistribute it and/or modify     |
 | it under the terms of the GNU General Public License as published by the |
 | Free Software Foundation. A copy of the license has been included with   |
 | these distribution in the COPYING file, if not go to www.fsf.org         |
 |                                                                          |
 | As a special exception, you are granted the permissions to link this     |
 | program with every library, which license fulfills the Open Source       |
 | Definition as published by the Open Source Initiative (OSI).             |
 *--------------------------------------------------------------------------*/
package org.rapla.gui.internal;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;

import org.rapla.client.ClientService;
import org.rapla.entities.configuration.Preferences;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.EditController;
import org.rapla.gui.RaplaGUIComponent;
import org.rapla.gui.internal.action.RestartRaplaAction;
import org.rapla.gui.internal.action.RestartServerAction;
import org.rapla.gui.internal.action.user.UserAction;
import org.rapla.gui.internal.common.CalendarSelectionModel;
import org.rapla.gui.internal.common.InternMenus;
import org.rapla.gui.internal.print.PrintAction;
import org.rapla.gui.toolkit.DialogUI;
import org.rapla.gui.toolkit.HTMLView;
import org.rapla.gui.toolkit.RaplaFrame;
import org.rapla.gui.toolkit.RaplaMenuItem;
import org.rapla.gui.toolkit.RaplaSeparator;

public class RaplaMenuBar extends RaplaGUIComponent
{
    public RaplaMenuBar(RaplaContext sm) throws RaplaException {
        super(sm);
        JMenu systemMenu = (JMenu)getService( InternMenus.FILE_MENU_ROLE );
        systemMenu.setText(  getString("file"));

        JMenu editMenu = (JMenu)getService( InternMenus.EDIT_MENU_ROLE );
        editMenu.setText( getString("edit"));

        JMenu exportMenu = (JMenu)getService( InternMenus.EXPORT_MENU_ROLE );
        exportMenu.setText( getString("export"));

        JMenu importMenu = (JMenu)getService( InternMenus.IMPORT_MENU_ROLE );
        importMenu.setText( getString("import"));

        JMenuItem newMenu = (JMenuItem)getService( InternMenus.NEW_MENU_ROLE );
        newMenu.setText( getString("new"));

        JMenu extraMenu =  (JMenu)getService( InternMenus.EXTRA_MENU_ROLE);
        extraMenu.setText( getString("help"));

        JMenu adminMenu = (JMenu)getService( InternMenus.ADMIN_MENU_ROLE );
        adminMenu.setText(  getString("admin"));

        JMenu viewMenu = (JMenu)getService( InternMenus.VIEW_MENU_ROLE );
        viewMenu.setText( getString("view"));

        viewMenu.add( new RaplaSeparator("view_save"));
        JMenuItem storeViewEntry = new JMenuItem();

        if ( isModifyPreferencesAllowed() )
        {
            StoreCalendarSelectionAction storeCalendar = new StoreCalendarSelectionAction( getContext());
            storeViewEntry.setAction( storeCalendar );
            viewMenu.add( storeViewEntry );
        }

        systemMenu.add( newMenu);

        systemMenu.add( new JSeparator());

        systemMenu.add( exportMenu );
        systemMenu.add( importMenu );
        systemMenu.add( adminMenu);

        systemMenu.add( new JSeparator());

        JMenuItem printMenu = new JMenuItem( getString("print"));
        PrintAction printAction =  new PrintAction(getContext());
        printMenu.setAction( printAction );
        printAction.setEnabled( true );
        CalendarSelectionModel model = (CalendarSelectionModel)getService(CalendarSelectionModel.ROLE);
        printAction.setModel(model);
        systemMenu.add( printMenu );

        systemMenu.add( new JSeparator());

        if ( getUserModule().canSwitchBack() ) {
            JMenuItem switchBack = new JMenuItem();
            switchBack.setAction( new UserAction(getContext(),null,null).setSwitchToUser());
            adminMenu.add( switchBack );
        }

        boolean server = getUpdateModule().isClientForServer();
        if ( server  && isAdmin() ) {
            JMenuItem restartServer = new JMenuItem();
            restartServer.setAction( new RestartServerAction(getContext()));
            adminMenu.add( restartServer );
        }

        if ( isAdmin() )
        {
            JMenuItem restart = new JMenuItem();
            restart.setAction( new RestartRaplaAction(getContext()));
            adminMenu.add( restart );
        }

        systemMenu.setMnemonic('F');
        JMenuItem logout = new JMenuItem(getString("exit"));
        logout.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, ActionEvent.CTRL_MASK ) );
        logout.setMnemonic('x');
        logout.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                RaplaFrame mainComponent = (RaplaFrame) getService( ClientService.MAIN_COMPONENT);
                mainComponent.close();
            }
        });
        systemMenu.add( logout );

        RaplaMenuItem userOptions = new RaplaMenuItem("userOptions");
        editMenu.add( userOptions );

        if ( isModifyPreferencesAllowed() ) {
            userOptions.setAction( createOptionAction( getQuery().getPreferences( )));
        } else {
            userOptions.setVisible( false );
        }

        if ( isAdmin() ) {
        	RaplaMenuItem adminOptions = new RaplaMenuItem("adminOptions");
        	adminOptions.setAction( createOptionAction( getQuery().getPreferences( null )));
            adminMenu.add( adminOptions );
        }
        extraMenu.addSeparator();

        RaplaMenuItem info = new RaplaMenuItem("info");
        info.setAction( createInfoAction( getContext()));
        extraMenu.add( info );

        adminMenu.setEnabled( adminMenu.getMenuComponentCount() != 0 );
        exportMenu.setEnabled( exportMenu.getMenuComponentCount() != 0);
        importMenu.setEnabled( importMenu.getMenuComponentCount() != 0);
    }

    private Action createOptionAction( final Preferences preferences) {
        AbstractAction action = new AbstractAction() {
            private static final long serialVersionUID = 1L;
            
            public void actionPerformed(ActionEvent arg0) {
                try {
                	EditController editContrl =(EditController) getService(EditController.ROLE);
                    editContrl.edit( preferences, getMainComponent());
                } catch (RaplaException ex) {
                    showException( ex, getMainComponent());
                }
            }

        };
    	action.putValue( Action.SMALL_ICON, getIcon("icon.empty") );
        action.putValue( Action.NAME, getString("options"));
        return action;
    }

    private Action createInfoAction( RaplaContext context) throws RaplaException {
        final String name = getString("info");
        final Icon icon = getIcon("icon.info_small");
        
        AbstractAction action = new AbstractAction() {
            private static final long serialVersionUID = 1L;
            
            public void actionPerformed( ActionEvent e )
            {
                try {
                    HTMLView infoText = new HTMLView();
                    infoText.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
                    String javaversion;
                    try {
                        javaversion = System.getProperty("java.version");
                    } catch (SecurityException ex) {
                        javaversion = "-";
                        getLogger().warn("Permission to system properties denied!");
                    }
                    infoText.setBody(getI18n().format("info.text",javaversion));
                    DialogUI dialog = DialogUI.create( getContext(),getMainComponent(),true, new JScrollPane(infoText), new String[] {getString("ok")});
                    dialog.setTitle( name);
                    dialog.setSize( 550, 300);
                    dialog.startNoPack();
                } catch (RaplaException ex) {
                    showException( ex, getMainComponent());
                }
            }

        };
        action.putValue( Action.SMALL_ICON, icon );
        action.putValue( Action.NAME, name);
        return action;
    }

}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?