import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.URL; import sun.audio.*; import java.io.*; /* This is the drawing area of the program. I also made it the center of the program *which handles most cross-class updates because it has all of the pointers to each *of the objects,making it an easy place to have all cross-class updates.*/ public class aCanvas extends JComponent implements MouseListener{ private allAxis axis; private allData data; private allDataPoints points,line,histo,scatter; private infoArea infoDiv; private int curCat,scatterCatX,scatterCatY,filter; private Color backgroundColor; private allLines lines; /*When initialized it only needs the info area pointer, otherwise it just loads *everything with its starting(default) values. */ public aCanvas(infoArea i){ setPreferredSize(new Dimension(200,200)); curCat=0; scatterCatX=1; scatterCatY=2; infoDiv=i; filter=-1; backgroundColor=Color.LIGHT_GRAY; data=new loadRestaurantData(); axis=new histoAxis(this,data,false); histo=new histogramPoints(this,data,0,axis,i); line=new linePoints(this,data,0,axis,infoDiv); points=histo; lines=new allLines(this); addMouseListener(this); repaint(); } /*Calls the draw funtions of the axis and data points because they understand *how to drawm themselves, checks to see if they should actually be drawn too Draws the background first then allows the others to overwrite ontop of it.*/ protected void paintComponent(Graphics g){ Graphics2D g2d = (Graphics2D)g; g2d.setColor(getBackground()); g2d.fill(new Rectangle(0,0,this.getWidth(),this.getHeight())); g2d.setColor(Color.black); g2d.scale(2.0,2.0); if(!axis.hiddenState()) axis.drawAxis(g); if(!data.getHiddenState()) points.drawData(g); g2d.scale(1,1); } /*This is currently for the combo box to update the category, updates the *category then repaints*/ public void update(String cat){ if(cat.equals("Food")){ points.setDataPoints(0); curCat=0; } if(cat.equals("Price")){ points.setDataPoints(1); curCat=1; } if(cat.equals("Decor")){ points.setDataPoints(2); curCat=2; } if(cat.equals("Cuisine")){ points.setDataPoints(3); curCat=3; } repaint(); } /*Tells the axis to update its hidden state(so do the opposite of what it is)*/ public void updateAxisHiddenState(){ axis.updateHiddenState(); repaint(); } /*Tells the data to update its hidden state(so do the opposite of what it is), *the points hide or show based on this*/ public void updateDataHiddenState(){ data.updateHiddenState(); repaint(); } /*Tells infoDiv to update how the info is displayed:inline or popup*/ public void updateInfoDelivery(){ infoDiv.updateInfoDelivery(); } /*Updates the color of axis*/ public void updateAxis(Color c){ axis.setColor(c); repaint(); } /*Updates the color of the data points*/ public void updatePoints(Color c){ points.setColor(c); repaint(); } /*updates the type of graph*/ public void updateGraphType(String type){ if(type.equals("Histogram")){ axis=new histoAxis(this,data,axis.hiddenState()); //points=new histogramPoints(this,data,0,axis,infoDiv); points=histo; } else if(type.equals("Line")){ //Line and histogram graphs use the same type of axis, so no need for new class axis=new histoAxis(this,data,axis.hiddenState()); //points=new linePoints(this,data,0,axis,infoDiv); points=line; } else if(type.equals("Scatterx2")){ axis=new scatterAxisx2(this, data,axis.hiddenState()); // points=new scatterPointsx2(this,data,1, axis,infoDiv); } else{ axis=new scatterAxis(this, data,axis.hiddenState()); points=new scatterPoints(this,data,1, axis,infoDiv); } repaint(); } /*updates the x-axis of the scatter plot*/ public void updateScatterAxisX(String cat){ if(cat.equals("Food")){ ((scatterAxis)axis).setXAxis(0); scatterCatX=0; } if(cat.equals("Price")){ ((scatterAxis)axis).setXAxis(1); scatterCatX=1; } if(cat.equals("Decor")){ ((scatterAxis)axis).setXAxis(2); scatterCatX=2; } if(cat.equals("Cuisine")){ ((scatterAxis)axis).setXAxis(3); scatterCatX=3; } repaint(); } /*updates the y axis of the scatter plot*/ public void updateScatterAxisY(String cat){ if(cat.equals("Food")){ ((scatterAxis)axis).setYAxis(0); scatterCatY=0; } if(cat.equals("Price")){ ((scatterAxis)axis).setYAxis(1); scatterCatY=1; } if(cat.equals("Decor")){ ((scatterAxis)axis).setYAxis(2); scatterCatY=2; } if(cat.equals("Cuisine")){ ((scatterAxis)axis).setYAxis(3); scatterCatY=3; } repaint(); } /*sets the filter*/ public void setFilter(String cat){ if(cat.equals("Has Takeout")) filter=0; else if(cat.equals("Starts with A")) filter=1; else if(cat.equals("American Food")) filter=2; else filter=-1; repaint(); } /*returns filter*/ public int getFilter(){ return filter; } /* returns the current category*/ public int getCurCat(){ return curCat; } /*returns x-axis current category*/ public int getScatterCatX(){ return scatterCatX; } /*returns y-axis current category*/ public int getScatterCatY(){ return scatterCatY; } public void setBackground(Color c){ backgroundColor=c; repaint(); } public Color getBackground(){ return backgroundColor; } public void doZoomIn(){ axis.zoomIn(this); } public void doZoomOut(){ axis.zoomOut(this); } /*a mouse was clicked, tell the datapoints to handle it*/ public void mousePressed (MouseEvent event) { if (event.getClickCount() == 2) points.deleteLine(event.getPoint()); points.doClick(event.getPoint(),event); } public void mouseClicked (MouseEvent event) { } public void mouseReleased (MouseEvent event) { points.doClick(event.getPoint(),event); } public void mouseEntered (MouseEvent event) {} public void mouseExited (MouseEvent event) {} }