@ -0,0 +1,14 @@
|
||||
package com.fr.design.remote; |
||||
|
||||
public class RemoteDesignAuthority { |
||||
|
||||
private String name; |
||||
|
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
} |
@ -0,0 +1,45 @@
|
||||
package com.fr.design.remote; |
||||
|
||||
import com.fr.design.beans.BasicBeanPane; |
||||
|
||||
import javax.swing.Icon; |
||||
|
||||
public class RemoteDesignAuthorityCreator { |
||||
|
||||
private String name; |
||||
private Icon icon; |
||||
private Class clazz; |
||||
private Class<? extends BasicBeanPane> editorClazz; |
||||
|
||||
|
||||
public RemoteDesignAuthorityCreator(String name, Icon icon, Class clazz, Class<? extends BasicBeanPane> editorClazz) { |
||||
this.name = name; |
||||
this.icon = icon; |
||||
this.clazz = clazz; |
||||
this.editorClazz = editorClazz; |
||||
} |
||||
|
||||
public boolean accept(Object object) { |
||||
return this.clazz != null && this.clazz.isInstance(object); |
||||
} |
||||
|
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
public Icon getIcon() { |
||||
return icon; |
||||
} |
||||
|
||||
public Class getClazz() { |
||||
return clazz; |
||||
} |
||||
|
||||
public Class<? extends BasicBeanPane> getEditorClazz() { |
||||
return editorClazz; |
||||
} |
||||
|
||||
public void saveUpdatedBean(RemoteDesignAuthority authority, Object bean) { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,20 @@
|
||||
package com.fr.design.remote; |
||||
|
||||
public class RemoteMember { |
||||
|
||||
public static final RemoteMember DEFAULT_MEMBER = new RemoteMember("查询中..."); |
||||
|
||||
private String name; |
||||
|
||||
public RemoteMember(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
} |
@ -0,0 +1,48 @@
|
||||
package com.fr.design.remote.action; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.actions.UpdateAction; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.remote.ui.AuthorityManagerPane; |
||||
|
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* @author yaohwu |
||||
*/ |
||||
public class RemoteDesignAuthorityManagerAction extends UpdateAction { |
||||
|
||||
|
||||
public RemoteDesignAuthorityManagerAction() { |
||||
this.setName("远程设计权限管理"); |
||||
this.setSmallIcon(BaseUtils.readIcon("com/fr/design/remote/images/icon_Remote_Design_Permission_Manager_normal@1x.png")); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
|
||||
AuthorityManagerPane managerPane = new AuthorityManagerPane(); |
||||
|
||||
BasicDialog dialog = managerPane.showWindow(DesignerContext.getDesignerFrame()); |
||||
|
||||
|
||||
//todo read contents from database by hibernate to show
|
||||
|
||||
dialog.addDialogActionListener(new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
//todo save contents into database by hibernate
|
||||
} |
||||
|
||||
@Override |
||||
public void doCancel() { |
||||
super.doCancel(); |
||||
} |
||||
}); |
||||
dialog.setModal(true); |
||||
dialog.setVisible(true); |
||||
} |
||||
} |
After Width: | Height: | Size: 337 B |
After Width: | Height: | Size: 548 B |
After Width: | Height: | Size: 525 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 350 B |
After Width: | Height: | Size: 746 B |
After Width: | Height: | Size: 288 B |
After Width: | Height: | Size: 531 B |
After Width: | Height: | Size: 575 B |
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,33 @@
|
||||
package com.fr.design.remote.ui; |
||||
|
||||
import com.fr.design.beans.BasicBeanPane; |
||||
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<RemoteDesignAuthority> { |
||||
|
||||
public AuthorityEditorPane() { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.setBorder(BorderFactory.createEmptyBorder()); |
||||
this.add(new Label("editor"), BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "编辑文件权限"; |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(RemoteDesignAuthority ob) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public RemoteDesignAuthority updateBean() { |
||||
return new RemoteDesignAuthority(); |
||||
} |
||||
} |
@ -0,0 +1,520 @@
|
||||
package com.fr.design.remote.ui; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.actions.UpdateAction; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.controlpane.ShortCut4JControlPane; |
||||
import com.fr.design.gui.icontainer.UIScrollPane; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itoolbar.UIToolbar; |
||||
import com.fr.design.icon.IconPathConstants; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
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.ui.list.AuthorityList; |
||||
import com.fr.design.remote.ui.list.AuthorityListCellRenderer; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.ArrayUtils; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.DefaultListModel; |
||||
import javax.swing.JOptionPane; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JSplitPane; |
||||
import javax.swing.ListSelectionModel; |
||||
import javax.swing.SwingUtilities; |
||||
import javax.swing.event.ListSelectionEvent; |
||||
import javax.swing.event.ListSelectionListener; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.CardLayout; |
||||
import java.awt.event.ActionEvent; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class AuthorityListControlPane extends BasicPane { |
||||
|
||||
|
||||
private static final String LIST_NAME = "AuthorityListControlPaneList"; |
||||
|
||||
private static final String UNSELECTED_EDITOR_NAME = "UNSELECTED"; |
||||
private static final String SELECTED_EDITOR_NAME = "SELECTED"; |
||||
|
||||
private AuthorityList authorityList; |
||||
|
||||
private static final int SHORT_WIDTH = 30; |
||||
|
||||
private ListEditorControlPane editorCtrl; |
||||
|
||||
|
||||
private CardLayout cardLayout; |
||||
|
||||
private JPanel cardPane; |
||||
|
||||
private ShortCut4JControlPane[] shortCuts; |
||||
|
||||
private RemoteDesignAuthorityCreator[] authorityCreators; |
||||
|
||||
private ToolBarDef toolbarDef; |
||||
|
||||
private UIToolbar toolBar; |
||||
|
||||
|
||||
public AuthorityListControlPane() { |
||||
super(); |
||||
initComponentPane(); |
||||
} |
||||
|
||||
|
||||
private void initComponentPane() { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.authorityCreators = new RemoteDesignAuthorityCreator[]{ |
||||
new RemoteDesignAuthorityCreator( |
||||
"远程设计用户", |
||||
BaseUtils.readIcon("com/fr/design/remote/images/icon_Member_normal@1x.png"), |
||||
RemoteDesignAuthority.class, |
||||
AuthorityEditorPane.class) |
||||
}; |
||||
editorCtrl = new ListEditorControlPane(); |
||||
|
||||
// 左侧列表面板
|
||||
JPanel leftPane = new JPanel(new BorderLayout()); |
||||
initLeftList(leftPane); |
||||
initLeftToolbar(leftPane); |
||||
|
||||
// 右侧卡片布局
|
||||
cardLayout = new CardLayout(); |
||||
cardPane = new JPanel(cardLayout); |
||||
UILabel selectLabel = new UILabel(); |
||||
cardPane.add(selectLabel, UNSELECTED_EDITOR_NAME); |
||||
cardPane.add(editorCtrl, SELECTED_EDITOR_NAME); |
||||
|
||||
// 左右分割布局
|
||||
JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, leftPane, cardPane); |
||||
mainSplitPane.setBorder(BorderFactory.createLineBorder(GUICoreUtils.getTitleLineBorderColor())); |
||||
mainSplitPane.setOneTouchExpandable(true); |
||||
add(mainSplitPane, BorderLayout.CENTER); |
||||
mainSplitPane.setDividerLocation(shortCuts.length * SHORT_WIDTH); |
||||
|
||||
checkButtonEnabled(); |
||||
} |
||||
|
||||
|
||||
private void initLeftToolbar(JPanel leftPane) { |
||||
shortCuts = createShortcuts(); |
||||
if (ArrayUtils.isEmpty(shortCuts)) { |
||||
return; |
||||
} |
||||
toolbarDef = new ToolBarDef(); |
||||
for (ShortCut4JControlPane sj : shortCuts) { |
||||
toolbarDef.addShortCut(sj.getShortCut()); |
||||
} |
||||
toolBar = ToolBarDef.createJToolBar(); |
||||
toolbarDef.updateToolBar(toolBar); |
||||
leftPane.add(toolBar, BorderLayout.NORTH); |
||||
} |
||||
|
||||
|
||||
private void initLeftList(JPanel leftPane) { |
||||
authorityList = createList(); |
||||
authorityList.setName(LIST_NAME); |
||||
leftPane.add(new UIScrollPane(authorityList), BorderLayout.CENTER); |
||||
|
||||
|
||||
authorityList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
||||
authorityList.addListSelectionListener(new ListSelectionListener() { |
||||
@Override |
||||
public void valueChanged(ListSelectionEvent evt) { |
||||
//避免多次update和populate大大降低效率
|
||||
if (!evt.getValueIsAdjusting()) { |
||||
//切换的时候加检验
|
||||
if (hasInvalid()) { |
||||
return; |
||||
} |
||||
AuthorityListControlPane.this.editorCtrl.update(); |
||||
AuthorityListControlPane.this.editorCtrl.populate(); |
||||
AuthorityListControlPane.this.checkButtonEnabled(); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private AuthorityList createList() { |
||||
AuthorityList list = new AuthorityList(new DefaultListModel<RemoteDesignAuthority>()); |
||||
list.setCellRenderer(new AuthorityListCellRenderer()); |
||||
return list; |
||||
} |
||||
|
||||
|
||||
private void doWhenPopulate() { |
||||
|
||||
} |
||||
|
||||
private void doBeforePopulate() { |
||||
|
||||
} |
||||
|
||||
|
||||
public RemoteDesignAuthority[] update() { |
||||
List<RemoteDesignAuthority> res = new ArrayList<>(); |
||||
this.editorCtrl.update(); |
||||
DefaultListModel listModel = (DefaultListModel) this.authorityList.getModel(); |
||||
for (int i = 0, len = listModel.getSize(); i < len; i++) { |
||||
res.add((RemoteDesignAuthority) listModel.getElementAt(i)); |
||||
} |
||||
return res.toArray(new RemoteDesignAuthority[0]); |
||||
} |
||||
|
||||
public void populate(RemoteDesignAuthority[] authorities) { |
||||
DefaultListModel<RemoteDesignAuthority> listModel = (DefaultListModel<RemoteDesignAuthority>) this.authorityList.getModel(); |
||||
listModel.removeAllElements(); |
||||
if (ArrayUtils.isEmpty(authorities)) { |
||||
return; |
||||
} |
||||
|
||||
for (RemoteDesignAuthority authority : authorities) { |
||||
listModel.addElement(authority); |
||||
} |
||||
|
||||
if (listModel.size() > 0) { |
||||
this.authorityList.setSelectedIndex(0); |
||||
} |
||||
this.checkButtonEnabled(); |
||||
} |
||||
|
||||
|
||||
public void updateEditorCtrlPane() { |
||||
editorCtrl.update(); |
||||
} |
||||
|
||||
/* |
||||
* 刷新当前的选中的UpdatePane |
||||
*/ |
||||
public void populateEditorCtrlPane() { |
||||
this.editorCtrl.populate(); |
||||
} |
||||
|
||||
|
||||
public void setSelectedName(String name) { |
||||
DefaultListModel listModel = (DefaultListModel) this.authorityList.getModel(); |
||||
for (int i = 0, len = listModel.getSize(); i < len; i++) { |
||||
RemoteDesignAuthority authority = (RemoteDesignAuthority) listModel.getElementAt(i); |
||||
if (ComparatorUtils.equals(name, authority.getName())) { |
||||
this.authorityList.setSelectedIndex(i); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取选中的名字 |
||||
*/ |
||||
public String getSelectedName() { |
||||
RemoteDesignAuthority authority = (RemoteDesignAuthority) this.authorityList.getSelectedValue(); |
||||
return authority == null ? null : authority.getName(); |
||||
} |
||||
|
||||
/** |
||||
* 添加 RemoteDesignAuthority |
||||
* |
||||
* @param authority authority |
||||
* @param index 序号 |
||||
*/ |
||||
public void addAuthority(RemoteDesignAuthority authority, int index) { |
||||
DefaultListModel<RemoteDesignAuthority> model = (DefaultListModel<RemoteDesignAuthority>) authorityList.getModel(); |
||||
|
||||
model.add(index, authority); |
||||
authorityList.setSelectedIndex(index); |
||||
authorityList.ensureIndexIsVisible(index); |
||||
|
||||
authorityList.revalidate(); |
||||
authorityList.repaint(); |
||||
} |
||||
|
||||
|
||||
protected DefaultListModel<RemoteDesignAuthority> getModel() { |
||||
return (DefaultListModel<RemoteDesignAuthority>) this.authorityList.getModel(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 检查按钮可用状态 Check button enabled. |
||||
*/ |
||||
public void checkButtonEnabled() { |
||||
|
||||
if (authorityList.getSelectedIndex() == -1) { |
||||
this.cardLayout.show(cardPane, UNSELECTED_EDITOR_NAME); |
||||
} else { |
||||
this.cardLayout.show(cardPane, SELECTED_EDITOR_NAME); |
||||
} |
||||
for (ShortCut4JControlPane shortCut : shortCuts) { |
||||
shortCut.checkEnable(); |
||||
} |
||||
} |
||||
|
||||
|
||||
public class AbsoluteEnableShortCut extends ShortCut4JControlPane { |
||||
AbsoluteEnableShortCut(ShortCut shortCut) { |
||||
this.shortCut = shortCut; |
||||
} |
||||
|
||||
/** |
||||
* 检查是否可用 |
||||
*/ |
||||
@Override |
||||
public void checkEnable() { |
||||
this.shortCut.setEnabled(true); |
||||
} |
||||
} |
||||
|
||||
public class NormalEnableShortCut extends ShortCut4JControlPane { |
||||
NormalEnableShortCut(ShortCut shortCut) { |
||||
this.shortCut = shortCut; |
||||
} |
||||
|
||||
/** |
||||
* 检查是否可用 |
||||
*/ |
||||
@Override |
||||
public void checkEnable() { |
||||
this.shortCut.setEnabled(authorityList.getModel() |
||||
.getSize() > 0 |
||||
&& AuthorityListControlPane.this.authorityList.getSelectedIndex() != -1); |
||||
} |
||||
} |
||||
|
||||
|
||||
private BasicBeanPane createPaneByCreators(RemoteDesignAuthorityCreator creator) { |
||||
try { |
||||
return creator.getEditorClazz().newInstance(); |
||||
} catch (InstantiationException | IllegalAccessException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 检查是否符合规范 |
||||
* |
||||
* @throws Exception e |
||||
*/ |
||||
@Override |
||||
public void checkValid() throws Exception { |
||||
this.editorCtrl.checkValid(); |
||||
} |
||||
|
||||
private int getInValidIndex() { |
||||
BasicBeanPane[] p = editorCtrl.editorPanes; |
||||
if (p != null) { |
||||
for (int i = 0; i < p.length; i++) { |
||||
if (p[i] != null) { |
||||
try { |
||||
p[i].checkValid(); |
||||
} catch (Exception e) { |
||||
return i; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return -1; |
||||
} |
||||
|
||||
private boolean hasInvalid() { |
||||
int idx = AuthorityListControlPane.this.getInValidIndex(); |
||||
if (authorityList.getSelectedIndex() != idx) { |
||||
try { |
||||
checkValid(); |
||||
} catch (Exception exp) { |
||||
JOptionPane.showMessageDialog(AuthorityListControlPane.this, exp.getMessage()); |
||||
authorityList.setSelectedIndex(idx); |
||||
return true; |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 设置选中项 |
||||
* |
||||
* @param index 选中项的序列号 |
||||
*/ |
||||
public void setSelectedIndex(int index) { |
||||
authorityList.setSelectedIndex(index); |
||||
} |
||||
|
||||
|
||||
private ShortCut4JControlPane[] createShortcuts() { |
||||
return new ShortCut4JControlPane[]{ |
||||
new AbsoluteEnableShortCut(new AddItemUpdateAction(authorityCreators)), |
||||
new NormalEnableShortCut(new RemoveItemAction()) |
||||
}; |
||||
} |
||||
|
||||
|
||||
private void doBeforeRemove() { |
||||
} |
||||
|
||||
private void doAfterRemove() { |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 刷新 creators |
||||
* |
||||
* @param creators 生成器 |
||||
*/ |
||||
public void refreshCreator(RemoteDesignAuthorityCreator[] creators) { |
||||
this.authorityCreators = creators; |
||||
shortCuts = this.createShortcuts(); |
||||
toolbarDef.clearShortCuts(); |
||||
for (ShortCut4JControlPane sj : shortCuts) { |
||||
toolbarDef.addShortCut(sj.getShortCut()); |
||||
} |
||||
|
||||
toolbarDef.updateToolBar(toolBar); |
||||
toolBar.validate(); |
||||
toolBar.repaint(); |
||||
this.repaint(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
|
||||
private class ListEditorControlPane extends JPanel { |
||||
private CardLayout card; |
||||
private JPanel cardPane; |
||||
private BasicBeanPane[] editorPanes; |
||||
|
||||
private RemoteDesignAuthority authority; |
||||
|
||||
ListEditorControlPane() { |
||||
initUpdatePane(); |
||||
} |
||||
|
||||
private void initUpdatePane() { |
||||
card = new CardLayout(); |
||||
cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); |
||||
cardPane.setLayout(card); |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.add(cardPane); |
||||
editorPanes = new BasicBeanPane[authorityCreators.length]; |
||||
} |
||||
|
||||
public void populate() { |
||||
authority = (RemoteDesignAuthority) AuthorityListControlPane.this.authorityList.getSelectedValue(); |
||||
|
||||
if (authority == null) { |
||||
return; |
||||
} |
||||
|
||||
for (int i = 0, len = editorPanes.length; i < len; i++) { |
||||
if (authorityCreators[i].accept(authority)) { |
||||
editorPanes[i] = createPaneByCreators(authorityCreators[i]); |
||||
cardPane.add(editorPanes[i], String.valueOf(i)); |
||||
card.show(cardPane, String.valueOf(i)); |
||||
doBeforePopulate(); |
||||
editorPanes[i].populateBean(authority); |
||||
doWhenPopulate(); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
public void update() { |
||||
for (int i = 0; i < editorPanes.length; i++) { |
||||
BasicBeanPane pane = editorPanes[i]; |
||||
if (pane != null && pane.isVisible()) { |
||||
Object bean = pane.updateBean(); |
||||
if (i < authorityCreators.length) { |
||||
authorityCreators[i].saveUpdatedBean(authority, bean); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void checkValid() throws Exception { |
||||
if (editorPanes != null) { |
||||
for (BasicBeanPane updatePane : editorPanes) { |
||||
if (updatePane != null) { |
||||
updatePane.checkValid(); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 添加按钮 |
||||
*/ |
||||
private class AddItemUpdateAction extends UpdateAction { |
||||
private RemoteDesignAuthorityCreator creator; |
||||
|
||||
AddItemUpdateAction(RemoteDesignAuthorityCreator[] creators) { |
||||
this.creator = creators[0]; |
||||
this.setName(Inter.getLocText("FR-Action_Add")); |
||||
this.setMnemonic('A'); |
||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
final UserManagerPane userManagerPane = new UserManagerPane(); |
||||
BasicDialog dialog = userManagerPane.showWindow(SwingUtilities.getWindowAncestor(AuthorityListControlPane.this)); |
||||
|
||||
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()); |
||||
} |
||||
|
||||
@Override |
||||
public void doCancel() { |
||||
super.doCancel(); |
||||
} |
||||
}); |
||||
dialog.setModal(true); |
||||
dialog.setVisible(true); |
||||
|
||||
|
||||
} |
||||
} |
||||
|
||||
/* |
||||
* 删除按钮 |
||||
*/ |
||||
private class RemoveItemAction extends UpdateAction { |
||||
RemoveItemAction() { |
||||
this.setName(Inter.getLocText("FR-Action_Remove")); |
||||
this.setMnemonic('R'); |
||||
this.setSmallIcon(BaseUtils |
||||
.readIcon(IconPathConstants.TD_REMOVE_ICON_PATH)); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent evt) { |
||||
doBeforeRemove(); |
||||
if (GUICoreUtils.removeJListSelectedNodes(SwingUtilities |
||||
.getWindowAncestor(AuthorityListControlPane.this), authorityList)) { |
||||
checkButtonEnabled(); |
||||
doAfterRemove(); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,37 @@
|
||||
package com.fr.design.remote.ui; |
||||
|
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.remote.RemoteDesignAuthority; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import java.awt.BorderLayout; |
||||
|
||||
public class AuthorityManagerPane extends BasicPane { |
||||
|
||||
private AuthorityListControlPane list; |
||||
|
||||
|
||||
public AuthorityManagerPane() { |
||||
this.setLayout(new BorderLayout()); |
||||
this.setBorder(BorderFactory.createEmptyBorder()); |
||||
|
||||
list = new AuthorityListControlPane(); |
||||
this.add(list, BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("远程设计权限管理"); |
||||
} |
||||
|
||||
public void populate(RemoteDesignAuthority[] authorities) { |
||||
list.populate(authorities); |
||||
} |
||||
|
||||
private RemoteDesignAuthority[] update() { |
||||
|
||||
return list.update(); |
||||
} |
||||
} |
@ -0,0 +1,98 @@
|
||||
package com.fr.design.remote.ui; |
||||
|
||||
import com.fr.design.border.UITitledBorder; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icontainer.UIScrollPane; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.remote.RemoteMember; |
||||
import com.fr.design.remote.ui.list.MemberList; |
||||
import com.fr.design.remote.ui.list.MemberListCellRender; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.DefaultListModel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.FlowLayout; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* @author yaohwu |
||||
*/ |
||||
public class UserManagerPane extends BasicPane { |
||||
|
||||
private List<RemoteMember> members = new ArrayList<>(); |
||||
|
||||
DefaultListModel<RemoteMember> listModel = new DefaultListModel<>(); |
||||
|
||||
|
||||
public UserManagerPane() { |
||||
this.setBorder(BorderFactory.createEmptyBorder()); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add( |
||||
TableLayoutHelper.createTableLayoutPane( |
||||
new Component[][]{ |
||||
new Component[]{createLeftPanel(), new JPanel()} |
||||
}, |
||||
new double[]{TableLayout.FILL}, |
||||
new double[]{TableLayout.FILL, TableLayout.FILL} |
||||
), |
||||
BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "添加设计成员"; |
||||
} |
||||
|
||||
private JPanel createLeftPanel() { |
||||
JPanel content = new JPanel(new BorderLayout()); |
||||
|
||||
content.setBorder( |
||||
BorderFactory.createCompoundBorder( |
||||
new EmptyBorder(6, 0, 0, 0), |
||||
UITitledBorder.createBorderWithTitle(Inter.getLocText("决策系统成员"))) |
||||
); |
||||
|
||||
// 搜索
|
||||
UITextField searchKeyInput = new UITextField(); |
||||
UIButton searchButton = new UIButton("搜索"); |
||||
JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
||||
searchPanel.setBorder(BorderFactory.createEmptyBorder()); |
||||
searchPanel.add(searchKeyInput); |
||||
searchPanel.add(searchButton); |
||||
// 内容列表
|
||||
listModel = new DefaultListModel<>(); |
||||
MemberList list = new MemberList(listModel); |
||||
list.setCellRenderer(new MemberListCellRender()); |
||||
resetMembers(); |
||||
addContentToList(); |
||||
UIScrollPane listPane = new UIScrollPane(list); |
||||
listPane.setBorder(BorderFactory.createEmptyBorder()); |
||||
|
||||
content.add(searchPanel, BorderLayout.NORTH); |
||||
content.add(listPane, BorderLayout.CENTER); |
||||
return content; |
||||
} |
||||
|
||||
|
||||
private void addContentToList() { |
||||
listModel.removeAllElements(); |
||||
for (RemoteMember member : members) { |
||||
listModel.addElement(member); |
||||
} |
||||
} |
||||
|
||||
private void resetMembers() { |
||||
members.clear(); |
||||
members.add(RemoteMember.DEFAULT_MEMBER); |
||||
} |
||||
} |
@ -0,0 +1,28 @@
|
||||
package com.fr.design.remote.ui.list; |
||||
|
||||
import com.fr.design.remote.RemoteDesignAuthority; |
||||
|
||||
import javax.swing.JList; |
||||
import javax.swing.ListModel; |
||||
import java.util.Vector; |
||||
|
||||
public class AuthorityList extends JList<RemoteDesignAuthority> { |
||||
|
||||
|
||||
public AuthorityList() { |
||||
super(); |
||||
} |
||||
|
||||
public AuthorityList(ListModel<RemoteDesignAuthority> dataModel) { |
||||
super(dataModel); |
||||
} |
||||
|
||||
public AuthorityList(final RemoteDesignAuthority[] listData) { |
||||
super(listData); |
||||
} |
||||
|
||||
public AuthorityList(final Vector<? extends RemoteDesignAuthority> listData) { |
||||
super(listData); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,132 @@
|
||||
package com.fr.design.remote.ui.list; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.remote.RemoteDesignAuthority; |
||||
import sun.swing.DefaultLookup; |
||||
|
||||
import javax.swing.JLabel; |
||||
import javax.swing.JList; |
||||
import javax.swing.ListCellRenderer; |
||||
import javax.swing.border.Border; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
|
||||
/* |
||||
* NameableListCellRenderer |
||||
*/ |
||||
public class AuthorityListCellRenderer extends |
||||
JLabel implements ListCellRenderer<RemoteDesignAuthority> { |
||||
|
||||
/** |
||||
* An empty <code>Border</code>. This field might not be used. To change the |
||||
* <code>Border</code> used by this renderer override the |
||||
* <code>getListCellRendererComponent</code> method and set the border |
||||
* of the returned component directly. |
||||
*/ |
||||
private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1); |
||||
private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1); |
||||
private static Border noFocusBorder = DEFAULT_NO_FOCUS_BORDER; |
||||
|
||||
|
||||
/** |
||||
* Constructs a default renderer object for an item |
||||
* in a list. |
||||
*/ |
||||
public AuthorityListCellRenderer() { |
||||
super(); |
||||
setOpaque(true); |
||||
setBorder(getNoFocusBorder()); |
||||
setName("List.cellRenderer"); |
||||
} |
||||
|
||||
@Override |
||||
public Component getListCellRendererComponent(JList list, RemoteDesignAuthority authority, |
||||
int index, boolean isSelected, boolean cellHasFocus) { |
||||
setComponentOrientation(list.getComponentOrientation()); |
||||
|
||||
Color bg = null; |
||||
Color fg = null; |
||||
|
||||
JList.DropLocation dropLocation = list.getDropLocation(); |
||||
if (dropLocation != null |
||||
&& !dropLocation.isInsert() |
||||
&& dropLocation.getIndex() == index) { |
||||
|
||||
bg = DefaultLookup.getColor(this, ui, "List.dropCellBackground"); |
||||
fg = DefaultLookup.getColor(this, ui, "List.dropCellForeground"); |
||||
|
||||
isSelected = true; |
||||
} |
||||
|
||||
if (isSelected) { |
||||
setBackground(bg == null ? list.getSelectionBackground() : bg); |
||||
setForeground(fg == null ? list.getSelectionForeground() : fg); |
||||
} else { |
||||
setBackground(list.getBackground()); |
||||
setForeground(list.getForeground()); |
||||
} |
||||
|
||||
|
||||
setEnabled(list.isEnabled()); |
||||
setFont(list.getFont()); |
||||
|
||||
Border border = null; |
||||
if (cellHasFocus) { |
||||
if (isSelected) { |
||||
border = DefaultLookup.getBorder(this, ui, "List.focusSelectedCellHighlightBorder"); |
||||
} |
||||
if (border == null) { |
||||
border = DefaultLookup.getBorder(this, ui, "List.focusCellHighlightBorder"); |
||||
} |
||||
} else { |
||||
border = getNoFocusBorder(); |
||||
} |
||||
setBorder(border); |
||||
|
||||
this.setIcon(BaseUtils.readIcon("com/fr/design/remote/images/icon_Member_normal@1x.png")); |
||||
this.setText(authority.getName()); |
||||
return this; |
||||
} |
||||
|
||||
|
||||
private Border getNoFocusBorder() { |
||||
Border border = DefaultLookup.getBorder(this, ui, "List.cellNoFocusBorder"); |
||||
if (System.getSecurityManager() != null) { |
||||
if (border != null) return border; |
||||
return SAFE_NO_FOCUS_BORDER; |
||||
} else { |
||||
if (border != null && |
||||
(noFocusBorder == null || |
||||
noFocusBorder == DEFAULT_NO_FOCUS_BORDER)) { |
||||
return border; |
||||
} |
||||
return noFocusBorder; |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Overridden for performance reasons. |
||||
* See the <a href="#override">Implementation Note</a> |
||||
* for more information. |
||||
* |
||||
* @return <code>true</code> if the background is completely opaque |
||||
* and differs from the JList's background; |
||||
* <code>false</code> otherwise |
||||
* @since 1.5 |
||||
*/ |
||||
@Override |
||||
public boolean isOpaque() { |
||||
Color back = getBackground(); |
||||
Component p = getParent(); |
||||
if (p != null) { |
||||
p = p.getParent(); |
||||
} |
||||
// p should now be the JList.
|
||||
boolean colorMatch = (back != null) && (p != null) && |
||||
back.equals(p.getBackground()) && |
||||
p.isOpaque(); |
||||
return !colorMatch && super.isOpaque(); |
||||
} |
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.fr.design.remote.ui.list; |
||||
|
||||
import com.fr.design.remote.RemoteMember; |
||||
|
||||
import javax.swing.JList; |
||||
import javax.swing.ListModel; |
||||
import java.awt.Color; |
||||
import java.util.Vector; |
||||
|
||||
public class MemberList extends JList<RemoteMember> { |
||||
|
||||
|
||||
public MemberList() { |
||||
super(); |
||||
init(); |
||||
} |
||||
|
||||
public MemberList(ListModel<RemoteMember> dataModel) { |
||||
super(dataModel); |
||||
init(); |
||||
} |
||||
|
||||
public MemberList(RemoteMember[] listData) { |
||||
super(listData); |
||||
init(); |
||||
} |
||||
|
||||
public MemberList(Vector<? extends RemoteMember> listData) { |
||||
super(listData); |
||||
init(); |
||||
} |
||||
|
||||
private void init() { |
||||
setBackground(new Color(0xF5F5F7)); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
@ -0,0 +1,45 @@
|
||||
package com.fr.design.remote.ui.list; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.remote.RemoteMember; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JList; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.ListCellRenderer; |
||||
import java.awt.Component; |
||||
import java.awt.FlowLayout; |
||||
|
||||
public class MemberListCellRender extends JPanel implements ListCellRenderer<RemoteMember> { |
||||
|
||||
private UILabel label; |
||||
private UICheckBox check; |
||||
|
||||
|
||||
public MemberListCellRender() { |
||||
this.setBorder(BorderFactory.createEmptyBorder()); |
||||
this.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||
label = new UILabel(); |
||||
label.setIcon(BaseUtils.readIcon("com/fr/design/remote/images/icon_Member_normal@1x.png")); |
||||
check = new UICheckBox(); |
||||
check.setSelected(false); |
||||
this.add(label); |
||||
this.add(check); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public Component getListCellRendererComponent(JList list, RemoteMember member, int index, boolean isSelected, boolean cellHasFocus) { |
||||
this.setLabelName(member.getName()); |
||||
check.setSelected(false); |
||||
return this; |
||||
} |
||||
|
||||
private void setLabelName(String name) { |
||||
label.setName(name); |
||||
} |
||||
|
||||
|
||||
} |