diff --git a/designer/src/com/fr/design/actions/cell/style/AlignmentAction.java b/designer/src/com/fr/design/actions/cell/style/AlignmentAction.java index 326b47f650..c3b690c97e 100644 --- a/designer/src/com/fr/design/actions/cell/style/AlignmentAction.java +++ b/designer/src/com/fr/design/actions/cell/style/AlignmentAction.java @@ -1,111 +1,134 @@ package com.fr.design.actions.cell.style; -import javax.swing.Icon; - import com.fr.base.BaseUtils; import com.fr.base.Style; import com.fr.base.chart.BaseChartCollection; -import com.fr.design.constants.UIConstants; import com.fr.design.actions.ButtonGroupAction; import com.fr.design.actions.utils.ReportActionUtils; +import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.general.Inter; +import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.mainframe.ElementCasePane; +import com.fr.general.Inter; import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.Selection; import com.fr.report.cell.FloatElement; import com.fr.report.elementcase.TemplateElementCase; +import com.fr.stable.Constants; + +import javax.swing.*; public class AlignmentAction extends ButtonGroupAction implements StyleActionInterface { - public AlignmentAction(ElementCasePane t, Icon[] iconArray, - Integer[] valueArray) { - super(t, iconArray, valueArray); - } - - - /** - * executeStyle - * - * @param style - * @param selectedStyle - * @return style - */ - public Style executeStyle(Style style, Style selectedStyle) { - return style.deriveHorizontalAlignment(getSelectedValue()); - } - - /** - * 更新Style - * - * @param style style - */ - public void updateStyle(Style style) { - setSelectedIndex(BaseUtils.getAlignment4Horizontal(style)); - } - - /** - * executeActionReturnUndoRecordNeeded - * - * @return - */ - public boolean executeActionReturnUndoRecordNeeded() { - ElementCasePane reportPane = this.getEditingComponent(); - if (reportPane == null) { - return false; - } - - return ReportActionUtils.executeAction(this, reportPane); - } - - /** - * update - */ - public void update() { - super.update(); - - //peter:如果当前没有ReportFrame,不需要继续. - if (!this.isEnabled()) { - return; - } - - //got simple cell element from row and column - ElementCasePane reportPane = this.getEditingComponent(); - if (reportPane == null) { - this.setEnabled(false); - return; - } - Selection cs = reportPane.getSelection(); - TemplateElementCase tplEC = reportPane.getEditingElementCase(); - - if (tplEC != null && cs instanceof FloatSelection) { - FloatElement selectedFloat = tplEC.getFloatElement(((FloatSelection) cs).getSelectedFloatName()); - Object value = selectedFloat.getValue(); - if (value instanceof BaseChartCollection) { - this.setEnabled(false); - return; - } - } - this.updateStyle(ReportActionUtils.getCurrentStyle(reportPane)); - } - - /** - * 创建工具条,且有提示 - * - * @return - */ - public UIButtonGroup createToolBarComponent() { - UIButtonGroup group = super.createToolBarComponent(); - if (group != null) { - group.setForToolBarButtonGroup(true); - group.setAllToolTips(new String[]{Inter.getLocText("StyleAlignment-Left"), Inter.getLocText("Center"), Inter.getLocText("StyleAlignment-Right")}); - } - for (int i = 0; i < 3; i++) { - group.getButton(i).setRoundBorder(true, UIConstants.ARC); - group.getButton(i).setBorderPainted(true); - } - return group; - } + private static final Icon[] normalBlackIcon = new Icon[]{ + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png")}; + + private static final Icon[] toggleWhiteIcon = new Icon[]{ + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal_white.png"), + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal_white.png"), + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal_white.png")}; + + private static final Integer[] valueArray = new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT}; + + public AlignmentAction(ElementCasePane t) { + super(t, normalBlackIcon, valueArray); + } + + + /** + * executeStyle + * + * @param style + * @param selectedStyle + * @return style + */ + public Style executeStyle(Style style, Style selectedStyle) { + return style.deriveHorizontalAlignment(getSelectedValue()); + } + + /** + * 更新Style + * + * @param style style + */ + public void updateStyle(Style style) { + UIButtonGroup buttonGroup = createToolBarComponent(); + int selected = BaseUtils.getAlignment4Horizontal(style); + for (int i = 0; i < normalBlackIcon.length; i++) { + UIToggleButton button = buttonGroup.getButton(i); + Icon currentIcon = button.getIcon(); + Icon newIcon = selected == valueArray[i] ? toggleWhiteIcon[i] : normalBlackIcon[i]; + if (newIcon != currentIcon) { + button.setIcon(newIcon); + } + } + setSelectedIndex(selected); + } + + /** + * executeActionReturnUndoRecordNeeded + * + * @return + */ + public boolean executeActionReturnUndoRecordNeeded() { + ElementCasePane reportPane = this.getEditingComponent(); + if (reportPane == null) { + return false; + } + + return ReportActionUtils.executeAction(this, reportPane); + } + + /** + * update + */ + public void update() { + super.update(); + + //peter:如果当前没有ReportFrame,不需要继续. + if (!this.isEnabled()) { + return; + } + + //got simple cell element from row and column + ElementCasePane reportPane = this.getEditingComponent(); + if (reportPane == null) { + this.setEnabled(false); + return; + } + Selection cs = reportPane.getSelection(); + TemplateElementCase tplEC = reportPane.getEditingElementCase(); + + if (tplEC != null && cs instanceof FloatSelection) { + FloatElement selectedFloat = tplEC.getFloatElement(((FloatSelection) cs).getSelectedFloatName()); + Object value = selectedFloat.getValue(); + if (value instanceof BaseChartCollection) { + this.setEnabled(false); + return; + } + } + this.updateStyle(ReportActionUtils.getCurrentStyle(reportPane)); + } + + /** + * 创建工具条,且有提示 + * + * @return + */ + public UIButtonGroup createToolBarComponent() { + UIButtonGroup group = super.createToolBarComponent(); + if (group != null) { + group.setForToolBarButtonGroup(true); + group.setAllToolTips(new String[]{Inter.getLocText("StyleAlignment-Left"), Inter.getLocText("Center"), Inter.getLocText("StyleAlignment-Right")}); + } + for (int i = 0; i < 3; i++) { + group.getButton(i).setRoundBorder(true, UIConstants.ARC); + group.getButton(i).setBorderPainted(true); + } + return group; + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/actions/cell/style/ReportFontBoldAction.java b/designer/src/com/fr/design/actions/cell/style/ReportFontBoldAction.java index 101d1f1f0d..0abe5ff4b2 100644 --- a/designer/src/com/fr/design/actions/cell/style/ReportFontBoldAction.java +++ b/designer/src/com/fr/design/actions/cell/style/ReportFontBoldAction.java @@ -8,84 +8,96 @@ import com.fr.base.Style; import com.fr.base.core.StyleUtils; import com.fr.design.actions.ToggleButtonUpdateAction; import com.fr.design.gui.ibutton.UIToggleButton; -import com.fr.general.FRFont; -import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.FRFont; +import com.fr.general.Inter; + +import javax.swing.*; /** * Bold. */ public class ReportFontBoldAction extends AbstractStyleAction implements ToggleButtonUpdateAction { - private UIToggleButton button; - protected Style style; + private UIToggleButton button; + protected Style style; + private final static Icon blackIcon = BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"); + private final static Icon whiteIcon = BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold_white.png"); + + public ReportFontBoldAction(ElementCasePane t) { + super(t); - public ReportFontBoldAction(ElementCasePane t) { - super(t); + this.setName(Inter.getLocText("FRFont-bold")); + this.setSmallIcon(blackIcon); + } - this.setName(Inter.getLocText("FRFont-bold")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png")); - } + /** + * 根据按钮状态获取格式 + * + * @param style + * @param defStyle + * @return + */ + @Override + public Style executeStyle(Style style, Style defStyle) { + button = createToolBarComponent(); + button.setIcon(getToggleButtonIcon(button.isSelected())); + button.setSelected(!button.isSelected()); + if (button.isSelected()) { + setSelectedFont(style); + button.setSelected(false); + } else { + setUnselectedFont(style); + button.setSelected(true); + } - /** - * 根据按钮状态获取格式 - * - * @param style - * @param defStyle - * @return - */ - @Override - public Style executeStyle(Style style, Style defStyle) { - createToolBarComponent().setSelected(!createToolBarComponent().isSelected()); - if (createToolBarComponent().isSelected()) { - setSelectedFont(style); - createToolBarComponent().setSelected(false); - } else { - setUnselectedFont(style); - createToolBarComponent().setSelected(true); - } + return this.style; + } - return this.style; - } + protected Icon getToggleButtonIcon(boolean isSelected) { + return isSelected ? blackIcon : whiteIcon; + } - protected void setSelectedFont(Style style) { - this.style = StyleUtils.boldReportFont(style); - } + protected void setSelectedFont(Style style) { + this.style = StyleUtils.boldReportFont(style); + } - protected void setUnselectedFont(Style style) { - this.style = StyleUtils.unBoldReportFont(style); - } + protected void setUnselectedFont(Style style) { + this.style = StyleUtils.unBoldReportFont(style); + } - /** - * Update Style. - */ - @Override - public void updateStyle(Style style) { - if (style == null) { - return; - } - FRFont frFont = style.getFRFont(); - if (frFont == null) { - return; - } - createToolBarComponent().setSelected(isStyle(frFont)); - } + /** + * Update Style. + */ + @Override + public void updateStyle(Style style) { + if (style == null) { + return; + } + FRFont frFont = style.getFRFont(); + if (frFont == null) { + return; + } + button = createToolBarComponent(); + button.setSelected(isStyle(frFont)); + button.setIcon(getToggleButtonIcon(!button.isSelected())); + } - protected boolean isStyle(FRFont frFont) { - return frFont.isBold(); - } + protected boolean isStyle(FRFont frFont) { + return frFont.isBold(); + } - /** - * Gets component on toolbar. - * - * @return the created components on toolbar. - */ - @Override - public UIToggleButton createToolBarComponent() { - if (button == null) { - button = GUICoreUtils.createToolBarComponent(this); - button.setEventBannded(true); - } - return button; - } + /** + * Gets component on toolbar. + * + * @return the created components on toolbar. + */ + @Override + public UIToggleButton createToolBarComponent() { + if (button == null) { + button = GUICoreUtils.createToolBarComponent(this); + button.setEventBannded(true); + } + return button; + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/actions/cell/style/ReportFontItalicAction.java b/designer/src/com/fr/design/actions/cell/style/ReportFontItalicAction.java index 1e6c87a1aa..7857cefe8b 100644 --- a/designer/src/com/fr/design/actions/cell/style/ReportFontItalicAction.java +++ b/designer/src/com/fr/design/actions/cell/style/ReportFontItalicAction.java @@ -10,16 +10,21 @@ import com.fr.general.FRFont; import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; +import javax.swing.*; + /** * Bold. */ public class ReportFontItalicAction extends ReportFontBoldAction { - - public ReportFontItalicAction(ElementCasePane t) { + + private final static Icon blackIcon = BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"); + private final static Icon whiteIcon = BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic_white.png"); + + public ReportFontItalicAction(ElementCasePane t) { super(t); this.setName(Inter.getLocText("FRFont-italic")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png")); + this.setSmallIcon(blackIcon); } @@ -31,6 +36,9 @@ public class ReportFontItalicAction extends ReportFontBoldAction { this.style = StyleUtils.unItalicReportFont(style); } + protected Icon getToggleButtonIcon(boolean isSelected) { + return isSelected ? blackIcon : whiteIcon; + } protected boolean isStyle(FRFont frFont) { return frFont.isItalic(); diff --git a/designer/src/com/fr/design/actions/cell/style/ReportFontUnderlineAction.java b/designer/src/com/fr/design/actions/cell/style/ReportFontUnderlineAction.java index e79782abfb..96369867db 100644 --- a/designer/src/com/fr/design/actions/cell/style/ReportFontUnderlineAction.java +++ b/designer/src/com/fr/design/actions/cell/style/ReportFontUnderlineAction.java @@ -11,15 +11,21 @@ import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; import com.fr.stable.Constants; +import javax.swing.*; + /** * Bold. */ public class ReportFontUnderlineAction extends ReportFontBoldAction { - public ReportFontUnderlineAction(ElementCasePane t) { + + private final static Icon blackIcon = BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/underline.png"); + private final static Icon whiteIcon = BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/underline_white.png"); + + public ReportFontUnderlineAction(ElementCasePane t) { super(t); this.setName(Inter.getLocText("FRFont-Underline")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/underline.png")); + this.setSmallIcon(blackIcon); } protected void setSelectedFont (Style style) { @@ -30,6 +36,9 @@ public class ReportFontUnderlineAction extends ReportFontBoldAction { this.style = StyleUtils.setReportFontUnderline(style, false); } + protected Icon getToggleButtonIcon(boolean isSelected) { + return isSelected ? blackIcon : whiteIcon; + } protected boolean isStyle(FRFont frFont) { return frFont.getUnderline() != Constants.LINE_NONE; diff --git a/designer/src/com/fr/design/mainframe/ElementCasePane.java b/designer/src/com/fr/design/mainframe/ElementCasePane.java index 1a6cf0ddae..0445b09877 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -3,34 +3,7 @@ */ package com.fr.design.mainframe; -import java.awt.AWTEvent; -import java.awt.Adjustable; -import java.awt.Dimension; -import java.awt.Image; -import java.awt.Rectangle; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.event.*; -import java.lang.reflect.Constructor; -import java.util.Set; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.Icon; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JScrollBar; -import javax.swing.KeyStroke; - -import 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.*; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -39,30 +12,8 @@ import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.BorderAction; import com.fr.design.actions.cell.CleanAuthorityAction; -import com.fr.design.actions.cell.style.AlignmentAction; -import com.fr.design.actions.cell.style.ReportFontBoldAction; -import com.fr.design.actions.cell.style.ReportFontForegroundAction; -import com.fr.design.actions.cell.style.ReportFontItalicAction; -import com.fr.design.actions.cell.style.ReportFontNameAction; -import com.fr.design.actions.cell.style.ReportFontSizeAction; -import com.fr.design.actions.cell.style.ReportFontUnderlineAction; -import com.fr.design.actions.cell.style.StyleBackgroundAction; -import com.fr.design.actions.columnrow.CancelColumnAction; -import com.fr.design.actions.columnrow.CancelRowAction; -import com.fr.design.actions.columnrow.ColumnHideAction; -import com.fr.design.actions.columnrow.ColumnWidthAction; -import com.fr.design.actions.columnrow.DeleteColumnAction; -import com.fr.design.actions.columnrow.DeleteRowAction; -import com.fr.design.actions.columnrow.FootColumnAction; -import com.fr.design.actions.columnrow.FootRowAction; -import com.fr.design.actions.columnrow.HeadColumnAction; -import com.fr.design.actions.columnrow.HeadRowAction; -import com.fr.design.actions.columnrow.InsertColumnAction; -import com.fr.design.actions.columnrow.InsertRowAction; -import com.fr.design.actions.columnrow.ResetColumnHideAction; -import com.fr.design.actions.columnrow.ResetRowHideAction; -import com.fr.design.actions.columnrow.RowHeightAction; -import com.fr.design.actions.columnrow.RowHideAction; +import com.fr.design.actions.cell.style.*; +import com.fr.design.actions.columnrow.*; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.edit.CopyAction; import com.fr.design.actions.edit.CutAction; @@ -74,6 +25,7 @@ import com.fr.design.cell.clipboard.CellElementsClip; import com.fr.design.cell.clipboard.ElementsTransferable; import com.fr.design.cell.clipboard.FloatElementsClip; import com.fr.design.cell.editor.*; +import com.fr.design.cell.editor.CellEditor; import com.fr.design.constants.UIConstants; import com.fr.design.designer.EditingState; import com.fr.design.designer.TargetComponent; @@ -83,11 +35,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.cell.QuickEditorRegion; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.menu.KeySetUtils; -import com.fr.design.menu.MenuDef; -import com.fr.design.menu.NameSeparator; -import com.fr.design.menu.ShortCut; -import com.fr.design.menu.ToolBarDef; +import com.fr.design.menu.*; import com.fr.design.selection.QuickEditor; import com.fr.design.selection.Selectedable; import com.fr.design.selection.SelectionEvent; @@ -95,11 +43,7 @@ import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; -import com.fr.grid.Grid; -import com.fr.grid.GridColumn; -import com.fr.grid.GridCorner; -import com.fr.grid.GridRow; -import com.fr.grid.GridUtils; +import com.fr.grid.*; import com.fr.grid.dnd.ElementCasePaneDropTarget; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.Selection; @@ -119,9 +63,17 @@ import com.fr.report.elementcase.ElementCase; import com.fr.report.elementcase.TemplateElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.ColumnRow; -import com.fr.stable.Constants; import com.fr.stable.unit.FU; +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.event.*; +import java.lang.reflect.Constructor; +import java.util.Set; + import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; /** @@ -186,7 +138,7 @@ public abstract class ElementCasePane extends Tar /** * Constructor. */ - public ElementCasePane(T t) { + public ElementCasePane(T t) { super(t); // marks:能触发processEvent,不管是否给component增加listener。这里是使在reportPane中的任意位置滑动鼠标轮都能 // 下拉grid。 @@ -209,7 +161,7 @@ public abstract class ElementCasePane extends Tar this.setLayout(new RGridLayout()); //todo 直接修改分辨率 - if (this.resolution == 0){ + if (this.resolution == 0) { this.resolution = ScreenResolution.getScreenResolution(); } @@ -243,7 +195,6 @@ public abstract class ElementCasePane extends Tar } - public int getMenuState() { return DesignState.WORK_SHEET; } @@ -294,8 +245,8 @@ public abstract class ElementCasePane extends Tar setFormatState(DesignerContext.FORMAT_STATE_NULL); formatBrush.setSelected(false); grid.setCursor(UIConstants.CELL_DEFAULT_CURSOR); - if(DesignerContext.getReferencedElementCasePane() == null){ - return; + if (DesignerContext.getReferencedElementCasePane() == null) { + return; } ((ElementCasePane) DesignerContext.getReferencedElementCasePane()).getGrid().setNotShowingTableSelectPane(true); @@ -348,11 +299,11 @@ public abstract class ElementCasePane extends Tar } - public void setResolution(int resolution){ + public void setResolution(int resolution) { this.resolution = resolution; } - public int getResolution(){ + public int getResolution() { return this.resolution; } @@ -1149,7 +1100,7 @@ public abstract class ElementCasePane extends Tar HeadColumnAction headcolumnAction = new HeadColumnAction(this); FootColumnAction footcolumnAction = new FootColumnAction(this); - ColumnRow selectedCellPoint = GridUtils.getAdjustEventColumnRow_withresolution(this, evt.getX(), evt.getY(),this.resolution); + ColumnRow selectedCellPoint = GridUtils.getAdjustEventColumnRow_withresolution(this, evt.getX(), evt.getY(), this.resolution); ElementCase elementCase = this.getEditingElementCase(); boolean cancel = false; ReportPageAttrProvider reportPageAttr = elementCase.getReportPageAttr(); @@ -1267,11 +1218,7 @@ public abstract class ElementCasePane extends Tar protected ToolBarDef createAlignmentToolBar() { return ShortCut.asToolBarDef(new ShortCut[]{ - new AlignmentAction(this, new Icon[]{ - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png")}, - new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT})} + new AlignmentAction(this)} ); } diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java index b358b53024..bbc87fa78c 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java @@ -176,6 +176,9 @@ public class ElementCasePaneDelegate extends ElementCasePane { for (int i = 0; i < actions.length; i++) { subMenuDef.addShortCut(actions[i]); } + + // 顺便更新右侧属性面板悬浮元素tab中的菜单项 + ReportFloatPane.getInstance().refreshInsertFloatMenu(this); } // 格式菜单 diff --git a/designer/src/com/fr/design/mainframe/ReportFloatPane.java b/designer/src/com/fr/design/mainframe/ReportFloatPane.java index 9f579f4f96..e759600426 100644 --- a/designer/src/com/fr/design/mainframe/ReportFloatPane.java +++ b/designer/src/com/fr/design/mainframe/ReportFloatPane.java @@ -23,7 +23,6 @@ import java.awt.*; public class ReportFloatPane extends JPanel { private static ReportFloatPane THIS; - private ElementCasePaneDelegate elementCasePaneDelegate; private MenuDef insertFloatMenu; private ReportFloatPane() { @@ -37,12 +36,20 @@ public class ReportFloatPane extends JPanel { return THIS; } + public void refreshInsertFloatMenu(ElementCasePaneDelegate elementCasePaneDelegate) { + insertFloatMenu.clearShortCuts(); + UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, elementCasePaneDelegate); + for (int i = 0; i < actions.length; i++) { + insertFloatMenu.addShortCut(actions[i]); + } + } + private void initComponent() { this.setLayout(new BorderLayout()); UIToolbar topToolBar = new UIToolbar(); topToolBar.setLayout(new BorderLayout()); - insertFloatMenu = createInsertToolBar(); + initInsertToolBar(); topToolBar.setPreferredSize(new Dimension(155,20)); topToolBar.add(createButtonUI(), BorderLayout.CENTER); topToolBar.setBorder(BorderFactory.createEmptyBorder(-1, -1, -1, -1)); @@ -66,19 +73,14 @@ public class ReportFloatPane extends JPanel { this.add(leftTopPane, BorderLayout.NORTH); } - private MenuDef createInsertToolBar() { - MenuDef insertFloatMenu = new MenuDef(true); + private void initInsertToolBar() { + insertFloatMenu = new MenuDef(true); insertFloatMenu.setName(KeySetUtils.INSERT_FLOAT.getMenuKeySetName()); insertFloatMenu.setTooltip(Inter.getLocText("FR-Designer_T_Insert_Float")); insertFloatMenu.setIconPath("com/fr/design/images/control/addPopup.png"); JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - elementCasePaneDelegate = (ElementCasePaneDelegate) editingTemplate.getCurrentElementCasePane(); - UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, elementCasePaneDelegate); - for (int i = 0; i < actions.length; i++) { - insertFloatMenu.addShortCut(actions[i]); - } - return insertFloatMenu; - + ElementCasePaneDelegate elementCasePaneDelegate = (ElementCasePaneDelegate) editingTemplate.getCurrentElementCasePane(); + refreshInsertFloatMenu(elementCasePaneDelegate); } private UIButton createButtonUI() { diff --git a/designer/src/com/fr/design/mainframe/alphafine/AlphaFineHelper.java b/designer/src/com/fr/design/mainframe/alphafine/AlphaFineHelper.java index 178c6d7e31..012f5e8727 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/AlphaFineHelper.java +++ b/designer/src/com/fr/design/mainframe/alphafine/AlphaFineHelper.java @@ -19,7 +19,6 @@ import java.util.List; * Created by XiaXiang on 2017/5/8. */ public class AlphaFineHelper { - public static final NoResultModel NO_RESULT_MODEL = new NoResultModel(Inter.getLocText("FR-Designer_AlphaFine_NoResult")); public static final NoResultModel NO_CONNECTION_MODEL = new NoResultModel(Inter.getLocText("FR-Designer_ConnectionFailed")); private static AlphaFineDialog alphaFineDialog; diff --git a/designer/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java b/designer/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java index 8e2ccd9a79..cb2bbc4376 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java +++ b/designer/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java @@ -1,25 +1,24 @@ package com.fr.design.mainframe.alphafine.cell.model; +import com.fr.design.actions.UpdateAction; import com.fr.design.mainframe.alphafine.CellType; import com.fr.general.FRLogger; import com.fr.json.JSONException; import com.fr.json.JSONObject; -import javax.swing.*; - /** * Created by XiaXiang on 2017/4/20. */ public class ActionModel extends AlphaCellModel { - private Action action; + private UpdateAction action; - public ActionModel(String name, String description, Action action, int searchCount) { + public ActionModel(String name, String description, UpdateAction action, int searchCount) { this(name, description, action); setSearchCount(searchCount); } - public ActionModel(String name, String description, Action action) { + public ActionModel(String name, String description, UpdateAction action) { super(name, null, CellType.ACTION); this.action = action; this.setDescription(description); @@ -43,11 +42,11 @@ public class ActionModel extends AlphaCellModel { return action != null ? action.hashCode() : 0; } - public Action getAction() { + public UpdateAction getAction() { return action; } - public void setAction(Action action) { + public void setAction(UpdateAction action) { this.action = action; } diff --git a/designer/src/com/fr/design/mainframe/alphafine/cell/model/AlphaCellModel.java b/designer/src/com/fr/design/mainframe/alphafine/cell/model/AlphaCellModel.java index ee9a9f55c9..04af821950 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/cell/model/AlphaCellModel.java +++ b/designer/src/com/fr/design/mainframe/alphafine/cell/model/AlphaCellModel.java @@ -27,7 +27,7 @@ public abstract class AlphaCellModel implements Comparable { this.content = content; } - + public CellType getType() { return type; } @@ -68,6 +68,7 @@ public abstract class AlphaCellModel implements Comparable { public boolean isNeedToSendToServer() { return true; } + /** * model转json * @@ -102,7 +103,7 @@ public abstract class AlphaCellModel implements Comparable { @Override public int compareTo(Object o) { - AlphaCellModel cellModel = (AlphaCellModel)o; + AlphaCellModel cellModel = (AlphaCellModel) o; int difference = cellModel.getSearchCount() - this.getSearchCount(); if (difference != 0) { return difference; diff --git a/designer/src/com/fr/design/mainframe/alphafine/cell/render/ContentCellRender.java b/designer/src/com/fr/design/mainframe/alphafine/cell/render/ContentCellRender.java index a99aecf3a2..d8cd66d97e 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/cell/render/ContentCellRender.java +++ b/designer/src/com/fr/design/mainframe/alphafine/cell/render/ContentCellRender.java @@ -5,7 +5,6 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel; -import com.fr.general.IOUtils; import com.fr.stable.StringUtils; import javax.swing.*; @@ -55,7 +54,7 @@ public class ContentCellRender implements ListCellRenderer { detailLabel.setForeground(AlphaFineConstants.LIGHT_GRAY); panel.add(detailLabel, BorderLayout.CENTER); int width = (int) (titleLabel.getPreferredSize().getWidth() + detailLabel.getPreferredSize().getWidth()); - if ( width > AlphaFineConstants.LEFT_WIDTH - OFFSET) { + if (width > AlphaFineConstants.LEFT_WIDTH - OFFSET) { int nameWidth = (int) (AlphaFineConstants.LEFT_WIDTH - detailLabel.getPreferredSize().getWidth() - OFFSET); titleLabel.setPreferredSize(new Dimension(nameWidth, AlphaFineConstants.CELL_HEIGHT)); } diff --git a/designer/src/com/fr/design/mainframe/alphafine/cell/render/TitleCellRender.java b/designer/src/com/fr/design/mainframe/alphafine/cell/render/TitleCellRender.java index 97f68cbf75..8d1d5a5f9b 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/cell/render/TitleCellRender.java +++ b/designer/src/com/fr/design/mainframe/alphafine/cell/render/TitleCellRender.java @@ -3,7 +3,6 @@ package com.fr.design.mainframe.alphafine.cell.render; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.cell.model.MoreModel; -import com.fr.general.IOUtils; import javax.swing.*; import java.awt.*; diff --git a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java index e973c6a422..e712edb478 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java +++ b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java @@ -367,7 +367,6 @@ public class AlphaFineDialog extends UIDialog { * 停止加载状态 */ private void fireStopLoading() { - searchListModel.resetState(); if (searchResultPane != null) { removeLeftPane(); } @@ -665,25 +664,18 @@ public class AlphaFineDialog extends UIDialog { searchTextField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DOWN) { - searchResultList.requestFocus(); - searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1); - } - } - - @Override - public void keyReleased(KeyEvent e) { - int keyCode = e.getKeyCode(); - if (keyCode == KeyEvent.VK_ESCAPE) { - if (StringUtils.isBlank(searchTextField.getText()) || ComparatorUtils.equals(searchTextField.getText(), searchTextField.getPlaceHolder())) { - AlphaFineDialog.this.setVisible(false); - } else { - searchTextField.setText(null); - removeSearchResult(); + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + if (searchResultList.getModel().getSize() > 1) { + dealWithSearchResult(searchResultList.getSelectedValue()); } - } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { - dealWithSearchResult(searchResultList.getSelectedValue()); - } + } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { + if (searchResultList.getSelectedIndex() == searchResultList.getModel().getSize() - 1) { + searchResultList.setSelectedIndex(0); + } + searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1); + } else if (e.getKeyCode() == KeyEvent.VK_UP) { + searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() - 1); + } else escAlphaFine(e); } }); @@ -754,7 +746,9 @@ public class AlphaFineDialog extends UIDialog { private void doNavigate() { AlphaFineDialog.this.dispose(); final AlphaCellModel model = searchResultList.getSelectedValue(); - model.doAction(); + if (model != null) { + model.doAction(); + } } /** @@ -888,6 +882,21 @@ public class AlphaFineDialog extends UIDialog { this.splitLabel = splitLabel; } + /** + * 键盘退出AlphaFine + * + * @param e + */ + private void escAlphaFine(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + if (StringUtils.isBlank(searchTextField.getText()) || ComparatorUtils.equals(searchTextField.getText(), searchTextField.getPlaceHolder())) { + AlphaFineDialog.this.setVisible(false); + } else { + searchTextField.setText(null); + removeSearchResult(); + } + } + } /** * +-------------------------------------+ @@ -907,7 +916,9 @@ public class AlphaFineDialog extends UIDialog { */ @Override public void setSelectedIndex(int index) { - if (index > 0 && checkSelectedIndex(index)) { + if (index == 0 && getModel().getSize() > 1) { + super.setSelectedIndex(1); + } else if (index > 0 && checkSelectedIndex(index)) { int previousIndex = getSelectedIndex(); super.setSelectedIndex(index); AlphaCellModel cellModel = getSelectedValue(); @@ -930,21 +941,6 @@ public class AlphaFineDialog extends UIDialog { } private void initListListener() { - addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ENTER) { - dealWithSearchResult(getSelectedValue()); - } else if (e.getKeyCode() == KeyEvent.VK_UP) { - if (getSelectedIndex() == 1) { - searchTextField.requestFocus(); - } - } else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - searchTextField.requestFocus(); - } - } - }); - addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -968,6 +964,14 @@ public class AlphaFineDialog extends UIDialog { } } }); + + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + escAlphaFine(e); + + } + }); } } diff --git a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFinePane.java b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFinePane.java index 8c962a0010..d4ab8326d6 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFinePane.java +++ b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFinePane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.alphafine.component; +import com.bulenkov.iconloader.IconLoader; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.help.alphafine.AlphaFineContext; import com.fr.design.actions.help.alphafine.AlphaFineListener; @@ -7,10 +8,8 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.utils.ThemeUtils; -import com.fr.general.IOUtils; import com.fr.general.Inter; -import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -22,12 +21,12 @@ public class AlphaFinePane extends BasicPane { private static AlphaFinePane alphaFinePane; public AlphaFinePane() { - setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 14)); + setLayout(new BorderLayout()); if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) { Toolkit.getDefaultToolkit().addAWTEventListener(AlphaFineDialog.listener(), AWTEvent.KEY_EVENT_MASK); } UIButton refreshButton = new UIButton(); - refreshButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/alphafine/images/smallsearch.png")); + refreshButton.setIcon(IconLoader.getIcon("/com/fr/design/mainframe/alphafine/images/smallsearch.png")); refreshButton.setToolTipText(Inter.getLocText("FR-Designer_AlphaFine")); refreshButton.set4ToolbarButton(); refreshButton.setRolloverEnabled(false); diff --git a/designer/src/com/fr/design/mainframe/alphafine/preview/FilePreviewPane.java b/designer/src/com/fr/design/mainframe/alphafine/preview/FilePreviewPane.java index 15b69aab27..1ba7a5b915 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/preview/FilePreviewPane.java +++ b/designer/src/com/fr/design/mainframe/alphafine/preview/FilePreviewPane.java @@ -18,7 +18,7 @@ public class FilePreviewPane extends JPanel { float widthScale = (AlphaFineConstants.RIGHT_WIDTH) / (float) image.getWidth(); float heightScale = (AlphaFineConstants.CONTENT_HEIGHT) / (float) image.getHeight(); Image showImage; - showImage = widthScale > heightScale? image.getScaledInstance((int) (image.getWidth() * heightScale), AlphaFineConstants.CONTENT_HEIGHT, Image.SCALE_SMOOTH) : image.getScaledInstance(AlphaFineConstants.RIGHT_WIDTH, (int) (image.getWidth() * widthScale), Image.SCALE_SMOOTH); + showImage = widthScale > heightScale ? image.getScaledInstance((int) (image.getWidth() * heightScale), AlphaFineConstants.CONTENT_HEIGHT, Image.SCALE_SMOOTH) : image.getScaledInstance(AlphaFineConstants.RIGHT_WIDTH, (int) (image.getWidth() * widthScale), Image.SCALE_SMOOTH); label.setIcon(new ImageIcon(showImage)); add(label); } diff --git a/designer/src/com/fr/design/mainframe/alphafine/preview/NoResultPane.java b/designer/src/com/fr/design/mainframe/alphafine/preview/NoResultPane.java index 6b80aae8be..738ecf4efd 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/preview/NoResultPane.java +++ b/designer/src/com/fr/design/mainframe/alphafine/preview/NoResultPane.java @@ -20,7 +20,7 @@ public class NoResultPane extends JPanel { image.setPreferredSize(new Dimension(150, 111)); image.setHorizontalAlignment(SwingConstants.CENTER); image.setIcon(IconLoader.getIcon(iconUrl)); - image.setBorder(BorderFactory.createEmptyBorder(100,0,0,0)); + image.setBorder(BorderFactory.createEmptyBorder(100, 0, 0, 0)); UILabel description = new UILabel(title); description.setForeground(AlphaFineConstants.MEDIUM_GRAY); description.setFont(FRFont.getInstance("SimSun", Font.PLAIN, 14)); diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/FileSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/FileSearchManager.java index 0c1a3b61b2..76cc8a6351 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/FileSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/FileSearchManager.java @@ -19,7 +19,12 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/PluginSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/PluginSearchManager.java index 25efb5f6bd..2ea8ba0e84 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/PluginSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/PluginSearchManager.java @@ -103,6 +103,7 @@ public class PluginSearchManager implements AlphaFineSearchProcessor { if (jsonArray != null) { SearchResult searchResult = new SearchResult(); for (int i = 0; i < jsonArray.length(); i++) { + AlphaFineHelper.checkCancel(); PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false); if (!AlphaFineHelper.getFilterResult().contains(cellModel)) { searchResult.add(cellModel); diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/RecentSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/RecentSearchManager.java index 69959830c5..c191c0c11e 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/RecentSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/RecentSearchManager.java @@ -10,6 +10,7 @@ import com.fr.design.mainframe.alphafine.cell.model.ActionModel; import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.model.SearchResult; +import com.fr.design.mainframe.toolbar.UpdateActionManager; import com.fr.file.XMLFileManager; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; @@ -26,8 +27,17 @@ import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLableReader; -import java.io.*; -import java.util.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.StringReader; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; /** * Created by XiaXiang on 2017/5/15. @@ -220,21 +230,24 @@ public class RecentSearchManager extends XMLFileManager implements AlphaFineSear recentModelList = recentKVModelMap.get(searchText); SearchResult resultModelList = recentModelList; Iterator modelIterator = resultModelList.iterator(); + SearchResult searchResult = new SearchResult(); while (modelIterator.hasNext()) { AlphaCellModel model = modelIterator.next(); - if (model.getType() == CellType.ACTION && !((ActionModel) model).getAction().isEnabled()) { - modelIterator.remove(); + if (model.getType() == CellType.ACTION && !UpdateActionManager.getUpdateActionManager().isEnable(((ActionModel) model).getAction())) { + continue; + } else { + searchResult.add(model); } } - Collections.sort(resultModelList); - int size = resultModelList.size(); + Collections.sort(searchResult); + int size = searchResult.size(); if (size > MAX_SIZE) { SearchResult result = new SearchResult(); - result.addAll(resultModelList.subList(0, MAX_SIZE)); + result.addAll(searchResult.subList(0, MAX_SIZE)); return result; } - return resultModelList; + return searchResult; } } return recentModelList; diff --git a/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java b/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java index 10ff2779b4..07aadbe915 100644 --- a/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java +++ b/designer/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java @@ -29,6 +29,8 @@ public class ErrorInfoUploader { private static ErrorInfoUploader collector; private static boolean licSupport = true; + // 在一台不能上网的电脑里发现了10w个errorinfo... + private static final int MAX_ERROR_SIZE = 2000; static { GeneralContext.addEnvChangedListener(new EnvChangedListener() { @@ -123,6 +125,11 @@ public class ErrorInfoUploader { } File[] files = folder.listFiles(); + if (files.length > MAX_ERROR_SIZE) { + StableUtils.deleteFile(folder); + return; + } + try { for (File file : files) { String filePath = file.getPath(); @@ -131,6 +138,11 @@ public class ErrorInfoUploader { if (suffix.endsWith(SUFFIX)) { Thread.sleep(1000L); String content = IOUtils.inputStream2String(new FileInputStream(file)); + if (content.length() > MAX_ERROR_SIZE) { + file.delete(); + continue; + } + String url = SiteCenter.getInstance().acquireUrlByKind("design.error"); if (sendErroInfo(url, content)) { file.delete(); diff --git a/designer/src/com/fr/design/report/UnitFieldPane.java b/designer/src/com/fr/design/report/UnitFieldPane.java index e74155a932..e115e8a3f9 100644 --- a/designer/src/com/fr/design/report/UnitFieldPane.java +++ b/designer/src/com/fr/design/report/UnitFieldPane.java @@ -48,7 +48,7 @@ public class UnitFieldPane extends JPanel { } else if (unitType == Constants.UNIT_INCH) { this.setText(Inter.getLocText("FR-Designer_Unit_INCH")); } else { - this.setText(Inter.getLocText("FR-Designer_Unit_MM-mm")); + this.setText(Inter.getLocText("FR-Designer_Unit_MM")); } //ajust the heigt of unitLabel. diff --git a/designer/src/com/fr/design/widget/ui/AbstractDataModify.java b/designer/src/com/fr/design/widget/ui/AbstractDataModify.java index 23c5a02f82..3836464b28 100644 --- a/designer/src/com/fr/design/widget/ui/AbstractDataModify.java +++ b/designer/src/com/fr/design/widget/ui/AbstractDataModify.java @@ -4,12 +4,14 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.data.DataCreatorUI; import com.fr.design.widget.DataModify; -import javax.swing.*; +import javax.swing.JComponent; + /** * Created by richie on 15/11/16. */ public abstract class AbstractDataModify extends BasicBeanPane implements DataModify { + protected String globalName; @Override public DataCreatorUI dataUI() { @@ -20,4 +22,12 @@ public abstract class AbstractDataModify extends BasicBeanPane implements public JComponent toSwingComponent() { return this; } + + public void setGlobalName(String globalName){ + this.globalName = globalName; + } + + public String getGlobalName(){ + return globalName; + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java b/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java index 101bce139a..a0622c253b 100644 --- a/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java +++ b/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java @@ -36,7 +36,7 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane可以自动换行 + super.setText("" + text + ""); + } + }; sampleLabel.setHorizontalAlignment(SwingConstants.CENTER); sampleLabel.setFont(FRContext.getDefaultValues().getFRFont()); return sampleLabel; diff --git a/designer/src/com/fr/start/Designer.java b/designer/src/com/fr/start/Designer.java index bd4c455e71..fdd7526af0 100644 --- a/designer/src/com/fr/start/Designer.java +++ b/designer/src/com/fr/start/Designer.java @@ -135,26 +135,24 @@ public class Designer extends BaseDesigner { public UILargeToolbar createLargeToolbar() { UILargeToolbar largeToolbar = super.createLargeToolbar(); largeToolbar.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 4)); - JPanel templeJpanel = new JPanel() { + largeToolbar.add(new JPanel() { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = 1; return dim; } - }; - templeJpanel.setBackground(Color.WHITE); - largeToolbar.add(templeJpanel); + }); createRunButton(largeToolbar); largeToolbar.add(run); - templeJpanel = new JPanel() { + run.setBackground(UIConstants.TREE_BACKGROUND); + largeToolbar.add(new JPanel() { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = GAP; return dim; } - }; - templeJpanel.setBackground(Color.WHITE); - largeToolbar.add(templeJpanel); + }); + largeToolbar.addSeparator(new Dimension(2, 42)); largeToolbar.setBorder(new MatteBorder(new Insets(0, 0, 1, 0), UIConstants.LINE_COLOR)); return largeToolbar; } @@ -352,7 +350,7 @@ public class Designer extends BaseDesigner { * * @return 面板组件 */ - public Component createAlphafinePane() { + public Component createAlphaFinePane() { return AlphaFinePane.getAlphaFinePane(); } diff --git a/designer_base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigManager.java b/designer_base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigManager.java index 405a5e64d4..8d58ce4578 100644 --- a/designer_base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigManager.java +++ b/designer_base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigManager.java @@ -1,5 +1,6 @@ package com.fr.design.actions.help.alphafine; +import com.fr.base.FRContext; import com.fr.base.FRCoreContext; import com.fr.general.VT4FR; import com.fr.stable.OperatingSystem; @@ -15,79 +16,68 @@ import javax.swing.*; */ public class AlphaFineConfigManager implements XMLable { + private static AlphaFineConfigManager alphaFineConfigManager = new AlphaFineConfigManager(); /** * 是否开启alphafine */ private boolean isEnabled = true; - /** * 是否联网搜索 */ private boolean isSearchOnLine = true; /** - * 快捷键设置 + * 搜索范围 */ - private String shortcuts; - /** - * 搜索范围 + * 快捷键设置 */ - + private String shortcuts; /** * 猜您需要 */ private boolean isContainRecommend = true; - /** * 设置 */ private boolean isContainAction = true; - /** * 帮助文档 */ private boolean isContainDocument = true; - /** * 模板 */ private boolean isContainTemplate = true; - /** * 模板内容 */ private boolean isContainFileContent; - /** * 应用中心 */ private boolean isContainPlugin = true; - /** * 快捷键 */ private KeyStroke shortCutKeyStore; - /** * 是否提醒 */ private boolean isNeedRemind = true; - /** * 直接操作菜单次数 */ private int operateCount; - - - - private static AlphaFineConfigManager alphaFineConfigManager = new AlphaFineConfigManager(); - public static AlphaFineConfigManager getInstance() { return alphaFineConfigManager; } + public static boolean isALPHALicAvailable() { + return FRContext.getCurrentEnv() != null && VT4FR.isLicAvailable(FRCoreContext.getBytes()) && VT4FR.ALPHA_FINE.support(); + } + @Override public Object clone() throws CloneNotSupportedException { AlphaFineConfigManager manager = (AlphaFineConfigManager) super.clone(); @@ -130,8 +120,6 @@ public class AlphaFineConfigManager implements XMLable { writer.end(); } - - public boolean isSearchOnLine() { return isSearchOnLine; } @@ -147,20 +135,20 @@ public class AlphaFineConfigManager implements XMLable { return shortcuts; } + public void setShortcuts(String shortcuts) { + this.shortcuts = shortcuts; + this.shortCutKeyStore = convert2KeyStroke(this.shortcuts); + } + /** * 返回默认快捷键 + * * @return */ private String getDefaultShortCuts() { - return OperatingSystem.isMacOS()? "meta + D" : "ctrl + D"; + return OperatingSystem.isMacOS() ? "meta + D" : "ctrl + D"; } - public void setShortcuts(String shortcuts) { - this.shortcuts = shortcuts; - this.shortCutKeyStore = convert2KeyStroke(this.shortcuts); - } - - public boolean isContainAction() { return isContainAction; } diff --git a/designer_base/src/com/fr/design/data/DesignTableDataManager.java b/designer_base/src/com/fr/design/data/DesignTableDataManager.java index 621e303b1b..17afec4717 100644 --- a/designer_base/src/com/fr/design/data/DesignTableDataManager.java +++ b/designer_base/src/com/fr/design/data/DesignTableDataManager.java @@ -6,19 +6,24 @@ import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; import com.fr.data.TableDataSource; import com.fr.data.core.DataCoreXmlUtils; -import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.data.impl.EmbeddedTableData; import com.fr.data.impl.storeproc.ProcedureDataModel; import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.data.impl.storeproc.StoreProcedureConstants; -import com.fr.design.data.tabledata.wrapper.*; import com.fr.design.DesignModelAdapter; +import com.fr.design.data.datapane.preview.PreviewTablePane; +import com.fr.design.data.tabledata.wrapper.ServerTableDataWrapper; +import com.fr.design.data.tabledata.wrapper.StoreProcedureDataWrapper; +import com.fr.design.data.tabledata.wrapper.StoreProcedureNameWrapper; +import com.fr.design.data.tabledata.wrapper.TableDataFactory; +import com.fr.design.data.tabledata.wrapper.TableDataWrapper; +import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; +import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.iprogressbar.AutoProgressBar; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.parameter.ParameterInputPane; -import com.fr.design.dialog.DialogActionAdapter; import com.fr.file.DatasourceManager; import com.fr.file.DatasourceManagerProvider; import com.fr.general.ComparatorUtils; @@ -34,8 +39,16 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.io.ByteArrayOutputStream; import java.text.Collator; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Timer; +import java.util.TimerTask; /** * 设计器管理操作数据集的类: @@ -351,7 +364,20 @@ public abstract class DesignTableDataManager { * @throws Exception 异常 */ public static EmbeddedTableData previewTableDataNeedInputParameters(TableData tabledata, int rowCount, boolean needLoadingBar) throws Exception { - return previewTableData(tabledata, rowCount, true, needLoadingBar); + return previewTableData(null, tabledata, rowCount, true, needLoadingBar); + } + + /** + * 预览需要参数的数据集 + * + * @param tabledata 数据集 + * @param rowCount 需要预览的行数 + * @param needLoadingBar 是否需要加载进度条 + * @return 数据集 + * @throws Exception 异常 + */ + public static EmbeddedTableData previewTableDataNeedInputParameters(TableDataSource tableDataSource, TableData tabledata, int rowCount, boolean needLoadingBar) throws Exception { + return previewTableData(tableDataSource, tabledata, rowCount, true, needLoadingBar); } /** @@ -364,7 +390,20 @@ public abstract class DesignTableDataManager { * @throws Exception 异常 */ public static EmbeddedTableData previewTableDataNotNeedInputParameters(TableData tabledata, int rowCount, boolean needLoadingBar) throws Exception { - return previewTableData(tabledata, rowCount, false, needLoadingBar); + return previewTableData(null, tabledata, rowCount, false, needLoadingBar); + } + + /** + * 预览不需要参数的数据集 + * + * @param tabledata 数据集 + * @param rowCount 需要预览的行数 + * @param needLoadingBar 是否需要加载进度条 + * @return 数据集 + * @throws Exception 异常 + */ + public static EmbeddedTableData previewTableDataNotNeedInputParameters(TableDataSource tableDataSource, TableData tabledata, int rowCount, boolean needLoadingBar) throws Exception { + return previewTableData(tableDataSource, tabledata, rowCount, false, needLoadingBar); } /** @@ -376,7 +415,7 @@ public abstract class DesignTableDataManager { * 而获取数据集的字段名字时,则没必要 * @return */ - private static EmbeddedTableData previewTableData(TableData tabledata, int rowCount, boolean isMustInputParameters, boolean needLoadingBar) throws Exception { + private static EmbeddedTableData previewTableData(TableDataSource tableDataSource, TableData tabledata, int rowCount, boolean isMustInputParameters, boolean needLoadingBar) throws Exception { final AutoProgressBar loadingBar = PreviewTablePane.getInstance().getProgressBar(); Env currentEnv = FRContext.getCurrentEnv(); ParameterProvider[] parameters = currentEnv.getTableDataParameters(tabledata); @@ -406,7 +445,7 @@ public abstract class DesignTableDataManager { parameter.setValue(parameterMap.get(parameter.getName())); } } - return currentEnv.previewTableData(tabledata, parameterMap, rowCount); + return currentEnv.previewTableData(tableDataSource, tabledata, parameterMap, rowCount); } catch (TableDataException e) { throw new TableDataException(e.getMessage(), e); } finally { diff --git a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java index 23b62431ec..0377f0bd4a 100644 --- a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java +++ b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java @@ -1,6 +1,8 @@ package com.fr.design.data.datapane.connect; import com.fr.base.BaseUtils; +import com.fr.data.impl.AbstractDatabaseConnection; +import com.fr.data.impl.Connection; import com.fr.design.constants.UIConstants; import com.fr.data.core.db.TableProcedure; import com.fr.design.border.UIRoundedBorder; @@ -20,6 +22,7 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.*; +import java.util.List; /** * 数据集编辑面板左边的部分 @@ -39,6 +42,12 @@ public class ConnectionTableProcedurePane extends BasicPane { public ConnectionTableProcedurePane() { this.setLayout(new BorderLayout(4, 4)); connectionComboBox = new ConnectionComboBoxPanel(com.fr.data.impl.Connection.class) { + + @Override + protected void filterConnection(Connection connection, String conName, List nameList) { + filter(connection, conName, nameList); + } + protected void refreshItems() { super.refreshItems(); if (tableViewList != null) { @@ -83,6 +92,10 @@ public class ConnectionTableProcedurePane extends BasicPane { this.setPreferredSize(new Dimension(WIDTH, getPreferredSize().height)); } + protected void filter(Connection connection, String conName, List nameList) { + connection.addConnection(nameList, conName, new Class[]{AbstractDatabaseConnection.class}); + } + protected JPanel createCheckBoxgroupPane() { JPanel checkBoxgroupPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(2); JPanel first = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); diff --git a/designer_base/src/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer_base/src/com/fr/design/data/datapane/preview/PreviewTablePane.java index 28e421b542..71e10728bd 100644 --- a/designer_base/src/com/fr/design/data/datapane/preview/PreviewTablePane.java +++ b/designer_base/src/com/fr/design/data/datapane/preview/PreviewTablePane.java @@ -6,6 +6,7 @@ package com.fr.design.data.datapane.preview; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.TableData; +import com.fr.data.TableDataSource; import com.fr.data.impl.DBTableData; import com.fr.data.impl.EmbeddedTableData; import com.fr.data.impl.storeproc.ProcedureDataModel; @@ -13,6 +14,7 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.data.DesignTableDataManager; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; +import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.iprogressbar.AutoProgressBar; @@ -362,7 +364,8 @@ public class PreviewTablePane extends BasicPane { } } connectionBar.close(); - previewTableData = DesignTableDataManager.previewTableDataNeedInputParameters(tableData, (int) maxPreviewNumberField.getValue(), true); + TableDataSource dataSource = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getTarget(); + previewTableData = DesignTableDataManager.previewTableDataNeedInputParameters(dataSource, tableData, (int) maxPreviewNumberField.getValue(), true); // parameterInputDialog // update之后的parameters,转成一个parameterMap,用于预览TableData PreviewTableModel previewModel = new PreviewTableModel(previewTableData.createDataModel(null), (int) maxPreviewNumberField.getValue()); diff --git a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index 75b3219ebd..947e17106b 100644 --- a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -5,7 +5,11 @@ import com.fr.base.FRContext; import com.fr.base.Parameter; import com.fr.base.ParameterHelper; import com.fr.data.core.db.TableProcedure; +import com.fr.data.impl.AbstractDatabaseConnection; +import com.fr.data.impl.Connection; import com.fr.data.impl.DBTableData; +import com.fr.data.impl.JDBCDatabaseConnection; +import com.fr.data.impl.JNDIDatabaseConnection; import com.fr.data.impl.NameDatabaseConnection; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; @@ -37,6 +41,7 @@ import com.fr.script.Calculator; import com.fr.stable.ArrayUtils; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; +import org.sqlite.JDBC; import javax.swing.*; import javax.swing.text.BadLocationException; @@ -102,7 +107,12 @@ public class DBTableDataPane extends AbstractTableDataPane { sqlSplitPane.add(box, BorderLayout.CENTER); // 左边的Panel,上面是选择DatabaseConnection的ComboBox,下面DatabaseConnection对应的Table - connectionTableProcedurePane = new ConnectionTableProcedurePane(); + connectionTableProcedurePane = new ConnectionTableProcedurePane() { + @Override + protected void filter(Connection connection, String conName, List nameList) { + connection.addConnection(nameList, conName, new Class[]{JDBCDatabaseConnection.class, JNDIDatabaseConnection.class}); + } + }; connectionTableProcedurePane.addDoubleClickListener(new DoubleClickSelectedNodeOnTreeListener() { @Override @@ -138,6 +148,7 @@ public class DBTableDataPane extends AbstractTableDataPane { this.add(mainSplitPane, BorderLayout.CENTER); } + private boolean isPreviewOrRefreshButton (FocusEvent e) { if (e.getOppositeComponent() != null) { String name = e.getOppositeComponent().getName(); diff --git a/designer_base/src/com/fr/design/data/tabledata/wrapper/AbstractTableDataWrapper.java b/designer_base/src/com/fr/design/data/tabledata/wrapper/AbstractTableDataWrapper.java index 90e2adfab7..17d42b0e15 100644 --- a/designer_base/src/com/fr/design/data/tabledata/wrapper/AbstractTableDataWrapper.java +++ b/designer_base/src/com/fr/design/data/tabledata/wrapper/AbstractTableDataWrapper.java @@ -58,7 +58,7 @@ public abstract class AbstractTableDataWrapper implements TableDataWrapper { EmbeddedTableData embeddedTableData = null; try { - embeddedTableData = DesignTableDataManager.previewTableDataNotNeedInputParameters(tabledata, TableData.RESULT_NOT_NEED, false); + embeddedTableData = DesignTableDataManager.previewTableDataNotNeedInputParameters(tds, tabledata, TableData.RESULT_NOT_NEED, false); } catch (Exception e) { if (e.getMessage()!=null) { DesignUtils.errorMessage(e.getMessage()); diff --git a/designer_base/src/com/fr/design/designer/TargetComponent.java b/designer_base/src/com/fr/design/designer/TargetComponent.java index 4eedfa0129..ef5369b659 100644 --- a/designer_base/src/com/fr/design/designer/TargetComponent.java +++ b/designer_base/src/com/fr/design/designer/TargetComponent.java @@ -1,16 +1,16 @@ package com.fr.design.designer; -import javax.swing.*; - +import com.fr.design.DesignState; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; +import com.fr.design.mainframe.AuthorityEditPane; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.DesignState; import com.fr.design.menu.MenuDef; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; import com.fr.stable.StringUtils; -import com.fr.design.mainframe.*; + +import javax.swing.*; /** * 模板设计界面 @@ -31,7 +31,7 @@ public abstract class TargetComponent extends JComponent { public abstract void stopEditing(); - public final T getTarget() { + public T getTarget() { return target; } diff --git a/designer_base/src/com/fr/design/gui/ibutton/UIButton.java b/designer_base/src/com/fr/design/gui/ibutton/UIButton.java index 776a6a284a..91602372da 100644 --- a/designer_base/src/com/fr/design/gui/ibutton/UIButton.java +++ b/designer_base/src/com/fr/design/gui/ibutton/UIButton.java @@ -36,7 +36,7 @@ public class UIButton extends JButton implements UIObserver { private CellBorderStyle border = null; protected UIObserverListener uiObserverListener; - private static final int TOOLTIP_INIT_DELAY = 1000; // 延迟 1s 显示提示文字 + private static final int TOOLTIP_INIT_DELAY = 300; // 延迟 0.3s 显示提示文字 public UIButton() { this(StringUtils.EMPTY); diff --git a/designer_base/src/com/fr/design/gui/ibutton/UIHeadGroup.java b/designer_base/src/com/fr/design/gui/ibutton/UIHeadGroup.java index 3e7c488c14..28957a87ce 100644 --- a/designer_base/src/com/fr/design/gui/ibutton/UIHeadGroup.java +++ b/designer_base/src/com/fr/design/gui/ibutton/UIHeadGroup.java @@ -23,8 +23,8 @@ public class UIHeadGroup extends JPanel { public UIHeadGroup(String[] textArray) { labelButtonList = new ArrayList(textArray.length); - this.setBackground(UIConstants.NORMAL_BACKGROUND); - this.setLayout(new GridLayout(0, textArray.length, 1, 0)); + this.setBackground(UIConstants.TREE_BACKGROUND); + this.setLayout(new GridLayout(0, textArray.length, 0, 0)); // this.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); for (int i = 0; i < textArray.length; i++) { final int index = i; diff --git a/designer_base/src/com/fr/design/gui/ibutton/UIToggleButton.java b/designer_base/src/com/fr/design/gui/ibutton/UIToggleButton.java index 21c8bb419a..c51a72acdf 100644 --- a/designer_base/src/com/fr/design/gui/ibutton/UIToggleButton.java +++ b/designer_base/src/com/fr/design/gui/ibutton/UIToggleButton.java @@ -122,7 +122,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ @Override public void mouseClicked(MouseEvent e) { if (isEnabled() && !isEventBannded) { - setSelectedWithFireListener(!isSelected()); + setSelectedWithFireListener(!isSelected()); } } }; diff --git a/designer_base/src/com/fr/design/gui/icombobox/UIComboBoxRenderer.java b/designer_base/src/com/fr/design/gui/icombobox/UIComboBoxRenderer.java index 4be4fdcf09..9e5a0c3b9f 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/UIComboBoxRenderer.java +++ b/designer_base/src/com/fr/design/gui/icombobox/UIComboBoxRenderer.java @@ -26,9 +26,16 @@ public class UIComboBoxRenderer extends DefaultListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { cellHasFocus = cellHasFocus && !this.isEnabled(); JLabel renderer =(JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - renderer.setForeground(Color.black); - list.setSelectionBackground(UIConstants.COMBOBOX_BTN_PRESS); - list.setSelectionForeground(Color.black); + renderer.setOpaque(true); + list.setSelectionBackground(UIConstants.NORMAL_BLUE); + list.setSelectionForeground(Color.WHITE); + if (isSelected) { + renderer.setForeground(list.getSelectionForeground()); + renderer.setBackground(list.getSelectionBackground()); + } else { + renderer.setForeground(list.getForeground()); + renderer.setBackground(list.getBackground()); + } renderer.setText(" " + renderer.getText()); return renderer; } diff --git a/designer_base/src/com/fr/design/gui/itree/checkboxtree/NullTristateCheckBox.java b/designer_base/src/com/fr/design/gui/itree/checkboxtree/NullTristateCheckBox.java index 0642f96f4a..bd1747c8ac 100644 --- a/designer_base/src/com/fr/design/gui/itree/checkboxtree/NullTristateCheckBox.java +++ b/designer_base/src/com/fr/design/gui/itree/checkboxtree/NullTristateCheckBox.java @@ -65,7 +65,6 @@ public class NullTristateCheckBox extends TristateCheckBox { // @Override public void updateUI() { - super.updateUI(); clearAttribute(); } diff --git a/designer_base/src/com/fr/design/images/buttonicon/leftNormal.png b/designer_base/src/com/fr/design/images/buttonicon/leftNormal.png index 883288d2f6..e23f392bbb 100644 Binary files a/designer_base/src/com/fr/design/images/buttonicon/leftNormal.png and b/designer_base/src/com/fr/design/images/buttonicon/leftNormal.png differ diff --git a/designer_base/src/com/fr/design/images/m_format/cellstyle/bold_white.png b/designer_base/src/com/fr/design/images/m_format/cellstyle/bold_white.png new file mode 100644 index 0000000000..f10c6bef13 Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_format/cellstyle/bold_white.png differ diff --git a/designer_base/src/com/fr/design/images/m_format/cellstyle/h_center_normal_white.png b/designer_base/src/com/fr/design/images/m_format/cellstyle/h_center_normal_white.png new file mode 100644 index 0000000000..2f7432769b Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_format/cellstyle/h_center_normal_white.png differ diff --git a/designer_base/src/com/fr/design/images/m_format/cellstyle/h_left_normal_white.png b/designer_base/src/com/fr/design/images/m_format/cellstyle/h_left_normal_white.png new file mode 100644 index 0000000000..94a2be8dc2 Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_format/cellstyle/h_left_normal_white.png differ diff --git a/designer_base/src/com/fr/design/images/m_format/cellstyle/h_right_normal_white.png b/designer_base/src/com/fr/design/images/m_format/cellstyle/h_right_normal_white.png new file mode 100644 index 0000000000..e8d21e9d06 Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_format/cellstyle/h_right_normal_white.png differ diff --git a/designer_base/src/com/fr/design/images/m_format/cellstyle/italic_white.png b/designer_base/src/com/fr/design/images/m_format/cellstyle/italic_white.png new file mode 100644 index 0000000000..936a3e7840 Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_format/cellstyle/italic_white.png differ diff --git a/designer_base/src/com/fr/design/images/m_format/cellstyle/underline_white.png b/designer_base/src/com/fr/design/images/m_format/cellstyle/underline_white.png new file mode 100644 index 0000000000..86e06dad0b Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_format/cellstyle/underline_white.png differ diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java index f28c43de77..c85763a890 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java @@ -10,12 +10,17 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; -import com.fr.design.file.*; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.NewTemplatePane; +import com.fr.design.file.SaveSomeTemplatePane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.TitlePlaceProcessor; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -54,8 +59,20 @@ import javax.swing.border.MatteBorder; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; -import java.awt.dnd.*; -import java.awt.event.*; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTarget; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; @@ -65,115 +82,226 @@ import java.util.List; import java.util.logging.Level; public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener { - private static final long serialVersionUID = -8732559571067484460L; - private static final int LEFT_ALIGN_GAP = -5; - private static final int MENU_HEIGHT = 26; - private static final Integer SECOND_LAYER = new Integer(100); - private static final Integer TOP_LAYER = new Integer((200)); - - public static final String DESIGNER_FRAME_NAME = "designer_frame"; - public static final Dimension MIN_SIZE = new Dimension(100, 100); - - private static java.util.List> appList = new java.util.ArrayList>(); - - private ToolBarMenuDock ad; - - private DesktopCardPane centerTemplateCardPane; - - private JPanel toolbarPane; - private JComponent toolbarComponent; - - private JPanel menuPane; - private JMenuBar menuBar; - private JPanel eastCenterPane; - private UIToolbar combineUp; - private NewTemplatePane newWorkBookPane = null; - private Icon closeMode = UIConstants.CLOSE_OF_AUTHORITY; - private JLayeredPane layeredPane = this.getLayeredPane(); - private JPanel basePane = new JPanel(); - // 上面的虚线 - private DottedLine upDottedLine; - // 下面的虚线 - private DottedLine downDottedLine; - - // 左边的虚线 - private DottedLine leftDottedLine; - - // 右边的虚线 - private DottedLine rightDottedLine; - - private int contentWidth = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()); - private int contentHeight = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()); - - private WindowAdapter windowAdapter = new WindowAdapter() { - public void windowOpened(WindowEvent e) { - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setComposite(); - reCalculateFrameSize(); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().doResize(); - - } - - @Override - public void windowClosing(WindowEvent e) { - SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(true); - // 只有一个文件未保存时 - if (HistoryTemplateListPane.getInstance().getHistoryCount() == 1) { - int choose = saveSomeTempaltePane.saveLastOneTemplate(); - if (choose != JOptionPane.CANCEL_OPTION) { - DesignerFrame.this.exit(); - } - } else { - if (saveSomeTempaltePane.showSavePane()) { - DesignerFrame.this.exit(); - } - } - } - - }; - - private JComponent closeButton = new JComponent() { - protected void paintComponent(Graphics g) { - g.setColor(UIConstants.NORMAL_BACKGROUND); - g.fillArc(0, 0, UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH, UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH, - 0, 360); - closeMode.paintIcon(this, g, 0, 0); - } - }; - - /** - * 注册app. - * - * @param app - * 注册app. - */ - public static void registApp(App app) { - if (app != null) { - appList.add(app); - } - } - + public static final String DESIGNER_FRAME_NAME = "designer_frame"; + public static final Dimension MIN_SIZE = new Dimension(100, 100); + private static final long serialVersionUID = -8732559571067484460L; + private static final int LEFT_ALIGN_GAP = -5; + private static final int MENU_HEIGHT = 26; + private static final Integer SECOND_LAYER = new Integer(100); + private static final Integer TOP_LAYER = new Integer((200)); + private static java.util.List> appList = new java.util.ArrayList>(); + + private ToolBarMenuDock ad; + + private DesktopCardPane centerTemplateCardPane; + + private JPanel toolbarPane; + private JComponent toolbarComponent; + + private JPanel menuPane; + private JMenuBar menuBar; + private JPanel eastCenterPane; + private UIToolbar combineUp; + private NewTemplatePane newWorkBookPane = null; + private Icon closeMode = UIConstants.CLOSE_OF_AUTHORITY; + private JLayeredPane layeredPane = this.getLayeredPane(); + private JPanel basePane = new JPanel(); + // 上面的虚线 + private DottedLine upDottedLine; + // 下面的虚线 + private DottedLine downDottedLine; + + // 左边的虚线 + private DottedLine leftDottedLine; + + // 右边的虚线 + private DottedLine rightDottedLine; + + private int contentWidth = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()); + private int contentHeight = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()); + + private WindowAdapter windowAdapter = new WindowAdapter() { + public void windowOpened(WindowEvent e) { + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setComposite(); + reCalculateFrameSize(); + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().doResize(); + + } + + @Override + public void windowClosing(WindowEvent e) { + SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(true); + // 只有一个文件未保存时 + if (HistoryTemplateListPane.getInstance().getHistoryCount() == 1) { + int choose = saveSomeTempaltePane.saveLastOneTemplate(); + if (choose != JOptionPane.CANCEL_OPTION) { + DesignerFrame.this.exit(); + } + } else { + if (saveSomeTempaltePane.showSavePane()) { + DesignerFrame.this.exit(); + } + } + } + + }; + + private JComponent closeButton = new JComponent() { + protected void paintComponent(Graphics g) { + g.setColor(UIConstants.NORMAL_BACKGROUND); + g.fillArc(0, 0, UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH, UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH, + 0, 360); + closeMode.paintIcon(this, g, 0, 0); + } + }; + private MouseListener closeMouseListener = new MouseAdapter() { + public void mousePressed(MouseEvent e) { + closeMode = UIConstants.CLOSE_PRESS_AUTHORITY; + closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); + closeButton.repaint(); + } + + public void mouseExited(MouseEvent e) { + closeMode = UIConstants.CLOSE_OF_AUTHORITY; + closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); + closeButton.repaint(); + } + + public void mouseMoved(MouseEvent e) { + closeMode = UIConstants.CLOSE_OVER_AUTHORITY; + closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); + closeButton.repaint(); + } + + public void mouseReleased(MouseEvent e) { + if (BaseUtils.isAuthorityEditing()) { + BaseUtils.setAuthorityEditing(false); + WestRegionContainerPane.getInstance().replaceDownPane( + TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); + DesignerContext.getDesignerFrame().resetToolkitByPlus( + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getToolBarMenuDockPlus()); + needToAddAuhtorityPaint(); + refreshDottedLine(); + fireAuthorityStateToNomal(); + } + } + + public void mouseEntered(MouseEvent e) { + closeMode = UIConstants.CLOSE_OVER_AUTHORITY; + closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); + closeButton.repaint(); + } + }; + + public DesignerFrame(ToolBarMenuDock ad) { + + setName(DESIGNER_FRAME_NAME); + this.ad = ad; + this.initTitleIcon(); + this.setTitle();// james:因为有默认的了 + // set this to context. + DesignerContext.setDesignerFrame(this); + + // the content pane + basePane.setLayout(new BorderLayout()); + toolbarPane = new JPanel() { + public Dimension getPreferredSize() { + Dimension dim = super.getPreferredSize(); + // dim.height = TOOLBAR_HEIGHT; + return dim; + } + }; + toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + eastPane.add(ad.createLargeToolbar(), BorderLayout.WEST); + eastCenterPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + eastCenterPane.add(combineUp = combineUpTooBar(null), BorderLayout.NORTH); + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panel.add(newWorkBookPane = ad.getNewTemplatePane(), BorderLayout.WEST); + panel.add(MutilTempalteTabPane.getInstance(), BorderLayout.CENTER); + eastCenterPane.add(panel, BorderLayout.CENTER); + + eastPane.add(eastCenterPane, BorderLayout.CENTER); + toolbarPane.add(eastPane, BorderLayout.NORTH); + toolbarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); + + JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + centerPane.add(centerTemplateCardPane = new DesktopCardPane(), BorderLayout.CENTER); + centerPane.add(toolbarPane, BorderLayout.NORTH); + + + basePane.add(centerPane, BorderLayout.CENTER); + laoyoutWestPane(); +// JPanel eastRegionPane = new JPanel(new BorderLayout()); +// eastRegionPane.add(EastRegionContainerPane.getInstance(), BorderLayout.CENTER); +// eastRegionPane.add(JSliderPane.getInstance(), BorderLayout.SOUTH); +// basePane.add(eastRegionPane, BorderLayout.EAST); + + basePane.add(EastRegionContainerPane.getInstance(), BorderLayout.EAST); + basePane.setBounds(0, 0, contentWidth, contentHeight); + + // 数值越小。越在底层 + layeredPane.add(basePane); + // 调整Window大小 + modWindowBounds(); + + + // p:检查所有按钮的可见性和是否可以编辑性. + checkToolbarMenuEnable(); + + // window close listener. + this.addWindowListeners(getFrameListeners()); + + this.addComponentListener(new ComponentAdapter() { + public void componentResized(ComponentEvent e) { + reCalculateFrameSize(); + if (BaseUtils.isAuthorityEditing()) { + doResize(); + } + } + }); + this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + this.setVisible(false); + this.setExtendedState(JFrame.MAXIMIZED_BOTH); + this.setDropTarget(new DropTarget(this, DnDConstants.ACTION_MOVE, new FileDropTargetListener(), true)); + closeMode = UIConstants.CLOSE_OF_AUTHORITY; + initMenuPane(); + } + + /** + * 注册app. + * + * @param app 注册app. + */ + public static void registApp(App app) { + if (app != null) { + appList.add(app); + } + } + public static void removeApp(App app) { - + if (app != null) { appList.remove(app); } } - protected DesktopCardPane getCenterTemplateCardPane() { - return centerTemplateCardPane; - } - - /** - * 初始menuPane的方法 方便OEM时修改该组件 - */ - protected void initMenuPane(){ - menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); - menuPane.add(initNorthEastPane(ad), BorderLayout.EAST); - basePane.add(menuPane, BorderLayout.NORTH); - this.resetToolkitByPlus(null); - } - + protected DesktopCardPane getCenterTemplateCardPane() { + return centerTemplateCardPane; + } + + /** + * 初始menuPane的方法 方便OEM时修改该组件 + */ + protected void initMenuPane() { + menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); + menuPane.add(initNorthEastPane(ad), BorderLayout.EAST); + basePane.add(menuPane, BorderLayout.NORTH); + this.resetToolkitByPlus(null); + } + /** * @param ad * @return @@ -184,658 +312,532 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); //优先级为-1,保证最后全面刷新一次 GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { - + @Override public void on(PluginEvent event) { - + refreshNorthEastPane(northEastPane, ad); DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv()); } }, new PluginFilter() { - + @Override public boolean accept(PluginContext context) { - + return context.contain(PluginModule.ExtraDesign); } }); refreshNorthEastPane(northEastPane, ad); - return northEastPane; - } - + return northEastPane; + } + private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { - + northEastPane.removeAll(); TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING); if (processor == null) { processor = new DefaultTitlePlace(); } processor.hold(northEastPane, LogMessageBar.getInstance(), ad.createBBSLoginPane()); - if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) { - northEastPane.add(ad.createAlphafinePane(), BorderLayout.CENTER); - } + if (AlphaFineConfigManager.isALPHALicAvailable() && DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) { + northEastPane.add(ad.createAlphaFinePane(), BorderLayout.CENTER); + } } - - public DesignerFrame(ToolBarMenuDock ad) { - - setName(DESIGNER_FRAME_NAME); - this.ad = ad; - this.initTitleIcon(); - this.setTitle();// james:因为有默认的了 - // set this to context. - DesignerContext.setDesignerFrame(this); - - // the content pane - basePane.setLayout(new BorderLayout()); - toolbarPane = new JPanel() { - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - // dim.height = TOOLBAR_HEIGHT; - return dim; - } - }; - toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - eastPane.add(ad.createLargeToolbar(), BorderLayout.WEST); - eastCenterPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - eastCenterPane.add(combineUp = combineUpTooBar(null), BorderLayout.NORTH); - JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - panel.add(newWorkBookPane =ad.getNewTemplatePane(), BorderLayout.WEST); - panel.add(MutilTempalteTabPane.getInstance(), BorderLayout.CENTER); - eastCenterPane.add(panel, BorderLayout.CENTER); - - eastPane.add(eastCenterPane, BorderLayout.CENTER); - toolbarPane.add(eastPane, BorderLayout.NORTH); - toolbarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); - - JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - centerPane.add(centerTemplateCardPane = new DesktopCardPane(), BorderLayout.CENTER); - centerPane.add(toolbarPane, BorderLayout.NORTH); - - - basePane.add(centerPane, BorderLayout.CENTER); - laoyoutWestPane(); -// JPanel eastRegionPane = new JPanel(new BorderLayout()); -// eastRegionPane.add(EastRegionContainerPane.getInstance(), BorderLayout.CENTER); -// eastRegionPane.add(JSliderPane.getInstance(), BorderLayout.SOUTH); -// basePane.add(eastRegionPane, BorderLayout.EAST); - basePane.add(EastRegionContainerPane.getInstance(), BorderLayout.EAST); - basePane.setBounds(0, 0, contentWidth, contentHeight); - - // 数值越小。越在底层 - layeredPane.add(basePane); - // 调整Window大小 - modWindowBounds(); - - - - // p:检查所有按钮的可见性和是否可以编辑性. - checkToolbarMenuEnable(); - - // window close listener. - this.addWindowListeners(getFrameListeners()); - - this.addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent e) { - reCalculateFrameSize(); - if (BaseUtils.isAuthorityEditing()) { - doResize(); - } - } - }); - this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - this.setVisible(false); - this.setExtendedState(JFrame.MAXIMIZED_BOTH); - this.setDropTarget(new DropTarget(this, DnDConstants.ACTION_MOVE, new FileDropTargetListener(), true)); - closeMode = UIConstants.CLOSE_OF_AUTHORITY; - initMenuPane(); - } - - public void initTitleIcon() { - try { - @SuppressWarnings("unchecked") - List image = ICODecoder.read(DesignerFrame.class - .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); - this.setIconImages(image); - } catch (IOException e) { - FRContext.getLogger().error(e.getMessage(), e); - this.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); - } - } - - private void addWindowListeners(ArrayList listeners){ - for(WindowListener listener : listeners){ - this.addWindowListener(listener); - } - } - - protected ArrayList getFrameListeners(){ - ArrayList arrayList = new ArrayList(); - arrayList.add(windowAdapter); - return arrayList; - } - - - protected void laoyoutWestPane(){ - basePane.add(WestRegionContainerPane.getInstance(), BorderLayout.WEST); - } - - // 调整windows大小 - private void reCalculateFrameSize() { - contentHeight = layeredPane.getHeight(); - contentWidth = layeredPane.getWidth(); - layeredPane.remove(basePane); - basePane.setBounds(0, 0, contentWidth, contentHeight); - layeredPane.add(basePane); - layeredPane.repaint(); - } - - /** - * 更新 - */ - public void populateAuthorityArea() { - int centerWidth = contentWidth - WestRegionContainerPane.getInstance().getContainerWidth() - - EastRegionContainerPane.getInstance().getContainerWidth(); - // 上面的虚线 - upDottedLine = new DottedLine(UIScrollBar.HORIZONTAL, centerWidth); - upDottedLine.setBounds(WestRegionContainerPane.getInstance().getContainerWidth(), MENU_HEIGHT - 1, centerWidth, - 3); - - // 下面的虚线 - downDottedLine = new DottedLine(UIScrollBar.HORIZONTAL, centerWidth); - downDottedLine.setBounds(WestRegionContainerPane.getInstance().getContainerWidth(), contentHeight - 3, - centerWidth, 3); - - // 左边的虚线 - leftDottedLine = new DottedLine(UIScrollBar.VERTICAL, contentHeight - MENU_HEIGHT); - leftDottedLine.setBounds(WestRegionContainerPane.getInstance().getContainerWidth(), MENU_HEIGHT, 3, - contentHeight - MENU_HEIGHT); - - rightDottedLine = new DottedLine(UIScrollBar.VERTICAL, contentHeight - MENU_HEIGHT); - rightDottedLine.setBounds(contentWidth - EastRegionContainerPane.getInstance().getContainerWidth() - 3, - MENU_HEIGHT, 3, contentHeight - MENU_HEIGHT); - - } - - private void addDottedLine() { - layeredPane.add(upDottedLine, SECOND_LAYER); - layeredPane.add(downDottedLine, SECOND_LAYER); - layeredPane.add(leftDottedLine, SECOND_LAYER); - layeredPane.add(rightDottedLine, SECOND_LAYER); - layeredPane.add(closeButton, TOP_LAYER); - } - - private void removeDottedLine() { - layeredPane.remove(upDottedLine); - layeredPane.remove(downDottedLine); - layeredPane.remove(leftDottedLine); - layeredPane.remove(rightDottedLine); - layeredPane.remove(closeButton); - } - - public JLayeredPane getContentFrame() { - return layeredPane; - } - - /** - * 刷新 - */ - public void refreshDottedLine() { - if (BaseUtils.isAuthorityEditing()) { - populateAuthorityArea(); - populateCloseButton(); - addDottedLine(); - } else { - removeDottedLine(); - } - layeredPane.repaint(); - } - - /** - * 刷新DottedLine - */ - public void doResize() { - removeDottedLine(); - populateAuthorityArea(); - populateCloseButton(); - addDottedLine(); - } - - private MouseListener closeMouseListener = new MouseAdapter() { - public void mousePressed(MouseEvent e) { - closeMode = UIConstants.CLOSE_PRESS_AUTHORITY; - closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); - closeButton.repaint(); - } - - public void mouseExited(MouseEvent e) { - closeMode = UIConstants.CLOSE_OF_AUTHORITY; - closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); - closeButton.repaint(); - } - - public void mouseMoved(MouseEvent e) { - closeMode = UIConstants.CLOSE_OVER_AUTHORITY; - closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); - closeButton.repaint(); - } - - public void mouseReleased(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { - BaseUtils.setAuthorityEditing(false); - WestRegionContainerPane.getInstance().replaceDownPane( - TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); - DesignerContext.getDesignerFrame().resetToolkitByPlus( - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getToolBarMenuDockPlus()); - needToAddAuhtorityPaint(); - refreshDottedLine(); - fireAuthorityStateToNomal(); - } - } - - public void mouseEntered(MouseEvent e) { - closeMode = UIConstants.CLOSE_OVER_AUTHORITY; - closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); - closeButton.repaint(); - } - }; - - /** - * 刷新CloseButton - */ - public void populateCloseButton() { - - closeButton.addMouseListener(closeMouseListener); - closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); - closeButton.setBorder(null); - int x = contentWidth - EastRegionContainerPane.getInstance().getContainerWidth() - closeMode.getIconWidth() / 2; - int y = MENU_HEIGHT - closeMode.getIconHeight() / 2; - closeButton.setBounds(x, y, UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH, - UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH); - } - - /** - * 退出权限编辑时,将所有的做过权限编辑的状态,作为一个状态赋给报、报表主体 - */ - private void fireAuthorityStateToNomal() { - java.util.List> opendedTemplate = HistoryTemplateListPane.getInstance().getHistoryList(); - for (int i = 0; i < opendedTemplate.size(); i++) { - // 如果在权限编辑时做过操作,则将做过的操作作为一个整体状态赋给正在报表 - if (opendedTemplate.get(i).isDoSomethingInAuthority()) { - opendedTemplate.get(i).fireAuthorityStateToNomal(); - } - } - } - - public void setCloseMode(Icon closeMode) { - this.closeMode = closeMode; - } - - private UIToolbar combineUpTooBar(JComponent[] toolbar4Form) { - combineUp = new UIToolbar(FlowLayout.LEFT); - combineUp.setBorder(new MatteBorder(new Insets(0, LEFT_ALIGN_GAP, 1, 0), UIConstants.LINE_COLOR)); - combineUp.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 2)); - UIButton[] fixButtons = ad.createUp(); - for (int i = 0; i < fixButtons.length; i++) { - combineUp.add(fixButtons[i]); - } - if (!BaseUtils.isAuthorityEditing()) { - combineUp.addSeparator(new Dimension(2, 16)); - if (toolbar4Form != null) { - for (int i = 0; i < toolbar4Form.length; i++) { - combineUp.add(toolbar4Form[i]); - } - } - } - - //添加分享按钮 - addShareButton(); - - //添加插件中的按钮 - addExtraButtons(); - - return combineUp; - } - - private void addExtraButtons(){ - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if(jt == null){ - return; - } - - - UIButton[] extraButtons = jt.createExtraButtons(); - for (int i = 0; i < extraButtons.length; i++) { - combineUp.add(extraButtons[i]); - } - if (extraButtons.length > 0) { - combineUp.addSeparator(new Dimension(2, 16)); - } - } - - private void addShareButton(){ - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if(jt == null){ - return; - } - - combineUp.addSeparator(new Dimension(2, 16)); - UIButton[] shareButtons = jt.createShareButton(); - for (int i = 0; i < shareButtons.length; i++) { - combineUp.add(shareButtons[i]); - } - } - - /** - * 检查 - * - * @param flag - * 组件是否可见 - * @param al - * 组件名称 - */ - public void checkCombineUp(boolean flag, ArrayList al) { - combineUp.checkComponentsByNames(flag, al); - - } - - /** - * 刷新工具条. - */ - public void refreshToolbar() { - this.ad.updateToolBarDef(); - } - - /** - * 重置相关的工具条. - * - * @param plus - * 工具条中相关信息 - */ - public void resetToolkitByPlus(ToolBarMenuDockPlus plus) { - if (plus == null) { - plus = ToolBarMenuDock.NULLAVOID; - } - - DesignState designState = new DesignState(plus); - MenuManager.getInstance().setMenus4Designer(designState); - if (menuBar != null) { - menuPane.remove(menuBar); - } - menuPane.add(menuBar = ad.createJMenuBar(plus), BorderLayout.CENTER); - - if (combineUp != null) { - eastCenterPane.remove(combineUp); - combineUp = null; - } - - // 保存撤销那些按钮的面板 - eastCenterPane.add(combineUp = combineUpTooBar(ad.resetUpToolBar(plus)), BorderLayout.NORTH); - - if (toolbarComponent != null) { - toolbarPane.remove(toolbarComponent); - } - - // 颜色,字体那些按钮的工具栏 - toolbarPane.add(toolbarComponent = ad.resetToolBar(toolbarComponent, plus), BorderLayout.CENTER); - - this.checkToolbarMenuEnable(); - this.validate(); - layeredPane.repaint(); - } - - public JComponent getToolbarComponent() { - return this.toolbarComponent; - } - - /** - * 判断是否在权限编辑状态,若是在权限编辑状态,则需要有虚线框和关闭突变 - */ - public void needToAddAuhtorityPaint() { - - newWorkBookPane.setButtonGray(BaseUtils.isAuthorityEditing()); - } - - /** - * 检查工具条. - */ - private void checkToolbarMenuEnable() { - if (this.ad != null) { - this.ad.updateMenuDef(); - this.ad.updateToolBarDef(); - } - } - - /** - * 设置标题 - */ - public void setTitle() { + + public void initTitleIcon() { + try { + @SuppressWarnings("unchecked") + List image = ICODecoder.read(DesignerFrame.class + .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); + this.setIconImages(image); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage(), e); + this.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); + } + } + + private void addWindowListeners(ArrayList listeners) { + for (WindowListener listener : listeners) { + this.addWindowListener(listener); + } + } + + protected ArrayList getFrameListeners() { + ArrayList arrayList = new ArrayList(); + arrayList.add(windowAdapter); + return arrayList; + } + + protected void laoyoutWestPane() { + basePane.add(WestRegionContainerPane.getInstance(), BorderLayout.WEST); + } + + // 调整windows大小 + private void reCalculateFrameSize() { + contentHeight = layeredPane.getHeight(); + contentWidth = layeredPane.getWidth(); + layeredPane.remove(basePane); + basePane.setBounds(0, 0, contentWidth, contentHeight); + layeredPane.add(basePane); + layeredPane.repaint(); + } + + /** + * 更新 + */ + public void populateAuthorityArea() { + int centerWidth = contentWidth - WestRegionContainerPane.getInstance().getContainerWidth() + - EastRegionContainerPane.getInstance().getContainerWidth(); + // 上面的虚线 + upDottedLine = new DottedLine(UIScrollBar.HORIZONTAL, centerWidth); + upDottedLine.setBounds(WestRegionContainerPane.getInstance().getContainerWidth(), MENU_HEIGHT - 1, centerWidth, + 3); + + // 下面的虚线 + downDottedLine = new DottedLine(UIScrollBar.HORIZONTAL, centerWidth); + downDottedLine.setBounds(WestRegionContainerPane.getInstance().getContainerWidth(), contentHeight - 3, + centerWidth, 3); + + // 左边的虚线 + leftDottedLine = new DottedLine(UIScrollBar.VERTICAL, contentHeight - MENU_HEIGHT); + leftDottedLine.setBounds(WestRegionContainerPane.getInstance().getContainerWidth(), MENU_HEIGHT, 3, + contentHeight - MENU_HEIGHT); + + rightDottedLine = new DottedLine(UIScrollBar.VERTICAL, contentHeight - MENU_HEIGHT); + rightDottedLine.setBounds(contentWidth - EastRegionContainerPane.getInstance().getContainerWidth() - 3, + MENU_HEIGHT, 3, contentHeight - MENU_HEIGHT); + + } + + private void addDottedLine() { + layeredPane.add(upDottedLine, SECOND_LAYER); + layeredPane.add(downDottedLine, SECOND_LAYER); + layeredPane.add(leftDottedLine, SECOND_LAYER); + layeredPane.add(rightDottedLine, SECOND_LAYER); + layeredPane.add(closeButton, TOP_LAYER); + } + + private void removeDottedLine() { + layeredPane.remove(upDottedLine); + layeredPane.remove(downDottedLine); + layeredPane.remove(leftDottedLine); + layeredPane.remove(rightDottedLine); + layeredPane.remove(closeButton); + } + + public JLayeredPane getContentFrame() { + return layeredPane; + } + + /** + * 刷新 + */ + public void refreshDottedLine() { + if (BaseUtils.isAuthorityEditing()) { + populateAuthorityArea(); + populateCloseButton(); + addDottedLine(); + } else { + removeDottedLine(); + } + layeredPane.repaint(); + } + + /** + * 刷新DottedLine + */ + public void doResize() { + removeDottedLine(); + populateAuthorityArea(); + populateCloseButton(); + addDottedLine(); + } + + /** + * 刷新CloseButton + */ + public void populateCloseButton() { + + closeButton.addMouseListener(closeMouseListener); + closeButton.setBackground(UIConstants.NORMAL_BACKGROUND); + closeButton.setBorder(null); + int x = contentWidth - EastRegionContainerPane.getInstance().getContainerWidth() - closeMode.getIconWidth() / 2; + int y = MENU_HEIGHT - closeMode.getIconHeight() / 2; + closeButton.setBounds(x, y, UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH, + UIConstants.CLOSE_AUTHORITY_HEIGHT_AND_WIDTH); + } + + /** + * 退出权限编辑时,将所有的做过权限编辑的状态,作为一个状态赋给报、报表主体 + */ + private void fireAuthorityStateToNomal() { + java.util.List> opendedTemplate = HistoryTemplateListPane.getInstance().getHistoryList(); + for (int i = 0; i < opendedTemplate.size(); i++) { + // 如果在权限编辑时做过操作,则将做过的操作作为一个整体状态赋给正在报表 + if (opendedTemplate.get(i).isDoSomethingInAuthority()) { + opendedTemplate.get(i).fireAuthorityStateToNomal(); + } + } + } + + public void setCloseMode(Icon closeMode) { + this.closeMode = closeMode; + } + + private UIToolbar combineUpTooBar(JComponent[] toolbar4Form) { + combineUp = new UIToolbar(FlowLayout.LEFT); + combineUp.setBorder(new MatteBorder(new Insets(0, LEFT_ALIGN_GAP, 1, 0), UIConstants.LINE_COLOR)); + combineUp.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 2)); + UIButton[] fixButtons = ad.createUp(); + for (int i = 0; i < fixButtons.length; i++) { + combineUp.add(fixButtons[i]); + } + if (!BaseUtils.isAuthorityEditing()) { + combineUp.addSeparator(new Dimension(2, 16)); + if (toolbar4Form != null) { + for (int i = 0; i < toolbar4Form.length; i++) { + combineUp.add(toolbar4Form[i]); + } + } + } + + //添加分享按钮 + addShareButton(); + + //添加插件中的按钮 + addExtraButtons(); + + return combineUp; + } + + private void addExtraButtons() { + JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (jt == null) { + return; + } + + + UIButton[] extraButtons = jt.createExtraButtons(); + for (int i = 0; i < extraButtons.length; i++) { + combineUp.add(extraButtons[i]); + } + if (extraButtons.length > 0) { + combineUp.addSeparator(new Dimension(2, 16)); + } + } + + private void addShareButton() { + JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (jt == null) { + return; + } + + combineUp.addSeparator(new Dimension(2, 16)); + UIButton[] shareButtons = jt.createShareButton(); + for (int i = 0; i < shareButtons.length; i++) { + combineUp.add(shareButtons[i]); + } + } + + /** + * 检查 + * + * @param flag 组件是否可见 + * @param al 组件名称 + */ + public void checkCombineUp(boolean flag, ArrayList al) { + combineUp.checkComponentsByNames(flag, al); + + } + + /** + * 刷新工具条. + */ + public void refreshToolbar() { + this.ad.updateToolBarDef(); + } + + /** + * 重置相关的工具条. + * + * @param plus 工具条中相关信息 + */ + public void resetToolkitByPlus(ToolBarMenuDockPlus plus) { + if (plus == null) { + plus = ToolBarMenuDock.NULLAVOID; + } + + DesignState designState = new DesignState(plus); + MenuManager.getInstance().setMenus4Designer(designState); + if (menuBar != null) { + menuPane.remove(menuBar); + } + menuPane.add(menuBar = ad.createJMenuBar(plus), BorderLayout.CENTER); + + if (combineUp != null) { + eastCenterPane.remove(combineUp); + combineUp = null; + } + + // 保存撤销那些按钮的面板 + eastCenterPane.add(combineUp = combineUpTooBar(ad.resetUpToolBar(plus)), BorderLayout.NORTH); + + if (toolbarComponent != null) { + toolbarPane.remove(toolbarComponent); + } + + // 颜色,字体那些按钮的工具栏 + toolbarPane.add(toolbarComponent = ad.resetToolBar(toolbarComponent, plus), BorderLayout.CENTER); + + this.checkToolbarMenuEnable(); + this.validate(); + layeredPane.repaint(); + } + + public JComponent getToolbarComponent() { + return this.toolbarComponent; + } + + /** + * 判断是否在权限编辑状态,若是在权限编辑状态,则需要有虚线框和关闭突变 + */ + public void needToAddAuhtorityPaint() { + + newWorkBookPane.setButtonGray(BaseUtils.isAuthorityEditing()); + } + + /** + * 检查工具条. + */ + private void checkToolbarMenuEnable() { + if (this.ad != null) { + this.ad.updateMenuDef(); + this.ad.updateToolBarDef(); + } + } + + /** + * 设置标题 + */ + public void setTitle() { JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); StringBuilder defaultTitleSB = new StringBuilder(); defaultTitleSB.append(ProductConstants.PRODUCT_NAME); - defaultTitleSB.append(" "); - defaultTitleSB.append(ProductConstants.BRANCH); - // james:标识登录的用户和登录的ENV - String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); - Env env = DesignerEnvManager.getEnvManager().getEnv(envName); - if (env != null) { - defaultTitleSB.append(env.getUser()).append('@').append(envName).append('['); - defaultTitleSB.append(env.getEnvDescription()); - defaultTitleSB.append(']'); - if (editingTemplate != null) { - String path = editingTemplate.getEditingFILE().getPath(); - if (!editingTemplate.getEditingFILE().exists()) { - path = FILEFactory.MEM_PREFIX + path; - } else if (path.startsWith(ProjectConstants.REPORTLETS_NAME)) { - path = env.getPath() + File.separator + path; - } - defaultTitleSB.append(" " + path); - } - - } - setTitle(defaultTitleSB.toString()); - } - - /** - * modify window bounds. - */ - private void modWindowBounds() { - // set the window bounds to the same as last closed - DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); - Rectangle windowBounds = designerEnvManager.getWindowBounds(); - if (windowBounds != null) { - int locX = windowBounds.x; - int locY = windowBounds.y; - - if (!OperatingSystem.isWindows()) { - locX = Math.max(1, locX); - locY = Math.max(1, locY); - } - - this.setLocation(new Point(locX, locY)); - - int width = windowBounds.width; - int height = windowBounds.height; - if (width > MIN_SIZE.width && height > MIN_SIZE.height) { - this.setSize(width, height); - } else { - GUICoreUtils.setWindowFullScreen(this); - } - } else { - GUICoreUtils.setWindowFullScreen(this); - } - } - - + defaultTitleSB.append(" "); + defaultTitleSB.append(ProductConstants.BRANCH); + // james:标识登录的用户和登录的ENV + String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); + Env env = DesignerEnvManager.getEnvManager().getEnv(envName); + if (env != null) { + defaultTitleSB.append(env.getUser()).append('@').append(envName).append('['); + defaultTitleSB.append(env.getEnvDescription()); + defaultTitleSB.append(']'); + if (editingTemplate != null) { + String path = editingTemplate.getEditingFILE().getPath(); + if (!editingTemplate.getEditingFILE().exists()) { + path = FILEFactory.MEM_PREFIX + path; + } else if (path.startsWith(ProjectConstants.REPORTLETS_NAME)) { + path = env.getPath() + File.separator + path; + } + defaultTitleSB.append(" " + path); + } + + } + setTitle(defaultTitleSB.toString()); + } + + /** + * modify window bounds. + */ + private void modWindowBounds() { + // set the window bounds to the same as last closed + DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); + Rectangle windowBounds = designerEnvManager.getWindowBounds(); + if (windowBounds != null) { + int locX = windowBounds.x; + int locY = windowBounds.y; + + if (!OperatingSystem.isWindows()) { + locX = Math.max(1, locX); + locY = Math.max(1, locY); + } + + this.setLocation(new Point(locX, locY)); + + int width = windowBounds.width; + int height = windowBounds.height; + if (width > MIN_SIZE.width && height > MIN_SIZE.height) { + this.setSize(width, height); + } else { + GUICoreUtils.setWindowFullScreen(this); + } + } else { + GUICoreUtils.setWindowFullScreen(this); + } + } + + /** * 报表运行环境改变时,需要刷新某些面板 * * @param env 环境 */ public void refreshEnv(Env env) { - + this.setTitle(); DesignerFrameFileDealerPane.getInstance().refreshDockingView(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); TemplateTreePane.getInstance().refreshDockingView(); DesignTableDataManager.clearGlobalDs(); - EastRegionContainerPane.getInstance().refreshDownPane(); - } - - /** - * 返回选中的模板. - */ - public JTemplate getSelectedJTemplate() { - return this.centerTemplateCardPane.getSelectedJTemplate(); - } - - /** - * 保存当前编辑的模板 - */ - - public void saveCurrentEditingTemplate() { - JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (editingTemplate == null) { - return; - } - if (editingTemplate.isSaved()) {// isSaved == true表示已经保存过,或者新建的一张模板 - if (editingTemplate.getEditingFILE().exists()) {// 表示磁盘上的某一张已经保存过的模板,要添加到历史中 - // HistoryTemplateListPane.getInstance().addHistory(); - } - } else { - editingTemplate.stopEditing(); - if (!editingTemplate.getEditingFILE().exists()) { - int returnVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), - Inter.getLocText("Utils-Would_you_like_to_save") + " \"" + editingTemplate.getEditingFILE() - + "\" ?", ProductConstants.PRODUCT_NAME, JOptionPane.YES_NO_OPTION, - JOptionPane.QUESTION_MESSAGE); - if (returnVal == JOptionPane.YES_OPTION && editingTemplate.saveTemplate()) { - editingTemplate.saveTemplate(); - FRLogger.getLogger().log( - Level.INFO, - Inter.getLocText(new String[] { "Template", "already-saved" }, new String[] { - editingTemplate.getEditingFILE().getName(), "." })); - } - } else { - if (editingTemplate.saveTemplate()) { - editingTemplate.saveTemplate(); - FRLogger.getLogger().log( - Level.INFO, - Inter.getLocText(new String[] { "Template", "already-saved" }, new String[] { - editingTemplate.getEditingFILE().getName(), "." })); - } - } - } - } - - /** - * 添加新建模板, 并激活. - */ - public void addAndActivateJTemplate() { - addAndActivateJTemplate(ad.createNewTemplate()); - layeredPane.repaint(); - } - - /** - * 添加 模板, 并激活. - * - * @param jt - * 添加的模板. - */ - public void addAndActivateJTemplate(JTemplate jt) { - if (jt == null || jt.getEditingFILE() == null) { - return; - } - jt.addJTemplateActionListener(this); - jt.addTargetModifiedListener(this); - centerTemplateCardPane.showJTemplate(jt); - setTitle(); - layeredPane.repaint(); - } - - /** - * 激活已经存在的模板 - * - * @param jt - * 模板 - */ - public void activateJTemplate(JTemplate jt) { - if (jt == null || jt.getEditingFILE() == null) { - return; - } - centerTemplateCardPane.showJTemplate(jt); - setTitle(); - layeredPane.repaint(); - } - - /** - * 对象侦听 - * - * @param e - * 事件 - */ - public void targetModified(TargetModifiedEvent e) { - this.checkToolbarMenuEnable(); - } - - /** - * 模板关闭时 处理. - * - * @param jt - * 模板 - */ - public void templateClosed(JTemplate jt) { - } - - /** - * 模板打开时 处理. - * - * @param jt - * 模板 - */ - public void templateOpened(JTemplate jt) { - } - - /** - * 模板保存时 处理. - * - * @param jt - * 模板 - */ - public void templateSaved(JTemplate jt) { - this.checkToolbarMenuEnable(); - } - - /** - * 打开模板文件,如果是已经打开的就激活此模板所对应的JInternalFrame - * - * @param tplFile - * 文件 - */ - public void openTemplate(FILE tplFile) { - // 测试连接,如果连接失败,则提示 - try { - if (FRContext.getCurrentEnv() != null - && !FRContext.getCurrentEnv().testServerConnectionWithOutShowMessagePane()) { - JOptionPane.showMessageDialog( - DesignerContext.getDesignerFrame(), - Inter.getLocText(new String[] { "FR-Chart-Server_disconnected", "FR-Server-Design_template_unopened" }, new String[] { - ",", "!" }), Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); - return; - } - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - - // p:判断一下,如何文件为空或者文件不存在,直接返回. - if (tplFile == null || !tplFile.exists()) { - JOptionPane.showMessageDialog(this, Inter.getLocText("Warning-Template_Do_Not_Exsit"), - ProductConstants.PRODUCT_NAME, JOptionPane.INFORMATION_MESSAGE); - DesignerFrameFileDealerPane.getInstance().refresh(); - return; - } + EastRegionContainerPane.getInstance().refreshDownPane(); + } + + /** + * 返回选中的模板. + */ + public JTemplate getSelectedJTemplate() { + return this.centerTemplateCardPane.getSelectedJTemplate(); + } + + /** + * 保存当前编辑的模板 + */ + + public void saveCurrentEditingTemplate() { + JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (editingTemplate == null) { + return; + } + if (editingTemplate.isSaved()) {// isSaved == true表示已经保存过,或者新建的一张模板 + if (editingTemplate.getEditingFILE().exists()) {// 表示磁盘上的某一张已经保存过的模板,要添加到历史中 + // HistoryTemplateListPane.getInstance().addHistory(); + } + } else { + editingTemplate.stopEditing(); + if (!editingTemplate.getEditingFILE().exists()) { + int returnVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), + Inter.getLocText("Utils-Would_you_like_to_save") + " \"" + editingTemplate.getEditingFILE() + + "\" ?", ProductConstants.PRODUCT_NAME, JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + if (returnVal == JOptionPane.YES_OPTION && editingTemplate.saveTemplate()) { + editingTemplate.saveTemplate(); + FRLogger.getLogger().log( + Level.INFO, + Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{ + editingTemplate.getEditingFILE().getName(), "."})); + } + } else { + if (editingTemplate.saveTemplate()) { + editingTemplate.saveTemplate(); + FRLogger.getLogger().log( + Level.INFO, + Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{ + editingTemplate.getEditingFILE().getName(), "."})); + } + } + } + } + + /** + * 添加新建模板, 并激活. + */ + public void addAndActivateJTemplate() { + addAndActivateJTemplate(ad.createNewTemplate()); + layeredPane.repaint(); + } + + /** + * 添加 模板, 并激活. + * + * @param jt 添加的模板. + */ + public void addAndActivateJTemplate(JTemplate jt) { + if (jt == null || jt.getEditingFILE() == null) { + return; + } + jt.addJTemplateActionListener(this); + jt.addTargetModifiedListener(this); + centerTemplateCardPane.showJTemplate(jt); + setTitle(); + layeredPane.repaint(); + } + + /** + * 激活已经存在的模板 + * + * @param jt 模板 + */ + public void activateJTemplate(JTemplate jt) { + if (jt == null || jt.getEditingFILE() == null) { + return; + } + centerTemplateCardPane.showJTemplate(jt); + setTitle(); + layeredPane.repaint(); + } + + /** + * 对象侦听 + * + * @param e 事件 + */ + public void targetModified(TargetModifiedEvent e) { + this.checkToolbarMenuEnable(); + } + + /** + * 模板关闭时 处理. + * + * @param jt 模板 + */ + public void templateClosed(JTemplate jt) { + } + + /** + * 模板打开时 处理. + * + * @param jt 模板 + */ + public void templateOpened(JTemplate jt) { + } + + /** + * 模板保存时 处理. + * + * @param jt 模板 + */ + public void templateSaved(JTemplate jt) { + this.checkToolbarMenuEnable(); + } + + /** + * 打开模板文件,如果是已经打开的就激活此模板所对应的JInternalFrame + * + * @param tplFile 文件 + */ + public void openTemplate(FILE tplFile) { + // 测试连接,如果连接失败,则提示 + try { + if (FRContext.getCurrentEnv() != null + && !FRContext.getCurrentEnv().testServerConnectionWithOutShowMessagePane()) { + JOptionPane.showMessageDialog( + DesignerContext.getDesignerFrame(), + Inter.getLocText(new String[]{"FR-Chart-Server_disconnected", "FR-Server-Design_template_unopened"}, new String[]{ + ",", "!"}), Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); + return; + } + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage()); + } + + // p:判断一下,如何文件为空或者文件不存在,直接返回. + if (tplFile == null || !tplFile.exists()) { + JOptionPane.showMessageDialog(this, Inter.getLocText("Warning-Template_Do_Not_Exsit"), + ProductConstants.PRODUCT_NAME, JOptionPane.INFORMATION_MESSAGE); + DesignerFrameFileDealerPane.getInstance().refresh(); + return; + } try { openFile(tplFile); @@ -844,209 +846,198 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta addAndActivateJTemplate(); } - } - - /** - * 是否不合版本的设计器 - * - * @param jt - * 当前模板 - * - * @return 是否不合版本 - * - * - * @date 2014-10-14-下午6:30:37 - */ - private boolean inValidDesigner(JTemplate jt) { - return jt.isOldDesigner() || (!jt.isJWorkBook() && jt.isNewDesigner()); - } - - /** - * 打开指定的文件 - * - * @param tplFile - * 指定的文件 - * - * - * @date 2014-10-14-下午6:31:05 - */ - private void openFile(FILE tplFile) { - String fileName = tplFile.getName(); - int indexOfLastDot = fileName.lastIndexOf(CoreConstants.DOT); - if (indexOfLastDot < 0) { - return; - } - String fileExtention = fileName.substring(indexOfLastDot + 1); - for (int i = 0, len = appList.size(); i < len; i++) { - App app = appList.get(i); - String[] defaultAppExtentions = app.defaultExtentions(); - boolean opened = false; - for (int j = 0; j < defaultAppExtentions.length; j++) { - if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) { - JTemplate jt = null; - try { - jt = app.openTemplate(tplFile); - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); - } - if (jt == null) { - return; - } - // 新的form不往前兼容 - if (inValidDesigner(jt)) { - this.addAndActivateJTemplate(); - MutilTempalteTabPane.getInstance().setTemTemplate( - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - } else { - activeTemplate(tplFile, jt); - } - opened = true; - break; - } - } - if (opened) { - break; - } - } - } - - /** - * 激活指定的模板 - * - * @param tplFile - * 模板文件 - * @param jt - * 当前报表 - * - * - * @date 2014-10-14-下午6:31:23 - */ - private void activeTemplate(FILE tplFile, JTemplate jt) { - // 如果该模板已经打开,则进行激活就可以了 - String fullName = StableUtils.pathJoin(new String[] { ProjectConstants.REPORTLETS_NAME, tplFile.getName() }); - if (tplFile instanceof FileNodeFILE) { - fullName = ((FileNodeFILE) tplFile).getEnvPath() + "/" + tplFile.getPath(); - } - // 如果是从文件夹打开的文件,不是从设计器文件树打开的文件,则直接取path就行 - if (tplFile instanceof FileFILE) { - fullName = tplFile.getPath(); - } - fullName = fullName.replaceAll("/", "\\\\"); - int index = HistoryTemplateListPane.getInstance().contains(fullName); - if (index != -1) { - this.activateJTemplate(HistoryTemplateListPane.getInstance().getHistoryList().get(index)); - } else { - this.addAndActivateJTemplate(jt); - } - - } - - /** - * Exit退出 - */ - public void exit() { - Thread thread = new Thread() { - @Override - public void run() { - DesignerEnvManager.doEndMapSaveWorkersIndesign(); - } - }; - thread.start(); - - try { - thread.join(); - } catch (InterruptedException e) { - FRLogger.getLogger().error("Map Thread Error"); - } - - DesignerEnvManager.getEnvManager().setLastOpenFile( - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getEditingFILE().getPath()); - - DesignerEnvManager.getEnvManager().setLastWestRegionToolPaneY( - WestRegionContainerPane.getInstance().getToolPaneY()); - DesignerEnvManager.getEnvManager().setLastWestRegionContainerWidth( - WestRegionContainerPane.getInstance().getContainerWidth()); - DesignerEnvManager.getEnvManager().setLastEastRegionToolPaneY( - EastRegionContainerPane.getInstance().getToolPaneY()); - DesignerEnvManager.getEnvManager().setLastEastRegionContainerWidth( - EastRegionContainerPane.getInstance().getContainerWidth()); - - DesignerEnvManager.getEnvManager().saveXMLFile(); - - Env currentEnv = FRContext.getCurrentEnv(); - try { - currentEnv.signOut(); - GeneralContext.fireEnvSignOutListener(); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - this.setVisible(false); - this.dispose(); - - this.ad.shutDown(); - - System.exit(0); - } - - // harry:添加程序外拖拽文件进来打开的功能 - class FileDropTargetListener implements DropTargetListener { - - @Override - public void dragEnter(DropTargetDragEvent event) { - } - - @Override - public void dragExit(DropTargetEvent event) { - } - - @Override - public void dragOver(DropTargetDragEvent event) { - } - - @Override - public void dropActionChanged(DropTargetDragEvent event) { - if (!isDragAcceptable(event)) { - event.rejectDrag(); - return; - } - } - - @SuppressWarnings("unchecked") - @Override - public void drop(DropTargetDropEvent event) { - if (!isDropAcceptable(event)) { - event.rejectDrop(); - return; - } - - event.acceptDrop(DnDConstants.ACTION_MOVE); - Transferable transferable = event.getTransferable(); - DataFlavor[] flavors = transferable.getTransferDataFlavors(); - for (int i = 0; i < flavors.length; i++) { - DataFlavor d = flavors[i]; - try { - if (ComparatorUtils.equals(d, DataFlavor.javaFileListFlavor)) { - List fileList = (List) transferable.getTransferData(d); - Iterator iterator = fileList.iterator(); - while (iterator.hasNext()) { - File f = iterator.next(); - DesignerContext.getDesignerFrame().openTemplate(new FileFILE(f)); - } - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - event.dropComplete(true); - } - - public boolean isDragAcceptable(DropTargetDragEvent event) { - return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0; - } - - public boolean isDropAcceptable(DropTargetDropEvent event) { - return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0; - } - } + } + + /** + * 是否不合版本的设计器 + * + * @param jt 当前模板 + * @return 是否不合版本 + * @date 2014-10-14-下午6:30:37 + */ + private boolean inValidDesigner(JTemplate jt) { + return jt.isOldDesigner() || (!jt.isJWorkBook() && jt.isNewDesigner()); + } + + /** + * 打开指定的文件 + * + * @param tplFile 指定的文件 + * @date 2014-10-14-下午6:31:05 + */ + private void openFile(FILE tplFile) { + String fileName = tplFile.getName(); + int indexOfLastDot = fileName.lastIndexOf(CoreConstants.DOT); + if (indexOfLastDot < 0) { + return; + } + String fileExtention = fileName.substring(indexOfLastDot + 1); + for (int i = 0, len = appList.size(); i < len; i++) { + App app = appList.get(i); + String[] defaultAppExtentions = app.defaultExtentions(); + boolean opened = false; + for (int j = 0; j < defaultAppExtentions.length; j++) { + if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) { + JTemplate jt = null; + try { + jt = app.openTemplate(tplFile); + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage(), e); + } + if (jt == null) { + return; + } + // 新的form不往前兼容 + if (inValidDesigner(jt)) { + this.addAndActivateJTemplate(); + MutilTempalteTabPane.getInstance().setTemTemplate( + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); + } else { + activeTemplate(tplFile, jt); + } + opened = true; + break; + } + } + if (opened) { + break; + } + } + } + + /** + * 激活指定的模板 + * + * @param tplFile 模板文件 + * @param jt 当前报表 + * @date 2014-10-14-下午6:31:23 + */ + private void activeTemplate(FILE tplFile, JTemplate jt) { + // 如果该模板已经打开,则进行激活就可以了 + String fullName = StableUtils.pathJoin(new String[]{ProjectConstants.REPORTLETS_NAME, tplFile.getName()}); + if (tplFile instanceof FileNodeFILE) { + fullName = ((FileNodeFILE) tplFile).getEnvPath() + "/" + tplFile.getPath(); + } + // 如果是从文件夹打开的文件,不是从设计器文件树打开的文件,则直接取path就行 + if (tplFile instanceof FileFILE) { + fullName = tplFile.getPath(); + } + fullName = fullName.replaceAll("/", "\\\\"); + int index = HistoryTemplateListPane.getInstance().contains(fullName); + if (index != -1) { + this.activateJTemplate(HistoryTemplateListPane.getInstance().getHistoryList().get(index)); + } else { + this.addAndActivateJTemplate(jt); + } + + } + + /** + * Exit退出 + */ + public void exit() { + Thread thread = new Thread() { + @Override + public void run() { + DesignerEnvManager.doEndMapSaveWorkersIndesign(); + } + }; + thread.start(); + + try { + thread.join(); + } catch (InterruptedException e) { + FRLogger.getLogger().error("Map Thread Error"); + } + + DesignerEnvManager.getEnvManager().setLastOpenFile( + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getEditingFILE().getPath()); + + DesignerEnvManager.getEnvManager().setLastWestRegionToolPaneY( + WestRegionContainerPane.getInstance().getToolPaneY()); + DesignerEnvManager.getEnvManager().setLastWestRegionContainerWidth( + WestRegionContainerPane.getInstance().getContainerWidth()); + DesignerEnvManager.getEnvManager().setLastEastRegionToolPaneY( + EastRegionContainerPane.getInstance().getToolPaneY()); + DesignerEnvManager.getEnvManager().setLastEastRegionContainerWidth( + EastRegionContainerPane.getInstance().getContainerWidth()); + + DesignerEnvManager.getEnvManager().saveXMLFile(); + + Env currentEnv = FRContext.getCurrentEnv(); + try { + currentEnv.signOut(); + GeneralContext.fireEnvSignOutListener(); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + this.setVisible(false); + this.dispose(); + + this.ad.shutDown(); + + System.exit(0); + } + + // harry:添加程序外拖拽文件进来打开的功能 + class FileDropTargetListener implements DropTargetListener { + + @Override + public void dragEnter(DropTargetDragEvent event) { + } + + @Override + public void dragExit(DropTargetEvent event) { + } + + @Override + public void dragOver(DropTargetDragEvent event) { + } + + @Override + public void dropActionChanged(DropTargetDragEvent event) { + if (!isDragAcceptable(event)) { + event.rejectDrag(); + return; + } + } + + @SuppressWarnings("unchecked") + @Override + public void drop(DropTargetDropEvent event) { + if (!isDropAcceptable(event)) { + event.rejectDrop(); + return; + } + + event.acceptDrop(DnDConstants.ACTION_MOVE); + Transferable transferable = event.getTransferable(); + DataFlavor[] flavors = transferable.getTransferDataFlavors(); + for (int i = 0; i < flavors.length; i++) { + DataFlavor d = flavors[i]; + try { + if (ComparatorUtils.equals(d, DataFlavor.javaFileListFlavor)) { + List fileList = (List) transferable.getTransferData(d); + Iterator iterator = fileList.iterator(); + while (iterator.hasNext()) { + File f = iterator.next(); + DesignerContext.getDesignerFrame().openTemplate(new FileFILE(f)); + } + } + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + event.dropComplete(true); + } + + public boolean isDragAcceptable(DropTargetDragEvent event) { + return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0; + } + + public boolean isDropAcceptable(DropTargetDropEvent event) { + return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0; + } + } } \ No newline at end of file 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 a8305a49ac..258a9e22bb 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -5,17 +5,33 @@ package com.fr.design.mainframe.toolbar; import com.fr.base.BaseUtils; import com.fr.base.FRContext; -import com.fr.base.FRCoreContext; import com.fr.design.DesignState; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; -import com.fr.design.actions.community.*; -import com.fr.design.actions.file.*; +import com.fr.design.actions.community.BBSAction; +import com.fr.design.actions.community.BugAction; +import com.fr.design.actions.community.NeedAction; +import com.fr.design.actions.community.QuestionAction; +import com.fr.design.actions.community.SignAction; +import com.fr.design.actions.community.UpAction; +import com.fr.design.actions.community.VideoAction; +import com.fr.design.actions.file.CloseCurrentTemplateAction; +import com.fr.design.actions.file.ExitDesignerAction; +import com.fr.design.actions.file.OpenRecentReportMenuDef; +import com.fr.design.actions.file.OpenTemplateAction; +import com.fr.design.actions.file.PreferenceAction; +import com.fr.design.actions.file.SwitchExistEnv; import com.fr.design.actions.help.AboutAction; import com.fr.design.actions.help.TutorialAction; import com.fr.design.actions.help.WebDemoAction; import com.fr.design.actions.help.alphafine.AlphaFineAction; -import com.fr.design.actions.server.*; +import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; +import com.fr.design.actions.server.ConnectionListAction; +import com.fr.design.actions.server.FunctionManagerAction; +import com.fr.design.actions.server.GlobalParameterAction; +import com.fr.design.actions.server.GlobalTableDataAction; +import com.fr.design.actions.server.PlatformManagerAction; +import com.fr.design.actions.server.PluginManagerAction; import com.fr.design.file.NewTemplatePane; import com.fr.design.fun.MenuHandler; import com.fr.design.fun.TableDataPaneProcessor; @@ -35,7 +51,6 @@ import com.fr.env.RemoteEnv; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.Inter; -import com.fr.general.VT4FR; import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginRuntime; import com.fr.plugin.manage.PluginFilter; @@ -48,8 +63,11 @@ import com.fr.stable.StringUtils; import javax.swing.*; import java.awt.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Locale; +import java.util.Set; /** * @author richer @@ -61,12 +79,63 @@ import java.util.List; * 还有docking的状态的保存,下次打开设计器,也应该是这样的 */ public abstract class ToolBarMenuDock { + public static final int PANLE_HEIGNT = 26; + public static final ToolBarMenuDockPlus NULLAVOID = new ToolBarMenuDockPlus() { + + @Override + public ToolBarDef[] toolbars4Target() { + return new ToolBarDef[0]; + } + + + @Override + public ShortCut[] shortcut4FileMenu() { + return new ShortCut[0]; + } + + @Override + public MenuDef[] menus4Target() { + return new MenuDef[0]; + } + + @Override + public JPanel[] toolbarPanes4Form() { + return new JPanel[0]; + } + + public JComponent[] toolBarButton4Form() { + return new JComponent[0]; + } + + public JComponent toolBar4Authority() { + return new JPanel(); + } + + @Override + public int getMenuState() { + return DesignState.WORK_SHEET; + } + + public int getToolBarHeight() { + return PANLE_HEIGNT; + } + + /** + * 导出菜单的子菜单 ,目前用于图表设计器 + * + * @return 子菜单 + */ + public ShortCut[] shortcut4ExportMenu() { + return new ShortCut[0]; + } + + }; private static final String FINEREPORT = "FineReport"; private static final int MENUBAR_HEIGHT = 22; - public static final int PANLE_HEIGNT = 26; private MenuDef[] menus; private ToolBarDef toolBarDef; private List shortCutsList; + /** * 更新菜单 */ @@ -118,6 +187,10 @@ public abstract class ToolBarMenuDock { return jMenuBar; } + ////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////menu below///////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////// + /** * 生成报表设计和表单设计的编辑区域 * @@ -127,10 +200,6 @@ public abstract class ToolBarMenuDock { return null; } - ////////////////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////menu below///////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////////// - public MenuDef[] menus(final ToolBarMenuDockPlus plus) { java.util.List menuList = new java.util.ArrayList(); // 添加文件菜单 @@ -164,6 +233,7 @@ public abstract class ToolBarMenuDock { /** * 获取所有actionmodel + * * @param menuList */ private void addAllUpdateActionsToList(List menuList) { @@ -175,6 +245,7 @@ public abstract class ToolBarMenuDock { /** * 递归获取所有UpdateAction + * * @param menuDef */ private void addUpdateActionToList(MenuDef menuDef, int level) { @@ -195,11 +266,11 @@ public abstract class ToolBarMenuDock { } } - public void addCommunityMenuDef(java.util.List menuList){ + public void addCommunityMenuDef(java.util.List menuList) { Locale locale = FRContext.getLocale(); - Locale [] locales =supportCommunityLocales(); - for(int i = 0; i < locales.length; i++) { - if(locale.equals(locales[i])){ + Locale[] locales = supportCommunityLocales(); + for (int i = 0; i < locales.length; i++) { + if (locale.equals(locales[i])) { menuList.add(createCommunityMenuDef()); break; } @@ -218,13 +289,13 @@ public abstract class ToolBarMenuDock { // 给菜单加插件入口 for (MenuDef m : menuDefs) { switch (m.getAnchor()) { - case MenuHandler.TEMPLATE : + case MenuHandler.TEMPLATE: insertMenu(m, MenuHandler.TEMPLATE, new TemplateTargetAction(plus)); break; - case MenuHandler.INSERT : + case MenuHandler.INSERT: insertMenu(m, MenuHandler.INSERT); break; - case MenuHandler.CELL : + case MenuHandler.CELL: insertMenu(m, MenuHandler.CELL); break; default: @@ -271,7 +342,7 @@ public abstract class ToolBarMenuDock { addSwitchExistEnvAction(menuDef); - menuDef.addShortCut( new ExitDesignerAction()); + menuDef.addShortCut(new ExitDesignerAction()); insertMenu(menuDef, MenuHandler.FILE); return menuDef; @@ -293,7 +364,7 @@ public abstract class ToolBarMenuDock { menuDef.addShortCut(new SwitchExistEnv()); } - protected ShortCut openTemplateAction(){ + protected ShortCut openTemplateAction() { return new OpenTemplateAction(); } @@ -308,17 +379,15 @@ public abstract class ToolBarMenuDock { * 创建论坛登录面板, chart那边不需要 * * @return 面板组件 - * */ - public Component createBBSLoginPane(){ + public Component createBBSLoginPane() { return new UILabel(); } - public Component createAlphafinePane(){ + public Component createAlphaFinePane() { return new UILabel(); } - protected MenuDef createServerMenuDef(ToolBarMenuDockPlus plus) { MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_M-Server"), 'S'); @@ -361,6 +430,7 @@ public abstract class ToolBarMenuDock { /** * 创建帮助子菜单 + * * @return 帮组菜单的子菜单 */ public ShortCut[] createHelpShortCuts() { @@ -372,25 +442,22 @@ public abstract class ToolBarMenuDock { shortCuts.add(new TutorialAction()); } shortCuts.add(SeparatorDef.DEFAULT); - //shortCuts.add(new TutorialAction()); shortCuts.add(SeparatorDef.DEFAULT); - if (ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)) { - - // mod by anchore 16/11/17 去掉反馈 - //shortCuts.add(new FeedBackAction()); + if (ComparatorUtils.equals(ProductConstants.APP_NAME, FINEREPORT)) { shortCuts.add(SeparatorDef.DEFAULT); + } + if (AlphaFineConfigManager.isALPHALicAvailable()) { + shortCuts.add(new AlphaFineAction()); shortCuts.add(SeparatorDef.DEFAULT); - // shortCuts.add(new ForumAction()); } shortCuts.add(SeparatorDef.DEFAULT); - shortCuts.add(new AlphaFineAction()); - shortCuts.add(SeparatorDef.DEFAULT); shortCuts.add(new AboutAction()); return shortCuts.toArray(new ShortCut[shortCuts.size()]); } /** * 创建社区子菜单 + * * @return 社区菜单的子菜单 */ public ShortCut[] createCommunityShortCuts() { @@ -405,6 +472,7 @@ public abstract class ToolBarMenuDock { shortCuts.add(new SignAction()); return shortCuts.toArray(new ShortCut[shortCuts.size()]); } + public MenuDef createHelpMenuDef() { MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_Help"), 'H'); ShortCut[] otherHelpShortCuts = createHelpShortCuts(); @@ -414,6 +482,7 @@ public abstract class ToolBarMenuDock { insertMenu(menuDef, MenuHandler.HELP); return menuDef; } + public MenuDef createCommunityMenuDef() { MenuDef menuDef = new MenuDef(Inter.getLocText("FR-Designer_COMMUNITY"), 'C'); ShortCut[] otherCommunityShortCuts = createCommunityShortCuts(); @@ -423,6 +492,7 @@ public abstract class ToolBarMenuDock { insertMenu(menuDef, MenuHandler.BBS); return menuDef; } + /** * 生成工具栏 * @@ -460,7 +530,6 @@ public abstract class ToolBarMenuDock { } } - protected JPanel polyToolBar(String text) { JPanel panel = new JPanel(new BorderLayout()) { public Dimension getPreferredSize() { @@ -477,7 +546,6 @@ public abstract class ToolBarMenuDock { return panel; } - /** * 重置上面的工具栏 * @@ -488,7 +556,6 @@ public abstract class ToolBarMenuDock { return plus.toolBarButton4Form(); } - /** * 创建大的工具按钮 * @@ -507,62 +574,11 @@ public abstract class ToolBarMenuDock { return new UIButton[0]; } - protected void refreshLargeToolbarState() { } - public static final ToolBarMenuDockPlus NULLAVOID = new ToolBarMenuDockPlus() { - - @Override - public ToolBarDef[] toolbars4Target() { - return new ToolBarDef[0]; - } - - - @Override - public ShortCut[] shortcut4FileMenu() { - return new ShortCut[0]; - } - - @Override - public MenuDef[] menus4Target() { - return new MenuDef[0]; - } - - @Override - public JPanel[] toolbarPanes4Form() { - return new JPanel[0]; - } - - public JComponent[] toolBarButton4Form() { - return new JComponent[0]; - } - - public JComponent toolBar4Authority() { - return new JPanel(); - } - - @Override - public int getMenuState() { - return DesignState.WORK_SHEET; - } - public int getToolBarHeight(){ - return PANLE_HEIGNT; - } - - /** - * 导出菜单的子菜单 ,目前用于图表设计器 - * - * @return 子菜单 - */ - public ShortCut[] shortcut4ExportMenu(){ - return new ShortCut[0]; - } - - }; - - public NewTemplatePane getNewTemplatePane(){ + public NewTemplatePane getNewTemplatePane() { return new NewTemplatePane() { @Override public Icon getNew() { @@ -584,28 +600,28 @@ public abstract class ToolBarMenuDock { protected void insertMenu(MenuDef menuDef, String anchor) { insertMenu(menuDef, anchor, new NoTargetAction()); } - + protected void insertMenu(MenuDef menuDef, String anchor, ShortCutMethodAction action) { - + listenPluginMenuChange(menuDef, anchor, action); Set set = ExtraDesignClassManager.getInstance().getArray(MenuHandler.MARK_STRING); addExtraMenus(menuDef, anchor, action, set); - + } - + private void listenPluginMenuChange(final MenuDef menuDef, final String anchor, final ShortCutMethodAction action) { - + PluginFilter filter = new PluginFilter() { - + @Override public boolean accept(PluginContext context) { - + return context.contain(MenuHandler.MARK_STRING); } }; - + GeneralContext.listenPlugin(PluginEventType.BeforeStop, new PluginEventListener() { - + @Override public void on(PluginEvent event) { PluginRuntime runtime = event.getContext().getRuntime(); @@ -614,59 +630,59 @@ public abstract class ToolBarMenuDock { } }, filter); GeneralContext.listenPlugin(PluginEventType.AfterRun, new PluginEventListener() { - + @Override public void on(PluginEvent event) { - + PluginRuntime runtime = event.getContext().getRuntime(); Set menuHandlers = runtime.get(MenuHandler.MARK_STRING); addExtraMenus(menuDef, anchor, action, menuHandlers); } }, filter); } - + private void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set set) { - - + + List target = new ArrayList<>(); for (MenuHandler handler : set) { if (ComparatorUtils.equals(handler.category(), anchor)) { target.add(handler); } } - + for (MenuHandler handler : target) { int insertPosition = handler.insertPosition(menuDef.getShortCutCount()); if (insertPosition == MenuHandler.HIDE) { return; } ShortCut shortCut = action.methodAction(handler); - if (shortCut == null){ + if (shortCut == null) { continue; } menuDef.removeShortCut(shortCut); } } - + private void addExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set set) { - + List target = new ArrayList<>(); for (MenuHandler handler : set) { if (ComparatorUtils.equals(handler.category(), anchor)) { target.add(handler); } } - + for (MenuHandler handler : target) { int insertPosition = handler.insertPosition(menuDef.getShortCutCount()); if (insertPosition == MenuHandler.HIDE) { return; } ShortCut shortCut = action.methodAction(handler); - if (shortCut == null){ + if (shortCut == null) { continue; } - + if (insertPosition == MenuHandler.LAST) { if (handler.insertSeparatorBefore()) { menuDef.addShortCut(SeparatorDef.DEFAULT); @@ -676,48 +692,47 @@ public abstract class ToolBarMenuDock { menuDef.insertShortCut(insertPosition, shortCut); if (handler.insertSeparatorBefore()) { menuDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); - insertPosition ++; + insertPosition++; } if (handler.insertSeparatorAfter()) { - insertPosition ++; + insertPosition++; menuDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); } } } } - + /** * 设计器退出时, 做的一些操作. - * */ - public void shutDown(){ + public void shutDown() { } - private interface ShortCutMethodAction{ + private interface ShortCutMethodAction { public ShortCut methodAction(MenuHandler handler); } - private abstract class AbstractShortCutMethodAction implements ShortCutMethodAction{ + private abstract class AbstractShortCutMethodAction implements ShortCutMethodAction { - public ShortCut methodAction(MenuHandler handler){ + public ShortCut methodAction(MenuHandler handler) { return handler.shortcut(); } } //不需要编辑对象的菜单, 比如文件, 服务器, 关于 - private class NoTargetAction extends AbstractShortCutMethodAction{ + private class NoTargetAction extends AbstractShortCutMethodAction { } //模板为对象的菜单, 比如模板, 后续如果单元格也要, 直接加个CellTargetAction即可. //在methodAction中做handler.shortcut(cell), 不需要修改handler中原有接口, 加个shortcut(cell). - private class TemplateTargetAction extends AbstractShortCutMethodAction{ + private class TemplateTargetAction extends AbstractShortCutMethodAction { private ToolBarMenuDockPlus plus; - public TemplateTargetAction(ToolBarMenuDockPlus plus){ + public TemplateTargetAction(ToolBarMenuDockPlus plus) { this.plus = plus; } diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/UpdateActionManager.java b/designer_base/src/com/fr/design/mainframe/toolbar/UpdateActionManager.java index 47ae6101fa..845eb3660e 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/UpdateActionManager.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/UpdateActionManager.java @@ -1,5 +1,8 @@ package com.fr.design.mainframe.toolbar; +import com.fr.design.actions.UpdateAction; +import com.fr.general.ComparatorUtils; + import java.util.List; /** @@ -23,4 +26,13 @@ public class UpdateActionManager { public void setUpdateActions(List updateActions) { this.updateActions = updateActions; } + + public boolean isEnable(UpdateAction updateAction) { + for (UpdateActionModel action : updateActions) { + if (ComparatorUtils.equals(updateAction.getName(), action.getActionName()) && action.getAction().isEnabled()) { + return true; + } + } + return false; + } } 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 21287530ee..6546bd56ca 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java +++ b/designer_base/src/com/fr/design/mainframe/widget/BasicPropertyPane.java @@ -8,8 +8,10 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.general.Inter; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; /** * Created by plough on 2017/8/7. @@ -25,7 +27,7 @@ public class BasicPropertyPane extends BasicPane { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); widgetName = new UITextField(); - + widgetName.setGlobalName(Inter.getLocText("FR-Designer_Widget_Name")); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; double[] rowSize = {p}; diff --git a/designer_base/src/com/fr/design/mainframe/widget/accessibles/BaseAccessibleEditor.java b/designer_base/src/com/fr/design/mainframe/widget/accessibles/BaseAccessibleEditor.java index c71cd8ad1d..c2a1893d32 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/accessibles/BaseAccessibleEditor.java +++ b/designer_base/src/com/fr/design/mainframe/widget/accessibles/BaseAccessibleEditor.java @@ -1,27 +1,33 @@ package com.fr.design.mainframe.widget.accessibles; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; - +import javax.swing.AbstractButton; import javax.swing.BorderFactory; - +import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; - import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; - +import javax.swing.plaf.ButtonUI; import com.fr.base.BaseUtils; import com.fr.design.Exception.ValidationException; +import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.widget.editors.ITextComponent; import com.fr.design.mainframe.widget.editors.TextField; import com.fr.design.dialog.BasicPane; import com.fr.design.designer.properties.Decoder; import com.fr.design.designer.properties.Encoder; +import com.fr.design.utils.gui.GUIPaintUtils; /** * @since 6.5.3 @@ -77,7 +83,28 @@ public class BaseAccessibleEditor extends BasicPane implements AccessibleEditor setOpaque(false); if (showButton) { - btPopup = new UIButton(); + btPopup = new UIButton(){ + @Override + public ButtonUI getUI() { + return new UIButtonUI() { + @Override + protected boolean isPressed(AbstractButton b) { + return model.isArmed() && model.isPressed(); + } + + @Override + protected void doExtraPainting(UIButton b, Graphics2D g2d, int w, int h, String selectedRoles) { + if (isPressed(b) && b.isPressedPainted()) { + GUIPaintUtils.fillPressed(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), UIConstants.COMBOBOX_BTN_PRESS); + } else if (isRollOver(b)) { + GUIPaintUtils.fillRollOver(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted(), UIConstants.COMBOBOX_BTN_ROLLOVER); + } else if (b.isNormalPainted()) { + GUIPaintUtils.fillNormal(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted(), UIConstants.COMBOBOX_BTN_NORMAL); + } + } + }; + } + }; initPopupButton(); btPopup.addActionListener(new ActionListener() { @@ -189,4 +216,6 @@ public class BaseAccessibleEditor extends BasicPane implements AccessibleEditor public static void showMessage(String message, Component editorComponent) { JOptionPane.showMessageDialog(editorComponent, message, "Validation Error", JOptionPane.ERROR_MESSAGE); } + + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/widget/DataModify.java b/designer_base/src/com/fr/design/widget/DataModify.java index 25ab46a687..b901d7c69e 100644 --- a/designer_base/src/com/fr/design/widget/DataModify.java +++ b/designer_base/src/com/fr/design/widget/DataModify.java @@ -2,7 +2,8 @@ package com.fr.design.widget; import com.fr.design.data.DataCreatorUI; -import javax.swing.*; +import javax.swing.JComponent; + public interface DataModify { @@ -15,4 +16,9 @@ public interface DataModify { DataCreatorUI dataUI(); JComponent toSwingComponent(); + + String getGlobalName(); + + void setGlobalName(String globalName); + } \ No newline at end of file diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index 41e4860d2b..165ed3468a 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -1,7 +1,16 @@ package com.fr.env; -import com.fr.base.*; +import com.fr.base.AbstractEnv; +import com.fr.base.EnvException; +import com.fr.base.FRContext; +import com.fr.base.FRCoreContext; +import com.fr.base.ModifiedTable; +import com.fr.base.Parameter; +import com.fr.base.StoreProcedureParameter; +import com.fr.base.TableData; +import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; +import com.fr.data.TableDataSource; import com.fr.data.core.DataCoreUtils; import com.fr.data.core.db.TableProcedure; import com.fr.data.impl.Connection; @@ -21,13 +30,25 @@ import com.fr.file.CacheManager; import com.fr.file.DatasourceManager; import com.fr.file.DatasourceManagerProvider; import com.fr.file.filetree.FileNode; -import com.fr.general.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.general.LogRecordTime; +import com.fr.general.VT4FR; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.share.ShareConstants; -import com.fr.stable.*; +import com.fr.stable.ArrayUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.JavaCompileInfo; +import com.fr.stable.LicUtils; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLPrintWriter; @@ -35,18 +56,40 @@ import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLableReader; import com.fr.web.ResourceConstants; -import javax.swing.*; -import javax.xml.transform.*; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import java.awt.*; -import java.io.*; +import java.awt.Component; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.NoRouteToHostException; import java.net.Socket; -import java.util.*; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Timer; +import java.util.TimerTask; import java.util.logging.Level; import java.util.regex.Pattern; @@ -112,6 +155,15 @@ public class RemoteEnv extends AbstractEnv { return password; } + // 修复密码中包含特殊字符,无法登录的问题 + private String getEncodedPassword() { + try { + return URLEncoder.encode(password, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return password; + } + } + public void setPassword(String password) { this.password = password; clearUserID(); @@ -175,12 +227,8 @@ public class RemoteEnv extends AbstractEnv { * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters */ private HttpClient createHttpMethod2(HashMap para) throws EnvException { - StringBuilder sb = new StringBuilder(path); - - sb.append('?'); - sb.append("id=").append(createUserID()); - - return new HttpClient(sb.toString(), para, true); + String methodPath = path + '?' + "id=" + createUserID(); + return new HttpClient(methodPath, para, true); } @@ -337,7 +385,7 @@ public class RemoteEnv extends AbstractEnv { para.put("op", "fr_remote_design"); para.put("cmd", "test_server_connection"); para.put("user", user); - para.put("password", password); + para.put("password", getEncodedPassword()); if (path.startsWith("https") && (!DesignerEnvManager.getEnvManager().isHttps())) { return false; @@ -362,7 +410,7 @@ public class RemoteEnv extends AbstractEnv { Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}) , Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); return false; - } else if (res.indexOf("RegistEditionException") != -1) { + } else if (res.contains("RegistEditionException")) { if (needMessage) { JOptionPane.showMessageDialog(parentComponent, Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); } else { @@ -415,9 +463,8 @@ public class RemoteEnv extends AbstractEnv { para.put("op", "fr_remote_design"); para.put("cmd", "heart_beat"); para.put("user", user); - para.put("userid", userID); - HttpClient client = createHttpMethod(para, true); + HttpClient client = createHttpMethod(para); execute4InputStream(client); //这做法不好, 30秒刷一次, 刷新的时候会重新构建树, 构建完会把子节点都收缩起来, 效果太差. @@ -459,7 +506,7 @@ public class RemoteEnv extends AbstractEnv { para.put("op", "fr_remote_design"); para.put("cmd", "r_sign_in"); para.put("user", user); - para.put("password", password); + para.put("password", getEncodedPassword()); simulaRPC(para, true); @@ -552,7 +599,7 @@ public class RemoteEnv extends AbstractEnv { if (resJSON == null) { return false; } - if (resJSON.indexOf("RegistEditionException") != -1) { + if (resJSON.contains("RegistEditionException")) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); return false; } @@ -1207,6 +1254,11 @@ public class RemoteEnv extends AbstractEnv { return DavXMLUtils.readXMLParameters(input); } + @Override + public EmbeddedTableData previewTableData(Object tableData, Map parameterMap, int rowCount) throws Exception { + return previewTableData(null, tableData, parameterMap, rowCount); + } + /** * 根据指定的参数生成一个实际可预览的数据集 * @@ -1216,7 +1268,7 @@ public class RemoteEnv extends AbstractEnv { * @return 实际的二维数据集 * @throws Exception 如果生成数据失败则抛出此异常 */ - public EmbeddedTableData previewTableData(Object tableData, java.util.Map parameterMap, int rowCount) throws Exception { + public EmbeddedTableData previewTableData(TableDataSource dataSource, Object tableData, java.util.Map parameterMap, int rowCount) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); // 把tableData写成xml文件到out @@ -1255,6 +1307,11 @@ public class RemoteEnv extends AbstractEnv { return previewTableData(tableData, parameterMap, -1); } + @Override + public Object previewTableData(TableDataSource dataSource, Object tableData, Map parameterMap, int start, int end, String[] cols, int[] colIdx) throws Exception { + return previewTableData(dataSource, tableData, parameterMap, -1); + } + /** * nameValuePairs,这个参数要接着this.path,拼成一个URL,否则服务器端req.getParameter是无法得到的 * @@ -1939,7 +1996,7 @@ public class RemoteEnv extends AbstractEnv { para.put("op", "fr_remote_design"); para.put("cmd", "design_get_designer_version"); para.put("user", user); - para.put("password", password); + para.put("password", getEncodedPassword()); HttpClient client = createHttpMethod(para, true); try { @@ -2160,6 +2217,10 @@ public class RemoteEnv extends AbstractEnv { return StringUtils.EMPTY; } } + + public void doWhenServerShutDown() { + + } @Override public boolean isLocalEnv() { diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 09a5eac53d..79b4ccc960 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -13,7 +13,12 @@ import com.fr.design.designer.beans.actions.FormDeleteAction; import com.fr.design.designer.beans.actions.PasteAction; 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.creator.XComponent; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; @@ -54,8 +59,17 @@ 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; @@ -552,6 +566,24 @@ public class JForm extends JTemplate implements BaseJForm { } + @Override + public void setTarget(Form form) { + if (this.formDesign == null) { + super.setTarget(form); + return; + } + this.formDesign.setTarget(form); + } + + @Override + public Form getTarget() { + if (this.formDesign == null) { + return super.getTarget(); + } + + return this.formDesign.getTarget(); + } + @Override protected FormModelAdapter createDesignModel() { return new FormModelAdapter(this); diff --git a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java index 1695892ba6..4321ab1dc8 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java +++ b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java @@ -2,14 +2,18 @@ package com.fr.design.mainframe.widget.accessibles; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.event.UIObserverListener; import com.fr.design.gui.core.WidgetOption; import com.fr.design.mainframe.FormWebWidgetConstants; import com.fr.design.mainframe.widget.editors.ElementCaseToolBarPane; +import com.fr.design.mainframe.widget.editors.ITextComponent; +import com.fr.design.mainframe.widget.editors.TextField; import com.fr.design.mainframe.widget.wrappers.ElementCaseToolBarWrapper; import com.fr.form.web.FormToolBarManager; +import com.fr.general.Inter; import com.fr.stable.ArrayUtils; -import javax.swing.*; +import javax.swing.SwingUtilities; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -54,4 +58,19 @@ public class AccessibleElementCaseToolBarEditor extends UneditableAccessibleEdit options.addAll(defaultOptions); return options.toArray(new WidgetOption[options.size()]); } + + protected ITextComponent createTextField() { + TextField textField = new TextField() { + public void registerChangeListener(UIObserverListener listener) { + return; + } + + public boolean shouldResponseChangeListener() { + return false; + } + }; + textField.setGlobalName(Inter.getLocText("Form-EC_toolbar")); + return textField; + } + } 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 fb75edbabb..0bc744e51c 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 @@ -18,11 +18,15 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; import com.fr.form.ui.container.WTitleLayout; import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; +import java.awt.BorderLayout; + /** * Created by ibm on 2017/7/25. @@ -199,13 +203,19 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { public void updateCreator() { + currentEditorDefinePane.setGlobalName(getGlobalName()); Widget widget = currentEditorDefinePane.updateBean(); - widgetPropertyPane.update(widget); - if (widgetBoundPane != null) { + if(ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Widget_Name"))){ + widgetPropertyPane.update(widget); + xCreator.resetCreatorName(widget.getWidgetName()); + designer.getEditListenerTable().fireCreatorModified(xCreator, DesignerEvent.CREATOR_RENAMED); + return; + } + + if (widgetBoundPane != null && ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Coords_And_Size"))) { widgetBoundPane.update(); } - xCreator.resetCreatorName(widget.getWidgetName()); - designer.getEditListenerTable().fireCreatorModified(xCreator, DesignerEvent.CREATOR_RENAMED); + fireValueChanged(); } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/AbstractDataModify.java b/designer_form/src/com/fr/design/widget/ui/designer/AbstractDataModify.java index 7e521ac916..3aca5f00a7 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/AbstractDataModify.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/AbstractDataModify.java @@ -5,13 +5,15 @@ import com.fr.design.data.DataCreatorUI; import com.fr.design.designer.creator.XCreator; import com.fr.design.widget.DataModify; -import javax.swing.*; +import javax.swing.JComponent; + /** * Created by kerry on 17/07/28. */ public abstract class AbstractDataModify extends BasicBeanPane implements DataModify { protected XCreator creator; + protected String globalName; public AbstractDataModify(XCreator xCreator){ @@ -28,5 +30,11 @@ public abstract class AbstractDataModify extends BasicBeanPane implements return this; } + public void setGlobalName(String globalName){ + this.globalName = globalName; + } + public String getGlobalName(){ + return globalName; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java index ed9b5de27a..5a4ee9ac30 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java @@ -20,7 +20,9 @@ import com.fr.script.Calculator; import com.fr.stable.ArrayUtils; import com.fr.stable.UtilEvalError; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; @@ -38,6 +40,7 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane可以自动换行 + super.setText("" + text + ""); + } + }; sampleLabel.setHorizontalAlignment(SwingConstants.CENTER); sampleLabel.setFont(FRContext.getDefaultValues().getFRFont()); return sampleLabel; diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java index 1b1dbf861c..a5b13c66a4 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java @@ -11,13 +11,16 @@ import com.fr.form.ui.AbstractMarginWidget; import com.fr.form.ui.PaddingMargin; import com.fr.general.Inter; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.Component; + /** * Created by ibm on 2017/8/3. */ -public class PaddingBoundPane extends BasicPane { +public class PaddingBoundPane extends BasicPane{ protected UISpinner top; protected UISpinner bottom; protected UISpinner left; @@ -33,6 +36,10 @@ public class PaddingBoundPane extends BasicPane { bottom = new UISpinner(0, 1000, 1, 0); left = new UISpinner(0, 1000, 1, 0); right = new UISpinner(0, 1000, 1, 0); + top.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); + bottom.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); + left.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); + right.setGlobalName(Inter.getLocText("FR-Designer_Layout-Padding")); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; double[] rowSize = {p, p, p, p}; @@ -47,9 +54,9 @@ public class PaddingBoundPane extends BasicPane { JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L2, IntervalConstants.INTERVAL_L1); panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 10, 0)); this.add(panel); - } + public void update(AbstractMarginWidget marginWidget) { marginWidget.setMargin(new PaddingMargin((int)top.getValue(), (int)left.getValue(), (int)bottom.getValue(), (int)right.getValue() )); } @@ -66,4 +73,5 @@ public class PaddingBoundPane extends BasicPane { right.setValue(paddingMargin.getRight()); } + } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java index 7cf0493de7..c35cc79269 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetAbsoluteBoundPane.java @@ -1,26 +1,23 @@ package com.fr.design.widget.ui.designer.component; import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.widget.WidgetBoundsPaneFactory; -import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.general.Inter; + +import java.awt.Rectangle; -import java.awt.*; /** * Created by ibm on 2017/8/3. */ public class WidgetAbsoluteBoundPane extends WidgetBoundPane { - protected XWAbsoluteLayout parent; private UISpinner x; private UISpinner y; public WidgetAbsoluteBoundPane(XCreator source){ super(source); - XLayoutContainer xLayoutContainer = getParent(source); - this.parent = (XWAbsoluteLayout) xLayoutContainer; } public void initBoundPane() { @@ -28,6 +25,10 @@ public class WidgetAbsoluteBoundPane extends WidgetBoundPane { y = new UISpinner(0, 1200, 1); width = new UISpinner(0, 1200, 1); height = new UISpinner(0, 1200, 1); + x.setGlobalName(Inter.getLocText("FR-Designer_Coords_And_Size")); + y.setGlobalName(Inter.getLocText("FR-Designer_Coords_And_Size")); + width.setGlobalName(Inter.getLocText("FR-Designer_Coords_And_Size")); + height.setGlobalName(Inter.getLocText("FR-Designer_Coords_And_Size")); this.add(WidgetBoundsPaneFactory.createAbsoluteBoundsPane(x, y, width, height)); } @@ -40,13 +41,25 @@ public class WidgetAbsoluteBoundPane extends WidgetBoundPane { if (parent == null) { return; } - WAbsoluteLayout wabs = parent.toData(); + WLayout wabs = parent.toData(); wabs.setBounds(creator.toData(), bounds); creator.setBounds(bounds); } + + public void limitWidth(WLayout wabs, int w, Rectangle bounds, Rectangle rec){ + bounds.width = w; + } + + public void limitHeight(WLayout wabs, int h, Rectangle bounds, Rectangle rec){ + bounds.height = h; + } + + + + protected String title4PopupWindow() { - return ""; + return "absoluteBound"; } public void populate() { diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java index da5334cc27..68feb15960 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/WidgetBoundPane.java @@ -1,18 +1,33 @@ package com.fr.design.widget.ui.designer.component; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.adapters.layout.FRFitLayoutAdapter; import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.utils.ComponentUtils; import com.fr.design.widget.WidgetBoundsPaneFactory; +import com.fr.form.ui.PaddingMargin; +import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.general.Inter; + +import javax.swing.JOptionPane; +import java.awt.Rectangle; -import java.awt.*; /** * Created by ibm on 2017/7/30. */ public class WidgetBoundPane extends BasicPane { + private static final int MINHEIGHT = WLayout.MIN_HEIGHT; + private static final int MINWIDTH = WLayout.MIN_WIDTH; + protected XLayoutContainer parent; protected XCreator creator; protected UISpinner width; protected UISpinner height; @@ -20,6 +35,7 @@ public class WidgetBoundPane extends BasicPane { public WidgetBoundPane(XCreator source) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.creator = source; + this.parent = getParent(source); initBoundPane(); } @@ -34,19 +50,22 @@ public class WidgetBoundPane extends BasicPane { public void initBoundPane() { width = new UISpinner(0, 1200, 1); height = new UISpinner(0, 1200, 1); + width.setGlobalName(Inter.getLocText("FR-Designer_Coords_And_Size")); + height.setGlobalName(Inter.getLocText("FR-Designer_Coords_And_Size")); + if (creator.acceptType(XWCardLayout.class)) { + width.setEnabled(false); + height.setEnabled(false); + } this.add(WidgetBoundsPaneFactory.createBoundsPane(width, height)); } public void update() { - Rectangle bounds = new Rectangle(creator.getBounds()); - bounds.width = (int) width.getValue(); - bounds.height = (int) height.getValue(); - creator.setBounds(bounds); + fix(); } protected String title4PopupWindow() { - return ""; + return "widgetBound"; } public void populate() { @@ -54,4 +73,88 @@ public class WidgetBoundPane extends BasicPane { width.setValue(bounds.width); height.setValue(bounds.height); } + + public void fix() { + Rectangle bounds = new Rectangle(creator.getBounds()); + int w = (int) width.getValue(); + int h = (int) height.getValue(); + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + WLayout wabs = parent.toData(); + if (bounds.width != w) { + limitWidth(wabs, w, bounds, rec); + } + if (bounds.height != h) { + limitHeight(wabs, h, bounds, rec); + } + creator.setBounds(bounds); + } + + + public void adjustComponents(Rectangle bounds, int difference, int row) { + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + Rectangle backupBounds = getBound(); + FRFitLayoutAdapter layoutAdapter = (FRFitLayoutAdapter) AdapterBus.searchLayoutAdapter(formDesigner, creator); + if (layoutAdapter != null) { + layoutAdapter.setEdit(true); + layoutAdapter.calculateBounds(backupBounds, bounds, creator, row, difference); + } + } + + public void limitWidth(WLayout wabs, int w, Rectangle bounds, Rectangle rec) { + int difference = 0; + int minWidth = (int) (MINWIDTH * ((WFitLayout) wabs).getResolutionScaling()); + PaddingMargin margin = wabs.getMargin(); + if (bounds.width != w) { + if (bounds.width == rec.width - margin.getLeft() - margin.getRight()) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Beyond_Bounds")); + width.setValue(bounds.width); + return; + } else if (w < minWidth) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Min_Width") + Integer.toString(minWidth)); + width.setValue(bounds.width); + return; + } + difference = bounds.width - w; + bounds.width = w; + } + width.setValue(bounds.width); + wabs.setBounds(creator.toData(), bounds); + adjustComponents(bounds, difference, 0); + } + + public void limitHeight(WLayout wabs, int h, Rectangle bounds, Rectangle rec) { + int difference = 0; + PaddingMargin margin = wabs.getMargin(); + int minHeight = (int) (MINHEIGHT * ((WFitLayout) wabs).getResolutionScaling()); + if (bounds.height != h) { + if (bounds.height == rec.height - margin.getTop() - margin.getBottom()) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Beyond_Bounds")); + height.setValue(bounds.height); + return; + } else if (h < minHeight) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Min_Height") + Integer.toString(minHeight)); + height.setValue(bounds.height); + return; + } + difference = bounds.height - h; + bounds.height = h; + } + wabs.setBounds(creator.toData(), bounds); + creator.setBounds(bounds); + adjustComponents(bounds, difference, 1); + } + + + public Rectangle getBound() { + Rectangle bounds = new Rectangle(creator.getBounds()); + if (parent == null) { + return bounds; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + bounds.x += rec.x; + bounds.y += rec.y; + return bounds; + + } + } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/layout/ElementEditorDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/layout/ElementEditorDefinePane.java index 49b83a47c3..9fd1c6e94b 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/layout/ElementEditorDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/layout/ElementEditorDefinePane.java @@ -8,10 +8,13 @@ import com.fr.design.mainframe.widget.accessibles.AccessibleElementCaseToolBarEd import com.fr.design.widget.ui.designer.component.PaddingBoundPane; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.web.FormToolBarManager; +import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; /** * Created by ibm on 2017/8/7. @@ -45,8 +48,13 @@ public class ElementEditorDefinePane extends WTitleLayoutDefinePane { borderStyle.populate(ob); paddingBoundPane.populate(ob); componentInterval.setValue(ob.getCompInterval()); + if(ob.getCurrentCard() == null){ + ob.setCurrentCard(getRelateSwitchButton(ob)); + } titleField.setText(ob.getCurrentCard().getText()); } + private CardSwitchButton getRelateSwitchButton(WTabFitLayout layout){ + int index = layout.getIndex(); + + XWCardLayout cardLayout = (XWCardLayout)creator.getBackupParent(); + XWCardMainBorderLayout border = (XWCardMainBorderLayout)cardLayout.getBackupParent(); + WCardMainBorderLayout borderLayout = border.toData(); + WCardTitleLayout titleLayout = borderLayout.getTitlePart(); + if(titleLayout == null){ + return null; + } + + WCardTagLayout tagLayout = titleLayout.getTagPart(); + return tagLayout == null ? null : tagLayout.getSwitchButton(index); + } + + + private void setLayoutGap(int gap, WTabFitLayout layout, XWTabFitLayout xwTabFitLayout) { + if(xwTabFitLayout.canAddInterval(gap)){ + int interval = layout.getCompInterval(); + if (gap != interval) { + xwTabFitLayout.moveContainerMargin(); + xwTabFitLayout.moveCompInterval(xwTabFitLayout.getAcualInterval()); + layout.setCompInterval(gap); + xwTabFitLayout.addCompInterval(xwTabFitLayout.getAcualInterval()); + } + } + } @Override public WTabFitLayout updateBean() { WTabFitLayout layout = (WTabFitLayout) creator.toData(); borderStyle.update(layout); paddingBoundPane.update(layout); - layout.setCompInterval((int)componentInterval.getValue()); + int gap = (int)componentInterval.getValue(); + setLayoutGap(gap, layout, (XWTabFitLayout)creator); layout.getCurrentCard().setText(titleField.getText()); return layout; } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/layout/WTitleLayoutDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/layout/WTitleLayoutDefinePane.java index dd0b80bba7..ac1659b316 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/layout/WTitleLayoutDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/layout/WTitleLayoutDefinePane.java @@ -2,20 +2,22 @@ package com.fr.design.widget.ui.designer.layout; import com.fr.design.designer.creator.XCreator; import com.fr.design.foldablepane.UIExpandablePane; -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.design.mainframe.widget.accessibles.AccessibleWLayoutBorderStyleEditor; import com.fr.design.widget.ui.designer.AbstractDataModify; -import com.fr.design.widget.ui.designer.component.PaddingBoundPane; -import com.fr.form.ui.*; -import com.fr.form.ui.container.WTitleLayout; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; + /** * Created by ibm on 2017/8/3. @@ -32,7 +34,6 @@ public abstract class WTitleLayoutDefinePane