帆软报表设计器源代码。
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.
 
 
 
 

360 lines
14 KiB

package com.fr.design.mainframe;
import com.fr.base.ConfigManager;
import com.fr.base.ConfigManagerProvider;
import com.fr.base.FRContext;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.mainframe.toolbar.AuthorityEditToolBarComponent;
import com.fr.design.mainframe.toolbar.ToolBarMenuDock;
import com.fr.design.roleAuthority.RolesAlreadyEditedPane;
import com.fr.design.webattr.ReportWebWidgetConstants;
import com.fr.design.webattr.ToolBarButton;
import com.fr.design.webattr.ToolBarPane;
import com.fr.form.ui.Button;
import com.fr.form.ui.ToolBar;
import com.fr.form.ui.Widget;
import com.fr.general.ComparatorUtils;
import com.fr.general.Inter;
import com.fr.main.TemplateWorkBook;
import com.fr.report.web.Location;
import com.fr.report.web.ToolBarManager;
import com.fr.report.web.WebContent;
import com.fr.stable.ArrayUtils;
import com.fr.web.attr.ReportWebAttr;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
/**
* Author : daisy
* Date: 13-9-9
* Time: 下午4:58
*/
public class AuthorityToolBarPane<T extends WebContent> extends BasicBeanPane<ReportWebAttr> implements AuthorityEditToolBarComponent {
private static final int SMALL_GAP = 13;
private static final int GAP = 25;
private static final int PRE_GAP = 9;
private static final int COMBOX_WIDTH = 144;
private static final String[] CHOOSEITEM = new String[]{Inter.getLocText("M-Page_Preview"), Inter.getLocText(new String[]{"Face_Write", "PageSetup-Page"}), Inter.getLocText("M-Data_Analysis")};
private UIComboBox choseComboBox;
private ToolBarPane toolBarPane;
private AuthorityEditToolBarPane authorityEditToolBarPane = null;
private int selectedIndex = -1;
private UILabel title = null;
private MouseListener mouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (!toolBarPane.isEnabled()) {
return;
}
java.util.List<ToolBarButton> buttonlists = toolBarPane.getToolBarButtons();
int oldIndex = selectedIndex;
selectedIndex = pressButtonIndex(e, buttonlists);
//实现shift多选
if (e.isShiftDown()) {
if (oldIndex == -1) {
removeSelection();
((ToolBarButton) e.getSource()).setSelected(true);
} else {
int max = oldIndex >= selectedIndex ? oldIndex : selectedIndex;
int min = oldIndex <= selectedIndex ? oldIndex : selectedIndex;
for (int i = min; i <= max; i++) {
buttonlists.get(i).setSelected(true);
}
}
} else if (!InputEventBaseOnOS.isControlDown(e)) {
//实现单选
removeSelection();
if (selectedIndex != -1) {
((ToolBarButton) e.getSource()).setSelected(true);
}
}
authorityEditToolBarPane.populate();
EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION);
EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(authorityEditToolBarPane);
}
};
private int pressButtonIndex(MouseEvent e, java.util.List<ToolBarButton> buttonlists) {
if (!(e.getSource() instanceof ToolBarButton)) {
return -1;
}
ToolBarButton button = (ToolBarButton) e.getSource();
for (int i = 0; i < buttonlists.size(); i++) {
if (ComparatorUtils.equals(button, buttonlists.get(i))) {
return i;
}
}
return -1;
}
/**
* 去掉选择
*/
public void removeSelection() {
for (ToolBarButton button : toolBarPane.getToolBarButtons()) {
button.setSelected(false);
}
}
private ItemListener itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.DESELECTED) {
selectedIndex = -1;
populateToolBarPane();
authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons());
authorityEditToolBarPane.setAuthorityToolBarPane(AuthorityToolBarPane.this);
EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(authorityEditToolBarPane);
EastRegionContainerPane.getInstance().replaceConfiguredRolesPane(RolesAlreadyEditedPane.getInstance());
}
}
};
public AuthorityToolBarPane() {
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3));
this.setBorder(BorderFactory.createEmptyBorder(0, PRE_GAP, 0, 0));
title = new UILabel(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "Choose_Role"}));
title.setHorizontalAlignment(SwingConstants.CENTER);
this.add(title, 0);
choseComboBox = new UIComboBox(CHOOSEITEM) {
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
dim.width = COMBOX_WIDTH;
return dim;
}
};
choseComboBox.addItemListener(itemListener);
//默认选择第一个
choseComboBox.setSelectedIndex(0);
this.add(createGapPanel(SMALL_GAP));
this.add(choseComboBox);
toolBarPane = new ToolBarPane();
toolBarPane.setBorder(null);
toolBarPane.removeDefaultMouseListener();
this.add(createGapPanel(GAP));
this.add(toolBarPane);
populateDefaultToolBarWidgets();
populateBean(getReportWebAttr());
toolBarPane.addAuthorityListener(mouseListener);
authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons());
authorityEditToolBarPane.setAuthorityToolBarPane(this);
checkToolBarPaneEnable();
}
private JPanel createGapPanel(final int gap) {
return new JPanel() {
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
dim.width = gap;
return dim;
}
};
}
private void populateToolBarPane() {
toolBarPane.removeAll();
populateDefaultToolBarWidgets();
populateBean(getReportWebAttr());
toolBarPane.addAuthorityListener(mouseListener);
toolBarPane.repaint();
authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons());
checkToolBarPaneEnable();
}
/**
* 使用普通用户远程设计时,如果工具栏使用的是“采用服务器设置”,则工具栏按钮为灰不可用
*/
private void checkToolBarPaneEnable() {
List<ToolBarButton> toolBarButtons = toolBarPane.getToolBarButtons();
boolean isnotEnable = ComparatorUtils.equals(title.getText(), Inter.getLocText(new String[]{"Server", "ReportServerP-Toolbar", "Choose_Role"}))
&& !FRContext.getCurrentEnv().isRoot();
for (ToolBarButton button : toolBarButtons) {
button.setEnabled(!isnotEnable);
}
toolBarPane.setEnabled(!isnotEnable);
}
/**
* 更新权限工具栏面板
*/
public void populateAuthority() {
toolBarPane.repaint();
}
private ReportWebAttr getReportWebAttr() {
JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
if (!editingTemplate.isJWorkBook()) {
return null;
}
JWorkBook editingWorkBook = (JWorkBook) editingTemplate;
TemplateWorkBook wbTpl = editingWorkBook.getTarget();
return wbTpl.getReportWebAttr();
}
//将该报表的设置过权限的属性记录一下
public void setAuthorityWebAttr(Widget widget, boolean isSelected, String selectedRole) {
JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
if (!editingTemplate.isJWorkBook()) {
return;
}
JWorkBook editingWorkBook = (JWorkBook) editingTemplate;
TemplateWorkBook wbTpl = editingWorkBook.getTarget();
ReportWebAttr rw = wbTpl.getReportWebAttr();
ConfigManagerProvider cm = ConfigManager.getProviderInstance();
ReportWebAttr webAttr = ((ReportWebAttr) cm.getGlobalAttribute(ReportWebAttr.class));
if (webAttr == null || rw == null || rw.getWebPage() == null) {
return;
}
//wbTpl.clear先清空
//再将所有的保存进去
//看是存在服务器还存在模板里面
if (choseComboBox.getSelectedIndex() == 0) {
//分页
dealWithWebContent(webAttr.getWebPage(), widget, isSelected, selectedRole);
} else if (choseComboBox.getSelectedIndex() == 1) {
//填报
dealWithWebContent(webAttr.getWebWrite(), widget, isSelected, selectedRole);
} else {
//view
dealWithWebContent(webAttr.getWebView(), widget, isSelected, selectedRole);
}
}
private void dealWithWebContent(WebContent wc, Widget widget, boolean isSelected, String selectedRole) {
ToolBarManager[] managers = wc.getToolBarManagers();
if (managers == null) {
return;
}
for (int i = 0; i < managers.length; i++) {
ToolBar tb = managers[i].getToolBar();
for (int j = 0; j < tb.getWidgetSize(); j++) {
if (widget instanceof Button && tb.getWidget(j) instanceof Button && ComparatorUtils.equals(((Button) widget).getIconName(), ((Button) tb.getWidget(j)).getIconName())) {
if (!isSelected) {
tb.getWidget(j).getWidgetPrivilegeControl().addInvisibleRole(selectedRole);
} else {
tb.getWidget(j).getWidgetPrivilegeControl().removeInvisibleRole(selectedRole);
}
}
}
}
wc.setToolBarManagers(managers);
}
public void populateBean(ReportWebAttr reportWebAttr) {
this.remove(title);
// 如果是空值就说明采用服务器配置了
if (reportWebAttr == null || this.getWebContent(reportWebAttr) == null) {
title = new UILabel(Inter.getLocText(new String[]{"Server", "ReportServerP-Toolbar", "Choose_Role"}));
populateServerSettings();
this.add(title, 0);
return;
}
// 模板设置
T webContent = this.getWebContent(reportWebAttr);
title = new UILabel(Inter.getLocText(new String[]{"the_template", "ReportServerP-Toolbar", "Choose_Role"}));
this.add(title, 0);
populate(webContent.getToolBarManagers());
}
public ReportWebAttr updateBean() {
return null;
}
public void populate(ToolBarManager[] toolBarManager) {
if (ArrayUtils.isEmpty(toolBarManager)) {
return;
}
if (toolBarManager.length == 0) {
return;
}
for (int i = 0; i < toolBarManager.length; i++) {
toolBarPane.populateBean(toolBarManager[i].getToolBar());
}
}
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
dim.height = ToolBarMenuDock.PANLE_HEIGNT;
return dim;
}
public void populateBean(ToolBarManager[] toolBarManager) {
if (ArrayUtils.isEmpty(toolBarManager)) {
return;
}
for (int i = 0; i < toolBarManager.length; i++) {
Location location = toolBarManager[i].getToolBarLocation();
if (location instanceof Location.Embed) {
toolBarPane.populateBean(toolBarManager[i].getToolBar());
}
}
}
private void populateServerSettings() {
ConfigManagerProvider cm = ConfigManager.getProviderInstance();
ReportWebAttr webAttr = ((ReportWebAttr) cm.getGlobalAttribute(ReportWebAttr.class));
if (this.getWebContent(webAttr) != null) {
populate(this.getWebContent(webAttr).getToolBarManagers());
}
}
protected String title4PopupWindow() {
return null;
}
private T getWebContent(ReportWebAttr reportWebAttr) {
if (choseComboBox.getSelectedIndex() == 0) {
return reportWebAttr == null ? null : (T) reportWebAttr.getWebPage();
} else if (choseComboBox.getSelectedIndex() == 1) {
return reportWebAttr == null ? null : (T) reportWebAttr.getWebWrite();
} else {
return reportWebAttr == null ? null : (T) reportWebAttr.getWebView();
}
}
private void populateDefaultToolBarWidgets() {
if (choseComboBox.getSelectedIndex() == 0) {
ReportWebWidgetConstants.getPageToolBarInstance();
} else if (choseComboBox.getSelectedIndex() == 1) {
ReportWebWidgetConstants.getWriteToolBarInstance();
} else {
ReportWebWidgetConstants.getViewToolBarInstance();
}
}
private ToolBarManager getDefaultToolBarManager() {
if (choseComboBox.getSelectedIndex() == 0) {
return ToolBarManager.createDefaultToolBar();
} else if (choseComboBox.getSelectedIndex() == 1) {
return ToolBarManager.createDefaultWriteToolBar();
} else {
return ToolBarManager.createDefaultViewToolBar();
}
}
}