001/*
002 * $Id: HydraPlanViewControl.java,v 1.7 2011/03/24 16:06:32 davep Exp $
003 *
004 * This file is part of McIDAS-V
005 *
006 * Copyright 2007-2011
007 * Space Science and Engineering Center (SSEC)
008 * University of Wisconsin - Madison
009 * 1225 W. Dayton Street, Madison, WI 53706, USA
010 * https://www.ssec.wisc.edu/mcidas
011 * 
012 * All Rights Reserved
013 * 
014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015 * some McIDAS-V source code is based on IDV and VisAD source code.  
016 * 
017 * McIDAS-V is free software; you can redistribute it and/or modify
018 * it under the terms of the GNU Lesser Public License as published by
019 * the Free Software Foundation; either version 3 of the License, or
020 * (at your option) any later version.
021 * 
022 * McIDAS-V is distributed in the hope that it will be useful,
023 * but WITHOUT ANY WARRANTY; without even the implied warranty of
024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
025 * GNU Lesser Public License for more details.
026 * 
027 * You should have received a copy of the GNU Lesser Public License
028 * along with this program.  If not, see http://www.gnu.org/licenses.
029 */
030
031package edu.wisc.ssec.mcidasv.control;
032
033
034import ucar.unidata.data.DataChoice;
035import ucar.unidata.data.grid.GridUtil;
036
037import ucar.unidata.idv.DisplayConventions;
038import ucar.unidata.idv.control.ImagePlanViewControl;
039
040import ucar.unidata.ui.colortable.ColorTableManager;
041import ucar.unidata.util.GuiUtils;
042import ucar.unidata.util.Misc;
043import ucar.unidata.util.Range;
044import ucar.unidata.util.ColorTable;
045
046import ucar.visad.display.DisplayableData;
047import ucar.visad.display.Grid2DDisplayable;
048
049import visad.*;
050import visad.VisADException;
051
052import java.rmi.RemoteException;
053
054import java.util.List;
055
056/**
057 * Class for controlling the display of images.
058 * @author IDV Development Group
059 * @version $Revision: 1.7 $
060 */
061public class HydraPlanViewControl extends ImagePlanViewControl {
062
063    /**
064     * Default constructor.  Sets the attribute flags used by
065     * this particular <code>PlanViewControl</code>
066     */
067    public HydraPlanViewControl() {
068        super();
069        setAttributeFlags(FLAG_COLORTABLE | FLAG_DISPLAYUNIT
070                          | FLAG_ZPOSITION | FLAG_SKIPFACTOR);
071    }
072
073    /**
074     * Method to create the particular <code>DisplayableData</code> that
075     * this this instance uses for data depictions.
076     * @return Contour2DDisplayable for this instance.
077     *
078     * @throws VisADException   VisAD error
079     * @throws RemoteException   RMI error
080     */
081    protected DisplayableData createPlanDisplay()
082            throws VisADException, RemoteException {
083        Grid2DDisplayable gridDisplay = 
084            new Grid2DDisplayable("ImagePlanViewControl_" + ((datachoice != null)
085                ? datachoice.toString()
086                : ""), true);
087        gridDisplay.setTextureEnable(true);
088        /* TODO: Find out why this causes redisplays
089        if (BaseImageControl.EMPTY_IMAGE != null) {
090            gridDisplay.loadData(BaseImageControl.EMPTY_IMAGE);
091        }
092        */
093        //gridDisplay.setUseRGBTypeForSelect(true);
094        addAttributedDisplayable(gridDisplay);
095        return gridDisplay;
096    }
097
098    /**
099     * Get the initial color table for the data
100     *
101     * @return  intitial color table
102     */
103    protected ColorTable getInitialColorTable() {
104/*
105        DisplayConventions dc = getDisplayConventions();
106        List colorNames = dc.getColorNameList();
107        ColorTable colorTable = super.getInitialColorTable();
108        if (colorTable.getName().equalsIgnoreCase("default")) {
109            colorTable = dc.getParamColorTable("image");
110        }
111*/
112        ColorTableManager ctm = getControlContext().getColorTableManager();
113        ColorTable colorTable = ctm.getColorTable("ColorTable_AOD");
114        return colorTable;
115    }
116
117
118    /**
119     * Get whether this display should allow smoothing
120     * @return true if allows smoothing.
121     */
122    public boolean getAllowSmoothing() {
123        return false;
124    }
125
126
127    /**
128     * Get the initial range for the data and color table.
129     * @return  initial range
130     *
131     * @throws RemoteException  Java RMI error
132     * @throws VisADException   VisAD Error
133     */
134    protected Range getInitialRange() throws RemoteException, VisADException {
135        Range range = getDisplayConventions().getParamRange(paramName,
136                          getDisplayUnit());
137        System.out.println(paramName);
138        System.out.println(range);
139        //Don't do this for now
140        /**
141        if (range == null) {
142            range = getRangeFromColorTable();
143            if ((range != null) && (range.getMin() == range.getMax())) {
144                range = null;
145            }
146        }
147
148        if (range == null) {
149            range = getDisplayConventions().getParamRange("image",
150                    getDisplayUnit());
151        }
152        if (range == null) {
153            return new Range(0, 255);
154        }
155        **/
156        range = new Range((double)0.0, (double)0.99);
157        return range;
158    }
159
160    /**
161     * Get the slice for the display
162     *
163     * @param slice  slice to use
164     *
165     * @return slice with skip value applied
166     *
167     * @throws VisADException  problem subsetting the slice
168     */
169    protected FieldImpl getSliceForDisplay(FieldImpl slice)
170            throws VisADException {
171        checkImageSize(slice);
172        if (getSkipValue() <= 0) {
173            return slice;
174        }
175        return GridUtil.subset(slice, getSkipValue() + 1);
176    }
177
178    /**
179     * Return the label that is to be used for the skip widget
180     * This allows derived classes to override this and provide their
181     * own name,
182     *
183     * @return Label used for the line width widget
184     */
185    public String getSkipWidgetLabel() {
186        return "Pixel Sampling";
187    }
188
189}