Package net.sourceforge.ganttproject.gui

Source Code of net.sourceforge.ganttproject.gui.DateIntervalListEditor$DateIntervalModel

/*
* Created on 26.11.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package net.sourceforge.ganttproject.gui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.AbstractListModel;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import net.sourceforge.ganttproject.action.GPAction;
import net.sourceforge.ganttproject.gui.options.OptionsPageBuilder;
import net.sourceforge.ganttproject.gui.options.model.DateOption;
import net.sourceforge.ganttproject.gui.options.model.DefaultDateOption;
import net.sourceforge.ganttproject.gui.options.model.GPOption;
import net.sourceforge.ganttproject.gui.options.model.GPOptionGroup;
import net.sourceforge.ganttproject.language.GanttLanguage;

public class DateIntervalListEditor extends JPanel{
  public static class DateInterval {
    public final Date start;
    public final Date end;
    public DateInterval(Date start, Date end) {
      this.start = start;
      this.end = end;
    }
    public boolean equals(Object obj) {
      if (false==obj instanceof DateInterval) {
        return false;
      }
      DateInterval rvalue = (DateInterval) obj;
      return this.start.equals(rvalue.start) && this.end.equals(rvalue.end);
    }
    public int hashCode() {
      return this.start.hashCode();
    }
   
  }
  public static interface DateIntervalModel {
    DateInterval[] getIntervals();
    void remove(DateInterval interval);
    void add(DateInterval interval);
    int getMaxIntervalLength();
  }

  public static class DefaultDateIntervalModel implements DateIntervalModel {
      List/*<DatInterval>*/ myIntervals = new ArrayList();
    public DateInterval[] getIntervals() {
      return (DateInterval[]) myIntervals.toArray(new DateInterval[myIntervals.size()]);
    }
    public void remove(DateInterval interval) {
      myIntervals.remove(interval);
    }
    public void add(DateInterval interval) {
      myIntervals.add(interval);
    }
    public int getMaxIntervalLength() {
      return 1;
    }         
   
  }
  private final DateIntervalModel myIntervalsModel;
  private final DateOption myStart;
  private final DateOption myFinish;
  private GPAction myAddAction;
  private GPAction myDeleteAction;
  private class MyListModel extends AbstractListModel {
    public int getSize() {
      return myIntervalsModel.getIntervals().length;
    }

    public Object getElementAt(int index) {
      DateInterval interval = myIntervalsModel.getIntervals()[index];
      StringBuffer result = new StringBuffer(GanttLanguage.getInstance().getDateFormat().format(interval.start));
      if (!interval.end.equals(interval.start)) {
        result.append("...");
        result.append(GanttLanguage.getInstance().getDateFormat().format(interval.end));
      }
      return result.toString();
    }

    public void update() {
      fireContentsChanged(this, 0, myIntervalsModel.getIntervals().length);
    }
   
  };
  private MyListModel myListModel = new MyListModel();
  private ListSelectionModel myListSelectionModel;
 
  public DateIntervalListEditor(final DateIntervalModel intervalsModel) {
    super(new BorderLayout());
    myIntervalsModel = intervalsModel;
        myStart = new DefaultDateOption("generic.startDate") {
            public void setValue(Date value) {
                super.setValue(value);
                commit();
                if (intervalsModel.getMaxIntervalLength()==1) {
                  DateIntervalListEditor.this.myFinish.setValue(value);
                }
                DateIntervalListEditor.this.updateActions();
                lock();
            }           
        };
        myFinish = new DefaultDateOption("generic.endDate") {
            public void setValue(Date value) {
                super.setValue(value);
                commit();
                DateIntervalListEditor.this.updateActions();
                lock();
            }
        };
        myStart.lock();
        myFinish.lock();
        init();
  }

    private void updateActions() {
        if (myStart.getValue()!=null && myFinish.getValue()!=null && false==myFinish.getValue().before(myStart.getValue())) {
            myAddAction.setEnabled(true);
        }
        else {
            myAddAction.setEnabled(false);
        }
      myDeleteAction.setEnabled(false==myListSelectionModel.isSelectionEmpty());
    }           
    private void init() {
      myAddAction = new GPAction(){
      protected String getIconFilePrefix() {
        return null;
      }
      protected String getLocalizedName() {
        return getI18n("add");
      }

      public void actionPerformed(ActionEvent e) {
        myIntervalsModel.add(new DateInterval(myStart.getValue(), myFinish.getValue()));
        myListModel.update();
      }
      };
      myDeleteAction = new GPAction() {
      protected String getIconFilePrefix() {
        return null;
      }
      protected String getLocalizedName() {
        return getI18n("delete");
      }

      public void actionPerformed(ActionEvent e) {
        int selected = myListSelectionModel.getMinSelectionIndex();
        myIntervalsModel.remove(myIntervalsModel.getIntervals()[selected]);
        myListModel.update();
        myListSelectionModel.removeIndexInterval(selected, selected);
        updateActions();
      }             
      };
        JPanel topPanel = new JPanel(new BorderLayout());
        OptionsPageBuilder builder = new OptionsPageBuilder();
        builder.setOptionKeyPrefix("");
//        Box datesBox = Box.createVerticalBox();
//        Component startDatePanel = builder.createStandaloneOptionPanel(myStart);
//        datesBox.add(startDatePanel);
//        if (myIntervalsModel.getMaxIntervalLength()>1) {
//          Component finishDatePanel = builder.createStandaloneOptionPanel(myFinish);
//        //
//          datesBox.add(finishDatePanel);
//        }
//        topPanel.add(datesBox, BorderLayout.CENTER);
        GPOptionGroup group = myIntervalsModel.getMaxIntervalLength()==1 ?
            new GPOptionGroup("", new GPOption[] {myStart}) :
            new GPOptionGroup("", new GPOption[] {myStart, myFinish});
        group.setTitled(false);
        JComponent datesBox = builder.buildPlanePage(new GPOptionGroup[] {group});
        topPanel.add(datesBox, BorderLayout.CENTER);
      //
        Box buttonBox = Box.createHorizontalBox();
        buttonBox.setBorder(BorderFactory.createEmptyBorder(3,0,3,0));
        buttonBox.add(new JButton(myAddAction));
        buttonBox.add(Box.createHorizontalStrut(5));
        buttonBox.add(new JButton(myDeleteAction));
        topPanel.add(buttonBox, BorderLayout.SOUTH);
        topPanel.setBorder(BorderFactory.createEmptyBorder(5,5,0,5));
        add(topPanel, BorderLayout.NORTH);
        //
        JList list = new JList(myListModel);
        list.setName("list");
        list.setBorder(BorderFactory.createLoweredBevelBorder());
        myListSelectionModel = list.getSelectionModel();
        myListSelectionModel.addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        updateActions();
      }
        });
        JScrollPane scrollPane = new JScrollPane(list);
        scrollPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        scrollPane.setPreferredSize(new Dimension(120, 200));
        add(scrollPane, BorderLayout.CENTER);
        updateActions();
   
}
TOP

Related Classes of net.sourceforge.ganttproject.gui.DateIntervalListEditor$DateIntervalModel

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.