コード例 #1
0
ファイル: FilesTab.java プロジェクト: conicalflask/fs2
  /**
   * 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);
          }
        }
      }
    }
  }
コード例 #2
0
ファイル: FilesTab.java プロジェクト: conicalflask/fs2
  JSplitPane createBrowseSection() {
    spinner = new LoadingAnimationHelper();
    splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    splitPane.setContinuousLayout(true);
    fs = frame.gui.ssvr.getIndexNodeCommunicator().getFileSystem();

    browseTree = new JTree(fs);

    // Allows the filesystem to keep refreshing directories we have visible:
    fs.setPathRequired(
        new PathRequired() {
          @Override
          public boolean required(TreePath path) {
            return browseTree.isExpanded(path);
          }
        });
    fs.addTreeModelListener(spinner);

    browseTree.setCellRenderer(browseTreeRenderer = new BrowseTreeCellRenderer());
    browseTree.addTreeSelectionListener(this);
    browseTree.addMouseMotionListener(this);
    browseTree.addMouseListener(this);
    browseTree.addTreeExpansionListener(this);
    browseTree.setRootVisible(false);
    browseTree.expandPath(fs.getBrowseRoot().getPath());

    JScrollPane treeView = new JScrollPane(browseTree);
    treeView.setMinimumSize(new Dimension(100, 100));
    splitPane.setLeftComponent(treeView);

    filesTable = new FancierTable(fs, frame.gui.conf, CK.FILES_TABLE_COLWIDTHS);
    filesTable.addMouseListener(this);
    filesTable.getSelectionModel().addListSelectionListener(this);
    filesTable.getColumn(fs.getColumnName(0)).setCellRenderer(new FilesTableNameRenderer());

    JScrollPane filesView = new JScrollPane(filesTable);
    splitPane.setRightComponent(filesView);
    splitPane.setDividerLocation(frame.gui.conf.getInt(CK.FILES_DIVIDER_LOCATION));
    splitPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, this);

    return splitPane;
  }