diff --git a/src/com/gpl/rpg/atcontentstudio/ui/ListenerCollectionModel.java b/src/com/gpl/rpg/atcontentstudio/ui/ListenerCollectionModel.java new file mode 100644 index 0000000..bc6b3d4 --- /dev/null +++ b/src/com/gpl/rpg/atcontentstudio/ui/ListenerCollectionModel.java @@ -0,0 +1,24 @@ +package com.gpl.rpg.atcontentstudio.ui; + +import java.util.Collection; + +public interface ListenerCollectionModel extends ListenerListModel { + public Collection getElements(); + + @Override + default int getSize() { + Collection elements = getElements(); + if (elements == null) return 0; + return elements.size(); + } + + @Override + default E getElementAt(int index) { + for (E obj : getElements()) { + if (index == 0) return obj; + index --; + } + return null; + } + +} diff --git a/src/com/gpl/rpg/atcontentstudio/ui/ListenerListModel.java b/src/com/gpl/rpg/atcontentstudio/ui/ListenerListModel.java index 7a6f5f6..9752cae 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/ListenerListModel.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/ListenerListModel.java @@ -24,4 +24,8 @@ public interface ListenerListModel extends ListModel { default void removeListDataListener(ListDataListener l) { getListeners().remove(l); } + + default void fireListChanged() { + notifyListeners(ListDataEvent.CONTENTS_CHANGED, 0, getSize() -1); + } } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/OrderedListenerListModel.java b/src/com/gpl/rpg/atcontentstudio/ui/OrderedListenerListModel.java index e4ceeee..32f6289 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/OrderedListenerListModel.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/OrderedListenerListModel.java @@ -3,10 +3,11 @@ package com.gpl.rpg.atcontentstudio.ui; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -public abstract class OrderedListenerListModel implements ListenerListModel { +public abstract class OrderedListenerListModel implements ListenerCollectionModel { protected S source; protected abstract List getItems(); @@ -16,15 +17,9 @@ public abstract class OrderedListenerListModel implements ListenerListMode this.source = source; } - public List getListeners() { - return listeners; - } - - @Override - public int getSize() { - if (getItems() == null) return 0; - return getItems().size(); + public Collection getElements(){ + return getItems(); } @Override @@ -33,6 +28,11 @@ public abstract class OrderedListenerListModel implements ListenerListMode return getItems().get(index); } + public E setElementAt(int index, E value) { + if (getItems() == null) return null; + return getItems().set(index, value); + } + public void addObject(E item) {addItem(item);} public void addItem(E item) { if (getItems() == null) { @@ -40,14 +40,14 @@ public abstract class OrderedListenerListModel implements ListenerListMode } getItems().add(item); int index = getItems().indexOf(item); - notifyListeners( ListDataEvent.INTERVAL_ADDED, index, index); + notifyListeners(ListDataEvent.INTERVAL_ADDED, index, index); } public void removeObject(E item) {removeItem(item);} public void removeItem(E item) { int index = getItems().indexOf(item); getItems().remove(item); - if (getItems().isEmpty()) { + if (getSize() == 0) { setItems(null); } notifyListeners(ListDataEvent.INTERVAL_REMOVED, index, index); @@ -64,9 +64,9 @@ public abstract class OrderedListenerListModel implements ListenerListMode private void moveUpOrDown(E item, int direction) { int index = getItems().indexOf(item); - E exchanged = getItems().get(index + direction); - getItems().set(index, exchanged); - getItems().set(index + direction, item); + E exchanged = getElementAt(index + direction); + setElementAt(index, exchanged); + setElementAt(index + direction, item); notifyListeners(ListDataEvent.CONTENTS_CHANGED, index + direction, index); } @@ -77,4 +77,7 @@ public abstract class OrderedListenerListModel implements ListenerListMode } private List listeners = new CopyOnWriteArrayList(); + public List getListeners() { + return listeners; + } }