diff --git a/designer/src/com/fr/design/actions/edit/DeleteAction.java b/designer/src/com/fr/design/actions/edit/DeleteAction.java index 0fe1f7817c..b2d69b58c5 100644 --- a/designer/src/com/fr/design/actions/edit/DeleteAction.java +++ b/designer/src/com/fr/design/actions/edit/DeleteAction.java @@ -25,7 +25,7 @@ public class DeleteAction extends ElementCaseAction { this.setMnemonic('D'); //Richie:删除菜单图标 this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/delete.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)); +// this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)); } @Override diff --git a/designer/src/com/fr/design/actions/edit/EditFloatElementNameAction.java b/designer/src/com/fr/design/actions/edit/EditFloatElementNameAction.java index 6f235307e1..15a0b07d18 100644 --- a/designer/src/com/fr/design/actions/edit/EditFloatElementNameAction.java +++ b/designer/src/com/fr/design/actions/edit/EditFloatElementNameAction.java @@ -39,7 +39,7 @@ public class EditFloatElementNameAction extends FloatSelectionAction { if (report.getFloatElement(name) == null) { selectedFloatElement.setName(name); } - reportPane.setSelection(new FloatSelection(name)); + ((FloatSelection) reportPane.getSelection()).setFloatName(name); } }); nameDialog.setVisible(true); diff --git a/designer/src/com/fr/design/actions/edit/order/BringFloatElementForwardAction.java b/designer/src/com/fr/design/actions/edit/order/BringFloatElementForwardAction.java index 2259388d45..3a4f43e66e 100644 --- a/designer/src/com/fr/design/actions/edit/order/BringFloatElementForwardAction.java +++ b/designer/src/com/fr/design/actions/edit/order/BringFloatElementForwardAction.java @@ -27,7 +27,7 @@ public class BringFloatElementForwardAction extends AbstractFloatElementOrderAct this.setName(Inter.getLocText("M_Edit-Bring_Forward")); this.setMnemonic('F'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER)); +// this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER)); } @Override diff --git a/designer/src/com/fr/design/actions/edit/order/BringFloatElementToFrontAction.java b/designer/src/com/fr/design/actions/edit/order/BringFloatElementToFrontAction.java index b50d683060..d5b8279632 100644 --- a/designer/src/com/fr/design/actions/edit/order/BringFloatElementToFrontAction.java +++ b/designer/src/com/fr/design/actions/edit/order/BringFloatElementToFrontAction.java @@ -28,7 +28,7 @@ public class BringFloatElementToFrontAction extends AbstractFloatElementOrderAct this.setName(Inter.getLocText("M_Edit-Bring_to_Front")); this.setMnemonic('T'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/to_top.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); +// this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); } @Override diff --git a/designer/src/com/fr/design/actions/edit/order/SendFloatElementBackwardAction.java b/designer/src/com/fr/design/actions/edit/order/SendFloatElementBackwardAction.java index e1eedc3550..a52c9e1302 100644 --- a/designer/src/com/fr/design/actions/edit/order/SendFloatElementBackwardAction.java +++ b/designer/src/com/fr/design/actions/edit/order/SendFloatElementBackwardAction.java @@ -27,7 +27,7 @@ public class SendFloatElementBackwardAction extends AbstractFloatElementOrderAct this.setName(Inter.getLocText("M_Edit-Send_Backward")); this.setMnemonic('B'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER)); +// this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER)); } @Override diff --git a/designer/src/com/fr/design/actions/edit/order/SendFloatElementToBackAction.java b/designer/src/com/fr/design/actions/edit/order/SendFloatElementToBackAction.java index ee8fa31d4e..ef5827d90e 100644 --- a/designer/src/com/fr/design/actions/edit/order/SendFloatElementToBackAction.java +++ b/designer/src/com/fr/design/actions/edit/order/SendFloatElementToBackAction.java @@ -28,7 +28,7 @@ public class SendFloatElementToBackAction extends AbstractFloatElementOrderActio this.setName(Inter.getLocText("M_Edit-Send_to_Back")); this.setMnemonic('K'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/to_bottom.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); +// this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); } @Override diff --git a/designer/src/com/fr/design/actions/package.html b/designer/src/com/fr/design/actions/package.html new file mode 100644 index 0000000000..b3f9a9493e --- /dev/null +++ b/designer/src/com/fr/design/actions/package.html @@ -0,0 +1,5 @@ + + +定义了响应各种事件的 Action + + \ No newline at end of file diff --git a/designer/src/com/fr/design/cell/editor/package.html b/designer/src/com/fr/design/cell/editor/package.html index 181bdb68cf..f44232f536 100644 --- a/designer/src/com/fr/design/cell/editor/package.html +++ b/designer/src/com/fr/design/cell/editor/package.html @@ -1,13 +1,9 @@ - - +文本单元格编辑器({@link com.fr.cell.editor.GeneralCellEditor GeneralCellEditor})类. \ No newline at end of file diff --git a/designer/src/com/fr/design/condition/package.html b/designer/src/com/fr/design/condition/package.html new file mode 100644 index 0000000000..7ad30f8025 --- /dev/null +++ b/designer/src/com/fr/design/condition/package.html @@ -0,0 +1,5 @@ + + +条件属性悬浮编辑框中的相关面板 + + \ No newline at end of file diff --git a/designer/src/com/fr/design/dscolumn/DSColumnBasicPane.java b/designer/src/com/fr/design/dscolumn/DSColumnBasicPane.java index 603356a882..45434fa82c 100644 --- a/designer/src/com/fr/design/dscolumn/DSColumnBasicPane.java +++ b/designer/src/com/fr/design/dscolumn/DSColumnBasicPane.java @@ -14,8 +14,9 @@ import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.CellExpandAttr; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -27,6 +28,29 @@ public class DSColumnBasicPane extends BasicPane { private ExpandDirectionPane expandDirectionPane; private CellElement cellElement; + private ActionListener summaryDirectionActionlistener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + if (expandDirectionPane != null) { + expandDirectionPane.setNoneRadioButtonSelected(true); + } + } + }; + private ActionListener othergroupDirectionActionlistener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + if (expandDirectionPane != null) { + expandDirectionPane.setNoneRadioButtonSelected(false); + } + } + }; + private ActionListener sdcupdateActionlistener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + selectDataColumnPane.update(cellElement); + } + }; + public DSColumnBasicPane() { this(DSColumnPane.SETTING_ALL); } @@ -78,7 +102,7 @@ public class DSColumnBasicPane extends BasicPane { this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER); - this.resultSetGroupPane.addListeners(summary_direction_ActionListener, otherGroup_direction_ActionListener, sdcUpdate_ActionListener); + this.resultSetGroupPane.addListeners(summaryDirectionActionlistener, othergroupDirectionActionlistener, sdcupdateActionlistener); } @Override @@ -93,7 +117,7 @@ public class DSColumnBasicPane extends BasicPane { this.cellElement = cellElement; - selectDataColumnPane.populate(source, cellElement); + selectDataColumnPane.populate(source, cellElement, null); CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); if (conditionParentPane != null) { @@ -134,29 +158,6 @@ public class DSColumnBasicPane extends BasicPane { resultSetGroupPane.update(); } - ActionListener summary_direction_ActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - if (expandDirectionPane != null) { - expandDirectionPane.setNoneRadioButtonSelected(true); - } - } - }; - ActionListener otherGroup_direction_ActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - if (expandDirectionPane != null) { - expandDirectionPane.setNoneRadioButtonSelected(false); - } - } - }; - ActionListener sdcUpdate_ActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - selectDataColumnPane.update(cellElement); - } - }; - public void putElementcase(ElementCasePane t) { if (conditionParentPane != null) { conditionParentPane.putElementcase(t); diff --git a/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java b/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java index e71f539ebb..9552f6ba95 100644 --- a/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java +++ b/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java @@ -6,7 +6,7 @@ import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; import com.fr.main.impl.WorkBook; import com.fr.report.cell.TemplateCellElement; -import java.awt.*; +import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Iterator; @@ -32,7 +32,7 @@ public class SelectedConfirmedDataColumnPane extends SelectedDataColumnPane { tableNameComboBox.refresh(source); tableNameComboBox.setEditable(false); tableNameComboBox.setEnabled(false); - super.populate(source, cell); + super.populate(source, cell, null); try { Iterator it = source.getTableDataNameIterator(); String name = (String) it.next(); diff --git a/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java b/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java index 362c281667..62538e7d05 100644 --- a/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java +++ b/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java @@ -26,14 +26,19 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.regex.Pattern; /** @@ -41,7 +46,7 @@ import java.util.regex.Pattern; * * @author yaoh.wu * @version 2017年8月3日 - * 复用对话框代码,保留对话框原始布局 + * 复用对话框代码,保留对话框原始布局 * @since 8.0 */ public class SelectedDataColumnPane extends BasicPane { @@ -53,19 +58,21 @@ public class SelectedDataColumnPane extends BasicPane { private ItemListener itemListener; private UIButton paramButton; + private ElementCasePane casePane; + private CellElement cellElement; // 保存当前选中的 CE public SelectedDataColumnPane() { - this(true, false, null, null); + this(true, false, null); } public SelectedDataColumnPane(boolean showParameterButton) { - this(showParameterButton, false, null, null); + this(showParameterButton, false, null); } - public SelectedDataColumnPane(boolean showParameterButton, boolean verticalLayout, ElementCasePane casePane, TemplateCellElement cellElement) { + public SelectedDataColumnPane(boolean showParameterButton, boolean verticalLayout, TemplateCellElement cellElement) { if (verticalLayout) { - initComponentVerticalLayout(casePane, cellElement); + initComponentVerticalLayout(cellElement); } else { initComponent(showParameterButton); } @@ -119,9 +126,9 @@ public class SelectedDataColumnPane extends BasicPane { /** * 初始化竖直布局的组件 */ - public void initComponentVerticalLayout(ElementCasePane casePane, TemplateCellElement cellElement) { + private void initComponentVerticalLayout(TemplateCellElement cellElement) { initTableNameComboBox(); - initWithParameterButton(casePane, cellElement); + initWithParameterButton(cellElement); columnNameComboBox = new LazyComboBox() { @Override public Object[] load() { @@ -149,10 +156,13 @@ public class SelectedDataColumnPane extends BasicPane { } - public void populate(TableDataSource source, TemplateCellElement cellElement) { + public void populate(TableDataSource source, TemplateCellElement cellElement, ElementCasePane casePane) { + tableNameComboBox.refresh(source); + this.casePane = casePane; if (cellElement == null) { return; } + this.cellElement = cellElement; if (itemListener != null) { removeListener(itemListener); } @@ -191,6 +201,14 @@ public class SelectedDataColumnPane extends BasicPane { dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null); } + /** + * 释放模板对象 + */ + public void release() { + this.casePane = null; + this.tableNameComboBox.setModel(new DefaultComboBoxModel()); + } + /** * 更新面板 * @@ -245,10 +263,20 @@ public class SelectedDataColumnPane extends BasicPane { protected void initTableNameComboBox() { tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); + final ExecutorService executorService = Executors.newSingleThreadExecutor(); tableNameComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - columnNameComboBox.setLoaded(false); + if (e.getStateChange() == ItemEvent.SELECTED) { + executorService.execute(new Runnable() { + @Override + public void run() { + synchronized (columnNameComboBox) { + columnNameComboBox.loadInstant(); + } + } + }); + } } }); tableNameComboBox.setPreferredSize(new Dimension(100, 20)); @@ -279,8 +307,7 @@ public class SelectedDataColumnPane extends BasicPane { }); } - private void initWithParameterButton(final ElementCasePane casePane, final TemplateCellElement cellElement) { - final SelectedDataColumnPane that = this; + private void initWithParameterButton(final TemplateCellElement cellElement) { editorPane = new UITableEditorPane(new ParameterTableModel()); paramButton = new UIButton(Inter.getLocText("FR-Designer-Basic_Dynamic_Parameter_Injection")); paramButton.addActionListener(new ActionListener() { @@ -290,7 +317,7 @@ public class SelectedDataColumnPane extends BasicPane { public void doOk() { List parameterList = editorPane.update(); ps = parameterList.toArray(new Parameter[parameterList.size()]); - that.update(cellElement); + update(SelectedDataColumnPane.this.cellElement); casePane.fireTargetModified(); } }); diff --git a/designer/src/com/fr/design/dscolumn/package.html b/designer/src/com/fr/design/dscolumn/package.html new file mode 100644 index 0000000000..7c3869f2a7 --- /dev/null +++ b/designer/src/com/fr/design/dscolumn/package.html @@ -0,0 +1,5 @@ + + +数据列相关面板 + + \ No newline at end of file diff --git a/designer/src/com/fr/design/expand/package.html b/designer/src/com/fr/design/expand/package.html new file mode 100644 index 0000000000..038eb5319c --- /dev/null +++ b/designer/src/com/fr/design/expand/package.html @@ -0,0 +1,5 @@ + + +"单元格属性"->"扩展"的界面 + + \ No newline at end of file diff --git a/designer/src/com/fr/design/mainframe/ElementCasePane.java b/designer/src/com/fr/design/mainframe/ElementCasePane.java index 656d2ec93a..547fdcf480 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -3,7 +3,13 @@ */ package com.fr.design.mainframe; -import com.fr.base.*; +import com.fr.base.BaseFormula; +import com.fr.base.BaseUtils; +import com.fr.base.DynamicUnitList; +import com.fr.base.FRContext; +import com.fr.base.Formula; +import com.fr.base.ScreenResolution; +import com.fr.base.Style; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -12,8 +18,30 @@ import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.BorderAction; import com.fr.design.actions.cell.CleanAuthorityAction; -import com.fr.design.actions.cell.style.*; -import com.fr.design.actions.columnrow.*; +import com.fr.design.actions.cell.style.AlignmentAction; +import com.fr.design.actions.cell.style.ReportFontBoldAction; +import com.fr.design.actions.cell.style.ReportFontForegroundAction; +import com.fr.design.actions.cell.style.ReportFontItalicAction; +import com.fr.design.actions.cell.style.ReportFontNameAction; +import com.fr.design.actions.cell.style.ReportFontSizeAction; +import com.fr.design.actions.cell.style.ReportFontUnderlineAction; +import com.fr.design.actions.cell.style.StyleBackgroundAction; +import com.fr.design.actions.columnrow.CancelColumnAction; +import com.fr.design.actions.columnrow.CancelRowAction; +import com.fr.design.actions.columnrow.ColumnHideAction; +import com.fr.design.actions.columnrow.ColumnWidthAction; +import com.fr.design.actions.columnrow.DeleteColumnAction; +import com.fr.design.actions.columnrow.DeleteRowAction; +import com.fr.design.actions.columnrow.FootColumnAction; +import com.fr.design.actions.columnrow.FootRowAction; +import com.fr.design.actions.columnrow.HeadColumnAction; +import com.fr.design.actions.columnrow.HeadRowAction; +import com.fr.design.actions.columnrow.InsertColumnAction; +import com.fr.design.actions.columnrow.InsertRowAction; +import com.fr.design.actions.columnrow.ResetColumnHideAction; +import com.fr.design.actions.columnrow.ResetRowHideAction; +import com.fr.design.actions.columnrow.RowHeightAction; +import com.fr.design.actions.columnrow.RowHideAction; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.edit.CopyAction; import com.fr.design.actions.edit.CutAction; @@ -24,8 +52,17 @@ import com.fr.design.cell.bar.DynamicScrollBar; import com.fr.design.cell.clipboard.CellElementsClip; import com.fr.design.cell.clipboard.ElementsTransferable; import com.fr.design.cell.clipboard.FloatElementsClip; -import com.fr.design.cell.editor.*; +import com.fr.design.cell.editor.BiasTextPainterCellEditor; import com.fr.design.cell.editor.CellEditor; +import com.fr.design.cell.editor.ChartCellEditor; +import com.fr.design.cell.editor.ChartFloatEditor; +import com.fr.design.cell.editor.DSColumnCellEditor; +import com.fr.design.cell.editor.FormulaCellEditor; +import com.fr.design.cell.editor.FormulaFloatEditor; +import com.fr.design.cell.editor.ImageCellEditor; +import com.fr.design.cell.editor.ImageFloatEditor; +import com.fr.design.cell.editor.RichTextCellEditor; +import com.fr.design.cell.editor.SubReportCellEditor; import com.fr.design.constants.UIConstants; import com.fr.design.designer.EditingState; import com.fr.design.designer.TargetComponent; @@ -35,7 +72,11 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.cell.QuickEditorRegion; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.menu.*; +import com.fr.design.menu.KeySetUtils; +import com.fr.design.menu.MenuDef; +import com.fr.design.menu.NameSeparator; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; import com.fr.design.selection.QuickEditor; import com.fr.design.selection.Selectedable; import com.fr.design.selection.SelectionEvent; @@ -43,7 +84,11 @@ import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; -import com.fr.grid.*; +import com.fr.grid.Grid; +import com.fr.grid.GridColumn; +import com.fr.grid.GridCorner; +import com.fr.grid.GridRow; +import com.fr.grid.GridUtils; import com.fr.grid.dnd.ElementCasePaneDropTarget; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.Selection; @@ -65,12 +110,27 @@ import com.fr.stable.ArrayUtils; import com.fr.stable.ColumnRow; import com.fr.stable.unit.FU; -import javax.swing.*; -import java.awt.*; +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollBar; +import javax.swing.KeyStroke; +import java.awt.AWTEvent; +import java.awt.Adjustable; +import java.awt.Dimension; +import java.awt.Image; +import java.awt.Rectangle; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; -import java.awt.event.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.lang.reflect.Constructor; import java.util.Set; @@ -462,8 +522,15 @@ public abstract class ElementCasePane extends Tar * 因为这边判断selection是一个selection,所以不会触发fireSelectionChanged */ public void setSelection(Selection selection) { + if (!ComparatorUtils.equals(this.selection, selection) || !ComparatorUtils.equals(EastRegionContainerPane.getInstance().getCellAttrPane(), CellElementPropertyPane.getInstance())) { + try { + //旧选中内容编辑器释放模板对象 + this.getCurrentEditor().release(); + } catch (UnsupportedOperationException e) { + FRLogger.getLogger().info("Nothing to release"); + } this.selection = selection; fireSelectionChanged(); } diff --git a/designer/src/com/fr/design/mainframe/InformationCollector.java b/designer/src/com/fr/design/mainframe/InformationCollector.java index 7cc6eb6c44..5b80c2ecd9 100644 --- a/designer/src/com/fr/design/mainframe/InformationCollector.java +++ b/designer/src/com/fr/design/mainframe/InformationCollector.java @@ -344,7 +344,8 @@ public class InformationCollector implements XMLReadable, XMLWriter { } private void sendUserInfoInOtherThread(){ - if (!DesignerEnvManager.getEnvManager().isJoinProductImprove() || !FRContext.isChineseEnv()) { + + if (!DesignerEnvManager.getEnvManager().isJoinProductImprove() || !FRContext.isChineseEnv() || !FRContext.getCurrentEnv().isLocalEnv()) { return; } diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index 82d796a30d..c7996e84f9 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -1,12 +1,25 @@ package com.fr.design.mainframe; -import com.fr.base.*; +import com.fr.base.BaseUtils; +import com.fr.base.DynamicUnitList; +import com.fr.base.FRContext; +import com.fr.base.Parameter; +import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.file.WebPreviewUtils; -import com.fr.design.actions.file.export.*; +import com.fr.design.actions.file.export.CSVExportAction; +import com.fr.design.actions.file.export.EmbeddedExportExportAction; +import com.fr.design.actions.file.export.ExcelExportAction; +import com.fr.design.actions.file.export.PDFExportAction; +import com.fr.design.actions.file.export.PageExcelExportAction; +import com.fr.design.actions.file.export.PageToSheetExcelExportAction; +import com.fr.design.actions.file.export.SVGExportAction; +import com.fr.design.actions.file.export.TextExportAction; +import com.fr.design.actions.file.export.WordExportAction; import com.fr.design.actions.report.ReportExportAttrAction; import com.fr.design.actions.report.ReportMobileAttrAction; import com.fr.design.actions.report.ReportParameterAction; @@ -30,7 +43,11 @@ import com.fr.design.mainframe.cell.QuickEditorRegion; import com.fr.design.mainframe.templateinfo.JWorkBookProcessInfo; import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.menu.*; +import com.fr.design.menu.KeySetUtils; +import com.fr.design.menu.MenuDef; +import com.fr.design.menu.NameSeparator; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; import com.fr.design.module.DesignModuleFactory; import com.fr.design.parameter.ParameterDefinitePane; import com.fr.design.parameter.ParameterInputPane; @@ -62,7 +79,6 @@ import com.fr.poly.PolyDesigner; import com.fr.poly.creator.BlockCreator; import com.fr.privilege.finegrain.WorkSheetPrivilegeControl; import com.fr.report.ReportHelper; -import com.fr.report.elementcase.ElementCase; import com.fr.report.elementcase.TemplateElementCase; import com.fr.report.poly.PolyWorkSheet; import com.fr.report.worksheet.WorkSheet; @@ -73,11 +89,13 @@ import com.fr.stable.module.Module; import com.fr.stable.project.ProjectConstants; import javax.swing.*; -import javax.swing.Icon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileOutputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * JWorkBook used to edit WorkBook. @@ -570,9 +588,11 @@ public class JWorkBook extends JTemplate { * @return 子菜单 */ public ShortCut[] shortcut4FileMenu() { - return (ShortCut[]) ArrayUtils.addAll( - super.shortcut4FileMenu(), - BaseUtils.isAuthorityEditing() || (FRContext.getCurrentEnv() instanceof RemoteEnv) ? new ShortCut[0] : new ShortCut[]{this.createWorkBookExportMenu()} + boolean showWorkBookExportMenu = DesignerMode.isVcsMode() + || BaseUtils.isAuthorityEditing() + || (FRContext.getCurrentEnv() instanceof RemoteEnv); + return (ShortCut[]) ArrayUtils.addAll(super.shortcut4FileMenu(), + showWorkBookExportMenu ? new ShortCut[0] : new ShortCut[]{this.createWorkBookExportMenu()} ); } diff --git a/designer/src/com/fr/design/mainframe/ReportComponentComposite.java b/designer/src/com/fr/design/mainframe/ReportComponentComposite.java index 6d6a9b9fcc..70b75e1576 100644 --- a/designer/src/com/fr/design/mainframe/ReportComponentComposite.java +++ b/designer/src/com/fr/design/mainframe/ReportComponentComposite.java @@ -127,9 +127,8 @@ public class ReportComponentComposite extends JComponent { templateStateList.add(null); } centerCardPane.editingComponet.setSelection(centerCardPane.editingComponet.getDefaultSelectElement()); - if (jSliderContainer != null){ - jSliderContainer.reset(); - } + jSliderContainer=JSliderPane.getInstance(); + jSliderContainer.reset(); } if (centerCardPane.editingComponet.elementCasePane == null) { diff --git a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java index fe7b66aeca..4b288cec28 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java +++ b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java @@ -390,7 +390,6 @@ public class AlphaFineDialog extends UIDialog { */ private void rebuildList(String searchText) { resetContainer(); - if (searchText.startsWith(ADVANCED_SEARCH_MARK)) { if (searchText.startsWith(ACTION_MARK_SHORT) || searchText.startsWith(ACTION_MARK)) { storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length()); @@ -624,6 +623,7 @@ public class AlphaFineDialog extends UIDialog { private void dealWithMoreOrLessResult(int index, MoreModel selectedValue) { if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), selectedValue.getContent())) { selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowLess")); + rebuildShowMoreList(index, selectedValue); } else { selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowAll")); @@ -664,7 +664,9 @@ public class AlphaFineDialog extends UIDialog { searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1); } else if (e.getKeyCode() == KeyEvent.VK_UP) { searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() - 1); - } else escAlphaFineDialog(e); + } else { + escAlphaFineDialog(e); + } } }); @@ -794,14 +796,34 @@ public class AlphaFineDialog extends UIDialog { * @param index * @param selectedValue */ - private void rebuildShowMoreList(int index, MoreModel selectedValue) { - SearchResult moreResult = getMoreResult(selectedValue); + private void rebuildShowMoreList(final int index, final MoreModel selectedValue) { if ((selectedValue).getContent().equals(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"))) { - for (int i = 0; i < moreResult.size(); i++) { - this.searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResult.get(i)); + splitLabel.setIcon(new ImageIcon(getClass().getResource(AlphaFineConstants.IMAGE_URL + "bigloading.gif"))); + if (this.searchWorker != null && !this.searchWorker.isDone()) { + this.searchWorker.cancel(true); + this.searchWorker = null; } + this.searchWorker = new SwingWorker() { + @Override + protected Object doInBackground() throws Exception { + SearchResult moreResults = getMoreResult(selectedValue); + for (int i = 0; i < moreResults.size(); i++) { + searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResults.get(i)); + } + return null; + } + + @Override + protected void done() { + if (!isCancelled()) { + splitLabel.setIcon(null); + } + } + }; + this.searchWorker.execute(); + } else { - for (int i = 0; i < moreResult.size(); i++) { + for (int i = 0; i < getMoreResult(selectedValue).size(); i++) { this.searchListModel.remove(index + AlphaFineConstants.SHOW_SIZE + 1); } diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java index 22f4424c9f..8da604ab13 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java @@ -39,6 +39,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { private static FileSearchManager fileSearchManager = null; private SearchResult filterModelList; private SearchResult lessModelList; + private SearchResult moreModelList; private List fileNodes = null; //停止搜索 private boolean stopSearch = false; @@ -73,6 +74,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { public synchronized SearchResult getLessSearchResult(String searchText) { this.filterModelList = new SearchResult(); this.lessModelList = new SearchResult(); + this.moreModelList = new SearchResult(); searchText = dealWithSearchText(searchText); if (StringUtils.isBlank(searchText) || ComparatorUtils.equals(searchText, DS_NAME)) { lessModelList.add(new MoreModel(Inter.getLocText("FR-Designer_Templates"))); @@ -101,16 +103,20 @@ public class FileSearchManager implements AlphaFineSearchProvider { @Override public SearchResult getMoreSearchResult(String searchText) { + if (moreModelList != null && !moreModelList.isEmpty()) { + return moreModelList; + } this.filterModelList = new SearchResult(); this.lessModelList = new SearchResult(); + this.moreModelList = new SearchResult(); searchText = dealWithSearchText(searchText); Env env = FRContext.getCurrentEnv(); AlphaFineHelper.checkCancel(); isContainCpt = true; isContainFrm = true; doSearch(searchText, false, env); - lessModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size())); - return lessModelList; + moreModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size())); + return moreModelList; } private void doSearch(String searchText, boolean needMore, Env env) { @@ -193,7 +199,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { if (!AlphaFineHelper.getFilterResult().contains(model)) { filterModelList.add(model); } - if (filterModelList.size() > AlphaFineConstants.SHOW_SIZE && needMore) { + if(filterModelList.size() > AlphaFineConstants.SHOW_SIZE && needMore) { stopSearch = true; } isAlreadyContain = true; @@ -272,4 +278,12 @@ public class FileSearchManager implements AlphaFineSearchProvider { public void setContainFrm(boolean containFrm) { isContainFrm = containFrm; } + + public SearchResult getMoreModelList() { + return moreModelList; + } + + public void setMoreModelList(SearchResult moreModelList) { + this.moreModelList = moreModelList; + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java index 2978eee40e..17cd01f584 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java @@ -15,6 +15,8 @@ import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; +import com.fr.plugin.basic.version.Version; +import com.fr.plugin.basic.version.VersionIntervalFactory; import com.fr.stable.StringUtils; import java.io.UnsupportedEncodingException; @@ -37,10 +39,18 @@ public class PluginSearchManager implements AlphaFineSearchProvider { } + private static boolean isCompatibleCurrentEnv(String envVersion){ + return VersionIntervalFactory.create(envVersion).contain(Version.currentEnvVersion()); + } + private static PluginModel getPluginModel(JSONObject object, boolean isFromCloud) { String name = object.optString("name"); String content = object.optString("description"); String pluginId = object.optString("pluginid"); + String envVersion = object.optString("envversion"); + if (!isCompatibleCurrentEnv(envVersion)) { + return null; + } int id = object.optInt("id"); int searchCount = object.optInt("searchCount"); String imageUrl = null; @@ -107,7 +117,7 @@ public class PluginSearchManager implements AlphaFineSearchProvider { for (int i = 0; i < jsonArray.length(); i++) { AlphaFineHelper.checkCancel(); PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false); - if (!AlphaFineHelper.getFilterResult().contains(cellModel)) { + if (cellModel != null && !AlphaFineHelper.getFilterResult().contains(cellModel)) { searchResult.add(cellModel); } } diff --git a/designer/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java b/designer/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java index a56d251a7a..8a3b2ded4d 100644 --- a/designer/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java +++ b/designer/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java @@ -120,4 +120,9 @@ public abstract class AbstractDSCellEditorPane extends JPanel { scrollBar.setBlockIncrement(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP); scrollBar.setBorder(BorderFactory.createMatteBorder(0, CONTENT_PANE_WIDTH_GAP, 0, 0, this.getBackground())); } + + /** + * 释放tc + */ + protected abstract void release(); } diff --git a/designer/src/com/fr/design/module/DesignerModule.java b/designer/src/com/fr/design/module/DesignerModule.java index 1ec15dabb8..c87ef19875 100644 --- a/designer/src/com/fr/design/module/DesignerModule.java +++ b/designer/src/com/fr/design/module/DesignerModule.java @@ -140,23 +140,21 @@ public class DesignerModule extends DesignModule { * kunsnat:注册单元格选中Editor */ private void registerCellEditor() { - - ActionFactory.registerCellEditorClass(String.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditorClass(Number.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditorClass(BaseFormula.class, CellFormulaQuickEditor.class); - ActionFactory.registerCellEditorClass(SubReport.class, CellSubReportEditor.class); - ActionFactory.registerCellEditorClass(RichText.class, CellRichTextEditor.class); - ActionFactory.registerCellEditorClass(DSColumn.class, CellDSColumnEditor.class); - ActionFactory.registerCellEditorClass(Image.class, CellImageQuickEditor.class); - ActionFactory.registerCellEditorClass(BiasTextPainter.class, CellBiasTextPainterEditor.class); - ActionFactory.registerCellEditorClass(BufferedImage.class, CellImageQuickEditor.class); - + ActionFactory.registerCellEditor(String.class, new CellStringQuickEditor()); + ActionFactory.registerCellEditor(Number.class, new CellStringQuickEditor()); + ActionFactory.registerCellEditor(BaseFormula.class, new CellFormulaQuickEditor()); + ActionFactory.registerCellEditor(SubReport.class, new CellSubReportEditor()); + ActionFactory.registerCellEditor(RichText.class, new CellRichTextEditor()); + ActionFactory.registerCellEditor(DSColumn.class, new CellDSColumnEditor()); + ActionFactory.registerCellEditor(Image.class, new CellImageQuickEditor()); + ActionFactory.registerCellEditor(BiasTextPainter.class, new CellBiasTextPainterEditor()); + ActionFactory.registerCellEditor(BufferedImage.class, new CellImageQuickEditor()); + //todo 图表编辑器populate没能实现刷新面板显示 ActionFactory.registerChartCellEditorInEditor(BasicChartQuickEditor.class); - Set providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING); for (ElementUIProvider provider : providers) { try { - ActionFactory.registerCellEditorClass(provider.targetObjectClass(), provider.quickEditor()); + ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor().newInstance()); } catch (Exception e) { FRLogger.getLogger().error(e.getMessage(), e); } @@ -174,11 +172,11 @@ public class DesignerModule extends DesignModule { */ private void registerFloatEditor() { - ActionFactory.registerFloatEditorClass(String.class, FloatStringQuickEditor.class); - ActionFactory.registerFloatEditorClass(Formula.class, FloatStringQuickEditor.class); - ActionFactory.registerFloatEditorClass(Image.class, FloatImageQuickEditor.class); - ActionFactory.registerFloatEditorClass(BufferedImage.class, FloatImageQuickEditor.class); - + ActionFactory.registerFloatEditor(String.class, new FloatStringQuickEditor()); + ActionFactory.registerFloatEditor(Formula.class, new FloatStringQuickEditor()); + ActionFactory.registerFloatEditor(Image.class, new FloatImageQuickEditor()); + ActionFactory.registerFloatEditor(BufferedImage.class, new FloatImageQuickEditor()); + //todo 图表编辑器populate没能实现刷新面板显示 ActionFactory.registerChartFloatEditorInEditor(FloatChartQuickEditor.class); } diff --git a/designer/src/com/fr/design/present/BarCodePane.java b/designer/src/com/fr/design/present/BarCodePane.java index 04a9667860..2c10de3f80 100644 --- a/designer/src/com/fr/design/present/BarCodePane.java +++ b/designer/src/com/fr/design/present/BarCodePane.java @@ -8,7 +8,6 @@ import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBoxRenderer; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.itextfield.UINumberField; import com.fr.design.layout.FRGUIPaneFactory; @@ -22,11 +21,18 @@ import com.fr.report.cell.painter.barcode.BarcodeImpl; import com.fr.report.cell.painter.barcode.core.BarCodeUtils; import com.fr.stable.pinyin.ChineseHelper; -import javax.swing.*; +import javax.swing.JList; +import javax.swing.JPanel; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.font.FontRenderContext; @@ -49,10 +55,10 @@ public class BarCodePane extends FurtherBasicBeanPane { private UIComboBox typeComboBox; private UISpinner barWidthSpinner; private UISpinner barHeightSpinner; - private UISpinner RCodesizespinner; + private UISpinner sizeSpinner; private UICheckBox drawingTextCheckBox; - private UIComboBox RCodeVersionComboBox; - private UIComboBox RCodeErrorCorrectComboBox; + private UIComboBox versionComboBox; + private UIComboBox errorCorrectComboBox; private UILabel typeSetLabel; private String testText = "12345"; @@ -74,9 +80,9 @@ public class BarCodePane extends FurtherBasicBeanPane { borderPane.add(barCodePreviewPane, BorderLayout.CENTER); setTypeComboBox(); setSome(); - RCodesizespinner = new UISpinner(1,6,1,2); - RCodeVersionComboBox = new UIComboBox(); - RCodeErrorCorrectComboBox = new UIComboBox(); + sizeSpinner = new UISpinner(1,6,1,2); + versionComboBox = new UIComboBox(); + errorCorrectComboBox = new UIComboBox(); typeSetLabel = new UILabel(Inter.getLocText("FR-Designer_Type_Set"), UILabel.LEFT); initVersionComboBox(); initErrorCorrectComboBox(); @@ -170,13 +176,13 @@ public class BarCodePane extends FurtherBasicBeanPane { int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; UILabel uiLabel = new UILabel(Inter.getLocText("RCodeVersion"), UILabel.LEFT); uiLabel.setPreferredSize(typeSetLabel.getPreferredSize()); - RCodeVersionComboBox.setPreferredSize(new Dimension(155,20)); - RCodeErrorCorrectComboBox.setPreferredSize(new Dimension(155,20)); - RCodesizespinner.setPreferredSize(new Dimension(155,20)); + versionComboBox.setPreferredSize(new Dimension(155,20)); + errorCorrectComboBox.setPreferredSize(new Dimension(155,20)); + sizeSpinner.setPreferredSize(new Dimension(155,20)); Component[][] components_special = new Component[][]{ - new Component[]{uiLabel, RCodeVersionComboBox}, - new Component[]{new UILabel(Inter.getLocText("RCodeErrorCorrect"), UILabel.LEFT), RCodeErrorCorrectComboBox}, - new Component[]{new UILabel(Inter.getLocText("RCodeDrawPix"), UILabel.LEFT), RCodesizespinner} + new Component[]{uiLabel, versionComboBox}, + new Component[]{new UILabel(Inter.getLocText("RCodeErrorCorrect"), UILabel.LEFT), errorCorrectComboBox}, + new Component[]{new UILabel(Inter.getLocText("RCodeDrawPix"), UILabel.LEFT), sizeSpinner} }; JPanel specialPane = TableLayoutHelper.createGapTableLayoutPane(components_special, rowSize, columnSize, rowCount, LayoutConstants.VGAP_HUGER, LayoutConstants.VGAP_LARGE); @@ -184,17 +190,17 @@ public class BarCodePane extends FurtherBasicBeanPane { } private void addlistener() { - RCodesizespinner.addChangeListener(new ChangeListener() { + sizeSpinner.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { repaintPreviewBarCode(); } }); - RCodeVersionComboBox.addItemListener(new ItemListener() { + versionComboBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { repaintPreviewBarCode(); } }); - RCodeErrorCorrectComboBox.addItemListener(new ItemListener() { + errorCorrectComboBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { repaintPreviewBarCode(); } @@ -227,12 +233,12 @@ public class BarCodePane extends FurtherBasicBeanPane { private void initVersionComboBox() { String[] array = {Inter.getLocText(new String[]{"Auto", "Choose"}), "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"}; - initcombobox(this.RCodeVersionComboBox, array, 0); + initcombobox(this.versionComboBox, array, 0); } private void initErrorCorrectComboBox() { String[] array = {"L" + Inter.getLocText("Level") + "7%", "M" + Inter.getLocText("Level") + "15%", "Q" + Inter.getLocText("Level") + "25%", "H" + Inter.getLocText("Level") + "30%"}; - initcombobox(this.RCodeErrorCorrectComboBox, array, 1); + initcombobox(this.errorCorrectComboBox, array, 1); } private void initcombobox(UIComboBox combobox, String[] array, int index) { @@ -270,10 +276,12 @@ public class BarCodePane extends FurtherBasicBeanPane { } this.setTestText(BarCodeUtils.getTestTextByBarCode(barcodeAttr.getType())); this.typeComboBox.setSelectedIndex(barcodeAttr.getType()); + this.versionComboBox.setSelectedIndex(barcodeAttr.getRCodeVersion()); + this.errorCorrectComboBox.setSelectedIndex(barcodeAttr.getRCodeErrorCorrect()); this.barWidthSpinner.setValue(new Double(barcodeAttr.getBarWidth()) * 10); this.barHeightSpinner.setValue(new Integer(barcodeAttr.getBarHeight())); this.drawingTextCheckBox.setSelected(barcodeAttr.isDrawingText()); - this.RCodesizespinner.setValue(new Integer(barcodeAttr.getRcodeDrawPix())); + this.sizeSpinner.setValue(new Integer(barcodeAttr.getRcodeDrawPix())); this.repaintPreviewBarCode(); } @@ -281,9 +289,9 @@ public class BarCodePane extends FurtherBasicBeanPane { public BarcodePresent updateBean() { BarcodeAttr barcodeAttr = new BarcodeAttr(); if ((typeComboBox.getSelectedIndex() == NUM16)) { - barcodeAttr.setRCodeVersion(this.RCodeVersionComboBox.getSelectedIndex()); - barcodeAttr.setRCodeErrorCorrect(this.RCodeErrorCorrectComboBox.getSelectedIndex()); - barcodeAttr.setRcodeDrawPix((int) this.RCodesizespinner.getValue()); + barcodeAttr.setRCodeVersion(this.versionComboBox.getSelectedIndex()); + barcodeAttr.setRCodeErrorCorrect(this.errorCorrectComboBox.getSelectedIndex()); + barcodeAttr.setRcodeDrawPix((int) this.sizeSpinner.getValue()); } barcodeAttr.setType(this.typeComboBox.getSelectedIndex()); barcodeAttr.setBarWidth(((Double) this.barWidthSpinner.getValue()).doubleValue() / 10); diff --git a/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java b/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java index 6eac1c5710..5aafd01edb 100644 --- a/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java +++ b/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java @@ -16,6 +16,7 @@ import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.general.Inter; import com.fr.grid.selection.CellSelection; +import com.fr.grid.selection.Selection; import com.fr.report.cell.CellElement; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; @@ -29,6 +30,7 @@ import com.fr.stable.Nameable; public class ConditionAttributesGroupPane extends UIListControlPane { private static ConditionAttributesGroupPane singleton; private TemplateCellElement editCellElement; // 当前单元格对象 + private Selection editSelection; // 当前编辑对象 private ElementCasePane ePane; private ConditionAttributesGroupPane() { @@ -52,10 +54,8 @@ public class ConditionAttributesGroupPane extends UIListControlPane { if (isPopulating) { return; } - final CellSelection finalCS = (CellSelection) ePane.getSelection(); final TemplateElementCase tplEC = ePane.getEditingElementCase(); - - ReportActionUtils.actionIterateWithCellSelection(finalCS, tplEC, new ReportActionUtils.IterAction() { + ReportActionUtils.actionIterateWithCellSelection((CellSelection) editSelection, tplEC, new ReportActionUtils.IterAction() { public void dealWith(CellElement editCellElement) { ((TemplateCellElement)editCellElement).setHighlightGroup(updateHighlightGroup()); } @@ -75,6 +75,7 @@ public class ConditionAttributesGroupPane extends UIListControlPane { public void populate(ElementCasePane ePane) { this.ePane = ePane; + this.editSelection = ePane.getSelection(); CellSelection cs = (CellSelection) ePane.getSelection(); final TemplateElementCase tplEC = ePane.getEditingElementCase(); editCellElement = tplEC.getTemplateCellElement(cs.getColumn(), cs.getRow()); diff --git a/designer/src/com/fr/design/report/package.html b/designer/src/com/fr/design/report/package.html new file mode 100644 index 0000000000..c956ed1f36 --- /dev/null +++ b/designer/src/com/fr/design/report/package.html @@ -0,0 +1,5 @@ + + +包含制作模版过程中可能用到的各种面板(如页面设置、富文本编辑、Excel导出、移动端自适应等) + + \ No newline at end of file diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index 938fd4509b..a8ebd932fc 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -34,13 +34,12 @@ import com.fr.report.web.button.Export; import com.fr.report.web.button.PDFPrint; import com.fr.report.web.button.Print; import com.fr.report.web.button.write.AppendColumnRow; +import com.fr.report.web.button.write.ExcelImport; import com.fr.report.web.button.write.Submit; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; @@ -52,488 +51,512 @@ import java.util.Set; public class EditToolBar extends BasicPane { - private JWorkBook jwb; - private JList list; - private DefaultListModel listModel; - private JPanel right; - private CardLayout card; - private ButtonPane bp; - private ToolBarButton lastButton; - private Background background = null; - private UICheckBox defaultCheckBox; - - private ListSelectionListener listSelectionListener = new ListSelectionListener() { - public void valueChanged(ListSelectionEvent evt) { - if (lastButton != null) { - lastButton.setWidget(bp.update()); - } - if (list.getSelectedValue() instanceof ToolBarButton) { - lastButton = (ToolBarButton) list.getSelectedValue(); - if (lastButton.getWidget() instanceof Button) { - card.show(right, "button"); - bp.populate(lastButton.getWidget()); - } else { - bp.populate(lastButton.getWidget()); - card.show(right, "none"); - } - } - } - }; - - - private ActionListener actioner = new ActionListener() { - /** - * - */ - public void actionPerformed(ActionEvent arg0) { - final BackgroundPane backgroundPane = new BackgroundPane(); - BasicDialog dialog = backgroundPane.showWindow(DesignerContext.getDesignerFrame()); - backgroundPane.populate(EditToolBar.this.background); - dialog.addDialogActionListener(new DialogActionAdapter() { - public void doOk() { - EditToolBar.this.background = backgroundPane.update(); - if (EditToolBar.this.background != null) { - EditToolBar.this.defaultCheckBox.setSelected(false); - } - } - }); - dialog.setVisible(true); - } - }; - - public EditToolBar() { - initComponent(); - } - - /** - * 初始化 - */ - public void initComponent() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel left = FRGUIPaneFactory.createBorderLayout_S_Pane(); - listModel = new DefaultListModel(); - list = new JList(listModel); - list.setCellRenderer(render); - left.add(new JScrollPane(list), BorderLayout.CENTER); - if (listModel.getSize() > 0) { - list.setSelectedIndex(0); - } - - ToolBarDef toolbarDef = new ToolBarDef(); - toolbarDef.addShortCut(new MoveUpItemAction()); - toolbarDef.addShortCut(new MoveDownItemAction()); - toolbarDef.addShortCut(new RemoveAction()); - UIToolbar toolBar = ToolBarDef.createJToolBar(); - toolbarDef.updateToolBar(toolBar); - left.add(toolBar, BorderLayout.NORTH); - - right = FRGUIPaneFactory.createCardLayout_S_Pane(); - card = new CardLayout(); - right.setLayout(card); - bp = new ButtonPane(); - right.add("none", FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane()); - right.add("button", bp); - - JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, left, right); - // splitPane.setDividerLocation(left.getMinimumSize().width); - splitPane.setDividerLocation(120); - this.add(splitPane); - list.addListSelectionListener(listSelectionListener); - JPanel backgroundPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - UIButton bgButton = new UIButton(Inter.getLocText(new String[]{"Background", "Set"})); - defaultCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Default", "Background"})); - bgButton.addActionListener(actioner); - backgroundPane.add(defaultCheckBox); - backgroundPane.add(bgButton); - backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Background", "Set"}))); - this.add(backgroundPane, BorderLayout.SOUTH); - } - - ListCellRenderer render = new DefaultListCellRenderer() { - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - - if (value instanceof ToolBarButton) { - ToolBarButton button = (ToolBarButton) value; - this.setText(button.getNameOption().optionName()); - this.setIcon(button.getNameOption().optionIcon()); - } - return this; - } - }; - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("FR-Designer_Edit"); - } - - public void populate(FToolBar ftoolbar) { - this.populate(ftoolbar, null); - } - - public void populate(FToolBar ftoolbar, ToolBarButton button) { - if (ftoolbar == null) { - return; - } - for (int i = 0; i < ftoolbar.getButtonlist().size(); i++) { - listModel.addElement(ftoolbar.getButtonlist().get(i)); - } - this.list.validate(); - this.list.repaint(); - if (ftoolbar.getButtonlist().size() > 0) { - this.list.setSelectedIndex(0); - } - if (button != null) { - this.list.setSelectedValue(button, true); - } - this.background = ftoolbar.getBackground(); - - this.defaultCheckBox.setSelected(ftoolbar.isDefault() ? true : false); - } - - public FToolBar update() { - if (this.list.getSelectedIndex() > -1) { - for (int i = 0; i < listModel.getSize(); i++) { - this.list.setSelectedIndex(i); - ToolBarButton toolBarButton = (ToolBarButton) this.list.getSelectedValue(); - Widget widget = this.bp.update(); - toolBarButton.setWidget(widget); - if (widget instanceof Button) { - String iconname = ((Button) widget).getIconName(); - if (StringUtils.isNotBlank(iconname)) { - Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname); - toolBarButton.setIcon(new ImageIcon(iimage)); - } - } - } - } - List list = new ArrayList(); - for (int i = 0; i < listModel.size(); i++) { - list.add((ToolBarButton) listModel.get(i)); - } - FToolBar ftoolBar = new FToolBar(); - ftoolBar.setButtonlist(list); - - ftoolBar.setDefault(this.defaultCheckBox.isSelected()); - if (!ftoolBar.isDefault()) { - ftoolBar.setBackground(this.background); - } - return ftoolBar; - } - - private class MoveUpItemAction extends UpdateAction { - public MoveUpItemAction() { - this.setName(Inter.getLocText("Utils-Move_Up")); - this.setMnemonic('U'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); - } - - /** - * - */ - public void actionPerformed(ActionEvent evt) { - int selectedIndex = list.getSelectedIndex(); - if (selectedIndex == -1) { - return; - } - - // 上移 - if (selectedIndex > 0) { - DefaultListModel listModel = (DefaultListModel) list.getModel(); - - Object selecteObj1 = listModel.get(selectedIndex - 1); - listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); - listModel.set(selectedIndex, selecteObj1); - - list.setSelectedIndex(selectedIndex - 1); - list.ensureIndexIsVisible(selectedIndex - 1); - list.validate(); - } - } - } - - private class MoveDownItemAction extends UpdateAction { - public MoveDownItemAction() { - this.setName(Inter.getLocText("Utils-Move_Down")); - this.setMnemonic('D'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); - } - - /** - * - */ - public void actionPerformed(ActionEvent evt) { - int selectedIndex = list.getSelectedIndex(); - if (selectedIndex == -1) { - return; - } - - // 下移 - if (selectedIndex == -1) { - return; - } - - if (selectedIndex < list.getModel().getSize() - 1) { - DefaultListModel listModel = (DefaultListModel) list.getModel(); - - Object selecteObj1 = listModel.get(selectedIndex + 1); - listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); - listModel.set(selectedIndex, selecteObj1); - - list.setSelectedIndex(selectedIndex + 1); - list.ensureIndexIsVisible(selectedIndex + 1); - list.validate(); - } - } - } - - public class RemoveAction extends UpdateAction { - public RemoveAction() { - this.setName(Inter.getLocText("FR-Designer_Delete")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); - } - - /** - * 动作 - * @param e 事件 - */ - public void actionPerformed(ActionEvent e) { - int i = list.getSelectedIndex(); - if (i < 0 || !(listModel.getElementAt(i) instanceof ToolBarButton)) { - return; - } - int val = JOptionPane.showConfirmDialog(EditToolBar.this, Inter.getLocText("FR-Designer_Are_You_Sure_To_Delete_The_Data") + "?", "Message", JOptionPane.YES_NO_OPTION); - if (val != JOptionPane.YES_OPTION) { - return; - } - listModel.removeElementAt(i); - list.validate(); - if (listModel.size() > 0) { - list.setSelectedIndex(0); - } else { - card.show(right, "none"); - } - } - } - - public class ButtonPane extends BasicPane { - private CardLayout card; - private JPanel centerPane; - private UICheckBox icon, text, pdf, excelP, excelO, excelS, image, word, - flashPrint, pdfPrint, appletPrint, serverPrint, isPopup, isVerify, failSubmit, isCurSheet; - private UIBasicSpinner count; - private Widget widget; - private UITextField nameField; - private IconDefinePane iconPane; - private UIButton button; - private JavaScriptActionPane javaScriptPane; - private ExportToolBarProvider[] exportToolBarProviders; - - private ActionListener actionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (isVerify.isSelected()) { - failSubmit.setVisible(true); - } else { - failSubmit.setVisible(false); - failSubmit.setSelected(false); - } - } - }; - - public ButtonPane() { - this.initComponents(); - } - - /** - * 初始化元素 - */ - public void initComponents() { - Set set = ExtraDesignClassManager.getInstance().getArray(ExportToolBarProvider.XML_TAG); - exportToolBarProviders = set.toArray(new ExportToolBarProvider[set.size()]); - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); - icon = new UICheckBox(Inter.getLocText("FR-Designer_Show_Icon")); - text = new UICheckBox(Inter.getLocText("FR-Designer_Show_Text")); - - north.add(icon, BorderLayout.NORTH); - north.add(text, BorderLayout.CENTER); - - nameField = new UITextField(8); - iconPane = new IconDefinePane(); - javaScriptPane = JavaScriptActionPane.createDefault(); - - double p = TableLayout.PREFERRED; - double rowSize[] = {p, p}; - double columnSize[] = {p, p}; - - Component[][] coms = new Component[][]{{new UILabel(Inter.getLocText(new String[]{"Widget", "Printer-Alias"}) + ":"), nameField}, {new UILabel(Inter.getLocText(new String[]{"Widget", "Icon"}) + ":"), iconPane}}; - - JPanel nameIconPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize); - - north.add(nameIconPane, BorderLayout.SOUTH); - - north.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Form-Button", "Property", "Set"}))); - this.add(north, BorderLayout.NORTH); - JPanel none = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - card = new CardLayout(); - centerPane.setLayout(card); - centerPane.add("custom", getCustomPane()); - centerPane.add("export", getExport()); - centerPane.add("print", getPrint()); - centerPane.add("none", none); - centerPane.add("pdfprint", getPdfPrintSetting()); - // centerPane.add("editexcel", editExcel); - centerPane.add(getCpane(), "appendcount"); - centerPane.add(getSubmitPane(), "submit"); + private JWorkBook jwb; + private JList list; + private DefaultListModel listModel; + private JPanel right; + private CardLayout card; + private ButtonPane bp; + private ToolBarButton lastButton; + private Background background = null; + private UICheckBox defaultCheckBox; + + private ListSelectionListener listSelectionListener = new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + if (lastButton != null) { + lastButton.setWidget(bp.update()); + } + if (list.getSelectedValue() instanceof ToolBarButton) { + lastButton = (ToolBarButton) list.getSelectedValue(); + if (lastButton.getWidget() instanceof Button) { + card.show(right, "button"); + bp.populate(lastButton.getWidget()); + } else { + bp.populate(lastButton.getWidget()); + card.show(right, "none"); + } + } + } + }; + + + private ActionListener actioner = new ActionListener() { + /** + * + */ + public void actionPerformed(ActionEvent arg0) { + final BackgroundPane backgroundPane = new BackgroundPane(); + BasicDialog dialog = backgroundPane.showWindow(DesignerContext.getDesignerFrame()); + backgroundPane.populate(EditToolBar.this.background); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + EditToolBar.this.background = backgroundPane.update(); + if (EditToolBar.this.background != null) { + EditToolBar.this.defaultCheckBox.setSelected(false); + } + } + }); + dialog.setVisible(true); + } + }; + + public EditToolBar() { + initComponent(); + } + + /** + * 初始化 + */ + public void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel left = FRGUIPaneFactory.createBorderLayout_S_Pane(); + listModel = new DefaultListModel(); + list = new JList(listModel); + list.setCellRenderer(render); + left.add(new JScrollPane(list), BorderLayout.CENTER); + if (listModel.getSize() > 0) { + list.setSelectedIndex(0); + } + + ToolBarDef toolbarDef = new ToolBarDef(); + toolbarDef.addShortCut(new MoveUpItemAction()); + toolbarDef.addShortCut(new MoveDownItemAction()); + toolbarDef.addShortCut(new RemoveAction()); + UIToolbar toolBar = ToolBarDef.createJToolBar(); + toolbarDef.updateToolBar(toolBar); + left.add(toolBar, BorderLayout.NORTH); + + right = FRGUIPaneFactory.createCardLayout_S_Pane(); + card = new CardLayout(); + right.setLayout(card); + bp = new ButtonPane(); + right.add("none", FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane()); + right.add("button", bp); + + JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, left, right); + // splitPane.setDividerLocation(left.getMinimumSize().width); + splitPane.setDividerLocation(120); + this.add(splitPane); + list.addListSelectionListener(listSelectionListener); + JPanel backgroundPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + UIButton bgButton = new UIButton(Inter.getLocText(new String[]{"Background", "Set"})); + defaultCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Default", "Background"})); + bgButton.addActionListener(actioner); + backgroundPane.add(defaultCheckBox); + backgroundPane.add(bgButton); + backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Background", "Set"}))); + this.add(backgroundPane, BorderLayout.SOUTH); + } + + ListCellRenderer render = new DefaultListCellRenderer() { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + + if (value instanceof ToolBarButton) { + ToolBarButton button = (ToolBarButton) value; + this.setText(button.getNameOption().optionName()); + this.setIcon(button.getNameOption().optionIcon()); + } + return this; + } + }; + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Edit"); + } + + public void populate(FToolBar ftoolbar) { + this.populate(ftoolbar, null); + } + + public void populate(FToolBar ftoolbar, ToolBarButton button) { + if (ftoolbar == null) { + return; + } + for (int i = 0; i < ftoolbar.getButtonlist().size(); i++) { + listModel.addElement(ftoolbar.getButtonlist().get(i)); + } + this.list.validate(); + this.list.repaint(); + if (ftoolbar.getButtonlist().size() > 0) { + this.list.setSelectedIndex(0); + } + if (button != null) { + this.list.setSelectedValue(button, true); + } + this.background = ftoolbar.getBackground(); + + this.defaultCheckBox.setSelected(ftoolbar.isDefault() ? true : false); + } + + public FToolBar update() { + if (this.list.getSelectedIndex() > -1) { + for (int i = 0; i < listModel.getSize(); i++) { + this.list.setSelectedIndex(i); + ToolBarButton toolBarButton = (ToolBarButton) this.list.getSelectedValue(); + Widget widget = this.bp.update(); + toolBarButton.setWidget(widget); + if (widget instanceof Button) { + String iconname = ((Button) widget).getIconName(); + if (StringUtils.isNotBlank(iconname)) { + Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname); + toolBarButton.setIcon(new ImageIcon(iimage)); + } + } + } + } + List list = new ArrayList(); + for (int i = 0; i < listModel.size(); i++) { + list.add((ToolBarButton) listModel.get(i)); + } + FToolBar ftoolBar = new FToolBar(); + ftoolBar.setButtonlist(list); + + ftoolBar.setDefault(this.defaultCheckBox.isSelected()); + if (!ftoolBar.isDefault()) { + ftoolBar.setBackground(this.background); + } + return ftoolBar; + } + + private class MoveUpItemAction extends UpdateAction { + public MoveUpItemAction() { + this.setName(Inter.getLocText("Utils-Move_Up")); + this.setMnemonic('U'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + } + + /** + * + */ + public void actionPerformed(ActionEvent evt) { + int selectedIndex = list.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 上移 + if (selectedIndex > 0) { + DefaultListModel listModel = (DefaultListModel) list.getModel(); + + Object selecteObj1 = listModel.get(selectedIndex - 1); + listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + list.setSelectedIndex(selectedIndex - 1); + list.ensureIndexIsVisible(selectedIndex - 1); + list.validate(); + } + } + } + + private class MoveDownItemAction extends UpdateAction { + public MoveDownItemAction() { + this.setName(Inter.getLocText("Utils-Move_Down")); + this.setMnemonic('D'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + } + + /** + * + */ + public void actionPerformed(ActionEvent evt) { + int selectedIndex = list.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 下移 + if (selectedIndex == -1) { + return; + } + + if (selectedIndex < list.getModel().getSize() - 1) { + DefaultListModel listModel = (DefaultListModel) list.getModel(); + + Object selecteObj1 = listModel.get(selectedIndex + 1); + listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + list.setSelectedIndex(selectedIndex + 1); + list.ensureIndexIsVisible(selectedIndex + 1); + list.validate(); + } + } + } + + public class RemoveAction extends UpdateAction { + public RemoveAction() { + this.setName(Inter.getLocText("FR-Designer_Delete")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); + } + + /** + * 动作 + * + * @param e 事件 + */ + public void actionPerformed(ActionEvent e) { + int i = list.getSelectedIndex(); + if (i < 0 || !(listModel.getElementAt(i) instanceof ToolBarButton)) { + return; + } + int val = JOptionPane.showConfirmDialog(EditToolBar.this, Inter.getLocText("FR-Designer_Are_You_Sure_To_Delete_The_Data") + "?", "Message", JOptionPane.YES_NO_OPTION); + if (val != JOptionPane.YES_OPTION) { + return; + } + listModel.removeElementAt(i); + list.validate(); + if (listModel.size() > 0) { + list.setSelectedIndex(0); + } else { + card.show(right, "none"); + } + } + } + + public class ButtonPane extends BasicPane { + private CardLayout card; + private JPanel centerPane; + private UICheckBox icon, text, pdf, excelP, excelO, excelS, image, word, + flashPrint, pdfPrint, appletPrint, serverPrint, isPopup, isVerify, failSubmit, + isCurSheet, excelImClean, excelImCover, excelImAppend, excelImCust; + private UIBasicSpinner count; + private Widget widget; + private UITextField nameField; + private IconDefinePane iconPane; + private UIButton button; + private JavaScriptActionPane javaScriptPane; + private ExportToolBarProvider[] exportToolBarProviders; + + private ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (isVerify.isSelected()) { + failSubmit.setVisible(true); + } else { + failSubmit.setVisible(false); + failSubmit.setSelected(false); + } + } + }; + + public ButtonPane() { + this.initComponents(); + } + + /** + * 初始化元素 + */ + public void initComponents() { + Set set = ExtraDesignClassManager.getInstance().getArray(ExportToolBarProvider.XML_TAG); + exportToolBarProviders = set.toArray(new ExportToolBarProvider[set.size()]); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); + icon = new UICheckBox(Inter.getLocText("FR-Designer_Show_Icon")); + text = new UICheckBox(Inter.getLocText("FR-Designer_Show_Text")); + + north.add(icon, BorderLayout.NORTH); + north.add(text, BorderLayout.CENTER); + + nameField = new UITextField(8); + iconPane = new IconDefinePane(); + javaScriptPane = JavaScriptActionPane.createDefault(); + + double p = TableLayout.PREFERRED; + double rowSize[] = {p, p}; + double columnSize[] = {p, p}; + + Component[][] coms = new Component[][]{{new UILabel(Inter.getLocText(new String[]{"Widget", "Printer-Alias"}) + ":"), nameField}, {new UILabel(Inter.getLocText(new String[]{"Widget", "Icon"}) + ":"), iconPane}}; + + JPanel nameIconPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize); + + north.add(nameIconPane, BorderLayout.SOUTH); + + north.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Form-Button", "Property", "Set"}))); + this.add(north, BorderLayout.NORTH); + JPanel none = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + card = new CardLayout(); + centerPane.setLayout(card); + centerPane.add("custom", getCustomPane()); + centerPane.add("export", getExport()); + centerPane.add("import", getImport()); + centerPane.add("print", getPrint()); + centerPane.add("none", none); + centerPane.add("pdfprint", getPdfPrintSetting()); + // centerPane.add("editexcel", editExcel); + centerPane.add(getCpane(), "appendcount"); + centerPane.add(getSubmitPane(), "submit"); Set extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); for (ExtraButtonToolBarProvider provider : extraButtonSet) { provider.updateCenterPane(centerPane); } - this.add(centerPane, BorderLayout.CENTER); - } - - - private JPanel getCustomPane() { - JPanel customPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); - - button = new UIButton(Inter.getLocText("FR-Designer_User_Defined_Event")); - customPane.add(button); - customPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Edit") + "JS", null)); - button.addActionListener(l); - return customPane; - } - - private JPanel getExport() { - JPanel export = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); - // export.setLayout(new BoxLayout(export, BoxLayout.Y_AXIS)); - pdf = new UICheckBox(Inter.getLocText("FR-Designer_Output_PDF")); - excelP = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Page")); - excelO = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Simple")); - excelS = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Sheet")); - word = new UICheckBox(Inter.getLocText("FR-Designer_Output_Word")); - image = new UICheckBox(Inter.getLocText("FR-Designer_Image")); - export.add(pdf); - export.add(Box.createVerticalStrut(2)); - export.add(excelP); - export.add(Box.createVerticalStrut(2)); - export.add(excelO); - export.add(Box.createVerticalStrut(2)); - export.add(excelS); - export.add(Box.createVerticalStrut(2)); - export.add(word); - export.add(Box.createVerticalStrut(2)); - export.add(image); - for(int i=0; i extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); for (ExtraButtonToolBarProvider provider : extraButtonSet) { @@ -541,137 +564,157 @@ public class EditToolBar extends BasicPane { } } - private void populateAppendColumnRow(){ - card.show(centerPane, "appendcount"); - count.setValue(((AppendColumnRow) widget).getCount()); - } - - private void populateExport(){ - card.show(centerPane, "export"); - Export export = (Export) widget; - this.pdf.setSelected(export.isPdfAvailable()); - this.excelP.setSelected(export.isExcelPAvailable()); - this.excelO.setSelected(export.isExcelOAvailable()); - this.excelS.setSelected(export.isExcelSAvailable()); - this.word.setSelected(export.isWordAvailable()); - this.image.setSelected(export.isImageAvailable()); - if(exportToolBarProviders != null){ - for(int i=0; i extraButtonSet = ExtraDesignClassManager.getInstance().getArray(ExtraButtonToolBarProvider.XML_TAG); for (ExtraButtonToolBarProvider provider : extraButtonSet) { provider.update(widget); } - return widget; - } - - private void updateDefault(){ - ((Button) widget).setShowIcon(this.icon.isSelected()); - ((Button) widget).setShowText(this.text.isSelected()); - ((Button) widget).setText(this.nameField.getText()); - ((Button) widget).setIconName(this.iconPane.update()); - } - - private void updateSubmit(){ - Submit submit = ((Submit) widget); - submit.setVerify(this.isVerify.isSelected()); - submit.setFailVerifySubmit(this.failSubmit.isSelected()); - submit.setOnlySubmitSelect(this.isCurSheet.isSelected()); - } - - private void updatePrint(){ - Print print = (Print) widget; - print.setAppletPrint(this.appletPrint.isSelected()); - print.setFlashPrint(this.flashPrint.isSelected()); - print.setPDFPrint(this.pdfPrint.isSelected()); - print.setServerPrint(this.serverPrint.isSelected()); - } - - private void updateExport(){ - Export export = (Export) widget; - export.setPdfAvailable(this.pdf.isSelected()); - export.setExcelPAvailable(this.excelP.isSelected()); - export.setExcelOAvailable(this.excelO.isSelected()); - export.setExcelSAvailable(this.excelS.isSelected()); - export.setWordAvailable(this.word.isSelected()); - export.setImageAvailable(this.image.isSelected()); - if(exportToolBarProviders != null){ - for(int i=0; i + +模版web属性相关界面 + + \ No newline at end of file diff --git a/designer/src/com/fr/design/widget/package.html b/designer/src/com/fr/design/widget/package.html new file mode 100644 index 0000000000..8142e0c77c --- /dev/null +++ b/designer/src/com/fr/design/widget/package.html @@ -0,0 +1,5 @@ + + +控件设置相关面板 + + \ No newline at end of file diff --git a/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java b/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java index 3dfea6c15b..8990170030 100644 --- a/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java +++ b/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java @@ -68,7 +68,7 @@ public class SubmitVisitorListPane extends ObjectJControlPane { return; } - List nameObjectList = new ArrayList<>(); + List nameObjectList = new ArrayList(); int submiterCount = reportWriteAttr.getSubmitVisitorCount(); for (int i = 0; i < submiterCount; i++) { @@ -169,8 +169,8 @@ public class SubmitVisitorListPane extends ObjectJControlPane { public CustomPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); customCardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - customSubmitPanes = new HashMap<>(); - comboItemsMap = new HashMap<>(); + customSubmitPanes = new HashMap(); + comboItemsMap = new HashMap(); Set providers = ExtraDesignClassManager.getInstance().getArray(SubmitProvider.MARK_STRING); addSubmitPane(new DefaultSubmit()); @@ -178,7 +178,7 @@ public class SubmitVisitorListPane extends ObjectJControlPane { addSubmitPane(provider); } - configTypes = new ArrayList<>(); + configTypes = new ArrayList(); for (Map.Entry entry : customSubmitPanes.entrySet()) { String key = entry.getKey(); configTypes.add(comboItemsMap.get(key)); diff --git a/designer/src/com/fr/grid/event/package.html b/designer/src/com/fr/grid/event/package.html index d15343f20c..ebef1b8a03 100644 --- a/designer/src/com/fr/grid/event/package.html +++ b/designer/src/com/fr/grid/event/package.html @@ -1,6 +1,5 @@ - - +这个包中定义了监听单元格变化的接口和类. \ No newline at end of file diff --git a/designer/src/com/fr/grid/package.html b/designer/src/com/fr/grid/package.html new file mode 100644 index 0000000000..16f8010a5c --- /dev/null +++ b/designer/src/com/fr/grid/package.html @@ -0,0 +1,5 @@ + + +表格相关 + + \ No newline at end of file diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index c501efd265..3201c44344 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/designer/src/com/fr/grid/selection/CellSelection.java @@ -49,8 +49,9 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.unit.FU; -import javax.swing.*; -import java.awt.*; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import java.awt.Rectangle; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -114,6 +115,7 @@ public class CellSelection extends Selection { /** * 增加选中的区域 + * * @param cellRectangle 区域 */ public void addCellRectangle(Rectangle cellRectangle) { @@ -164,6 +166,7 @@ public class CellSelection extends Selection { /** * 清除区域块 + * * @param i 区域块 */ public void clearCellRectangles(int i) { @@ -172,8 +175,9 @@ public class CellSelection extends Selection { /** * 包含单元格 - * @param column 列 - * @param row 行 + * + * @param column 列 + * @param row 行 * @return 若不包含返回-1 */ public int containsCell(int column, int row) { @@ -205,6 +209,7 @@ public class CellSelection extends Selection { /** * 转换成矩形 + * * @return 矩形 */ public Rectangle toRectangle() { @@ -213,6 +218,7 @@ public class CellSelection extends Selection { /** * 是否选择一个单元格 + * * @param ePane 区域 * @return 是则返回rue */ @@ -239,8 +245,9 @@ public class CellSelection extends Selection { /** * 作为可传输的 + * * @param transferable 传输介质 - * @param ePane 区域 + * @param ePane 区域 */ public void asTransferable(ElementsTransferable transferable, ElementCasePane ePane) { java.util.List list = new java.util.ArrayList(); @@ -251,12 +258,12 @@ public class CellSelection extends Selection { TemplateCellElement cellElement = (TemplateCellElement) cells.next(); list.add((TemplateCellElement) cellElement.deriveCellElement(cellElement.getColumn() - column, cellElement.getRow() - row)); } - FU [] columnWidth = new FU[columnSpan]; - FU [] rowHeight = new FU[rowSpan]; - for (int i = 0; i < columnSpan; i++){ + FU[] columnWidth = new FU[columnSpan]; + FU[] rowHeight = new FU[rowSpan]; + for (int i = 0; i < columnSpan; i++) { columnWidth[i] = ec.getColumnWidth(this.column + i); } - for (int j = 0; j < rowSpan; j++){ + for (int j = 0; j < rowSpan; j++) { rowHeight[j] = ec.getRowHeight(this.row + j); } transferable.addObject(new CellElementsClip(this.columnSpan, this.rowSpan, columnWidth, rowHeight, list.toArray(new TemplateCellElement[list.size()]))); @@ -264,9 +271,10 @@ public class CellSelection extends Selection { /** * 黏贴单元格 + * * @param ceClip 单元格 - * @param ePane 区域 - * @return 成功返回true + * @param ePane 区域 + * @return 成功返回true */ @Override public boolean pasteCellElementsClip(CellElementsClip ceClip, ElementCasePane ePane) { @@ -281,8 +289,9 @@ public class CellSelection extends Selection { /** * 黏贴字符串 - * @param str 字符串 - * @param ePane 区域 + * + * @param str 字符串 + * @param ePane 区域 * @return 成功返回true */ @Override @@ -329,7 +338,8 @@ public class CellSelection extends Selection { /** * 黏贴其他 - * @param ob 要黏贴的东西 + * + * @param ob 要黏贴的东西 * @param ePane 区域 * @return 成功返回true */ @@ -352,6 +362,7 @@ public class CellSelection extends Selection { /** * 是否能合并单元格 + * * @param ePane 区域 * @return 是则返回true */ @@ -363,6 +374,7 @@ public class CellSelection extends Selection { /** * 合并单元格 + * * @param ePane 区域 * @return 成功返回true */ @@ -386,6 +398,7 @@ public class CellSelection extends Selection { /** * 是否撤销合并单元格 + * * @param ePane 区域 * @return 是则返回true */ @@ -407,6 +420,7 @@ public class CellSelection extends Selection { /** * 撤销合并单元格 + * * @param ePane 区域 * @return 成功返回true */ @@ -443,6 +457,7 @@ public class CellSelection extends Selection { /** * 创建弹出菜单 + * * @param ePane 区域 * @return 菜单 */ @@ -477,7 +492,7 @@ public class CellSelection extends Selection { popup.add(DeprecatedActionManager.getPresentMenu(ePane).createJMenu()); popup.add(new CellAttributeAction().createMenuItem()); JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (jTemplate.isJWorkBook()){ //表单中报表块编辑屏蔽掉 控件设置 + if (jTemplate.isJWorkBook()) { //表单中报表块编辑屏蔽掉 控件设置 popup.add(new CellWidgetAttrAction().createMenuItem()); } popup.add(new ConditionAttributesAction().createMenuItem()); @@ -497,8 +512,9 @@ public class CellSelection extends Selection { /** * 清除 - * @param type 要清除的类型 - * @param ePane 区域 + * + * @param type 要清除的类型 + * @param ePane 区域 * @return 成功返回true */ @Override @@ -581,6 +597,7 @@ public class CellSelection extends Selection { /** * 向左移动 + * * @param ePane 区域 */ public void moveLeft(ElementCasePane ePane) { @@ -592,6 +609,7 @@ public class CellSelection extends Selection { /** * 向右移动 + * * @param ePane 区域 */ public void moveRight(ElementCasePane ePane) { @@ -600,6 +618,7 @@ public class CellSelection extends Selection { /** * 向上移动 + * * @param ePane 区域 */ public void moveUp(ElementCasePane ePane) { @@ -611,6 +630,7 @@ public class CellSelection extends Selection { /** * 向下移动 + * * @param ePane 区域 */ public void moveDown(ElementCasePane ePane) { @@ -626,6 +646,7 @@ public class CellSelection extends Selection { /** * 触发删除动作 + * * @param ePane 区域 * @return 成功返回true */ @@ -657,6 +678,7 @@ public class CellSelection extends Selection { /** * 包含行列 + * * @param cr 行列 * @return 包含返回true */ @@ -716,7 +738,7 @@ public class CellSelection extends Selection { CellElementPropertyPane.getInstance().reInit(ePane); } - public void populateWidgetPropertyPane(ElementCasePane ePane){ + public void populateWidgetPropertyPane(ElementCasePane ePane) { CellWidgetPropertyPane.getInstance().reInit(ePane); } diff --git a/designer/src/com/fr/grid/selection/package.html b/designer/src/com/fr/grid/selection/package.html new file mode 100644 index 0000000000..15eaca8aea --- /dev/null +++ b/designer/src/com/fr/grid/selection/package.html @@ -0,0 +1,5 @@ + + +定义了表格的选择模型 + + \ No newline at end of file diff --git a/designer/src/com/fr/poly/package.html b/designer/src/com/fr/poly/package.html new file mode 100644 index 0000000000..ddfd9937f4 --- /dev/null +++ b/designer/src/com/fr/poly/package.html @@ -0,0 +1,5 @@ + + +聚合报表的设计器、控件、事件处理等 + + \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/FloatQuickEditor.java b/designer/src/com/fr/quickeditor/FloatQuickEditor.java index 6a9fa1475f..db24065a39 100644 --- a/designer/src/com/fr/quickeditor/FloatQuickEditor.java +++ b/designer/src/com/fr/quickeditor/FloatQuickEditor.java @@ -1,24 +1,32 @@ package com.fr.quickeditor; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.selection.QuickEditor; import com.fr.grid.selection.FloatSelection; import com.fr.report.cell.FloatElement; -import com.fr.design.selection.QuickEditor; /** - * * @author zhou * @since 2012-7-23下午5:17:23 */ public abstract class FloatQuickEditor extends QuickEditor { - protected FloatElement floatElement; + protected FloatElement floatElement; + + @Override + protected void refresh() { + FloatSelection fs = (FloatSelection) tc.getSelection(); + floatElement = tc.getEditingElementCase().getFloatElement(fs.getSelectedFloatName()); + refreshDetails(); + } - @Override - protected void refresh() { - FloatSelection fs = (FloatSelection)tc.getSelection(); - floatElement = tc.getEditingElementCase().getFloatElement(fs.getSelectedFloatName()); - refreshDetails(); - } + /** + * 刷新详细信息 + */ + protected abstract void refreshDetails(); - protected abstract void refreshDetails(); + @Override + public void release() { + super.release(); + floatElement = null; + } } \ 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 1ae401bc5e..ea872d01cf 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -141,17 +141,6 @@ public class CellDSColumnEditor extends CellQuickEditor { } - /** - * 关闭时候释放 - */ - @Override - public void release() { - super.release(); - dsColumnRegion = null; - centerPane = null; - } - - /** * 初始化基本和高级设置切换tab */ @@ -187,6 +176,12 @@ public class CellDSColumnEditor extends CellQuickEditor { paneList.add(cellDSColumnAdvancedPane); } + @Override + public void release() { + super.release(); + cellDSColumnBasicPane.release(); + cellDSColumnAdvancedPane.release(); + } /** * 单元格元素 数据列 高级设置内容面板 @@ -252,7 +247,7 @@ public class CellDSColumnEditor extends CellQuickEditor { }; DSColumnBasicEditorPane() { - dataPane = new SelectedDataColumnPane(true, true, tc, cellElement); + dataPane = new SelectedDataColumnPane(true, true, cellElement); groupPane = new ResultSetGroupDockingPane(); dataPane.addListener(dataListener); groupPane.setListener(groupListener); @@ -297,13 +292,19 @@ public class CellDSColumnEditor extends CellQuickEditor { @Override public void populate() { - dataPane.populate(null, cellElement); + dataPane.populate(DesignTableDataManager.getEditingTableDataSource(), cellElement, tc); groupPane.populate(cellElement); if (tc != null) { condition.setEditingComponent(tc); } } + @Override + protected void release() { + condition.setEditingComponent(null); + dataPane.release(); + } + /** * 创建有内容的面板显示信息 @@ -434,6 +435,11 @@ public class CellDSColumnEditor extends CellQuickEditor { } } + @Override + protected void release() { + + } + /** * 更新单元格扩展属性 */ diff --git a/designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java index 461dee3eee..29503d051f 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java @@ -58,4 +58,9 @@ public class CellRichTextEditor extends CellQuickEditor { return true; } + @Override + public void release() { + super.release(); + richTextButton.setAction(null); + } } \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java index e8f79166ad..e90e277153 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java @@ -3,7 +3,6 @@ package com.fr.quickeditor.cellquick; import com.fr.base.BaseFormula; import com.fr.base.Style; import com.fr.base.TextFormat; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; import com.fr.grid.GridKeyListener; import com.fr.grid.selection.CellSelection; @@ -18,7 +17,6 @@ import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; diff --git a/designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java index cfa362cb38..b33deff88b 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java @@ -56,4 +56,10 @@ public class CellSubReportEditor extends CellQuickEditor { public boolean isScrollAll() { return true; } + + @Override + public void release() { + super.release(); + subReportButton.setAction(null); + } } \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java b/designer/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java index 81507186ba..5d8a72e002 100644 --- a/designer/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java +++ b/designer/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java @@ -12,8 +12,10 @@ import com.fr.general.Inter; import com.fr.quickeditor.FloatQuickEditor; import com.fr.report.cell.cellattr.CellImage; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -70,8 +72,6 @@ public class FloatImageQuickEditor extends FloatQuickEditor { @Override protected void refreshDetails() { - // TODO Auto-generated method stub - } } \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java b/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java index 1f5718a9e9..eae3e81dc0 100644 --- a/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java +++ b/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java @@ -12,10 +12,16 @@ import com.fr.quickeditor.FloatQuickEditor; import com.fr.report.ReportHelper; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JTextArea; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -27,6 +33,25 @@ public class FloatStringQuickEditor extends FloatQuickEditor { private boolean reserveInResult = false; private boolean reserveOnWriteOrAnaly = true; + private DocumentListener documentListener = new DocumentListener() { + + @Override + public void insertUpdate(DocumentEvent e) { + changeReportPaneCell(stringTextField.getText().trim()); + } + + @Override + public void removeUpdate(DocumentEvent e) { + changeReportPaneCell(stringTextField.getText().trim()); + } + + @Override + public void changedUpdate(DocumentEvent e) { + changeReportPaneCell(stringTextField.getText().trim()); + } + + }; + public FloatStringQuickEditor() { super(); stringTextField = new JTextArea(); @@ -34,11 +59,17 @@ public class FloatStringQuickEditor extends FloatQuickEditor { formulaButton = new UIButton(); formulaButton.setPreferredSize(new Dimension(25, 23)); formulaButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png")); + ActionListener getFormulaActionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ((ElementCasePane) HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane()).getGrid().startEditing(); + } + }; formulaButton.addActionListener(getFormulaActionListener); JPanel pane = new JPanel(new BorderLayout(5, 0)); pane.add(stringTextField, BorderLayout.CENTER); pane.add(formulaButton, BorderLayout.EAST); - pane.setBorder(BorderFactory.createEmptyBorder(0,0,0,5)); + pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); formulaButton.setVisible(false); this.setLayout(new BorderLayout()); this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); @@ -55,16 +86,10 @@ public class FloatStringQuickEditor extends FloatQuickEditor { stringTextField.setBackground(Color.WHITE); } - ActionListener getFormulaActionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - ((ElementCasePane) HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane()).getGrid().startEditing(); - } - }; @Override protected void refreshDetails() { - String str = null; + String str; Object value = floatElement.getValue(); if (value == null) { str = StringUtils.EMPTY; @@ -89,26 +114,8 @@ public class FloatStringQuickEditor extends FloatQuickEditor { stringTextField.getDocument().addDocumentListener(documentListener); } - DocumentListener documentListener = new DocumentListener() { - - @Override - public void insertUpdate(DocumentEvent e) { - changeReportPaneCell(stringTextField.getText().trim()); - } - - @Override - public void removeUpdate(DocumentEvent e) { - changeReportPaneCell(stringTextField.getText().trim()); - } - - @Override - public void changedUpdate(DocumentEvent e) { - changeReportPaneCell(stringTextField.getText().trim()); - } - - }; - protected void changeReportPaneCell(String tmpText) { + private void changeReportPaneCell(String tmpText) { if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { BaseFormula textFormula = BaseFormula.createFormulaBuilder().build(tmpText); textFormula.setReserveInResult(reserveInResult); @@ -125,5 +132,4 @@ public class FloatStringQuickEditor extends FloatQuickEditor { fireTargetModified(); stringTextField.requestFocus(); } - } \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/package.html b/designer/src/com/fr/quickeditor/package.html new file mode 100644 index 0000000000..301e71daf9 --- /dev/null +++ b/designer/src/com/fr/quickeditor/package.html @@ -0,0 +1,5 @@ + + +这个包定义了各种单元格元素(如数据列、公式、富文本等)、图表块以及悬浮元素的编辑器 + + \ No newline at end of file diff --git a/designer/src/com/fr/start/Designer.java b/designer/src/com/fr/start/Designer.java index 2f484553a0..e52530c8e6 100644 --- a/designer/src/com/fr/start/Designer.java +++ b/designer/src/com/fr/start/Designer.java @@ -130,6 +130,9 @@ public class Designer extends BaseDesigner { if (ActionFactory.getChartPreStyleAction() != null) { menuDef.addShortCut(ActionFactory.getChartPreStyleAction()); } + if (ActionFactory.getChartEmptyDataStyleAction() != null) { + menuDef.addShortCut(ActionFactory.getChartEmptyDataStyleAction()); + } if (ActionFactory.getChartMapEditorAction() != null) { menuDef.addShortCut(ActionFactory.getChartMapEditorAction()); } diff --git a/designer_base/src/com/fr/common/inputevent/package.html b/designer_base/src/com/fr/common/inputevent/package.html new file mode 100644 index 0000000000..562cdcdeca --- /dev/null +++ b/designer_base/src/com/fr/common/inputevent/package.html @@ -0,0 +1,5 @@ + + +处理输入事件的工具类 + + \ 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 7bc73acbb6..998dad626d 100644 --- a/designer_base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer_base/src/com/fr/design/actions/core/ActionFactory.java @@ -50,11 +50,26 @@ public class ActionFactory { private static ConcurrentMap> cellEditorClass = new ConcurrentHashMap<>(); private static UpdateAction chartPreStyleAction = null; + private static UpdateAction chartEmptyDataStyleAction = null; private static UpdateAction chartMapEditorAction = null; private ActionFactory() { } + + /** + * 元素编辑器释放模板对象 + */ + public static void editorRelease() { + for (Map.Entry entry : cellEditor.entrySet()) { + entry.getValue().release(); + } + for (Map.Entry entry : floatEditor.entrySet()) { + entry.getValue().release(); + } + } + + /** * 注册无需每次实例化的单元格元素编辑器 * @@ -126,6 +141,15 @@ public class ActionFactory { chartPreStyleAction = action; } + /** + * 注册图表的 空数据提示样式. + * + * @param action 注册的图表空数据提示样式action + */ + public static void registerChartEmptyDataStyleAction(UpdateAction action) { + chartEmptyDataStyleAction = action; + } + /** * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollection和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. * @@ -157,6 +181,15 @@ public class ActionFactory { return chartPreStyleAction; } + /** + * 图表空数据提示样式Action + * + * @return 图表空数据提示样式Action + */ + public static UpdateAction getChartEmptyDataStyleAction() { + return chartEmptyDataStyleAction; + } + /** * 图表编辑器Action diff --git a/designer_base/src/com/fr/design/actions/file/WebPreviewUtils.java b/designer_base/src/com/fr/design/actions/file/WebPreviewUtils.java index 0947d4323a..f682f7ddf1 100644 --- a/designer_base/src/com/fr/design/actions/file/WebPreviewUtils.java +++ b/designer_base/src/com/fr/design/actions/file/WebPreviewUtils.java @@ -1,5 +1,6 @@ package com.fr.design.actions.file; +import com.fr.base.vcs.DesignerMode; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.utils.DesignUtils; @@ -11,6 +12,8 @@ import com.fr.general.web.ParameterConsts; import com.fr.stable.project.ProjectConstants; import javax.swing.*; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; public final class WebPreviewUtils { @@ -28,11 +31,15 @@ public final class WebPreviewUtils { return; } + if (map == null || map == Collections.EMPTY_MAP) { + map = new HashMap<>(); + } + map.put("mode", DesignerMode.getMode().toString()); DesignerContext.getDesignerFrame().refreshToolbar(); jt.stopEditing(); /* - * alex:如果没有保存,先保存到Env + * alex:如果没有保存,先保存到Env * * 如果保存失败,不执行下面的WebPreview */ @@ -68,20 +75,19 @@ public final class WebPreviewUtils { String path = currentTemplate.getPath(); if (path.startsWith(ProjectConstants.REPORTLETS_NAME)) { path = path.substring(ProjectConstants.REPORTLETS_NAME.length() + 1); + } + java.util.List parameterNameList = new java.util.ArrayList(); + java.util.List parameterValueList = new java.util.ArrayList(); - java.util.List parameterNameList = new java.util.ArrayList(); - java.util.List parameterValueList = new java.util.ArrayList(); - - parameterNameList.add(actionType); - parameterValueList.add(path); - if (map != null) { - for (String key : map.keySet()) { - parameterNameList.add(key); - parameterValueList.add(GeneralUtils.objectToString(map.get(key))); - } + parameterNameList.add(actionType); + parameterValueList.add(path); + if (map != null) { + for (String key : map.keySet()) { + parameterNameList.add(key); + parameterValueList.add(GeneralUtils.objectToString(map.get(key))); } - DesignUtils.visitEnvServerByParameters(parameterNameList.toArray(new String[parameterNameList.size()]), parameterValueList.toArray(new String[parameterValueList.size()])); } + DesignUtils.visitEnvServerByParameters(parameterNameList.toArray(new String[parameterNameList.size()]), parameterValueList.toArray(new String[parameterValueList.size()])); } else { int selVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Web_Preview_Message"), Inter.getLocText("Preview_ToolTips"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); diff --git a/designer_base/src/com/fr/design/bbs/package.html b/designer_base/src/com/fr/design/bbs/package.html new file mode 100644 index 0000000000..9101172d98 --- /dev/null +++ b/designer_base/src/com/fr/design/bbs/package.html @@ -0,0 +1,5 @@ + + +论坛相关的工具类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/border/package.html b/designer_base/src/com/fr/design/border/package.html new file mode 100644 index 0000000000..bdf291c80a --- /dev/null +++ b/designer_base/src/com/fr/design/border/package.html @@ -0,0 +1,5 @@ + + +边框组件 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/bridge/package.html b/designer_base/src/com/fr/design/bridge/package.html new file mode 100644 index 0000000000..d7546aef5f --- /dev/null +++ b/designer_base/src/com/fr/design/bridge/package.html @@ -0,0 +1,5 @@ + + +沟通 designer 和 designer_form 的接口类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/condition/ConditionAttributesPane.java b/designer_base/src/com/fr/design/condition/ConditionAttributesPane.java index 9737856ddf..ed7d472231 100644 --- a/designer_base/src/com/fr/design/condition/ConditionAttributesPane.java +++ b/designer_base/src/com/fr/design/condition/ConditionAttributesPane.java @@ -11,10 +11,12 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import javax.swing.*; +import java.awt.*; import java.util.HashMap; import java.util.Iterator; public abstract class ConditionAttributesPane extends BasicBeanPane { + private static final int MIN_HEIGHT = 60; protected CellHighlightAddMenuDef menuDef; protected JPanel selectedItemPane; @@ -61,6 +63,7 @@ public abstract class ConditionAttributesPane extends BasicBeanPane { JScrollPane selectedItemScrollPane = new JScrollPane(); selectedItemScrollPane.setViewportView(selectedItemPane); selectedItemScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + selectedItemScrollPane.setMinimumSize(new Dimension((int) selectedItemScrollPane.getPreferredSize().getWidth(), MIN_HEIGHT)); propertyChangePane.add(selectedItemScrollPane); } diff --git a/designer_base/src/com/fr/design/constants/package.html b/designer_base/src/com/fr/design/constants/package.html new file mode 100644 index 0000000000..30d428c7ea --- /dev/null +++ b/designer_base/src/com/fr/design/constants/package.html @@ -0,0 +1,5 @@ + + +全局常量 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/package.html b/designer_base/src/com/fr/design/data/package.html new file mode 100644 index 0000000000..353e9e8bca --- /dev/null +++ b/designer_base/src/com/fr/design/data/package.html @@ -0,0 +1,5 @@ + + +数据集相关的面板和组件 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/dialog/package.html b/designer_base/src/com/fr/design/dialog/package.html index 77262d5417..2b2874cd98 100644 --- a/designer_base/src/com/fr/design/dialog/package.html +++ b/designer_base/src/com/fr/design/dialog/package.html @@ -1,8 +1,8 @@ -Defined some dialogs that can be used in your applications of applets, For example: +定义了一些对话框,使用示例: PageSetupDialog({@link com.fr.dialog.PageSetupDialog PageSetupDialog}), StyleDialog({@link com.fr.dialog.core.ColorSelectBox ColorSelectBox}), -CellBorderDialog({@link com.fr.dialog.CellBorderDialog CellBorderDialog}).]!> +CellBorderDialog({@link com.fr.dialog.CellBorderDialog CellBorderDialog})> \ No newline at end of file diff --git a/designer_base/src/com/fr/design/editor/package.html b/designer_base/src/com/fr/design/editor/package.html new file mode 100644 index 0000000000..1613b51712 --- /dev/null +++ b/designer_base/src/com/fr/design/editor/package.html @@ -0,0 +1,5 @@ + + +各种编辑器(文本、日期、数字等)组件 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/event/package.html b/designer_base/src/com/fr/design/event/package.html new file mode 100644 index 0000000000..92e2c3605c --- /dev/null +++ b/designer_base/src/com/fr/design/event/package.html @@ -0,0 +1,5 @@ + + +事件处理的工具类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/PluginOperateUtils.java b/designer_base/src/com/fr/design/extra/PluginOperateUtils.java index 5ce0852c8e..121ecc7970 100644 --- a/designer_base/src/com/fr/design/extra/PluginOperateUtils.java +++ b/designer_base/src/com/fr/design/extra/PluginOperateUtils.java @@ -122,7 +122,7 @@ public class PluginOperateUtils { return resultArray.toString(); } - public static void dealParams(StringBuilder url, String category, String seller, String fee) { + public static void dealParams(StringBuilder url, String category, String seller, String fee, String scope) { if (StringUtils.isNotBlank(category)) { url.append("cid=").append(category.split("-")[1]); } else { @@ -152,6 +152,18 @@ public class PluginOperateUtils { url.append("&fee=").append(StringUtils.EMPTY); } } + if (StringUtils.isNotBlank(scope)) { + switch (scope.split("-")[1]) { + case "universal": + url.append("&scope=").append(1); + break; + case "program": + url.append("&scope=").append(2); + break; + default: + url.append("&scope=").append(StringUtils.EMPTY); + } + } } public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) { diff --git a/designer_base/src/com/fr/design/extra/PluginTask.java b/designer_base/src/com/fr/design/extra/PluginTask.java index f91001cc7e..3e24f57bff 100644 --- a/designer_base/src/com/fr/design/extra/PluginTask.java +++ b/designer_base/src/com/fr/design/extra/PluginTask.java @@ -74,14 +74,22 @@ public class PluginTask extends Task { * 2.js字符串中的\n会导致js字符串变成多行,而js字符串不支持多行拼接 * 3.由JSONObject.toString()得到的字符串中html标签的属性会自动加上\造成替换难度加大, * 这边建议去除所有的html标签 - * + * 字符\在java中实际存储的是\\,替换字符串\\n, 需要用\\\\n; + * "\t"、"\n"、"\t" 转义成""; + * "\\"需要转换成"\\\"; + * * @param old 原始字符串 * @return 处理之后的字符串 */ private String trimText(String old) { if (StringUtils.isNotBlank(old)) { String b = filterHtmlTag(old); - return b.replaceAll("\\\\n", StringUtils.EMPTY).replaceAll("\\\\t", StringUtils.EMPTY).replaceAll("\"", "\\\\\"").replaceAll("\'", "\\\\\'").replaceAll("\\\\\\\\", "\\\\\\\\\\\\"); + return b.replaceAll("\\\\n", StringUtils.EMPTY) + .replaceAll("\\\\r", StringUtils.EMPTY) + .replaceAll("\\\\t", StringUtils.EMPTY) + .replaceAll("\"", "\\\\\"") + .replaceAll("\'", "\\\\\'") + .replaceAll("\\\\\\\\", "\\\\\\\\\\\\"); } return StringUtils.EMPTY; } diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index afdcd448f6..dd5f50295f 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java @@ -339,10 +339,26 @@ public class PluginWebBridge { * @param callback 回调函数 */ public void getPluginFromStore(String category, String seller, String fee, final JSObject callback) { - Task task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(category, seller, fee)); + Task task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(category, seller, fee, "")); threadPoolExecutor.submit(task); } + /** + * 根据条件获取在线插件 + * + * @param info 插件信息 + * @param callback 回调函数 + */ + public void getPluginFromStoreNew(String info, final JSObject callback) { + try { + Task task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(new JSONObject(info))); + threadPoolExecutor.submit(task); + } catch (JSONException e) { + FRLogger.getLogger().error(e.getMessage()); + } + } + + public void getPluginPrefix(final JSObject callback) { Task task = new PluginTask<>(webEngine, callback, new GetPluginPrefixExecutor()); threadPoolExecutor.submit(task); diff --git a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java index a00f460ed8..59fb612765 100644 --- a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java +++ b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java @@ -5,6 +5,7 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.mainframe.DesignerContext; +import com.fr.general.CommonIOUtils; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; @@ -22,9 +23,7 @@ import javax.swing.SwingWorker; import java.awt.BorderLayout; import java.awt.Component; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; +import java.io.IOException; import java.lang.reflect.Constructor; import java.net.HttpURLConnection; import java.util.concurrent.ExecutionException; @@ -94,27 +93,17 @@ public class WebViewDlgHelper { public static void checkAndCopyMainFile(String indexPath, String mainJsPath) { File file = new File(indexPath); if (!file.exists()) { - copyMainFile(indexPath, mainJsPath); + copyMainFile(mainJsPath); } } /** * 將script文件夹中的plugin.html文件复制到webreport下 */ - public static void copyMainFile(String indexPath, String mainJsPath) { + private static void copyMainFile(String mainJsPath) { try { - File mainJsFile = new File(mainJsPath); - int byteread = 0; - if (mainJsFile.exists()) { - InputStream inStream = new FileInputStream(mainJsPath); - FileOutputStream fs = new FileOutputStream(indexPath); - byte[] buffer = new byte[BYTES_NUM]; - while ((byteread = inStream.read(buffer)) != -1) { - fs.write(buffer, 0, byteread); - } - inStream.close(); - } - } catch (Exception e) { + CommonIOUtils.copy(new File(mainJsPath), new File(installHome)); + } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } } @@ -131,6 +120,7 @@ public class WebViewDlgHelper { /** * 以关键词打开设计器商店显示搜索结果 + * * @param keyword * @param data */ @@ -240,7 +230,7 @@ public class WebViewDlgHelper { if (get()) { String relativePath = "/scripts/plugin.html"; IOUtils.unzip(new File(StableUtils.pathJoin(PluginConstants.DOWNLOAD_PATH, PluginConstants.TEMP_FILE)), installHome); - copyMainFile(StableUtils.pathJoin(installHome, "plugin.html"), StableUtils.pathJoin(installHome, relativePath)); + copyMainFile(StableUtils.pathJoin(installHome, relativePath)); // TODO: 2017/4/17 删除之前存放在安装目录下的script PluginStoreConstants.refreshProps(); // 下载完刷新一下版本号等 JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.INFORMATION_MESSAGE); diff --git a/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java b/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java index 123c3ceed3..4b4bddab4a 100644 --- a/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java @@ -20,11 +20,20 @@ public class GetPluginFromStoreExecutor implements Executor { private String category; private String seller; private String fee; + private String scope; - public GetPluginFromStoreExecutor(String category, String seller, String fee) { + public GetPluginFromStoreExecutor(JSONObject info) { + this.category = info.optString("category"); + this.fee = info.optString("fee"); + this.seller = info.optString("seller"); + this.scope = info.optString("scope"); + } + + public GetPluginFromStoreExecutor(String category, String seller, String fee, String scope) { this.category = category; this.seller = seller; this.fee = fee; + this.scope = scope; } @Override @@ -44,7 +53,7 @@ public class GetPluginFromStoreExecutor implements Executor { @Override public void run(Process process) { String plistUrl = SiteCenter.getInstance().acquireUrlByKind("shop.plugin.plist") + "?"; - boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee); + boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee) && StringUtils.isEmpty(scope); if (getRecommend) { result = PluginOperateUtils.getRecommendPlugins(); return; @@ -53,7 +62,7 @@ public class GetPluginFromStoreExecutor implements Executor { if (StringUtils.isNotBlank(plistUrl)) { StringBuilder url = new StringBuilder(); url.append(plistUrl); - PluginOperateUtils.dealParams(url, category, seller, fee); + PluginOperateUtils.dealParams(url, category, seller, fee, scope); try { HttpClient httpClient = new HttpClient(url.toString()); httpClient.asGet(); @@ -66,7 +75,7 @@ public class GetPluginFromStoreExecutor implements Executor { FRLogger.getLogger().error(e.getMessage()); } } else { - result = PluginConstants.CONNECTION_404; + result = PluginConstants.CONNECTION_404; } } } diff --git a/designer_base/src/com/fr/design/extra/package.html b/designer_base/src/com/fr/design/extra/package.html new file mode 100644 index 0000000000..d4eda58e08 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/package.html @@ -0,0 +1,5 @@ + + +用户登录、插件商城等功能 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/ucenter/Client.java b/designer_base/src/com/fr/design/extra/ucenter/Client.java index cceba006d2..17fafbb3bb 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/Client.java +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -15,17 +15,21 @@ import java.util.Map; import java.util.Objects; /** + * 用于和Ucenter通信的客户端 * * @author lp * @date 2016/9/9 + * 1.client借用的是id为9的应用,信息为fanruan官网http://www.fanruan.com, + * 2.借用当前的应用id就会导致无法同步登陆到该应用所在的网站,权衡之后这个影响是比较小的 + * 3.key和appid是成对匹配的 */ public class Client extends AbstractClient { - private static String UC_IP = ""; - private static String UC_API = ""; + private static String UC_API = SiteCenter.getInstance().acquireUrlByKind("bbs.ucapi"); + private static String UC_IP = SiteCenter.getInstance().acquireUrlByKind("bbs.ip"); private static String UC_CONNECT = ""; - private static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; - private static String UC_APPID = "4"; + private static String UC_KEY = SiteCenter.getInstance().acquireUrlByKind("bbs.uc.key", "1v12H473J2Y99935473T4360w5L014522281007621223O1708wv870273fB0200"); + private static String UC_APPID = SiteCenter.getInstance().acquireUrlByKind("bbs.uc.appid", "9"); private static String UC_CLIENT_RELEASE = "20090212"; public static String UC_ROOT = ""; private static String UC_API_FUNC = "mysql".equals(UC_CONNECT) ? UC_API_MYSQL : UC_API_POST; @@ -92,8 +96,6 @@ public class Client extends AbstractClient { sep = "&"; } String postData = ucApiRequestdata(module, action, str.toString(), ""); - UC_API = SiteCenter.getInstance().acquireUrlByKind("bbs.ucapi"); - UC_IP = SiteCenter.getInstance().acquireUrlByKind("bbs.ip"); return ucFopen2(UC_API + "/index.php", 500000, postData, "", true, UC_IP, 20, true); } diff --git a/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java b/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java index 0ae43565d2..eb93f09fd3 100644 --- a/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java @@ -3,6 +3,7 @@ package com.fr.design.file; import com.fr.base.BaseUtils; import com.fr.base.GraphHelper; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIScrollPopUpMenu; @@ -632,6 +633,11 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M * @param e 鼠标事件 */ public void mousePressed(MouseEvent e) { + //如果在版本管理情况下,不允许切换tab + if (DesignerMode.isVcsMode()) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Vcs_tab_click"), Inter.getLocText("FR-Designer_Alert"), JOptionPane.WARNING_MESSAGE); + return; + } int evtX = e.getX(); int evtY = e.getY(); @@ -951,6 +957,4 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M } } } - - } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/file/package.html b/designer_base/src/com/fr/design/file/package.html new file mode 100644 index 0000000000..4b2390a080 --- /dev/null +++ b/designer_base/src/com/fr/design/file/package.html @@ -0,0 +1,5 @@ + + +历史模版、新建模版、保存模版、模版tab、模版树等界面和功能 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/foldablepane/HeaderPane.java b/designer_base/src/com/fr/design/foldablepane/HeaderPane.java index 31cc290324..506f64ef56 100644 --- a/designer_base/src/com/fr/design/foldablepane/HeaderPane.java +++ b/designer_base/src/com/fr/design/foldablepane/HeaderPane.java @@ -2,12 +2,16 @@ package com.fr.design.foldablepane; import com.fr.base.GraphHelper; import com.fr.design.constants.UIConstants; -import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxUtilities; - -import javax.swing.*; -import java.awt.*; +import javax.swing.JFrame; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; import java.awt.image.BufferedImage; -import java.util.Map; /** * Created by MoMeak on 2017/7/5. @@ -55,26 +59,20 @@ public class HeaderPane extends JPanel { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); BufferedImage panelImage = createPanelImage(); g2d.drawImage(panelImage, null, 0, 0); + GraphHelper.applyRenderingHints(g2d); GraphHelper.drawString(g2d, this.title, TITLE_X, headHeight - fontSize / 2 - 1); } private BufferedImage createPanelImage() { BufferedImage panelImage = new BufferedImage(getWidth(), headHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = panelImage.createGraphics(); - g2d.setColor(isPressed ? UIConstants.POPUP_TITLE_BACKGROUND : UIConstants.COMPONENT_BACKGROUND_COLOR); headWidth = this.getWidth(); g2d.fillRect(0, 0, headWidth, headHeight); g2d.setFont(new Font("SimSun", 0, fontSize)); g2d.setPaint(bgColor); - Map desktopHints = RSyntaxUtilities.getDesktopAntiAliasHints(); - if (desktopHints != null) { - g2d.setRenderingHints(desktopHints); - } int leftWdith = headWidth - LEFT_X; if (this.isShow) { image = UIConstants.DRAG_DOWN_SELECTED_SMALL; diff --git a/designer_base/src/com/fr/design/foldablepane/package.html b/designer_base/src/com/fr/design/foldablepane/package.html new file mode 100644 index 0000000000..bf8d8f383b --- /dev/null +++ b/designer_base/src/com/fr/design/foldablepane/package.html @@ -0,0 +1,5 @@ + + +可折叠面板组件 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/formula/package.html b/designer_base/src/com/fr/design/formula/package.html new file mode 100644 index 0000000000..2bd49a3187 --- /dev/null +++ b/designer_base/src/com/fr/design/formula/package.html @@ -0,0 +1,5 @@ + + +公式编辑相关面板 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/TemplateTreeShortCutProvider.java b/designer_base/src/com/fr/design/fun/TemplateTreeShortCutProvider.java new file mode 100644 index 0000000000..f5c9e09c6a --- /dev/null +++ b/designer_base/src/com/fr/design/fun/TemplateTreeShortCutProvider.java @@ -0,0 +1,14 @@ +package com.fr.design.fun; + +import com.fr.stable.fun.mark.Aftermath; +import com.fr.stable.fun.mark.Mutable; + +/** + * 左上角目录树上边工具条的插件接口 + * Created by hzzz on 2017/11/30. + */ +public interface TemplateTreeShortCutProvider extends Mutable, Aftermath { + String XML_TAG = "TemplateTreeShortCut"; + + int CURRENT_LEVEL = 1; +} diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractTemplateTreeShortCutProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractTemplateTreeShortCutProvider.java new file mode 100644 index 0000000000..22fe8aa767 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/impl/AbstractTemplateTreeShortCutProvider.java @@ -0,0 +1,26 @@ +package com.fr.design.fun.impl; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.fun.TemplateTreeShortCutProvider; +import com.fr.stable.fun.mark.API; + +/** + * 左上角目录树上边工具条的插件接口 + * Created by hzzz on 2017/11/30. + */ +@API(level = TemplateTreeShortCutProvider.CURRENT_LEVEL) +public abstract class AbstractTemplateTreeShortCutProvider extends UpdateAction implements TemplateTreeShortCutProvider { + + @Override + public String mark4Provider() { + return getClass().getName(); + } + + @Override + public void process() { + } + + @Override + public void undo() { + } +} diff --git a/designer_base/src/com/fr/design/fun/package.html b/designer_base/src/com/fr/design/fun/package.html new file mode 100644 index 0000000000..f064c57bf3 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/package.html @@ -0,0 +1,5 @@ + + +提供一些 UI 接口 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java index 2d69c2fc83..43711b0118 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java +++ b/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java @@ -59,14 +59,11 @@ public abstract class LazyComboBox extends UIComboBox implements PopupMenuListen } /** - * 通过调用该方法,在点击下拉框按钮之前就加载好数据 + * 通过调用该方法,在点击下拉框按钮之前就加载好数据,不需要出现loading了 */ public void loadInstant() { - if (loaded) { - return; - } - setModel(new DefaultComboBoxModel(load())); - loaded = true; + setLoaded(true); + loadList(); } @Override diff --git a/designer_base/src/com/fr/design/gui/ilist/ArrayListModel.java b/designer_base/src/com/fr/design/gui/ilist/ArrayListModel.java index 62a360694d..7abd152e34 100644 --- a/designer_base/src/com/fr/design/gui/ilist/ArrayListModel.java +++ b/designer_base/src/com/fr/design/gui/ilist/ArrayListModel.java @@ -4,15 +4,15 @@ import javax.swing.AbstractListModel; public class ArrayListModel extends AbstractListModel { private Object[] array; - + public ArrayListModel() { - + } - + public ArrayListModel(Object[] array) { this.array = array; } - + public Object getElementAt(int index) { return array != null ? array[index] : null; } diff --git a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java index 9fcf821e0c..492d241cd2 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java @@ -10,6 +10,7 @@ import com.fr.design.constants.UIConstants; public class UIPopupMenu extends JPopupMenu{ private static final float REC = 8f; private boolean onlyText = false; + public static UIPopupMenu EMPTY = new UIPopupMenu(); public UIPopupMenu() { super(); setBackground(UIConstants.NORMAL_BACKGROUND); diff --git a/designer_base/src/com/fr/design/gui/package.html b/designer_base/src/com/fr/design/gui/package.html new file mode 100644 index 0000000000..8a70f1dd23 --- /dev/null +++ b/designer_base/src/com/fr/design/gui/package.html @@ -0,0 +1,5 @@ + + +包含一些 UI 组件 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/icon/package.html b/designer_base/src/com/fr/design/icon/package.html new file mode 100644 index 0000000000..82749915b3 --- /dev/null +++ b/designer_base/src/com/fr/design/icon/package.html @@ -0,0 +1,5 @@ + + +定义一些 icon + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/images/chart/EmptyChart.png b/designer_base/src/com/fr/design/images/chart/EmptyChart.png new file mode 100644 index 0000000000..1613f98b20 Binary files /dev/null and b/designer_base/src/com/fr/design/images/chart/EmptyChart.png differ diff --git a/designer_base/src/com/fr/design/javascript/package.html b/designer_base/src/com/fr/design/javascript/package.html new file mode 100644 index 0000000000..dbfe28451f --- /dev/null +++ b/designer_base/src/com/fr/design/javascript/package.html @@ -0,0 +1,5 @@ + + +javascript 编辑面板 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/layout/package.html b/designer_base/src/com/fr/design/layout/package.html new file mode 100644 index 0000000000..d16f5f7ee7 --- /dev/null +++ b/designer_base/src/com/fr/design/layout/package.html @@ -0,0 +1,5 @@ + + +这个包定义了一些布局 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index ed58730bc3..0337a6be1f 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -107,10 +107,10 @@ FR-Designer_Font-Size= FR-Designer_Forbid_Drag_into_Adapt_Pane=Forbid Drag into Para Pane FR-Designer_Forbid_Drag_into_Para_Pane=Forbid Drag into Para Pane FR-Designer_Foreground= -FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=Form authority editing can not be supported +FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=Dashboard authority editing can not be supported FR-Designer_Form-Report= FR-Designer_Form_EmbeddedTD= -FR-Designer_Form_Module=Form Module +FR-Designer_Form_Module=Dashboard Module FR-Designer_Format_explan= FR-Designer_Formula= FR-Designer_Forum= @@ -562,7 +562,7 @@ FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. FR-Designer_WidgetOrder=Widget Order -FR-Designer_Mobile_Form_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the form in the APP. +FR-Designer_Mobile_Form_Analysis_Annotation=annotation: You can use this attribute to control the analysis of the dashboard in the APP. FR-Designer_Mobile_Report_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the report in the APP, only to support the paging preview, fill in the preview of the property is invalid. FR-Designer_Background_Null= FR-Designer_Background_Color= @@ -620,7 +620,7 @@ Tree-Width=Tree Width alert_word= PageSetup-Paper_Size=Paper Size M-Page_Setup=Page Setup -DashBoard-FormBook=Form +DashBoard-FormBook=Dashboard X-Coordinate=X Coordinate Style-Line_Spacing=Line Spacing FR-Designer_Plugin_Should_Update_Title=Warning @@ -696,7 +696,7 @@ WF-Name=Name RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value Utils-Row_Height=Row Height ReportD-Excel_Export=ReportD Excel Export -Form-Please_Select_A_Kind_Of_Form_Container=Select Form Container +Form-Please_Select_A_Kind_Of_Form_Container=Select Dashboard Container Column_Does_Not_Exsit=Column Does Not Exsit M_Insert-Hyperlink=Hyperlink can_not_include_underline=can not contain "_" @@ -831,7 +831,7 @@ Values=Values Not_use_a_cell_attribute_table_editing=You may not use a cell attribute table editing Root=Root cycle=cycle -open-new-form-tip=open new form tip +open-new-form-tip=open new dashboard tip Support-Current_Auto_Complete_Shortcut=Current Shortcut GROUPING_MODE=Grouping DBCP_MAX_IDLE=MaxIdle @@ -1088,7 +1088,7 @@ Form-View_Tree=Tree View M_Insert-Chart=Insert Chart HF-Even_Page=Even Page ReportServerP-Report_server_parameter=Report Server Parameter -JavaScript-Form_Submit=Form Submit +JavaScript-Form_Submit=Dashboard Submit Horizontal-Split_Layout=Horizontal Split Layout BorderLayout-Center=Center INFO-Reset_Webapp=Reset Webapp @@ -1439,7 +1439,7 @@ ReportColumns-Columns_after=Columns after FR-Designer_Undo= DBCP_MIN_IDLE=MinIdle M-Data_Analysis_Settings=Data Analysis Settings -M-Form_Preview=Form Preview +M-Form_Preview=Dashboard Preview Form-Basic_Properties=Basic Properties quote= Thu=Thu @@ -1594,7 +1594,7 @@ FS_Report_Type=Report Type HF-New_Line=New Line Privilege=Privilege Export-Offline-Html=Export Offline HTML -FR-Designer_open-new-form-tip=open new form tip +FR-Designer_open-new-form-tip=open new dashboard tip FR-Designer-Widget-Style_Frame_Style= Present-No_Present=No Present FR-Designer_Form-Password=Password @@ -1618,7 +1618,7 @@ Above=Above Utils-The-Chart= FRFont-plain=plain Calculating=Calculating -Form-Object=Form Object +Form-Object=Dashboard Object May=May FR-Designer_Plugin_Normal_Update=Update FR-Hyperlink_Reportlet= @@ -1753,7 +1753,7 @@ ReportServerP-Last=Last FR-Base_Columns= SpecifiedG-Leave_in_their_own_groups=Leave in their own groups LOG-Please_Wait=Please Waiting -Form-ToolBar=Form ToolBar +Form-ToolBar=Dashboard ToolBar FR-Base_sure_remove_item= Component_Scale=Component Scale Hyperlink-Use_CJK_to_encode_parameter=Use CJK to encode parameter @@ -1798,7 +1798,7 @@ Only_selected_cell_can_paste_only=Only selected cell can paste only M_Report-Report_Columns=Report Columns Unit_Hundred=Hundred FR-Designer_DataTable-Build= -Widget-Form_Widget_Config=Form Widget +Widget-Form_Widget_Config=Dashboard Widget Server-version-tip-moreInfo=Your own team of our FineReport Designer version number of the product as well as the deployment server version number is consistent, in order to avoid the problems caused by inconsistent versions of risk.If you open a template produced higher Designer version, may open the error may be missing the original template properties. If you create the template used Designer Version higher than your final deployment with the server version, the server may not be able to properly load the template you create. Actions=Actions FR-Designer-Dependence_Connect_Server_Error=connect error @@ -1951,7 +1951,7 @@ ReportServerP-Import_JavaScript=Import JavaScript Form-TableTree=Table Tree Opened=Opened M_Edit-Delete=Delete -Widget-Form_Widget_Container=Form Container +Widget-Form_Widget_Container=Dashboard Container BindColumn-Summary=Summary Sche-Second=Second Server-Open_Service_Manager=Open Service Manager @@ -1994,7 +1994,7 @@ FR-Designer_AlphaFine_EnableInternetSearch=SearchOnLine FR-Designer_AlphaFine_Shortcut_Config=Shortcut Config FR-Designer_AlphaFine_SearchRange=Search Range FR-Designer_AlphaFine_Recommend=Recommend -FR-Designer-Plugin_Addon=Plugin Addon +FR-Designer-Plugin_Addon=FanRuan Market FR-Designer_Templates=FR-Designer_Templates FR-Designer_Templates_Content=Templates Contents FR-Designer_AlphaFine_ShowAll=show all @@ -2149,6 +2149,9 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect. FR-Designer_Format_JavaScript=Format Code +FR-Designer_Tip_Content= +FR-Designer_Chart_Empty_Data= +FR-Designer-Vcs_tab_click=Please exit the version management status and then switch the template FR-Designer_Preference_CachingTemplate=Template memory optimization FR-Designer_Preference_MaxCachingTemplate=The designer maximum cache template number: FR-Designer_Preference_CachingTemplateTip=Set to 0 to close the function; restart the designer and take effect diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index ea7c11ffa2..dc16e87a27 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -103,13 +103,13 @@ FR-Designer_Fit-App=App self-adaption FR-Designer_Fit=self-adaption FR-Designer_Font-Family=Font name FR-Designer_Font-Size=Font size -FR-Designer_Forbid_Drag_into_Adapt_Pane=Form body cannot be dragged into the object +FR-Designer_Forbid_Drag_into_Adapt_Pane=Dashboard body cannot be dragged into the object FR-Designer_Forbid_Drag_into_Para_Pane=The object cannot be dragged into the parameter panel FR-Designer_Foreground=Foreground -FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=Form permissions edition is not supported +FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=Dashboard permissions edition is not supported FR-Designer_Form-Report=Report block -FR-Designer_Form_EmbeddedTD=Form(built-in data) -FR-Designer_Form_Module=Form Module +FR-Designer_Form_EmbeddedTD=Dashboard(built-in data) +FR-Designer_Form_Module=Dashboard Module FR-Designer_Format_explan=Format explain FR-Designer_Allow-Blank=Allow Blank FR-Designer_Formula=Formula @@ -500,7 +500,7 @@ FR-Designer_Properties_Mobile=MobileProperties FR-Designer_Button_OK=OK FR-Designer_Button_Cancel=Cancel FR-Designer_JavaScript=JavaScript -FR-Designer_JavaScript_Form_Submit=Form Submit +FR-Designer_JavaScript_Form_Submit=Dashboard Submit FR-Designer_JavaScript_Commit_to_Database=Commit to DB FR-Designer_JavaScript_Custom=Custom FR-Designer_RWA_Submit=Submit @@ -563,7 +563,7 @@ FR-Designer_DS_TableData=Data Set FR-Designer_Parameter-Formula=Formula FR-Designer_Plugin_Should_Update_Please_Contact_Developer=Plugin version is too low, and is not compatible with current API. Please contact the developer to update. FR-Designer_WidgetOrder=Widget Order -FR-Designer_Mobile_Form_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the form in the APP. +FR-Designer_Mobile_Form_Analysis_Annotation=annotation: You can use this attribute to control the analysis of the dashboard in the APP. FR-Designer_Mobile_Report_Analysis_Annotation=annotation\: You can use this attribute to control the analysis of the report in the APP, only to support the paging preview, fill in the preview of the property is invalid. FR-Designer_Background_Null=No Background FR-Designer_Background_Color=Color @@ -622,7 +622,7 @@ Tree-Width=Tree Width alert_word=Export without fixed height, cell hight will change according to the content and pagination position will different from the preview result. PageSetup-Paper_Size=Paper Size M-Page_Setup=Page Setup -DashBoard-FormBook=Form +DashBoard-FormBook=Dashboard X-Coordinate=Horizontal axis Style-Line_Spacing=Line Spacing FR-Designer_Plugin_Should_Update_Title=Warning @@ -698,7 +698,7 @@ WF-Name=Name RWA-Click_Cell_To_Edit_Value=Click Cell to Edit Value Utils-Row_Height=Row Height ReportD-Excel_Export=Export Attributes -Form-Please_Select_A_Kind_Of_Form_Container=Select A Form Container +Form-Please_Select_A_Kind_Of_Form_Container=Select A Dashboard Container Column_Does_Not_Exsit=Column Does Not Exsit M_Insert-Hyperlink=Hyperlink can_not_include_underline=Can not contain "_" @@ -833,7 +833,7 @@ Values=Values Not_use_a_cell_attribute_table_editing=You may not use a cell attribute table editing Root=Root node cycle=Cycle -open-new-form-tip=open new form tip +open-new-form-tip=open new dashboard tip Support-Current_Auto_Complete_Shortcut=Current Shortcut key GROUPING_MODE=Ordinary Grouping DBCP_MAX_IDLE=Max Idle Connections @@ -1090,7 +1090,7 @@ Form-View_Tree=View Tree M_Insert-Chart=Insert Chart HF-Even_Page=Even Page ReportServerP-Report_server_parameter=Report Server Parameter -JavaScript-Form_Submit=Form Submit +JavaScript-Form_Submit=Dashboard Submit Horizontal-Split_Layout=Horizontal partitioning layout BorderLayout-Center=Center INFO-Reset_Webapp=Reset Application Server @@ -1440,7 +1440,7 @@ ReportColumns-Columns_after=Over FR-Designer_Undo=Undo DBCP_MIN_IDLE=Min Idle Connections M-Data_Analysis_Settings=Data Analysis Settings -M-Form_Preview=Form Preview +M-Form_Preview=Dashboard Preview Form-Basic_Properties=Basic Property quote=quote Thu=Thu @@ -1518,7 +1518,7 @@ FR-Template-Path_chooseRightPath=Please choose a right path FR-Remote_Re_Connect_to_Server=The server is down, whether to reconnect it Nation=Country DBCP_MAX_WAIT=Max wait time -FR-App-Template_Form=Form +FR-App-Template_Form=Dashboard Address=Address Sub_Report=Sub Report FR-Import-Export_Word=Word @@ -1561,7 +1561,7 @@ Sub_Report_Description=The sub-report should exist in the runtime environment of T_Insert-Float=Insert Float Element BackgroundTexture-FishFossil=Fish Fossil My_Computer=My Computer -FORMLET=Path parameter when accessing different forms +FORMLET=Path parameter when accessing different dashboards HF-Undefined=Undefined Widget-User_Defined_Widget_Config=Predefined control Report-Write_Attributes_Group_Warning=Number of cells in each field in all cell group must be the same @@ -1595,7 +1595,7 @@ FS_Report_Type=Report Type HF-New_Line=Line breaks Privilege=Permission Export-Offline-Html=Output offline HTML report -FR-Designer_open-new-form-tip=The form is created by the designer older than 711 vision, it cannot be opened. Please use the corresponding designer. +FR-Designer_open-new-form-tip=The dashboard is created by the designer older than 711 vision, it cannot be opened. Please use the corresponding designer. FR-Designer-Widget-Style_Frame_Style=Frame Style Present-No_Present=Cancel Present Settings FR-Designer_Form-Password=Password @@ -1619,7 +1619,7 @@ Above=Above Version Utils-The-Chart=Chart FRFont-plain=General Calculating=Calculating -Form-Object=Form Object\: +Form-Object=Dashboard Object: May=May FR-Designer_Plugin_Normal_Update=Update FR-Hyperlink_Reportlet=Webreport @@ -1754,7 +1754,7 @@ ReportServerP-Last=Last FR-Base_Columns=Columns SpecifiedG-Leave_in_their_own_groups=Leave in their own groups LOG-Please_Wait=Please Waiting -Form-ToolBar=Form ToolBar +Form-ToolBar=Dashboard ToolBar FR-Base_sure_remove_item=Are you sure to delete the selected item Component_Scale=Component Scale Hyperlink-Use_CJK_to_encode_parameter=Use CJK to process parameter @@ -1799,7 +1799,7 @@ Only_selected_cell_can_paste_only=Paste when cell is selected M_Report-Report_Columns=Multi-columns/lines Unit_Hundred=Hundred FR-Designer_DataTable-Build=Speed layered construction -Widget-Form_Widget_Config=Form control +Widget-Form_Widget_Config=Dashboard control Server-version-tip-moreInfo=Conform the version numbers of FineReport Designer and the deployment server are consistent, in order to avoid the problems caused by inconsistent versions. If you open the template produced by higher designer vision, error may occurs or the original template properties missed. If the Designer Version you used to create the template is higher than the final deployment server version, the server may not be able to properly load the template. Actions=Task FR-Designer-Dependence_Connect_Server_Error=connect error @@ -1952,7 +1952,7 @@ ReportServerP-Import_JavaScript=Reference JavaScript Form-TableTree=Table Tree Opened=Opened M_Edit-Delete=Delete -Widget-Form_Widget_Container=Form Container +Widget-Form_Widget_Container=Dashboard Container BindColumn-Summary=Summary Sche-Second=Second Server-Open_Service_Manager=Open Service Manager @@ -1992,7 +1992,7 @@ FR-Designer_AlphaFine_EnableInternetSearch=Search OnLine FR-Designer_AlphaFine_Shortcut_Config=Shortcut Config FR-Designer_AlphaFine_SearchRange=Search Range FR-Designer_AlphaFine_Recommend=Recommend -FR-Designer-Plugin_Addon=Plugin Addon +FR-Designer-Plugin_Addon=FanRuan Market FR-Designer_Templates=Files FR-Designer_Templates_Content=Files'contents FR-Designer_AlphaFine_ShowAll=Show all @@ -2148,6 +2148,9 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect. FR-Designer_Format_JavaScript=Format Code +FR-Designer_Tip_Content= +FR-Designer_Chart_Empty_Data= +FR-Designer-Vcs_tab_click=Please exit the version management status and then switch the template FR-Designer_Preference_CachingTemplate=Template memory optimization FR-Designer_Preference_MaxCachingTemplate=The designer maximum cache template number: FR-Designer_Preference_CachingTemplateTip=Set to 0 to close the function; restart the designer and take effect @@ -2162,4 +2165,4 @@ FR-Designer_Tab_Template_Three=Template Three FR-Designer_Tab_Template_Four=Template Four FR-Designer_Tab_Template_Five=Template Five FR-Designer_Tab_Template_Six=Template Six -FR-Designer_Tab_Display_Position=Display Position +FR-Designer_Tab_Display_Position=Display Position \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index c3658f9191..3b2c34d297 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -2149,6 +2149,9 @@ FR-Designer_Decimal_Places=\u5C0F\u6570\u67A0\u6570: FR-Base-Load_Resource_File=\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u30ED\u30FC\u30C9 FR-Designer_Env_Des_Https= FR-Designer_Format_JavaScript=Format Code +FR-Designer_Tip_Content= +FR-Designer_Chart_Empty_Data= +FR-Designer-Vcs_tab_click= FR-Designer_Move_Up= FR-Designer_Move_Down= FR-Designer_Move_To_Top= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index c3b6309c47..92cc47a236 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -2149,6 +2149,9 @@ FR-Designer_Export_Background= FR-Designer_Print_Background= FR-Designer_Env_Des_Https= FR-Designer_Format_JavaScript=Format Code +FR-Designer_Tip_Content= +FR-Designer_Chart_Empty_Data= +FR-Designer-Vcs_tab_click= FR-Designer_Move_Up= FR-Designer_Move_Down= FR-Designer_Move_To_Top= 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 3e1867c65c..0e35765fd5 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 @@ -104,13 +104,13 @@ FR-Designer_Fit-App=App\u81EA\u9002\u5E94 FR-Designer_Fit=\u81EA\u9002\u5E94 FR-Designer_Font-Family=\u5B57\u4F53\u540D\u79F0 FR-Designer_Font-Size=\u5B57\u4F53\u5927\u5C0F -FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8BE5\u5BF9\u8C61\u4E0D\u5141\u8BB8\u62D6\u5165\u8868\u5355\u4E3B\u4F53 +FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8BE5\u5BF9\u8C61\u4E0D\u5141\u8BB8\u62D6\u5165\u51B3\u7B56\u62A5\u8868\u4E3B\u4F53 FR-Designer_Forbid_Drag_into_Para_Pane=\u8BE5\u5BF9\u8C61\u4E0D\u80FD\u62D6\u5165\u53C2\u6570\u9762\u677F FR-Designer_Foreground=\u989C\u8272 -FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u6682\u4E0D\u652F\u6301\u8868\u5355\u6743\u9650\u7F16\u8F91 +FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u6682\u4E0D\u652F\u6301\u51B3\u7B56\u62A5\u8868\u6743\u9650\u7F16\u8F91 FR-Designer_Form-Report=\u62A5\u8868\u5757 -FR-Designer_Form_EmbeddedTD=\u8868\u5355(\u5185\u7F6E\u6570\u636E) -FR-Designer_Form_Module=\u8868\u5355\u6A21\u5757 +FR-Designer_Form_EmbeddedTD=\u51B3\u7B56\u62A5\u8868(\u5185\u7F6E\u6570\u636E) +FR-Designer_Form_Module=\u51B3\u7B56\u62A5\u8868\u6A21\u5757 FR-Designer_Format_explan=\u683C\u5F0F\u8BF4\u660E FR-Designer_Formula=\u516C\u5F0F FR-Designer_Forum=\u8BBA\u575B @@ -119,7 +119,7 @@ FR-Designer_Help=\u5E2E\u52A9 FR-Designer_Hide=\u9690\u85CF FR-Designer_Show=\u663E\u793A FR-Designer_Hyperlink=\u8D85\u7EA7\u94FE\u63A5 -FR-Designer_Hyperlink-Form_link=\u5F53\u524D\u8868\u5355\u5BF9\u8C61 +FR-Designer_Hyperlink-Form_link=\u5F53\u524D\u51B3\u7B56\u62A5\u8868\u5BF9\u8C61 FR-Designer_IDCard=\u8EAB\u4EFD\u8BC1 FR-Designer_Icon=\u56FE\u6807 FR-Designer_Index=\u5217\u8F74/\u6307\u6807 @@ -507,7 +507,7 @@ FR-Designer_Properties_Mobile=\u624B\u673A\u5C5E\u6027 FR-Designer_Button_OK=\u786E\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 FR-Designer_JavaScript=JavaScript\u811A\u672C -FR-Designer_JavaScript_Form_Submit=\u8868\u5355\u63D0\u4EA4 +FR-Designer_JavaScript_Form_Submit=\u51B3\u7B56\u62A5\u8868\u63D0\u4EA4 FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5E93 FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u4E49 FR-Designer_RWA_Submit=\u63D0\u4EA4 @@ -574,7 +574,7 @@ FR-Designer_DS_TableData=\u6570\u636E\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u63D2\u4EF6\u7248\u672C\u8FC7\u4F4E, \u5B58\u5728API\u4E0D\u517C\u5BB9, \u8BF7\u8054\u7CFB\u5F00\u53D1\u8005\u5347\u7EA7\u63D2\u4EF6 FR-Designer_WidgetOrder=\u63A7\u4EF6\u987A\u5E8F -FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CA\uFF1A\u53EF\u4EE5\u901A\u8FC7\u8BE5\u5C5E\u6027\u63A7\u5236\u8868\u5355\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 +FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CA\uFF1A\u53EF\u4EE5\u901A\u8FC7\u8BE5\u5C5E\u6027\u63A7\u5236\u51B3\u7B56\u62A5\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CA: \u53EF\u4EE5\u901A\u8FC7\u8BE5\u5C5E\u6027\u63A7\u5236\u62A5\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9875\u9884\u89C8\uFF0C\u586B\u62A5\u9884\u89C8\u65F6\u5C5E\u6027\u65E0\u6548\u3002 FR-Designer_Background_Null=\u6CA1\u6709\u80CC\u666F FR-Designer_Background_Color=\u989C\u8272 @@ -624,7 +624,7 @@ Tree-Width=\u5BBD\u5EA6 alert_word=\u9009\u62E9\u4E0D\u56FA\u5B9A\u884C\u9AD8\u5BFC\u51FA\u65F6, \u7F16\u8F91\u5BFC\u51FA\u7684word, \u5355\u5143\u683C\u884C\u9AD8\u4F1A\u968F\u7740\u5185\u5BB9\u81EA\u52A8\u62C9\u4F38, \u6B64\u60C5\u51B5\u4E0B\u5BFC\u51FA\u7ED3\u679C\u5206\u9875\u4F4D\u7F6E\u4E0E\u9884\u89C8\u7ED3\u679C\u53EF\u80FD\u4F1A\u4E0D\u518D\u4E00\u81F4. PageSetup-Paper_Size=\u7EB8\u5F20\u5927\u5C0F M-Page_Setup=\u9875\u9762\u8BBE\u7F6E -DashBoard-FormBook=\u8868\u5355 +DashBoard-FormBook=\u51B3\u7B56\u62A5\u8868 X-Coordinate=\u6A2A\u5750\u6807 Style-Line_Spacing=\u884C\u95F4\u8DDD FR-Designer_Plugin_Should_Update_Title=\u63D2\u4EF6\u5347\u7EA7\u63D0\u9192 @@ -700,7 +700,7 @@ WF-Name=\u540D\u79F0 RWA-Click_Cell_To_Edit_Value=\u5355\u51FB\u6A21\u677F\u5355\u5143\u683C\u4FEE\u6539\u503C Utils-Row_Height=\u884C\u9AD8 ReportD-Excel_Export=\u6A21\u677F\u5BFC\u51FA\u5C5E\u6027 -Form-Please_Select_A_Kind_Of_Form_Container=\u8BF7\u9009\u62E9\u4E00\u79CD\u8868\u5355\u5BB9\u5668 +Form-Please_Select_A_Kind_Of_Form_Container=\u8BF7\u9009\u62E9\u4E00\u79CD\u51B3\u7B56\u62A5\u8868\u5BB9\u5668 Column_Does_Not_Exsit=\u5217\u4E0D\u5B58\u5728 M_Insert-Hyperlink=\u8D85\u7EA7\u94FE\u63A5 can_not_include_underline=\u4E0D\u80FD\u5305\u542B"_" @@ -835,7 +835,7 @@ Values=\u503C Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5355\u5143\u683C\u5C5E\u6027\u8868\u7F16\u8F91 Root=\u6839\u8282\u70B9 cycle=\u5468\u671F -open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u8868\u5355\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 +open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u51B3\u7B56\u62A5\u8868\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 Support-Current_Auto_Complete_Shortcut=\u5F53\u524D\u5FEB\u6377\u952E GROUPING_MODE=\u666E\u901A\u5206\u7EC4 DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5\u6570 @@ -1092,7 +1092,7 @@ Form-View_Tree=\u89C6\u56FE\u6811 M_Insert-Chart=\u63D2\u5165\u56FE\u8868 HF-Even_Page=\u5076\u6570\u9875 ReportServerP-Report_server_parameter=\u62A5\u8868\u670D\u52A1\u5668\u53C2\u6570 -JavaScript-Form_Submit=\u8868\u5355\u63D0\u4EA4 +JavaScript-Form_Submit=\u51B3\u7B56\u62A5\u8868\u63D0\u4EA4 Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u5E03\u5C40 BorderLayout-Center=\u4E2D INFO-Reset_Webapp=\u91CD\u7F6E\u5E94\u7528\u670D\u52A1\u5668 @@ -1442,7 +1442,7 @@ ReportColumns-Columns_after=\u8D85\u8FC7 FR-Designer_Undo=\u64A4\u9500 DBCP_MIN_IDLE=\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570 M-Data_Analysis_Settings=\u6570\u636E\u5206\u6790\u8BBE\u7F6E -M-Form_Preview=\u8868\u5355\u9884\u89C8 +M-Form_Preview=\u51B3\u7B56\u62A5\u8868\u9884\u89C8 Form-Basic_Properties=\u57FA\u672C\u5C5E\u6027 quote=\u5F15\u7528 Thu=\u56DB @@ -1519,7 +1519,7 @@ FR-Template-Path_chooseRightPath=\u8BF7\u9009\u62E9\u6B63\u786E\u8DEF\u5F84 FR-Remote_Re_Connect_to_Server=\u670D\u52A1\u5668\u5DF2\u5173\u95ED\uFF0C\u662F\u5426\u91CD\u65B0\u8FDE\u63A5\u670D\u52A1\u5668? Nation=\u56FD\u5BB6 DBCP_MAX_WAIT=\u6700\u5927\u7B49\u5F85\u65F6\u95F4 -FR-App-Template_Form=\u8868\u5355 +FR-App-Template_Form=\u51B3\u7B56\u62A5\u8868 Address=\u5730\u5740 Sub_Report=\u5B50\u62A5\u8868 FR-Import-Export_Word=Word\u683C\u5F0F @@ -1562,7 +1562,7 @@ Sub_Report_Description=\u5B50\u62A5\u8868\u9700\u8981\u5B58\u5728\u4E8E\u7236\u8 T_Insert-Float=\u63D2\u5165\u60AC\u6D6E\u5143\u7D20 BackgroundTexture-FishFossil=\u9C7C\u7C7B\u5316\u77F3 My_Computer=\u6211\u7684\u7535\u8111 -FORMLET=\u8BBF\u95EE\u4E0D\u540C\u8868\u5355\u7684\u8DEF\u5F84\u7684\u53C2\u6570 +FORMLET=\u8BBF\u95EE\u4E0D\u540C\u51B3\u7B56\u62A5\u8868\u7684\u8DEF\u5F84\u7684\u53C2\u6570 HF-Undefined=\u6CA1\u6709\u5B9A\u4E49 Widget-User_Defined_Widget_Config=\u9884\u5B9A\u4E49\u63A7\u4EF6 Report-Write_Attributes_Group_Warning=\u8BBE\u7F6E\u4E3A\u5355\u5143\u683C\u7EC4\u7684\u5404\u5B57\u6BB5\u4E2D\u7684\u5355\u5143\u683C\u4E2A\u6570\u5FC5\u987B\u76F8\u540C @@ -1596,7 +1596,7 @@ FS_Report_Type=\u7C7B\u578B HF-New_Line=\u6362\u884C\u7B26 Privilege=\u6743\u9650 Export-Offline-Html=\u8F93\u51FA\u79BB\u7EBFhtml\u62A5\u8868 -FR-Designer_open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u8868\u5355\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 +FR-Designer_open-new-form-tip=\u5F53\u524D\u6A21\u677F\u4E3A711\u4EE5\u4E0B\u7248\u672C\u5236\u4F5C\uFF0C\u65E0\u6CD5\u517C\u5BB9\uFF0C\u4E0D\u80FD\u6253\u5F00\u3002\u5047\u5982\u60F3\u6253\u5F00\u4FEE\u6539\u6B64\u51B3\u7B56\u62A5\u8868\uFF0C\u8BF7\u4F7F\u7528\u5BF9\u5E94\u7248\u672C\u8BBE\u8BA1\u5668\u6253\u5F00\u3002 FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6837\u5F0F Present-No_Present=\u53D6\u6D88\u5F62\u6001\u8BBE\u7F6E FR-Designer_Form-Password=\u5BC6\u7801 @@ -1620,7 +1620,7 @@ Above=\u4EE5\u4E0A\u7248\u672C Utils-The-Chart=\u56FE\u8868 FRFont-plain=\u5E38\u89C4 Calculating=\u5904\u7406\u4E2D -Form-Object=\u8868\u5355\u5BF9\u8C61\: +Form-Object=\u51B3\u7B56\u62A5\u8868\u5BF9\u8C61\: May=\u4E94\u6708 FR-Designer_Plugin_Normal_Update=\u66F4\u65B0 FR-Hyperlink_Reportlet=\u7F51\u7EDC\u62A5\u8868 @@ -1755,7 +1755,7 @@ ReportServerP-Last=\u672B\u9875 FR-Base_Columns=\u5217 SpecifiedG-Leave_in_their_own_groups=\u7559\u5728\u5404\u81EA\u7684\u7EC4\u5185 LOG-Please_Wait=\u8BF7\u7A0D\u5019 -Form-ToolBar=\u8868\u5355\u5DE5\u5177\u680F +Form-ToolBar=\u51B3\u7B56\u62A5\u8868\u5DE5\u5177\u680F FR-Base_sure_remove_item=\u4F60\u786E\u5B9E\u51B3\u5B9A\u5220\u9664\u9009\u4E2D\u7684\u9879 Component_Scale=\u7EC4\u4EF6\u7F29\u653E Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u5904\u7406\u53C2\u6570 @@ -1800,7 +1800,7 @@ Only_selected_cell_can_paste_only=\u53EA\u6709\u9009\u4E2D\u5355\u5143\u683C\u65 M_Report-Report_Columns=\u62A5\u8868\u5206\u680F Unit_Hundred=\u767E FR-Designer_DataTable-Build=\u6781\u901F\u5206\u5C42\u6784\u5EFA -Widget-Form_Widget_Config=\u8868\u5355\u63A7\u4EF6 +Widget-Form_Widget_Config=\u51B3\u7B56\u62A5\u8868\u63A7\u4EF6 Server-version-tip-moreInfo=\u5EFA\u8BAE\u60A8\u6240\u5C5E\u56E2\u961F\u4F7F\u7528\u7684\u6211\u65B9FineReport\u4EA7\u54C1\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u53F7\u4EE5\u53CA\u90E8\u7F72\u7684\u670D\u52A1\u5668\u7248\u672C\u53F7\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u95EE\u9898\u98CE\u9669\u3002\n\u5047\u5982\u60A8\u6253\u5F00\u66F4\u9AD8\u8BBE\u8BA1\u5668\u7248\u672C\u5236\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u5F00\u51FA\u9519\uFF0C\u4E5F\u53EF\u80FD\u4E22\u5931\u539F\u6709\u6A21\u677F\u5C5E\u6027\u3002\u5047\u5982\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8BBE\u8BA1\u5668\u7248\u672C\u9AD8\u4E8E\u60A8\u6700\u7EC8\u90E8\u7F72\u6240\u7528\u7684\u670D\u52A1\u5668\u7248\u672C\uFF0C\u670D\u52A1\u5668\u53EF\u80FD\u65E0\u6CD5\u6B63\u5E38\u8F7D\u5165\u60A8\u5236\u4F5C\u7684\u6A21\u677F\u3002 Actions=\u4EFB\u52A1 FR-Designer-Dependence_Connect_Server_Error=\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u5668\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5 @@ -1953,7 +1953,7 @@ ReportServerP-Import_JavaScript=\u5F15\u7528JavaScript Form-TableTree=\u8868\u683C\u6811 Opened=\u5DF2\u5F00\u542F M_Edit-Delete=\u5220\u9664(D) -Widget-Form_Widget_Container=\u8868\u5355\u5BB9\u5668 +Widget-Form_Widget_Container=\u51B3\u7B56\u62A5\u8868\u5BB9\u5668 BindColumn-Summary=\u6C47\u603B Sche-Second=\u79D2 Server-Open_Service_Manager=\u6253\u5F00\u670D\u52A1\u7BA1\u7406\u5668 @@ -1994,7 +1994,7 @@ FR-Designer_AlphaFine_EnableInternet=\u8054\u7F51 FR-Designer_AlphaFine_EnableInternetSearch=\u8054\u7F51\u641C\u7D22 FR-Designer_AlphaFine_Shortcut_Config=\u5FEB\u6377\u952E\u914D\u7F6E FR-Designer_AlphaFine_SearchRange=\u641C\u7D22\u8303\u56F4 -FR-Designer-Plugin_Addon=\u5E94\u7528\u4E2D\u5FC3 +FR-Designer-Plugin_Addon=\u5E06\u8F6F\u5E02\u573A FR-Designer_Templates=\u6A21\u677F FR-Designer_Templates_Content=\u6A21\u677F\u5185\u5BB9 FR-Designer_AlphaFine_ShowAll=\u663E\u793A\u5168\u90E8 @@ -2149,6 +2149,9 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=\u82E5\u542F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8BC1\u4E66\u8DEF\u5F84\u3001https\u79D8\u94A5\uFF09\uFF0C\u5FC5\u987B\u91CD\u542F\u8BBE\u8BA1\u5668\u624D\u80FD\u751F\u6548\u3002 FR-Designer_Format_JavaScript=\u683C\u5F0F\u5316\u4EE3\u7801 +FR-Designer_Tip_Content=\u63D0\u793A\u5185\u5BB9 +FR-Designer_Chart_Empty_Data=\u56FE\u8868\u7A7A\u6570\u636E\u63D0\u793A +FR-Designer-Vcs_tab_click=\u8BF7\u5148\u9000\u51FA\u7248\u672C\u7BA1\u7406\u72B6\u6001\u518D\u5207\u6362\u6A21\u677F FR-Designer_Preference_CachingTemplate=\u6A21\u677F\u5185\u5B58\u4F18\u5316 FR-Designer_Preference_MaxCachingTemplate=\u8BBE\u8BA1\u5668\u6700\u5927\u7F13\u5B58\u6A21\u677F\u4E2A\u6570\uFF1A FR-Designer_Preference_CachingTemplateTip=\u8BBE\u7F6E\u4E3A0\u8868\u793A\u5173\u95ED\u8BE5\u529F\u80FD\uFF1B\u91CD\u542F\u8BBE\u8BA1\u5668\u540E\u751F\u6548 @@ -2163,4 +2166,4 @@ FR-Designer_Tab_Template_Three=\u6A21\u677F\u4E09 FR-Designer_Tab_Template_Four=\u6A21\u677F\u56DB FR-Designer_Tab_Template_Five=\u6A21\u677F\u4E94 FR-Designer_Tab_Template_Six=\u6A21\u677F\u516D -FR-Designer_Tab_Display_Position=\u663E\u793A\u4F4D\u7F6E +FR-Designer_Tab_Display_Position=\u663E\u793A\u4F4D\u7F6E \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 6c4eb3800c..873d48f7ba 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -103,10 +103,10 @@ FR-Designer_Fit-App=App\u81EA\u9069\u61C9 FR-Designer_Fit=\u81EA\u9069\u61C9 FR-Designer_Font-Family=\u5B57\u9AD4\u540D\u7A31 FR-Designer_Font-Size=\u5B57\u9AD4\u5927\u5C0F -FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8A72\u5C0D\u8C61\u4E0D\u5141\u8A31\u62D6\u5165\u8868\u55AE\u4E3B\u9AD4 +FR-Designer_Forbid_Drag_into_Adapt_Pane=\u8A72\u5C0D\u8C61\u4E0D\u5141\u8A31\u62D6\u5165\u6C7A\u7B56\u5831\u8868\u4E3B\u9AD4 FR-Designer_Forbid_Drag_into_Para_Pane=\u8A72\u5C0D\u8C61\u4E0D\u80FD\u62D6\u5165\u53C3\u6578\u9762\u677F FR-Designer_Foreground=\u984F\u8272 -FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u66AB\u4E0D\u652F\u6301\u8868\u55AE\u6B0A\u9650\u7DE8\u8F2F +FR-Designer_Form-AuthorityEdited_Cannot_be_Supported=\u66AB\u4E0D\u652F\u6301\u6C7A\u7B56\u5831\u8868\u6B0A\u9650\u7DE8\u8F2F FR-Designer_Form-Report=\u5831\u8868\u683C\u5F0F FR-Designer_Form_EmbeddedTD=\u5167\u5D01\u683C\u5F0F FR-Designer_Form_Module=\u6A21\u7D44\u683C\u5F0F @@ -117,7 +117,7 @@ FR-Designer_Get-Cube=\u6B63\u5728\u7372\u53D6cube FR-Designer_Help=\u8AAA\u660E FR-Designer_Hide=\u96B1\u85CF FR-Designer_Hyperlink=\u8D85\u7D1A\u93C8\u63A5 -FR-Designer_Hyperlink-Form_link=\u7576\u524D\u8868\u55AE\u5C0D\u8C61 +FR-Designer_Hyperlink-Form_link=\u7576\u524D\u6C7A\u7B56\u5831\u8868\u5C0D\u8C61 FR-Designer_IDCard=\u8EAB\u4EFD\u8B49 FR-Designer_Icon=\u5716\u793A FR-Designer_Index=\u7D22\u5F15 @@ -493,7 +493,7 @@ FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027 FR-Designer_Button_OK=\u78BA\u5B9A FR-Designer_Button_Cancel=\u53D6\u6D88 FR-Designer_JavaScript=JavaScript\u8173\u672C -FR-Designer_JavaScript_Form_Submit=\u8868\u55AE\u63D0\u4EA4 +FR-Designer_JavaScript_Form_Submit=\u6C7A\u7B56\u5831\u8868\u63D0\u4EA4 FR-Designer_JavaScript_Commit_to_Database=\u63D0\u4EA4\u5165\u5EAB FR-Designer_JavaScript_Custom=\u81EA\u5B9A\u7FA9 FR-Designer_RWA_Submit=\u63D0\u4EA4 @@ -560,7 +560,7 @@ FR-Designer_DS_TableData=\u8CC7\u6599\u96C6 FR-Designer_Parameter-Formula=\u516C\u5F0F FR-Designer_Plugin_Should_Update_Please_Contact_Developer=\u633F\u4EF6\u7248\u672C\u904E\u4F4E\uFF0C\u5B58\u5728API\u4E0D\u76F8\u5BB9\uFF0C\u8ACB\u806F\u7CFB\u958B\u767C\u8005\u965E\u7D1A\u633F\u4EF6 FR-Designer_WidgetOrder=\u63A7\u4EF6\u9806\u5E8F -FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u8868\u55AE\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 +FR-Designer_Mobile_Form_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u6C7A\u7B56\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\u3002 FR-Designer_Mobile_Report_Analysis_Annotation=\u6CE8\u91CB\uFF1A\u53EF\u4EE5\u901A\u904E\u8A72\u5C6C\u6027\u63A7\u5236\u5831\u8868\u5728APP\u4E2D\u7684\u89E3\u6790\u65B9\u5F0F\uFF0C\u53EA\u652F\u6301\u5206\u9801\u9810\u89BD\uFF0C\u586B\u5831\u9810\u89BD\u6642\u5C6C\u6027\u7121\u6548\u3002 FR-Designer_Background_Null=\u6C92\u6709\u80CC\u666F FR-Designer_Background_Color=\u984F\u8272 @@ -622,7 +622,7 @@ Tree-Width=\u5BEC\u5EA6 alert_word=\u9078\u64C7\u4E0D\u56FA\u5B9A\u5217\u9AD8\u532F\u51FA\u6642, \u7DE8\u8F2F\u532F\u51FA\u7684word, \u5132\u5B58\u683C\u5217\u9AD8\u6703\u96A8\u8457\u5167\u5BB9\u81EA\u52D5\u62C9\u4F38, \u6B64\u60C5\u6CC1\u4E0B\u532F\u51FA\u7D50\u679C\u8207\u9810\u89BD\u7D50\u679C\u53EF\u80FD\u6703\u4E0D\u518D\u4E00\u81F4. PageSetup-Paper_Size=\u7D19\u5F35\u5927\u5C0F M-Page_Setup=\u9801\u9762\u8A2D\u5B9A -DashBoard-FormBook=\u8868\u55AE +DashBoard-FormBook=\u6C7A\u7B56\u5831\u8868 X-Coordinate=\u6A6B\u5EA7\u6A19 Style-Line_Spacing=\u5217\u9593\u8DDD FR-Designer_Plugin_Should_Update_Title=Warning @@ -698,7 +698,7 @@ WF-Name=\u540D\u7A31 RWA-Click_Cell_To_Edit_Value=\u55AE\u64CA\u6A21\u677F\u5132\u5B58\u683C\u4FEE\u6539\u503C Utils-Row_Height=\u5217\u9AD8 ReportD-Excel_Export=\u5831\u8868\u532F\u51FA\u5C6C\u6027 -Form-Please_Select_A_Kind_Of_Form_Container=\u8ACB\u9078\u64C7\u4E00\u7A2E\u8868\u55AE\u5BB9\u5668 +Form-Please_Select_A_Kind_Of_Form_Container=\u8ACB\u9078\u64C7\u4E00\u7A2E\u6C7A\u7B56\u5831\u8868\u5BB9\u5668 Column_Does_Not_Exsit=\u6B04\u4E0D\u5B58\u5728 M_Insert-Hyperlink=\u8D85\u7D1A\u93C8\u63A5 can_not_include_underline=\u4E0D\u80FD\u5305\u542B"_" @@ -833,7 +833,7 @@ Values=\u503C Not_use_a_cell_attribute_table_editing=\u60A8\u4E0D\u53EF\u4EE5\u7528\u5132\u5B58\u683C\u5C6C\u6027\u8868\u7DE8\u8F2F Root=\u6839\u7BC0\u9EDE cycle=\u5468\u671F -open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. +open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u6C7A\u7B56\u5831\u8868, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. Support-Current_Auto_Complete_Shortcut=Current Shortcut GROUPING_MODE=\u666E\u901A\u5206\u7D44 DBCP_MAX_IDLE=\u6700\u5927\u7A7A\u9591\u9023\u63A5\u6578 @@ -1090,7 +1090,7 @@ Form-View_Tree=\u6AA2\u8996\u8868\u6A39 M_Insert-Chart=\u63D2\u5165\u5716\u8868 HF-Even_Page=\u5076\u6578\u9801 ReportServerP-Report_server_parameter=\u5831\u8868\u4F3A\u670D\u5668\u53C3\u6578 -JavaScript-Form_Submit=\u8868\u55AE\u63D0\u4EA4 +JavaScript-Form_Submit=\u6C7A\u7B56\u5831\u8868\u63D0\u4EA4 Horizontal-Split_Layout=\u6C34\u5E73\u5206\u5272\u5E03\u5C40 BorderLayout-Center=\u4E2D INFO-Reset_Webapp=\u91CD\u7F6E\u61C9\u7528\u4F3A\u670D\u5668 @@ -1439,7 +1439,7 @@ ReportColumns-Columns_after=\u8D85\u904E FR-Designer_Undo=\u5FA9\u539F DBCP_MIN_IDLE=\u6700\u5C0F\u7A7A\u9591\u9023\u63A5\u6578 M-Data_Analysis_Settings=\u8CC7\u6599\u5206\u6790\u8A2D\u5B9A -M-Form_Preview=\u8868\u55AE\u9810\u89BD +M-Form_Preview=\u6C7A\u7B56\u5831\u8868\u9810\u89BD Form-Basic_Properties=\u57FA\u672C\u5C6C\u6027 quote=\u5F15\u7528 Thu=\u56DB @@ -1517,7 +1517,7 @@ FR-Template-Path_chooseRightPath=\u8ACB\u9078\u64C7\u6B63\u78BA\u8DEF\u5F91 FR-Remote_Re_Connect_to_Server=\u4F3A\u670D\u5668\u5DF2\u95DC\u9589\uFF0C\u662F\u5426\u91CD\u65B0\u9023\u63A5\u4F3A\u670D\u5668? Nation=\u570B\u5BB6 DBCP_MAX_WAIT=\u6700\u5927\u7B49\u5F85\u6642\u9593 -FR-App-Template_Form=\u8868\u55AE +FR-App-Template_Form=\u6C7A\u7B56\u5831\u8868 Address=\u5730\u5740 Sub_Report=\u5B50\u5831\u8868 FR-Import-Export_Word=Word\u683C\u5F0F @@ -1560,7 +1560,7 @@ Sub_Report_Description=\u5B50\u5831\u8868\u9700\u8981\u5B58\u5728\u65BC\u7236\u8 T_Insert-Float=\u63D2\u5165\u61F8\u6D6E\u5143\u7D20 BackgroundTexture-FishFossil=\u9B5A\u985E\u5316\u77F3 My_Computer=\u6211\u7684\u96FB\u8166 -FORMLET=\u8A2A\u554F\u4E0D\u540C\u8868\u55AE\u7684\u8DEF\u5F91\u7684\u53C3\u6578 +FORMLET=\u8A2A\u554F\u4E0D\u540C\u6C7A\u7B56\u5831\u8868\u7684\u8DEF\u5F91\u7684\u53C3\u6578 HF-Undefined=\u6C92\u6709\u5B9A\u7FA9 Widget-User_Defined_Widget_Config=\u9810\u5B9A\u7FA9\u63A7\u5236\u9805 Report-Write_Attributes_Group_Warning=\u8A2D\u5B9A\u7232\u5132\u5B58\u683C\u7D44\u7684\u5404\u6B04\u4F4D\u4E2D\u7684\u5132\u5B58\u683C\u500B\u6578\u5FC5\u9808\u76F8\u540C @@ -1594,7 +1594,7 @@ FS_Report_Type=\u985E\u578B HF-New_Line=\u63DB\u5217\u7B26 Privilege=\u6B0A\u9650 Export-Offline-Html=\u8F38\u51FA\u96E2\u7DDAhtml\u5831\u8868 -FR-Designer_open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u8868\u55AE, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. +FR-Designer_open-new-form-tip=\u7576\u524D\u6A21\u677F\u70BA711\u4EE5\u4E0B\u7248\u672C\u88FD\u4F5C, \u7121\u6CD5\u517C\u5BB9, \u4E0D\u80FD\u6253\u958B. \u5047\u5982\u60F3\u6253\u958B\u4FEE\u6539\u6B64\u6C7A\u7B56\u5831\u8868, \u8ACB\u4F7F\u7528\u5C0D\u61C9\u7248\u672C\u8A2D\u8A08\u5668\u6253\u958B. FR-Designer-Widget-Style_Frame_Style=\u6846\u67B6\u6A23\u5F0F Present-No_Present=\u53D6\u6D88\u6A21\u5F0F\u8A2D\u5B9A FR-Designer_Form-Password=\u5BC6\u78BC @@ -1618,7 +1618,7 @@ Above=\u4EE5\u4E0A\u7248\u672C Utils-The-Chart=\u5716\u8868 FRFont-plain=\u5E38\u898F Calculating=\u8655\u7406\u4E2D -Form-Object=\u8868\u55AE\u5C0D\u8C61 +Form-Object=\u6C7A\u7B56\u5831\u8868\u5C0D\u8C61 May=\u4E94\u6708 FR-Designer_Plugin_Normal_Update=Update FR-Hyperlink_Reportlet=\u7DB2\u8DEF\u5831\u8868 @@ -1753,7 +1753,7 @@ ReportServerP-Last=\u672B\u9801 FR-Base_Columns=\u6B04 SpecifiedG-Leave_in_their_own_groups=\u7559\u5728\u5404\u81EA\u7684\u7D44\u5167 LOG-Please_Wait=\u8ACB\u7A0D\u5019 -Form-ToolBar=\u8868\u55AE\u5DE5\u5177\u6B04 +Form-ToolBar=\u6C7A\u7B56\u5831\u8868\u5DE5\u5177\u6B04 FR-Base_sure_remove_item=\u4F60\u78BA\u5BE6\u6C7A\u5B9A\u522A\u9664\u9078\u4E2D\u7684\u9805 Component_Scale=\u5143\u4EF6\u7E2E\u653E Hyperlink-Use_CJK_to_encode_parameter=\u4F7F\u7528CJK\u8655\u7406\u53C3\u6578 @@ -1798,7 +1798,7 @@ Only_selected_cell_can_paste_only=\u53EA\u6709\u9078\u4E2D\u5132\u5B58\u683C\u66 M_Report-Report_Columns=\u5831\u8868\u5206\u6B04 Unit_Hundred=\u4F70 FR-Designer_DataTable-Build=\u6975\u901F\u5206\u5C64\u69CB\u5EFA -Widget-Form_Widget_Config=\u8868\u55AE\u63A7\u5236\u9805 +Widget-Form_Widget_Config=\u6C7A\u7B56\u5831\u8868\u63A7\u5236\u9805 Server-version-tip-moreInfo=\u5EFA\u8B70\u60A8\u6240\u5C6C\u5718\u968A\u4F7F\u7528\u7684\u6211\u65B9FineReport\u7522\u54C1\u7684\u8A2D\u8A08\u5668\u7248\u672C\u865F\u4EE5\u53CA\u90E8\u7F72\u7684\u4F3A\u670D\u5668\u7248\u672C\u865F\u4FDD\u6301\u4E00\u81F4\uFF0C\u4EE5\u907F\u514D\u7248\u672C\u4E0D\u4E00\u81F4\u9020\u6210\u7684\u554F\u984C\u98A8\u96AA\u3002\u5047\u5982\u60A8\u6253\u958B\u66F4\u9AD8\u8A2D\u8A08\u5668\u7248\u672C\u88FD\u4F5C\u7684\u6A21\u677F\uFF0C\u53EF\u80FD\u6253\u958B\u51FA\u932F\uFF0C\u4E5F\u53EF\u80FD\u4E1F\u5931\u539F\u6709\u6A21\u677F\u5C6C\u6027\u3002\u5047\u5982\u60A8\u88FD\u4F5C\u7684\u6A21\u677F\u4F7F\u7528\u7684\u8A2D\u8A08\u5668\u7248\u672C\u9AD8\u65BC\u60A8\u6700\u7D42\u90E8\u7F72\u6240\u7528\u7684\u4F3A\u670D\u5668\u7248\u672C\uFF0C\u4F3A\u670D\u5668\u53EF\u80FD\u7121\u6CD5\u6B63\u5E38\u8F09\u5165\u60A8\u88FD\u4F5C\u7684\u6A21\u677F Actions=\u4EFB\u52D9 FR-Designer-Dependence_Connect_Server_Error=\u7121\u6CD5\u9023\u63A5\u670D\u52D9\u5668\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66 @@ -1951,7 +1951,7 @@ ReportServerP-Import_JavaScript=\u5F15\u7528JavaScript Form-TableTree=\u8868\u683C\u6A39 Opened=\u5DF2\u958B\u5553 M_Edit-Delete=\u522A\u9664(D) -Widget-Form_Widget_Container=\u8868\u55AE\u5BB9\u5668 +Widget-Form_Widget_Container=\u6C7A\u7B56\u5831\u8868\u5BB9\u5668 BindColumn-Summary=\u532F\u7E3D Sche-Second=\u79D2 Server-Open_Service_Manager=\u6253\u958B\u4F3A\u670D\u5668\u7BA1\u7406\u5668 @@ -1992,7 +1992,7 @@ FR-Designer_AlphaFine_EnableInternetSearch=\u806F\u7DB2\u641C\u7D22 FR-Designer_AlphaFine_Shortcut_Config=\u5FEB\u6377\u9375\u914D\u7F6E FR-Designer_AlphaFine_SearchRange=\u641C\u7D22\u7BC4\u570D FR-Designer_AlphaFine_Recommend=\u731C\u60A8\u9700\u8981 -FR-Designer-Plugin_Addon=\u61C9\u7528\u4E2D\u5FC3 +FR-Designer-Plugin_Addon=\u5E06\u8EDF\u5E02\u5834 FR-Designer_Templates=\u6A21\u677F FR-Designer_Templates_Content=\u6A21\u677F\u5167\u5BB9 FR-Designer_AlphaFine_Latest=\u6700\u8FD1\u5E38\u7528 @@ -2148,6 +2148,9 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=\u82E5\u555F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8B49\u66F8\u8DEF\u5F91\u3001https\u7955\u9470\uFF09\uFF0C\u5FC5\u9808\u91CD\u555F\u8A2D\u8A08\u5668\u624D\u80FD\u751F\u6548\u3002 FR-Designer_Format_JavaScript=Format Code +FR-Designer_Tip_Content= +FR-Designer_Chart_Empty_Data= +FR-Designer-Vcs_tab_click= FR-Designer_Preference_CachingTemplate=\u7BC4\u672C\u8A18\u61B6\u9AD4\u512A\u5316 FR-Designer_Preference_MaxCachingTemplate=\u8A2D\u8A08\u5668\u6700\u5927\u7DE9\u5B58\u7BC4\u672C\u500B\u6578\uFF1A FR-Designer_Preference_CachingTemplateTip=\u8A2D\u5B9A\u70BA0\u8868\u793A\u95DC\u9589\u8A72\u529F\u80FD\uFF1B\u91CD\u5553\u8A2D\u8A08\u5668\u5F8C\u751F\u6548 diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java index ce330d0261..33eeca3059 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java @@ -10,6 +10,7 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; @@ -49,9 +50,23 @@ import com.fr.stable.StableUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; import com.fr.stable.project.ProjectConstants; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLayeredPane; +import javax.swing.JMenuBar; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.WindowConstants; import javax.swing.border.MatteBorder; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.*; @@ -734,6 +749,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 添加的模板. */ public void addAndActivateJTemplate(JTemplate jt) { + //释放模板对象 + ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } @@ -750,6 +767,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 模板 */ public void activateJTemplate(JTemplate jt) { + //释放模板对象 + ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 6b3606ff95..c8a4b231de 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -10,7 +10,11 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.tabledata.ResponseDataSourceChange; -import com.fr.design.file.*; +import com.fr.design.file.FileOperations; +import com.fr.design.file.FileToolbarStateChangeListener; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -41,6 +45,7 @@ import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -51,6 +56,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private CardLayout card; private JPanel cardPane; + private java.util.List otherToobarStateChangeListeners= new ArrayList<>(); + + public FileOperations getSelectedOperation() { + return selectedOperation; + } private FileOperations selectedOperation; private UIToolbar toolBar; @@ -133,7 +143,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } toolbarDef.addShortCut(delFileAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); - for (ShortCut shortCut : extraShortCuts){ + for (ShortCut shortCut : extraShortCuts) { toolbarDef.addShortCut(shortCut); } @@ -159,8 +169,9 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } /** - * 响应数据集改变 - * @param map 改变名字的数据集 + * 响应数据集改变 + * + * @param map 改变名字的数据集 */ public void fireDSChanged(Map map) { DesignTableDataManager.fireDSChanged(map); @@ -211,6 +222,21 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt public void actionPerformed(ActionEvent evt) { selectedOperation.refresh(); stateChange(); + + } + } + + public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { + this.otherToobarStateChangeListeners.add(toobarStateChangeListener); + } + + public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { + this.otherToobarStateChangeListeners.remove(toobarStateChangeListener); + } + + private void otherStateChange() { + for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) { + toobarStateChangeListener.stateChange(); } } @@ -294,8 +320,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt openReportAction.setEnabled(false); } FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); - if (selectedOperation.getSelectedTemplatePath() != null){ - if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(),node.getLock())){ + if (selectedOperation.getSelectedTemplatePath() != null) { + if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { delFileAction.setEnabled(false); } else { delFileAction.setEnabled(true); @@ -328,6 +354,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt delFileAction.setEnabled(true); } + otherStateChange(); } /** diff --git a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java index 5c37e53202..0c9d536d99 100644 --- a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java @@ -499,7 +499,6 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private boolean isEnabled = true; // 是否可用 private Set visibleModes; private Set enableModes; - private static final int MAX_PARA_HEIGHT = 240; // 完整icon路径为 ICON_BASE_DIR + btnIconName + iconSuffix private static final String ICON_BASE_DIR = "/com/fr/design/images/buttonicon/propertiestab/"; @@ -621,8 +620,6 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public void replaceHeaderPane(JComponent pane) { contentArea.remove(headerPane); - int height = Math.min(pane.getPreferredSize().height, MAX_PARA_HEIGHT); - pane.setPreferredSize(new Dimension(pane.getPreferredSize().width, height)); headerPane = pane; contentArea.add(headerPane, BorderLayout.NORTH); diff --git a/designer_base/src/com/fr/design/mainframe/JFormSliderPane.java b/designer_base/src/com/fr/design/mainframe/JFormSliderPane.java index 81a916637b..8a0ad05a42 100644 --- a/designer_base/src/com/fr/design/mainframe/JFormSliderPane.java +++ b/designer_base/src/com/fr/design/mainframe/JFormSliderPane.java @@ -14,13 +14,33 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JFormattedTextField; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButton; +import javax.swing.JSeparator; +import javax.swing.JSpinner; +import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.text.DefaultFormatterFactory; import javax.swing.text.NumberFormatter; -import java.awt.*; -import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseEvent; import java.math.BigDecimal; /** @@ -51,7 +71,6 @@ public class JFormSliderPane extends JPanel { private static final Color BACK_COLOR = new Color(245, 245, 247); public int showValue = 100; public double resolutionTimes = 1.0; - private static JFormSliderPane THIS; private UITextField showVal; private JSpinner showValSpinner; private UISlider slider; @@ -62,7 +81,7 @@ public class JFormSliderPane extends JPanel { private UISliderButton showValButton; private UIRadioButton twoHundredButton; private UIRadioButton oneHundredButton; - private UIRadioButton SevenFiveButton; + private UIRadioButton sevenFiveButton; private UIRadioButton fiveTenButton; private UIRadioButton twoFiveButton; private UIRadioButton selfAdaptButton; @@ -83,7 +102,7 @@ public class JFormSliderPane extends JPanel { showValSpinner.setEditor(editor); JFormattedTextField textField = ((JSpinner.NumberEditor) showValSpinner.getEditor()).getTextField(); textField.setEditable(true); - DefaultFormatterFactory factory = (DefaultFormatterFactory) textField .getFormatterFactory(); + DefaultFormatterFactory factory = (DefaultFormatterFactory) textField.getFormatterFactory(); NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter(); formatter.setAllowsInvalid(false); @@ -91,7 +110,7 @@ public class JFormSliderPane extends JPanel { initShowValButton(); initUIRadioButton(); initPane(); - JPanel panel = new JPanel(new FlowLayout(1, 0, 0)); + JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); panel.add(downButton); panel.add(slider); panel.add(upButton); @@ -100,17 +119,13 @@ public class JFormSliderPane extends JPanel { this.add(panel, BorderLayout.NORTH); } - public static final JFormSliderPane getInstance() { -// if (THIS == null) { -// THIS = new JSliderPane(); -// } - THIS = new JFormSliderPane(); - return THIS; + public static JFormSliderPane getInstance() { + return new JFormSliderPane(); } private void initSlider() { - slider = new UISlider(0, HUNDRED, HALF_HUNDRED){ - public Point getToolTipLocation(MouseEvent event){ + slider = new UISlider(0, HUNDRED, HALF_HUNDRED) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; @@ -123,8 +138,8 @@ public class JFormSliderPane extends JPanel { } private void initShowValSpinner() { - showValSpinner = new UIBasicSpinner(new SpinnerNumberModel(HUNDRED, 0, FOUR_HUNDRED, 1)){ - public Point getToolTipLocation(MouseEvent event){ + showValSpinner = new UIBasicSpinner(new SpinnerNumberModel(HUNDRED, 0, FOUR_HUNDRED, 1)) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; @@ -134,16 +149,16 @@ public class JFormSliderPane extends JPanel { } private void initDownUpButton() { - downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png")){ - public Point getToolTipLocation(MouseEvent event){ + downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png")) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; downButton.setOpaque(false); downButton.setBorderPainted(false); downButton.setToolTipText(Inter.getLocText("FR-Designer_Scale_Down")); - upButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png")){ - public Point getToolTipLocation(MouseEvent event){ + upButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png")) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; @@ -164,10 +179,11 @@ public class JFormSliderPane extends JPanel { showValButton.addActionListener(showValButtonActionListener); showValButton.setToolTipText(Inter.getLocText("FR-Designer_Scale_Grade")); } + private void initUIRadioButton() { twoHundredButton = new UIRadioButton("200%"); oneHundredButton = new UIRadioButton("100%"); - SevenFiveButton = new UIRadioButton("75%"); + sevenFiveButton = new UIRadioButton("75%"); fiveTenButton = new UIRadioButton("50%"); twoFiveButton = new UIRadioButton("25%"); selfAdaptButton = new UIRadioButton(Inter.getLocText("FR-Designer_Scale_selfAdaptButton")); @@ -176,7 +192,7 @@ public class JFormSliderPane extends JPanel { customButton.setFont(new Font("SimSun", Font.PLAIN, FONT_SIZE)); twoHundredButton.addItemListener(radioButtonItemListener); oneHundredButton.addItemListener(radioButtonItemListener); - SevenFiveButton.addItemListener(radioButtonItemListener); + sevenFiveButton.addItemListener(radioButtonItemListener); fiveTenButton.addItemListener(radioButtonItemListener); twoFiveButton.addItemListener(radioButtonItemListener); customButton.addItemListener(new ItemListener() { @@ -194,7 +210,7 @@ public class JFormSliderPane extends JPanel { ButtonGroup bg = new ButtonGroup();// 初始化按钮组 bg.add(twoHundredButton);// 加入按钮组 bg.add(oneHundredButton); - bg.add(SevenFiveButton); + bg.add(sevenFiveButton); bg.add(fiveTenButton); bg.add(twoFiveButton); bg.add(selfAdaptButton); @@ -217,7 +233,7 @@ public class JFormSliderPane extends JPanel { septPane.setBackground(BACK_COLOR); twoHundredButton.setBackground(BACK_COLOR); oneHundredButton.setBackground(BACK_COLOR); - SevenFiveButton.setBackground(BACK_COLOR); + sevenFiveButton.setBackground(BACK_COLOR); fiveTenButton.setBackground(BACK_COLOR); twoFiveButton.setBackground(BACK_COLOR); // selfAdaptButton.setBackground(BACK_COLOR); @@ -227,7 +243,7 @@ public class JFormSliderPane extends JPanel { new Component[]{septPane, null}, new Component[]{twoHundredButton, null}, new Component[]{oneHundredButton, null}, - new Component[]{SevenFiveButton, null}, + new Component[]{sevenFiveButton, null}, new Component[]{fiveTenButton, null}, new Component[]{twoFiveButton, null}, new Component[]{customButton, createSpinnerPanel()} @@ -247,14 +263,14 @@ public class JFormSliderPane extends JPanel { return spinnerPanel; } - ActionListener showValButtonActionListener = new ActionListener() { + private ActionListener showValButtonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { popupDialog(); } }; - ChangeListener showValSpinnerChangeListener = new ChangeListener() { + private ChangeListener showValSpinnerChangeListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { int val = (int) ((UIBasicSpinner) e.getSource()).getValue(); @@ -277,7 +293,7 @@ public class JFormSliderPane extends JPanel { //定义一个监听器,用于监听所有滑动条 - ChangeListener listener = new ChangeListener() { + private ChangeListener listener = new ChangeListener() { public void stateChanged(ChangeEvent event) { //取出滑动条的值,并在文本中显示出来 if (!isButtonOrIsTxt) { @@ -296,7 +312,7 @@ public class JFormSliderPane extends JPanel { } }; - ItemListener radioButtonItemListener = new ItemListener() { + private ItemListener radioButtonItemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { JRadioButton temp = (JRadioButton) e.getSource(); @@ -312,7 +328,7 @@ public class JFormSliderPane extends JPanel { slider.setValue((int) (showValue + TWO_HUNDRED) / SIX); } else if (showValue < HUNDRED) { slider.setValue((int) ((showValue - TEN) / ONEPOINTEIGHT)); - } else if (showValue == HUNDRED) { + } else { slider.setValue(HALF_HUNDRED); } } @@ -336,7 +352,7 @@ public class JFormSliderPane extends JPanel { return b1.divide(b2, scale).doubleValue(); } - ActionListener buttonActionListener = new ActionListener() { + private ActionListener buttonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showValue = (int) showValSpinner.getValue(); diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 18f5b88ab0..1da72d5f79 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -3,6 +3,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.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; @@ -29,6 +30,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.mainframe.toolbar.VcsScene; import com.fr.design.menu.MenuDef; import com.fr.design.menu.NameSeparator; import com.fr.design.menu.ShortCut; @@ -682,7 +684,9 @@ public abstract class JTemplate> ex * @return 返回菜单 */ public ShortCut[] shortcut4FileMenu() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isVcsMode()) { + return VcsScene.shortcut4FileMenu(this); + } else if (BaseUtils.isAuthorityEditing()) { return new ShortCut[]{new SaveTemplateAction(this), new UndoAction(this), new RedoAction(this)}; } else { return new ShortCut[]{new SaveTemplateAction(this), new SaveAsTemplateAction(this), new UndoAction(this), new RedoAction(this)}; diff --git a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index 9a2aed712f..6a4f6b92f3 100644 --- a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -11,6 +11,7 @@ import com.fr.general.FRLogLevel; import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; +import com.fr.general.LogRecordTime; import com.fr.log.LogHandler; import com.fr.stable.EnvChangedListener; import com.fr.stable.xml.LogRecordTimeProvider; @@ -159,6 +160,10 @@ public class DesignerLogHandler { logHandlerArea.printStackTrace(message, level, date); } + public void printRemoteLog(LogRecordTime logRecordTime) { + logHandlerArea.printStackTrace(logRecordTime); + } + private class LogHandlerArea extends JPanel { private static final long serialVersionUID = 8215630927304621660L; diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 24059928b1..3a2aa24419 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -5,6 +5,7 @@ package com.fr.design.mainframe.toolbar; import com.fr.base.BaseUtils; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignState; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; @@ -58,7 +59,6 @@ import com.fr.plugin.observer.PluginEvent; import com.fr.plugin.observer.PluginEventListener; import com.fr.plugin.observer.PluginEventType; import com.fr.stable.ArrayUtils; -import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import javax.swing.*; @@ -132,6 +132,9 @@ public abstract class ToolBarMenuDock { }; private static final String FINEREPORT = "FineReport"; private static final int MENUBAR_HEIGHT = 22; + + private static final List PLUGIN_LISTENERS = new ArrayList<>(); + private MenuDef[] menus; private ToolBarDef toolBarDef; private List shortCutsList; @@ -177,7 +180,6 @@ public abstract class ToolBarMenuDock { return dim; } }; - this.menus = menus(plus); for (int i = 0; i < menus.length; i++) { menus[i].setHasRecMenu(true); @@ -202,6 +204,8 @@ public abstract class ToolBarMenuDock { } public MenuDef[] menus(final ToolBarMenuDockPlus plus) { + //删除之前创建的插件菜单监听 + clearPluginListeners(); java.util.List menuList = new java.util.ArrayList(); // 添加文件菜单 menuList.add(createFileMenuDef(plus)); @@ -231,7 +235,15 @@ public abstract class ToolBarMenuDock { return menuList.toArray(new MenuDef[menuList.size()]); } - + + private static synchronized void clearPluginListeners() { + + for (PluginEventListener listener : PLUGIN_LISTENERS) { + GeneralContext.stopListenPlugin(listener); + } + PLUGIN_LISTENERS.clear(); + } + /** * 获取所有actionmodel * @@ -316,8 +328,13 @@ public abstract class ToolBarMenuDock { } public MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) { - MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F'); + if (DesignerMode.isVcsMode()) { + MenuDef menuDef = VcsScene.createFileMenuDef(plus); + insertMenu(menuDef, MenuHandler.FILE); + return menuDef; + } + MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F'); ShortCut[] scs = new ShortCut[0]; if (!BaseUtils.isAuthorityEditing()) { scs = createNewFileShortCuts(); @@ -603,9 +620,9 @@ public abstract class ToolBarMenuDock { addExtraMenus(menuDef, anchor, action, set); } - - private void listenPluginMenuChange(final MenuDef menuDef, final String anchor, final ShortCutMethodAction action) { - + + private static synchronized void listenPluginMenuChange(final MenuDef menuDef, final String anchor, final ShortCutMethodAction action) { + PluginFilter filter = new PluginFilter() { @Override @@ -614,29 +631,35 @@ public abstract class ToolBarMenuDock { return context.contain(MenuHandler.MARK_STRING); } }; - - GeneralContext.listenPlugin(PluginEventType.BeforeStop, new PluginEventListener() { - + + PluginEventListener beforeStop = new PluginEventListener() { + @Override public void on(PluginEvent event) { PluginRuntime runtime = event.getContext().getRuntime(); Set menuHandlers = runtime.get(MenuHandler.MARK_STRING); removeExtraMenus(menuDef, anchor, action, menuHandlers); } - }, filter); - GeneralContext.listenPlugin(PluginEventType.AfterRun, new PluginEventListener() { - + }; + + PluginEventListener afterRun = new PluginEventListener() { + @Override public void on(PluginEvent event) { - + PluginRuntime runtime = event.getContext().getRuntime(); Set menuHandlers = runtime.get(MenuHandler.MARK_STRING); addExtraMenus(menuDef, anchor, action, menuHandlers); } - }, filter); + }; + + GeneralContext.listenPlugin(PluginEventType.BeforeStop, beforeStop, filter); + GeneralContext.listenPlugin(PluginEventType.AfterRun, afterRun, filter); + PLUGIN_LISTENERS.add(afterRun); + PLUGIN_LISTENERS.add(beforeStop); } - - private void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set set) { + + private static void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set set) { List target = new ArrayList<>(); @@ -658,8 +681,8 @@ public abstract class ToolBarMenuDock { menuDef.removeShortCut(shortCut); } } - - private void addExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set set) { + + private static void addExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set set) { List target = new ArrayList<>(); for (MenuHandler handler : set) { diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarNewTemplatePane.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarNewTemplatePane.java new file mode 100644 index 0000000000..47fc884fe9 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarNewTemplatePane.java @@ -0,0 +1,36 @@ +package com.fr.design.mainframe.toolbar; + +import com.fr.base.BaseUtils; +import com.fr.design.file.NewTemplatePane; + +import javax.swing.*; + +/** + * Created by hzzz on 2017/12/26. + */ +public class ToolBarNewTemplatePane extends NewTemplatePane { + + private static final ToolBarNewTemplatePane instance = new ToolBarNewTemplatePane(); + + private ToolBarNewTemplatePane() { + } + + public static NewTemplatePane getInstance() { + return instance; + } + + @Override + public Icon getNew() { + return BaseUtils.readIcon("/com/fr/design/images/buttonicon/addicon.png"); + } + + @Override + public Icon getMouseOverNew() { + return BaseUtils.readIcon("/com/fr/design/images/buttonicon/add_press.png"); + } + + @Override + public Icon getMousePressNew() { + return BaseUtils.readIcon("/com/fr/design/images/buttonicon/add_press.png"); + } +} diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java b/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java new file mode 100644 index 0000000000..1e7d9e88b3 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java @@ -0,0 +1,46 @@ +package com.fr.design.mainframe.toolbar; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.edit.RedoAction; +import com.fr.design.actions.edit.UndoAction; +import com.fr.design.actions.file.ExitDesignerAction; +import com.fr.design.actions.file.PreferenceAction; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.menu.MenuDef; +import com.fr.design.menu.SeparatorDef; +import com.fr.design.menu.ShortCut; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; + +/** + * Created by hzzz on 2017/12/28. + */ +public class VcsScene { + + public static MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) { + MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F'); + + ShortCut[] scs = new ShortCut[0]; + if (!ArrayUtils.isEmpty(scs)) { + menuDef.addShortCut(scs); + } + + scs = plus.shortcut4FileMenu(); + if (!ArrayUtils.isEmpty(scs)) { + menuDef.addShortCut(SeparatorDef.DEFAULT); + menuDef.addShortCut(scs); + menuDef.addShortCut(SeparatorDef.DEFAULT); + } + + if (!BaseUtils.isAuthorityEditing()) { + menuDef.addShortCut(new PreferenceAction()); + } + + menuDef.addShortCut(new ExitDesignerAction()); + return menuDef; + } + + public static ShortCut[] shortcut4FileMenu(JTemplate jTemplate) { + return new ShortCut[]{new UndoAction(jTemplate), new RedoAction(jTemplate)}; + } +} diff --git a/designer_base/src/com/fr/design/mainframe/widget/accessibles/TemplateStylePane.java b/designer_base/src/com/fr/design/mainframe/widget/accessibles/TemplateStylePane.java index 890e5dc5cf..e9afb05e9c 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/accessibles/TemplateStylePane.java +++ b/designer_base/src/com/fr/design/mainframe/widget/accessibles/TemplateStylePane.java @@ -41,11 +41,11 @@ public class TemplateStylePane extends BasicPane { listModel = new DefaultListModel(); listModel.addElement(new DefaultTemplateStyle()); listModel.addElement(new CardTemplateStyle()); + listModel.addElement(new BannerTemplateStyle()); listModel.addElement(new BookMarkTemplateStyle()); listModel.addElement(new PentagonTemplateStyle()); listModel.addElement(new MenuTemplateStyle()); listModel.addElement(new TrapezoidTemplateStyle()); - listModel.addElement(new BannerTemplateStyle()); styleList = new JList(listModel); styleList.setCellRenderer(render); diff --git a/designer_base/src/com/fr/design/menu/package.html b/designer_base/src/com/fr/design/menu/package.html new file mode 100644 index 0000000000..00934e263a --- /dev/null +++ b/designer_base/src/com/fr/design/menu/package.html @@ -0,0 +1,5 @@ + + +菜单组件 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/module/package.html b/designer_base/src/com/fr/design/module/package.html new file mode 100644 index 0000000000..8eb0720824 --- /dev/null +++ b/designer_base/src/com/fr/design/module/package.html @@ -0,0 +1,5 @@ + + +设计器模块相关 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/object/package.html b/designer_base/src/com/fr/design/object/package.html new file mode 100644 index 0000000000..fd245d3eee --- /dev/null +++ b/designer_base/src/com/fr/design/object/package.html @@ -0,0 +1,5 @@ + + +包含与对象有关的工具类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/preview/package.html b/designer_base/src/com/fr/design/preview/package.html new file mode 100644 index 0000000000..ed9564d89e --- /dev/null +++ b/designer_base/src/com/fr/design/preview/package.html @@ -0,0 +1,5 @@ + + +模版预览方式 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/roleAuthority/package.html b/designer_base/src/com/fr/design/roleAuthority/package.html new file mode 100644 index 0000000000..79db356fe8 --- /dev/null +++ b/designer_base/src/com/fr/design/roleAuthority/package.html @@ -0,0 +1,5 @@ + + +权限编辑相关代码 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/scrollruler/package.html b/designer_base/src/com/fr/design/scrollruler/package.html new file mode 100644 index 0000000000..867402e2c7 --- /dev/null +++ b/designer_base/src/com/fr/design/scrollruler/package.html @@ -0,0 +1,5 @@ + + +标尺的实现类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/selection/QuickEditor.java b/designer_base/src/com/fr/design/selection/QuickEditor.java index d2e74da5cd..c3a0c043af 100644 --- a/designer_base/src/com/fr/design/selection/QuickEditor.java +++ b/designer_base/src/com/fr/design/selection/QuickEditor.java @@ -2,7 +2,7 @@ package com.fr.design.selection; import com.fr.design.designer.TargetComponent; -import javax.swing.*; +import javax.swing.JComponent; /** * 快速编辑区域 @@ -39,11 +39,15 @@ public abstract class QuickEditor extends JComponent tc.fireTargetModified(); } + /** + * 刷新面板 + */ protected abstract void refresh(); /** - * for 关闭时候释放 + * 关闭模板时释放模板对象 + * 所有持有tc的对象也必须置空或者丢弃对于tc的引用 */ public void release() { tc = null; @@ -53,7 +57,6 @@ public abstract class QuickEditor extends JComponent @Override protected void refresh() { - } }; diff --git a/designer_base/src/com/fr/design/selection/package.html b/designer_base/src/com/fr/design/selection/package.html new file mode 100644 index 0000000000..10c7be1a7c --- /dev/null +++ b/designer_base/src/com/fr/design/selection/package.html @@ -0,0 +1,5 @@ + + +与选择模型有关的接口和抽象类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/background/gradient/GradientBar.java b/designer_base/src/com/fr/design/style/background/gradient/GradientBar.java index 36aab678b4..cf27b6acd2 100644 --- a/designer_base/src/com/fr/design/style/background/gradient/GradientBar.java +++ b/designer_base/src/com/fr/design/style/background/gradient/GradientBar.java @@ -180,7 +180,8 @@ public class GradientBar extends JComponent implements UIObserver,ColorSelectabl } float[] dist = new float[list.size()]; for (int i = 0; i < list.size(); i++) { - dist[i] = (float) ((list.get(i).getX() - 4) / (max - 4)); + float value = (float) ((list.get(i).getX() - 4) / (max - 4)); + dist[i] = Math.min(Math.max(0, value), 1); } LinearGradientPaint paint = new LinearGradientPaint(start, end, dist, c); diff --git a/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java b/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java index 3d986fa718..02b742ad3f 100644 --- a/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java +++ b/designer_base/src/com/fr/design/style/color/ColorSelectDialog.java @@ -84,7 +84,7 @@ public class ColorSelectDialog extends MiddleChartDialog{ this.setLayout(new BorderLayout()); this.add(pane,BorderLayout.NORTH); this.setBasicDialogSize(545,500); - + this.setResizable(false); JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); diff --git a/designer_base/src/com/fr/design/style/package.html b/designer_base/src/com/fr/design/style/package.html new file mode 100644 index 0000000000..579503c487 --- /dev/null +++ b/designer_base/src/com/fr/design/style/package.html @@ -0,0 +1,5 @@ + + +与样式(颜色、边框、字体、对齐方式等)有关的面板和功能 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/utils/package.html b/designer_base/src/com/fr/design/utils/package.html new file mode 100644 index 0000000000..d71a5c6cc2 --- /dev/null +++ b/designer_base/src/com/fr/design/utils/package.html @@ -0,0 +1,5 @@ + + +提供一些工具类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/web/package.html b/designer_base/src/com/fr/design/web/package.html new file mode 100644 index 0000000000..da2d797788 --- /dev/null +++ b/designer_base/src/com/fr/design/web/package.html @@ -0,0 +1,5 @@ + + +定义与web端展示有关的类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java b/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java index e534521706..fa0f4a6f9b 100644 --- a/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java +++ b/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java @@ -10,7 +10,6 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.widget.accessibles.AccessibleImgBackgroundEditor; import com.fr.form.ui.Widget; import com.fr.general.Inter; -import com.vividsolutions.jts.index.bintree.Interval; import javax.swing.*; import java.awt.*; diff --git a/designer_base/src/com/fr/design/widget/component/NumberEditorValidatePane.java b/designer_base/src/com/fr/design/widget/component/NumberEditorValidatePane.java index feaaf67dc1..4aedc2c57c 100644 --- a/designer_base/src/com/fr/design/widget/component/NumberEditorValidatePane.java +++ b/designer_base/src/com/fr/design/widget/component/NumberEditorValidatePane.java @@ -3,7 +3,6 @@ package com.fr.design.widget.component; import com.fr.design.designer.IntervalConstants; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; @@ -13,11 +12,13 @@ import com.fr.form.ui.NumberEditor; import com.fr.general.Inter; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import javax.swing.text.DefaultFormatter; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; diff --git a/designer_base/src/com/fr/design/widget/component/UIComboBoxNoArrow.java b/designer_base/src/com/fr/design/widget/component/UIComboBoxNoArrow.java index e9f1d1d2b3..f24434efe4 100644 --- a/designer_base/src/com/fr/design/widget/component/UIComboBoxNoArrow.java +++ b/designer_base/src/com/fr/design/widget/component/UIComboBoxNoArrow.java @@ -9,9 +9,11 @@ import com.fr.stable.StringUtils; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.plaf.basic.BasicComboBoxUI; -import java.awt.*; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; + +import java.awt.Dimension; +import java.awt.Insets; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; /** * Created by kerry on 2017/9/14. @@ -66,14 +68,29 @@ public class UIComboBoxNoArrow extends UIComboBox { super(); this.comboBox = comboBox; textField.getDocument().addDocumentListener(this); - textField.addFocusListener(new FocusListener() { + textField.addMouseListener(new MouseListener() { @Override - public void focusGained(FocusEvent e) { + public void mouseClicked(MouseEvent e) { changeHandler(); } @Override - public void focusLost(FocusEvent e) { + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { } }); diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index 65733b1dfd..614410fdac 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -25,11 +25,17 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; +import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.file.CacheManager; import com.fr.file.DatasourceManager; import com.fr.file.DatasourceManagerProvider; import com.fr.file.filetree.FileNode; -import com.fr.general.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.general.LogRecordTime; +import com.fr.general.LogUtils; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; import com.fr.json.JSONException; @@ -549,7 +555,7 @@ public class RemoteEnv extends AbstractEnv { } private void stopLogTimer() { - if(logTimer != null) { + if (logTimer != null) { logTimer.cancel(); logTimer = null; } @@ -1838,7 +1844,7 @@ public class RemoteEnv extends AbstractEnv { } LogRecordTime[] records = LogUtils.readXMLLogRecords(input); for (LogRecordTime logRecordTime : records) { - //TODO + DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); } } @@ -2075,8 +2081,7 @@ public class RemoteEnv extends AbstractEnv { info.parseJSON(jo); return info; } - - + @Override public String pluginServiceAction(String serviceID, String req) throws Exception { @@ -2092,11 +2097,13 @@ public class RemoteEnv extends AbstractEnv { /** * 远程不启动,使用虚拟服务 + * * @param serviceID */ @Override - public void pluginServiceStart(String serviceID){ + public void pluginServiceStart(String serviceID) { } + @Override public File[] loadREUFile() throws Exception { File target = new File(CacheManager.getProviderInstance().getCacheDirectory(), @@ -2216,29 +2223,29 @@ public class RemoteEnv extends AbstractEnv { public void doWhenServerShutDown() { } - + @Override public boolean isLocalEnv() { - + return false; } - + @Override public boolean hasPluginServiceStarted(String key) { return true; } - + @Override public JSONArray getPluginStatus() { - + try { HashMap para = new HashMap(); para.put("op", "plugin"); para.put("cmd", "get_status"); para.put("current_uid", this.createUserID()); para.put("currentUsername", this.getUser()); - + HttpClient client = createHttpMethod(para); InputStream input = execute4InputStream(client); return new JSONArray(stream2String(input)); @@ -2246,4 +2253,14 @@ public class RemoteEnv extends AbstractEnv { return JSONArray.create(); } } + + public String post(HashMap para, boolean isSignIn) { + try { + HttpClient client = createHttpMethod(para, isSignIn); + return stream2String(execute4InputStream(client)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + return StringUtils.EMPTY; + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/env/package.html b/designer_base/src/com/fr/env/package.html new file mode 100644 index 0000000000..4401234800 --- /dev/null +++ b/designer_base/src/com/fr/env/package.html @@ -0,0 +1,5 @@ + + +报表工作环境相关(本地设计、远程设计) + + \ No newline at end of file diff --git a/designer_base/src/com/fr/file/filter/package.html b/designer_base/src/com/fr/file/filter/package.html new file mode 100644 index 0000000000..7eb6a630f7 --- /dev/null +++ b/designer_base/src/com/fr/file/filter/package.html @@ -0,0 +1,5 @@ + + +文件过滤器 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/file/package.html b/designer_base/src/com/fr/file/package.html new file mode 100644 index 0000000000..c831ea79e3 --- /dev/null +++ b/designer_base/src/com/fr/file/package.html @@ -0,0 +1,5 @@ + + +与文件有关的工具类 + + \ No newline at end of file diff --git a/designer_base/src/com/fr/start/package.html b/designer_base/src/com/fr/start/package.html new file mode 100644 index 0000000000..eae1644a58 --- /dev/null +++ b/designer_base/src/com/fr/start/package.html @@ -0,0 +1,5 @@ + + +包含启动设计器的相关类(其中 Designer 是整个设计器程序的入口) + + \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index d11733e0c9..5b7a7bccc8 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -81,8 +81,12 @@ import com.fr.plugin.chart.treemap.VanChartTreeMapPlot; import com.fr.plugin.chart.vanchart.imgevent.design.DesignImageEvent; import com.fr.plugin.chart.wordcloud.VanChartWordCloudPlot; import com.fr.plugin.chart.wordcloud.designer.WordCloudIndependentVanChartInterface; +import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.injectable.PluginSingleInjection; +import com.fr.plugin.manage.PluginFilter; +import com.fr.plugin.observer.PluginEvent; +import com.fr.plugin.observer.PluginEventListener; import com.fr.plugin.solution.closeable.CloseableContainedMap; import com.fr.stable.ArrayUtils; import com.fr.stable.EnvChangedListener; @@ -125,12 +129,26 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr GeneralContext.addEnvChangedListener(new EnvChangedListener() { @Override public void envChanged() { - //重新注册designModuleFactory DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); DesignImageEvent.registerDefaultCallbackEvent(HistoryTemplateListPane.getInstance()); DesignImageEvent.registerDownloadSourcesEvent(new DownloadOnlineSourcesHelper()); } }); + GeneralContext.listenPluginRunningChanged(new PluginEventListener(1) { + + @Override + public void on(PluginEvent event) { + //重新注册designModuleFactory + DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); + } + }, new PluginFilter() { + + @Override + public boolean accept(PluginContext context) { + //图表插件变化时 + return context.contain(PluginModule.ExtraChartType); + } + }); } private static WidgetOption[] initWidgetOption() { diff --git a/designer_chart/src/com/fr/design/chart/package.html b/designer_chart/src/com/fr/design/chart/package.html new file mode 100644 index 0000000000..1ed1e80174 --- /dev/null +++ b/designer_chart/src/com/fr/design/chart/package.html @@ -0,0 +1,5 @@ + + +图表相关的代码 + + \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperRelateFloatLinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperRelateFloatLinkPane.java index 0ad4b8d321..c30e3af1c1 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperRelateFloatLinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperRelateFloatLinkPane.java @@ -19,6 +19,7 @@ import javax.swing.border.Border; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; import java.awt.*; +import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -92,9 +93,16 @@ public class ChartHyperRelateFloatLinkPane extends AbstractHyperLinkPane isStacked; protected UIButtonGroup isPercentStacked; + private ConditionAttr conditionAttr; + private LiteConditionPane liteConditionPane; public VanChartCustomStackAndAxisConditionPane() { @@ -94,6 +96,7 @@ public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane(seriesStackAndAxis.getXAxisNamesArray()); YAxis = new UIButtonGroup(seriesStackAndAxis.getYAxisNameArray()); @@ -123,8 +126,7 @@ public class VanChartCustomStackAndAxisConditionPane extends BasicBeanPane + +图表(新特性) + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java index 95cde265df..ce57343c29 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java @@ -3,6 +3,7 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; @@ -37,13 +38,13 @@ public class MoveDownAction extends FormEditAction { } FormSelection selection = designer.getSelectionModel().getSelection(); XCreator creator = selection.getSelectedCreator(); - Container container = creator.getParent(); + XLayoutContainer container = (XLayoutContainer) creator.getParent(); int targetIndex = container.getComponentZOrder(creator) + 1; if (targetIndex >= container.getComponentCount()) { return false; } container.setComponentZOrder(creator, targetIndex); - designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_SELECTED); return true; } diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java index 9fc69953b8..5a69805253 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java @@ -3,6 +3,7 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; @@ -37,13 +38,13 @@ public class MoveToBottomAction extends FormEditAction { } FormSelection selection = designer.getSelectionModel().getSelection(); XCreator creator = selection.getSelectedCreator(); - Container container = creator.getParent(); + XLayoutContainer container = (XLayoutContainer) creator.getParent(); int targetIndex = container.getComponentCount() - 1; if (container.getComponentZOrder(creator) >= targetIndex) { return false; } container.setComponentZOrder(creator, targetIndex); - designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_SELECTED); return true; } diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java index 47be1b9f2a..0995df3ca1 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java @@ -3,6 +3,7 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; @@ -37,12 +38,12 @@ public class MoveToTopAction extends FormEditAction { } FormSelection selection = designer.getSelectionModel().getSelection(); XCreator creator = selection.getSelectedCreator(); - Container container = creator.getParent(); + XLayoutContainer container = (XLayoutContainer) creator.getParent(); if (container.getComponentZOrder(creator) == 0) { return false; } container.setComponentZOrder(creator, 0); - designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_SELECTED); return true; } diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java index 512b075d9b..654b39d695 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java @@ -3,6 +3,7 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; @@ -36,13 +37,14 @@ public class MoveUpAction extends FormEditAction { } FormSelection selection = designer.getSelectionModel().getSelection(); XCreator creator = selection.getSelectedCreator(); - Container container = creator.getParent(); + XLayoutContainer container = (XLayoutContainer) creator.getParent(); int targetIndex = container.getComponentZOrder(creator) - 1; if (targetIndex < 0) { return false; } container.setComponentZOrder(creator, targetIndex); - designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_SELECTED); return true; } diff --git a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java index 8c3cd743de..d7f073b451 100644 --- a/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/DedicateLayoutContainer.java @@ -5,9 +5,10 @@ package com.fr.design.designer.creator; import com.fr.form.ui.container.WLayout; -import java.awt.*; +import java.awt.Component; +import java.awt.Dimension; import java.beans.IntrospectionException; -import java.util.ArrayList; +import java.util.List; /** * 一些控件专属的容器,如标题容器,sclae容器 @@ -27,6 +28,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * @return 属性名 * @throws IntrospectionException */ + @Override public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { return new CRPropertyDescriptor[0]; } @@ -50,7 +52,8 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * * @param path 控件树list */ - public void notShowInComponentTree(ArrayList path) { + @Override + public void notShowInComponentTree(List path) { path.remove(path.size() - 1); } @@ -59,6 +62,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * * @param name 名称 */ + @Override public void resetCreatorName(String name) { super.resetCreatorName(name); XCreator child = getXCreator(XWScaleLayout.INDEX); @@ -70,6 +74,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * 重置组件的可见性 * @param visible 可见性 */ + @Override public void resetVisible(boolean visible){ super.resetVisible(visible); XCreator child = getXCreator(XWScaleLayout.INDEX); @@ -80,6 +85,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * * @return 组件 */ + @Override public XCreator getPropertyDescriptorCreator() { return getXCreator(XWScaleLayout.INDEX); } @@ -89,6 +95,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * * @return 是则返回true */ + @Override public boolean isComponentTreeLeaf() { return true; } @@ -98,6 +105,7 @@ public abstract class DedicateLayoutContainer extends XLayoutContainer { * * @return 是则返回true */ + @Override public boolean isDedicateContainer() { return true; } diff --git a/designer_form/src/com/fr/design/designer/creator/XButton.java b/designer_form/src/com/fr/design/designer/creator/XButton.java index d534f6d632..feeb9e583b 100644 --- a/designer_form/src/com/fr/design/designer/creator/XButton.java +++ b/designer_form/src/com/fr/design/designer/creator/XButton.java @@ -198,10 +198,14 @@ public class XButton extends XWidgetCreator { protected JComponent initEditor() { if (editor == null) { editor = new UILabel(); - contentLabel = new UILabel(); + contentLabel = initContentLabel(); } return editor; } + + protected UILabel initContentLabel() { + return new UILabel(); + } @Override public void paintComponent(Graphics g) { diff --git a/designer_form/src/com/fr/design/designer/creator/XCreator.java b/designer_form/src/com/fr/design/designer/creator/XCreator.java index ed234b62ab..f337ea14ff 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -271,6 +271,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo *@param formEditor 设计界面组件 *@return 工具界面 */ + @Override public JComponent createToolPane(BaseJForm jform, FormDesigner formEditor) { if (!BaseUtils.isAuthorityEditing()) { if (isDedicateContainer()) { @@ -370,14 +371,25 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 控件树不显示此组件 * @param path 控件树list */ - public void notShowInComponentTree(ArrayList path) { + @Override + public void notShowInComponentTree(List path) { return; } + /** + * 获取其在控件树上可见父层 + * @return 组件 + */ + @Override + public Component getParentShow(){ + return this.getParent(); + } + /** * 重置组件的名称 * @param name 名称 */ + @Override public void resetCreatorName(String name) { toData().setWidgetName(name); } @@ -394,6 +406,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 返回编辑的子组件,scale为其内部组件 * @return 组件 */ + @Override public XCreator getEditingChildCreator() { return this; } @@ -402,6 +415,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 返回对应属性表的组件,scale和title返回其子组件 * @return 组件 */ + @Override public XCreator getPropertyDescriptorCreator() { return this; } @@ -410,6 +424,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 更新子组件的Bound; 没有不处理 * @param minHeight 最小高度 */ + @Override public void updateChildBound(int minHeight) { return; } @@ -418,6 +433,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 是否作为控件树的叶子节点 * @return 是则返回true */ + @Override public boolean isComponentTreeLeaf() { return true; } @@ -426,6 +442,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 是否为sclae和title专属容器 * @return 是则返回true */ + @Override public boolean isDedicateContainer() { return false; } @@ -671,9 +688,9 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 创建右击弹出菜单 * */ - public JPopupMenu createPopupMenu(FormDesigner formDesigner) { + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { UpdateAction[] actions = formDesigner.getActions(); - JPopupMenu popup = new UIPopupMenu(); + UIPopupMenu popup = new UIPopupMenu(); for (int i = 0; i < actions.length; i++) { if (i == SHORTS_SEPARATOR_POS) { popup.addSeparator(); diff --git a/designer_form/src/com/fr/design/designer/creator/XCreatorTools.java b/designer_form/src/com/fr/design/designer/creator/XCreatorTools.java index 6434fcc915..2d87633cdc 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreatorTools.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreatorTools.java @@ -5,6 +5,7 @@ package com.fr.design.designer.creator; import java.awt.Component; import java.util.ArrayList; +import java.util.List; /** * @author jim @@ -17,7 +18,7 @@ public interface XCreatorTools { * 控件树不显示此组件 * @param path 控件树list */ - void notShowInComponentTree(ArrayList path); + void notShowInComponentTree(List path); /** * 重置组件的名称 @@ -54,5 +55,11 @@ public interface XCreatorTools { * @return 是则返回true */ boolean isDedicateContainer(); + + /** + * 获取其在控件树上可见父层 + * @return 组件 + */ + Component getParentShow(); } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 8ecb2b62ab..514cd12d18 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -119,9 +119,10 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme ReportFitAttrProvider fitAttr = wbTpl.getFitAttr(); ElementCaseEditor editor = this.toData(); //兼容之前报表块(之前三个选项为:默认 横向 双向 现在是:横向 双向 不自适应) - if (editor.getFitStateInPC() == 0) { + if (editor.getFitStateInPC() == 0 || processor.getFitStateInPC(fitAttr) == 0 ) { editor.setReportFitAttr(null); } + ReportFitAttrProvider reportFit = editor.getReportFitAttr(); if(fitAttr != null){ reportFit = fitAttr.fitInBrowser() ? editor.getReportFitAttr() : fitAttr; diff --git a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java index 28427b9afb..4f0476388d 100644 --- a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java @@ -126,6 +126,14 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme return this; } + public void setComponentZOrder(XCreator creator, int targetIndex) { + super.setComponentZOrder(creator, targetIndex); // 设计器界面上更改 + // 以下是数据层更改,会反映到 web 端 + WLayout layout = this.toData(); + String widgetName = creator.toData().getWidgetName(); + layout.setWidgetIndex(layout.getWidget(widgetName), targetIndex); + } + /** * 当前组件zorder位置替换新的控件 * @@ -233,6 +241,10 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme } } + public int getShowXCreatorCount() { + return getXCreatorCount(); + } + public int getXCreatorCount() { return getComponentCount(); } @@ -552,4 +564,12 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme return false; } + /** + * 内部组件是否支持叠加顺序的调整 + * return boolean + */ + public boolean supportInnerOrderChangeActions() { + return false; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java index 1c389230b6..127d5deeaf 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java @@ -5,17 +5,13 @@ import com.fr.design.designer.beans.adapters.layout.FRAbsoluteBodyLayoutAdapter; import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; -import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; -import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WAbsoluteBodyLayout; -import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.core.PropertyChangeAdapter; -import java.awt.*; +import java.awt.Component; +import java.awt.Dimension; import java.beans.IntrospectionException; /** @@ -89,6 +85,20 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout { }; } + /** + * 获取其在控件树上可见父层 + * @return 组件 + */ + @Override + public Component getParentShow(){ + //绝对布局作为body的时候不显示自适应布局父层 + if ((this.getParent() != null)) { + return ((XCreator) this.getParent()).getParentShow(); + } + return super.getParentShow(); + } + + @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(this)}; diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 58c5f74dda..eba8cd6888 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -171,16 +171,14 @@ public class XWAbsoluteLayout extends XLayoutContainer { tabLayout.updateBoundsWidget(); } } - BoundsWidget boundsWidget = (BoundsWidget) layout.getBoundsWidget(xCreator.toData()); - Rectangle rectangle = dealWidgetBound(xCreator.getBounds()); } private Rectangle calculateBound(Rectangle rec, double pw, double ph) { Rectangle calRec = new Rectangle(0, 0, 0, 0); - calRec.x = (int) (rec.x / pw); - calRec.y = (int) (rec.y / ph); - calRec.width = (int) (rec.width / pw); - calRec.height = (int) (rec.height / ph); + calRec.x = (int) Math.round(rec.x / pw); + calRec.y = (int) Math.round(rec.y / ph); + calRec.width = (int) Math.round(rec.width / pw); + calRec.height = (int) Math.round(rec.height / ph); return calRec; } @@ -515,4 +513,9 @@ public class XWAbsoluteLayout extends XLayoutContainer { widget.setBounds(xCreator.getBounds()); } } + + @Override + public boolean supportInnerOrderChangeActions() { + return true; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 2de9bbac4c..3d52b2beff 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -1,13 +1,5 @@ package com.fr.design.designer.creator.cardlayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.event.MouseEvent; - -import javax.swing.Icon; - import com.fr.base.BaseUtils; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; @@ -15,6 +7,7 @@ import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XButton; import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; @@ -25,17 +18,19 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; + public class XCardAddButton extends XButton{ private XWCardTagLayout tagLayout; private XWCardLayout cardLayout; - private static final int LEFT_GAP = 5; - private static final int UP_GAP = 10; - private static final int START_INDEX = 3; - private static final int INDEX = 0; + private static final int DEFAULT_BUTTON_WIDTH = 80; - + private static final int ICON_OFFSET = 8; + private static Icon ADD_ICON = BaseUtils.readIcon("/com/fr/design/form/images/add.png"); private Icon addIcon = ADD_ICON; @@ -112,6 +107,11 @@ public class XCardAddButton extends XButton{ tagLayout.setTabsAndAdjust(); LayoutUtils.layoutRootContainer(designer.getRootComponent()); } + + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 不要菜单 + } private void initRelateLayout(){ XWCardTitleLayout titleLayout = (XWCardTitleLayout)this.getBackupParent(); @@ -128,7 +128,9 @@ public class XCardAddButton extends XButton{ } private void drawAddIcon(Graphics2D g2d){ - addIcon.paintIcon(this, g2d,LEFT_GAP,UP_GAP); + int width = this.getWidth(); + int height = this.getHeight(); + addIcon.paintIcon(this, g2d, width / 2 - ICON_OFFSET, height / 2 - ICON_OFFSET); } //将原来的tab页设置为未选中状态 diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 294ff0ab15..cfa60b9fc4 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -4,6 +4,7 @@ package com.fr.design.designer.creator.cardlayout; import com.fr.base.BaseUtils; +import com.fr.base.GraphHelper; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; @@ -13,6 +14,7 @@ import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; @@ -29,19 +31,14 @@ import com.fr.general.Background; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; import com.fr.general.Inter; +import com.fr.stable.unit.PT; -import javax.swing.Action; -import javax.swing.Icon; -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; +import javax.swing.*; +import javax.swing.plaf.basic.BasicLabelUI; +import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; +import java.util.ArrayList; /** * @@ -73,6 +70,11 @@ public class XCardSwitchButton extends XButton { // tab按钮里的字体因为按钮内部的布局看起来比正常的要小,加个调整量 private static final int FONT_SIZE_ADJUST = 2; + //文字竖排时用来计算文字大小 + private static final int RESLUTION = 120; + + private static final int DOTSLINESPACE = 6; + private XWCardLayout cardLayout; private XWCardTagLayout tagLayout; @@ -124,7 +126,6 @@ public class XCardSwitchButton extends XButton { public XCardSwitchButton(CardSwitchButton widget, Dimension initSize) { super(widget, initSize); - } public XCardSwitchButton(CardSwitchButton widget, Dimension initSize, @@ -143,14 +144,15 @@ public class XCardSwitchButton extends XButton { * 点击事件 * */ + @Override public void respondClick(EditingMouseListener editingMouseListener, - MouseEvent e) { + MouseEvent e) { FormDesigner designer = editingMouseListener.getDesigner(); SelectionModel selectionModel = editingMouseListener.getSelectionModel(); //关闭重新打开,相关的layout未存到xml中,初始化 if(cardLayout == null){ - initRelateLayout(this); + initRelateLayout(); } //获取当前tab的index @@ -213,6 +215,11 @@ public class XCardSwitchButton extends XButton { GUICoreUtils.showPopupMenu(jPopupMenu, editingMouseListener.getDesigner(), e.getX(), e.getY()); } + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 自己有一个showPopupMenu,不需要使用通用的弹出菜单 + } + //删除card,同时修改其他switchbutton和tabfit的index private void deleteCard(XCardSwitchButton button,int index){ String titleName = button.getContentLabel().getText(); @@ -244,7 +251,7 @@ public class XCardSwitchButton extends XButton { //SwitchButton对应的XWCardLayout和XWCardTagLayout暂未存到xml中,重新打开时根据父子层关系获取 - private void initRelateLayout(XCardSwitchButton button){ + private void initRelateLayout(){ this.tagLayout = (XWCardTagLayout)this.getBackupParent(); XWCardTitleLayout titleLayout = (XWCardTitleLayout) this.tagLayout.getBackupParent(); XWCardMainBorderLayout borderLayout = (XWCardMainBorderLayout)titleLayout.getBackupParent(); @@ -300,7 +307,8 @@ public class XCardSwitchButton extends XButton { } } - public void paintComponent(Graphics g) { + @Override + public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; drawBackground(); @@ -340,31 +348,18 @@ public class XCardSwitchButton extends XButton { private void drawTitle() { CardSwitchButton button = (CardSwitchButton) this.toData(); String titleText = button.getText(); - if(tagLayout != null){ - WCardTagLayout wCardTagLayout = (WCardTagLayout) tagLayout.toData(); - StringBuilder titleString = new StringBuilder(); - //竖向处理 - if(ComparatorUtils.equals(wCardTagLayout.getTextDirection(), WTabTextDirection.TEXT_VER_DIRECTION)){ - titleString.append(""); - for(int i = 0; i < titleText.length(); i++){ - titleString.append(titleText.charAt(i)).append("
"); - } - titleString.append(""); - titleText = titleString.toString(); - } - } this.setButtonText(titleText); if (this.cardLayout == null) { - initRelateLayout(this); + initRelateLayout(); } - LayoutBorderStyle style = this.cardLayout.toData().getBorderStyle(); + LayoutBorderStyle style = this.cardLayout.toData().getBorderStyle(); - // 标题部分 - WidgetTitle title = style.getTitle(); - FRFont font = title.getFrFont(); - FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); + // 标题部分 + WidgetTitle title = style.getTitle(); + FRFont font = title.getFrFont(); + FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); UILabel label = this.getContentLabel(); label.setFont(newFont); label.setForeground(font.getForeground()); @@ -421,6 +416,10 @@ public class XCardSwitchButton extends XButton { public XCreator getXCreator() { //根据index获取对应的tabFitLayout int index = ((CardSwitchButton) this.toData()).getIndex(); + //关闭重新打开,相关的layout未存到xml中,初始化 + if(cardLayout == null){ + initRelateLayout(); + } return (XCreator) cardLayout.getComponent(index); } @@ -431,9 +430,83 @@ public class XCardSwitchButton extends XButton { label = this.getContentLabel(); } + @Override public void firePropertyChange() { super.firePropertyChange(); tagLayout.setTabsAndAdjust(); repaint(); } + + @Override + protected UILabel initContentLabel() { + return new CardSwitchBtnLabel(); + } + + public class CardSwitchBtnLabel extends UILabel{ + public CardSwitchBtnLabel(){ + updateUI(); + } + @Override + public void updateUI() { + setUI(new CardSwitchBtnLabelUI()); + } + } + + + public class CardSwitchBtnLabelUI extends BasicLabelUI{ + + @Override + public void paint(Graphics g, JComponent c) + { + Graphics2D g2d = (Graphics2D)g; + CardSwitchButton button = (CardSwitchButton) XCardSwitchButton.this.toData(); + int width = XCardSwitchButton.this.getWidth(); + int height= XCardSwitchButton.this.getHeight(); + String titleText = button.getText(); + LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); + WidgetTitle title = style.getTitle(); + FRFont font = title.getFrFont(); + FRFont newFont = FRFont.getInstance(font.getName(),font.getStyle(),font.getSize() + FONT_SIZE_ADJUST); + FontMetrics fm = GraphHelper.getFontMetrics(newFont); + + WCardTagLayout wCardTagLayout = (WCardTagLayout) tagLayout.toData(); + StringBuilder titleStringBuf = new StringBuilder(); + //竖向处理 + if(ComparatorUtils.equals(wCardTagLayout.getTextDirection(), WTabTextDirection.TEXT_VER_DIRECTION)){ + java.util.List verticalTextList = new ArrayList(); + for (int i = 0; i < titleText.length(); i++) { + titleStringBuf.append(titleText.charAt(i)); + verticalTextList.add(titleStringBuf.substring(0, titleStringBuf.length())); + titleStringBuf.delete(0, titleStringBuf.length()); + } + int textAscent = fm.getAscent(); + int textHeight = fm.getHeight(); + int textY = 0; + textY += textAscent; + for (int i = 0; i < verticalTextList.size(); i++) { + String paint_str = (String) verticalTextList.get(i); + + GraphHelper.drawString(g2d, paint_str, (width - fm.stringWidth(paint_str)) / 2, textY); + textY += textHeight; + textY += PT.pt2pix(0, RESLUTION); + if (textY > height - textHeight && i < verticalTextList.size()-1) { + textY -= 10; + paintDots(g2d, textY, (width - fm.stringWidth(paint_str)) / 2); + break; + } + } + }else{ + super.paint(g, c); + } + } + + public void paintDots(Graphics2D g2d, int startY, int startX){ + for (int i = 0; i < 3; i++) { + String paint_str = "."; + GraphHelper.drawString(g2d, paint_str, startX, startY); + startY += DOTSLINESPACE;// + startY += PT.pt2pix(0, RESLUTION); + } + } + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 6beadc2920..984aac144c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -40,9 +40,11 @@ import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.border.Border; import java.awt.CardLayout; import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; import java.awt.event.ContainerEvent; import java.beans.IntrospectionException; +import java.util.List; /** * @author richer @@ -55,6 +57,9 @@ public class XWCardLayout extends XLayoutContainer { private static final int NORTH = 0; private FormDesigner designer; + private static final int LAYOUT_INDEX = 0; + + //默认蓝色标题背景 private static final Color TITLE_COLOR = new Color(51, 132, 240); @@ -76,6 +81,7 @@ public class XWCardLayout extends XLayoutContainer { * @date 2014-11-25-下午6:22:40 * */ + @Override public String createDefaultName() { return "cardlayout"; } @@ -89,7 +95,8 @@ public class XWCardLayout extends XLayoutContainer { * @date 2014-11-25-下午6:22:17 * */ - public WCardLayout toData() { + @Override + public WCardLayout toData() { return (WCardLayout) data; } @@ -97,6 +104,7 @@ public class XWCardLayout extends XLayoutContainer { * 初始化时默认的组件大小 * @return 默认Dimension */ + @Override public Dimension initEditorSize() { return new Dimension(500, 300); } @@ -150,6 +158,7 @@ public class XWCardLayout extends XLayoutContainer { * @date 2014-11-25-下午4:47:23 * */ + @Override protected XLayoutContainer getCreatorWrapper(String widgetName) { initStyle(); Dimension dimension = new Dimension(); @@ -222,17 +231,28 @@ public class XWCardLayout extends XLayoutContainer { return xFirstBtn; } - + + /** + * 控件树不显示此组件 + * @param path 控件树list + */ + @Override + public void notShowInComponentTree(List path) { + path.remove(LAYOUT_INDEX); + } + + /** * 设置父容器的名字 - * + * * @param parentPanel 当前父容器 * @param widgetName 当前控件名 - * + * * * @date 2014-11-27-上午9:47:00 - * + * */ + @Override protected void setWrapperName(XLayoutContainer parentPanel, String widgetName) { parentPanel.toData().setWidgetName("tablayout" + widgetName.replaceAll(createDefaultName(),"")); } @@ -246,7 +266,8 @@ public class XWCardLayout extends XLayoutContainer { * @date 2014-11-25-下午4:57:55 * */ - protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight){ + @Override + protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight){ parentPanel.add(this, WBorderLayout.CENTER); } @@ -259,7 +280,8 @@ public class XWCardLayout extends XLayoutContainer { * @date 2014-11-25-下午6:20:10 * */ - public void componentAdded(ContainerEvent e) { + @Override + public void componentAdded(ContainerEvent e) { if (isRefreshing) { return; } @@ -284,6 +306,7 @@ public class XWCardLayout extends XLayoutContainer { * 是否支持标题样式 * @return 默认false */ + @Override public boolean hasTitleStyle() { return true; } @@ -293,6 +316,7 @@ public class XWCardLayout extends XLayoutContainer { * @return 属性名 * @throws IntrospectionException */ + @Override public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { //嵌套的tab组件,内层的不支持轮播属性,屏蔽属性表 if(!isNested()) { @@ -379,7 +403,8 @@ public class XWCardLayout extends XLayoutContainer { } //初始化样式 - protected void initStyle() { + @Override + protected void initStyle() { LayoutBorderStyle style = toData().getBorderStyle(); initBorderTitleStyle(style); initBorderStyle(); @@ -432,7 +457,8 @@ public class XWCardLayout extends XLayoutContainer { * @param designer 表单设计器 * */ - public void deleteRelatedComponent(XCreator creator,FormDesigner designer){ + @Override + public void deleteRelatedComponent(XCreator creator, FormDesigner designer){ XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) creator.getBackupParent(); SelectionModel selectionModel = designer.getSelectionModel(); selectionModel.setSelectedCreator(mainLayout); @@ -461,6 +487,7 @@ public class XWCardLayout extends XLayoutContainer { * data属性改变触发其他操作 * */ + @Override public void firePropertyChange(){ initStyle(); } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 70ed5984d5..828c7f6c8b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -17,6 +17,7 @@ import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WTabDisplayPosition; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; import com.fr.general.Inter; import java.awt.AlphaComposite; @@ -27,9 +28,11 @@ import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.List; /** * card布局主体框架 @@ -42,14 +45,13 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ private static final int CENTER = 1; private static final int NORTH = 0; - public static final Color DEFAULT_BORDER_COLOR = new Color(210,210,210); - private static final int LAYOUT_INDEX = 0; private static final int TITLE_STYLE = 2; - private static final int NORMAL_STYLE = 1; private static final int EDIT_BTN_WIDTH = 60; private static final int EDIT_BTN_HEIGHT = 24; + private final int CARDMAINLAYOUT_CHILD_COUNT = 1; + /** * 构造函数 */ @@ -66,6 +68,7 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ * @date 2014-12-10-下午1:46:33 * */ + @Override public WCardMainBorderLayout toData() { return (WCardMainBorderLayout) super.toData(); } @@ -84,15 +87,25 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ this.add(title, position); } + public int getTitleWidth(){ + String position = toData().getTabPosition(); + if(ComparatorUtils.equals(WBorderLayout.NORTH, position) || ComparatorUtils.equals(WBorderLayout.SOUTH, position)){ + return getTitlePart().getHeight(); + } + return getTitlePart().getWidth(); + } + public void add(Component comp, String position) { super.add(comp, position); } + /** * 切换到非添加状态 * * @return designer 表单设计器 */ + @Override public void stopAddingState(FormDesigner designer){ designer.stopAddingState(); return; @@ -141,8 +154,14 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ * 控件树不显示此组件 * @param path 控件树list */ - public void notShowInComponentTree(ArrayList path) { - path.remove(LAYOUT_INDEX); + @Override + public void notShowInComponentTree(List path) { + return; + } + + @Override + public int getShowXCreatorCount() { + return CARDMAINLAYOUT_CHILD_COUNT; } @Override @@ -160,7 +179,8 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ * 重新调整子组件的宽度 * @param width 宽度 */ - public void recalculateChildWidth(int width){ + @Override + public void recalculateChildWidth(int width){ ArrayList childrenList = this.getTargetChildrenList(); int size = childrenList.size(); if (size > 0) { @@ -191,7 +211,8 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ * 重新调整子组件的高度 * @param height 高度 */ - public void recalculateChildHeight(int height){ + @Override + public void recalculateChildHeight(int height){ ArrayList childrenList = this.getTargetChildrenList(); int size = childrenList.size(); if (size > 0) { @@ -223,6 +244,7 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ } + @Override public void paint(Graphics g) { super.paint(g); //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 @@ -265,7 +287,8 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ * @param editingMouseListener 鼠标点击,位置处理器 * @param e 鼠标点击事件 */ - public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ + @Override + public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){ FormDesigner designer = editingMouseListener.getDesigner(); SelectionModel selectionModel = editingMouseListener.getSelectionModel(); boolean isEditing = e.getButton() == MouseEvent.BUTTON1 && @@ -298,34 +321,49 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ } } + @Override + public int getIndexOfChild(Object child) { + XWCardTitleLayout titlePart = this.getTitlePart(); + return titlePart.getIndexOfChild(child); + } + /** * data属性改变触发其他操作 * */ + @Override public void firePropertyChange(){ - getCardPart().initStyle(); + return; } public void resetTabDisplayPosition(WTabDisplayPosition wTabDisplayPosition){ XWCardTitleLayout xwCardTitleLayout = getTitlePart(); + int titleSize = getTitleWidth(); xwCardTitleLayout.resetNewBtnPosition(wTabDisplayPosition); + Rectangle parentBounds = new Rectangle(xwCardTitleLayout.getBounds()); switch (wTabDisplayPosition){ case TOP_POSITION: - this.addTitlePart(getTitlePart(),WBorderLayout.NORTH); + this.addTitlePart(xwCardTitleLayout,WBorderLayout.NORTH); + parentBounds.height = titleSize; break; case LEFT_POSITION: - this.addTitlePart(getTitlePart(),WBorderLayout.WEST); + this.addTitlePart(xwCardTitleLayout,WBorderLayout.WEST); + parentBounds.width = titleSize; break; case BOTTOM_POSITION: - this.addTitlePart(getTitlePart(),WBorderLayout.SOUTH); + this.addTitlePart(xwCardTitleLayout,WBorderLayout.SOUTH); + parentBounds.height = titleSize; break; case RIGHT_POSITION: - this.addTitlePart(getTitlePart(),WBorderLayout.EAST); + this.addTitlePart(xwCardTitleLayout,WBorderLayout.EAST); + parentBounds.width = titleSize; break; default: break; } + xwCardTitleLayout.setBounds(parentBounds); this.addCardPart((XWCardLayout)this.getComponent(0)); } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index b91953e11f..7a8ed5440e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -3,19 +3,6 @@ */ package com.fr.design.designer.creator.cardlayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Rectangle; -import java.awt.event.ContainerEvent; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.border.Border; - import com.fr.base.GraphHelper; import com.fr.base.ScreenResolution; import com.fr.design.designer.beans.AdapterBus; @@ -24,15 +11,12 @@ import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRHorizontalLayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRVerticalLayoutAdapter; import com.fr.design.designer.beans.models.SelectionModel; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWHorizontalBoxLayout; -import com.fr.design.designer.creator.XWidgetCreator; +import com.fr.design.designer.creator.*; import com.fr.design.form.layout.FRFlowLayout; import com.fr.design.form.layout.FRHorizontalLayout; import com.fr.design.form.layout.FRVerticalLayout; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; @@ -45,6 +29,13 @@ import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; +import javax.swing.border.Border; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.awt.event.MouseEvent; +import java.util.HashMap; +import java.util.Map; + /** * @date: 2014-11-25-下午3:11:14 */ @@ -119,6 +110,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { * @param e 事件 * @date 2014-11-25-下午6:20:10 */ + @Override public void componentAdded(ContainerEvent e) { super.componentAdded(e); @@ -153,6 +145,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { /** * 将WLayout转换为XLayoutContainer */ + @Override public void convert() { isRefreshing = true; WCardTagLayout layout = (WCardTagLayout) this.toData(); @@ -169,6 +162,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { isRefreshing = false; } + @Override public String createDefaultName() { return "tabpane"; } @@ -178,6 +172,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { * * @return designer 表单设计器 */ + @Override public void stopAddingState(FormDesigner designer) { designer.stopAddingState(); } @@ -212,6 +207,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { * * @param */ + @Override public void setBorder(Border border) { } @@ -239,10 +235,17 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } } + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 不要菜单 + } + + @Override public int[] getDirections() { return ((XCreator)getParent()).getDirections(); } + @Override public Rectangle getBounds() { return this.getParent().getBounds(); } @@ -252,13 +255,21 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { return this.getBackupParent().getTopLayout(); } - public void notShowInComponentTree(ArrayList path) { - path.remove(0); + + @Override + public int getIndexOfChild(Object child) { + XLayoutContainer cardPart = ((XWCardMainBorderLayout)this.getTopLayout()).getCardPart(); + return cardPart.getIndexOfChild(child); } + @Override + public boolean isSupportDrag(){ + return false; + } @Override public void doLayout() { + setTabsAndAdjust(); //设置布局 super.doLayout(); } @@ -299,6 +310,7 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { * data属性改变触发其他操作 * */ + @Override public void firePropertyChange() { WCardTagLayout wCardTagLayout = (WCardTagLayout) this.toData(); ((XWCardMainBorderLayout) getTopLayout()).resetTabDisplayPosition(wCardTagLayout.getDisplayPosition()); @@ -308,12 +320,11 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { repaint(); } - public void setTabsAndAdjust() { WCardTagLayout wCardTagLayout = (WCardTagLayout)this.toData(); int tabLength = this.getComponentCount(); - Map cardWidth = new HashMap<>(); - Map cardHeight = new HashMap<>(); + Map cardWidth = new HashMap(); + Map cardHeight = new HashMap(); for (int i = 0; i < tabLength; i++) { XCardSwitchButton temp = (XCardSwitchButton) this.getComponent(i); CardSwitchButton tempCard = (CardSwitchButton) temp.toData(); @@ -351,18 +362,17 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { if (width == null) { return; } + XLayoutContainer parent = this.getBackupParent(); + int tabPaneSize = parent.getHeight(); //调整XWCardTagLayout的高度 int tempX = 0; - int maxHeight = DEFAULT_BUTTON_HEIGHT; for (int i = 0; i < tabLength; i++) { - Rectangle rectangle = this.getComponent(i).getBounds(); Integer cardWidth = width.get(i) + WIDTH_SIDE_OFFSET; - Integer cardHeight = height.get(i)+ HEIGHT_SIDE_OFFSET ; + Integer cardHeight = tabPaneSize; if(cardHeight < DEFAULT_BUTTON_HEIGHT){ cardHeight = DEFAULT_BUTTON_HEIGHT; } - maxHeight = maxHeight > cardHeight ? maxHeight : cardHeight ; rectangle.setBounds(tempX, 0, cardWidth, cardHeight); tempX += cardWidth; XCardSwitchButton temp = (XCardSwitchButton) this.getComponent(i); @@ -370,10 +380,6 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - XLayoutContainer parent = this.getBackupParent(); - Rectangle parentBounds = new Rectangle(parent.getBounds()); - parentBounds.height = maxHeight; - parent.setBounds(parentBounds); LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(formDesigner, parent); if (layoutAdapter != null) { parent.setBackupBound(parent.getBounds()); @@ -400,12 +406,12 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { if (width == null) { return; } + XLayoutContainer parent = this.getBackupParent(); + int tabPaneSize = parent.getWidth(); int tempY = 0; - int maxWidth = DEFAULT_BUTTON_HEIGHT; for (int i = 0; i < tabLength; i++) { Rectangle rectangle = this.getComponent(i).getBounds(); - Integer cardWidth = width.get(i) + WIDTH_SIDE_OFFSET; - maxWidth = maxWidth > cardWidth ? maxWidth : cardWidth; + Integer cardWidth = tabPaneSize; //先用这边的固定高度 Integer cardHeight = height.get(i) + HEIGHT_SIDE_OFFSET; @@ -422,10 +428,6 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - XLayoutContainer parent = this.getBackupParent(); - Rectangle parentBounds = new Rectangle(parent.getBounds()); - parentBounds.width = maxWidth; - parent.setBounds(parentBounds); LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(formDesigner, parent); if (layoutAdapter != null) { parent.setBackupBound(parent.getBounds()); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java index d835012038..d1797f92b8 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java @@ -3,8 +3,10 @@ */ package com.fr.design.designer.creator.cardlayout; +import java.awt.Component; import java.awt.Dimension; import java.awt.event.MouseEvent; +import java.util.List; import javax.swing.border.Border; @@ -33,6 +35,11 @@ public class XWCardTitleLayout extends XWBorderLayout { private static final int CENTER = 1; + private static final int LAYOUT_INDEX = 0; + + private static final int POSISIONT_OFFSET = 1; + + /** * 构造函数 */ @@ -51,10 +58,32 @@ public class XWCardTitleLayout extends XWBorderLayout { public WTabDisplayPosition getDisplayPosition(){ return ((WCardTagLayout)this.getTagPart().toData()).getDisplayPosition(); } + + /** + * 控件树不显示此组件 + * @param path 控件树list + */ + @Override + public void notShowInComponentTree(List path) { + path.remove(LAYOUT_INDEX); + } + + @Override + public int getIndexOfChild(Object child) { + int count = getComponentCount(); + for (int i = 0; i < count; i++) { + Component comp = getComponent(i); + if (comp == child) { + return i - POSISIONT_OFFSET; + } + } + return -1; + } /** * 将WLayout转换为XLayoutContainer */ + @Override public void convert(){ isRefreshing = true; WCardTitleLayout titleLayout = (WCardTitleLayout)this.toData(); @@ -139,7 +168,8 @@ public class XWCardTitleLayout extends XWBorderLayout { * * @return designer 表单设计器 */ - public void stopAddingState(FormDesigner designer){ + @Override + public void stopAddingState(FormDesigner designer){ designer.stopAddingState(); return; } @@ -182,6 +212,7 @@ public class XWCardTitleLayout extends XWBorderLayout { return this.getBackupParent().getTopLayout(); } + @Override public String createDefaultName() { return "tabpane"; } diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 415d1637ad..ecdf55e84b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -11,15 +11,16 @@ import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.widget.editors.ButtonTypeEditor; import com.fr.design.mainframe.widget.editors.ImgBackgroundEditor; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.Background; import com.fr.general.FRLogger; import com.fr.general.Inter; @@ -98,11 +99,17 @@ public class XWTabFitLayout extends XWFitLayout { super(widget, initSize); } + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 不要菜单 + } + /** * 得到属性名 * @return 属性名 * @throws IntrospectionException */ + @Override public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { checkButonType(); CRPropertyDescriptor[] crp = ((WTabFitLayout) data).isCustomStyle() ? getisCustomStyle() : getisnotCustomStyle(); @@ -245,7 +252,8 @@ public class XWTabFitLayout extends XWFitLayout { * @param designer 表单设计器 * */ - public void deleteRelatedComponent(XCreator creator,FormDesigner designer){ + @Override + public void deleteRelatedComponent(XCreator creator, FormDesigner designer){ //逐层回溯找出相关的layout和对应的tab按钮 XWTabFitLayout fitLayout = (XWTabFitLayout)creator; WTabFitLayout fit = (WTabFitLayout) fitLayout.toData(); @@ -312,7 +320,8 @@ public class XWTabFitLayout extends XWFitLayout { * @param comp 当前组件 * void */ - public void seleteRelatedComponent(XCreator comp){ + @Override + public void seleteRelatedComponent(XCreator comp){ XWTabFitLayout fitLayout = (XWTabFitLayout)comp; WTabFitLayout fit = (WTabFitLayout) fitLayout.toData(); int index = fit.getIndex(); @@ -337,7 +346,8 @@ public class XWTabFitLayout extends XWFitLayout { * @date 2014-12-30-下午3:15:28 * */ - public XLayoutContainer findNearestFit(){ + @Override + public XLayoutContainer findNearestFit(){ XLayoutContainer parent = this.getBackupParent(); return parent == null ? null : parent.findNearestFit(); } @@ -346,6 +356,7 @@ public class XWTabFitLayout extends XWFitLayout { * 非顶层自适应布局的缩放 * @param percent 百分比 */ + @Override public void adjustCompSize(double percent) { this.adjustCreatorsWhileSlide(percent); } @@ -364,6 +375,7 @@ public class XWTabFitLayout extends XWFitLayout { * * @param percent 宽度变化的百分比 */ + @Override public void adjustCreatorsWidth(double percent) { if (this.getComponentCount()==0) { // 初始化没有拖入控件时,实际宽度依然调整 @@ -396,6 +408,7 @@ public class XWTabFitLayout extends XWFitLayout { * 同时调整容器内的组件们,缩小时需要考虑有的组件高度不满足缩小高度 * @param percent 高度变化的百分比 */ + @Override public void adjustCreatorsHeight(double percent) { if (this.getComponentCount()==0) { //调整高度后,wlayout那边记录下 @@ -420,6 +433,7 @@ public class XWTabFitLayout extends XWFitLayout { LayoutUtils.layoutContainer(this); } + @Override public XLayoutContainer getOuterLayout(){ XWCardLayout cardLayout = (XWCardLayout) this.getBackupParent(); return cardLayout.getBackupParent(); @@ -434,12 +448,27 @@ public class XWTabFitLayout extends XWFitLayout { wgt.setBackupBounds(this.getComponent(m).getBounds()); } } + + /** + * 获取其在控件树上可见父层 + * @return 组件 + */ + @Override + public Component getParentShow(){ + XCardSwitchButton cardSwitchButton = this.getxCardSwitchButton(); + //控件树上显示其taglayout层 + if ((cardSwitchButton != null)) { + return cardSwitchButton.getTagLayout(); + } + return super.getParentShow(); + } /** * 去除原有的间隔 * @param gap 间隔 */ - public void moveCompInterval(int gap) { + @Override + public void moveCompInterval(int gap) { if (gap == 0) { return; } @@ -496,7 +525,8 @@ public class XWTabFitLayout extends XWFitLayout { * ps:改变布局大小或者拖入、删除、拉伸都要重新考虑间隔 * @param gap 间隔 */ - public void addCompInterval(int gap) { + @Override + public void addCompInterval(int gap) { if (gap == 0) { return; } @@ -541,6 +571,7 @@ public class XWTabFitLayout extends XWFitLayout { return new WidgetPropertyUIProvider[0]; } + @Override public void firePropertyChange(){ checkButonType(); //根据字体长度设置tab宽度 diff --git a/designer_form/src/com/fr/design/designer/creator/package.html b/designer_form/src/com/fr/design/designer/creator/package.html new file mode 100644 index 0000000000..9fee75cdf8 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/creator/package.html @@ -0,0 +1,5 @@ + + +各种表单控件 + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/package.html b/designer_form/src/com/fr/design/designer/package.html new file mode 100644 index 0000000000..a8eddbdc58 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/package.html @@ -0,0 +1,5 @@ + + +设计器 + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java index 20702ec8f4..c7fbdb7592 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java @@ -98,11 +98,6 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr if (row == 0) { if (state == WBodyLayoutType.FIT.getTypeValue()) { return switch2FitBodyLayout(); - } else { - XWFitLayout xfl = (XWFitLayout) xwAbsoluteLayout.getBackupParent(); - if (xfl.toData().removeMargin()) { - DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); - } } } if (row == 1) { diff --git a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java index d6d7c06c59..9ffad45338 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java @@ -152,7 +152,6 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { wAbsoluteBodyLayout.setCompState(WAbsoluteLayout.STATE_FIXED); Component[] components = xfl.getComponents(); xfl.removeAll(); - xfl.toData().removeMargin(); XWAbsoluteBodyLayout xwAbsoluteBodyLayout = new XWAbsoluteBodyLayout(wAbsoluteBodyLayout, new Dimension(0, 0)); xfl.getLayoutAdapter().addBean(xwAbsoluteBodyLayout, 0, 0); for (Component component : components) { diff --git a/designer_form/src/com/fr/design/designer/properties/package.html b/designer_form/src/com/fr/design/designer/properties/package.html new file mode 100644 index 0000000000..e00f151da1 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/package.html @@ -0,0 +1,5 @@ + + +控件属性相关 + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java index 8ba77b8168..53deb21be7 100644 --- a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java +++ b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java @@ -25,12 +25,6 @@ public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); if (value instanceof XCreator) { String name = ((XCreator) value).toData().getWidgetName(); - //树节点上不显示此控件 - if(value instanceof XWCardLayout){ - this.setSize(new Dimension(0, 0)); - this.setPreferredSize(new Dimension(0, 0)); - return this; - } setText(name); Icon icon = XCreatorUtils.getCreatorIcon((XCreator) value); if (icon != null) { diff --git a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java index c39ea73b51..68140520e7 100644 --- a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java +++ b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java @@ -10,7 +10,11 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import com.fr.base.FRContext; -import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.designer.creator.XWidgetCreator; import com.fr.design.mainframe.FormDesigner; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.form.ui.Widget; @@ -23,6 +27,7 @@ public class ComponentTreeModel implements TreeModel { private final int ABSOLUTE_AS_BODY_NOT_FOUND = -1; + public ComponentTreeModel(FormDesigner designer, Component root) { this.designer = designer; this.root = root; @@ -60,8 +65,9 @@ public class ComponentTreeModel implements TreeModel { public int getChildCount(Object parent) { if (parent != null && parent instanceof XLayoutContainer) { XLayoutContainer xlayout = (XLayoutContainer) parent; - return xlayout.getXCreatorCount(); + return xlayout.getShowXCreatorCount(); } + return 0; } diff --git a/designer_form/src/com/fr/design/form/package.html b/designer_form/src/com/fr/design/form/package.html new file mode 100644 index 0000000000..68ad2d2702 --- /dev/null +++ b/designer_form/src/com/fr/design/form/package.html @@ -0,0 +1,5 @@ + + +表单特有的类和文件 + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index c676ff8c56..9c0bf05bcb 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -3,8 +3,6 @@ package com.fr.design.mainframe; import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteBodyLayout; -import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.design.gui.itree.UITreeUI; @@ -15,7 +13,13 @@ import javax.swing.*; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; @@ -222,16 +226,7 @@ public class ComponentTree extends JTree { if (creator != comp) { creator.notShowInComponentTree(path); } - //绝对布局作为body的时候不显示自适应布局父层 - if (((XCreator) parent).acceptType(XWAbsoluteBodyLayout.class)) { - if ((parent.getParent() != null) - && ((XCreator) parent.getParent()).acceptType(XWFitLayout.class)) { - parent = parent.getParent().getParent(); - continue; - } - } - - parent = parent.getParent(); + parent = creator.getParentShow(); } Object[] components = path.toArray(); return new TreePath(components); diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index a6dbc913cd..5f45afa501 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -14,6 +14,7 @@ import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.xpane.ToolTipEditor; import com.fr.design.icon.IconPathConstants; import com.fr.design.utils.ComponentUtils; @@ -540,8 +541,8 @@ public class EditingMouseListener extends MouseInputAdapter { if (creator != null) { creator.respondClick(this, e); if (e.getButton() == MouseEvent.BUTTON3) { - JPopupMenu cellPopupMenu = creator.createPopupMenu(designer); - if (cellPopupMenu != null) { + UIPopupMenu cellPopupMenu = creator.createPopupMenu(designer); + if (cellPopupMenu != UIPopupMenu.EMPTY) { GUICoreUtils.showPopupMenu(cellPopupMenu, designer, e.getX(), e.getY()); } } diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 851a2cdee6..4b2c664b40 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -46,7 +46,6 @@ import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; -import com.fr.stable.CoreGraphHelper; import com.fr.stable.bridge.StableFactory; import javax.swing.*; @@ -148,7 +147,6 @@ public class FormDesigner extends TargetComponent
implements TreeSelection new FormDesignerDropTarget(this);// 添加Drag and Drop. this.switchAction = switchAction; - populateParameterPropertyPane(); } /** @@ -1013,6 +1011,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection */ @Override public void valueChanged(TreeSelectionEvent e) { + if (DesignerContext.getDesignerFrame().getSelectedJTemplate() == null) { // 初始化完成前,不响应事件 + return; + } ComponentTree tree = (ComponentTree) e.getSource(); TreePath[] paths = tree.getSelectionPaths(); @@ -1139,8 +1140,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 当前选中控件可以上移一层吗? public boolean isCurrentComponentMovableUp() { XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); - Container container = creator.getParent(); - if (container == null) { + XLayoutContainer container = (XLayoutContainer) creator.getParent(); + if (container == null || !container.supportInnerOrderChangeActions()) { return false; } return creator.isMovable() && container.getComponentZOrder(creator) > 0; @@ -1149,8 +1150,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 当前选中控件可以下移一层吗? public boolean isCurrentComponentMovableDown() { XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); - Container container = creator.getParent(); - if (container == null) { + XLayoutContainer container = (XLayoutContainer) creator.getParent(); + if (container == null || !container.supportInnerOrderChangeActions()) { return false; } return creator.isMovable() && container.getComponentZOrder(creator) < container.getComponentCount() - 1; diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index 212fe33897..c5a27044df 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -13,7 +13,6 @@ import com.fr.design.gui.controlpane.ShortCut4JControlPane; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itoolbar.UIToolBarUI; import com.fr.design.gui.itoolbar.UIToolbar; -import com.fr.design.gui.style.BorderPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; @@ -96,8 +95,7 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree formDesigner.addDesignerEditListener(new DesignerEditListener() { @Override public void fireCreatorModified(DesignerEvent evt) { - componentTree.setAndScrollSelectionPath(componentTree.getSelectedTreePath()); - componentTree.refreshUI(); + refreshComponentTree(); } }); @@ -110,6 +108,14 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree } add(getWidgetPane(), BorderLayout.CENTER); + + // 这里要刷新一下,否则控件树中没有任何一个控件处于选中状态 + refreshComponentTree(); + } + + private void refreshComponentTree() { + componentTree.setAndScrollSelectionPath(componentTree.getSelectedTreePath()); + componentTree.refreshUI(); } private JPanel getWidgetPane() { diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java index 470337190a..ee5a7ab6bc 100644 --- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java @@ -16,7 +16,11 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.*; +import com.fr.form.ui.UserDefinedWidgetConfig; +import com.fr.form.ui.Widget; +import com.fr.form.ui.WidgetConfig; +import com.fr.form.ui.WidgetManager; +import com.fr.form.ui.WidgetManagerProvider; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.Inter; @@ -84,8 +88,8 @@ public class FormParaWidgetPane extends JPanel { @Override public boolean accept(PluginContext context) { - - return context.contain(PluginModule.ExtraDesign, FormWidgetOptionProvider.XML_TAG); + + return context.contain(PluginModule.ExtraDesign, FormWidgetOptionProvider.XML_TAG) || context.contain(PluginModule.ExtraChartType); } }); } diff --git a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java index ebf7328a2f..86a7536e2f 100644 --- a/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer_form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -12,6 +12,7 @@ import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.XWScaleLayout; import com.fr.design.designer.creator.XWTitleLayout; +import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; @@ -107,6 +108,7 @@ public class FormSelectionUtils { designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Large_To_Paste")); return; } + resetTabSub2RealSize(copiedCreator); boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); if (addSuccess) { designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); @@ -121,6 +123,34 @@ public class FormSelectionUtils { } + /** + * REPORT-6096 复制得到的是显示的大小,如果因屏幕分辨率问题存在缩放的话,显示大小和实际大小会有区别,粘贴后tab内部调整大小时会再次缩放导致问题。 + * 因此在粘贴之前将tab内部的组件调整成实际的大小。 + * + * @param copiedCreator 复制的组件 + */ + private static void resetTabSub2RealSize(XCreator copiedCreator) { + ArrayList childrenList = copiedCreator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + for (Object aChildrenList : childrenList) { + XWTabFitLayout tabLayout = (XWTabFitLayout) aChildrenList; + double percent = tabLayout.getContainerPercent(); + Component[] components = tabLayout.getComponents(); + for (Component component : components) { + Rectangle show = component.getBounds(); + component.setBounds(new Rectangle((int) (show.x * percent), (int) (show.y * percent), (int) (show.width * percent), (int) (show.height * percent))); + } + } + } + Component[] components = copiedCreator.getComponents(); + for (Component component : components) { + try { + resetTabSub2RealSize((XCreator) component); + } catch (ClassCastException ignored) { + } + } + } + /** * 相对布局粘贴 */ @@ -178,9 +208,9 @@ public class FormSelectionUtils { */ private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { //当宽度为奇数时 设置偏移 - int xoffset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; + int xoffset = copiedCreator.getWidth() & 1; //当高度为奇数时 设置偏移 - int yoffset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; + int yoffset = copiedCreator.getHeight() & 1; if (!layoutAdapter.accept(copiedCreator, x, y)) { XLayoutContainer container = layoutAdapter.getContainer(); diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java index 982f5aad0d..0f0f3bd45e 100644 --- a/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetTable.java @@ -247,34 +247,30 @@ public class MobileWidgetTable extends JTable { * @return String[][] 二维数组,[0][0]widgetName */ private String[][] getData() { - List mobileWidgetList = new ArrayList(); if (designer.isFormParaDesigner()) { return new String[0][0]; } - WSortLayout body = (WSortLayout) designer.getRootComponent().toData(); + //选择的控件 + XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + Widget selectedModel = selectedCreator != null ? selectedCreator.toData() : null; - if (body == null) { + if (selectedModel == null) { return new String[0][0]; } - body.setSorted(false); - - if (body.getWidgetCount() > 0 && body.getWidget(0).acceptType(WAbsoluteBodyLayout.class)) { - WAbsoluteBodyLayout absoluteBodyLayout = (WAbsoluteBodyLayout) ((WAbsoluteLayout.BoundsWidget) body.getWidget(0)).getWidget(); - mobileWidgetList = absoluteBodyLayout.getOrderedMobileWidgetList(); + // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 + if (selectedModel.acceptType(WSortLayout.class)) { + List mobileWidgetList = ((WSortLayout) selectedModel).getOrderedMobileWidgetList(); + String[][] widgetName = new String[mobileWidgetList.size() + 1][1]; + widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); + for (int i = 0; i < mobileWidgetList.size(); i++) { + widgetName[i + 1][0] = mobileWidgetList.get(i); + } + return widgetName; } else { - mobileWidgetList = body.getOrderedMobileWidgetList(); - } - String[][] widgetName = new String[mobileWidgetList.size() + 1][1]; - widgetName[0][0] = Inter.getLocText("FR-Designer_WidgetOrder"); - for (int i = 0; i < mobileWidgetList.size(); i++) { - widgetName[i + 1][0] = mobileWidgetList.get(i); + return new String[0][0]; } - - body.setSorted(true); - return widgetName; - } public boolean isCollapsed() { diff --git a/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java b/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java index cac2354e98..e627de1397 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java @@ -47,7 +47,7 @@ public class WidgetToolBarPane extends BasicPane implements DesignToolbarProvide } public void refreshToolbar() { - reset(); + singleton.reset(); } public static void refresh() { diff --git a/designer_form/src/com/fr/design/mainframe/package.html b/designer_form/src/com/fr/design/mainframe/package.html new file mode 100644 index 0000000000..85078ef8bb --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/package.html @@ -0,0 +1,5 @@ + + +设计器整体框架 + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java index 6ce5a2ff9e..052f7cc2f5 100644 --- a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java +++ b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java @@ -26,6 +26,7 @@ public class ParameterPropertyPane extends JPanel{ private static final int PADDING_SMALL = 5; private static final int PADDING_MIDDLE = 10; private static final int PADDING_LARGE = 15; + private static final int ADD_PARA_PANE_MAX_HEIGHT = 95; public static final ParameterPropertyPane getInstance() { if (THIS == null) { @@ -86,6 +87,7 @@ public class ParameterPropertyPane extends JPanel{ // 显示或隐藏添加参数面板 public void refreshState(JTemplate jt) { setAddParaPaneVisible(toolbarPane.hasSelectedLabelItem(), jt); + updateAddParaPaneSize(); } // 显示或隐藏添加参数面板 @@ -93,6 +95,16 @@ public class ParameterPropertyPane extends JPanel{ refreshState(DesignerContext.getDesignerFrame().getSelectedJTemplate()); } + private void updateAddParaPaneSize() { + if (!addParaPane.isVisible()) { + return; + } + addParaPane.setPreferredSize(null); + int height = Math.min(addParaPane.getPreferredSize().height, ADD_PARA_PANE_MAX_HEIGHT); + addParaPane.setPreferredSize(new Dimension(addParaPane.getPreferredSize().width, height)); + repaintContainer(); + } + public void setAddParaPaneVisible(boolean isVisible, JTemplate jt) { if (isVisible == addParaPane.isVisible() || formHierarchyTreePaneWrapper == null) { return; @@ -112,7 +124,6 @@ public class ParameterPropertyPane extends JPanel{ addParaPane.setVisible(false); this.setPreferredSize(new Dimension(getWidth(), formHierarchyTreePaneWrapper.getPreferredSize().height + UIConstants.GAP_NORMAL)); } - repaintContainer(); } private void setEditor(FormDesigner editor) { diff --git a/designer_form/src/com/fr/design/parameter/package.html b/designer_form/src/com/fr/design/parameter/package.html new file mode 100644 index 0000000000..3391411335 --- /dev/null +++ b/designer_form/src/com/fr/design/parameter/package.html @@ -0,0 +1,5 @@ + + +参数面板 + + \ No newline at end of file diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java index 262e52588a..3b64c4a8e8 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java @@ -1,7 +1,11 @@ package com.fr.design.widget.ui.designer.component; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.utils.gui.LayoutUtils; import com.fr.design.widget.WidgetBoundsPaneFactory; import com.fr.form.ui.container.WLayout; import com.fr.general.Inter; @@ -35,6 +39,8 @@ public class WidgetAbsoluteBoundPane extends WidgetBoundPane { @Override public void update() { + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + formDesigner.getSelectionModel().getSelection().backupBounds(); super.update(); Rectangle bounds = new Rectangle(creator.getBounds()); bounds.x = (int) x.getValue(); @@ -45,6 +51,9 @@ public class WidgetAbsoluteBoundPane extends WidgetBoundPane { WLayout wabs = parent.toData(); wabs.setBounds(creator.toData(), bounds); creator.setBounds(bounds); + LayoutUtils.layoutContainer(creator); + XWAbsoluteLayout layout = (XWAbsoluteLayout) parent; + layout.updateBoundsWidget(creator); } @Override diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java index a046b2d18f..1d2bab88b4 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java @@ -85,6 +85,7 @@ public class WidgetBoundPane extends BasicPane { public void fix() { Rectangle bounds = new Rectangle(creator.getBounds()); + creator.setBackupBound(creator.getBounds()); int w = (int) width.getValue(); int h = (int) height.getValue(); Rectangle rec = ComponentUtils.getRelativeBounds(parent); diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetCardTagBoundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetCardTagBoundPane.java index 92fb9b9652..c992f7bf30 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetCardTagBoundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetCardTagBoundPane.java @@ -3,6 +3,8 @@ package com.fr.design.widget.ui.designer.component; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; @@ -12,6 +14,7 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import javax.swing.JOptionPane; import java.awt.Rectangle; /** @@ -41,10 +44,21 @@ public class WidgetCardTagBoundPane extends WidgetBoundPane { WCardTagLayout tagLayout = (WCardTagLayout)creator.toData(); WTabDisplayPosition displayPosition = tagLayout.getDisplayPosition(); - if( ComparatorUtils.equals(displayPosition, WTabDisplayPosition.TOP_POSITION) || ComparatorUtils.equals(displayPosition, WTabDisplayPosition.BOTTOM_POSITION)){ - parentBounds.height = (int)cardTagWidth.getValue(); + int size = (int)cardTagWidth.getValue(); + XLayoutContainer tabLayout = creator.getTopLayout(); + Rectangle rectangle = tabLayout.getBounds(); + if(ComparatorUtils.equals(displayPosition, WTabDisplayPosition.TOP_POSITION) || ComparatorUtils.equals(displayPosition, WTabDisplayPosition.BOTTOM_POSITION)){ + if(rectangle.height < size){ + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Beyond_Tablayout_Bounds")); + return; + } + parentBounds.height = size; }else{ - parentBounds.width = (int)cardTagWidth.getValue(); + if(rectangle.width < size){ + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Beyond_Tablayout_Bounds")); + return; + } + parentBounds.width = size; } parent.setBounds(parentBounds); diff --git a/designer_form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java index 246bcb7f15..c11ad24691 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java @@ -100,6 +100,7 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { } if (layoutType == WBodyLayoutType.ABSOLUTE) { + ((XWFitLayout)creator.getBackupParent()).toData().resetStyle(); if (state == WBodyLayoutType.FIT.getTypeValue()) { switch2FitBodyLayout(); } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java index 4f75209108..8e40d124e7 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java @@ -164,6 +164,7 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { wAbsoluteBodyLayout.setCompState(WAbsoluteLayout.STATE_FIXED); Component[] components = xWFitLayout.getComponents(); xWFitLayout.removeAll(); + layout.resetStyle(); XWAbsoluteBodyLayout xwAbsoluteBodyLayout = new XWAbsoluteBodyLayout(wAbsoluteBodyLayout, new Dimension(0, 0)); xWFitLayout.getLayoutAdapter().addBean(xwAbsoluteBodyLayout, 0, 0); for (Component component : components) { diff --git a/designer_form/src/com/fr/design/widget/ui/designer/layout/WCardTagLayoutDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/layout/WCardTagLayoutDefinePane.java index 3fe62fdacf..153d159c05 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/layout/WCardTagLayoutDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/layout/WCardTagLayoutDefinePane.java @@ -1,5 +1,6 @@ package com.fr.design.widget.ui.designer.layout; +import com.fr.general.ComparatorUtils; import com.fr.general.cardtag.TemplateStyle; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; @@ -58,7 +59,13 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify UILabel fontLabel = new UILabel(Inter.getLocText("FR-Designer_Font")); fontLabel.setVerticalAlignment(SwingConstants.TOP); frFontPane = new FRFontPane(); - displayPositionGroup = new UIButtonGroup(WTabDisplayPosition.getStringArray()); + displayPositionGroup = new UIButtonGroup(WTabDisplayPosition.getStringArray()){ + @Override + public boolean shouldResponseNameListener() { + return true; + } + }; + displayPositionGroup.setGlobalName(Inter.getLocText("FR-Designer_Tab_Style_Template")); textDirectionGroup = new UIButtonGroup(WTabTextDirection.getStringArray()); Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("FR-Designer_Tab_Style_Template")), templateStyleEditor}, @@ -105,7 +112,11 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify layoutBorderStyle.getTitle().setBackground((Background) backgroundEditor.getValue()); layoutBorderStyle.getTitle().setFrFont(frFontPane.update(frFont)); WCardTagLayout layout = (WCardTagLayout) creator.toData(); - layout.setDisplayPosition(WTabDisplayPosition.parse(displayPositionGroup.getSelectedIndex())); + boolean isHori = displayPositionGroup.getSelectedIndex() == WTabDisplayPosition.TOP_POSITION.getType() || displayPositionGroup.getSelectedIndex() == WTabDisplayPosition.BOTTOM_POSITION.getType(); + if(ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Tab_Style_Template"))){ + layout.setDisplayPosition(WTabDisplayPosition.parse(displayPositionGroup.getSelectedIndex())); + textDirectionGroup.setSelectedIndex(isHori? WTabTextDirection.TEXT_HORI_DERECTION.getType():WTabTextDirection.TEXT_VER_DIRECTION.getType()); + } layout.setTextDirection(WTabTextDirection.parse(textDirectionGroup.getSelectedIndex())); layout.setTemplateStyle((TemplateStyle) templateStyleEditor.getValue());