/** * Sencha GXT 3.0.0b - Sencha for GWT * Copyright(c) 2007-2012, Sencha, Inc. * licensing@sencha.com * * http://www.sencha.com/products/gxt/license/ */ package com.sencha.gxt.desktopapp.client.interpreter; import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.desktopapp.client.filemanager.images.Images; import com.sencha.gxt.widget.core.client.Window; import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer; import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; import com.sencha.gxt.widget.core.client.event.HideEvent; import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler; import com.sencha.gxt.widget.core.client.event.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; import com.sencha.gxt.widget.core.client.event.ShowEvent; import com.sencha.gxt.widget.core.client.event.ShowEvent.ShowHandler; import com.sencha.gxt.widget.core.client.form.TextArea; import com.sencha.gxt.widget.core.client.toolbar.ToolBar; public class InterpreterViewImpl implements InterpreterView, HideHandler, ShowHandler { private InterpreterPresenter interpreterPresenter; private Window window; private TextArea programTextArea; private HTML outputHtml; private BorderLayoutContainer borderLayoutContainer; private VerticalLayoutContainer centerContainer; private BorderLayoutData centerLayoutData; private BorderLayoutData southLayoutData; private ToolBar programToolBar; private TextButton runButton; private SelectHandler runSelectHandler; private VerticalLayoutContainer southContainer; private TextButton clearButton; private SelectHandler clearSelectHandler; public InterpreterViewImpl(InterpreterPresenter interpreterPresenter) { this.interpreterPresenter = interpreterPresenter; } @Override public Widget asWidget() { return getWindow(); } public void clear() { getOutputHtml().setText(""); } @Override public void close() { getWindow().hide(); } @Override public String getValue() { return getProgramTextArea().getCurrentValue(); } @Override public void onHide(HideEvent event) { getInterpreterPresenter().unbind(); } @Override public void onShow(ShowEvent event) { getInterpreterPresenter().bind(); getProgramTextArea().focus(); } @Override public void print(String value) { String html = outputHtml.getHTML(); if (html.isEmpty()) { html = value; } else { html = html + "<br/>" + value; } outputHtml.setHTML(html); outputHtml.getElement().setScrollTop( outputHtml.getElement().getScrollHeight() - outputHtml.getElement().getClientHeight()); } @Override public void setTitle(String title) { getWindow().setHeadingText(title); } @Override public void setValue(String value) { getProgramTextArea().setValue(value); } private BorderLayoutContainer getBorderLayoutContainer() { if (borderLayoutContainer == null) { borderLayoutContainer = new BorderLayoutContainer(); borderLayoutContainer.setBorders(true); borderLayoutContainer.setCenterWidget(getCenterContainer(), getCenterLayoutData()); borderLayoutContainer.setSouthWidget(getSouthContainer(), getSouthLayoutData()); } return borderLayoutContainer; } private VerticalLayoutContainer getCenterContainer() { if (centerContainer == null) { centerContainer = new VerticalLayoutContainer(); centerContainer.add(getProgramToolBar(), new VerticalLayoutData(1, -1)); centerContainer.add(getProgramTextArea(), new VerticalLayoutData(1, 1)); } return centerContainer; } private BorderLayoutData getCenterLayoutData() { if (centerLayoutData == null) { centerLayoutData = new BorderLayoutData(); } return centerLayoutData; } private TextButton getClearButton() { if (clearButton == null) { clearButton = new TextButton(); clearButton.setToolTip("Clear Output"); clearButton.setIcon(Images.getImageResources().bin_closed()); clearButton.addSelectHandler(getClearSelectHandler()); } return clearButton; } private SelectHandler getClearSelectHandler() { if (clearSelectHandler == null) { clearSelectHandler = new SelectHandler() { @Override public void onSelect(SelectEvent event) { clear(); } }; } return clearSelectHandler; } private InterpreterPresenter getInterpreterPresenter() { return interpreterPresenter; } private HTML getOutputHtml() { if (outputHtml == null) { outputHtml = new HTML(); outputHtml.getElement().getStyle().setBackgroundColor("white"); outputHtml.getElement().getStyle().setOverflow(Overflow.AUTO); } return outputHtml; } private TextArea getProgramTextArea() { if (programTextArea == null) { programTextArea = new TextArea(); programTextArea.addKeyDownHandler(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { getInterpreterPresenter().onContentUpdate(); } }); } return programTextArea; } private ToolBar getProgramToolBar() { if (programToolBar == null) { programToolBar = new ToolBar(); programToolBar.add(getRunButton()); programToolBar.add(getClearButton()); } return programToolBar; } private TextButton getRunButton() { if (runButton == null) { runButton = new TextButton(); runButton.setToolTip("Run Program"); runButton.setIcon(Images.getImageResources().bullet_go()); runButton.addSelectHandler(getRunSelectHandler()); } return runButton; } private SelectHandler getRunSelectHandler() { if (runSelectHandler == null) { runSelectHandler = new SelectHandler() { @Override public void onSelect(SelectEvent event) { getInterpreterPresenter().run(); } }; } return runSelectHandler; } private VerticalLayoutContainer getSouthContainer() { if (southContainer == null) { southContainer = new VerticalLayoutContainer(); southContainer.setBorders(true); southContainer.add(getOutputHtml(), new VerticalLayoutData(1, 1)); } return southContainer; } private BorderLayoutData getSouthLayoutData() { if (southLayoutData == null) { southLayoutData = new BorderLayoutData(0.25d); southLayoutData.setMargins(new Margins(5, 0, 0, 0)); southLayoutData.setSplit(true); } return southLayoutData; } private Window getWindow() { if (window == null) { window = new Window(); window.getHeader().setIcon(Images.getImageResources().script()); window.setMinimizable(true); window.setMaximizable(true); window.setPixelSize(500, 400); window.setOnEsc(false); window.addHideHandler(this); window.addShowHandler(this); window.setWidget(getBorderLayoutContainer()); } return window; } }