Lines 42-47
Link Here
|
42 |
package org.netbeans.spi.viewmodel; |
42 |
package org.netbeans.spi.viewmodel; |
43 |
|
43 |
|
44 |
import java.awt.datatransfer.Transferable; |
44 |
import java.awt.datatransfer.Transferable; |
|
|
45 |
import java.awt.dnd.DnDConstants; |
45 |
import java.awt.event.ActionEvent; |
46 |
import java.awt.event.ActionEvent; |
46 |
import java.io.IOException; |
47 |
import java.io.IOException; |
47 |
import java.lang.ref.Reference; |
48 |
import java.lang.ref.Reference; |
Lines 101-106
Link Here
|
101 |
public static int MULTISELECTION_TYPE_EXACTLY_ONE = 1; |
102 |
public static int MULTISELECTION_TYPE_EXACTLY_ONE = 1; |
102 |
public static int MULTISELECTION_TYPE_ALL = 2; |
103 |
public static int MULTISELECTION_TYPE_ALL = 2; |
103 |
public static int MULTISELECTION_TYPE_ANY = 3; |
104 |
public static int MULTISELECTION_TYPE_ANY = 3; |
|
|
105 |
|
106 |
private static final int DEFAULT_DRAG_DROP_ALLOWED_ACTIONS = DnDConstants.ACTION_NONE; |
104 |
|
107 |
|
105 |
private static boolean verbose = |
108 |
private static boolean verbose = |
106 |
System.getProperty ("netbeans.debugger.models") != null; |
109 |
System.getProperty ("netbeans.debugger.models") != null; |
Lines 470-480
Link Here
|
470 |
* |
473 |
* |
471 |
* @returns compund tree model |
474 |
* @returns compund tree model |
472 |
*/ |
475 |
*/ |
473 |
private static ExtendedNodeModel createCompoundNodeModel ( |
476 |
private static SuperNodeModel createCompoundNodeModel ( |
474 |
ExtendedNodeModel originalNodeModel, |
477 |
SuperNodeModel originalNodeModel, |
475 |
List treeNodeModelFilters |
478 |
List treeNodeModelFilters |
476 |
) { |
479 |
) { |
477 |
ExtendedNodeModel nm = originalNodeModel; |
480 |
SuperNodeModel nm = originalNodeModel; |
478 |
int i, k = treeNodeModelFilters.size (); |
481 |
int i, k = treeNodeModelFilters.size (); |
479 |
for (i = 0; i < k; i++) |
482 |
for (i = 0; i < k; i++) |
480 |
nm = new CompoundNodeModel ( |
483 |
nm = new CompoundNodeModel ( |
Lines 843-855
Link Here
|
843 |
* |
846 |
* |
844 |
* @author Jan Jancura |
847 |
* @author Jan Jancura |
845 |
*/ |
848 |
*/ |
846 |
private final static class CompoundNodeModel implements ExtendedNodeModel, CheckNodeModel, ModelListener { |
849 |
private final static class CompoundNodeModel implements SuperNodeModel, |
|
|
850 |
ModelListener { |
847 |
|
851 |
|
848 |
|
852 |
|
849 |
private ExtendedNodeModel model; |
853 |
private SuperNodeModel model; |
850 |
private NodeModelFilter filter; |
854 |
private NodeModelFilter filter; |
851 |
private CheckNodeModel cmodel; |
|
|
852 |
private CheckNodeModelFilter cfilter; |
855 |
private CheckNodeModelFilter cfilter; |
|
|
856 |
private DnDNodeModelFilter dndfilter; |
853 |
|
857 |
|
854 |
private final Collection<ModelListener> modelListeners = new HashSet<ModelListener>(); |
858 |
private final Collection<ModelListener> modelListeners = new HashSet<ModelListener>(); |
855 |
|
859 |
|
Lines 858-871
Link Here
|
858 |
* Creates {@link org.netbeans.spi.viewmodel.TreeModel} for given TreeModel and |
862 |
* Creates {@link org.netbeans.spi.viewmodel.TreeModel} for given TreeModel and |
859 |
* {@link org.netbeans.spi.viewmodel.TreeModelFilter}. |
863 |
* {@link org.netbeans.spi.viewmodel.TreeModelFilter}. |
860 |
*/ |
864 |
*/ |
861 |
CompoundNodeModel (ExtendedNodeModel model, NodeModelFilter filter) { |
865 |
CompoundNodeModel (SuperNodeModel model, NodeModelFilter filter) { |
862 |
this.model = model; |
866 |
this.model = model; |
863 |
this.filter = filter; |
867 |
this.filter = filter; |
864 |
if (model instanceof CheckNodeModel) { |
|
|
865 |
this.cmodel = (CheckNodeModel) model; |
866 |
} |
867 |
if (filter instanceof CheckNodeModelFilter) { |
868 |
if (filter instanceof CheckNodeModelFilter) { |
868 |
this.cfilter = (CheckNodeModelFilter) filter; |
869 |
this.cfilter = (CheckNodeModelFilter) filter; |
|
|
870 |
} |
871 |
if (filter instanceof DnDNodeModelFilter) { |
872 |
this.dndfilter = (DnDNodeModelFilter) filter; |
869 |
} |
873 |
} |
870 |
} |
874 |
} |
871 |
|
875 |
|
Lines 1015-1028
Link Here
|
1015 |
} |
1019 |
} |
1016 |
} |
1020 |
} |
1017 |
|
1021 |
|
1018 |
/*public Transferable drag(Object node) throws IOException, |
1022 |
public int getAllowedDragActions() { |
|
|
1023 |
if (dndfilter != null) { |
1024 |
return dndfilter.getAllowedDragActions(model); |
1025 |
} else { |
1026 |
return model.getAllowedDragActions(); |
1027 |
} |
1028 |
} |
1029 |
|
1030 |
public int getAllowedDropActions(Transferable t) { |
1031 |
if (dndfilter != null) { |
1032 |
return dndfilter.getAllowedDropActions(model, t); |
1033 |
} else { |
1034 |
return model.getAllowedDropActions(t); |
1035 |
} |
1036 |
} |
1037 |
|
1038 |
public Transferable drag(Object node) throws IOException, |
1019 |
UnknownTypeException { |
1039 |
UnknownTypeException { |
1020 |
if (filter instanceof ExtendedNodeModelFilter) { |
1040 |
if (dndfilter != null) { |
1021 |
return ((ExtendedNodeModelFilter) filter).drag(model, node); |
1041 |
return dndfilter.drag(model, node); |
1022 |
} else { |
1042 |
} else { |
1023 |
return model.drag(node); |
1043 |
return model.drag(node); |
1024 |
} |
1044 |
} |
1025 |
}*/ |
1045 |
} |
1026 |
|
1046 |
|
1027 |
public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException { |
1047 |
public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException { |
1028 |
if (filter instanceof ExtendedNodeModelFilter) { |
1048 |
if (filter instanceof ExtendedNodeModelFilter) { |
Lines 1032-1045
Link Here
|
1032 |
} |
1052 |
} |
1033 |
} |
1053 |
} |
1034 |
|
1054 |
|
1035 |
/*public PasteType getDropType(Object node, Transferable t, int action, |
1055 |
public PasteType getDropType(Object node, Transferable t, int action, |
1036 |
int index) throws UnknownTypeException { |
1056 |
int index) throws UnknownTypeException { |
1037 |
if (filter instanceof ExtendedNodeModelFilter) { |
1057 |
if (dndfilter != null) { |
1038 |
return ((ExtendedNodeModelFilter) filter).getDropType(model, node, t, action, index); |
1058 |
return dndfilter.getDropType(model, node, t, action, index); |
1039 |
} else { |
1059 |
} else { |
1040 |
return model.getDropType(node, t, action, index); |
1060 |
return model.getDropType(node, t, action, index); |
1041 |
} |
1061 |
} |
1042 |
}*/ |
1062 |
} |
1043 |
|
1063 |
|
1044 |
public void setName(Object node, String name) throws UnknownTypeException { |
1064 |
public void setName(Object node, String name) throws UnknownTypeException { |
1045 |
if (filter instanceof ExtendedNodeModelFilter) { |
1065 |
if (filter instanceof ExtendedNodeModelFilter) { |
Lines 1076-1115
Link Here
|
1076 |
public boolean isCheckable(Object node) throws UnknownTypeException { |
1096 |
public boolean isCheckable(Object node) throws UnknownTypeException { |
1077 |
if (cfilter != null) { |
1097 |
if (cfilter != null) { |
1078 |
return cfilter.isCheckable(model, node); |
1098 |
return cfilter.isCheckable(model, node); |
1079 |
} else if (cmodel != null) { |
|
|
1080 |
return cmodel.isCheckable(node); |
1081 |
} else { |
1099 |
} else { |
1082 |
return false; |
1100 |
return model.isCheckable(node); |
1083 |
} |
1101 |
} |
1084 |
} |
1102 |
} |
1085 |
|
1103 |
|
1086 |
public boolean isCheckEnabled(Object node) throws UnknownTypeException { |
1104 |
public boolean isCheckEnabled(Object node) throws UnknownTypeException { |
1087 |
if (cfilter != null) { |
1105 |
if (cfilter != null) { |
1088 |
return cfilter.isCheckEnabled(model, node); |
1106 |
return cfilter.isCheckEnabled(model, node); |
1089 |
} else if (cmodel != null) { |
|
|
1090 |
return cmodel.isCheckEnabled(node); |
1091 |
} else { |
1107 |
} else { |
1092 |
return true; |
1108 |
return model.isCheckEnabled(node); |
1093 |
} |
1109 |
} |
1094 |
} |
1110 |
} |
1095 |
|
1111 |
|
1096 |
public Boolean isSelected(Object node) throws UnknownTypeException { |
1112 |
public Boolean isSelected(Object node) throws UnknownTypeException { |
1097 |
if (cfilter != null) { |
1113 |
if (cfilter != null) { |
1098 |
return cfilter.isSelected(model, node); |
1114 |
return cfilter.isSelected(model, node); |
1099 |
} else if (cmodel != null) { |
|
|
1100 |
return cmodel.isSelected(node); |
1101 |
} else { |
1115 |
} else { |
1102 |
return false; |
1116 |
return model.isSelected(node); |
1103 |
} |
1117 |
} |
1104 |
} |
1118 |
} |
1105 |
|
1119 |
|
1106 |
public void setSelected(Object node, Boolean selected) throws UnknownTypeException { |
1120 |
public void setSelected(Object node, Boolean selected) throws UnknownTypeException { |
1107 |
if (cfilter != null) { |
1121 |
if (cfilter != null) { |
1108 |
cfilter.setSelected(model, node, selected); |
1122 |
cfilter.setSelected(model, node, selected); |
1109 |
} else if (cmodel != null) { |
|
|
1110 |
cmodel.setSelected(node, selected); |
1111 |
} else { |
1123 |
} else { |
1112 |
Exceptions.printStackTrace(new IllegalStateException("Can not set selected state to model "+this)); |
1124 |
model.setSelected(node, selected); |
1113 |
} |
1125 |
} |
1114 |
} |
1126 |
} |
1115 |
|
1127 |
|
Lines 2023-2029
Link Here
|
2023 |
* |
2035 |
* |
2024 |
* @author Jan Jancura |
2036 |
* @author Jan Jancura |
2025 |
*/ |
2037 |
*/ |
2026 |
private static final class DelegatingNodeModel implements ExtendedNodeModel, CheckNodeModel { |
2038 |
private static final class DelegatingNodeModel implements SuperNodeModel { |
2027 |
|
2039 |
|
2028 |
private NodeModel[] models; |
2040 |
private NodeModel[] models; |
2029 |
private HashMap<String, NodeModel> classNameToModel = new HashMap<String, NodeModel>(); |
2041 |
private HashMap<String, NodeModel> classNameToModel = new HashMap<String, NodeModel>(); |
Lines 2233-2254
Link Here
|
2233 |
return null; |
2245 |
return null; |
2234 |
} |
2246 |
} |
2235 |
|
2247 |
|
2236 |
/* |
|
|
2237 |
private Transferable defaultDrag() throws IOException { |
2248 |
private Transferable defaultDrag() throws IOException { |
2238 |
return null; |
2249 |
return null; |
2239 |
} |
2250 |
} |
2240 |
*/ |
|
|
2241 |
|
2251 |
|
2242 |
private PasteType[] defaultGetPasteTypes(Transferable t) { |
2252 |
private PasteType[] defaultGetPasteTypes(Transferable t) { |
2243 |
return null; |
2253 |
return null; |
2244 |
} |
2254 |
} |
2245 |
|
2255 |
|
2246 |
/* |
|
|
2247 |
private PasteType defaultGetDropType(Transferable t, int action, |
2256 |
private PasteType defaultGetDropType(Transferable t, int action, |
2248 |
int index) { |
2257 |
int index) { |
2249 |
return null; |
2258 |
return null; |
2250 |
} |
2259 |
} |
2251 |
*/ |
|
|
2252 |
|
2260 |
|
2253 |
private void defaultSetName(String name) { |
2261 |
private void defaultSetName(String name) { |
2254 |
// nothing |
2262 |
// nothing |
Lines 2456-2462
Link Here
|
2456 |
} |
2464 |
} |
2457 |
} |
2465 |
} |
2458 |
|
2466 |
|
2459 |
/* |
2467 |
public int getAllowedDragActions() { |
|
|
2468 |
int i, k = models.length; |
2469 |
for (i = 0; i < k; i++) { |
2470 |
if (models[i] instanceof DnDNodeModel) { |
2471 |
return ((DnDNodeModel) models[i]).getAllowedDragActions(); |
2472 |
} |
2473 |
} |
2474 |
return DEFAULT_DRAG_DROP_ALLOWED_ACTIONS; |
2475 |
} |
2476 |
|
2477 |
public int getAllowedDropActions(Transferable t) { |
2478 |
int i, k = models.length; |
2479 |
for (i = 0; i < k; i++) { |
2480 |
if (models[i] instanceof DnDNodeModel) { |
2481 |
return ((DnDNodeModel) models[i]).getAllowedDropActions(t); |
2482 |
} |
2483 |
} |
2484 |
return DEFAULT_DRAG_DROP_ALLOWED_ACTIONS; |
2485 |
} |
2486 |
|
2460 |
public Transferable drag(Object node) throws IOException, |
2487 |
public Transferable drag(Object node) throws IOException, |
2461 |
UnknownTypeException { |
2488 |
UnknownTypeException { |
2462 |
UnknownTypeException uex = null; |
2489 |
UnknownTypeException uex = null; |
Lines 2464-2472
Link Here
|
2464 |
node.getClass ().getName () |
2491 |
node.getClass ().getName () |
2465 |
); |
2492 |
); |
2466 |
if (model != null) { |
2493 |
if (model != null) { |
2467 |
if (model instanceof ExtendedNodeModel) { |
2494 |
if (model instanceof DnDNodeModel) { |
2468 |
try { |
2495 |
try { |
2469 |
return ((ExtendedNodeModel) model).drag (node); |
2496 |
return ((DnDNodeModel) model).drag (node); |
2470 |
} catch (UnknownTypeException e) { |
2497 |
} catch (UnknownTypeException e) { |
2471 |
uex = e; |
2498 |
uex = e; |
2472 |
} |
2499 |
} |
Lines 2477-2485
Link Here
|
2477 |
int i, k = models.length; |
2504 |
int i, k = models.length; |
2478 |
boolean isExtended = false; |
2505 |
boolean isExtended = false; |
2479 |
for (i = 0; i < k; i++) { |
2506 |
for (i = 0; i < k; i++) { |
2480 |
if (models[i] instanceof ExtendedNodeModel) { |
2507 |
if (models[i] instanceof DnDNodeModel) { |
2481 |
try { |
2508 |
try { |
2482 |
Transferable t = ((ExtendedNodeModel) models [i]).drag (node); |
2509 |
Transferable t = ((DnDNodeModel) models [i]).drag (node); |
2483 |
classNameToModel.put (node.getClass ().getName (), models [i]); |
2510 |
classNameToModel.put (node.getClass ().getName (), models [i]); |
2484 |
return t; |
2511 |
return t; |
2485 |
} catch (UnknownTypeException e) { |
2512 |
} catch (UnknownTypeException e) { |
Lines 2497-2503
Link Here
|
2497 |
throw new UnknownTypeException (node); |
2524 |
throw new UnknownTypeException (node); |
2498 |
} |
2525 |
} |
2499 |
} |
2526 |
} |
2500 |
*/ |
|
|
2501 |
|
2527 |
|
2502 |
public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException { |
2528 |
public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException { |
2503 |
UnknownTypeException uex = null; |
2529 |
UnknownTypeException uex = null; |
Lines 2539-2545
Link Here
|
2539 |
} |
2565 |
} |
2540 |
} |
2566 |
} |
2541 |
|
2567 |
|
2542 |
/* |
|
|
2543 |
public PasteType getDropType(Object node, Transferable t, int action, |
2568 |
public PasteType getDropType(Object node, Transferable t, int action, |
2544 |
int index) throws UnknownTypeException { |
2569 |
int index) throws UnknownTypeException { |
2545 |
UnknownTypeException uex = null; |
2570 |
UnknownTypeException uex = null; |
Lines 2547-2555
Link Here
|
2547 |
node.getClass ().getName () |
2572 |
node.getClass ().getName () |
2548 |
); |
2573 |
); |
2549 |
if (model != null) { |
2574 |
if (model != null) { |
2550 |
if (model instanceof ExtendedNodeModel) { |
2575 |
if (model instanceof DnDNodeModel) { |
2551 |
try { |
2576 |
try { |
2552 |
return ((ExtendedNodeModel) model).getDropType (node, t, action, index); |
2577 |
return ((DnDNodeModel) model).getDropType (node, t, action, index); |
2553 |
} catch (UnknownTypeException e) { |
2578 |
} catch (UnknownTypeException e) { |
2554 |
uex = e; |
2579 |
uex = e; |
2555 |
} |
2580 |
} |
Lines 2560-2568
Link Here
|
2560 |
int i, k = models.length; |
2585 |
int i, k = models.length; |
2561 |
boolean isExtended = false; |
2586 |
boolean isExtended = false; |
2562 |
for (i = 0; i < k; i++) { |
2587 |
for (i = 0; i < k; i++) { |
2563 |
if (models[i] instanceof ExtendedNodeModel) { |
2588 |
if (models[i] instanceof DnDNodeModel) { |
2564 |
try { |
2589 |
try { |
2565 |
PasteType p = ((ExtendedNodeModel) models [i]).getDropType (node, t, action, index); |
2590 |
PasteType p = ((DnDNodeModel) models [i]).getDropType (node, t, action, index); |
2566 |
classNameToModel.put (node.getClass ().getName (), models [i]); |
2591 |
classNameToModel.put (node.getClass ().getName (), models [i]); |
2567 |
return p; |
2592 |
return p; |
2568 |
} catch (UnknownTypeException e) { |
2593 |
} catch (UnknownTypeException e) { |
Lines 2580-2586
Link Here
|
2580 |
throw new UnknownTypeException (node); |
2605 |
throw new UnknownTypeException (node); |
2581 |
} |
2606 |
} |
2582 |
} |
2607 |
} |
2583 |
*/ |
|
|
2584 |
|
2608 |
|
2585 |
public void setName(Object node, String name) throws UnknownTypeException { |
2609 |
public void setName(Object node, String name) throws UnknownTypeException { |
2586 |
UnknownTypeException uex = null; |
2610 |
UnknownTypeException uex = null; |
Lines 3213-3223
Link Here
|
3213 |
* @author Jan Jancura |
3237 |
* @author Jan Jancura |
3214 |
*/ |
3238 |
*/ |
3215 |
public static final class CompoundModel implements TreeModel, |
3239 |
public static final class CompoundModel implements TreeModel, |
3216 |
ExtendedNodeModel, CheckNodeModel, NodeActionsProvider, TableModel, TreeExpansionModel { |
3240 |
ExtendedNodeModel, CheckNodeModel, DnDNodeModel, NodeActionsProvider, TableModel, TreeExpansionModel { |
3217 |
|
3241 |
|
3218 |
private TreeModel treeModel; |
3242 |
private TreeModel treeModel; |
3219 |
private ExtendedNodeModel nodeModel; |
3243 |
private ExtendedNodeModel nodeModel; |
3220 |
private CheckNodeModel cnodeModel; |
3244 |
private CheckNodeModel cnodeModel; |
|
|
3245 |
private DnDNodeModel dndNodeModel; |
3221 |
private NodeActionsProvider nodeActionsProvider; |
3246 |
private NodeActionsProvider nodeActionsProvider; |
3222 |
private ColumnModel[] columnModels; |
3247 |
private ColumnModel[] columnModels; |
3223 |
private TableModel tableModel; |
3248 |
private TableModel tableModel; |
Lines 3265-3270
Link Here
|
3265 |
this.nodeModel = nodeModel; |
3290 |
this.nodeModel = nodeModel; |
3266 |
if (nodeModel instanceof CheckNodeModel) { |
3291 |
if (nodeModel instanceof CheckNodeModel) { |
3267 |
this.cnodeModel = (CheckNodeModel) nodeModel; |
3292 |
this.cnodeModel = (CheckNodeModel) nodeModel; |
|
|
3293 |
} |
3294 |
if (nodeModel instanceof DnDNodeModel) { |
3295 |
this.dndNodeModel = (DnDNodeModel) nodeModel; |
3268 |
} |
3296 |
} |
3269 |
this.tableModel = tableModel; |
3297 |
this.tableModel = tableModel; |
3270 |
this.nodeActionsProvider = nodeActionsProvider; |
3298 |
this.nodeActionsProvider = nodeActionsProvider; |
Lines 3635-3657
Link Here
|
3635 |
return nodeModel.clipboardCut(node); |
3663 |
return nodeModel.clipboardCut(node); |
3636 |
} |
3664 |
} |
3637 |
|
3665 |
|
3638 |
/* |
3666 |
public int getAllowedDragActions() { |
|
|
3667 |
if (dndNodeModel != null) { |
3668 |
return dndNodeModel.getAllowedDragActions(); |
3669 |
} else { |
3670 |
return DEFAULT_DRAG_DROP_ALLOWED_ACTIONS; |
3671 |
} |
3672 |
} |
3673 |
|
3674 |
public int getAllowedDropActions(Transferable t) { |
3675 |
if (dndNodeModel != null) { |
3676 |
return dndNodeModel.getAllowedDropActions(t); |
3677 |
} else { |
3678 |
return DEFAULT_DRAG_DROP_ALLOWED_ACTIONS; |
3679 |
} |
3680 |
} |
3681 |
|
3639 |
public Transferable drag(Object node) throws IOException, |
3682 |
public Transferable drag(Object node) throws IOException, |
3640 |
UnknownTypeException { |
3683 |
UnknownTypeException { |
3641 |
return nodeModel.drag(node); |
3684 |
if (dndNodeModel != null) { |
|
|
3685 |
return dndNodeModel.drag(node); |
3686 |
} else { |
3687 |
return null; |
3688 |
} |
3642 |
} |
3689 |
} |
3643 |
*/ |
|
|
3644 |
|
3690 |
|
3645 |
public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException { |
3691 |
public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException { |
3646 |
return nodeModel.getPasteTypes(node, t); |
3692 |
return nodeModel.getPasteTypes(node, t); |
3647 |
} |
3693 |
} |
3648 |
|
3694 |
|
3649 |
/* |
|
|
3650 |
public PasteType getDropType(Object node, Transferable t, int action, |
3695 |
public PasteType getDropType(Object node, Transferable t, int action, |
3651 |
int index) throws UnknownTypeException { |
3696 |
int index) throws UnknownTypeException { |
3652 |
return nodeModel.getDropType(node, t, action, index); |
3697 |
if (dndNodeModel != null) { |
|
|
3698 |
return dndNodeModel.getDropType(node, t, action, index); |
3699 |
} else { |
3700 |
return null; |
3701 |
} |
3653 |
} |
3702 |
} |
3654 |
*/ |
|
|
3655 |
|
3703 |
|
3656 |
public void setName(Object node, String name) throws UnknownTypeException { |
3704 |
public void setName(Object node, String name) throws UnknownTypeException { |
3657 |
nodeModel.setName(node, name); |
3705 |
nodeModel.setName(node, name); |