/* * 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 tufts.vue; import java.io.*; import java.util.*; import java.awt.*; import java.beans.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import edu.tufts.vue.metadata.ui.MetadataEditor; import edu.tufts.vue.preferences.implementations.BooleanPreference; import tufts.vue.VueResources; import tufts.vue.filter.*; import tufts.vue.gui.*; /** * A tabbed-pane collection of property sheets that apply * globally to a given map. * * @version $Revision: 1.80 $ / $Date: 2010-03-11 21:15:36 $ / $Author: mike $ * */ public class MapInspectorPanel extends JPanel implements ActiveListener<LWMap> { private static final org.apache.log4j.Logger Log = org.apache.log4j.Logger.getLogger(MapInspectorPanel.class); static public final int ANY_MODE = 0; static public final int ALL_MODE = 1; static public final int NOT_ANY_MODE = 2; static public final int NONE_MODE = 3; static public final String dcCreator = "http://purl.org/dc/elements/1.1/#Creator"; static public final String dcDescription = "http://purl.org/dc/elements/1.1/#Description"; /** The tabbed panel **/ //private JTabbedPane mTabbedPane = null; /** The map we are inspecting **/ private LWMap mMap = null; /** info tab panel **/ private InfoPanel mInfoPanel = null; private VueAimPanel mVueAimPanel = null; //private PathwayPane mPathPanel = null; /** description panel **/ private NotePanel mDescriptionPanel = new NotePanel("map", false); /** filter panel **/ //private FilterApplyPanel mFilterApplyPanel = null; /** Filter Create Panel **/ //private FilterCreatePanel mFilterCreatePanel = null; /** Metadata Panel **/ //MetadataPanel metadataPanel = null; // metadata added to infoPanel MetadataEditor metadataPanel = null; JTextField mAuthorEditor = null; private WidgetStack mapInfoStack = null; private VueTwitterPanel mTwitterPanel; public MapInspectorPanel(DockWindow w) { super(); mapInfoStack = new WidgetStack("Map Info"); VUE.addActiveListener(LWMap.class, this); setMinimumSize( new Dimension( 180,200) ); setLayout( new BorderLayout() ); //setBorder( new EmptyBorder( 5,5,5,5) ); //mTabbedPane = new JTabbedPane(); // VueResources.initComponent( mTabbedPane, "tabPane"); mInfoPanel = new InfoPanel(); mInfoPanel.setName(VueResources.getString("mapinspectorpanel.mapinfo")); //mPathPanel = new PathwayPane(); //mFilterApplyPanel = new FilterApplyPanel(); //mFilterCreatePanel = new FilterCreatePanel(); mDescriptionPanel.setName(VueResources.getString("mapinspectorpanel.description")); //metadataPanel = new MetadataPanel(); metadataPanel = new MetadataEditor(VUE.getActiveMap(),false,false); metadataPanel.setName(VueResources.getString("mapinspectorpanel.keywords")); //mTabbedPane.addTab( mInfoPanel.getName(), mInfoPanel); //mTabbedPane.addTab( mPathPanel.getName(), mPathPanel); //if(tufts.vue.ui.InspectorPane.META_VERSION == tufts.vue.ui.InspectorPane.OLD) // { // mTabbedPane.addTab( mFilterApplyPanel.getName(), mFilterApplyPanel); // mTabbedPane.addTab(mFilterCreatePanel.getName(),mFilterCreatePanel); // } if (DEBUG.TWITTER) { mTwitterPanel = new VueTwitterPanel(); mTwitterPanel.setName(VueResources.getString("twitter.tabname")); } mVueAimPanel = new VueAimPanel(); mVueAimPanel.setName(VueResources.getString("im.tabname")); Widget.setWantsScroller(mapInfoStack, true); Widget.setWantsScrollerAlways(mapInfoStack, true); //mTabbedPane.addTab(metadataPanel.getName(),metadataPanel); mapInfoStack.addPane(mInfoPanel,0f); mapInfoStack.addPane(mDescriptionPanel, 0f); mapInfoStack.addPane(metadataPanel,0f); mapInfoStack.addPane(mVueAimPanel ,0f); if (DEBUG.TWITTER) mapInfoStack.addPane(mTwitterPanel,0f); metadataPanel.adjustColumnModel(); //Widget.setWantsScroller(mapInfoStack, true); Widget.setHelpAction(metadataPanel,VueResources.getString("dockWindow.MapInfo.MapKeywords.helpText")); w.setContent(mapInfoStack); w.setHeight(450); // add( BorderLayout.CENTER, mTabbedPane ); // add(BorderLayout.SOUTH,metadataPanel); setMap(VUE.getActiveMap()); validate(); setVisible(true); } public WidgetStack getMapInfoStack() { return mapInfoStack; } /** * setMap * Sets the LWMap component and updates teh display * * @param pMap - the LWMap to inspect **/ public void setMap( LWMap pMap) { // if we have a change in maps... //if( pMap != mMap) { // mMap = pMap; //} mMap = pMap; if (pMap != null && mInfoPanel != null) { pMap.addLWCListener(mInfoPanel); } updatePanels(); } /** * updatePanels * This method updates the panel's content pased on the selected * Map * **/ public void updatePanels() { if( mMap == null) { //clear it metadataPanel.setVisible(false); } else { metadataPanel.setVisible(true); mInfoPanel.updatePanel( mMap); //mPathPanel.updatePanel( mMap); // mFilterApplyPanel.updatePanel(mMap); // mFilterCreatePanel.updatePanel(mMap); // metadataPanel.updatePanel(mMap); } } // override public Dimension XgetPreferredSize() { Dimension size = super.getPreferredSize(); if( size.getWidth() < 200 ) { size.setSize( 200, size.getHeight() ); } if( size.getHeight() < 250 ) { size.setSize( size.getWidth(), 250); } return size; } public void activatePathwayTab() { //mTabbedPane.setSelectedComponent( mPathPanel); tufts.Util.printStackTrace("pathway panel moved"); } public void activateInfoTab() { // mTabbedPane.setSelectedComponent( mInfoPanel); } public void activateFilterTab() { //mTabbedPane.setSelectedComponent( mFilterApplyPanel); } /** * public void activateMetadataTab() { * mTabbedPane.setSelectedComponent( metadataPanel); * } * **/ public void activeChanged(ActiveEvent<LWMap> e) { //tufts.Util.printStackTrace("AMC START"); if(e.active == null && mAuthorEditor != null && mDescriptionPanel != null) { mAuthorEditor.setText(""); mDescriptionPanel.getTextPane().setText(""); } setMap(e.active); //tufts.Util.printStackTrace("AMC END"); } ///////////////// // Inner Classes //////////////////// /** * InfoPanel * This is the tab panel for displaying Map Info * **/ public class InfoPanel extends JPanel implements PropertyChangeListener, FocusListener, LWComponent.Listener { //JTextField mTitleEditor = null; //JText Field mAuthorEditor = null; //VueTextPane mAuthorEditor = null; JLabel mDate = null, mObjectStats = null, mConnectivityStats = null; // VUE-1001 //JLabel mLocation = null; PropertyPanel mPropPanel = null; PropertiesEditor propertiesEditor = null; ColorMenuButton mMapColor = new ColorMenuButton(VueResources.getColorArray("fillColorValues"),true); public InfoPanel() { mMapColor.setToolTipText(VueResources.getString("mapinspectorpanel.mapcolor")); mMapColor.setName(VueResources.getString("mapinspectorpanel.map_color")); mMapColor.setPropertyKey(null); mMapColor.getPopupWindow().addFocusListener(new FocusListener() { public void focusGained(FocusEvent arg0) { // TODO Auto-generated method stub } public void focusLost(FocusEvent arg0) { final LWMap map = VUE.getActiveMap(); if (map != null) { map.setFillColor(mMapColor.getColor()); map.getUndoManager().mark(); } } }); /*{ public void propertyChange(PropertyChangeEvent arg0) { if (VUE.getActiveMap() != null) VUE.getActiveMap().setFillColor(mMapColor.getColor()); } });*/ JPanel innerPanel = new JPanel(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); //BoxLayout boxLayout = new BoxLayout(innerPanel,BoxLayout.Y_AXIS); innerPanel.setLayout(gridbag); //mTitleEditor = new JTextField(); mAuthorEditor = new JTextField(); /* // TODO: need to add MenuButton functionality to allow it // NOT to participate in the global selection, and "load" // objects manually, or track only a specific LWComponent or something. // Create a subclass of LWEditor, LWTypeEditor, with a machesType method // we check for instanceof LWMap.class, which the tool manager can // handle, and then here we can have an non class instanceof ColorMenuButton // that overrides handleMenuSelection and manually sets the current // map fill color (because we won't normally actually select the map), // and gets manually loaded with displayValue. final Color[] fillColors = VueResources.getColorArray("fillColorValues"); final String[] fillColorNames = VueResources.getStringArray("fillColorNames"); final ColorMenuButton mapFill; mapFill = new ColorMenuButton(fillColors, fillColorNames, true); mapFill.setPropertyKey(LWKey.FillColor); */ mDate = new JLabel(); mObjectStats = new JLabel(); mConnectivityStats = new JLabel(); // VUE-1001 //mLocation = new JLabel(); //saveButton = new JButton("Save"); //saveButton.addActionListener(this); mPropPanel = new PropertyPanel(); //mPropPanel.addProperty( "Label:", mTitleEditor); // initially Label was title mPropPanel.addProperty(VueResources.getString("mapinspectorpanel.created"), mDate); mPropPanel.addProperty(VueResources.getString("mapinspectorpanel.creator"), mAuthorEditor); //added through metadata mPropPanel.addProperty(VueResources.getString("mapinspectorpanel.background"),mMapColor); mPropPanel.addProperty(VueResources.getString("mapinspectorpanel.objects"), mObjectStats); mPropPanel.addProperty(VueResources.getString("mapinspectorpanel.connectivity"), mConnectivityStats); // VUE-1001 //mPropPanel.addProperty("Location:",mLocation); //mPropPanel.addProperty("Background:", mapFill); //mPropPanel.setBorder(BorderFactory.createEmptyBorder(6,9,6, 6)); //mInfoBox.add(saveButton,BorderLayout.EAST); added focuslistener c.weightx = 1.0; c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.NORTHWEST; c.fill = GridBagConstraints.HORIZONTAL; gridbag.setConstraints(mPropPanel,c); innerPanel.add(mPropPanel); /** * JPanel metaDataLabelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0)); * metaDataLabelPanel.add(new JLabel("Metadata")); * * innerPanel.add(metaDataLabelPanel); */ JPanel linePanel = new JPanel() { protected void paintComponent(Graphics g) { g.setColor(Color.DARK_GRAY); g.drawLine(0,15, this.getSize().width, 15); } }; //c.gridwidth = GridBagConstraints.REMAINDER; //c.fill = GridBagConstraints.HORIZONTAL; //gridbag.setConstraints(linePanel,c); //innerPanel.add(linePanel); //linePanel.setBorder(BorderFactory.createEmptyBorder(10,0,0,0)); propertiesEditor = new PropertiesEditor(true); JPanel metadataPanel = new JPanel(new BorderLayout()); // if(tufts.vue.ui.InspectorPane.META_VERSION == tufts.vue.ui.InspectorPane.OLD) // { // metadataPanel.add(propertiesEditor,BorderLayout.CENTER); // } //metadataPanel.setBorder(BorderFactory.createEmptyBorder(0,9,0,6)); mAuthorEditor.setFont(GUI.LabelFace); mDate.setFont(GUI.LabelFace); mObjectStats.setFont(GUI.LabelFace); mConnectivityStats.setFont(GUI.LabelFace); // VUE 1001 //mLocation.setFont(GUI.LabelFace); // Mr Cut & Paste has strikes again, for the zillionth time: mAuthorEditor.addFocusListener(new FocusAdapter(){ public void focusLost(FocusEvent e) { LWMap currentMap = VUE.getActiveMap(); if(currentMap == null) return; edu.tufts.vue.metadata.VueMetadataElement vme = new edu.tufts.vue.metadata.VueMetadataElement(); String[] pairedValue = {dcCreator,mAuthorEditor.getText()}; vme.setObject(pairedValue); vme.setType(edu.tufts.vue.metadata.VueMetadataElement.RESOURCE_CATEGORY); if(currentMap.getMetadataList().findRCategory(dcCreator) != -1) mMap.getMetadataList().replaceValueForKey(vme); else mMap.getMetadataList().getMetadata().add(vme); } }); mDescriptionPanel.getTextPane().addFocusListener(new FocusAdapter(){ public void focusLost(FocusEvent e) { LWMap currentMap = VUE.getActiveMap(); edu.tufts.vue.metadata.VueMetadataElement vme = new edu.tufts.vue.metadata.VueMetadataElement(); String[] pairedValue = {dcDescription,LWComponent.escapeWhitespace(mDescriptionPanel.getTextPane().getText())}; vme.setObject(pairedValue); vme.setType(edu.tufts.vue.metadata.VueMetadataElement.RESOURCE_CATEGORY); if(currentMap == null) return; if (currentMap.getMetadataList().findRCategory(dcDescription) != -1) mMap.getMetadataList().replaceValueForKey(vme); else mMap.getMetadataList().getMetadata().add(vme); } }); c.weighty = 1.0; c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(metadataPanel,c); innerPanel.add(metadataPanel); //innerPanel.add(mInfoScrollPane,BorderLayout.CENTER); //mInfoScrollPane.setSize( new Dimension( 200, 400)); //mInfoScrollPane.getViewport().setLayout(new BorderLayout()); //mInfoScrollPane.getViewport().add( innerPanel,BorderLayout.CENTER); //mInfoScrollPane.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); setLayout(new BorderLayout()); //setLayout(new BorderLayout()); //setBorder( new EmptyBorder(4,4,4,4) ); //add(mInfoScrollPane,BorderLayout.NORTH); add(innerPanel,BorderLayout.CENTER); setBorder(BorderFactory.createEmptyBorder(10,10,0,6)); addFocusListener(this); } public String getName() { return VueResources.getString("mapInfoTabName") ; } /** * updatePanel * Updates the Map info panel * @param LWMap the map **/ public void updatePanel(LWMap pMap) { // update the display mDate.setText( mMap.getDate() ); //mTitleEditor.setText( mMap.getLabel() ); edu.tufts.vue.metadata.VueMetadataElement creator = mMap.getMetadataList().get(dcCreator); String creatorValue = ""; if(creator != null) { creatorValue = creator.getValue(); } mAuthorEditor.setText(creatorValue); mDescriptionPanel.getTextPane().attachProperty(mMap, LWKey.Notes); edu.tufts.vue.metadata.VueMetadataElement description = mMap.getMetadataList().get(dcDescription); if(description != null) { String descriptionValue = description.getValue(); mDescriptionPanel.getTextPane().setText(LWComponent.unEscapeWhitespace(descriptionValue)); } File file = mMap.getFile() ; String path = ""; if( file != null) { path = file.getPath(); } // VUE-1001 //mLocation.setText(path); //mLocation.setToolTipText(path); propertiesEditor.setProperties(pMap.getMetadata(),true); if (DEBUG.EVENTS) Log.debug(getClass().getSimpleName() + ".updatePanel: " + VUE.getActiveMap().getFillColor()); mMapColor.setColor(VUE.getActiveMap().getFillColor()); updateStats(); } private void saveInfo() { //System.out.println("MIP saveInfo " + mDescriptionPanel.getTextPane().getText()); if( mMap != null) { // for now, only description/notes needs saving, and it handles that it itself // add back in Author until/unless synched with metadata list: VUE-951 //mMap.setLabel( mTitleEditor.getText() ); //mMap.setAuthor( mAuthorEditor.getText() ); //mMap.setNotes(mDescriptionPanel.getTextPane().getText()); //mMap.setDescription(mDescriptionPanel.getTextPane().getText()); } } /** * public void actionPerformed( ActionEvent pEvent) { * Object source = pEvent.getSource(); * System.out.println("Action Performed :"+source); * if( (source == saveButton) || (source == mTitleEditor) || (source == mAuthorEditor) || (source == mDescriptionPanel) ) { * saveInfo(); * } * } **/ public void propertyChange( PropertyChangeEvent pEvent) { } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { saveInfo(); } protected void updateStats() { GUI.invokeAfterAWT(new Runnable() { public void run() { mObjectStats.setText(mMap.getObjectStatistics()); // Must call getObjectStatistics() before getConnectivityStatistics(). mConnectivityStats.setText(mMap.getConnectivityStatistics()); }}); } // LWComponent.Listener method public void LWCChanged(LWCEvent event) { if (event.key == LWKey.LinkAdded || event.key == LWKey.LinkRemoved || event.key == LWKey.Created || event.key == LWKey.Deleting) { updateStats(); } } } /** * This is the Pathway Panel for the Map Inspector * **/ public class PathwayPane extends JPanel { /** the path scroll pane **/ JScrollPane mPathScrollPane = null; /** the path display area **/ //JPanel mPathDisplay = null; PathwayPanel mPathDisplay = null; /** * PathwayPane * Constructs a pathway panel **/ public PathwayPane() { setLayout(new BorderLayout()); //mPathDisplay = new JPanel(); //mPathDisplay.add( new JLabel("Pathway offline") ); mPathDisplay = new PathwayPanel(VUE.getDialogParentAsFrame()); mPathScrollPane = new JScrollPane(); mPathScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); mPathScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); mPathScrollPane.setLocation(new Point(8, 9)); mPathScrollPane.setVisible(true); mPathScrollPane.getViewport().add( mPathDisplay); add(mPathScrollPane, BorderLayout.CENTER); } public String getName() { return VueResources.getString("mapPathwayTabName") ; } /** * updatePanel * This updates the Panel display based on a new LWMap * **/ public void updatePanel( LWMap pMap) { //PATH TODO: mPathDisplay.setPathwayManager(pMap.getPathwayManager()); // update display based on the LWMap } } /** * FilterPanel * This is the Map Filtering Panel for the Map Inspector * **/ public class MetadataPanel extends JPanel implements ActionListener, PropertyChangeListener { PropertiesEditor propertiesEditor = null; public MetadataPanel() { //setLayout( new FlowLayout(FlowLayout.LEFT,6,6) ); setLayout(new BorderLayout()); setBorder( BorderFactory.createEmptyBorder(10,10,0,6)); setName(VueResources.getString("mapinspectorpanel.keywords")); } public MetadataPanel(LWMap map) { this(); propertiesEditor = new PropertiesEditor(map.getMetadata(),true); add(propertiesEditor,BorderLayout.WEST); } public void actionPerformed(ActionEvent e) { } public void propertyChange(PropertyChangeEvent evt) { } public void updatePanel( LWMap pMap) { // update the display if(propertiesEditor != null) { propertiesEditor.setProperties(pMap.getMetadata(),true); } else { propertiesEditor = new PropertiesEditor(pMap.getMetadata(),true); add(propertiesEditor,BorderLayout.WEST); } validate(); } } //--------------------------------------------------------------------------------------------------- // SMF Summer 2012: commented out all below en-masse (except for main()) // This removes references to LWCFilter, which we no longer use -- SMF 2012 //--------------------------------------------------------------------------------------------------- // public class FilterApplyPanel extends JPanel implements ActionListener { // /** the scroll pane **/ // JScrollPane mFilterScrollPane = null; // /** the main filter panel **/ // JPanel mMainFilterPanel = null; // /** the buttons **/ // JPanel mLowerPanel = null; // JPanel mMoreFewerPanel = null; // /** the top part panel **/ // JPanel mUpperPanel = null; // /** the vertical box container **/ // Box mFilterBox = null; // /** the filter button **/ // JToggleButton mFilterButton = null; // /** the stop filter button **/ // JButton mClearFilterButton = null; // /** the more button **/ // JButton mMoreButton = null; // /** the fewer button **/ // JButton mFewerButton = null; // /** Radio Buttons **/ // JRadioButton mShowButton = null; // JRadioButton mSelectButton = null; // JRadioButton mHideButton = null; // ButtonGroup modeSelectionGroup = null; // /** mode combo **/ // JComboBox mModeCombo = null; // /** action combo Hide/Show/Select **/ // JComboBox mActionCombo = null; // LWCFilter mFilter = null; // Vector mStatementEditors = new Vector(); // FilterEditor filterEditor; // //////////// // // Constructors // //////////////// // /** // * FilterPanel Constructor // **/ // public FilterApplyPanel() { // ButtonGroup criteriaSelectionGroup = new ButtonGroup(); // setLayout( new BorderLayout() ); // setBorder(BorderFactory.createEmptyBorder(10,10,0,6)); // mMainFilterPanel = new JPanel(); // mMainFilterPanel.setLayout( new BorderLayout() ); // mLowerPanel = new JPanel(); // mLowerPanel.setLayout( new BorderLayout() ); // mUpperPanel = new JPanel(); // mUpperPanel.setLayout( new BorderLayout() ); // mActionCombo = new JComboBox(); // mActionCombo.addItem(LWCFilter.ACTION_SHOW); // mActionCombo.addItem(LWCFilter.ACTION_SELECT); // mActionCombo.addItem(LWCFilter.ACTION_HIDE); // // disabled for now. May add a modified version later // mShowButton = new JRadioButton(LWCFilter.ACTION_SHOW,true); // mSelectButton = new JRadioButton(LWCFilter.ACTION_SELECT); // mHideButton = new JRadioButton(LWCFilter.ACTION_HIDE); // mShowButton.setFont(tufts.vue.VueConstants.FONT_MEDIUM); // mShowButton.addActionListener(this); // mSelectButton.addActionListener(this); // mHideButton.addActionListener(this); // modeSelectionGroup = new ButtonGroup(); // modeSelectionGroup.add(mShowButton); // modeSelectionGroup.add(mHideButton); // modeSelectionGroup.add(mSelectButton); // //mUpperPanel.add( BorderLayout.NORTH, new JLabel("Display Criteria:")); // Box topBox = Box.createHorizontalBox(); // //topBox.add( mActionCombo); // topBox.add(mShowButton); // topBox.add(mHideButton); // topBox.add(mSelectButton); // JLabel clause = new JLabel(VueResources.getString("jlabel.mapobjects")); // topBox.add( clause); // //topBox.add( mAnyAllCombo); // mUpperPanel.add( BorderLayout.SOUTH, topBox); // mFilterButton = new JToggleButton(VueResources.getString("button.disablefilter.label"),false); // mFilterButton.setText(VueResources.getString("mapinspection.applyfilter.tooltip")); // mClearFilterButton = new JButton(VueResources.getString("button.disablefilter.label")); // mMoreButton = new VueButton(VueResources.getString("button.add.label")); // mFewerButton = new VueButton(VueResources.getString("button.delete.label")); // mFewerButton.setVisible(false); // mFilterButton.addActionListener( this); // mClearFilterButton.addActionListener( this); // mMoreButton.addActionListener( this); // mFewerButton.addActionListener( this); // Box moreBox = Box.createHorizontalBox(); // moreBox.add( mFewerButton); // moreBox.add( mMoreButton); // mMoreFewerPanel = new JPanel(); // mMoreFewerPanel.setLayout( new BorderLayout() ); // mMoreFewerPanel.add( BorderLayout.WEST, moreBox); // //mLowerPanel.add( BorderLayout.NORTH, mMoreFewerPanel); // JPanel abp = new JPanel(); // abp.setLayout( new BorderLayout() ); // Box abBox = Box.createHorizontalBox(); // //abBox.add( mClearFilterButton); // abBox.add( mFilterButton); // abp.add( BorderLayout.EAST, abBox); // mLowerPanel.add( BorderLayout.SOUTH, abp); // mLowerPanel.setBorder(BorderFactory.createEmptyBorder(10, 0,0,0)); // mFilterBox = Box.createVerticalBox(); // mFilterScrollPane = new JScrollPane(); // filterEditor = new FilterEditor(); // filterEditor.setBorder(BorderFactory.createEmptyBorder(5,0,0,0)); // mFilterBox.add(filterEditor); // mFilterBox.add(mUpperPanel); // mFilterBox.add(mLowerPanel); // mMainFilterPanel.add( BorderLayout.NORTH, mFilterBox); // mFilterScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); // mFilterScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // mFilterScrollPane.setLocation(new Point(8, 9)); // mFilterScrollPane.setVisible(true); // mFilterScrollPane.getViewport().add( mMainFilterPanel); // mFilterScrollPane.setBorder( BorderFactory.createEmptyBorder()); // //mMainFilterPanel.setBackground(VueResources.getColor("filterPanelColor")); // add( BorderLayout.CENTER, mFilterScrollPane ); // } // public String getName() { // //return VueResources.getString("mapFilterTabName") ; // return "Filter"; // } // /** // * updatePanel // * Updates teh panel based on the passed in LWMap // * @param the LWMap // **/ // public void updatePanel( LWMap pMap) { // boolean hasMap = (pMap != null); // mFilterButton.setEnabled(hasMap); // mClearFilterButton.setEnabled( hasMap); // mMoreButton.setEnabled( hasMap); // mFewerButton.setEnabled( hasMap); // if (hasMap) { // mMap = pMap; // mFilter = pMap.getLWCFilter(); // } else { // return; // } // if(mFilter.getStatements() == null) { // mFilter.setStatements(new Vector()); // } // try { // filterEditor.getFilterTableModel().setFilters(mFilter.getStatements()); // } catch (NullPointerException e) { // // for testing: FilterEditor bombs if no active map // e.printStackTrace(); // } // //mActionCombo.setSelectedItem(mFilter.getFilterAction()); // if(mFilter.getFilterAction().toString().equals(LWCFilter.ACTION_HIDE)) { // mHideButton.setSelected(true); // } else if(mFilter.getFilterAction().toString().equals(LWCFilter.ACTION_SELECT)) { // mSelectButton.setSelected(true); // } else { // mShowButton.setSelected(true); // } // if(mFilter.isFilterOn()) { // mFilterButton.setSelected(true); // mFilterButton.setText(VueResources.getString("mapinspection.disablefilter.tooltip")); // }else { // mFilterButton.setSelected(false); // mFilterButton.setText(VueResources.getString("mapinspection.applyfilter.tooltip")); // } // // TODO FIX: basically, filter updating is very dumb right now: this doClick is ultimately // // ALWAYS triggering a setFilter on the current map whenever the active map // // changes, even if the filter is exactly the same, or there isn't even // // one in place, requiring the map to filter itself or clear it's filter // // every time the active map changes, no matter what (which will get expensive // // with sizeable maps). There's also a bug where the filter is getting turned // // off when you switch to another map and then back again. // //mFilterButton.doClick(); // mMainFilterPanel.validate(); // } // /** Enabled the current filter, and tell the map of a filter change */ // public void makeFilter() { // mFilter.setStatements(filterEditor.getFilterTableModel().getFilters()); // if(mHideButton.isSelected()) // mFilter.setFilterAction(LWCFilter.ACTION_HIDE); // else if(mSelectButton.isSelected()) // mFilter.setFilterAction(LWCFilter.ACTION_SELECT); // else // mFilter.setFilterAction(LWCFilter.ACTION_SHOW); // } // public void applyFilter() { // if (mMap != null) { // makeFilter(); // mMap.applyFilter(); // } // } // /** Disable the current filter, and tell the map of a filter change */ // public void clearFilter() { // if (mMap != null) // mMap.clearFilter(); // } // public void addStatement() { // mFewerButton.setVisible(true); // LWCFilter.LogicalStatement ls = mFilter.createLogicalStatement() ; // FilterStatementEditor fse = new FilterStatementEditor( mFilter, ls); // mStatementEditors.add( fse); // mFilterBox.remove( mMoreFewerPanel); // mFilterBox.add( fse); // mFilterBox.add( mMoreFewerPanel); // validate(); // } // public void removeStatement() { // FilterStatementEditor fse = (FilterStatementEditor) mStatementEditors.lastElement(); // mFilterBox.remove( fse); // mStatementEditors.remove( fse); // if( mStatementEditors.size() <= 1 ) { // mFewerButton.setVisible(false); // } // validate(); // } // public void actionPerformed( ActionEvent pEvent) { // Object source = pEvent.getSource(); // filterEditor.stopEditing(); // if( source == mFilterButton ) { // JToggleButton button = (JToggleButton)source; // if(button.isSelected()) { // applyFilter(); // button.setText(VueResources.getString("mapinspection.disablefilter.tooltip")); // }else { // clearFilter(); // button.setText(VueResources.getString("mapinspection.applyfilter.tooltip")); // } // } // } // } // public class FilterCreatePanel extends JPanel implements ActionListener, PropertyChangeListener { // MapFilterModelEditor mapFilterModelEditor = null; // public FilterCreatePanel() { // // setLayout( new FlowLayout(FlowLayout.LEFT,6,6) ); // setLayout(new BorderLayout()); // setBorder(BorderFactory.createEmptyBorder(10,10,0,6)); // } // public FilterCreatePanel(LWMap map) { // this(); // mapFilterModelEditor = new MapFilterModelEditor(map.getMapFilterModel()); // add(mapFilterModelEditor,BorderLayout.NORTH); // } // public void actionPerformed(ActionEvent e) { // } // public void propertyChange(PropertyChangeEvent evt) { // } // public String getName() { // //return "Custom Metadata"; // this should come from VueResources // return "Metadata"; // this should come from VueResources // } // public void updatePanel( LWMap pMap) { // // update the display // if(mapFilterModelEditor == null) { // mapFilterModelEditor = new MapFilterModelEditor(pMap.getMapFilterModel()); // add(mapFilterModelEditor,BorderLayout.NORTH); // }else { // mapFilterModelEditor.setMapFilterModel(pMap.getMapFilterModel()); // } // validate(); // } // } public static void main(String args[]) { VUE.init(args); DEBUG.Enabled = DEBUG.EVENTS = true; LWMap map = new LWMap("test_map"); map.setFile(new java.io.File("/tmp/test.vue")); MapInspectorPanel inspector = new MapInspectorPanel(null); //VUE.setActiveMap(map); inspector.setMap(map); DockWindow w = GUI.createDockWindow(VueResources.getString("dockWindow.mapinspector.title"), inspector); w.setVisible(true); if (args.length > 1) VueUtil.displayComponent(new VueTextPane(map, LWKey.Notes, null)); } }