/*
* Copyright (C) 2011-2014 GeoForge Project
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.geoforge.guillc.jdesktop.swingx.jxtaskpanecontainer;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import org.geoforge.java.awt.color.GfrColor;
import org.geoforge.guillc.jdesktop.swingx.jxtaskpane.GfrTpe;
import org.geoforge.lang.handler.IGfrHandlerLifeCycleObject;
import org.jdesktop.swingx.JXTaskPaneContainer;
import org.geoforge.guillc.jdesktop.swingx.painter.GfrPainter;
import org.geoforge.guillc.jdesktop.swingx.plaf.basic.OurBasicTaskPaneContainerUI;
import org.geoforge.guillc.optionpane.GfrOptionPaneAbs;
import org.geoforge.java.util.logging.filehandler.FileHandlerLogger;
import org.jdesktop.swingx.JXCollapsiblePane;
import org.jdesktop.swingx.JXTaskPane;
/**
*
* @author robert
*/
public class GfrTpc extends JXTaskPaneContainer implements
IGfrHandlerLifeCycleObject,
PropertyChangeListener
{
// ----
// begin: instantiate logger for this class
final private static Logger _LOGGER_ = Logger.getLogger(GfrTpc.class.getName());
static
{
GfrTpc._LOGGER_.addHandler(FileHandlerLogger.s_getInstance());
}
// end: instantiate logger for this class
// ----
public GfrTpc()
{
super();
super.setBorder(BorderFactory.createMatteBorder(
5, 4, 0, 4,
GfrColor.GRAY_4));
//--usefull for corners
super.setBackground(GfrColor.GRAY_4);
super.setBackgroundPainter(GfrPainter.get(GfrColor.GRAY_4));
super.setUI(new OurBasicTaskPaneContainerUI(5));
}
public Component add(String strWhat, Component cmp, int intIndex)
{
GfrTpe tpe = new GfrTpe((PropertyChangeListener) this, strWhat);
if (! tpe.init())
{
String str = "! tpe.init()";
GfrTpc._LOGGER_.severe(str);
GfrOptionPaneAbs.s_showDialogError(null, str);
System.exit(1);
}
tpe.add(cmp);
super.add(tpe, intIndex);
return tpe;
}
/*
* quick fix
*/
@Override
public Component add(String strWhat, Component cmp)
{
GfrTpe tpe = new GfrTpe((PropertyChangeListener) this, strWhat);
if (! tpe.init())
{
String str = "! tpe.init()";
GfrTpc._LOGGER_.severe(str);
GfrOptionPaneAbs.s_showDialogError(null, str);
System.exit(1);
}
tpe.add(cmp);
super.add(tpe);
return tpe;
}
@Override
public boolean init()
{
return true;
}
@Override
public void destroy()
{
}
private void _propertyChangeTaskpane_(PropertyChangeEvent evt)
{
if (evt.getPropertyName().compareTo(JXTaskPane.STR_KEY_PROP_COLLAPSED) != 0)
return;
Boolean booNewValue = (Boolean) evt.getNewValue();
boolean blnNewValue = booNewValue.booleanValue();
if (blnNewValue) // collapsed
return;
// troubleshootings, by-passing
if (true) return;
final JXTaskPane tpeSource = (JXTaskPane) evt.getSource();
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
_collapseAny_(tpeSource);
}
});
}
private void _propertyChangeCollapsiblepane_(PropertyChangeEvent evt)
{
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void propertyChange(PropertyChangeEvent evt)
{
if (true) // tempo
{
return;
}
if (evt.getSource() instanceof JXTaskPane)
_propertyChangeTaskpane_(evt);
else if (evt.getSource() instanceof JXCollapsiblePane)
_propertyChangeCollapsiblepane_(evt);
else
throw new UnsupportedOperationException("Dev coding error");
/*
String strPropertyName = evt.getPropertyName();
if (strPropertyName.compareTo(JXCollapsiblePane.ANIMATION_STATE_KEY) != 0)
return;
String strNewValue = (String) evt.getNewValue();
if (strNewValue.compareTo(JXCollapsiblePane.STR_VALUE_NEW_PROP_EXPANDED) != 0)
return;
Object objSource = evt.getSource();
if (! (objSource instanceof JXCollapsiblePane))
return;
final JXTaskPane tpeSource = (JXTaskPane) ((Component) objSource).getParent();
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
_collapseAny_(tpeSource);
}
});
*/
/*for (int i=0; i<super.getComponentCount(); i++)
{
Component cmpCur = super.getComponent(i);
if (! (cmpCur instanceof JXTaskPane))
continue;
if (cmpCur == (Component) tpeSource)
continue;
JXTaskPane tpeCur = (JXTaskPane) cmpCur;
if (tpeCur.isCollapsed())
return;
_collapseChild_(tpeCur);
}*/
}
private void _collapseAny_(JXTaskPane tpeExpanded)
{
for (int i=0; i<super.getComponentCount(); i++)
{
Component cmpCur = super.getComponent(i);
if (! (cmpCur instanceof JXTaskPane))
continue;
if (cmpCur == (Component) tpeExpanded)
continue;
JXTaskPane tpeCur = (JXTaskPane) cmpCur;
if (tpeCur.isCollapsed())
return;
System.out.println(">> collapsing: " + tpeCur.getTitle());
tpeCur.setCollapsed(true);
}
}
// tbrl: not always working !!!!!!!!!!!!!
private synchronized void _collapseChild_(
//final
JXTaskPane tpe)
{
System.out.println(">> collapsing: " + tpe.getTitle());
/*javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{*/
tpe.setCollapsed(true);
/*}
});*/
}
}