diff --git a/designer-base/src/com/fr/design/remote/ui/AuthorityEditorPane.java b/designer-base/src/com/fr/design/remote/ui/AuthorityEditorPane.java index 73bffbb07..9c83da4d2 100644 --- a/designer-base/src/com/fr/design/remote/ui/AuthorityEditorPane.java +++ b/designer-base/src/com/fr/design/remote/ui/AuthorityEditorPane.java @@ -1,19 +1,21 @@ package com.fr.design.remote.ui; import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.remote.RemoteDesignAuthority; import javax.swing.BorderFactory; import java.awt.BorderLayout; -import java.awt.Label; public class AuthorityEditorPane extends BasicBeanPane { + private UILabel label = new UILabel(); + public AuthorityEditorPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setBorder(BorderFactory.createEmptyBorder()); - this.add(new Label("editor"), BorderLayout.CENTER); + this.add(label, BorderLayout.CENTER); } @Override @@ -23,7 +25,7 @@ public class AuthorityEditorPane extends BasicBeanPane { @Override public void populateBean(RemoteDesignAuthority ob) { - + label.setText(ob.getName()); } @Override diff --git a/designer-base/src/com/fr/design/remote/ui/AuthorityListControlPane.java b/designer-base/src/com/fr/design/remote/ui/AuthorityListControlPane.java index 8fc3e120d..c37e0e69f 100644 --- a/designer-base/src/com/fr/design/remote/ui/AuthorityListControlPane.java +++ b/designer-base/src/com/fr/design/remote/ui/AuthorityListControlPane.java @@ -16,6 +16,7 @@ import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; import com.fr.design.remote.RemoteDesignAuthority; import com.fr.design.remote.RemoteDesignAuthorityCreator; +import com.fr.design.remote.RemoteMember; import com.fr.design.remote.ui.list.AuthorityList; import com.fr.design.remote.ui.list.AuthorityListCellRenderer; import com.fr.design.utils.gui.GUICoreUtils; @@ -476,12 +477,13 @@ public class AuthorityListControlPane extends BasicPane { dialog.addDialogActionListener(new DialogActionAdapter() { @Override public void doOk() { - // todo 获取 UserManagerPane 添加的用户 - userManagerPane.title4PopupWindow(); - - RemoteDesignAuthority authority = new RemoteDesignAuthority(); - authority.setName("new User"); - AuthorityListControlPane.this.addAuthority(authority, getModel().getSize()); + // 获取添加的用户到权限编辑面板 + List members = userManagerPane.update(); + for (RemoteMember member : members) { + RemoteDesignAuthority authority = new RemoteDesignAuthority(); + authority.setName(member.getName()); + AuthorityListControlPane.this.addAuthority(authority, getModel().getSize()); + } } @Override diff --git a/designer-base/src/com/fr/design/remote/ui/UserManagerPane.java b/designer-base/src/com/fr/design/remote/ui/UserManagerPane.java index dbc02b0cd..df8f87afc 100644 --- a/designer-base/src/com/fr/design/remote/ui/UserManagerPane.java +++ b/designer-base/src/com/fr/design/remote/ui/UserManagerPane.java @@ -17,6 +17,7 @@ import com.fr.design.remote.ui.list.AddingMemberListCellRender; import com.fr.design.remote.ui.list.MemberListSelectedChangeListener; import com.fr.general.Inter; import com.fr.stable.StringUtils; +import com.fr.third.guava.collect.ImmutableList; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; @@ -277,4 +278,9 @@ public class UserManagerPane extends BasicPane { addedListModel.copyInto(members); addedMembers.addAll(Arrays.asList(members)); } + + + public ImmutableList update() { + return ImmutableList.copyOf(addedMembers); + } } diff --git a/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTree.java b/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTree.java index 91558f639..7389049cb 100644 --- a/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTree.java +++ b/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTree.java @@ -1,6 +1,6 @@ package com.fr.design.remote.ui.tree; -import javax.swing.JTree; +import com.fr.design.gui.itree.filetree.TemplateFileTree; -public class FileAuthorityTree extends JTree { +public class FileAuthorityTree extends TemplateFileTree { } diff --git a/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTreeNode.java b/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTreeNode.java new file mode 100644 index 000000000..aed486730 --- /dev/null +++ b/designer-base/src/com/fr/design/remote/ui/tree/FileAuthorityTreeNode.java @@ -0,0 +1,141 @@ +package com.fr.design.remote.ui.tree; + +import javax.swing.tree.DefaultMutableTreeNode; + +public class FileAuthorityTreeNode extends DefaultMutableTreeNode { + + public enum Status { + SELECTED, + UNSELECTED, + INDETERMINATE + } + + + private Status status; + + + public FileAuthorityTreeNode() { + this(null); + } + + public FileAuthorityTreeNode(Object userObject) { + this(userObject, true, Status.UNSELECTED); + } + + public FileAuthorityTreeNode(Object userObject, boolean allowsChildren, Status status) { + super(userObject, allowsChildren); + this.status = status; + } + + public Status getStatus() { + return status; + } + + public boolean isSelected() { + return status == Status.SELECTED; + } + + public boolean isUnselected() { + return status == Status.UNSELECTED; + } + + public boolean isIndeterminate() { + return status == Status.INDETERMINATE; + } + + + public void setSelected(boolean selected) { + setStatus(selected ? Status.SELECTED : Status.UNSELECTED); + } + + public void setStatus(Status status) { + this.status = status; + switch (status) { + case SELECTED: + // 向下 + // 如果选中,则所有的子结点都要选中 + if (children != null) { + for (Object obj : children) { + FileAuthorityTreeNode node = (FileAuthorityTreeNode) obj; + if (!node.isSelected()) { + node.setSelected(true); + } + } + } + // 向上 + // 检查其父节点 + if (parent != null) { + FileAuthorityTreeNode pNode = (FileAuthorityTreeNode) parent; + int index = 0; + for (; index < pNode.children.size(); ++index) { + FileAuthorityTreeNode pChildNode = (FileAuthorityTreeNode) pNode.children.get(index); + if (!pChildNode.isSelected()) { + break; + } + } + // 如果父结点下的子结点都被选中了,那么选中父节点 + if (index == pNode.children.size()) { + if (!pNode.isSelected()) { + pNode.setSelected(true); + } + } + // 如果父结点下的子结点有部分没被选中,那么标记父结点选中状况为未知 + else { + if (!pNode.isIndeterminate()) { + pNode.setStatus(Status.INDETERMINATE); + } + } + } + break; + case UNSELECTED: + // 向下 + // 子结点都要取消选中 + if (children != null) { + for (Object aChildren : children) { + FileAuthorityTreeNode node = (FileAuthorityTreeNode) aChildren; + if (!node.isUnselected()) { + node.setSelected(false); + } + } + } + // 向上 + // 查看父节点的选中情况 + + if (parent != null) { + FileAuthorityTreeNode pNode = (FileAuthorityTreeNode) parent; + int index = 0; + for (; index < pNode.children.size(); ++index) { + FileAuthorityTreeNode pChildNode = (FileAuthorityTreeNode) pNode.children.get(index); + if (!pChildNode.isUnselected()) { + break; + } + } + // 如果父结点下的子结点都是未被选中的,那么取消选中父节点 + if (index == pNode.children.size()) { + if (!pNode.isUnselected()) { + pNode.setSelected(false); + } + } + // 如果父结点下的子结点有部分不是未被选中的,那么标记父结点选中状况为未知 + else { + if (!pNode.isIndeterminate()) { + pNode.setStatus(Status.INDETERMINATE); + } + } + } + break; + case INDETERMINATE: + // todo 标记为未知 + + + + break; + + + default: + break; + } + } +} + +