SWT table布局

此项目是我第一次接触插件开发,第一次使用SWT布局,有很多地方也是边写边改,考虑不是很全,希望对大家有帮助,如有不适合也请包涵。
部分效果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

/**
 * 表格设置按钮
 * @author 
 * 
 */
public class TableSetting extends SelectionAction{
	public final static String ID = "eyun.action.tablesetting";	
	private IWorkbenchPart part;
	private ZModelFigure modelFigure;
	private ZTable model;
	
	List<String> events=new ArrayList<>();
	@Override
	protected void init() {
		super.init();
		setId(ID);
		//设置名称,此处做了国际化处理
        setText(Messages.Tabel_Setting);
        //图标设置
        setImageDescriptor(EditorPlugin.getImageDescriptor("icons/action/table_setting.png")); //$NON-NLS-1$
        setEnabled(true);
        
	}


	public TableSetting(IWorkbenchPart part) {
		super(part);
		this.part = part;
	}

	/**
	 * 按钮是否可点击
	 */
	@Override
	protected boolean calculateEnabled() {
		List<?> selections = getSelectedObjects();
		 if (selections.size() == 1 && selections.get(0) instanceof ModelEditPart) {
	        	if(((ModelEditPart)selections.get(0)).getFigure() instanceof ZModelFigure) {
	        		modelFigure = (ZModelFigure)((ModelEditPart)selections.get(0)).getFigure();
	        	}
	        	if(((ModelEditPart)selections.get(0)).getModel() instanceof ZTable) {
	        		model = (ZTable)((ModelEditPart)selections.get(0)).getModel();
	        	}        	
	        }
	        if((model != null) && (modelFigure != null)) {
			return true;
	        }
			return false;
	}


	@Override
	public void run() {
		//获取当前组件的子组件信息布局表格设置的内容
		List<ListViewItem> childrenList = new ArrayList<ListViewItem>();
		List<ListViewItem> children = model.getChildren();
		for(ListViewItem child : children) {
			childrenList.add(child);
		}
		ZTableDialog dialog = new ZTableDialog(part.getSite().getShell(),childrenList);
		if(dialog.open() == Window.OK) {
			ArrayList<ListViewItem> items = dialog.getItemList();
			//不要第一列,下面代码需要根据自己项目需求处理,该项目要求展示行信息,只是展示效果,在窗口设置中还是需要行设置,以及行的处理
			int columnSizr=dialog.getColumnSize();
			if (dialog.getRowSize()==0||dialog.getItemList().size()==0) {
				MessageDialog.openInformation(part.getSite().getShell(), Messages.MessageDialog_hint , Messages.Table_Setting_tips);
				return;
			}
			int rowSize=dialog.getRowSize()+1;
			if(items.size() > 0) {
				model.resetTable(rowSize,items, columnSizr);
			}					
		}	
	}
}
package com.eyun.editor.actions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.stream.Collectors;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ICellEditorListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
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.eyun.editor.EditorPlugin;
import com.eyun.editor.Messages;
import com.eyun.editor.model.ListViewItem;
import com.eyun.editor.model.bean.item;
import com.eyun.editor.util.Converter;
import com.eyun.ui.editor.property.descriptor.ColorCellEditor2;

/**
 * table窗口布局
 */
public class ZTableDialog2 extends TitleAreaDialog {
	
	//记录点击行和列的index
	Integer	rowOrColumnIndexTemp=null;
	//记录点击单元格式第几行
	Integer cellByRow=null;
	//记录点击单元格式第几列
	Integer cellByColumn=null;
	// 行名称和列名称
	private HashSet<String> rowAndColumnName = new HashSet<String>();
	private HashSet<String> idSet = new HashSet<String>();
	// 列右侧table
	private Table table;
	// 列右侧table
	private Table rowTable;
	// 项目左侧table
	private Table styleTable;
	// 项目右侧table
	private Table styleRightTable;
	// 列头信息
	private java.util.ArrayList<ListViewItem> itemColumnList = new java.util.ArrayList<>();
	// 行头信息
	private java.util.ArrayList<ListViewItem> itemRowList = new java.util.ArrayList<>();
	//单元格信息
	private ConcurrentMap<Integer, ConcurrentMap<Integer, ListViewItem>> itemStyleMap = new ConcurrentHashMap<>();

	private List columnList;
	private List rowList;

	private String[] alignType = { Messages.Left_Top, Messages.Center_Top, Messages.Right_Top, Messages.Left_Center,
			Messages.Center_Center, Messages.Right_Center, Messages.Left_Bottom, Messages.Center_Bottom,
			Messages.Right_Bottom };
	//private String[] tableTitle = { "No", "Yes"};
	/**
	 * 初始化
	 * @param parentShell
	 * @param childrenList  主界面子控件
	 */
	public ZTableDialog2(Shell parentShell,java.util.List<ListViewItem> childrenList) {
		super(parentShell);
		setHelpAvailable(false);
		setShellStyle(getShellStyle() | SWT.RESIZE);
		/*//根据主界面tale数据获取行数
		int rowCount=-1;
		//布局单元格列的下标
		int cellColumnIndex=1;*/
		//根据主界面tale数据获取每行单元格的数据
		//ConcurrentMap<Integer, ListViewItem> rowInfoMap=null;
		//算出列数,列没有行的索引
		java.util.List<ListViewItem> rowlist = childrenList.stream().filter(item->item.getCaption().startsWith(Messages.Table_Cloumn)||item.getCellRowIndex()==null).collect(Collectors.toList());
		//获取单元格数量
		java.util.List<ListViewItem> cellList = childrenList.stream().filter(item->!(item.getCaption().startsWith(Messages.Table_Cloumn)||item.getCellRowIndex()==null)).collect(Collectors.toList());
		
		if (rowlist==null||rowlist.size()==0||childrenList.size()==1) {
			return;
		}
		//算出行数 
		Integer rowNum=	(childrenList.size()/rowlist.size())-1;
		//每隔多少次获取行高
		Integer  tempCount=cellList.size()/rowNum;
		for (int i = 0; i < cellList.size(); i+=tempCount) {
			//行高
		Integer rowHight=	cellList.get(i).getRowHeight();
		//第几行
		Integer rowIndex=cellList.get(i).getCellRowIndex();
		//String caption = createID(1);
		
		ListViewItem rowItem = new ListViewItem();
		rowItem.setCellRowName(cellList.get(i).getCellRowName());
		rowItem.setCaption(cellList.get(i).getCellRowName());
		rowItem.setText(cellList.get(i).getCellRowName());
		rowItem.setRowHeight(rowHight);
		rowItem.setCellRowIndex(rowIndex);
		itemRowList.add(rowItem);
		}		
		itemRowList.stream().forEach(rowitem->{
			//单元格元素的列标
			int cellColumnIndex=1;
			//一行的元素
			ConcurrentMap<Integer, ListViewItem> rowItems = new ConcurrentHashMap<>();
			rowItems.put(0,rowitem);
			for (int i = 0; i < cellList.size(); i++) {			
					if (cellList.get(i).getCellRowIndex()==rowitem.getCellRowIndex()) {
						rowItems.put(cellColumnIndex, cellList.get(i));
						cellColumnIndex++;
						}
			}
		 
		 itemStyleMap.put(rowitem.getCellRowIndex(), rowItems);
		});
		//解析子控件布局表格设置
		for (int i = 0; i < childrenList.size(); i++) {
			
			ListViewItem viewItem=childrenList.get(i);
			
			 if (viewItem.getCaption().startsWith(Messages.Table_Cloumn)||viewItem.getCellRowIndex()==null) {
				itemColumnList.add(viewItem);
			}/*else if (viewItem.getCaption().startsWith("行")) {
				rowInfoMap=new ConcurrentHashMap<>();
				cellColumnIndex=1;			
				rowInfoMap.put(0, viewItem);
				itemRowList.add(viewItem);
				rowCount++;
			} else {
				
				rowInfoMap.put(cellColumnIndex, viewItem);
				itemStyleMap.put(rowCount, rowInfoMap);
				cellColumnIndex++;
			}*/
			
				
		}
	
//		itemStyleMap.forEach((k,v)->{
//			System.out.println("第"+k+"行");
//			v.forEach((k1,v1)->{
//				System.out.print("列:"+k1+" ");
//				System.out.print("元素="+v1.getCaption()+"");
//			});
//			System.out.println();
//		});
		
	}
	@Override
	protected Control createDialogArea(Composite parent) {
		setTitle(Messages.Tabel_Setting);
		setMessage(Messages.Table_Info);
		getShell().setText(Messages.Tabel_Setting);

		TabFolder tf = new TabFolder(parent, SWT.TOP);
		// 列布局
		TabItem tableColumn = new TabItem(tf, SWT.NONE);
		tableColumn.setText(Messages.Table_Cloumn);
		Composite container = new Composite(tf, SWT.None);
		container.setLayout(new GridLayout(2, false));
		container.setLayoutData(new GridData(GridData.FILL_BOTH));
		container.setBackground(parent.getBackground());
		container.setFont(parent.getFont());
		Composite composite = new Composite(container, SWT.NONE);
		composite.setLayout(new GridLayout(4, false));
		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
		composite.setBackground(parent.getBackground());
		columnList = new List(composite, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		table = new Table(container, SWT.FULL_SELECTION | SWT.BORDER);
		createColumnAndRowLeftComp(composite, columnList, itemColumnList, table, 2);
		createRightComp(container, table, itemColumnList,columnList);
		tableColumn.setControl(container);

		// 行布局
		TabItem tableRow = new TabItem(tf, SWT.NONE);
		tableRow.setText(Messages.Table_Row);
		Composite tableRowInfo = new Composite(tf, SWT.None);
		tableRowInfo.setLayout(new GridLayout(2, false));
		tableRowInfo.setLayoutData(new GridData(GridData.FILL_BOTH));
		tableRowInfo.setBackground(parent.getBackground());
		tableRowInfo.setFont(parent.getFont());
		Composite RowComposite = new Composite(tableRowInfo, SWT.NONE);
		RowComposite.setLayout(new GridLayout(4, false));
		RowComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
		RowComposite.setBackground(parent.getBackground());
		rowList = new List(RowComposite, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		rowTable = new Table(tableRowInfo, SWT.FULL_SELECTION | SWT.BORDER);
		createColumnAndRowLeftComp(RowComposite, rowList, itemRowList, rowTable, 1);
		createRightComp(tableRowInfo, rowTable, itemRowList,rowList);
		tableRow.setControl(tableRowInfo);
		// 样式布局
		TabItem tableStyle = new TabItem(tf, SWT.NONE);
		tableStyle.setText(Messages.Table_Style);
		Composite tableStyleInfo = new Composite(tf, SWT.None);
		// 分为2部分
		tableStyleInfo.setLayout(new GridLayout(2, false));
		tableStyleInfo.setLayoutData(new GridData(GridData.FILL_BOTH));
		tableStyleInfo.setBackground(parent.getBackground());
		tableStyleInfo.setFont(parent.getFont());
		Composite styleLeftCom = new Composite(tableStyleInfo, SWT.NONE);
		styleLeftCom.setLayout(new GridLayout(2, false));
		styleLeftCom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
		styleLeftCom.setBackground(parent.getBackground());
		createTableStyleLeftComp(styleLeftCom);
		createTableStyleRightComp(tableStyleInfo);
		tableStyle.setControl(tableStyleInfo);
		return tf;
	}

	/**
	 * 设置表格项目右侧表格
	 * 
	 * @param parent
	 */
	public void createTableStyleRightComp(Composite parent) {

		styleRightTable = new Table(parent, SWT.FULL_SELECTION | SWT.BORDER);
		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
		gd.heightHint = getTableHeightHint(styleTable, 20);
		gd.widthHint = 300;
		styleRightTable.setLayoutData(gd);
		styleRightTable.setHeaderVisible(true);
		styleRightTable.setLinesVisible(true);
		TableColumn tcxName = new TableColumn(styleRightTable, SWT.None, 0);
		tcxName.setText(Messages.DeviceInformationViewPart_property);
		tcxName.setWidth(100);

		TableColumn tcxValue = new TableColumn(styleRightTable, SWT.None, 1);
		tcxValue.setText(Messages.DeviceInformationViewPart_value);
		tcxValue.setWidth(200);

		styleRightTable.addListener(SWT.MouseDown, new Listener() {

			@Override
			public void handleEvent(Event event) {
				
				Point point = new Point(event.x, event.y);
				TableItem item = styleRightTable.getItem(point);
				if (item == null) {
					return;
				}
				String propertyName = item.getText(0);
				if ("ID".equals(propertyName)) {
					// 不可修改ID
					return;
				}
				if (item != null) {
					int column = -1;
					for (int i = 1; i < styleRightTable.getColumnCount(); i++) {
						Rectangle rect = item.getBounds(i);
						if (rect.contains(point)) {
							column = i;
							break;
						}
					}
					if ((column == 1) && (Messages.TitleString.equals(propertyName) || Messages.Text_FontSize.equals(propertyName)
							|| Messages.Text_Alpha.equals(propertyName)))  {
						//将所有需要验证的数据封装
						Map<String,String> changPropertyMap=	new HashMap<>();
						TableItem[] items = styleRightTable.getItems();
						for (TableItem i : items) {
							String prop=i.getText(0);
							String value=i.getText(1);
							if (prop.equals(Messages.Text_Alpha)||prop.equals(Messages.Text_FontSize)) {
								changPropertyMap.put(prop, value);
							}
						}
						Text propertyTextControl = new Text(styleRightTable, SWT.LEFT);
						propertyTextControl.setText(item.getText(column));

						TableEditor editor = new TableEditor(styleRightTable);
						editor.grabHorizontal = true;
						editor.setEditor(propertyTextControl, item, column);
						propertyTextControl.setFocus();
						propertyTextControl.setSelection(0, item.getText(column).length());

						propertyTextControl.addListener(SWT.FocusOut, new Listener() {

							@Override
							public void handleEvent(Event event) {
								item.setText(1, propertyTextControl.getText());
								changPropertyMap.put(item.getText(0), propertyTextControl.getText());
								if (!checkProperty(changPropertyMap, 3)) {
									setErrorMessage(item.getText(0) + Messages.Action_AddItems_ValidateWarning);
									getButton(OK).setEnabled(false);
								} else {
									setErrorMessage(null);
									savePropertiesByCell();
									editor.dispose();
									propertyTextControl.dispose();
									getButton(OK).setEnabled(true);
									//刷新左侧表格单元格内容
        							if (cellByRow!=null &&  cellByColumn!=null&&(Messages.TitleString.equals(propertyName))) {
        							//根据点击事件中临时保存的行和列获取到item对象
        								//itemStyleMap.get(cellByRow).get(cellByColumn).setText(changPropertyMap.get(Messages.TitleString));
        								TableItem tableItem = styleTable.getItem(cellByRow);
        								tableItem.setText(cellByColumn, changPropertyMap.get(Messages.TitleString));
        								
        							}
								}
							}
						});
						propertyTextControl.addModifyListener(new ModifyListener() {

							@Override
							public void modifyText(ModifyEvent e) {
								changPropertyMap.put(item.getText(0), propertyTextControl.getText());
								// 验证输入字符
								if (!checkProperty(changPropertyMap, 3)) {
									setErrorMessage(item.getText(0) + Messages.Action_AddItems_ValidateWarning);
									getButton(OK).setEnabled(false);
								} else {
									setErrorMessage(null);
									getButton(OK).setEnabled(true);
								}
							}
						});
					} else if ((column == 1) && Messages.Text_FontColors.equals(propertyName)) {
						ColorCellEditor2 colorEditor = new ColorCellEditor2(styleRightTable);
						TableEditor editor = new TableEditor(styleRightTable);
						editor.grabHorizontal = true;
						editor.setEditor(colorEditor.getControl(), item, column);
						colorEditor.setFocus();
						colorEditor.addListener(new ICellEditorListener() {
							
							@Override
							public void editorValueChanged(boolean oldValidState, boolean newValidState) {
								// TODO Auto-generated method stub
							}
							
							@Override
							public void cancelEditor() {
								// TODO Auto-generated method stub
							}
							
							@Override
							public void applyEditorValue() {
								// TODO Auto-generated method stub
								item.setText(1, Converter.getHexColorValue((RGB)colorEditor.getValue()).substring(1));
								savePropertiesByCell();
								editor.dispose();
								colorEditor.getControl().dispose();
							}
						});
					} else if ((column == 1) &&  Messages.Text_Alignment.equals(propertyName)) {
						Combo combo = new Combo(styleRightTable, SWT.READ_ONLY);
						combo.setItems(alignType);
						combo.select(4);
						TableEditor editor = new TableEditor(styleRightTable);
						editor.grabHorizontal = true;
						editor.setEditor(combo, item, column);
						combo.setFocus();
						combo.addModifyListener(new ModifyListener() {
							
							@Override
							public void modifyText(ModifyEvent e) {
								// TODO Auto-generated method stub
							
								item.setText(1, combo.getText());
							      //	saveProperties();
							}
						});
        				combo.addListener(SWT.FocusOut, new Listener() {
							
							@Override
							public void handleEvent(Event event) {
								// TODO Auto-generated method stub
								savePropertiesByCell();
								editor.dispose();
								combo.dispose();
							}
						});
					}
				}
			}
		});

	}

	/**
	 * 设置表格项目的左侧样式
	 * 
	 * @param parent
	 */

	public void createTableStyleLeftComp(Composite parent) {
		styleTable = new Table(parent, SWT.FULL_SELECTION | SWT.BORDER);
		/*
		 * 水平对齐方式FILL是沿着水平充满多余空间 垂直对齐方式(TOP, CENTER,
		 * BOTTOM,LEFT,RIGHT和FILL)FILL是沿着垂直充满多余空间
		 * 水平填充空间(为false不填充,不过1,2参数如果为Fill时,此参数为false也没影响) 垂直填充,如果为false则不填充空间
		 * 水平空间(代表占据整个网格的多少个列) 垂直空间(代表占据整个网格的多少行)
		 */
		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);

		gd.heightHint = getTableHeightHint(styleTable, 15);
		gd.widthHint = 700;
		styleTable.setLayoutData(gd);
		styleTable.setHeaderVisible(true);
		styleTable.setLinesVisible(true);
		// 0 列为空
		TableColumn tcxName = new TableColumn(styleTable, SWT.None, 0);
		tcxName.setText("");
		tcxName.setWidth(100);
	/*	TableItem firstRow = new TableItem(styleTable, SWT.CENTER, 0);
		firstRow.setText(string);*/
		
		styleTable.addListener(SWT.MouseDown, new Listener() {

			@Override
			public void handleEvent(Event e) {
				Integer rowIndex = null;
				Integer columbIndex = null;
				String caption = null;
				// 获取鼠标点击的位置
				Point point = new Point(e.x, e.y);
				// 获得单元格的位置
				TableItem item = styleTable.getItem(point);
				TableItem[] rows = styleTable.getItems();
				if (item!=null&&item.getText()!=null) {
					for (int i = 0; i < rows.length; i++) {
						
						if (item.getText().equals(rows[i].getText())) {
							rowIndex = i ;
							cellByRow=rowIndex;
							System.out.println("row ==" + rowIndex);
						}
					}
				}
				for (int j = 0; j < styleTable.getColumnCount(); j++) {
				if (item==null||item.getBounds(j)==null) {
					break;
				}
					Rectangle rect = item.getBounds(j);
					if (rect.contains(point)) {
						caption = item.getText(j) == null ? "" : item.getText(j);
						columbIndex = j ;
						cellByColumn=columbIndex;
						//System.out.println("选择元素:" + caption + ",第" + j + "列");

					}
				}
				ListViewItem lvi = null;
				if ((rowIndex != null && columbIndex != null)&&columbIndex!=0) {
//					String tableIndex = rowIndex + columbIndex;
					if (itemStyleMap.get(rowIndex)!=null) {
						lvi=	itemStyleMap.get(rowIndex).get(columbIndex)!= null ?itemStyleMap.get(rowIndex).get(columbIndex) : null;
					}									
				}

				/*
				 * TableItem[] items= styleTable.getItems(); String row=""; String column="";
				 * for (int i = 0; i < items.length; i++) { for (int j = 0; j <
				 * table.getColumnCount(); j++) { Rectangle rect = items[i].getBounds(j); if
				 * (rect.contains(point)) { row=i+""; column=j+""; System.out.println("第" + i +
				 * "行" + ", 第" + j + "列," +"元素:"+items[i].getText(j)); } } }
				 */

				// for (ListViewItem lv : itemStyleList) {
				// if (caption.equals(lv.getCaption())) {
				// lvi = lv;
				// break;
				// }
				// }

				refreshCellTable(lvi, styleRightTable);

			}

		});
		//根据主界面回显表格样式数据

		if (itemRowList != null) {
			if (itemColumnList != null) {
				// 设置列
				for (int i = 0; i < itemColumnList.size(); i++) {
					TableColumn columns = new TableColumn(styleTable, SWT.FILL, (i+1));				
					columns.setText(itemColumnList.get(i).getText());
					columns.setWidth(100);
				}
			}
			// 设置行
			for (Integer rowKey:itemStyleMap.keySet()) {	
				TableItem rows = new TableItem(styleTable, SWT.CENTER, rowKey);
				for (Integer columnKey : itemStyleMap.get(rowKey).keySet()) {
					rows.setText(columnKey,itemStyleMap.get(rowKey).get(columnKey).getText());
					if (!idSet.contains(itemStyleMap.get(rowKey).get(columnKey).getCaption())) {
						idSet.add(itemStyleMap.get(rowKey).get(columnKey).getCaption());
					}
				}
				
			}
		
		}

		//清空操作
		Button deletBtn = new Button(parent, SWT.NONE);
		deletBtn.setToolTipText(Messages.Table_Clear);
		deletBtn.setImage(EditorPlugin.getImageDescriptor("icons/action/table_clear_16.png").createImage());
		deletBtn.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {

				itemStyleMap.forEach((k, v) -> {
				 v.forEach((k1, v1) -> {
						if (!v1.getCaption().startsWith(Messages.Table_Row)) 							
							v1.setText("");
						
					});
				}
				);
				//刷新左侧表格,获取所有列
				TableItem[] items = styleTable.getItems();
				int columnNum=	styleTable.getColumnCount();
				for (int i = 0; i < items.length; i++) {
					for (int j = 0; j < columnNum; j++) {
						//行头不清除
						if (j!=0) {
							items[i].setText(j,"");
						}
					}
				}
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});

	}

	/**
	 * 行和列左边list布局
	 * 
	 * @param composite
	 * @param listType
	 * @param itemListType
	 * @param tableType
	 * @param rowOrcolumn
	 *            1代表行 2列表列
	 */

	public void createColumnAndRowLeftComp(Composite composite, List listType,
			java.util.ArrayList<ListViewItem> itemListType, Table tableType, int rowOrcolumn) {

		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1);
		listType.setLayoutData(gd);
		listType.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				int index = listType.getSelectionIndex();
				rowOrColumnIndexTemp=index;
				//String caption = listType.getItem(index);
				ListViewItem lvi = null;
			/*	for (ListViewItem lv : itemListType) {
					if (caption.equals(lv.getCaption())) 
					if (caption.equals(lv.getCaption())) 
					{
						lvi = lv;
						break;
					}
				}*/
				lvi=	itemListType.get(index)!=null?itemListType.get(index):null;
				if (lvi != null) {
					if (itemListType.equals(itemRowList)) {
						//生成行表格数控
						refreshRowTable(lvi, tableType);
						
					}else {
						//生成列表格数控
						refreshColumnTable(lvi, tableType);
					}
					
				}
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {

			}
		});

		//初始化已存在的子项目
		for(ListViewItem lv : itemListType) {
			listType.add(lv.getText());
			idSet.add(lv.getCaption());
		}
		
		Button addBtn = new Button(composite, SWT.NONE);
		addBtn.setToolTipText(Messages.Action_AddItems_CreateItem);
		addBtn.setImage(EditorPlugin.getImageDescriptor("icons/action/add.png").createImage());
		addBtn.addSelectionListener(new SelectionListener() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				TableItem tableItem;
				TableColumn tcxName;
				ListViewItem item = new ListViewItem();
				//判断输入的是行还是列
				if (rowOrcolumn == 1) {
					ConcurrentMap<Integer, ListViewItem> columnMap = new ConcurrentHashMap<>();
					String caption = createID(1);
					item.setCaption(caption);
					item.setText(caption);
					//行的index
					item.setCellRowIndex(listType.getItemCount());
					//默认行高
					item.setRowHeight(30);
					listType.add(item.getText());
					itemListType.add(item);
					tableItem = new TableItem(styleTable, SWT.NO, listType.getItemCount() - 1);
					tableItem.setText(item.getText());
					if (styleTable.getColumnCount() > 0) {											
						columnMap.put(0, item);
						for (int i = 0; i < styleTable.getColumnCount() - 1; i++) {
							ListViewItem cellItem = new ListViewItem();	
							String cellCaption = createID(3);
							cellItem.setCaption(cellCaption);
							cellItem.setText(cellCaption);
							cellItem.setCellRowName(caption);
							//行的index
							cellItem.setCellRowIndex(listType.getItemCount()-1);
							//默认行高
							cellItem.setRowHeight(30);
							tableItem.setText(i + 1, cellCaption);
							// String index=(listType.getItemCount() - 1+"")+(i+1);
							Integer columnIndex = i + 1;
							//设置列的坐标
							cellItem.setCellColumnIndex(columnIndex);
							columnMap.put(columnIndex, cellItem);
							itemStyleMap.put(listType.getItemCount() - 1, columnMap);
						}
					}

				} else if (rowOrcolumn == 2) {

					// 获取行数
					int itemCount = styleTable.getItemCount();

					String caption = createID(2);
					item.setCaption(caption);
					item.setText(caption);
					item.setCellColumnIndex(listType.getItemCount()+1);
					//当列大于1时,设置表头公有属性,包括是否使能,表头背景色、背景图、表头高等
					if (itemListType.size()>1) {
					ListViewItem first=	itemListType.get(0);
					item.setTableTile(first.isTableTile());
					item.setTitleBackColor(first.getTitleBackColor());
					if (first.getTitleImage()!=null) 
					item.setTitleImage(first.getTitleImage());
					if (first.getTitleRowSpace()!=null) 
					item.setTitleRowSpace(first.getTitleRowSpace());
					}
					
					listType.add(item.getText());
					itemListType.add(item);
					tcxName = new TableColumn(styleTable, SWT.None, listType.getItemCount());
					tcxName.setText(item.getText());
					tcxName.setWidth(100);
			
					TableItem[] items = styleTable.getItems();
					int columns = styleTable.getColumnCount();
					if (itemCount > 0) {
						int row = 0;
						//记录获取行高的index
						int te=0;
						
						for (TableItem tItem : items) {
							Integer columnIndex = columns - 1 ;
							ListViewItem cellItem = new ListViewItem();
							String cellCaption = createID(3);
							cellItem.setCaption(cellCaption);
							cellItem.setText(cellCaption);
							//行的index
							cellItem.setCellRowIndex(row);
							//获取行高
						int hight=	itemRowList.get(te).getRowHeight();
							//行高
							cellItem.setRowHeight(hight);
							
							cellItem.setCellColumnIndex(columnIndex);
							
							cellItem.setCellRowName(tItem.getText());
							tItem.setText(columns - 1, cellCaption);
							Integer rowIndex = row;
							ConcurrentMap<Integer, ListViewItem> columnConcurrentMap = itemStyleMap.get(rowIndex);
							if (!columnConcurrentMap.isEmpty()) {
								columnConcurrentMap.put(columnIndex, cellItem);
								itemStyleMap.put(rowIndex , columnConcurrentMap);
							}
						
							row = row + 1;
							te++;
						}
					}

				}
				rowAndColumnName.add(item.getText());
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {

			}
		});
		Button removeBtn = new Button(composite, SWT.NONE);
		removeBtn.setToolTipText(Messages.Action_AddItems_RemoveItem);
		removeBtn.setImage(EditorPlugin.getImageDescriptor("icons/action/remove.png").createImage());
		removeBtn.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				int index = listType.getSelectionIndex();
				if (index < 0) {
					MessageDialog.openInformation(getShell(), Messages.MessageDialog_hint, "未选择要移除的项目");
					return;
				}
				String caption = listType.getItem(index);
				for (ListViewItem item : itemListType) {
					if (item.getCaption().equals(caption)) {
						itemListType.remove(item);
						break;
					}
				}
			
				
				idSet.remove(caption);
								
				listType.remove(index);
				if (index <= listType.getItemCount()) {
					listType.select(index);
				}

				if (rowOrcolumn == 1) {
					// 删除一行 

					styleTable.remove(index);

					Iterator<Integer> iterator = itemStyleMap.keySet().iterator();
					while (iterator.hasNext()) {
						Integer key = iterator.next();
						if (key==index) {
							itemStyleMap.get(key).forEach((k,v)->{
								String cellCaption = v.getCaption();
								idSet.remove(cellCaption);
							});
							iterator.remove();
						}
							
						if (key>index) {
							ConcurrentMap<Integer, ListViewItem> columnConcurrentMap = itemStyleMap.get(key);
							for (Integer i : columnConcurrentMap.keySet()) {
							columnConcurrentMap.get(i).setCellRowIndex(columnConcurrentMap.get(i).getCellRowIndex()-1);
							columnConcurrentMap.get(i).setRowHeight(columnConcurrentMap.get(i).getRowHeight());
							}
							
							iterator.remove();
							itemStyleMap.put(key-1, columnConcurrentMap);
						}
					}

				

				} else if (rowOrcolumn == 2) {
					for (ListViewItem item : itemListType) {
						if (item.getCellColumnIndex()>index) {
							item.setCellColumnIndex(item.getCellColumnIndex()-1);
			
						}
					}
					TableColumn[] columns = styleTable.getColumns();
					int columnIndex=0;
					for (TableColumn column : columns) {
						if (column.getText().equals(caption)) {
							
							column.dispose();
							break;
						}
						columnIndex++;
					}
					System.out.println(columnIndex);
					Iterator<Integer> iterator = itemStyleMap.keySet().iterator();
					while (iterator.hasNext()) {
						Integer key = iterator.next();
						ConcurrentMap<Integer, ListViewItem> columnMap = itemStyleMap.get(key);
						Iterator<Integer> iterator1 = columnMap.keySet().iterator();
						while (iterator1.hasNext()) {
							Integer k = iterator1.next();
							if (columnIndex==k) {
							String value=	columnMap.get(k).getCaption();
								idSet.remove(value);
								iterator1.remove();
							}
							//删除列后需要平移
							if (k>columnIndex) {
								ListViewItem temp=	columnMap.get(k);
								temp.setCellColumnIndex(k-1);
								iterator1.remove();
								columnMap.put(k-1, temp);
							}
						}
					}
						
				}
				rowAndColumnName.remove(caption);
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {

			}
		});

		Button upBtn = new Button(composite, SWT.NONE);
		upBtn.setToolTipText(Messages.Action_AddItems_UpMoveItem);
		upBtn.setImage(EditorPlugin.getImageDescriptor("icons/action/up.png").createImage());
		upBtn.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				int index = listType.getSelectionIndex();
				if (index < 0) {
					MessageDialog.openInformation(getShell(), Messages.MessageDialog_hint, Messages.Action_AddItems_UpMoveWarning1);
					return;
				}
				if (index == 0) {
					MessageDialog.openInformation(getShell(), Messages.MessageDialog_hint, Messages.Action_AddItems_UpMoveWarning2);
					return;
				}
				String selItem = listType.getItem(index);
				String convItem = listType.getItem(index - 1);
				listType.setItem(index, convItem);
				listType.setItem(index - 1, selItem);
				listType.setSelection(index - 1);
				if (rowOrcolumn == 1) {
					TableItem tItem = styleTable.getItem(index);
					TableItem beforeItem = styleTable.getItem(index - 1);
					String tItemInfo = tItem.getText();
					String bItemInfo = beforeItem.getText();
					tItem.setText(bItemInfo);
					beforeItem.setText(tItemInfo);
					ConcurrentMap<Integer, ListViewItem> nowRowMap = itemStyleMap.get(index);
					ConcurrentMap<Integer, ListViewItem> beforeRowMap = itemStyleMap.get(index-1);
					
					nowRowMap.forEach((k,v)->{
						v.setCellRowIndex(v.getCellRowIndex()-1);
						v.setRowHeight(v.getRowHeight());
					});
					beforeRowMap.forEach((k,v)->{
						v.setCellRowIndex(v.getCellRowIndex()+1);
						v.setRowHeight(v.getRowHeight());
					});
					
					
					/*itemStyleMap.remove(index);
					itemStyleMap.remove(index-1);*/
					itemStyleMap.put(index-1, nowRowMap);
					itemStyleMap.put(index, beforeRowMap);
					
					
					
					//重新刷新table界面
					//当前行数据
					ConcurrentMap<Integer, ListViewItem> rowMapTemp = itemStyleMap.get(index);
					//前一行数据
					ConcurrentMap<Integer, ListViewItem> beforeRowMapTemp = itemStyleMap.get(index-1);
					for (Integer key : rowMapTemp.keySet()) {
						tItem.setText(key,rowMapTemp.get(key).getText());	
						
					}
					
					for (Integer key : beforeRowMapTemp.keySet()) {
						beforeItem.setText(key,beforeRowMapTemp.get(key).getText());	
						
					}
					

				} else {
					
										
					// 第一列为空 ,当前列
					TableColumn tColumn = styleTable.getColumn(index + 1);
					TableColumn beforeColumn = styleTable.getColumn(index);
					String tInfo = tColumn.getText();
					String bInfo = beforeColumn.getText();
					tColumn.setText(bInfo);
					beforeColumn.setText(tInfo);
					if (itemListType.equals(itemColumnList)) {
						//列集合中当前坐标值,需要改变列集合的位置,因为itemStyleMap不包括列的元素
						ListViewItem columnByItemColumnList = itemListType.get(index);
						columnByItemColumnList.setCellColumnIndex(columnByItemColumnList.getCellColumnIndex()-1);
						ListViewItem beforColumnByItemColumnList = itemListType.get(index-1);
						beforColumnByItemColumnList.setCellColumnIndex(beforColumnByItemColumnList.getCellColumnIndex()+1);
						itemListType.remove(index);
						itemListType.remove(index-1);
						if (index==1) {
							itemListType.add(0,columnByItemColumnList);
							itemListType.add(1,beforColumnByItemColumnList);
						}else {
							//当前位置
							itemListType.add(index-1,columnByItemColumnList);
							itemListType.add(index,beforColumnByItemColumnList);
						}	
						
					}
				
					
					
					for (int i = 0; i < itemStyleMap.size(); i++) {
					TableItem tItem = styleTable.getItem(i);	
					ListViewItem nowColumn=	itemStyleMap.get(i).get(index + 1);
					ListViewItem beforeColumnItem=	itemStyleMap.get(i).get(index);
					itemStyleMap.get(i).put(index + 1, beforeColumnItem);
					itemStyleMap.get(i).put(index, nowColumn);
					tItem.setText(index,nowColumn.getText());
					tItem.setText(index+1,beforeColumnItem.getText());
					}
				}
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {

			}
		});

		Button downBtn = new Button(composite, SWT.NONE);
		downBtn.setToolTipText(Messages.Action_AddItems_DownMoveItem);
		downBtn.setImage(EditorPlugin.getImageDescriptor("icons/action/down.png").createImage());
		downBtn.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				int index = listType.getSelectionIndex();
				if (index < 0) {
					MessageDialog.openInformation(getShell(), Messages.MessageDialog_hint, Messages.Action_AddItems_DownMoveWarning1);
					return;
				}
				if (index == (listType.getItemCount() - 1)) {
					MessageDialog.openInformation(getShell(), Messages.MessageDialog_hint,  Messages.Action_AddItems_DownMoveWarning2);
					return;
				}
				String selItem = listType.getItem(index);
				String convItem = listType.getItem(index + 1);
				listType.setItem(index, convItem);
				listType.setItem(index + 1, selItem);
				listType.setSelection(index + 1);
				if (rowOrcolumn == 1) {
					// 当前item
					TableItem tItem = styleTable.getItem(index);
					TableItem nextItem = styleTable.getItem(index + 1);
					String tItemInfo = tItem.getText();
					String nextInfo = nextItem.getText();
					tItem.setText(nextInfo);
					nextItem.setText(tItemInfo);
					ConcurrentMap<Integer, ListViewItem> nowRowMap = itemStyleMap.get(index);
					ConcurrentMap<Integer, ListViewItem> afterRowMap = itemStyleMap.get(index + 1);
					nowRowMap.forEach((k,v)->{
						v.setCellRowIndex(v.getCellRowIndex()+1);
						v.setRowHeight(v.getRowHeight());
					});
					afterRowMap.forEach((k,v)->{
						v.setCellRowIndex(v.getCellRowIndex()-1);
						v.setRowHeight(v.getRowHeight());
					});
					
					
				/*	itemStyleMap.remove(index);
					itemStyleMap.remove(index+1);*/
					itemStyleMap.put(index+1, nowRowMap);
					itemStyleMap.put(index, afterRowMap);
					//当前行数据
					ConcurrentMap<Integer, ListViewItem> rowMapTemp = itemStyleMap.get(index);
					//后一行数据
					ConcurrentMap<Integer, ListViewItem> afterRowMapTemp = itemStyleMap.get(index+1);
					for (Integer key : rowMapTemp.keySet()) {
						tItem.setText(key,rowMapTemp.get(key).getText());	
						
					}
					
					for (Integer key : afterRowMapTemp.keySet()) {
						nextItem.setText(key,afterRowMapTemp.get(key).getText());	
						
					}
					

				} else {
					// 第一列为空
					TableColumn tColumn = styleTable.getColumn(index + 1);
					TableColumn nextColumn = styleTable.getColumn(index + 2);
					String tInfo = tColumn.getText();
					String nInfo = nextColumn.getText();
					tColumn.setText(nInfo);
					nextColumn.setText(tInfo);
					for (int i = 0; i < itemStyleMap.size(); i++) {
						TableItem tItem = styleTable.getItem(i);	
						ListViewItem nowColumn=	itemStyleMap.get(i).get(index + 1);
						ListViewItem nextColumnItem=	itemStyleMap.get(i).get(index+2);
						itemStyleMap.get(i).put(index + 1, nextColumnItem);
						itemStyleMap.get(i).put(index+2, nowColumn);
						
						tItem.setText(index+2,nowColumn.getText());
						tItem.setText(index+1,nextColumnItem.getText());
						
						}
					if (itemListType.equals(itemColumnList)) {
						ListViewItem columnByItemColumnList = itemListType.get(index);
						columnByItemColumnList.setCellColumnIndex(columnByItemColumnList.getCellColumnIndex()+1);
						ListViewItem nextColumnByItemColumnList = itemListType.get(index+1);
						nextColumnByItemColumnList.setCellColumnIndex(nextColumnByItemColumnList.getCellColumnIndex()-1);
						//删了一次后,后面所以想前移动,所以需要删除两次当前索引
						itemListType.remove(index);
						itemListType.remove(index);
						if (index==0) {
							itemListType.add(0,nextColumnByItemColumnList);
							itemListType.add(1,columnByItemColumnList);
						}else {
							itemListType.add(index,nextColumnByItemColumnList);
							itemListType.add(index+1,columnByItemColumnList);
						}
					}
					
					
					
				
					
					
					
				}

			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});

	}

	/**
	 * 行和列右侧table布局
	 * 
	 * @param parent
	 * @param table 包括 rowTable 、columnTable
	 * @param itemList 
	 */
	public void createRightComp(Composite parent, Table table, java.util.ArrayList<ListViewItem> itemList,List listType) {

		GridData gd = new GridData(GridData.FILL_VERTICAL);
		gd.heightHint = getTableHeightHint(table, 15);
		gd.widthHint = 300;
		table.setLayoutData(gd);
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		table.addListener(SWT.MouseDown, new Listener() {

			@Override
			public void handleEvent(Event event) {
				Point point = new Point(event.x, event.y);
				TableItem item = table.getItem(point);
				if (item == null) {
					return;
				}
				String propertyName = item.getText(0);
				/*if ("ID".equals(propertyName)) {
					// 不可修改ID
					return;
				}*/
				int column = -1;
				if (item != null) {
				
					for (int i = 1; i < table.getColumnCount(); i++) {
						Rectangle rect = item.getBounds(i);
						if (rect.contains(point)) {
							column = i;
							break;
						}
					}
					//判断是行还是列
					if (itemList.equals(itemRowList)) {
						Map<String,String> changPropertyMap=	new HashMap<>();
						if ((column == 1) && (Messages.TableRowSpace.equals(propertyName)
								)) {
							TableItem[] items = table.getItems();
							for (TableItem i : items) {
								String prop=i.getText(0);
								String value=i.getText(1);
								if (prop.equals(Messages.TableRowSpace)) {
									changPropertyMap.put(prop, value);
								}
							
							}
							Text propertyTextControl = new Text(table, SWT.LEFT);
							propertyTextControl.setText(item.getText(column));

							TableEditor editor = new TableEditor(table);
							editor.grabHorizontal = true;
							editor.setEditor(propertyTextControl, item, column);
							propertyTextControl.setFocus();
							propertyTextControl.setSelection(0, item.getText(column).length());
							propertyTextControl.addListener(SWT.FocusOut, new Listener() {
								@Override
								public void handleEvent(Event event) {
									item.setText(1, propertyTextControl.getText());        						
//	        	    				if(!validate(item.getText(0), propertyTextControl.getText()))
									changPropertyMap.put(item.getText(0), propertyTextControl.getText());
	        	    				if(!checkProperty(changPropertyMap, 1))
	        	    				{
	        							setErrorMessage(item.getText(0) + Messages.Action_AddItems_ValidateWarning);
	        							getButton(OK).setEnabled(false);
	        						} else {
	        							setErrorMessage(null);
	        							saveProperties(itemList,table);
	        							editor.dispose();
	            	    				propertyTextControl.dispose();
	        							getButton(OK).setEnabled(true);
	        							//刷新左侧item
	        						/*	if (rowOrColumnIndexTemp!=null  && (Messages.TableRowSpace.equals(propertyName))) {
	        								listType.setItem(rowOrColumnIndexTemp, item.getText(1));
	        								
	        								}*/	        									        							        							
	        						}        	    				
								}
							});
							propertyTextControl.addModifyListener(new ModifyListener() {

								@Override
								public void modifyText(ModifyEvent e) {
									// 验证输入字符
									changPropertyMap.put(item.getText(0), propertyTextControl.getText());
	        	    				if(!checkProperty(changPropertyMap, 1)) {
										setErrorMessage(item.getText(0) + Messages.Action_AddItems_ValidateWarning);
										getButton(OK).setEnabled(false);
									} else {
										setErrorMessage(null);
										getButton(OK).setEnabled(true);
									}
								}
							});
						}
						
					}else if(itemList.equals(itemColumnList)){
						Map<String,String> changPropertyMap=	new HashMap<>();
						if ((column == 1) && (Messages.TitleString.equals(propertyName) || Messages.Text_FontSize.equals(propertyName)
								|| Messages.Text_Alpha.equals(propertyName))) {
							
							TableItem[] items = table.getItems();
							for (TableItem i : items) {
								String prop=i.getText(0);
								String value=i.getText(1);
								if (prop.equals(Messages.Text_Alpha)||prop.equals(Messages.Text_FontSize)) {
									changPropertyMap.put(prop, value);
								}
							
							}
							
							Text propertyTextControl = new Text(table, SWT.LEFT);
							propertyTextControl.setText(item.getText(column));

							TableEditor editor = new TableEditor(table);
							editor.grabHorizontal = true;
							editor.setEditor(propertyTextControl, item, column);
							propertyTextControl.setFocus();
							propertyTextControl.setSelection(0, item.getText(column).length());

							propertyTextControl.addListener(SWT.FocusOut, new Listener() {

								@Override
								public void handleEvent(Event event) {
									item.setText(1, propertyTextControl.getText());        						
	        	    				//if(!validate(item.getText(0), propertyTextControl.getText())) 
									changPropertyMap.put(item.getText(0), propertyTextControl.getText());
									if(!checkProperty(changPropertyMap, 2))
	        	    				{
	        							setErrorMessage(item.getText(0) + Messages.Action_AddItems_ValidateWarning);
	        							getButton(OK).setEnabled(false);
	        						} else {
	        							setErrorMessage(null);
	        							saveProperties(itemList,table);
	        							editor.dispose();
	            	    				propertyTextControl.dispose();
	        							getButton(OK).setEnabled(true);
	        							//刷新左侧item
	        							if (rowOrColumnIndexTemp!=null  && (Messages.TitleString.equals(propertyName))) {
	        								listType.setItem(rowOrColumnIndexTemp, item.getText(1));
	        								
	        								}
	        								
	        							
	        							
	        						}        	    				
								}
							});
							propertyTextControl.addModifyListener(new ModifyListener() {

								@Override
								public void modifyText(ModifyEvent e) {
									// 验证输入字符
									changPropertyMap.put(item.getText(0), propertyTextControl.getText());
									if(!checkProperty(changPropertyMap, 2)){
										setErrorMessage(item.getText(0) + Messages.Action_AddItems_ValidateWarning);
										getButton(OK).setEnabled(false);
									} else {
										setErrorMessage(null);
										getButton(OK).setEnabled(true);
									}
								}
							});
						} else if ((column == 1) && Messages.Text_FontColors.equals(propertyName)) {
							ColorCellEditor2 colorEditor = new ColorCellEditor2(table);
							TableEditor editor = new TableEditor(table);
							editor.grabHorizontal = true;
							editor.setEditor(colorEditor.getControl(), item, column);
							colorEditor.setFocus();
							colorEditor.addListener(new ICellEditorListener() {
								
								@Override
								public void editorValueChanged(boolean oldValidState, boolean newValidState) {
									// TODO Auto-generated method stub
								}
								
								@Override
								public void cancelEditor() {
									// TODO Auto-generated method stub
								}
								
								@Override
								public void applyEditorValue() {
									// TODO Auto-generated method stub
									item.setText(1, Converter.getHexColorValue((RGB)colorEditor.getValue()).substring(1));
									saveProperties(itemList,table);
									editor.dispose();
									colorEditor.getControl().dispose();
								}
							});
						} else if((column == 1) && Messages.Text_Alignment.equals(propertyName)) {
							Combo combo = new Combo(table, SWT.READ_ONLY);
							combo.setItems(alignType);
							combo.setText(item.getText(column));
							TableEditor editor = new TableEditor(table);
	        				editor.grabHorizontal = true;
	        				editor.setEditor(combo, item, column);
	        				combo.setFocus();  
	        				combo.addModifyListener(new ModifyListener() {
								
								@Override
								public void modifyText(ModifyEvent e) {
									// TODO Auto-generated method stub
									//saveProperties();
									item.setText(1, combo.getText());
									saveProperties(itemList,table);
								}
							});
	        				combo.addListener(SWT.FocusOut, new Listener() {
								
								@Override
								public void handleEvent(Event event) {
									// TODO Auto-generated method stub
									editor.dispose();
									combo.dispose();
								}
							});
						}
						/* else if ((column == 1) && Messages.TableTitle.equals(propertyName)) {
								Combo combo = new Combo(table, SWT.READ_ONLY);
								combo.setItems(tableTitle);
								combo.select(0);
								TableEditor editor = new TableEditor(table);
								editor.grabHorizontal = true;
								editor.setEditor(combo, item, column);
								combo.setFocus();
							}*/
						
					}
					
					
				
				}
			}
		});
		TableColumn tcxName = new TableColumn(table, SWT.None, 0);
		tcxName.setText(Messages.DeviceInformationViewPart_property);
		tcxName.setWidth(100);

		TableColumn tcxValue = new TableColumn(table, SWT.None, 1);
		tcxValue.setText(Messages.DeviceInformationViewPart_value);
		tcxValue.setWidth(200);
	}

	public int getTableHeightHint(Table table, int rows) {
		if (table.getFont().equals(JFaceResources.getDefaultFont()))
			table.setFont(JFaceResources.getDialogFont());
		int result = table.getItemHeight() * rows + table.getHeaderHeight();
		if (table.getLinesVisible())
			result += table.getGridLineWidth() * (rows - 1);
		return result;
	}

	@Override
	protected void okPressed() {

	
		super.okPressed();
	}



	public int getColumnSize() {

		return itemColumnList.size();
	}
	public int getRowSize() {

		return itemRowList.size();
	}
	// 保存修改的属性
	public void saveProperties(java.util.ArrayList<ListViewItem> itemList, Table table) {
		for (ListViewItem lvi : itemList) {
			if (lvi.getCaption().equals(table.getItem(0).getText(1))) {
				for (int i = 1; i < table.getItemCount(); i++) {
					if (Messages.TitleString.equals(table.getItem(i).getText(0))) {
						lvi.setText(table.getItem(i).getText(1));
					} else if(Messages.Text_FontSize.equals(table.getItem(i).getText(0))) {
						lvi.setFontSize(Integer.parseInt(table.getItem(i).getText(1)));
					} else if(Messages.Text_Alpha.equals(table.getItem(i).getText(0))) {
						lvi.setTextAlpha((Float.parseFloat(table.getItem(i).getText(1))));
					} else if(Messages.Text_FontColors.equals(table.getItem(i).getText(0))) {
						lvi.setFontColors(Converter.Hex2Int("#"+(table.getItem(i).getText(1))));
					} else if(Messages.Text_Alignment.equals(table.getItem(i).getText(0))) {
						lvi.setAlignment(Converter.alignment2Number(table.getItem(i).getText(1)));
					}	 else if (Messages.TableRowSpace.equals(table.getItem(i).getText(0))) {
						lvi.setRowHeight((Integer.parseInt(table.getItem(i).getText(1))));
						//将整行单元格的行高重新设置
						itemStyleMap.get(rowOrColumnIndexTemp).forEach((k,v)->{
							v.setRowHeight(lvi.getRowHeight());
						});
					}
				}
				break;
			}
		}
	
		
	}
		// 保存单元格修改的属性
		public void savePropertiesByCell() {
			if (!itemStyleMap.isEmpty()) {
				for (Integer itemStyleMapKey : itemStyleMap.keySet()) {
					itemStyleMap.get(itemStyleMapKey).forEach((k,lvi)->{
						if (lvi.getCaption().equals(styleRightTable.getItem(0).getText(1))) {
							for (int i = 1; i < styleRightTable.getItemCount(); i++) {
								if(Messages.TitleString.equals(styleRightTable.getItem(i).getText(0))) {
									lvi.setText(styleRightTable.getItem(i).getText(1));
								} else if(Messages.Text_FontSize.equals(styleRightTable.getItem(i).getText(0))) {
									lvi.setFontSize(Integer.parseInt(styleRightTable.getItem(i).getText(1)));
								} else if(Messages.Text_Alpha.equals(styleRightTable.getItem(i).getText(0))) {
									lvi.setTextAlpha((Float.parseFloat(styleRightTable.getItem(i).getText(1))));
								} else if(Messages.Text_FontColors.equals(styleRightTable.getItem(i).getText(0))) {
									lvi.setFontColors(Converter.Hex2Int("#"+(styleRightTable.getItem(i).getText(1))));
								} else if(Messages.Text_Alignment.equals(styleRightTable.getItem(i).getText(0))) {
									lvi.setAlignment(Converter.alignment2Number(styleRightTable.getItem(i).getText(1)));
								}
							}
						}
						
					});
				}
				
				
				
			}
			
			
		/*	for (ListViewItem lvi : item) {
				if (lvi.getCaption().equals(table.getItem(0).getText(1))) {
					for (int i = 1; i < table.getItemCount(); i++) {
						if ("文字".equals(table.getItem(i).getText(0))) {
							lvi.setText(table.getItem(i).getText(1));
						} else if ("字体大小".equals(table.getItem(i).getText(0))) {
							lvi.setFontSize(Integer.parseInt(table.getItem(i).getText(1)));
						} else if ("字体透明度".equals(table.getItem(i).getText(0))) {
							lvi.setTextAlpha((Float.parseFloat(table.getItem(i).getText(1))));
						} else if ("对齐方式".equals(table.getItem(i).getText(0))) {
							lvi.setAlignment((Integer.parseInt(table.getItem(i).getText(1))));
						}
					}
					break;
				}
			}*/
		}
	// 根据选择子项展示其属性
	public void refreshColumnTable(ListViewItem lvi, Table table) {
		table.removeAll();
		if (lvi != null) {
			TableItem itemCaption = new TableItem(table, SWT.CENTER);
			itemCaption.setText(0, "ID");
			itemCaption.setText(1, lvi.getCaption());
			//使能表头
//			TableItem isTableTile = new TableItem(table, SWT.CENTER);
//			isTableTile.setText(0, Messages.TableTitle);
//			isTableTile.setText(1, lvi.isTableTile()?"是":"否");
			//内容
			TableItem itemText = new TableItem(table, SWT.CENTER);
			itemText.setText(0, Messages.TitleString);
			itemText.setText(1, lvi.getText());
			//背景图
	/*		TableItem itemImage = new TableItem(table, SWT.CENTER);
			itemImage.setText(0, Messages.TableTitleImage);
			itemImage.setText(1, lvi.getTitleImage()+"");*/
			//表头字体
			TableItem itemFontSize = new TableItem(table, SWT.CENTER);
			itemFontSize.setText(0, Messages.Text_FontSize);
			itemFontSize.setText(1, lvi.getFontSize() + "");
			//字体透明度
			TableItem itemTextAlpha = new TableItem(table, SWT.CENTER);
			itemTextAlpha.setText(0, Messages.Text_Alpha);
			itemTextAlpha.setText(1, lvi.getTextAlpha() + "");
			//文字颜色
			TableItem itemTextColor = new TableItem(table, SWT.CENTER);
			itemTextColor.setText(0, Messages.Text_FontColors);
			itemTextColor.setText(1, Converter.Int2Hex(lvi.getFontColors()).substring(1));
			//对齐方式
			TableItem itemAlignment = new TableItem(table, SWT.CENTER);
			itemAlignment.setText(0, Messages.Text_Alignment);
			itemAlignment.setText(1, Converter.number2Alignment(lvi.getAlignment()));
			//表头高度
		/*	TableItem itemSpace = new TableItem(table, SWT.CENTER);
			itemSpace.setText(0, Messages.TableRowSpace);
			itemSpace.setText(1, lvi.getTitleRowSpace() + "");*/
		
		
		}

	}
	
	
	public void refreshRowTable(ListViewItem lvi, Table table) {
		table.removeAll();
		if (lvi != null) {
			TableItem itemCaption = new TableItem(table, SWT.CENTER);
			itemCaption.setText(0, "ID");
			itemCaption.setText(1, lvi.getCaption());
			TableItem rowSpeace = new TableItem(table, SWT.CENTER);
			rowSpeace.setText(0, Messages.TableRowSpace);
			rowSpeace.setText(1, lvi.getRowHeight()+"");
						
		}

	}
	/**
	 * 单元格表格
	 * @param lvi
	 * @param table
	 */
	public void refreshCellTable(ListViewItem lvi, Table table) {
		table.removeAll();
		if (lvi != null) {
			TableItem itemCaption = new TableItem(table, SWT.CENTER);
			itemCaption.setText(0, "ID");
			itemCaption.setText(1, lvi.getCaption());

			TableItem itemText = new TableItem(table, SWT.CENTER);
			itemText.setText(0, Messages.TitleString);
			itemText.setText(1, lvi.getText());

			TableItem itemFontSize = new TableItem(table, SWT.CENTER);
			itemFontSize.setText(0,Messages.Text_FontSize);
			itemFontSize.setText(1, lvi.getFontSize() + "");

			TableItem itemTextAlpha = new TableItem(table, SWT.CENTER);
			itemTextAlpha.setText(0, Messages.Text_Alpha);
			itemTextAlpha.setText(1, lvi.getTextAlpha() + "");

			TableItem itemTextColor = new TableItem(table, SWT.CENTER);
			itemTextColor.setText(0,  Messages.Text_FontColors);
			itemTextColor.setText(1, Converter.Int2Hex(lvi.getFontColors()).substring(1));

			TableItem itemAlignment = new TableItem(table, SWT.CENTER);
			itemAlignment.setText(0,  Messages.Text_Alignment);
			itemAlignment.setText(1, Converter.number2Alignment(lvi.getAlignment()));
		}

	}

	/**
	 * 优化验证修改的属性方法
	 * @param map
	 * @param type 1代表行2,代表列3,代表项目
	 * @return
	 */
	public boolean checkProperty(Map<String, String> map,int type) {
		
		if (type==1) {
			int rowHight=	Integer.parseInt(map.get(Messages.TableRowSpace));
			if ((rowHight < 0) || (rowHight > 100)) {
				return false;
			} else {
				return true;
			}
		}else if (type==2) {
			if (map.get(Messages.Text_FontSize)==null||map.get(Messages.Text_Alpha)==null) {
				return false;
			}
			int fontSize =	Integer.parseInt(map.get(Messages.Text_FontSize));
			float alpha=	Float.parseFloat(map.get(Messages.Text_Alpha));
			
			
			if ((fontSize>=0&&fontSize<=100)&&(alpha>0&&alpha<=1)) {
				return true;
			}else return false;
		}else {
			if (map.get(Messages.Text_FontSize)==null||map.get(Messages.Text_Alpha)==null) {
				return false;
			}
			int fontSize =	Integer.parseInt(map.get(Messages.Text_FontSize));
			float alpha=	Float.parseFloat(map.get(Messages.Text_Alpha));
			
			
			if ((fontSize>=0&&fontSize<=100)&&(alpha>0&&alpha<=1)) {
				return true;
			}else return false;
		}
		
	
	}
	// 验证修改的属性
	public boolean validate(String name, String value) {
		if (Messages.Text_FontSize.equals(name)) {
			try {
				int fontSize = Integer.parseInt(value);
				if ((fontSize < 0) || (fontSize > 100)) {
					return false;
				} else {
					return true;
				}
			} catch (NumberFormatException e) {
				return false;
			}
		} else if (Messages.Text_Alpha.equals(name)) {
			try {
				float alpha = Float.parseFloat(value);
				if ((alpha < 0) || (alpha > 1)) {
					return false;
				} else {
					return true;
				}
			} catch (NumberFormatException e) {
				return false;
			}
		} else if (Messages.TableRowSpace.equals(name)) {
			try {
				int rowHight = Integer.parseInt(value);
				if ((rowHight < 0) || (rowHight > 100)) {
					return false;
				} else {
					return true;
				}
			} catch (NumberFormatException e) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 
	 * @param type
	 *            1 是行 2 是咧 3是单元格
	 * @return
	 */
	public String createID(int type) {

		if (type == 1) {
			int offset = 1;
			while (idSet.contains(Messages.Table_Row + offset)) {
				++offset;
			}
			idSet.add(Messages.Table_Row + offset);
			return Messages.Table_Row + offset;
		} else if (type == 2) {
			int offset = 1;
			while (idSet.contains(Messages.Table_Cloumn + offset)) {
				++offset;
			}
			idSet.add(Messages.Table_Cloumn + offset);
			return Messages.Table_Cloumn + offset;
		} else {
			int offset = 1;
			while (idSet.contains("item" + offset)) {
				++offset;
			}
			idSet.add("item" + offset);
			return "item" + offset;
		}

	}
	
	//按照最终顺序调整list中的顺序
	public java.util.ArrayList<ListViewItem> getItemList() {
		//最终返回界面样式集合
		java.util.ArrayList<ListViewItem> arrayList = new java.util.ArrayList<ListViewItem>();
	/*	//第一个为空
		ListViewItem first=new ListViewItem();
		arrayList.add(first);*/
	
		
		itemColumnList.forEach(item->{
			arrayList.add(item);
		});
		itemStyleMap.forEach((k,v)->{
			v.forEach((k1,v1)->{
				if (!v1.getCaption().startsWith(Messages.Table_Row)) {
					arrayList.add(v1);
				}
				
			});
			
		});
		return arrayList;
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值