package logbook.gui;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import logbook.config.bean.TableConfigBean;
import logbook.constants.AppConstants;
import logbook.data.Data;
import logbook.data.DataType;
import logbook.dto.ShipFilterDto;
import logbook.gui.logic.CreateReportLogic;
import logbook.gui.logic.TableItemCreator;
import logbook.internal.LoggerHolder;
import logbook.scripting.TableItemCreatorProxy;
import logbook.util.ReportUtils;
import logbook.util.SwtUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
/**
* お風呂に入りたい艦娘
*
*/
public final class BathwaterTableDialog extends AbstractTableDialog {
/** ロガー */
private static final LoggerHolder LOG = new LoggerHolder(BathwaterTableDialog.class);
/** フィルター */
private final ShipFilterDto filter = new ShipFilterDto();
/**
* Create the dialog.
* @param parent
* @param style
*/
public BathwaterTableDialog(Shell parent, MenuItem menuItem) {
super(parent, menuItem);
this.filter.notneedbath = false;
this.filter.groupMode = 0;
}
@Override
protected void createContents() {
final MenuItem resetVisibles = new MenuItem(this.opemenu, SWT.NONE);
resetVisibles.setText("表示・非表示をリセット");
resetVisibles.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
BathwaterTableDialog.this.getConfig().setVisibleColumn(
BathwaterTableDialog.this.getBathTableDefaultVisibles());
BathwaterTableDialog.this.restoreColumnWidth(false);
}
});
final MenuItem removecheck = new MenuItem(this.opemenu, SWT.CHECK);
removecheck.setText("遠征中の艦娘を外す");
removecheck.setSelection(!this.filter.mission);
removecheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
BathwaterTableDialog.this.filter.mission = !removecheck.getSelection();
BathwaterTableDialog.this.reloadTable();
}
});
}
@Override
protected String getTitleMain() {
return "お風呂に入りたい艦娘";
}
@Override
protected Point getSize() {
return SwtUtils.DPIAwareSize(new Point(600, 350));
}
@Override
protected String[] getTableHeader() {
return CreateReportLogic.getShipListHeader();
}
@Override
protected void updateTableBody() {
this.body = CreateReportLogic.getShipListBody(0, this.filter);
}
@Override
protected TableItemCreator getTableItemCreator() {
return TableItemCreatorProxy.get(AppConstants.SHIPTABLE_PREFIX);
}
@Override
protected int[] defaultColumnOrder() {
Map<String, Integer> colMap = AppConstants.BATHTABLE_COLUMN_MAP;
Map<Integer, Integer> orderMap = new TreeMap<>();
int[] order = new int[this.headerId.length];
for (int i = 0; i < order.length; ++i) {
if (colMap.containsKey(this.headerId[i])) {
orderMap.put(colMap.get(this.headerId[i]), 0);
}
}
int hiddenColIndex = 0;
for (Entry<Integer, Integer> entry : orderMap.entrySet()) {
entry.setValue(hiddenColIndex++);
}
if (hiddenColIndex != colMap.size()) {
LOG.get().warn("BATHTABLE_COLUMN_MAPに実際にはないカラムがあるようです");
}
for (int i = 0; i < order.length; ++i) {
if (colMap.containsKey(this.headerId[i])) {
order[orderMap.get(colMap.get(this.headerId[i]))] = i;
}
else {
order[hiddenColIndex++] = i;
}
}
return order;
}
@Override
protected TableConfigBean getDefaultTableConfig() {
TableConfigBean config = super.getDefaultTableConfig();
config.setVisibleColumn(this.getBathTableDefaultVisibles());
config.setColumnOrder(this.defaultColumnOrder());
return config;
}
private boolean[] getBathTableDefaultVisibles() {
Map<String, Integer> colMap = AppConstants.BATHTABLE_COLUMN_MAP;
boolean[] visibles = new boolean[this.headerId.length];
for (int i = 0; i < visibles.length; ++i) {
visibles[i] = colMap.containsKey(this.headerId[i]);
}
return visibles;
}
/**
* 更新する必要のあるデータ
*/
@SuppressWarnings("incomplete-switch")
@Override
public void update(DataType type, Data data) {
if (ReportUtils.isShipUpdate(type)) {
this.needsUpdate = true;
}
}
}