📄 calendarprintdialog.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 + -