// 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.FileSelectedPlace.NavigationEvent; import com.google.collide.client.history.PlaceNavigationHandler; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; /** * {@link PlaceNavigationHandler} responsible for handling the selection of files. */ public class FileSelectedPlaceNavigationHandler extends PlaceNavigationHandler<FileSelectedPlace.NavigationEvent> { private final AppContext appContext; private final FileSelectionController fileSelectionController; private final EditableContentArea contentArea; public FileSelectedPlaceNavigationHandler(AppContext appContext, CodePerspective codePerspective, FileSelectionController fileSelectionController, EditableContentArea contentArea) { this.appContext = appContext; this.fileSelectionController = fileSelectionController; this.contentArea = contentArea; } @Override public void cleanup() { contentArea.getEditorToolBar().hide(); } @Override protected void enterPlace(final NavigationEvent navigationEvent) { contentArea.getEditorToolBar().show(); selectFile(navigationEvent); } @Override protected void reEnterPlace(final NavigationEvent navigationEvent, boolean hasNewState) { if (!hasNewState && !navigationEvent.shouldForceReload()) { // Nothing to do. return; } selectFile(navigationEvent); } private void selectFile(final NavigationEvent navigationEvent) { /* * The navigation event will not be active until all handlers have been called, so wait until * the end of the event loop for the navigation event to become active. */ Scheduler.get().scheduleFinally(new ScheduledCommand() { @Override public void execute() { if (navigationEvent.isActiveLeaf()) { fileSelectionController.selectFile(navigationEvent); contentArea.getEditorToolBar().setCurrentPath(navigationEvent.getPath(), fileSelectionController.getFileTreeModel().getLastAppliedTreeMutationRevision()); } } }); } }