📄 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 Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.print;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.event.*;
import org.compiere.apps.*;
import org.compiere.apps.search.*;
import org.compiere.model.*;
import org.compiere.swing.*;
import org.compiere.util.*;
import com.qoppa.pdf.*;
/**
* Print View Frame
*
* @author Jorg Janke
* @version $Id: Viewer.java,v 1.52 2005/12/27 06:18:37 jjanke Exp $
*/
public class Viewer extends CFrame
implements ActionListener, ChangeListener, WindowStateListener
{
/**
* Viewer Constructor
* @param re report engine
*/
public Viewer (ReportEngine re)
{
super();
log.info("");
m_WindowNo = Env.createWindowNo(this);
m_reportEngine = re;
m_AD_Table_ID = re.getPrintFormat().getAD_Table_ID();
if (!MRole.getDefault().isCanReport(m_AD_Table_ID))
{
ADialog.error(m_WindowNo, this, "AccessCannotReport", m_reportEngine.getName());
this.dispose();
}
m_isCanExport = MRole.getDefault().isCanExport(m_AD_Table_ID);
try
{
m_viewPanel = re.getView();
m_ctx = m_reportEngine.getCtx();
jbInit();
dynInit();
if (!m_viewPanel.isArchivable())
log.warning("Cannot archive Document");
AEnv.showCenterScreen(this);
}
catch(Exception e)
{
log.log(Level.SEVERE, "", e);
ADialog.error(m_WindowNo, this, "LoadError", e.getLocalizedMessage());
this.dispose();
}
} // 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;
/** Table ID */
private int m_AD_Table_ID = 0;
private boolean m_isCanExport;
private MQuery m_ddQ = null;
private MQuery m_daQ = null;
private CMenuItem m_ddM = null;
private CMenuItem m_daM = null;
/** Logger */
private static CLogger log = CLogger.getCLogger(Viewer.class);
//
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 bSendMail = new CButton();
private CButton bPageSetup = new CButton();
private CButton bArchive = 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
{
this.setIconImage(Env.getImage("mReport.gif"));
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"));
toolBar.addSeparator();
// Print/Export
toolBar.add(bPrint);
toolBar.addSeparator();
toolBar.add(bPageSetup);
bPageSetup.setToolTipText(Msg.getMsg(m_ctx, "PageSetup"));
toolBar.add(bSendMail);
toolBar.add(bArchive);
if (m_isCanExport)
{
bExport.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(m_reportEngine.getPrintFormat().get_ID());
// View Panel Mouse Listener
m_viewPanel.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (SwingUtilities.isRightMouseButton(e))
mouse_clicked(e,true);
else if (e.getClickCount() > 1)
mouse_clicked(e,false);
}
});
// 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, null);
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.log(Level.SEVERE, sql, e);
}
if (comboDrill.getItemCount() == 1)
{
labelDrill.setVisible(false);
comboDrill.setVisible(false);
}
else
comboDrill.addActionListener(this);
revalidate();
} // dynInit
/**
* Fill ComboBox 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 = MRole.getDefault().addAccessSQL(
"SELECT AD_PrintFormat_ID, Name, Description "
+ "FROM AD_PrintFormat "
+ "WHERE AD_Table_ID=? "
+ "ORDER BY Name",
"AD_PrintFormat", MRole.SQL_NOTQUALIFIED, MRole.SQL_RO);
int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID();
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
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.log(Level.SEVERE, sql, 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*View.MARGIN,
m_viewPanel.getPaperHeight()+2*View.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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -