2 * Copyright (C) 2008 ZXing authors
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.google.zxing.web.generator.client;
19 import com.google.gwt.core.client.EntryPoint;
20 import com.google.gwt.dom.client.Element;
21 import com.google.gwt.event.dom.client.KeyPressEvent;
22 import com.google.gwt.event.dom.client.KeyPressHandler;
23 import com.google.gwt.http.client.URL;
24 import com.google.gwt.user.client.DOM;
25 import com.google.gwt.user.client.ui.Button;
26 import com.google.gwt.user.client.ui.ChangeListener;
27 import com.google.gwt.user.client.ui.ClickListener;
28 import com.google.gwt.user.client.ui.Grid;
29 import com.google.gwt.user.client.ui.HTML;
30 import com.google.gwt.user.client.ui.HorizontalPanel;
31 import com.google.gwt.user.client.ui.Image;
32 import com.google.gwt.user.client.ui.ListBox;
33 import com.google.gwt.user.client.ui.RootPanel;
34 import com.google.gwt.user.client.ui.SimplePanel;
35 import com.google.gwt.user.client.ui.TextBox;
36 import com.google.gwt.user.client.ui.VerticalPanel;
37 import com.google.gwt.user.client.ui.Widget;
38 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
40 import java.util.ArrayList;
41 import java.util.List;
44 * Entry point classes define <code>onModuleLoad()</code>. Setup the page, and loads
45 * all different generators.
47 * @author Yohann Coppel
49 public class Generator implements EntryPoint {
50 // public static final StringConstants S = GWT.create(StringConstants.class);
51 private final List<GeneratorSource> generators = new ArrayList<GeneratorSource>();
52 ListBox genList = new ListBox();
53 ListBox sizeList = new ListBox();
54 Image result = new Image("");//http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=http://google.com");
55 Grid topPanel = new Grid(5, 1);
56 GeneratorSource selectedGenerator = null;
57 private Button generateButton;
58 VerticalPanel rightPanel = new VerticalPanel();
59 TextBox urlResult = new TextBox();
60 HTML downloadText = new HTML("<a href=\"\" id=\"downloadlink\" >Download</a> or embed with this URL:");
61 //Element errorElement = null;
63 public void onModuleLoad() {
66 HorizontalPanel mainPanel = new HorizontalPanel();
68 topPanel.getElement().setId("leftpanel");
69 Widget leftPanel = topPanel;
71 mainPanel.add(leftPanel);
73 SimplePanel div = new SimplePanel();
74 SimplePanel div2 = new SimplePanel();
76 div2.getElement().setId("innerresult");
78 div.getElement().setId("imageresult");
80 urlResult.getElement().setId("urlresult");
81 downloadText.getElement().setId("downloadText");
83 rightPanel.add(downloadText);
84 rightPanel.add(urlResult);
85 mainPanel.add(rightPanel);
86 mainPanel.getElement().setId("mainpanel");
87 RootPanel.get("ui").add(mainPanel);
88 //RootPanel.get().add(output);
89 //output.setHeight("200px");
90 //output.setWidth("500px");
95 private void setWidget(int id) {
96 if (id >= 0 && id < generators.size()) {
97 topPanel.setWidget(1, 0, generators.get(id).getWidget());
98 genList.setSelectedIndex(id);
99 selectedGenerator = generators.get(id);
102 genList.setFocus(false);
103 selectedGenerator.setFocus();
107 private void loadGenerators() {
108 generators.add(new CalendarEventGenerator(changeListener, keyPressHandler));
109 generators.add(new ContactInfoGenerator(changeListener, keyPressHandler));
110 generators.add(new EmailGenerator(changeListener, keyPressHandler));
111 generators.add(new GeoLocationGenerator(changeListener, keyPressHandler));
112 generators.add(new PhoneNumberGenerator(changeListener, keyPressHandler));
113 generators.add(new SmsAddressGenerator(changeListener, keyPressHandler));
114 generators.add(new TextGenerator(changeListener));
115 generators.add(new UrlGenerator(changeListener, keyPressHandler));
118 public void setupLeftPanel() {
119 topPanel.setHTML(2, 0,
120 "<span id=\"errorMessageID\" class=\""+StylesDefs.ERROR_MESSAGE+"\"></span>");
122 // fills up the list of generators
123 for(GeneratorSource generator: generators) {
124 genList.addItem(generator.getName());
125 setGridStyle(generator.getWidget());
128 sizeList.addItem("S", "120");
129 sizeList.addItem("M", "230");
130 sizeList.addItem("L", "350");
131 sizeList.setSelectedIndex(2);
133 // updates the second row of the table with the content of the selected
135 genList.addChangeListener(new ChangeListener() {
136 public void onChange(Widget sender) {
137 int i = genList.getSelectedIndex();
142 // grid for the generator picker
143 Grid selectionTable = new Grid(1, 2);
144 selectionTable.setText(0, 0, "Contents");
145 selectionTable.setWidget(0, 1, genList);
146 setGridStyle(selectionTable);
148 topPanel.setWidget(0, 0, selectionTable);
150 // grid for the generate button
151 Grid generateGrid = new Grid(1, 2);
152 setGridStyle(generateGrid);
154 generateButton = new Button("Generate →");
155 generateButton.addClickListener(new ClickListener() {
156 public void onClick(Widget sender) {
160 generateGrid.setWidget(0,1,generateButton);
161 topPanel.setWidget(4, 0, generateGrid);
163 Grid sizeTable = new Grid(1, 2);
164 sizeTable.setText(0, 0, "Barcode size");
165 sizeTable.setWidget(0, 1, sizeList);
166 setGridStyle(sizeTable);
167 topPanel.setWidget(3, 0, sizeTable);
170 protected void setGridStyle(Grid grid) {
171 grid.getColumnFormatter().addStyleName(0, "firstColumn");
172 grid.getColumnFormatter().addStyleName(1, "secondColumn");
173 CellFormatter cellFormatter = grid.getCellFormatter();
174 for(int i = 0; i < grid.getRowCount(); ++i) {
175 cellFormatter.addStyleName(i, 0, "firstColumn");
176 cellFormatter.addStyleName(i, 1, "secondColumn");
180 protected String getUrl(int sizeX, int sizeY, String content) {
181 StringBuilder result = new StringBuilder();
182 result.append("http://chart.apis.google.com/chart?cht=qr&chs=");
183 result.append(sizeX).append('x').append(sizeY);
184 result.append("&chl=");
185 result.append(URL.encodeComponent(content));
186 return result.toString();
189 private void generate() {
191 String text = selectedGenerator.getText();
193 int size = Integer.parseInt(sizeList
194 .getValue(sizeList.getSelectedIndex()));
195 String url = getUrl(size, size, text);
197 result.setVisible(true);
198 urlResult.setText(url);
199 urlResult.setVisible(true);
200 Element linkElement = DOM.getElementById("downloadlink");
201 linkElement.setAttribute("href", url);
202 downloadText.setVisible(true);
203 } catch (GeneratorException ex) {
205 String error = ex.getMessage();
206 showErrorMessage(error);
210 public void invalidateBarcode() {
211 result.setVisible(false);
212 urlResult.setText("");
213 urlResult.setVisible(false);
214 Element linkElement = DOM.getElementById("downloadlink");
215 linkElement.setAttribute("href", "");
216 downloadText.setVisible(false);
219 public void showErrorMessage(String error) {
220 Element errorElement = DOM.getElementById("errorMessageID");
221 errorElement.setInnerHTML(error);
224 public void eraseErrorMessage() {
225 Element errorElement = DOM.getElementById("errorMessageID");
226 errorElement.setInnerHTML(" ");
229 public ChangeListener changeListener = new ChangeListener() {
230 public void onChange(Widget sender) {
232 selectedGenerator.validate(sender);
234 } catch (GeneratorException ex) {
235 String error = ex.getMessage();
236 showErrorMessage(error);
242 public KeyPressHandler keyPressHandler = new KeyPressHandler() {
244 public void onKeyPress(KeyPressEvent event) {
245 if (event.getCharCode() == '\n' || event.getCharCode() == '\r') {