package com.teechart; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.border.BevelBorder; import com.dev.ntm.BattTestData; import com.dev.ntm.ntm_page_datamanage_chart; import com.steema.teechart.TChart; import com.steema.teechart.drawing.Color; import com.steema.teechart.drawing.DashStyle; import com.steema.teechart.events.TextResolver; import com.steema.teechart.styles.Bar; import com.steema.teechart.styles.Line; import com.steema.teechart.styles.MarksStyle; import com.steema.teechart.tools.MarksTip; import com.steema.teechart.tools.MarksTipMouseAction; /********************************* Tee Bar Chart ************************************************/ public class TBarChart extends TChart { public static final long serialVersionUID = 1L; public static final int Bar_Type_MonVol = 0; public static final int Bar_Type_MonTmp = 1; public static final int Bar_Type_MonRes = 2; public static final int Bar_Type_ConnRes = 3; public static final int Bar_Type_MonSer = 4; public static final int Bar_Type_MonSerPercent = 5; public static final int Bar_Type_MonCapVol = 6; public static final int Bar_Type_MonRealCap = 7; public static final int Bar_Type_MonRestCap = 8; public static final int Bar_Type_MonCapPercent = 9; public static final int Bar_Type_MonCapTmp = 10; private static final Color COLOR_MAX = Color.GREEN; private static final Color COLOR_MIN = Color.RED; private static final Color COLOR_AVG = Color.GRAY; private static final Color COLOR_SUBLOW = Color.MAGENTA; private static final Color COLOR_LOW = Color.MAGENTA; public Bar bar_ser; public float[] bar_values; private ArrayList m_colorlist = new ArrayList(); private int m_barvalue_battnum = -1; private int m_barvalue_battnum_ex = -1; private double bar_leftAxMax = 0; private int bar_value_count = 0; private Line line_ser_avg; private Line line_ser_low; private Line line_ser_sublow; private MarksTip tooltip1; private ntm_page_datamanage_chart m_UI; private int mBarType = Bar_Type_MonVol; private int m_UI_GridViewIndex = 0; public double max = 0; public double min = 900000; public double avg_val = 0; public double low_val = 0; public double high_val = 0; public int lowcount = 0; public float low_percent = 0; public TBarChart(ntm_page_datamanage_chart UI, int bar_type) { m_UI = UI; bar_ser = new Bar(); bar_ser.getMarks().setStyle(MarksStyle.VALUE); bar_ser.getMarks().setVisible(false); this.setBarValueFormat(bar_type); this.addSeries(bar_ser); this.addMouseListener(new MouseListener(){ @Override public void mouseClicked(MouseEvent arg0) { if(arg0.getClickCount() == 2) { setChartViewState(); } else if(arg0.getButton() == MouseEvent.BUTTON1) { // m_UI.m_UiTable.setAndScroledToRow(m_barvalue_battnum); } else if(arg0.getButton() == MouseEvent.BUTTON3) { JPopupMenu popupMenu = new JPopupMenu(); m_barvalue_battnum_ex = m_barvalue_battnum; JMenuItem tableItem_battindex = new JMenuItem("½öÏÔʾµ¥Ìå" + (m_barvalue_battnum_ex) + " ÇúÏß"); JMenuItem tableItem_add_battindex = new JMenuItem("Ìí¼ÓÏÔʾµ¥Ìå" + (m_barvalue_battnum_ex) + " ÇúÏß"); JMenuItem tableItem_vol = new JMenuItem("µ¥Ìåµçѹ(V)"); JMenuItem tableItem_tmp = new JMenuItem("µ¥ÌåζÈ(¡ãC)"); JMenuItem tableItem_realcap = new JMenuItem("µ¥Ìåʵ¼ÊÈÝÁ¿(AH)"); JMenuItem tableItem_restcap = new JMenuItem("µ¥ÌåÊ£ÓàÈÝÁ¿(AH)"); JMenuItem tableItem_cappercent = new JMenuItem("µ¥ÌåÈÝÁ¿°Ù·Ö±È"); String text = ""; if(m_barvalue_battnum_ex > 0) { text = "²é¿´µ¥Ìå" + (m_barvalue_battnum_ex) + " ÀúÊ·¼Ç¼"; } else { text = "²é¿´È«²¿µ¥ÌåÀúÊ·¼Ç¼"; } JMenuItem tableItem_historycap = new JMenuItem(text); JMenuItem tableItem_addtofault = new JMenuItem("Ìí¼Óµ½¹ÊÕÏÁбí"); JMenuItem tableItem_battlow_all = new JMenuItem("ÏÔʾËùÓÐÂäºóµ¥Ìå"); JMenuItem tableItem_battlow_now_only = new JMenuItem("½öÏÔʾµ±Ç°Âäºóµ¥Ìå"); JMenuItem tableItem_battselect_only = new JMenuItem("½öÏÔʾµ±Ç°Ñ¡ÔñµÄµ¥Ìå"); JMenuItem tableItem_batt_all = new JMenuItem("ÏÔʾËùÓе¥Ìå"); JMenuItem tableItem_restorezomm = new JMenuItem("»¹Ô­Ëõ·Å״̬"); JMenuItem tableItem_showbar_label = new JMenuItem("ÏÔʾ/Òþ²ØÊýÖµ"); JMenuItem tableItem_max_normal = new JMenuItem("×î´ó/Õý³£»¯Í¼±í"); ActionListener act_Listener = new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { if(arg0.getSource() == tableItem_vol) { m_UI.setBarChartDataType(BattTestData.MonData_Vol); } else if(arg0.getSource() == tableItem_tmp) { m_UI.setBarChartDataType(BattTestData.MonData_Tmp); } else if(arg0.getSource() == tableItem_realcap) { m_UI.setBarChartDataType(BattTestData.MonData_RealCap); } else if(arg0.getSource() == tableItem_restcap) { m_UI.setBarChartDataType(BattTestData.MonData_RestCap); } else if(arg0.getSource() == tableItem_cappercent) { m_UI.setBarChartDataType(BattTestData.MonData_CapPercent); } else if(arg0.getSource() == tableItem_historycap) { ArrayList Bnums = new ArrayList(); for(int n=0; n 0) { popupMenu.add(tableItem_battindex); popupMenu.add(tableItem_add_battindex); popupMenu.addSeparator(); } } /* if(!MainForm.is_app_for_bpm7100) { popupMenu.add(tableItem_historycap); popupMenu.addSeparator(); if(m_UI.main_form.getUsrPermit(PermitParam.p_battfault_add)) { popupMenu.add(tableItem_addtofault); popupMenu.addSeparator(); } } */ if(Bar_Type_MonCapVol == mBarType) { popupMenu.add(tableItem_battlow_all); popupMenu.add(tableItem_battlow_now_only); popupMenu.add(tableItem_battselect_only); popupMenu.add(tableItem_batt_all); popupMenu.addSeparator(); } popupMenu.add(tableItem_restorezomm); popupMenu.add(tableItem_showbar_label); popupMenu.add(tableItem_max_normal); popupMenu.show(arg0.getComponent(), arg0.getX(), arg0.getY()); } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub //arg0.getX(); } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }); line_ser_avg = new Line(); line_ser_avg.getLinePen().setStyle(DashStyle.DOT); line_ser_avg.setColor(COLOR_AVG); this.addSeries(line_ser_avg); line_ser_sublow = new Line(); line_ser_sublow.getLinePen().setStyle(DashStyle.DOT); line_ser_sublow.setColor(COLOR_SUBLOW); this.addSeries(line_ser_sublow); line_ser_low = new Line(); line_ser_low.getLinePen().setStyle(DashStyle.DOT); line_ser_low.setColor(COLOR_LOW); this.addSeries(line_ser_low); this.getChart().getTitle().setText(""); this.getChart().getTitle().getFont().setColor(Color.GRAY); this.getLegend().setVisible(false); this.getAspect().setView3D(false); this.getPanel().setMarginLeft(0); this.getPanel().setMarginRight(1); this.getPanel().setMarginTop(1.5); this.getPanel().setMarginBottom(2); this.getPanel().setColor(Color.BLACK); this.getAxes().getLeft().getLabels().getFont().setColor(Color.GRAY); this.getAxes().getLeft().getGrid().setColor(Color.fromArgb(50, 50, 50)); this.getAxes().getLeft().getAxisPen().setColor(Color.GRAY); this.getAxes().getBottom().getAxisPen().setColor(Color.GRAY); this.getAxes().getBottom().getLabels().getFont().setColor(Color.GRAY); this.getAxes().getBottom().getGrid().setVisible(false); tooltip1 = new MarksTip(this.getChart()); tooltip1.setMouseDelay(50); tooltip1.setMouseAction(MarksTipMouseAction.MOVE); tooltip1.setStyle(MarksStyle.LABELVALUE); tooltip1.setToolTipResolver(new TextResolver(){ @Override public String getText(Object arg0, String arg1) { // TODO Auto-generated method stub return arg1.replace(" ", " "); } }); tooltip1.addMouseMotionListener(new MouseMotionListener(){ @Override public void mouseDragged(MouseEvent arg0) { } @Override public void mouseMoved(MouseEvent arg0) { try { if(bar_ser.getYValues().count > 0) { int index = Integer.parseInt(String.format("%1.0f", bar_ser.xScreenToValue(arg0.getX()))) - 1; float bvalue = (float) bar_ser.yScreenToValue(arg0.getY()); m_barvalue_battnum = -1; for(int n=0; n= 0) && (index < bar_ser.getColors().getCount()) && (Math.abs(bvalue) <= Math.abs(bar_ser.getYValues().getValue(index)))) { bar_ser.getColors().setColor(index, Color.CYAN); String str = (String) (bar_ser.getLabels().get(index)); m_barvalue_battnum = Integer.parseInt(str.substring(1, str.length()).trim()); } bar_ser.repaint(); } } catch(Exception e) { System.out.println(e.getMessage()); } } }); } public void setGridViewIndex(int index) { m_UI_GridViewIndex = index; } public int getGridViewIndex() { return m_UI_GridViewIndex; } private void setChartViewState() { m_UI.setChartViewState(getGridViewIndex(), !m_UI.getChartViewState()); } public int getBarValueCount() { return bar_value_count; } /* public void setShowLowBattOnly(boolean sh) { show_lowbatt_only = sh; if(false == show_lowbatt_only) { restoreZoom(); } } */ public void setBarValueFormat(int bar_type) { mBarType = bar_type; switch(mBarType) { case Bar_Type_MonVol: bar_ser.setValueFormat("#0.000V"); break; case Bar_Type_MonTmp: bar_ser.setValueFormat("#0.0¡ãC"); break; case Bar_Type_MonRes: bar_ser.setValueFormat("#0.000m¦¸"); break; case Bar_Type_MonSer: bar_ser.setValueFormat("#"); break; case Bar_Type_MonSerPercent: bar_ser.setValueFormat("#0.0%"); break; case Bar_Type_ConnRes: bar_ser.setValueFormat("#0.000m¦¸"); break; case Bar_Type_MonCapVol: bar_ser.setValueFormat("#0.000V"); break; case Bar_Type_MonRealCap: bar_ser.setValueFormat("#AH"); break; case Bar_Type_MonRestCap: bar_ser.setValueFormat("#AH"); break; case Bar_Type_MonCapPercent: bar_ser.setValueFormat("#%"); break; case Bar_Type_MonCapTmp: bar_ser.setValueFormat("#0.0¡ãC"); break; } } public void restoreZoom() { this.getZoom().undo(); this.getAxes().getBottom().setMinMax(0.2, bar_value_count+0.6); } public void clearSerialData() { this.getChart().getTitle().setText(""); bar_ser.clear(); m_colorlist.clear(); line_ser_avg.clear(); line_ser_sublow.clear(); line_ser_low.clear(); //this.getChart().getAxes().getBottom().setMinMax(0, 0); this.getChart().getAxes().getLeft().setMinMax(0, 0); } private String getChartTitleString(String value_title, String value_formate) { float param = 1; if(value_formate.contains("%%")) { param = 100; } String str = String.format(value_title + ": MAX = " + value_formate + "; MIN = " + value_formate + "; AVG = " + value_formate, // + "; \n\r" // + "LOW = " + value_formate // + "; LC = %d" // + "; LP = %1.1f%%", max*param, min*param, avg_val*param, high_val*param/*, lowcount, low_percent*/); return str; } private void getLowMonNums(ArrayList al_nums) { al_nums.clear(); for(int n=0; n bar_values[n]) {min = bar_values[n];} } avg_val /= d_count; /* if((Bar_Type_MonVol == bar_type) || (Bar_Type_MonCapVol == bar_type)) { if(Config.AnalyseType_AVG == m_UI.m_CFG.showVolAnalyseType ) { high_val = avg_val * (m_UI.m_CFG.showSubLowMonVolPercent/100); low_val = avg_val * (m_UI.m_CFG.showLowMonVolPercent/100); } else { high_val = std_var * (m_UI.m_CFG.showSubLowMonVolPercent/100); low_val = std_var * (m_UI.m_CFG.showLowMonVolPercent/100); } } else if((Bar_Type_MonTmp == bar_type) || (Bar_Type_MonCapTmp == bar_type)){ if(Config.AnalyseType_AVG == m_UI.m_CFG.showTmpAnalyseType ) { high_val = avg_val * (m_UI.m_CFG.showSubHighMonTmpPercent/100); low_val = avg_val * (m_UI.m_CFG.showHighMonTmpPercent/100); } else { high_val = std_var * (m_UI.m_CFG.showSubHighMonTmpPercent/100); low_val = std_var * (m_UI.m_CFG.showHighMonTmpPercent/100); } } else if(Bar_Type_MonRes == bar_type) { if(Config.AnalyseType_AVG == m_UI.m_CFG.serAnalyseType ) { high_val = avg_val * (1+(1-m_UI.m_CFG.serAlarmPercent/100)); low_val = avg_val * (1+(1-m_UI.m_CFG.serChangePercent/100)); } else { high_val = std_var * (1+(1-m_UI.m_CFG.serAlarmPercent/100)); low_val = std_var * (1+(1-m_UI.m_CFG.serChangePercent/100)); } } else if((Bar_Type_MonSer == bar_type) || (Bar_Type_MonSerPercent == bar_type)) { if(Config.AnalyseType_AVG == m_UI.m_CFG.serAnalyseType ) { high_val = avg_val * (m_UI.m_CFG.serAlarmPercent/100); low_val = avg_val * (m_UI.m_CFG.serChangePercent/100); } else { high_val = std_var * (m_UI.m_CFG.serAlarmPercent/100); low_val = std_var * (m_UI.m_CFG.serChangePercent/100); } } else { if((Bar_Type_MonRealCap == mBarType) || (Bar_Type_MonCapPercent == mBarType)) { if(Config.AnalyseType_AVG == m_UI.m_CFG.realCapAnalyseType ) { high_val = avg_val * (m_UI.m_CFG.realCapAlarmPercent/100); low_val = avg_val * (m_UI.m_CFG.realCapDiePercent/100); } else { high_val = std_var * (m_UI.m_CFG.realCapAlarmPercent/100); low_val = std_var * (m_UI.m_CFG.realCapDiePercent/100); } } else if(Bar_Type_MonRestCap == mBarType) { high_val = 0; low_val = 0; } } */ line_ser_avg.add(0, avg_val, ""); line_ser_sublow.add(0, high_val, ""); line_ser_low.add(0, low_val, ""); int chart_value_show_count = 0; if(ntm_page_datamanage_chart.ShowBattLowType_All == m_UI.getShowBattLowType()) { m_UI.m_MonLineShowList.clear(); } for(int n=0; n= max) {cl = COLOR_MAX;} if(bar_values[n] <= min) {cl = COLOR_MIN;} } else if((Bar_Type_MonRes==bar_type)||(Bar_Type_ConnRes==bar_type)) { if(bar_values[n] >= high_val) {cl = COLOR_SUBLOW; lowcount++;} if(bar_values[n] >= low_val) {cl = COLOR_LOW;} if(bar_values[n] >= max) {cl = COLOR_MIN;} if(bar_values[n] <= min) {cl = COLOR_MAX;} } else if(/*(Bar_Type_MonVol==bar_type) || */(Bar_Type_MonCapVol==bar_type) ||(Bar_Type_MonTmp==bar_type) ||(Bar_Type_MonCapTmp==bar_type)) { if(bar_values[n] >= high_val) {cl = COLOR_SUBLOW; lowcount++;} if(bar_values[n] <= low_val) {cl = COLOR_LOW;} if(bar_values[n] >= max) {cl = COLOR_MIN;} if(bar_values[n] <= min) {cl = COLOR_MAX;} } else if(Bar_Type_MonVol==bar_type) { if(bar_values[n] >= high_val) {cl = COLOR_SUBLOW; lowcount++;} if(bar_values[n] <= low_val) {cl = COLOR_LOW;} if(bar_values[n] >= max) {cl = COLOR_MAX;} if(bar_values[n] <= min) {cl = COLOR_MIN;} } else { if(bar_values[n] <= high_val) {cl = COLOR_SUBLOW; lowcount++;} if(bar_values[n] <= low_val) {cl = COLOR_LOW;} if(bar_values[n] >= max) {cl = COLOR_MAX;} if(bar_values[n] <= min) {cl = COLOR_MIN;} } if((ntm_page_datamanage_chart.ShowBattLowType_All == m_UI.getShowBattLowType()) && ((COLOR_SUBLOW == cl) || (COLOR_LOW == cl) || (COLOR_MIN == cl))) { if(false == m_UI.m_MonLineShowList.contains(n+1)) { m_UI.m_MonLineShowList.add(n+1); } } if((ntm_page_datamanage_chart.ShowBattLowType_None == m_UI.getShowBattLowType()) || (m_UI.m_MonLineShowList.contains(n+1))) { bar_ser.add(chart_value_show_count+1, bar_values[n], "#" + String.valueOf(n+1), cl); m_colorlist.add(cl); line_ser_avg.add(chart_value_show_count+1, avg_val, "#" + String.valueOf(n+1)); line_ser_sublow.add(chart_value_show_count+1, high_val, "#" + String.valueOf(n+1)); line_ser_low.add(chart_value_show_count+1, low_val, "#" + String.valueOf(n+1)); chart_value_show_count++; } } if(ntm_page_datamanage_chart.ShowBattLowType_All == m_UI.getShowBattLowType()) { m_UI.upDateLineChartShowNums(false); } line_ser_avg.add(chart_value_show_count+0.6, avg_val, ""); line_ser_sublow.add(chart_value_show_count+0.6, high_val, ""); line_ser_low.add(chart_value_show_count+0.6, low_val, ""); low_percent = ((float)lowcount)*100 / (float)d_count; String chart_tile_str = getChartTitleString("MonVol", "%1.3fV"); String left_axes_format = "#0.00V"; float ax_left_pm_min = (float) 0.9; float ax_left_pm_max = (float) 1.08; if(Bar_Type_MonRealCap == mBarType) { chart_tile_str = getChartTitleString("RealCap", "%1.0fAH"); left_axes_format = "#AH"; } else if(Bar_Type_MonRestCap == mBarType) { chart_tile_str = getChartTitleString("RestCap", "%1.0fAH"); left_axes_format = "#AH"; } else if(Bar_Type_MonCapPercent == mBarType) { chart_tile_str = getChartTitleString("CapPercent", "%1.2f%%"); left_axes_format = "#%"; } else if((Bar_Type_MonTmp==mBarType) || (Bar_Type_MonCapTmp==bar_type)) { chart_tile_str = getChartTitleString("MonTmp", "%1.1f¡ãC"); left_axes_format = "#0.0¡ãC"; ax_left_pm_min = (float) 0.5; ax_left_pm_max = (float) 1.1; } else if(Bar_Type_MonRes == mBarType) { chart_tile_str = getChartTitleString("MonRes", "%1.3fm¦¸"); left_axes_format = "#0.00m¦¸"; ax_left_pm_min = (float) 0.5; ax_left_pm_max = (float) 1.1; } else if(Bar_Type_MonSer == mBarType) { chart_tile_str = getChartTitleString("MonSer", "%1.0f"); left_axes_format = "#"; ax_left_pm_min = (float) 0.5; ax_left_pm_max = (float) 1.1; } else if(Bar_Type_MonSerPercent == mBarType) { chart_tile_str = getChartTitleString("MonSerPercent", "%1.1f%%"); left_axes_format = "#%"; ax_left_pm_min = (float) 0.5; ax_left_pm_max = (float) 1.1; } else if(Bar_Type_ConnRes == mBarType) { chart_tile_str = getChartTitleString("ConnRes", "%1.3fm¦¸"); left_axes_format = "#0.00m¦¸"; ax_left_pm_min = (float) 0.5; ax_left_pm_max = (float) 1.1; } this.getAxes().getLeft().getLabels().setValueFormat(left_axes_format); this.getChart().getTitle().setText(chart_tile_str); float left_ax = (float) Math.abs(bar_ser.getMaxYValue()); float left_ax_min = (float) (Math.abs(min)*ax_left_pm_min); if((bar_leftAxMax < (left_ax*1.05)) || (bar_leftAxMax > (left_ax*1.1))) { bar_leftAxMax = (bar_ser.getMaxYValue()*ax_left_pm_max); } leftAxMax = bar_leftAxMax; this.getAxes().getLeft().setMinMax(left_ax_min, leftAxMax); if((true == manulbottomAx) || (ntm_page_datamanage_chart.ShowBattLowType_None != m_UI.getShowBattLowType())) { this.getZoom().undo(); this.getAxes().getBottom().setMinMax(0.2, chart_value_show_count+0.6); } } } /************************************************************************************************/