/*
* Copyright (c) 2014 tabletoptool.com team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* rptools.com team - initial implementation
* tabletoptool.com team - further development
*/
package com.t3.client.ui.lookuptable;
import java.awt.Image;
import java.awt.Paint;
import java.awt.datatransfer.Transferable;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.t3.client.AppStyle;
import com.t3.client.TabletopTool;
import com.t3.model.LookupTable;
import com.t3.swing.ImagePanelModel;
import com.t3.util.ImageManager;
public class LookupTableImagePanelModel implements ImagePanelModel {
private static final Logger log = Logger.getLogger(LookupTableImagePanelModel.class);
private final ImageObserver[] imageObservers;
public LookupTableImagePanelModel(ImageObserver... observers) {
imageObservers = observers;
}
@Override
public int getImageCount() {
return getFilteredLookupTable().size();
}
@Override
public Transferable getTransferable(int arg0) {
return null;
}
@Override
public Object getID(int index) {
if (index < 0) {
return null;
}
return getLookupTableIDList().get(index);
}
@Override
public Image getImage(Object id) {
LookupTable table = getFilteredLookupTable().get(id);
if (table == null) {
log.debug("LookupTableImagePanelModel.getImage(" + id + "): not resolved");
return ImageManager.BROKEN_IMAGE;
}
Image image = AppStyle.lookupTableDefaultImage;
if (table.getTableImage() != null) {
image = ImageManager.getImage(table.getTableImage(), imageObservers);
}
return image;
}
@Override
public Image getImage(int index) {
return getImage(getID(index));
}
@Override
public String getCaption(int index) {
if (index < 0) {
return "";
}
LookupTable table = getFilteredLookupTable().get(getID(index));
return table.getName();
}
@Override
public Paint getBackground(int arg0) {
return null;
}
@Override
public Image[] getDecorations(int arg0) {
return null;
}
private List<String> getLookupTableIDList() {
List<String> idList = new ArrayList<String>(getFilteredLookupTable().keySet());
Collections.sort(idList);
return idList;
}
/**Retrieves a Map containing tables and their names from campaign
* properties.
* @return Map<String, LookupTable> -- If the client belongs to a GM, all tables will
* be returned. If the client belongs to a player, only non-
* hidden tables will be returned.
*/
private Map<String, LookupTable> getFilteredLookupTable() {
if (TabletopTool.getPlayer() == null) {
return new HashMap<String, LookupTable>();
}
Map<String, LookupTable> lookupTables = new HashMap<String, LookupTable>(TabletopTool.getCampaign().getLookupTableMap());
if(!TabletopTool.getPlayer().isGM()) {
for(String nextKey : TabletopTool.getCampaign().getLookupTableMap().keySet()) {
if(!lookupTables.get(nextKey).getVisible()) {
lookupTables.remove(nextKey);
}
}
}
return lookupTables;
}
}