From 4b9e573c67befaeffd665727beed26c9f1706495 Mon Sep 17 00:00:00 2001 From: Vitaliy Guliy Date: Thu, 10 Aug 2017 10:41:15 +0300 Subject: [PATCH] CHE-4783 Initial splash should be smarter (#5961) * CHE-4783 Initial splash should be smarter * CHE-4783 Initial splash should be smarter --- .../che/ide/actions/NavigateToFileAction.java | 10 ++-- .../ide/part/editor/EmptyEditorsPanel.java | 49 +++++++++++++------ .../ide/part/editor/EmptyEditorsPanel.ui.xml | 2 +- .../part/explorer/project/EmptyTreePanel.java | 12 +++-- 4 files changed, 51 insertions(+), 22 deletions(-) diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/NavigateToFileAction.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/NavigateToFileAction.java index e65960e4b2e5..90e52b6f7b19 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/NavigateToFileAction.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/NavigateToFileAction.java @@ -11,6 +11,7 @@ package org.eclipse.che.ide.actions; import com.google.inject.Inject; +import com.google.inject.Provider; import com.google.inject.Singleton; import org.eclipse.che.ide.CoreLocalizationConstant; @@ -34,10 +35,10 @@ @Singleton public class NavigateToFileAction extends AbstractPerspectiveAction { - private final NavigateToFilePresenter presenter; + private final Provider navigateToFilePresenterProvider; @Inject - public NavigateToFileAction(NavigateToFilePresenter presenter, + public NavigateToFileAction(Provider navigateToFilePresenterProvider, Resources resources, CoreLocalizationConstant localizationConstant) { super(singletonList(PROJECT_PERSPECTIVE_ID), @@ -45,16 +46,17 @@ public NavigateToFileAction(NavigateToFilePresenter presenter, localizationConstant.actionNavigateToFileDescription(), null, resources.navigateToFile()); - this.presenter = presenter; + this.navigateToFilePresenterProvider = navigateToFilePresenterProvider; } @Override public void actionPerformed(ActionEvent e) { - presenter.showDialog(); + navigateToFilePresenterProvider.get().showDialog(); } @Override public void updateInPerspective(@NotNull ActionEvent event) { event.getPresentation().setEnabledAndVisible(true); } + } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.java index c6a46ac66609..5b01cfd04b2d 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.java @@ -32,6 +32,8 @@ import org.eclipse.che.ide.CoreLocalizationConstant; import org.eclipse.che.ide.actions.CreateProjectAction; import org.eclipse.che.ide.actions.ImportProjectAction; +import org.eclipse.che.ide.actions.NavigateToFileAction; +import org.eclipse.che.ide.actions.find.FindActionAction; import org.eclipse.che.ide.api.ProductInfoDataProvider; import org.eclipse.che.ide.api.action.Action; import org.eclipse.che.ide.api.action.ActionEvent; @@ -63,7 +65,10 @@ */ public class EmptyEditorsPanel extends Composite implements ResourceChangedEvent.ResourceChangedHandler { - private static EmptyEditorsPanelUiBinder ourUiBinder = GWT.create(EmptyEditorsPanelUiBinder.class); + interface EmptyEditorsPanelUiBinder extends UiBinder {} + + private static EmptyEditorsPanelUiBinder uiBinder = GWT.create(EmptyEditorsPanelUiBinder.class); + protected final AppContext appContext; private final ActionManager actionManager; private final Provider perspectiveManagerProvider; @@ -72,7 +77,11 @@ public class EmptyEditorsPanel extends Composite implements ResourceChangedEvent private final CoreLocalizationConstant localizationConstant; private final Map noFiles = new HashMap<>(); + private final Map noProjects = new HashMap<>(); + + private final Map factoryActions = new HashMap<>(); + @UiField protected DivElement title; @UiField @@ -94,22 +103,28 @@ public EmptyEditorsPanel(ActionManager actionManager, CoreLocalizationConstant localizationConstant, NewFileAction newFileAction, CreateProjectAction createProjectAction, - ImportProjectAction importProjectAction) { + ImportProjectAction importProjectAction, + FindActionAction findActionAction, + NavigateToFileAction navigateToFileAction + ) { this(actionManager, perspectiveManagerProvider, keyBindingAgent, appContext, localizationConstant, newFileAction, createProjectAction, importProjectAction); - eventBus.addHandler(ResourceChangedEvent.getType(), this); final SVGResource logo = productInfoDataProvider.getWaterMarkLogo(); if (nonNull(logo)) { this.logo.appendChild(new SVGImage(logo).getSvgElement().getElement()); } + + factoryActions.put(findActionAction.getTemplatePresentation().getText(), findActionAction); + factoryActions.put(navigateToFileAction.getTemplatePresentation().getText(), navigateToFileAction); + //Sometimes initialization of Create/Import Project actions are completed after the Empty editor page is rendered. //In this case we need to wait when actions will be initialized. Timer hoverToRenderTimer = new Timer() { @Override public void run() { - renderNoProjects(); + render(); } }; hoverToRenderTimer.schedule(500); @@ -137,8 +152,7 @@ public EmptyEditorsPanel(ActionManager actionManager, presentationFactory = new PresentationFactory(); - Widget rootElement = ourUiBinder.createAndBindUi(this); - initWidget(rootElement); + initWidget(uiBinder.createAndBindUi(this)); } @Override @@ -153,18 +167,23 @@ public void onResourceChanged(ResourceChangedEvent event) { Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { - updateOnProjectsChange(); + render(); } }); - } - private void updateOnProjectsChange() { - if (appContext.getProjects().length != 0) { - renderNoFiles(); - } else { + protected void render() { + if (appContext.getProjects() != null && appContext.getProjects().length == 0) { renderNoProjects(); + return; + } + + if (appContext.getWorkspace().getAttributes().containsKey("factoryId")) { + renderFactoryActions(); + return; } + + renderNoFiles(); } protected void renderNoProjects() { @@ -175,12 +194,15 @@ protected void renderNoFiles() { render(localizationConstant.emptyStateNoFiles(), noFiles); } + protected void renderFactoryActions() { + render(localizationConstant.emptyStateNoFiles(), factoryActions); + } + private void render(String title, Map actions) { this.title.setInnerText(title); container.removeAllChildren(); Element listElement = Elements.createElement("ul", new String[] {style.list()}); - for (Map.Entry pair : actions.entrySet()) { LIElement liElement = Elements.createLiElement(); liElement.appendChild(renderAction(pair.getKey(), pair.getValue())); @@ -237,5 +259,4 @@ interface Css extends CssResource { String actionLabel(); } - interface EmptyEditorsPanelUiBinder extends UiBinder {} } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.ui.xml b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.ui.xml index d3f83a233afb..29b691bdc929 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.ui.xml +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/editor/EmptyEditorsPanel.ui.xml @@ -65,7 +65,7 @@ border: 1px solid fontColor; color: fontColor; border-radius: 2px; - margin-left: 50px; + margin-left: 30px; } .actionLabel { diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/EmptyTreePanel.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/EmptyTreePanel.java index 6d3acb21235f..cff03a54c04a 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/EmptyTreePanel.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/EmptyTreePanel.java @@ -12,6 +12,7 @@ import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.Style; +import com.google.gwt.user.client.Timer; import com.google.inject.Provider; import com.google.web.bindery.event.shared.EventBus; @@ -46,13 +47,17 @@ public EmptyTreePanel(ActionManager actionManager, super(actionManager, perspectiveManagerProvider, keyBindingAgent, appContext, localizationConstant, newFileAction, createProjectAction, importProjectAction); eventBus.addHandler(ResourceChangedEvent.getType(), this); + root.getStyle().setTop(46, Style.Unit.PX); - Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { + + //Sometimes initialization of Create/Import Project actions are completed after the Empty editor page is rendered. + //In this case we need to wait when actions will be initialized. + new Timer() { @Override - public void execute() { + public void run() { renderNoProjects(); } - }); + }.schedule(500); } @Override @@ -66,4 +71,5 @@ public void execute() { } }); } + }