View Javadoc
1   package org.opentrafficsim.editor.extensions;
2   
3   import java.rmi.RemoteException;
4   import java.time.LocalDateTime;
5   import java.util.function.Consumer;
6   
7   import javax.swing.JComponent;
8   import javax.swing.JLabel;
9   
10  import org.djutils.event.Event;
11  import org.djutils.event.EventListener;
12  import org.opentrafficsim.editor.OtsEditor;
13  import org.opentrafficsim.editor.XsdTreeNode;
14  import org.opentrafficsim.editor.XsdTreeNodeRoot;
15  
16  /**
17   * Editor for route.
18   * <p>
19   * Copyright (c) 2023-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
20   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
21   * </p>
22   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
23   */
24  public class RouteEditor implements EventListener, Consumer<XsdTreeNode>
25  {
26      /** Editor. */
27      private OtsEditor editor;
28  
29      /**
30       * Constructor.
31       * @param editor editor.
32       * @throws RemoteException if listener cannot be added.
33       */
34      public RouteEditor(final OtsEditor editor) throws RemoteException
35      {
36          editor.addTab("Route", null, buildRoutePane(), null);
37          editor.addListener(this, OtsEditor.NEW_FILE);
38          this.editor = editor;
39      }
40  
41      /**
42       * Temporary stub to create route pane.
43       * @return component.
44       */
45      private static JComponent buildRoutePane()
46      {
47          JLabel route = new JLabel("route");
48          route.setOpaque(true);
49          route.setHorizontalAlignment(JLabel.CENTER);
50          return route;
51      }
52  
53      @Override
54      public void notify(final Event event)
55      {
56          // TODO: this is a dummy implementation
57          if (event.getType().equals(OtsEditor.NEW_FILE))
58          {
59              XsdTreeNodeRoot root = (XsdTreeNodeRoot) event.getContent();
60              root.addListener(this, XsdTreeNodeRoot.NODE_CREATED);
61          }
62          else if (event.getType().equals(XsdTreeNodeRoot.NODE_CREATED))
63          {
64              XsdTreeNode node = (XsdTreeNode) ((Object[]) event.getContent())[0];
65              if (node.isType("Ots.Demand.Route"))
66              {
67                  node.addConsumer("Show in panel...", this);
68                  node.addConsumer("Compute shortest...", new Consumer<XsdTreeNode>()
69                  {
70                      @Override
71                      public void accept(final XsdTreeNode t)
72                      {
73                          System.out.println("We are not going to do that.");
74                      }
75                  });
76              }
77          }
78      }
79  
80      @Override
81      public void accept(final XsdTreeNode t)
82      {
83          JLabel label = ((JLabel) this.editor.getTab("Route").get());
84          label.setText(LocalDateTime.now().toString());
85          this.editor.focusTab("Route");
86      }
87  }