mirror of
https://github.com/OMGeeky/ATCS.git
synced 2025-12-27 14:58:55 +01:00
main changes are: - Modified marker (* character before name) goes up the project tree by marking all parents of a modified object as modified. - Impact management when changing an object's ID. Allows for some refactoring to occur, while marking the impacted elements as modified, or aven creating "altered" versions if imapcted element was only in game source.
163 lines
4.0 KiB
Java
163 lines
4.0 KiB
Java
package com.gpl.rpg.atcontentstudio.model.sprites;
|
|
|
|
import java.awt.Image;
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Enumeration;
|
|
import java.util.List;
|
|
|
|
import javax.swing.tree.TreeNode;
|
|
|
|
import com.gpl.rpg.atcontentstudio.model.GameSource;
|
|
import com.gpl.rpg.atcontentstudio.model.GameSource.Type;
|
|
import com.gpl.rpg.atcontentstudio.model.Project;
|
|
import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode;
|
|
import com.gpl.rpg.atcontentstudio.model.gamedata.GameDataSet;
|
|
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
|
|
|
|
public class SpriteSheetSet implements ProjectTreeNode {
|
|
|
|
public static final String DEFAULT_REL_PATH_IN_SOURCE = "res"+File.separator+"drawable"+File.separator;
|
|
public static final String DEFAULT_REL_PATH_IN_PROJECT = "spritesheets"+File.separator;
|
|
|
|
public File drawableFolder = null;
|
|
|
|
public transient List<Spritesheet> spritesheets;
|
|
|
|
public GameSource parent;
|
|
|
|
public SpriteSheetSet(GameSource source) {
|
|
this.parent = source;
|
|
if (source.type == GameSource.Type.source) this.drawableFolder = new File(source.baseFolder, DEFAULT_REL_PATH_IN_SOURCE);
|
|
else if (source.type == GameSource.Type.created | source.type == GameSource.Type.altered) {
|
|
this.drawableFolder = new File(source.baseFolder, DEFAULT_REL_PATH_IN_PROJECT);
|
|
if (!this.drawableFolder.exists()) {
|
|
this.drawableFolder.mkdirs();
|
|
}
|
|
}
|
|
spritesheets = new ArrayList<Spritesheet>();
|
|
if (this.drawableFolder != null) {
|
|
for (File f : this.drawableFolder.listFiles()) {
|
|
if (f.getName().endsWith(".png") || f.getName().endsWith(".PNG")) {
|
|
spritesheets.add(new Spritesheet(this, f));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Enumeration<Spritesheet> children() {
|
|
return Collections.enumeration(spritesheets);
|
|
}
|
|
@Override
|
|
public boolean getAllowsChildren() {
|
|
return true;
|
|
}
|
|
@Override
|
|
public TreeNode getChildAt(int arg0) {
|
|
return spritesheets.get(arg0);
|
|
}
|
|
@Override
|
|
public int getChildCount() {
|
|
return spritesheets.size();
|
|
}
|
|
@Override
|
|
public int getIndex(TreeNode arg0) {
|
|
return spritesheets.indexOf(arg0);
|
|
}
|
|
@Override
|
|
public TreeNode getParent() {
|
|
return parent;
|
|
}
|
|
@Override
|
|
public boolean isLeaf() {
|
|
return false;
|
|
}
|
|
@Override
|
|
public void childrenAdded(List<ProjectTreeNode> path) {
|
|
path.add(0, this);
|
|
parent.childrenAdded(path);
|
|
}
|
|
@Override
|
|
public void childrenChanged(List<ProjectTreeNode> path) {
|
|
path.add(0, this);
|
|
parent.childrenChanged(path);
|
|
}
|
|
@Override
|
|
public void childrenRemoved(List<ProjectTreeNode> path) {
|
|
if (path.size() == 1 && this.getChildCount() == 1) {
|
|
childrenRemoved(new ArrayList<ProjectTreeNode>());
|
|
} else {
|
|
path.add(0, this);
|
|
parent.childrenRemoved(path);
|
|
}
|
|
}
|
|
@Override
|
|
public void notifyCreated() {
|
|
childrenAdded(new ArrayList<ProjectTreeNode>());
|
|
for (Spritesheet s : spritesheets) {
|
|
s.notifyCreated();
|
|
}
|
|
}
|
|
@Override
|
|
public String getDesc() {
|
|
return (needsSaving() ? "*" : "")+"Spritesheets";
|
|
}
|
|
|
|
@Override
|
|
public Project getProject() {
|
|
return parent.getProject();
|
|
}
|
|
|
|
@Override
|
|
public Image getIcon() {
|
|
return getOpenIcon();
|
|
}
|
|
@Override
|
|
public Image getClosedIcon() {
|
|
return DefaultIcons.getSpriteClosedIcon();
|
|
}
|
|
@Override
|
|
public Image getLeafIcon() {
|
|
return DefaultIcons.getSpriteClosedIcon();
|
|
}
|
|
@Override
|
|
public Image getOpenIcon() {
|
|
return DefaultIcons.getSpriteOpenIcon();
|
|
}
|
|
|
|
@Override
|
|
public GameDataSet getDataSet() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Type getDataType() {
|
|
return parent.getDataType();
|
|
}
|
|
|
|
@Override
|
|
public boolean isEmpty() {
|
|
return spritesheets.isEmpty();
|
|
}
|
|
|
|
public Spritesheet getSpritesheet(String id) {
|
|
if (spritesheets == null) return null;
|
|
for (Spritesheet sheet : spritesheets) {
|
|
if (id.equals(sheet.id)){
|
|
return sheet;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public boolean needsSaving() {
|
|
for (ProjectTreeNode node : spritesheets) {
|
|
if (node.needsSaving()) return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|