001/*
002 * $Id: McvSideLegend.java,v 1.6 2011/03/24 16:06:34 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.ui;
032
033import java.awt.BorderLayout;
034import java.awt.Insets;
035import java.awt.event.ItemEvent;
036import java.awt.event.ItemListener;
037import java.util.ArrayList;
038import java.util.Hashtable;
039import java.util.List;
040
041import javax.swing.BorderFactory;
042import javax.swing.JCheckBox;
043import javax.swing.JComponent;
044import javax.swing.JPanel;
045
046import ucar.unidata.idv.DisplayControl;
047import ucar.unidata.idv.ui.SideLegend;
048import ucar.unidata.idv.ui.SideLegend.CategoryPanel;
049//import ucar.unidata.idv.ui.SideLegend.DisplayControlLegendPanel;
050import ucar.unidata.util.GuiUtils;
051
052public class McvSideLegend extends SideLegend {
053
054        // since you're gonna have to redo a significant portion of this, you might
055        // as well add in something to convey the ViewManager's active layer...
056        // may as well make it a tree, too.
057        // parent nodes don't get checks unless *all* kids are checked
058        // i like the UI from this link:
059        // http://rabbit-hole.blogspot.com/2006/11/tree-and-tree-table-with-checkboxes.html
060//      @Override protected void fillLegendSafely() {
061//        List controls = viewManager.getControlsForLegend();
062//        for (int i = 0; i < categoryPanels.size(); i++) {
063//            CategoryPanel categoryPanel =
064//                (CategoryPanel) categoryPanels.get(i);
065//            //            categoryPanel.clear();
066//            categoryPanel.reInitialize();
067//            categoryPanel.getContents().setVisible(true);
068//        }
069//
070//        Hashtable seen = new Hashtable();
071//        for (int i = controls.size() - 1; i >= 0; i--) {
072//            final DisplayControl control  = (DisplayControl) controls.get(i);
073//            String               category = control.getDisplayCategory();
074//            System.err.println("debug: category=" + category);
075//            if ((category == null) || (category.length() == 0)) {
076//                category = "Displays";
077//            }
078//            CategoryPanel categoryPanel =
079//               (CategoryPanel) categoryToPanel.get(category);
080//            if (categoryPanel == null) {
081//                categoryPanel = new CategoryPanel(this, category);
082//                categoryPanels.add(categoryPanel);
083//                categoryToPanel.put(category, categoryPanel);
084//                Boolean b = (Boolean) categoryToPanelOpen.get(category);
085//                if (b != null) {
086//                    categoryPanel.setInnerVisible(b.booleanValue());
087//                }
088//            }
089//            seen.put(categoryPanel, categoryPanel);
090//            DisplayControlLegendPanel legendPanel =
091//                (DisplayControlLegendPanel) control.getTransientProperty(
092//                    "SIDELEGEND");
093//            if (legendPanel == null) {
094//                JCheckBox    visCbx = control.doMakeVisibilityControl("");
095//                ItemListener itemListener = new ItemListener() {
096//                    public void itemStateChanged(ItemEvent event) {
097//                        displayControlVisibilityChanged(control,
098//                                event.getStateChange() == ItemEvent.SELECTED);
099//                    }
100//                };
101//                visCbx.addItemListener(itemListener);
102//                visCbx.setBorder(BorderFactory.createEmptyBorder());
103//                JComponent sideLegendLabel =
104//                    control.getLegendLabel(control.SIDE_LEGEND);
105//                sideLegendLabel.setBorder(BorderFactory.createEmptyBorder(0,
106//                        5, 0, 3));
107//                legendPanel = new DisplayControlLegendPanel(control,
108//                        sideLegendLabel, false,
109//                        GuiUtils.inset(visCbx, new Insets(0, 0, 0, 2)),
110//                        control.getLegendButtons(control.SIDE_LEGEND));
111//
112//                JComponent controlLegend =
113//                    control.getLegendComponent(control.SIDE_LEGEND);
114//                legendPanel.add(controlLegend, false);
115//                control.putTransientProperty("SIDELEGEND", legendPanel);
116//            }
117//            categoryPanel.add(control, legendPanel.getContents());
118//        }
119//
120//        List orderedCategoryPanels = new ArrayList();
121//        for (int i = 0; i < categoryPanels.size(); i++) {
122//            CategoryPanel categoryPanel =
123//                (CategoryPanel) categoryPanels.get(i);
124//            if (seen.get(categoryPanel) != null) {
125//                orderedCategoryPanels.add(categoryPanel.getContents());
126//            } else {
127//                categoryPanel.clear();
128//            }
129//        }
130//
131//
132//        JPanel panels = GuiUtils.vbox(orderedCategoryPanels);
133//        //        synchronized (legendsPanel.getTreeLock()) {
134//        legendsPanel.removeAll();
135//        legendsPanel.add(panels, BorderLayout.NORTH);
136//        legendsPanel.invalidate();
137//        //        }
138//    }
139
140        
141}