diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructure.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructure.java index 9dbe6558b9..6f79daf64c 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructure.java +++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructure.java @@ -58,5 +58,11 @@ interface FileStructure extends View { * selected member */ void actionPerformed(Member member); + + /** + * Performs some actions(e.c. set cursor in previous position in active editor) when user click on escape button to close + * file structure dialog. + */ + void onEscapeClicked(); } } diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java index bf2a381a11..f1dce93d98 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java +++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java @@ -29,10 +29,10 @@ import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant; import org.eclipse.che.ide.ext.java.client.navigation.factory.NodeFactory; import org.eclipse.che.ide.ext.java.shared.dto.model.CompilationUnit; import org.eclipse.che.ide.ui.smartTree.KeyboardNavigationHandler; -import org.eclipse.che.ide.ui.smartTree.NodeUniqueKeyProvider; -import org.eclipse.che.ide.ui.smartTree.Tree; import org.eclipse.che.ide.ui.smartTree.NodeLoader; import org.eclipse.che.ide.ui.smartTree.NodeStorage; +import org.eclipse.che.ide.ui.smartTree.NodeUniqueKeyProvider; +import org.eclipse.che.ide.ui.smartTree.Tree; import org.eclipse.che.ide.ui.window.Window; import javax.validation.constraints.NotNull; @@ -53,16 +53,18 @@ final class FileStructureImpl extends Window implements FileStructure { private static FileStructureImplUiBinder UI_BINDER = GWT.create(FileStructureImplUiBinder.class); + private final NodeFactory nodeFactory; + private final Tree tree; + + private ActionDelegate delegate; + @UiField DockLayoutPanel treeContainer; @UiField Label showInheritedLabel; - private final NodeFactory nodeFactory; - private final JavaLocalizationConstant locale; - private final Tree tree; - - private ActionDelegate delegate; + @UiField(provided = true) + final JavaLocalizationConstant locale; private Predicate LEAFS = new Predicate() { @Override @@ -134,6 +136,13 @@ final class FileStructureImpl extends Window implements FileStructure { tree.expandAll(); } + /** {@inheritDoc} */ + @Override + public void hide() { + super.hide(); + delegate.onEscapeClicked(); + } + /** {@inheritDoc} */ @Override public void setDelegate(ActionDelegate delegate) { diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java index 04e7e67030..23f970291b 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java +++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java @@ -57,6 +57,7 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate { private EmbeddedTextEditorPresenter activeEditor; private boolean showInheritedMembers; + private int cursorOffset; @Inject public FileStructurePresenter(FileStructure view, @@ -91,6 +92,7 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate { return; } activeEditor = ((EmbeddedTextEditorPresenter)editorPartPresenter); + cursorOffset = activeEditor.getCursorOffset(); VirtualFile file = activeEditor.getEditorInput().getFile(); String projectPath = file.getProject().getProjectConfig().getPath(); @@ -141,6 +143,12 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate { showInheritedMembers = false; } + @Override + public void onEscapeClicked() { + activeEditor.setFocus(); + setCursor(activeEditor, cursorOffset); + } + private void openFile(VirtualFile result, final Member member) { editorAgent.openEditor(result, new EditorAgent.OpenEditorCallback() { @Override @@ -149,7 +157,8 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate { } @Override - public void onEditorActivated(EditorPartPresenter editor) { } + public void onEditorActivated(EditorPartPresenter editor) { + } }); } diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/test/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenterTest.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/test/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenterTest.java index 17bd83e9fe..2d6dfca728 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/test/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenterTest.java +++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/test/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenterTest.java @@ -28,6 +28,7 @@ import org.eclipse.che.ide.ext.java.shared.dto.Region; import org.eclipse.che.ide.ext.java.shared.dto.model.CompilationUnit; import org.eclipse.che.ide.ext.java.shared.dto.model.Member; import org.eclipse.che.ide.jseditor.client.document.Document; +import org.eclipse.che.ide.jseditor.client.text.LinearRange; import org.eclipse.che.ide.jseditor.client.texteditor.EmbeddedTextEditorPresenter; import org.eclipse.che.ide.part.explorer.project.ProjectExplorerPresenter; import org.eclipse.che.ide.ui.loaders.request.LoaderFactory; @@ -44,6 +45,7 @@ import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -189,4 +191,15 @@ public class FileStructurePresenterTest { presenter.show(editorPartPresenter); } + + @Test + public void cursorShouldBeReturnedInPreviousPositionAfterDialogClosingByEscapeButton() { + presenter.show(editorPartPresenter); + + presenter.onEscapeClicked(); + + verify(editorPartPresenter).setFocus(); + verify(editorPartPresenter).getDocument(); + verify(document).setSelectedRange(Matchers.anyObject(), eq(true)); + } } \ No newline at end of file