/*
* This file is part of the OSMembrane project.
* More informations under www.osmembrane.de
*
* The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0.
* for more details about the license see http://www.osmembrane.de/license/
*
* Source: $HeadURL$ ($Revision$)
* Last changed: $Date$
*/
package de.osmembrane.model.statusbar;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import de.osmembrane.resources.Constants;
/**
* Implementation of {@link AbstractStatusbar}.
*
* @author jakob_jarosch
*/
public class Statusbar extends AbstractStatusbar {
private List<StatusbarEntry> entries = new ArrayList<StatusbarEntry>();
@Override
public StatusbarEntry[] getStatusbarEntries() {
return entries.toArray(new StatusbarEntry[entries.size()]);
}
@Override
public void addStatusbarEntry(StatusbarEntry entry) {
entry.addObserver(this);
entries.add(entry);
removeUnusedEntries();
}
@Override
public boolean removeStatusbarEntry(StatusbarEntry entry) {
entry.deleteObservers();
return false;
}
@Override
public void update(Observable o, Object arg) {
if (o instanceof StatusbarEntry) {
setChanged();
notifyObservers(new StatusbarObserverObject((StatusbarEntry) o));
}
}
/**
* Removes all entries, which are unused an exceed the statusbar item limit.
*/
private void removeUnusedEntries() {
boolean removedOne = true;
while (entries.size() > Constants.MAXIMUM_STATUSBAR_ENTRIES
&& removedOne) {
removedOne = false;
for (int i = (entries.size() - 1); i > 1; i++) {
StatusbarEntry entry = entries.get(i);
if (!entry.isProgressbarUsed() || entry.getProgress() >= 1.0) {
entries.remove(i);
removedOne = true;
break;
}
}
}
}
}