/** Create a new config editor that isn't attached to any ViperData. */
  public ConfigEditor() {
    super(new JTree());
    popup = new ConfigEditPopup();
    getTree()
        .addMouseListener(
            new MouseAdapter() {
              public void mousePressed(MouseEvent e) {
                maybeShowPopup(e);
                TreePath p = getTree().getClosestPathForLocation(e.getX(), e.getY());
                Object end = p.getLastPathComponent();
                if (end instanceof Config) {
                  EventQueue.invokeLater(new CheckIfExpanded(p));
                }
              }

              public void mouseReleased(MouseEvent e) {
                maybeShowPopup(e);
              }

              private void maybeShowPopup(MouseEvent e) {
                if (e.isPopupTrigger()) {
                  popup.show(e.getComponent(), e.getX(), e.getY());
                }
              }
            });
    model = new ViperTreeModel(this);
    model.addTreeToSelect(getTree());
    // getTree().setRootVisible(false);
    expandedNodes = new HashSet();
    getTree().setModel(model);
    getTree().getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

    // Listen for when the selection changes.
    getTree().addTreeSelectionListener(new MySelectionChangeListener());
  }
 private void createAttrConfigForNode(Node selected) {
   Config parent = null;
   if (selected instanceof Config) {
     parent = (Config) selected;
   } else if (selected instanceof AttrConfig) {
     parent = (Config) ((AttrConfig) selected).getParent();
   }
   if (parent != null) {
     String newName = unusedName("Attr", new AttrNameIter(parent));
     String type = ViperData.ViPER_DATA_URI + "svalue";
     AttrValueWrapper params = model.getMediator().getDataFactory().getAttribute(type);
     Node n = parent.createAttrConfig(newName, type, false, null, params);
     select(n);
   }
 }
 private void select(Node n) {
   model.enqueueNodeSelection(n);
 }
 /**
  * Sets the view mediator.
  *
  * @param mediator The mediator
  */
 public void setMediator(ViperViewMediator mediator) {
   model.setMediator(mediator);
 }
 /**
  * Get the viper view mediator.
  *
  * @return The mediator that the view is listening to.
  */
 public ViperViewMediator getMediator() {
   return model.getMediator();
 }