/**
     * Create the object.
     *
     * @exception IOException if something fails
     */
    public void create() throws IOException {
      RADMenuItemComponent newMenuComp;

      if ((RADMenuItemComponent.recognizeType(item) & MASK_CONTAINER) == 0) {
        newMenuComp = new RADMenuItemComponent();
      } else {
        newMenuComp = new RADMenuComponent();
      }

      newMenuComp.initialize(RADMenuComponent.this.getFormManager());
      newMenuComp.setComponent(item);
      if (newMenuComp instanceof RADMenuComponent) {
        ((RADMenuComponent) newMenuComp).initSubComponents(new RADComponent[0]);
      }
      RADMenuComponent.this
          .getFormManager()
          .addNonVisualComponent(newMenuComp, RADMenuComponent.this);

      // for some components, we initialize their properties with some non-default values
      // e.g. a label on buttons, checkboxes
      FormEditor.defaultMenuInit(newMenuComp);
      addVisualMenu(newMenuComp);

      RADMenuComponent.this.getFormManager().selectComponent(newMenuComp, false);
    }
  /** Removes the menu represented by the node */
  private void removeVisualMenu(RADMenuItemComponent comp) {
    Object o = getBeanInstance();
    Object m = comp.getBeanInstance();
    Object dto = getDesignTimeMenus(getFormManager()).getDesignTime(o);
    Object dtm = getDesignTimeMenus(getFormManager()).getDesignTime(m);

    switch (getMenuItemType()) {
      case T_MENUBAR:
        ((MenuBar) o).remove((Menu) m);
        ((JMenuBar) dto).remove((JMenu) dtm);
        ((JMenuBar) dto).validate();
        break;
      case T_MENU:
        if (comp.getMenuItemType() == T_SEPARATOR) {
          ((Menu) o).remove(subComponents.indexOf(comp));
          ((JMenu) dto).remove(subComponents.indexOf(comp));
        } else {
          ((Menu) o).remove((MenuItem) m);
          ((JMenu) dto).remove((JMenuItem) dtm);
        }
        break;
      case T_POPUPMENU:
        if (comp.getMenuItemType() == T_SEPARATOR) {
          ((Menu) o).remove(subComponents.indexOf(comp));
          // PENDING - dont know how to get reference to JPopupMenu.Separator
          // so it is not supported by getDesignTimeMenu () !!
          // ((JPopupMenu)dto).remove((JPopupMenu.Separator)dtm);
        } else {
          ((Menu) o).remove((MenuItem) m);
          ((JPopupMenu) dto).remove((JMenuItem) dtm);
        }
        break;
      case T_JMENUBAR:
        ((JMenuBar) o).remove((JMenu) m);
        ((JMenuBar) o).validate();
        break;
      case T_JMENU:
        if (comp.getMenuItemType() == T_JSEPARATOR) {
          ((JMenu) o).remove(subComponents.indexOf(comp));
        } else {
          ((JMenu) o).remove((JMenuItem) m);
        }
        break;
      case T_JPOPUPMENU:
        if (comp.getMenuItemType() == T_JSEPARATOR) {
          // XXX(-tdt) ((JPopupMenu)o).remove((JPopupMenu.Separator)m);
          ((JPopupMenu) o).remove(subComponents.indexOf(comp));
        } else {
          ((JPopupMenu) o).remove((JMenuItem) m);
        }
        break;
    }
  }
 /**
  * Create the object.
  *
  * @exception IOException if something fails
  */
 public void create() throws IOException {
   RADMenuItemComponent newSeparatorComp = new RADMenuItemComponent();
   newSeparatorComp.initialize(getFormManager());
   if ((getMenuItemType() == T_MENU) || (getMenuItemType() == T_POPUPMENU)) {
     newSeparatorComp.setComponent(org.netbeans.modules.form.Separator.class);
   } else {
     newSeparatorComp.setComponent(JSeparator.class);
   }
   getFormManager().addNonVisualComponent(newSeparatorComp, RADMenuComponent.this);
   // XXX(-tdt) addVisualMenu (newSeparatorComp);
   getFormManager().selectComponent(newSeparatorComp, false);
   return;
 }
  /** Adds the menu represented by the node */
  private void addVisualMenu(RADMenuItemComponent comp) {
    Object o = getBeanInstance();
    Object m = comp.getBeanInstance();
    Object dto = getDesignTimeMenus(getFormManager()).getDesignTime(o);
    Object dtm = getDesignTimeMenus(getFormManager()).getDesignTime(m);

    switch (getMenuItemType()) {
      case T_MENUBAR:
        ((MenuBar) o).add((Menu) m);
        ((JMenuBar) dto).add((JMenu) dtm);
        ((JMenuBar) dto).validate();
        break;
      case T_MENU:
        if (comp.getMenuItemType() == T_SEPARATOR) {
          ((Menu) o).addSeparator();
          ((JMenu) dto).addSeparator();
        } else {
          ((Menu) o).add((MenuItem) m);
          ((JMenu) dto).add((JMenuItem) dtm);
        }
        break;
      case T_POPUPMENU:
        if (comp.getMenuItemType() == T_SEPARATOR) {
          ((Menu) o).addSeparator();
          ((JMenu) dto).addSeparator();
        } else {
          ((Menu) o).add((MenuItem) m);
          ((JPopupMenu) dto).add((JMenuItem) dtm);
        }
        break;
      case T_JMENUBAR:
        ((JMenuBar) o).add((JMenu) m);
        ((JMenuBar) o).validate();
        break;
      case T_JMENU:
        if (comp.getMenuItemType() == T_JSEPARATOR) {
          ((JMenu) o).addSeparator();
        } else {
          ((JMenu) o).add((JMenuItem) m);
        }
        break;
      case T_JPOPUPMENU:
        if (comp.getMenuItemType() == T_JSEPARATOR) {
          ((JPopupMenu) o).addSeparator();
        } else {
          ((JPopupMenu) o).add((JMenuItem) m);
        }
        break;
    }
  }
 public void add(RADComponent comp) {
   if (!(comp instanceof RADMenuItemComponent)) throw new IllegalArgumentException();
   subComponents.add(comp);
   ((RADMenuItemComponent) comp).initParent(this);
   addVisualMenu((RADMenuItemComponent) comp);
   ((RADChildren) getNodeReference().getChildren()).updateKeys();
 }