Java tutorial
/* * 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_; }