proppanel.java
来自「一个简单的visio程序。」· Java 代码 · 共 1,380 行 · 第 1/3 页
JAVA
1,380 行
package webide.views.prop;
import java.awt.Font;
import java.awt.Color;
import java.awt.Panel;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Scrollbar;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.util.Vector;
import java.util.Hashtable;
import java.util.Enumeration;
import java.beans.PropertyEditor;
import webide.itools.Util;
import Editor.*;
import HAB.object.*;
public class PropPanel extends Panel implements AdjustmentListener, KeyListener,
MouseListener, MouseMotionListener,
ComponentListener
{
private boolean componentresize = false;
private boolean mousedragged = false;
private boolean mousepressed = false;
private boolean keypressed = false;
private boolean keyReleased = false;
private boolean valuechanged = false;
private int bwidth = 16;
private int currentRow = 0;
int CurrentValue = -1;
private int increaseunit = 0;
private int maxLength = 0;
private int pointcount = 0;
private int properlength;
private int rowheight = 16;
private int ScrollMoveCount = 0;
private int scrollwidth = 16;
private int strLeft = 2;
private int start = 0;
private int Wodd = 6;
private int Hodd = 8;
private int wodd = 0;
private int hodd = 0;
private String label0;
private String label1;
private webide.Wrapper wrapper = null;
public PropSheet propsheet = null;
private Component isVisibelView;
public Component views[];
public Hashtable pTab = null;
private Image offImage;
private Graphics offGrap;
private Scrollbar scrollbar ;
private Font f;
/**
*Constructor
*/
public PropPanel(PropSheet propsheet)
{
super();
this.propsheet = propsheet;
setLayout(null);
setBackground(Color.white);
scrollbar = new Scrollbar();
add(scrollbar);
wrapper = webide.MainConsole.currentFocus;
pTab = new Hashtable();
f = new Font("Dialog",Font.PLAIN,11);
wodd = Wodd/2;
hodd = Hodd/2;
addKeyListener(this);
addMouseListener(this);
addMouseMotionListener(this);
addComponentListener(this);
scrollbar.addAdjustmentListener(this);
doLayout();
}
/* ---------------------------------------- Paint -------------------------------------- */
public void update(Graphics g)
{
int l = -1;
if (g == null) {
return;
}
Dimension d = getSize();
g.setColor(Color.gray);
g.drawLine(1,2,d.width-2,2);
g.drawLine(1,2,1,d.height-3);
g.setColor(Color.black);
g.drawLine(2,3,d.width-3,3);
g.drawLine(2,3,2,d.height-4);
g.setColor(Color.white);
g.drawLine(1,d.height-3,d.width-2,d.height-3);
g.drawLine(d.width-2,2,d.width-2,d.height-3);
g.setColor(Color.lightGray);
g.drawLine(2,d.height-4,d.width-3,d.height-4);
g.drawLine(d.width-3,3,d.width-3,d.height-4);
g.drawLine(0,0,0,d.height-1);
g.drawLine(0,0,d.width-1,0);
g.drawLine(d.width-1,0,d.width-1,d.height-1);
g.drawLine(0,d.height-1,d.width-1,d.height-1);
g.drawLine(1,1,d.width-2,1);
g.drawLine(1,d.height-2,d.width-2,d.height-2);
if (offImage == null || componentresize) {
if(d.width < Wodd || d.height < Hodd) return;
offImage = createImage(d.width - Wodd, d.height - Hodd);
}
if(offImage == null) return;
offGrap = offImage.getGraphics();
offGrap.setColor(Color.white);
offGrap.fillRect(0,0,d.width - Wodd, d.height - Hodd);
if(pTab != null)
{
if(mousepressed && pTab.size() != 0)
{
offGrap.setColor(new Color(0x00000080));
offGrap.fillRect(0,getL()*rowheight,100+getAddLength()-scrollwidth-8, rowheight);
l = getL();
CurrentValue = getL();
mousepressed = false;
}
else if(valuechanged && pTab.size() != 0)
{
offGrap.setColor(new Color(0x00000080));
CurrentValue = CurrentValue - increaseunit;
l = CurrentValue;
offGrap.fillRect(0,CurrentValue*rowheight,100+getAddLength()-scrollwidth-8, rowheight);
valuechanged = false;
}
else if(pTab.size() != 0)
{
offGrap.setColor(new Color(0x00000080));
//start = 0;
//scrollbar.setValue((start+1)*16);
offGrap.fillRect(0,CurrentValue*rowheight,100+getAddLength()-scrollwidth-8,rowheight);
l = CurrentValue;
componentresize = false;
}
offGrap.setColor(Color.black);
offGrap.setFont(f);
int HashSize = pTab.size();
int PropSize = propsheet.properties.length;
if(HashSize != PropSize) return;
for(int i = 0; i < pTab.size()-start; i++)
{
Object s[] = (Object[])pTab.get(""+(i+start));
PropertyEditor EDitor = (PropertyEditor)s[3];
label0 = s[0].toString();
label1 = getPropToLabel(((Integer)s[1]).intValue(), views[i+start], (PropertyEditor)s[3]);
if( label0 == null)
label0 = "";
if(label1 == null)
label1 = "";
// label0 is the property name, label1 is the property value.
if(i == l)
{
offGrap.setColor(Color.white);
offGrap.drawString(label0, strLeft, rowheight-2+rowheight*i);
if(EDitor instanceof Editor.ColorEditor)
{
Object val = wrapper.getPropValue(((Integer)s[1]).intValue());
int Icolor = ((Integer)val).intValue();
Color color = Util.updateColor(Icolor);
int colorwidth = 0;
if(views[i+start].isVisible())
colorwidth = getEditWidth() - bwidth - 4;
else
colorwidth = getEditWidth() - 4;
offGrap.setColor(color);
offGrap.fillRect(101+getAddLength()+strLeft-scrollwidth-8, rowheight*i + 2, colorwidth, rowheight-4);
}
else
{
offGrap.setColor(Color.black);
offGrap.drawString(label1, 101+getAddLength()+strLeft-scrollwidth-8,rowheight-4+rowheight*i);
}
}
else
{
offGrap.setColor(Color.black);
offGrap.drawString(label0, strLeft,rowheight-2+rowheight*i);
if(EDitor instanceof Editor.ColorEditor)
{
Object val = wrapper.getPropValue(((Integer)s[1]).intValue());
int Icolor = ((Integer)val).intValue();
Color color = Util.updateColor(Icolor);
int colorwidth = getEditWidth() - 4;
offGrap.setColor(color);
offGrap.fillRect(101+getAddLength()+strLeft-scrollwidth-8, rowheight*i + 2, colorwidth, rowheight-4);
}
else
offGrap.drawString(label1, 101+getAddLength()+strLeft-scrollwidth-8,rowheight-4+rowheight*i);
}
offGrap.setColor(Color.lightGray);
offGrap.drawLine(0,rowheight*i+rowheight,d.width,rowheight*i+rowheight);
}
}
offGrap.drawLine(100+getAddLength()-scrollwidth-8,0,100+getAddLength()-scrollwidth-8,rowheight*(pTab.size()-1-start)+rowheight);
g.drawImage(offImage, wodd, hodd,this);
offGrap.dispose();
}
public void paint(Graphics g)
{
update(g);
}
/* ------------------------------------------ Method --------------------------------------*/
/**
*Private Methods
*/
public void setHashtable(Hashtable tab)
{
if(views != null)
{
for(int i = 0; i < views.length; i++ )
{
if(views[i] != null)
remove(views[i]);
else
System.err.println("views is null " + ((Object [])pTab.get(""+i))[0]);
}
}
if(tab == null)
{
pTab.clear();
views = new PropTextbox[0];
repaint();
return;
}
pTab.clear();
properlength = tab.size();
views = new Component[tab.size()];
int i = 0;
Vector vec = SortedElement(tab);
for(i = 0; i < vec.size(); i++)
{
Object[] ss = new Object[4];
ss[0] = capitalize((String)vec.elementAt(i));
Object[] obj = (Object[])tab.get(ss[0].toString().toLowerCase());
ss[1] = (Integer)obj[0];
ss[2] = (Class)obj[1];
ss[3] = (PropertyEditor)obj[2];
PropertyEditor editor = (PropertyEditor)obj[2];
if(editor == null)
{
System.out.println("Name : " + (String)ss[0] + "editor in PropPanel : " + editor + " --->>Value : " + obj[3]);
maxLengthString((String)ss[0]);
continue;
}
if(((String)ss[0]).equalsIgnoreCase("custom"))
{
views[i] = new SubButton(this, editor);
System.out.println("this is Custom");
}
else if (editor.isPaintable() && editor.supportsCustomEditor())
{
if(editor instanceof Editor.ColorEditor
|| editor instanceof Editor.VBListEditor
|| editor instanceof Editor.ItemListEditor)
{
views[i] = new DropButton(this, editor);
}
else
{
views[i] = new SubButton(this, editor);
}
}
else if(editor.getTags() != null)
{
views[i] = new PropChoice(this, editor);
}
else if (obj[3] instanceof Object[])
{
views[i] = new PropChoice(this, editor);
}
else if(editor instanceof Editor.PictureEditor)
{
views[i] = new SubButton(this, editor);
}
else if(editor.getAsText() != null)
{
views[i] = new PropTextbox(this, editor);
}
if(views[i] == null) System.out.println("name : " + ss[0] + "-->>type : " + ss[2] + " << -- Value " + obj[3].getClass());
add(views[i]);
views[i].setVisible(false);
pTab.put(""+i,ss);
maxLengthString((String)ss[0]);
}
if((getSize().height - 8) >= properlength*rowheight)
{
start = 0;
scrollbar.setVisible(false);
update(getGraphics());
return;
}
scrollbar.setBounds(getSize().width-scrollwidth - wodd, hodd, scrollwidth+1,getSize().height-6);
scrollbar.setVisible(true);
scrollbar.setMaximum((properlength+1)*rowheight);
scrollbar.setMinimum(0);
scrollbar.setVisibleAmount(getSize().height - Hodd);
scrollbar.setBlockIncrement(rowheight*4);
scrollbar.setUnitIncrement(rowheight);
float max = properlength*rowheight;
float value = (float)scrollbar.getValue();
start = (int)((value/max)*((float)properlength));
repaint();
}
private String capitalize(String aString)
{
StringBuffer workString;
if ( aString.length() == 0 )
{
return aString;
}
workString = new StringBuffer(aString);
workString.setCharAt(0, Character.toUpperCase(workString.charAt(0)) );
return workString.toString();
}
private Vector SortedElement(Hashtable tab)
{
Vector vec = new Vector();
for(Enumeration e = tab.keys(); e.hasMoreElements();)
{
String str = (String)e.nextElement();
if(vec.size() > 0)
{
boolean insert = false;
for(int j = 0; j < vec.size(); j++)
{
if(str.compareTo((String)vec.elementAt(j)) <= 0)
{
insert = true;
vec.insertElementAt(str, j);
break;
}
}
if(!insert)
{
vec.addElement(str);
}
}
else
vec.addElement(str);
}
return vec;
}
public Component[] getViews()
{
Component[] VIEWS = new Component[views.length];
for(int i = 0; i < views.length; i++)
{
Object s[] = (Object[])pTab.get(""+i);
int j = ((Integer)s[1]).intValue();
VIEWS[j] = views[i];
}
return VIEWS;
}
private String getPropToLabel(int i, Component view, PropertyEditor editor)
{
String nm = this.propsheet.properties[i].getDisplayName();
webide.MainConsole mM = webide.MainConsole.getMainConsole();
Object value = null;
if(wrapper != null)
value = wrapper.getPropValue(i);
String contrlname = "";
if(wrapper != null && wrapper.getChild() != null && !(wrapper.getChild() instanceof webide.form.PainterForm))
{
webide.Controlslist contrl = wrapper.getControl();
if(contrl != null)
contrlname = contrl.className;
}
if (value == null) value = "";
String label = "";
String name = nm.toLowerCase();
try
{
if(view instanceof PropChoice)
{
try
{
editor.setValue(value);
}
catch(Exception e)
{
System.err.println("Warning2: " + e);
}
try
{
label = editor.getAsText();
}
catch(Exception e)
{
System.err.println("Warning3: " + e);
}
return label;
}
else if(name.equalsIgnoreCase("propertypages"))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?