rowlayouttab.java

来自「一个简单的UNCODE 码生成程序」· Java 代码 · 共 414 行

JAVA
414
字号
/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.examples.layoutexample;


import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.custom.*;

class RowLayoutTab extends Tab {
	/* Controls for setting layout parameters */
	Button horizontal, vertical;
	Button wrap, pack, justify;
	Combo marginRight, marginLeft, marginTop, marginBottom, spacing;
	/* The example layout instance */
	RowLayout rowLayout;
	/* TableEditors and related controls*/
	TableEditor comboEditor, widthEditor, heightEditor;
	CCombo combo;
	Text widthText, heightText;
	
	/* Constants */
	final int COMBO_COL = 1;
	final int WIDTH_COL = 2;
	final int HEIGHT_COL = 3;
	
	final int TOTAL_COLS = 4;
	
	/**
	 * Creates the Tab within a given instance of LayoutExample.
	 */
	RowLayoutTab(LayoutExample instance) {
		super(instance);
	}
	
	/**
	 * Creates the widgets in the "child" group.
	 */
	void createChildWidgets () {
		/* Add common controls */
		super.createChildWidgets ();
		
		/* Add TableEditors */			
		comboEditor = new TableEditor (table);
		widthEditor = new TableEditor (table);
		heightEditor = new TableEditor (table);
		table.addMouseListener (new MouseAdapter () {
			public void mouseDown(MouseEvent e) {
				resetEditors();
				index = table.getSelectionIndex ();
				Point pt = new Point (e.x, e.y);
                newItem = table.getItem (pt);
                if (newItem == null) return;
                TableItem oldItem = comboEditor.getItem ();
                if (newItem == oldItem || newItem != lastSelected) {
					lastSelected = newItem;
					return;
				}
				table.showSelection ();
				
				combo = new CCombo (table, SWT.READ_ONLY);
				createComboEditor (combo, comboEditor);
				
				widthText = new Text (table, SWT.SINGLE);
				widthText.setText (((String [])data.elementAt (index)) [WIDTH_COL]);
				createTextEditor (widthText, widthEditor, WIDTH_COL);
				
				heightText = new Text (table, SWT.SINGLE);
				heightText.setText (((String [])data.elementAt (index)) [HEIGHT_COL]);
				createTextEditor (heightText, heightEditor, HEIGHT_COL);
                
                for (int i=0; i<table.getColumnCount (); i++) {
                	Rectangle rect = newItem.getBounds (i);
                    if (rect.contains (pt)) {
                    	switch (i) {
							case COMBO_COL :
								combo.setFocus ();	
								break;
							case WIDTH_COL :	
								widthText.setFocus ();
								break;
							case HEIGHT_COL :
								heightText.setFocus ();
								break;
							default :
								resetEditors ();
								break;
						}
                    }
                } 
			}
		});
		
		/* Add listener to add an element to the table */
		add.addSelectionListener(new SelectionAdapter () {
			public void widgetSelected(SelectionEvent e) {
				TableItem item = new TableItem (table, 0);
				String [] insert = new String [] { 
					String.valueOf (table.indexOf (item)),
					"Button", "-1", "-1"};
				item.setText (insert);
				data.addElement (insert);
				resetEditors ();
			}
		});
	}
	
	/**
	 * Creates the control widgets.
	 */
	void createControlWidgets () {
		/* Controls the type of RowLayout */
		Group typeGroup = new Group (controlGroup, SWT.NONE);
		typeGroup.setText (LayoutExample.getResourceString ("Type"));
		typeGroup.setLayout (new GridLayout ());
		GridData data = new GridData (GridData.FILL_HORIZONTAL);
		typeGroup.setLayoutData (data);
		horizontal = new Button (typeGroup, SWT.RADIO);
		horizontal.setText ("SWT.HORIZONTAL");
		horizontal.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); 
		horizontal.setSelection(true);
		horizontal.addSelectionListener (selectionListener);
		vertical = new Button (typeGroup, SWT.RADIO);
		vertical.setText ("SWT.VERTICAL");
		vertical.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); 
		vertical.addSelectionListener (selectionListener);
		
		/* Controls the margins and spacing of the RowLayout */
		String [] marginValues = new String [] {"0","3","5","10"};
		Group marginGroup = new Group (controlGroup, SWT.NONE);
		marginGroup.setText (LayoutExample.getResourceString ("Margins_Spacing"));
		data = new GridData (GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
		data.verticalSpan = 2;
		marginGroup.setLayoutData (data);
		GridLayout layout = new GridLayout ();
		layout.numColumns = 2;
		marginGroup.setLayout (layout);
		new Label (marginGroup, SWT.NONE).setText ("marginRight");
		marginRight = new Combo (marginGroup, SWT.NONE);
		marginRight.setItems (marginValues);
		marginRight.select (1);
		marginRight.setLayoutData (new GridData(GridData.FILL_HORIZONTAL));
		marginRight.addSelectionListener (selectionListener);
		marginRight.addTraverseListener (traverseListener);
		new Label (marginGroup, SWT.NONE).setText ("marginLeft");
		marginLeft = new Combo (marginGroup, SWT.NONE);
		marginLeft.setItems (marginValues);
		marginLeft.select (1);
		marginLeft.setLayoutData (new GridData(GridData.FILL_HORIZONTAL));
		marginLeft.addSelectionListener (selectionListener);
		marginLeft.addTraverseListener(traverseListener);
		new Label (marginGroup, SWT.NONE).setText ("marginTop");
		marginTop = new Combo (marginGroup, SWT.NONE);
		marginTop.setItems (marginValues);
		marginTop.select (1);
		marginTop.setLayoutData (new GridData(GridData.FILL_HORIZONTAL));
		marginTop.addSelectionListener (selectionListener);
		marginTop.addTraverseListener(traverseListener);
		new Label (marginGroup, SWT.NONE).setText ("marginBottom");
		marginBottom = new Combo (marginGroup, SWT.NONE);
		marginBottom.setItems (marginValues);
		marginBottom.select (1);
		marginBottom.setLayoutData (new GridData(GridData.FILL_HORIZONTAL));
		marginBottom.addSelectionListener (selectionListener);
		marginBottom.addTraverseListener(traverseListener);
		new Label (marginGroup, SWT.NONE).setText ("spacing");
		spacing = new Combo (marginGroup, SWT.NONE);
		spacing.setItems (marginValues);
		spacing.select (1);
		spacing.setLayoutData (new GridData(GridData.FILL_HORIZONTAL));
		spacing.addSelectionListener (selectionListener);
		spacing.addTraverseListener(traverseListener);
		
		/* Controls other parameters of the RowLayout */
		Group specGroup = new Group (controlGroup, SWT.NONE);
		specGroup.setText (LayoutExample.getResourceString ("Properties"));
		specGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
		specGroup.setLayout (new GridLayout ());
		wrap = new Button (specGroup, SWT.CHECK);
		wrap.setText ("wrap");
		wrap.setSelection (true);
		wrap.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); 
		wrap.addSelectionListener (selectionListener);
		pack = new Button (specGroup, SWT.CHECK);
		pack.setText ("pack");
		pack.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); 
		pack.setSelection (true);
		pack.addSelectionListener (selectionListener);
		justify = new Button (specGroup, SWT.CHECK);
		justify.setText ("justify");
		justify.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); 
		justify.addSelectionListener (selectionListener);
		
		/* Add common controls */
		super.createControlWidgets ();
		
		/* Position the sash */
		sash.setWeights (new int [] {6,5});
	}
	
	/**
	 * Creates the example layout.
	 */
	void createLayout () {
		rowLayout = new RowLayout ();
		layoutComposite.setLayout (rowLayout);
	}
		
	/** 
	 * Disposes the editors without placing their contents
	 * into the table.
	 */
	void disposeEditors () {
		comboEditor.setEditor (null, null, -1);
		combo.dispose ();
		widthText.dispose ();
		heightText.dispose ();
	}
	
	/**
	 * Generates code for the example layout.
	 */	
	StringBuffer generateLayoutCode () {
		StringBuffer code = new StringBuffer ();
		code.append ("\t\tRowLayout rowLayout = new RowLayout ();\n");
		if (rowLayout.type == SWT.VERTICAL) {
			code.append ("\t\trowLayout.type = SWT.VERTICAL;\n");
		}
		if (rowLayout.wrap == false) {
			code.append ("\t\trowLayout.wrap = false;\n");
		} 
		if (rowLayout.pack == false) {
			code.append ("\t\trowLayout.pack = false;\n");
		}
		if (rowLayout.justify == true) {
			code.append ("\t\trowLayout.justify = true;\n");
		}
		if (rowLayout.marginLeft != 3) {
			code.append ("\t\trowLayout.marginLeft = " + rowLayout.marginLeft + ";\n");
		}
		if (rowLayout.marginRight != 3) {
			code.append ("\t\trowLayout.marginRight = " + rowLayout.marginRight + ";\n");
		}
		if (rowLayout.marginTop != 3) {
			code.append ("\t\trowLayout.marginTop = " + rowLayout.marginTop + ";\n");
		}
		if (rowLayout.marginBottom != 3) {
			code.append ("\t\trowLayout.marginBottom = " + rowLayout.marginBottom + ";\n");
		}
		if (rowLayout.spacing != 3) {
			code.append ("\t\trowLayout.spacing = " + rowLayout.spacing + ";\n");
		}
		code.append ("\t\tshell.setLayout (rowLayout);\n");
		
		boolean first = true;
		for (int i = 0; i < children.length; i++) {
			Control control = children [i];
			code.append (getChildCode (control,i));
			RowData data = (RowData) control.getLayoutData ();
			if (data != null) {
				if (data.width != -1 || data.height != -1) {
					code.append ("\t\t");
					if (first) {
						code.append ("RowData ");
						first = false;
					}
					if (data.width == -1) {
						code.append ("data = new RowData (SWT.DEFAULT, " + data.height + ");\n");
					} else if (data.height == -1) {
						code.append ("data = new RowData (" + data.width + ", SWT.DEFAULT);\n");
					} else {
						code.append ("data = new RowData (" + data.width + ", " + data.height + ");\n");				
					}
					code.append ("\t\t" + names [i] + ".setLayoutData (data);\n");
				}
			}
		}
		return code;
	}
	
	/**
	 * Returns the layout data field names.
	 */
	String [] getLayoutDataFieldNames() {
		return new String [] { 
			"",
			"Control",
			"width", 
			"height"
		};
	}
	
	/**
	 * Gets the text for the tab folder item.
	 */
	String getTabText () {
		return "RowLayout";
	}
	
	/**
	 * Takes information from TableEditors and stores it.
	 */
	void resetEditors () {
		resetEditors (false);
	}
	
	void resetEditors (boolean tab) {
		TableItem oldItem = comboEditor.getItem ();
		if (oldItem != null) {
			int row = table.indexOf (oldItem);
			/* Make sure user has entered valid data */
			try {
				new Integer (widthText.getText ()).intValue ();
			} catch (NumberFormatException e) {
				widthText.setText (oldItem.getText (WIDTH_COL));
			}
			try {
				new Integer (heightText.getText ()).intValue ();
			} catch (NumberFormatException e) {
				heightText.setText (oldItem.getText (HEIGHT_COL));
			}
			String [] insert = new String [] {
				String.valueOf (row), combo.getText (), widthText.getText (), heightText.getText ()};
			data.setElementAt (insert, row);
			for (int i = 0 ; i < TOTAL_COLS; i++) {
				oldItem.setText (i, ((String [])data.elementAt (row)) [i]);
			}
			if (!tab) disposeEditors ();
		}
		setLayoutState ();
		refreshLayoutComposite ();
		setLayoutData ();
		layoutComposite.layout (true);
		layoutGroup.layout (true);
	}
	
	/**
	 * Sets the layout data for the children of the layout.
	 */
	void setLayoutData () {
		Control [] children = layoutComposite.getChildren ();
		TableItem [] items = table.getItems ();
		RowData data;
		int width, height;
		for (int i = 0; i < children.length; i++) {
			width = new Integer (items [i].getText (WIDTH_COL)).intValue ();
			height = new Integer (items [i].getText (HEIGHT_COL)).intValue ();
			data = new RowData (width, height);
			children [i].setLayoutData (data);
		}
		
	}
	
	/**
	 * Sets the state of the layout.
	 */
	void setLayoutState () {
		/* Set the type of layout */
		if (vertical.getSelection ()) {
			rowLayout.type = SWT.VERTICAL;
		} else {
			rowLayout.type = SWT.HORIZONTAL;
		}
		
		/* Set the margins and spacing */
		try {
			rowLayout.marginRight = new Integer (marginRight.getText ()).intValue ();
		} catch (NumberFormatException e) {
			rowLayout.marginRight = 3;
			marginRight.select (1);
		}
		try {
			rowLayout.marginLeft = new Integer (marginLeft.getText ()).intValue ();
		} catch (NumberFormatException e) {
			rowLayout.marginLeft = 3;
			marginLeft.select (1);
		}
		try {
			rowLayout.marginTop = new Integer (marginTop.getText ()).intValue ();
		} catch (NumberFormatException e) {
			rowLayout.marginTop = 3;
			marginTop.select (1);
		}
		try {
			rowLayout.marginBottom = new Integer (marginBottom.getText ()).intValue ();
		} catch (NumberFormatException e) {
			rowLayout.marginBottom = 3;
			marginBottom.select (1);
		}
		try {
			rowLayout.spacing = new Integer (spacing.getText ()).intValue ();
		} catch (NumberFormatException e) {
			rowLayout.spacing = 3;
			spacing.select (1);
		}
		
		/* Set the other layout properties */
		rowLayout.wrap = wrap.getSelection ();
		rowLayout.pack = pack.getSelection ();
		rowLayout.justify = justify.getSelection ();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?