@Override
  public void mouseClicked(MouseEvent event, StateRenderer2D source) {

    if (event.getButton() == MouseEvent.BUTTON3) {
      JPopupMenu popup = new JPopupMenu();
      popup
          .add("Generate plans locally")
          .addActionListener(
              new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                  solve();
                }
              });

      popup
          .add("Clear polygon")
          .addActionListener(
              new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                  pe = null;
                  vertexCount = 0;
                }
              });

      popup
          .add("Settings")
          .addActionListener(
              new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                  PropertiesEditor.editProperties(AreaCoveragePlanner.this, getConsole(), true);
                }
              });

      popup.show(source, event.getX(), event.getY());
    } else if (pe == null) {
      LocationType l = source.getRealWorldLocation(event.getPoint());
      pe =
          new PathElement(
              MapGroup.getMapGroupInstance(getConsole().getMission()), new MapType(), l);
      pe.setMyColor(Color.green.brighter());
      pe.setShape(true);
      pe.setFinished(true);
      pe.setStroke(new BasicStroke(2.0f));
      pe.addPoint(0, 0, 0, false);
      vertexCount = 1;
    } else {
      LocationType l = source.getRealWorldLocation(event.getPoint());
      double[] offsets = l.getOffsetFrom(pe.getCenterLocation());
      pe.addPoint(offsets[1], offsets[0], 0, false);
      vertexCount++;
    }
  }