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

829 lines
37 KiB

package com.fr.design.mainframe;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.editor.ValueEditorPane;
import com.fr.design.editor.ValueEditorPaneFactory;
import com.fr.design.event.UIObserverListener;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.toolbar.AuthorityEditToolBarComponent;
import com.fr.design.roleAuthority.ReportAndFSManagePane;
import com.fr.design.roleAuthority.RolesAlreadyEditedPane;
import com.fr.form.ui.Widget;
import com.fr.general.ComparatorUtils;
import com.fr.general.Inter;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection;
import com.fr.js.NameJavaScriptGroup;
import com.fr.report.cell.AbstractCellElement;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.cell.FloatElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.elementcase.TemplateElementCase;
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.ColumnRow;
import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
/**
* Author : daisy
* Date: 13-9-4
* Time: 下午4:01
*/
public class ElementCasePaneAuthorityEditPane extends AuthorityEditPane {
private static final int WIDGET_VISIBLE = 0;
private static final int WIDGET_USABLE = 1;
private static final int CELL = 2;
private static final int HYPER_LINK = 3;
private static final int FLOAT_SELECTION = 3;
private static final int NEW_VALUE = 4;
//新值下面的编辑器的宽度
private static final int NEW_PANE_WIDTH = 120;
private UICheckBox floatElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible"));
private UICheckBox cellElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible"));
private UICheckBox widgetVisible = new UICheckBox(Inter.getLocText("FR-Designer_Visible"));
private UICheckBox widgetAvailable = new UICheckBox(Inter.getLocText("FR-Designer_Enabled"));
private UICheckBox gridColumnRowVisible = new UICheckBox(Inter.getLocText("FR-Designer_Hide"));
private UICheckBox newValue = new UICheckBox(Inter.getLocText("FR-Designer_New_Value"));
private ValueEditorPane valueEditor = ValueEditorPaneFactory.createBasicValueEditorPane(NEW_PANE_WIDTH);
private UICheckBox[] hyperlinkCheckBoxes = null;
private ElementCasePane elementCasePane = null;
private int selectionType = CellSelection.NORMAL;
private CellSelection cellSelection;
private FloatSelection floatSelection;
private boolean isAllHasWidget;
private boolean isAllHasHyperlink;
private String[] selectedPathArray;
private UIObserverListener observerListener = new UIObserverListener() {
@Override
public void doChange() {
if (elementCasePane == null || cellSelection == null) {
return;
}
if (setAuthorityStyle(NEW_VALUE)) {
elementCasePane.fireTargetModified();
}
}
};
private ItemListener newValuelistener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (elementCasePane == null || cellSelection == null) {
return;
}
if (setAuthorityStyle(NEW_VALUE)) {
valueEditor.setEnabled(newValue.isSelected());
doAfterAuthority();
}
}
};
private ItemListener columnRowAuthorityListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (elementCasePane == null) {
return;
}
boolean isDone = false;
if (selectionType == CellSelection.CHOOSE_COLUMN) {
isDone = setAuthorityColumn();
} else {
isDone = setAuthorityRow();
}
if (isDone) {
doAfterAuthority();
}
}
};
private ItemListener floatElementAuthorityListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (elementCasePane == null || floatSelection == null) {
return;
}
if (setLFloatAuthorityStyle()) {
doAfterAuthority();
}
}
};
private ItemListener cellRolesAuthorityListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (elementCasePane == null || cellSelection == null) {
return;
}
if (setAuthorityStyle(CELL)) {
doAfterAuthority();
}
}
};
private ItemListener widgetVisibleRoleAuthorityListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (elementCasePane == null || cellSelection == null) {
return;
}
if (setAuthorityStyle(WIDGET_VISIBLE)) {
doAfterAuthority();
}
}
};
private ItemListener widgetUsableAuthorityListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (elementCasePane == null || cellSelection == null) {
return;
}
if (setAuthorityStyle(WIDGET_USABLE)) {
doAfterAuthority();
}
}
};
public ElementCasePaneAuthorityEditPane(ElementCasePane elementCasePane) {
super(elementCasePane);
this.elementCasePane = elementCasePane;
initCheckBoxesState();
initListener();
}
private void doAfterAuthority() {
elementCasePane.repaint();
elementCasePane.fireTargetModified();
RolesAlreadyEditedPane.getInstance().refreshDockingView();
RolesAlreadyEditedPane.getInstance().setReportAndFSSelectedRoles();
RolesAlreadyEditedPane.getInstance().repaint();
checkCheckBoxes();
}
private boolean setAuthorityColumn() {
initSelectedPathArray();
String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) {
return false;
}
if (selectedRoles == null) {
return false;
}
if (selectedPathArray == null) {
return false;
}
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
boolean isVisible = !gridColumnRowVisible.isSelected();
for (int t = 0; t < selectedPathArray.length; t++) {
if (!isVisible) {
for (int col = cellSelection.getColumn(); col < cellSelection.getColumn() + cellSelection.getColumnSpan(); col++) {
elementCase.addColumnPrivilegeControl(col, selectedPathArray[t]);
}
} else {
for (int col = cellSelection.getColumn(); col < cellSelection.getColumn() + cellSelection.getColumnSpan(); col++) {
elementCase.removeColumnPrivilegeControl(col, selectedPathArray[t]);
}
}
}
return true;
}
private boolean setAuthorityRow() {
initSelectedPathArray();
String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) {
return false;
}
if (selectedRoles == null) {
return false;
}
if (selectedPathArray == null) {
return false;
}
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
boolean isVisible = !gridColumnRowVisible.isSelected();
for (int t = 0; t < selectedPathArray.length; t++) {
if (!isVisible) {
for (int row = cellSelection.getRow(); row < cellSelection.getRow() + cellSelection.getRowSpan(); row++) {
elementCase.addRowPrivilegeControl(row, selectedPathArray[t]);
}
} else {
for (int row = cellSelection.getRow(); row < cellSelection.getRow() + cellSelection.getRowSpan(); row++) {
elementCase.removeRowPrivilegeControl(row, selectedPathArray[t]);
}
}
}
return true;
}
private boolean setLFloatAuthorityStyle() {
initSelectedPathArray();
String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role"))) {
return false;
}
if (selectedRoles == null) {
return false;
}
if (selectedPathArray == null) {
return false;
}
String name = floatSelection.getSelectedFloatName();
TemplateElementCase ec = elementCasePane.getEditingElementCase();
FloatElement fe = ec.getFloatElement(name);
for (int t = 0; t < selectedPathArray.length; t++) {
fe.changeAuthorityState(selectedPathArray[t], floatElementVisibleCheckBoxes.isSelected());
}
return true;
}
private boolean setAuthorityStyle(int type) {
initSelectedPathArray();
String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
if (ComparatorUtils.equals(selectedRoles, Inter.getLocText("FR-Designer_Role")) ||
selectedRoles == null || selectedPathArray == null) {
return false;
}
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
int cellRectangleCount = cellSelection.getCellRectangleCount();
for (int t = 0; t < selectedPathArray.length; t++) {
for (int rec = 0; rec < cellRectangleCount; rec++) {
Rectangle cellRectangle = cellSelection.getCellRectangle(rec);
// 从最后循环起以保证最后一个修改标准单元格(originalStyle)。
for (int j = cellRectangle.height - 1; j >= 0; j--) {
for (int i = cellRectangle.width - 1; i >= 0; i--) {
int column = i + cellRectangle.x;
int row = j + cellRectangle.y;
TemplateCellElement editCellElement = elementCase.getTemplateCellElement(column, row);
if (editCellElement == null) {
editCellElement = new DefaultTemplateCellElement(column, row);
elementCase.addCellElement(editCellElement);
} else {
// 对于合并的格子,我们不多次计算的权限.
if (editCellElement.getColumn() != column
|| editCellElement.getRow() != row) {
continue;
}
}
if (type == CELL) {
editCellElement.changeAuthorityState(selectedPathArray[t], cellElementVisibleCheckBoxes.isSelected());
} else if (type == NEW_VALUE) {
editCellElement.changeNewValueAuthorityState(selectedPathArray[t], newValue.isSelected(), valueEditor.update());
} else if (type == WIDGET_VISIBLE) {
Widget widget = editCellElement.getWidget();
widget.changeVisibleAuthorityState(selectedPathArray[t], widgetVisible.isSelected());
} else {
Widget widget = editCellElement.getWidget();
widget.changeUsableAuthorityState(selectedPathArray[t], widgetAvailable.isSelected());
}
}
}
}
}
return true;
}
/**
* @see AuthorityEditToolBarPane initSelectedPathArray
*/
private void initSelectedPathArray() {
TreePath[] selectionPaths = ReportAndFSManagePane.getInstance().getRoleTree().getCheckBoxTreeSelectionModel().getSelectionPaths();
if (selectionPaths.length == 1) {
if (((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getChildCount() > 0) {
ExpandMutableTreeNode node = (ExpandMutableTreeNode) ((ExpandMutableTreeNode) (selectionPaths[0].getLastPathComponent())).getLastChild();
selectedPathArray = new String[node.getChildCount()];
for (int i = 0; i < node.getChildCount(); i++) {
ExpandMutableTreeNode n = (ExpandMutableTreeNode) node.getChildAt(i);
String nodeName = n.getUserObject().toString();
selectedPathArray[i] = nodeName;
}
} else {
selectedPathArray = pathToString(selectionPaths);
}
} else {
selectedPathArray = pathToString(selectionPaths);
}
}
public static String[] pathToString(TreePath[] path) {
java.util.List<String> roles = new ArrayList<String>();
if (path != null && path.length > 0) {
for (TreePath tempPath : path) {
String temp = tempPath.toString();
boolean isTrue = temp.length() > 0 && temp.charAt(0) == '[' && temp.endsWith("]");
if (isTrue) {
temp = temp.substring(1, temp.length() - 1);
String[] selectedRoles = temp.split("," + StringUtils.BLANK);
String role = selectedRoles[2].trim();
roles.add(role);
}
}
}
return roles.toArray(new String[0]);
}
/**
* 选中的单元格的乐见状态以第一个单元格为齐
*/
public void initCheckBoxesState() {
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
if (cellSelection == null) {
cellElementVisibleCheckBoxes.setSelected(true);
} else {
Rectangle cellRectangle = cellSelection.getCellRectangle(0);
DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(cellRectangle.x, cellRectangle.y);
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(cellRectangle.x, cellRectangle.y);
}
boolean firstCellDoneaAuthority = cellElement.isDoneAuthority(
ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName());
cellElementVisibleCheckBoxes.setSelected(!firstCellDoneaAuthority);
}
widgetAvailable.setEnabled(cellElementVisibleCheckBoxes.isSelected());
widgetVisible.setEnabled(cellElementVisibleCheckBoxes.isSelected());
}
private void initListener() {
cellElementVisibleCheckBoxes.addItemListener(cellRolesAuthorityListener);
widgetVisible.addItemListener(widgetVisibleRoleAuthorityListener);
widgetAvailable.addItemListener(widgetUsableAuthorityListener);
floatElementVisibleCheckBoxes.addItemListener(floatElementAuthorityListener);
gridColumnRowVisible.addItemListener(columnRowAuthorityListener);
newValue.addItemListener(newValuelistener);
valueEditor.registerChangeListener(observerListener);
}
private void removeListener() {
cellElementVisibleCheckBoxes.removeItemListener(cellRolesAuthorityListener);
widgetVisible.removeItemListener(widgetVisibleRoleAuthorityListener);
widgetAvailable.removeItemListener(widgetUsableAuthorityListener);
floatElementVisibleCheckBoxes.removeItemListener(floatElementAuthorityListener);
gridColumnRowVisible.removeItemListener(columnRowAuthorityListener);
newValue.removeItemListener(newValuelistener);
valueEditor.registerChangeListener(null);
}
private void addHyperlinkListener() {
cellElementVisibleCheckBoxes.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (hyperlinkCheckBoxes != null) {
for (int i = 0; i < hyperlinkCheckBoxes.length; i++) {
hyperlinkCheckBoxes[i].setEnabled(cellElementVisibleCheckBoxes.isSelected());
if (!cellElementVisibleCheckBoxes.isSelected()) {
hyperlinkCheckBoxes[i].setSelected(false);
}
}
}
}
});
for (int i = 0; i < hyperlinkCheckBoxes.length; i++) {
hyperlinkCheckBoxes[i].addItemListener(cellRolesAuthorityListener);
}
}
/**
* 更新适合的类型
*/
public void populateType() {
if (selectionType == CellSelection.NORMAL) {
type.setText(Inter.getLocText("FR-Designer_Cell"));
} else if (selectionType == CellSelection.CHOOSE_ROW) {
type.setText(Inter.getLocText("FR-Designer_Row"));
} else if (selectionType == CellSelection.CHOOSE_COLUMN) {
type.setText(Inter.getLocText("FR-Designer_Column"));
} else {
type.setText(Inter.getLocText("M_Insert-Float"));
}
}
/**
* 名字
*/
public void populateName() {
if (selectionType == CellSelection.NORMAL) {
name.setText(getCellSelectionName());
} else if (selectionType == CellSelection.CHOOSE_ROW || selectionType == CellSelection.CHOOSE_COLUMN) {
name.setText(getCellColumnRowName());
} else {
name.setText(getFloatSelectionName());
}
}
private String getCellSelectionName() {
String nameText = "";
int count = cellSelection.getCellRectangleCount();
for (int rect = 0; rect < count; rect++) {
nameText += ",";
Rectangle cellRectangle = cellSelection.getCellRectangle(rect);
ColumnRow beginCR = ColumnRow.valueOf(cellRectangle.x, cellRectangle.y);
nameText += beginCR.toString();
if (cellRectangle.width * cellRectangle.height != 1) {
ColumnRow endCR = ColumnRow.valueOf(cellRectangle.width + cellRectangle.x - 1, cellRectangle.height + cellRectangle.y - 1);
nameText += ":" + endCR.toString();
}
}
return nameText.substring(1);
}
private String getCellColumnRowName() {
int count = cellSelection.getCellRectangleCount();
String nameText = "";
ColumnRow cr = ColumnRow.valueOf(cellSelection.getColumn(), cellSelection.getRow());
if (cellSelection.getSelectedType() == CellSelection.CHOOSE_COLUMN && count == 1) {
if (cellSelection.getColumnSpan() == 1) {
nameText = cr.toString().substring(0, 1);
} else {
ColumnRow endCr = ColumnRow.valueOf(cellSelection.getColumn() + cellSelection.getColumnSpan() - 1,
cellSelection.getRow() + cellSelection.getRowSpan() - 1);
nameText = cr.toString().substring(0, 1) + "-" + endCr.toString().substring(0, 1);
}
} else if (cellSelection.getSelectedType() == CellSelection.CHOOSE_ROW && count == 1) {
if (cellSelection.getRowSpan() == 1) {
nameText = cr.toString().substring(1);
} else {
ColumnRow endCr = ColumnRow.valueOf(cellSelection.getColumn() + cellSelection.getColumnSpan() - 1,
cellSelection.getRow() + cellSelection.getRowSpan() - 1);
nameText = cr.toString().substring(1) + "-" + endCr.toString().substring(1);
}
}
return nameText;
}
private String getFloatSelectionName() {
return floatSelection.getSelectedFloatName();
}
private void mutilRect(CellSelection cellSelection) {
isAllHasWidget = true;
isAllHasHyperlink = true;
int count = cellSelection.getCellRectangleCount();
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
for (int rect = 0; rect < count; rect++) {
Rectangle cellRectangle = cellSelection.getCellRectangle(rect);
for (int j = 0; j < cellRectangle.height; j++) {
for (int i = 0; i < cellRectangle.width; i++) {
int column = i + cellRectangle.x;
int row = j + cellRectangle.y;
DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(column, row);
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(cellSelection.getColumn(), cellSelection.getRow());
}
if (cellElement.getCellWidgetAttr() == null) {
isAllHasWidget = false;
}
if (cellElement.getNameHyperlinkGroup() == null) {
isAllHasHyperlink = false;
}
}
}
}
}
/**
* 更新适合的pane
*
* @return 返回Pane
*/
public JPanel populateCheckPane() {
checkPane.removeAll();
if (selectionType == CellSelection.NORMAL) {
populateCellSelectionCheckPane(checkPane);
} else if (selectionType == CellSelection.CHOOSE_COLUMN || selectionType == CellSelection.CHOOSE_ROW) {
populateColumnRowCheckPane(checkPane);
} else if (selectionType == FLOAT_SELECTION) {
populateFloatSelectionCheckPane(checkPane);
}
checkPane.setBorder(BorderFactory.createEmptyBorder(ALIGNMENT_GAP, 0, 0, 0));
return checkPane;
}
private void populateColumnRowCheckPane(JPanel checkPane) {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{gridColumnRowVisible}
};
double[] rowSize = {p};
double[] columnSize = {f};
int[][] rowCount = {{1}};
checkPane.add(
TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM)
, BorderLayout.WEST);
}
private void populateFloatSelectionCheckPane(JPanel checkPane) {
checkPane.add(populateFloatElementCheckPane(), BorderLayout.WEST);
}
private void populateCellSelectionCheckPane(JPanel checkPane) {
if (elementCasePane.isSelectedOneCell()) {
//只选中了一个单元格
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) elementCase.getCellElement(cellSelection.getColumn(), cellSelection.getRow());
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(cellSelection.getColumn(), cellSelection.getRow());
}
//单元格带控件
if (cellElement.getCellWidgetAttr() != null) {
checkPane.add(populateWidgetCheckPane(), BorderLayout.WEST);
} else {
checkPane.add(populatCellCheckPane(), BorderLayout.WEST);
}
} else {
//批量选中单元格
mutilRect(cellSelection);
if (!isAllHasWidget && !isAllHasHyperlink) {
checkPane.add(populateMutilCellCheckPane(), BorderLayout.WEST);
} else if (isAllHasWidget) {
checkPane.add(populateMutilWidgetCheckPane(), BorderLayout.WEST);
}
}
}
/**
* 对单元格区域进行操作时的权限编辑页面 ,对应的角色的populate
*/
public void populateDetials() {
//做模式标记,此时鼠标焦点是在报表主体,为下一次退出权限编辑时做准备
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setAuthorityMode(false);
TemplateElementCase templateElementCase = elementCasePane.getEditingElementCase();
if (templateElementCase instanceof WorkSheet) {
((WorkSheet) templateElementCase).setPaintSelection(true);
}
signelSelection();
Selection selection = elementCasePane.getSelection();
if (selection instanceof CellSelection) {
selectionType = CellSelection.NORMAL;
this.cellSelection = ((CellSelection) selection).clone();
this.floatSelection = null;
judgeChooseCR();
} else if (selection instanceof FloatSelection) {
selectionType = FLOAT_SELECTION;
cellSelection = null;
floatSelection = new FloatSelection(((FloatSelection) selection).getSelectedFloatName());
}
populateType();
populateName();
populateCheckPane();
checkCheckBoxes();
}
//判断是否选择的行列
private void judgeChooseCR() {
if (cellSelection.getSelectedType() == CellSelection.CHOOSE_COLUMN && cellSelection.getCellRectangleCount() == 1) {
selectionType = CellSelection.CHOOSE_COLUMN;
}
if (cellSelection.getSelectedType() == CellSelection.CHOOSE_ROW && cellSelection.getCellRectangleCount() == 1) {
selectionType = CellSelection.CHOOSE_ROW;
}
}
//实现单选
private void signelSelection() {
JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
if (jTemplate.isJWorkBook()) {
//清工具栏
JComponent component = DesignerContext.getDesignerFrame().getToolbarComponent();
if (component instanceof AuthorityEditToolBarComponent) {
((AuthorityEditToolBarComponent) component).removeSelection();
}
//清参数面板
jTemplate.removeParameterPaneSelection();
}
}
private JPanel populateFloatElementCheckPane() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("M_Insert-Float"), SwingConstants.LEFT), floatElementVisibleCheckBoxes}
};
double[] rowSize = {p};
double[] columnSize = {p, f};
int[][] rowCount = {{1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
private JPanel populateWidgetCheckPane() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes},
new Component[]{null, newValue},
new Component[]{null, valueEditor},
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget"), SwingConstants.LEFT), widgetVisible},
new Component[]{null, widgetAvailable}
};
double[] rowSize = {p, p, p, p, p};
double[] columnSize = {p, f};
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
private JPanel populateMutilWidgetCheckPane() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes},
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget"), SwingConstants.LEFT), widgetVisible},
new Component[]{null, widgetAvailable}
};
double[] rowSize = {p, p, p};
double[] columnSize = {p, f};
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
private JPanel populateMutilCellCheckPane() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{cellElementVisibleCheckBoxes},
};
double[] rowSize = {p};
double[] columnSize = {f};
int[][] rowCount = {{1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
private JPanel populatCellCheckPane() {
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[][]{
new Component[]{cellElementVisibleCheckBoxes},
new Component[]{newValue},
new Component[]{valueEditor}
};
double[] rowSize = {p, p, p};
double[] columnSize = {f};
int[][] rowCount = {{1}, {1}, {1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
public TemplateCellElement getFirstCell() {
final TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
Rectangle cellRectangle = cellSelection.getCellRectangle(0);
// 从最后循环起以保证最后一个修改标准单元格(originalStyle)。
TemplateCellElement firstCell = null;
for (int j = cellRectangle.height - 1; j >= 0; j--) {
for (int i = cellRectangle.width - 1; i >= 0; i--) {
int column = i + cellRectangle.x;
int row = j + cellRectangle.y;
TemplateCellElement editCellElement = elementCase.getTemplateCellElement(column, row);
if (editCellElement != null) {
// 对于合并的格子,我们不多次计算的权限.
if (editCellElement.getColumn() != column || editCellElement.getRow() != row) {
continue;
}
firstCell = editCellElement;
}
}
}
return firstCell;
}
private void checkCheckBoxes() {
String selected = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
removeListener();
if (selectionType == CellSelection.NORMAL) {
checkCellSelectionCkeckboxes(selected);
} else if (selectionType == CellSelection.CHOOSE_COLUMN || selectionType == CellSelection.CHOOSE_ROW) {
checkColumnRowCheckBoxes(selected);
} else if (selectionType == FLOAT_SELECTION) {
checkFloatSelectionCkeckboxes(selected);
}
initListener();
}
private void checkCellSelectionCkeckboxes(String selected) {
TemplateCellElement firstCell = getFirstCell();
if (firstCell == null) {
resetCellElementCheckBoxes();
return;
}
cellElementVisibleCheckBoxes.setSelected(!firstCell.isDoneAuthority(selected));
newValue.setEnabled(!firstCell.isDoneAuthority(selected));
if (!firstCell.isDoneAuthority(selected)) {
newValue.setSelected(firstCell.isDoneNewValueAuthority(selected));
if (newValue.isSelected()) {
valueEditor.setEnabled(true);
valueEditor.populate(firstCell.getCellPrivilegeControl().getNewValueMap().get(selected));
} else {
valueEditor.setEnabled(false);
}
} else {
newValue.setSelected(false);
valueEditor.setEnabled(false);
}
populateWidgetButton(firstCell.getWidget(), selected, firstCell);
}
private void populateWidgetButton(Widget widget, String selected, TemplateCellElement firstCell) {
if (widget != null) {
if (widget.isVisible()) {
widgetVisible.setSelected(!widget.isDoneVisibleAuthority(selected));
widgetVisible.setEnabled(!firstCell.isDoneAuthority(selected));
} else {
widgetVisible.setSelected(widget.isVisibleAuthority(selected));
}
if (widget.isEnabled()) {
widgetAvailable.setSelected(!widget.isDoneUsableAuthority(selected));
widgetAvailable.setEnabled(!widget.isDoneVisibleAuthority(selected));
} else {
widgetAvailable.setSelected(widget.isUsableAuthority(selected));
}
}
}
private void resetCellElementCheckBoxes() {
cellElementVisibleCheckBoxes.setSelected(true);
widgetVisible.setSelected(true);
widgetVisible.setEnabled(true);
widgetAvailable.setSelected(true);
widgetAvailable.setEnabled(true);
newValue.setSelected(false);
valueEditor.setEnabled(false);
}
private void checkColumnRowCheckBoxes(String selected) {
if (cellSelection == null) {
gridColumnRowVisible.setSelected(false);
return;
}
TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
boolean isInside = selectionType == CellSelection.CHOOSE_COLUMN ?
elementCase.getColumnPrivilegeControl(cellSelection.getColumn()).checkInvisible(selected) :
elementCase.getRowPrivilegeControl(cellSelection.getRow()).checkInvisible(selected);
gridColumnRowVisible.setSelected(isInside);
}
private void checkFloatSelectionCkeckboxes(String selected) {
String name = floatSelection.getSelectedFloatName();
TemplateElementCase ec = elementCasePane.getEditingElementCase();
FloatElement fe = ec.getFloatElement(name);
floatElementVisibleCheckBoxes.setSelected(!fe.isDoneAuthority(selected));
}
private JPanel populateHyperlinkCheckPane(AbstractCellElement cellElement) {
NameJavaScriptGroup linkGroup = cellElement.getNameHyperlinkGroup();
//超链接的个数+单元格可见的操作
hyperlinkCheckBoxes = new UICheckBox[linkGroup.size()];
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[hyperlinkCheckBoxes.length + 1][];
if (linkGroup.size() == 1) {
components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes};
components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))};
} else {
components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))};
components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(linkGroup.getNameHyperlink(0).getName() + Inter.getLocText("FR-Designer_Visible"))};
for (int i = 1; i < hyperlinkCheckBoxes.length; i++) {
components[i + 1] = new Component[]{null, hyperlinkCheckBoxes[i] = new UICheckBox(linkGroup.getNameHyperlink(i).getName() + Inter.getLocText("FR-Designer_Visible"))};
}
}
for (int i = 0; i < hyperlinkCheckBoxes.length; i++) {
hyperlinkCheckBoxes[i].setEnabled(cellElementVisibleCheckBoxes.isSelected());
}
addHyperlinkListener();
double[] rowSize = new double[hyperlinkCheckBoxes.length + 1];
int[][] rowCount = new int[hyperlinkCheckBoxes.length + 1][];
for (int i = 0; i < hyperlinkCheckBoxes.length + 1; i++) {
rowSize[i] = p;
rowCount[i] = new int[]{1, 1};
}
double[] columnSize = {p, f};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
private JPanel populateMutilHyperlinkCheckPane() {
//超链接的个数+单元格可见的操作
hyperlinkCheckBoxes = new UICheckBox[1];
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
Component[][] components = new Component[2][];
components[0] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Cell"), SwingConstants.LEFT), cellElementVisibleCheckBoxes};
components[1] = new Component[]{new UILabel(Inter.getLocText("FR-Designer_Hyperlink"), SwingConstants.LEFT), hyperlinkCheckBoxes[0] = new UICheckBox(Inter.getLocText("FR-Designer_Visible"))};
hyperlinkCheckBoxes[0].setEnabled(cellElementVisibleCheckBoxes.isSelected());
addHyperlinkListener();
double[] rowSize = {p, p};
double[] columnSize = {p, f};
int[][] rowCount = {{1, 1}, {1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
}
}