package com.cxy.redisclient.presentation.list; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import com.cxy.redisclient.integration.I18nFile; import com.cxy.redisclient.presentation.RedisClient; import com.cxy.redisclient.presentation.WatchDialog; import com.cxy.redisclient.presentation.component.DataContent; import com.cxy.redisclient.presentation.component.EditListener; import com.cxy.redisclient.presentation.component.PagingListener; import com.cxy.redisclient.service.ListService; public class ListDataContent extends DataContent { private Table table; private Button btnAppendTail; private Button btnDeleteHead; private Button btnDeleteTail; private ListService service = new ListService(); private Status status; private Button btnInsertHead; private Button btnApply; private Button btnCancel; private Button btnRefresh; private Button btnWatch; private CurrentData currentData = new CurrentData(); private EditListener listener; private Text editor; private PagingListener pageListener; private Group grpValues; private TableColumn tblclmnNewColumn; public ListDataContent(CTabItem tabItem, Image image, int id, String server, int db, String key, String dataTitle) { super(tabItem, image, id, server, db, key, dataTitle); status = Status.Normal; } /** * @wbp.parser.entryPoint */ @Override protected void initData(Composite dataComposite) { grpValues = new Group(dataComposite, SWT.NONE); grpValues.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1)); grpValues.setText(RedisClient.i18nFile.getText(I18nFile.VALUES)); grpValues.setLayout(new GridLayout(4, false)); table = new Table(grpValues, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.VIRTUAL); table.setHeaderVisible(true); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 5)); table.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { tableItemSelected(); } }); table.setLinesVisible(true); listener = new EditListener(table, true); table.addListener(SWT.MouseDown, listener); pageListener = new PagingListener(table, new ListPage(id, db, key)); table.addListener(SWT.SetData, pageListener); tblclmnNewColumn = new TableColumn(table, SWT.NONE); tblclmnNewColumn.setText(RedisClient.i18nFile.getText(I18nFile.VALUE)); tblclmnNewColumn.setWidth(200); btnInsertHead = new Button(grpValues, SWT.NONE); btnInsertHead.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnInsertHead.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { InputDialog dialog = new InputDialog(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.INSERTHEAD), RedisClient.i18nFile.getText(I18nFile.INPUTVALUES), "", null); if(dialog.open() == InputDialog.OK){ String value = dialog.getValue(); service.addHead(id, db, key, value); refresh(); } } }); btnInsertHead.setText(RedisClient.i18nFile.getText(I18nFile.INSERTHEAD)); btnAppendTail = new Button(grpValues, SWT.NONE); btnAppendTail.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnAppendTail.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { InputDialog dialog = new InputDialog(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.APPENDTAIL), RedisClient.i18nFile.getText(I18nFile.INPUTVALUES), "", null); if(dialog.open() == InputDialog.OK){ String value = dialog.getValue(); service.addTail(id, db, key, value); pageListener.setCount(); table.clear(table.getItemCount()-1); table.setSelection(table.getItemCount()-1); table.setSelection(-1); currentData.setItem(null); status = Status.Normal; statusChanged(); } } }); btnAppendTail.setText(RedisClient.i18nFile.getText(I18nFile.APPENDTAIL)); btnDeleteHead = new Button(grpValues, SWT.NONE); btnDeleteHead.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnDeleteHead.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { service.removeFirst(id, db, key); refresh(); } }); btnDeleteHead.setText(RedisClient.i18nFile.getText(I18nFile.DELETEHEAD)); btnDeleteTail = new Button(grpValues, SWT.NONE); btnDeleteTail.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnDeleteTail.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { service.removeLast(id, db, key); pageListener.setCount(); table.getItem(table.getItemCount()-1); table.setSelection(table.getItemCount()-1); table.setSelection(-1); currentData.setItem(null); status = Status.Normal; statusChanged(); } }); btnDeleteTail.setText(RedisClient.i18nFile.getText(I18nFile.DELETETAIL)); btnApply = new Button(grpValues, SWT.NONE); btnApply.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { TableItem[] items = table.getSelection(); service.setValue(id, db, key, table.getSelectionIndex(), items[0].getText()); table.setSelection(-1); currentData.setItem(null); status = Status.Normal; statusChanged(); } }); btnApply.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); setApply(false); btnApply.setText(RedisClient.i18nFile.getText(I18nFile.APPLY)); btnCancel = new Button(grpValues, SWT.NONE); btnCancel.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { switch(status){ case Normal: break; case Update: table.setSelection(-1); status = Status.Normal; currentData.setItem(null); statusChanged(); break; case Updating: currentData.reset(); status = Status.Update; listener.clickRow(currentData.getItem(), 0); addModifyTextListener(); statusChanged(); break; } } }); btnCancel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnCancel.setEnabled(false); btnCancel.setText(RedisClient.i18nFile.getText(I18nFile.CANCEL)); btnRefresh = new Button(grpValues, SWT.NONE); btnRefresh.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { refresh(); } }); btnRefresh.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnRefresh.setEnabled(true); btnRefresh.setText(RedisClient.i18nFile.getText(I18nFile.REFRESH)); btnWatch = new Button(grpValues, SWT.NONE); btnWatch.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnWatch.setText(RedisClient.i18nFile.getText(I18nFile.WATCH)); btnWatch.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { WatchDialog dialog = new WatchDialog(shell.getParent() .getShell(), image, currentData.getValue()); dialog.open(); } }); } @Override public void refreshLangUI() { grpValues.setText(RedisClient.i18nFile.getText(I18nFile.VALUES)); tblclmnNewColumn.setText(RedisClient.i18nFile.getText(I18nFile.VALUE)); btnInsertHead.setText(RedisClient.i18nFile.getText(I18nFile.INSERTHEAD)); btnAppendTail.setText(RedisClient.i18nFile.getText(I18nFile.APPENDTAIL)); btnDeleteHead.setText(RedisClient.i18nFile.getText(I18nFile.DELETEHEAD)); btnDeleteTail.setText(RedisClient.i18nFile.getText(I18nFile.DELETETAIL)); btnApply.setText(RedisClient.i18nFile.getText(I18nFile.APPLY)); btnCancel.setText(RedisClient.i18nFile.getText(I18nFile.CANCEL)); btnRefresh.setText(RedisClient.i18nFile.getText(I18nFile.REFRESH)); btnWatch.setText(RedisClient.i18nFile.getText(I18nFile.WATCH)); super.refreshLangUI(); } protected void tableItemSelected() { TableItem[] items = table.getSelection(); addModifyTextListener(); if(currentData.isItemChanged(items[0])){ switch(status){ case Normal: status = Status.Update; statusChanged(); break; case Update: break; case Updating: service.setValue(id, db, key, table.indexOf(currentData.getItem()), currentData.getItem().getText()); status = Status.Update; statusChanged(); break; } currentData.setItem(items[0]); } } public void statusChanged(){ switch(status){ case Normal: btnInsertHead.setEnabled(true); btnAppendTail.setEnabled(true); btnDeleteHead.setEnabled(true); btnDeleteTail.setEnabled(true); setApply(false); btnCancel.setEnabled(false); btnRefresh.setEnabled(true); btnWatch.setEnabled(false); break; case Update: btnInsertHead.setEnabled(true); btnAppendTail.setEnabled(true); btnDeleteHead.setEnabled(true); btnDeleteTail.setEnabled(true); setApply(false); btnCancel.setEnabled(true); btnRefresh.setEnabled(true); btnWatch.setEnabled(true); break; case Updating: btnInsertHead.setEnabled(false); btnAppendTail.setEnabled(false); btnDeleteHead.setEnabled(false); btnDeleteTail.setEnabled(false); setApply(true); btnCancel.setEnabled(true); btnRefresh.setEnabled(false); btnWatch.setEnabled(false); break; } } private void addModifyTextListener() { editor = listener.getText(); if(!editor.isDisposed()){ editor.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { switch(status){ case Normal: break; case Update: status = Status.Updating; statusChanged(); break; case Updating: break; } } }); } } private void refresh() { pageListener.setCount(); table.clearAll(); table.setSelection(0); table.setSelection(-1); currentData.setItem(null); status = Status.Normal; statusChanged(); } @Override public Button getApplyButtion() { return btnApply; } }