/******************************************************************************* * 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.IOException; import java.text.MessageFormat; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import org.xml.sax.SAXException; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.ChangeEvent; import com.bladecoder.engine.model.World; import com.bladecoder.engineeditor.Ctx; import com.bladecoder.engineeditor.common.EditorLogger; import com.bladecoder.engineeditor.common.Message; import com.bladecoder.engineeditor.model.Chapter; import com.bladecoder.engineeditor.ui.panels.EditDialog; import com.bladecoder.engineeditor.ui.panels.InputPanel; import com.bladecoder.engineeditor.ui.panels.InputPanelFactory; public class EditChapterDialog extends EditDialog { private Chapter doc; private InputPanel inputId; private String previousId = null; private String newId = null; private ChangeListener listener; public EditChapterDialog(Skin skin, Chapter doc, String chapter) { super("", skin); this.doc = doc; inputId = InputPanelFactory.createInputPanel(skin, "Chapter ID", "The id of the chapter", true); setInfo("An adventure game is composed of chapters. Chapters contains scenes."); addInputPanel(inputId); if (chapter == null) { setTitle("CREATE CHAPTER"); } else { setTitle(MessageFormat.format("EDIT CHAPTER ''{0}''", chapter)); inputId.setText(chapter); } previousId = chapter; } private void create() { try { newId = doc.createChapter(inputId.getText()); } catch (TransformerException | ParserConfigurationException | IOException e) { String msg = "Something went wrong while creating the chapter.\n\n" + e.getClass().getSimpleName() + " - " + e.getMessage(); Message.showMsg(getStage(), msg, 2); EditorLogger.printStackTrace(e); } } private void renameChapter() { if (previousId != null && !previousId.equals(newId)) { try { // save selected chapter if renamed chapter is the selected chapter if(previousId.equals(Ctx.project.getChapter())) { Ctx.project.getChapter().save(); } doc.renameChapter(previousId, newId); // Reload chapter if renamed chapter is the selected chapter if(previousId.equals(Ctx.project.getChapter())) { Ctx.project.loadChapter(newId); } // sets the init chapter if(previousId.equals(doc.getInitChapter())) { World.getInstance().setInitChapter(newId); } Ctx.project.saveProject(); } catch (TransformerException | ParserConfigurationException | SAXException | IOException e1) { String msg = "Something went wrong while renaming the chapter.\n\n" + e1.getClass().getSimpleName() + " - " + e1.getMessage(); Message.showMsg(getStage(), msg, 3); EditorLogger.printStackTrace(e1); } } } @Override protected boolean validateFields() { return inputId.validateField(); } @Override protected void ok() { if (previousId == null) { create(); } else { newId = inputId.getText(); renameChapter(); } if(listener != null) listener.changed(new ChangeEvent(), this); } public void setListener(ChangeListener l) { listener = l; } String getNewId() { return newId; } }