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

📄 calendarprintdialog.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:
/*--------------------------------------------------------------------------*
 | Copyright (C) 2006 Gereon Fassbender, 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.print;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;

import javax.swing.AbstractAction;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import org.rapla.components.iolayer.ComponentPrinter;
import org.rapla.components.iolayer.IOInterface;
import org.rapla.components.xmlbundle.I18nBundle;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.SwingCalendarView;
import org.rapla.gui.ViewFactory;
import org.rapla.gui.internal.common.CalendarSelectionModel;
import org.rapla.gui.toolkit.DialogUI;
import org.rapla.gui.toolkit.ErrorDialog;
import org.rapla.gui.toolkit.RaplaButton;
import org.rapla.plugin.RaplaExtensionPoints;


public class CalendarPrintDialog extends DialogUI
{
    private static final long serialVersionUID = 1L;
    
    private JPanel titlePanel = new JPanel();
    private JPanel southPanel = new JPanel();
    private JLabel titleLabel = new JLabel();
    private JLabel sizeLabel = new JLabel();
    private JComboBox sizeChooser;
    private JTextField titleEdit = new JTextField();

    private RaplaButton cancelbutton;
    private RaplaButton formatbutton;
    private RaplaButton printbutton;
    private RaplaButton savebutton;
    private JScrollPane scrollPane;

    IOInterface printTool;
    ExportServiceList exportServiceList;

    public static int[] sizes = new int[] {50,60,70,80,90,100,120,150,180,200};
    public static double defaultBorder = 11.0; //11 mm defaultBorder

    I18nBundle i18n;

    Listener listener = new Listener();
    PageFormat m_format;
    
    protected SwingCalendarView currentView;
    CalendarSelectionModel model;
    Printable printable;
    
    private JComponent page = new JComponent()
    {
		private static final long serialVersionUID = 1L;

		public void paint(Graphics g)
        {
            try {
                paintPaper( g, m_format);
                printable.print( g, m_format, 0);
            } catch (PrinterException e) {
                e.printStackTrace();
            }
        }
        
        protected void paintPaper(Graphics g, PageFormat format) {
            g.setColor(Color.white);
            g.fillRect(1, 1, (int)format.getWidth(), (int)format.getHeight());        
            g.setColor(Color.black);
            g.drawRect(1, 1, (int)format.getWidth() - 2, (int)format.getHeight() - 2);        
        }

    };


    public static CalendarPrintDialog create(RaplaContext sm,Component owner,boolean modal,CalendarSelectionModel model,PageFormat format) throws RaplaException {
        CalendarPrintDialog dlg;
        Component topLevel = getOwnerWindow(owner);
        if (topLevel instanceof Dialog)
            dlg = new CalendarPrintDialog(sm,(Dialog)topLevel);
        else
            dlg = new CalendarPrintDialog(sm,(Frame)topLevel);

        try {
            dlg.init(modal,model,format);
        } catch (Exception ex) {
            throw new RaplaException( ex );
        }
        return dlg;
    }

    protected CalendarPrintDialog(RaplaContext sm,Dialog owner) throws RaplaException {
        super(sm,owner);
        exportServiceList = new ExportServiceList( sm);
    }

    protected CalendarPrintDialog(RaplaContext sm,Frame owner) throws RaplaException {
        super(sm,owner);
        exportServiceList = new ExportServiceList( sm);
    }

    private void init(boolean modal,CalendarSelectionModel model,PageFormat format) throws Exception {
        super.init(modal,new JPanel(),new String[] {"print","format","print_to_file","cancel"});
        this.model = model;
            
        printTool = (IOInterface) getContext().lookup(IOInterface.ROLE);
        i18n = (I18nBundle) getContext().lookup(I18nBundle.ROLE + "/org.rapla.RaplaResources");

        m_format = format;
        if (m_format == null) {
            m_format = createPageFormat();
            m_format.setOrientation(m_format.getOrientation());
        }

        ViewFactory factory = (ViewFactory)getContext().lookup( RaplaExtensionPoints.CALENDAR_VIEW_EXTENSION + "/" +  model.getViewId());
        currentView = factory.createSwingView( getContext(), model, false);
        if ( currentView instanceof Printable)
        {
            printable = (Printable)currentView;
        }
        else
        {
            printable = new ComponentPrinter( currentView.getComponent(), true);
        }
        String title = model.getTitle();
        content.setLayout(new BorderLayout());
        titlePanel.add(titleLabel);
        titlePanel.add(titleEdit);

        String[] blockSizes = new String[sizes.length];
        for (int i=0;i<sizes.length;i++) 
        {
            blockSizes[i] = String.valueOf(sizes[i]);
        }

        sizeChooser= new JComboBox(blockSizes);
        sizeChooser.setEditable(true);
        sizeChooser.setMaximumRowCount(3);
        titlePanel.add(sizeLabel);
        titlePanel.add(sizeChooser);
        titleEdit.setColumns(30);
        titleEdit.setText(title);
        content.add(titlePanel, BorderLayout.NORTH);


        scrollPane =new JScrollPane( page );
        scrollPane.setPreferredSize(new Dimension(730,450));
        content.add(scrollPane, BorderLayout.CENTER);
        content.add(southPanel, BorderLayout.SOUTH);
        southPanel.setMaximumSize( new Dimension(1,1));
        southPanel.setMinimumSize( new Dimension(1,1));
        southPanel.setPreferredSize( new Dimension(1,1));
        southPanel.setLayout( null);
        southPanel.add( currentView.getComponent());
        updateSizes( m_format );
        scrollPane.getVerticalScrollBar().setUnitIncrement(10);
        scrollPane.getHorizontalScrollBar().setUnitIncrement(10);


        printbutton = getButton(0);
        printbutton.setAction(listener);
        formatbutton = getButton(1);
        formatbutton.setAction(listener);
        savebutton = getButton(2);
        savebutton.setAction(listener);
        cancelbutton = getButton(3);

        
        savebutton.setVisible(exportServiceList.getServices().length>0);
        //swingCalendar.setPrintView(true);
        currentView.update();
        sizeLabel.setText(i18n.getString("width") + ":");
        titleLabel.setText(i18n.getString("weekview.print.title_textfield")+":");
        setTitle(i18n.getString("weekview.print.dialog_title"));
        printbutton.setIcon(i18n.getIcon("icon.print"));
        savebutton.setText(i18n.getString("print_to_file"));
        savebutton.setIcon(i18n.getIcon("icon.save"));
        printbutton.setText(i18n.getString("print"));
        formatbutton.setText(i18n.getString("weekview.print.format_button"));
        cancelbutton.setText(i18n.getString("cancel"));
        cancelbutton.setIcon(i18n.getIcon("icon.cancel"));

        /*
        if (getSession().getValue(LAST_SELECTED_SIZE) != null)
            weekview.setSlotSize(((Integer)getSession().getValue(LAST_SELECTED_SIZE)).intValue());
        */
        int columnSize = model.getSize();
        sizeChooser.setSelectedItem(String.valueOf(columnSize));

        titleEdit.addActionListener(listener);
        titleEdit.addKeyListener(listener);
        sizeChooser.addActionListener(listener);

    }

    private void updateSizes( PageFormat format)
    {
        page.setPreferredSize( new Dimension( 900,900));
        //currentView.getComponent().setBounds(0,0,2000,1000);
        //currentView.getComponent().setBounds(0,0,1000,1000);
    }

    private PageFormat createPageFormat() {
        PageFormat format= (PageFormat) printTool.defaultPage().clone();
        format.setOrientation(PageFormat.LANDSCAPE);
        Paper paper = format.getPaper();
        paper.setImageableArea(
                               defaultBorder * IOInterface.MM_TO_INCH * 72
                               ,defaultBorder * IOInterface.MM_TO_INCH * 72
                               ,paper.getWidth() - 2 * defaultBorder * IOInterface.MM_TO_INCH * 72
                               ,paper.getHeight() - 2 * defaultBorder * IOInterface.MM_TO_INCH * 72
                               );
        format.setPaper(paper);
        return format;
    }

    public void start() {
        super.start();
    }

    private class Listener extends AbstractAction implements KeyListener {
        private static final long serialVersionUID = 1L;

        public void keyReleased(KeyEvent evt)   {
            try {
                model.setTitle(titleEdit.getText());
                currentView.update();
                scrollPane.invalidate();
                scrollPane.repaint();
            } catch (Exception ex) {
                showException(ex);
            }
        }
        public void keyTyped(KeyEvent evt)   {
        }
        public void keyPressed(KeyEvent evt)   {
        }
        public void actionPerformed(ActionEvent evt)    {
            try {
                if (evt.getSource()==sizeChooser) {
                    try {
                        int slotSize = Integer.valueOf((String)sizeChooser.getSelectedItem()).intValue();
                        model.setColumnSize(slotSize);
                    } catch (Exception ex) {
                        return;
                    }
                    currentView.update();
                    scrollPane.invalidate();
                    scrollPane.repaint();
                }
                if (evt.getSource()==titleEdit) {
                    model.setTitle(titleEdit.getText());
                    currentView.update();
                    scrollPane.invalidate();
                    scrollPane.repaint();
                }


                if (evt.getSource()==formatbutton) {
                    m_format= printTool.showFormatDialog(m_format);
                    updateSizes( m_format);
                    scrollPane.invalidate();
                    scrollPane.repaint();
                }

                if (evt.getSource()==printbutton) {
                    if (printTool.print(
                                 printable
                                , m_format
                                , false
                                                 )
                        )
                    {
                    	// We can't close or otherwise it won't work under windows
                        //close();
                    }
                }

                if (evt.getSource()==savebutton) {
                    exportServiceList.export(
                            printable
                            ,m_format
                            ,scrollPane
                                                 );
                }

            } catch (Exception ex) {
                showException(ex);
            }
        }
    }

    public void showException(Exception ex) {
        ErrorDialog dialog;
        try {
            dialog = new ErrorDialog(getContext());
            dialog.showExceptionDialog(ex,this);
        } catch (RaplaException e) {
        }
    }
}

⌨️ 快捷键说明

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