@Override
 public void undo() {
   super.undo();
   // remember modified children for redo
   m_modifiedSubtree.clear();
   // get node to edit
   final GroupTreeNode subtreeRoot = m_groupRoot.getNode(m_subtreeRootPath);
   for (int i = 0; i < subtreeRoot.getChildCount(); ++i) {
     m_modifiedSubtree.add(subtreeRoot.getChildAt(i));
   }
   // keep subtree handle, but restore everything else from backup
   subtreeRoot.removeAllChildren();
   for (int i = 0; i < m_subtreeBackup.getChildCount(); ++i) {
     subtreeRoot.add(((GroupTreeNode) m_subtreeBackup.getChildAt(i)).deepCopy());
   }
   if (m_revalidate) {
     m_groupSelector.revalidateGroups();
   }
 }
示例#2
0
  /** @param move For add: if true, remove from previous groups */
  private void insertNodes(
      JMenu menu, GroupTreeNode node, BibtexEntry[] selection, boolean add, boolean move) {
    final AbstractAction action = getAction(node, selection, add, move);

    if (node.getChildCount() == 0) {
      JMenuItem menuItem = new JMenuItem(action);
      setGroupFontAndIcon(menuItem, node.getGroup());
      menu.add(menuItem);
      if (action.isEnabled()) {
        menu.setEnabled(true);
      }
      return;
    }

    JMenu submenu;
    if (node.getGroup() instanceof AllEntriesGroup) {
      for (int i = 0; i < node.getChildCount(); ++i) {
        insertNodes(menu, (GroupTreeNode) node.getChildAt(i), selection, add, move);
      }
    } else {
      submenu = new JMenu('[' + node.getGroup().getName() + ']');
      setGroupFontAndIcon(submenu, node.getGroup());
      // setEnabled(true) is done above/below if at least one menu
      // entry (item or submenu) is enabled
      submenu.setEnabled(action.isEnabled());
      JMenuItem menuItem = new JMenuItem(action);
      setGroupFontAndIcon(menuItem, node.getGroup());
      submenu.add(menuItem);
      submenu.add(new Separator());
      for (int i = 0; i < node.getChildCount(); ++i) {
        insertNodes(submenu, (GroupTreeNode) node.getChildAt(i), selection, add, move);
      }
      menu.add(submenu);
      if (submenu.isEnabled()) {
        menu.setEnabled(true);
      }
    }
  }