Package com.google.collide.client.code

Source Code of com.google.collide.client.code.FileTreeSection$ViewEventsImpl

// Copyright 2012 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.collide.client.code;

import com.google.collide.client.AppContext;
import com.google.collide.client.code.debugging.DebuggingModelController;
import com.google.collide.client.history.Place;
import com.google.collide.client.ui.tooltip.Tooltip;
import com.google.collide.client.ui.tree.Tree;
import com.google.collide.client.util.Elements;
import com.google.collide.client.workspace.FileTreeModel;
import com.google.collide.client.workspace.FileTreeNode;
import com.google.collide.client.workspace.FileTreeUiController;
import com.google.collide.dto.DirInfo;
import com.google.collide.dto.ProjectInfo;
import com.google.gwt.resources.client.CssResource;

import elemental.html.Element;

/**
* {@link WorkspaceNavigationSection} that is the presenter for the File Tree.
*
* This class owns the instances of the {@link FileTreeUiController}, and the {@link Tree} widget.
*
*/
public class FileTreeSection extends WorkspaceNavigationSection<FileTreeSection.View> {

  /**
   * Static factory method for obtaining an instance of the FileTreeSection.
   */
  public static FileTreeSection create(Place place, AppContext appContext,
      FileTreeModel fileTreeModel,
      DebuggingModelController debuggingModelController) {

    // create the view
    FileTreeSection.View view = new FileTreeSection.View(appContext.getResources());

    // Create the Tree presenter.
    FileTreeNodeRenderer nodeRenderer =
        FileTreeNodeRenderer.create(appContext.getResources());
    FileTreeNodeDataAdapter nodeDataAdapter = new FileTreeNodeDataAdapter();
    Tree<FileTreeNode> tree = Tree.create(
        view.treeView, nodeDataAdapter, nodeRenderer, appContext.getResources());

    // Create the UI controller.
    FileTreeUiController treeUiController = FileTreeUiController.create(place,
        fileTreeModel,
        tree,
        appContext,
        debuggingModelController);

    // attach a file tree menu to the button
    treeUiController.getContextMenuController()
        .createMenuDropdown(Elements.asJsElement(view.menuButton));

    // Instantiate and return the FileTreeSection.
    FileTreeSection fileTreeSection =
        new FileTreeSection(view, tree, treeUiController, fileTreeModel);
    return fileTreeSection;
  }

  public interface Css extends CssResource {
    String root();
  }

  /**
   * CSS and images used by the FileTreeSection.
   */
  public interface Resources
      extends
      WorkspaceNavigationSection.Resources,
      Tooltip.Resources,
      FileTreeNodeRenderer.Resources {

    @Source("FileTreeSection.css")
    Css workspaceNavigationFileTreeSectionCss();
  }

  /**
   * View for the FileTreeSection.
   */
  static class View extends WorkspaceNavigationSection.View<WorkspaceNavigationSection.ViewEvents> {
    final Element root;
    Tree.View<FileTreeNode> treeView;

    View(Resources res) {
      super(res);

      // Instantiate subviews.
      this.treeView = new Tree.View<FileTreeNode>(res);

      root = Elements.createDivElement(res.workspaceNavigationFileTreeSectionCss().root());
      root.appendChild(treeView.getElement());

      // Initialize the View.
      setTitle("Project Files");
      setStretch(true);
      setShowMenuButton(true);
      setContent(root);
      setContentAreaScrollable(true);
      setUnderlineHeader(true);

      title.addClassName(css.headerLink());
    }
  }

  private class ViewEventsImpl extends WorkspaceNavigationSection.AbstractViewEventsImpl {
    @Override
    public void onTitleClicked() {
      if (projectInfo != null) {
        // was goto landing
      }
    }
  }

  private final Tree<FileTreeNode> tree;
  private final FileTreeUiController fileTreeUiController;
  private ProjectInfo projectInfo;
  private final FileTreeModel fileTreeModel;
  private final boolean isReadOnly = false;
  private final FileTreeModel.TreeModelChangeListener fileTreeModelChangeListener =
      new FileTreeModel.BasicTreeModelChangeListener() {
        @Override
        public void onTreeModelChange() {
          updateProjectTemplatePickerVisibility();
        }
      };

  FileTreeSection(View view, Tree<FileTreeNode> tree, FileTreeUiController fileTreeUiController,
      FileTreeModel fileTreeModel) {
    super(view);
    view.setDelegate(new ViewEventsImpl());

    this.tree = tree;
    this.fileTreeUiController = fileTreeUiController;
    this.fileTreeModel = fileTreeModel;

    fileTreeModel.addModelChangeListener(fileTreeModelChangeListener);

    getView().setTitle("Dimly Project");
    updateProjectTemplatePickerVisibility();
  }

  public void cleanup() {
    fileTreeModel.removeModelChangeListener(fileTreeModelChangeListener);
  }

  public Tree<FileTreeNode> getTree() {
    return tree;
  }

  public FileTreeUiController getFileTreeUiController() {
    return fileTreeUiController;
  }

  private void updateProjectTemplatePickerVisibility() {
    if (isReadOnly) {
      return;
    }
    DirInfo root = (DirInfo) fileTreeModel.getWorkspaceRoot();

    /*
     * If it is null, the file tree hasn't been loaded yet so we can't be sure whether or not there
     * are files, don't show it yet
     */
    boolean showPicker =
        root != null && root.getFiles().isEmpty() && root.getSubDirectories().isEmpty();
  }
}
TOP

Related Classes of com.google.collide.client.code.FileTreeSection$ViewEventsImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.