diff --git a/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java b/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java index 0c3d6f9d7..59fdb2205 100644 --- a/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java +++ b/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java @@ -1,548 +1,553 @@ -package com.fr.design.dscolumn; - -import com.fr.base.Formula; -import com.fr.data.util.SortOrder; -import com.fr.design.data.DesignTableDataManager; -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.formula.*; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ispinner.UISpinner; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.Inter; -import com.fr.report.cell.CellElement; -import com.fr.report.cell.TemplateCellElement; -import com.fr.report.cell.cellattr.CellExpandAttr; -import com.fr.report.cell.cellattr.core.group.DSColumn; -import com.fr.report.cell.cellattr.core.group.SelectCount; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class DSColumnAdvancedPane extends BasicPane { - - private static final String InsetText = " "; - private SortPane sortPane; - private SelectCountPane selectCountPane; - private ValuePane valuePane; - private UICheckBox horizontalExtendableCheckBox; - private UICheckBox verticalExtendableCheckBox; -// private UICheckBox isCoverCheckBox; - private UICheckBox useMultiplyNumCheckBox; - private UISpinner multiNumSpinner; - - public DSColumnAdvancedPane() { - this(DSColumnPane.SETTING_ALL); - } - - public DSColumnAdvancedPane(int setting) { - this.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - sortPane = new SortPane(); - sortPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Sort-Sort_Order"),null)); - - if (setting > DSColumnPane.SETTING_DSRELATED) { - selectCountPane = new SelectCountPane(); - selectCountPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("BindColumn-Results_Filter"),null)); - } - - valuePane = new ValuePane(); - valuePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("BindColumn-Custom_Data_Appearance"),null)); - - - JPanel extendablePane = null; - if (setting > DSColumnPane.SETTING_DSRELATED) { - // extendableDirectionPane - JPanel extendableDirectionPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - - extendableDirectionPane.add(horizontalExtendableCheckBox = new UICheckBox(Inter.getLocText("ExpandD-Horizontal_Extendable"))); - extendableDirectionPane.add(verticalExtendableCheckBox = new UICheckBox(Inter.getLocText("ExpandD-Vertical_Extendable"))); - - extendablePane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("ExpandD-Expandable")); - extendablePane.setLayout(new BorderLayout()); - extendablePane.add(extendableDirectionPane, BorderLayout.CENTER); - } - - JPanel multiNumPane = null; - if (setting > DSColumnPane.SETTING_DSRELATED) { - multiNumPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Fill_blank_Data")); - useMultiplyNumCheckBox = new UICheckBox(Inter.getLocText("Column_Multiple")); - multiNumPane.add(useMultiplyNumCheckBox); - multiNumPane.add(new UILabel(InsetText)); - - multiNumSpinner = new UISpinner(1, 10000, 1, 1); - multiNumPane.add(multiNumSpinner); - - useMultiplyNumCheckBox.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - checkButtonEnabled(); - } - }); - } - - double[] rowSize = {TableLayout.PREFERRED, TableLayout.PREFERRED, - TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED}; - double[] columnSize = {TableLayout.FILL}; - - Component[][] components = null; - if (setting > DSColumnPane.SETTING_DSRELATED) { - components = new Component[][]{ - {sortPane}, - {selectCountPane}, - {valuePane}, - {extendablePane}, - {multiNumPane} - }; - } else { - components = new Component[][]{ - {sortPane}, - {valuePane} - }; - } - this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER); - } - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("Advanced"); - } - - public void populate(TemplateCellElement cellElement) { - if (cellElement == null) { - return; - } - - sortPane.populate(cellElement); - valuePane.populate(cellElement); - - if (selectCountPane != null) { - selectCountPane.populate(cellElement); - - CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); - if (cellExpandAttr == null) { - cellExpandAttr = new CellExpandAttr(); - cellElement.setCellExpandAttr(cellExpandAttr); - } - - // extendable - switch (cellExpandAttr.getExtendable()) { - case CellExpandAttr.Both_EXTENDABLE: - horizontalExtendableCheckBox.setSelected(true); - verticalExtendableCheckBox.setSelected(true); - break; - case CellExpandAttr.Vertical_EXTENDABLE: - horizontalExtendableCheckBox.setSelected(false); - verticalExtendableCheckBox.setSelected(true); - break; - case CellExpandAttr.Horizontal_EXTENDABLE: - horizontalExtendableCheckBox.setSelected(true); - verticalExtendableCheckBox.setSelected(false); - break; - default: { - horizontalExtendableCheckBox.setSelected(false); - verticalExtendableCheckBox.setSelected(false); - } - - } - - if (cellExpandAttr.getMultipleNumber() == -1) { - this.useMultiplyNumCheckBox.setSelected(false); - } else { - this.useMultiplyNumCheckBox.setSelected(true); - this.multiNumSpinner.setValue(cellExpandAttr.getMultipleNumber()); - } - - this.checkButtonEnabled(); - } - } - - public void update(TemplateCellElement cellElement) { - if (cellElement == null) { - return; - } - - sortPane.update(cellElement); - valuePane.update(cellElement); - - if (selectCountPane != null) { - selectCountPane.update(cellElement); - - CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); - if (cellExpandAttr == null) { - cellExpandAttr = new CellExpandAttr(); - cellElement.setCellExpandAttr(cellExpandAttr); - } - - // extendable - if (horizontalExtendableCheckBox.isSelected()) { - if (verticalExtendableCheckBox.isSelected()) { - cellExpandAttr.setExtendable(CellExpandAttr.Both_EXTENDABLE); - } else { - cellExpandAttr.setExtendable(CellExpandAttr.Horizontal_EXTENDABLE); - } - } else { - if (verticalExtendableCheckBox.isSelected()) { - cellExpandAttr.setExtendable(CellExpandAttr.Vertical_EXTENDABLE); - } else { - cellExpandAttr.setExtendable(CellExpandAttr.None_EXTENDABLE); - } - } - - if (this.useMultiplyNumCheckBox.isSelected()) { - cellExpandAttr.setMultipleNumber((int) this.multiNumSpinner.getValue()); - } else { - cellExpandAttr.setMultipleNumber(-1); - } - } - } - - private static class SortPane extends SortFormulaPane { - private CellElement cellElement; - - @Override - public void formulaAction() { - if (cellElement == null) { - return; - } - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - - String[] displayNames = DesignTableDataManager.getSelectedColumnNames( - DesignTableDataManager.getEditingTableDataSource(), ((DSColumn) value).getDSName()); - - showFormulaDialog(displayNames); - } - - void populate(CellElement cellElement) { - if (cellElement == null) { - return; - } - this.cellElement = cellElement; - - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dSColumn = (DSColumn) value; - - int sort = dSColumn.getOrder(); - this.sortOrderComboBox.setSortOrder(new SortOrder(sort)); - - String sortFormula = dSColumn.getSortFormula(); - if (sortFormula != null && sortFormula.length() >= 1) { - sortFormulaTextField.setText(sortFormula); - } else { - sortFormulaTextField.setText(sortFormula); - } - } - - public void update(CellElement cellElement) { - if (cellElement == null) { - return; - } - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dSColumn = (DSColumn) (cellElement.getValue()); - - dSColumn.setOrder(this.sortOrderComboBox.getSortOrder().getOrder()); - //lance:sort formula - - String sText = null; - if (!(sortFormulaTextField.getText() == null || sortFormulaTextField.getText().trim().equals("") || sortFormulaTextField.getText().trim().equals("$$$"))) { - sText = new String(sortFormulaTextField.getText()); - } - if (!(sText == null || sText.length() < 1)) { - dSColumn.setSortFormula(sText); - } else { - dSColumn.setSortFormula(null); - } - } - } - - private static class SelectCountPane extends JPanel { - - CellElement cellElement; - // private Comparator sortComparator; - private UIComboBox selectCountComboBox; - private JPanel selectCountCardPane; - private UITextField serialTextField; - - JFormulaField topFormulaPane; - JFormulaField bottomFormulaPane; - - public SelectCountPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - selectCountComboBox = new UIComboBox(new String[]{ - Inter.getLocText("Undefined"), - Inter.getLocText("BindColumn-Top_N"), - Inter.getLocText("BindColumn-Bottom_N"), - Inter.getLocText("Odd"), - Inter.getLocText("Even"), - Inter.getLocText("Specify"),}); - selectCountComboBox.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - int selectIndex = selectCountComboBox.getSelectedIndex(); - CardLayout c1 = (CardLayout) selectCountCardPane.getLayout(); - if (selectIndex == 1) { - c1.show(selectCountCardPane, "TOP"); - } else if (selectIndex == 2) { - c1.show(selectCountCardPane, "BOTTOM"); - } else if (selectIndex == 3) { - c1.show(selectCountCardPane, "ODD"); - } else if (selectIndex == 4) { - c1.show(selectCountCardPane, "EVEN"); - } else if (selectIndex == 5) { - c1.show(selectCountCardPane, "SPECIFY"); - } else { - c1.show(selectCountCardPane, "UNDEFINE"); - } - } - }); - - selectCountCardPane =FRGUIPaneFactory.createCardLayout_S_Pane(); - this.add(GUICoreUtils.createFlowPane(new JComponent[]{new UILabel(InsetText), selectCountComboBox, - new UILabel(InsetText), selectCountCardPane}, FlowLayout.LEFT), BorderLayout.WEST); -// selectCountCardPane.setLayout(new CardLayout()); - - //not define pane - - JPanel undefinedPane = GUICoreUtils.createFlowPane(new UILabel(Inter.getLocText("Undefined")), FlowLayout.LEFT); - topFormulaPane = new JFormulaField("-1"); - bottomFormulaPane = new JFormulaField("-1"); - serialTextField = new UITextField(18); - JPanel oddPane = GUICoreUtils.createFlowPane(new UILabel(Inter.getLocText("BindColumn-Result_Serial_Number_Start_From_1") - + " " + Inter.getLocText("BindColumn-Odd_Selected_(1,3,5...)")), FlowLayout.LEFT); - JPanel evenPane = GUICoreUtils.createFlowPane(new UILabel(Inter.getLocText("BindColumn-Result_Serial_Number_Start_From_1") - + " " + Inter.getLocText("BindColumn-Even_Selected_(2,4,6...)")), FlowLayout.LEFT); - JPanel specifyPane = GUICoreUtils.createFlowPane(new JComponent[]{ - serialTextField, new UILabel( - Inter.getLocText(new String[]{ - "Format", "BindColumn-Result_Serial_Number_Start_From_1", "Inner_Parameter", "Group_Count"}, - new String[]{": 1,2-3,5,8 ", ",", "$__count__"}) - ) - }, FlowLayout.LEFT); - serialTextField.setToolTipText(Inter.getLocText("StyleFormat-Sample") + ":=JOINARRAY(GREPARRAY(RANGE($__count__), item!=4), \",\")"); - selectCountCardPane.add(undefinedPane, "UNDEFINE"); - selectCountCardPane.add(topFormulaPane, "TOP"); - selectCountCardPane.add(bottomFormulaPane, "BOTTOM"); - //odd - selectCountCardPane.add(oddPane, "ODD"); - //even - selectCountCardPane.add(evenPane, "EVEN"); - //specify - selectCountCardPane.add(specifyPane, "SPECIFY"); - } - - public void populate(CellElement cellElement) { - if (cellElement == null) { - return; - } - this.cellElement = cellElement; - - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dSColumn = (DSColumn) (cellElement.getValue()); - SelectCount selectCount = dSColumn.getSelectCount(); - this.topFormulaPane.populateElement(cellElement); - this.bottomFormulaPane.populateElement(cellElement); - if (selectCount != null) { - int selectCountType = selectCount.getType(); - this.selectCountComboBox.setSelectedIndex(selectCountType); - if (selectCountType == SelectCount.TOP) { - this.topFormulaPane.populate(selectCount.getFormulaCount()); - } else if (selectCountType == SelectCount.BOTTOM) { - this.bottomFormulaPane.populate(selectCount.getFormulaCount()); - } else if (selectCountType == SelectCount.SPECIFY) { - this.serialTextField.setText(selectCount.getSerial()); - } - } - } - - public void update(CellElement cellElement) { - if (cellElement == null) { - return; - } - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dSColumn = (DSColumn) (cellElement.getValue()); - - //alex:SelectCount - int selectCountSelectIndex = this.selectCountComboBox.getSelectedIndex(); - if (selectCountSelectIndex == 0) { - dSColumn.setSelectCount(null); - } else { - SelectCount selectCount = new SelectCount(); - dSColumn.setSelectCount(selectCount); - selectCount.setType(selectCountSelectIndex); - if (selectCountSelectIndex == SelectCount.TOP) { - selectCount.setFormulaCount(this.topFormulaPane.getFormulaText()); - } else if (selectCountSelectIndex == SelectCount.BOTTOM) { - selectCount.setFormulaCount(this.bottomFormulaPane.getFormulaText()); - } else if (selectCountSelectIndex == SelectCount.SPECIFY) { - selectCount.setSerial(this.serialTextField.getText()); - } - } - } - - private JFormattedTextField getTextField(JSpinner spinner) { - JComponent editor = spinner.getEditor(); - if (editor instanceof JSpinner.DefaultEditor) { - return ((JSpinner.DefaultEditor) editor).getTextField(); - } else { - System.err.println("Unexpected editor type: " - + spinner.getEditor().getClass() - + " isn't a descendant of DefaultEditor"); - return null; - } - } - } - - private static class JFormulaField extends JPanel { - private CellElement cellElement; - private UITextField formulaTextField; - private String defaultValue; - - public JFormulaField(String defaultValue) { - this.defaultValue = defaultValue; - - this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); - UILabel bottomLabel = new UILabel("="); - bottomLabel.setFont(new Font("Dialog", Font.BOLD, 12)); - this.add(bottomLabel); - formulaTextField = new UITextField(24); - this.add(formulaTextField); - formulaTextField.setText(defaultValue); - - UIButton bottomFrmulaButton = new UIButton("..."); - this.add(bottomFrmulaButton); - bottomFrmulaButton.setToolTipText(Inter.getLocText("Formula") + "..."); - bottomFrmulaButton.setPreferredSize(new Dimension(25, formulaTextField.getPreferredSize().height)); - bottomFrmulaButton.addActionListener(formulaButtonActionListener); - } - - public void populate(String formulaContent) { - this.formulaTextField.setText(formulaContent); - } - public void populateElement(CellElement cellElement) { - this.cellElement = cellElement; - } - - public String getFormulaText() { - return this.formulaTextField.getText(); - } - - private ActionListener formulaButtonActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - Formula valueFormula = new Formula(); - String text = formulaTextField.getText(); - if (text == null || text.length() <= 0) { - valueFormula.setContent(defaultValue); - } else { - valueFormula.setContent(text); - } - - final UIFormula formulaPane = FormulaFactory.createFormulaPaneWhenReserveFormula(); - - if (cellElement == null) { - return; - } - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dsColumn = (DSColumn) value; - - String[] displayNames = DesignTableDataManager.getSelectedColumnNames(DesignTableDataManager.getEditingTableDataSource(), dsColumn.getDSName()); - - formulaPane.populate(valueFormula, new CustomVariableResolver(displayNames, true)); - formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(JFormulaField.this), new DialogActionAdapter() { - @Override - public void doOk() { - Formula valueFormula = formulaPane.update(); - if (valueFormula.getContent().length() <= 1) { - formulaTextField.setText(defaultValue); - } else { - formulaTextField.setText(valueFormula.getContent().substring(1)); - } - } - }).setVisible(true); - } - }; - } - - private static class ValuePane extends JPanel { - private JFormulaField formulaField; - - public ValuePane() { - this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); - - this.add(new UILabel(InsetText + Inter.getLocText("Value") + ":")); - this.add(Box.createHorizontalStrut(2)); - this.add((formulaField = new JFormulaField("$$$"))); - } - - public void populate(CellElement cellElement) { - if (cellElement == null) { - return; - } - - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dSColumn = (DSColumn) value; - - //formula - String valueFormula = dSColumn.getResult(); - if (valueFormula == null) { - valueFormula = "$$$"; - } - formulaField.populateElement(cellElement); - formulaField.populate(valueFormula); - } - - public void update(CellElement cellElement) { - if (cellElement == null) { - return; - } - Object value = cellElement.getValue(); - if (value == null || !(value instanceof DSColumn)) { - return; - } - DSColumn dSColumn = (DSColumn) (cellElement.getValue()); - - //formula - dSColumn.setResult(this.formulaField.getFormulaText()); - } - } - - private void checkButtonEnabled() { - if (useMultiplyNumCheckBox.isSelected()) { - multiNumSpinner.setEnabled(true); - } else { - multiNumSpinner.setEnabled(false); - } - } +package com.fr.design.dscolumn; + +import com.fr.base.Formula; +import com.fr.data.util.SortOrder; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.formula.CustomVariableResolver; +import com.fr.design.formula.FormulaFactory; +import com.fr.design.formula.SortFormulaPane; +import com.fr.design.formula.UIFormula; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.cell.cellattr.core.group.SelectCount; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.*; + +public class DSColumnAdvancedPane extends BasicPane { + + private static final String InsetText = " "; + private SortPane sortPane; + private SelectCountPane selectCountPane; + private ValuePane valuePane; + private UICheckBox horizontalExtendableCheckBox; + private UICheckBox verticalExtendableCheckBox; + private UICheckBox useMultiplyNumCheckBox; + private UISpinner multiNumSpinner; + + public DSColumnAdvancedPane() { + this(DSColumnPane.SETTING_ALL); + } + + public DSColumnAdvancedPane(int setting) { + this.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + sortPane = new SortPane(); + sortPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Sort-Sort_Order"), null)); + + if (setting > DSColumnPane.SETTING_DSRELATED) { + selectCountPane = new SelectCountPane(); + selectCountPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("BindColumn-Results_Filter"), null)); + } + + valuePane = new ValuePane(); + valuePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("BindColumn-Custom_Data_Appearance"), null)); + + + JPanel extendablePane = null; + if (setting > DSColumnPane.SETTING_DSRELATED) { + // extendableDirectionPane + JPanel extendableDirectionPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + + extendableDirectionPane.add(horizontalExtendableCheckBox = new UICheckBox(Inter.getLocText("ExpandD-Horizontal_Extendable"))); + extendableDirectionPane.add(verticalExtendableCheckBox = new UICheckBox(Inter.getLocText("ExpandD-Vertical_Extendable"))); + + extendablePane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("ExpandD-Expandable")); + extendablePane.setLayout(new BorderLayout()); + extendablePane.add(extendableDirectionPane, BorderLayout.CENTER); + } + + JPanel multiNumPane = null; + if (setting > DSColumnPane.SETTING_DSRELATED) { + multiNumPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Fill_blank_Data")); + useMultiplyNumCheckBox = new UICheckBox(Inter.getLocText("Column_Multiple")); + multiNumPane.add(useMultiplyNumCheckBox); + multiNumPane.add(new UILabel(InsetText)); + + multiNumSpinner = new UISpinner(1, 10000, 1, 1); + multiNumPane.add(multiNumSpinner); + + useMultiplyNumCheckBox.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) { + checkButtonEnabled(); + } + }); + } + + double[] rowSize = {TableLayout.PREFERRED, TableLayout.PREFERRED, + TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED}; + double[] columnSize = {TableLayout.FILL}; + + Component[][] components = null; + if (setting > DSColumnPane.SETTING_DSRELATED) { + components = new Component[][]{ + {sortPane}, + {selectCountPane}, + {valuePane}, + {extendablePane}, + {multiNumPane} + }; + } else { + components = new Component[][]{ + {sortPane}, + {valuePane} + }; + } + this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER); + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Advanced"); + } + + public void populate(TemplateCellElement cellElement) { + if (cellElement == null) { + return; + } + + sortPane.populate(cellElement); + valuePane.populate(cellElement); + + if (selectCountPane != null) { + selectCountPane.populate(cellElement); + + CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); + if (cellExpandAttr == null) { + cellExpandAttr = new CellExpandAttr(); + cellElement.setCellExpandAttr(cellExpandAttr); + } + + // extendable + switch (cellExpandAttr.getExtendable()) { + case CellExpandAttr.Both_EXTENDABLE: + horizontalExtendableCheckBox.setSelected(true); + verticalExtendableCheckBox.setSelected(true); + break; + case CellExpandAttr.Vertical_EXTENDABLE: + horizontalExtendableCheckBox.setSelected(false); + verticalExtendableCheckBox.setSelected(true); + break; + case CellExpandAttr.Horizontal_EXTENDABLE: + horizontalExtendableCheckBox.setSelected(true); + verticalExtendableCheckBox.setSelected(false); + break; + default: { + horizontalExtendableCheckBox.setSelected(false); + verticalExtendableCheckBox.setSelected(false); + } + + } + + if (cellExpandAttr.getMultipleNumber() == -1) { + this.useMultiplyNumCheckBox.setSelected(false); + } else { + this.useMultiplyNumCheckBox.setSelected(true); + this.multiNumSpinner.setValue(cellExpandAttr.getMultipleNumber()); + } + + this.checkButtonEnabled(); + } + } + + public void update(TemplateCellElement cellElement) { + if (cellElement == null) { + return; + } + + sortPane.update(cellElement); + valuePane.update(cellElement); + + if (selectCountPane != null) { + selectCountPane.update(cellElement); + + CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); + if (cellExpandAttr == null) { + cellExpandAttr = new CellExpandAttr(); + cellElement.setCellExpandAttr(cellExpandAttr); + } + + // extendable + if (horizontalExtendableCheckBox.isSelected()) { + if (verticalExtendableCheckBox.isSelected()) { + cellExpandAttr.setExtendable(CellExpandAttr.Both_EXTENDABLE); + } else { + cellExpandAttr.setExtendable(CellExpandAttr.Horizontal_EXTENDABLE); + } + } else { + if (verticalExtendableCheckBox.isSelected()) { + cellExpandAttr.setExtendable(CellExpandAttr.Vertical_EXTENDABLE); + } else { + cellExpandAttr.setExtendable(CellExpandAttr.None_EXTENDABLE); + } + } + + if (this.useMultiplyNumCheckBox.isSelected()) { + cellExpandAttr.setMultipleNumber((int) this.multiNumSpinner.getValue()); + } else { + cellExpandAttr.setMultipleNumber(-1); + } + } + } + + private static class SortPane extends SortFormulaPane { + private CellElement cellElement; + + @Override + public void formulaAction() { + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + + String[] displayNames = DesignTableDataManager.getSelectedColumnNames( + DesignTableDataManager.getEditingTableDataSource(), ((DSColumn) value).getDSName()); + + showFormulaDialog(displayNames); + } + + void populate(CellElement cellElement) { + if (cellElement == null) { + return; + } + this.cellElement = cellElement; + + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) value; + + int sort = dSColumn.getOrder(); + this.sortOrderComboBox.setSortOrder(new SortOrder(sort)); + + String sortFormula = dSColumn.getSortFormula(); + if (sortFormula != null && sortFormula.length() >= 1) { + sortFormulaTextField.setText(sortFormula); + } else { + sortFormulaTextField.setText(sortFormula); + } + } + + public void update(CellElement cellElement) { + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + + dSColumn.setOrder(this.sortOrderComboBox.getSortOrder().getOrder()); + //lance:sort formula + + String sText = null; + if (!(sortFormulaTextField.getText() == null || sortFormulaTextField.getText().trim().equals("") || sortFormulaTextField.getText().trim().equals("$$$"))) { + sText = new String(sortFormulaTextField.getText()); + } + if (!(sText == null || sText.length() < 1)) { + dSColumn.setSortFormula(sText); + } else { + dSColumn.setSortFormula(null); + } + } + } + + private static class SelectCountPane extends JPanel { + + CellElement cellElement; + // private Comparator sortComparator; + private UIComboBox selectCountComboBox; + private JPanel selectCountCardPane; + private UITextField serialTextField; + + JFormulaField topFormulaPane; + JFormulaField bottomFormulaPane; + + public SelectCountPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + selectCountComboBox = new UIComboBox(new String[]{ + Inter.getLocText("Undefined"), + Inter.getLocText("BindColumn-Top_N"), + Inter.getLocText("BindColumn-Bottom_N"), + Inter.getLocText("Odd"), + Inter.getLocText("Even"), + Inter.getLocText("Specify"),}); + selectCountComboBox.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + int selectIndex = selectCountComboBox.getSelectedIndex(); + CardLayout c1 = (CardLayout) selectCountCardPane.getLayout(); + if (selectIndex == 1) { + c1.show(selectCountCardPane, "TOP"); + } else if (selectIndex == 2) { + c1.show(selectCountCardPane, "BOTTOM"); + } else if (selectIndex == 3) { + c1.show(selectCountCardPane, "ODD"); + } else if (selectIndex == 4) { + c1.show(selectCountCardPane, "EVEN"); + } else if (selectIndex == 5) { + c1.show(selectCountCardPane, "SPECIFY"); + } else { + c1.show(selectCountCardPane, "UNDEFINE"); + } + } + }); + + selectCountCardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + this.add(GUICoreUtils.createFlowPane(new JComponent[]{new UILabel(InsetText), selectCountComboBox, + new UILabel(InsetText), selectCountCardPane}, FlowLayout.LEFT), BorderLayout.WEST); +// selectCountCardPane.setLayout(new CardLayout()); + + //not define pane + + JPanel undefinedPane = GUICoreUtils.createFlowPane(new UILabel(Inter.getLocText("Undefined")), FlowLayout.LEFT); + topFormulaPane = new JFormulaField("-1"); + bottomFormulaPane = new JFormulaField("-1"); + serialTextField = new UITextField(18); + JPanel oddPane = GUICoreUtils.createFlowPane(new UILabel(Inter.getLocText("BindColumn-Result_Serial_Number_Start_From_1") + + " " + Inter.getLocText("BindColumn-Odd_Selected_(1,3,5...)")), FlowLayout.LEFT); + JPanel evenPane = GUICoreUtils.createFlowPane(new UILabel(Inter.getLocText("BindColumn-Result_Serial_Number_Start_From_1") + + " " + Inter.getLocText("BindColumn-Even_Selected_(2,4,6...)")), FlowLayout.LEFT); + JPanel specifyPane = GUICoreUtils.createFlowPane(new JComponent[]{ + serialTextField, new UILabel( + Inter.getLocText(new String[]{ + "Format", "BindColumn-Result_Serial_Number_Start_From_1", "Inner_Parameter", "Group_Count"}, + new String[]{": 1,2-3,5,8 ", ",", "$__count__"}) + ) + }, FlowLayout.LEFT); + serialTextField.setToolTipText(Inter.getLocText("StyleFormat-Sample") + ":=JOINARRAY(GREPARRAY(RANGE($__count__), item!=4), \",\")"); + selectCountCardPane.add(undefinedPane, "UNDEFINE"); + selectCountCardPane.add(topFormulaPane, "TOP"); + selectCountCardPane.add(bottomFormulaPane, "BOTTOM"); + //odd + selectCountCardPane.add(oddPane, "ODD"); + //even + selectCountCardPane.add(evenPane, "EVEN"); + //specify + selectCountCardPane.add(specifyPane, "SPECIFY"); + } + + public void populate(CellElement cellElement) { + if (cellElement == null) { + return; + } + this.cellElement = cellElement; + + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + SelectCount selectCount = dSColumn.getSelectCount(); + this.topFormulaPane.populateElement(cellElement); + this.bottomFormulaPane.populateElement(cellElement); + if (selectCount != null) { + int selectCountType = selectCount.getType(); + this.selectCountComboBox.setSelectedIndex(selectCountType); + if (selectCountType == TOP.getValue()) { + this.topFormulaPane.populate(selectCount.getFormulaCount()); + } else if (selectCountType == BOTTOM.getValue()) { + this.bottomFormulaPane.populate(selectCount.getFormulaCount()); + } else if (selectCountType == SPECIFY.getValue()) { + this.serialTextField.setText(selectCount.getSerial()); + } + } + } + + public void update(CellElement cellElement) { + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + + //alex:SelectCount + int selectCountSelectIndex = this.selectCountComboBox.getSelectedIndex(); + if (selectCountSelectIndex == 0) { + dSColumn.setSelectCount(null); + } else { + SelectCount selectCount = new SelectCount(); + dSColumn.setSelectCount(selectCount); + selectCount.setType(selectCountSelectIndex); + if (selectCountSelectIndex == TOP.getValue()) { + selectCount.setFormulaCount(this.topFormulaPane.getFormulaText()); + } else if (selectCountSelectIndex == BOTTOM.getValue()) { + selectCount.setFormulaCount(this.bottomFormulaPane.getFormulaText()); + } else if (selectCountSelectIndex == SPECIFY.getValue()) { + selectCount.setSerial(this.serialTextField.getText()); + } + } + } + + private JFormattedTextField getTextField(JSpinner spinner) { + JComponent editor = spinner.getEditor(); + if (editor instanceof JSpinner.DefaultEditor) { + return ((JSpinner.DefaultEditor) editor).getTextField(); + } else { + System.err.println("Unexpected editor type: " + + spinner.getEditor().getClass() + + " isn't a descendant of DefaultEditor"); + return null; + } + } + } + + private static class JFormulaField extends JPanel { + private CellElement cellElement; + private UITextField formulaTextField; + private String defaultValue; + + public JFormulaField(String defaultValue) { + this.defaultValue = defaultValue; + + this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); + UILabel bottomLabel = new UILabel("="); + bottomLabel.setFont(new Font("Dialog", Font.BOLD, 12)); + this.add(bottomLabel); + formulaTextField = new UITextField(24); + this.add(formulaTextField); + formulaTextField.setText(defaultValue); + + UIButton bottomFrmulaButton = new UIButton("..."); + this.add(bottomFrmulaButton); + bottomFrmulaButton.setToolTipText(Inter.getLocText("Formula") + "..."); + bottomFrmulaButton.setPreferredSize(new Dimension(25, formulaTextField.getPreferredSize().height)); + bottomFrmulaButton.addActionListener(formulaButtonActionListener); + } + + public void populate(String formulaContent) { + this.formulaTextField.setText(formulaContent); + } + + public void populateElement(CellElement cellElement) { + this.cellElement = cellElement; + } + + public String getFormulaText() { + return this.formulaTextField.getText(); + } + + private ActionListener formulaButtonActionListener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + Formula valueFormula = new Formula(); + String text = formulaTextField.getText(); + if (text == null || text.length() <= 0) { + valueFormula.setContent(defaultValue); + } else { + valueFormula.setContent(text); + } + + final UIFormula formulaPane = FormulaFactory.createFormulaPaneWhenReserveFormula(); + + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dsColumn = (DSColumn) value; + + String[] displayNames = DesignTableDataManager.getSelectedColumnNames(DesignTableDataManager.getEditingTableDataSource(), dsColumn.getDSName()); + + formulaPane.populate(valueFormula, new CustomVariableResolver(displayNames, true)); + formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(JFormulaField.this), new DialogActionAdapter() { + @Override + public void doOk() { + Formula valueFormula = formulaPane.update(); + if (valueFormula.getContent().length() <= 1) { + formulaTextField.setText(defaultValue); + } else { + formulaTextField.setText(valueFormula.getContent().substring(1)); + } + } + }).setVisible(true); + } + }; + } + + private static class ValuePane extends JPanel { + private JFormulaField formulaField; + + public ValuePane() { + this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); + + this.add(new UILabel(InsetText + Inter.getLocText("Value") + ":")); + this.add(Box.createHorizontalStrut(2)); + this.add((formulaField = new JFormulaField("$$$"))); + } + + public void populate(CellElement cellElement) { + if (cellElement == null) { + return; + } + + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) value; + + //formula + String valueFormula = dSColumn.getResult(); + if (valueFormula == null) { + valueFormula = "$$$"; + } + formulaField.populateElement(cellElement); + formulaField.populate(valueFormula); + } + + public void update(CellElement cellElement) { + if (cellElement == null) { + return; + } + Object value = cellElement.getValue(); + if (value == null || !(value instanceof DSColumn)) { + return; + } + DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + + //formula + dSColumn.setResult(this.formulaField.getFormulaText()); + } + } + + private void checkButtonEnabled() { + if (useMultiplyNumCheckBox.isSelected()) { + multiNumSpinner.setEnabled(true); + } else { + multiNumSpinner.setEnabled(false); + } + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/module/DesignerModule.java b/designer/src/com/fr/design/module/DesignerModule.java index 6cdbea4e5..c037267fb 100644 --- a/designer/src/com/fr/design/module/DesignerModule.java +++ b/designer/src/com/fr/design/module/DesignerModule.java @@ -1,415 +1,415 @@ -package com.fr.design.module; - -import com.fr.base.*; -import com.fr.base.io.XMLEncryptUtils; -import com.fr.base.process.ProcessOperator; -import com.fr.base.remote.RemoteDeziConstants; -import com.fr.design.DesignerEnvManager; -import com.fr.design.ExtraDesignClassManager; -import com.fr.design.actions.core.ActionFactory; -import com.fr.design.actions.insert.cell.*; -import com.fr.design.actions.insert.flot.ChartFloatAction; -import com.fr.design.actions.insert.flot.FormulaFloatAction; -import com.fr.design.actions.insert.flot.ImageFloatAction; -import com.fr.design.actions.insert.flot.TextBoxFloatAction; -import com.fr.design.actions.server.StyleListAction; -import com.fr.design.fun.ElementUIProvider; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.javascript.ProcessTransitionAdapter; -import com.fr.design.mainframe.*; -import com.fr.design.mainframe.bbs.BBSGuestPane; -import com.fr.design.mainframe.form.FormECCompositeProvider; -import com.fr.design.mainframe.form.FormECDesignerProvider; -import com.fr.design.mainframe.form.FormElementCaseDesigner; -import com.fr.design.mainframe.form.FormReportComponentComposite; -import com.fr.design.mainframe.loghandler.DesignerLogImpl; -import com.fr.design.parameter.WorkBookParameterReader; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.file.FILE; -import com.fr.general.*; -import com.fr.general.xml.GeneralXMLTools; -import com.fr.io.importer.Excel2007ReportImporter; -import com.fr.io.importer.ExcelReportImporter; -import com.fr.main.impl.WorkBook; -import com.fr.quickeditor.ChartQuickEditor; -import com.fr.quickeditor.cellquick.*; -import com.fr.quickeditor.floatquick.FloatImageQuickEditor; -import com.fr.quickeditor.floatquick.FloatStringQuickEditor; -import com.fr.report.cell.CellElementValueConverter; -import com.fr.report.cell.cellattr.core.RichText; -import com.fr.report.cell.cellattr.core.SubReport; -import com.fr.report.cell.cellattr.core.group.DSColumn; -import com.fr.report.cell.painter.BiasTextPainter; -import com.fr.stable.ArrayUtils; -import com.fr.stable.ParameterProvider; -import com.fr.stable.StringUtils; -import com.fr.stable.bridge.StableFactory; -import com.fr.stable.fun.LogProvider; -import com.fr.stable.script.CalculatorProviderContext; -import com.fr.stable.script.ValueConverter; -import com.fr.stable.web.ServletContext; -import com.fr.stable.web.ServletContextAdapter; -import com.fr.stable.xml.ObjectTokenizer; -import com.fr.stable.xml.ObjectXMLWriterFinder; -import com.fr.start.BBSGuestPaneProvider; -import com.fr.xml.ReportXMLUtils; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Set; - -public class DesignerModule extends DesignModule { - - static { - ServletContext.addServletContextListener(new ServletContextAdapter() { - - public void onServletStart() { - ModuleContext.startModule(DesignerModule.class.getName()); - } - }); - } - - /** - * 启动设计器模块 - */ - public void start() { - super.start(); - - justStartModules4Engine(); - justStartModules4Designer(); - - CalculatorProviderContext.setValueConverter(valueConverter()); - GeneralXMLTools.Object_Tokenizer = startXMLReadObjectTokenizer(); - GeneralXMLTools.Object_XML_Writer_Finder = startObjectXMLWriterFinder(); - addAdapterForPlate(); - - registerCellEditor(); - registerFloatEditor(); - registerData4Form(); - registerOtherPane(); - - InformationCollector.getInstance().collectStartTime(); - - ExtraDesignClassManager.getInstance().getFeedback().didFeedback(); - StableFactory.registerMarkedObject(LogProvider.MARK_STRING, DesignerLogImpl.getInstance()); - } - - private void registerOtherPane() { - StableFactory.registerMarkedClass(BBSGuestPaneProvider.XML_TAG, BBSGuestPane.class); - } - - /** - * kunsnat:注册单元格选中Editor - */ - - private void registerCellEditor() { - ActionFactory.registerCellEditor(String.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditor(Number.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditor(Formula.class, CellFormulaQuickEditor.class); - ActionFactory.registerCellEditor(SubReport.class, CellSubReportEditor.class); - ActionFactory.registerCellEditor(RichText.class, CellRichTextEditor.class); - ActionFactory.registerCellEditor(DSColumn.class, CellDSColumnEditor.class); - ActionFactory.registerCellEditor(Image.class, CellImageQuickEditor.class); - ActionFactory.registerCellEditor(BiasTextPainter.class, CellBiasTextPainterEditor.class); - ActionFactory.registerCellEditor(BufferedImage.class, CellImageQuickEditor.class); - - ActionFactory.registerChartCellEditorInEditor(ChartQuickEditor.class); - - Set providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING); - for (ElementUIProvider provider : providers) { - ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor()); - } - } - - - public String getInterNationalName() { - return Inter.getLocText("FR-Module_Designer"); - } - - - /** - * kunnat: 注册悬浮选中Editor - */ - private void registerFloatEditor() { - ActionFactory.registerFloatEditor(String.class, FloatStringQuickEditor.class); - ActionFactory.registerFloatEditor(Formula.class, FloatStringQuickEditor.class); - - FloatImageQuickEditor floatImageQuickEditor = new FloatImageQuickEditor(); - ActionFactory.registerFloatEditor(Image.class, FloatImageQuickEditor.class); - ActionFactory.registerFloatEditor(BufferedImage.class, FloatImageQuickEditor.class); - ActionFactory.registerChartFloatEditorInEditor(ChartQuickEditor.class); - } - - /** - * kunsnat: 一些模块信息 必须跟随设计器启动, - * 比如 读取CC.XML, 设计器启动之后, 马上会读取XML, 需要Chart_Module中的注册信息 - */ - private void justStartModules4Engine() { - ModuleContext.startModule(ENGINE_MODULE); - } - - private void justStartModules4Designer() { - ModuleContext.startModule(CHART_DESIGNER_MODULE); - ModuleContext.startModule(FORM_DESIGNER_MODULE); - } - - /** - * CellElementValueConverter用来处理设计器格子里的值,将公式/数组/其他元素转换成对应的值。 - * - * @return 返回处理格子值的转换器 - */ - public ValueConverter valueConverter() { - return new CellElementValueConverter(); - } - - @Override - /* - * 针对不同的对象,在读取Object对象的xml的时候需要使用不同的对象生成器 - * @return 返回对象生成器 - */ - public ObjectTokenizer startXMLReadObjectTokenizer() { - return new ReportXMLUtils.ReportObjectTokenizer(); - } - - /** - * 针对不同的对象,在写对象的XML时需要使用不同的XML生成器 - * - * @return 返回xml生成器 - */ - @Override - public ObjectXMLWriterFinder startObjectXMLWriterFinder() { - return new ReportXMLUtils.ReportObjectXMLWriterFinder(); - } - - //wei:fs的模块中可能有需要设计器界面做设置的地方,在这边添加 - private void addAdapterForPlate() { - - ProcessTransitionAdapter.setProcessTransitionAdapter(new ProcessTransitionAdapter() { - - @Override - protected String[] getTransitionNamesByBook(String book) { - return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getTransitionNamesByBook(book); - } - - @Override - protected String[] getParaNames(String book) { - return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParaNames(book); - } - - @Override - protected ParameterProvider[] getParas(String book) { - return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParas(book); - } - - protected MultiFieldParameter[] getAllMultiFieldParas(String book) { - return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getAllMultiFieldParas(book); - } - }); - } - - private static abstract class AbstractWorkBookApp implements App { - - @Override - public int currentAPILevel() { - return CURRENT_LEVEL; - } - - @Override - public JTemplate openTemplate(FILE tplFile) { - return new JWorkBook(asIOFile(tplFile), tplFile); - } - - @Override - public String mark4Provider() { - return getClass().getName(); - } - - @Override - public void process() { - - } - - @Override - public void undo() { - - } - } - - @Override - /* - * 返回设计器能打开的模板类型的一个数组列表 - * @return 可以打开的模板类型的数组 - */ - public App[] apps4TemplateOpener() { - return new App[]{getCptApp(), getXlsApp(), getXlsxApp()}; - } - - private AbstractWorkBookApp getXlsxApp() { - return new AbstractWorkBookApp() { - @Override - public String[] defaultExtentions() { - return new String[]{"xlsx"}; - } - - @Override - public WorkBook asIOFile(FILE tplFile) { - WorkBook workbook = null; - try { - workbook = new Excel2007ReportImporter().generateWorkBookByStream(tplFile.asInputStream()); - } catch (Exception exp) { - FRContext.getLogger().error("Failed to generate xlsx from " + tplFile, exp); - } - return workbook; - } - }; - } - - private AbstractWorkBookApp getXlsApp() { - return new AbstractWorkBookApp() { - @Override - public String[] defaultExtentions() { - return new String[]{"xls"}; - } - - @Override - public WorkBook asIOFile(FILE tplFile) { - WorkBook workbook = null; - try { - workbook = new ExcelReportImporter().generateWorkBookByStream(tplFile.asInputStream()); - } catch (Exception exp) { - FRContext.getLogger().error("Failed to generate xls from " + tplFile, exp); - } - return workbook; - } - }; - } - - private AbstractWorkBookApp getCptApp() { - return new AbstractWorkBookApp() { - public String[] defaultExtentions() { - return new String[]{"cpt"}; - } - - public WorkBook asIOFile(FILE file) { - if (XMLEncryptUtils.isCptEncoded() && - !XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())) { - if (!new DecodeDialog(file).isPwdRight()) { - FRContext.getLogger().error(Inter.getLocText("ECP-error_pwd")); - return new WorkBook(); - } - } - - WorkBook tpl = new WorkBook(); - // richer:打开报表通知 - FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, new String[]{"\"" + file.getName() + "\"" + ",", "..."})); - TempNameStyle namestyle = TempNameStyle.getInstance(); - namestyle.clear(); - String checkStr = StringUtils.EMPTY; - try { - checkStr = IOUtils.inputStream2String(file.asInputStream()); - tpl.readStream(file.asInputStream()); - } catch (Exception exp) { - String errorMessage = StringUtils.EMPTY; - errorMessage = ComparatorUtils.equals(RemoteDeziConstants.INVALID_USER, checkStr) ? Inter.getLocText("FR-Designer_No-Privilege") - : Inter.getLocText("NS-exception_readError"); - FRContext.getLogger().error(errorMessage + file, exp); - } - checkNameStyle(namestyle); - return tpl; - } - }; - } - - private static void checkNameStyle(TempNameStyle namestyle) { - Iterator it = namestyle.getIterator(); - ArrayList al = new ArrayList(); - while (it.hasNext()) { - al.add((String) it.next()); - } - if (!al.isEmpty()) { - showConfirmDialog(al); - } - } - - private static void showConfirmDialog(final ArrayList namelist) { - - final JDialog jd = new JDialog(); - // 模态一下,因为可能会多个样式丢失 - // jd.setModal(true); - jd.setAlwaysOnTop(true); - jd.setSize(450, 150); - jd.setResizable(false); - jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); - String message = namelist.toString().replaceAll("\\[", "").replaceAll("\\]", ""); - UILabel jl = new UILabel(Inter.getLocText(new String[]{"Current_custom_global", "Has_been_gone"}, new String[]{message})); - jl.setHorizontalAlignment(SwingConstants.CENTER); - jd.add(jl, BorderLayout.CENTER); - JPanel jp = new JPanel(); - - // ”是“按钮,点击之后将生成一个全局样式,并写入xml - UIButton confirmButton = new UIButton(Inter.getLocText("FR-Designer_Yes")); - confirmButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - for (int i = 0; i < namelist.size(); i++) { - ConfigManager.getProviderInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE); - FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance()); - } - } catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage()); - } - jd.dispose(); - new StyleListAction().actionPerformed(e);// 弹窗 - } - }); - - UIButton noButton = new UIButton(Inter.getLocText("FR-Designer_No")); - noButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - jd.dispose(); - } - }); - - jp.add(confirmButton); - jp.add(noButton); - jd.setTitle(Inter.getLocText("FR-Custom_styles_lost")); - jd.add(jp, BorderLayout.SOUTH); - GUICoreUtils.centerWindow(jd); - jd.setVisible(true); - } - - public Class[] actionsForInsertCellElement() { - return (Class[]) ArrayUtils.addAll(new Class[]{ - DSColumnCellAction.class, - GeneralCellAction.class, - RichTextCellAction.class, - FormulaCellAction.class, - ChartCellAction.class, - ImageCellAction.class, - BiasCellAction.class, - SubReportCellAction.class - }, super.actionsForInsertCellElement()); - } - - public Class[] actionsForInsertFloatElement() { - return (Class[]) ArrayUtils.addAll(new Class[]{ - TextBoxFloatAction.class, - FormulaFloatAction.class, - ChartFloatAction.class, - ImageFloatAction.class - }, super.actionsForInsertFloatElement()); - } - - - private void registerData4Form() { - StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class); - StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class); - DesignModuleFactory.registerParameterReader(new WorkBookParameterReader()); - } +package com.fr.design.module; + +import com.fr.base.*; +import com.fr.base.io.XMLEncryptUtils; +import com.fr.base.process.ProcessOperator; +import com.fr.base.remote.RemoteDeziConstants; +import com.fr.design.DesignerEnvManager; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.core.ActionFactory; +import com.fr.design.actions.insert.cell.*; +import com.fr.design.actions.insert.flot.ChartFloatAction; +import com.fr.design.actions.insert.flot.FormulaFloatAction; +import com.fr.design.actions.insert.flot.ImageFloatAction; +import com.fr.design.actions.insert.flot.TextBoxFloatAction; +import com.fr.design.actions.server.StyleListAction; +import com.fr.design.fun.ElementUIProvider; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.javascript.ProcessTransitionAdapter; +import com.fr.design.mainframe.*; +import com.fr.design.mainframe.bbs.BBSGuestPane; +import com.fr.design.mainframe.form.FormECCompositeProvider; +import com.fr.design.mainframe.form.FormECDesignerProvider; +import com.fr.design.mainframe.form.FormElementCaseDesigner; +import com.fr.design.mainframe.form.FormReportComponentComposite; +import com.fr.design.mainframe.loghandler.DesignerLogImpl; +import com.fr.design.parameter.WorkBookParameterReader; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.file.FILE; +import com.fr.general.*; +import com.fr.general.xml.GeneralXMLTools; +import com.fr.io.importer.Excel2007ReportImporter; +import com.fr.io.importer.ExcelReportImporter; +import com.fr.main.impl.WorkBook; +import com.fr.quickeditor.chartquick.BasicChartQuickEditor; +import com.fr.quickeditor.chartquick.FloatChartQuickEditor; +import com.fr.quickeditor.cellquick.*; +import com.fr.quickeditor.floatquick.FloatImageQuickEditor; +import com.fr.quickeditor.floatquick.FloatStringQuickEditor; +import com.fr.report.cell.CellElementValueConverter; +import com.fr.report.cell.cellattr.core.RichText; +import com.fr.report.cell.cellattr.core.SubReport; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.cell.painter.BiasTextPainter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; +import com.fr.stable.bridge.StableFactory; +import com.fr.stable.fun.LogProvider; +import com.fr.stable.script.CalculatorProviderContext; +import com.fr.stable.script.ValueConverter; +import com.fr.stable.web.ServletContext; +import com.fr.stable.web.ServletContextAdapter; +import com.fr.stable.xml.ObjectTokenizer; +import com.fr.stable.xml.ObjectXMLWriterFinder; +import com.fr.start.BBSGuestPaneProvider; +import com.fr.xml.ReportXMLUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Set; + +public class DesignerModule extends DesignModule { + + static { + ServletContext.addServletContextListener(new ServletContextAdapter() { + + public void onServletStart() { + ModuleContext.startModule(DesignerModule.class.getName()); + } + }); + } + + /** + * 启动设计器模块 + */ + public void start() { + super.start(); + + justStartModules4Engine(); + justStartModules4Designer(); + + CalculatorProviderContext.setValueConverter(valueConverter()); + GeneralXMLTools.Object_Tokenizer = startXMLReadObjectTokenizer(); + GeneralXMLTools.Object_XML_Writer_Finder = startObjectXMLWriterFinder(); + addAdapterForPlate(); + + registerCellEditor(); + registerFloatEditor(); + registerData4Form(); + registerOtherPane(); + + InformationCollector.getInstance().collectStartTime(); + + ExtraDesignClassManager.getInstance().getFeedback().didFeedback(); + StableFactory.registerMarkedObject(LogProvider.MARK_STRING, DesignerLogImpl.getInstance()); + } + + private void registerOtherPane() { + StableFactory.registerMarkedClass(BBSGuestPaneProvider.XML_TAG, BBSGuestPane.class); + } + + /** + * kunsnat:注册单元格选中Editor + */ + + private void registerCellEditor() { + ActionFactory.registerCellEditor(String.class, CellStringQuickEditor.class); + ActionFactory.registerCellEditor(Number.class, CellStringQuickEditor.class); + ActionFactory.registerCellEditor(Formula.class, CellFormulaQuickEditor.class); + ActionFactory.registerCellEditor(SubReport.class, CellSubReportEditor.class); + ActionFactory.registerCellEditor(RichText.class, CellRichTextEditor.class); + ActionFactory.registerCellEditor(DSColumn.class, CellDSColumnEditor.class); + ActionFactory.registerCellEditor(Image.class, CellImageQuickEditor.class); + ActionFactory.registerCellEditor(BiasTextPainter.class, CellBiasTextPainterEditor.class); + ActionFactory.registerCellEditor(BufferedImage.class, CellImageQuickEditor.class); + + ActionFactory.registerChartCellEditorInEditor(BasicChartQuickEditor.class); + + Set providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING); + for (ElementUIProvider provider : providers) { + ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor()); + } + } + + + public String getInterNationalName() { + return Inter.getLocText("FR-Module_Designer"); + } + + + /** + * kunnat: 注册悬浮选中Editor + */ + private void registerFloatEditor() { + ActionFactory.registerFloatEditor(String.class, FloatStringQuickEditor.class); + ActionFactory.registerFloatEditor(Formula.class, FloatStringQuickEditor.class); + ActionFactory.registerFloatEditor(Image.class, FloatImageQuickEditor.class); + ActionFactory.registerFloatEditor(BufferedImage.class, FloatImageQuickEditor.class); + + ActionFactory.registerChartFloatEditorInEditor(FloatChartQuickEditor.class); + } + + /** + * kunsnat: 一些模块信息 必须跟随设计器启动, + * 比如 读取CC.XML, 设计器启动之后, 马上会读取XML, 需要Chart_Module中的注册信息 + */ + private void justStartModules4Engine() { + ModuleContext.startModule(ENGINE_MODULE); + } + + private void justStartModules4Designer() { + ModuleContext.startModule(CHART_DESIGNER_MODULE); + ModuleContext.startModule(FORM_DESIGNER_MODULE); + } + + /** + * CellElementValueConverter用来处理设计器格子里的值,将公式/数组/其他元素转换成对应的值。 + * + * @return 返回处理格子值的转换器 + */ + public ValueConverter valueConverter() { + return new CellElementValueConverter(); + } + + @Override + /* + * 针对不同的对象,在读取Object对象的xml的时候需要使用不同的对象生成器 + * @return 返回对象生成器 + */ + public ObjectTokenizer startXMLReadObjectTokenizer() { + return new ReportXMLUtils.ReportObjectTokenizer(); + } + + /** + * 针对不同的对象,在写对象的XML时需要使用不同的XML生成器 + * + * @return 返回xml生成器 + */ + @Override + public ObjectXMLWriterFinder startObjectXMLWriterFinder() { + return new ReportXMLUtils.ReportObjectXMLWriterFinder(); + } + + //wei:fs的模块中可能有需要设计器界面做设置的地方,在这边添加 + private void addAdapterForPlate() { + + ProcessTransitionAdapter.setProcessTransitionAdapter(new ProcessTransitionAdapter() { + + @Override + protected String[] getTransitionNamesByBook(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getTransitionNamesByBook(book); + } + + @Override + protected String[] getParaNames(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParaNames(book); + } + + @Override + protected ParameterProvider[] getParas(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParas(book); + } + + protected MultiFieldParameter[] getAllMultiFieldParas(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getAllMultiFieldParas(book); + } + }); + } + + private static abstract class AbstractWorkBookApp implements App { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public JTemplate openTemplate(FILE tplFile) { + return new JWorkBook(asIOFile(tplFile), tplFile); + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } + + @Override + public void process() { + + } + + @Override + public void undo() { + + } + } + + @Override + /* + * 返回设计器能打开的模板类型的一个数组列表 + * @return 可以打开的模板类型的数组 + */ + public App[] apps4TemplateOpener() { + return new App[]{getCptApp(), getXlsApp(), getXlsxApp()}; + } + + private AbstractWorkBookApp getXlsxApp() { + return new AbstractWorkBookApp() { + @Override + public String[] defaultExtentions() { + return new String[]{"xlsx"}; + } + + @Override + public WorkBook asIOFile(FILE tplFile) { + WorkBook workbook = null; + try { + workbook = new Excel2007ReportImporter().generateWorkBookByStream(tplFile.asInputStream()); + } catch (Exception exp) { + FRContext.getLogger().error("Failed to generate xlsx from " + tplFile, exp); + } + return workbook; + } + }; + } + + private AbstractWorkBookApp getXlsApp() { + return new AbstractWorkBookApp() { + @Override + public String[] defaultExtentions() { + return new String[]{"xls"}; + } + + @Override + public WorkBook asIOFile(FILE tplFile) { + WorkBook workbook = null; + try { + workbook = new ExcelReportImporter().generateWorkBookByStream(tplFile.asInputStream()); + } catch (Exception exp) { + FRContext.getLogger().error("Failed to generate xls from " + tplFile, exp); + } + return workbook; + } + }; + } + + private AbstractWorkBookApp getCptApp() { + return new AbstractWorkBookApp() { + public String[] defaultExtentions() { + return new String[]{"cpt"}; + } + + public WorkBook asIOFile(FILE file) { + if (XMLEncryptUtils.isCptEncoded() && + !XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())) { + if (!new DecodeDialog(file).isPwdRight()) { + FRContext.getLogger().error(Inter.getLocText("ECP-error_pwd")); + return new WorkBook(); + } + } + + WorkBook tpl = new WorkBook(); + // richer:打开报表通知 + FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, new String[]{"\"" + file.getName() + "\"" + ",", "..."})); + TempNameStyle namestyle = TempNameStyle.getInstance(); + namestyle.clear(); + String checkStr = StringUtils.EMPTY; + try { + checkStr = IOUtils.inputStream2String(file.asInputStream()); + tpl.readStream(file.asInputStream()); + } catch (Exception exp) { + String errorMessage = StringUtils.EMPTY; + errorMessage = ComparatorUtils.equals(RemoteDeziConstants.INVALID_USER, checkStr) ? Inter.getLocText("FR-Designer_No-Privilege") + : Inter.getLocText("NS-exception_readError"); + FRContext.getLogger().error(errorMessage + file, exp); + } + checkNameStyle(namestyle); + return tpl; + } + }; + } + + private static void checkNameStyle(TempNameStyle namestyle) { + Iterator it = namestyle.getIterator(); + ArrayList al = new ArrayList(); + while (it.hasNext()) { + al.add((String) it.next()); + } + if (!al.isEmpty()) { + showConfirmDialog(al); + } + } + + private static void showConfirmDialog(final ArrayList namelist) { + + final JDialog jd = new JDialog(); + // 模态一下,因为可能会多个样式丢失 + // jd.setModal(true); + jd.setAlwaysOnTop(true); + jd.setSize(450, 150); + jd.setResizable(false); + jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); + String message = namelist.toString().replaceAll("\\[", "").replaceAll("\\]", ""); + UILabel jl = new UILabel(Inter.getLocText(new String[]{"Current_custom_global", "Has_been_gone"}, new String[]{message})); + jl.setHorizontalAlignment(SwingConstants.CENTER); + jd.add(jl, BorderLayout.CENTER); + JPanel jp = new JPanel(); + + // ”是“按钮,点击之后将生成一个全局样式,并写入xml + UIButton confirmButton = new UIButton(Inter.getLocText("FR-Designer_Yes")); + confirmButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + for (int i = 0; i < namelist.size(); i++) { + ConfigManager.getProviderInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE); + FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance()); + } + } catch (Exception ex) { + FRLogger.getLogger().error(ex.getMessage()); + } + jd.dispose(); + new StyleListAction().actionPerformed(e);// 弹窗 + } + }); + + UIButton noButton = new UIButton(Inter.getLocText("FR-Designer_No")); + noButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + jd.dispose(); + } + }); + + jp.add(confirmButton); + jp.add(noButton); + jd.setTitle(Inter.getLocText("FR-Custom_styles_lost")); + jd.add(jp, BorderLayout.SOUTH); + GUICoreUtils.centerWindow(jd); + jd.setVisible(true); + } + + public Class[] actionsForInsertCellElement() { + return (Class[]) ArrayUtils.addAll(new Class[]{ + DSColumnCellAction.class, + GeneralCellAction.class, + RichTextCellAction.class, + FormulaCellAction.class, + ChartCellAction.class, + ImageCellAction.class, + BiasCellAction.class, + SubReportCellAction.class + }, super.actionsForInsertCellElement()); + } + + public Class[] actionsForInsertFloatElement() { + return (Class[]) ArrayUtils.addAll(new Class[]{ + TextBoxFloatAction.class, + FormulaFloatAction.class, + ChartFloatAction.class, + ImageFloatAction.class + }, super.actionsForInsertFloatElement()); + } + + + private void registerData4Form() { + StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class); + StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class); + DesignModuleFactory.registerParameterReader(new WorkBookParameterReader()); + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/parameter/ParameterDefinitePane.java b/designer/src/com/fr/design/parameter/ParameterDefinitePane.java index 40c2aa466..cb53dd8b7 100644 --- a/designer/src/com/fr/design/parameter/ParameterDefinitePane.java +++ b/designer/src/com/fr/design/parameter/ParameterDefinitePane.java @@ -75,12 +75,23 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus this.setBorder(null); this.setLayout(FRGUIPaneFactory.createBorderLayout()); setComponentBg(this); -// formParaDesignEditor = new FormParaDesigner(new FormParameterUI()); paraDesignEditor = DesignModuleFactory.getFormParaDesigner(); if (paraDesignEditor == null) { return; } paraDesignEditor.initWidgetToolbarPane(); + + this.add(paraDesignEditor.createWrapper(), BorderLayout.CENTER); + + setButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/toolbarbtn/parametersetting.png")); + setButton.set4ToolbarButton(); + isshowWindowItem = new JCheckBoxMenuItem(Inter.getLocText("ParameterD-Show_Parameter_Window")); + isdelayItem = new JCheckBoxMenuItem(Inter.getLocText("ParameterD-Delay_Playing")); + + initListeners(); + } + + private void initListeners() { ((TargetComponent) paraDesignEditor).addTargetModifiedListener(new TargetModifiedListener() { @Override public void targetModified(TargetModifiedEvent e) { @@ -93,7 +104,6 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus paraDesignEditor.addListener(this); propertyChangeListener = new PropertyChangeAdapter() { - @Override public void propertyChange() { if (isEditing) { @@ -102,12 +112,7 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus } } }; - this.add(paraDesignEditor.createWrapper(), BorderLayout.CENTER); -// WidgetToolBarPane.getRecentSearchManger(formParaDesignEditor); - setButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/toolbarbtn/parametersetting.png")); - setButton.set4ToolbarButton(); - isshowWindowItem = new JCheckBoxMenuItem(Inter.getLocText("ParameterD-Show_Parameter_Window")); isshowWindowItem.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { @@ -116,9 +121,8 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus } } }); - isdelayItem = new JCheckBoxMenuItem(Inter.getLocText("ParameterD-Delay_Playing")); - isdelayItem.addItemListener(new ItemListener() { + isdelayItem.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (propertyChangeListener != null) { @@ -128,7 +132,6 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus } }); - setButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -298,7 +301,7 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus */ public void refreshParameter() { if (paraDesignEditor != null) { - paraDesignEditor.refreshParameter(this); + paraDesignEditor.refreshParameter(this, this.workBook); } } diff --git a/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java b/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java index 072b34b6c..dd1a6dad7 100644 --- a/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java +++ b/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java @@ -89,7 +89,9 @@ public class MobileRadioGroupPane extends BasicBeanPane{ * 选中指定index的按钮 */ public void selectIndexButton(int index) { - if (index < 0 || index > radioButtons.size() - 1) { + //这里删了默认按钮,所以这边判断的时候不能-1了 +// if (index < 0 || index > radioButtons.size() - 1) { fanglei: 这个注释不要删!不然以后可能忘记这个问题 + if (index < 0 || index > radioButtons.size()) { return; } diff --git a/designer/src/com/fr/poly/creator/ChartBlockCreator.java b/designer/src/com/fr/poly/creator/ChartBlockCreator.java index d713356c6..ec74b3727 100644 --- a/designer/src/com/fr/poly/creator/ChartBlockCreator.java +++ b/designer/src/com/fr/poly/creator/ChartBlockCreator.java @@ -1,166 +1,156 @@ -/* - * Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. - */ -package com.fr.poly.creator; - -import java.awt.*; -import java.awt.image.BufferedImage; - -import javax.swing.*; - -import com.fr.base.ScreenResolution; -import com.fr.design.DesignState; -import com.fr.design.designer.TargetComponent; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.gui.chart.MiddleChartComponent; -import com.fr.design.menu.MenuDef; -import com.fr.design.menu.ShortCut; -import com.fr.design.menu.ToolBarDef; -import com.fr.design.module.DesignModuleFactory; -import com.fr.design.selection.QuickEditor; -import com.fr.quickeditor.ChartQuickEditor; -import com.fr.report.poly.PolyChartBlock; -import com.fr.stable.unit.FU; -import com.fr.stable.unit.UNIT; -import com.fr.stable.unit.UnitRectangle; - -/** - * @author richer - * @since 6.5.4 创建于2011-5-10 - */ -public class ChartBlockCreator extends BlockCreator { - private MiddleChartComponent cpm; - private ChartBlockEditor editor; - - //图表默认宽高330*240 - private static final UNIT DEFAULT_WIDTH = FU.getInstance(12573000); - private static final UNIT DEFAULT_HEIGHT = FU.getInstance(9144000); - - - public ChartBlockCreator() { - - } - - public ChartBlockCreator(PolyChartBlock block) { - super(block); - } - - public void setResolution(int resolution){ - this.resolution = resolution; - } - - /** - * 初始化 - * @return 初始化的控件. - */ - public JComponent initMonitor() { - cpm = DesignModuleFactory.getChartComponent(getValue().getChartCollection()); - cpm.setBorder(BorderFactory.createLineBorder(Color.lightGray)); - return cpm; - } - - public UnitRectangle getDefaultBlockBounds() { - return new UnitRectangle(UNIT.ZERO, UNIT.ZERO, DEFAULT_WIDTH, DEFAULT_HEIGHT); - } - - @Override - public BlockEditor getEditor() { - if (editor == null) { - editor = new ChartBlockEditor(designer, this); - } - return editor; - } - - @Override - public int getX(float time) { - return (int) (this.getX() * time); - } - - @Override - public int getY(float time) { - return (int) (this.getY() * time); - } - - - /** - * 检测按钮状态 - * - * @date 2015-2-5-上午11:33:46 - * - */ - public void checkButtonEnable() { - if (editor == null) { - editor = new ChartBlockEditor(designer, this); - } - editor.checkChartButtonsEnable(); - } - - @Override - public PolyChartBlock getValue() { - return block; - } - - @Override - public void setValue(PolyChartBlock block) { - this.block = block; - cpm.populate(this.block.getChartCollection()); - } - - - - /** - * 获取当前工具栏组 - * - * @return 工具栏组 - * - * @date 2015-2-5-上午11:29:07 - * - */ - public ToolBarDef[] toolbars4Target() { - return new ToolBarDef[0]; - } - - /** - * 在Form的工具栏组 - * - * @return 组件数组 - * - * @date 2015-2-5-上午11:31:46 - * - */ - public JComponent[] toolBarButton4Form() { - return new JComponent[0]; - } - - /** - * 目标的列表 - * @return 返回列表. - */ - public MenuDef[] menus4Target() { - return new MenuDef[0]; - } - - public int getMenuState(){ - return DesignState.POLY_SHEET; - } - - /** - * 模板的Menu - * @return 模板的menu - */ - public ShortCut[] shortcut4TemplateMenu() { - return new ShortCut[0]; - } - - @Override - public PolyElementCasePane getEditingElementCasePane() { - return null; - } - - @Override - public QuickEditor getQuickEditor(TargetComponent tc) { - ChartQuickEditor quitEditor = new ChartQuickEditor(); - quitEditor.populate(tc); - return quitEditor; - } +package com.fr.poly.creator; + +import com.fr.design.DesignState; +import com.fr.design.designer.TargetComponent; +import com.fr.design.gui.chart.MiddleChartComponent; +import com.fr.design.menu.MenuDef; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.module.DesignModuleFactory; +import com.fr.design.selection.QuickEditor; +import com.fr.quickeditor.chartquick.PolyChartQuickEditor; +import com.fr.report.poly.PolyChartBlock; +import com.fr.stable.unit.FU; +import com.fr.stable.unit.UNIT; +import com.fr.stable.unit.UnitRectangle; + +import javax.swing.*; +import java.awt.*; + +/** + * @author richer + * @since 6.5.4 创建于2011-5-10 + */ +public class ChartBlockCreator extends BlockCreator { + private MiddleChartComponent cpm; + private ChartBlockEditor editor; + + //图表默认宽高330*240 + private static final UNIT DEFAULT_WIDTH = FU.getInstance(12573000); + private static final UNIT DEFAULT_HEIGHT = FU.getInstance(9144000); + + + public ChartBlockCreator() { + + } + + public ChartBlockCreator(PolyChartBlock block) { + super(block); + } + + public void setResolution(int resolution) { + this.resolution = resolution; + } + + /** + * 初始化 + * + * @return 初始化的控件. + */ + public JComponent initMonitor() { + cpm = DesignModuleFactory.getChartComponent(getValue().getChartCollection()); + cpm.setBorder(BorderFactory.createLineBorder(Color.lightGray)); + return cpm; + } + + public UnitRectangle getDefaultBlockBounds() { + return new UnitRectangle(UNIT.ZERO, UNIT.ZERO, DEFAULT_WIDTH, DEFAULT_HEIGHT); + } + + @Override + public BlockEditor getEditor() { + if (editor == null) { + editor = new ChartBlockEditor(designer, this); + } + return editor; + } + + @Override + public int getX(float time) { + return (int) (this.getX() * time); + } + + @Override + public int getY(float time) { + return (int) (this.getY() * time); + } + + + /** + * 检测按钮状态 + * + * @date 2015-2-5-上午11:33:46 + */ + public void checkButtonEnable() { + if (editor == null) { + editor = new ChartBlockEditor(designer, this); + } + editor.checkChartButtonsEnable(); + } + + @Override + public PolyChartBlock getValue() { + return block; + } + + @Override + public void setValue(PolyChartBlock block) { + this.block = block; + cpm.populate(this.block.getChartCollection()); + } + + + /** + * 获取当前工具栏组 + * + * @return 工具栏组 + * @date 2015-2-5-上午11:29:07 + */ + public ToolBarDef[] toolbars4Target() { + return new ToolBarDef[0]; + } + + /** + * 在Form的工具栏组 + * + * @return 组件数组 + * @date 2015-2-5-上午11:31:46 + */ + public JComponent[] toolBarButton4Form() { + return new JComponent[0]; + } + + /** + * 目标的列表 + * + * @return 返回列表. + */ + public MenuDef[] menus4Target() { + return new MenuDef[0]; + } + + public int getMenuState() { + return DesignState.POLY_SHEET; + } + + /** + * 模板的Menu + * + * @return 模板的menu + */ + public ShortCut[] shortcut4TemplateMenu() { + return new ShortCut[0]; + } + + @Override + public PolyElementCasePane getEditingElementCasePane() { + return null; + } + + @Override + public QuickEditor getQuickEditor(TargetComponent tc) { + PolyChartQuickEditor quitEditor = new PolyChartQuickEditor(); + quitEditor.populate(tc); + return quitEditor; + } } \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/CellQuickEditor.java b/designer/src/com/fr/quickeditor/CellQuickEditor.java index 2b5ce14c7..c218d9397 100644 --- a/designer/src/com/fr/quickeditor/CellQuickEditor.java +++ b/designer/src/com/fr/quickeditor/CellQuickEditor.java @@ -66,10 +66,10 @@ public abstract class CellQuickEditor extends QuickEditor { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = {p, f}; - double[] rowSize = {p, p}; JComponent centerBody = createCenterBody(); JPanel topContent = initTopContent(); if (isScrollAll()) { + double[] scrollAllRowSize = {p, p}; prepareScrollBar(); topContent.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 0, this.getBackground())); centerBody.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 0, this.getBackground())); @@ -77,7 +77,7 @@ public abstract class CellQuickEditor extends QuickEditor { new Component[]{topContent, null}, new Component[]{centerBody, null} }; - leftContentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); + leftContentPane = TableLayoutHelper.createGapTableLayoutPane(components, scrollAllRowSize, columnSize, HGAP, VGAP); this.setLayout(new CellElementBarLayout(leftContentPane) { @Override public void layoutContainer(Container parent) { @@ -104,6 +104,7 @@ public abstract class CellQuickEditor extends QuickEditor { this.add(scrollBar); this.add(leftContentPane); } else { + double[] scrollContentRowSize = {p, f}; topContent.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 10, this.getBackground())); centerBody.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 0, this.getBackground())); Component[][] components = new Component[][]{ @@ -111,7 +112,7 @@ public abstract class CellQuickEditor extends QuickEditor { new Component[]{centerBody, null} }; this.setLayout(new BorderLayout()); - this.add(TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP), BorderLayout.CENTER); + this.add(TableLayoutHelper.createGapTableLayoutPane(components, scrollContentRowSize, columnSize, HGAP, VGAP), BorderLayout.CENTER); } } diff --git a/designer/src/com/fr/quickeditor/ChartQuickEditor.java b/designer/src/com/fr/quickeditor/ChartQuickEditor.java deleted file mode 100644 index 91ddc28b6..000000000 --- a/designer/src/com/fr/quickeditor/ChartQuickEditor.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.fr.quickeditor; - -import com.fr.base.chart.BaseChartCollection; -//import com.fr.chart.chartattr.ChartCollection; -import com.fr.design.designer.TargetComponent; -import com.fr.design.gui.chart.BaseChartPropertyPane; -import com.fr.design.mainframe.ElementCasePane; -import com.fr.design.module.DesignModuleFactory; -import com.fr.design.selection.QuickEditor; -import com.fr.grid.selection.CellSelection; -import com.fr.grid.selection.FloatSelection; -import com.fr.grid.selection.Selection; -import com.fr.poly.PolyDesigner; -import com.fr.poly.creator.ChartBlockEditor; -import com.fr.report.cell.Elem; - -import java.awt.*; - -public class ChartQuickEditor extends QuickEditor{ - // kunsnat: editingPropertyPane初始化 避开设计器启动, 在用到的时候再初始化. - //private BaseChartPropertyPane editingPropertyPane = null; - public ChartQuickEditor() { - setLayout(new BorderLayout()); - setBorder(null); - } - - @Override - protected void refresh() { - BaseChartPropertyPane editingPropertyPane = null; - BaseChartCollection collection = null; - if(tc instanceof PolyDesigner) { - ChartBlockEditor chartBlockEditor = (ChartBlockEditor)((PolyDesigner)tc).getSelection().getEditor(); - collection = chartBlockEditor.getValue().getChartCollection(); - - add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER); - editingPropertyPane.setSupportCellData(false); - } else { - Selection selection = ((ElementCasePane)tc).getSelection(); - Elem element = null; - if(selection instanceof CellSelection) { - CellSelection cs = (CellSelection)selection; - element = ((ElementCasePane)tc).getEditingElementCase().getCellElement(cs.getColumn(), cs.getRow()); - } else if(selection instanceof FloatSelection){ - FloatSelection fs = (FloatSelection)selection; - element = ((ElementCasePane)tc).getEditingElementCase().getFloatElement(fs.getSelectedFloatName()); - } - collection = (BaseChartCollection) element.getValue(); - add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER); - - } - editingPropertyPane.populateChartPropertyPane(collection, tc); - } - -} \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java index e7ccd7710..bd702a29c 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -34,6 +34,7 @@ import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.CellExpandAttr; import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.cell.cellattr.core.group.FilterTypeEnum; import com.fr.report.cell.cellattr.core.group.SelectCount; import javax.swing.*; @@ -46,6 +47,9 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.*; + + /** * 单元格元素 数据列编辑器 * @@ -58,10 +62,6 @@ public class CellDSColumnEditor extends CellQuickEditor { private static final double P = TableLayout.PREFERRED, F = TableLayout.FILL; private static final Color TIP_FONT_COLOR = new Color(0x7F333334, true); - private enum FilterType { - //前N个 后N个 奇数 偶数 自定义 未定义 - TOP, BOTTOM, ODD, EVEN, SPECIFY, UNDEFINE - } private JPanel dsColumnRegion; private JPanel centerPane; @@ -669,6 +669,69 @@ public class CellDSColumnEditor extends CellQuickEditor { private JFormulaField topFormulaPane; private JFormulaField bottomFormulaPane; + private ActionListener actionListener = new ActionListener() { + public void actionPerformed(ActionEvent evt) { + int selectIndex = rsComboBox.getSelectedIndex(); + CardLayout setCardPaneLayout = (CardLayout) setCardPane.getLayout(); + CardLayout tipCardPaneLayout = (CardLayout) tipCardPane.getLayout(); + if (selectIndex == TOP.getValue()) { + //前N个 + setCardPaneLayout.show(setCardPane, TOP.name()); + tipCardPaneLayout.show(tipCardPane, TOP.name()); + //隐藏tip 显示set + setCardPane.setPreferredSize(new Dimension(156, 20)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); + tipCardPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); + } else if (selectIndex == BOTTOM.getValue()) { + //后N个 + setCardPaneLayout.show(setCardPane, BOTTOM.name()); + tipCardPaneLayout.show(tipCardPane, BOTTOM.name()); + //隐藏tip 显示set + setCardPane.setPreferredSize(new Dimension(156, 20)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); + tipCardPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); + } else if (selectIndex == ODD.getValue()) { + //奇数 + setCardPaneLayout.show(setCardPane, ODD.name()); + tipCardPaneLayout.show(tipCardPane, ODD.name()); + //隐藏set 显示tip + setCardPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); + tipCardPane.setPreferredSize(new Dimension(224, 40)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); + } else if (selectIndex == EVEN.getValue()) { + //偶数 + setCardPaneLayout.show(setCardPane, EVEN.name()); + tipCardPaneLayout.show(tipCardPane, EVEN.name()); + //隐藏set 显示tip + setCardPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); + tipCardPane.setPreferredSize(new Dimension(224, 40)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); + } else if (selectIndex == SPECIFY.getValue()) { + //指定 + setCardPaneLayout.show(setCardPane, SPECIFY.name()); + tipCardPaneLayout.show(tipCardPane, SPECIFY.name()); + //显示set和tip + setCardPane.setPreferredSize(new Dimension(156, 20)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); + tipCardPane.setPreferredSize(new Dimension(224, 40)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); + } else { + //未定义 + setCardPaneLayout.show(setCardPane, UNDEFINE.name()); + tipCardPaneLayout.show(tipCardPane, UNDEFINE.name()); + //隐藏set和tip + setCardPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); + tipCardPane.setPreferredSize(new Dimension(0, 0)); + TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); + } + } + }; + public ResultSetFilterConfigPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); UILabel filterLabel = new UILabel(Inter.getLocText("BindColumn-Results_Filter")); @@ -681,65 +744,7 @@ public class CellDSColumnEditor extends CellQuickEditor { Inter.getLocText("Even"), Inter.getLocText("Specify") }); - rsComboBox.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - int selectIndex = rsComboBox.getSelectedIndex(); - CardLayout setCardPaneLayout = (CardLayout) setCardPane.getLayout(); - CardLayout tipCardPaneLayout = (CardLayout) tipCardPane.getLayout(); - if (selectIndex == 1) { - //前N个 - setCardPaneLayout.show(setCardPane, FilterType.TOP.name()); - tipCardPaneLayout.show(tipCardPane, FilterType.TOP.name()); - //隐藏tip 显示set - setCardPane.setPreferredSize(new Dimension(156, 20)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); - tipCardPane.setPreferredSize(new Dimension(0, 0)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); - } else if (selectIndex == 2) { - //后N个 - setCardPaneLayout.show(setCardPane, FilterType.BOTTOM.name()); - tipCardPaneLayout.show(tipCardPane, FilterType.BOTTOM.name()); - //隐藏tip 显示set - setCardPane.setPreferredSize(new Dimension(156, 20)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); - tipCardPane.setPreferredSize(new Dimension(0, 0)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); - } else if (selectIndex == 3) { - //奇数 - setCardPaneLayout.show(setCardPane, FilterType.ODD.name()); - tipCardPaneLayout.show(tipCardPane, FilterType.ODD.name()); - //隐藏set 显示tip - setCardPane.setPreferredSize(new Dimension(0, 0)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); - tipCardPane.setPreferredSize(new Dimension(224, 40)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); - } else if (selectIndex == 4) { - setCardPaneLayout.show(setCardPane, FilterType.EVEN.name()); - tipCardPaneLayout.show(tipCardPane, FilterType.EVEN.name()); - //隐藏set 显示tip - setCardPane.setPreferredSize(new Dimension(0, 0)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); - tipCardPane.setPreferredSize(new Dimension(224, 40)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); - } else if (selectIndex == 5) { - setCardPaneLayout.show(setCardPane, FilterType.SPECIFY.name()); - tipCardPaneLayout.show(tipCardPane, FilterType.SPECIFY.name()); - //显示set和tip - setCardPane.setPreferredSize(new Dimension(156, 20)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); - tipCardPane.setPreferredSize(new Dimension(224, 40)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); - } else { - setCardPaneLayout.show(setCardPane, FilterType.UNDEFINE.name()); - tipCardPaneLayout.show(tipCardPane, FilterType.UNDEFINE.name()); - //隐藏set和tip - setCardPane.setPreferredSize(new Dimension(0, 0)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); - tipCardPane.setPreferredSize(new Dimension(0, 0)); - TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); - } - } - }); + rsComboBox.addActionListener(actionListener); //配置展示CardLayout setCardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); //提示信息展示CardLayout @@ -747,36 +752,36 @@ public class CellDSColumnEditor extends CellQuickEditor { //前N个 topFormulaPane = new JFormulaField(DEFAULT_VALUE); - setCardPane.add(topFormulaPane, FilterType.TOP.name()); - tipCardPane.add(new JPanel(), FilterType.TOP.name()); + setCardPane.add(topFormulaPane, TOP.name()); + tipCardPane.add(new JPanel(), TOP.name()); //后N个 bottomFormulaPane = new JFormulaField(DEFAULT_VALUE); - setCardPane.add(bottomFormulaPane, FilterType.BOTTOM.name()); - tipCardPane.add(new JPanel(), FilterType.BOTTOM.name()); + setCardPane.add(bottomFormulaPane, BOTTOM.name()); + tipCardPane.add(new JPanel(), BOTTOM.name()); //自定义值下方没有提示信息,也没有输入框 - setCardPane.add(new JPanel(), FilterType.UNDEFINE.name()); - tipCardPane.add(new JPanel(), FilterType.UNDEFINE.name()); + setCardPane.add(new JPanel(), UNDEFINE.name()); + tipCardPane.add(new JPanel(), UNDEFINE.name()); //奇数 UILabel 占一行作为提示信息 - setCardPane.add(new JPanel(), FilterType.ODD.name()); + setCardPane.add(new JPanel(), ODD.name()); MultilineLabel oddTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Odd_Tip")); oddTip.setForeground(TIP_FONT_COLOR); - tipCardPane.add(oddTip, FilterType.ODD.name()); + tipCardPane.add(oddTip, ODD.name()); //偶数 UILabel 占一行作为提示信息 - setCardPane.add(new JPanel(), FilterType.EVEN.name()); + setCardPane.add(new JPanel(), EVEN.name()); MultilineLabel evenTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Even_Tip")); evenTip.setForeground(TIP_FONT_COLOR); - tipCardPane.add(evenTip, FilterType.EVEN.name()); + tipCardPane.add(evenTip, EVEN.name()); //输入框占用右半边,提示信息占一行 serialTextField = new UITextField(16); - setCardPane.add(serialTextField, FilterType.SPECIFY.name()); + setCardPane.add(serialTextField, SPECIFY.name()); MultilineLabel specifyTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Specify_Tip")); specifyTip.setForeground(TIP_FONT_COLOR); - tipCardPane.add(specifyTip, FilterType.SPECIFY.name()); + tipCardPane.add(specifyTip, SPECIFY.name()); contentPane = TableLayoutHelper.createDiffVGapTableLayoutPane(new Component[][]{ {filterLabel, rsComboBox}, {null, setCardPane}, @@ -787,6 +792,7 @@ public class CellDSColumnEditor extends CellQuickEditor { } public void populate(CellElement cellElement) { + rsComboBox.removeActionListener(actionListener); if (cellElement != null) { Object value = cellElement.getValue(); if (value != null && value instanceof DSColumn) { @@ -794,42 +800,59 @@ public class CellDSColumnEditor extends CellQuickEditor { SelectCount selectCount = dSColumn.getSelectCount(); this.topFormulaPane.populateElement(cellElement); this.bottomFormulaPane.populateElement(cellElement); + CardLayout setCardPaneLayout = (CardLayout) setCardPane.getLayout(); + CardLayout tipCardPaneLayout = (CardLayout) tipCardPane.getLayout(); if (selectCount != null) { int selectCountType = selectCount.getType(); this.rsComboBox.setSelectedIndex(selectCountType); - switch (selectCountType) { - case SelectCount.TOP: + switch (FilterTypeEnum.getFilterByValue(selectCountType)) { + case TOP: this.topFormulaPane.populate(selectCount.getFormulaCount()); + //前N个 + setCardPaneLayout.show(setCardPane, TOP.name()); + tipCardPaneLayout.show(tipCardPane, TOP.name()); //隐藏tip 显示set setCardPane.setPreferredSize(new Dimension(156, 20)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); tipCardPane.setPreferredSize(new Dimension(0, 0)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); break; - case SelectCount.BOTTOM: + case BOTTOM: this.bottomFormulaPane.populate(selectCount.getFormulaCount()); + //后N个 + setCardPaneLayout.show(setCardPane, BOTTOM.name()); + tipCardPaneLayout.show(tipCardPane, BOTTOM.name()); //隐藏tip 显示set setCardPane.setPreferredSize(new Dimension(156, 20)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); tipCardPane.setPreferredSize(new Dimension(0, 0)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); break; - case SelectCount.SPECIFY: + case SPECIFY: this.serialTextField.setText(selectCount.getSerial()); + //指定 + setCardPaneLayout.show(setCardPane, SPECIFY.name()); + tipCardPaneLayout.show(tipCardPane, SPECIFY.name()); //显示set和tip setCardPane.setPreferredSize(new Dimension(156, 20)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP); tipCardPane.setPreferredSize(new Dimension(224, 40)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); break; - case SelectCount.EVEN: + case EVEN: + //偶数 + setCardPaneLayout.show(setCardPane, EVEN.name()); + tipCardPaneLayout.show(tipCardPane, EVEN.name()); //隐藏set 显示tip setCardPane.setPreferredSize(new Dimension(0, 0)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); tipCardPane.setPreferredSize(new Dimension(224, 40)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); break; - case SelectCount.ODD: + case ODD: + //奇数 + setCardPaneLayout.show(setCardPane, ODD.name()); + tipCardPaneLayout.show(tipCardPane, ODD.name()); //隐藏set 显示tip setCardPane.setPreferredSize(new Dimension(0, 0)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); @@ -837,6 +860,9 @@ public class CellDSColumnEditor extends CellQuickEditor { TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER); break; default: + //未定义 + setCardPaneLayout.show(setCardPane, UNDEFINE.name()); + tipCardPaneLayout.show(tipCardPane, UNDEFINE.name()); //隐藏set和tip setCardPane.setPreferredSize(new Dimension(0, 0)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); @@ -844,6 +870,9 @@ public class CellDSColumnEditor extends CellQuickEditor { TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); } } else { + //未定义 + setCardPaneLayout.show(setCardPane, UNDEFINE.name()); + tipCardPaneLayout.show(tipCardPane, UNDEFINE.name()); //隐藏set和tip setCardPane.setPreferredSize(new Dimension(0, 0)); TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0); @@ -852,6 +881,7 @@ public class CellDSColumnEditor extends CellQuickEditor { } } } + rsComboBox.addActionListener(actionListener); } public void update(CellElement cellElement) { @@ -866,11 +896,11 @@ public class CellDSColumnEditor extends CellQuickEditor { SelectCount selectCount = new SelectCount(); selectCount.setType(selectedFilterIndex); dSColumn.setSelectCount(selectCount); - if (selectedFilterIndex == SelectCount.TOP) { + if (selectedFilterIndex == TOP.getValue()) { selectCount.setFormulaCount(this.topFormulaPane.getFormulaText()); - } else if (selectedFilterIndex == SelectCount.BOTTOM) { + } else if (selectedFilterIndex == BOTTOM.getValue()) { selectCount.setFormulaCount(this.bottomFormulaPane.getFormulaText()); - } else if (selectedFilterIndex == SelectCount.SPECIFY) { + } else if (selectedFilterIndex == SPECIFY.getValue()) { selectCount.setSerial(this.serialTextField.getText()); } } @@ -887,6 +917,7 @@ public class CellDSColumnEditor extends CellQuickEditor { topFormulaPane.addListener(formulaListener); bottomFormulaPane.addListener(formulaListener); rsComboBox.registerChangeListener(formulaListener); + serialTextField.registerChangeListener(formulaListener); } } diff --git a/designer/src/com/fr/quickeditor/chartquick/BasicChartQuickEditor.java b/designer/src/com/fr/quickeditor/chartquick/BasicChartQuickEditor.java new file mode 100644 index 000000000..7873f5089 --- /dev/null +++ b/designer/src/com/fr/quickeditor/chartquick/BasicChartQuickEditor.java @@ -0,0 +1,51 @@ +package com.fr.quickeditor.chartquick; + +import com.fr.base.chart.BaseChartCollection; +import com.fr.design.actions.core.ActionFactory; +import com.fr.design.actions.insert.cell.ChartCellAction; +import com.fr.design.gui.chart.BaseChartPropertyPane; +import com.fr.design.module.DesignModuleFactory; +import com.fr.grid.selection.CellSelection; +import com.fr.grid.selection.Selection; +import com.fr.quickeditor.CellQuickEditor; +import com.fr.report.cell.Elem; + +import javax.swing.*; + + +public class BasicChartQuickEditor extends CellQuickEditor { + private BaseChartPropertyPane editingPropertyPane; + + public BasicChartQuickEditor() { + super(); + } + + @Override + public JComponent createCenterBody() { + editingPropertyPane = DesignModuleFactory.getChartPropertyPane(); + editingPropertyPane.setBorder(BorderFactory.createEmptyBorder()); + return editingPropertyPane; + } + + @Override + public boolean isScrollAll() { + return false; + } + + @Override + public Object getComboBoxSelected() { + return ActionFactory.createAction(ChartCellAction.class); + } + + @Override + protected void refreshDetails() { + BaseChartCollection collection; + Selection selection = tc.getSelection(); + Elem element; + CellSelection cs = (CellSelection) selection; + element = tc.getEditingElementCase().getCellElement(cs.getColumn(), cs.getRow()); + collection = (BaseChartCollection) element.getValue(); + editingPropertyPane.populateChartPropertyPane(collection, tc); + } + +} \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/chartquick/FloatChartQuickEditor.java b/designer/src/com/fr/quickeditor/chartquick/FloatChartQuickEditor.java new file mode 100644 index 000000000..723a3aba2 --- /dev/null +++ b/designer/src/com/fr/quickeditor/chartquick/FloatChartQuickEditor.java @@ -0,0 +1,34 @@ +package com.fr.quickeditor.chartquick; + +import com.fr.base.chart.BaseChartCollection; +import com.fr.design.gui.chart.BaseChartPropertyPane; +import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.module.DesignModuleFactory; +import com.fr.design.selection.QuickEditor; +import com.fr.grid.selection.FloatSelection; +import com.fr.grid.selection.Selection; +import com.fr.report.cell.Elem; + +import java.awt.*; + + +public class FloatChartQuickEditor extends QuickEditor { + public FloatChartQuickEditor() { + setLayout(new BorderLayout()); + setBorder(null); + } + + @Override + protected void refresh() { + BaseChartPropertyPane editingPropertyPane; + BaseChartCollection collection; + Selection selection = tc.getSelection(); + Elem element; + FloatSelection fs = (FloatSelection) selection; + element = tc.getEditingElementCase().getFloatElement(fs.getSelectedFloatName()); + collection = (BaseChartCollection) element.getValue(); + add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER); + editingPropertyPane.populateChartPropertyPane(collection, tc); + } + +} \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/chartquick/PolyChartQuickEditor.java b/designer/src/com/fr/quickeditor/chartquick/PolyChartQuickEditor.java new file mode 100644 index 000000000..f1584f9ad --- /dev/null +++ b/designer/src/com/fr/quickeditor/chartquick/PolyChartQuickEditor.java @@ -0,0 +1,31 @@ +package com.fr.quickeditor.chartquick; + +import com.fr.base.chart.BaseChartCollection; +import com.fr.design.designer.TargetComponent; +import com.fr.design.gui.chart.BaseChartPropertyPane; +import com.fr.design.module.DesignModuleFactory; +import com.fr.design.selection.QuickEditor; +import com.fr.poly.PolyDesigner; +import com.fr.poly.creator.ChartBlockEditor; + +import java.awt.*; + + +public class PolyChartQuickEditor extends QuickEditor { + public PolyChartQuickEditor() { + setLayout(new BorderLayout()); + setBorder(null); + } + + @Override + protected void refresh() { + BaseChartPropertyPane editingPropertyPane; + BaseChartCollection collection; + ChartBlockEditor chartBlockEditor = (ChartBlockEditor) ((PolyDesigner) tc).getSelection().getEditor(); + collection = chartBlockEditor.getValue().getChartCollection(); + add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER); + editingPropertyPane.setSupportCellData(false); + editingPropertyPane.populateChartPropertyPane(collection, tc); + } + +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/actions/core/ActionFactory.java b/designer_base/src/com/fr/design/actions/core/ActionFactory.java index a8d958533..bf59e8233 100644 --- a/designer_base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer_base/src/com/fr/design/actions/core/ActionFactory.java @@ -24,11 +24,11 @@ public class ActionFactory { private ActionFactory() { } - private static Map> floatEditor = new HashMap>(); + private static Map> floatEditor = new HashMap<>(); private static Class chartCollectionClass = null; - private static Map> cellEditor = new HashMap>(); + private static Map> cellEditor = new HashMap<>(); private static UpdateAction chartPreStyleAction = null; @@ -98,7 +98,7 @@ public class ActionFactory { } /** - * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. + * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollection和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. * * @param editor 待说明 */ diff --git a/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java index 68b3675b6..d3bfb9662 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/UIControlPane.java @@ -302,6 +302,8 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH ShortCut addItem = addItemShortCut().getShortCut(); addItem.intoJToolBar(topToolBar); topToolBar.validate(); + this.controlUpdatePane = createControlUpdatePane();//REPORT-4841 刷新一下编辑面板 + cardPane.add(controlUpdatePane, "EDIT"); this.repaint(); } diff --git a/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java index c5e12fa69..a148fd3b8 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java @@ -214,6 +214,7 @@ public abstract class UIListControlPane extends UIControlPane { @Override public void populate(Nameable[] nameableArray) { isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings + nameableList.getCellEditor().stopCellEditing(); DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); listModel.removeAllElements(); if (ArrayUtils.isEmpty(nameableArray)) { @@ -582,6 +583,7 @@ public abstract class UIListControlPane extends UIControlPane { UIListControlPane.this.nameableList.getCellEditor() .stopCellEditing(); } catch (Exception ignored) { + // do nothing } // bug:在选中一个NameObject并删除,会遗留下Name. doBeforeRemove(); diff --git a/designer_base/src/com/fr/design/images/buttonicon/anas.png b/designer_base/src/com/fr/design/images/buttonicon/anas.png index 5b0c6d7ea..92eefc37a 100644 Binary files a/designer_base/src/com/fr/design/images/buttonicon/anas.png and b/designer_base/src/com/fr/design/images/buttonicon/anas.png differ diff --git a/designer_base/src/com/fr/design/images/chart/ChartType.png b/designer_base/src/com/fr/design/images/chart/ChartType.png index 504ca9484..3bc69c74d 100644 Binary files a/designer_base/src/com/fr/design/images/chart/ChartType.png and b/designer_base/src/com/fr/design/images/chart/ChartType.png differ diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 8d9517cdd..37dee8ad4 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -681,7 +681,7 @@ CellWrite-InsertRow_DEFAULT=\u9ED8\u8BA4\u503C Widget-Load_By_Complete=\u5B8C\u5168\u52A0\u8F7D FR-Designer-Basic_Only_Submit_Current_Sheet=\u53EA\u63D0\u4EA4\u5F53\u524Dsheet Sort-Sort_Order=\u6392\u5217\u987A\u5E8F -File-File_Size_Limit=\u6587\u4EF6\u5927\u5C0F\u9650\u5236 +File-File_Size_Limit=\u5927\u5C0F\u9650\u5236 PrintP-Print=\u6253\u5370(T) FR-Designer-StyleAlignment_Center=\u5C45\u4E2D Preference-Setting_Colors=\u989C\u8272\u8BBE\u7F6E @@ -1806,7 +1806,7 @@ FR-Designer-Dependence_Connect_Server_Error=\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1 High=\u9AD8 HJS-Send_Failed=\u53D1\u9001\u5931\u8D25 HJS-Message=\u5185\u5BB9 -File-Allow_Upload_Files=\u5141\u8BB8\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B +File-Allow_Upload_Files=\u6587\u4EF6\u7C7B\u578B FR-Designer-Form-ToolBar_Chart=\u56FE\u8868 Thick_Bottom_Border_Line=\u7C97\u5E95\u6846\u7EBF FR-Action_Remove=\u5220\u9664 diff --git a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java index 0ae101996..cd5a03f65 100644 --- a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java @@ -589,7 +589,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { if (popupDialog != null && isPoppedOut) { popupDialog.replaceContentPane(this); } - if (popupPane != null && !isRightPaneVisible()) { + if (popupPane != null && popupPane.isVisible()) { popupPane.replaceContentPane(contentArea); } @@ -627,7 +627,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { if (isRightPaneVisible()) { hideCurrentPopupPane(); replaceContentPane(contentPane); - } else if(popupPane != null) { + } else if(popupPane != null && popupPane.isVisible()) { popupPane.replaceContentPane(contentArea); } } diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index eaf8e76c9..fc46ab33f 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe; import com.fr.base.*; import com.fr.base.io.IOFile; +import com.fr.base.iofileattr.TemplateIdAttrMark; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; @@ -46,6 +47,7 @@ import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; +import com.fr.stable.core.UUID; import com.fr.stable.project.ProjectConstants; import javax.swing.*; @@ -1066,12 +1068,12 @@ public abstract class JTemplate> ex } /** - * 由于老版本的模板没有模板ID,当勾选使用参数模板时候,就加一个模板ID + * 由于老版本的模板没有模板ID,当勾选使用参数模板时候,就加一个模板ID attr * @param isUseParamTemplate 是否使用参数模板 */ - public void needAddTemplateId(boolean isUseParamTemplate) { - if (isUseParamTemplate && StringUtils.isEmpty(template.getTemplateID())) { - template.initTemplateID(); + public void needAddTemplateIdAttr(boolean isUseParamTemplate) { + if (isUseParamTemplate && template.getAttrMark(TemplateIdAttrMark.XML_TAG) == null) { + template.addAttrMark(new TemplateIdAttrMark(UUID.randomUUID().toString())); } } } diff --git a/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java b/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java index 9e71296d3..12b83b3e7 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java +++ b/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java @@ -28,7 +28,7 @@ public class BasicPropertyPane extends BasicPane { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); widgetName = new UITextField(); - widgetName.setGlobalName(Inter.getLocText("FR-Designer_Widget_Name")); + widgetName.setGlobalName(Inter.getLocText("FR-Designer_Basic")); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; double[] rowSize = {p}; diff --git a/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java b/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java index e0d2ffb55..abd27f89b 100644 --- a/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java +++ b/designer_base/src/com/fr/design/parameter/ParameterDesignerProvider.java @@ -3,6 +3,7 @@ package com.fr.design.parameter; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; import com.fr.design.mainframe.AuthorityEditPane; +import com.fr.design.mainframe.JTemplate; import javax.swing.*; import java.awt.*; @@ -31,6 +32,8 @@ public interface ParameterDesignerProvider { void refreshParameter(ParaDefinitePane paraDefinitePane); + void refreshParameter(ParaDefinitePane paraDefinitePane, JTemplate jt); + boolean isWithQueryButton(); java.util.List getAllXCreatorNameList(); diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index efcf5f583..f80a3a584 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -1534,7 +1534,7 @@ public class RemoteEnv extends AbstractEnv { testServerConnection(); HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); + para.put("op", "svgrelate"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); para.put("current_uid", this.createUserID()); diff --git a/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java b/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java index b89bc667d..4408e085b 100644 --- a/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java +++ b/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java @@ -34,6 +34,7 @@ import com.fr.plugin.chart.service.WMSFactory; import com.fr.plugin.chart.type.GISLayerType; import com.fr.plugin.chart.type.MapType; import com.fr.plugin.chart.type.ZoomLevel; +import com.fr.stable.ArrayUtils; import javax.swing.*; import javax.swing.event.PopupMenuEvent; @@ -79,6 +80,9 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { ZoomLevel.SEVENTEEN, ZoomLevel.SEVENTEENPOINTFIVE, ZoomLevel.EIGHTEEN }; + //深蓝和高德地图下拉框层级 + private static final ZoomLevel[] BLUE_ZOOM_LEVELS =(ZoomLevel[]) ArrayUtils.subarray(ZOOM_LEVELS, 0, 34); + private static final ZoomLevel[] GAODE_ZOOM_LEVELS =ArrayUtils.addAll(new ZoomLevel[]{ZoomLevel.AUTO}, (ZoomLevel[])ArrayUtils.subarray(ZOOM_LEVELS, 7, 38)); private static final String AUTO_CENTER_STRING = Inter.getLocText("Plugin-ChartF_Automatic"); private static final String CUSTOM_CENTER_STRING = Inter.getLocText("Plugin-ChartF_Custom"); @@ -230,6 +234,13 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { gisLayer = new UIComboBox(layers); + gisLayer.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + refreshZoomLevel(); + } + }); + gisLayer.addPopupMenuListener(new PopupMenuListener() { public void popupMenuCanceled(PopupMenuEvent e) { } @@ -296,6 +307,23 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { return panel; } + private void refreshZoomLevel(){ + //gis图层不同,对应的缩放等级不同。 + ZoomLevel[] levels; + if (ComparatorUtils.equals(gisLayer.getSelectedItem(), Inter.getLocText("Plugin-ChartF_Layer_Blue"))) { + levels = BLUE_ZOOM_LEVELS; + } else if (ComparatorUtils.equals(gisLayer.getSelectedItem(), Inter.getLocText("Plugin-ChartF_Layer_GaoDe"))) { + levels = GAODE_ZOOM_LEVELS; + } else { + levels = ZOOM_LEVELS; + } + zoomLevel.removeAllItems(); + for (int i = 0; i < levels.length; i++) { + zoomLevel.addItem(levels[i]); + } + } + + private JPanel createCustomTileLayer() { double p = TableLayout.PREFERRED; double[] rowSize = {p, p}; @@ -620,6 +648,7 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { customTileLayer.setText(layer.getCustomTileLayer()); attribution.setText(layer.getAttribution()); + refreshZoomLevel(); zoomLevel.setSelectedItem(mapPlot.getZoomLevel()); ViewCenter viewCenter = mapPlot.getViewCenter(); diff --git a/designer_chart/src/com/fr/plugin/chart/map/images/mapData.png b/designer_chart/src/com/fr/plugin/chart/map/images/mapData.png index 12a9a0df0..118314825 100644 Binary files a/designer_chart/src/com/fr/plugin/chart/map/images/mapData.png and b/designer_chart/src/com/fr/plugin/chart/map/images/mapData.png differ diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/component/CompositeComponentAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/component/CompositeComponentAdapter.java index 9ddad6640..176e6e159 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/component/CompositeComponentAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/component/CompositeComponentAdapter.java @@ -108,7 +108,7 @@ public class CompositeComponentAdapter implements ComponentAdapter { ArrayList groups = new ArrayList(); for (String groupName : groupNames) { ArrayList groupProperties = maps.get(groupName); - PropertyGroupPane propertyGroupPane = new PropertyGroupPane(groupProperties.toArray(new CRPropertyDescriptor[0]), xCreator, groupName); + PropertyGroupPane propertyGroupPane = new PropertyGroupPane(groupProperties.toArray(new CRPropertyDescriptor[0]), xCreator, groupName, designer); groups.add(propertyGroupPane); } return groups; diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index 2fde27019..e805ced3c 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -136,37 +136,7 @@ public class SelectionModel { private void unselectedPaste() { if (designer.getClass().equals(FormDesigner.class)) { if (selection.getSelectedCreator() instanceof XWFitLayout) { - if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { - XLayoutContainer container = (XLayoutContainer) selection.getSelectedCreator(); - //tab布局编辑器内部左上角第一个坐标点 - int leftUpX = container.toData().getMargin().getLeft() + 1; - int leftUpY = container.toData().getMargin().getTop() + 1; - //选中第一个坐标点坐在的组件 - selection.setSelectedCreator((XCreator) container.getComponentAt(leftUpX, leftUpY)); - Rectangle rectangle = selection.getRelativeBounds(); - if (hasSelectedPasteSource()) { - selectedPaste(); - } else { - FormSelectionUtils.paste2Container(designer, container, clipboard, - rectangle.x + rectangle.width / 2, - rectangle.y + DELTA_X_Y); - } - } else { - //自适应布局编辑器内部左上角第一个坐标点 - int leftUpX = designer.getRootComponent().toData().getMargin().getLeft() + 1; - int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; - //选中第一个坐标点坐在的组件 - selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); - Rectangle rectangle = selection.getRelativeBounds(); - if (hasSelectedPasteSource()) { - selectedPaste(); - } else { - FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), - clipboard, - rectangle.x + rectangle.width / 2, - rectangle.y + DELTA_X_Y); - } - } + pasteXWFitLayout(); } else { //绝对布局 //编辑器外面还有两层容器,使用designer.getRootComponent()获取到的是编辑器中层的容器,不是编辑器表层 @@ -186,6 +156,40 @@ public class SelectionModel { } } + private void pasteXWFitLayout() { + if (selection.getSelectedCreator().getClass().equals(XWTabFitLayout.class)) { + XLayoutContainer container = (XLayoutContainer) selection.getSelectedCreator(); + //tab布局编辑器内部左上角第一个坐标点 + int leftUpX = container.toData().getMargin().getLeft() + 1; + int leftUpY = container.toData().getMargin().getTop() + 1; + //选中第一个坐标点坐在的组件 + selection.setSelectedCreator((XCreator) container.getComponentAt(leftUpX, leftUpY)); + Rectangle rectangle = selection.getRelativeBounds(); + if (hasSelectedPasteSource()) { + selectedPaste(); + } else { + FormSelectionUtils.paste2Container(designer, container, clipboard, + rectangle.x + rectangle.width / 2, + rectangle.y + DELTA_X_Y); + } + } else { + //自适应布局编辑器内部左上角第一个坐标点 + int leftUpX = designer.getRootComponent().toData().getMargin().getLeft() + 1; + int leftUpY = designer.getRootComponent().toData().getMargin().getTop() + 1; + //选中第一个坐标点坐在的组件 + selection.setSelectedCreator((XCreator) designer.getRootComponent().getComponentAt(leftUpX, leftUpY)); + Rectangle rectangle = selection.getRelativeBounds(); + if (hasSelectedPasteSource()) { + selectedPaste(); + } else { + FormSelectionUtils.paste2Container(designer, designer.getRootComponent(), + clipboard, + rectangle.x + rectangle.width / 2, + rectangle.y + DELTA_X_Y); + } + } + } + /** * 粘贴时选择组件 */ @@ -227,7 +231,11 @@ public class SelectionModel { XCreator[] roots = selection.getSelectedCreators(); if (roots.length > 0) { + boolean isInPara = true; // 在参数面板内删除控件 for (XCreator creator : roots) { + if (isInPara && !(creator.getParent() instanceof XWParameterLayout)) { + isInPara = false; + } if (creator.acceptType(XWParameterLayout.class)) { designer.removeParaComponent(); } @@ -236,8 +244,7 @@ public class SelectionModel { // 清除被选中的组件 selection.reset(); } - setSelectedCreator(designer.getRootComponent()); - FormSelectionUtils.rebuildSelection(designer); + setSelectedCreator(isInPara ? designer.getParaComponent() : designer.getRootComponent()); // 触发事件 designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); designer.repaint(); @@ -401,45 +408,57 @@ public class SelectionModel { if (x < (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) { return Location.outer; } else if ((x >= (bounds.x - XCreatorConstants.RESIZE_BOX_SIZ)) && (x <= bounds.x)) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.left_top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.left; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.left_bottom; - } else { - return Location.outer; - } + return getDirectionLeft(bounds, y); } else if ((x > bounds.x) && (x < (bounds.x + bounds.width))) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.inner; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.bottom; - } else { - return Location.outer; - } + return getDirectionCenter(bounds, y); } else if ((x >= (bounds.x + bounds.width)) && (x <= (bounds.x + bounds.width + XCreatorConstants.RESIZE_BOX_SIZ))) { - if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { - return Location.outer; - } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { - return Location.right_top; - } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { - return Location.right; - } else if ((y >= (bounds.y + bounds.height)) - && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { - return Location.right_bottom; - } else { - return Location.outer; - } + return getDirectionRight(bounds, y); + } else { + return Location.outer; + } + } + + private Direction getDirectionRight(Rectangle bounds, int y) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.right_top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.right; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.right_bottom; + } else { + return Location.outer; + } + } + + private Direction getDirectionCenter(Rectangle bounds, int y) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.inner; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.bottom; + } else { + return Location.outer; + } + } + + private Direction getDirectionLeft(Rectangle bounds, int y) { + if (y < (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) { + return Location.outer; + } else if ((y >= (bounds.y - XCreatorConstants.RESIZE_BOX_SIZ)) && (y <= bounds.y)) { + return Location.left_top; + } else if ((y > bounds.y) && (y < (bounds.y + bounds.height))) { + return Location.left; + } else if ((y >= (bounds.y + bounds.height)) + && (y <= (bounds.y + bounds.height + XCreatorConstants.RESIZE_BOX_SIZ))) { + return Location.left_bottom; } else { return Location.outer; } diff --git a/designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptorPane.java b/designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptorPane.java index da0f4d9bc..906769eaa 100644 --- a/designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptorPane.java +++ b/designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptorPane.java @@ -2,10 +2,12 @@ package com.fr.design.designer.creator; import com.fr.base.FRContext; import com.fr.design.designer.IntervalConstants; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.xtable.TableUtils; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.widget.editors.ExtendedPropertyEditor; import com.fr.design.mainframe.widget.editors.StringEditor; @@ -27,10 +29,12 @@ public class CRPropertyDescriptorPane { private XCreator xCreator; private PropertyEditor propertyEditor; private boolean isPopulate = true; + private FormDesigner designer; - public CRPropertyDescriptorPane(CRPropertyDescriptor crPropertyDescriptor, XCreator xCreator) { + public CRPropertyDescriptorPane(CRPropertyDescriptor crPropertyDescriptor, XCreator xCreator, FormDesigner designer) { this.crPropertyDescriptor = crPropertyDescriptor; this.xCreator = xCreator; + this.designer = designer; } public Component[] createTableLayoutComponent() { @@ -49,7 +53,7 @@ public class CRPropertyDescriptorPane { } - private Component initEditorComponent(CRPropertyDescriptor crPropertyDescriptor, final XCreator xCreator) { + private Component initEditorComponent(final CRPropertyDescriptor crPropertyDescriptor, final XCreator xCreator) { Component component = null; try { // 如果已有的编辑器就生成对应的component @@ -87,6 +91,14 @@ public class CRPropertyDescriptorPane { if (extendEditor.refreshInTime()) { WidgetPropertyPane.getInstance().refreshDockingView(); } + if (designer == null) { + return; + } + if ("widgetName".equals(crPropertyDescriptor.getName())) { + designer.getEditListenerTable().fireCreatorModified(xCreator, DesignerEvent.CREATOR_RENAMED); + } else { + designer.fireTargetModified(); + } } }); diff --git a/designer_form/src/com/fr/design/designer/creator/PropertyGroupPane.java b/designer_form/src/com/fr/design/designer/creator/PropertyGroupPane.java index 890595ffe..bb3c3a42f 100644 --- a/designer_form/src/com/fr/design/designer/creator/PropertyGroupPane.java +++ b/designer_form/src/com/fr/design/designer/creator/PropertyGroupPane.java @@ -1,19 +1,16 @@ package com.fr.design.designer.creator; -import com.fr.base.FRContext; import com.fr.design.designer.IntervalConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayoutHelper; -import com.fr.form.ui.FreeButton; +import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.Widget; import javax.swing.BorderFactory; -import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; -import java.awt.Dimension; /** * Created by kerry on 2017/9/7. @@ -23,6 +20,7 @@ public class PropertyGroupPane extends BasicPane { private CRPropertyDescriptorPane[] crPropertyDescriptorPanes; private XCreator xCreator; private String groupName; + private FormDesigner designer; public String getGroupName() { return groupName; @@ -36,22 +34,25 @@ public class PropertyGroupPane extends BasicPane { public PropertyGroupPane(CRPropertyDescriptor[] crPropertyDescriptors, XCreator xCreator) { this.crPropertyDescriptors = crPropertyDescriptors; this.xCreator = xCreator; - this.setLayout(FRGUIPaneFactory.createBorderLayout()); initComponent(); } - public PropertyGroupPane(CRPropertyDescriptor[] crPropertyDescriptors, XCreator xCreator, String groupName) { - this(crPropertyDescriptors, xCreator); + public PropertyGroupPane(CRPropertyDescriptor[] crPropertyDescriptors, XCreator xCreator, String groupName, FormDesigner designer) { + this.designer = designer; this.groupName = groupName; + this.crPropertyDescriptors = crPropertyDescriptors; + this.xCreator = xCreator; + initComponent(); } public void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); int count = crPropertyDescriptors.length; crPropertyDescriptorPanes = new CRPropertyDescriptorPane[count]; Component[][] components = new Component[count][]; for (int i = 0; i < count; i++) { - crPropertyDescriptorPanes[i] = new CRPropertyDescriptorPane(crPropertyDescriptors[i], xCreator); + crPropertyDescriptorPanes[i] = new CRPropertyDescriptorPane(crPropertyDescriptors[i], xCreator, designer); components[i] = crPropertyDescriptorPanes[i].createTableLayoutComponent(); } @@ -71,21 +72,5 @@ public class PropertyGroupPane extends BasicPane { return "PropertyGroupPane"; } - public static void main(String[] args) { - try { - XCreator xCreator = new XButton(new FreeButton(), new Dimension(100, 100)); - PropertyGroupPane propertyGroupPane = new PropertyGroupPane(xCreator.supportedDescriptor(), xCreator); - JFrame jf = new JFrame("jFrame"); - jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - JPanel content = (JPanel) jf.getContentPane(); - content.setLayout(new BorderLayout()); - content.add(propertyGroupPane, BorderLayout.CENTER); - jf.setSize(439, 400); - jf.setVisible(true); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - - } } diff --git a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java index e84259fd8..b9d24b2cd 100644 --- a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java @@ -37,16 +37,7 @@ import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; import com.fr.design.form.util.XCreatorConstants; -import com.fr.design.mainframe.AuthorityEditPane; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.EastRegionContainerPane; -import com.fr.design.mainframe.FormArea; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormDesignerModeForSpecial; -import com.fr.design.mainframe.FormParaPane; -import com.fr.design.mainframe.FormWidgetDetailPane; -import com.fr.design.mainframe.WidgetPropertyPane; -import com.fr.design.mainframe.WidgetToolBarPane; +import com.fr.design.mainframe.*; import com.fr.design.parameter.ParaDefinitePane; import com.fr.design.parameter.ParameterDesignerProvider; import com.fr.design.parameter.ParameterPropertyPane; @@ -79,6 +70,9 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP private static final int SECOND_H_LOCATION = 170; private static final int ADD_HEIGHT = 20; private static final int H_GAP = 105; + private static final int SUBMIT_BUTTON_H_LOCATION = 270; + private static final int PARA_IMAGE_SHIFT_X = -4; + private static final int FORM_AREA_PADDING_LEFT = 13; private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png"); @@ -175,12 +169,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP @Override public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED - || evt.getCreatorEventID() == DesignerEvent.CREATOR_RENAMED) { + if (evt.getCreatorEventID() != DesignerEvent.CREATOR_SELECTED) { paraDefinitePane.setParameterArray( paraDefinitePane.getNoRepeatParas(DesignModelAdapter.getCurrentModelAdapter().getParameters())); paraDefinitePane.refreshParameter(); @@ -196,7 +185,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP */ public Component createWrapper() { FormArea area = new FormArea(this, false); - area.setBorder(BorderFactory.createEmptyBorder(0, 13, 0, 0)); + area.setBorder(BorderFactory.createEmptyBorder(0, FORM_AREA_PADDING_LEFT, 0, 0)); return area; } @@ -224,6 +213,16 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP * @param p 参数面板 */ public void refreshParameter(ParaDefinitePane p) { + refreshParameter(p, DesignerContext.getDesignerFrame().getSelectedJTemplate()); + } + + /** + * 刷新参数 + * + * @param p 参数面板 + * @param jt 当前模版 + */ + public void refreshParameter(ParaDefinitePane p, JTemplate jt) { XLayoutContainer rootContainer = this.getRootComponent(); java.util.List namelist = getAllXCreatorNameList(rootContainer); // parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名 @@ -240,8 +239,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP } ParameterPropertyPane.getInstance().getParameterToolbarPane().populateBean( p.getParameterArray() == null ? new Parameter[0] : p.getParameterArray()); - EastRegionContainerPane.getInstance().setParameterHeight(ParameterPropertyPane.getInstance().getPreferredSize().height); - + ParameterPropertyPane.getInstance().refreshState(jt); } /** @@ -439,7 +437,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP } for (Parameter p : paras) { if (p.getName().equalsIgnoreCase(creator.toData().getWidgetName())) { - g.drawImage(paraImage, creator.getX() - 4, creator.getY() + 2, null); + g.drawImage(paraImage, creator.getX() + PARA_IMAGE_SHIFT_X, creator.getY() + 2, null); break; } } @@ -617,7 +615,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP formSubmitButton.setWidgetName("Search"); formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); xCreator = XCreatorUtils.createXCreator(formSubmitButton); - if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP + if (!(this.autoAddComponent(xCreator, SUBMIT_BUTTON_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { return false; } diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 7572cc204..fe998656b 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -123,6 +123,7 @@ public class FormDesigner extends TargetComponent
implements TreeSelection private static final int SECOND_H_LOCATION = 170; private static final int ADD_HEIGHT = 20; private static final int H_GAP = 105; + private static final int SUBMIT_BUTTON_H_LOCATION = 270; public FormDesigner(Form form) { this(form, null); @@ -257,7 +258,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection currentIndex++; parameterArray = (Parameter[]) ArrayUtils.removeElement(parameterArray, parameter); refreshParameter(); - EastRegionContainerPane.getInstance().refreshDownPane(); + fireTargetModified(); } /** @@ -294,14 +295,14 @@ public class FormDesigner extends TargetComponent implements TreeSelection formSubmitButton.setWidgetName("Search"); formSubmitButton.setText(Inter.getLocText("FR-Designer_Query")); xCreator = XCreatorUtils.createXCreator(formSubmitButton); - if (!(this.autoAddComponent(xCreator, 270, FIRST_V_LOCATION + V_COMPONENT_GAP + if (!(this.autoAddComponent(xCreator, SUBMIT_BUTTON_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) { return; } currentIndex = currentIndex + NUM_IN_A_LINE - currentIndex % NUM_IN_A_LINE; parameterArray = (Parameter[]) ArrayUtils.removeElement(parameterArray, parameter); refreshParameter(); - EastRegionContainerPane.getInstance().refreshDownPane(); + fireTargetModified(); } /** @@ -667,9 +668,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 只有选择组件时不触发模版更新,其他都要触发 if (evt.getCreatorEventID() != DesignerEvent.CREATOR_SELECTED) { FormDesigner.this.fireTargetModified(); - //bug59192 - //setParameterArray(getNoRepeatParas(getTarget().getParameters())); - //refreshParameter(); + setParameterArray(getNoRepeatParas(getTarget().getParameters())); + refreshParameter(); } } @@ -1147,7 +1147,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection * 同步 */ public void populateRootSize() { - + // do nothing } /** @@ -1233,6 +1233,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection */ @Override public void stopEditing() { + // do nothing } /** @@ -1412,7 +1413,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection parent = parent.getParent(); } - Object[] components = path.toArray(); + Object[] components = (Object[]) path.toArray(); if (components.length == 0) { return null; } diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 79b4ccc96..6a1789b4b 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -328,10 +328,10 @@ public class JForm extends JTemplate implements BaseJForm { private void setPropertyPaneChange(XComponent comp) { if (comp == null) { - ParameterPropertyPane.getInstance().setAddParaPaneVisible(false); + ParameterPropertyPane.getInstance().setAddParaPaneVisible(false, this); return; } - ParameterPropertyPane.getInstance().setAddParaPaneVisible(comp instanceof XWParameterLayout); + ParameterPropertyPane.getInstance().setAddParaPaneVisible(isAddParaPaneVisible(comp), this); editingComponent = comp.createToolPane(this, formDesign); EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.FORM); if (BaseUtils.isAuthorityEditing()) { @@ -342,6 +342,16 @@ public class JForm extends JTemplate implements BaseJForm { } } + private boolean isAddParaPaneVisible(XComponent comp) { + boolean isVisible = false; + try { + isVisible = comp instanceof XWParameterLayout || ((XCreator) comp).getParent() instanceof XWParameterLayout; + } catch (Throwable throwable) { + // 发生异常则返回 false + } + return isVisible; + } + public JComponent getEditingPane() { return editingComponent; } @@ -546,6 +556,7 @@ public class JForm extends JTemplate implements BaseJForm { //撤销的时候要重新选择的body布局 this.formDesign.getSelectionModel().setSelectedCreators(FormSelectionUtils.rebuildSelection(formDesign.getRootComponent(), formDesign.getRootComponent() == selectedBodyLayout() ? u.getSelectWidgets() : new Widget[]{selectedBodyLayout().toData()})); + refreshToolArea(); } else { String widgetName = this.formDesign.getElementCaseContainerName(); //这儿太坑了,u.getForm() 与 getTarget内容不一样 @@ -718,7 +729,7 @@ public class JForm extends JTemplate implements BaseJForm { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.FORM); EastRegionContainerPane.getInstance().replaceWidgetSettingsPane(WidgetPropertyPane.getInstance(formDesign)); ParameterPropertyPane parameterPropertyPane = ParameterPropertyPane.getInstance(formDesign); - parameterPropertyPane.setAddParaPaneVisible(false); + parameterPropertyPane.setAddParaPaneVisible(false, this); EastRegionContainerPane.getInstance().addParameterPane(parameterPropertyPane); EastRegionContainerPane.getInstance().setParameterHeight(parameterPropertyPane.getPreferredSize().height); diff --git a/designer_form/src/com/fr/design/mainframe/widget/ui/BasicSetVisiblePropertyPane.java b/designer_form/src/com/fr/design/mainframe/widget/ui/BasicSetVisiblePropertyPane.java index e67bfc8ba..8b13c4e07 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/ui/BasicSetVisiblePropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/widget/ui/BasicSetVisiblePropertyPane.java @@ -27,6 +27,8 @@ public class BasicSetVisiblePropertyPane extends FormBasicPropertyPane { pane2.add(otherOtherConfig); } visibleCheckBox = new UICheckBox(Inter.getLocText("Widget-Visible"), true); + visibleCheckBox.setGlobalName(Inter.getLocText("FR-Designer_Basic")); + visibleCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); pane2.add(visibleCheckBox); this.add(pane2, BorderLayout.CENTER); diff --git a/designer_form/src/com/fr/design/mainframe/widget/ui/FormBasicWidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/widget/ui/FormBasicWidgetPropertyPane.java index d6aa88296..ccb3a1e91 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/ui/FormBasicWidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/widget/ui/FormBasicWidgetPropertyPane.java @@ -17,6 +17,8 @@ public class FormBasicWidgetPropertyPane extends BasicSetVisiblePropertyPane { public UICheckBox createOtherConfig() { enableCheckBox = new UICheckBox(Inter.getLocText("Enabled"), true); + enableCheckBox.setGlobalName(Inter.getLocText("FR-Designer_Basic")); + enableCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); return enableCheckBox; } diff --git a/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java b/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java index 6eefcba6d..ac9e5848d 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java +++ b/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java @@ -133,7 +133,18 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { jPanel.add(attriCardPane, BorderLayout.CENTER); jPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - if(FormWidgetDefinePaneFactoryBase.isExtraXWidget(innerCreator.toData())){ + final boolean isExtraWidget = FormWidgetDefinePaneFactoryBase.isExtraXWidget(innerCreator.toData()); + this.listener = new AttributeChangeListener() { + @Override + public void attributeChange() { + if(!isExtraWidget){ + updateCreator(); + } + updateWidgetBound(); + } + }; + + if(isExtraWidget){ return; } @@ -143,13 +154,6 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { jPanel.add(uiExpandablePane, BorderLayout.NORTH); - this.listener = new AttributeChangeListener() { - @Override - public void attributeChange() { - updateCreator(); - } - }; - } private void initDefinePane() { @@ -206,18 +210,20 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { public void updateCreator() { currentEditorDefinePane.setGlobalName(getGlobalName()); Widget widget = currentEditorDefinePane.updateBean(); - if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Widget_Name")) && widgetPropertyPane != null) { + if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Basic")) && widgetPropertyPane != null) { widgetPropertyPane.update(widget); xCreator.resetCreatorName(widget.getWidgetName()); designer.getEditListenerTable().fireCreatorModified(xCreator, DesignerEvent.CREATOR_RENAMED); return; } + fireValueChanged(); + } + public void updateWidgetBound (){ if (widgetBoundPane != null && ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Coords_And_Size"))) { widgetBoundPane.update(); } - - fireValueChanged(); + designer.refreshDesignerUI(); } @@ -233,7 +239,6 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { XCreator creator = getXCreatorDedicated(); creator.firePropertyChange(); designer.fireTargetModified(); - designer.refreshDesignerUI(); } public String getIconPath() { diff --git a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java index 43e840823..c74933344 100644 --- a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java +++ b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java @@ -4,10 +4,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.dialog.BasicScrollPane; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.FormHierarchyTreePane; -import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.*; import javax.swing.*; import java.awt.*; @@ -87,18 +84,23 @@ public class ParameterPropertyPane extends JPanel{ } // 显示或隐藏添加参数面板 + public void refreshState(JTemplate jt) { + setAddParaPaneVisible(toolbarPane.hasSelectedLabelItem(), jt); + } + + // 显示或隐藏添加参数面板 public void refreshState() { - setAddParaPaneVisible(toolbarPane.hasSelectedLabelItem()); + refreshState(DesignerContext.getDesignerFrame().getSelectedJTemplate()); } - public void setAddParaPaneVisible(boolean isVisible) { + public void setAddParaPaneVisible(boolean isVisible, JTemplate jt) { if (isVisible == addParaPane.isVisible() || formHierarchyTreePaneWrapper == null) { return; } // 表单中,只有添加并选中参数面板时,才显示 boolean hideInJForm; try { - hideInJForm = DesignerContext.getDesignerFrame().getSelectedJTemplate() instanceof JForm && + hideInJForm = jt instanceof JForm && !(FormHierarchyTreePane.getInstance().getComponentTree().getSelectionPath().getLastPathComponent() instanceof XWParameterLayout); } catch (NullPointerException ex) { hideInJForm = true; diff --git a/designer_form/src/com/fr/design/parameter/ParameterToolBarPane.java b/designer_form/src/com/fr/design/parameter/ParameterToolBarPane.java index 16fc6ce04..422c08ab0 100644 --- a/designer_form/src/com/fr/design/parameter/ParameterToolBarPane.java +++ b/designer_form/src/com/fr/design/parameter/ParameterToolBarPane.java @@ -35,6 +35,7 @@ public class ParameterToolBarPane extends BasicBeanPane { private static final int BUTTON_HEIGHT = 20; private static final int WIDTH = 225; private static final int L_H = 18; + private static final int LABEL_PADDING_LEFT = 4; public ParameterToolBarPane() { this.setLayout(new FlowParameterPaneLayout()); @@ -47,9 +48,9 @@ public class ParameterToolBarPane extends BasicBeanPane { return new Dimension(super.getPreferredSize().width, 18); } }; - label.setText(Inter.getLocText("FR-Following_parameters_are_not_generated")+":"); + label.setText(Inter.getLocText("FR-Following_parameters_are_not_generated") + ":"); label.setHorizontalAlignment(SwingConstants.LEFT); - label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); + label.setBorder(BorderFactory.createEmptyBorder(0, LABEL_PADDING_LEFT, 0, 0)); this.add(label); addAll = new UIButton(Inter.getLocText("FR-Designer_Add_all")); @@ -68,7 +69,7 @@ public class ParameterToolBarPane extends BasicBeanPane { public Parameter getTargetParameter(UIButton button) { int index = parameterSelectedLabellist.indexOf(button); - if(index < 0 || index > parameterList.length - 1) { + if (index < 0 || index > parameterList.length - 1) { return null; } return parameterList[index]; @@ -82,7 +83,6 @@ public class ParameterToolBarPane extends BasicBeanPane { this.add(label); if (parameterArray.length == 0) { - ParameterPropertyPane.getInstance().refreshState(); this.setVisible(false); this.repaint(); return; @@ -103,7 +103,6 @@ public class ParameterToolBarPane extends BasicBeanPane { this.add(addAll); this.doLayout(); - ParameterPropertyPane.getInstance().refreshState(); this.repaint(); } @@ -124,12 +123,15 @@ public class ParameterToolBarPane extends BasicBeanPane { private class FlowParameterPaneLayout implements LayoutManager { public FlowParameterPaneLayout() { + // do nothing } public void addLayoutComponent(String name, Component comp) { + // do nothing } public void removeLayoutComponent(Component comp) { + // do nothing } public Dimension preferredLayoutSize(Container parent) { @@ -137,7 +139,7 @@ public class ParameterToolBarPane extends BasicBeanPane { layoutContainer(parent); - int h= ((parameterSelectedLabellist.size() == 0) ? 0 : breakid * (BUTTON_HEIGHT + GAP_V) + GAP_BV + L_H + GAP_H + addAll.getPreferredSize().height); + int h= (parameterSelectedLabellist.isEmpty() ? 0 : breakid * (BUTTON_HEIGHT + GAP_V) + GAP_BV + L_H + GAP_H + addAll.getPreferredSize().height); return new Dimension(w, h); } @@ -155,7 +157,7 @@ public class ParameterToolBarPane extends BasicBeanPane { breakid = 1; for (UIButton tab : parameterSelectedLabellist) { Dimension dim = tab.getPreferredSize(); - if(x + dim.width > width) { + if (x + dim.width > width) { breakid++; x = 0; y += (dim.height + GAP_V); diff --git a/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java b/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java index 3a93e4fec..d8ef6f0fc 100644 --- a/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java +++ b/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java @@ -128,7 +128,7 @@ public class RootDesignDefinePane extends AbstractDataModify { wParameterLayout.setDelayDisplayContent(displayReport.isSelected()); wParameterLayout.setUseParamsTemplate(useParamsTemplate.isSelected()); JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - jTemplate.needAddTemplateId(useParamsTemplate.isSelected()); + jTemplate.needAddTemplateIdAttr(useParamsTemplate.isSelected()); wParameterLayout.setBackground((Background) background.getValue()); wParameterLayout.setPosition((int)hAlignmentPane.getSelectedItem()); return wParameterLayout; diff --git a/designer_form/src/com/fr/design/widget/ui/designer/MultiFileEditorPane.java b/designer_form/src/com/fr/design/widget/ui/designer/MultiFileEditorPane.java index 3af489ddb..cf406f56e 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/MultiFileEditorPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/MultiFileEditorPane.java @@ -7,7 +7,6 @@ import com.fr.design.gui.icombobox.DictionaryComboBox; import com.fr.design.gui.icombobox.DictionaryConstants; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ispinner.UISpinner; -import com.fr.design.gui.itextfield.UINumberField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; @@ -20,7 +19,7 @@ import java.awt.*; public class MultiFileEditorPane extends FieldEditorDefinePane { private DictionaryComboBox acceptType; private UICheckBox singleFileCheckBox; - private UINumberField fileSizeField; + private UISpinner fileSizeField; private UISpinner fontSizeField; public MultiFileEditorPane(XCreator xCreator) { @@ -38,36 +37,30 @@ public class MultiFileEditorPane extends FieldEditorDefinePane acceptType = new DictionaryComboBox(DictionaryConstants.acceptTypes, DictionaryConstants.fileTypeDisplays); singleFileCheckBox = new UICheckBox(Inter.getLocText("SINGLE_FILE_UPLOAD")); singleFileCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - fileSizeField = new UINumberField(); + fileSizeField = new UISpinner(0, Integer.MAX_VALUE, 1, -1); + fileSizeField.setPreferredSize(new Dimension(140, 20)); fontSizeField = new UISpinner(0, 20, 1, 0); JPanel singleFilePane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); singleFilePane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); singleFilePane.add(singleFileCheckBox); - JPanel allowTypePane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); - allowTypePane.setLayout(FRGUIPaneFactory.createLabelFlowLayout()); - allowTypePane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - allowTypePane.add(new UILabel(" " + Inter.getLocText("File-Allow_Upload_Files") + ":")); - allowTypePane.add(acceptType); - - JPanel fileSizePane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); - fileSizePane.add(new UILabel(" " + Inter.getLocText("File-File_Size_Limit") + ":")); - fileSizePane.add(fileSizeField); - fileSizePane.add(new UILabel(" KB")); + JPanel fileSizePane = new JPanel(new BorderLayout()); + fileSizePane.add(fileSizeField, BorderLayout.CENTER); + fileSizePane.add(new UILabel(" KB"), BorderLayout.EAST); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ new Component[]{singleFileCheckBox, null }, new Component[]{new UILabel(Inter.getLocText("File-Allow_Upload_Files")), acceptType}, - new Component[]{new UILabel( Inter.getLocText("File-File_Size_Limit")), fileSizeField}, + new Component[]{new UILabel( Inter.getLocText("File-File_Size_Limit")), fileSizePane}, new Component[]{new UILabel( Inter.getLocText("FR-Designer_Font-Size")), fontSizeField} }; double[] rowSize = {p, p, p, p}; double[] columnSize = {p,f}; int[][] rowCount = {{1, 1},{1, 1},{1, 1},{1, 1}}; - JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W0, IntervalConstants.INTERVAL_L1); + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); boundsPane.add(panel);