- Timestamp:
- 07/12/13 23:41:06 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/gui/TreeAtFrame.java
r99 r100 1 1 package com.framsticks.gui; 2 2 3 import org.apache.log4j.Logger; 3 import org.apache.logging.log4j.Logger; 4 import org.apache.logging.log4j.LogManager; 4 5 5 6 import com.framsticks.core.Tree; … … 8 9 import com.framsticks.core.TreeOperations; 9 10 import com.framsticks.gui.controls.ValueControl; 10 import com.framsticks.gui.tree.TreeNode;11 11 import com.framsticks.params.CompositeParam; 12 12 import com.framsticks.params.FramsClass; … … 14 14 import java.util.*; 15 15 16 import javax.swing.tree.TreePath;17 16 18 17 19 18 import com.framsticks.util.dispatching.FutureHandler; 20 import com.framsticks.util.lang.Casting;21 19 22 20 /** … … 25 23 public class TreeAtFrame { 26 24 27 private static final Logger log = Log ger.getLogger(TreeAtFrame.class);25 private static final Logger log = LogManager.getLogger(TreeAtFrame.class); 28 26 29 27 protected final Frame frame; 30 28 protected final Tree tree; 31 protected final Map<String, Panel> knownPanels = new HashMap<String, Panel>();29 protected final Map<String, TreePanel> knownPanels = new HashMap<>(); 32 30 protected Node rootNode; 33 34 protected Map<TreeNode, NodeAtFrame> nodesStorage = new WeakHashMap<>();35 31 36 32 public TreeAtFrame(Tree tree, Frame frame) { … … 50 46 } 51 47 52 public void registerPanel(Panel panel) {53 }54 55 public Panel findPanel(String accessId) {56 assert frame.isActive();57 return (knownPanels.containsKey(accessId) ? knownPanels.get(accessId) : null);58 }59 60 48 public final String getName() { 61 49 return tree.getName(); 62 50 } 63 51 64 public Panel preparePanel(CompositeParam param, FramsClass framsClass) {52 public TreePanel preparePanel(final CompositeParam param) { 65 53 assert frame.isActive(); 66 Panel panel = preparePanelImpl(param, framsClass);67 assert panel != null;68 String accessId = param.computeAccessId();69 panel.uniqueName = accessId + "@" + tree.getName();70 knownPanels.put(accessId, panel);71 frame.cardPanel.add(panel, panel.uniqueName);72 log.debug("prepared panel for " + panel);73 return panel;74 }75 54 76 protected Panel preparePanelImpl(CompositeParam param, FramsClass framsClass) { 77 assert frame.isActive(); 78 List<Panel> panels = new ArrayList<Panel>(); 55 TreePanel panel = knownPanels.get(param.getFramsTypeName()); 56 if (panel != null) { 57 return panel; 58 } 79 59 80 Panel.Parameters parameters = new Panel.Parameters(this, param, framsClass); 60 final FramsClass framsClass = tree.getInfoFromCache(param.getContainedTypeName()); 61 final List<TreePanel> panels = new ArrayList<TreePanel>(); 62 63 final TreePanel.Parameters parameters = new TreePanel.Parameters(this, param, framsClass); 81 64 for (PanelProvider pp : frame.browser.panelProviders) { 82 Panel p = pp.providePanel(parameters);65 TreePanel p = pp.providePanel(parameters); 83 66 if (p != null) { 84 67 panels.add(p); … … 87 70 88 71 if (panels.isEmpty()) { 89 return new EmptyPanel(parameters); 72 panel = new EmptyTreePanel(parameters); 73 } else if (panels.size() == 1) { 74 panel = panels.get(0); 75 } else { 76 panel = new MultiPanel(parameters, panels); 90 77 } 91 if (panels.size() == 1) {92 return panels.get(0);93 }94 return new MultiPanel(parameters, panels);95 78 79 knownPanels.put(param.getFramsTypeName(), panel); 80 81 log.debug("prepared panel for {}", panel); 82 return panel; 96 83 } 97 84 98 public boolean hasLocalChanges(TreePath treePath) { 99 NodeAtFrame nodeAtFrame = nodesStorage.get(treePath.getLastPathComponent()); 85 86 public boolean hasLocalChanges(Object object) { 87 NodeAtFrame nodeAtFrame = tree.getSideNote(object, this, NodeAtFrame.class); 100 88 if (nodeAtFrame == null) { 101 89 return false; … … 104 92 } 105 93 106 public NodeAtFrame assureLocalInfo( TreePath treePath) {94 public NodeAtFrame assureLocalInfo(Object object) { 107 95 assert frame.isActive(); 108 NodeAtFrame nodeAtFrame = nodesStorage.get(treePath.getLastPathComponent());96 NodeAtFrame nodeAtFrame = tree.getSideNote(object, this, NodeAtFrame.class); 109 97 110 98 if (nodeAtFrame == null) { 111 99 nodeAtFrame = new NodeAtFrame(); 112 nodesStorage.put(Casting.throwCast(TreeNode.class, treePath.getLastPathComponent()), nodeAtFrame); 100 // log.debug(); 101 tree.putSideNote(object, this, nodeAtFrame); 113 102 } 114 103 return nodeAtFrame; 115 104 } 116 105 117 public NodeAtFrame getLocalInfo( TreePath treePath) {118 return nodesStorage.get(treePath.getLastPathComponent());106 public NodeAtFrame getLocalInfo(Object object) { 107 return tree.getSideNote(object, this, NodeAtFrame.class); 119 108 } 120 109 121 public boolean changeValue( TreePath treePath, ValueControl component, Object newValue) {122 log.debug("changing value of " + component + " to '" + newValue + "'");110 public boolean changeValue(Object object, ValueControl component, Object newValue) { 111 log.debug("changing value of {} to '{}'", component, newValue); 123 112 124 assureLocalInfo( treePath).localChanges.put(component, newValue);113 assureLocalInfo(object).localChanges.put(component, newValue); 125 114 126 115 return true; 127 116 } 128 117 129 public void pushLocalChanges( TreePath treePath) {118 public void pushLocalChanges(Path path) { 130 119 assert frame.isActive(); 120 path.assureResolved(); 131 121 132 NodeAtFrame nodeAtFrame = nodesStorage.get(treePath.getLastPathComponent());122 NodeAtFrame nodeAtFrame = getLocalInfo(path.getTopObject()); 133 123 if (nodeAtFrame == null) { 134 124 return; 135 125 } 136 Path path = frame.treeModel.convertToPath(treePath);137 138 126 for (Map.Entry<ValueControl, Object> e : nodeAtFrame.localChanges.entrySet()) { 139 127 TreeOperations.set(path, e.getKey().getParam(), e.getValue(), new FutureHandler<Integer>(frame) { … … 145 133 } 146 134 147 public void fillPanelWithValues(TreePath treePath) {148 NodeAtFrame nodeAtFrame = assureLocalInfo(treePath);149 if (nodeAtFrame == null) {150 return;151 }152 153 if (nodeAtFrame.panel == null) {154 return;155 }156 Node node = TreeNode.tryGetNode(treePath);157 if (node == null) {158 return;159 }160 nodeAtFrame.panel.setCurrentTreePath(treePath);161 nodeAtFrame.panel.pullValuesFromLocalToUser(TreeOperations.bindAccess(node));162 163 frame.showPanel(nodeAtFrame.panel);164 165 }166 167 public void useOrCreatePanel(TreePath treePath) {168 // node.assureResolved();169 Node node = TreeNode.tryGetNode(treePath);170 171 NodeAtFrame nodeAtFrame = assureLocalInfo(treePath);172 173 if (nodeAtFrame.panel == null) {174 CompositeParam param = node.getParam();175 nodeAtFrame.panel = findPanel(param.computeAccessId());176 if (nodeAtFrame.panel == null) {177 FramsClass framsClass = node.getTree().getInfoFromCache(param.getContainedTypeName());178 nodeAtFrame.panel = preparePanel(param, framsClass);179 }180 }181 fillPanelWithValues(treePath);182 }183 135 }
Note: See TracChangeset
for help on using the changeset viewer.