// -*- mode: java; c-basic-offset: 2; -*-
// Copyright 2009-2011 Google, All Rights reserved
// Copyright 2011-2012 MIT, All rights reserved
// Released under the Apache License, Version 2.0
// http://www.apache.org/licenses/LICENSE-2.0
package com.google.appinventor.client.wizards.youngandroid;
import static com.google.appinventor.client.Ode.MESSAGES;
import com.google.appinventor.client.GalleryClient;
import com.google.appinventor.client.widgets.LabeledTextBox;
import com.google.appinventor.client.wizards.NewProjectWizard;
import com.google.appinventor.shared.rpc.project.GalleryApp;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* Wizard for creating new Young Android projects.
*
* @author blu2@dons.usfca.edu (Bin Lu)
*/
public final class RemixedYoungAndroidProjectWizard extends NewProjectWizard { //implements GalleryRequestListener
GalleryClient gallery = null;
Button actionButton;
// UI element for project name
private LabeledTextBox projectNameTextBox;
/**
* Creates a new YoungAndroid project wizard.
*/
public RemixedYoungAndroidProjectWizard(final GalleryApp app, final Button actionButton) {
super(MESSAGES.remixedYoungAndroidProjectWizardCaption());
this.actionButton = actionButton;
gallery = GalleryClient.getInstance();
// Initialize the UI
setStylePrimaryName("ode-DialogBox");
projectNameTextBox = new LabeledTextBox(MESSAGES.projectNameLabel());
projectNameTextBox.setText(replaceNonTextChar(app.getTitle()));
projectNameTextBox.getTextBox().addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
int keyCode = event.getNativeKeyCode();
if (keyCode == KeyCodes.KEY_ENTER) {
handleOkClick();
} else if (keyCode == KeyCodes.KEY_ESCAPE) {
handleCancelClick();
}
}
});
VerticalPanel page = new VerticalPanel();
page.add(projectNameTextBox);
addPage(page);
// Create finish command (create a new Young Android project)
initFinishCommand(new Command() {
@Override
public void execute() {
String projectName = projectNameTextBox.getText();
final PopupPanel popup = new PopupPanel(true);
final FlowPanel content = new FlowPanel();
popup.setWidget(content);
Label loading = new Label();
loading.setText(MESSAGES.loadingAppIndicatorText());
// loading indicator will be hided or forced to be hided in gallery.loadSourceFile
content.add(loading);
popup.center();
boolean success = gallery.loadSourceFile(app, projectNameTextBox.getText(), popup);
if(success){
gallery.appWasDownloaded(app.getGalleryAppId(), app.getDeveloperId());
}
else {
show();
center();
return;
}
}
});
}
@Override
public void show() {
super.show();
// Wizard size (having it resize between page changes is quite annoying)
int width = 320;
int height = 40;
this.center();
setPixelSize(width, height);
super.setPagePanelHeight(40);
DeferredCommand.addCommand(new Command() {
public void execute() {
projectNameTextBox.setFocus(true);
projectNameTextBox.selectAll();
}
});
}
/**
* Invoked immediately before closing the wizard.
*/
@Override
protected void onHide() {
actionButton.setEnabled(true);
}
private String replaceNonTextChar(String s){
return s.replaceAll("[^A-Za-z0-9]", "");
}
}