All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jidesoft.swing.SidePaneGroup Maven / Gradle / Ivy

There is a newer version: 3.6.18
Show newest version
/*
 * @(#)JideSidePaneGroup.java
 *
 * Copyright 2002 JIDE Software Inc. All rights reserved.
 */
package com.jidesoft.swing;

import com.jidesoft.swing.event.SidePaneEvent;
import com.jidesoft.swing.event.SidePaneListener;

import javax.swing.event.EventListenerList;
import java.awt.*;
import java.util.ArrayList;

/**
 * A data structure used by {@link SidePane} to represent a group of {@link SidePaneItem}.
 * 

* Each group usually has one SidePaneItem selected. */ public class SidePaneGroup extends ArrayList { /** * the selected item. */ private SidePaneItem _selectedItem = null; /** * A list of event listeners for this component. */ protected EventListenerList listenerList; /** * Default constructor. */ public SidePaneGroup() { } /** * Gets the selected item. If there is no one is selected, return the first one. If there is no * items at all, return null. * * @return the selected item */ public SidePaneItem getSelectedItem() { if (_selectedItem != null) return _selectedItem; else if (size() > 0) return get(0); else return null; } /** * Sets the selected item. * * @param selectedItem the item to be selected */ public void setSelectedItem(SidePaneItem selectedItem) { boolean changedSelection = (selectedItem != _selectedItem); if (changedSelection && (_selectedItem != null)) { fireSidePaneEvent(_selectedItem, SidePaneEvent.SIDE_PANE_TAB_DESELECTED); } if (_selectedItem != null) { _selectedItem.setSelected(false); } _selectedItem = selectedItem; if (_selectedItem != null) { _selectedItem.setSelected(true); } if (changedSelection && (selectedItem != null)) { fireSidePaneEvent(selectedItem, SidePaneEvent.SIDE_PANE_TAB_SELECTED); } } /** * Gets the selected index. * * @return the index of the selected item */ public int getSelectedIndex() { return indexOf(_selectedItem); } /** * Sets the selected index. * * @param index the index of the item to be selected */ public void setSelectedIndex(int index) { setSelectedItem(get(index)); } /** * Get longest title in this group. This is just a handy method which shouldn't really need to * be here. * * @return the longest title */ public String getLongestTitle() { int length = 0; String title = ""; for (int i = 0; i < size(); i++) { SidePaneItem item = get(i); if (item.getTitle().length() > length) { length = item.getTitle().length(); title = item.getTitle(); } } return title; } /** * Removes the component from this group. * * @param comp component to be removed * * @return true if the component is removed */ public boolean removeComponent(Component comp) { if (comp == null) return false; for (int i = 0; i < this.size(); i++) { SidePaneItem item = this.get(i); if (item.getComponent().equals(comp)) { remove(item); if (item.equals(_selectedItem) && size() > 0) { _selectedItem = get(0); } return true; } } return false; } /** * Checks if the component exists in this group. * * @param comp component to be checked * * @return true if the component exists */ public boolean exists(Component comp) { if (comp == null) return false; for (int i = 0; i < this.size(); i++) { SidePaneItem item = this.get(i); if (item.getComponent().equals(comp)) return true; } return false; } /** * Checks if the component exists in this group. * * @param comp component to be checked * * @return true if the component exists */ public SidePaneItem getSidePaneItem(Component comp) { if (comp == null) return null; for (int i = 0; i < this.size(); i++) { SidePaneItem item = this.get(i); if (item.getComponent().equals(comp)) return item; } return null; } private boolean initListenerList(boolean create) { if (listenerList == null && create) { listenerList = new EventListenerList(); return true; } else { return listenerList != null; } } /** * Adds the specified listener to receive side pane events from this side pane group. * * @param l the side pane listener */ public void addSidePaneListener(SidePaneListener l) { if (initListenerList(true)) { if (!JideSwingUtilities.isListenerRegistered(listenerList, SidePaneListener.class, l)) { listenerList.add(SidePaneListener.class, l); } } } /** * Removes the specified side pane listener so that it no longer receives side pane events from * this side pane group. * * @param l the dockable frame listener */ public void removeSidePaneListener(SidePaneListener l) { if (initListenerList(false)) { listenerList.remove(SidePaneListener.class, l); } } /** * Returns an array of all the SidePaneListeners added to this * SidePaneGroup with addSidePaneListener. * * @return all of the SidePaneListeners added or an empty array if no listeners * have been added * * @see #addSidePaneListener */ public SidePaneListener[] getSidePaneListeners() { if (initListenerList(false)) { return listenerList.getListeners(SidePaneListener.class); } else { return new SidePaneListener[0]; } } /** * Fires a side pane event. * * @param sidePaneItem the event source * @param id the type of the event being fired; one of the following: If the event * type is not one of the above, nothing happens. */ protected void fireSidePaneEvent(SidePaneItem sidePaneItem, int id) { if (initListenerList(false)) { Object[] listeners = listenerList.getListenerList(); SidePaneEvent e = null; for (int i = listeners.length - 2; i >= 0; i -= 2) { if (listeners[i] == SidePaneListener.class) { if (e == null) { e = new SidePaneEvent(sidePaneItem, id); } switch (e.getID()) { case SidePaneEvent.SIDE_PANE_TAB_SELECTED: ((SidePaneListener) listeners[i + 1]).sidePaneTabSelected(e); break; case SidePaneEvent.SIDE_PANE_TAB_DESELECTED: ((SidePaneListener) listeners[i + 1]).sidePaneTabDeselected(e); break; default: break; } } } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy