/*******************************************************************************
* 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.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.bladecoder.engineeditor.Ctx;
import com.bladecoder.engineeditor.common.DesktopUtils;
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 ResolutionList extends EditList<String> {
public ResolutionList(Skin skin) {
super(skin);
toolbar.hideCopyPaste();
list.setCellRenderer(listCellRenderer);
list.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
int pos = list.getSelectedIndex();
toolbar.disableEdit(pos == -1);
}
});
Ctx.project.addPropertyChangeListener(Project.NOTIFY_PROJECT_LOADED,
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent arg0) {
toolbar.disableCreate(Ctx.project.getProjectDir() == null);
addResolutions();
}
});
}
private void addResolutions() {
if (Ctx.project.getProjectDir() != null) {
list.getItems().clear();
ArrayList<String> tmp = new ArrayList<String>();
for (String scn : Ctx.project.getResolutions()) {
tmp.add(scn);
}
Collections.sort(tmp);
for (String s : tmp)
list.getItems().add(s);
if (list.getItems().size > 0) {
list.setSelectedIndex(0);
}
}
toolbar.disableCreate(Ctx.project.getProjectDir() == null);
}
@Override
public void create() {
CreateResolutionDialog dialog = new CreateResolutionDialog(skin);
dialog.show(getStage());
dialog.setListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
addResolutions();
}});
}
@Override
public void edit() {
}
@Override
public void delete() {
int index = list.getSelectedIndex();
String r = list.getItems().get(index);
if(r.equals("1")) {
Message.showMsg(getStage(),"Initial resolution cannot be deleted", 3);
return;
}
removeDir(Ctx.project.getProjectDir() + "/" + Project.IMAGE_PATH
+ "/" + r);
removeDir(Ctx.project.getProjectDir() + "/" + Project.UI_PATH + "/"
+ r);
removeDir(Ctx.project.getProjectDir() + "/" + Project.ATLASES_PATH
+ "/" + r);
addResolutions();
}
private void removeDir(String dir) {
try {
DesktopUtils.removeDir(dir);
} catch (IOException e) {
String msg = "Something went wrong while deleting the resolution.\n\n"
+ e.getClass().getSimpleName() + " - " + e.getMessage();
Message.showMsg(getStage(),msg, 2);
EditorLogger.printStackTrace(e);
}
}
@Override
protected void copy() {
}
@Override
protected void paste() {
}
// -------------------------------------------------------------------------
// ListCellRenderer
// -------------------------------------------------------------------------
private static final CellRenderer<String> listCellRenderer = new CellRenderer<String>() {
@Override
protected String getCellTitle(String r) {
return r;
}
};
}