/* Copyright 2000 Charles G. Wright * This software may be distributed under the terms of the * GNU General Public License. * * $Id: GRAdaygraph.java,v 1.1 2000-06-15 10:14:54-05 chuckles Exp chuckles $ */ // Class to test out the graphing object. import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; public class GRAdaygraph extends GRAgraph implements ActionListener { public static final String name = "Day Graph"; private CWselect day_selector; private CWselect month_selector; private GRAph gr1; private ScrollPane sp1; private Color[] colors; private int[] fieldnums; private TMYgraphMaster parent; private UnitConverter uc; public GRAdaygraph(Color[] colors, TMYgraphMaster parent){ this.parent = parent; this.colors = colors; System.out.println("constructor for GRAdaygraph"); // Create the data object, then plot some data gr1 = new GRAph(colors); gr1.gridOn = true; gr1.xAxisMode = GRAph.TIME; sp1 = new ScrollPane(ScrollPane.SCROLLBARS_NEVER); sp1.add(gr1); GridBagLayout p1layout = new GridBagLayout(); setLayout(p1layout); GridBagConstraints c1 = new GridBagConstraints(); c1.fill = GridBagConstraints.BOTH; c1.gridwidth = GridBagConstraints.REMAINDER; c1.weightx = 1.0; c1.weighty = 1.0; p1layout.setConstraints(sp1, c1); add(sp1); c1.weighty = 0.0; c1.weightx = 0.0; month_selector = new CWselect(TMYdata.MONTHS, "Month", 0); month_selector.addActionListener(this); c1.fill = GridBagConstraints.NONE; c1.gridwidth = 1; c1.weighty = 0.0; p1layout.setConstraints(month_selector, c1); add(month_selector); day_selector = new CWselect(TMYdata.days, "Day", 0); day_selector.addActionListener(this); p1layout.setConstraints(day_selector, c1); add(day_selector); System.out.println("end constructor for GRAdaygraph"); uc = new UnitConverter(UnitConverter.NOTHING); uc.addObserver(this); } /** extract 1 day's data */ private double[][] getDailyData(CWmonitorable obj, int month, int day, int fieldnum){ double data_element; int[] field_types = obj.getFieldTypes(); double[][] daily_data = new double[2][24]; int hour_base = (GRAph.MONTH_DAYS[month] + day) * 24; for (int i = 0; i < 24; i++) { daily_data[0][i] = (double)(i + hour_base); data_element = obj.getValue(month, day, i, fieldnum); daily_data[1][i] = UnitConverter.getConvertedValue(data_element, field_types[fieldnum]); } return(daily_data); } /** Implements the Observer interface. */ public void update(Observable obs, Object parent){ fieldnums = this.parent.getFieldList().getSelectedIndexes(); updateDayGraph(); } void updateDayGraph(){ if ((fieldnums != null) && (fieldnums.length != 0)){ int index; CWmonitorable obj; //gr1.ymax = tmystuff.getHighValue(fieldnums); //gr1.ymin = tmystuff.getLowValue(fieldnums); double plotdat[][][] = new double[fieldnums.length][][]; for (int i = 0; i < fieldnums.length; i++){ index = CWmonitoredElements.indexAt(fieldnums[i]); obj = CWmonitoredElements.objectAt(fieldnums[i]); plotdat[i] = getDailyData(obj, month_selector.getSelectedIndex(), day_selector.getSelectedIndex(), index); } gr1.autoscale(plotdat); gr1.graphit(plotdat); gr1.repaint(); } } // Come here when the CWselect widget is changed, to carry out // consequences of change. public void actionPerformed(ActionEvent ae){ CWselect sel = (CWselect)ae.getSource(); // System.out.println("updateSomething()" + sel + something_loaded); // Handle interactions between month and day selectors. if (sel == month_selector){ day_selector.setMaxIndex(TMYdata.MONTHLENGTH[sel.getSelectedIndex()] - 1); if ((fieldnums != null) && (fieldnums.length > 0)) updateDayGraph(); System.out.println("Month_Selector was hit"); } else if (sel == day_selector){ if (sel.wrap_up == true){ month_selector.incrementIndex(); sel.setMaxIndex(TMYdata.MONTHLENGTH[month_selector.getSelectedIndex()] - 1); } if (sel.wrap_down == true){ month_selector.decrementIndex(); sel.setMaxIndex(TMYdata.MONTHLENGTH[month_selector.getSelectedIndex()] - 1); } if ((fieldnums != null) && (fieldnums.length > 0)) updateDayGraph(); } } }