/*******************************************************************************
* 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.util.Comparator;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
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.Project;
import com.bladecoder.engineeditor.ui.panels.CellRenderer;
import com.bladecoder.engineeditor.ui.panels.EditList;
public class ChapterList extends EditList<String> {
private ImageButton initBtn;
public ChapterList(Skin skin) {
super(skin);
list.setCellRenderer(listCellRenderer);
initBtn = new ImageButton(skin);
toolbar.addToolBarButton(initBtn, "ic_check", "Set init chapter",
"Set init chapter");
initBtn.setDisabled(false);
toolbar.hideCopyPaste();
initBtn.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
setDefault();
}
});
}
private void setDefault() {
String e = list.getSelected();
if (e == null)
return;
World.getInstance().setInitChapter(e);
Ctx.project.setModified();
}
@Override
protected void delete() {
int pos = list.getSelectedIndex();
if (pos == -1)
return;
if (list.getItems().size < 2) {
String msg = "The chapter will not be deleted, at least one chapter must exists";
Message.showMsg(getStage(), msg, 4);
return;
}
String e = list.getItems().removeIndex(pos);
if (e.equals(Ctx.project.getChapter().getInitChapter())) {
World.getInstance().setInitChapter(list.getItems().get(0));
Ctx.project.setModified();
}
try {
Ctx.project.getChapter().deleteChapter(e);
} catch (Exception ex) {
String msg = "Something went wrong.\n\n"
+ ex.getClass().getSimpleName() + " - " + ex.getMessage();
Message.showMsgDialog(getStage(), "Error deleting chapter", msg);
EditorLogger.printStackTrace(ex);
}
list.setSelectedIndex(0);
Ctx.project.notifyPropertyChange(Project.CHAPTER_PROPERTY);
}
@Override
protected void create() {
EditChapterDialog dialog = new EditChapterDialog(skin, Ctx.project.getChapter(), null);
dialog.show(getStage());
dialog.setListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
String e = ((EditChapterDialog) actor).getNewId();
addItem(e);
int i = getItems().indexOf(e, true);
if (i != -1)
list.setSelectedIndex(i);
list.invalidateHierarchy();
Ctx.project.notifyPropertyChange(Project.CHAPTER_PROPERTY);
}
});
}
@Override
protected void edit() {
String e = list.getSelected();
if (e == null)
return;
EditChapterDialog dialog = new EditChapterDialog(skin, Ctx.project.getChapter(), e);
dialog.show(getStage());
dialog.setListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
String e = ((EditChapterDialog) actor).getNewId();
list.getItems().removeIndex(list.getSelectedIndex());
list.getItems().add(e);
list.setSelectedIndex(list.getItems().indexOf(e, true));
Ctx.project.notifyPropertyChange(Project.CHAPTER_PROPERTY);
}
});
}
@Override
protected void copy() {
}
@Override
protected void paste() {
}
public void addElements() {
list.getItems().clear();
list.getSelection().clear();
toolbar.disableCreate(false);
String nl[] = Ctx.project.getChapter().getChapters();
for (int i = 0; i < nl.length; i++) {
addItem(nl[i]);
}
if (getItems().size > 0)
list.setSelectedIndex(0);
toolbar.disableEdit(list.getSelectedIndex() < 0);
list.getItems().sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
invalidateHierarchy();
}
// -------------------------------------------------------------------------
// ListCellRenderer
// -------------------------------------------------------------------------
private final CellRenderer<String> listCellRenderer = new CellRenderer<String>() {
@Override
protected String getCellTitle(String e) {
String id = e;
String init = World.getInstance().getInitChapter();
if (init.equals(id))
id += " <init>";
return id;
}
};
}