/** * @version $Id: MasterServantEditor2.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/10/04 16:25:44 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.ui.editors; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ViewForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.actions.ActionFactory; import com.tida_okinawa.corona.ui.Icons; /** * @author kousuke-morishima */ public abstract class MasterServantEditor2 extends MasterServantEditor { /** * @see MasterServantEditor#MasterServantEditor() */ public MasterServantEditor2() { super(); } /** * @param weights * @see MasterServantEditor#MasterServantEditor(int[]) */ public MasterServantEditor2(int[] weights) { super(weights); } /** * @param weights * @param masterStyle * @param servantStyle * @see MasterServantEditor#MasterServantEditor(int[], int, int) */ public MasterServantEditor2(int[] weights, int masterStyle, int servantStyle) { super(weights, masterStyle, servantStyle); } /* ************************* * キーアクション */ @Override protected void createActions() { /* 更新(F5) */ Action action = new Action() { @Override public void run() { if (isDirty()) { /* 編集されていたら */ String message = "辞書は編集されています。\n更新を行うと編集内容は破棄され最終保存時の状態に戻ります。"; if (MessageDialog.openConfirm(getSite().getShell(), "辞書の更新", message)) { update(); masterViewer.setInput(getMasterInput()); if (masterViewer.getTable().getItemCount() > 0) { masterViewer.setSelection(null); IStructuredSelection selection = new StructuredSelection(masterViewer.getTable().getItem(0).getData()); masterViewer.setSelection(selection); } dirtyChanged(); } } else { /* 編集されていなかったら */ // TODO ↑の編集されていた時の処理と全く同じであるため、メソッド化予定 update(); masterViewer.setInput(getMasterInput()); if (masterViewer.getTable().getItemCount() > 0) { masterViewer.setSelection(null); IStructuredSelection selection = new StructuredSelection(masterViewer.getTable().getItem(0).getData()); masterViewer.setSelection(selection); } } } }; setAction(ActionFactory.REFRESH.getId(), action); /* 削除(Delete) */ action = new Action() { @Override public void run() { if (getActiveViewer().equals(getMasterViewer())) { removeButtonSelected(MASTER); } else { removeButtonSelected(SERVANT); } } }; setAction(ActionFactory.DELETE.getId(), action); } @Override protected Control createMasterArea(Composite parent) { ViewForm form = new ViewForm(parent, SWT.FLAT); /* メニューボタンを作る */ form.setTopLeft(createMenuBar(form, MASTER)); /* アイテム表示領域 */ form.setContent(super.createMasterArea(form)); return form; } @Override protected Control createServantArea(Composite parent) { ViewForm form = new ViewForm(parent, SWT.FLAT); /* メニューボタンを作る */ form.setTopLeft(createMenuBar(form, SERVANT)); /* アイテム表示領域 */ form.setContent(super.createServantArea(form)); return form; } /** * 一覧を表示する領域の上に、メニューバーを作成する * * @param parent * @param masterOrServant * どちらの領域に追加するメニューバーなのかを示す * @return */ protected ToolBar createMenuBar(Composite parent, final String masterOrServant) { ToolBarManager manager = new ToolBarManager(); ToolBar bar = manager.createControl(parent); ToolItem add = new ToolItem(bar, SWT.PUSH); add.setImage(Icons.INSTANCE.get(Icons.IMG_TOOL_ADD)); add.setToolTipText("追加"); add.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addButtonSelected(masterOrServant); } }); ToolItem delete = new ToolItem(bar, SWT.PUSH); delete.setImage(Icons.INSTANCE.get(Icons.IMG_TOOL_DELETE)); delete.setToolTipText("削除"); delete.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { removeButtonSelected(masterOrServant); } }); return bar; } /** * dirtyフラグを切り替える */ public void dirtyChanged() { firePropertyChange(PROP_DIRTY); } /** * 追加ボタンが押されたときに呼び出される * * @param masterOrServant * どちらの領域の追加ボタンが押されたのかを示す * @see #MASTER * @see #SERVANT */ abstract protected void addButtonSelected(String masterOrServant); /** * 削除ボタンが押されたときに呼び出される * * @param masterOrServant * どちらの領域の追加ボタンが押されたのかを示す * @see #MASTER * @see #SERVANT */ abstract protected void removeButtonSelected(String masterOrServant); /** * 辞書データ再取得 */ abstract protected void update(); /** * アイテムを削除した後、削除したアイテムのひとつ上のアイテムを選択する * * @param v */ protected void setNewSelection(TableViewer v) { IStructuredSelection s = null; Table t = v.getTable(); if (t.getSelectionCount() == 1) { int index = t.getSelectionIndex(); if (index > 0) { s = new StructuredSelection(t.getItem(index - 1).getData()); } else if (t.getItemCount() > 1) { s = new StructuredSelection(t.getItem(1).getData()); } } v.refresh(); v.setSelection(s); } }