diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java index 4d7673b3e..2ddfe46d4 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java @@ -6,7 +6,6 @@ import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.charttypes.ChartTypeManager; import com.fr.chartx.attr.ChartProvider; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.dialog.DialogActionListener; import com.fr.design.dialog.UIDialog; import com.fr.design.event.UIObserver; @@ -16,7 +15,9 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.imenutable.UIMenuNameableCreator; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.chart.gui.ChartTypePane.ComboBoxPane; +import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.plugin.chart.vanchart.VanChart; @@ -48,6 +49,7 @@ import java.awt.image.BufferedImage; /** * 图表 类型 增删 控制按钮界面. + * * @author kunsnat E-mail:kunsnat@gmail.com * @version 创建时间:2013-9-26 上午09:27:49 */ @@ -55,7 +57,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen private static final long serialVersionUID = -8130803225718028933L; private static final int B_W = 52; private static final int B_H = 20; - private static final int COL_COUNT = 3; + private static final int COL_COUNT = 4; private static final int P_W = 300; private static final int P_H = 400; @@ -67,7 +69,11 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen private UIButton addButton; private UIButton configButton; - private ArrayList indexList = new ArrayList(); + private UIButton copyButton; + private UIButton moveForwardButton; + private UIButton moveBackButton; + + private ArrayList indexList = new ArrayList<>(); private JPanel buttonPane; private ChartCollection editingCollection; @@ -85,37 +91,60 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen //所以:stopEditing--选中其他button则响应click之后relayout;普通失焦则直接relayout. private boolean pressOtherButtonWhenEditing = false; - public ChartTypeButtonPane(ChartTypePane chartTypePane){ + public ChartTypeButtonPane(ChartTypePane chartTypePane) { this(); parent = chartTypePane; } public ChartTypeButtonPane() { this.setLayout(new BorderLayout()); - addButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); - configButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/config.png")); + initButton(); buttonPane = new JPanel(); this.add(buttonPane, BorderLayout.CENTER); - JPanel eastPane = new JPanel(); - this.add(eastPane, BorderLayout.EAST); + JPanel northPane = new JPanel(); + this.add(northPane, BorderLayout.NORTH); - eastPane.setLayout(new BorderLayout()); + northPane.setLayout(new BorderLayout()); + northPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + + JPanel addPanel = new JPanel(); + addPanel.setLayout(new BorderLayout()); + addPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 3)); + addPanel.add(addButton, BorderLayout.CENTER); - eastPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 5)); JPanel button = new JPanel(); - button.setPreferredSize(new Dimension(45, 20)); - button.setLayout(new GridLayout(1, 2, 5, 0)); - button.add(addButton); - button.add(configButton); - eastPane.add(button, BorderLayout.NORTH); + button.setPreferredSize(new Dimension(95, 20)); + button.setLayout(new GridLayout(1, 4, 0, 0)); + button.add(addPanel); + button.add(copyButton); + button.add(moveForwardButton); + button.add(moveBackButton); + northPane.add(button, BorderLayout.WEST); + northPane.add(configButton, BorderLayout.EAST); - initAddButton(); - initConfigButton(); initConfigCreator(); - // Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK); + // Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK); + } + + private void initButton() { + addButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); + configButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/config.png")); + copyButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); + copyButton.setBorderPainted(false); + copyButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Action_Copy")); + moveForwardButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/left.png")); + moveForwardButton.setToolTipText(Toolkit.i18nText("Fine-Design_Report_HF_Move_Left")); + moveForwardButton.setBorderPainted(false); + moveBackButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/right.png")); + moveBackButton.setToolTipText(Toolkit.i18nText("Fine-Design_Report_HF_Move_Right")); + moveBackButton.setBorderPainted(false); + initAddButton(); + initConfigButton(); + initMoveButton(); + initCopyButton(); } public static void registerSupportChangeConfigChartClass(Class cls) { @@ -123,53 +152,95 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen } private void initConfigCreator() { - configCreator = new UIMenuNameableCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Change_Config_Attributes"), new AttrChangeConfig(), ChangeConfigPane.class); + configCreator = new UIMenuNameableCreator(Toolkit.i18nText("Fine-Design_Chart_Change_Config_Attributes"), new AttrChangeConfig(), ChangeConfigPane.class); } private void initAddButton() { addButton.setPreferredSize(new Dimension(20, 20)); - addButton.addActionListener(addListener); + addButton.addActionListener((e) -> { + String name = getNewChartName(); + ChartProvider chart = getChangeStateNewChart(); + addNewChart(chart, name, editingCollection.getChartCount()); + }); } private void initConfigButton() { configButton.setPreferredSize(new Dimension(20, 20)); - configButton.addActionListener(configListener); + configButton.addActionListener((e) -> showConfigDialog()); } - ActionListener addListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String name = getNewChartName(); - ChartChangeButton button = new ChartChangeButton(name);// some set selected + private void initCopyButton() { + copyButton.setPreferredSize(new Dimension(20, 20)); + copyButton.addActionListener((e) -> { + String name = getCopyChartName(); + ChartProvider chart = getCopyChart(); + addNewChart(chart, name, editingCollection.getSelectedIndex() + 1); + }); + } - button.registerChangeListener(uiobListener); + private void initMoveButton() { + moveForwardButton.setPreferredSize(new Dimension(20, 20)); + moveBackButton.setPreferredSize(new Dimension(20, 20)); + moveForwardButton.addActionListener((e) -> moveForwardChart()); + moveBackButton.addActionListener((e) -> moveBackChart()); + } - indexList.add(button); + private void moveBackChart() { + editingCollection.moveBackChart(); + populateBean(editingCollection); + } - if (editingCollection != null) { - //点击添加按钮,则会触发切换状态 - ChartProvider chart = getChangeStateNewChart(); - try { - ChartProvider newChart = (ChartProvider) chart.clone(); - editingCollection.addNamedChart(name, newChart); - ChartInfoCollector.getInstance().collection(newChart, null); - } catch (CloneNotSupportedException e1) { - FineLoggerFactory.getLogger().error("Error in Clone"); - } - checkoutChange(); - } - layoutPane(buttonPane); + private void moveForwardChart() { + editingCollection.moveForwardChart(); + populateBean(editingCollection); + } + + private void checkMoveButton() { + moveBackButton.setEnabled(editingCollection.getSelectedIndex() != editingCollection.getChartCount() - 1); + moveForwardButton.setEnabled(editingCollection.getSelectedIndex() != 0); + } + + private void addNewChart(ChartProvider chart, String name, int index) { + if (chart == null) { + return; } - }; + ChartChangeButton button = new ChartChangeButton(name);// some set selected + button.registerChangeListener(uiobListener); + indexList.add(index, button); + editingCollection.addNamedChart(index, name, chart); + ChartInfoCollector.getInstance().collection(chart, null); + checkoutChange(); + layoutPane(buttonPane); + } + + private void showConfigDialog() { + UIMenuNameableCreator ui = configCreator.clone(); + final BasicBeanPane pane = ui.getPane(); + pane.populateBean(editingCollection); + UIDialog dialog = pane.showUnsizedWindow(SwingUtilities.getWindowAncestor(new JPanel()), new DialogActionListener() { + @Override + public void doOk() { + pane.updateBean(editingCollection); + } + + @Override + public void doCancel() { + + } + }); + dialog.setSize(P_W, P_H); + dialog.setVisible(true); + } //获取图表收集器的状态 - private void checkoutChange(){ + private void checkoutChange() { calculateMultiChartMode(); - if (parent != null){ + if (parent != null) { parent.relayoutChartTypePane(editingCollection); } //检查是否可以配置切换 configButton.setEnabled(changeEnable()); + checkMoveButton(); } /** @@ -181,7 +252,23 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen ChartProvider chart = editingCollection.getSelectedChartProvider(ChartProvider.class); String chartID = chart.getID(); String priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID); - return ChartTypeManager.getInstanceWithCheck().getFirstChart(priority); + ChartProvider firstChart = ChartTypeManager.getInstanceWithCheck().getFirstChart(priority); + try { + return (ChartProvider) firstChart.clone(); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + } + return null; + } + + public ChartProvider getCopyChart() { + ChartProvider chart = editingCollection.getSelectedChartProvider(ChartProvider.class); + try { + return (ChartProvider) chart.clone(); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + return getChangeStateNewChart(); + } } //图表收集器模式状态改变 @@ -204,48 +291,42 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen return supportChangeConfigChartClassSet.contains(editingCollection.getSelectedChartProvider(ChartProvider.class).getClass()); } - ActionListener configListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - UIMenuNameableCreator ui = configCreator.clone(); - final BasicBeanPane pane = ui.getPane(); - pane.populateBean(editingCollection); - UIDialog dialog = pane.showUnsizedWindow(SwingUtilities.getWindowAncestor(parent), new DialogActionListener() { - @Override - public void doOk() { - pane.updateBean(editingCollection); - } - - @Override - public void doCancel() { - - } - }); - dialog.setSize(P_W, P_H); - dialog.setVisible(true); - } - }; - private String getNewChartName() { int count = indexList.size() + 1; while (true) { - String name_test = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Module_Name") + count; - boolean repeated = false; - for (int i = 0, len = indexList.size(); i < len; i++) { - ChartChangeButton nameable = indexList.get(i); - if (ComparatorUtils.equals(nameable.getButtonName(), name_test)) { - repeated = true; - break; - } + String nameTest = Toolkit.i18nText("Fine-Design_Chart_Module_Name") + count; + if (!nameRepeated(nameTest)) { + return nameTest; } + count++; + } + } - if (!repeated) { - return name_test; + private String getCopyChartName() { + String chartName = "CopyOf" + editingCollection.getChartName(editingCollection.getSelectedIndex()); + if (!nameRepeated(chartName)) { + return chartName; + } + int count = 1; + while (true) { + String nameTest = chartName + count; + if (!nameRepeated(nameTest)) { + return nameTest; } count++; } } + private boolean nameRepeated(String name) { + for (int i = 0, len = indexList.size(); i < len; i++) { + ChartChangeButton nameable = indexList.get(i); + if (ComparatorUtils.equals(nameable.getButtonName(), name)) { + return true; + } + } + return false; + } + private void layoutPane(JPanel northPane) { if (northPane == null) { return; @@ -291,6 +372,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen /** * 注册监听器 + * * @param listener 观察者监听事件 */ public void registerChangeListener(UIObserverListener listener) { @@ -299,6 +381,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen /** * 是否应该响应事件监听器 + * * @return 是则返回true */ public boolean shouldResponseChangeListener() { @@ -383,7 +466,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen int selectedIndex = editingCollection.getSelectedIndex(); ChartChangeButton button = indexList.get(selectedIndex); button.isMoveOn = false; - if (!ComparatorUtils.equals(editingCollection.getChartName(selectedIndex), newName)) { + if (!nameRepeated(newName)) { editingCollection.setChartName(selectedIndex, newName); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().fireTargetModified(); button.changeChartName(newName); @@ -391,7 +474,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen buttonPane.remove(currentEditingEditor); currentEditingEditor = null; - if(!pressOtherButtonWhenEditing) { + if (!pressOtherButtonWhenEditing) { layoutPane(buttonPane); } } @@ -427,7 +510,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen @Override public void focusLost(FocusEvent e) {//编辑状态lost才走这边 - if (currentEditingEditor != null ) { + if (currentEditingEditor != null) { stopEditing(); } } @@ -519,7 +602,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen relayoutPane(); //重构面板 - if (parent != null ){ + if (parent != null) { parent.reLayoutEditPane(lastPlotID, editingCollection); } } @@ -534,7 +617,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen @Override public void mouseClicked(MouseEvent e) { mouseClick(e); - if(pressOtherButtonWhenEditing){ + if (pressOtherButtonWhenEditing) { relayoutPane(); pressOtherButtonWhenEditing = false; } @@ -581,7 +664,7 @@ public class ChartTypeButtonPane extends BasicBeanPane implemen //需要先更新,最后重构面板 //重构面板 - if (parent != null ){ + if (parent != null) { parent.reLayoutEditPane(lastPlotID, editingCollection); } }