org.rstudio.studio.client.workbench.views.files.ui.FilePathToolbar.java Source code

Java tutorial

Introduction

Here is the source code for org.rstudio.studio.client.workbench.views.files.ui.FilePathToolbar.java

Source

/*
 * FilePathToolbar.java
 *
 * Copyright (C) 2009-12 by RStudio, Inc.
 *
 * Unless you have received this program directly from RStudio pursuant
 * to the terms of a commercial license agreement with RStudio, then
 * this program is licensed to you under the terms of version 3 of the
 * GNU Affero General Public License. This program is distributed WITHOUT
 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
 *
 */
package org.rstudio.studio.client.workbench.views.files.ui;

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.*;
import org.rstudio.core.client.MessageDisplay;
import org.rstudio.core.client.events.SelectionCommitEvent;
import org.rstudio.core.client.events.SelectionCommitHandler;
import org.rstudio.core.client.files.FileSystemContext.Callbacks;
import org.rstudio.core.client.files.FileSystemItem;
import org.rstudio.core.client.files.PosixFileSystemContext;
import org.rstudio.core.client.files.filedialog.PathBreadcrumbWidget;
import org.rstudio.core.client.theme.res.ThemeStyles;
import org.rstudio.core.client.widget.ProgressIndicator;
import org.rstudio.studio.client.RStudioGinjector;
import org.rstudio.studio.client.workbench.views.files.Files;

public class FilePathToolbar extends Composite implements RequiresResize, ProvidesResize {
    private class FileSystemContextImpl extends PosixFileSystemContext {
        public MessageDisplay messageDisplay() {
            return RStudioGinjector.INSTANCE.getGlobalDisplay();
        }

        public void cd(String relativeOrAbsolutePath) {
            workingDir_ = combine(pwd(), relativeOrAbsolutePath);
            if (callbacks_ != null)
                callbacks_.onNavigated();
        }

        public void refresh() {
            throw new UnsupportedOperationException("refresh not supported");
        }

        public void mkdir(String folderName, ProgressIndicator progress) {
            throw new UnsupportedOperationException("mkdir not supported");
        }

        public ImageResource getIcon(FileSystemItem item) {
            throw new UnsupportedOperationException("getIcon not supported");
        }
    }

    public FilePathToolbar(Files.Display.NavigationObserver navigationObserver) {
        LayoutPanel layout = new LayoutPanel();
        layout.setSize("100%", "21px");
        initWidget(layout);
        setStyleName(ThemeStyles.INSTANCE.secondaryToolbar());

        navigationObserver_ = navigationObserver;

        // select all check box
        CheckBox selectAllCheckBox = new CheckBox();
        selectAllCheckBox.addStyleDependentName("FilesSelectAll");
        selectAllCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {

            public void onValueChange(ValueChangeEvent<Boolean> event) {
                navigationObserver_.onSelectAllValueChanged(event.getValue().booleanValue());
            }
        });

        layout.add(selectAllCheckBox);
        layout.setWidgetTopBottom(selectAllCheckBox, 0, Unit.PX, 0, Unit.PX);
        layout.setWidgetLeftWidth(selectAllCheckBox, 0, Unit.PX, 20, Unit.PX);

        // breadcrumb widget
        fileSystemContext_ = new FileSystemContextImpl();
        fileSystemContext_.setCallbacks(new Callbacks() {
            public void onNavigated() {
                navigationObserver_.onFileNavigation(fileSystemContext_.pwdItem());
            }

            public void onError(String errorMessage) {
                assert false : "Not implemented";
            }

            public void onDirectoryCreated(FileSystemItem directory) {
                assert false : "Not implemented";
            }
        });
        pathBreadcrumbWidget_ = new PathBreadcrumbWidget(fileSystemContext_);
        pathBreadcrumbWidget_.addStyleDependentName("filepane");
        pathBreadcrumbWidget_.addSelectionCommitHandler(new SelectionCommitHandler<FileSystemItem>() {
            public void onSelectionCommit(SelectionCommitEvent<FileSystemItem> e) {
                fileSystemContext_.cd(e.getSelectedItem().getPath());
            }
        });

        layout.add(pathBreadcrumbWidget_);
        layout.setWidgetTopBottom(pathBreadcrumbWidget_, 0, Unit.PX, 0, Unit.PX);
        layout.setWidgetLeftRight(pathBreadcrumbWidget_, 21, Unit.PX, 0, Unit.PX);
    }

    public void setPath(String path) {
        assert fileSystemContext_.isAbsolute(path);
        pathBreadcrumbWidget_.setDirectory(fileSystemContext_.parseDir(path));
    }

    public int getHeight() {
        return 21;
    }

    public void onResize() {
        if (getWidget() instanceof RequiresResize)
            ((RequiresResize) getWidget()).onResize();
    }

    private final Files.Display.NavigationObserver navigationObserver_;
    private FileSystemContextImpl fileSystemContext_;
    private PathBreadcrumbWidget pathBreadcrumbWidget_;
}