Package timeflow.views

Source Code of timeflow.views.CalendarView$CalendarPanel

package timeflow.views;

import timeflow.app.ui.ComponentCluster;
import timeflow.data.db.*;
import timeflow.data.time.Interval;
import timeflow.data.time.RoughTime;
import timeflow.model.*;
import timeflow.vis.*;
import timeflow.vis.calendar.*;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Date;

public class CalendarView extends AbstractView {

  CalendarPanel calendarPanel;
  ScrollingCalendar scroller;
  CalendarVisuals visuals;
  ActDB lastDB;
  JPanel controls;
 
  @Override
  public JComponent _getControls()
  {
    return controls;
  }
 
  public CalendarView(TFModel model)
  {
    super(model);
    calendarPanel=new CalendarPanel(model);
    scroller=new ScrollingCalendar();
    setLayout(new GridLayout(1,1));
    add(scroller);
   
    controls=new JPanel();
    controls.setLayout(new BorderLayout());

    ComponentCluster units=new ComponentCluster("Grid");
    controls.add(units, BorderLayout.NORTH);
   
    ButtonGroup unitGroup=new ButtonGroup();
   
    JRadioButton days=new JRadioButton(new ImageIcon("images/button_days.gif"),true);
    days.setSelectedIcon(new ImageIcon("images/button_days_selected.gif"));
    units.addContent(days);
    days.addActionListener(new LayoutSetter(CalendarVisuals.Layout.DAY));
    unitGroup.add(days);

    JRadioButton months=new JRadioButton(new ImageIcon("images/button_months.gif"),false);
    months.setSelectedIcon(new ImageIcon("images/button_months_selected.gif"));
    units.addContent(months);
    months.addActionListener(new LayoutSetter(CalendarVisuals.Layout.MONTH));
    unitGroup.add(months);
   
    JRadioButton years=new JRadioButton(new ImageIcon("images/button_years.gif"),false);
    years.setSelectedIcon(new ImageIcon("images/button_years_selected.gif"));
    units.addContent(years);
    years.addActionListener(new LayoutSetter(CalendarVisuals.Layout.YEAR))
    unitGroup.add(years);
   
   
    ComponentCluster showCluster=new ComponentCluster("Show");
    controls.add(showCluster, BorderLayout.CENTER);
   
    ButtonGroup group=new ButtonGroup();
    JRadioButton icon=new JRadioButton(new ImageIcon("images/button_dots.gif"),true);
    icon.setSelectedIcon(new ImageIcon("images/button_dots_selected.gif"));
    showCluster.addContent(icon);
    icon.addActionListener(new DrawStyleSetter(CalendarVisuals.DrawStyle.ICON));
    group.add(icon);
   
    JRadioButton label=new JRadioButton(new ImageIcon("images/button_labels.gif"),false);
    label.setSelectedIcon(new ImageIcon("images/button_labels_selected.gif"));
    showCluster.addContent(label);
    label.addActionListener(new DrawStyleSetter(CalendarVisuals.DrawStyle.LABEL));           
    group.add(label);

    ComponentCluster layout=new ComponentCluster("Layout");
    controls.add(layout, BorderLayout.SOUTH);
   
    ButtonGroup layoutGroup=new ButtonGroup();
    JRadioButton loose=new JRadioButton(new ImageIcon("images/button_expanded.gif"),true);
    loose.setSelectedIcon(new ImageIcon("images/button_expanded_selected.gif"));
    layout.addContent(loose);
    loose.addActionListener(new FitStyleSetter(CalendarVisuals.FitStyle.LOOSE));
    layoutGroup.add(loose);
   
    JRadioButton tight=new JRadioButton(new ImageIcon("images/button_compressed.gif"),false);
    tight.setSelectedIcon(new ImageIcon("images/button_compressed_selected.gif"));
    layout.addContent(tight);
    tight.addActionListener(new FitStyleSetter(CalendarVisuals.FitStyle.TIGHT));
    layoutGroup.add(tight);
  }
 
  class LayoutSetter implements ActionListener
  {
    CalendarVisuals.Layout layout;
    LayoutSetter(CalendarVisuals.Layout layout)
    {
      this.layout=layout;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
      setLayoutStyle(layout);
    }   
  }
 
  class DrawStyleSetter implements ActionListener
  {
    CalendarVisuals.DrawStyle style;
    DrawStyleSetter(CalendarVisuals.DrawStyle style)
    {
      this.style=style;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
      setDrawStyle(style);
    }   
  }
 
  class FitStyleSetter implements ActionListener
  {
    CalendarVisuals.FitStyle style;
    FitStyleSetter(CalendarVisuals.FitStyle style)
    {
      this.style=style;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
      setFitStyle(style);
    }   
  }
 
  @Override
  public String getName() {
    return "Calendar";
  }

  private void redraw(boolean fresh)
  {
    visuals.makeGrid(fresh);
    calendarPanel.drawVisualization();
    repaint();
  }

  void setLayoutStyle(CalendarVisuals.Layout layout)
  {
    visuals.setLayoutStyle(layout);
    calendarPanel.drawVisualization();
    revalidate();
    repaint();
  }

  void setDrawStyle(CalendarVisuals.DrawStyle style)
  {
    visuals.setDrawStyle(style);
    calendarPanel.drawVisualization();
    revalidate();
    repaint();
  }

  void setFitStyle(CalendarVisuals.FitStyle style)
  {
    visuals.setFitStyle(style);
    calendarPanel.drawVisualization();
    revalidate();
    repaint();
  }
 
  @Override
  protected void onscreen(boolean majorChange)
  {
    visuals.initAllButGrid();
    scroller.calibrate(true);
    revalidate();
    ActDB db=getModel().getDB();
    redraw(majorChange);
    scroller.calibrate(majorChange);
    lastDB=db;
  }
 
  @Override
  protected void _note(TFEvent e) {
    int oldHeight=calendarPanel.getPreferredSize().height;
    visuals.note(e);
   
    calendarPanel.drawVisualization();
    calendarPanel.repaint();
    if (e.affectsData() || oldHeight!=calendarPanel.getPreferredSize().height)
    {
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {scroller.calibrate(false); revalidate();}
      });
    }
    revalidate();
  }
 
  public void setBounds(int x, int y, int w, int h)
  {
    super.setBounds(x,y,w,h);
    if (visuals==null || visuals.grid==null)
      return;
    calendarPanel.drawVisualization();
    calendarPanel.repaint();
  }
 
  class ScrollingCalendar extends JPanel
  {
    JScrollBar bar;
    public ScrollingCalendar()
    {
      setLayout(new BorderLayout());
      add(calendarPanel, BorderLayout.CENTER);
      bar=new JScrollBar(JScrollBar.VERTICAL);
      add(bar, BorderLayout.EAST);
      bar.addAdjustmentListener(new AdjustmentListener() {     
        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
          visuals.grid.setDY(bar.getValue());
         
          // set time in model.
          RoughTime startTime=visuals.grid.getFirstDrawnTime();
          Interval viewInterval=getModel().getViewInterval();
          if (viewInterval!=null)
          {
            viewInterval.translateTo(startTime.getTime());
          }
         
          calendarPanel.drawVisualization();
          calendarPanel.repaint();
        }
      });
    }
   
    public void setBounds(int x, int y, int w, int h)
    {
      if (x==getX() && y==getY() && w==getWidth() && h==getHeight())
        return;
      super.setBounds(x,y,w,h);
      calibrate(false);
    }
   
    void calibrate(boolean forceValue)
    {
      if (visuals==null || visuals.grid==null)
        return;
      int height=getSize().height;
      int desired=visuals.grid.getCalendarHeight();
      bar.setVisible(desired>height);
      if (desired>height)
      {
        bar.setMinimum(0);
        bar.setMaximum(desired);
        bar.setVisibleAmount(height);
        Interval view=getModel().getViewInterval();
        if (view!=null && forceValue)
        {         
          double s=visuals.grid.getScrollFraction();
          double maxFraction=(desired-height)/(double)desired;
          int value=(int)((s/maxFraction)*desired);
          bar.setValue(value);
        }
       
      }
    }
  }
 
  class CalendarPanel extends AbstractVisualizationView
  {   

    CalendarPanel(TFModel model)
    {
      super(model);
      setBackground(Color.white);
      visuals=new CalendarVisuals(getModel());
   

    public RoughTime getTime(Point p)
    {
      return visuals.grid.getTime(p.x, p.y);
    }
   
    protected void drawVisualization(Graphics2D g)
    {
      g.setBackground(Color.white);
      g.fillRect(0,0,getSize().width, getSize().height);

      getModel().getDisplay().emptyMessage(g, model);
      if (model.getDB()==null)
        return;
      visuals.setBounds(0,0,getSize().width,getSize().height)
      objectLocations=new ArrayList<Mouseover>();
      visuals.render(g, objectLocations);
    }
  }
}
TOP

Related Classes of timeflow.views.CalendarView$CalendarPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.