Files
ATCS/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java
Zukero 940996aa30 Some refactoring. Replaced all "listeners" list by instances of
CopyOnWriteArrayList, to allow listeners to unregister themselves due to
an event while preventing ConcurrentModificationExceptions.
Modified all GameDataElement.elementChanged concrete implementation to
remove the backlink from the oldOne.An element pointed by an altered
element will not show the game source element in its backlink list
anymore.
2017-03-02 13:53:24 +01:00

219 lines
10 KiB
Java

package com.gpl.rpg.atcontentstudio.ui.tools;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import com.gpl.rpg.atcontentstudio.model.Project;
import com.gpl.rpg.atcontentstudio.model.gamedata.Item;
import com.gpl.rpg.atcontentstudio.model.gamedata.ItemCategory;
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
public class ItemsTableView extends ElementTableView {
private static final long serialVersionUID = 1474255176349837609L;
public ItemsTableView(Project proj) {
super(new ItemsTableModel(proj), "Compare "+proj.getItemCountIncludingAltered()+" items.", new ImageIcon(DefaultIcons.getItemIcon()));
}
private static class ItemsTableModel implements TableModel {
Project proj;
public ItemsTableModel(Project proj) {
this.proj = proj;
}
@Override
public int getRowCount() {
// return proj.getItemCount() + 1;
return proj.getItemCountIncludingAltered();
}
@Override
public int getColumnCount() {
return 33;
}
@Override
public String getColumnName(int columnIndex) {
switch (columnIndex) {
case 0: return "Icon"; //Icon
case 1: return "ID"; //ID
case 2: return "Name"; //Name
case 3: return "Folder type"; //Source type (created, altered, source)
case 4: return "Use type"; //Use type ("none", "use", or equip slot name).
case 5: return "Category"; //Category id.
case 6: return "DisplayType"; //Display type (ordinary, rare, extraordinary...)
case 7: return "Manually set price ?"; //Has manual price
case 8: return "Price"; //Price
case 9: return "On use/hit - HP min";
case 10: return "On use/hit - HP max";
case 11: return "On use/hit - AP min";
case 12: return "On use/hit - AP max";
case 13: return "On use/hit - # conditions";
case 14: return "On kill - HP min";
case 15: return "On kill - HP max";
case 16: return "On kill - AP min";
case 17: return "On kill - AP max";
case 18: return "On kill - # conditions";
case 19: return "AD min";
case 20: return "AD max";
case 21: return "Max HP";
case 22: return "Max AP";
case 23: return "Attack cost";
case 24: return "AC";
case 25: return "BC";
case 26: return "DR";
case 27: return "CS";
case 28: return "CM";
case 29: return "Move cost";
case 30: return "Use cost";
case 31: return "Reequip cost";
case 32: return "# conditions";
}
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
// return String.class;
switch (columnIndex) {
case 0: return Icon.class; // Icon
case 1: return String.class; //ID
case 2: return String.class; //Name
case 3: return String.class; //Source type (created, altered, source)
case 4: return String.class; //Use type ("none", "use", or equip slot name).
case 5: return String.class; //Category id.
case 6: return String.class; //Display type (ordinary, rare, extraordinary...)
case 7: return Boolean.class; //Has manual price
case 8: return Integer.class; //Price
case 9: return Integer.class;//"On use/hit - HP min";
case 10: return Integer.class;//"On use/hit - HP max";
case 11: return Integer.class;//"On use/hit - AP min";
case 12: return Integer.class;//"On use/hit - AP max";
case 13: return Integer.class;//"On use/hit - # conditions";
case 14: return Integer.class;//"On kill - HP min";
case 15: return Integer.class;//"On kill - HP max";
case 16: return Integer.class;//"On kill - AP min";
case 17: return Integer.class;//"On kill - AP max";
case 18: return Integer.class;//"On kill - # conditions";
case 19: return Integer.class;//"AD min";
case 20: return Integer.class;//"AD max";
case 21: return Integer.class;//"Max HP";
case 22: return Integer.class;//"Max AP";
case 23: return Integer.class;//"Attack cost";
case 24: return Integer.class;//"AC";
case 25: return Integer.class;//"BC";
case 26: return Integer.class;//"DR";
case 27: return Integer.class;//"CS";
case 28: return Double.class;//"CM";
case 29: return Integer.class;//"Move cost";
case 30: return Integer.class;//"Use cost";
case 31: return Integer.class;//"Reequip cost";
case 32: return Integer.class;//"# conditions";
}
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// if (rowIndex == 0) {
// return getColumnName(columnIndex);
// }
// Item item = proj.getItem(rowIndex - 1);
Item item = proj.getItemIncludingAltered(rowIndex);
boolean canUse = item.category != null && item.category.action_type == ItemCategory.ActionType.use;
boolean canEquip = item.category != null && item.category.action_type == ItemCategory.ActionType.equip;
switch (columnIndex) {
case 0: return new ImageIcon(item.getIcon()); //Icon
case 1: return item.id; //ID
case 2: return item.name; //Name
case 3: return item.getDataType().toString(); //Source type (created, altered, source)
case 4: //Use type ("none", "use", or equip slot name).
if (item.category == null) return "none";
if (item.category.action_type == null) return "none";
if (item.category.action_type != ItemCategory.ActionType.equip) return item.category.action_type.toString();
return item.category.slot.toString();
case 5: return item.category != null ? item.category.id : (item.category_id != null ? item.category_id : null ); //Category id.
case 6: return item.display_type != null ? item.display_type.toString() : null; //Category id.
case 7: return item.has_manual_price == null ? false : (item.has_manual_price == 1); //Has manual price
case 8: //Price
if (item.has_manual_price == null || item.has_manual_price != 1) return item.computePrice();
return item.base_market_cost;
case 9: return canUse ? (item.kill_effect != null ? item.kill_effect.hp_boost_min : null) : (item.hit_effect != null ? item.hit_effect.hp_boost_min : null);//"On use/hit - HP min";
case 10: return canUse ? (item.kill_effect != null ? item.kill_effect.hp_boost_max : null) : (item.hit_effect != null ? item.hit_effect.hp_boost_max : null);//"On use/hit - HP max";
case 11: return canUse ? (item.kill_effect != null ? item.kill_effect.ap_boost_min : null) : (item.hit_effect != null ? item.hit_effect.ap_boost_min : null);//"On use/hit - AP min";
case 12: return canUse ? (item.kill_effect != null ? item.kill_effect.ap_boost_max : null) : (item.hit_effect != null ? item.hit_effect.ap_boost_max : null);//"On use/hit - AP max";
case 13: //"On use/hit - # conditions";
if (canUse) {
if (item.kill_effect != null && item.kill_effect.conditions_source != null) {
return item.kill_effect.conditions_source.size();
}
return 0;
} else if (item.hit_effect != null) {
int val = 0;
if (item.hit_effect.conditions_source != null) {
val += item.hit_effect.conditions_source.size();
}
if (item.hit_effect.conditions_target != null) {
val += item.hit_effect.conditions_target.size();
}
return val;
}
return null;
case 14: return (!canUse && item.kill_effect != null) ? item.kill_effect.hp_boost_min : null;//"On kill - HP min";
case 15: return (!canUse && item.kill_effect != null) ? item.kill_effect.hp_boost_max : null;//"On kill - HP max";
case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min";
case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max";
case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions";
case 19: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min";
case 20: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max";
case 21: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP";
case 22: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP";
case 23: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 24: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 25: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 26: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 27: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 32: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//not editable.
}
List<TableModelListener> listeners = new CopyOnWriteArrayList<TableModelListener>();
@Override
public void addTableModelListener(TableModelListener l) {
listeners.add(l);
}
@Override
public void removeTableModelListener(TableModelListener l) {
listeners.remove(l);
}
}
}