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