diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
index ab1f2a980..a3452f602 100644
--- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java
+++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
@@ -1,303 +1,255 @@
-package com.fr.design.mainframe.widget;
-
-/**
- * Created by xiaxiang on 2016/9/30.
- */
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.metal.*;
-import javax.swing.tree.*;
-
-import com.fr.design.designer.beans.*;
+package com.fr.design.mainframe;
+
+import java.awt.Component;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+
+import javax.swing.DropMode;
+import javax.swing.JPopupMenu;
+import javax.swing.JTree;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import com.fr.design.constants.UIConstants;
+import com.fr.design.designer.beans.AdapterBus;
+import com.fr.design.designer.beans.ComponentAdapter;
import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent;
-import com.fr.design.designer.creator.XCreator;
-import com.fr.design.gui.icontainer.UIScrollPane;
-import com.fr.design.mainframe.ComponentTree;
-import com.sun.java.swing.plaf.motif.*;
-import com.sun.java.swing.plaf.windows.*;
-
-/**
- * 控件树下拉列表框
- */
-public class UITreeComboBox extends JComboBox{
- /**
- * 显示用的树
- */
- private ComponentTree tree;
-
- public UITreeComboBox(ComponentTree componentTree){
- this.setTree(componentTree);
- tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter());
-// for(int i=0; i
Description: 树形结构而来的DefaultListCellRenderer
+ * 刷新 */ - class UITreeComboBoxRenderer extends DefaultListCellRenderer { - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus){ - if(tree != null && tree.getSelectedTreePath().length > 0){ - TreePath path = tree.getSelectedTreePath()[0]; - tree.setAndScrollSelectionPath(path); - Object node = path.getLastPathComponent(); - value = node; - TreeCellRenderer r = tree.getCellRenderer(); - JLabel lb = (JLabel)r.getTreeCellRendererComponent( - tree, value, isSelected, false, false, index, - cellHasFocus); - return lb; - } - return super.getListCellRendererComponent(list, value, index, - isSelected, cellHasFocus); - } + public void refreshUI() { + updateUI(); } - private class TreeComboBoxDesignerEditAdapter implements DesignerEditListener { - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { - TreePath[] paths = tree.getSelectedTreePath(); - if (tree != null && paths.length > 0) { - tree.setAndScrollSelectionPath(paths[0]); - setSelectedItem(paths[0]); - MenuSelectionManager.defaultManager().clearSelectedPath(); - } - - } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) { - tree.refreshUI(); - TreePath[] paths = tree.getSelectedTreePath(); - if (tree != null && paths.length > 0) { - tree.setAndScrollSelectionPath(paths[0]); - setSelectedItem(paths[0]); - MenuSelectionManager.defaultManager().clearSelectedPath(); - } - } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED) { - tree.refreshUI(); - setSelectedItem(null); - MenuSelectionManager.defaultManager().clearSelectedPath(); - } else { - tree.refreshUI(); - repaint(); - } - } - @Override - public boolean equals(Object o) { - return o.getClass() == this.getClass(); + + public TreePath[] getSelectedTreePath() { + XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators(); + TreePath[] paths = new TreePath[creators.length]; + + for (int i = 0; i < paths.length; i++) { + paths[i] = buildTreePath(creators[i]); } + return paths; } - /** - * 测试 - */ -// public static void main(String args[]){ -// JFrame frame = new JFrame("UITreeComboBox"); -// final UITreeComboBox box = new UITreeComboBox(new ComponentTree(new FormDesigner())); -// box.setPreferredSize(new Dimension(300, 28)); -// frame.getContentPane().add(box); -// frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); -// frame.pack(); -// frame.setVisible(true); -// } -} - -/** - *Title: UITreeComboBox
- *Description: TreePopup
- */ -class TreePopup extends JPopupMenu implements ComboPopup{ - protected UITreeComboBox comboBox; - protected JScrollPane scrollPane; - protected MouseMotionListener mouseMotionListener; - protected MouseListener mouseListener; - public void popupMenu(MouseEvent e) { - TreePath path = comboBox.getTree().getSelectionPath(); - if (path == null) { - return; - } - Component component = (Component) path.getLastPathComponent(); - if (!(component instanceof XCreator)) { - return; + /** + *搜索指定名称的路径 + * + * @param text 名称 + * @return 树路径 + */ + public TreePath[] search(String text) { + if (StringUtils.isNotEmpty(text)) { + text = text.toLowerCase(); } - com.fr.design.designer.beans.ComponentAdapter adapter = AdapterBus.getComponentAdapter(comboBox.getTree().getDesigner(), (XCreator) component); - JPopupMenu menu = adapter.getContextPopupMenu(e); - menu.show(comboBox, e.getX(), e.getY()); - } + ArrayListMouseListener
or null
- * @see ComboPopup#getMouseListener
+ * 触发
*/
- public MouseListener getMouseListener(){
- if(mouseListener == null){
- mouseListener = new InvocationMouseHandler();
- }
- return mouseListener;
- }
-
- protected void togglePopup(){
- if(isVisible()){
- hide();
- } else{
- show();
- }
- }
- protected void updatePopup(){
- setPreferredSize(new Dimension(comboBox.getSize().width, 200));
- Object selectedObj = comboBox.getSelectedItem();
- if(selectedObj != null){
- TreePath tp = (TreePath)selectedObj;
- ((UITreeComboBox)comboBox).getTree().setSelectionPath(tp);
- }
+ public void fireTreeChanged() {
+ designer.refreshDesignerUI();
}
- protected class InvocationMouseHandler extends MouseAdapter{
- public void mousePressed(MouseEvent e){
- if(!SwingUtilities.isLeftMouseButton(e) || !comboBox.isEnabled()){
- return;
- }
- if(comboBox.isEditable()){
- Component comp = comboBox.getEditor().getEditorComponent();
- if((!(comp instanceof JComponent)) ||
- ((JComponent)comp).isRequestFocusEnabled()){
- comp.requestFocus();
- }
- } else if(comboBox.isRequestFocusEnabled()){
- comboBox.requestFocus();
+ /**
+ * 刷新
+ */
+ public void refreshTreeRoot() {
+ model = new ComponentTreeModel(designer, designer.getTopContainer());
+ setModel(model);
+ setDragEnabled(false);
+ setDropMode(DropMode.ON_OR_INSERT);
+ setTransferHandler(new TreeTransferHandler());
+ repaint();
+ }
+
+ private TreePath buildTreePath(Component comp) {
+ ArrayList