Esempio n. 1
0
  /**
   * When called it will traverse all visible leaves in the browseTree and collapse them if they
   * have been open for too long and are not selected.
   */
  private void collapseOldNodes() {
    Stack<ListableEntry> toConsider =
        new Stack<
            ListableEntry>(); // this is a stack of expanded nodes that need their children (and
                              // themselves) to be considered.
    toConsider.push(fs.getBrowseRoot()); // we know these are always expanded, and uncollapsable.
    toConsider.push(fs.getSearchRoot()); // "               "                    "

    // a) mark all uncollapsable nodes
    TreePath[] selecteds = browseTree.getSelectionPaths();
    if (selecteds != null) {
      for (TreePath selected : selecteds) {
        for (Object toMark :
            selected.getPath()) { // a selected nodes and their ancestors are not collapsable.
          expandedTimes.put(toMark, System.currentTimeMillis());
        }
      }
    }

    // b) collapse old expanded nodes.
    while (!toConsider.empty()) {
      for (FileSystemEntry child : toConsider.pop().getAllChildren()) {
        if (browseTree.isExpanded(child.getPath())) {
          toConsider.push(child);
          if (System.currentTimeMillis() - expandedTimes.get(child)
              > FS2Constants.CLIENT_BROWSETREE_COLLAPSE_INTERVAL) {
            browseTree.collapsePath(child.getPath());
            expandedTimes.remove(child);
          }
        }
      }
    }
  }
Esempio n. 2
0
  @Override
  public void mouseClicked(MouseEvent e) {
    if (e.getSource() == filesTable) {
      if (e.getClickCount() == 2
          && e.getModifiersEx()
              == 0) { // the modifiers test is to prevent absurd clicks like "b1, b3" registering as
                      // double-clicks.
        if (filesTable.getSelectedRow() >= 0) {
          FileSystemEntry clicked =
              fs.getEntryForRow(filesTable.convertRowIndexToModel(filesTable.getSelectedRow()));
          if (clicked.isDirectory()) {
            // Go into the directory:
            TreePath pathToClicked = clicked.getPath();
            browseTree.setSelectionPath(pathToClicked);
            browseTree.scrollPathToVisible(pathToClicked);
            browseTree.setSelectionPath(
                pathToClicked); // the first one may have expanded the node and changed the
                                // selection, so ensure the node we want is actually selected.
          } else {
            downloadToDirectory(Arrays.asList(new FileSystemEntry[] {clicked}), null, null);
            frame.setStatusHint(
                new StatusHint(
                    frame.gui.util.getImage("tick"), clicked.getName() + " queued for download!"));
          }
        }
      }
    }
    if (e.getSource() == browseTree) {
      // remove a search if they clicked on the searches icon.
      if (lastOnIcon
          && lastInspectedFSE instanceof FileSystemEntry
          && ((FileSystemEntry) lastInspectedFSE).isSearch()) {
        fs.removeSearch((FileSystemEntry) lastInspectedFSE);

        lastInspectedFSE = null; // doesn't exist anymore.
        lastOnIcon = false;
        mouseMoved(
            new MouseEvent(
                browseTree,
                0,
                System.currentTimeMillis(),
                0,
                e.getX(),
                e.getY(),
                0,
                false)); // simulate the mouse moving to update status bar and icons.
      }
      // remove all searches if the clicked the searchroot:
      if (lastInspectedFSE == fs.getSearchRoot()) {
        fs.removeAllSearches();
      }
    }
  }