From fc5388c5ea5ea3467ed2582bb55773db2e375ce6 Mon Sep 17 00:00:00 2001 From: Marc Englund Date: Thu, 12 Feb 2009 14:51:31 +0000 Subject: [PATCH] View source in subwindow / native window. Fixes #2561 svn changeset:6821/svn branch:trunk --- .../ITMILL/themes/sampler/sampler/styles.css | 14 ++-- .../toolkit/demo/sampler/CodeLabel.java | 5 +- .../toolkit/demo/sampler/FeatureView.java | 64 +++++++++---------- .../demo/sampler/SamplerApplication.java | 39 ++++++++++- 4 files changed, 80 insertions(+), 42 deletions(-) diff --git a/WebContent/ITMILL/themes/sampler/sampler/styles.css b/WebContent/ITMILL/themes/sampler/sampler/styles.css index 538c7dcf25..083b1b2b38 100644 --- a/WebContent/ITMILL/themes/sampler/sampler/styles.css +++ b/WebContent/ITMILL/themes/sampler/sampler/styles.css @@ -360,20 +360,26 @@ background: transparent url(sample-desc-arrow.png) no-repeat 50% 0; margin: -6px 0 13px 0; } - -.i-app-SamplerApplication .i-button-showcode { +.i-app-SamplerApplication .i-link-showcode { + margin-left: 3px; +} +.i-app-SamplerApplication .i-button-showcode, +.i-app-SamplerApplication .i-link-showcode { font-family: helvetica, arial, verdana, sans-serif; display: inline; font-size: 12px; line-height: 20px; height: 20px; } -.i-app-SamplerApplication .i-button-showcode span { +.i-app-SamplerApplication .i-button-showcode span, +.i-app-SamplerApplication .i-link-showcode span { color: #8b8e91; text-decoration: none; } -.i-app-SamplerApplication .i-button-showcode:hover span { +.i-app-SamplerApplication .i-button-showcode:hover span, +.i-app-SamplerApplication .i-link-showcode:hover span { color: #62696f; + text-decoration: underline; } .i-app-SamplerApplication .i-panel-content-source { border: 1px solid #eee; diff --git a/src/com/itmill/toolkit/demo/sampler/CodeLabel.java b/src/com/itmill/toolkit/demo/sampler/CodeLabel.java index 67f8875567..bc0f0bdf2c 100644 --- a/src/com/itmill/toolkit/demo/sampler/CodeLabel.java +++ b/src/com/itmill/toolkit/demo/sampler/CodeLabel.java @@ -7,7 +7,7 @@ public class CodeLabel extends Label { private static final String TAG = "codelabel"; public CodeLabel() { - super.setContentMode(CONTENT_PREFORMATTED); + setContentMode(CONTENT_PREFORMATTED); } public CodeLabel(String content) { @@ -21,10 +21,11 @@ public class CodeLabel extends Label { @Override public void setContentMode(int contentMode) { - if (contentMode != Label.CONTENT_PREFORMATTED) { + if (contentMode != CONTENT_PREFORMATTED) { throw new UnsupportedOperationException( "Only preformatted content supported"); } + super.setContentMode(CONTENT_PREFORMATTED); } } diff --git a/src/com/itmill/toolkit/demo/sampler/FeatureView.java b/src/com/itmill/toolkit/demo/sampler/FeatureView.java index 8a9fd29ad7..f652f01807 100644 --- a/src/com/itmill/toolkit/demo/sampler/FeatureView.java +++ b/src/com/itmill/toolkit/demo/sampler/FeatureView.java @@ -14,21 +14,19 @@ import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.Link; import com.itmill.toolkit.ui.Panel; import com.itmill.toolkit.ui.VerticalLayout; +import com.itmill.toolkit.ui.Window; import com.itmill.toolkit.ui.Button.ClickEvent; public class FeatureView extends HorizontalLayout { private static final String MSG_SHOW_SRC = "Show Java™ source »"; - private static final String MSG_HIDE_SRC = "Hide Java™ source"; private Panel right; private VerticalLayout left; private VerticalLayout controls; - private Panel sourcePanel; - private Label sourceCode; - private Button showCode; + private ActiveLink srcWin; private HashMap exampleCache = new HashMap(); @@ -74,36 +72,31 @@ public class FeatureView extends HorizontalLayout { controlButtons.addComponent(new Label("|")); - showCode = new Button(MSG_SHOW_SRC, new Button.ClickListener() { - public void buttonClick(ClickEvent event) { - toggleSource(); + srcWin = new ActiveLink(); + srcWin + .setDescription("Right / middle / ctrl / shift -click for browser window/tab"); + srcWin.addListener(new LinkActivatedListener() { + + public void linkActivated(LinkActivatedEvent event) { + if (!event.isLinkOpened()) { + Window w = new Window("Java™ source"); + ((VerticalLayout) w.getLayout()).setSizeUndefined(); + w.setWidth("70%"); + w.setHeight("60%"); + w.setPositionX(100); + w.setPositionY(100); + w.addComponent(new CodeLabel(currentFeature.getSource())); + getWindow().addWindow(w); + } + } - }); - showCode.setStyleName(Button.STYLE_LINK); - showCode.addStyleName("showcode"); - controlButtons.addComponent(showCode); - - sourceCode = new CodeLabel(); - - sourcePanel = new Panel(); - sourcePanel.getLayout().setSizeUndefined(); - sourcePanel.addStyleName(Panel.STYLE_LIGHT); - sourcePanel.addStyleName("source"); - sourcePanel.addComponent(sourceCode); - sourcePanel.setVisible(false); - sourcePanel.setWidth("100%"); - sourcePanel.setHeight("250px"); - - controls.addComponent(sourcePanel); - } - private void toggleSource() { - showSource(!sourcePanel.isVisible()); - } + }); + srcWin.setCaption(MSG_SHOW_SRC); + srcWin.addStyleName("showcode"); + srcWin.setTargetBorder(Link.TARGET_BORDER_NONE); + controlButtons.addComponent(srcWin); - private void showSource(boolean show) { - showCode.setCaption((show ? MSG_HIDE_SRC : MSG_SHOW_SRC)); - sourcePanel.setVisible(show); } private void resetExample() { @@ -120,7 +113,6 @@ public class FeatureView extends HorizontalLayout { currentFeature = feature; right.removeAllComponents(); left.removeAllComponents(); - showSource(false); left.addComponent(controls); controls.setCaption(feature.getName()); @@ -154,7 +146,13 @@ public class FeatureView extends HorizontalLayout { } } - sourceCode.setValue(feature.getSource()); + { // open src in new window -link + String path = SamplerApplication.getPathFor(currentFeature); + srcWin.setTargetName(path); + srcWin.setResource(new ExternalResource(getApplication() + .getURL() + + "src/" + path)); + } NamedExternalResource[] resources = feature.getRelatedResources(); if (resources != null) { diff --git a/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java b/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java index f9802d98d2..2607d83310 100644 --- a/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java +++ b/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java @@ -1,6 +1,7 @@ package com.itmill.toolkit.demo.sampler; import java.net.URI; +import java.net.URL; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -15,9 +16,11 @@ import com.itmill.toolkit.demo.sampler.ModeSwitch.ModeSwitchEvent; import com.itmill.toolkit.event.ItemClickEvent; import com.itmill.toolkit.event.ItemClickEvent.ItemClickListener; import com.itmill.toolkit.terminal.ClassResource; +import com.itmill.toolkit.terminal.DownloadStream; import com.itmill.toolkit.terminal.ExternalResource; import com.itmill.toolkit.terminal.Resource; import com.itmill.toolkit.terminal.ThemeResource; +import com.itmill.toolkit.terminal.URIHandler; import com.itmill.toolkit.ui.Alignment; import com.itmill.toolkit.ui.Button; import com.itmill.toolkit.ui.ComboBox; @@ -80,8 +83,13 @@ public class SamplerApplication extends Application { public Window getWindow(String name) { Window w = super.getWindow(name); if (w == null) { - w = new SamplerWindow(); - w.setName(name); + if (name.startsWith("src")) { + w = new SourceWindow(); + } else { + w = new SamplerWindow(); + w.setName(name); + } + addWindow(w); } return w; @@ -500,7 +508,8 @@ public class SamplerApplication extends Application { String current = ""; ActiveLink link = null; for (int i = 0; i < parts.length; i++) { - layout.addComponent(new Label("‣")); + layout.addComponent(new Label("»", + Label.CONTENT_XHTML)); current += (i > 0 ? "/" : "") + parts[i]; Feature f = FeatureSet.FEATURES.getFeatureByPath(current); link = new ActiveLink(f.getName(), new ExternalResource("#" @@ -712,4 +721,28 @@ public class SamplerApplication extends Application { return allFeatures; } + public class SourceWindow extends Window { + public SourceWindow() { + addURIHandler(new URIHandler() { + public DownloadStream handleURI(URL context, String relativeUri) { + Feature f = FeatureSet.FEATURES + .getFeatureByPath(relativeUri); + if (f != null) { + addComponent(new CodeLabel(f.getSource())); + } else { + addComponent(new Label("Sorry, no source found for " + + relativeUri)); + } + return null; + } + + }); + + addListener(new CloseListener() { + public void windowClose(CloseEvent e) { + SamplerApplication.this.removeWindow(SourceWindow.this); + } + }); + } + } } -- 2.39.5