コード例 #1
0
 @Override
 public void valueChanged(TreeSelectionEvent e) {
   if (LOG.isLoggable(Level.FINER)) {
     LOG.finer("TreeSelectionEvent: " + e.toString());
   }
   // Stop editing the table, if editing is currently in progress
   if (groupTable.getCellEditor() != null) {
     groupTable.getCellEditor().stopCellEditing();
   }
   InitTableModel tableModel = groupTable.getActorTableModel();
   if (groupTree.getLastSelectedPathComponent() != null) {
     if (LOG.isLoggable(Level.FINER)) {
       LOG.finer("Current Selection: " + groupTree.getLastSelectedPathComponent().toString());
     }
     GroupTreeNode node = (GroupTreeNode) groupTree.getLastSelectedPathComponent();
     if (node.isGroup()) { // If current selection is a group, display the actors
       tableModel.setActorList(node.getActorList());
       groupTable.setVisible(true);
     } else { // Otherwise don't show any actors
       groupTable.setVisible(false);
       tableModel.setActorList(null);
     }
   } else {
     if (LOG.isLoggable(Level.FINER)) {
       LOG.finer("Current Selection: null");
     }
     groupTable.setVisible(false);
     tableModel.setActorList(null);
   }
 }
コード例 #2
0
 /**
  * @param subtree The root node of the subtree that was modified (this node may not be modified,
  *     it is just used as a convenience handle).
  */
 public UndoableModifySubtree(
     GroupSelector groupSelector, GroupTreeNode groupRoot, GroupTreeNode subtree, String name) {
   m_subtreeBackup = subtree.deepCopy();
   m_groupRoot = groupRoot;
   m_subtreeRootPath = subtree.getIndexedPath();
   m_groupSelector = groupSelector;
   m_name = name;
 }
コード例 #3
0
 /**
  * @param node The node which still contains the old group.
  * @param newGroup The new group to replace the one currently stored in <b>node </b>.
  */
 public UndoableModifyGroup(
     GroupSelector gs, GroupTreeNode groupsRoot, GroupTreeNode node, AbstractGroup newGroup) {
   m_groupSelector = gs;
   m_oldGroupBackup = node.getGroup().deepCopy();
   m_newGroupBackup = newGroup.deepCopy();
   m_pathToNode = node.getIndexedPath();
   m_groupsRootHandle = groupsRoot;
 }
コード例 #4
0
 @Override
 public void redo() {
   super.redo();
   final GroupTreeNode subtreeRoot = m_groupRoot.getNode(m_subtreeRootPath);
   subtreeRoot.removeAllChildren();
   for (int i = 0; i < m_modifiedSubtree.size(); ++i) {
     subtreeRoot.add((GroupTreeNode) m_modifiedSubtree.elementAt(i));
   }
   if (m_revalidate) {
     m_groupSelector.revalidateGroups();
   }
 }
コード例 #5
0
 @Override
 public void redo() {
   super.redo();
   GroupTreeNode treeNode = mGroupsRootHandle.getChildAt(mPathToNode);
   if (treeNode != null) {
     ExplicitGroup group = (ExplicitGroup) treeNode.getGroup();
     group.clearAssignments();
     for (final BibEntry aM_newAssignmentBackup : m_newAssignmentBackup) {
       group.addEntry(aM_newAssignmentBackup);
     }
   }
 }
コード例 #6
0
 @Override
 public void redo() {
   super.redo();
   ExplicitGroup group = (ExplicitGroup) m_groupsRootHandle.getChildAt(m_pathToNode).getGroup();
   group.clearAssignments();
   for (BibtexEntry aM_newAssignmentBackup : m_newAssignmentBackup) {
     group.addEntry(aM_newAssignmentBackup);
   }
 }
コード例 #7
0
ファイル: RightClickMenu.java プロジェクト: tnoz/jabref
  /** @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);
      }
    }
  }
コード例 #8
0
  /**
   * Import a GCA4 character file
   *
   * @param file - the file to load from. Open File dialog used if file is null.
   * @return whether the load was completed successfully.
   */
  public boolean importGCA4File(File file) {
    if (file == null) {
      if (LOG.isLoggable(Level.WARNING)) {
        LOG.warning("Given null file!");
      }
      return false;
    }
    if (LOG.isLoggable(Level.FINE)) {
      LOG.fine("Opening file: " + file.getName());
    }
    Actor importedActor;
    try {
      importedActor = GCAImporter.importActor(file);
    } catch (FileNotFoundException e) {
      if (LOG.isLoggable(Level.SEVERE)) {
        LOG.log(Level.SEVERE, e.getMessage(), e);
      }
      return false;
    }

    // Check if there is no valid selected group currently
    if (groupTable.getActorTableModel().getRowCount() == 0) {
      if (LOG.isLoggable(Level.FINE)) {
        LOG.fine("Creating new group to hold imported actor!");
      }
      GroupTreeNode newGroup = groupTree.addNode("GCA4 Import", true);
      TreePath groupPath = new TreePath(newGroup.getPath());
      groupTree.getSelectionModel().setSelectionPath(groupPath);
    }
    if (LOG.isLoggable(Level.FINE)) {
      LOG.fine("Adding imported actor to currently selected group");
    }
    groupTable
        .getActorTableModel()
        .addActor(importedActor, groupTable.getActorTableModel().getRowCount() - 1);
    return true;
  }
コード例 #9
0
ファイル: RightClickMenu.java プロジェクト: tnoz/jabref
 /** @param move For add: if true, remove from all previous groups */
 private AbstractAction getAction(
     GroupTreeNode node, BibtexEntry[] selection, boolean add, boolean move) {
   AbstractAction action =
       add ? new AddToGroupAction(node, move, panel) : new RemoveFromGroupAction(node, panel);
   AbstractGroup group = node.getGroup();
   if (!move) {
     action.setEnabled(
         add
             ? group.supportsAdd() && !group.containsAll(selection)
             : group.supportsRemove() && group.containsAny(selection));
   } else {
     action.setEnabled(group.supportsAdd());
   }
   return action;
 }
コード例 #10
0
 @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();
   }
 }
コード例 #11
0
 public void redo() {
   super.redo();
   m_groupsRootHandle.getDescendant(m_pathToNode).setGroup(m_newGroupBackup.deepCopy());
   m_groupSelector.revalidateGroups();
 }
コード例 #12
0
ファイル: AddToGroupAction.java プロジェクト: sekia556/jabref
  @Override
  public void actionPerformed(ActionEvent evt) {
    final BibtexEntry[] entries = m_panel.getSelectedEntries();
    final Vector<GroupTreeNode> removeGroupsNodes =
        new Vector<GroupTreeNode>(); // used only when moving

    if (m_move) {
      // collect warnings for removal
      Enumeration<GroupTreeNode> e = ((GroupTreeNode) m_node.getRoot()).preorderEnumeration();
      GroupTreeNode node;
      while (e.hasMoreElements()) {
        node = e.nextElement();
        if (!node.getGroup().supportsRemove()) {
          continue;
        }
        for (BibtexEntry entry : entries) {
          if (node.getGroup().contains(entry)) {
            removeGroupsNodes.add(node);
          }
        }
      }
      // warning for all groups from which the entries are removed, and
      // for the one to which they are added! hence the magical +1
      AbstractGroup[] groups = new AbstractGroup[removeGroupsNodes.size() + 1];
      for (int i = 0; i < removeGroupsNodes.size(); ++i) {
        groups[i] = removeGroupsNodes.elementAt(i).getGroup();
      }
      groups[groups.length - 1] = m_node.getGroup();
      if (!Util.warnAssignmentSideEffects(
          groups, entries, m_panel.getDatabase(), m_panel.frame())) {
        return; // user aborted operation
      }
    } else {
      // warn if assignment has undesired side effects (modifies a field != keywords)
      if (!Util.warnAssignmentSideEffects(
          new AbstractGroup[] {m_node.getGroup()},
          entries,
          m_panel.getDatabase(),
          m_panel.frame())) {
        return; // user aborted operation
      }
    }

    // if an editor is showing, its fields must be updated
    // after the assignment, and before that, the current
    // edit has to be stored:
    m_panel.storeCurrentEdit();

    NamedCompound undoAll = new NamedCompound(Globals.lang("change assignment of entries"));

    if (m_move) {
      // first remove
      for (int i = 0; i < removeGroupsNodes.size(); ++i) {
        GroupTreeNode node = removeGroupsNodes.elementAt(i);
        if (node.getGroup().containsAny(entries)) {
          undoAll.addEdit(node.removeFromGroup(entries));
        }
      }
      // then add
      AbstractUndoableEdit undoAdd = m_node.addToGroup(entries);
      if (undoAdd != null) {
        undoAll.addEdit(undoAdd);
      }
    } else {
      AbstractUndoableEdit undoAdd = m_node.addToGroup(entries);
      if (undoAdd == null) {
        return; // no changed made
      }
      undoAll.addEdit(undoAdd);
    }

    undoAll.end();

    m_panel.undoManager.addEdit(undoAll);
    m_panel.markBaseChanged();
    m_panel.updateEntryEditorIfShowing();
    m_panel.getGroupSelector().valueChanged(null);
  }
コード例 #13
0
ファイル: AddToGroupAction.java プロジェクト: sekia556/jabref
 /** @param move If true, remove node from all other groups. */
 public AddToGroupAction(GroupTreeNode node, boolean move, BasePanel panel) {
   super(node.getGroup().getName());
   m_node = node;
   m_move = move;
   m_panel = panel;
 }
コード例 #14
0
 /**
  * Sets the node of the group that was edited. If this node was not specified at construction
  * time, this method has to be called before this instance may be used.
  *
  * @param node The node whose assignments were edited.
  */
 public void setEditedNode(GroupTreeNode node) {
   m_groupsRootHandle = (GroupTreeNode) node.getRoot();
   m_pathToNode = node.getIndexedPath();
 }