/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* MKBTreePanel.java
*
* Created on Apr 27, 2009, 3:27:38 PM
*/
package clips.report.panels.utils;
import beans.report.SelectedIdList;
import cli_fmw.delegate.directory.DirectoryItemRecursive;
import cli_fmw.delegate.directory.DirectoryRecursive;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.directory.dialogs.DirectoryDialogTreeModel;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.table_config_states.StateSaver;
import clips.delegate.directory.complex.DirectoryMKB10;
import clips.delegate.directory.complex.DirectoryMKB10Item;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import javax.swing.tree.TreePath;
/**
*
* @author finder
*/
public class DirectoryTreeSellectPanel extends javax.swing.JPanel {
static final long serialVersionUID = 1L;
private DirectoryDialogTreeModel treeModel;
private TreeSellectCellRenderer treeRender;
private DirectoryRecursive<?, ? extends DirectoryItemRecursive> dir;
private DirectoryItemRecursive popUpMenuItem;
/** Creates new form MKBTreePanel
* @param dir
* @param allowNullItem
* @throws ClipsException
*/
public DirectoryTreeSellectPanel(DirectoryRecursive<?, ? extends DirectoryItemRecursive> dir) throws ClipsException {
initComponents();
this.dir = dir;
ArrayList<DirectoryItemRecursive> list = new ArrayList<DirectoryItemRecursive>();
for (DirectoryItemRecursive item : dir.getItemsList()) {
if (item.getID() != 0){
list.add(item);
}
}
treeModel = new DirectoryDialogTreeModel(list.toArray(), dir.getDirectoryTitle());
treeRender = new TreeSellectCellRenderer(dir);
mkb10Tree.setModel(treeModel);
mkb10Tree.setCellRenderer(treeRender);
StateSaver.attachTo(this);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
pmMkbTree = new javax.swing.JPopupMenu();
mirDeselect = new javax.swing.JRadioButtonMenuItem();
mirSelect = new javax.swing.JRadioButtonMenuItem();
mirExclude = new javax.swing.JRadioButtonMenuItem();
jScrollPane2 = new javax.swing.JScrollPane();
mkb10Tree = new javax.swing.JTree();
pmMkbTree.setAutoscrolls(true);
mirDeselect.setSelected(true);
mirDeselect.setText("Не добавлять к линии");
mirDeselect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mirDeselectActionPerformed(evt);
}
});
pmMkbTree.add(mirDeselect);
mirSelect.setText("Добавить к линии");
mirSelect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mirSelectActionPerformed(evt);
}
});
pmMkbTree.add(mirSelect);
mirExclude.setText("Игнорировать, или специальный");
mirExclude.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mirExcludeActionPerformed(evt);
}
});
pmMkbTree.add(mirExclude);
setLayout(new java.awt.GridLayout(1, 0));
mkb10Tree.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
mkb10TreeMouseClicked(evt);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
mkb10TreeMousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
mkb10TreeMouseReleased(evt);
}
});
jScrollPane2.setViewportView(mkb10Tree);
add(jScrollPane2);
}// </editor-fold>//GEN-END:initComponents
private void mkb10TreeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mkb10TreeMouseClicked
if (treeRender.getObject() == null) {
return;
}
Object clickedObject = getTreeItemAt(evt.getPoint(), true);
if (clickedObject == null || !(clickedObject instanceof DirectoryMKB10Item)) {
return;
}
DirectoryMKB10Item clickedItem = (DirectoryMKB10Item) clickedObject;
new DirectorySellectUtil(dir).inverceSelection(treeRender.getObject(), clickedItem);
evt.consume();
}//GEN-LAST:event_mkb10TreeMouseClicked
private void mkb10TreeMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mkb10TreeMousePressed
if (evt.isPopupTrigger()){
if (showMkbPopup(evt.getPoint())) {
evt.consume();
}
}
}//GEN-LAST:event_mkb10TreeMousePressed
private void mkb10TreeMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mkb10TreeMouseReleased
if (evt.isPopupTrigger()){
if (showMkbPopup(evt.getPoint())) {
evt.consume();
}
}
}//GEN-LAST:event_mkb10TreeMouseReleased
private void mirDeselectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mirDeselectActionPerformed
if (treeRender.getObject() != null && popUpMenuItem != null ){
new DirectorySellectUtil(dir).deselectItem(treeRender.getObject(), popUpMenuItem);
}
}//GEN-LAST:event_mirDeselectActionPerformed
private void mirSelectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mirSelectActionPerformed
if (treeRender.getObject() != null && popUpMenuItem != null ){
new DirectorySellectUtil(dir).selectItem(treeRender.getObject(), popUpMenuItem);
}
}//GEN-LAST:event_mirSelectActionPerformed
private void mirExcludeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mirExcludeActionPerformed
if (treeRender.getObject() != null && popUpMenuItem != null ){
new DirectorySellectUtil(dir).excludeItem(treeRender.getObject(), popUpMenuItem);
}
}//GEN-LAST:event_mirExcludeActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JRadioButtonMenuItem mirDeselect;
private javax.swing.JRadioButtonMenuItem mirExclude;
private javax.swing.JRadioButtonMenuItem mirSelect;
private javax.swing.JTree mkb10Tree;
private javax.swing.JPopupMenu pmMkbTree;
// End of variables declaration//GEN-END:variables
private boolean showMkbPopup(Point pt){
if (treeRender.getObject() == null) {
return false;
}
Object obj = getTreeItemAt(pt, false);
if (obj == null || !(obj instanceof DirectoryMKB10Item)) {
return false;
}
popUpMenuItem = (DirectoryMKB10Item)obj;
try {
DirectorySellectUtil.SelectionType state = new DirectorySellectUtil(dir).getSelectType(treeRender.getObject(), popUpMenuItem);
mirExclude.setSelected(false);
mirSelect.setSelected(false);
mirDeselect.setSelected(false);
if (state.canceled == DirectorySellectUtil.ContainType.isAreSelected) {
mirExclude.setSelected(true);
}
else if (state.selected == DirectorySellectUtil.ContainType.isAreSelected) {
mirSelect.setSelected(true);
}
else {
mirDeselect.setSelected(true);
}
pmMkbTree.show(mkb10Tree, pt.x, pt.y);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
return true;
}
private Object getTreeItemAt(Point pt, boolean forIconOnly){
TreePath path = mkb10Tree.getPathForLocation(pt.x, pt.y);
if (path == null){
return null;
}
Rectangle rect = mkb10Tree.getPathBounds(path);
if (rect == null) {
return null;
}
if (forIconOnly) {
rect.width = TreeSellectCellRenderer.ICON_SEL_CHILDREN.getIconWidth();
}
if (!rect.contains(pt)){
return null;
}
Object clickedObject = path.getLastPathComponent();
return clickedObject;
}
public void setObject(SelectedIdList line) {
treeRender.setObject(line);
mkb10Tree.setEnabled(line != null);
mkb10Tree.repaint();
}
public SelectedIdList getObject() {
return treeRender.getObject();
}
public void onTreeUpdated(){
mkb10Tree.repaint();
}
}