/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing * permissions and limitations under the License. */ package edu.tufts.vue.compare.ui; /* * BaseMapChoiceSelector.java * * Created on April 3, 2007, 12:00 PM * * @author dhelle01 */ import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import javax.swing.event.ListDataListener; import tufts.vue.LWMap; public class BaseMapChoiceSelector extends javax.swing.JComboBox { // might make sense to read these from VueProperties in future? public static final String SELECT_STRING = "Select"; public static final String OTHER_STRING = "Other"; private LWMap userSelectedMap; public BaseMapChoiceSelector() { setModel(new BaseMapChoiceModel()); setRenderer(new BorderSeparatorRenderer()); } public boolean isBaseMapSelected() { return ((BaseMapChoiceModel)getModel()).isBaseMapSelected(); } public LWMap getSelectedMap() { return ((BaseMapChoiceModel)getModel()).getSelectedMap(); } public void setUserSelectedMap(LWMap map) { userSelectedMap = map; } class BaseMapChoiceModel implements javax.swing.ComboBoxModel { //private int selectedIndex = 0; private Object selectedItem = SELECT_STRING; private java.util.List<ListDataListener> listeners = new java.util.ArrayList<ListDataListener>(); public Object getSelectedItem() { return selectedItem; } public void setSelectedItem(Object selected) { selectedItem = selected; } public Object getElementAt(int index) { if(index == 0) return SELECT_STRING; if(index == (getSize() - 1) ) return OTHER_STRING; else return getMaps().get(index-1).getLabel(); } public void addListDataListener(ListDataListener listener) { listeners.add(listener); } public void removeListDataListener(ListDataListener listener) { listeners.remove(listener); } public int getSize() { return getMaps().size() + 2; } private int indexOf(Object obj) { return getMaps().indexOf(obj) + 1; } private java.util.List<LWMap> getMaps() { java.util.Iterator<LWMap> allMaps = tufts.vue.VUE.getLeftTabbedPane().getAllMaps(); java.util.ArrayList<LWMap> nonMergeMaps = new java.util.ArrayList<LWMap>(); while(allMaps.hasNext()) { LWMap obj = allMaps.next(); if (!obj.hasClientData(tufts.vue.MergeMapFactory.class)) nonMergeMaps.add(obj); } return nonMergeMaps; } private boolean isBaseMapSelected() { if(!(getSelectedItem().equals(SELECT_STRING))) if(getSelectedItem().equals(OTHER_STRING) && userSelectedMap == null) return false; else return true; else return false; } public LWMap getSelectedMap() { if(isBaseMapSelected()) { if(getSelectedItem().equals(OTHER_STRING)) return userSelectedMap; else { return getMaps().get(getSelectedIndex()-1); } } else { return null; } } } class BorderSeparatorRenderer extends javax.swing.DefaultListCellRenderer { public java.awt.Component getListCellRendererComponent(javax.swing.JList list,Object value,int index,boolean isSelected,boolean hasFocus) { javax.swing.JLabel label = (javax.swing.JLabel)super.getListCellRendererComponent(list,value,index,isSelected,hasFocus); if(index==0) label.setBorder(javax.swing.BorderFactory.createMatteBorder(0,0,1,0,new java.awt.Color(140,140,140))); if(index == (getModel().getSize() - 1)) label.setBorder(javax.swing.BorderFactory.createMatteBorder(1,0,0,0,new java.awt.Color(140,140,140))); return label; } } }