svnno****@sourc*****
svnno****@sourc*****
2009年 2月 17日 (火) 22:48:44 JST
Revision: 2681 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2681 Author: daisuke_m Date: 2009-02-17 22:48:44 +0900 (Tue, 17 Feb 2009) Log Message: ----------- AbstractTableEditorを整備。 Modified Paths: -------------- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java Added Paths: ----------- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableEditor.java vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/TableEditorConfigurator.java Removed Paths: ------------- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableViewerEditArea.java -------------- next part -------------- Modified: vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java 2009-02-17 10:24:44 UTC (rev 2680) +++ vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java 2009-02-17 13:48:44 UTC (rev 2681) @@ -16,8 +16,6 @@ import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.MenuAdapter; -import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; @@ -27,10 +25,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; @@ -48,7 +43,8 @@ import org.jiemamy.eclipse.editor.DisplayPlace; import org.jiemamy.eclipse.editor.DisplayTarget; import org.jiemamy.eclipse.editor.utils.LabelStringUtil; -import org.jiemamy.eclipse.ui.AbstractTableViewerEditArea; +import org.jiemamy.eclipse.ui.AbstractTableEditor; +import org.jiemamy.eclipse.ui.TableEditorConfigurator; import org.jiemamy.eclipse.ui.helper.TextSelectionAdapter; import org.jiemamy.eclipse.ui.tab.AbstractTab; import org.jiemamy.editcommand.Command; @@ -79,7 +75,7 @@ private final RootModel rootModel; - private AbstractTableViewerEditArea domainEditArea; + private AbstractTableEditor domainEditArea; private Text txtDomainName; @@ -95,33 +91,28 @@ /** - * コンストラクタ。 + * インスタンスを生成する。 * - * @param parentTabFolder - * @param style + * @param parentTabFolder + * @param style * @param rootModel */ public RootEditDialogDomainTab(TabFolder parentTabFolder, int style, RootModel rootModel) { super(parentTabFolder, style, Messages.Tab_Domains); + this.rootModel = rootModel; + Composite composite = new Composite(parentTabFolder, SWT.NULL); composite.setLayout(new GridLayout(1, false)); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + domainEditArea = new DomainTableEditor(composite, SWT.NULL, rootModel); + domainEditArea.configure(); + domainEditArea.disableEditControls(); + getTabItem().setControl(composite); - - createDomainTab(composite); - domainEditArea.disableEditControls(); } - private void createDomainTab(Composite parent) { - domainEditArea = new DomainEditTableArea(rootModel); - domainEditArea.setAddLabel(Messages.Label_Add); - domainEditArea.setInsertLabel(Messages.Label_Insert); - domainEditArea.setRemoveLabel(Messages.Label_Remove); - domainEditArea.createControlArea(parent); - } - /** * Domain用ContentProvider @@ -187,27 +178,103 @@ } - private class DomainEditTableArea extends AbstractTableViewerEditArea { + /** + * Domain用LabelProvider + * + * @author daisuke + */ + private class DomainLabelProvider implements ITableLabelProvider { - @Deprecated - private RootModel rootModel; + public void addListener(ILabelProviderListener listener) { + // nothing to do + } - private Jiemamy jiemamy; + public void dispose() { + // nothing to do + } - private List<DomainModel> domains; + public Image getColumnImage(Object element, int columnIndex) { + ImageRegistry ir = JiemamyPlugin.getDefault().getImageRegistry(); + DomainModel domain = (DomainModel) element; + + if (columnIndex == 3) { + boolean notNull = DomainUtil.hasConstraint(domain, NotNullConstraintModel.class); + return ir.get(notNull ? Images.CHECK_ON : Images.CHECK_OFF); + } + return null; + } - private Table table; + public String getColumnText(Object element, int columnIndex) { + DomainModel domain = (DomainModel) element; + switch (columnIndex) { + case 0: + return LabelStringUtil.getString(rootModel, domain, DisplayTarget.NAME, DisplayPlace.FIGURE); + case 1: + return LabelStringUtil.getString(rootModel, domain, DisplayTarget.TYPE, DisplayPlace.FIGURE); + + default: + return ""; + } + } + public boolean isLabelProperty(Object element, String property) { + return false; + } + + public void removeListener(ILabelProviderListener listener) { + // nothing to do + } + } + + private class DomainTableEditor extends AbstractTableEditor { + + private final Jiemamy jiemamy; + + private Dialect dialect; + + private final List<DomainModel> domains; + /** - * コンストラクタ。 + * インスタンスを生成する。 * + * @param parent + * @param style * @param rootModel */ - public DomainEditTableArea(RootModel rootModel) { - this.rootModel = rootModel; + public DomainTableEditor(Composite parent, int style, final RootModel rootModel) { + super(parent, style, new TableEditorConfigurator() { + + public String getAddLabel() { + return Messages.Label_Add; + } + + public String getEditorTitle() { + return Messages.Label_GroupTitle_Domain; + } + + public String getInsertLabel() { + return Messages.Label_Insert; + } + + public String getRemoveLabel() { + return Messages.Label_Remove; + } + }); + jiemamy = rootModel.getJiemamy(); domains = rootModel.getDomains(); + + try { + dialect = RootModelUtil.getDialect(rootModel.getJiemamy().getFactory().getRootModel()); + } catch (ClassNotFoundException e) { + // THINK どうにか。。。w + dialect = JiemamyPlugin.getDialectResolver().getAllInstance().get(0); + } + + assert jiemamy != null; + assert domains != null; + assert dialect != null; } @Override @@ -223,7 +290,7 @@ domains.add(domainModel); int addedIndex = domains.indexOf(domainModel); - table.setSelection(addedIndex); + getTableViewer().getTable().setSelection(addedIndex); enableEditControls(addedIndex); txtDomainName.setFocus(); @@ -231,7 +298,13 @@ } @Override - protected void configureDetailEditControls() { + protected void configureEditorControls() { + super.configureEditorControls(); + + for (AvailableTypeInfo typeInfo : dialect.getAllDataTypes()) { + cmbColumnType.add(typeInfo.getTypeName()); + } + txtDomainName.addFocusListener(new TextSelectionAdapter(txtDomainName)); txtDomainName.addKeyListener(new KeyAdapter() { @@ -284,9 +357,8 @@ } @Override - protected void configureTable() { - super.configureTable(); - table = getTableViewer().getTable(); + protected void configureTable(final Table table) { + super.configureTable(table); table.addSelectionListener(new SelectionAdapter() { @@ -301,36 +373,36 @@ } }); - final Menu menu = new Menu(table); - table.setMenu(menu); - menu.addMenuListener(new MenuAdapter() { - - @Override - public void menuShown(MenuEvent evt) { - for (MenuItem item : menu.getItems()) { - item.dispose(); - } - int index = table.getSelectionIndex(); - if (index == -1) { - return; - } - - MenuItem removeItem = new MenuItem(menu, SWT.PUSH); - removeItem.setText("&Remove"); // TODO 外部化せよ。 - removeItem.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent evt) { - removeTableSelectionItem(); - } - }); - } - }); + // THINK ↓要る? +// final Menu menu = new Menu(table); +// table.setMenu(menu); +// menu.addMenuListener(new MenuAdapter() { +// +// @Override +// public void menuShown(MenuEvent evt) { +// for (MenuItem item : menu.getItems()) { +// item.dispose(); +// } +// int index = table.getSelectionIndex(); +// if (index == -1) { +// return; +// } +// +// MenuItem removeItem = new MenuItem(menu, SWT.PUSH); +// removeItem.setText("&Remove"); // TODO 外部化せよ。 +// removeItem.addSelectionListener(new SelectionAdapter() { +// +// @Override +// public void widgetSelected(SelectionEvent evt) { +// removeTableSelectionItem(); +// } +// }); +// } +// }); } @Override - protected void configureTableViewer() { - TableViewer tableViewer = getTableViewer(); + protected void configureTableViewer(TableViewer tableViewer) { tableViewer.setLabelProvider(new DomainLabelProvider()); final DomainContentProvider domainContentProvider = new DomainContentProvider(); tableViewer.setContentProvider(domainContentProvider); @@ -350,16 +422,11 @@ } @Override - protected Composite createEditDetailControls(Composite parent) { + protected void createEditorControls(Composite parent) { GridData gd; Label label; - Group group = new Group(parent, SWT.NULL); - group.setText(Messages.Label_GroupTitle_Domain); - group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - group.setLayout(new GridLayout(1, false)); - - Composite cmpNames = new Composite(group, SWT.NULL); + Composite cmpNames = new Composite(parent, SWT.NULL); cmpNames.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(2, false); layout.marginHeight = 0; @@ -372,7 +439,7 @@ txtDomainName = new Text(cmpNames, SWT.BORDER); txtDomainName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - Composite cmpTypes = new Composite(group, SWT.NULL); + Composite cmpTypes = new Composite(parent, SWT.NULL); cmpTypes.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); layout = new GridLayout(6, false); layout.marginHeight = 0; @@ -385,17 +452,6 @@ cmbColumnType = new Combo(cmpTypes, SWT.READ_ONLY); cmbColumnType.setVisibleItemCount(20); - Dialect dialect; - try { - dialect = RootModelUtil.getDialect(rootModel); - } catch (ClassNotFoundException e) { - // THINK どうにか。。。w - dialect = JiemamyPlugin.getDialectResolver().getAllInstance().get(0); - } - for (AvailableTypeInfo typeInfo : dialect.getAllDataTypes()) { - cmbColumnType.add(typeInfo.getTypeName()); - } - label = new Label(cmpTypes, SWT.NULL); label.setText(Messages.Label_Domain_DataTypeSize); @@ -411,7 +467,7 @@ txtCheck = new Text(cmpTypes, SWT.BORDER); txtCheck.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - Composite cmpDesc = new Composite(group, SWT.NULL); + Composite cmpDesc = new Composite(parent, SWT.NULL); cmpDesc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); layout = new GridLayout(2, false); layout.marginHeight = 0; @@ -422,7 +478,7 @@ txtDescription = new Text(cmpDesc, SWT.MULTI | SWT.BORDER); txtDescription.setLayoutData(new GridData(GridData.FILL_BOTH)); - Composite cmpChecks = new Composite(group, SWT.NULL); + Composite cmpChecks = new Composite(parent, SWT.NULL); RowLayout rowLayout = new RowLayout(); layout.marginHeight = 0; layout.marginWidth = 0; @@ -431,12 +487,10 @@ chkIsNotNull = new Button(cmpChecks, SWT.CHECK); chkIsNotNull.setText(Messages.Label_Domain_NotNullConstraint); - - return group; } @Override - protected void createTableColumns() { + protected void createTableColumns(Table table) { TableColumn colName = new TableColumn(table, SWT.LEFT); colName.setText(Messages.Column_Domain_Name); colName.setWidth(100); @@ -502,20 +556,21 @@ @Override protected JiemamyElement insertTableSelectionItem() { + Table table = getTableViewer().getTable(); int index = table.getSelectionIndex(); - JiemamyFactory factory = rootModel.getJiemamy().getFactory(); + JiemamyFactory factory = jiemamy.getFactory(); DomainModel domainModel = factory.newModel(DomainModel.class); - domainModel.setName("DOMAIN_" + (rootModel.getDomains().size() + 1)); + domainModel.setName("DOMAIN_" + (domains.size() + 1)); if (index < 0 || index > table.getItemCount()) { - rootModel.getDomains().add(domainModel); + domains.add(domainModel); } else { - rootModel.getDomains().add(index, domainModel); + domains.add(index, domainModel); } - int addedIndex = rootModel.getDomains().indexOf(domainModel); + int addedIndex = domains.indexOf(domainModel); table.setSelection(addedIndex); enableEditControls(addedIndex); txtDomainName.setFocus(); @@ -525,12 +580,13 @@ @Override protected void moveDownTableSelectionItem() { + Table table = getTableViewer().getTable(); int index = table.getSelectionIndex(); if (index < 0 || index >= table.getItemCount()) { return; } - ListUtils.moveUp(rootModel.getDomains(), index); + ListUtils.moveUp(domains, index); table.setSelection(index + 1); enableEditControls(index + 1); @@ -538,12 +594,13 @@ @Override protected void moveUpTableSelectionItem() { + Table table = getTableViewer().getTable(); int index = table.getSelectionIndex(); if (index <= 0 || index > table.getItemCount()) { return; } - ListUtils.moveUp(rootModel.getDomains(), index); + ListUtils.moveUp(domains, index); table.setSelection(index - 1); enableEditControls(index - 1); @@ -551,11 +608,12 @@ @Override protected JiemamyElement removeTableSelectionItem() { + Table table = getTableViewer().getTable(); int index = table.getSelectionIndex(); if (index < 0 || index > table.getItemCount()) { return null; } - DomainModel domainToRemove = rootModel.getDomains().remove(table.getSelectionIndex()); + DomainModel domainToRemove = domains.remove(table.getSelectionIndex()); TableViewer tableViewer = getTableViewer(); tableViewer.remove(domainToRemove); @@ -569,7 +627,7 @@ int selectionInedx = cmbColumnType.getSelectionIndex(); if (domainEditIndex != -1 && selectionInedx != -1) { - DomainModel domain = rootModel.getDomains().get(domainEditIndex); + DomainModel domain = domains.get(domainEditIndex); domain.setName(txtDomainName.getText()); // Dialect dialect = RootModelUtil.getDialect(rootModel); @@ -599,52 +657,4 @@ } } } - - /** - * Domain用LabelProvider - * - * @author daisuke - */ - private class DomainLabelProvider implements ITableLabelProvider { - - public void addListener(ILabelProviderListener listener) { - // nothing to do - } - - public void dispose() { - // nothing to do - } - - public Image getColumnImage(Object element, int columnIndex) { - ImageRegistry ir = JiemamyPlugin.getDefault().getImageRegistry(); - DomainModel domain = (DomainModel) element; - - if (columnIndex == 3) { - boolean notNull = DomainUtil.hasConstraint(domain, NotNullConstraintModel.class); - return ir.get(notNull ? Images.CHECK_ON : Images.CHECK_OFF); - } - return null; - } - - public String getColumnText(Object element, int columnIndex) { - DomainModel domain = (DomainModel) element; - switch (columnIndex) { - case 0: - return LabelStringUtil.getString(rootModel, domain, DisplayTarget.NAME, DisplayPlace.FIGURE); - case 1: - return LabelStringUtil.getString(rootModel, domain, DisplayTarget.TYPE, DisplayPlace.FIGURE); - - default: - return ""; - } - } - - public boolean isLabelProperty(Object element, String property) { - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // nothing to do - } - } } Copied: vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableEditor.java (from rev 2680, vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableViewerEditArea.java) =================================================================== --- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableEditor.java (rev 0) +++ vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableEditor.java 2009-02-17 13:48:44 UTC (rev 2681) @@ -0,0 +1,371 @@ +package org.jiemamy.eclipse.ui; + +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; + +/** + * テーブルを用いたエディタコンポーネントクラス。 + * + * <p>図のように、表・ボタン・編集コントロールからなるコンポーネント</p> + * + * <p>This component looks like this:<br/> + * <img src="http://img.f.hatena.ne.jp/images/fotolife/d/daisuke-m/20090217/20090217224121.png"> + * </p> + * + * @author daisuke + */ +public abstract class AbstractTableEditor extends Composite { + + private final TableViewer tableViewer; + + /** 追加ボタン */ + private Button btnAdd; + + /** 挿入ボタン */ + private Button btnInsert; + + /** 削除ボタン */ + private Button btnRemove; + + /** 上ボタン */ + private Button btnMoveUp; + + /** 下ボタン */ + private Button btnMoveDown; + + + /** + * インスタンスを生成する。 + * + * @param parent + * @param style + * @param configurator + */ + public AbstractTableEditor(Composite parent, int style, TableEditorConfigurator configurator) { + super(parent, style); + + // 親エリア + setLayout(new GridLayout(1, false)); + setLayoutData(new GridData(GridData.FILL_BOTH)); + + // 子エリア1 - テーブル + tableViewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); + + // 子エリア2 - ボタン + Composite cmpButtons = new Composite(this, SWT.NULL); + cmpButtons.setLayout(new RowLayout()); + cmpButtons.setLayoutData(new GridData()); + + if (configurator.getAddLabel() != null) { + btnAdd = new Button(cmpButtons, SWT.PUSH); + btnAdd.setText(configurator.getAddLabel()); + } + if (configurator.getInsertLabel() != null) { + btnInsert = new Button(cmpButtons, SWT.PUSH); + btnInsert.setText(configurator.getInsertLabel()); + } + if (configurator.getRemoveLabel() != null) { + btnRemove = new Button(cmpButtons, SWT.PUSH); + btnRemove.setText(configurator.getRemoveLabel()); + } + + // hookメソッドのコール + createOptionalEditButtons(cmpButtons); + + btnMoveUp = new Button(cmpButtons, SWT.ARROW | SWT.UP); + btnMoveDown = new Button(cmpButtons, SWT.ARROW | SWT.DOWN); + + // 子エリア3 - 詳細エディタ + Group grpEditor = new Group(this, SWT.NULL); + grpEditor.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + grpEditor.setLayout(new GridLayout(1, false)); + grpEditor.setText(configurator.getEditorTitle()); + + createEditorControls(grpEditor); + + assert tableViewer != null; + } + + /** + * TODO for daisuke + */ + public void configure() { + // 各種hookメソッドのcall + configureTable(tableViewer.getTable()); + configureTableViewer(tableViewer); + createTableColumns(tableViewer.getTable()); + configureCellEditor(); + configureEditButtons(); + configureEditorControls(); + + refreshTable(); + } + + /** + * 編集コントロールを無効にする。 + */ + public void disableEditControls() { + disableEditButtons(); + disableEditDetailControls(); + } + + /** + * 編集コントロールを有効にする。 + * + * @param index 選択されたindex + */ + public void enableEditControls(int index) { + enableEditButtons(index); + enableEditDetailControls(index); + } + + /** + * tableViewerを取得する。 + * + * @return tableViewer + */ + public final TableViewer getTableViewer() { + return tableViewer; + } + + /** + * Tableをリフレッシュする。 + */ + public final void refreshTable() { + tableViewer.refresh(); + } + + /** + * カラムをリフレッシュする。 + */ + public void refreshTableColumns() { + removeTableColumns(tableViewer.getTable()); + createTableColumns(tableViewer.getTable()); + refreshTable(); + } + + /** + * 追加ボタンが押された時の処理を行う。 + * + * @return 追加されたモデル + */ + protected abstract Object addItem(); + + /** + * CellEditorの設定を行う。 + */ + protected void configureCellEditor() { + // nothing to do + } + + /** + * 編集ボタンの設定を行う。 + */ + protected void configureEditButtons() { + if (btnAdd != null) { + btnAdd.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + addItem(); + } + }); + } + + if (btnInsert != null) { + btnInsert.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + insertTableSelectionItem(); + } + }); + } + + if (btnRemove != null) { + btnRemove.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + removeTableSelectionItem(); + } + }); + } + + if (btnMoveUp != null) { + btnMoveUp.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + moveUpTableSelectionItem(); + } + }); + } + + if (btnMoveDown != null) { + btnMoveDown.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + moveDownTableSelectionItem(); + } + }); + } + } + + /** + * 詳細編集コントロールの設定を行う。 + */ + protected void configureEditorControls() { + // nothing to do + } + + /** + * Tableの設定を行う。 + * @param table + */ + protected void configureTable(final Table table) { + table.setLayoutData(new GridData(GridData.FILL_BOTH)); + table.setHeaderVisible(true); + table.setLinesVisible(true); + table.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + int index = table.getSelectionIndex(); + if (index >= 0) { + enableEditControls(index); + } else { + disableEditControls(); + } + } + }); + } + + /** + * TableViewerの設定を行う。 + * @param tableViewer + */ + protected abstract void configureTableViewer(TableViewer tableViewer); + + /** + * 詳細編集コントロールを生成する。 + * + * @param parent 親 + */ + protected abstract void createEditorControls(Composite parent); + + /** + * 編集ボタン領域にオプションのコントロールを生成する。 デフォルトでは何も行わない。 + * + * @param cmpButtons + */ + protected void createOptionalEditButtons(Composite cmpButtons) { + // noting to do + } + + /** + * TableのColumnを生成する。 + * @param table + */ + protected abstract void createTableColumns(Table table); + + /** + * 編集ボタンを無効にする。 編集ボタン領域のオプションのコントロールについては関知しない。 + */ + protected void disableEditButtons() { + if (btnInsert != null) { + btnInsert.setEnabled(false); + } + if (btnRemove != null) { + btnRemove.setEnabled(false); + } + btnMoveUp.setEnabled(false); + btnMoveDown.setEnabled(false); + } + + /** + * 詳細編集コントロールを無効化する。 + */ + protected void disableEditDetailControls() { + // nothing to do + } + + /** + * 編集ボタンを有効にする。 編集ボタン領域にオプションのコントロールについては関知しない。 + * + * @param index 選択されたindex + */ + protected void enableEditButtons(int index) { + if (btnInsert != null) { + btnInsert.setEnabled(true); + } + if (btnRemove != null) { + btnRemove.setEnabled(true); + } + btnMoveUp.setEnabled(true); + btnMoveDown.setEnabled(true); + + // 選択が一番上だった場合 + if (index <= 0) { + btnMoveUp.setEnabled(false); + } + // 選択が一番下だった場合 + if (index >= tableViewer.getTable().getItemCount() - 1) { + btnMoveDown.setEnabled(false); + } + } + + /** + * 詳細編集コントロールを有効化する。 + * + * @param index + */ + protected void enableEditDetailControls(int index) { + // nothing to do + } + + /** + * 挿入ボタンが押された時の処理を行う。 + * + * @return 追加されたモデル + */ + protected abstract Object insertTableSelectionItem(); + + /** + * 下ボタンが押された時の処理を行う。 + */ + protected abstract void moveDownTableSelectionItem(); + + /** + * 上ボタンが押された時の処理を行う。 + */ + protected abstract void moveUpTableSelectionItem(); + + /** + * 削除ボタンが押された時の処理を行う。 + * + * @return 削除されたモデル + */ + protected abstract Object removeTableSelectionItem(); + + /** + * TableからColumnを全て削除する。 + * @param table + */ + private void removeTableColumns(Table table) { + for (TableColumn col : table.getColumns()) { + col.dispose(); + } + } +} Property changes on: vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableEditor.java ___________________________________________________________________ Added: svn:mime-type + text/plain Deleted: vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableViewerEditArea.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableViewerEditArea.java 2009-02-17 10:24:44 UTC (rev 2680) +++ vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/AbstractTableViewerEditArea.java 2009-02-17 13:48:44 UTC (rev 2681) @@ -1,407 +0,0 @@ -package org.jiemamy.eclipse.ui; - -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; - -/** - * 「テーブル」「追加・削除・上・下ボタン」「詳細」形式の編集エリアクラス。 - * - * @author daisuke - */ -public abstract class AbstractTableViewerEditArea { - - private TableViewer tableViewer; - - /** 追加ボタンに表示するラベルテキスト */ - private String addLabel = null; - - /** 挿入ボタンに表示するラベルテキスト */ - private String insertLabel = null; - - /** 削除ボタンに表示するラベルテキスト */ - private String removeLabel = null; - - /** 追加ボタン */ - private Button btnAdd; - - /** 挿入ボタン */ - private Button btnInsert; - - /** 削除ボタン */ - private Button btnRemove; - - /** 上ボタン */ - private Button btnMoveUp; - - /** 下ボタン */ - private Button btnMoveDown; - - - /** - * コントロールエリアを生成します。 - * - * @param parent 親 - * @return 生成されたコントロールエリア - */ - public Composite createControlArea(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout(1, false)); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - - createTableViewer(composite); - createEditControls(composite); - - return composite; - } - - /** - * 編集コントロールを無効にする。 - */ - public void disableEditControls() { - disableEditButtons(); - disableEditDetailControls(); - } - - /** - * 編集コントロールを有効にする。 - * - * @param index 選択されたindex - */ - public void enableEditControls(int index) { - enableEditButtons(index); - enableEditDetailControls(index); - } - - /** - * tableViewerを取得する。 - * - * @return tableViewer - */ - public TableViewer getTableViewer() { - return tableViewer; - } - - /** - * Tableをリフレッシュする。 - */ - public void refreshTable() { - tableViewer.refresh(); - } - - /** - * カラムをリフレッシュする。 - */ - public void refreshTableColumns() { - removeTableColumns(); - createTableColumns(); - refreshTable(); - } - - /** - * 追加ボタンに表示するラベルテキストを設定する。 - * - * @param addLabel 追加ボタンに表示するラベルテキスト - */ - public void setAddLabel(String addLabel) { - this.addLabel = addLabel; - } - - /** - * 挿入ボタンに表示するラベルテキストを設定する。 - * - * @param insertLabel 挿入ボタンに表示するラベルテキスト - */ - public void setInsertLabel(String insertLabel) { - this.insertLabel = insertLabel; - } - - /** - * 削除ボタンに表示するラベルテキストを設定する。 - * - * @param removeLabel 削除ボタンに表示するラベルテキスト - */ - public void setRemoveLabel(String removeLabel) { - this.removeLabel = removeLabel; - } - - /** - * 追加ボタンが押された時の処理を行う。 - * - * @return 追加されたモデル - */ - protected abstract Object addItem(); - - /** - * CellEditorの設定を行う。 - */ - protected void configureCellEditor() { - // nothing to do - } - - /** - * 詳細編集コントロールの設定を行う。 - */ - protected void configureDetailEditControls() { - // nothing to do - } - - /** - * 編集ボタンの設定を行う。 - */ - protected void configureEditButtons() { - if (addLabel != null) { - btnAdd.setText(addLabel); - btnAdd.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - addItem(); - } - }); - } - - if (insertLabel != null) { - btnInsert.setText(insertLabel); - btnInsert.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - insertTableSelectionItem(); - } - }); - } - - if (removeLabel != null) { - btnRemove.setText(removeLabel); - btnRemove.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - removeTableSelectionItem(); - } - }); - } - - btnMoveUp.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - moveUpTableSelectionItem(); - } - }); - - btnMoveDown.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - moveDownTableSelectionItem(); - } - }); - } - - /** - * Tableの設定を行う。 - */ - protected void configureTable() { - final Table table = tableViewer.getTable(); - table.setLayoutData(new GridData(GridData.FILL_BOTH)); - table.setHeaderVisible(true); - table.setLinesVisible(true); - table.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetSelected(SelectionEvent e) { - int index = table.getSelectionIndex(); - if (index >= 0) { - enableEditControls(index); - } else { - disableEditControls(); - } - } - }); - } - - /** - * TableViewerの設定を行う。 - */ - protected abstract void configureTableViewer(); - - /** - * 編集ボタンを生成する。 - * - * @param parent 親 - * @return 生成した編集ボタン - */ - protected Composite createEditButtons(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - composite.setLayout(new RowLayout()); - composite.setLayoutData(new GridData()); - - if (addLabel != null) { - btnAdd = new Button(composite, SWT.PUSH); - } - if (insertLabel != null) { - btnInsert = new Button(composite, SWT.PUSH); - } - if (removeLabel != null) { - btnRemove = new Button(composite, SWT.PUSH); - } - - createOptionalEditButtons(composite); - - btnMoveUp = new Button(composite, SWT.ARROW | SWT.UP); - btnMoveDown = new Button(composite, SWT.ARROW | SWT.DOWN); - - return composite; - } - - /** - * 編集コントロールを生成する。 - * - * @param parent 親 - */ - protected void createEditControls(Composite parent) { - createEditButtons(parent); - configureEditButtons(); - createEditDetailControls(parent); - configureDetailEditControls(); - } - - /** - * 詳細編集コントロールを生成する。 - * - * @param parent 親 - * @return 生成したコントロール - */ - protected Composite createEditDetailControls(Composite parent) { - // nothing to do - return null; - } - - /** - * 編集ボタン領域にオプションのコントロールを生成する。 デフォルトでは何も行わない。必要であればオーバーライドする。 - * - * @param parent - */ - protected void createOptionalEditButtons(Composite parent) { - // noting to do - } - - /** - * TableのColumnを生成する。 - */ - protected abstract void createTableColumns(); - - /** - * 編集ボタンを無効にする。 編集ボタン領域にオプションのコントロールについては関知しない。 - */ - protected void disableEditButtons() { - if (insertLabel != null) { - btnInsert.setEnabled(false); - } - if (removeLabel != null) { - btnRemove.setEnabled(false); - } - btnMoveUp.setEnabled(false); - btnMoveDown.setEnabled(false); - } - - /** - * 詳細編集コントロールを無効化する。 - */ - protected void disableEditDetailControls() { - // nothing to do - } - - /** - * 編集ボタンを有効にする。 編集ボタン領域にオプションのコントロールについては関知しない。 - * - * @param index 選択されたindex - */ - protected void enableEditButtons(int index) { - if (insertLabel != null) { - btnInsert.setEnabled(true); - } - if (removeLabel != null) { - btnRemove.setEnabled(true); - } - btnMoveUp.setEnabled(true); - btnMoveDown.setEnabled(true); - - // 選択が一番上だった場合 - if (index <= 0) { - btnMoveUp.setEnabled(false); - } - // 選択が一番下だった場合 - if (index >= tableViewer.getTable().getItemCount() - 1) { - btnMoveDown.setEnabled(false); - } - } - - /** - * 詳細編集コントロールを有効化する。 - * - * @param index - */ - protected void enableEditDetailControls(int index) { - // nothing to do - } - - /** - * 挿入ボタンが押された時の処理を行う。 - * - * @return 追加されたモデル - */ - protected abstract Object insertTableSelectionItem(); - - /** - * 下ボタンが押された時の処理を行う。 - */ - protected abstract void moveDownTableSelectionItem(); - - /** - * 上ボタンが押された時の処理を行う。 - */ - protected abstract void moveUpTableSelectionItem(); - - /** - * 削除ボタンが押された時の処理を行う。 - * - * @return 削除されたモデル - */ - protected abstract Object removeTableSelectionItem(); - - /** - * TableViewerを生成し、各種設定を行う。 - * - * @param parent - */ - private void createTableViewer(Composite parent) { - tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); - - configureTable(); - createTableColumns(); - configureTableViewer(); - configureCellEditor(); - refreshTable(); - } - - /** - * TableからColumnを全て削除する。 - */ - private void removeTableColumns() { - Table table = tableViewer.getTable(); - for (TableColumn col : table.getColumns()) { - col.dispose(); - } - } -} Added: vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/TableEditorConfigurator.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/TableEditorConfigurator.java (rev 0) +++ vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/TableEditorConfigurator.java 2009-02-17 13:48:44 UTC (rev 2681) @@ -0,0 +1,56 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * Created on 2009/02/17 + * + * This file is part of Jiemamy. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.eclipse.ui; + +/** + * TODO for daisuke + * + * @author daisuke + */ +public interface TableEditorConfigurator { + + /** + * 追加ボタンに表示するラベルテキストを取得する。 + * + * @return 追加ボタンに表示するラベルテキスト + */ + String getAddLabel(); + + /** + * TODO for daisuke + * + * @return + */ + String getEditorTitle(); + + /** + * 挿入ボタンに表示するラベルテキストを取得する。 + * + * @return 挿入ボタンに表示するラベルテキスト + */ + String getInsertLabel(); + + /** + * 削除ボタンに表示するラベルテキストを取得する。 + * + * @return removeLabel 削除ボタンに表示するラベルテキスト + */ + String getRemoveLabel(); + +} Property changes on: vesta/trunk/org.jiemamy.eclipse/src/main/java/org/jiemamy/eclipse/ui/TableEditorConfigurator.java ___________________________________________________________________ Added: svn:mime-type + text/plain