You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.9 KiB

package com.fr.plugin.event.manager.ui;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.form.main.Form;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.widget.CRBoundsWidget;
import com.fr.plugin.event.manager.data.MyNode;
import com.fr.plugin.event.manager.data.MyTree;
import com.fr.plugin.event.manager.data.MyWidget;
import javax.swing.JPanel;
import java.awt.BorderLayout;
/**
* @author Joe
* Created by Joe on 12/11/2020
*/
public class FormEventManagerPane extends EventManagerPane<Form> {
private MyTree tree;
@Override
protected void initComponents(JPanel container) {
super.initComponents(container);
container.setLayout(FRGUIPaneFactory.createBorderLayout());
eventConfigPane = new EventConfigPane(tree);
container.add(eventConfigPane, BorderLayout.CENTER);
}
@Override
public void initData(Form target) {
WLayout rootContainer = target.getContainer();
MyNode root = new MyWidget(rootContainer);
tree = new MyTree(root);
traversalWidget(rootContainer, tree);
filterWidget(tree);
}
/**
* 当initComponents执行完后调用
*/
@Override
public void complete() {
// do nothing
}
/**
* 关键算法,遍历添加节点进树
*
* @param widget
* @param tree
*/
private void traversalWidget(Widget widget, MyTree tree) {
if (widget instanceof CRBoundsWidget) {
traversalWidget(((CRBoundsWidget) widget).getWidget(), tree);
} else if (widget instanceof WLayout) {
MyNode node = new MyWidget(widget);
MyTree subTree = tree.addChild(node);
if (widget instanceof WCardLayout) {
int idx = ((WCardLayout) widget).getShowIndex();
if (((WCardLayout) widget).getWidgetCount() > idx) {
traversalWidget(((WCardLayout) widget).getWidget(idx), subTree);
}
} else {
for (int i = 0, count = ((WLayout) widget).getWidgetCount(); i < count; i++) {
traversalWidget(((WLayout) widget).getWidget(i), subTree);
}
}
} else {
// 普通widget
tree.addChild(new MyWidget(widget));
}
}
/**
* 从底向上,如果节点的控件没有事件,就把它删除
*
* @param tree
*/
private void filterWidget(MyTree tree) {
for (int i = tree.getElementsIndex().size() - 1; i >= 0; i--) {
MyTree tempTree = tree.getElementsIndex().get(i);
if (tempTree.isLeaf() && tempTree.getData() instanceof MyWidget) {
if (((MyWidget) tempTree.getData()).getWidget().getListenerSize() <= 0) {
tree.removeChild(tempTree);
}
}
}
}
}