📄 viewer.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2002 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.print;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
import java.io.*;
import java.util.*;
import org.compiere.plaf.*;
import org.compiere.swing.*;
import org.compiere.print.*;
import org.compiere.apps.*;
import org.compiere.apps.search.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Print View Frame
*
* @author Jorg Janke
* @version $Id: Viewer.java,v 1.23 2003/04/24 06:11:11 jjanke Exp $
*/
public class Viewer extends JFrame
implements ActionListener, ChangeListener, WindowStateListener
{
/**
* Viewer Constructor
* @param re report engine
*/
public Viewer (ReportEngine re)
{
super();
Log.trace(Log.l2_Sub, "Viewer");
m_WindowNo = Env.createWindowNo(this);
m_reportEngine = re;
m_viewPanel = re.getView();
m_ctx = m_reportEngine.getCtx();
try
{
jbInit();
dynInit();
}
catch(Exception e)
{
Log.error("Viewer", e);
}
AEnv.showCenterScreen(this);
} // Viewer
/** Window No */
private int m_WindowNo;
/** Print Context */
private Properties m_ctx;
/** Page No */
private int m_pageNo = 1;
/** Max Page Number */
private int m_pageMax = 1;
/** View Pane */
private View m_viewPanel;
/** Setting Values */
private boolean m_setting = false;
/** Report Engine */
private ReportEngine m_reportEngine;
/** Drill Down/Across */
private boolean m_drillDown = true;
//
private CPanel northPanel = new CPanel();
private JScrollPane centerScrollPane = new JScrollPane();
private StatusBar statusBar = new StatusBar(false);
private JMenuBar menuBar = new JMenuBar();
private JToolBar toolBar = new JToolBar();
private CButton bPrint = new CButton();
private CButton bPageSetup = new CButton();
private BorderLayout northLayout = new BorderLayout();
private CButton bCustomize = new CButton();
private CButton bEnd = new CButton();
private CButton bFind = new CButton();
private CButton bExport = new CButton();
private CComboBox comboReport = new CComboBox();
private CButton bPrevious = new CButton();
private CButton bNext = new CButton();
private SpinnerNumberModel spinnerModel = new SpinnerNumberModel(1,1,100,1);
private JSpinner spinner = new JSpinner(spinnerModel);
private CLabel labelDrill = new CLabel();
private CComboBox comboDrill = new CComboBox();
private CComboBox comboZoom = new CComboBox(View.ZOOM_OPTIONS);
/**
* Static Layout
* @throws Exception
*/
private void jbInit() throws Exception
{
CompiereColor.setBackground(this);
this.setIconImage(org.compiere.Compiere.getImage16());
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//
northPanel.setLayout(northLayout);
this.getContentPane().add(northPanel, BorderLayout.NORTH);
northPanel.add(toolBar, BorderLayout.EAST);
this.getContentPane().add(centerScrollPane, BorderLayout.CENTER);
centerScrollPane.getViewport().add(m_viewPanel, null);
this.getContentPane().add(statusBar, BorderLayout.SOUTH);
// ToolBar
this.setJMenuBar(menuBar);
// Page Control
toolBar.add(bPrevious);
toolBar.add(spinner);
spinner.setToolTipText(Msg.getMsg(m_ctx, "GoToPage"));
toolBar.add(bNext);
// Zoom Level
toolBar.addSeparator();
toolBar.add(comboZoom, null);
comboZoom.setToolTipText(Msg.getMsg(m_ctx, "Zoom"));
// Drill
toolBar.addSeparator();
labelDrill.setText(Msg.getMsg(m_ctx, "Drill") + ": ");
toolBar.add(labelDrill);
toolBar.add(comboDrill);
comboDrill.setToolTipText(Msg.getMsg(m_ctx, "Drill"));
// Format, Customize, Find
toolBar.addSeparator();
toolBar.add(comboReport);
comboReport.setToolTipText(Msg.translate(m_ctx, "AD_PrintFormat_ID"));
toolBar.add(bCustomize);
bCustomize.setToolTipText(Msg.getMsg(m_ctx, "PrintCustomize"));
toolBar.add(bFind);
bFind.setToolTipText(Msg.getMsg(m_ctx, "Find"));
// Print/Export
toolBar.addSeparator();
toolBar.add(bPageSetup);
bPageSetup.setToolTipText(Msg.getMsg(m_ctx, "PageSetup"));
toolBar.add(bPrint);
bPrint.setToolTipText(Msg.getMsg(m_ctx, "Export"));
toolBar.add(bExport);
// End
toolBar.addSeparator();
toolBar.add(bEnd, null);
bEnd.setToolTipText(Msg.getMsg(m_ctx, "End"));
} // jbInit
/**
* Dynamic Init
*/
private void dynInit()
{
createMenu();
comboZoom.addActionListener(this);
// Change Listener to set Page no
centerScrollPane.getViewport().addChangeListener(this);
// Max Page
m_pageMax = m_viewPanel.getPageCount();
spinnerModel.setMaximum(new Integer(m_pageMax));
spinner.addChangeListener(this);
fillComboReport(0);
// View Panel Mouse Listener
m_viewPanel.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getClickCount() > 1)
mouse_clicked(e);
}
});
// fill Drill Options (Name, TableName)
comboDrill.addItem(new ValueNamePair (null,""));
String sql = "SELECT t.AD_Table_ID, t.TableName, e.PrintName, NULLIF(e.PO_PrintName,e.PrintName) "
+ "FROM AD_Column c "
+ " INNER JOIN AD_Column used ON (c.ColumnName=used.ColumnName)"
+ " INNER JOIN AD_Table t ON (used.AD_Table_ID=t.AD_Table_ID AND t.IsView='N' AND t.AD_Table_ID <> c.AD_Table_ID)"
+ " INNER JOIN AD_Column cKey ON (t.AD_Table_ID=cKey.AD_Table_ID AND cKey.IsKey='Y')"
+ " INNER JOIN AD_Element e ON (cKey.ColumnName=e.ColumnName) "
+ "WHERE c.AD_Table_ID=? AND c.IsKey='Y' "
+ "ORDER BY 3";
boolean trl = !Env.isBaseLanguage(Env.getCtx(), "AD_Element");
if (trl)
sql = "SELECT t.AD_Table_ID, t.TableName, et.PrintName, NULLIF(et.PO_PrintName,et.PrintName) "
+ "FROM AD_Column c"
+ " INNER JOIN AD_Column used ON (c.ColumnName=used.ColumnName)"
+ " INNER JOIN AD_Table t ON (used.AD_Table_ID=t.AD_Table_ID AND t.IsView='N' AND t.AD_Table_ID <> c.AD_Table_ID)"
+ " INNER JOIN AD_Column cKey ON (t.AD_Table_ID=cKey.AD_Table_ID AND cKey.IsKey='Y')"
+ " INNER JOIN AD_Element e ON (cKey.ColumnName=e.ColumnName)"
+ " INNER JOIN AD_Element_Trl et ON (e.AD_Element_ID=et.AD_Element_ID) "
+ "WHERE c.AD_Table_ID=? AND c.IsKey='Y'"
+ " AND et.AD_Language=? "
+ "ORDER BY 3";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, m_reportEngine.getPrintFormat().getAD_Table_ID());
if (trl)
pstmt.setString(2, Env.getAD_Language(Env.getCtx()));
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
String tableName = rs.getString(2);
String name = rs.getString(3);
String poName = rs.getString(4);
if (poName != null)
name += "/" + poName;
comboDrill.addItem(new ValueNamePair (tableName, name));
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("Viewer.dynInit - Drill", e);
}
if (comboDrill.getItemCount() == 1)
{
labelDrill.setVisible(false);
comboDrill.setVisible(false);
}
else
comboDrill.addActionListener(this);
revalidate();
} // dynInit
/**
* Fill ConvoBox comboReport (report options)
* @param AD_PrintFormat_ID item to be selected
*/
private void fillComboReport(int AD_PrintFormat_ID)
{
comboReport.removeActionListener(this);
comboReport.removeAllItems();
KeyNamePair selectValue = null;
// fill Report Options
String sql = Access.addROAccessSQL(m_ctx,
"SELECT AD_PrintFormat_ID, Name, Description "
+ "FROM AD_PrintFormat "
+ "WHERE AD_Table_ID=?",
"AD_PrintFormat", false);
int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID();
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, AD_Table_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
KeyNamePair pp = new KeyNamePair(rs.getInt(1), rs.getString(2));
comboReport.addItem(pp);
if (rs.getInt(1) == AD_PrintFormat_ID)
selectValue = pp;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("Viewer.fillComboReport", e);
}
StringBuffer sb = new StringBuffer("** ").append(Msg.getMsg(m_ctx, "NewReport")).append(" **");
KeyNamePair pp = new KeyNamePair(-1, sb.toString());
comboReport.addItem(pp);
if (selectValue != null)
comboReport.setSelectedItem(selectValue);
comboReport.addActionListener(this);
} // fillComboReport
/**
* Revalidate settings after change of environment
*/
private void revalidate()
{
m_pageMax = m_viewPanel.getPageCount();
spinnerModel.setMaximum(new Integer(m_pageMax));
// scroll area (page size dependent)
centerScrollPane.setPreferredSize(new Dimension
(m_viewPanel.getPaperWidth()+30, m_viewPanel.getPaperHeight()+15));
centerScrollPane.getViewport().setViewSize(new Dimension
(m_viewPanel.getPaperWidth()+2*m_viewPanel.MARGIN,
m_viewPanel.getPaperHeight()+2*m_viewPanel.MARGIN));
// Report Info
setTitle(Msg.getMsg(m_ctx, "Report") + ": " + m_reportEngine.getName() + " " + Env.getHeader(m_ctx, 0));
StringBuffer sb = new StringBuffer ();
sb.append(m_viewPanel.getPaper().toString(m_ctx))
.append(" - ").append(Msg.getMsg(m_ctx, "DataCols")).append("=")
.append(m_reportEngine.getColumnCount())
.append(", ").append(Msg.getMsg(m_ctx, "DataRows")).append("=")
.append(m_reportEngine.getRowCount());
statusBar.setStatusLine(sb.toString());
//
setPage(m_pageNo);
} // revalidate
/**
* Create Menu
*/
private void createMenu()
{
// File
JMenu mFile = AEnv.getMenu("File");
menuBar.add(mFile);
AEnv.addMenuItem("PrintScreen", null, KeyStroke.getKeyStroke(KeyEvent.VK_PRINTSCREEN, 0), mFile, this);
AEnv.addMenuItem("ScreenShot", null, KeyStroke.getKeyStroke(KeyEvent.VK_PRINTSCREEN, Event.SHIFT_MASK), mFile, this);
AEnv.addMenuItem("Report", null, KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.ALT_MASK), mFile, this);
mFile.addSeparator();
AEnv.addMenuItem("PrintCustomize", "Preference", null, mFile, this);
AEnv.addMenuItem("Translate", null, null, mFile, this);
AEnv.addMenuItem("Find", null, KeyStroke.getKeyStroke(KeyEvent.VK_F, Event.CTRL_MASK), mFile, this);
mFile.addSeparator();
AEnv.addMenuItem("PageSetup", null, null, mFile, this);
AEnv.addMenuItem("Print", null, KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK), mFile, this);
AEnv.addMenuItem("Export", null, null, mFile, this);
mFile.addSeparator();
AEnv.addMenuItem("End", null, KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.ALT_MASK), mFile, this);
AEnv.addMenuItem("Exit", null, KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.SHIFT_MASK+Event.ALT_MASK), mFile, this);
// View
JMenu mView = AEnv.getMenu("View");
menuBar.add(mView);
AEnv.addMenuItem("InfoProduct", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.CTRL_MASK), mView, this);
AEnv.addMenuItem("InfoBPartner", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.SHIFT_MASK+Event.CTRL_MASK), mView, this);
AEnv.addMenuItem("InfoAccount", null, KeyStroke.getKeyStroke(KeyEvent.VK_I, Event.ALT_MASK+Event.CTRL_MASK), mView, this);
AEnv.addMenuItem("InfoSchedule", null, null, mView, this);
mView.addSeparator();
AEnv.addMenuItem("InfoOrder", "Info", null, mView, this);
AEnv.addMenuItem("InfoInvoice", "Info", null, mView, this);
AEnv.addMenuItem("InfoInOut", "Info", null, mView, this);
AEnv.addMenuItem("InfoPayment", "Info", null, mView, this);
// Go
JMenu mGo = AEnv.getMenu("Go");
menuBar.add(mGo);
AEnv.addMenuItem("First", "First", KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, Event.ALT_MASK), mGo, this);
AEnv.addMenuItem("PreviousPage", "Previous", KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.ALT_MASK), mGo, this);
AEnv.addMenuItem("NextPage", "Next", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Event.ALT_MASK), mGo, this);
AEnv.addMenuItem("Last", "Last", KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, Event.ALT_MASK), mGo, this);
// Tools
JMenu mTools = AEnv.getMenu("Tools");
menuBar.add(mTools);
AEnv.addMenuItem("Calculator", null, null, mTools, this);
AEnv.addMenuItem("Calendar", null, null, mTools, this);
AEnv.addMenuItem("Editor", null, null, mTools, this);
AEnv.addMenuItem("Script", null, null, mTools, this);
mTools.addSeparator();
AEnv.addMenuItem("Preference", null, null, mTools, this);
// Help
JMenu mHelp = AEnv.getMenu("Help");
menuBar.add(mHelp);
AEnv.addMenuItem("Online", null, null, mHelp, this);
AEnv.addMenuItem("SendMail", null, null, mHelp, this);
AEnv.addMenuItem("About", null, null, mHelp, this);
// ---- ToolBar ----
//
setButton(bPrint, "Print", "Print");
setButton(bPageSetup, "PageSetup", "PageSetup");
setButton(bExport, "Export", "Export");
//
setButton(bNext, "NextPage", "Next");
setButton(bPrevious, "PreviousPage", "Previous");
//
setButton(bFind, "Find", "Find");
setButton(bCustomize, "PrintCustomize", "Preference");
//
setButton(bEnd, "End", "End");
} // createMenu
/**
* Set Button
* @param button button
* @param cmd command
* @param file fine mame
*/
private void setButton (AbstractButton button, String cmd, String file)
{
String text = Msg.getMsg(m_ctx, cmd);
button.setToolTipText(text);
button.setActionCommand(cmd);
//
ImageIcon ii24 = Env.getImageIcon(file+"24.gif");
if (ii24 != null)
button.setIcon(ii24);
button.setMargin(AppsAction.BUTTON_INSETS);
button.setPreferredSize(AppsAction.BUTTON_SIZE);
button.addActionListener(this);
} // setButton
/**
* Dispose
*/
public void dispose()
{
Env.clearWinContext(m_WindowNo);
m_reportEngine = null;
m_viewPanel = null;
m_ctx = null;
super.dispose();
} // dispose
/*************************************************************************/
/**
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -