📄 viewer.java
字号:
if (m_setting)
return;
String cmd = e.getActionCommand();
Log.trace(Log.l4_Data, "Viewer.actionPerformed", cmd);
//
if (e.getSource() == comboZoom)
cmd_zoom();
else if (e.getSource() == comboReport)
cmd_report();
else if (e.getSource() == comboDrill)
cmd_drill();
else if (cmd.equals("First"))
setPage(1);
else if (cmd.equals("PreviousPage") || cmd.equals("Previous"))
setPage(m_pageNo-1);
else if (cmd.equals("NextPage") || cmd.equals("Next"))
setPage(m_pageNo+1);
else if (cmd.equals("Last"))
setPage(m_pageMax);
else if (cmd.equals("Find"))
cmd_find();
else if (cmd.equals("Export"))
cmd_export();
else if (cmd.equals("Print"))
cmd_print();
else if (cmd.equals("PrintCustomize"))
cmd_customize();
else if (cmd.equals("PageSetup"))
cmd_pageSetup();
else if (cmd.equals("Translate"))
cmd_translate();
else if (cmd.equals("End"))
dispose();
else if (!AEnv.actionPerformed(e.getActionCommand(), m_WindowNo, this))
Log.error("AMenu.actionPerformed - unknown action=" + e.getActionCommand());
} // actionPerformed
/**
* Change Listener (spinner, viewpoint)
* @param e event
*/
public void stateChanged (ChangeEvent e)
{
if (m_setting)
return;
// Log.trace(Log.l4_Data, "Viewer.stateChanged", e);
m_setting = true;
int newPage = 0;
if (e.getSource() == spinner)
{
newPage = ((Integer)spinnerModel.getValue()).intValue();
}
else // Viewpoint
{
Point p = centerScrollPane.getViewport().getViewPosition();
newPage = Math.round(m_viewPanel.getPageNoAt(p));
}
setPage(newPage);
m_setting = false;
} // stateChanged
/**
* Set Page No
* @param page page no
*/
private void setPage (int page)
{
m_setting = true;
m_pageNo = page;
if (m_pageNo < 1)
m_pageNo = 1;
if (page > m_pageMax)
m_pageNo = m_pageMax;
bPrevious.setEnabled (m_pageNo != 1);
bNext.setEnabled (m_pageNo != m_pageMax);
//
Rectangle pageRectangle = m_viewPanel.getRectangleOfPage(m_pageNo);
pageRectangle.x -= m_viewPanel.MARGIN;
pageRectangle.y -= m_viewPanel.MARGIN;
centerScrollPane.getViewport().setViewPosition(pageRectangle.getLocation());
// System.out.println("scrollTo " + pageRectangle);
// Set Page
spinnerModel.setValue(new Integer(m_pageNo));
StringBuffer sb = new StringBuffer (Msg.getMsg(m_ctx, "Page"))
.append(" ").append(m_pageNo)
.append(m_viewPanel.getPageInfo(m_pageNo))
.append(" ").append(Msg.getMsg(m_ctx, "of")).append(" ")
.append(m_pageMax)
.append(m_viewPanel.getPageInfoMax());
statusBar.setStatusDB(sb.toString());
m_setting = false;
} // setPage
/*************************************************************************/
/**
* (Re)Set Drill Accross Cursor
*/
private void cmd_drill()
{
m_drillDown = comboDrill.getSelectedIndex() < 1; // -1 or 0
if (m_drillDown)
setCursor(Cursor.getDefaultCursor());
else
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} // cmd_drill
/**
* Mouse clicked
* @param e event
*/
private void mouse_clicked(MouseEvent e)
{
Point point = e.getPoint();
Log.trace(Log.l1_User, "Viewer.mouse_clicked", point);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
if (m_drillDown)
{
MQuery query = m_viewPanel.getDrillDown(point);
if (query != null)
{
Log.trace(Log.l1_User, "Viewer.mouseClicked - Drill Down", query.getWhereClause(true));
executeDrill(query);
}
}
else if (comboDrill.getSelectedItem() != null && comboDrill.getSelectedIndex() > 0)
{
MQuery query = m_viewPanel.getDrillAcross(point);
if (query != null)
{
NamePair pp = (NamePair)comboDrill.getSelectedItem();
query.setTableName(pp.getID());
Log.trace(Log.l1_User, "Viewer.mouseClicked - Drill Accross", query.getWhereClause(true));
executeDrill(query);
}
}
cmd_drill(); // setCursor
} // mouse_clicked
/**
* Execute Drill to Query
* @param query query
*/
private void executeDrill (MQuery query)
{
int AD_Table_ID = AReport.getAD_Table_ID(query.getTableName());
if (AD_Table_ID != 0)
new AReport (AD_Table_ID, null, query);
else
Log.error("Viewer.executeDrill - No Table found for " + query.getWhereClause(true));
} // executeDrill
/*************************************************************************/
/**
* Print Report
*/
private void cmd_print()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_reportEngine.print(true, 1, false);
cmd_drill(); // setCursor
} // cmd_print
/**
* Print Setup Dialog
*/
private void cmd_pageSetup()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_reportEngine.pageSetupDialog();
revalidate();
cmd_drill(); // setCursor
} // cmd_pageSetup
/**
* Export
*/
private void cmd_export()
{
Log.trace(Log.l3_Util, "Viewer.cmd_export");
//
JFileChooser chooser = new JFileChooser();
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
chooser.setDialogTitle(Msg.getMsg(m_ctx, "Export") + ": " + getTitle());
//
chooser.addChoosableFileFilter(new ExtensionFileFilter("ps", Msg.getMsg(m_ctx, "FilePS")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("xml", Msg.getMsg(m_ctx, "FileXML")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("pdf", Msg.getMsg(m_ctx, "FilePDF")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("html", Msg.getMsg(m_ctx, "FileHTML")));
chooser.addChoosableFileFilter(new ExtensionFileFilter("csv", Msg.getMsg(m_ctx, "FileCSV")));
//
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
return;
// Create File
File outFile = ExtensionFileFilter.getFile(chooser.getSelectedFile(), chooser.getFileFilter());
try
{
outFile.createNewFile();
}
catch (IOException e)
{
ADialog.error(m_WindowNo, this, "FileCannotCreate", e.getLocalizedMessage());
return;
}
String ext = outFile.getPath();
// no extension
if (ext.lastIndexOf(".") == -1)
{
ADialog.error(m_WindowNo, this, "FileInvalidExtension");
return;
}
ext = ext.substring(ext.lastIndexOf(".")+1).toLowerCase();
Log.trace(Log.l4_Data, "File=" + outFile.getPath() + "; Type=" + ext);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
if (ext.equals("pdf"))
m_reportEngine.createPDF(outFile);
else if (ext.equals("ps"))
m_reportEngine.createPS(outFile);
else if (ext.equals("xml"))
m_reportEngine.createXML(outFile);
else if (ext.equals("csv"))
m_reportEngine.createCSV(outFile, ',', m_reportEngine.getPrintFormat().getLanguage());
else if (ext.equals("html") || ext.equals("htm"))
m_reportEngine.createHTML(outFile, false, m_reportEngine.getPrintFormat().getLanguage());
else
ADialog.error(m_WindowNo, this, "FileInvalidExtension");
cmd_drill(); // setCursor
} // cmd_export
/**
* Report Combo - Start other Report or create new one
*/
private void cmd_report()
{
KeyNamePair pp = (KeyNamePair)comboReport.getSelectedItem();
if (pp == null)
return;
//
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
MPrintFormat pf = null;
int AD_PrintFormat_ID = pp.getKey();
// create new
if (AD_PrintFormat_ID == -1)
{
pf = MPrintFormat.createFromTable(m_ctx, m_reportEngine.getPrintFormat().getAD_Table_ID());
fillComboReport(pf.getID());
}
else
pf = MPrintFormat.get (AD_PrintFormat_ID, true);
m_reportEngine.setPrintFormat(pf);
revalidate();
cmd_drill(); // setCursor
} // cmd_report
/**
* Query Report
*/
private void cmd_find()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_reportEngine.getQuery();
int AD_Table_ID = m_reportEngine.getPrintFormat().getAD_Table_ID();
MTabVO tabVO = MTabVO.create(Env.getCtx(), m_WindowNo, AD_Table_ID);
if (tabVO == null) // No Tab for Table exists
bFind.setEnabled(false);
else
{
Find find = new Find (this, m_WindowNo, new MTab(tabVO));
m_reportEngine.setQuery(find.getQuery());
revalidate();
}
cmd_drill(); // setCursor
} // cmd_find
/**
* Call Customize
*/
private void cmd_customize()
{
AWindow win = new AWindow ();
new AWindowListener (win, this); // forwards Window Events
int AD_Window_ID = 240; // hardcoded
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().getID();
win.initWindow(AD_Window_ID, MQuery.getEqualQuery("AD_PrintFormat_ID", AD_PrintFormat_ID), false);
AEnv.showCenterScreen(win);
// see windowStateChanged for applying change
} // cmd_customize
/**
* Window State Listener for Customize Window
* @param e event
*/
public void windowStateChanged (WindowEvent e)
{
// The Customize Window was closed
if (e.getID() == WindowEvent.WINDOW_CLOSED && m_reportEngine != null)
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
Log.trace(Log.l1_User, "Viewer.windowStateChanged - re-read PrintFormat");
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().getID();
Language language = m_reportEngine.getPrintFormat().getLanguage();
MPrintFormat pf = MPrintFormat.get (AD_PrintFormat_ID, true);
pf.setLanguage (language); // needs to be re-set - otherwise viewer will be blank
pf.setTranslationLanguage (language);
m_reportEngine.setPrintFormat(pf);
revalidate();
cmd_drill(); // setCursor
}
} // windowStateChanged
/**
* Set Zoom Level
*/
private void cmd_zoom()
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
m_viewPanel.setZoomLevel(comboZoom.getSelectedIndex());
revalidate();
cmd_drill(); // setCursor
} // cmd_zoom
/**
* Show Translation Dialog.
* Translate base table entry, will be copied to trl tables if not multi-lingual
*/
private void cmd_translate()
{
ArrayList list = new ArrayList();
ValueNamePair pp = null;
String sql = "SELECT Name, AD_Language FROM AD_Language ORDER BY 1";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new ValueNamePair (rs.getString(2), rs.getString(1)));
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("Viewer.cmd_translate", e);
}
// Dialog
String title = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", true);
String message = Msg.getMsg(Env.getCtx(), "PrintFormatTrl", false);
int choice = JOptionPane.showOptionDialog(this, message, title,
JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, null,
list.toArray(), null);
if (choice == JOptionPane.CLOSED_OPTION)
return;
//
pp = (ValueNamePair)list.get(choice);
String AD_Language = pp.getValue();
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().getID();
Log.trace(Log.l3_Util, "Viewer.cmd_translate", AD_Language + " - AD_PrintFormat_ID=" + AD_PrintFormat_ID);
StringBuffer sb = new StringBuffer();
// English
if (Language.isBaseLanguage (AD_Language))
{
sb.append("UPDATE AD_PrintFormatItem pfi "
+ "SET Name = (SELECT e.Name FROM AD_Element e, AD_Column c"
+ " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID),"
+ "PrintName = (SELECT e.PrintName FROM AD_Element e, AD_Column c"
+ " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID) "
+ "WHERE AD_PrintFormat_ID=").append(AD_PrintFormat_ID).append(
" AND EXISTS (SELECT * FROM AD_Element e, AD_Column c"
+ " WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)");
}
else
{
AD_Language = "'" + AD_Language + "'";
sb.append("UPDATE AD_PrintFormatItem pfi "
+ "SET Name = (SELECT e.Name FROM AD_Element_Trl e, AD_Column c"
+ " WHERE e.AD_Language=").append(AD_Language).append(
" AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID), "
+ "PrintName = (SELECT e.PrintName FROM AD_Element_Trl e, AD_Column c"
+ " WHERE e.AD_Language=").append(AD_Language).append(
" AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID) "
+ "WHERE AD_PrintFormat_ID=").append(AD_PrintFormat_ID).append(
" AND EXISTS (SELECT * FROM AD_Element_Trl e, AD_Column c"
+ " WHERE e.AD_Language=").append(AD_Language).append(
" AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=pfi.AD_Column_ID)");
}
int count = DB.executeUpdate(sb.toString());
Log.trace(Log.l3_Util, "Viewer.cmd_translate", "Count=" + count);
//
m_reportEngine.setPrintFormat(MPrintFormat.get (AD_PrintFormat_ID, true));
revalidate();
} // cmd_translate
/*************************************************************************/
/**
* Test
* @param args args
*/
static public void main (String[] args)
{
Env.initTest(9, true);
MQuery q = new MQuery("C_Invoice");
q.addRestriction("C_Invoice_ID", MQuery.EQUAL, new Integer(103));
// 102 = Invoice - 100 = Order
MPrintFormat f = MPrintFormat.get (102, false);
ReportEngine re = new ReportEngine(Env.getCtx(), f, q);
// MPrintFormat f = new MPrintFormat(Env.getCtx(), 101);
// ReportEngine re = new ReportEngine(f, null);
new Viewer(re);
} // main
} // Viewer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -