propsheet.java

来自「一个简单的visio程序。」· Java 代码 · 共 1,220 行 · 第 1/3 页

JAVA
1,220
字号
package webide.views.prop;

import java.awt.Panel;
import java.awt.Frame;
import java.awt.Component;
import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Vector;
import java.util.Hashtable;
import java.beans.BeanInfo;
import java.beans.PropertyEditor;
import java.beans.PropertyDescriptor;
import java.beans.PropertyEditorManager;
import webide.itools.Util;
import hc.util.MsgBox;
import Editor.*;

public class PropSheet extends Panel implements ItemListener
{
	private   webide.MainConsole          console;
	private   webide.Wrapper              wrapper;
	private   PropPanel                   proppanel;
	private   java.awt.Choice             PChoice;

	private   Hashtable                   ItemWrapper    = null;
	private   Hashtable                   hidePropTab    = null;
	          PropertyDescriptor[]        properties;
	private   PropertyEditor[]            editors;
	private   Component[]                 views;
	private   Object                      bean           = null;
	private   BeanInfo                    beaninfo       = null;
	private   int                         CurrentValue   = -1;
    private   int                         CaptionValue   = -1;
    public    boolean                     canRefresh     = false;
	          boolean                     changeTabindex = false;
	private   String                      space          = "  ";
	private   String                      ctrlname1      = null;

	/**
	 *Constructor
	 */
	public PropSheet(webide.MainConsole console)
	{
		this.console = console;
		setLayout(new BorderLayout(0,3));

		PChoice = new java.awt.Choice();
		add("North", PChoice);
		PChoice.setFont(new java.awt.Font("Dialog",java.awt.Font.PLAIN,11));
		PChoice.addItemListener(this);

		proppanel = new webide.views.prop.PropPanel(this);
		add("Center", proppanel);
	}
/* ---------------------------------------------------------------------------------------- */
/* ------------------------------------ Private Method ------------------------------------ */
	public java.awt.Dimension getPreferredSize()
	{
		return getMinimumSize();
    }

    public java.awt.Dimension getMinimumSize()
	{
		return new java.awt.Dimension(120,200);
    }

	public void LoadProp()
	{
		if(this.wrapper != null) refreshProp(this.wrapper);
		this.wrapper = webide.MainConsole.getCurrentFocus();
		refreshControl(this.wrapper);
		proppanel.setWrapper(this.wrapper);
		bean = this.wrapper.getBean();
		beaninfo = this.wrapper.getBeanInfo();
		properties = this.wrapper.getProp();

		setProperty();
	}

	public void setProperty()
	{
		Hashtable proptable = new Hashtable(properties.length);
		editors = new PropertyEditor[properties.length];
		int x=0;
		for (int i = 0; i < properties.length; i++)
		{
			Object  value  = null;
    	    String  name   = properties[i].getDisplayName().toLowerCase();
			Class   type   = properties[i].getPropertyType();
			value = this.wrapper.getPropValue(i);

			PropertyEditor editor = createEditor(i);
			editors[i] = editor;

			x++;
			Object[] obj = new Object[4];
			obj[0] = new Integer(i);
			obj[1] = type;
			obj[2] = editor;
			obj[3] = value;
			proptable.put(name,obj);
		}
		proppanel.setHashtable(proptable);
		if(proppanel.getViews() != null)
		    views = proppanel.getViews();

		boolean currentvalue = false;
        boolean captionvalue = false;
    	for (int i = 0; i < properties.length; i++)
    	{
    	    String name = properties[i].getDisplayName().toLowerCase();

    	    if(name.equalsIgnoreCase(proppanel.currentname))
    	    {
    	        CurrentValue = proppanel.getRow(i);
				currentvalue = true;
    	    }
    	    if(name.equalsIgnoreCase("caption"))
    	    {
    	        CaptionValue = proppanel.getRow(i);
    	        captionvalue = true;
    	    }
    	}

        if(currentvalue)
        {
            proppanel.CurrentValue = CurrentValue;
        }
		else if(captionvalue)
        {
            proppanel.CurrentValue = CaptionValue;
            proppanel.currentname  = "caption";
        }
        else
        {
            proppanel.CurrentValue = 0;
        }
	}

	public void setProperty(String name, int value)
	{
		Object Value = new Integer(value);
		this.proppanel.setProperty(name, Value);
	}

	public void refreshPropWindow()
	{
        PChoice.removeAll();
        if (views != null)
			removeComponent();

        properties      = null;
        views           = null;
        editors         = null;
	}

	public void refreshClear()
	{
        int count = PChoice.getItemCount();
		for (int i = 0; i < count; i++)
		{
            String item = PChoice.getItem(i).toLowerCase();
        }

		for(java.util.Enumeration e = ItemWrapper.keys(); e.hasMoreElements();)
		{
			String Key = (String)e.nextElement();
			String Name = ((webide.Wrapper)ItemWrapper.get(Key)).getName();

			webide.Wrapper WRAP = (webide.Wrapper)ItemWrapper.get(Key);
		}

		PChoice.removeAll();
        if(ItemWrapper.size() != 0 && ItemWrapper != null)
            ItemWrapper.clear();
	}

	public void refreshAll(webide.Wrapper cF)
	{
		PChoice.setVisible(false);
        PChoice.removeAll();
        if(ItemWrapper.size() != 0 && ItemWrapper != null)
            ItemWrapper.clear();

		webide.form.PainterForm  pf       = cF.getFrame();

		Vector nameVect = new Vector();
        String putItem  = getPutItem(pf);
        String cFItem   = null;

		ItemWrapper.put(putItem, pf.topWrapper); //---
        nameVect.addElement(putItem);

        if (cF == pf.topWrapper)
		{
            cFItem = putItem;
        }

		if (pf.clist != null && pf.clist.size() > 0)
		{
                for (int i=0; i<pf.clist.size(); i++)
				{
                    webide.Controlslist contrl = (webide.Controlslist)pf.clist.elementAt(i);
                    putItem = getPutItem(contrl);
                    ItemWrapper.put(putItem, contrl.wrap);
                    nameVect.addElement(putItem);
                    if (cF == contrl.wrap)
					{
                        cFItem = putItem;
                    }
                }
            }
            String[] items = getSortedItems(nameVect);
            for (int i = 0; i < items.length; i++)
			{
                PChoice.addItem(items[i]);
            }
            if (cFItem != null)
			{
                PChoice.select(cFItem);
            }
            PChoice.setVisible(true);
	}

	public void refreshControl(webide.Wrapper wrap)
	{
		if(wrap == null || !isVisible())         return;

		if(ItemWrapper == null)
		{
			ItemWrapper = new Hashtable();
			refreshControl(wrap, true);
		}
		else
		{
			String wrapName = wrap.getName();
			boolean Add = true;
			for(java.util.Enumeration e = ItemWrapper.keys(); e.hasMoreElements();)
			{
				String Key = (String)e.nextElement();
				String Name = ((webide.Wrapper)ItemWrapper.get(Key)).getName();
				webide.Wrapper WRAP = (webide.Wrapper)ItemWrapper.get(Key);
				if(WRAP == wrap)
				{
					Add = false;
					String ItemString = getPutItem(wrap);
					PChoice.select(ItemString);
					break;
				}
			}
			if(Add) refreshControl(wrap, Add);
		}
	}

	public void refreshControl(webide.Wrapper wrap, boolean add)
	{
        if(wrap == null || !isVisible()){
            return;
        }

		String ItemString = getPutItem(wrap);

        if (add)
		{
			for(java.util.Enumeration e = ItemWrapper.keys(); e.hasMoreElements();)
			{
				String Key = (String)e.nextElement();
				if(ItemString.equalsIgnoreCase(Key))
					return;
			}
			ItemWrapper.put(ItemString,wrap);
            int id = getInsetId(ItemString);
			PChoice.insert(ItemString,id);
            PChoice.select(ItemString);
	   }
		else
		{
            try
			{
                ItemWrapper.remove(ItemString);
                PChoice.remove(ItemString);
			}catch (IllegalArgumentException  e) {}
        }
    }

	public void refreshProp(webide.Wrapper wrap)
	{
        if(views != null)
			removeComponent();
	}

	private int getInsetId(String putItem)
	{
        int    count = PChoice.getItemCount();
        int    ind   = putItem.indexOf(space);
        String name  = putItem.substring(0,ind).toLowerCase();
        for (int i = 0; i < count; i++)
		{
            String item = PChoice.getItem(i).toLowerCase();
            if (name.compareTo(item) < 0)
                return i;
        }
        return count;
    }

	private String[] getSortedItems(Vector nameVect)
	{
        String[] names = new String[nameVect.size()];
        nameVect.copyInto(names);
        int i;

        for (int j = 0; j < names.length; j++)
		{
            i = j;
            int    ind1  = names[j].indexOf(' ');
            String name1 = names[j].substring(0,ind1).toLowerCase();
            for (int k = j+1; k < names.length; k++)
			{
                int    ind2  = names[k].indexOf(' ');
                String name2 = names[k].substring(0,ind2).toLowerCase();
                if (name2.compareTo(name1) < 0)
				{
                    name1 = name2;
                    i = k;
                }
            }
            if (i != j)
			{
                String t = names[j];
                names[j] = names[i];
                names[i] = t;
            }
        }
        return names;
    }   // end of getSortedItems.

	private String getPutItem(webide.Wrapper wrap)
	{
        Object bean    = wrap.getBean();
        String objName = (String)wrap.getPropValue("name");
        String putItem = null;

		if (bean instanceof webide.form.PainterForm)
		{
			putItem = getPutItem((webide.form.PainterForm)bean);
		}
        else
		{
			Object ind       = wrap.getPropValue("index");
            String className = null;
				webide.Controlslist control   = wrap.getControl();
				putItem = getPutItem(control);
        }
        return putItem;
    }

	private String getPutItem(webide.Controlslist control)
	{
        String putItem    = null;
        String className  = null;
        int    PointIndex = control.className.indexOf(".");
        if (PointIndex != -1)
		    className = control.className.substring(PointIndex+1);
        else
            className = control.className;

        String objName = (String)control.prop.get("name");
		Object ind     = control.prop.get("index");
        if (ind == null)
		    putItem = objName + space + className;
        else
            putItem = objName + "(" + ((Short)ind).shortValue()+ ")" + space + className;

        return putItem;
    }

	private String getPutItem(webide.form.PainterForm pf)
	{
		return pf.getName() + space + "Form";
    }

	private void removeComponent()
	{
		views = proppanel.getViews();
        for (int i = 0; i < views.length; i++)
		{
            Component view = views[i];
            if(view != null && view.isVisible())
			{
                view.setVisible(false);
            }
            if (view != null) proppanel.remove(view);
        }
    }

   	private PropertyEditor createEditor(int i)
	{
    	String name   = properties[i].getDisplayName();
		Class  type   = properties[i].getPropertyType();
		float  Ivalue = 0;

		PropertyEditor editor = null;
    	Object         value  = this.wrapper.getPropValue(i);
		try
		{
    	    Class pec = properties[i].getPropertyEditorClass();

⌨️ 快捷键说明

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