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

com.fathzer.soft.jclop.swing.MultipleURIChooserPanel Maven / Gradle / Ivy

package com.fathzer.soft.jclop.swing;

import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.URI;

import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.fathzer.soft.ajlib.utilities.NullUtils;


/** An URI chooser.
 * 
This is a extension to the JFileChooser concept. It allows the user to select not only files, * but uris that can be of any scheme (ftp, http, etc ...), even non standard schemes (for example, yapbam project * implements a dropbox scheme). * @author Jean-Marc Astesana *
License : GPL v3 */ @SuppressWarnings("serial") class MultipleURIChooserPanel extends JTabbedPane { public static final String SELECTED_URI_PROPERTY = URIChooser.SELECTED_URI_PROPERTY; public static final String URI_APPROVED_PROPERTY = URIChooser.URI_APPROVED_PROPERTY; private URI selectedURI; private boolean isSave; /** The last tab that was set up (used to prevent a tab from being setup again when the selected uri is set before this component is made visible) */ private int lastSetup; /** * Creates the chooser. */ public MultipleURIChooserPanel(URIChooser[] choosers) { this.lastSetup = -1; setTabPlacement(JTabbedPane.TOP); for (URIChooser uiChooser:choosers) { addTab(uiChooser.getTitle(), uiChooser.getIcon(), (Component)uiChooser, null); ((Component)uiChooser).addPropertyChangeListener(URIChooser.SELECTED_URI_PROPERTY, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { URI old = selectedURI; selectedURI = (URI) evt.getNewValue(); if (!NullUtils.areEquals(old, selectedURI)) { firePropertyChange(SELECTED_URI_PROPERTY, old, selectedURI); // System.out.println (this+" "+SELECTED_URI_PROPERTY+": "+old+" -> "+selectedURI); } } }); ((Component)uiChooser).addPropertyChangeListener(URIChooser.URI_APPROVED_PROPERTY, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { firePropertyChange(URI_APPROVED_PROPERTY, evt.getOldValue(), evt.getNewValue()); } }); } setSaveType(false); ChangeListener listener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { URI old = selectedURI; boolean hasSelectedTab = getSelectedComponent()!=null; selectedURI = hasSelectedTab?((URIChooser)getSelectedComponent()).getSelectedURI():null; if (!NullUtils.areEquals(old, selectedURI)) { firePropertyChange(SELECTED_URI_PROPERTY, old, selectedURI); } if (hasSelectedTab && isShowing()) { setUp(getSelectedIndex()); } } }; addChangeListener(listener); } void setUp(int index) { if (lastSetup!=index) { lastSetup = index; ((URIChooser)getComponent(index)).setUp(); } } public void setSaveType(boolean save) { this.isSave = save; for (int i = 0; i < this.getTabCount(); i++) { URIChooser tab = (URIChooser)this.getComponentAt(i); this.setToolTipTextAt(i, tab.getTooltip(save)); tab.setSaveType(save); } } public boolean isSaveType() { return isSave; } /** Gets the currently selected URI. * @return an URI, or null if the user selected nothing. */ public URI getSelectedURI() { return selectedURI; } /** Sets the current uri. * @param uri */ public void setSelectedURI(URI uri) { if (uri!=null) { String scheme = uri.getScheme(); for (int i=0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy