add interface ListenerCollectionModel and use it in the OrderedListenerListModel

This commit is contained in:
OMGeeky
2025-06-21 17:40:18 +02:00
parent 6b049d3b7b
commit 979a7bc43f
3 changed files with 45 additions and 14 deletions

View File

@@ -0,0 +1,24 @@
package com.gpl.rpg.atcontentstudio.ui;
import java.util.Collection;
public interface ListenerCollectionModel<E> extends ListenerListModel<E> {
public Collection<E> getElements();
@Override
default int getSize() {
Collection<E> 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;
}
}

View File

@@ -24,4 +24,8 @@ public interface ListenerListModel<E> extends ListModel<E> {
default void removeListDataListener(ListDataListener l) { default void removeListDataListener(ListDataListener l) {
getListeners().remove(l); getListeners().remove(l);
} }
default void fireListChanged() {
notifyListeners(ListDataEvent.CONTENTS_CHANGED, 0, getSize() -1);
}
} }

View File

@@ -3,10 +3,11 @@ package com.gpl.rpg.atcontentstudio.ui;
import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener; import javax.swing.event.ListDataListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
public abstract class OrderedListenerListModel<S, E> implements ListenerListModel<E> { public abstract class OrderedListenerListModel<S, E> implements ListenerCollectionModel<E> {
protected S source; protected S source;
protected abstract List<E> getItems(); protected abstract List<E> getItems();
@@ -16,15 +17,9 @@ public abstract class OrderedListenerListModel<S, E> implements ListenerListMode
this.source = source; this.source = source;
} }
public List<ListDataListener> getListeners() {
return listeners;
}
@Override @Override
public int getSize() { public Collection<E> getElements(){
if (getItems() == null) return 0; return getItems();
return getItems().size();
} }
@Override @Override
@@ -33,6 +28,11 @@ public abstract class OrderedListenerListModel<S, E> implements ListenerListMode
return getItems().get(index); 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 addObject(E item) {addItem(item);}
public void addItem(E item) { public void addItem(E item) {
if (getItems() == null) { if (getItems() == null) {
@@ -40,14 +40,14 @@ public abstract class OrderedListenerListModel<S, E> implements ListenerListMode
} }
getItems().add(item); getItems().add(item);
int index = getItems().indexOf(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 removeObject(E item) {removeItem(item);}
public void removeItem(E item) { public void removeItem(E item) {
int index = getItems().indexOf(item); int index = getItems().indexOf(item);
getItems().remove(item); getItems().remove(item);
if (getItems().isEmpty()) { if (getSize() == 0) {
setItems(null); setItems(null);
} }
notifyListeners(ListDataEvent.INTERVAL_REMOVED, index, index); notifyListeners(ListDataEvent.INTERVAL_REMOVED, index, index);
@@ -64,9 +64,9 @@ public abstract class OrderedListenerListModel<S, E> implements ListenerListMode
private void moveUpOrDown(E item, int direction) { private void moveUpOrDown(E item, int direction) {
int index = getItems().indexOf(item); int index = getItems().indexOf(item);
E exchanged = getItems().get(index + direction); E exchanged = getElementAt(index + direction);
getItems().set(index, exchanged); setElementAt(index, exchanged);
getItems().set(index + direction, item); setElementAt(index + direction, item);
notifyListeners(ListDataEvent.CONTENTS_CHANGED, index + direction, index); notifyListeners(ListDataEvent.CONTENTS_CHANGED, index + direction, index);
} }
@@ -77,4 +77,7 @@ public abstract class OrderedListenerListModel<S, E> implements ListenerListMode
} }
private List<ListDataListener> listeners = new CopyOnWriteArrayList<ListDataListener>(); private List<ListDataListener> listeners = new CopyOnWriteArrayList<ListDataListener>();
public List<ListDataListener> getListeners() {
return listeners;
}
} }