You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SIPRP/trunk/SIPRPSoft/src/siprp/higiene/relatorio/VerAreasRelatorioPanel.java

203 lines
6.0 KiB

package siprp.higiene.relatorio;
import info.clearthought.layout.TableLayout;
import info.clearthought.layout.TableLayoutConstraints;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import leaf.ui.LeafTree;
import shst.data.outer.HsRelatorioAreaData;
import shst.data.outer.HsRelatorioData;
import shst.data.outer.HsRelatorioPostoData;
import shst.data.outer.HsRelatorioPostoRiscoData;
import shst.logic.HigieneSegurancaLogic;
import shst.logic.node.PostoRelatorioNode;
import com.evolute.utils.error.ErrorLogger;
import com.evolute.utils.images.ImageIconLoader;
import com.evolute.utils.ui.trees.TreeTools;
public class VerAreasRelatorioPanel extends JPanel
{
private static final long serialVersionUID = 1L;
public static final String SELECTION_CHANGED = "SELECTION_CHANGED";
private final JButton buttonEdit = new JButton( "Editar Nome", ImageIconLoader.loadImageIconSilent( "siprp/higiene/relatorio/edit.png" ) );
private final DefaultMutableTreeNode root = new DefaultMutableTreeNode();
private final DefaultTreeModel model = new DefaultTreeModel( root );
public final LeafTree tree = new LeafTree( model );
private final JScrollPane scroll = new JScrollPane( tree );
private HsRelatorioData relatorio = null;
private DefaultMutableTreeNode selectedNode = null;
public VerAreasRelatorioPanel()
{
startupComponents();
setupLayout();
placeComponents();
startupListeners();
}
private void startupComponents()
{
buttonEdit.setEnabled( false );
tree.setRootVisible( false );
tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
tree.setCellRenderer(new DefaultTreeCellRenderer()
{
private static final long serialVersionUID = 1L;
@Override
public Component getTreeCellRendererComponent( JTree pTree, Object pValue, boolean pIsSelected, boolean pIsExpanded, boolean pIsLeaf, int pRow, boolean pHasFocus )
{
super.getTreeCellRendererComponent( pTree, pValue, pIsSelected, pIsExpanded, pIsLeaf, pRow, pHasFocus );
boolean highlight= false;
Color highColor = null;
Color lowColor = null;
if( pValue instanceof PostoRelatorioNode )
{
Object userObject = ((PostoRelatorioNode)pValue).getUserObject();
if( userObject instanceof HsRelatorioPostoData )
{
HsRelatorioPostoData posto = (HsRelatorioPostoData) userObject;
boolean allOk = true;
for( HsRelatorioPostoRiscoData rel : posto.fromHsRelatorioPostoRisco_posto_id() )
{
if( rel.toRisco_id().getDeleted_date() == null )
{
allOk &= HigieneSegurancaLogic.isRelatorioRiscoPreenchido( rel );
}
}
highColor = RelatorioHigieneSegurancaWindow.COLOR_RISCO_OK_SEL;
lowColor = RelatorioHigieneSegurancaWindow.COLOR_RISCO_OK;
highlight = allOk;
}
}
if( highlight )
{
setOpaque( true );
setBackground( pIsSelected ? highColor : lowColor );
}
else
{
setOpaque( false );
}
return this;
}
} );
TreeTools.registerTreeKeepExpandState( tree );
}
private void setupLayout()
{
TableLayout layout = new TableLayout(
new double[]{ TableLayout.MINIMUM, TableLayout.FILL },
new double[]{ TableLayout.MINIMUM, TableLayout.FILL }
);
layout.setHGap( 5 );
layout.setVGap( 5 );
setLayout( layout );
}
private void placeComponents()
{
add( buttonEdit, new TableLayoutConstraints( 0, 0 ) );
add( scroll, new TableLayoutConstraints( 0, 1, 1, 1 ) );
}
private void startupListeners()
{
tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener(){
@Override
public void valueChanged( TreeSelectionEvent e )
{
TreePath path = tree.getSelectionPath();
Object object = path == null ? null : path.getLastPathComponent();
HsRelatorioPostoData posto = object == null ? null : ( (object instanceof PostoRelatorioNode) ? (HsRelatorioPostoData) ((PostoRelatorioNode) object).getUserObject() : null);
selectedNode = (object instanceof DefaultMutableTreeNode) ? (DefaultMutableTreeNode) object : null;
buttonEdit.setEnabled( selectedNode != null );
firePropertyChange( SELECTION_CHANGED, null, posto );
}
} );
buttonEdit.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
Object object = selectedNode == null ? null : selectedNode.getUserObject();
if( object != null )
{
String title = "Editar nome";
String result = (String) JOptionPane.showInputDialog( VerAreasRelatorioPanel.this, "", title, JOptionPane.QUESTION_MESSAGE, null, null, object.toString() );
if( result != null && ! result.trim().isEmpty() )
{
try
{
if( object instanceof HsRelatorioAreaData )
{
( ( HsRelatorioAreaData ) object ).setDescription( result );
( ( HsRelatorioAreaData ) object ).save();
refresh();
}
else if( object instanceof HsRelatorioPostoData )
{
( ( HsRelatorioPostoData ) object ).setDescription( result );
( ( HsRelatorioPostoData ) object ).save();
refresh();
}
}
catch( Exception ex )
{
ErrorLogger.logException( ex );
}
}
}
}
} );
}
public void refresh()
{
root.removeAllChildren();
if( relatorio != null )
{
TreeTools.merge( root, HigieneSegurancaLogic.getAreasRelatorioTree( relatorio ) );
}
TreeTools.refreshTree( tree, root, false );
}
public void setRelatorio( HsRelatorioData relatorio )
{
this.relatorio = relatorio;
refresh();
}
}