Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/intro/IntroEditor.java

Issue 9335002: Issue 1423. Enhanced welcome page. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/intro/IntroEditor.java
diff --git a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/intro/IntroEditor.java b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/intro/IntroEditor.java
index e25967f4be5f89f88e1dab71804f12263a81b0f6..91ee76e2db596124787117d3e2344f8997a05cfa 100644
--- a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/intro/IntroEditor.java
+++ b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/intro/IntroEditor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2011 Google Inc.
+ * Copyright 2012 Google Inc.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
@@ -13,26 +13,31 @@
*/
package com.google.dart.tools.ui.internal.intro;
-import com.google.dart.tools.ui.DartToolsPlugin;
+import com.google.dart.tools.core.DartCore;
+import com.google.dart.tools.ui.internal.handlers.OpenFileHandler;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.BrowserFunction;
+import org.eclipse.swt.browser.LocationAdapter;
+import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.forms.IFormColors;
-import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.TableWrapData;
-import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.part.EditorPart;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.List;
+
/**
* A "fake" editor for showing intro content to first time users.
*/
@@ -78,14 +83,6 @@ public class IntroEditor extends EditorPart {
};
}
- private static String bold(String str) {
- return "<span font=\"header\">" + str + "</span>";
- }
-
- private static String img(String imgName) {
- return " <img href=\"" + imgName + "\"/> ";
- }
-
private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
public IntroEditor() {
@@ -104,12 +101,10 @@ public class IntroEditor extends EditorPart {
@Override
public void doSave(IProgressMonitor monitor) {
- //no-op
}
@Override
public void doSaveAs() {
- //no-op
}
@Override
@@ -131,52 +126,86 @@ public class IntroEditor extends EditorPart {
@Override
public void setFocus() {
- //do nothing on focus gain
}
private Composite createIntroContent(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-
- TableWrapLayout layout = new TableWrapLayout();
- layout.verticalSpacing = 0;
- layout.horizontalSpacing = 0;
- layout.bottomMargin = 0;
- layout.topMargin = 20;
- layout.rightMargin = 0;
- layout.leftMargin = 20;
- composite.setLayout(layout);
+ composite.setLayout(new GridLayout());
toolkit.adapt(composite);
-
- FormText formText = toolkit.createFormText(composite, true);
- formText.setLayoutData(GridDataFactory.fillDefaults().grab(true, true));
-
- StringBuffer buf = new StringBuffer();
- buf.append("<form>");
- buf.append("<p>");
- buf.append("<span color=\"header\" font=\"header\">" + "Getting started is easy!</span>");
- buf.append("</p>");
- buf.append("<p>" + bold("1. Click ") + img("new_lib_image") + bold("to create an application.")
- + "</p>");
- buf.append("<p>" + bold("2. Look around. Click ") + img("run_image") + bold(" to run.")
- + "</p>");
- buf.append("<li style=\"text\" bindent=\"20\" indent=\"20\">"
- + "<span color=\"header\">(compiles to JavaScript and runs in Chrome)</span></li>");
- buf.append("<p>" + bold("3. Have fun. Write awesome code.") + "</p>");
- buf.append("</form>");
-
- formText.setWhitespaceNormalized(true);
- TableWrapData twd_formText = new TableWrapData(TableWrapData.FILL);
- twd_formText.grabHorizontal = true;
- formText.setLayoutData(twd_formText);
- formText.setImage("new_lib_image",
- DartToolsPlugin.getImage("icons/full/dart16/library_new.png"));
- formText.setImage("run_image", DartToolsPlugin.getImage("icons/full/dart16/run_client.png"));
-
- formText.setColor("header", toolkit.getColors().getColor(IFormColors.TITLE));
- formText.setFont("header", JFaceResources.getHeaderFont());
-
- formText.setText(buf.toString(), true, false);
+ // use Browser
+ try {
+ final List<SampleDescription> descriptions = SampleDescriptionHelper.getDescriptions();
+ // prepare HTML
+ String html;
+ {
+ StringBuilder sb = new StringBuilder();
+ // header
+ sb.append("<html><body>");
+ sb.append("<p>");
+ sb.append("Dart is a new class-based programming language for creating"
+ + " structured web applications. Developed with the goals of simplicity, efficiency,"
+ + " and scalability, the Dart language combines powerful new language features with"
+ + " familiar language constructs into a clear, readable syntax."
+ + " See <a href='http://www.dartlang.org'>dartlang.org</a> for more information.");
danrubel 2012/02/07 06:00:46 Can all of this be moved into a welcome.html file
scheglov 2012/02/08 16:07:22 Ah... Good idea! Done.
+ sb.append("</p>");
+ // samples
+ sb.append("<hr/>");
+ sb.append("<p>");
+ sb.append("Samples: (click to load)");
+ sb.append("</p>");
+ for (int i = 0; i < descriptions.size(); i++) {
+ SampleDescription description = descriptions.get(i);
+ sb.append("<div style='display: inline-block; margin: 5px; cursor: hand;'"
+ + " onclick='openSample(\"" + i + "\")'>");
+ sb.append(description.name);
+ sb.append("<br/>");
+ sb.append(MessageFormat.format(
+ "<a><img style=''border: 1 red solid;'' src=''{0}'' title=''{1}''/></a>",
+ description.logo.toURI(), description.description.trim()));
+ sb.append("</div>");
+ }
+ // footer
+ sb.append("<hr/>");
+ sb.append(" You can read also <a href='http://www.dartlang.org/support/faq.html'>FAQ</a>"
+ + " and <a href='http://www.dartlang.org/articles/index.html'>articles</a>.");
+ sb.append("</body></html>");
+ html = sb.toString();
+ }
+ // create Browser
+ Browser browser = new Browser(composite, SWT.WEBKIT);
+ browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ browser.setText(html);
+ browser.addLocationListener(new LocationAdapter() {
+ @Override
+ public void changing(LocationEvent event) {
+ event.doit = false;
+ Program.launch(event.location);
+ }
+ });
+ // register JavaScript function
+ new BrowserFunction(browser, "openSample") {
+ @Override
+ public Object function(Object[] arguments) {
+ String indexString = (String) arguments[0];
+ int index = Integer.parseInt(indexString);
+ SampleDescription description = descriptions.get(index);
+ openSample(new File(description.directory, description.file));
+ return null;
+ }
+ };
+ } catch (Throwable e) {
+ DartCore.logError(e);
+ }
+ // done
return composite;
}
+
+ private void openSample(File file) {
+ try {
+ OpenFileHandler.openFile(getEditorSite().getShell(), file);
+ } catch (Throwable e) {
+ DartCore.logError(e);
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698