/******************************************************************************* * Copyright 2014 Rafael Garcia Moreno. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.bladecoder.engineeditor.ui; import java.io.File; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer.Task; import com.bladecoder.engine.actions.Param; import com.bladecoder.engineeditor.Ctx; import com.bladecoder.engineeditor.common.EditorLogger; import com.bladecoder.engineeditor.common.Message; import com.bladecoder.engineeditor.ui.panels.EditDialog; import com.bladecoder.engineeditor.ui.panels.FileInputPanel; import com.bladecoder.engineeditor.ui.panels.InputPanel; import com.bladecoder.engineeditor.ui.panels.InputPanelFactory; public class CreateProjectDialog extends EditDialog { public static final String INFO = "A project folder with the proper structure will be created in the selected location."; private static final String ANDROID_SDK_PROP = "package.SDK"; private InputPanel projectName; private InputPanel pkg; private InputPanel spinePlugin; private FileInputPanel location; private FileInputPanel androidSdk; public CreateProjectDialog(Skin skin) { super("CREATE PROJECT", skin); setInfo(INFO); projectName = InputPanelFactory.createInputPanel(skin, "Project Name", "Set the name of the project", true); pkg = InputPanelFactory.createInputPanel(skin, "Package", "The package will be used as package ID in Android and IOS. The launchers will be in this package too.", Param.Type.STRING, true, "com.myadv.game"); spinePlugin = InputPanelFactory.createInputPanel(skin, "Spine animation support", "The game can use Spine animations, require Spine License to distribute the game. See http://www.esotericsoftware.com for more info.", Param.Type.BOOLEAN, true, "false"); location = new FileInputPanel(skin, "Location", "Select the folder location for the project", FileInputPanel.DialogType.DIRECTORY); androidSdk = new FileInputPanel(skin, "Android SDK", "Select the Android SDK folder to create the Android package. If empty, the ANDROID_HOME variable will be used.", FileInputPanel.DialogType.DIRECTORY, false); addInputPanel(projectName); addInputPanel(pkg); addInputPanel(location); addInputPanel(spinePlugin); addInputPanel(androidSdk); String sdkprop = Ctx.project.getEditorConfig().getProperty(ANDROID_SDK_PROP); if (sdkprop != null && new File(sdkprop).exists()) { androidSdk.setText(sdkprop); } // getStage().setKeyboardFocus(projectName.getField()); } @Override protected void ok() { try { Ctx.project.getEditorConfig().setProperty(ANDROID_SDK_PROP, androidSdk.getText()); Ctx.project.saveProject(); } catch (Exception ex) { String msg = ex.getClass().getSimpleName() + " - " + ex.getMessage(); Message.showMsgDialog(getStage(), "Error saving project", msg); } final Stage stage = getStage(); Message.showMsg(getStage(), "Creating project...", true); Timer.schedule(new Task() { @Override public void run() { createProject(stage); } },1); } private void createProject(Stage stage) { try { Ctx.project.createProject(location.getText(), projectName.getText(), pkg.getText(), androidSdk.getText(), Boolean.parseBoolean(spinePlugin.getText())); Message.showMsg(stage, "Project successfully created", 3); } catch (Exception e) { String msg = e.getClass().getSimpleName() + " - " + e.getMessage(); Message.showMsgDialog(stage, "Error creating project", msg); EditorLogger.error(msg, e); return; } } @Override protected boolean validateFields() { boolean isOk = true; if (!projectName.validateField()) { isOk = false; } if (!pkg.validateField()) { isOk = false; } if (location.getFile() != null) { location.setError(false); } else { location.setError(true); isOk = false; } // if (System.getenv("ANDROID_HOME") == null && androidSdk.getFile() == null) { // androidSdk.setError(true); // isOk = false; // } else { // androidSdk.setError(false); // } return isOk; } }