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