package logbook.gui;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import logbook.config.AppConfig;
import logbook.constants.AppConstants;
import logbook.data.context.GlobalContext;
import logbook.gui.logic.ColorManager;
import logbook.gui.logic.LayoutLogic;
import logbook.gui.logic.PushNotify;
import logbook.internal.EvaluateExp;
import logbook.internal.SeaExp;
import logbook.util.JIntellitypeWrapper;
import logbook.util.SwtUtils;
import logbook.util.SwtUtils.TableDragAndDropListener;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
/**
* 設定画面
*
*/
public final class ConfigDialog extends Dialog {
private final ApplicationMain main;
private Shell shell;
private Tree tree;
private Composite composite;
private ScrolledComposite scrolledComposite;
/**
* Create the dialog.
* @param main
*/
public ConfigDialog(ApplicationMain main) {
super(main.getShell(), SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.RESIZE);
this.main = main;
this.setText("設定");
}
/**
* Open the dialog.
*/
public void open() {
this.createContents();
this.shell.open();
this.shell.layout();
}
/**
* ペインを選択
* @param paneName
*/
public void selectPane(String paneName) {
for (TreeItem item : this.tree.getItems()) {
if (item.getText().equals(paneName)) {
this.tree.setSelection(item);
this.selectPane((Composite) item.getData());
break;
}
}
}
/**
* Create contents of the dialog.
*/
private void createContents() {
this.shell = new Shell(this.getParent(), this.getStyle());
this.shell.setSize(SwtUtils.DPIAwareSize(new Point(600, 400)));
this.shell.setText(this.getText());
this.shell.setLayout(new GridLayout(1, false));
SashForm sashForm = new SashForm(this.shell, SWT.SMOOTH);
sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
this.tree = new Tree(sashForm, SWT.BORDER);
this.tree.addSelectionListener(new TreeSelectionAdapter(this));
this.scrolledComposite = new ScrolledComposite(sashForm, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
this.scrolledComposite.setExpandHorizontal(true);
this.scrolledComposite.setExpandVertical(true);
this.composite = new Composite(this.scrolledComposite, SWT.NONE);
this.composite.setLayout(new GridLayout(1, false));
// ツリーメニュー
TreeItem connection = new TreeItem(this.tree, SWT.NONE);
connection.setText("通信");
Composite compositeConnection = new Composite(this.composite, SWT.NONE);
connection.setData(compositeConnection);
TreeItem systemroot = new TreeItem(this.tree, SWT.NONE);
systemroot.setText("一般");
Composite compositeSystem = new Composite(this.composite, SWT.NONE);
systemroot.setData(compositeSystem);
TreeItem reportTab = new TreeItem(this.tree, SWT.NONE);
reportTab.setText("報告書");
Composite compositeReport = new Composite(this.composite, SWT.NONE);
reportTab.setData(compositeReport);
TreeItem fleettab = new TreeItem(this.tree, SWT.NONE);
fleettab.setText("艦隊タブ");
Composite compositeFleetTab = new Composite(this.composite, SWT.NONE);
fleettab.setData(compositeFleetTab);
TreeItem fleetdetail = new TreeItem(fleettab, SWT.NONE);
fleetdetail.setText("詳細");
Composite compositeFleetDetail = new Composite(this.composite, SWT.NONE);
fleetdetail.setData(compositeFleetDetail);
TreeItem notify = new TreeItem(this.tree, SWT.NONE);
notify.setText("通知");
Composite compositeNotify = new Composite(this.composite, SWT.NONE);
notify.setData(compositeNotify);
TreeItem pushnotify = new TreeItem(this.tree, SWT.NONE);
pushnotify.setText("Push通知");
Composite compositePushNotify = new Composite(this.composite, SWT.NONE);
pushnotify.setData(compositePushNotify);
TreeItem capture = new TreeItem(this.tree, SWT.NONE);
capture.setText("キャプチャ");
Composite compositeCapture = new Composite(this.composite, SWT.NONE);
capture.setData(compositeCapture);
TreeItem chart = new TreeItem(this.tree, SWT.NONE);
chart.setText("資材チャート");
Composite compositeChart = new Composite(this.composite, SWT.NONE);
chart.setData(compositeChart);
TreeItem window = new TreeItem(this.tree, SWT.NONE);
window.setText("ウィンドウ");
Composite compositeWindow = new Composite(this.composite, SWT.NONE);
window.setData(compositeWindow);
TreeItem toolWin = new TreeItem(this.tree, SWT.NONE);
toolWin.setText("ツール");
Composite compositeToolWin = new Composite(this.composite, SWT.NONE);
toolWin.setData(compositeToolWin);
TreeItem development = new TreeItem(this.tree, SWT.NONE);
development.setText("Development");
Composite compositeDevelopment = new Composite(this.composite, SWT.NONE);
development.setData(compositeDevelopment);
fleettab.setExpanded(true);
// 通信
compositeConnection.setLayout(new GridLayout(4, false));
Label label = new Label(compositeConnection, SWT.NONE);
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label.setText("受信ポート");
final Text listenport = new Text(compositeConnection, SWT.BORDER);
GridData gdListenport = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gdListenport.widthHint = SwtUtils.DPIAwareWidth(90);
listenport.setLayoutData(gdListenport);
listenport.setText(Integer.toString(AppConfig.get().getListenPort()));
new Label(compositeConnection, SWT.NONE);
new Label(compositeConnection, SWT.NONE);
new Label(compositeConnection, SWT.NONE);
final Button onlyFromLocalhost = new Button(compositeConnection, SWT.CHECK);
onlyFromLocalhost.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
onlyFromLocalhost.setText("他のマシンからの要求は拒否する");
onlyFromLocalhost.setSelection(AppConfig.get().isAllowOnlyFromLocalhost());
onlyFromLocalhost.setToolTipText("セキュリティの観点から通常は拒否設定にしてください。\n" +
"他のマシンから接続するなど特別な事情がある場合のみOFFにします");
new Label(compositeConnection, SWT.NONE);
final Button closeOutsidePort = new Button(compositeConnection, SWT.CHECK);
closeOutsidePort.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
closeOutsidePort.setText("外向けポートは閉じておく");
closeOutsidePort.setSelection(AppConfig.get().isCloseOutsidePort());
closeOutsidePort
.setToolTipText("1.6.0からデフォルト動作になりました。ただし、専ブラなどでポートを開けておく必要がある場合があります。\n" +
"マシンが直接インターネットに接続されている場合、ポートを開けると若干セキュリティが低下します");
closeOutsidePort.setEnabled(onlyFromLocalhost.getSelection());
onlyFromLocalhost.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
closeOutsidePort.setEnabled(onlyFromLocalhost.getSelection());
}
});
final Button useProxyButton = new Button(compositeConnection, SWT.CHECK);
useProxyButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 4, 1));
useProxyButton.setText("接続にプロキシを使用する");
useProxyButton.setSelection(AppConfig.get().isUseProxy());
Label proxyHostLabel = new Label(compositeConnection, SWT.NONE);
proxyHostLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
proxyHostLabel.setText("サーバ:");
final Text proxyHostText = new Text(compositeConnection, SWT.BORDER);
GridData gdProxyHostText = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdProxyHostText.widthHint = SwtUtils.DPIAwareWidth(100);
proxyHostText.setLayoutData(gdProxyHostText);
proxyHostText.setText(AppConfig.get().getProxyHost());
Label proxyPortLabel = new Label(compositeConnection, SWT.NONE);
proxyPortLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
proxyPortLabel.setText("ポート:");
final Spinner proxyPortSpinner = new Spinner(compositeConnection, SWT.BORDER);
proxyPortSpinner.setMaximum(65535);
proxyPortSpinner.setMinimum(1);
proxyPortSpinner.setSelection(AppConfig.get().getProxyPort());
GridData gdProxyPortSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdProxyPortSpinner.widthHint = SwtUtils.DPIAwareWidth(55);
proxyPortSpinner.setLayoutData(gdProxyPortSpinner);
final Button sendDatabaseButton = new Button(compositeConnection, SWT.CHECK);
sendDatabaseButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 4, 1));
sendDatabaseButton.setText("艦これ統計データベースへデータを送信する");
sendDatabaseButton.setSelection(AppConfig.get().isSendDatabase());
Label accessKeyLabel = new Label(compositeConnection, SWT.NONE);
accessKeyLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
accessKeyLabel.setText("アクセスキー:");
final Text accessKeyText = new Text(compositeConnection, SWT.BORDER);
GridData gdAccessKeyText = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1);
// gdAccessKeyText.widthHint = SwtUtils.DPIAwareWidth(300);
accessKeyText.setLayoutData(gdAccessKeyText);
accessKeyText.setText(AppConfig.get().getAccessKey());
final Button databaseLogButton = new Button(compositeConnection, SWT.CHECK);
databaseLogButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 4, 1));
databaseLogButton.setText("データベースへの送信をログ出力する");
databaseLogButton.setSelection(AppConfig.get().isDatabaseSendLog());
// システム タブ
compositeSystem.setLayout(new GridLayout(3, false));
final Button hidewindow = new Button(compositeSystem, SWT.CHECK);
hidewindow.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
hidewindow.setText("最小化時にタスクトレイに格納");
hidewindow.setSelection(AppConfig.get().isHideWindow());
final Button closewindow = new Button(compositeSystem, SWT.CHECK);
closewindow.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
closewindow.setText("縮小表示の時は開いているウィンドウを閉じる");
closewindow.setSelection(AppConfig.get().isCloseWhenMinimized());
final Button ontop;
if (WindowBase.isCommonTopMostEnabled()) { // 右クリックから設定できる場合は表示しない
ontop = new Button(compositeSystem, SWT.CHECK);
ontop.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
ontop.setText("最前面に表示する*");
ontop.setSelection(AppConfig.get().isOnTop());
}
else {
ontop = null;
}
final Button checkUpdate = new Button(compositeSystem, SWT.CHECK);
checkUpdate.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
checkUpdate.setText("起動時にアップデートチェック*");
checkUpdate.setSelection(AppConfig.get().isUpdateCheck());
final Button checkDoit = new Button(compositeSystem, SWT.CHECK);
checkDoit.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
checkDoit.setText("終了時に確認する");
checkDoit.setSelection(AppConfig.get().isCheckDoit());
final Button nameOnTitlebar = new Button(compositeSystem, SWT.CHECK);
nameOnTitlebar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
nameOnTitlebar.setText("タイトルバーに提督名を表示する");
nameOnTitlebar.setSelection(AppConfig.get().isNameOnTitlebar());
final Button colorSupport = new Button(compositeSystem, SWT.CHECK);
colorSupport.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
colorSupport.setText("色覚サポート*");
colorSupport.setSelection(AppConfig.get().isColorSupport());
final Combo systemWideShortcutKey;
if (JIntellitypeWrapper.getInstance() != null) {
final Label systemWideShortcutKeyLabel = new Label(compositeSystem, SWT.NONE);
systemWideShortcutKeyLabel.setText("航海日誌をアクティブにするホットキー");
systemWideShortcutKey = new Combo(compositeSystem, SWT.READ_ONLY);
systemWideShortcutKey.add("なし");
systemWideShortcutKey.add("Ctrl+Shift+Z");
systemWideShortcutKey.add("Ctrl+Alt+Z");
systemWideShortcutKey.select(AppConfig.get().getSystemWideHotKey());
}
else {
systemWideShortcutKey = null;
}
// 報告書 タブ
compositeReport.setLayout(new GridLayout(3, false));
Label label8 = new Label(compositeReport, SWT.NONE);
label8.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label8.setText("報告書の保存先");
final Text reportDir = new Text(compositeReport, SWT.BORDER);
GridData gdReportDir = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gdReportDir.widthHint = SwtUtils.DPIAwareWidth(120);
reportDir.setLayoutData(gdReportDir);
reportDir.setText(AppConfig.get().getReportPath());
Button reportSavedirBtn = new Button(compositeReport, SWT.NONE);
reportSavedirBtn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
reportSavedirBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dialog = new DirectoryDialog(ConfigDialog.this.shell);
dialog.setMessage("保存先を指定して下さい");
String path = dialog.open();
if (path != null) {
reportDir.setText(path);
}
}
});
reportSavedirBtn.setText("選択...");
Label label82 = new Label(compositeReport, SWT.NONE);
label82.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label82.setText("戦闘履歴の保存先*");
final Text battlelogDir = new Text(compositeReport, SWT.BORDER);
GridData gdBattlelogDir = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gdBattlelogDir.widthHint = SwtUtils.DPIAwareWidth(120);
battlelogDir.setLayoutData(gdBattlelogDir);
battlelogDir.setText(AppConfig.get().getBattleLogPath());
Button battleLogdirBtn = new Button(compositeReport, SWT.NONE);
battleLogdirBtn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
battleLogdirBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dialog = new DirectoryDialog(ConfigDialog.this.shell);
dialog.setMessage("保存先を指定して下さい");
String path = dialog.open();
if (path != null) {
battlelogDir.setText(path);
}
}
});
battleLogdirBtn.setText("選択...");
Label materialintervallabel = new Label(compositeReport, SWT.NONE);
materialintervallabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
materialintervallabel.setText("資材ログ保存間隔(秒)");
final Spinner materialintervalSpinner = new Spinner(compositeReport, SWT.BORDER);
materialintervalSpinner.setMaximum(60 * 60 * 24);
materialintervalSpinner.setMinimum(10);
materialintervalSpinner.setSelection(AppConfig.get().getMaterialLogInterval());
GridData gdMaterialIntervalSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdMaterialIntervalSpinner.widthHint = SwtUtils.DPIAwareWidth(55);
materialintervalSpinner.setLayoutData(gdMaterialIntervalSpinner);
new Label(compositeReport, SWT.NONE);
final Button detailMaterial = new Button(compositeReport, SWT.CHECK);
detailMaterial.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
detailMaterial.setText("遠征帰還時や開発・建造時に資材ログ出力する");
detailMaterial.setSelection(AppConfig.get().isMaterialLogDetail());
Label loadReport = new Label(compositeReport, SWT.NONE);
loadReport.setText("報告書読み込み(起動時にCSVファイルを全て読み込みます)");
loadReport.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
final Button loadCreateShipLog = new Button(compositeReport, SWT.CHECK);
loadCreateShipLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
loadCreateShipLog.setText("建造報告書を読み込む*");
loadCreateShipLog.setSelection(AppConfig.get().isLoadCreateShipLog());
final Button loadCreateItemLog = new Button(compositeReport, SWT.CHECK);
loadCreateItemLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
loadCreateItemLog.setText("開発報告書を読み込む*");
loadCreateItemLog.setSelection(AppConfig.get().isLoadCreateItemLog());
final Button loadMissionLog = new Button(compositeReport, SWT.CHECK);
loadMissionLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
loadMissionLog.setText("遠征報告書を読み込む*");
loadMissionLog.setSelection(AppConfig.get().isLoadMissionLog());
// 艦隊タブ タブ
compositeFleetTab.setLayout(new GridLayout(2, false));
final Button balloonBybadlyDamage = new Button(compositeFleetTab, SWT.CHECK);
balloonBybadlyDamage.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
balloonBybadlyDamage.setText("大破でバルーンツールチップを表示");
balloonBybadlyDamage.setSelection(AppConfig.get().isBalloonBybadlyDamage());
final Button visibleOnReturnMission = new Button(compositeFleetTab, SWT.CHECK);
visibleOnReturnMission.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
visibleOnReturnMission.setText("遠征からの帰還時に母港タブを表示");
visibleOnReturnMission.setSelection(AppConfig.get().isVisibleOnReturnMission());
final Button visibleOnReturnBathwater = new Button(compositeFleetTab, SWT.CHECK);
visibleOnReturnBathwater.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
visibleOnReturnBathwater.setText("お風呂から上がる時に母港タブを表示");
visibleOnReturnBathwater.setSelection(AppConfig.get().isVisibleOnReturnBathwater());
Label seikuLabel = new Label(compositeFleetTab, SWT.NONE);
seikuLabel.setText("制空計算式");
seikuLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
final Combo seikuCombo = new Combo(compositeFleetTab, SWT.READ_ONLY);
seikuCombo.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
seikuCombo.add("A.艦載機素の制空値");
seikuCombo.add("B.制空推定値範囲");
seikuCombo.add("C.制空推定値範囲(艦載機素の制空値 + 熟練度ボーナス推定値)");
seikuCombo.add("D.制空推定値中央");
seikuCombo.add("E.制空推定値中央(艦載機素の制空値 + 熟練度ボーナス推定値)");
seikuCombo.select(AppConfig.get().getSeikuMethod());
Label sakutekiLabel = new Label(compositeFleetTab, SWT.NONE);
sakutekiLabel.setText("索敵計算式");
sakutekiLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
final Combo sakutekiCombo = new Combo(compositeFleetTab, SWT.READ_ONLY);
sakutekiCombo.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
sakutekiCombo.add("A.艦隊素の索敵値 + 装備の索敵値");
sakutekiCombo.add("B.判定式(33)(艦隊素の索敵分 + 装備分 - 提督Lv分 + 艦隊空き数分)");
sakutekiCombo.add("C.判定式(33)(2-5式(秋))");
sakutekiCombo.add("D.ほっぽアルファVer2.0.1(艦隊素の索敵分 + 装備分 - 提督Lv分)");
sakutekiCombo.add("F.ほっぽアルファVer2.0.1(2-5式(秋))");
sakutekiCombo.add("F.2-5式(秋)(艦隊素の索敵分 + 装備分 - 提督Lv分)");
sakutekiCombo.add("G.装備込みの艦隊索敵値合計(2-5式(秋))");
sakutekiCombo.add("H.2-5式(旧)(偵察機×2 + 電探 + √(装備込みの艦隊索敵値-偵察機-電探))");
sakutekiCombo.add("I.装備込みの艦隊索敵値(2-5式(旧))");
sakutekiCombo.select(AppConfig.get().getSakutekiMethodV4());
Label mainLog = new Label(compositeFleetTab, SWT.NONE);
mainLog.setText("母港タブのログ");
mainLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
final Button printSortieLog = new Button(compositeFleetTab, SWT.CHECK);
printSortieLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
printSortieLog.setText("マップや勝利判定をログに表示");
printSortieLog.setSelection(AppConfig.get().isPrintSortieLog());
final Button printSunkLog = new Button(compositeFleetTab, SWT.CHECK);
printSunkLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
printSunkLog.setText("艦娘の轟沈をログに表示");
printSunkLog.setSelection(AppConfig.get().isPrintSunkLog());
final Button printUpdateLog = new Button(compositeFleetTab, SWT.CHECK);
printUpdateLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
printUpdateLog.setText("更新系ログを表示");
printUpdateLog.setSelection(AppConfig.get().isPrintUpdateLog());
final Button printDropLog = new Button(compositeFleetTab, SWT.CHECK);
printDropLog.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
printDropLog.setText("ドロップをログに表示");
printDropLog.setSelection(AppConfig.get().isPrintDropLog());
// 艦隊タブ タブ
compositeFleetDetail.setLayout(new GridLayout(1, false));
Group leveling = new Group(compositeFleetDetail, SWT.NONE);
leveling.setText("レベリング");
leveling.setLayout(new RowLayout());
leveling.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Button displaycount = new Button(leveling, SWT.CHECK);
displaycount.setText("回数を表示");
displaycount.setSelection(AppConfig.get().isDisplayCount());
Label label9 = new Label(leveling, SWT.NONE);
label9.setText("海域");
final Combo seacombo = new Combo(leveling, SWT.READ_ONLY);
int count = 0;
for (Entry<String, Integer> entry : SeaExp.get().entrySet()) {
seacombo.add(entry.getKey());
if (entry.getKey().equals(AppConfig.get().getDefaultSea())) {
seacombo.select(count);
}
count++;
}
Label label10 = new Label(leveling, SWT.NONE);
label10.setText("評価");
final Combo evalcombo = new Combo(leveling, SWT.READ_ONLY);
count = 0;
for (Entry<String, Double> entry : EvaluateExp.get().entrySet()) {
evalcombo.add(entry.getKey());
if (entry.getKey().equals(AppConfig.get().getDefaultEvaluate())) {
evalcombo.select(count);
}
count++;
}
final Button warnByNeedSupply = new Button(compositeFleetDetail, SWT.CHECK);
warnByNeedSupply.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
warnByNeedSupply.setText("補給不足で警告アイコン表示");
warnByNeedSupply.setSelection(AppConfig.get().isWarnByNeedSupply());
final Button warnByCondState = new Button(compositeFleetDetail, SWT.CHECK);
warnByCondState.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
warnByCondState.setText("疲労状態で警告アイコン表示");
warnByCondState.setSelection(AppConfig.get().isWarnByCondState());
final Button warnByHalfDamage = new Button(compositeFleetDetail, SWT.CHECK);
warnByHalfDamage.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
warnByHalfDamage.setText("中破で警告アイコン表示");
warnByHalfDamage.setSelection(AppConfig.get().isWarnByHalfDamage());
final Button fatalBybadlyDamage = new Button(compositeFleetDetail, SWT.CHECK);
fatalBybadlyDamage.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
fatalBybadlyDamage.setText("大破で致命的アイコン表示");
fatalBybadlyDamage.setSelection(AppConfig.get().isFatalBybadlyDamage());
final Button useMonoIcon = new Button(compositeFleetDetail, SWT.CHECK);
useMonoIcon.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
useMonoIcon.setText("モノクロアイコンを使用");
useMonoIcon.setSelection(AppConfig.get().isMonoIcon());
final Button showCondTimer = new Button(compositeFleetDetail, SWT.CHECK);
showCondTimer.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
showCondTimer.setText("疲労回復タイマーを表示");
showCondTimer.setSelection(AppConfig.get().isShowCondTimer());
final Button showAkashiTimer = new Button(compositeFleetDetail, SWT.CHECK);
showAkashiTimer.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
showAkashiTimer.setText("泊地修理タイマーを表示");
showAkashiTimer.setSelection(AppConfig.get().isShowAkashiTimer());
Composite akashiFormatBase = new Composite(compositeFleetDetail, SWT.NONE);
akashiFormatBase.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
akashiFormatBase.setLayout(new RowLayout(SWT.HORIZONTAL));
Label akashiFormatLabel = new Label(akashiFormatBase, SWT.NONE);
akashiFormatLabel.setText("表示");
final Combo akashiFormatCombo = new Combo(akashiFormatBase, SWT.READ_ONLY);
akashiFormatCombo.add("A.全回復までの時間");
akashiFormatCombo.add("B.次の回復までの時間");
akashiFormatCombo.add("C.AとBを交互に表示");
akashiFormatCombo.select(AppConfig.get().getAkashiTimerFormat());
// 通知
compositeNotify.setLayout(new GridLayout(3, false));
Label label3 = new Label(compositeNotify, SWT.NONE);
label3.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label3.setText("音量(%)");
final Text soundlevel = new Text(compositeNotify, SWT.BORDER);
GridData gdSoundlevel = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gdSoundlevel.widthHint = SwtUtils.DPIAwareWidth(90);
soundlevel.setLayoutData(gdSoundlevel);
soundlevel.setText(Integer.toString((int) (AppConfig.get().getSoundLevel() * 100)));
new Label(compositeNotify, SWT.NONE);
final Button balloon = new Button(compositeNotify, SWT.CHECK);
balloon.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
balloon.setText("タイマー類をバルーンで通知する");
balloon.setSelection(AppConfig.get().isUseBalloon());
Label condLabel1 = new Label(compositeNotify, SWT.NONE);
condLabel1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
condLabel1.setText("回復判定疲労度");
final Spinner condSpinner = new Spinner(compositeNotify, SWT.BORDER);
condSpinner.setMaximum(49);
condSpinner.setMinimum(0);
condSpinner.setSelection(AppConfig.get().getOkCond());
GridData gdCondSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdCondSpinner.widthHint = SwtUtils.DPIAwareWidth(55);
condSpinner.setLayoutData(gdCondSpinner);
new Label(compositeNotify, SWT.NONE);
final Button condOnlyMain = new Button(compositeNotify, SWT.CHECK);
condOnlyMain.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
condOnlyMain.setText("第一艦隊以外の疲労回復通知を行わない");
condOnlyMain.setSelection(AppConfig.get().isNoticeCondOnlyMainFleet());
final Button akashiFirstStep = new Button(compositeNotify, SWT.CHECK);
akashiFirstStep.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
akashiFirstStep.setText("泊地修理開始から20分経過を通知する");
akashiFirstStep.setSelection(AppConfig.get().isAkashiNotifyFirstStep());
final Button akashiEveryStep = new Button(compositeNotify, SWT.CHECK);
akashiEveryStep.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
akashiEveryStep.setText("泊地修理中艦娘のHPが1回復する度に通知する");
akashiEveryStep.setSelection(AppConfig.get().isAkashiNotifyEveryStep());
final Button remind = new Button(compositeNotify, SWT.CHECK);
remind.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
remind.setText("遠征の通知をリマインドする");
remind.setSelection(AppConfig.get().isMissionRemind());
Label intervallabel = new Label(compositeNotify, SWT.NONE);
intervallabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
intervallabel.setText("間隔(秒)");
final Spinner intervalSpinner = new Spinner(compositeNotify, SWT.BORDER);
intervalSpinner.setMaximum(60 * 60);
intervalSpinner.setMinimum(10);
intervalSpinner.setSelection(AppConfig.get().getRemindInterbal());
GridData gdIntervalSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdIntervalSpinner.widthHint = SwtUtils.DPIAwareWidth(55);
intervalSpinner.setLayoutData(gdIntervalSpinner);
new Label(compositeNotify, SWT.NONE);
final Button taskbar = new Button(compositeNotify, SWT.CHECK);
taskbar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
taskbar.setText("母港の空きをタスクバーで通知する");
taskbar.setSelection(AppConfig.get().isUseTaskbarNotify());
Label fullyLabel1 = new Label(compositeNotify, SWT.NONE);
fullyLabel1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
fullyLabel1.setText("母港の空きが");
final Spinner fullySpinner = new Spinner(compositeNotify, SWT.BORDER);
fullySpinner.setMaximum(Math.max(100, GlobalContext.maxChara()));
fullySpinner.setMinimum(0);
fullySpinner.setSelection(AppConfig.get().getNotifyFully());
GridData gdFullySpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdFullySpinner.widthHint = SwtUtils.DPIAwareWidth(55);
fullySpinner.setLayoutData(gdFullySpinner);
Label fullyLabel2 = new Label(compositeNotify, SWT.NONE);
fullyLabel2.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
fullyLabel2.setText("以下で警告表示");
final Button shipFullBalloon = new Button(compositeNotify, SWT.CHECK);
shipFullBalloon.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
shipFullBalloon.setSelection(AppConfig.get().isEnableShipFullBalloonNotify());
shipFullBalloon.setText("母港の空きが");
final Spinner shipFullSpinner = new Spinner(compositeNotify, SWT.BORDER);
shipFullSpinner.setMaximum(Math.max(100, GlobalContext.maxChara()));
shipFullSpinner.setMinimum(0);
shipFullSpinner.setSelection(AppConfig.get().getShipFullBalloonNotify());
shipFullSpinner.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
Label fullyLabel3 = new Label(compositeNotify, SWT.NONE);
fullyLabel3.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
fullyLabel3.setText("以下でバルーン通知");
final Button itemFullBalloon = new Button(compositeNotify, SWT.CHECK);
itemFullBalloon.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
itemFullBalloon.setSelection(AppConfig.get().isEnableItemFullBalloonNotify());
itemFullBalloon.setText("装備の空きが");
final Spinner itemFullSpinner = new Spinner(compositeNotify, SWT.BORDER);
itemFullSpinner.setMaximum(Math.max(100, GlobalContext.maxChara()));
itemFullSpinner.setMinimum(0);
itemFullSpinner.setSelection(AppConfig.get().getItemFullBalloonNotify());
itemFullSpinner.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
Label fullyLabel4 = new Label(compositeNotify, SWT.NONE);
fullyLabel4.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
fullyLabel4.setText("以下でバルーン通知");
// キャプチャ タブ
compositeCapture.setLayout(new GridLayout(3, false));
Label label4 = new Label(compositeCapture, SWT.NONE);
label4.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label4.setText("保存先");
final Text captureDir = new Text(compositeCapture, SWT.BORDER);
GridData gdCaptureDir = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gdCaptureDir.widthHint = SwtUtils.DPIAwareWidth(120);
captureDir.setLayoutData(gdCaptureDir);
captureDir.setText(AppConfig.get().getCapturePath());
Button savedirBtn = new Button(compositeCapture, SWT.NONE);
savedirBtn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
savedirBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dialog = new DirectoryDialog(ConfigDialog.this.shell);
dialog.setMessage("保存先を指定して下さい");
String path = dialog.open();
if (path != null) {
captureDir.setText(path);
}
}
});
savedirBtn.setText("選択...");
Label label5 = new Label(compositeCapture, SWT.NONE);
label5.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label5.setText("フォーマット");
final Combo imageformatCombo = new Combo(compositeCapture, SWT.READ_ONLY);
imageformatCombo.setItems(new String[] { "jpg", "png" });
imageformatCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
imageformatCombo.select(0);
for (int i = 0; i < imageformatCombo.getItems().length; i++) {
if (AppConfig.get().getImageFormat().equals(imageformatCombo.getItem(i))) {
imageformatCombo.select(i);
break;
}
}
new Label(compositeCapture, SWT.NONE);
final Button createDateFolder = new Button(compositeCapture, SWT.CHECK);
createDateFolder.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
createDateFolder.setText("日付のフォルダを作成する");
createDateFolder.setSelection(AppConfig.get().isCreateDateFolder());
// 資材チャート タブ
compositeChart.setLayout(new GridLayout(3, false));
final Label fuel = this.createColorSetting(compositeChart, "燃料の色■",
AppConfig.get().getFuelColor(), AppConstants.CHART_COLOR_TABLE[0]);
final Label ammo = this.createColorSetting(compositeChart, "弾薬の色■",
AppConfig.get().getAmmoColor(), AppConstants.CHART_COLOR_TABLE[1]);
final Label metal = this.createColorSetting(compositeChart, "鋼材の色■",
AppConfig.get().getMetalColor(), AppConstants.CHART_COLOR_TABLE[2]);
final Label bauxite = this.createColorSetting(compositeChart, "ボーキの色■",
AppConfig.get().getBauxiteColor(), AppConstants.CHART_COLOR_TABLE[3]);
final Label burner = this.createColorSetting(compositeChart, "バーナーの色■",
AppConfig.get().getBurnerColor(), AppConstants.CHART_COLOR_TABLE[4]);
final Label bucket = this.createColorSetting(compositeChart, "バケツの色■",
AppConfig.get().getBucketColor(), AppConstants.CHART_COLOR_TABLE[5]);
final Label research = this.createColorSetting(compositeChart, "開発資材の色■",
AppConfig.get().getResearchColor(), AppConstants.CHART_COLOR_TABLE[6]);
final Label screw = this.createColorSetting(compositeChart, "ネジの色■",
AppConfig.get().getScrewColor(), AppConstants.CHART_COLOR_TABLE[6]);
// ウィンドウ
compositeWindow.setLayout(new GridLayout(3, false));
final Button enableMoveWithDD = new Button(compositeWindow, SWT.CHECK);
enableMoveWithDD.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
enableMoveWithDD.setSelection(AppConfig.get().isEnableMoveWithDD());
enableMoveWithDD.setText("タイトルバー以外でもドラッグ&&ドロップで移動できるようにする*");
final Button noMenubar = new Button(compositeWindow, SWT.CHECK);
noMenubar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
noMenubar.setSelection(AppConfig.get().isNoMenubar());
noMenubar.setText("メニューバーを消してポップアップメニュー化する*");
final Button diableWindowMenu = new Button(compositeWindow, SWT.CHECK);
diableWindowMenu.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
diableWindowMenu.setSelection(AppConfig.get().isDisableWindowMenu());
diableWindowMenu.setText("ウィンドウメニューを無効化*");
final Button toggleToolButton = new Button(compositeWindow, SWT.CHECK);
toggleToolButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
toggleToolButton.setSelection(AppConfig.get().isToggleToolButton());
toggleToolButton.setText("ツールウィンドウのボタンをトグル方式にする");
final Button showSubwindowHost = new Button(compositeWindow, SWT.CHECK);
showSubwindowHost.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
showSubwindowHost.setSelection(AppConfig.get().isShowSubwindowHost());
showSubwindowHost.setText("サブウィンドウホストを表示する(Windows10デスクトップ切り替え対応)*");
Group opaqueIntervalGroup = new Group(compositeWindow, SWT.NONE);
opaqueIntervalGroup.setText("マウスが離れてから元の透明度に戻るまでの時間");
opaqueIntervalGroup.setLayout(new GridLayout(2, false));
opaqueIntervalGroup.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 3, 1));
final Spinner opaqueIntervalSpinner = new Spinner(opaqueIntervalGroup, SWT.BORDER);
opaqueIntervalSpinner.setMaximum(60 * 60 * 10);
opaqueIntervalSpinner.setMinimum(0);
opaqueIntervalSpinner.setSelection(AppConfig.get().getOpaqueInterval());
GridData gdopaqueIntervalSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdopaqueIntervalSpinner.widthHint = SwtUtils.DPIAwareWidth(65);
opaqueIntervalSpinner.setLayoutData(gdopaqueIntervalSpinner);
Label opaqueIntervalSuffix = new Label(opaqueIntervalGroup, SWT.NONE);
opaqueIntervalSuffix.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
opaqueIntervalSuffix.setText("x0.1秒");
Group shipTableNameGroup = new Group(compositeWindow, SWT.NONE);
shipTableNameGroup.setText("艦娘一覧ウィンドウの名前設定");
shipTableNameGroup.setLayout(new GridLayout(3, false));
shipTableNameGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
//Label shipTableName = new Label(compositeWindow, SWT.NONE);
//shipTableName.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
//shipTableName.setText("艦娘一覧ウィンドウの名前設定");
final Text[] shipTableNameText = new Text[4];
for (int i = 0; i < 4; ++i) {
Label shipTableLabel = new Label(shipTableNameGroup, SWT.NONE);
shipTableLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
shipTableLabel.setText(String.valueOf(i + 1) + ": ");
shipTableNameText[i] = new Text(shipTableNameGroup, SWT.BORDER);
shipTableNameText[i].setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
shipTableNameText[i].setText(AppConfig.get().getShipTableNames()[i]);
}
// Push通知タブ
compositePushNotify.setLayout(new GridLayout(3, false));
final Button prowl = new Button(compositePushNotify, SWT.CHECK);
prowl.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
prowl.setText("ProwlによるPush通知");
prowl.setSelection(AppConfig.get().getNotifyProwl());
Label label11 = new Label(compositePushNotify, SWT.NONE);
label11.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label11.setText("Prowl APIKey");
final Text prowlAPIKey = new Text(compositePushNotify, SWT.BORDER);
GridData gdprowlAPIKey = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
gdprowlAPIKey.widthHint = SwtUtils.DPIAwareWidth(200);
prowlAPIKey.setLayoutData(gdprowlAPIKey);
prowlAPIKey.setText(AppConfig.get().getProwlAPIKey());
final Button nma = new Button(compositePushNotify, SWT.CHECK);
nma.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
nma.setText("Notify My Android (NMA)によるPush通知");
nma.setSelection(AppConfig.get().getNotifyNMA());
Label label12 = new Label(compositePushNotify, SWT.NONE);
label12.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label12.setText("NMA APIKey");
final Text nmaAPIKey = new Text(compositePushNotify, SWT.BORDER);
GridData gdnmaAPIKey = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
gdnmaAPIKey.widthHint = SwtUtils.DPIAwareWidth(200);
nmaAPIKey.setLayoutData(gdnmaAPIKey);
nmaAPIKey.setText(AppConfig.get().getNMAAPIKey());
final Button imkayac = new Button(compositePushNotify, SWT.CHECK);
imkayac.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
imkayac.setText("ImKayac によるPush通知(秘密鍵優先)");
imkayac.setSelection(AppConfig.get().getNotifyImKayac());
Label label14 = new Label(compositePushNotify, SWT.NONE);
label14.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label14.setText("ImKayac UserName");
final Text imkayacUserName = new Text(compositePushNotify, SWT.BORDER);
GridData gdimkayacUserName = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
gdimkayacUserName.widthHint = SwtUtils.DPIAwareWidth(200);
imkayacUserName.setLayoutData(gdimkayacUserName);
imkayacUserName.setText(AppConfig.get().getImKayacUserName());
Label label15 = new Label(compositePushNotify, SWT.NONE);
label15.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label15.setText("ImKayac パスワード");
final Text imkayacPasswd = new Text(compositePushNotify, SWT.PASSWORD | SWT.BORDER);
GridData gdimkayacPasswd = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
gdimkayacPasswd.widthHint = SwtUtils.DPIAwareWidth(200);
imkayacPasswd.setLayoutData(gdimkayacPasswd);
imkayacPasswd.setText(AppConfig.get().getImKayacPasswd());
Label label16 = new Label(compositePushNotify, SWT.NONE);
label16.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label16.setText("ImKayac 秘密鍵");
final Text imkayacPrivateKey = new Text(compositePushNotify, SWT.BORDER);
GridData gdimkayacPrivateKey = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
gdimkayacPrivateKey.widthHint = SwtUtils.DPIAwareWidth(200);
imkayacPrivateKey.setLayoutData(gdimkayacUserName);
imkayacPrivateKey.setText(AppConfig.get().getImKayacPrivateKey());
String pushName[] = new String[] {
"遠征帰投を通知",
"入渠完了を通知",
"泊地修理完了を通知",
"疲労回復を通知"
};
final Button pushNotifyMission = new Button(compositePushNotify, SWT.CHECK);
final Combo pushPriorityMissionCombo = new Combo(compositePushNotify, SWT.READ_ONLY);
final Button pushNotifyNdock = new Button(compositePushNotify, SWT.CHECK);
final Combo pushPriorityNdockCombo = new Combo(compositePushNotify, SWT.READ_ONLY);
final Button pushNotifyAkashi = new Button(compositePushNotify, SWT.CHECK);
final Combo pushPriorityAkashiCombo = new Combo(compositePushNotify, SWT.READ_ONLY);
final Button pushNotifyCond = new Button(compositePushNotify, SWT.CHECK);
final Combo pushPriorityCondCombo = new Combo(compositePushNotify, SWT.READ_ONLY);
Button[] pushNotifyButtons = new Button[] {
pushNotifyMission, pushNotifyNdock, pushNotifyAkashi, pushNotifyCond };
Combo[] pushNotifyCombos = new Combo[] {
pushPriorityMissionCombo, pushPriorityNdockCombo, pushPriorityAkashiCombo, pushPriorityCondCombo };
boolean[] pushEnabled = new boolean[] {
AppConfig.get().getPushMission(),
AppConfig.get().getPushNdock(),
AppConfig.get().isPushAkashi(),
AppConfig.get().isPushCond()
};
int[] pushPriorities = new int[] {
AppConfig.get().getPushPriorityMission(),
AppConfig.get().getPushPriorityNdock(),
AppConfig.get().getPushPriorityAkashi(),
AppConfig.get().getPushPriorityCond()
};
for (int i = 0; i < pushNotifyButtons.length; ++i) {
Button button = pushNotifyButtons[i];
Combo compo = pushNotifyCombos[i];
button.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
button.setText(pushName[i]);
button.setSelection(pushEnabled[i]);
GridData gdpushPriorityMissionCombo = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
compo.setLayoutData(gdpushPriorityMissionCombo);
compo.add("Priority: Very Low");
compo.add("Priority: Moderate");
compo.add("Priority: Normal");
compo.add("Priority: High");
compo.add("Priority: Emergency");
compo.select(pushPriorities[i] + 2);
}
Button TestNotifyMissionBtn = new Button(compositePushNotify, SWT.NONE);
TestNotifyMissionBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 2, 1));
TestNotifyMissionBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
AppConfig.get().setNotifyProwl(prowl.getSelection());
AppConfig.get().setProwlAPIKey(prowlAPIKey.getText());
AppConfig.get().setNotifyNMA(nma.getSelection());
AppConfig.get().setNMAAPIKey(nmaAPIKey.getText());
AppConfig.get().setNotifyImKayac(imkayac.getSelection());
AppConfig.get().setImKayacUserName(imkayacUserName.getText());
AppConfig.get().setImKayacPasswd(imkayacPasswd.getText());
AppConfig.get().setImKayacPrivateKey(imkayacPrivateKey.getText());
AppConfig.get().setPushMission(pushNotifyMission.getSelection());
AppConfig.get().setPushNdock(pushNotifyNdock.getSelection());
AppConfig.get().setPushPriorityMission(pushPriorityMissionCombo.getSelectionIndex() - 2);
AppConfig.get().setPushPriorityNdock(pushPriorityNdockCombo.getSelectionIndex() - 2);
if (AppConfig.get().getPushMission()) {
PushNotify.add("通知テスト艦隊(テスト遠征)がまもなく帰投します", "遠征", AppConfig.get().getPushPriorityMission());
}
}
});
TestNotifyMissionBtn.setText("テスト通知(遠征)");
Button TestNotifyNdockBtn = new Button(compositePushNotify, SWT.NONE);
TestNotifyNdockBtn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
TestNotifyNdockBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
AppConfig.get().setNotifyProwl(prowl.getSelection());
AppConfig.get().setProwlAPIKey(prowlAPIKey.getText());
AppConfig.get().setNotifyNMA(nma.getSelection());
AppConfig.get().setNMAAPIKey(nmaAPIKey.getText());
AppConfig.get().setNotifyImKayac(imkayac.getSelection());
AppConfig.get().setImKayacUserName(imkayacUserName.getText());
AppConfig.get().setImKayacPasswd(imkayacPasswd.getText());
AppConfig.get().setImKayacPrivateKey(imkayacPrivateKey.getText());
AppConfig.get().setPushMission(pushNotifyMission.getSelection());
AppConfig.get().setPushNdock(pushNotifyNdock.getSelection());
AppConfig.get().setPushPriorityMission(pushPriorityMissionCombo.getSelectionIndex() - 2);
AppConfig.get().setPushPriorityNdock(pushPriorityNdockCombo.getSelectionIndex() - 2);
if (AppConfig.get().getPushNdock()) {
PushNotify.add("通知テスト改(Lv99)がまもなくお風呂からあがります", "入渠", AppConfig.get().getPushPriorityNdock());
}
}
});
TestNotifyNdockBtn.setText("テスト通知(入渠)");
// ツールウィンドウ
compositeToolWin.setLayout(new GridLayout(1, false));
Group toolWinGroup = new Group(compositeToolWin, SWT.NONE);
toolWinGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
toolWinGroup.setLayout(new GridLayout(3, false));
toolWinGroup.setText("表示ボタン設定(ドラッグ&&ドロップで移動できます)");
Label enabledButtonsLabel = new Label(toolWinGroup, SWT.NONE);
enabledButtonsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
enabledButtonsLabel.setText("表示するボタン");
Label toolWinSeparator = new Label(toolWinGroup, SWT.SEPARATOR);
toolWinSeparator.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, false, false, 1, 2));
Label disabledButtonsLabel = new Label(toolWinGroup, SWT.NONE);
disabledButtonsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
disabledButtonsLabel.setText("表示しないボタン");
final Table enabledButtonTable = this.createToolButtonTable(toolWinGroup);
final Table disabledButtonTable = this.createToolButtonTable(toolWinGroup);
this.createToolButtonTableContents(enabledButtonTable, disabledButtonTable);
// Development タブ
compositeDevelopment.setLayout(new GridLayout(2, false));
new Label(compositeDevelopment, SWT.NONE);
final Button btnJson = new Button(compositeDevelopment, SWT.CHECK);
btnJson.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
btnJson.setText("JSONを保存する");
btnJson.setSelection(AppConfig.get().isStoreJson());
Label lblJson = new Label(compositeDevelopment, SWT.NONE);
lblJson.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblJson.setText("JSON保存先");
final Text jsonpath = new Text(compositeDevelopment, SWT.BORDER);
GridData gdJsonpath = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gdJsonpath.widthHint = SwtUtils.DPIAwareWidth(120);
jsonpath.setLayoutData(gdJsonpath);
jsonpath.setText(AppConfig.get().getStoreJsonPath());
final Button btnTest = new Button(compositeDevelopment, SWT.CHECK);
btnTest.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
btnTest.setText("航海日誌開発者向けメニューを追加する*");
btnTest.setSelection(AppConfig.get().isEnableTestWindow());
Composite commandComposite = new Composite(this.shell, SWT.NONE);
commandComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
GridLayout glCommandComposite = new GridLayout(2, false);
glCommandComposite.verticalSpacing = 0;
glCommandComposite.marginWidth = 0;
glCommandComposite.marginHeight = 0;
glCommandComposite.horizontalSpacing = 0;
commandComposite.setLayout(glCommandComposite);
// '*'の説明
Composite commandLeft = new Composite(commandComposite, SWT.NONE);
GridLayout glCommandLeft = new GridLayout(1, false);
glCommandLeft.horizontalSpacing = 0;
glCommandLeft.marginHeight = 0;
glCommandLeft.verticalSpacing = 0;
glCommandLeft.marginWidth = 0;
commandLeft.setLayout(glCommandLeft);
Label attentionLabel = new Label(commandLeft, SWT.NONE);
attentionLabel.setText("*再起動後に有効になります");
Composite commandRight = new Composite(commandComposite, SWT.NONE);
RowLayout rlCommandRight = new RowLayout(SWT.HORIZONTAL);
rlCommandRight.marginTop = 0;
rlCommandRight.marginLeft = 0;
rlCommandRight.marginRight = 0;
rlCommandRight.marginBottom = 0;
commandRight.setLayout(rlCommandRight);
commandRight.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
// OK ボタン
Button applyBtn = new Button(commandRight, SWT.NONE);
applyBtn.setLayoutData(new RowData(100, SWT.DEFAULT));
applyBtn.setText("OK");
applyBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 設定の保存アクション
// 値チェック
if (!StringUtils.isNumeric(listenport.getText())) {
ConfigDialog.this.printErrorMessage("受信ポートには数値(0-65535)を入力してください");
return;
}
int listenPort = Integer.parseInt(listenport.getText());
if ((listenPort < 0) || (listenPort > 65535)) {
ConfigDialog.this.printErrorMessage("受信ポートには0~65535の数値を入力してください");
return;
}
// system
AppConfig.get().setListenPort(listenPort);
AppConfig.get().setHideWindow(hidewindow.getSelection());
AppConfig.get().setCloseWhenMinimized(closewindow.getSelection());
if (ontop != null) {
AppConfig.get().setOnTop(ontop.getSelection());
}
AppConfig.get().setCheckDoit(checkDoit.getSelection());
AppConfig.get().setNameOnTitlebar(nameOnTitlebar.getSelection());
AppConfig.get().setColorSupport(colorSupport.getSelection());
if (StringUtils.isNumeric(soundlevel.getText())) {
float level = (float) Integer.parseInt(soundlevel.getText()) / 100;
AppConfig.get().setSoundLevel(level);
}
/*
if (StringUtils.isNumeric(alpha.getText())) {
AppConfig.get().setAlpha(Integer.parseInt(alpha.getText()));
}
*/
AppConfig.get().setReportPath(reportDir.getText());
AppConfig.get().setBattleLogPath(battlelogDir.getText());
AppConfig.get().setUpdateCheck(checkUpdate.getSelection());
AppConfig.get().setAllowOnlyFromLocalhost(onlyFromLocalhost.getSelection());
AppConfig.get().setCloseOutsidePort(closeOutsidePort.getSelection());
// maintab
AppConfig.get().setPrintSortieLog(printSortieLog.getSelection());
AppConfig.get().setPrintSunkLog(printSunkLog.getSelection());
AppConfig.get().setPrintUpdateLog(printUpdateLog.getSelection());
AppConfig.get().setPrintDropLog(printDropLog.getSelection());
AppConfig.get().setLoadCreateItemLog(loadCreateItemLog.getSelection());
AppConfig.get().setLoadCreateShipLog(loadCreateShipLog.getSelection());
AppConfig.get().setLoadMissionLog(loadMissionLog.getSelection());
if (JIntellitypeWrapper.getInstance() != null) {
AppConfig.get().setSystemWideHotKey(systemWideShortcutKey.getSelectionIndex());
}
// fleettab
AppConfig.get().setDisplayCount(displaycount.getSelection());
AppConfig.get().setDefaultSea(seacombo.getItem(seacombo.getSelectionIndex()));
AppConfig.get().setDefaultEvaluate(evalcombo.getItem(evalcombo.getSelectionIndex()));
AppConfig.get().setWarnByNeedSupply(warnByNeedSupply.getSelection());
AppConfig.get().setWarnByCondState(warnByCondState.getSelection());
AppConfig.get().setWarnByHalfDamage(warnByHalfDamage.getSelection());
AppConfig.get().setFatalBybadlyDamage(fatalBybadlyDamage.getSelection());
AppConfig.get().setBalloonBybadlyDamage(balloonBybadlyDamage.getSelection());
AppConfig.get().setVisibleOnReturnMission(visibleOnReturnMission.getSelection());
AppConfig.get().setVisibleOnReturnBathwater(visibleOnReturnBathwater.getSelection());
AppConfig.get().setMonoIcon(useMonoIcon.getSelection());
AppConfig.get().setShowCondTimer(showCondTimer.getSelection());
AppConfig.get().setShowAkashiTimer(showAkashiTimer.getSelection());
AppConfig.get().setAkashiTimerFormat(akashiFormatCombo.getSelectionIndex());
AppConfig.get().setSeikuMethod(seikuCombo.getSelectionIndex());
AppConfig.get().setSakutekiMethodV4(sakutekiCombo.getSelectionIndex());
// notify
AppConfig.get().setOkCond(condSpinner.getSelection());
AppConfig.get().setNoticeCondOnlyMainFleet(condOnlyMain.getSelection());
AppConfig.get().setAkashiNotifyFirstStep(akashiFirstStep.getSelection());
AppConfig.get().setAkashiNotifyEveryStep(akashiEveryStep.getSelection());
AppConfig.get().setMissionRemind(remind.getSelection());
AppConfig.get().setRemindInterbal(intervalSpinner.getSelection());
AppConfig.get().setUseBalloon(balloon.getSelection());
AppConfig.get().setUseTaskbarNotify(taskbar.getSelection());
AppConfig.get().setNotifyFully(fullySpinner.getSelection());
AppConfig.get().setEnableShipFullBalloonNotify(shipFullBalloon.getSelection());
AppConfig.get().setShipFullBalloonNotify(shipFullSpinner.getSelection());
AppConfig.get().setEnableItemFullBalloonNotify(itemFullBalloon.getSelection());
AppConfig.get().setItemFullBalloonNotify(itemFullSpinner.getSelection());
// capture
AppConfig.get().setCapturePath(captureDir.getText());
AppConfig.get().setImageFormat(imageformatCombo.getItem(imageformatCombo.getSelectionIndex()));
AppConfig.get().setCreateDateFolder(createDateFolder.getSelection());
// チャート
AppConfig.get().setMaterialLogInterval(materialintervalSpinner.getSelection());
AppConfig.get().setMaterialLogDetail(detailMaterial.getSelection());
AppConfig.get().setFuelColor(fuel.getForeground().getRGB());
AppConfig.get().setAmmoColor(ammo.getForeground().getRGB());
AppConfig.get().setMetalColor(metal.getForeground().getRGB());
AppConfig.get().setBauxiteColor(bauxite.getForeground().getRGB());
AppConfig.get().setBurnerColor(burner.getForeground().getRGB());
AppConfig.get().setBucketColor(bucket.getForeground().getRGB());
AppConfig.get().setResearchColor(research.getForeground().getRGB());
AppConfig.get().setScrewColor(screw.getForeground().getRGB());
// ウィンドウ
AppConfig.get().setOpaqueInterval(opaqueIntervalSpinner.getSelection());
AppConfig.get().setEnableMoveWithDD(enableMoveWithDD.getSelection());
AppConfig.get().setNoMenubar(noMenubar.getSelection());
AppConfig.get().setDisableWindowMenu(diableWindowMenu.getSelection());
AppConfig.get().setToggleToolButton(toggleToolButton.getSelection());
AppConfig.get().setShowSubwindowHost(showSubwindowHost.getSelection());
for (int i = 0; i < 4; ++i) {
AppConfig.get().getShipTableNames()[i] = shipTableNameText[i].getText();
}
// connection
AppConfig.get().setUseProxy(useProxyButton.getSelection());
AppConfig.get().setProxyHost(proxyHostText.getText());
AppConfig.get().setProxyPort(proxyPortSpinner.getSelection());
AppConfig.get().setSendDatabase(sendDatabaseButton.getSelection());
AppConfig.get().setDatabaseSendLog(databaseLogButton.getSelection());
AppConfig.get().setAccessKey(accessKeyText.getText());
// push notify
AppConfig.get().setNotifyProwl(prowl.getSelection());
AppConfig.get().setProwlAPIKey(prowlAPIKey.getText());
AppConfig.get().setNotifyNMA(nma.getSelection());
AppConfig.get().setNMAAPIKey(nmaAPIKey.getText());
AppConfig.get().setNotifyImKayac(imkayac.getSelection());
AppConfig.get().setImKayacUserName(imkayacUserName.getText());
AppConfig.get().setImKayacPasswd(imkayacPasswd.getText());
AppConfig.get().setImKayacPrivateKey(imkayacPrivateKey.getText());
AppConfig.get().setPushMission(pushNotifyMission.getSelection());
AppConfig.get().setPushNdock(pushNotifyNdock.getSelection());
AppConfig.get().setPushAkashi(pushNotifyAkashi.getSelection());
AppConfig.get().setPushCond(pushNotifyCond.getSelection());
AppConfig.get().setPushPriorityMission(pushPriorityMissionCombo.getSelectionIndex() - 2);
AppConfig.get().setPushPriorityNdock(pushPriorityNdockCombo.getSelectionIndex() - 2);
AppConfig.get().setPushPriorityAkashi(pushPriorityAkashiCombo.getSelectionIndex() - 2);
AppConfig.get().setPushPriorityCond(pushPriorityCondCombo.getSelectionIndex() - 2);
// ツールウィンドウ
List<String> toolButtons = AppConfig.get().getToolButtons();
toolButtons.clear();
for (TableItem item : enabledButtonTable.getItems()) {
String key = (String) item.getData();
toolButtons.add(key);
}
// development
AppConfig.get().setStoreJson(btnJson.getSelection());
AppConfig.get().setStoreJsonPath(new File(jsonpath.getText()).getAbsolutePath());
AppConfig.get().setEnableTestWindow(btnTest.getSelection());
try {
AppConfig.store();
} catch (IOException ex) {
ex.printStackTrace();
}
ConfigDialog.this.shell.close();
ConfigDialog.this.main.configUpdated();
}
});
Button cancelBtn = new Button(commandRight, SWT.NONE);
cancelBtn.setLayoutData(new RowData(100, SWT.DEFAULT));
cancelBtn.setText("キャンセル");
cancelBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ConfigDialog.this.shell.close();
}
});
for (Control control : this.composite.getChildren()) {
LayoutLogic.hide(control, true);
}
sashForm.setWeights(new int[] { 2, 5 });
this.scrolledComposite.setContent(this.composite);
this.scrolledComposite.setMinSize(this.composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
private void printErrorMessage(String message) {
MessageBox mes = new MessageBox(ConfigDialog.this.shell, SWT.ICON_WARNING | SWT.OK);
mes.setMessage(message);
mes.open();
}
private Label createColorSetting(Composite chartGroup, String title, RGB currentColor, final RGB[] defaultColor) {
final Label label = new Label(chartGroup, SWT.NONE);
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label.setText(title);
label.setForeground(ColorManager.getColor(currentColor));
Button changeColor = new Button(chartGroup, SWT.NONE);
changeColor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
changeColor.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ColorDialog dialog = new ColorDialog(ConfigDialog.this.shell);
RGB rgb = dialog.open();
if (rgb != null) {
label.setForeground(ColorManager.getColor(rgb));
}
}
});
changeColor.setText("色の設定");
Button resetColor = new Button(chartGroup, SWT.NONE);
resetColor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
resetColor.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
label.setForeground(ColorManager.getColor(defaultColor));
}
});
resetColor.setText("リセット");
return label;
}
private Table createToolButtonTable(Composite parent) {
final Table table = new Table(parent, SWT.NONE);
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
gd.heightHint = SwtUtils.DPIAwareWidth(230);
gd.widthHint = SwtUtils.DPIAwareHeight(150);
table.setLayoutData(gd);
table.setHeaderVisible(false);
final TableColumn column = new TableColumn(table, SWT.NONE);
column.setText("ボタン");
table.addListener(SWT.Resize, new Listener() {
@Override
public void handleEvent(Event event) {
column.setWidth(table.getClientArea().width);
}
});
return table;
}
private void createToolButtonTableItems(Table table, List<String> keys, Map<String, Integer> keyMap) {
for (String key : keys) {
int i = keyMap.get(key);
String shortName = AppConstants.SHORT_WINDOW_NAME_LIST[i];
String name = AppConstants.WINDOW_NAME_LIST[i];
TableItem item = new TableItem(table, SWT.NONE);
item.setText(shortName + " (" + name + ")");
item.setData(key);
}
}
private void createToolButtonTableContents(final Table enabledTable, Table disabledTable) {
final WindowBase[] winList = LauncherWindow.getWindowList();
Map<String, Integer> winKeyMap = LauncherWindow.getWindowKeyMap();
List<String> toolButtons = AppConfig.get().getToolButtons();
if ((toolButtons == null) || (toolButtons.size() == 0)) {
// 初期化
toolButtons = new ArrayList<String>();
for (WindowBase win : winList) {
toolButtons.add(win.getWindowId());
}
AppConfig.get().setToolButtons(toolButtons);
}
Set<String> enabledSet = new HashSet<>();
for (String key : toolButtons) {
enabledSet.add(key);
}
List<String> disabledButtons = new ArrayList<>();
for (WindowBase win : winList) {
String key = win.getWindowId();
if (enabledSet.contains(key) == false) {
disabledButtons.add(key);
}
}
this.createToolButtonTableItems(enabledTable, toolButtons, winKeyMap);
this.createToolButtonTableItems(disabledTable, disabledButtons, winKeyMap);
SwtUtils.addItemDragAndDropMoveSupport(new Table[] { enabledTable, disabledTable },
new TableDragAndDropListener() {
@Override
public String tableItemToString(TableItem item) {
return item.getText();
}
@Override
public boolean canDragSource(TableItem source) {
if ((source.getParent() == enabledTable)
&& (enabledTable.getItemCount() == 1)) {
// 表示ボタンゼロにはできない
return false;
}
return true;
}
@Override
public TableItem create(Table table, TableItem source, int index) {
TableItem item = new TableItem(table, SWT.NONE, index);
item.setText(source.getText());
item.setData(source.getData());
return item;
}
@Override
public void finished(TableItem newItem) {
// do nothing
}
});
}
private void selectPane(Composite selected) {
for (Control control : this.composite.getChildren()) {
LayoutLogic.hide(control, selected != control);
}
this.composite.layout();
this.scrolledComposite.setMinSize(this.composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
/**
* ツリーをクリックした時に呼び出されるアダプター
*
*/
private static final class TreeSelectionAdapter extends SelectionAdapter {
/** ダイアログ */
private final ConfigDialog dialog;
/**
* コンストラクター
*/
public TreeSelectionAdapter(ConfigDialog dialog) {
this.dialog = dialog;
}
@Override
public void widgetSelected(SelectionEvent e) {
Object data = e.item.getData();
if (data instanceof Composite) {
this.dialog.selectPane((Composite) data);
}
}
}
}