diff --git a/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java b/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java index 84d1facdf4..be9421312b 100644 --- a/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java +++ b/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java @@ -11,7 +11,10 @@ import com.fr.design.report.mobile.ReportMobileAttrPane; import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.main.TemplateWorkBook; +import com.fr.plugin.ExtraClassManager; import com.fr.report.mobile.ElementCaseMobileAttr; +import com.fr.stable.ReportFunctionProcessor; +import com.fr.stable.fun.FunctionProcessor; import javax.swing.*; import java.awt.event.ActionEvent; @@ -50,8 +53,15 @@ public class ReportMobileAttrAction extends JWorkBookAction{ BasicDialog dialog = mobileAttrPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { - wbTpl.setReportMobileAttr(mobileAttrPane.updateBean()); + ElementCaseMobileAttr elementCaseMobileAttr = mobileAttrPane.updateBean(); + wbTpl.setReportMobileAttr(elementCaseMobileAttr); jwb.fireTargetModified(); + if (elementCaseMobileAttr.isMobileCanvasSize()) { + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(ReportFunctionProcessor.MOBILE_TEMPLATE_CPT); + } + } } }); dialog.setVisible(true); diff --git a/designer/src/com/fr/design/dscolumn/DSColumnPane.java b/designer/src/com/fr/design/dscolumn/DSColumnPane.java index 68b49b1af3..66071ba312 100644 --- a/designer/src/com/fr/design/dscolumn/DSColumnPane.java +++ b/designer/src/com/fr/design/dscolumn/DSColumnPane.java @@ -1,26 +1,30 @@ package com.fr.design.dscolumn; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JPanel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - import com.fr.base.FRContext; import com.fr.data.TableDataSource; +import com.fr.design.dialog.BasicPane; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.dialog.BasicPane; -import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; +import com.fr.general.Inter; import com.fr.report.cell.CellElement; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +/** + * @author null + * @version 2018年2月9日13点47分 + * @since 8.0 + */ public class DSColumnPane extends BasicPane { private TableDataSource tplEC; @@ -29,17 +33,56 @@ public class DSColumnPane extends BasicPane { private DSColumnConditionsPane conditionPane = null; private DSColumnAdvancedPane advancedPane = null; private TemplateCellElement cellElement; - protected Component lastSelectedComponent; - + private Component lastSelectedComponent; + public static final int SETTING_ALL = 2; public static final int SETTING_DSRELATED = 1; - + + + private ChangeListener appliedWizardTabChangeListener = new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent evt) { + try { + if (lastSelectedComponent == null) { + lastSelectedComponent = basicPane; + } + // selectTabComponent是正要切换到的那个Pane + Component selectTabComponent = tabbedPane.getSelectedComponent(); + // denny: 如果切换Tab时上一个Pane是basicPane, 则刷新一下其他Pane, + // 因为选择的数据列可能改变, 导致后面过滤和使用公式用到的数据项改变 + if (lastSelectedComponent == basicPane) { + basicPane.update(cellElement); + + // denny_GUI: 刷新其他面板 + refreshOtherTabs(); + } + // 切换标签的时候就,确认是否有没有添加到列表中的条件 + lastSelectedComponent = selectTabComponent; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + + } + }; + /** + * cellElement 改变时,刷新一下 + * 比如:上边切换Tab时,basicPane Update了一下,可能会改变Field cellElement的值 + */ + private PropertyChangeListener myPropertyChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + refreshOtherTabs(); + } + }; + public DSColumnPane() { - this.initComponents(SETTING_ALL); + this(SETTING_ALL); } - - public DSColumnPane(int setting) { - this.initComponents(setting); + + private DSColumnPane(int setting) { + this.initComponents(setting); } protected void initComponents(int setting) { @@ -65,18 +108,22 @@ public class DSColumnPane extends BasicPane { this.setPreferredSize(new Dimension(610, 400)); } - + @Override protected String title4PopupWindow() { - return Inter.getLocText("ExpandD-Data_Column"); + return Inter.getLocText("ExpandD-Data_Column"); } - /* - * populate + /** + * 更新面板信息 + * + * @param tds 数据源 + * @param cellElement 单元格 + * @throws Exception e */ public void populate(TableDataSource tds, TemplateCellElement cellElement) throws Exception { - this.tplEC = tds; - + this.tplEC = tds; + if (tds == null || cellElement == null) { // _denny: 我不认为这种情况应该出现,以防万一 this.cellElement = new DefaultTemplateCellElement(); @@ -85,15 +132,16 @@ public class DSColumnPane extends BasicPane { // _denny: 这边需要克隆一下,因为在设置时,可能改变字段cellElement,但改变真实值是不被期望的 try { this.cellElement = (TemplateCellElement) cellElement.clone(); - } catch (CloneNotSupportedException ce) { + } catch (CloneNotSupportedException ignored) { } + // 只更新基本设置的面板信息即可,因为从基本信息切换到其他设置的时候也还是会更新其他面板的 this.basicPane.populate(tds, this.cellElement); - this.conditionPane.populate(tds, this.cellElement); - this.advancedPane.populate(this.cellElement); } - /* - * update + /** + * update 保存 + * + * @return 单元格信息 */ public CellElement update() { this.basicPane.update(cellElement); @@ -101,54 +149,24 @@ public class DSColumnPane extends BasicPane { this.advancedPane.update(cellElement); return cellElement; } - public ChangeListener appliedWizardTabChangeListener = new ChangeListener() { - - public void stateChanged(ChangeEvent evt) { - try { - if (lastSelectedComponent == null) { - lastSelectedComponent = basicPane; - } - //selectTabComponent是正要切换到的那个Pane - Component selectTabComponent = tabbedPane.getSelectedComponent(); - // _denny: 如果切换Tab时上一个Pane是basicPane, 则刷新一下其他Pane, - // 因为选择的数据列可能改变, 导致后面过滤和使用公式用到的数据项改变 - if (lastSelectedComponent == basicPane) { - basicPane.update(cellElement); - - // denny_GUI: 刷新其他面板 - refrushOtherTabs(); - } - // 切换标签的时候就,确认是否有没有添加到列表中的条件 - lastSelectedComponent = selectTabComponent; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - }; - // cellElement 改变时,刷新一下 - // 比如:上边切换Tab时,basicPane Update了一下,可能会改变Field cellElement的值 - PropertyChangeListener myPropertyChangeListener = new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - refrushOtherTabs(); - } - }; - - //_denny:当数据tab中的数据发生变化的时候刷新后面的tab - public void refrushOtherTabs() { - // ——deny:当JTabPane中加入一个Pane时,后面的Pane可能还没有初始化 + /** + * denny:当数据tab中的数据发生变化的时候刷新后面的tab + */ + private void refreshOtherTabs() { + // deny:当JTabPane中加入一个Pane时,后面的Pane可能还没有初始化 if (conditionPane == null || advancedPane == null) { return; } this.conditionPane.populate(tplEC, cellElement); this.advancedPane.populate(cellElement); } - public void putElementcase(ElementCasePane t){ - basicPane.putElementcase(t); + + public void putElementcase(ElementCasePane t) { + basicPane.putElementcase(t); } - public void putCellElement(TemplateCellElement tplCE) { - basicPane.putCellElement(tplCE); - } + public void putCellElement(TemplateCellElement tplCE) { + basicPane.putCellElement(tplCE); + } } \ 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 547fdcf480..1bd0582fc2 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -4,12 +4,12 @@ package com.fr.design.mainframe; 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.base.vcs.DesignerMode; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -755,7 +755,7 @@ public abstract class ElementCasePane extends Tar * @return 返回是否清除内容. */ public boolean clearContents() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return false; } boolean b = this.selection.clear(Clear.CONTENTS, this); @@ -1042,7 +1042,7 @@ public abstract class ElementCasePane extends Tar */ public UIPopupMenu createRowPopupMenu(MouseEvent evt, int selectedRows) { UIPopupMenu popupMenu = new UIPopupMenu(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { popupMenu.add(new CleanAuthorityAction(this).createMenuItem()); return popupMenu; } @@ -1135,7 +1135,7 @@ public abstract class ElementCasePane extends Tar public UIPopupMenu createColumnPopupMenu(MouseEvent evt, int selectedColumn) { UIPopupMenu popupMenu = new UIPopupMenu(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { popupMenu.add(new CleanAuthorityAction(this).createMenuItem()); return popupMenu; } @@ -1236,7 +1236,7 @@ public abstract class ElementCasePane extends Tar public ShortCut[] shortCuts4Authority() { return new ShortCut[]{ new NameSeparator(Inter.getLocText(new String[]{"DashBoard-Potence", "Edit"})), - BaseUtils.isAuthorityEditing() ? new ExitAuthorityEditAction(this) : new AllowAuthorityEditAction(this), + DesignerMode.isAuthorityEditing() ? new ExitAuthorityEditAction(this) : new AllowAuthorityEditAction(this), }; } diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java index cc57b7a852..601467125f 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java @@ -1,38 +1,42 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; -import com.fr.design.actions.edit.HyperlinkAction; -import com.fr.design.fun.MenuHandler; -import com.fr.design.gui.frpane.HyperlinkGroupPane; -import com.fr.design.menu.KeySetUtils; -import com.fr.design.present.ConditionAttributesGroupPane; -import com.fr.general.Inter; -import com.fr.grid.selection.FloatSelection; -import com.fr.grid.selection.Selection; -import com.fr.page.ReportSettingsProvider; -import com.fr.design.file.HistoryTemplateListPane; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignState; import com.fr.design.actions.UpdateAction; -import com.fr.design.actions.cell.*; +import com.fr.design.actions.cell.CellAttributeAction; +import com.fr.design.actions.cell.CellExpandAttrAction; +import com.fr.design.actions.cell.CellWidgetAttrAction; +import com.fr.design.actions.cell.ConditionAttributesAction; +import com.fr.design.actions.cell.GlobalStyleMenuDef; import com.fr.design.actions.columnrow.InsertColumnAction; import com.fr.design.actions.columnrow.InsertRowAction; import com.fr.design.actions.core.ActionFactory; +import com.fr.design.actions.edit.HyperlinkAction; import com.fr.design.actions.edit.merge.MergeCellAction; import com.fr.design.actions.edit.merge.UnmergeCellAction; import com.fr.design.actions.utils.DeprecatedActionManager; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.fun.MenuHandler; +import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.mainframe.cell.QuickEditorRegion; +import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; -import com.fr.report.worksheet.WorkSheet; +import com.fr.design.present.ConditionAttributesGroupPane; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionListener; +import com.fr.general.Inter; +import com.fr.grid.selection.FloatSelection; +import com.fr.grid.selection.Selection; +import com.fr.page.ReportSettingsProvider; +import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ArrayUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.JPanel; +import java.awt.BorderLayout; /** * 类说明: 设计面板中最上方的"插入" "单元格"下拉列表Menu模块. @@ -47,7 +51,7 @@ public class ElementCasePaneDelegate extends ElementCasePane { this.addSelectionChangeListener(new SelectionListener() { @Override public void selectionChanged(SelectionEvent e) { - if (!isEditable() && !BaseUtils.isAuthorityEditing()) { + if (!isEditable() && !DesignerMode.isAuthorityEditing()) { return; } refreshPropertyPanes(); @@ -67,7 +71,7 @@ public class ElementCasePaneDelegate extends ElementCasePane { private void refreshPropertyPanes() { //在编辑权限,所以要更新权限编辑面板 - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { AuthorityPropertyPane authorityPropertyPane = new AuthorityPropertyPane(ElementCasePaneDelegate.this); authorityPropertyPane.populate(); EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION); @@ -79,11 +83,11 @@ public class ElementCasePaneDelegate extends ElementCasePane { CellElementPropertyPane.getInstance().populate(ElementCasePaneDelegate.this); QuickEditorRegion.getInstance().populate(getCurrentEditor()); JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + // 模板初始化完成后,才能初始化超级链接面板 if (editingTemplate != null && !editingTemplate.isUpMode()) { Selection editingSelection = getSelection(); - // 模板初始化完成后,才能初始化超级链接面板 + // 获取超级链接面板并刷新显示 HyperlinkGroupPane hyperlinkGroupPane = editingTemplate.getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance()); - hyperlinkGroupPane.populate(ElementCasePaneDelegate.this); if (editingSelection instanceof FloatSelection) { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.REPORT_FLOAT); JPanel floatPane = new JPanel(new BorderLayout()); @@ -120,7 +124,7 @@ public class ElementCasePaneDelegate extends ElementCasePane { * @return 返回MenuDef数组. */ public MenuDef[] menus4Target() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return super.menus4Target(); } return (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), new MenuDef[]{createInsertMenuDef(), createCellMenuDef()}); diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index c7996e84f9..a93e602210 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -264,7 +264,7 @@ public class JWorkBook extends JTemplate { if (this.getEditingElementCasePane() == null) { return JWorkBook.this; } - this.getEditingElementCasePane().getGrid().setEditable(!BaseUtils.isAuthorityEditing()); + this.getEditingElementCasePane().getGrid().setEditable(!DesignerMode.isAuthorityEditing()); centerPane.needToShowCoverAndHidPane(); if (centerPane.isUpEditMode()) { return parameterPane; @@ -294,7 +294,7 @@ public class JWorkBook extends JTemplate { } public JPanel getEastUpPane() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return allowAuthorityUpPane(); } else { return exitEastUpPane(); @@ -589,7 +589,7 @@ public class JWorkBook extends JTemplate { */ public ShortCut[] shortcut4FileMenu() { boolean showWorkBookExportMenu = DesignerMode.isVcsMode() - || BaseUtils.isAuthorityEditing() + || DesignerMode.isAuthorityEditing() || (FRContext.getCurrentEnv() instanceof RemoteEnv); return (ShortCut[]) ArrayUtils.addAll(super.shortcut4FileMenu(), showWorkBookExportMenu ? new ShortCut[0] : new ShortCut[]{this.createWorkBookExportMenu()} @@ -634,7 +634,7 @@ public class JWorkBook extends JTemplate { public ShortCut[] shortCuts4Authority() { return new ShortCut[]{ new NameSeparator(Inter.getLocText("FR-Designer_Permissions_Edition")), - BaseUtils.isAuthorityEditing() ? new ExitAuthorityEditAction(this) : new AllowAuthorityEditAction(this), + DesignerMode.isAuthorityEditing() ? new ExitAuthorityEditAction(this) : new AllowAuthorityEditAction(this), }; } @@ -676,7 +676,7 @@ public class JWorkBook extends JTemplate { protected void applyUndoState(WorkBookUndoState u) { try { this.setTarget((WorkBook) u.getWorkBook().clone()); - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { if (u.getAuthorityType() != BaseUndoState.NORMAL_STATE) { applyAll(u); this.undoState = u; @@ -929,7 +929,7 @@ public class JWorkBook extends JTemplate { } } } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION); EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(allowAuthorityUpPane()); EastRegionContainerPane.getInstance().replaceConfiguredRolesPane(RolesAlreadyEditedPane.getInstance()); @@ -967,6 +967,11 @@ public class JWorkBook extends JTemplate { return ps; } + @Override + public Parameter[] getJTemplateParameters() { + return this.parameterPane.getAllParameters(); + } + /** * 请求单元格区域的焦点 */ diff --git a/designer/src/com/fr/design/mainframe/ReportComponent.java b/designer/src/com/fr/design/mainframe/ReportComponent.java index 699f6c1c5b..1a6f07152e 100644 --- a/designer/src/com/fr/design/mainframe/ReportComponent.java +++ b/designer/src/com/fr/design/mainframe/ReportComponent.java @@ -5,7 +5,7 @@ package com.fr.design.mainframe; import javax.swing.JScrollBar; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.report.ReportBackgroundAction; @@ -68,7 +68,7 @@ public abstract class ReportComponent{ - public FormElementCasePaneDelegate(FormElementCase sheet) { + public FormElementCasePaneDelegate(FormElementCase sheet, Form form) { super(sheet); + + this.getGrid().setPaginateLineShowType(form.getFormMobileAttr().isMobileOnly() + ? Grid.SINGLE_HORIZONTAL_PAGINATE_LINE + : Grid.NO_PAGINATE_LINE); + this.addSelectionChangeListener(new SelectionListener() { @Override public void selectionChanged(SelectionEvent e) { diff --git a/designer/src/com/fr/design/parameter/ParameterDefinitePane.java b/designer/src/com/fr/design/parameter/ParameterDefinitePane.java index cb53dd8b7c..0729897d6e 100644 --- a/designer/src/com/fr/design/parameter/ParameterDefinitePane.java +++ b/designer/src/com/fr/design/parameter/ParameterDefinitePane.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignState; import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction; @@ -458,7 +459,7 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus * @return 文件菜单的子菜单 */ public ShortCut[] shortcut4FileMenu() { - return (ShortCut[]) ArrayUtils.addAll(BaseUtils.isAuthorityEditing() ? + return (ShortCut[]) ArrayUtils.addAll(DesignerMode.isAuthorityEditing() ? new ShortCut[]{new SaveTemplateAction(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()), new UndoAction(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()), new RedoAction(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate())} : @@ -477,7 +478,7 @@ public class ParameterDefinitePane extends JPanel implements ToolBarMenuDockPlus */ public MenuDef[] menus4Target() { MenuDef tplMenu = new MenuDef(KeySetUtils.TEMPLATE.getMenuKeySetName(),KeySetUtils.TEMPLATE.getMnemonic()); - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { tplMenu.addShortCut(new NameSeparator(Inter.getLocText("FR-Utils_WorkBook"))); tplMenu.addShortCut(new ReportParameterAction(workBook)); tplMenu.addShortCut(new NameSeparator(Inter.getLocText(new String[]{"DashBoard-Potence", "Edit"}))); diff --git a/designer/src/com/fr/design/report/PageSetupPane.java b/designer/src/com/fr/design/report/PageSetupPane.java index 07076b1776..883690a088 100644 --- a/designer/src/com/fr/design/report/PageSetupPane.java +++ b/designer/src/com/fr/design/report/PageSetupPane.java @@ -73,14 +73,6 @@ public class PageSetupPane extends BasicPane { private OtherPane otherPane; private UILabel zeroMarginWarn; - public final static PaperSize MOBILE_SMAIL_SIZE = new PaperSize(new MM(142.8f), new MM(254)); - public final static PaperSize MOBILE_LARGE_SIZE = new PaperSize(new MM(190.5f), new MM(338.7f)); - - public static final Object[][] MOBILE_NAME_SIZE_ARRAY = { - {Inter.getLocText("FR-Designer_PaperSize-Mobile-Large"),MOBILE_LARGE_SIZE}, - {Inter.getLocText("FR-Designer_PaperSize-Mobile-Small"),MOBILE_SMAIL_SIZE} - }; - public PageSetupPane() { this.initComponents(); } @@ -135,12 +127,10 @@ public class PageSetupPane extends BasicPane { private UIRadioButton landscapeRadioButton; private UIRadioButton predefinedRadioButton; - private UIRadioButton mobileRadioButton; private UIRadioButton customRadioButton; private UIComboBox predefinedComboBox; - private UIComboBox mobileComboBox; - + private UIBasicSpinner paperWidthSpinner; private UIBasicSpinner paperHeightSpinner; private UIComboBox switchInch; @@ -210,20 +200,14 @@ public class PageSetupPane extends BasicPane { predefinedRadioButton = new UIRadioButton(Inter.getLocText("PageSetup-Predefined") + ":"); predefinedRadioButton.setMnemonic('P'); predefinedRadioButton.addActionListener(previewListener); - - mobileRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_MobilePhone") + " :"); - mobileRadioButton.setMnemonic('M'); - mobileRadioButton.addActionListener(previewListener); - - + customRadioButton = new UIRadioButton(Inter.getLocText("Custom") + ":"); customRadioButton.setMnemonic('C'); customRadioButton.addActionListener(previewListener); predefinedComboBox = new UIComboBox(); - mobileComboBox = new UIComboBox(); - + paperWidthSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); ((JSpinner.DefaultEditor) paperWidthSpinner.getEditor()).getTextField().setColumns(7); paperHeightSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); @@ -239,9 +223,7 @@ public class PageSetupPane extends BasicPane { predefinedComboBox.setRenderer(paperSizeCellRenderere); predefinedComboBox.addItemListener(paperSizeItemListener); - - mobileComboBox.setRenderer(paperSizeMobileCellRenderere); - mobileComboBox.addItemListener(paperSizeItemMobileListener); + ((JSpinner.DefaultEditor) paperWidthSpinner.getEditor()).getTextField().getDocument().addDocumentListener(customTextListener); ((JSpinner.DefaultEditor) paperHeightSpinner.getEditor()).getTextField().getDocument().addDocumentListener(customTextListener); @@ -253,12 +235,6 @@ public class PageSetupPane extends BasicPane { Object[] tmpPaperSizeNameArray = ReportConstants.PaperSizeNameSizeArray[i]; predefinedComboBox.addItem(tmpPaperSizeNameArray[1]); } - - for(int i=0; i{ - + private ReportMobileTemplateSettingsPane reportMobileTemplateSettingsPane; // 模版设置面板 private AppFitBrowserPane appFitBrowserPane; - //工具栏容器 private MobileToolBarPane mobileToolBarPane; @@ -28,6 +27,10 @@ public class ReportMobileAttrPane extends BasicBeanPane{ JPanel jPanel = new JPanel(); jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS)); jPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + reportMobileTemplateSettingsPane = new ReportMobileTemplateSettingsPane(); + jPanel.add(reportMobileTemplateSettingsPane); + appFitBrowserPane = new AppFitBrowserPane(); appFitBrowserPane.setAppFitPreviewPane(appFitPreviewPane); jPanel.add(appFitBrowserPane); @@ -46,13 +49,14 @@ public class ReportMobileAttrPane extends BasicBeanPane{ } appFitBrowserPane.populateBean(ob); mobileToolBarPane.populateBean(ob); - + reportMobileTemplateSettingsPane.populateBean(ob); } @Override public ElementCaseMobileAttr updateBean() { ElementCaseMobileAttr caseMobileAttr = appFitBrowserPane.updateBean(); mobileToolBarPane.updateBean(caseMobileAttr); + reportMobileTemplateSettingsPane.updateBean(caseMobileAttr); return caseMobileAttr; } diff --git a/designer/src/com/fr/design/report/mobile/ReportMobileTemplateSettingsPane.java b/designer/src/com/fr/design/report/mobile/ReportMobileTemplateSettingsPane.java new file mode 100644 index 0000000000..e449091a5b --- /dev/null +++ b/designer/src/com/fr/design/report/mobile/ReportMobileTemplateSettingsPane.java @@ -0,0 +1,102 @@ +package com.fr.design.report.mobile; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.designer.IntervalConstants; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.report.mobile.ElementCaseMobileAttr; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by plough on 2018/1/8. + */ +public class ReportMobileTemplateSettingsPane extends BasicBeanPane { + + private UICheckBox mobileCanvasSizeCheck; // 设置为手机模版画布大小 + + public ReportMobileTemplateSettingsPane() { + this.initComponents(); + } + + private void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel borderPane = FRGUIPaneFactory.createTitledBorderPane(this.title4PopupWindow()); + + JPanel contentPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + contentPane.setBorder(BorderFactory.createEmptyBorder(0, IntervalConstants.INTERVAL_L2, 0, 0)); + + contentPane.add(getMobileCanvasSizeCheckPane(), BorderLayout.CENTER); + + borderPane.add(contentPane); + this.add(borderPane); + } + + private JPanel getMobileCanvasSizeCheckPane() { + JPanel panel = new JPanel(FRGUIPaneFactory.createBorderLayout()); + mobileCanvasSizeCheck = new UICheckBox(Inter.getLocText("FR-Designer_Set_Mobile_Canvas_Size")); + panel.add(mobileCanvasSizeCheck, BorderLayout.NORTH); + panel.add(getCanvasDescPane(), BorderLayout.CENTER); + panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L6, 0)); + return panel; + } + + private JPanel getCanvasDescPane() { + + UILabel desc1 = createDescLabel(Inter.getLocText("FR-Designer_Mobile_Screen_Match_Desc")); + UILabel desc2 = createDescLabel(Inter.getLocText("FR-Designer_Mobile_Screen_Zoom_In_Desc")); + UILabel desc3 = createDescLabel(Inter.getLocText("FR-Designer_Mobile_Screen_Zoom_Out_Desc")); + + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p, p, p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; + Component[][] components = new Component[][]{ + new Component[]{desc1, null}, + new Component[]{desc2, null}, + new Component[]{desc3, null} + }; + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W0, IntervalConstants.INTERVAL_L1); + panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L7, IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1, 0)); + return panel; + } + + private UILabel createDescLabel(String desc) { + UILabel label = new UILabel(desc); + label.setForeground(Color.gray); + return label; + } + + @Override + public void populateBean(ElementCaseMobileAttr ob) { + if (ob == null) { + ob = new ElementCaseMobileAttr(); + } + mobileCanvasSizeCheck.setSelected(ob.isMobileCanvasSize()); + } + + @Override + public ElementCaseMobileAttr updateBean() { + ElementCaseMobileAttr mobileAttr = new ElementCaseMobileAttr(); + mobileAttr.setMobileCanvasSize(mobileCanvasSizeCheck.isSelected()); + return mobileAttr; + } + + @Override + public void updateBean(ElementCaseMobileAttr mobileAttr) { + if(mobileAttr != null) { + mobileAttr.setMobileCanvasSize(mobileCanvasSizeCheck.isSelected()); + } + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Template_Settings"); + } +} \ No newline at end of file diff --git a/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java b/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java index 12dd2dcb76..55db27c051 100644 --- a/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java +++ b/designer/src/com/fr/design/webattr/ReportWebWidgetConstants.java @@ -32,7 +32,7 @@ public class ReportWebWidgetConstants { public static WidgetOption[] getWriteToolBarInstance() { return new WidgetOption[]{SUBMIT, VERIFY, EMAIL, EXPORT, PDF, EXCELP, EXCELO, EXCELS, WORD, PRINT, FLASHPRINT, APPLETPRINT, PDFPRINT, IMPORTEXCELDATA, SHOWCELLVALUE, - APPENDCOLUMNROW, DELETECOLUMNROW, SETPRINTEROFFSET, WRITEOFFLINEHTML, CUSTOM_BUTTON, WRITESTASH, WRITESTASHCLEAR, IMPORTEXCELDATA_CUSTOMIZED, + APPENDCOLUMNROW, DELETECOLUMNROW, SETPRINTEROFFSET, CUSTOM_BUTTON, WRITESTASH, WRITESTASHCLEAR, IMPORTEXCELDATA_CUSTOMIZED, IMPORTEXCEL, IMPORTEXCEL_COVER, IMPORTEXCEL_CLEAN, IMPORTEXCEL_APPEND}; } diff --git a/designer/src/com/fr/design/webattr/ToolBarButton.java b/designer/src/com/fr/design/webattr/ToolBarButton.java index 817bb20fd2..9d59732a70 100644 --- a/designer/src/com/fr/design/webattr/ToolBarButton.java +++ b/designer/src/com/fr/design/webattr/ToolBarButton.java @@ -1,6 +1,6 @@ package com.fr.design.webattr; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.mainframe.DesignerContext; import com.fr.design.dialog.BasicDialog; @@ -90,7 +90,7 @@ public class ToolBarButton extends UIButton implements MouseListener { * @param e 鼠标点击事件 */ public void mouseClicked(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { auhtorityMouseAction(); return; } diff --git a/designer/src/com/fr/grid/AbstractGridHeaderMouseHandler.java b/designer/src/com/fr/grid/AbstractGridHeaderMouseHandler.java index b68ddd197a..821257e378 100644 --- a/designer/src/com/fr/grid/AbstractGridHeaderMouseHandler.java +++ b/designer/src/com/fr/grid/AbstractGridHeaderMouseHandler.java @@ -18,7 +18,7 @@ import com.fr.base.BaseUtils; import com.fr.base.DynamicUnitList; import com.fr.base.FRContext; import com.fr.base.ScreenResolution; -import com.fr.base.Utils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignerEnvManager; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.ElementCasePane; @@ -417,7 +417,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { this.setToolTipText2(this.getSelectedHeaderTooltip(Math.abs(startMultiSelectIndex - endMultiSelectIndex) + 1)); } else if (dragType == GridUtils.DRAG_CELL_SIZE) { //权限编辑状态不可以改变行列的宽度 - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } if (!(isDragPermited)) { @@ -488,7 +488,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { tmpIncreaseSize = sizeList.get(i).toPixD(resolution); tmpSize2 = tmpIncreaseSize <= 0 ? tmpSize1 + 1 : tmpSize1 + tmpIncreaseSize; - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { break; } diff --git a/designer/src/com/fr/grid/Grid.java b/designer/src/com/fr/grid/Grid.java index 94c6f4a43a..9a33196ba3 100644 --- a/designer/src/com/fr/grid/Grid.java +++ b/designer/src/com/fr/grid/Grid.java @@ -48,6 +48,9 @@ public class Grid extends BaseGridComponent { /** * If editing, the Component that is handling the editing. */ + public static final int NO_PAGINATE_LINE = 0; // 不显示分页线 + public static final int MULTIPLE_PAGINATE_LINE = 1; // 绘制多条分页线 + public static final int SINGLE_HORIZONTAL_PAGINATE_LINE = 2; // 仅绘制一条水平分页线 private static final int VERTICAL_EXTENT_INITIAL_VALUE = 50; private static final int HORIZONTAL_EXTENT_INITIAL_VALUE = 40; transient protected Component editorComponent; @@ -57,7 +60,7 @@ public class Grid extends BaseGridComponent { private boolean showGridLine = true; private Color gridLineColor = UIConstants.RULER_LINE_COLOR; // line color. - private boolean isShowPaginateLine = true; + private int paginateLineShowType = MULTIPLE_PAGINATE_LINE; // 分页线类型 private Color paginationLineColor = Color.RED; // line color of paper private boolean isShowVerticalFrozenLine = true; @@ -202,25 +205,6 @@ public class Grid extends BaseGridComponent { this.getElementCasePane().repaint(); } - /** - * 是否显示分页线 - * - * @return 是否显示分页线 - * @date 2014-12-21-下午6:31:45 - */ - public boolean isShowPaginateLine() { - return isShowPaginateLine; - } - - /** - * Sets to show pagination line. - */ - public void setShowPaginateLine(boolean showPaginateLine) { - this.isShowPaginateLine = showPaginateLine; - - this.getElementCasePane().repaint(); - } - /** * Gets pagination line color. */ @@ -1432,8 +1416,12 @@ public class Grid extends BaseGridComponent { this.tooltipLocation.setLocation(x, y); } -// @Override -// public void requestFocus() { -// super.requestFocus(); -// } + public int getPaginateLineShowType() { + return paginateLineShowType; + } + + public void setPaginateLineShowType(int paginateLineShowType) { + this.paginateLineShowType = paginateLineShowType; + this.getElementCasePane().repaint(); + } } \ No newline at end of file diff --git a/designer/src/com/fr/grid/GridColumnUI.java b/designer/src/com/fr/grid/GridColumnUI.java index e700137e13..720b69f0d5 100644 --- a/designer/src/com/fr/grid/GridColumnUI.java +++ b/designer/src/com/fr/grid/GridColumnUI.java @@ -9,10 +9,10 @@ import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; -import com.fr.base.BaseUtils; import com.fr.base.DynamicUnitList; import com.fr.base.GraphHelper; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.cache.list.IntList; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.ElementCasePane; @@ -132,7 +132,7 @@ public class GridColumnUI extends ComponentUI { } private void drawAuthority(ElementCase elementCase, Graphics2D g2d, double tmpWidth1, double tmpIncreaseWidth, Dimension size, int i) { - boolean isAuthorityEdited = BaseUtils.isAuthorityEditing(); + boolean isAuthorityEdited = DesignerMode.isAuthorityEditing(); if (isAuthorityEdited) { ColumnRowPrivilegeControl cpc = elementCase.getColumnPrivilegeControl(i); String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); diff --git a/designer/src/com/fr/grid/GridMouseAdapter.java b/designer/src/com/fr/grid/GridMouseAdapter.java index 90b302d8d1..60ac697af1 100644 --- a/designer/src/com/fr/grid/GridMouseAdapter.java +++ b/designer/src/com/fr/grid/GridMouseAdapter.java @@ -3,13 +3,13 @@ package com.fr.grid; import com.fr.base.BaseUtils; import com.fr.base.DynamicUnitList; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.common.inputevent.InputEventBaseOnOS; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.JSliderPane; -import com.fr.design.present.CellWriteAttrPane; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; @@ -157,7 +157,7 @@ public class GridMouseAdapter implements MouseListener, MouseWheelListener, Mous * 处理左击事件 */ private void doWithLeftButtonPressed(MouseEvent evt) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { grid.setEditable(false); } @@ -188,10 +188,10 @@ public class GridMouseAdapter implements MouseListener, MouseWheelListener, Mous // 得到点击所在的column and row ColumnRow columnRow = GridUtils.getEventColumnRow_withresolution(reportPane, this.oldEvtX, this.oldEvtY, this.resolution); TemplateCellElement cellElement = report.getTemplateCellElement(columnRow.getColumn(), columnRow.getRow()); - if (clickCount >= 2 && !BaseUtils.isAuthorityEditing()) { + if (clickCount >= 2 && !DesignerMode.isAuthorityEditing()) { grid.startEditing(); } - if (clickCount == 1 && cellElement != null && cellElement.getWidget() != null && !BaseUtils.isAuthorityEditing()) { + if (clickCount == 1 && cellElement != null && cellElement.getWidget() != null && !DesignerMode.isAuthorityEditing()) { showWidetWindow(cellElement, report); } reportPane.repaint(); @@ -362,12 +362,12 @@ public class GridMouseAdapter implements MouseListener, MouseWheelListener, Mous } Selection selection = reportPane.getSelection(); - if (selection instanceof FloatSelection && !BaseUtils.isAuthorityEditing()) { + if (selection instanceof FloatSelection && !DesignerMode.isAuthorityEditing()) { doWithFloatElementDragged(evtX, evtY, (FloatSelection) selection); grid.setDragType(GridUtils.DRAG_FLOAT); - } else if (grid.getDragType() == GridUtils.DRAG_CELLSELECTION_BOTTOMRIGHT_CORNER && !BaseUtils.isAuthorityEditing()) { + } else if (grid.getDragType() == GridUtils.DRAG_CELLSELECTION_BOTTOMRIGHT_CORNER && !DesignerMode.isAuthorityEditing()) { doWithCellElementDragged(evtX, evtY, (CellSelection) selection); - } else if (grid.getDragType() == GridUtils.DRAG_CELLSELECTION && !BaseUtils.isAuthorityEditing()) { + } else if (grid.getDragType() == GridUtils.DRAG_CELLSELECTION && !DesignerMode.isAuthorityEditing()) { // peter:获得调整过的Selected Column Row. ColumnRow selectedCellPoint = GridUtils.getAdjustEventColumnRow_withresolution(reportPane, evtX, evtY, resolution); if (selectedCellPoint.getColumn() != grid.getDragRectangle().x || selectedCellPoint.getRow() != grid.getDragRectangle().y) { diff --git a/designer/src/com/fr/grid/GridRowUI.java b/designer/src/com/fr/grid/GridRowUI.java index 818b81700d..5499906990 100644 --- a/designer/src/com/fr/grid/GridRowUI.java +++ b/designer/src/com/fr/grid/GridRowUI.java @@ -8,10 +8,10 @@ import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; -import com.fr.base.BaseUtils; import com.fr.base.DynamicUnitList; import com.fr.base.GraphHelper; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.cache.list.IntList; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.ElementCasePane; @@ -137,7 +137,7 @@ public class GridRowUI extends ComponentUI { } private void drawAuthority(ElementCase elementCase, Graphics2D g2d, double tmpHeight1, double tmpIncreaseHeight, Dimension size, int i) { - boolean isAuthorityEdited = BaseUtils.isAuthorityEditing(); + boolean isAuthorityEdited = DesignerMode.isAuthorityEditing(); if (isAuthorityEdited) { ColumnRowPrivilegeControl cpc = elementCase.getRowPrivilegeControl(i); String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); diff --git a/designer/src/com/fr/grid/GridUI.java b/designer/src/com/fr/grid/GridUI.java index 9a972db7b1..eb4459e258 100644 --- a/designer/src/com/fr/grid/GridUI.java +++ b/designer/src/com/fr/grid/GridUI.java @@ -1,7 +1,6 @@ package com.fr.grid; import com.fr.base.BaseFormula; -import com.fr.base.BaseUtils; import com.fr.base.DynamicUnitList; import com.fr.base.FRContext; import com.fr.base.GraphHelper; @@ -10,6 +9,7 @@ import com.fr.base.PaperSize; import com.fr.base.Utils; import com.fr.base.background.ColorBackground; import com.fr.base.background.ImageBackground; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.DesignerContext; @@ -41,9 +41,7 @@ import com.fr.report.worksheet.FormElementCase; import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ColumnRow; import com.fr.stable.Constants; -import com.fr.stable.script.CalculatorUtils; import com.fr.stable.unit.FU; -import com.fr.third.antlr.ANTLRException; import javax.swing.*; import javax.swing.plaf.ComponentUI; @@ -127,7 +125,7 @@ public class GridUI extends ComponentUI { // richer;聚合报表设计中,最初的ElementCase还没有加到Report中,所以elementCase.getReport()可能为空 ReportSettingsProvider reportSettings = getReportSettings(elementCase); PaperSettingProvider psetting = reportSettings.getPaperSetting(); - if (grid.isShowPaginateLine()) {// paint paper margin line. + if (grid.getPaginateLineShowType() != Grid.NO_PAGINATE_LINE) {// paint paper margin line. PaperSize paperSize = psetting.getPaperSize(); Margin margin = psetting.getMargin(); @@ -173,7 +171,7 @@ public class GridUI extends ComponentUI { private void paintScrollBackground(Graphics2D g2d, Grid grid, Background background, PaperSettingProvider psetting, ReportSettingsProvider reportSettings) { boolean isCanDrawImage = grid.isEditable() || isAuthority; if (isCanDrawImage && (background instanceof ImageBackground)) { - if (!grid.isShowPaginateLine()) { + if (grid.getPaginateLineShowType() == Grid.NO_PAGINATE_LINE) { calculatePaper(psetting, reportSettings); } @@ -239,12 +237,15 @@ public class GridUI extends ComponentUI { // 分页线 paginateLineList.clear(); + boolean isShowVerticalPaginateLine = grid.getPaginateLineShowType() == Grid.MULTIPLE_PAGINATE_LINE; + boolean isShowHorizontalPaginateLine = grid.getPaginateLineShowType() != Grid.NO_PAGINATE_LINE; + new DrawVerticalLineHelper(grid.getVerticalBeginValue(), verticalEndValue, - grid.isShowGridLine(), grid.isShowPaginateLine(), rowHeightList, paperPaintHeight, + grid.isShowGridLine(), isShowVerticalPaginateLine, rowHeightList, paperPaintHeight, paginateLineList, realWidth, resolution).iterateStart2End(g2d); new DrawHorizontalLineHelper(grid.getHorizontalBeginValue(), horizontalEndValue, - grid.isShowGridLine(), grid.isShowPaginateLine(), columnWidthList, paperPaintWidth, + grid.isShowGridLine(), isShowHorizontalPaginateLine, columnWidthList, paperPaintWidth, paginateLineList, realHeight, resolution).iterateStart2End(g2d); } @@ -583,11 +584,6 @@ public class GridUI extends ComponentUI { } private void paintPaginateLines(Graphics g, Grid grid) { - JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if(!jTemplate.isJWorkBook()){ - //报表块无分页之说 - return; - } Graphics2D g2d = (Graphics2D) g; // james 画分页线 @@ -614,8 +610,12 @@ public class GridUI extends ComponentUI { //g2d.setXORMode(Utils.getXORColor(grid.getPaginationLineColor())); GraphHelper.setStroke(g2d, GraphHelper.getStroke(Constants.LINE_DASH_DOT)); - for (int i = 0, len = paginateLineList.size(); i < len; i++) { - g2d.draw((Shape) paginateLineList.get(i)); + if (grid.getPaginateLineShowType() == Grid.SINGLE_HORIZONTAL_PAGINATE_LINE) { + g2d.draw((Shape) paginateLineList.get(0)); + } else { + for (int i = 0, len = paginateLineList.size(); i < len; i++) { + g2d.draw((Shape) paginateLineList.get(i)); + } } g2d.setPaintMode(); @@ -1037,7 +1037,7 @@ public class GridUI extends ComponentUI { throw new IllegalArgumentException("The component c to paint must be a Grid!"); } - isAuthority = BaseUtils.isAuthorityEditing(); + isAuthority = DesignerMode.isAuthorityEditing(); Graphics2D g2d = (Graphics2D) g; diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index 3201c44344..faaa6511eb 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/designer/src/com/fr/grid/selection/CellSelection.java @@ -5,6 +5,7 @@ import com.fr.base.BaseUtils; import com.fr.base.ConfigManager; import com.fr.base.NameStyle; import com.fr.base.Utils; +import com.fr.base.vcs.DesignerMode; import com.fr.cache.list.IntList; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.CellAttributeAction; @@ -463,7 +464,7 @@ public class CellSelection extends Selection { */ public UIPopupMenu createPopupMenu(ElementCasePane ePane) { UIPopupMenu popup = new UIPopupMenu(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { popup.add(new CleanAuthorityAction(ePane).createMenuItem()); return popup; } diff --git a/designer/src/com/fr/grid/selection/FloatSelection.java b/designer/src/com/fr/grid/selection/FloatSelection.java index cff3a4a642..a1f09591f5 100644 --- a/designer/src/com/fr/grid/selection/FloatSelection.java +++ b/designer/src/com/fr/grid/selection/FloatSelection.java @@ -1,7 +1,7 @@ package com.fr.grid.selection; -import com.fr.base.BaseUtils; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.cell.CleanAuthorityAction; import com.fr.design.actions.cell.FloatStyleAction; import com.fr.design.actions.core.ActionFactory; @@ -118,7 +118,7 @@ public class FloatSelection extends Selection { @Override public JPopupMenu createPopupMenu(ElementCasePane ePane) { UIPopupMenu popup = new UIPopupMenu(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { popup.add(new CleanAuthorityAction(ePane).createMenuItem()); return popup; } diff --git a/designer/src/com/fr/poly/PolyComponetsBar.java b/designer/src/com/fr/poly/PolyComponetsBar.java index 625978bcd3..5e584ca2f3 100644 --- a/designer/src/com/fr/poly/PolyComponetsBar.java +++ b/designer/src/com/fr/poly/PolyComponetsBar.java @@ -5,6 +5,7 @@ import com.fr.base.FRContext; import com.fr.base.chart.BaseChart; import com.fr.base.chart.BaseChartGetter; import com.fr.base.chart.BaseChartNameID; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.itooltip.MultiLineToolTip; @@ -53,7 +54,7 @@ public class PolyComponetsBar extends JToolBar { */ public void checkEnable() { for (SerIcon serIcon : serIcons) { - serIcon.setEnabled(!BaseUtils.isAuthorityEditing()); + serIcon.setEnabled(!DesignerMode.isAuthorityEditing()); } } diff --git a/designer/src/com/fr/poly/PolyDesigner.java b/designer/src/com/fr/poly/PolyDesigner.java index eefff3e1ec..c72dbb3c8e 100644 --- a/designer/src/com/fr/poly/PolyDesigner.java +++ b/designer/src/com/fr/poly/PolyDesigner.java @@ -3,10 +3,10 @@ */ package com.fr.poly; -import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.GraphHelper; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.common.inputevent.InputEventBaseOnOS; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; @@ -355,7 +355,7 @@ public class PolyDesigner extends ReportComponent { */ public void resetSelectionAndChooseState() { designer.setChooseType(SelectionType.INNER); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jTemplate.isJWorkBook()) { //清参数面板 diff --git a/designer/src/com/fr/poly/creator/ECBlockPane.java b/designer/src/com/fr/poly/creator/ECBlockPane.java index ebde8b3b4b..b0dae56734 100644 --- a/designer/src/com/fr/poly/creator/ECBlockPane.java +++ b/designer/src/com/fr/poly/creator/ECBlockPane.java @@ -3,7 +3,7 @@ */ package com.fr.poly.creator; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.edit.HyperlinkAction; import com.fr.design.menu.KeySetUtils; import com.fr.general.Inter; @@ -55,7 +55,7 @@ public class ECBlockPane extends PolyElementCasePane { if (!isEditable()) { return; } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { if (designer.getSelection().getEditingElementCasePane() == null) { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION_DISABLED); EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(new NoSupportAuthorityEdit()); @@ -106,7 +106,7 @@ public class ECBlockPane extends PolyElementCasePane { * @return 返回MenuDef数组. */ public MenuDef[] menus4Target() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return super.menus4Target(); } return (MenuDef[]) ArrayUtils.addAll(super.menus4Target(), new MenuDef[]{createInsertMenuDef(), createCellMenuDef()}); diff --git a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java index 84a626406b..193e20d055 100644 --- a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java +++ b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java @@ -9,8 +9,8 @@ import java.awt.event.MouseEvent; import javax.swing.event.MouseInputAdapter; -import com.fr.base.BaseUtils; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.design.beans.location.Absorptionline; import com.fr.design.beans.location.MoveUtils; import com.fr.design.beans.location.MoveUtils.RectangleDesigner; @@ -49,7 +49,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { * */ public void mousePressed(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { designer.noAuthorityEdit(); } pressed = e.getPoint(); @@ -66,7 +66,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { * */ public void mouseReleased(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { designer.noAuthorityEdit(); } editor.setDragging(false); @@ -92,7 +92,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { * */ public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { designer.noAuthorityEdit(); return; } diff --git a/designer/src/com/fr/poly/hanlder/ColumnOperationMouseHandler.java b/designer/src/com/fr/poly/hanlder/ColumnOperationMouseHandler.java index a03608499e..71e9ee4357 100644 --- a/designer/src/com/fr/poly/hanlder/ColumnOperationMouseHandler.java +++ b/designer/src/com/fr/poly/hanlder/ColumnOperationMouseHandler.java @@ -6,8 +6,8 @@ package com.fr.poly.hanlder; import java.awt.Point; import java.awt.event.MouseEvent; -import com.fr.base.BaseUtils; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.general.ComparatorUtils; import com.fr.poly.PolyDesigner; import com.fr.poly.PolyDesigner.SelectionType; @@ -57,7 +57,7 @@ public abstract class ColumnOperationMouseHandler extends * */ public void mousePressed(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { designer.noAuthorityEdit(); } startPoint = e.getPoint(); @@ -74,7 +74,7 @@ public abstract class ColumnOperationMouseHandler extends * */ public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } TemplateBlock block = editor.getValue(); diff --git a/designer/src/com/fr/poly/hanlder/PolyDesignerDropTarget.java b/designer/src/com/fr/poly/hanlder/PolyDesignerDropTarget.java index 9cdda209c1..52263e60f0 100644 --- a/designer/src/com/fr/poly/hanlder/PolyDesignerDropTarget.java +++ b/designer/src/com/fr/poly/hanlder/PolyDesignerDropTarget.java @@ -15,10 +15,10 @@ import java.awt.dnd.DropTargetEvent; import javax.swing.JScrollBar; -import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.ScreenResolution; import com.fr.base.chart.BaseChart; +import com.fr.base.vcs.DesignerMode; import com.fr.design.mainframe.DesignerContext; import com.fr.grid.Grid; import com.fr.poly.PolyDesigner; @@ -55,7 +55,7 @@ public class PolyDesignerDropTarget extends DropTargetAdapter { */ public void dragEnter(DropTargetDragEvent dtde) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } // richer:避免在一次拖拽过程中重复查找 diff --git a/designer/src/com/fr/poly/hanlder/RowOperationMouseHandler.java b/designer/src/com/fr/poly/hanlder/RowOperationMouseHandler.java index 770c103447..a29f2674eb 100644 --- a/designer/src/com/fr/poly/hanlder/RowOperationMouseHandler.java +++ b/designer/src/com/fr/poly/hanlder/RowOperationMouseHandler.java @@ -6,8 +6,8 @@ package com.fr.poly.hanlder; import java.awt.Point; import java.awt.event.MouseEvent; -import com.fr.base.BaseUtils; import com.fr.base.ScreenResolution; +import com.fr.base.vcs.DesignerMode; import com.fr.general.ComparatorUtils; import com.fr.poly.PolyDesigner; import com.fr.poly.PolyDesigner.SelectionType; @@ -55,7 +55,7 @@ public abstract class RowOperationMouseHandler extends Bl * */ public void mousePressed(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { designer.noAuthorityEdit(); } startPoint = e.getPoint(); @@ -72,7 +72,7 @@ public abstract class RowOperationMouseHandler extends Bl * */ public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } TemplateBlock block = editor.getValue(); diff --git a/designer/src/com/fr/start/Designer.java b/designer/src/com/fr/start/Designer.java index 4d9154c097..5be65d3e3a 100644 --- a/designer/src/com/fr/start/Designer.java +++ b/designer/src/com/fr/start/Designer.java @@ -123,7 +123,7 @@ public class Designer extends BaseDesigner { return menuDef; } - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { menuDef.addShortCut(SeparatorDef.DEFAULT); if (FRContext.getCurrentEnv().isRoot()) { @@ -320,7 +320,7 @@ public class Designer extends BaseDesigner { @Override public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) { //如果是处于权限编辑状态 - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { if (plus instanceof JWorkBook && plus.toolbars4Target() == null) { //聚合块编辑 return super.polyToolBar(Inter.getLocText(new String[]{"Polybolck", "DashBoard-Potence", "Edit"})); @@ -364,7 +364,7 @@ public class Designer extends BaseDesigner { @Override public Component createBBSLoginPane() { if (userInfoPane == null) { - userInfoPane = new UserInfoPane(); + userInfoPane = UserInfoPane.getInstance(); } return userInfoPane; } diff --git a/designer_base/src/com/fr/design/DesignState.java b/designer_base/src/com/fr/design/DesignState.java index 0a74f52e2f..eadd90bebe 100644 --- a/designer_base/src/com/fr/design/DesignState.java +++ b/designer_base/src/com/fr/design/DesignState.java @@ -1,8 +1,8 @@ package com.fr.design; -import com.fr.base.BaseUtils; import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.env.RemoteEnv; @@ -46,7 +46,7 @@ public class DesignState { designState += REMOTE; } isRoot = env != null && env.isRoot(); - isAuthority = BaseUtils.isAuthorityEditing(); + isAuthority = DesignerMode.isAuthorityEditing(); } public int getDesignState() { diff --git a/designer_base/src/com/fr/design/actions/AllowAuthorityEditAction.java b/designer_base/src/com/fr/design/actions/AllowAuthorityEditAction.java index 4d73692054..4ad897815e 100644 --- a/designer_base/src/com/fr/design/actions/AllowAuthorityEditAction.java +++ b/designer_base/src/com/fr/design/actions/AllowAuthorityEditAction.java @@ -1 +1 @@ -package com.fr.design.actions; import com.fr.base.BaseUtils; import com.fr.design.constants.UIConstants; import com.fr.design.menu.KeySetUtils; import com.fr.design.roleAuthority.ReportAndFSManagePane; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.designer.TargetComponent; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.*; /** * Author : daisy * Date: 13-8-30 * Time: 上午10:12 */ public class AllowAuthorityEditAction extends TemplateComponentAction { public AllowAuthorityEditAction(TargetComponent t) { super(t); this.setMenuKeySet(KeySetUtils.ALLOW_AUTHORITY_EDIT); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/allow_authority_edit.png")); } /** * 撤销 */ public void prepare4Undo() { HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().iniAuthorityUndoState(); } /** * 执行动作 * * @return 是否执行成功 */ public boolean executeActionReturnUndoRecordNeeded() { TargetComponent tc = getEditingComponent(); if (tc == null) { return false; } cleanAuthorityCondition(); //进入时是格式刷则取消格式刷 if (DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL) { tc.cancelFormat(); } BaseUtils.setAuthorityEditing(true); ReportAndFSManagePane.getInstance().refreshDockingView(); RolesAlreadyEditedPane.getInstance().refreshDockingView(); WestRegionContainerPane.getInstance().replaceDownPane(ReportAndFSManagePane.getInstance()); DesignerContext.getDesignerFrame().setCloseMode(UIConstants.CLOSE_OF_AUTHORITY); DesignerContext.getDesignerFrame().resetToolkitByPlus(tc.getToolBarMenuDockPlus()); DesignerContext.getDesignerFrame().needToAddAuhtorityPaint(); EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION); EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(tc.getEastUpPane()); DesignerContext.getDesignerFrame().refreshDottedLine(); EastRegionContainerPane.getInstance().replaceConfiguredRolesPane(RolesAlreadyEditedPane.getInstance()); EastRegionContainerPane.getInstance().removeParameterPane(); //画虚线 return true; } /** * 进入权限编辑之前将权限编辑界面重置一下工具栏 */ private void cleanAuthorityCondition() { java.util.List> opendedTemplate = HistoryTemplateListPane.getInstance().getHistoryList(); for (int i = 0; i < opendedTemplate.size(); i++) { opendedTemplate.get(i).cleanAuthorityUndo(); } } } \ No newline at end of file +package com.fr.design.actions; import com.fr.base.BaseUtils; import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.menu.KeySetUtils; import com.fr.design.roleAuthority.ReportAndFSManagePane; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.designer.TargetComponent; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.*; /** * Author : daisy * Date: 13-8-30 * Time: 上午10:12 */ public class AllowAuthorityEditAction extends TemplateComponentAction { public AllowAuthorityEditAction(TargetComponent t) { super(t); this.setMenuKeySet(KeySetUtils.ALLOW_AUTHORITY_EDIT); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/allow_authority_edit.png")); } /** * 撤销 */ public void prepare4Undo() { HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().iniAuthorityUndoState(); } /** * 执行动作 * * @return 是否执行成功 */ public boolean executeActionReturnUndoRecordNeeded() { TargetComponent tc = getEditingComponent(); if (tc == null) { return false; } cleanAuthorityCondition(); //进入时是格式刷则取消格式刷 if (DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL) { tc.cancelFormat(); } DesignerMode.setMode(DesignerMode.AUTHORITY); ReportAndFSManagePane.getInstance().refreshDockingView(); RolesAlreadyEditedPane.getInstance().refreshDockingView(); WestRegionContainerPane.getInstance().replaceDownPane(ReportAndFSManagePane.getInstance()); DesignerContext.getDesignerFrame().setCloseMode(UIConstants.CLOSE_OF_AUTHORITY); DesignerContext.getDesignerFrame().resetToolkitByPlus(tc.getToolBarMenuDockPlus()); DesignerContext.getDesignerFrame().needToAddAuhtorityPaint(); EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION); EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(tc.getEastUpPane()); DesignerContext.getDesignerFrame().refreshDottedLine(); EastRegionContainerPane.getInstance().replaceConfiguredRolesPane(RolesAlreadyEditedPane.getInstance()); EastRegionContainerPane.getInstance().removeParameterPane(); //画虚线 return true; } /** * 进入权限编辑之前将权限编辑界面重置一下工具栏 */ private void cleanAuthorityCondition() { java.util.List> opendedTemplate = HistoryTemplateListPane.getInstance().getHistoryList(); for (int i = 0; i < opendedTemplate.size(); i++) { opendedTemplate.get(i).cleanAuthorityUndo(); } } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/actions/ExitAuthorityEditAction.java b/designer_base/src/com/fr/design/actions/ExitAuthorityEditAction.java index a470673a0b..7b79be2822 100644 --- a/designer_base/src/com/fr/design/actions/ExitAuthorityEditAction.java +++ b/designer_base/src/com/fr/design/actions/ExitAuthorityEditAction.java @@ -1,6 +1,7 @@ package com.fr.design.actions; import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.DesignModelAdapter; import com.fr.design.designer.TargetComponent; @@ -33,8 +34,8 @@ public class ExitAuthorityEditAction extends TemplateComponentAction { return false; } - if (BaseUtils.isAuthorityEditing()) { - BaseUtils.setAuthorityEditing(false); + if (DesignerMode.isAuthorityEditing()) { + DesignerMode.setMode(DesignerMode.NORMARL); WestRegionContainerPane.getInstance().replaceDownPane(TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); DesignerContext.getDesignerFrame().resetToolkitByPlus(tc.getToolBarMenuDockPlus()); diff --git a/designer_base/src/com/fr/design/actions/help/AboutPane.java b/designer_base/src/com/fr/design/actions/help/AboutPane.java index b55161a167..3b15cf3cc3 100644 --- a/designer_base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer_base/src/com/fr/design/actions/help/AboutPane.java @@ -68,28 +68,36 @@ public class AboutPane extends JPanel { Inter.getLocText("FR-Designer-Basic_Activation_Key_Copy_OK") })); - if (shouldShowPhoneAndQQ()) { - if (ComparatorUtils.equals(ProductConstants.APP_NAME, FINEREPORT)) { - boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + ProductConstants.COMPARE_TELEPHONE); - contentPane.add(boxCenterAlignmentPane); - } - boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ:" + SiteCenter.getInstance().acquireUrlByKind("help.qq")); - contentPane.add(boxCenterAlignmentPane); - } + addPhoneAndQQPane(contentPane); + + // 官网 + JPanel urlActionPane = getURLActionPane(Inter.getLocText("FR-Designer_Official_Website"), SiteCenter.getInstance().acquireUrlByKind("website." + FRContext.getLocale(), ProductConstants.WEBSITE_URL)); - BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website." + FRContext.getLocale(), ProductConstants.WEBSITE_URL)); - BoxCenterAligmentPane emailLabel = getEmailActionLabel(SiteCenter.getInstance().acquireUrlByKind("support.email", ProductConstants.SUPPORT_EMAIL)); + // 支持邮箱 + String defaultEmail = SiteCenter.getInstance().acquireUrlByKind("support.email", ProductConstants.SUPPORT_EMAIL); + JPanel emailPane = getEmailActionPane(Inter.getLocText("FR-Designer_Support_Email"),SiteCenter.getInstance().acquireUrlByKind("support.email." + FRContext.getLocale(), defaultEmail)); - contentPane.add(actionLabel); - contentPane.add(emailLabel); + contentPane.add(urlActionPane); + contentPane.add(emailPane); if (shouldShowThanks()) { addThankPane(contentPane); } } - // 是否显示服务电话和 qq - private boolean shouldShowPhoneAndQQ() { - return !FRContext.getLocale().equals(Locale.US); + private void addPhoneAndQQPane(JPanel contentPane) { + BoxCenterAligmentPane boxCenterAlignmentPane; + // 英文版不显示服务电话和QQ + if (FRContext.getLocale().equals(Locale.US)) { + return; + } + boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + SiteCenter.getInstance().acquireUrlByKind("service.phone." + FRContext.getLocale(), ProductConstants.COMPARE_TELEPHONE)); + contentPane.add(boxCenterAlignmentPane); + // 繁体版不显示QQ + if (FRContext.getLocale().equals(Locale.TAIWAN)) { + return; + } + boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ: " + SiteCenter.getInstance().acquireUrlByKind("help.qq")); + contentPane.add(boxCenterAlignmentPane); } // 是否显示鸣谢面板 @@ -133,7 +141,7 @@ public class AboutPane extends JPanel { StringUtils.BLANK, ProductConstants.RELEASE_VERSION, BUILD_PREFIX); } - private BoxCenterAligmentPane getEmailActionLabel(final String mailTo) { + private JPanel getEmailActionPane(final String desc, final String mailTo){ ActionLabel emailLabel = new ActionLabel(mailTo); emailLabel.addActionListener(new ActionListener() { @@ -147,10 +155,13 @@ public class AboutPane extends JPanel { } }); - return new BoxCenterAligmentPane(emailLabel); + JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + panel.add(new UILabel(desc)); + panel.add(emailLabel); + return panel; } - private BoxCenterAligmentPane getURLActionLabel(final String url) { + private JPanel getURLActionPane(final String desc, final String url){ ActionLabel actionLabel = new ActionLabel(url); actionLabel.addActionListener(new ActionListener() { @Override @@ -163,7 +174,11 @@ public class AboutPane extends JPanel { } }); - return new BoxCenterAligmentPane(actionLabel); + JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + panel.add(new UILabel(desc)); + panel.add(actionLabel); + + return panel; } class UserLabel extends BoldFontTextLabel { diff --git a/designer_base/src/com/fr/design/designer/IntervalConstants.java b/designer_base/src/com/fr/design/designer/IntervalConstants.java index 1f210c70f5..a2a2ee669e 100644 --- a/designer_base/src/com/fr/design/designer/IntervalConstants.java +++ b/designer_base/src/com/fr/design/designer/IntervalConstants.java @@ -27,4 +27,6 @@ public class IntervalConstants { public static final int INTERVAL_W3 = 49; + public static final int INTERVAL_W4 = 22; + } diff --git a/designer_base/src/com/fr/design/dialog/mobile/MobileRadioCheckPane.java b/designer_base/src/com/fr/design/dialog/mobile/MobileRadioCheckPane.java index ee38557612..af4bcea990 100644 --- a/designer_base/src/com/fr/design/dialog/mobile/MobileRadioCheckPane.java +++ b/designer_base/src/com/fr/design/dialog/mobile/MobileRadioCheckPane.java @@ -1,6 +1,8 @@ package com.fr.design.dialog.mobile; import com.fr.design.beans.BasicBeanPane; +import com.fr.design.event.ChangeListener; +import com.fr.design.event.UIObserverListener; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.TableLayout; @@ -10,6 +12,7 @@ import com.fr.stable.StringUtils; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; diff --git a/designer_base/src/com/fr/design/extra/LoginDialog.java b/designer_base/src/com/fr/design/extra/LoginDialog.java index 6ae8a63f96..33983baf21 100644 --- a/designer_base/src/com/fr/design/extra/LoginDialog.java +++ b/designer_base/src/com/fr/design/extra/LoginDialog.java @@ -4,8 +4,12 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.StableUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; /** * Created by vito on 2017/5/5. @@ -15,6 +19,15 @@ public class LoginDialog extends UIDialog { public LoginDialog(Frame frame, Component pane) { super(frame); + init(pane); + } + + public LoginDialog(Dialog dialog, Component pane) { + super(dialog); + init(pane); + } + + private void init(Component pane) { if (StableUtils.getMajorJavaVersion() == 8) { setUndecorated(true); } diff --git a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java index 59fb612765..461f950bdb 100644 --- a/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java +++ b/designer_base/src/com/fr/design/extra/WebViewDlgHelper.java @@ -22,6 +22,9 @@ import javax.swing.JOptionPane; import javax.swing.SwingWorker; import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.Window; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; @@ -133,18 +136,22 @@ public class WebViewDlgHelper { if (StableUtils.getMajorJavaVersion() == VERSION_8) { File file = new File(StableUtils.pathJoin(installHome, "scripts")); if (!file.exists()) { - int rv = JOptionPane.showConfirmDialog( - null, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(SHOP_SCRIPTS); - } + confirmDownLoadShopJS(); } else { - showLoginDlg(); + showLoginDlg(DesignerContext.getDesignerFrame()); + updateShopScripts(SHOP_SCRIPTS); + } + } + } + + + public static void createLoginDialog(Window parent) { + if (StableUtils.getMajorJavaVersion() == VERSION_8) { + File file = new File(StableUtils.pathJoin(installHome, "scripts")); + if (!file.exists()) { + confirmDownLoadShopJS(); + } else { + showLoginDlg(parent); updateShopScripts(SHOP_SCRIPTS); } } @@ -164,6 +171,20 @@ public class WebViewDlgHelper { } } + + private static void confirmDownLoadShopJS() { + int rv = JOptionPane.showConfirmDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.INFORMATION_MESSAGE + ); + if (rv == JOptionPane.OK_OPTION) { + downloadShopScripts(SHOP_SCRIPTS); + } + } + private static void showPluginDlg(String mainJsPath) { try { Class clazz = Class.forName("com.fr.design.extra.PluginWebPane"); @@ -179,13 +200,17 @@ public class WebViewDlgHelper { } } - private static void showLoginDlg() { + private static void showLoginDlg(Window window) { try { Class clazz = Class.forName("com.fr.design.extra.LoginWebPane"); Constructor constructor = clazz.getConstructor(String.class); Component webPane = (Component) constructor.newInstance(installHome); - - UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane); + UIDialog qqdlg; + if (window instanceof Dialog) { + qqdlg = new LoginDialog((Dialog) window, webPane); + } else { + qqdlg = new LoginDialog((Frame) window, webPane); + } LoginWebBridge.getHelper().setDialogHandle(qqdlg); qqdlg.setVisible(true); } catch (Throwable ignored) { diff --git a/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java b/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java index e25297b110..459b001d55 100644 --- a/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java @@ -693,7 +693,7 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M openedTemplate.get(selectedIndex).stopEditing(); selectedIndex = getTemplateIndex(evtX); //如果在权限编辑情况下,不允许切换到表单类型的工作簿 - if (BaseUtils.isAuthorityEditing() && !openedTemplate.get(selectedIndex).isJWorkBook()) { + if (DesignerMode.isAuthorityEditing() && !openedTemplate.get(selectedIndex).isJWorkBook()) { DesignerContext.getDesignerFrame().addAndActivateJTemplate(openedTemplate.get(tempSelectedIndex)); JOptionPane.showMessageDialog(this, Inter.getLocText("FR-Designer_Form-AuthorityEdited_Cannot_be_Supported") + "!", Inter.getLocText("FR-Designer_Alert"), JOptionPane.WARNING_MESSAGE); diff --git a/designer_base/src/com/fr/design/file/NewTemplatePane.java b/designer_base/src/com/fr/design/file/NewTemplatePane.java index aeec5a8fdb..9bca4f0b4a 100644 --- a/designer_base/src/com/fr/design/file/NewTemplatePane.java +++ b/designer_base/src/com/fr/design/file/NewTemplatePane.java @@ -21,7 +21,7 @@ import java.awt.geom.Rectangle2D; public abstract class NewTemplatePane extends JComponent implements MouseListener, MouseMotionListener { private static final Icon GRAY_NEW_CPT = BaseUtils.readIcon("/com/fr/design/images/buttonicon/additicon_grey.png"); - private static final int PRE_GAP = 0; + private static final int PRE_GAP = 5; private static final int HEIGHT = 26; private Graphics2D g2d; private Icon newWorkBookIconMode = null; @@ -148,7 +148,7 @@ public abstract class NewTemplatePane extends JComponent implements MouseListene } private boolean needGrayNewCpt() { - return BaseUtils.isAuthorityEditing() || DesignerMode.isVcsMode(); + return DesignerMode.isAuthorityEditing() || DesignerMode.isVcsMode(); } diff --git a/designer_base/src/com/fr/design/gui/controlpane/UISimpleListControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/UISimpleListControlPane.java new file mode 100644 index 0000000000..b2c90fbc79 --- /dev/null +++ b/designer_base/src/com/fr/design/gui/controlpane/UISimpleListControlPane.java @@ -0,0 +1,467 @@ +package com.fr.design.gui.controlpane; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ilist.ListModelElement; +import com.fr.design.gui.ilist.UIList; +import com.fr.design.gui.itoolbar.UIToolBarUI; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; +import com.fr.stable.StringUtils; +import sun.swing.DefaultLookup; + +import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.*; +import java.util.Arrays; +import java.util.Comparator; + +/** + * 简单列表面板 + * Created by plough on 2018/2/1. + */ +public class UISimpleListControlPane extends BasicPane { + public static final String LIST_NAME = "UISimpleControl_List"; + + protected UIList nameList; + protected String selectedName; + private ShortCut4JControlPane[] shorts; + private ToolBarDef toolbarDef; + private UIToolbar toolBar; + + public UISimpleListControlPane() { + initComponentPane(); + } + + public ShortCut4JControlPane[] getShorts() { + return shorts; + } + + protected void initComponentPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.add(getContentPane(), BorderLayout.CENTER); + this.checkButtonEnabled(); + } + + protected JPanel getContentPane() { + JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + JPanel listPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + initListPane(listPane); + contentPane.add(listPane, BorderLayout.CENTER); + + shorts = this.createShortcuts(); + if (ArrayUtils.isEmpty(shorts)) { + return contentPane; + } + + toolbarDef = new ToolBarDef(); + for (ShortCut4JControlPane sj : shorts) { + toolbarDef.addShortCut(sj.getShortCut()); + } + toolBar = ToolBarDef.createJToolBar(); + toolBar.setUI(new UIToolBarUI(){ + @Override + public void paint(Graphics g, JComponent c) { + Graphics2D g2 = (Graphics2D) g; + g2.setColor(Color.WHITE); + g2.fillRect(0, 0, c.getWidth(), c.getHeight()); + } + }); + toolbarDef.updateToolBar(toolBar); + // 封装一层,加边框 + JPanel toolBarPane = new JPanel(new BorderLayout()); + toolBarPane.add(toolBar, BorderLayout.CENTER); + toolBarPane.setBorder(BorderFactory.createMatteBorder(1, 1, 0, 1, UIConstants.RULER_LINE_COLOR)); + + listPane.add(toolBarPane, BorderLayout.NORTH); + + return contentPane; + } + + protected ShortCut4JControlPane[] createShortcuts() { + return new ShortCut4JControlPane[]{ + moveUpItemShortCut(), + moveDownItemShortCut(), + sortItemShortCut(), + }; + } + + protected void initListPane(JPanel listPane) { + nameList = createJNameList(); + nameList.setName(LIST_NAME); + nameList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); + listPane.add(new UIScrollPane(nameList), BorderLayout.CENTER); + + + nameList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + nameList.addMouseListener(listMouseListener); + nameList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + // richie:避免多次update和populate大大降低效率 + if (!evt.getValueIsAdjusting()) { + UISimpleListControlPane.this.checkButtonEnabled(); + } + } + }); + } + + public UIList createJNameList() { + UIList nameList = new UIList(new DefaultListModel()) { + @Override + public int locationToIndex(Point location) { + int index = super.locationToIndex(location); + if (index != -1 && !getCellBounds(index, index).contains(location)) { + return -1; + } + else { + return index; + } + } + }; + nameList.setCellRenderer(new NameableListCellRenderer(this)); + return nameList; + } + + protected ShortCut4JControlPane moveUpItemShortCut() { + return new NormalEnableShortCut(new MoveUpItemAction()); + } + + protected ShortCut4JControlPane moveDownItemShortCut() { + return new NormalEnableShortCut(new MoveDownItemAction()); + } + + protected ShortCut4JControlPane sortItemShortCut() { + return new NormalEnableShortCut(new SortItemAction()); + } + + public Nameable[] update() { + java.util.List res = new java.util.ArrayList(); + DefaultListModel listModel = (DefaultListModel) this.nameList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); + } + + return res.toArray(new Nameable[res.size()]); + } + + public void populate(Nameable[] nameableArray) { + DefaultListModel listModel = (DefaultListModel) this.nameList.getModel(); + listModel.removeAllElements(); + if (ArrayUtils.isEmpty(nameableArray)) { + return; + } + + listModel.setSize(nameableArray.length); + for (int i = 0; i < nameableArray.length; i++) { + listModel.set(i, new ListModelElement(nameableArray[i])); + } + if (listModel.size() > 0 || this.nameList.getSelectedIndex() != 0) { + this.nameList.setSelectedIndex(0); + } + this.checkButtonEnabled(); + } + + /** + * 根据name,选中UINameEdList中的item + */ + public void setSelectedName(String name) { + DefaultListModel listModel = (DefaultListModel) this.nameList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + Nameable item = ((ListModelElement) listModel.getElementAt(i)).wrapper; + if (ComparatorUtils.equals(name, item.getName())) { + this.nameList.setSelectedIndex(i); + break; + } + } + } + + /** + * 获取选中的名字 + */ + public String getSelectedName() { + ListModelElement el = (ListModelElement) this.nameList.getSelectedValue(); + + return el == null ? null : el.wrapper.getName(); + } + + protected DefaultListModel getModel() { + return (DefaultListModel) this.nameList.getModel(); + } + + @Override + protected String title4PopupWindow() { + return null; + } + + /* + * 上移Item + */ + 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")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + int selectedIndex = nameList.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 上移 + if (selectedIndex > 0) { + DefaultListModel listModel = (DefaultListModel) nameList.getModel(); + + Object prevObj = listModel.get(selectedIndex - 1); + Object currentObj = listModel.get(selectedIndex); + listModel.set(selectedIndex - 1, currentObj); + listModel.set(selectedIndex, prevObj); + + nameList.setSelectedIndex(selectedIndex - 1); + nameList.ensureIndexIsVisible(selectedIndex - 1); + } + } + } + + /* + * 下移Item + */ + 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")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + int selectedIndex = nameList.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + if (selectedIndex < nameList.getModel().getSize() - 1) { + DefaultListModel listModel = (DefaultListModel) nameList.getModel(); + + Object nextObj = listModel.get(selectedIndex + 1); + Object currentObj = listModel.get(selectedIndex); + listModel.set(selectedIndex + 1, currentObj); + listModel.set(selectedIndex, nextObj); + + nameList.setSelectedIndex(selectedIndex + 1); + nameList.ensureIndexIsVisible(selectedIndex + 1); + } + } + } + + private class SortItemAction extends UpdateAction { + private boolean isAtoZ = false; + + public SortItemAction() { + this.setName(Inter.getLocText("FR-Action_Sort")); + this.setMnemonic('S'); + this.setSmallIcon(BaseUtils + .readIcon("/com/fr/design/images/control/sortAsc.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + // p:选中的值. + Object selectedValue = nameList.getSelectedValue(); + + DefaultListModel listModel = (DefaultListModel) nameList.getModel(); + if (listModel.getSize() <= 0) { + return; + } + Nameable[] nameableArray = new Nameable[listModel.getSize()]; + + for (int i = 0; i < listModel.getSize(); i++) { + nameableArray[i] = ((ListModelElement) listModel.getElementAt(i)).wrapper; + } + + // p:排序. + if (isAtoZ) { // 升序 + Comparator nameableComparator = new Comparator() { + @Override + public int compare(Nameable o1, Nameable o2) { + return ComparatorUtils.compare(o2.getName(), o1.getName()); + } + }; + isAtoZ = !isAtoZ; + Arrays.sort(nameableArray, nameableComparator); + } else { // 降序 + Comparator nameableComparator = new Comparator() { + @Override + public int compare(Nameable o1, Nameable o2) { + return ComparatorUtils.compare(o1.getName(), o2 + .getName()); + } + }; + isAtoZ = !isAtoZ; + Arrays.sort(nameableArray, nameableComparator); + } + + for (int i = 0; i < nameableArray.length; i++) { + listModel.set(i, new ListModelElement(nameableArray[i])); + } + + // p:需要选中以前的那个值. + if (selectedValue != null) { + nameList.setSelectedValue(selectedValue, true); + } + + checkButtonEnabled(); + // p:需要repaint. + nameList.repaint(); + } + } + + /* + * UIList的鼠标事件 + */ + private MouseListener listMouseListener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + JList list = (JList) e.getSource(); + if (list.locationToIndex(e.getPoint()) == -1 && !e.isShiftDown() + && !isMenuShortcutKeyDown(e)) { + list.clearSelection(); + } + } + + private boolean isMenuShortcutKeyDown(InputEvent event) { + return (event.getModifiers() & Toolkit.getDefaultToolkit() + .getMenuShortcutKeyMask()) != 0; + } + }; + + /** + * 检查按钮可用状态 Check button enabled. + */ + public void checkButtonEnabled() { + for (ShortCut4JControlPane sj : getShorts()) { + sj.checkEnable(); + } + } + + /** + * 设置选中项 + * + * @param index 选中项的序列号 + */ + public void setSelectedIndex(int index) { + nameList.setSelectedIndex(index); + } + + + public class NormalEnableShortCut extends ShortCut4JControlPane { + public NormalEnableShortCut(ShortCut shortCut) { + this.shortCut = shortCut; + } + + /** + * 检查是否可用 + */ + @Override + public void checkEnable() { + this.shortCut.setEnabled(getModel() + .getSize() > 0 + && UISimpleListControlPane.this.nameList.getSelectedIndex() != -1); + } + } + + + private class NameableListCellRenderer extends + JPanel implements ListCellRenderer { + + private UILabel label; + private UISimpleListControlPane listControlPane; + private Color initialLabelForeground; + + public NameableListCellRenderer(UISimpleListControlPane listControlPane) { + super(); + this.listControlPane = listControlPane; + initComponents(); + setOpaque(true); + setBorder(getNoFocusBorder()); + setName("List.cellRenderer"); + } + + private void initComponents() { + label = new UILabel(); + label.setBorder(BorderFactory.createEmptyBorder(3, 10, 3, 0)); + initialLabelForeground = label.getForeground(); + this.setLayout(new BorderLayout()); + this.add(label, BorderLayout.CENTER); + } + + private Border getNoFocusBorder() { + return BorderFactory.createMatteBorder(0, 0, 1, 0, UIConstants.LIST_ITEM_SPLIT_LINE); + } + + private void setText(String t) { + label.setText(t); + } + + @Override + public Component getListCellRendererComponent(JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus) { + setComponentOrientation(list.getComponentOrientation()); + + Color bg = null; + Color fg = null; + + JList.DropLocation dropLocation = list.getDropLocation(); + if (dropLocation != null + && !dropLocation.isInsert() + && dropLocation.getIndex() == index) { + + bg = DefaultLookup.getColor(this, ui, "List.dropCellBackground"); + fg = DefaultLookup.getColor(this, ui, "List.dropCellForeground"); + + isSelected = true; + } + + if (isSelected) { + setBackground(bg == null ? list.getSelectionBackground() : bg); + setForeground(fg == null ? list.getSelectionForeground() : fg); + label.setForeground(Color.WHITE); + } + else { + setBackground(list.getBackground()); + setForeground(list.getForeground()); + label.setForeground(initialLabelForeground); + } + + setText((value == null) ? StringUtils.EMPTY : value.toString()); + + setEnabled(list.isEnabled()); + setFont(list.getFont()); + + if (value instanceof ListModelElement) { + Nameable wrappee = ((ListModelElement) value).wrapper; + this.setText(wrappee.getName()); + } + + return this; + } + } +} diff --git a/designer_base/src/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java b/designer_base/src/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java index 755d9cfaea..361a93b958 100644 --- a/designer_base/src/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java +++ b/designer_base/src/com/fr/design/gui/frpane/AbstractAttrNoScrollPane.java @@ -5,6 +5,7 @@ import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; +import com.fr.stable.StringUtils; import javax.swing.*; import java.awt.*; @@ -132,13 +133,19 @@ public abstract class AbstractAttrNoScrollPane extends BasicPane { /** * 返回图标的路径 */ - public abstract String getIconPath(); + public String getIconPath() { + // 默认为空,子类有需要再重写 + return StringUtils.EMPTY; + } /** * 界面标题 * @return 标题 */ - public abstract String title4PopupWindow(); + public String title4PopupWindow() { + // 默认为空,子类有需要再重写 + return StringUtils.EMPTY; + } /** * 设置选中的ID, 用于双击展示界面. diff --git a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java index 882e0ce127..3671ebbf42 100644 --- a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java +++ b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java @@ -44,15 +44,12 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { @Override public void on(PluginEvent event) { - - refreshNameableCreator(createNameableCreators()); - + refreshNameableCreator(createNameableCreators()); } }, new PluginFilter() { @Override public boolean accept(PluginContext context) { - return context.contain(HyperlinkProvider.XML_TAG); } }); @@ -63,6 +60,7 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { * * @return 返回Nameable按钮数组. */ + @Override public NameableCreator[] createNameableCreators() { Map nameCreators = new ListMap<>(); NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators(); @@ -82,6 +80,7 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { * * @return 返回标题字符串. */ + @Override public String title4PopupWindow() { return Inter.getLocText("FR-Designer_Hyperlink"); } @@ -91,11 +90,11 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { return Inter.getLocText("FR-Designer_Add_Hyperlink"); } - public void populate(NameJavaScriptGroup nameHyperlink_array) { - java.util.List list = new ArrayList(); - if (nameHyperlink_array != null) { - for (int i = 0; i < nameHyperlink_array.size(); i++) { - list.add(new NameObject(nameHyperlink_array.getNameHyperlink(i).getName(), nameHyperlink_array.getNameHyperlink(i).getJavaScript())); + public void populate(NameJavaScriptGroup hyperlinkArray) { + java.util.List list = new ArrayList<>(); + if (hyperlinkArray != null) { + for (int i = 0; i < hyperlinkArray.size(); i++) { + list.add(new NameObject(hyperlinkArray.getNameHyperlink(i).getName(), hyperlinkArray.getNameHyperlink(i).getJavaScript())); } } @@ -113,20 +112,29 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { */ public NameJavaScriptGroup updateJSGroup() { Nameable[] res = this.update(); - NameJavaScript[] res_array = new NameJavaScript[res.length]; + NameJavaScript[] resArray = new NameJavaScript[res.length]; for (int i = 0; i < res.length; i++) { NameObject no = (NameObject) res[i]; - res_array[i] = new NameJavaScript(no.getName(), (JavaScript) no.getObject()); + resArray[i] = new NameJavaScript(no.getName(), (JavaScript) no.getObject()); } - return new NameJavaScriptGroup(res_array); + return new NameJavaScriptGroup(resArray); } @Override public void saveSettings() { - if (isPopulating) { + if (isPopulating || !needAutoSave()) { return; } hyperlinkGroupPaneActionProvider.saveSettings(this); } + + /** + * 是否需要自动保存到超级链接属性中 + * + * @return 是否需要自动保存 + */ + public boolean needAutoSave() { + return true; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java index a5f7ae9a6c..525bb5b792 100644 --- a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java +++ b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java @@ -3,9 +3,23 @@ package com.fr.design.gui.frpane; import com.fr.design.designer.TargetComponent; /** + * @author plough * Created by plough on 2017/7/26. */ public interface HyperlinkGroupPaneActionProvider { + + /** + * 刷新面板展示 + * + * @param hyperlinkGroupPane 超链面板 + * @param elementCasePane 模板 + */ void populate(HyperlinkGroupPane hyperlinkGroupPane, TargetComponent elementCasePane); + + /** + * 保存到文件 + * + * @param hyperlinkGroupPane 超联面板 + */ void saveSettings(HyperlinkGroupPane hyperlinkGroupPane); } diff --git a/designer_base/src/com/fr/design/gui/ibutton/UISliderButtonUI.java b/designer_base/src/com/fr/design/gui/ibutton/UISliderButtonUI.java index be6f570aca..b61cd5a2c6 100644 --- a/designer_base/src/com/fr/design/gui/ibutton/UISliderButtonUI.java +++ b/designer_base/src/com/fr/design/gui/ibutton/UISliderButtonUI.java @@ -12,7 +12,7 @@ import javax.swing.plaf.basic.BasicButtonUI; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.View; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.roleAuthority.ReportAndFSManagePane; import com.fr.stable.Constants; @@ -174,7 +174,7 @@ public class UISliderButtonUI extends BasicButtonUI { private void fillNormal(Graphics2D g2d, int x, int y, int width, int height, boolean isRound, int rectDirection, boolean isAuthorityEdited, boolean isPressedPainted) { GradientPaint gp; - if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { gp = new GradientPaint(1, 1, UIConstants.AUTHORITY_BLUE, 1, height - 1, UIConstants.AUTHORITY_DARK_BLUE); } else if (isPressedPainted) { gp = new GradientPaint(1, 1, UIConstants.SELECT_TAB, 1, height - 1, UIConstants.SELECT_TAB); @@ -187,7 +187,7 @@ public class UISliderButtonUI extends BasicButtonUI { private void fillRollOver(Graphics2D g2d, int x, int y, int width, int height, boolean isRound, int rectDirection, boolean isAuthorityEdited, boolean isPressedPainted) { GradientPaint gp; - if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { gp = new GradientPaint(1, 1, UIConstants.AUTHORITY_BLUE, 1, height - 1, UIConstants.HOVER_BLUE); } else if (isPressedPainted) { gp = new GradientPaint(1, 1, UIConstants.POP_DIALOG_BORDER, 1, height - 1, UIConstants.POP_DIALOG_BORDER); @@ -199,7 +199,7 @@ public class UISliderButtonUI extends BasicButtonUI { private void fillPressed(Graphics2D g2d, int x, int y, int width, int height, boolean isRound, int rectDirection, boolean isAuthorityEdited) { Color oldColor = g2d.getColor(); - if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { g2d.setColor(UIConstants.AUTHORITY_PRESS_BLUE); } else { g2d.setColor(UIConstants.POP_DIALOG_BORDER); diff --git a/designer_base/src/com/fr/design/gui/icontainer/UIEastResizableContainer.java b/designer_base/src/com/fr/design/gui/icontainer/UIEastResizableContainer.java index 81b291f41d..e84e4f7a23 100644 --- a/designer_base/src/com/fr/design/gui/icontainer/UIEastResizableContainer.java +++ b/designer_base/src/com/fr/design/gui/icontainer/UIEastResizableContainer.java @@ -1,11 +1,10 @@ package com.fr.design.gui.icontainer; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.stable.Constants; import javax.swing.*; import java.awt.*; @@ -281,7 +280,7 @@ public class UIEastResizableContainer extends JPanel { } onResize(); refreshContainer(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { DesignerContext.getDesignerFrame().doResize(); } } diff --git a/designer_base/src/com/fr/design/gui/icontainer/UIModeControlContainer.java b/designer_base/src/com/fr/design/gui/icontainer/UIModeControlContainer.java index fad42d9754..709b3cbecb 100644 --- a/designer_base/src/com/fr/design/gui/icontainer/UIModeControlContainer.java +++ b/designer_base/src/com/fr/design/gui/icontainer/UIModeControlContainer.java @@ -1,6 +1,6 @@ package com.fr.design.gui.icontainer; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; @@ -72,7 +72,7 @@ public class UIModeControlContainer extends JLayeredPane { public void needToShowCoverAndHidPane() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { this.remove(coverPane); this.remove(hidePane); } else { @@ -115,7 +115,7 @@ public class UIModeControlContainer extends JLayeredPane { if (isHideMode || !upEditMode) { return; } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR)); @@ -142,7 +142,7 @@ public class UIModeControlContainer extends JLayeredPane { @Override public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } boolean notUpEditMode = isHideMode || !upEditMode; @@ -183,7 +183,7 @@ public class UIModeControlContainer extends JLayeredPane { setUpPaneHeight(0); } - if (BaseUtils.isAuthorityEditing() && isSheeetCovered) { + if (DesignerMode.isAuthorityEditing() && isSheeetCovered) { sheetInvisibleCoverPane.setBounds(0, toolPaneY + toolPaneHeight + UIConstants.SIZE, getWidth(), getHeight() - toolPaneY - toolPaneHeight - sheetCorverGap); UIModeControlContainer.this.add(sheetInvisibleCoverPane); UIModeControlContainer.this.setLayer(sheetInvisibleCoverPane, 2); diff --git a/designer_base/src/com/fr/design/gui/icontainer/UIResizableContainer.java b/designer_base/src/com/fr/design/gui/icontainer/UIResizableContainer.java index 5f28fadde0..97855bff4d 100644 --- a/designer_base/src/com/fr/design/gui/icontainer/UIResizableContainer.java +++ b/designer_base/src/com/fr/design/gui/icontainer/UIResizableContainer.java @@ -1,11 +1,10 @@ package com.fr.design.gui.icontainer; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.DesignerContext; import com.fr.stable.Constants; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.stable.collections.utils.MathUtils; import javax.swing.*; import java.awt.*; @@ -443,7 +442,7 @@ public class UIResizableContainer extends JPanel { containerWidth = toolPaneHeight; } refreshContainer(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { DesignerContext.getDesignerFrame().doResize(); } @@ -476,7 +475,7 @@ public class UIResizableContainer extends JPanel { containerWidth = toolPaneHeight; } refreshContainer(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { DesignerContext.getDesignerFrame().doResize(); } } diff --git a/designer_base/src/com/fr/design/gui/ilable/UILabel.java b/designer_base/src/com/fr/design/gui/ilable/UILabel.java index c0b921dee1..368bf2383d 100644 --- a/designer_base/src/com/fr/design/gui/ilable/UILabel.java +++ b/designer_base/src/com/fr/design/gui/ilable/UILabel.java @@ -1,9 +1,15 @@ package com.fr.design.gui.ilable; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.Icon; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; /** * Created by IntelliJ IDEA. @@ -13,6 +19,7 @@ import java.awt.*; * Time: 下午3:15 */ public class UILabel extends JLabel { + private static final int HTML_SHIFT_HEIGHT = 3; public UILabel(String text, Icon image, int horizontalAlignment) { super(text, image, horizontalAlignment); @@ -46,6 +53,15 @@ public class UILabel extends JLabel { super(); } + @Override + public Dimension getPreferredSize() { + Dimension preferredSize = super.getPreferredSize(); + // (Windows 下)使用 html 时,文字内容会略微向下偏移,导致文字底部被截断,所以适当增加 UILabel 的高度 + if (StringUtils.isNotEmpty(getText()) && getText().startsWith("")) { + return new Dimension(preferredSize.width, preferredSize.height + HTML_SHIFT_HEIGHT); + } + return preferredSize; + } public static void main(String[] args) { // UILabel label = new UILabel("shishi",SwingConstants.LEFT); diff --git a/designer_base/src/com/fr/design/gui/ispinner/UISpinner.java b/designer_base/src/com/fr/design/gui/ispinner/UISpinner.java index fc594c6e98..361619ae29 100644 --- a/designer_base/src/com/fr/design/gui/ispinner/UISpinner.java +++ b/designer_base/src/com/fr/design/gui/ispinner/UISpinner.java @@ -23,7 +23,7 @@ import java.awt.event.*; public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver { - protected double value = -1; + protected double value; private static final int SIZE = 20; private static final int LEN = 13; private static final int WIDTH = 13; diff --git a/designer_base/src/com/fr/design/icon/IconPathConstants.java b/designer_base/src/com/fr/design/icon/IconPathConstants.java index ec5fcded3f..8939feef01 100644 --- a/designer_base/src/com/fr/design/icon/IconPathConstants.java +++ b/designer_base/src/com/fr/design/icon/IconPathConstants.java @@ -1 +1,36 @@ -package com.fr.design.icon; /** * Created by IntelliJ IDEA. * Author : Richer * Version: 6.5.6 * Date: 12-12-18 * Time: 上午9:42 * 用于保存所有图标路径的类 */ public class IconPathConstants { private IconPathConstants() { } public static final String ADD_POPMENU_ICON_PATH = "/com/fr/design/images/control/addPopup.png"; public static final String DS_ICON_PATH = "/com/fr/design/images/data/datasource.png"; public static final String CLASS_TD_ICON_PATH = "/com/fr/design/images/data/source/classTableData.png"; public static final String EMB_TD_ICON_PATH = "/com/fr/design/images/data/dataTable.png"; public static final String DS_RELATION_TD_ICON_PATH = "/com/fr/design/images/data/multi.png"; public static final String FILE_TD_ICON_PATH = "/com/fr/design/images/data/file.png"; public static final String DS_TREE_TD_ICON_PATH = "/com/fr/design/images/data/tree.png"; public static final String DS_QUERY_ICON_PATH = "/com/fr/design/images/data/database.png"; public static final String PREVIEW_ICON_PATH = "/com/fr/design/images/m_file/preview.png"; public static final String TD_EDIT_ICON_PATH = "/com/fr/design/images/control/edit.png"; public static final String TD_EL_SHARE_HELP_ICON_PATH = "/com/fr/design/images/control/help_open.png"; public static final String TD_EL_SHARE_CLOSE_ICON_PATH = "/com/fr/design/images/control/help_close.png"; public static final String TD_REMOVE_ICON_PATH = "/com/fr/design/images/control/tab/remove.png"; public static final String TD_CONNECTION_ICON_PATH = "/com/fr/design/images/m_web/connection.png"; public static final String SP_SHOW_ICON_PATH = "/com/fr/design/images/data/store_procedure.png"; public static final String STD_SHOW_ICON_PATH = "/com/fr/design/images/data/dock/serverdatabase.png"; public static final String XMLA_ICON_PATH = "/com/fr/design/images/data/cube.png"; public static final String FORBID_ICON_PATH = "/com/fr/web/images/form/forbid.png"; } \ No newline at end of file +package com.fr.design.icon; + +/** + * Created by IntelliJ IDEA. + * Author : Richer + * Version: 6.5.6 + * Date: 12-12-18 + * Time: 上午9:42 + * 用于保存所有图标路径的类 + */ +public class IconPathConstants { + private IconPathConstants() { + + } + + public static final String ADD_POPMENU_ICON_PATH = "/com/fr/design/images/control/addPopup.png"; + + public static final String DS_ICON_PATH = "/com/fr/design/images/data/datasource.png"; + public static final String CLASS_TD_ICON_PATH = "/com/fr/design/images/data/source/classTableData.png"; + public static final String EMB_TD_ICON_PATH = "/com/fr/design/images/data/dataTable.png"; + public static final String DS_RELATION_TD_ICON_PATH = "/com/fr/design/images/data/multi.png"; + public static final String FILE_TD_ICON_PATH = "/com/fr/design/images/data/file.png"; + public static final String DS_TREE_TD_ICON_PATH = "/com/fr/design/images/data/tree.png"; + public static final String DS_QUERY_ICON_PATH = "/com/fr/design/images/data/database.png"; + public static final String PREVIEW_ICON_PATH = "/com/fr/design/images/m_file/preview.png"; + public static final String TD_EDIT_ICON_PATH = "/com/fr/design/images/control/edit.png"; + public static final String TD_EL_SHARE_HELP_ICON_PATH = "/com/fr/design/images/control/help_open.png"; + public static final String TD_EL_SHARE_CLOSE_ICON_PATH = "/com/fr/design/images/control/help_close.png"; + public static final String TD_REMOVE_ICON_PATH = "/com/fr/design/images/control/tab/remove.png"; + public static final String TD_CONNECTION_ICON_PATH = "/com/fr/design/images/m_web/connection.png"; + public static final String SP_SHOW_ICON_PATH = "/com/fr/design/images/data/store_procedure.png"; + public static final String STD_SHOW_ICON_PATH = "/com/fr/design/images/data/dock/serverdatabase.png"; + public static final String XMLA_ICON_PATH = "/com/fr/design/images/data/cube.png"; + public static final String FORBID_ICON_PATH = "/com/fr/web/images/form/forbid.png"; + public static final String EDIT_ICON_PATH = "/com/fr/design/images/control/newEdit.png"; +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/images/buttonicon/add_press.png b/designer_base/src/com/fr/design/images/buttonicon/add_press.png index f3268f9b61..81f9df9e34 100644 Binary files a/designer_base/src/com/fr/design/images/buttonicon/add_press.png and b/designer_base/src/com/fr/design/images/buttonicon/add_press.png differ diff --git a/designer_base/src/com/fr/design/images/buttonicon/addicon.png b/designer_base/src/com/fr/design/images/buttonicon/addicon.png index bd90eb7c1e..2a7a777ca4 100644 Binary files a/designer_base/src/com/fr/design/images/buttonicon/addicon.png and b/designer_base/src/com/fr/design/images/buttonicon/addicon.png differ diff --git a/designer_base/src/com/fr/design/images/control/newEdit.png b/designer_base/src/com/fr/design/images/control/newEdit.png new file mode 100644 index 0000000000..49843ce8ec Binary files /dev/null and b/designer_base/src/com/fr/design/images/control/newEdit.png differ diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index f5aea0212b..5420c443c9 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -2168,3 +2168,23 @@ FR-Designer_Tab_Pentagon_Style=Pentagon Style FR-Designer_Tab_Trapezoid_Style=Trapezoid Style FR-Designer_Tab_Display_Position=Display Position FR-Designer_Background_Select=Select Background +FR-Designer_Set_Mobile_Only_Template=Set as mobile only template +FR-Designer_Set_Mobile_Canvas_Size=Set as mobile canvas size +FR-Designer_Adaptive_Property_Auto_Match=Adaptive property auto match +FR-Designer_Canvas_Size_Lock_Desc=The size of the canvas is 375*560, the width is locked, the height is customizable +FR-Designer_Mobile_Screen_Match_Desc=4.7 inch screen phone: fit +FR-Designer_Mobile_Screen_Zoom_In_Desc=4.7 inch or more mobile phones: zooming in +FR-Designer_Mobile_Screen_Zoom_Out_Desc=4.7 inch mobile phone: zooming out +FR-Designer_Adaptive_Property_Auto_Match_Desc=In order to improve the end template effect of the mobile phone, when using the reserved layout function, the component scaling logic under the adaptive layout is set as "lateral adaptive" +FR-Designer_Template_Settings=Template Settings +FR-Designer_Form_Widget_Rename_Failure=There are the same components, please set the other name +FR-Designer_Joption_News=news +FR-Designer_Zoom_In_Logic=zoom in logic +FR-Designer_Zoom_Out_Logic=zoom out logic +FR-Designer_Chart_Adaptivity=chart adaptivity +FR-Designer_Tip_Chart_Adaptivity_Unavailable=Under the reserved layout state, the chart does not support the setting of self-adaptive +FR-Designer_Official_Website=Official Website: +FR-Designer_Support_Email=Email: +FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout=Under the absolute canvas block, the chart does not support the setting of self-adaptive +FR-Designer_Max_Height_Cannot_Be_Negative=The maximum height cannot be negative +FR-Designer_How_To_Join= 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 5f4e32a5ab..814ca58ed7 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 @@ -2141,8 +2141,8 @@ FR-Designer_Float_Visible=Suspended elements are visible FR-Designer_Widget_String=Character string FR-Designer_Widget_Field=field FR-Designer_Widget_Enabled=Control available -FR-Designer_Export_Background= -FR-Designer_Print_Background= +FR-Designer_Print_Background=Print Background +FR-Designer_Export_Background=Export Background FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= @@ -2167,3 +2167,23 @@ FR-Designer_Tab_Pentagon_Style=Pentagon Style FR-Designer_Tab_Trapezoid_Style=Trapezoid Style FR-Designer_Tab_Display_Position=Display Position FR-Designer_Background_Select=Select Background +FR-Designer_Set_Mobile_Only_Template=Set as mobile only template +FR-Designer_Set_Mobile_Canvas_Size=Set as mobile canvas size +FR-Designer_Adaptive_Property_Auto_Match=Adaptive property auto match +FR-Designer_Canvas_Size_Lock_Desc=The size of the canvas is 375*560, the width is locked, the height is customizable +FR-Designer_Mobile_Screen_Match_Desc=4.7 inch screen phone: fit +FR-Designer_Mobile_Screen_Zoom_In_Desc=4.7 inch or more mobile phones: zooming in +FR-Designer_Mobile_Screen_Zoom_Out_Desc=4.7 inch mobile phone: zooming out +FR-Designer_Adaptive_Property_Auto_Match_Desc=In order to improve the end template effect of the mobile phone, when using the reserved layout function, the component scaling logic under the adaptive layout is set as "lateral adaptive" +FR-Designer_Template_Settings=Template Settings +FR-Designer_Form_Widget_Rename_Failure=There are the same components, please set the other name +FR-Designer_Joption_News=news +FR-Designer_Zoom_In_Logic=zoom in logic +FR-Designer_Zoom_Out_Logic=zoom out logic +FR-Designer_Chart_Adaptivity=chart adaptivity +FR-Designer_Tip_Chart_Adaptivity_Unavailable=Under the reserved layout state, the chart does not support the setting of self-adaptive +FR-Designer_Official_Website=Official Website: +FR-Designer_Support_Email=Email: +FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout=Under the absolute canvas block, the chart does not support the setting of self-adaptive +FR-Designer_Max_Height_Cannot_Be_Negative=The maximum height cannot be negative +FR-Designer_How_To_Join=Poke me to learn how to join the thank you list 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 c776cd0b10..9dbc2882ff 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 @@ -2167,4 +2167,21 @@ FR-Designer_Tab_Menu_Style= FR-Designer_Tab_Pentagon_Style= FR-Designer_Tab_Trapezoid_Style= FR-Designer_Tab_Display_Position= -FR-Designer_Background_Select= \ No newline at end of file +FR-Designer_Background_Select= +FR-Designer_Set_Mobile_Only_Template= +FR-Designer_Set_Mobile_Canvas_Size= +FR-Designer_Mobile_Screen_Zoom_In= +FR-Designer_Mobile_Screen_Zoom_Out= +FR-Designer_Adaptive_Property_Auto_Match_Desc= +FR-Designer_Template_Settings= +FR-Designer_Form_Widget_Rename_Failure=\u5B58\u5728\u30EA\u30CD\u30FC\u30E0\u3059\u308B\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u3001\u4ED6\u306E\u540D\u79F0\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002 +FR-Designer_Joption_News=\u30CB\u30E5\u30FC\u30B9 +FR-Designer_Zoom_In_Logic= +FR-Designer_Zoom_Out_Logic= +FR-Designer_Chart_Adaptivity= +FR-Designer_Tip_Chart_Adaptivity_Unavailable= +FR-Designer_Official_Website= +FR-Designer_Support_Email= +FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout= +FR-Designer_Max_Height_Cannot_Be_Negative= +FR-Designer_How_To_Join= 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 6ec5b92e26..ab9ebead1a 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 @@ -2145,14 +2145,13 @@ FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Provide_Choose_All=\uC81C\uACF5\uBAA8\uB450\uC120\uD0DD FR-Designer_Decimal_Places=\uC18C\uC218\uC218\uB7C9: FR-Base-Load_Resource_File=\uB85C\uB529\uAD6C\uC131\uD30C\uC77C -FR-Designer_Export_Background= -FR-Designer_Print_Background= +FR-Designer_Print_Background=\uC778\uC1C4\uBB38\uC11C\uBC30\uACBD +FR-Designer_Export_Background=\uB0B4\uBCF4\uB0B4\uAE30\uBB38\uC11C\uBC30\uACBD 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= FR-Designer_Move_To_Bottom= @@ -2167,4 +2166,23 @@ FR-Designer_Tab_Menu_Style= FR-Designer_Tab_Pentagon_Style= FR-Designer_Tab_Trapezoid_Style= FR-Designer_Tab_Display_Position= -FR-Designer_Background_Select= \ No newline at end of file +FR-Designer_Background_Select= +FR-Designer_Set_Mobile_Only_Template= +FR-Designer_Set_Mobile_Canvas_Size= +FR-Designer_Adaptive_Property_Auto_Match= +FR-Designer_Mobile_Screen_Zoom_In= +FR-Designer_Mobile_Screen_Zoom_Out= +FR-Designer_Mobile_Screen_Zoom_Out_Desc= +FR-Designer_Adaptive_Property_Auto_Match_Desc= +FR-Designer_Template_Settings= +FR-Designer_Form_Widget_Rename_Failure=\uC874\uC7AC \uB3D9\uBA85 \uAD6C\uC131 \uC694\uC18C \uC124\uC815 \uC880 \uB2E4\uB978 \uC774\uB984 +FR-Designer_Joption_News=\uC18C\uC2DD +FR-Designer_Zoom_In_Logic= +FR-Designer_Zoom_Out_Logic= +FR-Designer_Chart_Adaptivity= +FR-Designer_Tip_Chart_Adaptivity_Unavailable= +FR-Designer_Official_Website= +FR-Designer_Support_Email= +FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout= +FR-Designer_Max_Height_Cannot_Be_Negative= +FR-Designer_How_To_Join= 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 dfb3080380..e69134f580 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 @@ -60,9 +60,9 @@ FR-Designer-Widget-Title_border_color=\u989C\u8272 FR-Designer_AbsoluteLayout=\u7EDD\u5BF9\u5E03\u5C40 FR-Designer_Allow_Decimals=\u5141\u8BB8\u5C0F\u6570 FR-Designer_Allow_Negative=\u5141\u8BB8\u8D1F\u503C -FR-Designer_Background-Click=\u70B9\u51FB\u80CC\u666F +FR-Designer_Background-Click=\u9F20\u6807\u70B9\u51FB\u80CC\u666F FR-Designer_Background-Initial=\u521D\u59CB\u80CC\u666F -FR-Designer_Background-Over=\u60AC\u6D6E\u80CC\u666F +FR-Designer_Background-Over=\u9F20\u6807\u6D6E\u52A8\u80CC\u666F FR-Designer_Bar-Code-Exception-Tip=\u6570\u636E\u4E0D\u80FD\u4E3A\u7A7A FR-Designer_Block-intersect=\u7981\u6B62\u5757\u4E0E\u5757\u4E4B\u95F4\u7684\u91CD\u53E0 FR-Designer_BorderLayout=\u8FB9\u754C\u5E03\u5C40 @@ -2142,8 +2142,8 @@ FR-Designer_Widgetname=\u63A7\u4EF6\u540D FR-Designer_Insert_Cell_Element=\u63D2\u5165\u5143\u7D20 FR-Designer-Plugin_Has_Been_Actived= FR-Designer-Plugin_Has_Been_Disabled= -FR-Designer_Export_Background= -FR-Designer_Print_Background= +FR-Designer_Print_Background=\u6253\u5370\u62A5\u8868\u80CC\u666F +FR-Designer_Export_Background=\u5BFC\u51FA\u62A5\u8868\u80CC\u666F FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= @@ -2167,4 +2167,24 @@ FR-Designer_Tab_Menu_Style=\u83DC\u5355\u5F0F FR-Designer_Tab_Pentagon_Style=\u4E94\u8FB9\u5F62 FR-Designer_Tab_Trapezoid_Style=\u68AF\u5F62 FR-Designer_Tab_Display_Position=\u663E\u793A\u4F4D\u7F6E -FR-Designer_Background_Select=\u9009\u4E2D\u80CC\u666F \ No newline at end of file +FR-Designer_Background_Select=\u9009\u4E2D\u80CC\u666F +FR-Designer_Set_Mobile_Only_Template=\u8BBE\u7F6E\u4E3A\u624B\u673A\u7AEF\u4E13\u5C5E\u6A21\u7248 +FR-Designer_Set_Mobile_Canvas_Size=\u8BBE\u7F6E\u4E3A\u624B\u673A\u6A21\u7248\u753B\u5E03\u5927\u5C0F +FR-Designer_Adaptive_Property_Auto_Match=\u81EA\u9002\u5E94\u5C5E\u6027\u81EA\u52A8\u5339\u914D +FR-Designer_Canvas_Size_Lock_Desc=\u753B\u5E03\u5927\u5C0F375*560\uFF0C\u5BBD\u5EA6\u9501\u5B9A\uFF0C\u9AD8\u5EA6\u53EF\u81EA\u5B9A\u4E49 +FR-Designer_Mobile_Screen_Match_Desc=4.7\u5BF8\u5C4F\u5E55\u624B\u673A\uFF1A\u9002\u914D +FR-Designer_Mobile_Screen_Zoom_In_Desc=4.7\u5BF8\u4EE5\u4E0A\u624B\u673A\uFF1A\u653E\u5927 +FR-Designer_Mobile_Screen_Zoom_Out_Desc=4.7\u5BF8\u4EE5\u4E0B\u624B\u673A\uFF1A\u538B\u7F29 +FR-Designer_Adaptive_Property_Auto_Match_Desc=\u4E3A\u63D0\u5347\u624B\u673A\u7AEF\u6A21\u7248\u6548\u679C\uFF0C\u5728\u4F7F\u7528\u4FDD\u7559\u5E03\u5C40\u529F\u80FD\u65F6\uFF0C\u8BBE\u7F6E\u81EA\u9002\u5E94\u5E03\u5C40\u65B9\u5F0F\u4E0B\u7684\u7EC4\u4EF6\u7F29\u653E\u903B\u8F91\u4E3A"\u6A2A\u5411\u81EA\u9002\u5E94" +FR-Designer_Template_Settings=\u6A21\u7248\u8BBE\u7F6E +FR-Designer_Form_Widget_Rename_Failure=\u5B58\u5728\u91CD\u540D\u7EC4\u4EF6\uFF0C\u8BF7\u8BBE\u7F6E\u5176\u4ED6\u540D\u79F0 +FR-Designer_Joption_News=\u6D88\u606F +FR-Designer_Zoom_In_Logic=\u653E\u5927\u903B\u8F91 +FR-Designer_Zoom_Out_Logic=\u7F29\u5C0F\u903B\u8F91 +FR-Designer_Chart_Adaptivity=\u56FE\u8868\u81EA\u9002\u5E94 +FR-Designer_Tip_Chart_Adaptivity_Unavailable=\u4FDD\u7559\u5E03\u5C40\u72B6\u6001\u4E0B\uFF0C\u56FE\u8868\u4E0D\u652F\u6301\u8BBE\u7F6E\u81EA\u9002\u5E94 +FR-Designer_Official_Website=\u5B98\u65B9\u7F51\u7AD9\uFF1A +FR-Designer_Support_Email=\u652F\u6301\u90AE\u7BB1\uFF1A +FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout=\u7EDD\u5BF9\u753B\u5E03\u5757\u72B6\u6001\u4E0B\uFF0C\u56FE\u8868\u4E0D\u652F\u6301\u8BBE\u7F6E\u81EA\u9002\u5E94 +FR-Designer_Max_Height_Cannot_Be_Negative=\u6700\u5927\u9AD8\u5EA6\u4E0D\u53EF\u4E3A\u8D1F\u503C +FR-Designer_How_To_Join=\u6233\u6211\u4E86\u89E3\u5982\u4F55\u52A0\u5165\u81F4\u8C22\u540D\u5355 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 780d341cb7..e1e3dc1777 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 @@ -59,9 +59,9 @@ FR-Designer-Widget-Title_border_color=\u6A19\u984C\u6846\u7DDA\u984F\u8272 FR-Designer_AbsoluteLayout=\u7D55\u5C0D\u4F48\u5C40 FR-Designer_Allow_Decimals=\u5141\u8A31\u5C0F\u6578 FR-Designer_Allow_Negative=\u5141\u8A31\u8CA0\u503C -FR-Designer_Background-Click=\u9EDE\u64CA\u80CC\u666F +FR-Designer_Background-Click=\u6ED1\u9F20\u9EDE\u64CA\u80CC\u666F FR-Designer_Background-Initial=\u521D\u59CB\u80CC\u666F -FR-Designer_Background-Over=\u61F8\u6D6E\u80CC\u666F +FR-Designer_Background-Over=\u6ED1\u9F20\u61F8\u6D6E\u80CC\u666F FR-Designer_Bar-Code-Exception-Tip=\u689D\u78BC\u4F8B\u5916\u63D0\u793A FR-Designer_Block-intersect=\u5340\u584A\u91CD\u758A FR-Designer_BorderLayout=\u908A\u754C\u5E03\u5C40 @@ -2141,8 +2141,8 @@ FR-Designer_Float_Visible=\u61F8\u6D6E\u5143\u7D20\u53EF\u898B FR-Designer_Widget_String=\u5B57\u4E32 FR-Designer_Widget_Field=\u6B04\u4F4D FR-Designer_Widget_Enabled=\u63A7\u5236\u5143\u4EF6\u53EF\u7528 -FR-Designer_Export_Background= -FR-Designer_Print_Background= +FR-Designer_Print_Background=\u5217\u5370\u5831\u8868\u80CC\u666F +FR-Designer_Export_Background=\u532F\u51FA\u5831\u8868\u80CC\u666F FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= @@ -2166,4 +2166,24 @@ FR-Designer_Tab_Menu_Style=\u83DC\u55AE\u5F0F FR-Designer_Tab_Pentagon_Style=\u4E94\u908A\u5F62 FR-Designer_Tab_Trapezoid_Style=\u68AF\u5F62 FR-Designer_Tab_Display_Position=\u986F\u793A\u4F4D\u7F6E -FR-Designer_Background_Select=\u9078\u4E2D\u80CC\u666F \ No newline at end of file +FR-Designer_Background_Select=\u9078\u4E2D\u80CC\u666F +FR-Designer_Set_Mobile_Only_Template=\u8A2D\u5B9A\u70BA\u624B\u6A5F\u7AEF\u5C08\u5C6C\u6A21\u7248 +FR-Designer_Set_Mobile_Canvas_Size=\u8A2D\u5B9A\u70BA\u624B\u6A5F\u6A21\u7248\u756B\u5E03\u5927\u5C0F +FR-Designer_Adaptive_Property_Auto_Match=\u81EA\u6211\u8ABF\u6574\u5185\u5BB9\u81EA\u52D5\u5339\u914D +FR-Designer_Canvas_Size_Lock_Desc=\u756B\u5E03\u5927\u5C0F375*560\uFF0C\u5BEC\u5EA6\u9396\u5B9A\uFF0C\u9AD8\u5EA6\u53EF\u81EA\u5B9A\u7FA9 +FR-Designer_Mobile_Screen_Match_Desc=4.7\u5BF8\u8367\u5E55\u624B\u6A5F\uFF1A\u9069\u914D +FR-Designer_Mobile_Screen_Zoom_In_Desc=4.7\u5BF8\u4EE5\u4E0A\u624B\u6A5F\uFF1A\u653E\u5927 +FR-Designer_Mobile_Screen_Zoom_Out_Desc=4.7\u5BF8\u4EE5\u4E0B\u624B\u6A5F\uFF1A\u58D3\u7E2E +FR-Designer_Adaptive_Property_Auto_Match_Desc=\u70BA\u63D0\u5347\u624B\u6A5F\u7AEF\u6A21\u7248\u6548\u679C\uFF0C\u5728\u4F7F\u7528\u4FDD\u7559\u4F48\u5C40\u529F\u80FD\u6642\uFF0C\u8A2D\u5B9A\u81EA\u6211\u8ABF\u6574\u4F48\u5C40\u7BA1\u9053\u4E0B\u7684\u7D44\u4EF6\u7E2E\u653E\u908F\u8F2F\u70BA\u201C\u6A6B\u5411\u81EA\u6211\u8ABF\u6574\u201D +FR-Designer_Template_Settings=\u6A21\u7248\u8A2D\u5B9A +FR-Designer_Form_Widget_Rename_Failure=\u5B58\u5728\u91CD\u540D\u7D44\u4EF6\uFF0C\u8ACB\u8A2D\u5B9A\u5176\u4ED6\u540D\u7A31 +FR-Designer_Joption_News=\u6D88\u606F +FR-Designer_Zoom_In_Logic=\u653E\u5927\u908F\u8F2F +FR-Designer_Zoom_Out_Logic=\u7E2E\u5C0F\u908F\u8F2F +FR-Designer_Chart_Adaptivity=\u5716\u8868\u81EA\u6211\u8ABF\u6574 +FR-Designer_Tip_Chart_Adaptivity_Unavailable=\u4FDD\u7559\u4F48\u5C40\u72C0\u614B\u4E0B\uFF0C\u5716\u8868\u4E0D\u652F\u6301\u8A2D\u5B9A\u81EA\u6211\u8ABF\u6574 +FR-Designer_Official_Website=\u5B98\u65B9\u7DB2\u7AD9\uFF1A +FR-Designer_Support_Email=\u652F\u6301\u90F5\u7BB1\uFF1A +FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout=\u7D55\u5C0D\u756B\u5E03\u584A\u72C0\u614B\u4E0B\uFF0C\u5716\u8868\u4E0D\u652F\u6301\u8A2D\u5B9A\u81EA\u6211\u8ABF\u6574 +FR-Designer_Max_Height_Cannot_Be_Negative=\u6700\u5927\u9AD8\u5EA6\u4E0D\u53EF\u70BA\u8CA0\u503C +FR-Designer_How_To_Join=\u6233\u6211\u4E86\u89E3\u5982\u4F55\u52A0\u5165\u81F4\u8B1D\u540D\u55AE diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java index 28e4e03446..14957d1775 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java @@ -6,6 +6,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; @@ -185,8 +186,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } public void mouseReleased(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { - BaseUtils.setAuthorityEditing(false); + if (DesignerMode.isAuthorityEditing()) { + DesignerMode.setMode(DesignerMode.NORMARL); WestRegionContainerPane.getInstance().replaceDownPane( TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); @@ -262,7 +263,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { reCalculateFrameSize(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { doResize(); } } @@ -456,7 +457,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * 刷新 */ public void refreshDottedLine() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { populateAuthorityArea(); populateCloseButton(); addDottedLine(); @@ -515,7 +516,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta for (int i = 0; i < fixButtons.length; i++) { combineUp.add(fixButtons[i]); } - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { combineUp.addSeparator(new Dimension(2, 16)); if (toolbar4Form != null) { for (int i = 0; i < toolbar4Form.length; i++) { @@ -626,13 +627,13 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta */ public void needToAddAuhtorityPaint() { - newWorkBookPane.setButtonGray(BaseUtils.isAuthorityEditing()); + newWorkBookPane.setButtonGray(DesignerMode.isAuthorityEditing()); // 进入或退出权限编辑模式,通知插件 Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); for (ShortCut shortCut : extraShortCuts) { if (shortCut instanceof AbstractTemplateTreeShortCutProvider) { - ((AbstractTemplateTreeShortCutProvider) shortCut).notifyFromAuhtorityChange(BaseUtils.isAuthorityEditing()); + ((AbstractTemplateTreeShortCutProvider) shortCut).notifyFromAuhtorityChange(DesignerMode.isAuthorityEditing()); } } diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index c8a4b231de..77423aa7f3 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -119,7 +120,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); //处理自动新建的模板 MutilTempalteTabPane.getInstance().doWithtemTemplate(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { RolesAlreadyEditedPane.getInstance().refreshDockingView(); } diff --git a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java index 0c9d536d99..357bab937f 100644 --- a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignerEnvManager; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; @@ -436,7 +437,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { // 无可用 tab 时,显示提示文字 if (!hasAvailableTab) { resetPropertyIcons(); - if (!hasEnabledTab && BaseUtils.isAuthorityEditing()) { + if (!hasEnabledTab && DesignerMode.isAuthorityEditing()) { propertyCard.show(rightPane, DEFAULT_AUTHORITY_PANE); } else { propertyCard.show(rightPane, DEFAULT_PANE); diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 76c1bb8aa9..15c2624532 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -281,7 +281,7 @@ public abstract class JTemplate> ex * @return 是则返回true */ public boolean isSaved() { - return BaseUtils.isAuthorityEditing() ? this.authoritySaved : this.saved; + return DesignerMode.isAuthorityEditing() ? this.authoritySaved : this.saved; } /** @@ -304,7 +304,7 @@ public abstract class JTemplate> ex } public void setSaved(boolean isSaved) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { authoritySaved = isSaved; } else { saved = isSaved; @@ -315,7 +315,7 @@ public abstract class JTemplate> ex * @return */ public UndoManager getUndoManager() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { if (this.authorityUndoManager == null) { this.authorityUndoManager = new UndoManager(); int limit = DesignerEnvManager.getEnvManager().getUndoLimit(); @@ -389,7 +389,7 @@ public abstract class JTemplate> ex return; } //如果是在不同的模式下产生的 - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { this.getUndoManager().addEdit(new UndoStateEdit(authorityUndoState, newState)); authorityUndoState = newState; } else { @@ -418,7 +418,7 @@ public abstract class JTemplate> ex } private void fireSuperTargetModified() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { this.authoritySaved = false; } else { this.saved = false; @@ -621,7 +621,7 @@ public abstract class JTemplate> ex return false; } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { //触发保存服务器工具栏 try { FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance()); @@ -687,7 +687,7 @@ public abstract class JTemplate> ex public ShortCut[] shortcut4FileMenu() { if (DesignerMode.isVcsMode()) { return VcsScene.shortcut4FileMenu(this); - } else if (BaseUtils.isAuthorityEditing()) { + } else if (DesignerMode.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)}; @@ -703,7 +703,7 @@ public abstract class JTemplate> ex public MenuDef[] menus4Target() { MenuDef tplMenu = new MenuDef(Inter.getLocText("FR-Designer_M-Template"), 'T'); tplMenu.setAnchor(MenuHandler.TEMPLATE); - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { tplMenu.addShortCut(new NameSeparator(Inter.getLocText("FR-Designer_WorkBook"))); tplMenu.addShortCut(new TableDataSourceAction(this)); tplMenu.addShortCut(shortcut4TemplateMenu()); @@ -908,7 +908,7 @@ public abstract class JTemplate> ex */ public void activeJTemplate(int index, JTemplate jt) { DesignerContext.getDesignerFrame().activateJTemplate(this); - }; + } /** * 激活已存在的模板 @@ -992,10 +992,24 @@ public abstract class JTemplate> ex return UIConstants.RUN_BIG_ICON; } + /** + * 获取所有参数 + * + * @return + */ public Parameter[] getParameters() { return new Parameter[0]; } + /** + * 获取模板参数 + * + * @return + */ + public Parameter[] getJTemplateParameters() { + return new Parameter[0]; + } + /** * 请求表单焦点 */ diff --git a/designer_base/src/com/fr/design/mainframe/UndoStateEdit.java b/designer_base/src/com/fr/design/mainframe/UndoStateEdit.java index 3fc8f0436f..3a717fe363 100644 --- a/designer_base/src/com/fr/design/mainframe/UndoStateEdit.java +++ b/designer_base/src/com/fr/design/mainframe/UndoStateEdit.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.general.Inter; @@ -52,7 +52,7 @@ public class UndoStateEdit extends AbstractUndoableEdit { if (this.old != null) { this.old.applyState(); } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { RolesAlreadyEditedPane.getInstance().refreshDockingView(); } } @@ -67,7 +67,7 @@ public class UndoStateEdit extends AbstractUndoableEdit { if (this.cur != null) { this.cur.applyState(); } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { RolesAlreadyEditedPane.getInstance().refreshDockingView(); } } 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 37eded3911..f28caf8ccf 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -3,7 +3,6 @@ */ 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; @@ -336,7 +335,7 @@ public abstract class ToolBarMenuDock { } MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_File"), 'F'); ShortCut[] scs = new ShortCut[0]; - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { scs = createNewFileShortCuts(); } if (!ArrayUtils.isEmpty(scs)) { @@ -367,13 +366,13 @@ public abstract class ToolBarMenuDock { } protected void addCloseCurrentTemplateAction(MenuDef menuDef) { - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { menuDef.addShortCut(new CloseCurrentTemplateAction()); } } protected void addPreferenceAction(MenuDef menuDef) { - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { menuDef.addShortCut(new PreferenceAction()); } } @@ -409,7 +408,7 @@ public abstract class ToolBarMenuDock { protected MenuDef createServerMenuDef(ToolBarMenuDockPlus plus) { MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_M-Server"), 'S'); - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { menuDef.addShortCut( new ConnectionListAction(), createGlobalTDAction() @@ -421,7 +420,7 @@ public abstract class ToolBarMenuDock { new PlatformManagerAction() ); - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { if (shouldShowPlugin()) { menuDef.addShortCut( new PluginManagerAction() diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java b/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java index 1e7d9e88b3..b60de389ea 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/VcsScene.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe.toolbar; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.edit.RedoAction; import com.fr.design.actions.edit.UndoAction; import com.fr.design.actions.file.ExitDesignerAction; @@ -32,7 +32,7 @@ public class VcsScene { menuDef.addShortCut(SeparatorDef.DEFAULT); } - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { menuDef.addShortCut(new PreferenceAction()); } diff --git a/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java b/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java index 12b83b3e7d..101b869e34 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java +++ b/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java @@ -13,6 +13,10 @@ import javax.swing.BorderFactory; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; /** * Created by plough on 2017/8/7. @@ -27,7 +31,32 @@ public class BasicPropertyPane extends BasicPane { protected void initContentPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - widgetName = new UITextField(); + widgetName = new UITextField() { + protected void initListener() { + if (shouldResponseChangeListener()) { + addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + + } + + @Override + public void focusLost(FocusEvent e) { + attributeChange(); + } + }); + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + attributeChange(); + } + } + }); + } + } + }; + widgetName.setGlobalName(Inter.getLocText("FR-Designer_Basic")); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; diff --git a/designer_base/src/com/fr/design/roleAuthority/ReportAndFSManagePane.java b/designer_base/src/com/fr/design/roleAuthority/ReportAndFSManagePane.java index 8b406de1d2..94256af272 100644 --- a/designer_base/src/com/fr/design/roleAuthority/ReportAndFSManagePane.java +++ b/designer_base/src/com/fr/design/roleAuthority/ReportAndFSManagePane.java @@ -1,6 +1,7 @@ package com.fr.design.roleAuthority; import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.UpdateAction; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; @@ -265,7 +266,7 @@ public class ReportAndFSManagePane extends DockingView implements Prepare4DataSo DesignTableDataManager.addDsChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { roleTree.refreshTreeNode(); expandTree(roleTree, true); roleTree.updateUI(); diff --git a/designer_base/src/com/fr/design/utils/gui/GUIPaintUtils.java b/designer_base/src/com/fr/design/utils/gui/GUIPaintUtils.java index fcff66e07f..e02d2dd0e1 100644 --- a/designer_base/src/com/fr/design/utils/gui/GUIPaintUtils.java +++ b/designer_base/src/com/fr/design/utils/gui/GUIPaintUtils.java @@ -1,6 +1,6 @@ package com.fr.design.utils.gui; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.stable.Constants; @@ -17,7 +17,7 @@ public class GUIPaintUtils { public static final void drawBorder(Graphics2D g2d, int x, int y, int width, int height, boolean isRound, int rectDirection, boolean isAuthorityEdited) { Color oldColor = g2d.getColor(); Shape oldClip = g2d.getClip(); - if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { g2d.setColor(UIConstants.AUTHORITY_LINE_COLOR); } else { g2d.setColor(UIConstants.POP_DIALOG_BORDER); @@ -67,7 +67,7 @@ public class GUIPaintUtils { public static final void fillNormal(Graphics2D g2d, int x, int y, int width, int height, boolean isRound, int rectDirection, boolean isAuthorityEdited, boolean isPressedPainted, Color color) { GradientPaint gp; - if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { gp = new GradientPaint(1, 1, UIConstants.AUTHORITY_BLUE, 1, height - 1, UIConstants.AUTHORITY_DARK_BLUE); } else if (isPressedPainted) { gp = new GradientPaint(1, 1, color, 1, height - 1, color); @@ -99,7 +99,7 @@ public class GUIPaintUtils { GradientPaint gp; if (hoverColor != null) { gp = new GradientPaint(1, 1, hoverColor, 1, height - 1, hoverColor); - } else if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + } else if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { gp = new GradientPaint(1, 1, UIConstants.AUTHORITY_BLUE, 1, height - 1, UIConstants.HOVER_BLUE); } else if (isPressedPainted) { gp = new GradientPaint(1, 1, UIConstants.ATTRIBUTE_HOVER, 1, height - 1, UIConstants.ATTRIBUTE_HOVER); @@ -129,7 +129,7 @@ public class GUIPaintUtils { Color oldColor = g2d.getColor(); if (pressedColor != null) { g2d.setColor(pressedColor); - } else if (BaseUtils.isAuthorityEditing() && isAuthorityEdited) { + } else if (DesignerMode.isAuthorityEditing() && isAuthorityEdited) { g2d.setColor(UIConstants.AUTHORITY_PRESS_BLUE); } else { g2d.setColor(UIConstants.ATTRIBUTE_PRESS); diff --git a/designer_base/src/com/fr/start/BaseDesigner.java b/designer_base/src/com/fr/start/BaseDesigner.java index 65c31a02b4..37a940ed8d 100644 --- a/designer_base/src/com/fr/start/BaseDesigner.java +++ b/designer_base/src/com/fr/start/BaseDesigner.java @@ -67,7 +67,9 @@ public abstract class BaseDesigner extends ToolBarMenuDock { } private void init(String[] args) { - + + prepare(); + RestartHelper.deleteRecordFilesWhenStart(); ConfigManagerFactory.registerConfigManagerProxy(new ConfigManagerCreatorProxy()); //启动core @@ -108,6 +110,12 @@ public abstract class BaseDesigner extends ToolBarMenuDock { initLookAndFeel(args, splashWindow); } + private void prepare() { + + //屏蔽IBM对私钥公钥的检查 + System.getProperties().setProperty("com.ibm.crypto.provider.DoRSATypeChecking","false"); + } + private void initLookAndFeel(String[] args, SplashWindow splashWindow) { // 初始化look and feel.这个在预加载之前执行是因为lookAndFeel里的东西,预加载时也要用到 diff --git a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java index 70808d1c41..45edfe84fe 100644 --- a/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java +++ b/designer_chart/src/com/fr/plugin/chart/custom/component/VanChartHyperLinkPane.java @@ -1,5 +1,6 @@ package com.fr.plugin.chart.custom.component; +import com.fr.base.BaseFormula; import com.fr.chart.chartattr.Plot; import com.fr.chart.web.ChartHyperPoplink; import com.fr.chart.web.ChartHyperRelateCellLink; @@ -77,7 +78,7 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { Constructor constructor = null; try { constructor = creator.getUpdatePane().getConstructor(HashMap.class, boolean.class); - return constructor.newInstance(plot.getHyperLinkEditorMap(), false); + return constructor.newInstance(getHyperLinkEditorMap(), false); } catch (InstantiationException e) { FRLogger.getLogger().error(e.getMessage(), e); @@ -91,6 +92,10 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { return null; } + protected Map getHyperLinkEditorMap() { + return plot.getHyperLinkEditorMap(); + } + /** * 弹出列表的标题. diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/background/AlertLineListControlPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/background/AlertLineListControlPane.java index 6857302d08..04114fd724 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/background/AlertLineListControlPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/background/AlertLineListControlPane.java @@ -51,7 +51,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; List xAxisList = rectanglePlot.getXAxisList(); List yAxisList = rectanglePlot.getYAxisList(); - String[] axisNames = DefaultAxisHelper.getAllAxisNames(xAxisList, yAxisList); + String[] axisNames = DefaultAxisHelper.getAllAxisNames(rectanglePlot); ChartNameObjectCreator[] creators = {new ChartNameObjectCreator(getAlertAxisName(axisNames), Inter.getLocText("Plugin-ChartF_AlertLine"), VanChartAlertValue.class, getAlertPaneClass())}; @@ -63,7 +63,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List values = axis.getAlertValues(); for (VanChartAlertValue alertValue : values) { alertValue.setAxisNamesArray(axisNames); - alertValue.setAxisName(axis.getAxisName()); + alertValue.setAxisName(rectanglePlot.getXAxisName(axis)); nameObjects.add(new NameObject(alertValue.getAlertPaneSelectName(), alertValue)); } } @@ -72,7 +72,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List values = axis.getAlertValues(); for (VanChartAlertValue alertValue : values) { alertValue.setAxisNamesArray(axisNames); - alertValue.setAxisName(axis.getAxisName()); + alertValue.setAxisName(rectanglePlot.getYAxisName(axis)); nameObjects.add(new NameObject(alertValue.getAlertPaneSelectName(), alertValue)); } } @@ -93,7 +93,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List axisAlerts = new ArrayList(); for (int i = 0; i < nameables.length; i++) { VanChartAlertValue value = (VanChartAlertValue) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getXAxisName(axis))) { value.setAlertPaneSelectName(nameables[i].getName()); axisAlerts.add(value); } @@ -104,7 +104,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { List axisAlerts = new ArrayList(); for (int i = 0; i < nameables.length; i++) { VanChartAlertValue value = (VanChartAlertValue) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getYAxisName(axis))) { value.setAlertPaneSelectName(nameables[i].getName()); axisAlerts.add(value); } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/background/BackgroundListControlPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/background/BackgroundListControlPane.java index e288e51a54..0350919334 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/background/BackgroundListControlPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/background/BackgroundListControlPane.java @@ -53,7 +53,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; List xAxisList = rectanglePlot.getXAxisList(); List yAxisList = rectanglePlot.getYAxisList(); - String[] axisNames = DefaultAxisHelper.getAllAxisNames(xAxisList, yAxisList); + String[] axisNames = DefaultAxisHelper.getAllAxisNames(rectanglePlot); BackgroundNameObjectCreator[] creators = {new BackgroundNameObjectCreator(getCustomIntervalBackgroundAxisName(axisNames), Inter.getLocText("Plugin-ChartF_CustomIntervalBackground"), VanChartCustomIntervalBackground.class, getIntervalPaneClass())}; @@ -66,7 +66,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { List customIntervalBackgrounds = axis.getCustomIntervalBackgroundArray(); for (VanChartCustomIntervalBackground background : customIntervalBackgrounds) { background.setAxisNamesArray(axisNames); - background.setAxisName(axis.getAxisName()); + background.setAxisName((rectanglePlot.getXAxisName(axis))); nameObjects.add(new NameObject(background.getCustomIntervalBackgroundSelectName(), background)); } @@ -75,7 +75,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { List customIntervalBackgrounds = axis.getCustomIntervalBackgroundArray(); for (VanChartCustomIntervalBackground background : customIntervalBackgrounds) { background.setAxisNamesArray(axisNames); - background.setAxisName(axis.getAxisName()); + background.setAxisName(rectanglePlot.getXAxisName(axis)); nameObjects.add(new NameObject(background.getCustomIntervalBackgroundSelectName(), background)); } } @@ -102,7 +102,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { if (!isDefaultIntervalBackground) { for (int i = 0; i < nameables.length; i++) { VanChartCustomIntervalBackground value = (VanChartCustomIntervalBackground) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getXAxisName(axis))) { value.setCustomIntervalBackgroundSelectName(nameables[i].getName()); axisCustomBackground.add(value); } @@ -115,7 +115,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { if (!isDefaultIntervalBackground) { for (int i = 0; i < nameables.length; i++) { VanChartCustomIntervalBackground value = (VanChartCustomIntervalBackground) ((NameObject) nameables[i]).getObject(); - if (ComparatorUtils.equals(value.getAxisName(), axis.getAxisName())) { + if (ComparatorUtils.equals(value.getAxisName(), rectanglePlot.getYAxisName(axis))) { value.setCustomIntervalBackgroundSelectName(nameables[i].getName()); axisCustomBackground.add(value); } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java index aa7a9b2b5b..60e96f341a 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java @@ -9,13 +9,11 @@ import com.fr.design.gui.controlpane.ShortCut4JControlPane; import com.fr.general.Inter; import com.fr.general.NameObject; import com.fr.plugin.chart.attr.DefaultAxisHelper; -import com.fr.plugin.chart.attr.axis.VanChartAxis; import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; import com.fr.plugin.chart.base.AttrSeriesStackAndAxis; import com.fr.plugin.chart.column.VanChartCustomStackAndAxisConditionPane; import com.fr.plugin.chart.designer.component.VanChartUIListControlPane; import com.fr.stable.Nameable; - import java.util.ArrayList; /** @@ -49,10 +47,8 @@ public class VanChartStackedAndAxisListControlPane extends VanChartUIListControl public void populate(VanChartRectanglePlot plot) { this.plot = plot; - java.util.List xAxisList = plot.getXAxisList(); - java.util.List yAxisList = plot.getYAxisList(); - String[] axisXNames = DefaultAxisHelper.getAxisNames(xAxisList); - String[] axisYNames = DefaultAxisHelper.getAxisNames(yAxisList); + String[] axisXNames = DefaultAxisHelper.getXAxisNames(plot); + String[] axisYNames = DefaultAxisHelper.getYAxisNames(plot); java.util.List menuList = new ArrayList(); AttrSeriesStackAndAxis seriesStackAndAxis = new AttrSeriesStackAndAxis(); diff --git a/designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartCatalogHyperLinkPane.java b/designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartCatalogHyperLinkPane.java index 8bf8bdfe6a..d6e5463db2 100644 --- a/designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartCatalogHyperLinkPane.java +++ b/designer_chart/src/com/fr/plugin/chart/drillmap/designer/other/VanChartCatalogHyperLinkPane.java @@ -1,15 +1,27 @@ package com.fr.plugin.chart.drillmap.designer.other; +import com.fr.base.BaseFormula; import com.fr.chart.chartattr.Plot; +import com.fr.general.Inter; import com.fr.js.NameJavaScriptGroup; import com.fr.plugin.chart.custom.component.VanChartHyperLinkPane; import com.fr.plugin.chart.drillmap.VanChartDrillMapPlot; +import java.util.HashMap; +import java.util.Map; + /** * Created by hufan on 2016/12/13. */ public class VanChartCatalogHyperLinkPane extends VanChartHyperLinkPane{ + @Override + protected Map getHyperLinkEditorMap() { + HashMap map = new HashMap(); + map.put(Inter.getLocText("FR-Chart-Area_Name"), BaseFormula.createFormulaBuilder().build("AREA_NAME")); + return map; + } + protected void updateHotHyperLink(Plot plot, NameJavaScriptGroup nameGroup) { if (plot instanceof VanChartDrillMapPlot) { ((VanChartDrillMapPlot) plot).setDrillUpHyperLink(nameGroup); diff --git a/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java b/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java index a98c8d7f7c..d55c9307e3 100644 --- a/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java +++ b/designer_chart/src/com/fr/plugin/chart/map/designer/type/VanChartMapSourceChoosePane.java @@ -588,15 +588,10 @@ public class VanChartMapSourceChoosePane extends JPanel implements UIObserver { private String[] getParams() { JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (jTemplate == null){ + if (jTemplate == null) { return new String[0]; } - String[] params = new String[0]; - if(jTemplate.getTarget() instanceof ParameterHolder){ - params = getParamsName(((ParameterHolder)jTemplate.getTarget()).getParameters()); - } - - return params; + return getParamsName((jTemplate.getJTemplateParameters())); } private String[] getParamsName(Parameter[] parameters) { diff --git a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java index f6950cd76c..b4e2652100 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -6,10 +6,14 @@ import java.beans.IntrospectionException; import javax.swing.*; +import com.fr.base.GraphHelper; import com.fr.base.chart.BaseChartCollection; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.designer.properties.mobile.ChartEditorPropertyUI; +import com.fr.design.designer.properties.mobile.ElementCasePropertyUI; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.chart.BaseChartPropertyPane; import com.fr.design.gui.chart.MiddleChartComponent; import com.fr.design.mainframe.*; @@ -20,6 +24,8 @@ import com.fr.form.ui.BaseChartEditor; import com.fr.form.ui.Widget; import com.fr.design.form.util.XCreatorConstants; import com.fr.general.Inter; +import com.fr.stable.Constants; +import com.fr.stable.GraphDrawHelper; import com.fr.stable.core.PropertyChangeAdapter; /** @@ -31,6 +37,7 @@ import com.fr.stable.core.PropertyChangeAdapter; */ public class XChartEditor extends XBorderStyleWidgetCreator { private static final long serialVersionUID = -7009439442104836657L; + private static final int BORDER_WIDTH = 2; //具体来说是DesignerEditor private DesignerEditor designerEditor; // private DesignerEditor designerEditor; @@ -38,7 +45,11 @@ public class XChartEditor extends XBorderStyleWidgetCreator { private boolean isRefreshing = false; private boolean isEditing = false; + + private boolean isHovering = false; private JPanel coverPanel; + private static final Color OUTER_BORDER_COLOR = new Color(65, 155, 249, 30); + private static final Color INNER_BORDER_COLOR = new Color(65, 155, 249); public XChartEditor(BaseChartEditor editor) { this(editor, new Dimension(250, 150)); @@ -117,6 +128,22 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return false; } + + /** + * 编辑状态的时候需要重新绘制下边框 + * + */ + @Override + public void paintBorder(Graphics g, Rectangle bounds){ + if(isEditing){ + g.setColor(OUTER_BORDER_COLOR); + GraphHelper.draw(g, new Rectangle(bounds.x - BORDER_WIDTH, bounds.y - BORDER_WIDTH, bounds.width + BORDER_WIDTH + 1, bounds.height + BORDER_WIDTH + 1), Constants.LINE_LARGE); + }else if(!isHovering){ + super.paintBorder(g, bounds); + } + } + + /** * 返回设计器的Editor */ @@ -185,6 +212,10 @@ public class XChartEditor extends XBorderStyleWidgetCreator { public void paint(Graphics g) { designerEditor.paintEditor(g, this.getSize()); super.paint(g); + if(isEditing){ + g.setColor(INNER_BORDER_COLOR); + GraphHelper.draw(g, new Rectangle(0, 0, getWidth(), getHeight()), Constants.LINE_MEDIUM); + } } /** @@ -259,6 +290,7 @@ public class XChartEditor extends XBorderStyleWidgetCreator { * @param display 是否 */ public void displayCoverPane(boolean display){ + isHovering = display; coverPanel.setVisible(display); coverPanel.setPreferredSize(editor.getPreferredSize()); coverPanel.setBounds(editor.getBounds()); @@ -285,4 +317,8 @@ public class XChartEditor extends XBorderStyleWidgetCreator { initStyle(); } + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{ new ChartEditorPropertyUI(this)}; + } } \ No newline at end of file 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 d934ecf57f..3592f4671a 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -3,7 +3,8 @@ */ package com.fr.design.designer.creator; -import com.fr.base.BaseUtils; +import com.fr.base.GraphHelper; +import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.UpdateAction; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; @@ -12,16 +13,29 @@ import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.*; +import com.fr.design.mainframe.AuthorityPropertyPane; +import com.fr.design.mainframe.BaseJForm; +import com.fr.design.mainframe.EditingMouseListener; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.NoSupportAuthorityEdit; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; +import com.fr.stable.Constants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; import javax.swing.border.Border; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.beans.IntrospectionException; import java.util.ArrayList; @@ -279,7 +293,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo */ @Override public JComponent createToolPane(BaseJForm jform, FormDesigner formEditor) { - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { if (isDedicateContainer()) { // 图表块和报表块由于控件树处不显示,但对应的属性表要显示,此处处理下 XCreator child = ((XLayoutContainer) this).getXCreator(0); @@ -690,6 +704,14 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo // do nothing } + /** + * 编辑状态的时候需要重新绘制下边框 + * + */ + public void paintBorder(Graphics g, Rectangle bounds){ + GraphHelper.draw(g, bounds, Constants.LINE_MEDIUM); + } + /** * 创建右击弹出菜单 * 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 514cd12d18..cece2042ba 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -1,6 +1,7 @@ package com.fr.design.designer.creator; import com.fr.base.BaseUtils; +import com.fr.base.GraphHelper; import com.fr.design.ExtraDesignClassManager; import com.fr.design.designer.properties.mobile.ElementCasePropertyUI; import com.fr.design.form.util.XCreatorConstants; @@ -20,6 +21,7 @@ import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.ElementCaseEditorProvider; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; +import com.fr.stable.Constants; import com.fr.stable.CoreGraphHelper; import com.fr.stable.core.PropertyChangeAdapter; import com.fr.stable.fun.FitProvider; @@ -38,6 +40,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme private CoverReportPane coverPanel; private FormDesigner designer; private static BufferedImage DEFAULT_BACKGROUND; + private boolean isHovering = false; static{ try{ @@ -216,11 +219,20 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme * @param display 是否 */ public void displayCoverPane(boolean display){ + isHovering = display; coverPanel.setVisible(display); coverPanel.setBounds(1, 1, (int) editor.getBounds().getWidth(), (int) editor.getBounds().getHeight()); editor.repaint(); } + @Override + public void paintBorder(Graphics g, Rectangle bounds){ + if (!isHovering) { + super.paintBorder(g, bounds); + } + } + + /** * 销毁帮助提示框 */ 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 eba8cd6888..c252060b89 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -3,6 +3,7 @@ */ package com.fr.design.designer.creator; +import com.fr.base.GraphHelper; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; @@ -11,6 +12,7 @@ import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.form.layout.FRAbsoluteLayout; +import com.fr.design.form.util.XCreatorConstants; import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormArea; @@ -23,6 +25,7 @@ import com.fr.form.ui.container.WLayout; import com.fr.general.FRScreen; import com.fr.general.IOUtils; import com.fr.general.Inter; +import com.fr.stable.Constants; import java.awt.*; import java.awt.event.ContainerEvent; @@ -42,6 +45,9 @@ public class XWAbsoluteLayout extends XLayoutContainer { private static final int EDIT_BTN_HEIGHT = 24; private int minWidth = WLayout.MIN_WIDTH; private int minHeight = WLayout.MIN_HEIGHT; + private static final Color OUTER_BORDER_COLOR = new Color(65, 155, 249, 30); + private static final Color INNER_BORDER_COLOR = new Color(65, 155, 249); + private static final int BORDER_WIDTH = 1; //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 protected double containerPercent = 1.0; @@ -432,15 +438,15 @@ public class XWAbsoluteLayout extends XLayoutContainer { Graphics2D g2d = (Graphics2D) g; Composite oldComposite = g2d.getComposite(); //画白色的编辑层 - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); - g2d.setColor(Color.WHITE); + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 50 / 100.0F)); + g2d.setColor(XCreatorConstants.COVER_COLOR); g2d.fillRect(x, y, w, h); //画编辑按钮所在框 g2d.setComposite(oldComposite); g2d.setColor(new Color(176, 196, 222)); g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); //画编辑按钮图标 - BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); + BufferedImage image = IOUtils.readImage(IconPathConstants.EDIT_ICON_PATH); g2d.drawImage( image, (x + w / 2 - 23), @@ -453,9 +459,23 @@ public class XWAbsoluteLayout extends XLayoutContainer { g2d.setColor(Color.BLACK); //画编辑文字 g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); + g.setColor(XCreatorConstants.FORM_BORDER_COLOR); + GraphHelper.draw(g, new Rectangle(BORDER_WIDTH, BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2, getHeight() - BORDER_WIDTH * 2), Constants.LINE_MEDIUM); } + } + @Override + public void paintBorder(Graphics g, Rectangle bounds){ + if(editable){ + g.setColor(OUTER_BORDER_COLOR); + GraphHelper.draw(g, new Rectangle(bounds.x - 3, bounds.y - 3, bounds.width + 5, bounds.height + 5), Constants.LINE_LARGE); + g.setColor(INNER_BORDER_COLOR); + GraphHelper.draw(g, new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height), Constants.LINE_MEDIUM); + }else if(!isMouseEnter){ + super.paintBorder(g, bounds); + } + } /** * 响应点击事件 * diff --git a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java index 712a8588d1..7fbc7f6dbb 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -28,6 +28,9 @@ import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; +import javax.swing.JOptionPane; + + /** * @author jim * @date 2014-6-23 @@ -958,11 +961,13 @@ public class XWFitLayout extends XLayoutContainer { public boolean canAddInterval(int interval) { int val = interval/2; for (int i=0, len=this.getComponentCount(); i{ //工具栏容器 private MobileToolBarPane mobileToolBarPane; + // 模版设置面板 + private FormMobileTemplateSettingsPane formMobileTemplateSettingsPane; - static final int PADDINGHEIGHT = 10; + private static final int PADDING = 10; public FormMobileAttrPane() { this.initComponents(); } - //现在只有两个panel,填不满自适应对话框,只能为工具栏Panel和h5解析方式panel分别包裹上一层Panel再计算高度,不然会自动 - //拉长两个Panel的高度去填满整个对话框。 private void initComponents() { - JPanel jPanel1 = new JPanel(); this.setLayout(FRGUIPaneFactory.createBorderLayout()); - jPanel1.setLayout(FRGUIPaneFactory.createBorderLayout()); - jPanel1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + JPanel mobileToolBarPaneWrapper = new JPanel(new BorderLayout()); + mobileToolBarPaneWrapper.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, 0, PADDING)); this.mobileToolBarPane = new MobileToolBarPane(); - //设置一个JPanel包裹mobileToolBarPane这个Panel,让jPanel的高度等于mobileToolBarPane高度加10,再放入this中 - jPanel1.setPreferredSize(new Dimension(0, (int)this.mobileToolBarPane.getPreferredSize().getHeight() + PADDINGHEIGHT)); - jPanel1.add("North", this.mobileToolBarPane); - this.add("North", jPanel1); + mobileToolBarPaneWrapper.add(this.mobileToolBarPane, BorderLayout.NORTH); + + JPanel formMobileTemplateSettingsPaneWrapper = new JPanel(new BorderLayout()); + formMobileTemplateSettingsPaneWrapper.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, PADDING, PADDING)); + this.formMobileTemplateSettingsPane = new FormMobileTemplateSettingsPane(); + formMobileTemplateSettingsPaneWrapper.add(this.formMobileTemplateSettingsPane, BorderLayout.NORTH); + + this.add(formMobileTemplateSettingsPaneWrapper, BorderLayout.NORTH); + this.add(mobileToolBarPaneWrapper, BorderLayout.CENTER); } @Override @@ -42,12 +46,14 @@ public class FormMobileAttrPane extends BasicBeanPane{ ob = new FormMobileAttr(); } this.mobileToolBarPane.populateBean(ob); + this.formMobileTemplateSettingsPane.populateBean(ob); } @Override public FormMobileAttr updateBean() { FormMobileAttr formMobileAttr = new FormMobileAttr(); this.mobileToolBarPane.updateBean(formMobileAttr); + this.formMobileTemplateSettingsPane.updateBean(formMobileAttr); return formMobileAttr; } diff --git a/designer_form/src/com/fr/design/form/mobile/FormMobileTemplateSettingsPane.java b/designer_form/src/com/fr/design/form/mobile/FormMobileTemplateSettingsPane.java new file mode 100644 index 0000000000..a32faac5b9 --- /dev/null +++ b/designer_form/src/com/fr/design/form/mobile/FormMobileTemplateSettingsPane.java @@ -0,0 +1,161 @@ +package com.fr.design.form.mobile; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.designer.IntervalConstants; +import com.fr.design.dialog.mobile.MobileRadioCheckPane; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.form.main.mobile.FormMobileAttr; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.border.Border; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by plough on 2018/1/4. + */ +public class FormMobileTemplateSettingsPane extends BasicBeanPane { + + private UICheckBox mobileOnlyCheck; // 设置为手机端专属模版 + private UICheckBox mobileCanvasSizeCheck; // 设置为手机模版画布大小 + private UICheckBox adaptivePropertyAutoMatchCheck; // 自适应属性自动匹配 + private JPanel mobileSettingsPane; + + public FormMobileTemplateSettingsPane() { + this.initComponents(); + } + + private void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel borderPane = FRGUIPaneFactory.createTitledBorderPane(this.title4PopupWindow()); + + JPanel contentPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + contentPane.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, IntervalConstants.INTERVAL_L5, IntervalConstants.INTERVAL_L2, 0)); + + mobileSettingsPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); + mobileSettingsPane.setVisible(false); + mobileSettingsPane.add(getMobileCanvasSizeCheckPane(), BorderLayout.NORTH); + mobileSettingsPane.add(getAdaptivePropertyAutoMatchCheckPane(), BorderLayout.CENTER); + + + mobileOnlyCheck = new UICheckBox(Inter.getLocText("FR-Designer_Set_Mobile_Only_Template")); + mobileOnlyCheck.registerChangeListener(new UIObserverListener() { + @Override + public void doChange() { + boolean mobileOnlyCheckSelected = mobileOnlyCheck.isSelected(); + mobileSettingsPane.setVisible(mobileOnlyCheckSelected); + if (mobileOnlyCheckSelected) { + adaptivePropertyAutoMatchCheck.setSelected(true); + } + } + }); + + contentPane.add(mobileOnlyCheck, BorderLayout.NORTH); + contentPane.add(mobileSettingsPane, BorderLayout.CENTER); + + borderPane.add(contentPane); + this.add(borderPane); + } + + private JPanel getMobileCanvasSizeCheckPane() { + JPanel panel = new JPanel(FRGUIPaneFactory.createBorderLayout()); + mobileCanvasSizeCheck = new UICheckBox(Inter.getLocText("FR-Designer_Set_Mobile_Canvas_Size")); + // 默认勾选,不可取消 + mobileCanvasSizeCheck.setSelected(true); + mobileCanvasSizeCheck.setEnabled(false); + panel.add(mobileCanvasSizeCheck, BorderLayout.NORTH); + panel.add(getCanvasDescPane(), BorderLayout.CENTER); + panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L6, 0)); + return panel; + } + + private JPanel getAdaptivePropertyAutoMatchCheckPane() { + JPanel panel = new JPanel(FRGUIPaneFactory.createBorderLayout()); + adaptivePropertyAutoMatchCheck = new UICheckBox(); + adaptivePropertyAutoMatchCheck.registerChangeListener(new UIObserverListener() { + @Override + public void doChange() { + adaptivePropertyAutoMatchCheck.setText(Inter.getLocText("FR-Designer_Adaptive_Property_Auto_Match")); + } + }); + adaptivePropertyAutoMatchCheck.setSelected(true); + panel.add(adaptivePropertyAutoMatchCheck, BorderLayout.NORTH); + panel.add(getAdaptivePropertyAutoMatchDescPane(), BorderLayout.CENTER); + return panel; + } + + private JPanel getCanvasDescPane() { + + UILabel desc1 = createDescLabel(Inter.getLocText("FR-Designer_Canvas_Size_Lock_Desc")); + UILabel desc2 = createDescLabel(Inter.getLocText("FR-Designer_Mobile_Screen_Match_Desc")); + UILabel desc3 = createDescLabel(Inter.getLocText("FR-Designer_Mobile_Screen_Zoom_In_Desc")); + UILabel desc4 = createDescLabel(Inter.getLocText("FR-Designer_Mobile_Screen_Zoom_Out_Desc")); + + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p, p, p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}}; + Component[][] components = new Component[][]{ + new Component[]{desc1, null}, + new Component[]{desc2, null}, + new Component[]{desc3, null}, + new Component[]{desc4, null} + }; + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W0, IntervalConstants.INTERVAL_L1); + panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1, 0)); + return panel; + } + + private JPanel getAdaptivePropertyAutoMatchDescPane() { + + UILabel desc1 = createDescLabel(Inter.getLocText("FR-Designer_Adaptive_Property_Auto_Match_Desc")); + + JPanel panel = new JPanel(FRGUIPaneFactory.createBorderLayout()); + panel.add(desc1, BorderLayout.CENTER); + panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1, 0)); + return panel; + } + + private UILabel createDescLabel(String desc) { + UILabel label = new UILabel(desc); + label.setForeground(Color.gray); + return label; + } + + @Override + public void populateBean(FormMobileAttr ob) { + if (ob == null) { + ob = new FormMobileAttr(); + } +// this.mobileOnlyCheckPane.populateBean(ob.isRefresh()); + mobileOnlyCheck.setSelected(ob.isMobileOnly()); + adaptivePropertyAutoMatchCheck.setSelected(ob.isAdaptivePropertyAutoMatch()); + } + + @Override + public FormMobileAttr updateBean() { + return null; + } + + @Override + public void updateBean(FormMobileAttr mobileAttr) { + if(mobileAttr != null) { + mobileAttr.setMobileOnly(mobileOnlyCheck.isSelected()); + mobileAttr.setAdaptivePropertyAutoMatch(adaptivePropertyAutoMatchCheck.isSelected()); + } + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Template_Settings"); + } + +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java index 0b39f987d2..f4339c4eb9 100644 --- a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java @@ -13,7 +13,6 @@ import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; -import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JPanel; @@ -21,6 +20,7 @@ import javax.swing.JPanel; import com.fr.base.BaseUtils; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.actions.UpdateAction; import com.fr.design.designer.beans.actions.CopyAction; @@ -107,7 +107,7 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.REPORT_PARA); EastRegionContainerPane.getInstance().replaceWidgetLibPane( FormWidgetDetailPane.getInstance(this)); - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { ParameterPropertyPane parameterPropertyPane = ParameterPropertyPane.getInstance(this); parameterPropertyPane.refreshState(); EastRegionContainerPane.getInstance().addParameterPane(parameterPropertyPane); diff --git a/designer_form/src/com/fr/design/form/util/XCreatorConstants.java b/designer_form/src/com/fr/design/form/util/XCreatorConstants.java index 91cd2007ed..4cced61430 100644 --- a/designer_form/src/com/fr/design/form/util/XCreatorConstants.java +++ b/designer_form/src/com/fr/design/form/util/XCreatorConstants.java @@ -31,7 +31,7 @@ public class XCreatorConstants { public static final Color RESIZE_BOX_BORDER_COLOR = new Color(143, 171, 196); // 当前选取的组件的边框线着色 public static final Color SELECTION_COLOR = new Color(179, 209, 236); - public static final Color FORM_BORDER_COLOR = new Color(200, 201, 205); + public static final Color FORM_BORDER_COLOR = new Color(141, 194, 249); // 设计器区域外边框的颜色和粗细 public static final Border AREA_BORDER = BorderFactory.createLineBorder(new Color(224, 224, 255), 0); // 布局拖拽时的颜色 @@ -43,6 +43,8 @@ public class XCreatorConstants { public static final Color FIT_LAYOUT_POINT_COLOR = new Color(106, 168, 222); // 格子布局的分割线 public static final Color LAYOUT_SEP_COLOR = new Color(210, 210, 210); + // 组件覆盖层颜色 + public static final Color COVER_COLOR = new Color(216, 242, 253); // 伸缩表单操作条的颜色 public static final Color OP_COLOR = new Color(157,228,245); diff --git a/designer_form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java b/designer_form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java index 1d3e146860..bdcadbdfcf 100644 --- a/designer_form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java +++ b/designer_form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java @@ -29,7 +29,8 @@ public class FormHyperlinkGroupPane extends HyperlinkGroupPane{ * * @return 返回Nameable按钮数组. */ - public NameableCreator[] createNameableCreators() { + @Override + public NameableCreator[] createNameableCreators() { NameableCreator[] creators = super.createNameableCreators(); for (int i=0; i implements TreeSelection selected.add((XCreator) path.getLastPathComponent()); } - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { selectionModel.setSelectedCreators(selected); if (formArea != null) { @@ -1433,7 +1433,7 @@ public class FormDesigner extends TargetComponent
implements TreeSelection @Override public void fireCreatorModified(DesignerEvent evt) { - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { return; } if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED @@ -1445,7 +1445,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection if (paths == null) { return; } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { showAuthorityEditPane(); } diff --git a/designer_form/src/com/fr/design/mainframe/FormDesignerUI.java b/designer_form/src/com/fr/design/mainframe/FormDesignerUI.java index 8a40928c36..e9e55800e8 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesignerUI.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesignerUI.java @@ -1,23 +1,23 @@ package com.fr.design.mainframe; import java.awt.AlphaComposite; +import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.geom.Area; import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; import java.util.ArrayList; import javax.swing.JComponent; import javax.swing.SwingUtilities; import javax.swing.plaf.ComponentUI; -import com.fr.base.BaseUtils; import com.fr.base.GraphHelper; import com.fr.base.ScreenResolution; import com.fr.base.Utils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; @@ -33,7 +33,6 @@ import com.fr.design.utils.ComponentUtils; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; -import com.fr.stable.CoreGraphHelper; /** * FormDesigner的UI类,是一个有状态的UI类,它根据FormDesigner的当前状态画出 @@ -85,7 +84,7 @@ public class FormDesignerUI extends ComponentUI { paintSelection(g); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { paintAuthorityDetails(g, designer.getRootComponent()); } @@ -266,6 +265,7 @@ public class FormDesignerUI extends ComponentUI { bounds.y -= designer.getArea().getVerticalValue(); drawResizingThumbs(g, selectionModel.getSelection().getDirections(), bounds.x, bounds.y, bounds.width, bounds.height); + //选中时边框颜色 g.setColor(XCreatorConstants.FORM_BORDER_COLOR); for (XCreator creator : selectionModel.getSelection().getSelectedCreators()) { @@ -277,7 +277,7 @@ public class FormDesignerUI extends ComponentUI { } else if (designer.getRootComponent().acceptType(XWFitLayout.class)) { resetCreatorBounds(creatorBounds); } - GraphHelper.draw(g, creatorBounds, Constants.LINE_MEDIUM); + creator.paintBorder(g, creatorBounds); } } diff --git a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java index a9651c7fa8..6ea8962ef5 100644 --- a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.core.WidgetOption; @@ -102,7 +102,7 @@ public class FormToolBarButton extends JButton implements MouseListener { //该button只在报表块工具栏中使用, //parent只有FormToolBarPane一种,故可以直接强转 final FormToolBarPane toolBarPane = (FormToolBarPane) this.getParent(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { auhtorityMouseAction(); return; } diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index f4d5a30b8f..87c575fd2b 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -1,6 +1,8 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; +import com.fr.base.PaperSize; +import com.fr.base.Parameter; import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignState; import com.fr.design.actions.core.WorkBookSupportable; @@ -56,12 +58,23 @@ import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.page.PaperSettingProvider; +import com.fr.report.worksheet.FormElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; import com.fr.stable.bridge.StableFactory; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; @@ -330,7 +343,7 @@ public class JForm extends JTemplate implements BaseJForm { ParameterPropertyPane.getInstance().setAddParaPaneVisible(isAddParaPaneVisible(comp), this); editingComponent = comp.createToolPane(this, formDesign); EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.FORM); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { EastRegionContainerPane.getInstance().replaceWidgetSettingsPane( ComparatorUtils.equals(editingComponent.getClass(), NoSupportAuthorityEdit.class) ? editingComponent : createAuthorityEditPane()); } else { @@ -568,7 +581,7 @@ public class JForm extends JTemplate implements BaseJForm { throw new RuntimeException(e); } - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { this.authorityUndoState = u; } else { this.undoState = u; @@ -644,7 +657,7 @@ public class JForm extends JTemplate implements BaseJForm { public JPanel getEastUpPane() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { if (formDesign.isSupportAuthority()) { return new AuthorityPropertyPane(this); } else { @@ -670,6 +683,11 @@ public class JForm extends JTemplate implements BaseJForm { return UIConstants.RUN_BIG_ICON; } + @Override + public Parameter[] getJTemplateParameters() { + return this.getTarget().getTemplateParameters(); + } + @Override /** * 创建菜单项Preview @@ -703,7 +721,7 @@ public class JForm extends JTemplate implements BaseJForm { DesignerContext.getDesignerFrame().resetToolkitByPlus(JForm.this); //表单切换后拖不进去组件是因为找不到designer WidgetToolBarPane.getInstance(formDesign); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { if (formDesign.isSupportAuthority()) { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION); EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(new AuthorityPropertyPane(this)); @@ -826,8 +844,13 @@ public class JForm extends JTemplate implements BaseJForm { HashMap designerClass = new HashMap(); designerClass.put(Constants.ARG_0, FormElementCaseProvider.class); - Object[] designerArg = new Object[]{formDesign.getElementCase()}; - return StableFactory.getMarkedInstanceObjectFromClass(FormECDesignerProvider.XML_TAG, designerArg, designerClass, FormECDesignerProvider.class); + Object[] designerArg = new Object[]{formDesign.getElementCase(), getTarget()}; + FormECDesignerProvider formECDesigner = StableFactory.getMarkedInstanceObjectFromClass(FormECDesignerProvider.XML_TAG, designerArg, designerClass, FormECDesignerProvider.class); + // 如果是移动端专属模版,需要修改页面大小并显示边缘线 + PaperSettingProvider paperSetting = ((FormElementCase)formECDesigner.getEditingElementCase()).getReportSettings().getPaperSetting(); + paperSetting.setPaperSize(getTarget().getFormMobileAttr().isMobileOnly() ? PaperSize.PAPERSIZE_MOBILE : new PaperSize()); + + return formECDesigner; } /** diff --git a/designer_form/src/com/fr/design/mainframe/MobileWidgetListPane.java b/designer_form/src/com/fr/design/mainframe/MobileWidgetListPane.java new file mode 100644 index 0000000000..3d2c67cdaa --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/MobileWidgetListPane.java @@ -0,0 +1,71 @@ +package com.fr.design.mainframe; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.gui.controlpane.UISimpleListControlPane; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WSortLayout; +import com.fr.general.NameObject; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by plough on 2018/1/31. + */ +public class MobileWidgetListPane extends UISimpleListControlPane { + public static final String LIST_NAME = "Widget_List"; + + private FormDesigner designer; + private WSortLayout wSortLayout; + private String[] widgetNameList; + + public MobileWidgetListPane(FormDesigner designer, WSortLayout wSortLayout) { + super(); + this.designer = designer; + this.wSortLayout = wSortLayout; + widgetNameList = getData(); + + List nameObjectList = new ArrayList(); + for (String name : widgetNameList) { + nameObjectList.add(new NameObject(name, null)); + } + populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + } + + /** + * 保存移动端控件列表顺序 + */ + public void updateToDesigner() { + Nameable[] nameableList = update(); + List newMobileWidgetList = new ArrayList<>(); + for (Nameable nameable : nameableList) { + newMobileWidgetList.add(nameable.getName()); + } + wSortLayout.updateSortedMobileWidgetList(newMobileWidgetList); + } + + /** + * 获取选中控件的控件列表 + * + * @return List widgetNameList + */ + private String[] getData() { + //选择的控件 + XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + Widget selectedModel = selectedCreator != null ? selectedCreator.toData() : null; + + if (selectedModel == null || !selectedModel.acceptType(WSortLayout.class)) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + + // 选择的控件有两种类型,一种是WLayout,代表容器,一种是Widget,代表控件 + java.util.List mobileWidgetList = ((WSortLayout) selectedModel).getOrderedMobileWidgetList(); + String[] widgetNames = new String[mobileWidgetList.size()]; + for (int i = 0; i < mobileWidgetList.size(); i++) { + widgetNames[i] = mobileWidgetList.get(i); + } + return widgetNames; + } +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java index 1c0e8603fa..4379d517b3 100644 --- a/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java +++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe; -import com.fr.base.*; +import com.fr.base.vcs.DesignerMode; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.gui.ilable.UILabel; @@ -178,7 +178,7 @@ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMot @Override public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } if (lastPressEvent == null) { diff --git a/designer_form/src/com/fr/design/mainframe/ToolBarButton.java b/designer_form/src/com/fr/design/mainframe/ToolBarButton.java index 770bfecb33..3dd88ab532 100644 --- a/designer_form/src/com/fr/design/mainframe/ToolBarButton.java +++ b/designer_form/src/com/fr/design/mainframe/ToolBarButton.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe; -import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.core.WidgetOption; import com.fr.design.designer.creator.XCreatorUtils; @@ -70,7 +70,7 @@ public class ToolBarButton extends UIButton implements MouseListener, MouseMotio @Override public void mouseDragged(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } if (lastPressEvent == null) { diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index 75a1bed357..1e5f97136c 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -7,21 +7,18 @@ import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; import com.fr.design.designer.properties.EventPropertyTable; -import com.fr.design.dialog.BasicPane; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itable.AbstractPropertyTable; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.widget.ui.FormWidgetCardPane; import com.fr.design.widget.ui.designer.mobile.MobileWidgetDefinePane; -import com.fr.form.ui.Widget; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import javax.swing.*; -import javax.swing.border.LineBorder; -import javax.swing.table.JTableHeader; import java.awt.*; import java.util.ArrayList; import java.util.List; @@ -33,22 +30,15 @@ import java.util.Set; */ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane { - private static final String PARA = "para"; - private static final String BODY = "body"; + private static final int PADDING = 10; + private static final int PADDING_M = 12; private FormWidgetCardPane formWidgetCardPane; // 控件的属性表 private EventPropertyTable eventTable; // 控件的事件表 private List widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab private List mobileExtraPropertyPanes; // 保存9.0设计器下移动端拓展的属性tab,舍弃JTable private FormDesigner designer; // 当前designer private UIScrollPane psp; // 用来装载属性表table的容器 - private UIScrollPane esp; //用来装载事件table的容器 private JPanel wsp; // 装载移动端tab的容器,包括移动端属性表和控件拓展的移动端属性表 - private MobileParaWidgetTable mobileParaWidgetTable; // 参数面板的移动端属性tab(和body的移动端属性tab区别是没有标签名column) - private MobileWidgetTable mobileWidgetTable; // body的移动端属性tab - private UIScrollPane downPanel; // 这个滚动容器是用于装载centerPane的 - private JPanel centerPane; // 此centerPane采用的是cardLayout布局,装载着mobileWidgetTable和mobileBodyWidgetTable - private CardLayout cardLayout; // 卡片布局,选中参数面板时显示mobileWidgetTable,选中body时显示mobileBodyWidgetTable - private JTableHeader header;//把表头单独get出来作为一个组件 private UIHeadGroup tabsHeaderIconPane; private XComponent lastAffectedCreator; @@ -122,6 +112,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope if (mobileExtraPropertyPanes != null) { for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) { extraPane.initPropertyGroups(designer); + extraPane.populate(designer); } } if (widgetPropertyTables != null) { @@ -156,33 +147,10 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope //加上表头后,这里不再使用borderLayout布局,而采用BoxLayout布局 wsp = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); wsp.setBorder(null); - mobileParaWidgetTable = new MobileParaWidgetTable(designer); - mobileWidgetTable = new MobileWidgetTable(designer); designer.addDesignerEditListener(new MobileWidgetDesignerAdapter()); - centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - cardLayout = (CardLayout) centerPane.getLayout(); - centerPane.add(mobileParaWidgetTable, PARA); - // 采用卡片布局的容器必须指定卡片名字,如果没有卡片名字 - // 就会出现:Exception in thread "main" java.lang.IllegalArgumentException: - // cannot add to layout: constraint must be a string - // 第二个参数代表卡片的名字。后来show方法调用时通过名字找到要显示的卡片 - centerPane.add(mobileWidgetTable, BODY); //这两句代码,是把JTable放到一个JPanel中去了,表头不会显示, - //只有放到JScrollPanel中去表头才能正常显示,这就是MobileWidgetTable中定义了表头却没有显示的原因! - //解决方案:MobileWidgetTable实在无法直接放到JScrollPanel中去的时候,应该把表头get出来单独作为一个组件显示 - - if (hasSelectParaPane(designer)) { - cardLayout.show(centerPane, PARA); - header = mobileParaWidgetTable.getTableHeader(); - } else { - cardLayout.show(centerPane, BODY); - header = mobileWidgetTable.getTableHeader(); - } - downPanel = new UIScrollPane(centerPane); - downPanel.setBorder(new LineBorder(Color.GRAY)); //获取拓展移动端属性tab WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders(); - addWidgetAttr(widgetAttrProviders); } @@ -217,13 +185,13 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope * @param widgetAttrProviders 拓展的tab */ private void addWidgetAttr(WidgetPropertyUIProvider[] widgetAttrProviders) { - if (widgetAttrProviders.length == 0) { // 判断有没有拓展的tab,没有就使用原来的 - wsp.add(header); - wsp.add(downPanel); + if (widgetAttrProviders.length == 0) { // 判断有没有拓展的tab,提示"无可用配置项" + wsp.add(getUnavailablePane()); } else { for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) { MobileWidgetDefinePane extraPane = (MobileWidgetDefinePane) widgetAttrProvider.createWidgetAttrPane(); if (extraPane != null) { + extraPane.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, PADDING, PADDING_M)); mobileExtraPropertyPanes.add(extraPane); wsp.add(extraPane); } @@ -232,29 +200,20 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope widgetPropertyTables.add(propertyTable); designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(formWidgetCardPane)); - UIScrollPane uiScrollPane = new UIScrollPane(getExtraBodyTable(propertyTable)); + UIScrollPane uiScrollPane = new UIScrollPane(propertyTable); wsp.add(uiScrollPane); } } } } - /** - * 如果是body的拓展属性表,那么要额外加上一张控件顺序表 - * - * @return - */ - private Component getExtraBodyTable(AbstractPropertyTable abstractPropertyTable) { - Widget selection = designer.getSelectionModel().getSelection().getSelectedCreator().toData(); - if ("body".equals(selection.getWidgetName())) { - JPanel jPanel = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - jPanel.add(abstractPropertyTable); - MobileWidgetTable mobileWidgetTable = new MobileWidgetTable(designer); - jPanel.add(mobileWidgetTable.getTableHeader()); - jPanel.add(mobileWidgetTable); - return jPanel; - } - return abstractPropertyTable; + // "无可用配置项"面板 + private JPanel getUnavailablePane() { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel label = new UILabel(Inter.getLocText("FR-Designer_No_Settings_Available")); + label.setHorizontalAlignment(SwingConstants.CENTER); + panel.add(label); + return panel; } private void initTabPane() { diff --git a/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java b/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java index e627de1397..3895755b09 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetToolBarPane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; +import com.fr.base.vcs.DesignerMode; import com.fr.design.bridge.DesignToolbarProvider; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.core.FormWidgetOption; @@ -110,7 +111,7 @@ public class WidgetToolBarPane extends BasicPane implements DesignToolbarProvide private void checkEnable() { for (JComponent comp : componentsList4Form) { - comp.setEnabled(!BaseUtils.isAuthorityEditing()); + comp.setEnabled(!DesignerMode.isAuthorityEditing()); } } @@ -137,7 +138,7 @@ public class WidgetToolBarPane extends BasicPane implements DesignToolbarProvide chartButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { return; } if (chartWindow == null) { diff --git a/designer_form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java b/designer_form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java index 4f67187085..95df79b964 100644 --- a/designer_form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java +++ b/designer_form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java @@ -6,13 +6,18 @@ import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.form.mobile.FormMobileAttrPane; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.menu.MenuKeySet; import com.fr.form.main.Form; import com.fr.form.main.mobile.FormMobileAttr; import com.fr.general.Inter; +import com.fr.plugin.ExtraClassManager; +import com.fr.stable.ReportFunctionProcessor; +import com.fr.stable.fun.FunctionProcessor; -import javax.swing.*; +import javax.swing.KeyStroke; import java.awt.event.ActionEvent; /** @@ -47,8 +52,16 @@ public class FormMobileAttrAction extends JTemplateAction { BasicDialog dialog = mobileAttrPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { - formTpl.setFormMobileAttr(mobileAttrPane.updateBean()); - jf.fireTargetModified(); + FormMobileAttr formMobileAttr = mobileAttrPane.updateBean(); + formTpl.setFormMobileAttr(formMobileAttr); + ((FormArea)jf.getFormDesign().getParent()).onMobileAttrModified(); + WidgetPropertyPane.getInstance().refreshDockingView(); + if (formMobileAttr.isMobileOnly()) { + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(ReportFunctionProcessor.MOBILE_TEMPLATE_FRM); + } + } } }); dialog.setVisible(true); diff --git a/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java b/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java index 841e9c2908..538f26099d 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java +++ b/designer_form/src/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.widget.ui; +import com.fr.base.BaseUtils; import com.fr.design.data.DataCreatorUI; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; @@ -16,7 +17,9 @@ import com.fr.design.dialog.BasicScrollPane; import com.fr.design.foldablepane.UIExpandablePane; import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.FormDesigner; import com.fr.design.widget.DataModify; import com.fr.design.widget.FormWidgetDefinePaneFactoryBase; @@ -34,6 +37,7 @@ import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.JComponent; +import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.BorderLayout; @@ -208,6 +212,12 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { currentEditorDefinePane.setGlobalName(getGlobalName()); Widget widget = currentEditorDefinePane.updateBean(); if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Basic")) && widgetPropertyPane != null) { + UITextField widgetNameField = widgetPropertyPane.getWidgetNameField(); + if (designer.getTarget().isNameExist(widgetNameField.getText()) && !ComparatorUtils.equals(widgetNameField.getText(), widget.getWidgetName())) { + widgetNameField.setText(widget.getWidgetName()); + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Form_Widget_Rename_Failure"), Inter.getLocText("FR-Designer_Joption_News"), JOptionPane.ERROR_MESSAGE, BaseUtils.readIcon("com/fr/design/form/images/joption_failure.png")); + return; + } widgetPropertyPane.update(widget); xCreator.resetCreatorName(widget.getWidgetName()); xCreator.resetVisible(widget.isVisible()); diff --git a/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java b/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java index 6cfa4a2667..6cee032503 100644 --- a/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java +++ b/designer_form/src/com/fr/design/parameter/RootDesignDefinePane.java @@ -53,7 +53,6 @@ public class RootDesignDefinePane extends AbstractDataModify { initComponent(); } - public void initComponent() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); designerWidth = new UISpinner(1, Integer.MAX_VALUE, 1); diff --git a/designer_form/src/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java index ad47924d43..5a3c37bf9e 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java @@ -9,8 +9,13 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.widget.ui.designer.component.FontSizeComboPane; import com.fr.form.ui.FieldEditor; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WParameterLayout; +import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import javax.swing.*; @@ -70,6 +75,12 @@ public abstract class FieldEditorDefinePane extends Abstr e.setAllowBlank(this.allowBlankCheckBox.isSelected()); e.setErrorMessage(this.errorMsgTextField.getText()); e.setFontSize(fontSizePane.getValue()); + designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + if (!ComparatorUtils.equals(e.getLabelName(), labelNameTextField.getText())) { + XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + Widget selectedWidget = xCreator.toData(); + ((WParameterLayout) designer.getParaComponent().toData()).setNameTagModified(selectedWidget.getWidgetName(), true); + } e.setLabelName(labelNameTextField.getText()); return e; } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java index 6facca8573..cd20e74396 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java @@ -27,7 +27,6 @@ public class TextFieldEditorDefinePane extends FieldEditorDefinePane super(xCreator); } - @Override protected JPanel setFirstContentPane() { regPane = createRegPane(); diff --git a/designer_form/src/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java new file mode 100644 index 0000000000..f307152849 --- /dev/null +++ b/designer_form/src/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java @@ -0,0 +1,123 @@ +package com.fr.design.widget.ui.designer.mobile; + +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.MobileWidgetListPane; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.ui.container.WSortLayout; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; +import java.lang.reflect.Method; + +/** + * Created by plough on 2018/2/1. + */ +public class BodyMobileDefinePane extends MobileWidgetDefinePane { + private XCreator bodyCreator; + private FormDesigner designer; + private AttributeChangeListener changeListener; + private UICheckBox appRelayoutCheck; + private MobileWidgetListPane mobileWidgetListPane; + + public BodyMobileDefinePane(XCreator xCreator) { + this.bodyCreator = xCreator; + } + + @Override + public void initPropertyGroups(Object source) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + this.add(getMobilePropertyPane(), BorderLayout.NORTH); + this.add(getMobileWidgetListPane(), BorderLayout.CENTER); + this.repaint(); + } + + // 手机属性 + private UIExpandablePane getMobilePropertyPane() { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + appRelayoutCheck = new UICheckBox(Inter.getLocText("FR-Designer-App_ReLayout"), true); + appRelayoutCheck.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + panel.add(appRelayoutCheck); + + final JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panelWrapper.add(panel, BorderLayout.NORTH); + + return new UIExpandablePane(Inter.getLocText("FR-Designer_Properties_Mobile"), 280, 20, panelWrapper); + } + + // 控件顺序 + private UIExpandablePane getMobileWidgetListPane() { + mobileWidgetListPane = new MobileWidgetListPane(designer, (WSortLayout) bodyCreator.toData()); + mobileWidgetListPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0)); + JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panelWrapper.add(mobileWidgetListPane, BorderLayout.CENTER); + + return new UIExpandablePane(Inter.getLocText("FR-Designer_WidgetOrder"), 280, 20, panelWrapper); + } + + private void bindListeners2Widgets() { + reInitAllListeners(); + this.changeListener = new AttributeChangeListener() { + @Override + public void attributeChange() { + update(); + } + }; + } + + /** + * 后台初始化所有事件. + */ + private void reInitAllListeners() { + initListener(this); + } + + // body是否开启手机重布局 + private boolean isAppRelayout() { + boolean result = false; + try { + Method m = bodyCreator.toData().getClass().getMethod("isAppRelayout"); + result = (boolean)m.invoke(bodyCreator.toData()); + } catch (Exception e) { + // do nothing + } + return result; + } + + private void setAppRelayout(boolean appRelayoutSeleted) { + if (appRelayoutSeleted == isAppRelayout()) { + return; + } + try { + Method m = bodyCreator.toData().getClass().getMethod("setAppRelayout", boolean.class); + m.invoke(bodyCreator.toData(), appRelayoutSeleted); + } catch (Exception e) { + // do nothing + } + } + + @Override + public void populate(FormDesigner designer) { + this.designer = designer; + appRelayoutCheck.setSelected(isAppRelayout()); + + // 数据 populate 完成后,再设置监听 + this.bindListeners2Widgets(); + this.addAttributeChangeListener(changeListener); + } + + @Override + public void update() { + setAppRelayout(appRelayoutCheck.isSelected()); + mobileWidgetListPane.updateToDesigner(); + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); + } +} diff --git a/designer_form/src/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java new file mode 100644 index 0000000000..c3a7232107 --- /dev/null +++ b/designer_form/src/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java @@ -0,0 +1,192 @@ +package com.fr.design.widget.ui.designer.mobile; + +import com.fr.base.mobile.ChartMobileAttrProvider; +import com.fr.base.mobile.ChartMobileFitAttrState; +import com.fr.base.mobile.ChartMobileFitAttrStateProvider; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.designer.properties.items.Item; +import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.FormFunctionProcessor; +import com.fr.form.ui.BaseChartEditor; +import com.fr.form.ui.container.WFitLayout; +import com.fr.general.Inter; +import com.fr.plugin.ExtraClassManager; +import com.fr.stable.StringUtils; +import com.fr.stable.fun.FunctionProcessor; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +/** + * Created by plough on 2018/1/18. + */ +public class ChartEditorDefinePane extends MobileWidgetDefinePane{ + private static final Item[] ITEMS = { + new Item(ChartMobileFitAttrState.AUTO.description(), ChartMobileFitAttrState.AUTO), + new Item(ChartMobileFitAttrState.AREA.description(), ChartMobileFitAttrState.AREA), + new Item(ChartMobileFitAttrState.PROPORTION.description(), ChartMobileFitAttrState.PROPORTION) + }; + + private XCreator xCreator; // 当前选中控件的xCreator + private FormDesigner designer; // 当前设计器 + private UIComboBox zoomOutComboBox;// 缩小逻辑下拉框 + private AttributeChangeListener changeListener; + private UILabel tipLabel; + + public ChartEditorDefinePane (XCreator xCreator) { + this.xCreator = xCreator; + } + + @Override + public void initPropertyGroups(Object source) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + JPanel mobileSettingsPane; + if (isInAbsoluteLayout()) { + mobileSettingsPane = getUnavailableTipPane(Inter.getLocText("FR-Designer_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout")); + } else if (!isAppRelayout()) { + mobileSettingsPane = getUnavailableTipPane(Inter.getLocText("FR-Designer_Tip_Chart_Adaptivity_Unavailable")); + } else { + mobileSettingsPane = getMobileSettingsPane(); + } + this.add(mobileSettingsPane, BorderLayout.NORTH); + this.repaint(); + } + + private boolean isInAbsoluteLayout() { + Container parent = xCreator.getParent(); + while (parent != null) { + if (parent instanceof XWAbsoluteLayout && !(parent instanceof XWAbsoluteBodyLayout)) { + return true; + } + parent = parent.getParent(); + } + return false; + } + + // body是否开启手机重布局 + private boolean isAppRelayout() { + return ((WFitLayout)designer.getRootComponent().toData()).isAppRelayout(); + } + + private JPanel getUnavailableTipPane(String tipText) { + JPanel panel = new JPanel(new BorderLayout()); + UILabel unavailableTipLabel = new UILabel(); + unavailableTipLabel.setText("" + tipText + ""); + unavailableTipLabel.setForeground(Color.gray); + panel.add(unavailableTipLabel, BorderLayout.NORTH); + return panel; + } + + private UIExpandablePane getMobileSettingsPane() { + initZoomOutComboBox(); + + tipLabel = new UILabel(); + tipLabel.setForeground(Color.gray); + updateTipLabel(); + + Component[][] components = new Component[][]{ + new Component[] {new UILabel(Inter.getLocText("FR-Designer_Zoom_In_Logic"), SwingConstants.LEFT), new UILabel(ChartMobileFitAttrState.PROPORTION.description())}, + new Component[] {new UILabel(Inter.getLocText("FR-Designer_Zoom_Out_Logic"), SwingConstants.LEFT), zoomOutComboBox}, + new Component[] {tipLabel, null} + }; + + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p, p}; + double[] columnSize = {p,f}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; + final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 30, LayoutConstants.VGAP_LARGE); + panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + final JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panelWrapper.add(panel, BorderLayout.NORTH); + + return new UIExpandablePane(Inter.getLocText("FR-Designer_Chart_Adaptivity"), 280, 20, panelWrapper); + } + + private void initZoomOutComboBox() { + this.zoomOutComboBox = new UIComboBox(ITEMS); + } + + + private void updateTipLabel() { + ChartMobileFitAttrState fitAttrState = (ChartMobileFitAttrState) ((Item)zoomOutComboBox.getSelectedItem()).getValue(); + // 使用 html,可以自动换行 + tipLabel.setText("" + fitAttrState.tip() + ""); + } + + private void bindListeners2Widgets() { + reInitAllListeners(); + this.changeListener = new AttributeChangeListener() { + @Override + public void attributeChange() { + update(); + } + }; + } + + /** + * 后台初始化所有事件. + */ + private void reInitAllListeners() { + initListener(this); + } + + @Override + public void populate(FormDesigner designer) { + this.designer = designer; + + if (!isAppRelayout() || isInAbsoluteLayout()) { + return; + } + + BaseChartEditor chartEditor = (BaseChartEditor)xCreator.toData(); + ChartMobileFitAttrStateProvider zoomOutAttr = chartEditor.getMobileAttr().getZoomOutAttr(); + this.zoomOutComboBox.setSelectedItem(new Item(zoomOutAttr.description(), zoomOutAttr)); + updateTipLabel(); + + // 数据 populate 完成后,再设置监听 + this.bindListeners2Widgets(); + this.zoomOutComboBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + // 只响应选中事件 + if (e.getStateChange() != ItemEvent.SELECTED) { + return; + } + updateTipLabel(); + ChartMobileFitAttrState selectedAttr = (ChartMobileFitAttrState)((Item)e.getItem()).getValue(); + if (selectedAttr.getState() != ChartMobileFitAttrState.AUTO.getState()) { + // 功能埋点 + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(FormFunctionProcessor.MOBILE_CHART_ADAPTIVITY); + } + } + } + }); + this.addAttributeChangeListener(changeListener); + } + + @Override + public void update() { + ChartMobileAttrProvider mobileAttr = ((BaseChartEditor)xCreator.toData()).getMobileAttr(); + mobileAttr.setZoomInAttr(ChartMobileFitAttrState.PROPORTION); + mobileAttr.setZoomOutAttr((ChartMobileFitAttrState)((Item)zoomOutComboBox.getSelectedItem()).getValue()); + DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); // 触发设计器保存按钮亮起来 + } +} diff --git a/designer_form/src/com/fr/design/widget/ui/designer/mobile/ElementCaseDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/mobile/ElementCaseDefinePane.java index 70c3b94f63..cbfbfb68cb 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/mobile/ElementCaseDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/mobile/ElementCaseDefinePane.java @@ -18,9 +18,14 @@ import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.ui.ElementCaseEditor; import com.fr.general.Inter; +import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Component; /** * 报表块-移动端属性面板 @@ -28,6 +33,7 @@ import java.awt.*; * Created by fanglei on 2017/8/8. */ public class ElementCaseDefinePane extends MobileWidgetDefinePane{ + private static final double MAX_HEIGHT_LIMIT = 0.8; private static final Item[] ITEMS = { new Item(MobileFitAttrState.HORIZONTAL.description(), MobileFitAttrState.HORIZONTAL), new Item(MobileFitAttrState.VERTICAL.description(), MobileFitAttrState.VERTICAL), @@ -48,25 +54,6 @@ public class ElementCaseDefinePane extends MobileWidgetDefinePane{ this.xCreator = xCreator; } - @Override - protected void initContentPane() {} - - @Override - protected JPanel createContentPane() { - return null; - } - - @Override - public String getIconPath() { - return ""; - } - - @Override - public String title4PopupWindow() { - return "ElementCase"; - } - - @Override public void initPropertyGroups(Object source) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); @@ -75,7 +62,25 @@ public class ElementCaseDefinePane extends MobileWidgetDefinePane{ this.vComboBox = new UIComboBox(ITEMS); this.heightRestrictCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Mobile-Height-Limit")); this.maxHeightLabel = new UILabel(Inter.getLocText("FR-Designer_Mobile-Height-Percent"), SwingConstants.LEFT); - this.maxHeightSpinner = new UISpinner(0, 1, 0.01, 0.75); + this.maxHeightSpinner = new UISpinner(0, MAX_HEIGHT_LIMIT, 0.01, 0.75) { + public void setValue(double value) { + String warningText = StringUtils.EMPTY; + if (value > MAX_HEIGHT_LIMIT) { + warningText = Inter.getLocText("FR-Designer_Mobile-Warning"); + } else if (value < 0) { + // 弹窗提示 + warningText = Inter.getLocText("FR-Designer_Max_Height_Cannot_Be_Negative"); + } + if (StringUtils.isNotEmpty(warningText)) { + // 弹窗提示 + JOptionPane.showMessageDialog(null, + warningText, + Inter.getLocText("FR-Designer_Tooltips"), + JOptionPane.PLAIN_MESSAGE); + } + super.setValue(value); + } + }; maxHeightSpinner.setVisible(false); maxHeightLabel.setVisible(false); diff --git a/designer_form/src/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java index 49d0b59a52..ac4de096a6 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java @@ -3,6 +3,8 @@ package com.fr.design.widget.ui.designer.mobile; import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; import com.fr.design.mainframe.FormDesigner; +import javax.swing.*; + /** * 所有移动端需要拓展的属性面板均继承此类 * @@ -23,4 +25,14 @@ public abstract class MobileWidgetDefinePane extends AbstractAttrNoScrollPane{ * 从属性面板把数据传到后台 */ public abstract void update(); + + // 暂不需要此方法 + @Override + protected void initContentPane() {} + + // 暂不需要此方法 + @Override + protected JPanel createContentPane() { + return new JPanel(); + } } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/mobile/ParaMobileDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/mobile/ParaMobileDefinePane.java new file mode 100644 index 0000000000..91c26678f4 --- /dev/null +++ b/designer_form/src/com/fr/design/widget/ui/designer/mobile/ParaMobileDefinePane.java @@ -0,0 +1,80 @@ +package com.fr.design.widget.ui.designer.mobile; + +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.MobileWidgetListPane; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.ui.container.WSortLayout; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by plough on 2018/2/5. + */ +public class ParaMobileDefinePane extends MobileWidgetDefinePane { + private XCreator paraCreator; + private FormDesigner designer; + private AttributeChangeListener changeListener; + private MobileWidgetListPane mobileWidgetListPane; + + public ParaMobileDefinePane(XCreator xCreator) { + this.paraCreator = xCreator; + } + + @Override + public void initPropertyGroups(Object source) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + this.add(getMobileWidgetListPane(), BorderLayout.CENTER); + this.repaint(); + } + + // 控件顺序 + private UIExpandablePane getMobileWidgetListPane() { + mobileWidgetListPane = new MobileWidgetListPane(designer, (WSortLayout) paraCreator.toData()); + mobileWidgetListPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0)); + JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panelWrapper.add(mobileWidgetListPane, BorderLayout.CENTER); + + return new UIExpandablePane(Inter.getLocText("FR-Designer_WidgetOrder"), 280, 20, panelWrapper); + } + + private void bindListeners2Widgets() { + reInitAllListeners(); + this.changeListener = new AttributeChangeListener() { + @Override + public void attributeChange() { + update(); + } + }; + } + + /** + * 后台初始化所有事件. + */ + private void reInitAllListeners() { + initListener(this); + } + + + @Override + public void populate(FormDesigner designer) { + this.designer = designer; + + // 设置监听 + this.bindListeners2Widgets(); + this.addAttributeChangeListener(changeListener); + } + + @Override + public void update() { + mobileWidgetListPane.updateToDesigner(); + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); + } +}