public ExplorerViewImpl() {
    checkBoxList = new ArrayList<CheckBox>();
    selectedFileSet = new TreeSet<String>();
    clickHandlerStopPropagation =
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            event.stopPropagation();
          }
        };

    DockPanel dockPanel = new DockPanel();
    dockPanel.setWidth("100%");

    viewPanel = new SimplePanel(dockPanel);
    initWidget(viewPanel);

    MenuBar menuBar = new MenuBar(false);
    dockPanel.add(menuBar, DockPanel.NORTH);
    menuBar.setHeight("30px");

    MenuBar mnbrFile = new MenuBar(true);

    MenuItem mntmFile = new MenuItem("File", false, mnbrFile);
    menuBar.addItem(mntmFile);

    mntmMakeDirectory =
        new MenuItem(
            "Make Directory",
            false,
            new Command() {
              public void execute() {
                new FileDialogBox(presenter, Operation.MAKE_DIRECTORY).center();
              }
            });
    mnbrFile.addItem(mntmMakeDirectory);

    mntmUploadFile =
        new MenuItem(
            "Upload",
            false,
            new Command() {
              public void execute() {
                new FileDialogBox(presenter, Operation.UPLOAD).center();
              }
            });
    mnbrFile.addItem(mntmUploadFile);

    mntmDownloadFile =
        new MenuItem(
            "Download",
            false,
            new Command() {
              public void execute() {
                presenter.downloadFiles(selectedFileSet);
              }
            });
    mnbrFile.addItem(mntmDownloadFile);
    mntmDownloadFile.setEnabled(false);

    mntmDeleteFile =
        new MenuItem(
            "Delete",
            false,
            new Command() {
              public void execute() {}
            });
    mnbrFile.addItem(mntmDeleteFile);
    mntmDeleteFile.setEnabled(false);

    mntmRenameFile =
        new MenuItem(
            "Rename",
            false,
            new Command() {
              public void execute() {}
            });
    mnbrFile.addItem(mntmRenameFile);
    mntmRenameFile.setEnabled(false);

    MenuItemSeparator misFile = new MenuItemSeparator();
    mnbrFile.addSeparator(misFile);

    MenuItem mntmCloseVolume =
        new MenuItem(
            "Close volume",
            false,
            new Command() {
              public void execute() {
                presenter.closeVolume();
              }
            });
    mnbrFile.addItem(mntmCloseVolume);

    MenuBar mnbrHelp = new MenuBar(true);

    MenuItem mntmHelp = new MenuItem("Help", false, mnbrHelp);
    menuBar.addItem(mntmHelp);

    MenuItem mntmAbout =
        new MenuItem(
            "About",
            false,
            new Command() {
              public void execute() {
                Window.alert("");
              }
            });
    mnbrHelp.addItem(mntmAbout);

    flowPanel = new FlowPanel();

    explorerScrollPanel = new ScrollPanel(flowPanel);
    dockPanel.add(explorerScrollPanel, DockPanel.CENTER);
    explorerScrollPanel.sinkEvents(Event.ONCLICK);
    explorerScrollPanel.addHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            setAllCheckBoxFalse();
          }
        },
        ClickEvent.getType());
    explorerScrollPanel.sinkEvents(Event.ONCONTEXTMENU);
    explorerScrollPanel.addHandler(
        new ContextMenuHandler() {
          public void onContextMenu(ContextMenuEvent event) {
            event.preventDefault();
            event.stopPropagation();
            FileContextMenu fileContextMenu =
                new FileContextMenu(presenter, ContextMenuType.BACKGROUND);
            fileContextMenu.setPopupPosition(
                event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY());
            fileContextMenu.show();
            setAllCheckBoxFalse();
          }
        },
        ContextMenuEvent.getType());

    Tree tree = new Tree();

    treeScrollPanel = new ScrollPanel(tree);
    dockPanel.add(treeScrollPanel, DockPanel.WEST);
    treeScrollPanel.setWidth("120px");

    resizeScrollPanel();
    Window.addResizeHandler(
        new ResizeHandler() {
          public void onResize(ResizeEvent event) {
            resizeScrollPanel();
          }
        });

    tree.setAnimationEnabled(true);
    // tree.addOpenHandler(new OpenHandler<TreeItem>() {
    // public void onOpen(OpenEvent<TreeItem> event) {
    // TreeItem trtmTarget = event.getTarget();
    // String path = getPath(trtmTarget);
    // for (int i = 0; i < trtmTarget.getChildCount(); i++) {
    // TreeItem trtmChild = trtmTarget.getChild(i);
    // String childPath = path + trtmChild.getText();
    // presenter.getFiles(trtmChild, childPath);
    // }
    // }
    // });
    tree.addSelectionHandler(
        new SelectionHandler<TreeItem>() {
          public void onSelection(SelectionEvent<TreeItem> event) {
            TreeItem selectedItem = event.getSelectedItem();
            String path = getPath(selectedItem);
            selectedItem.setState(true, true);
            presenter.changeDirectory(path);
          }
        });

    trtmRoot = new TreeItem();
    trtmSelectedItem = trtmRoot;
    tree.addItem(trtmRoot);
    trtmRoot.setText("/");
  }