⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multicalendarview.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:

/*--------------------------------------------------------------------------*
 | 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.common;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;

import org.rapla.components.layout.TableLayout;
import org.rapla.components.util.Tools;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.RaplaGUIComponent;
import org.rapla.gui.SwingCalendarView;
import org.rapla.gui.ViewFactory;
import org.rapla.gui.toolkit.IdentifiableMenuEntry;
import org.rapla.gui.toolkit.RaplaMenu;
import org.rapla.gui.toolkit.RaplaMenuItem;
import org.rapla.gui.toolkit.RaplaWidget;
import org.rapla.plugin.RaplaExtensionPoints;


public class MultiCalendarView extends RaplaGUIComponent
    implements
    RaplaWidget
{
    
    private JPanel page = new JPanel();
    private JPanel header = new JPanel();
    Map viewMenuItems = new HashMap();
    JComboBox viewChooser;

    // Default view, when no plugin defined
    private SwingCalendarView currentView = new SwingCalendarView() {
        JLabel noViewDefined = new JLabel("No view defined");

        public JComponent getDateSelection()
        {
            return null;
        }

        public void scrollToStart()
        {
        }

        public JComponent getComponent()
        {
            return noViewDefined;
        }

        public void update( ) throws RaplaException
        {
        }

    };

    private CalendarSelectionModel model;
    final Map map;
    /** renderer for weekdays in month-view */
    boolean editable = true;
    boolean listenersEnabled = true;

    public MultiCalendarView(RaplaContext context,CalendarSelectionModel model) throws RaplaException {
    	this( context, model, true);
    }
    public MultiCalendarView(RaplaContext context,CalendarSelectionModel model, boolean editable) throws RaplaException {
        super( context);
        this.editable = editable;
        map = getContainer().lookupServicesFor(RaplaExtensionPoints.CALENDAR_VIEW_EXTENSION);
        this.model = model;
        String[] ids = getIds();
        {
	         ViewFactory factory = findFactory( model.getViewId());
             if ( factory == null)
             {
                 if ( ids.length != 0 ) {
	                 String firstId = ids[0];
	                 model.setViewId( firstId );
	                 factory = findFactory( firstId );
	             }
	         }
         }
        RaplaMenu view = (RaplaMenu) getContext().lookup( InternMenus.VIEW_MENU_ROLE);
        if ( !view.hasId( "views") ) 
        {
            addMenu( model, ids, view );
        }

        addTypeChooser( ids );
        header.setLayout(new BorderLayout());
        //header.add( dateChooser.getComponent(), BorderLayout.CENTER );
        //header.add( viewChooser, BorderLayout.WEST );
        header.setBorder( BorderFactory.createRaisedBevelBorder());
        page.setLayout(new TableLayout( new double[][]{
                {TableLayout.PREFERRED, TableLayout.FILL}
                ,{TableLayout.PREFERRED, TableLayout.FILL}}));
        //page.add( header, BorderLayout.NORTH);
        page.add( viewChooser, "0,0,0,0,f,f");
        page.setBackground( Color.white );
        //page.add( new JPanel(), "0,1,1,1,f,f");
        update();
    }
    private void addTypeChooser( String[] ids )
    {
        viewChooser = new JComboBox( ids);
         viewChooser.setVisible( viewChooser.getModel().getSize() > 0);
         viewChooser.setSelectedItem( getModel().getViewId() );
         viewChooser.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
            	if ( !listenersEnabled )
            		return;
                String viewId = (String) ((JComboBox)evt.getSource()).getSelectedItem();
                try {
                    selectView( viewId );
                } catch (RaplaException ex) {
                    showException(ex, page);
                }
            }
        }
        );
        viewChooser.setRenderer( new DefaultListCellRenderer() {
            private static final long serialVersionUID = 1L;
            public Component getListCellRendererComponent(JList arg0, Object selectedItem, int index, boolean arg3, boolean arg4) {
                super.getListCellRendererComponent( arg0, selectedItem, index, arg3, arg4);
                if ( selectedItem == null) {
                    setIcon( null );
                } else {
                    ViewFactory factory = findFactory( (String)selectedItem);
                    setText( factory.getName() );
                    setIcon( factory.getIcon());
                }
                return this;
            }
        });
    }
    private void addMenu( CalendarSelectionModel model, String[] ids, RaplaMenu view )
    {
        RaplaMenu viewMenu = new RaplaMenu("views");
        viewMenu.setText(getString("show_as"));
        view.insertBeforeId( viewMenu, "view_save");
        ButtonGroup group = new ButtonGroup();
        for (int i=0;i<ids.length;i++)
        {
            String id = ids[i];
            RaplaMenuItem viewItem = new RaplaMenuItem( id);
            if ( id.equals( model.getViewId()))
            {
                viewItem.setIcon( getIcon("icon.radio"));
             }  
            else
             {  
                 viewItem.setIcon( getIcon("icon.empty"));
             }
             
        	 group.add( viewItem );
             
             ViewFactory factory = findFactory( id );
             viewItem.setText( factory.getName() );
             viewMenu.add( viewItem );
             viewItem.setSelected( id.equals( getModel().getViewId()));
             viewMenuItems.put( id, viewItem );
             viewItem.addActionListener( new ActionListener() {
   
        		public void actionPerformed(ActionEvent evt) {
                	if ( !listenersEnabled )
                		return;
                    String viewId = (String) ((IdentifiableMenuEntry)evt.getSource()).getId();
                    try {
                        selectView( viewId );
                    } catch (RaplaException ex) {
                        showException(ex, page);
                    }
        		}
   
             });
         }
    }

    private ViewFactory findFactory(String id) {
        for (Iterator it = map.values().iterator();it.hasNext();) {
            ViewFactory factory = (ViewFactory ) it.next();
            if ( factory.getViewId().equals( id ) ) {
                return factory;
            }
        }
        return null;
    }

    private void selectView(String viewId) throws RaplaException {
    	listenersEnabled = false;
        try {
        	getModel().setViewId( viewId );
        	update();
        	getSelectedCalendar().scrollToStart();
        	if ( viewMenuItems.size() > 0) {
            	for ( Iterator it = viewMenuItems.values().iterator();it.hasNext();) 
                {
                    RaplaMenuItem item = (RaplaMenuItem) it.next();
                    if ( item.isSelected() ) 
                    {
                        item.setIcon( getIcon("icon.empty"));
                    }
                        
                }
                RaplaMenuItem item = (RaplaMenuItem)viewMenuItems.get( viewId );
                item.setSelected( true );
                item.setIcon( getIcon("icon.radio"));
            }
        	viewChooser.setSelectedItem( viewId );
        } finally {
        	listenersEnabled = true;
        }
    }

    private String[] getIds() {
        List factoryList = new ArrayList(map.values());
        Collections.sort( factoryList, new Comparator() {
            public int compare( Object arg0, Object arg1 )
            {
                ViewFactory f1 = (ViewFactory ) arg0;
                ViewFactory f2 = (ViewFactory ) arg1;
                return f1.getMenuSortKey().compareTo( f2.getMenuSortKey() );
            }
        });
        List list = new ArrayList();
        for (Iterator it = factoryList.iterator();it.hasNext();) {
            ViewFactory factory = (ViewFactory ) it.next();
            list.add(factory.getViewId());
        }
        return (String[] )list.toArray( Tools.EMPTY_STRING_ARRAY);
    }

    private CalendarSelectionModel getModel() {
        return model;
    }

    private HashMap cache = new HashMap();

    public void update() throws RaplaException {
        if ( currentView!= null ) {
            currentView.getComponent().setVisible( false );
            if ( currentView.getDateSelection() != null)
                currentView.getDateSelection().setVisible( false );
        }

        ViewFactory factory = (ViewFactory) findFactory( model.getViewId() );

        if ( factory == null) {
            return;
        }

        SwingCalendarView cal = (SwingCalendarView)cache.get( factory.getViewId() );
        if ( cal == null ) {
            cal = factory.createSwingView( getContext(), getModel(), editable);
            cache.put( factory.getViewId(),  cal);
            if ( cal.getDateSelection() != null)
                page.add( cal.getDateSelection(), "1,0,f,f" );
            page.add( cal.getComponent(), "0,1,1,1,f,f" );
            cal.getComponent().setBorder( BorderFactory.createEtchedBorder());
            page.invalidate();
        } else {
            cal.getComponent().setVisible( true );
            if ( cal.getDateSelection() != null)
            {
                cal.getDateSelection().setVisible( true );
            }
            cal.update( );
        }

        currentView = cal;
    }

    public SwingCalendarView getSelectedCalendar() {
        return currentView;
    }

    public JComponent getComponent() {
        return page;
    }


}

⌨️ 快捷键说明

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