Changeset 98 for java/main/src/main/java/com/framsticks/gui/Frame.java
- Timestamp:
- 07/08/13 23:04:56 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/gui/Frame.java
r97 r98 11 11 import java.awt.event.MouseAdapter; 12 12 import java.awt.event.MouseEvent; 13 import java.util. HashMap;13 import java.util.IdentityHashMap; 14 14 import java.util.Map; 15 15 … … 28 28 import javax.swing.ToolTipManager; 29 29 import javax.swing.UIManager; 30 import javax.swing.event.Tree ModelEvent;31 import javax.swing.event.Tree ModelListener;30 import javax.swing.event.TreeExpansionEvent; 31 import javax.swing.event.TreeExpansionListener; 32 32 import javax.swing.event.TreeSelectionEvent; 33 33 import javax.swing.event.TreeSelectionListener; 34 import javax.swing.tree.DefaultMutableTreeNode;35 import javax.swing.tree.DefaultTreeModel;36 34 import javax.swing.tree.DefaultTreeSelectionModel; 37 35 import javax.swing.tree.TreePath; … … 40 38 import org.apache.log4j.Logger; 41 39 40 import com.framsticks.core.Mode; 42 41 import com.framsticks.core.Path; 43 42 import com.framsticks.core.Tree; 43 import com.framsticks.core.TreeOperations; 44 44 import com.framsticks.gui.view.TreeCellRenderer; 45 import com.framsticks. util.FramsticksException;45 import com.framsticks.params.AccessInterface; 46 46 import com.framsticks.util.dispatching.Dispatching; 47 import com.framsticks.util.dispatching. ExceptionResultHandler;47 import com.framsticks.util.dispatching.FutureHandler; 48 48 import com.framsticks.util.dispatching.Joinable; 49 49 import com.framsticks.util.dispatching.JoinableCollection; 50 50 import com.framsticks.util.dispatching.JoinableParent; 51 51 import com.framsticks.util.dispatching.JoinableState; 52 import com.framsticks.util.dispatching.RunAt;53 import com.framsticks.util.lang.ScopeEnd;54 52 import com.framsticks.util.swing.KeyboardModifier; 55 53 import com.framsticks.util.swing.MenuConstructor; … … 72 70 protected JScrollPane treeScrollPane; 73 71 protected JTree jtree; 74 protected DefaultTreeModel treeModel; 75 protected javax.swing.tree.MutableTreeNode rootNode; 72 protected TreeModel treeModel; 73 74 protected MetaNode rootNode; 75 76 76 protected JPanel treePanel; 77 77 protected JPopupMenu treePopupMenu; 78 78 protected JMenuItem treePopupMenuHeader; 79 79 80 TreeNode currentlyPoppedTreeNode;81 80 protected JPanel mainPanel; 82 81 protected JPanel leftPanel; … … 91 90 protected JMenu helpMenu; 92 91 93 protected final Map<Tree, TreeAtFrame> treeAtFrames = new HashMap<Tree, TreeAtFrame>();94 protected JoinableCollection<Tree> trees = new JoinableCollection< Tree>();92 protected final Map<Tree, TreeAtFrame> treeAtFrames = new IdentityHashMap<>(); 93 protected JoinableCollection<Tree> trees = new JoinableCollection<>(); 95 94 96 95 public Frame(Browser browser) { … … 106 105 log.debug("creating " + this); 107 106 108 109 107 Container contentPane = getSwing().getContentPane(); 110 108 treePopupMenu = new JPopupMenu("title"); … … 114 112 treePanel.setLayout(new BorderLayout()); 115 113 116 treeModel = new DefaultTreeModel(null); 117 treeModel.addTreeModelListener(new TreeModelListener() { 118 119 @Override 120 public void treeNodesChanged(TreeModelEvent arg0) { 121 log.trace("treeNodesChanged: " + arg0); 122 } 123 124 @Override 125 public void treeNodesInserted(TreeModelEvent arg0) { 126 // log.trace("treeNodesInserted: " + arg0); 127 } 128 129 @Override 130 public void treeNodesRemoved(TreeModelEvent arg0) { 131 log.trace("treeNodesRemoved: " + arg0); 132 } 133 134 @Override 135 public void treeStructureChanged(TreeModelEvent arg0) { 136 log.trace("treeStructureChanged: " + arg0); 137 } 138 }); 114 rootNode = new MetaNode(); 115 rootNode.setName("root"); 116 treeModel = new TreeModel(this); 139 117 140 118 jtree = new JTree(treeModel); … … 152 130 }); 153 131 132 jtree.addTreeExpansionListener(new TreeExpansionListener() { 133 134 @Override 135 public void treeCollapsed(TreeExpansionEvent e) { 136 137 } 138 139 @Override 140 public void treeExpanded(TreeExpansionEvent e) { 141 loadChildren(treeModel.convertToPath(e.getPath()), false); 142 } 143 }); 144 154 145 jtree.setExpandsSelectedPaths(true); 155 146 jtree.setEditable(false); 156 jtree.setDoubleBuffered(true);157 147 jtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 158 148 jtree.setShowsRootHandles(true); … … 173 163 }); 174 164 175 new KeyboardModifier(jtree, JComponent.WHEN_FOCUSED).join(KeyStroke.getKeyStroke('h'), KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)).join(KeyStroke.getKeyStroke('j'), KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)).join(KeyStroke.getKeyStroke('k'), KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)).join(KeyStroke.getKeyStroke('l'), KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0)); 165 new KeyboardModifier(jtree, JComponent.WHEN_FOCUSED) 166 .join(KeyStroke.getKeyStroke('h'), KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)) 167 .join(KeyStroke.getKeyStroke('j'), KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)) 168 .join(KeyStroke.getKeyStroke('k'), KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)) 169 .join(KeyStroke.getKeyStroke('l'), KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0)); 176 170 177 171 jtree.setCellRenderer(new TreeCellRenderer()); … … 182 176 treePanel.add(treeScrollPane); 183 177 184 rootNode = new DefaultMutableTreeNode();185 rootNode.setUserObject("root");186 treeModel.setRoot(rootNode);187 178 188 179 normalWorkPanel = new JPanel(); … … 248 239 }); 249 240 241 new MenuConstructor(fileMenu).add(KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.CTRL_MASK), new AbstractAction("Reload current") { 242 @Override 243 public void actionPerformed(ActionEvent actionEvent) { 244 245 loadPath(treeModel.convertToPath(jtree.getSelectionPath()), true); 246 } 247 }); 248 250 249 } 251 250 … … 254 253 } 255 254 256 public void addRootPath( Path path) {255 public void addRootPath(final Path path) { 257 256 assert isActive(); 257 258 258 Tree tree = path.getTree(); 259 260 log.info("trying mount: " + path); 261 if (!tree.getAssignedRoot().isResolved()) { 262 tree.get(path, Mode.FETCH, new FutureHandler<Path>(this) { 263 264 @Override 265 protected void result(Path result) { 266 addRootPath(result); 267 } 268 }); 269 return; 270 } 271 259 272 assert browser.getTrees().contains(tree); 260 273 261 274 TreeAtFrame e = new TreeAtFrame(tree, this); 262 tree.addListener(e);263 275 treeAtFrames.put(tree, e); 264 TreeNode node = new TreeNode(e, path); 265 e.rootTreeNode = node; 266 treeModel.insertNodeInto(node, rootNode, rootNode.getChildCount()); 267 jtree.expandPath(new TreePath(rootNode)); 276 277 rootNode.getChildren().add(new TreeNode(tree.getAssignedRoot())); 278 e.rootNode = tree.getAssignedRoot(); 279 treeModel.nodeStructureChanged(new TreePath(rootNode)); 280 // jtree.expandPath(new TreePath(rootNode)); 268 281 } 269 282 … … 275 288 } 276 289 290 277 291 private void showPopup(MouseEvent e) { 278 292 assert isActive(); … … 280 294 return; 281 295 } 282 currentlyPoppedTreeNode = findTreeNodeByTreePath(jtree.getPathForLocation(e.getX(), e.getY())); 283 if (currentlyPoppedTreeNode == null) { 284 return; 285 } 286 287 Path path = currentlyPoppedTreeNode.getTreePath(); 296 TreePath treePath = jtree.getPathForLocation(e.getX(), e.getY()); 297 298 Path path = treeModel.convertToPath(treePath); 288 299 treePopupMenu.removeAll(); 289 300 … … 291 302 provider.provide(treePopupMenu, path); 292 303 } 293 // treePopupMenuHeader.setText(path.getTree().getName() + path.getTextual());294 304 treePopupMenu.show(e.getComponent(), e.getX(), e.getY()); 295 //currentlyPoppedPanel.getNode().getFramsClass().getName()296 }297 298 public TreeNode getCurrentlyPoppedTreeNode() {299 assert isActive();300 return currentlyPoppedTreeNode;301 305 } 302 306 303 307 public void clear() { 304 treeModel.setRoot(null);305 308 cardPanel.removeAll(); 306 309 cardPanel.updateUI(); … … 308 311 } 309 312 310 public ScopeEnd startChange(final DefaultMutableTreeNode node) { 311 assert isActive(); 312 final TreePath selection = jtree.getSelectionPath(); 313 return new ScopeEnd() { 314 @Override 315 public void close() { 316 assert isActive(); 317 treeModel.nodeChanged(node); 318 jtree.setSelectionPath(selection); 319 } 320 }; 321 } 322 323 public void selectTreeNode(final TreeNode treeNode) { 324 assert isActive(); 325 /* final Panel panel = treeNode.getOrCreatePanel(); 326 if (panel == null) { 327 return; 328 } 329 panel.setCurrentTreeNode(treeNode); 330 treeNode.updateData(); 331 showPanel(panel);*/ 332 } 333 334 public TreeNode findTreeNodeByTreePath(TreePath treePath) { 313 public void loadChildren(Path path, boolean reload) { 314 if (path == null) { 315 return; 316 } 317 AccessInterface access = TreeOperations.bindAccess(path); 318 319 int count = access.getCompositeParamCount(); 320 for (int i = 0; i < count; ++i) { 321 Path childPath = path.appendParam(access.getCompositeParam(i)).tryFindResolution(); 322 loadPath(childPath, reload); 323 } 324 325 } 326 327 public void loadPath(Path path, boolean reload) { 328 if (path == null) { 329 return; 330 } 331 if (path.isResolved() && !reload) { 332 return; 333 } 334 path.getTree().get(path, Mode.FETCH, new FutureHandler<Path>(this) { 335 @Override 336 protected void result(Path result) { 337 final TreePath treePath = treeModel.convertToTreePath(result); 338 339 treeModel.nodeStructureChanged(treePath); 340 if (treePath.equals(jtree.getSelectionPath())) { 341 treeAtFrames.get(result.getTree()).useOrCreatePanel(treePath); 342 } 343 } 344 }); 345 } 346 347 public void chooseTreeNode(final TreePath treePath) { 335 348 assert isActive(); 336 349 if (treePath == null) { 337 return null; 338 } 339 if (!(treePath.getLastPathComponent() instanceof TreeNode)) { 340 return null; 341 } 342 return (TreeNode) treePath.getLastPathComponent(); 343 } 344 345 public void chooseTreeNode(TreePath treePath) { 346 assert isActive(); 347 final TreeNode treeNode = findTreeNodeByTreePath(treePath); 348 if (treeNode == null) { 349 return; 350 } 351 treeNode.select(); 352 } 353 354 protected final ExceptionResultHandler dialogHandler = new ExceptionResultHandler() { 355 356 @Override 357 public void handle(FramsticksException exception) { 358 //TODO TEH 359 throw exception; 360 361 } 362 }; 363 364 public void goTo(Path path) { 365 assert isActive(); 366 final TreePath treePath = treeAtFrames.get(path.getTree()).getTreePath(path, false); 367 log.info("go to path: " + path + "(" + treePath + ")"); 368 369 this.dispatch(new RunAt<Frame>(dialogHandler) { 370 @Override 371 protected void runAt() { 372 log.info("executed"); 373 jtree.setSelectionPath(treePath); 374 jtree.makeVisible(treePath); 375 assert jtree.isVisible(treePath); 376 } 377 }); 378 379 } 380 381 public void addNode(TreeNode child, DefaultMutableTreeNode parent) { 382 assert isActive(); 383 384 try (ScopeEnd e = startChange(parent)) { 385 treeModel.insertNodeInto(child, parent, parent.getChildCount()); 386 } 387 } 350 return; 351 } 352 if (treeModel.isChanging()) { 353 return; 354 } 355 356 Path path = treeModel.convertToPath(treePath); 357 if (path == null) { 358 return; 359 } 360 path = path.assureResolved(); 361 final Tree tree = path.getTree(); 362 363 treeAtFrames.get(tree).useOrCreatePanel(treePath); 364 loadChildren(path, false); 365 366 } 367 368 369 // public void goTo(Path path) { 370 // assert isActive(); 371 // final TreePath treePath = treeModel.convertToTreePath(path); 372 // log.info("go to path: " + path + "(" + treePath + ")"); 373 374 // this.dispatch(new RunAt<Frame>(this) { 375 // @Override 376 // protected void runAt() { 377 // log.info("executed"); 378 // jtree.setSelectionPath(treePath); 379 // jtree.makeVisible(treePath); 380 // assert jtree.isVisible(treePath); 381 // } 382 // }); 383 384 // } 388 385 389 386 @Override … … 422 419 } 423 420 421 /** 422 * @return the treeModel 423 */ 424 public TreeModel getTreeModel() { 425 return treeModel; 426 } 427 424 428 }
Note: See TracChangeset
for help on using the changeset viewer.