diff --git a/designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java b/designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java index 27c2c1ec0..80f40cadf 100644 --- a/designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java +++ b/designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java @@ -1 +1 @@ -package com.fr.design.mainframe; import com.fr.base.ConfigManager; import com.fr.base.FRContext; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.toolbar.AuthorityEditToolBarComponent; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.webattr.ReportWebWidgetConstants; import com.fr.design.webattr.ToolBarButton; import com.fr.design.webattr.ToolBarPane; import com.fr.form.ui.Button; import com.fr.form.ui.ToolBar; import com.fr.form.ui.Widget; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.main.TemplateWorkBook; import com.fr.report.web.Location; import com.fr.report.web.ToolBarManager; import com.fr.report.web.WebContent; import com.fr.base.ConfigManagerProvider; import com.fr.stable.ArrayUtils; import com.fr.web.attr.ReportWebAttr; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.List; /** * Author : daisy * Date: 13-9-9 * Time: 下午4:58 */ public class AuthorityToolBarPane extends BasicBeanPane implements AuthorityEditToolBarComponent { private static final int SMALL_GAP = 13; private static final int GAP = 25; private static final int PRE_GAP = 9; private static final int COMBOX_WIDTH = 144; private static final String[] CHOOSEITEM = new String[]{Inter.getLocText("M-Page_Preview"), Inter.getLocText(new String[]{"Face_Write", "PageSetup-Page"}), Inter.getLocText("M-Data_Analysis")}; private UIComboBox choseComboBox; private ToolBarPane toolBarPane; private AuthorityEditToolBarPane authorityEditToolBarPane = null; private int selectedIndex = -1; private UILabel title = null; private MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (!toolBarPane.isEnabled()) { return; } java.util.List buttonlists = toolBarPane.getToolBarButtons(); int oldIndex = selectedIndex; selectedIndex = pressButtonIndex(e, buttonlists); //实现shift多选 if (e.isShiftDown()) { if (oldIndex == -1) { removeSelection(); ((ToolBarButton) e.getSource()).setSelected(true); } else { int max = oldIndex >= selectedIndex ? oldIndex : selectedIndex; int min = oldIndex <= selectedIndex ? oldIndex : selectedIndex; for (int i = min; i <= max; i++) { buttonlists.get(i).setSelected(true); } } } else if (!e.isControlDown()) { //实现单选 removeSelection(); if (selectedIndex != -1) { ((ToolBarButton) e.getSource()).setSelected(true); } } authorityEditToolBarPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityEditToolBarPane); } }; private int pressButtonIndex(MouseEvent e, java.util.List buttonlists) { if (!(e.getSource() instanceof ToolBarButton)) { return -1; } ToolBarButton button = (ToolBarButton) e.getSource(); for (int i = 0; i < buttonlists.size(); i++) { if (ComparatorUtils.equals(button, buttonlists.get(i))) { return i; } } return -1; } /** * 去掉选择 */ public void removeSelection() { for (ToolBarButton button : toolBarPane.getToolBarButtons()) { button.setSelected(false); } } private ItemListener itemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.DESELECTED) { selectedIndex = -1; populateToolBarPane(); authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons()); authorityEditToolBarPane.setAuthorityToolBarPane(AuthorityToolBarPane.this); EastRegionContainerPane.getInstance().replaceUpPane(authorityEditToolBarPane); EastRegionContainerPane.getInstance().replaceDownPane(RolesAlreadyEditedPane.getInstance()); } } }; public AuthorityToolBarPane() { this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3)); this.setBorder(BorderFactory.createEmptyBorder(0, PRE_GAP, 0, 0)); title = new UILabel(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "Choose_Role"})); title.setHorizontalAlignment(SwingConstants.CENTER); this.add(title, 0); choseComboBox = new UIComboBox(CHOOSEITEM) { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = COMBOX_WIDTH; return dim; } }; choseComboBox.addItemListener(itemListener); //默认选择第一个 choseComboBox.setSelectedIndex(0); this.add(createGapPanel(SMALL_GAP)); this.add(choseComboBox); toolBarPane = new ToolBarPane(); toolBarPane.setBorder(null); toolBarPane.removeDefaultMouseListener(); this.add(createGapPanel(GAP)); this.add(toolBarPane); populateDefaultToolBarWidgets(); populateBean(getReportWebAttr()); toolBarPane.addAuthorityListener(mouseListener); authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons()); authorityEditToolBarPane.setAuthorityToolBarPane(this); checkToolBarPaneEnable(); } private JPanel createGapPanel(final int gap) { return new JPanel() { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = gap; return dim; } }; } private void populateToolBarPane() { toolBarPane.removeAll(); populateDefaultToolBarWidgets(); populateBean(getReportWebAttr()); toolBarPane.addAuthorityListener(mouseListener); toolBarPane.repaint(); authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons()); checkToolBarPaneEnable(); } /** * 使用普通用户远程设计时,如果工具栏使用的是“采用服务器设置”,则工具栏按钮为灰不可用 */ private void checkToolBarPaneEnable() { List toolBarButtons = toolBarPane.getToolBarButtons(); boolean isnotEnable = ComparatorUtils.equals(title.getText(), Inter.getLocText(new String[]{"Server", "ReportServerP-Toolbar", "Choose_Role"})) && !FRContext.getCurrentEnv().isRoot(); for (ToolBarButton button : toolBarButtons) { button.setEnabled(!isnotEnable); } toolBarPane.setEnabled(!isnotEnable); } /** * 更新权限工具栏面板 */ public void populateAuthority() { toolBarPane.repaint(); } private ReportWebAttr getReportWebAttr() { JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!editingTemplate.isJWorkBook()) { return null; } JWorkBook editingWorkBook = (JWorkBook) editingTemplate; TemplateWorkBook wbTpl = editingWorkBook.getTarget(); return wbTpl.getReportWebAttr(); } //将该报表的设置过权限的属性记录一下 public void setAuthorityWebAttr(Widget widget, boolean isSelected, String selectedRole) { JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!editingTemplate.isJWorkBook()) { return; } JWorkBook editingWorkBook = (JWorkBook) editingTemplate; TemplateWorkBook wbTpl = editingWorkBook.getTarget(); ReportWebAttr rw = wbTpl.getReportWebAttr(); ConfigManagerProvider cm = ConfigManager.getProviderInstance(); ReportWebAttr webAttr = ((ReportWebAttr) cm.getGlobalAttribute(ReportWebAttr.class)); //wbTpl.clear先清空 //再将所有的保存进去 //看是存在服务器还存在模板里面 if (choseComboBox.getSelectedIndex() == 0) { //分页 if (rw == null || rw.getWebPage() == null) { dealWithWebContent(webAttr.getWebPage(), widget, isSelected, selectedRole); } } else if (choseComboBox.getSelectedIndex() == 1) { //填报 if (rw == null || rw.getWebPage() == null) { dealWithWebContent(webAttr.getWebWrite(), widget, isSelected, selectedRole); } } else { //view if (rw == null || rw.getWebPage() == null) { dealWithWebContent(webAttr.getWebView(), widget, isSelected, selectedRole); } } try { FRContext.getCurrentEnv().writeResource(cm); } catch (Exception e) { FRLogger.getLogger().error(e.getMessage()); } } private void dealWithWebContent(WebContent wc, Widget widget, boolean isSelected, String selectedRole) { ToolBarManager[] managers = wc.getToolBarManagers(); if (managers == null) { return; } for (int i = 0; i < managers.length; i++) { ToolBar tb = managers[i].getToolBar(); for (int j = 0; j < tb.getWidgetSize(); j++) { if (widget instanceof Button && tb.getWidget(j) instanceof Button) { if (ComparatorUtils.equals(((Button) widget).getIconName(), ((Button) tb.getWidget(j)).getIconName())) { if (!isSelected) { tb.getWidget(j).getWidgetPrivilegeControl().addInvisibleRole(selectedRole); } else { tb.getWidget(j).getWidgetPrivilegeControl().removeInvisibleRole(selectedRole); } } } } } wc.setToolBarManagers(managers); } public void populateBean(ReportWebAttr reportWebAttr) { this.remove(title); // 如果是空值就说明采用服务器配置了 if (reportWebAttr == null || this.getWebContent(reportWebAttr) == null) { title = new UILabel(Inter.getLocText(new String[]{"Server", "ReportServerP-Toolbar", "Choose_Role"})); populateServerSettings(); this.add(title, 0); return; } // 模板设置 T webContent = this.getWebContent(reportWebAttr); title = new UILabel(Inter.getLocText(new String[]{"the_template", "ReportServerP-Toolbar", "Choose_Role"})); this.add(title, 0); populate(webContent.getToolBarManagers()); } public ReportWebAttr updateBean() { return null; } public void populate(ToolBarManager[] toolBarManager) { if (ArrayUtils.isEmpty(toolBarManager)) { return; } if (toolBarManager.length == 0) { return; } for (int i = 0; i < toolBarManager.length; i++) { toolBarPane.populateBean(toolBarManager[i].getToolBar()); } } public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.height = ToolBarMenuDock.PANLE_HEIGNT; return dim; } public void populateBean(ToolBarManager[] toolBarManager) { if (ArrayUtils.isEmpty(toolBarManager)) { return; } for (int i = 0; i < toolBarManager.length; i++) { Location location = toolBarManager[i].getToolBarLocation(); if (location instanceof Location.Embed) { toolBarPane.populateBean(toolBarManager[i].getToolBar()); } } } private void populateServerSettings() { ConfigManagerProvider cm = ConfigManager.getProviderInstance(); ReportWebAttr webAttr = ((ReportWebAttr) cm.getGlobalAttribute(ReportWebAttr.class)); if (this.getWebContent(webAttr) != null) { populate(this.getWebContent(webAttr).getToolBarManagers()); } } protected String title4PopupWindow() { return null; } private T getWebContent(ReportWebAttr reportWebAttr) { if (choseComboBox.getSelectedIndex() == 0) { return reportWebAttr == null ? null : (T) reportWebAttr.getWebPage(); } else if (choseComboBox.getSelectedIndex() == 1) { return reportWebAttr == null ? null : (T) reportWebAttr.getWebWrite(); } else { return reportWebAttr == null ? null : (T) reportWebAttr.getWebView(); } } private void populateDefaultToolBarWidgets() { if (choseComboBox.getSelectedIndex() == 0) { ReportWebWidgetConstants.getPageToolBarInstance(); } else if (choseComboBox.getSelectedIndex() == 1) { ReportWebWidgetConstants.getWriteToolBarInstance(); } else { ReportWebWidgetConstants.getViewToolBarInstance(); } } private ToolBarManager getDefaultToolBarManager() { if (choseComboBox.getSelectedIndex() == 0) { return ToolBarManager.createDefaultToolBar(); } else if (choseComboBox.getSelectedIndex() == 1) { return ToolBarManager.createDefaultWriteToolBar(); } else { return ToolBarManager.createDefaultViewToolBar(); } } } \ No newline at end of file +package com.fr.design.mainframe; import com.fr.base.ConfigManager; import com.fr.base.ConfigManagerProvider; import com.fr.base.FRContext; import com.fr.design.beans.BasicBeanPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.toolbar.AuthorityEditToolBarComponent; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.webattr.ReportWebWidgetConstants; import com.fr.design.webattr.ToolBarButton; import com.fr.design.webattr.ToolBarPane; import com.fr.form.ui.Button; import com.fr.form.ui.ToolBar; import com.fr.form.ui.Widget; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.main.TemplateWorkBook; import com.fr.report.web.Location; import com.fr.report.web.ToolBarManager; import com.fr.report.web.WebContent; import com.fr.stable.ArrayUtils; import com.fr.web.attr.ReportWebAttr; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.List; /** * Author : daisy * Date: 13-9-9 * Time: 下午4:58 */ public class AuthorityToolBarPane extends BasicBeanPane implements AuthorityEditToolBarComponent { private static final int SMALL_GAP = 13; private static final int GAP = 25; private static final int PRE_GAP = 9; private static final int COMBOX_WIDTH = 144; private static final String[] CHOOSEITEM = new String[]{Inter.getLocText("M-Page_Preview"), Inter.getLocText(new String[]{"Face_Write", "PageSetup-Page"}), Inter.getLocText("M-Data_Analysis")}; private UIComboBox choseComboBox; private ToolBarPane toolBarPane; private AuthorityEditToolBarPane authorityEditToolBarPane = null; private int selectedIndex = -1; private UILabel title = null; private MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (!toolBarPane.isEnabled()) { return; } java.util.List buttonlists = toolBarPane.getToolBarButtons(); int oldIndex = selectedIndex; selectedIndex = pressButtonIndex(e, buttonlists); //实现shift多选 if (e.isShiftDown()) { if (oldIndex == -1) { removeSelection(); ((ToolBarButton) e.getSource()).setSelected(true); } else { int max = oldIndex >= selectedIndex ? oldIndex : selectedIndex; int min = oldIndex <= selectedIndex ? oldIndex : selectedIndex; for (int i = min; i <= max; i++) { buttonlists.get(i).setSelected(true); } } } else if (!e.isControlDown()) { //实现单选 removeSelection(); if (selectedIndex != -1) { ((ToolBarButton) e.getSource()).setSelected(true); } } authorityEditToolBarPane.populate(); EastRegionContainerPane.getInstance().replaceUpPane(authorityEditToolBarPane); } }; private int pressButtonIndex(MouseEvent e, java.util.List buttonlists) { if (!(e.getSource() instanceof ToolBarButton)) { return -1; } ToolBarButton button = (ToolBarButton) e.getSource(); for (int i = 0; i < buttonlists.size(); i++) { if (ComparatorUtils.equals(button, buttonlists.get(i))) { return i; } } return -1; } /** * 去掉选择 */ public void removeSelection() { for (ToolBarButton button : toolBarPane.getToolBarButtons()) { button.setSelected(false); } } private ItemListener itemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.DESELECTED) { selectedIndex = -1; populateToolBarPane(); authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons()); authorityEditToolBarPane.setAuthorityToolBarPane(AuthorityToolBarPane.this); EastRegionContainerPane.getInstance().replaceUpPane(authorityEditToolBarPane); EastRegionContainerPane.getInstance().replaceDownPane(RolesAlreadyEditedPane.getInstance()); } } }; public AuthorityToolBarPane() { this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3)); this.setBorder(BorderFactory.createEmptyBorder(0, PRE_GAP, 0, 0)); title = new UILabel(Inter.getLocText(new String[]{"ReportServerP-Toolbar", "Choose_Role"})); title.setHorizontalAlignment(SwingConstants.CENTER); this.add(title, 0); choseComboBox = new UIComboBox(CHOOSEITEM) { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = COMBOX_WIDTH; return dim; } }; choseComboBox.addItemListener(itemListener); //默认选择第一个 choseComboBox.setSelectedIndex(0); this.add(createGapPanel(SMALL_GAP)); this.add(choseComboBox); toolBarPane = new ToolBarPane(); toolBarPane.setBorder(null); toolBarPane.removeDefaultMouseListener(); this.add(createGapPanel(GAP)); this.add(toolBarPane); populateDefaultToolBarWidgets(); populateBean(getReportWebAttr()); toolBarPane.addAuthorityListener(mouseListener); authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons()); authorityEditToolBarPane.setAuthorityToolBarPane(this); checkToolBarPaneEnable(); } private JPanel createGapPanel(final int gap) { return new JPanel() { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = gap; return dim; } }; } private void populateToolBarPane() { toolBarPane.removeAll(); populateDefaultToolBarWidgets(); populateBean(getReportWebAttr()); toolBarPane.addAuthorityListener(mouseListener); toolBarPane.repaint(); authorityEditToolBarPane = new AuthorityEditToolBarPane(toolBarPane.getToolBarButtons()); checkToolBarPaneEnable(); } /** * 使用普通用户远程设计时,如果工具栏使用的是“采用服务器设置”,则工具栏按钮为灰不可用 */ private void checkToolBarPaneEnable() { List toolBarButtons = toolBarPane.getToolBarButtons(); boolean isnotEnable = ComparatorUtils.equals(title.getText(), Inter.getLocText(new String[]{"Server", "ReportServerP-Toolbar", "Choose_Role"})) && !FRContext.getCurrentEnv().isRoot(); for (ToolBarButton button : toolBarButtons) { button.setEnabled(!isnotEnable); } toolBarPane.setEnabled(!isnotEnable); } /** * 更新权限工具栏面板 */ public void populateAuthority() { toolBarPane.repaint(); } private ReportWebAttr getReportWebAttr() { JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!editingTemplate.isJWorkBook()) { return null; } JWorkBook editingWorkBook = (JWorkBook) editingTemplate; TemplateWorkBook wbTpl = editingWorkBook.getTarget(); return wbTpl.getReportWebAttr(); } //将该报表的设置过权限的属性记录一下 public void setAuthorityWebAttr(Widget widget, boolean isSelected, String selectedRole) { JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!editingTemplate.isJWorkBook()) { return; } JWorkBook editingWorkBook = (JWorkBook) editingTemplate; TemplateWorkBook wbTpl = editingWorkBook.getTarget(); ReportWebAttr rw = wbTpl.getReportWebAttr(); ConfigManagerProvider cm = ConfigManager.getProviderInstance(); ReportWebAttr webAttr = ((ReportWebAttr) cm.getGlobalAttribute(ReportWebAttr.class)); //wbTpl.clear先清空 //再将所有的保存进去 //看是存在服务器还存在模板里面 if (choseComboBox.getSelectedIndex() == 0) { //分页 if (rw == null || rw.getWebPage() == null) { dealWithWebContent(webAttr.getWebPage(), widget, isSelected, selectedRole); } } else if (choseComboBox.getSelectedIndex() == 1) { //填报 if (rw == null || rw.getWebPage() == null) { dealWithWebContent(webAttr.getWebWrite(), widget, isSelected, selectedRole); } } else { //view if (rw == null || rw.getWebPage() == null) { dealWithWebContent(webAttr.getWebView(), widget, isSelected, selectedRole); } } } private void dealWithWebContent(WebContent wc, Widget widget, boolean isSelected, String selectedRole) { ToolBarManager[] managers = wc.getToolBarManagers(); if (managers == null) { return; } for (int i = 0; i < managers.length; i++) { ToolBar tb = managers[i].getToolBar(); for (int j = 0; j < tb.getWidgetSize(); j++) { if (widget instanceof Button && tb.getWidget(j) instanceof Button) { if (ComparatorUtils.equals(((Button) widget).getIconName(), ((Button) tb.getWidget(j)).getIconName())) { if (!isSelected) { tb.getWidget(j).getWidgetPrivilegeControl().addInvisibleRole(selectedRole); } else { tb.getWidget(j).getWidgetPrivilegeControl().removeInvisibleRole(selectedRole); } } } } } wc.setToolBarManagers(managers); } public void populateBean(ReportWebAttr reportWebAttr) { this.remove(title); // 如果是空值就说明采用服务器配置了 if (reportWebAttr == null || this.getWebContent(reportWebAttr) == null) { title = new UILabel(Inter.getLocText(new String[]{"Server", "ReportServerP-Toolbar", "Choose_Role"})); populateServerSettings(); this.add(title, 0); return; } // 模板设置 T webContent = this.getWebContent(reportWebAttr); title = new UILabel(Inter.getLocText(new String[]{"the_template", "ReportServerP-Toolbar", "Choose_Role"})); this.add(title, 0); populate(webContent.getToolBarManagers()); } public ReportWebAttr updateBean() { return null; } public void populate(ToolBarManager[] toolBarManager) { if (ArrayUtils.isEmpty(toolBarManager)) { return; } if (toolBarManager.length == 0) { return; } for (int i = 0; i < toolBarManager.length; i++) { toolBarPane.populateBean(toolBarManager[i].getToolBar()); } } public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.height = ToolBarMenuDock.PANLE_HEIGNT; return dim; } public void populateBean(ToolBarManager[] toolBarManager) { if (ArrayUtils.isEmpty(toolBarManager)) { return; } for (int i = 0; i < toolBarManager.length; i++) { Location location = toolBarManager[i].getToolBarLocation(); if (location instanceof Location.Embed) { toolBarPane.populateBean(toolBarManager[i].getToolBar()); } } } private void populateServerSettings() { ConfigManagerProvider cm = ConfigManager.getProviderInstance(); ReportWebAttr webAttr = ((ReportWebAttr) cm.getGlobalAttribute(ReportWebAttr.class)); if (this.getWebContent(webAttr) != null) { populate(this.getWebContent(webAttr).getToolBarManagers()); } } protected String title4PopupWindow() { return null; } private T getWebContent(ReportWebAttr reportWebAttr) { if (choseComboBox.getSelectedIndex() == 0) { return reportWebAttr == null ? null : (T) reportWebAttr.getWebPage(); } else if (choseComboBox.getSelectedIndex() == 1) { return reportWebAttr == null ? null : (T) reportWebAttr.getWebWrite(); } else { return reportWebAttr == null ? null : (T) reportWebAttr.getWebView(); } } private void populateDefaultToolBarWidgets() { if (choseComboBox.getSelectedIndex() == 0) { ReportWebWidgetConstants.getPageToolBarInstance(); } else if (choseComboBox.getSelectedIndex() == 1) { ReportWebWidgetConstants.getWriteToolBarInstance(); } else { ReportWebWidgetConstants.getViewToolBarInstance(); } } private ToolBarManager getDefaultToolBarManager() { if (choseComboBox.getSelectedIndex() == 0) { return ToolBarManager.createDefaultToolBar(); } else if (choseComboBox.getSelectedIndex() == 1) { return ToolBarManager.createDefaultWriteToolBar(); } else { return ToolBarManager.createDefaultViewToolBar(); } } } \ No newline at end of file diff --git a/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java b/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java index 0632fe01d..5cfcb6261 100644 --- a/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java +++ b/designer/src/com/fr/design/present/ConditionAttributesGroupPane.java @@ -6,7 +6,7 @@ import java.util.List; import com.fr.base.FRContext; import com.fr.general.NameObject; import com.fr.design.condition.HighLightConditionAttributesPane; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.general.Inter; @@ -15,7 +15,7 @@ import com.fr.report.cell.cellattr.highlight.Highlight; import com.fr.report.cell.cellattr.highlight.HighlightGroup; import com.fr.stable.Nameable; -public class ConditionAttributesGroupPane extends JControlPane { +public class ConditionAttributesGroupPane extends JListControlPane { @Override public NameableCreator[] createNameableCreators() { diff --git a/designer/src/com/fr/design/present/StyleArrayPane.java b/designer/src/com/fr/design/present/StyleArrayPane.java index 6107da1b7..061107462 100644 --- a/designer/src/com/fr/design/present/StyleArrayPane.java +++ b/designer/src/com/fr/design/present/StyleArrayPane.java @@ -2,7 +2,7 @@ package com.fr.design.present; import com.fr.base.Style; import com.fr.design.gui.controlpane.AbstractNameableCreator; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.UnrepeatedNameHelper; import com.fr.design.gui.ilist.ListModelElement; @@ -18,7 +18,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class StyleArrayPane extends JControlPane { +public class StyleArrayPane extends JListControlPane { /** * Constructor. diff --git a/designer/src/com/fr/design/report/share/ConfusionManagerPane.java b/designer/src/com/fr/design/report/share/ConfusionManagerPane.java index eac62da91..89b3dbb9e 100644 --- a/designer/src/com/fr/design/report/share/ConfusionManagerPane.java +++ b/designer/src/com/fr/design/report/share/ConfusionManagerPane.java @@ -10,7 +10,7 @@ import java.util.List; import com.fr.data.TableDataSource; import com.fr.data.impl.EmbeddedTableData; import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.ShortCut4JControlPane; @@ -23,7 +23,7 @@ import com.fr.general.NameObject; * * @date: 2015-3-9-上午9:10:20 */ -public class ConfusionManagerPane extends JControlPane { +public class ConfusionManagerPane extends JListControlPane { /** * 获取当前面板的编辑对象 diff --git a/designer/src/com/fr/design/webattr/ReportWebAttrPane.java b/designer/src/com/fr/design/webattr/ReportWebAttrPane.java index cd761199b..6330ee87f 100644 --- a/designer/src/com/fr/design/webattr/ReportWebAttrPane.java +++ b/designer/src/com/fr/design/webattr/ReportWebAttrPane.java @@ -10,6 +10,7 @@ import javax.swing.JPanel; import com.fr.design.gui.frpane.LoadingBasicPane; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundPane4Browser; import com.fr.general.Inter; import com.fr.design.style.background.BackgroundPane; import com.fr.web.attr.ReportWebAttr; @@ -50,7 +51,7 @@ public class ReportWebAttrPane extends LoadingBasicPane { tabbedPane.add(Inter.getLocText("WEB-Write_Setting"), writeWeb = new WriteWebSettingPane()); tabbedPane.add(Inter.getLocText("M-Data_Analysis_Settings"), viewWeb = new ViewWebSettingPane()); - tabbedPane.addTab(Inter.getLocText("ReportServerP-Browser_Background"), backgroundPane = new BackgroundPane(true)); + tabbedPane.addTab(Inter.getLocText("ReportServerP-Browser_Background"), backgroundPane = new BackgroundPane4Browser()); tabbedPane.addTab(Inter.getLocText("ReportServerP-Import_Css"), cssPane = new WebCssPane()); tabbedPane.addTab(Inter.getLocText("ReportServerP-Import_JavaScript"), jsPane = new WebJsPane()); } diff --git a/designer/src/com/fr/design/widget/WidgetConfigPane.java b/designer/src/com/fr/design/widget/WidgetConfigPane.java index a362af72f..78088920f 100644 --- a/designer/src/com/fr/design/widget/WidgetConfigPane.java +++ b/designer/src/com/fr/design/widget/WidgetConfigPane.java @@ -1,6 +1,6 @@ package com.fr.design.widget; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.core.WidgetConstants; @@ -17,7 +17,7 @@ import java.util.List; /** * Widget配置面板 */ -public class WidgetConfigPane extends JControlPane { +public class WidgetConfigPane extends JListControlPane { /** * 创建用户自定义widget组件 diff --git a/designer_base/designer_base.iml b/designer_base/designer_base.iml index 9f8c89a0b..d20642b28 100644 --- a/designer_base/designer_base.iml +++ b/designer_base/designer_base.iml @@ -1,7 +1,7 @@ - + diff --git a/designer_base/src/com/fr/design/condition/LiteConditionPane.java b/designer_base/src/com/fr/design/condition/LiteConditionPane.java index 5c5eea0ff..a32a11239 100644 --- a/designer_base/src/com/fr/design/condition/LiteConditionPane.java +++ b/designer_base/src/com/fr/design/condition/LiteConditionPane.java @@ -517,6 +517,8 @@ public abstract class LiteConditionPane extends BasicBeanPa // formulaPane JPanel formulaPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + // 95106 公式区域限定宽高, 显示两行即可, 在新窗口编辑. + formulaPane.setPreferredSize(new Dimension(450, 40)); formulaConditionPane.add(formulaPane, BorderLayout.CENTER); formulaPane.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 2)); formulaPane.add(GUICoreUtils.createBorderPane(new UILabel(Inter.getLocText("FR-Designer_LiteCondition_Formula") + "="), BorderLayout.NORTH), BorderLayout.WEST); diff --git a/designer_base/src/com/fr/design/data/datapane/ReportTableDataPane.java b/designer_base/src/com/fr/design/data/datapane/ReportTableDataPane.java index e62aaa530..c9279ca42 100644 --- a/designer_base/src/com/fr/design/data/datapane/ReportTableDataPane.java +++ b/designer_base/src/com/fr/design/data/datapane/ReportTableDataPane.java @@ -19,19 +19,19 @@ import java.util.Map; * 创建于2011-6-14 */ public class ReportTableDataPane extends LoadingBasicPane { - private TableDataListPane tdListPane; + private TableDataPaneController tdPane; @Override protected void initComponents(JPanel container) { container.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.tdListPane = new TableDataListPane() { + tdPane = new TableDataPaneListPane() { @Override public NameableCreator[] createNameableCreators() { return TableDataCreatorProducer.getInstance().createReportTableDataCreator(); } }; - container.add(tdListPane, BorderLayout.CENTER); + container.add(tdPane.getPanel(), BorderLayout.CENTER); } @Override @@ -40,11 +40,11 @@ public class ReportTableDataPane extends LoadingBasicPane { } public void populate(TableDataSource tds) { - tdListPane.populate(tds); + tdPane.populate(tds); } public void update(TableDataSource tds) { - tdListPane.update(tds); + tdPane.update(tds); } /** @@ -53,10 +53,10 @@ public class ReportTableDataPane extends LoadingBasicPane { * @throws Exception 异常 */ public void checkValid() throws Exception { - this.tdListPane.checkValid(); + this.tdPane.checkValid(); } public Map getDsNameChangedMap() { - return tdListPane.getDsNameChangedMap(); + return tdPane.getDsNameChangedMap(); } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataPaneController.java b/designer_base/src/com/fr/design/data/datapane/TableDataPaneController.java new file mode 100644 index 000000000..ed29702c4 --- /dev/null +++ b/designer_base/src/com/fr/design/data/datapane/TableDataPaneController.java @@ -0,0 +1,62 @@ +package com.fr.design.data.datapane; + +import com.fr.data.TableDataSource; +import com.fr.file.DatasourceManagerProvider; + +import javax.swing.*; +import java.util.Map; + +/** + * Coder: zack + * Date: 2016/5/18 + * Time: 10:13 + */ +public interface TableDataPaneController { + /** + * 获取数据集名字变更集合 + * + * @return + */ + Map getDsNameChangedMap(); + + /** + * 数据集重命名 + * + * @param oldName + * @param newName + */ + void rename(String oldName, String newName); + + /** + * 是否合法 + * @throws Exception + */ + void checkValid() throws Exception; + + /** + * 名字是否允许 + * @return + */ + boolean isNamePermitted(); + + void populate(DatasourceManagerProvider datasourceManagerProvider); + + void update(DatasourceManagerProvider datasourceManagerProvider); + + void populate(TableDataSource datasourceManagerProvider); + + void update(TableDataSource datasourceManagerProvider); + + /** + * 设置选中项 + * @param index + */ + void setSelectedIndex(int index); + + /** + * 返回当前数据集面板 + * @return + */ + JPanel getPanel(); + +} diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataListPane.java b/designer_base/src/com/fr/design/data/datapane/TableDataPaneListPane.java similarity index 92% rename from designer_base/src/com/fr/design/data/datapane/TableDataListPane.java rename to designer_base/src/com/fr/design/data/datapane/TableDataPaneListPane.java index 8de293f29..97240dd94 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataListPane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataPaneListPane.java @@ -1,261 +1,276 @@ -package com.fr.design.data.datapane; - -import com.fr.base.TableData; -import com.fr.data.TableDataSource; -import com.fr.data.impl.storeproc.StoreProcedure; -import com.fr.design.data.DesignTableDataManager; -import com.fr.design.gui.controlpane.JControlPane; -import com.fr.design.gui.controlpane.NameableCreator; -import com.fr.design.gui.ilist.ListModelElement; -import com.fr.file.DatasourceManagerProvider; -import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; -import com.fr.general.NameObject; -import com.fr.stable.Nameable; -import com.fr.stable.StringUtils; -import com.fr.stable.core.PropertyChangeAdapter; - -import javax.swing.*; -import java.util.*; - -/** - * TableDataList Pane. - */ -public class TableDataListPane extends JControlPane { - private Map dsNameChangedMap = new HashMap(); - private boolean isNamePermitted = true; - - public TableDataListPane() { - super(); - dsNameChangedMap.clear(); - this.addEditingListner(new PropertyChangeAdapter() { - @Override - public void propertyChange() { - isNamePermitted = true; - TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); - String[] allDSNames = DesignTableDataManager.getAllDSNames(source); - String[] allListNames = nameableList.getAllNames(); - allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; - String tempName = getEditingName(); - Object editingType = getEditingType(); - if (StringUtils.isEmpty(tempName)) { - String[] warning = new String[]{"NOT_NULL_Des", "Please_Rename"}; - String[] sign = new String[]{",", "!"}; - isNamePermitted = false; - nameableList.stopEditing(); - JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataListPane.this), Inter.getLocText(warning, sign)); - setWarnigText(editingIndex); - return; - } - - if (!ComparatorUtils.equals(tempName, selectedName) - && isNameRepeted(new List[]{Arrays.asList(allDSNames), Arrays.asList(allListNames)}, tempName)) { - String[] waning = new String[]{"already_exists", "TableData", "Please_Rename"}; - String[] sign = new String[]{"", tempName + ",", "!"}; - isNamePermitted = false; - nameableList.stopEditing(); - JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataListPane.this), Inter.getLocText(waning, sign)); - setWarnigText(editingIndex); - } else if (editingType instanceof StoreProcedure && isIncludeUnderline(tempName)) { - String[] datasource_underline = new String[]{"Datasource-Stored_Procedure", "Name", "can_not_include_underline"}; - String[] sign = new String[]{"", "", "!"}; - isNamePermitted = false; - nameableList.stopEditing(); - JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataListPane.this), Inter.getLocText(datasource_underline, sign)); - setWarnigText(editingIndex); - } - if (nameableList.getSelectedValue() instanceof ListModelElement) { - Nameable selected = ((ListModelElement) nameableList.getSelectedValue()).wrapper; - if (!ComparatorUtils.equals(tempName, selected.getName())) { - rename(selected.getName(), tempName); - - } - } - } - }); - } - - protected void rename(String oldName, String newName) { - dsNameChangedMap.put(oldName, newName); - } - - /** - * 名字是否允许 - * - * @return 是/否 - */ - public boolean isNamePermitted() { - return isNamePermitted; - } - - - /** - * 检查按钮可用状态 Check button enabled. - */ - public void checkButtonEnabled() { - super.checkButtonEnabled(); - isNamePermitted = !isContainsRename(); - } - - private boolean isIncludeUnderline(String name) { - return ComparatorUtils.equals(name.indexOf(StoreProcedure.SPLIT), -1) ? false : true; - } - - /** - * 创建服务器数据集所需要的NameableCreator数组 - * - * @return 数组 - */ - public NameableCreator[] createNameableCreators() { - return TableDataCreatorProducer.getInstance().createServerTableDataCreator(); - } - - - // 只能保证当前模板不重名了 - - /** - * 新建不重名的面板 - * - * @param prefix 前缀字符 - * @return 生成的名字 - */ - @Override - public String createUnrepeatedName(String prefix) { - TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); - if (source == null) { - return super.createUnrepeatedName(prefix); - } - String[] allDsNames = DesignTableDataManager.getAllDSNames(source); - DefaultListModel model = this.getModel(); - Nameable[] all = new Nameable[model.getSize()]; - for (int i = 0; i < model.size(); i++) { - all[i] = ((ListModelElement) model.get(i)).wrapper; - } - // richer:生成的名字从1开始. kunsnat: 添加属性从0开始. - int count = all.length + 1; - while (true) { - String name_test = prefix + count; - boolean repeated = false; - for (int i = 0, len = model.size(); i < len; i++) { - Nameable nameable = all[i]; - if (ComparatorUtils.equals(nameable.getName(), name_test)) { - repeated = true; - break; - } - } - for (String dsname : allDsNames) { - if (ComparatorUtils.equals(dsname, name_test)) { - repeated = true; - break; - } - } - - if (!repeated) { - return name_test; - } - - count++; - } - } - - @Override - protected String title4PopupWindow() { - return "TableData"; - } - - /** - * Populate. - */ - public void populate(TableDataSource tds) { - List nameObjectList = new ArrayList(); - - Iterator tableDataNameIterator = tds.getTableDataNameIterator(); - while (tableDataNameIterator.hasNext()) { - String tableDataName = (String) tableDataNameIterator.next(); - TableData tableData = tds.getTableData(tableDataName); - - if (tableData != null) { - nameObjectList.add(new NameObject(tableDataName, tableData)); - } - } - - populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); - } - - /** - * Populate. - */ - public void populate(DatasourceManagerProvider datasourceManager) { - Iterator nameIt = datasourceManager.getTableDataNameIterator(); - Iterator procedurenameIt = datasourceManager.getProcedureNameIterator(); - List nameObjectList = new ArrayList(); - while (nameIt.hasNext()) { - String name = nameIt.next(); - nameObjectList.add(new NameObject(name, datasourceManager.getTableData(name))); - } - while (procedurenameIt.hasNext()) { - String name = procedurenameIt.next(); - nameObjectList.add(new NameObject(name, datasourceManager.getProcedureByName(name))); - } - - populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); - } - - public void update(DatasourceManagerProvider datasourceManager) { - datasourceManager.clearAllTableData(); - datasourceManager.clearAllProcedure(); - Nameable[] tableDataArray = this.update(); - for (int i = 0; i < tableDataArray.length; i++) { - NameObject nameObject = (NameObject) tableDataArray[i]; - datasourceManager.putTableData(nameObject.getName(), (TableData) nameObject.getObject()); - } - } - - public void update(TableDataSource tds) { - tds.clearAllTableData(); - - Nameable[] tableDataArray = this.update(); - for (int i = 0; i < tableDataArray.length; i++) { - NameObject nameObject = (NameObject) tableDataArray[i]; - tds.putTableData(nameObject.getName(), (TableData) nameObject.getObject()); - } - } - - /** - * 判断数据集是否重名 - */ - public void checkValid() throws Exception { - List exsitTableDataNameList = new ArrayList(); - // _denny: 判断是否有重复的数据集名 - checkRepeatedDSName(exsitTableDataNameList); - - Nameable[] tableDataArray = this.update(); - for (int i = 0; i < tableDataArray.length; i++) { - NameObject nameObject = (NameObject) tableDataArray[i]; - - if (exsitTableDataNameList.contains(nameObject.getName())) { - String[] waring = new String[]{"TableData", "Error_TableDataNameRepeat"}; - String[] sign = new String[]{": " + nameObject.getName()}; - throw new Exception(Inter.getLocText(waring, sign)); - } - - exsitTableDataNameList.add(nameObject.getName()); - } - } - - protected void checkRepeatedDSName(List exsitTableDataNameList) { - } - - /** - * 在JJControlPane的左侧Tree里面选中某一Item - * - * @param name 被选择的Item名称 - */ - public void selectName(String name) { - this.setSelectedName(name); - } - - public Map getDsNameChangedMap() { - return this.dsNameChangedMap; - } +package com.fr.design.data.datapane; + +import com.fr.base.TableData; +import com.fr.data.TableDataSource; +import com.fr.data.impl.storeproc.StoreProcedure; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.gui.controlpane.JListControlPane; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.gui.ilist.ListModelElement; +import com.fr.file.DatasourceManagerProvider; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.general.NameObject; +import com.fr.stable.Nameable; +import com.fr.stable.StringUtils; +import com.fr.stable.core.PropertyChangeAdapter; + +import javax.swing.*; +import java.util.*; + +/** + * TableDataList Pane. + */ +public class TableDataPaneListPane extends JListControlPane implements TableDataPaneController { + private boolean isNamePermitted = true; + private Map dsNameChangedMap = new HashMap(); + + public TableDataPaneListPane() { + super(); + dsNameChangedMap.clear(); + this.addEditingListner(new PropertyChangeAdapter() { + @Override + public void propertyChange() { + isNamePermitted = true; + TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); + String[] allDSNames = DesignTableDataManager.getAllDSNames(source); + String[] allListNames = nameableList.getAllNames(); + allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; + String tempName = getEditingName(); + Object editingType = getEditingType(); + if (StringUtils.isEmpty(tempName)) { + String[] warning = new String[]{"NOT_NULL_Des", "Please_Rename"}; + String[] sign = new String[]{",", "!"}; + isNamePermitted = false; + nameableList.stopEditing(); + JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this), Inter.getLocText(warning, sign)); + setWarnigText(editingIndex); + return; + } + + if (!ComparatorUtils.equals(tempName, selectedName) + && isNameRepeted(new List[]{Arrays.asList(allDSNames), Arrays.asList(allListNames)}, tempName)) { + String[] waning = new String[]{"already_exists", "TableData", "Please_Rename"}; + String[] sign = new String[]{"", tempName + ",", "!"}; + isNamePermitted = false; + nameableList.stopEditing(); + JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this), Inter.getLocText(waning, sign)); + setWarnigText(editingIndex); + } else if (editingType instanceof StoreProcedure && isIncludeUnderline(tempName)) { + String[] datasource_underline = new String[]{"Datasource-Stored_Procedure", "Name", "can_not_include_underline"}; + String[] sign = new String[]{"", "", "!"}; + isNamePermitted = false; + nameableList.stopEditing(); + JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this), Inter.getLocText(datasource_underline, sign)); + setWarnigText(editingIndex); + } + if (nameableList.getSelectedValue() instanceof ListModelElement) { + Nameable selected = ((ListModelElement) nameableList.getSelectedValue()).wrapper; + if (!ComparatorUtils.equals(tempName, selected.getName())) { + rename(selected.getName(), tempName); + + } + } + } + }); + } + + @Override + public void rename(String oldName, String newName) { + dsNameChangedMap.put(oldName, newName); + } + + /** + * 名字是否允许 + * + * @return 是/否 + */ + @Override + public boolean isNamePermitted() { + return isNamePermitted; + } + + + /** + * 检查按钮可用状态 Check button enabled. + */ + @Override + public void checkButtonEnabled() { + super.checkButtonEnabled(); + isNamePermitted = !isContainsRename(); + } + + private boolean isIncludeUnderline(String name) { + return ComparatorUtils.equals(name.indexOf(StoreProcedure.SPLIT), -1) ? false : true; + } + + /** + * 创建服务器数据集所需要的NameableCreator数组 + * + * @return 数组 + */ + @Override + public NameableCreator[] createNameableCreators() { + return TableDataCreatorProducer.getInstance().createServerTableDataCreator(); + } + + + // 只能保证当前模板不重名了 + + /** + * 新建不重名的面板 + * + * @param prefix 前缀字符 + * @return 生成的名字 + */ + @Override + public String createUnrepeatedName(String prefix) { + TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); + if (source == null) { + return super.createUnrepeatedName(prefix); + } + String[] allDsNames = DesignTableDataManager.getAllDSNames(source); + DefaultListModel model = this.getModel(); + Nameable[] all = new Nameable[model.getSize()]; + for (int i = 0; i < model.size(); i++) { + all[i] = ((ListModelElement) model.get(i)).wrapper; + } + // richer:生成的名字从1开始. kunsnat: 添加属性从0开始. + int count = all.length + 1; + while (true) { + String name_test = prefix + count; + boolean repeated = false; + for (int i = 0, len = model.size(); i < len; i++) { + Nameable nameable = all[i]; + if (ComparatorUtils.equals(nameable.getName(), name_test)) { + repeated = true; + break; + } + } + for (String dsname : allDsNames) { + if (ComparatorUtils.equals(dsname, name_test)) { + repeated = true; + break; + } + } + + if (!repeated) { + return name_test; + } + + count++; + } + } + + @Override + protected String title4PopupWindow() { + return "TableData"; + } + + /** + * Populate. + */ + @Override + public void populate(TableDataSource tds) { + List nameObjectList = new ArrayList(); + + Iterator tableDataNameIterator = tds.getTableDataNameIterator(); + while (tableDataNameIterator.hasNext()) { + String tableDataName = (String) tableDataNameIterator.next(); + TableData tableData = tds.getTableData(tableDataName); + + if (tableData != null) { + nameObjectList.add(new NameObject(tableDataName, tableData)); + } + } + + populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + } + + /** + * Populate. + */ + @Override + public void populate(DatasourceManagerProvider datasourceManager) { + Iterator nameIt = datasourceManager.getTableDataNameIterator(); + Iterator procedurenameIt = datasourceManager.getProcedureNameIterator(); + List nameObjectList = new ArrayList(); + while (nameIt.hasNext()) { + String name = nameIt.next(); + nameObjectList.add(new NameObject(name, datasourceManager.getTableData(name))); + } + while (procedurenameIt.hasNext()) { + String name = procedurenameIt.next(); + nameObjectList.add(new NameObject(name, datasourceManager.getProcedureByName(name))); + } + + populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + } + + @Override + public void update(DatasourceManagerProvider datasourceManager) { + datasourceManager.clearAllTableData(); + datasourceManager.clearAllProcedure(); + Nameable[] tableDataArray = this.update(); + for (int i = 0; i < tableDataArray.length; i++) { + NameObject nameObject = (NameObject) tableDataArray[i]; + datasourceManager.putTableData(nameObject.getName(), (TableData) nameObject.getObject()); + } + } + + @Override + public void update(TableDataSource tds) { + tds.clearAllTableData(); + + Nameable[] tableDataArray = this.update(); + for (int i = 0; i < tableDataArray.length; i++) { + NameObject nameObject = (NameObject) tableDataArray[i]; + tds.putTableData(nameObject.getName(), (TableData) nameObject.getObject()); + } + } + + /** + * 判断数据集是否重名 + */ + @Override + public void checkValid() throws Exception { + List exsitTableDataNameList = new ArrayList(); + // _denny: 判断是否有重复的数据集名 + checkRepeatedDSName(exsitTableDataNameList); + + Nameable[] tableDataArray = this.update(); + for (int i = 0; i < tableDataArray.length; i++) { + NameObject nameObject = (NameObject) tableDataArray[i]; + + if (exsitTableDataNameList.contains(nameObject.getName())) { + String[] waring = new String[]{"TableData", "Error_TableDataNameRepeat"}; + String[] sign = new String[]{": " + nameObject.getName()}; + throw new Exception(Inter.getLocText(waring, sign)); + } + + exsitTableDataNameList.add(nameObject.getName()); + } + } + + protected void checkRepeatedDSName(List exsitTableDataNameList) { + } + + /** + * 在JJControlPane的左侧Tree里面选中某一Item + * + * @param name 被选择的Item名称 + */ + public void selectName(String name) { + this.setSelectedName(name); + } + + @Override + public Map getDsNameChangedMap() { + return this.dsNameChangedMap; + } + + @Override + public JPanel getPanel() { + return this; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java index 106578362..fcaa7c6e7 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java @@ -14,7 +14,7 @@ import com.fr.design.data.tabledata.wrapper.AbstractTableDataWrapper; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.fun.TableDataTreePaneProcessor; +import com.fr.design.fun.TableDataPaneProcessor; import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itextfield.UITextField; @@ -47,7 +47,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { public synchronized static BasicTableDataTreePane getInstance(DesignModelAdapter tc) { - TableDataTreePaneProcessor treePaneProcessor = ExtraDesignClassManager.getInstance().getTableDataTreePaneProcessor(); + TableDataPaneProcessor treePaneProcessor = ExtraDesignClassManager.getInstance().getTableDataPaneProcessor(); if (treePaneProcessor != null) { return treePaneProcessor.createTableDataTreePane(tc); } diff --git a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java index 1d5dd260a..725a65ad3 100644 --- a/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java +++ b/designer_base/src/com/fr/design/data/datapane/connect/ConnectionListPane.java @@ -4,7 +4,7 @@ import com.fr.data.impl.Connection; import com.fr.data.impl.JDBCDatabaseConnection; import com.fr.data.impl.JNDIDatabaseConnection; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.file.DatasourceManagerProvider; @@ -22,7 +22,7 @@ import java.util.*; /** * Connection List Pane. */ -public class ConnectionListPane extends JControlPane { +public class ConnectionListPane extends JListControlPane { public static final String TITLE_NAME = Inter.getLocText("Server-Define_Data_Connection"); private boolean isNamePermitted = true; private HashMap renameMap = new HashMap(); diff --git a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/ProcedureListPane.java b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/ProcedureListPane.java index 5f5651628..636bc4b76 100644 --- a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/ProcedureListPane.java +++ b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/ProcedureListPane.java @@ -3,7 +3,7 @@ package com.fr.design.data.tabledata.tabledatapane; import com.fr.data.TableDataSource; import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.design.data.DesignTableDataManager; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.ilist.ListModelElement; @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class ProcedureListPane extends JControlPane { +public class ProcedureListPane extends JListControlPane { public ProcedureListPane() { super(); this.addEditingListner(new PropertyChangeAdapter() { diff --git a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/TableDataManagerPane.java b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/TableDataManagerPane.java index 55f975e38..daf2ed1f5 100644 --- a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/TableDataManagerPane.java +++ b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/TableDataManagerPane.java @@ -1,7 +1,11 @@ package com.fr.design.data.tabledata.tabledatapane; import com.fr.base.FRContext; -import com.fr.design.data.datapane.TableDataListPane; +import com.fr.design.DesignModelAdapter; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.data.datapane.TableDataPaneController; +import com.fr.design.data.datapane.TableDataPaneListPane; +import com.fr.design.fun.TableDataPaneProcessor; import com.fr.design.gui.frpane.LoadingBasicPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; @@ -18,7 +22,7 @@ import java.util.Map; public class TableDataManagerPane extends LoadingBasicPane { private UITextField tableDataTextField; - private TableDataListPane tableDataListPane; + private TableDataPaneController tableDataPane; @Override protected void initComponents(JPanel container) { @@ -36,13 +40,19 @@ public class TableDataManagerPane extends LoadingBasicPane { this.tableDataTextField = new UITextField(); tableDataPathPane.add(tableDataTextField, BorderLayout.CENTER); this.tableDataTextField.setEditable(false); - tableDataListPane = new TableDataListPane(){ - protected void rename(String oldName,String newName){ - super.rename(oldName,newName); - renameConnection(oldName, newName); - } - }; - container.add(tableDataListPane, BorderLayout.CENTER); + TableDataPaneProcessor paneProcessor = ExtraDesignClassManager.getInstance().getTableDataPaneProcessor(); + TableDataPaneController pane = null; + if (paneProcessor != null) { + pane = paneProcessor.createServerTableDataPane(DesignModelAdapter.getCurrentModelAdapter() + ); + } + tableDataPane = pane == null ? new TableDataPaneListPane() { + public void rename(String oldName, String newName) { + super.rename(oldName, newName); + renameConnection(oldName, newName); + } + } : pane; + container.add(tableDataPane.getPanel(), BorderLayout.CENTER); } @@ -51,7 +61,7 @@ public class TableDataManagerPane extends LoadingBasicPane { * @return 是则返回true */ public boolean isNamePermitted(){ - return tableDataListPane.isNamePermitted(); + return tableDataPane.isNamePermitted(); } /** @@ -59,7 +69,7 @@ public class TableDataManagerPane extends LoadingBasicPane { * @throws Exception 异常 */ public void checkValid() throws Exception { - tableDataListPane.checkValid(); + tableDataPane.checkValid(); } @Override @@ -70,15 +80,15 @@ public class TableDataManagerPane extends LoadingBasicPane { public void populate(DatasourceManagerProvider datasourceManager) { this.tableDataTextField.setText(FRContext.getCurrentEnv().getPath() + File.separator + ProjectConstants.RESOURCES_NAME + File.separator + datasourceManager.fileName()); - this.tableDataListPane.populate(datasourceManager); + this.tableDataPane.populate(datasourceManager); } public void update(DatasourceManagerProvider datasourceManager) { - this.tableDataListPane.update(datasourceManager); + this.tableDataPane.update(datasourceManager); } public Map getDsChangedNameMap () { - return this.tableDataListPane.getDsNameChangedMap(); + return this.tableDataPane.getDsNameChangedMap(); } /** @@ -87,6 +97,6 @@ public class TableDataManagerPane extends LoadingBasicPane { * @param index 选中项的序列号 */ public void setSelectedIndex(int index) { - this.tableDataListPane.setSelectedIndex(index); + this.tableDataPane.setSelectedIndex(index); } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/PluginShopDialog.java b/designer_base/src/com/fr/design/extra/PluginShopDialog.java index 01e966116..f2e1e93ec 100644 --- a/designer_base/src/com/fr/design/extra/PluginShopDialog.java +++ b/designer_base/src/com/fr/design/extra/PluginShopDialog.java @@ -4,17 +4,23 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; +import javafx.embed.swing.JFXPanel; +import javax.swing.*; import java.awt.*; /** * Created by vito on 16/4/18. */ public class PluginShopDialog extends UIDialog { - private static final Dimension DEFAULT_SHOP = new Dimension(900, 684); + private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); public PluginShopDialog(Frame frame, BasicPane pane) { - super(frame, pane, false); + super(frame); + setUndecorated(true); + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); setSize(DEFAULT_SHOP); GUICoreUtils.centerWindow(this); setResizable(false); diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index 07c404ab0..156627b6b 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java @@ -151,6 +151,7 @@ public class PluginWebBridge { * @param des 过滤文件描述 * @param filter 文件的后缀 * @return 选择的文件的路径 + * 这里换用JFileChooser会卡死,不知道为什么 */ public String showFileChooserWithFilter(String des, String filter) { FileChooser fileChooser = new FileChooser(); @@ -241,6 +242,16 @@ public class PluginWebBridge { new Thread(task).start(); } + /** + * 在线获取插件分类 + * + * @param callback 回调函数 + */ + public void getPluginCategories(final JSObject callback) { + Task task = new PluginTask<>(webEngine, callback, new GetPluginCategoriesExecutor()); + new Thread(task).start(); + } + /** * 展示一个重启的对话框(少用,莫名其妙会有bug) * @@ -272,6 +283,16 @@ public class PluginWebBridge { } } + /** + * 窗口是否无装饰(判断是否使用系统标题栏) + */ + public boolean isCustomTitleBar() { + if (uiDialog != null) { + return uiDialog.isUndecorated(); + } + return false; + } + /** * 在本地浏览器里打开url * tips:重载的时候,需要给js调用的方法需要放在前面,否则可能不会被调用(此乃坑) diff --git a/designer_base/src/com/fr/design/extra/exe/GetPluginCategoriesExecutor.java b/designer_base/src/com/fr/design/extra/exe/GetPluginCategoriesExecutor.java new file mode 100644 index 000000000..81bdb8f8c --- /dev/null +++ b/designer_base/src/com/fr/design/extra/exe/GetPluginCategoriesExecutor.java @@ -0,0 +1,35 @@ +package com.fr.design.extra.exe; + +import com.fr.design.extra.Process; +import com.fr.general.SiteCenter; +import com.fr.general.http.HttpClient; + +/** + * Created by vito on 16/5/16. + */ +public class GetPluginCategoriesExecutor implements Executor { + private String result = "[]"; + + @Override + public String getTaskFinishMessage() { + return result; + } + + @Override + public Command[] getCommands() { + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return null; + } + + @Override + public void run(Process process) { + HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("plugin.category")); + result = httpClient.getResponseText(); + } + } + }; + } +} diff --git a/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java b/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java index 3f0845a7a..d8fc7d9ec 100644 --- a/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java @@ -16,6 +16,7 @@ import javax.swing.*; public class UninstallExecutor implements Executor { private String[] pluginIDs; + private String result = "undo"; public UninstallExecutor(String[] pluginIDs) { this.pluginIDs = pluginIDs; @@ -23,7 +24,7 @@ public class UninstallExecutor implements Executor { @Override public String getTaskFinishMessage() { - return "插件已卸载完毕,重启后生效"; + return result; } @Override @@ -32,7 +33,7 @@ public class UninstallExecutor implements Executor { new Command() { @Override public String getExecuteMessage() { - return "删除成功"; + return null; } @Override @@ -62,6 +63,7 @@ public class UninstallExecutor implements Executor { JOptionPane.showMessageDialog(null, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } + result = "done"; if (rv == JOptionPane.OK_OPTION) { RestartHelper.restart(); } diff --git a/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java b/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java index 30fe07896..fa295cd36 100644 --- a/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java @@ -10,6 +10,7 @@ import com.fr.design.extra.Process; import com.fr.general.Inter; import com.fr.plugin.Plugin; import com.fr.plugin.PluginLoader; +import com.fr.plugin.PluginVerifyException; import com.fr.stable.StringUtils; import javax.swing.*; @@ -43,44 +44,50 @@ public class UpdateOnlineExecutor implements Executor { @Override public void run(Process process) { - if(StringUtils.isBlank(DesignerEnvManager.getEnvManager().getBBSName())){ + if (StringUtils.isBlank(DesignerEnvManager.getEnvManager().getBBSName())) { LoginCheckContext.fireLoginCheckListener(); } - if(StringUtils.isNotBlank(DesignerEnvManager.getEnvManager().getBBSName())){ - for (int i = 0; i < pluginIDs.length; i++) { - Plugin plugin = PluginLoader.getLoader().getPluginById(pluginIDs[i]); - String id = null; - if (plugin != null) { - id = plugin.getId(); - } - String username = DesignerEnvManager.getEnvManager().getBBSName(); - String password = DesignerEnvManager.getEnvManager().getBBSPassword(); - try { - PluginHelper.downloadPluginFile(id, username, password, new Process() { - @Override - public void process(Double integer) { + if (StringUtils.isNotBlank(DesignerEnvManager.getEnvManager().getBBSName())) { + try { + for (int i = 0; i < pluginIDs.length; i++) { + try { + Plugin plugin = PluginLoader.getLoader().getPluginById(pluginIDs[i]); + String id = null; + if (plugin != null) { + id = plugin.getId(); } - }); - updateFileFromDisk(PluginHelper.getDownloadTempFile()); - process.process(PERCENT_100 / pluginIDs.length * (i + 1) + "%"); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + String username = DesignerEnvManager.getEnvManager().getBBSName(); + String password = DesignerEnvManager.getEnvManager().getBBSPassword(); + PluginHelper.downloadPluginFile(id, username, password, new Process() { + @Override + public void process(Double integer) { + } + }); + updateFileFromDisk(PluginHelper.getDownloadTempFile()); + process.process(PERCENT_100 / pluginIDs.length * (i + 1) + "%"); + } catch (PluginVerifyException e) { + throw e; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } } - } - int rv = JOptionPane.showOptionDialog( - null, - Inter.getLocText("FR-Designer-Plugin_Update_Successful"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.YES_NO_OPTION, - JOptionPane.INFORMATION_MESSAGE, - null, - new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), - Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later") - }, - null - ); - if (rv == JOptionPane.OK_OPTION) { - RestartHelper.restart(); + int rv = JOptionPane.showOptionDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Update_Successful"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.YES_NO_OPTION, + JOptionPane.INFORMATION_MESSAGE, + null, + new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), + Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later") + }, + null + ); + if (rv == JOptionPane.OK_OPTION) { + RestartHelper.restart(); + } + } catch (PluginVerifyException e) { + JOptionPane.showMessageDialog(null, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } } @@ -88,26 +95,22 @@ public class UpdateOnlineExecutor implements Executor { }; } - private void updateFileFromDisk(File fileOnDisk) { - try { - Plugin plugin = PluginHelper.readPlugin(fileOnDisk); - if (plugin == null) { - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Illegal_Plugin_Zip"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); - return; - } - Plugin oldPlugin = PluginLoader.getLoader().getPluginById(plugin.getId()); - if (oldPlugin != null) { - String[] files = PluginHelper.uninstallPlugin(FRContext.getCurrentEnv(), oldPlugin); - PluginHelper.installPluginFromUnzippedTempDir(FRContext.getCurrentEnv(), plugin, new After() { - @Override - public void done() { - } - }); - } else { - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Cannot_Update_Not_Install"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); - } - } catch (Exception e1) { - JOptionPane.showMessageDialog(null, e1.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + private void updateFileFromDisk(File fileOnDisk) throws Exception { + Plugin plugin = PluginHelper.readPlugin(fileOnDisk); + if (plugin == null) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Illegal_Plugin_Zip"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + return; + } + Plugin oldPlugin = PluginLoader.getLoader().getPluginById(plugin.getId()); + if (oldPlugin != null) { + String[] files = PluginHelper.uninstallPlugin(FRContext.getCurrentEnv(), oldPlugin); + PluginHelper.installPluginFromUnzippedTempDir(FRContext.getCurrentEnv(), plugin, new After() { + @Override + public void done() { + } + }); + } else { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Cannot_Update_Not_Install"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } } diff --git a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java index 4af0c2799..fd41df325 100644 --- a/designer_base/src/com/fr/design/formula/FunctionManagerPane.java +++ b/designer_base/src/com/fr/design/formula/FunctionManagerPane.java @@ -6,7 +6,7 @@ import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.ibutton.UIButton; @@ -97,7 +97,7 @@ public class FunctionManagerPane extends BasicPane { /** * CellRenderer. */ - class FunctionControlPane extends JControlPane { + class FunctionControlPane extends JListControlPane { public FunctionControlPane() { super(); diff --git a/designer_base/src/com/fr/design/fun/BackgroundQuickUIProvider.java b/designer_base/src/com/fr/design/fun/BackgroundQuickUIProvider.java new file mode 100644 index 000000000..257d257a3 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/BackgroundQuickUIProvider.java @@ -0,0 +1,22 @@ +package com.fr.design.fun; + +import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; +import com.fr.stable.fun.Level; +import com.fr.stable.fun.Provider; + +/** + * Created by richie on 16/5/18. + * 背景设置界面接口,用于扩展设置更多类型的背景 + */ +public interface BackgroundQuickUIProvider extends Level, Provider { + + String MARK_STRING = "BackgroundQuickUIProvider"; + + int CURRENT_LEVEL = 1; + + /** + * 背景设置界面 + * @return 设置界面 + */ + BackgroundQuickPane appearanceForBackground(); +} diff --git a/designer_base/src/com/fr/design/fun/BackgroundUIProvider.java b/designer_base/src/com/fr/design/fun/BackgroundUIProvider.java new file mode 100644 index 000000000..0ae87b9d7 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/BackgroundUIProvider.java @@ -0,0 +1,34 @@ +package com.fr.design.fun; + +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.general.Background; +import com.fr.stable.fun.Level; +import com.fr.stable.fun.Provider; + +/** + * Created by richie on 16/5/18. + */ +public interface BackgroundUIProvider extends Level, Provider { + + String MARK_STRING = "BackgroundUIProvider"; + + int CURRENT_LEVEL = 1; + + /** + * 对应的背景具体类型 + * @return 背景 + */ + Class targetClass(); + + /** + * 背景设置界面 + * @return 界面 + */ + Class targetUIClass(); + + /** + * 标题 + * @return 在设计界面上这个选项的显示标题 + */ + String targetTitle(); +} diff --git a/designer_base/src/com/fr/design/fun/ElementUIProvider.java b/designer_base/src/com/fr/design/fun/ElementUIProvider.java index e52721858..cb960564f 100644 --- a/designer_base/src/com/fr/design/fun/ElementUIProvider.java +++ b/designer_base/src/com/fr/design/fun/ElementUIProvider.java @@ -7,6 +7,7 @@ import com.fr.stable.fun.Level; /** * Created by richie on 16/4/25. + * 单元格元素和悬浮元素扩展,通过实现这个接口,可以在单元格中添加更多类型的元素. */ public interface ElementUIProvider extends Level { @@ -14,13 +15,33 @@ public interface ElementUIProvider extends Level { int CURRENT_LEVEL = 1; + /** + * 单元格元素编辑器 + * @return 编辑器 + */ Class targetCellEditorClass(); + /** + * 单元格内容 + * @return 单元格内容 + */ Class targetObjectClass(); + /** + * 右侧的快速编辑器 + * @return 编辑器 + */ QuickEditor quickEditor(); + /** + * 插件单元格元素 + * @return 插入操作类 + */ Class actionForInsertCellElement(); + /** + * 插入悬浮元素 + * @return 插入操作类 + */ Class actionForInsertFloatElement(); } diff --git a/designer_base/src/com/fr/design/fun/ExportToolBarProvider.java b/designer_base/src/com/fr/design/fun/ExportToolBarProvider.java index d09817401..c2c560260 100644 --- a/designer_base/src/com/fr/design/fun/ExportToolBarProvider.java +++ b/designer_base/src/com/fr/design/fun/ExportToolBarProvider.java @@ -6,9 +6,6 @@ import javax.swing.*; /** * 导出菜单设计器端拓展,用于控制该菜单是否在web端显示 - * @author focus - * @date Jul 2, 2015 - * @since 8.0 */ public interface ExportToolBarProvider extends Level{ @@ -16,8 +13,6 @@ public interface ExportToolBarProvider extends Level{ int CURRENT_LEVEL = 1; - - /** * * 用于添加 控制web端是否显示该菜单的checkbox的面板 @@ -28,16 +23,12 @@ public interface ExportToolBarProvider extends Level{ JPanel updateCenterPane(JPanel pane); /** - * 根据xml里面存的web段按钮显示状态更新对应的checkbox - * + * 更新界面 */ void populate(); /** - * 根据checkbox控制web段菜单是否显示 - * - * @return + * 保存界面设置 */ void update(); - } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/GlobalListenerProvider.java b/designer_base/src/com/fr/design/fun/GlobalListenerProvider.java index 87e3f99ee..7fbd9b371 100644 --- a/designer_base/src/com/fr/design/fun/GlobalListenerProvider.java +++ b/designer_base/src/com/fr/design/fun/GlobalListenerProvider.java @@ -7,6 +7,7 @@ import java.awt.event.AWTEventListener; /** * Created by zack on 2015/8/17. + * 全局事件监听 */ public interface GlobalListenerProvider extends Level{ @@ -14,6 +15,9 @@ public interface GlobalListenerProvider extends Level{ int CURRENT_LEVEL = 1; - + /** + * 返回一个AWT监听事件给系统注册 + * @return AWT监听事件 + */ AWTEventListener listener(); } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/HighlightProvider.java b/designer_base/src/com/fr/design/fun/HighlightProvider.java index 596134073..ebee36932 100644 --- a/designer_base/src/com/fr/design/fun/HighlightProvider.java +++ b/designer_base/src/com/fr/design/fun/HighlightProvider.java @@ -5,10 +5,7 @@ import com.fr.design.condition.ConditionAttributesPane; import com.fr.stable.fun.Level; /** - * @author richie - * @date 2015-03-26 - * @since 8.0 - * 条件属性接口 + * 条件属性界面设计接口 */ public interface HighlightProvider extends Level{ @@ -16,7 +13,6 @@ public interface HighlightProvider extends Level{ int CURRENT_LEVEL = 1; - /** * 条件属性的实现类 * @return 实现类 diff --git a/designer_base/src/com/fr/design/fun/ServerTableDataDefineProvider.java b/designer_base/src/com/fr/design/fun/ServerTableDataDefineProvider.java index 63d8d6221..5b38cae35 100644 --- a/designer_base/src/com/fr/design/fun/ServerTableDataDefineProvider.java +++ b/designer_base/src/com/fr/design/fun/ServerTableDataDefineProvider.java @@ -7,6 +7,5 @@ package com.fr.design.fun; */ public interface ServerTableDataDefineProvider extends TableDataDefineProvider { - public static final String XML_TAG = "ServerTableDataDefineProvider"; - + String XML_TAG = "ServerTableDataDefineProvider"; } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/TableDataDefineProvider.java b/designer_base/src/com/fr/design/fun/TableDataDefineProvider.java index 8eb835903..4ddfa9a95 100644 --- a/designer_base/src/com/fr/design/fun/TableDataDefineProvider.java +++ b/designer_base/src/com/fr/design/fun/TableDataDefineProvider.java @@ -11,7 +11,7 @@ import com.fr.stable.fun.Level; */ public interface TableDataDefineProvider extends Level { - public static final String XML_TAG = "TableDataDefineProvider"; + String XML_TAG = "TableDataDefineProvider"; int CURRENT_LEVEL = 1; @@ -19,35 +19,35 @@ public interface TableDataDefineProvider extends Level { * 自定义的数据集设置界面所对应的数据集类型 * @return 数据集的类型 */ - public Class classForTableData(); + Class classForTableData(); /** * 自定义数据集设置界面所对应的初始化数据集类型,在一种数据集有多个实现的时候有效 * @return 数据集类型 */ - public Class classForInitTableData(); + Class classForInitTableData(); /** * 自定义的数据集设置界面所对应的界面类型 * @return 数据集界面类型 */ - public Class appearanceForTableData(); + Class appearanceForTableData(); /** * 自定义数据集设置界面在菜单上的现实名字 * @return 名字 */ - public String nameForTableData(); + String nameForTableData(); /** * 自定义数据集在新建的时候名字前缀 * @return 名字前缀 */ - public String prefixForTableData(); + String prefixForTableData(); /** * 自定义数据集在菜单上现实的图标 * @return 图标 */ - public String iconPathForTableData(); + String iconPathForTableData(); } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/fun/TableDataPaneProcessor.java b/designer_base/src/com/fr/design/fun/TableDataPaneProcessor.java new file mode 100644 index 000000000..06db5c974 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/TableDataPaneProcessor.java @@ -0,0 +1,36 @@ +package com.fr.design.fun; + +import com.fr.design.DesignModelAdapter; +import com.fr.design.data.BasicTableDataTreePane; +import com.fr.design.data.datapane.TableDataPaneController; +import com.fr.design.menu.ShortCut; +import com.fr.stable.fun.Level; + +/** + * 自定义的模板(服务器)数据集的树样式接口 el:分组样式 + * Coder: zack + * Date: 2016/4/18 + * Time: 9:04 + */ +public interface TableDataPaneProcessor extends Level { + String XML_TAG = "TableDataPaneProcessor"; + + int CURRENT_LEVEL = 1; + /** + * 创建数据集面板 + * @return 数据集面板 + */ + BasicTableDataTreePane createTableDataTreePane(DesignModelAdapter tc); + + /** + * 服务器数据集面板(模板数据集面板) + * @return 服务器数据集面板 + */ + TableDataPaneController createServerTableDataPane(DesignModelAdapter tc); + + /** + * 自定义服务器数据集菜单项 + * @return + */ + ShortCut createServerTDAction(); +} diff --git a/designer_base/src/com/fr/design/fun/TableDataTreePaneProcessor.java b/designer_base/src/com/fr/design/fun/TableDataTreePaneProcessor.java deleted file mode 100644 index 1789c2ca2..000000000 --- a/designer_base/src/com/fr/design/fun/TableDataTreePaneProcessor.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.fr.design.fun; - -import com.fr.design.DesignModelAdapter; -import com.fr.design.data.BasicTableDataTreePane; -import com.fr.stable.fun.Level; - -/** - * 自定义的模板(服务器)数据集的树样式接口 el:分组样式 - * Coder: zack - * Date: 2016/4/18 - * Time: 9:04 - */ -public interface TableDataTreePaneProcessor extends Level { - String XML_TAG = "TableDataTreePaneProcessor"; - - int CURRENT_LEVEL = 1; - /** - * 创建数据集面板 - * @return 数据集面板 - */ - BasicTableDataTreePane createTableDataTreePane(DesignModelAdapter tc); - -} diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractBackgroundQuickUIProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractBackgroundQuickUIProvider.java new file mode 100644 index 000000000..82da697c1 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/impl/AbstractBackgroundQuickUIProvider.java @@ -0,0 +1,20 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.BackgroundQuickUIProvider; +import com.fr.stable.fun.impl.AbstractProvider; + +/** + * Created by richie on 16/5/18. + */ +public abstract class AbstractBackgroundQuickUIProvider extends AbstractProvider implements BackgroundQuickUIProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractBackgroundUIProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractBackgroundUIProvider.java new file mode 100644 index 000000000..ad95e3684 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/impl/AbstractBackgroundUIProvider.java @@ -0,0 +1,20 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.BackgroundUIProvider; +import com.fr.stable.fun.impl.AbstractProvider; + +/** + * Created by richie on 16/5/18. + */ +public abstract class AbstractBackgroundUIProvider extends AbstractProvider implements BackgroundUIProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractTDTreePaneProcessor.java b/designer_base/src/com/fr/design/fun/impl/AbstractTDPaneProcessor.java similarity index 55% rename from designer_base/src/com/fr/design/fun/impl/AbstractTDTreePaneProcessor.java rename to designer_base/src/com/fr/design/fun/impl/AbstractTDPaneProcessor.java index 635739a07..e5f591a65 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractTDTreePaneProcessor.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractTDPaneProcessor.java @@ -1,13 +1,13 @@ package com.fr.design.fun.impl; -import com.fr.design.fun.TableDataTreePaneProcessor; +import com.fr.design.fun.TableDataPaneProcessor; /** * Coder: zack * Date: 2016/4/18 * Time: 10:30 */ -public abstract class AbstractTDTreePaneProcessor implements TableDataTreePaneProcessor { +public abstract class AbstractTDPaneProcessor implements TableDataPaneProcessor { @Override public int currentAPILevel() { return CURRENT_LEVEL; diff --git a/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java index e58a13615..53dfc54af 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/JControlPane.java @@ -1,1026 +1,212 @@ -package com.fr.design.gui.controlpane; - -import com.fr.base.BaseUtils; -import com.fr.base.FRContext; -import com.fr.design.data.tabledata.tabledatapane.GlobalMultiTDTableDataPane; -import com.fr.design.data.tabledata.tabledatapane.GlobalTreeTableDataPane; -import com.fr.design.data.tabledata.tabledatapane.MultiTDTableDataPane; -import com.fr.design.data.tabledata.tabledatapane.TreeTableDataPane; -import com.fr.design.actions.UpdateAction; -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itoolbar.UIToolbar; -import com.fr.design.gui.ilist.JNameEdList; -import com.fr.design.gui.ilist.ListModelElement; -import com.fr.design.gui.ilist.ModNameActionListener; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.JTemplate; -import com.fr.design.menu.*; -import com.fr.design.dialog.BasicPane; -import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; -import com.fr.stable.ArrayUtils; -import com.fr.stable.Nameable; -import com.fr.stable.core.PropertyChangeAdapter; -import com.fr.design.utils.gui.GUICoreUtils; - -import javax.swing.*; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; -import java.util.Comparator; - -public abstract class JControlPane extends BasicPane implements UnrepeatedNameHelper { - public static final String LIST_NAME = "JControl_List"; - private static final int SHORT_WIDTH = 30; //每加一个short Divider位置加30 - - private ShortCut4JControlPane[] shorts; - private NameableCreator[] creators; - protected JNameEdList nameableList; - protected JControlUpdatePane controlUpdatePane; - - private ToolBarDef toolbarDef; - private UIToolbar toolBar; - - // peter:这是整体的一个cardLayout Pane - private CardLayout cardLayout; - private JPanel cardPane; - protected int editingIndex; - protected String selectedName; - private boolean isNameRepeated = false; - - public JControlPane() { - this.initComponentPane(); - } - - /** - * 生成添加按钮的NameableCreator - * @return 按钮的NameableCreator - */ - public abstract NameableCreator[] createNameableCreators(); - - protected void initComponentPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.creators = this.createNameableCreators(); - this.controlUpdatePane = new JControlUpdatePane(); - - // p: edit card layout - this.cardLayout = new CardLayout(); - cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - cardPane.setLayout(this.cardLayout); - // p:选择的Label - UILabel selectLabel = new UILabel(); - cardPane.add(selectLabel, "SELECT"); - cardPane.add(controlUpdatePane, "EDIT"); - // SplitPane - JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, getLeftPane(), cardPane); - mainSplitPane.setBorder(BorderFactory.createLineBorder(GUICoreUtils.getTitleLineBorderColor())); - mainSplitPane.setOneTouchExpandable(true); - - this.add(mainSplitPane, BorderLayout.CENTER); - mainSplitPane.setDividerLocation(getLeftPreferredSize()); - this.checkButtonEnabled(); - } - - - protected JPanel getLeftPane(){ - // LeftPane - JPanel leftPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - - initNameList(leftPane); - - shorts = this.createShortcuts(); - if (ArrayUtils.isEmpty(shorts)) { - return leftPane; - } - - toolbarDef = new ToolBarDef(); - for (ShortCut4JControlPane sj : shorts) { - toolbarDef.addShortCut(sj.getShortCut()); - } - toolBar = ToolBarDef.createJToolBar(); - toolbarDef.updateToolBar(toolBar); - leftPane.add(toolBar, BorderLayout.NORTH); - return leftPane; - } - - - private void initNameList(JPanel leftPane) { - nameableList = createJNameList(); - nameableList.setName(LIST_NAME); - leftPane.add(new UIScrollPane(nameableList), BorderLayout.CENTER); - - - nameableList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - nameableList.addMouseListener(listMouseListener); - nameableList.addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent evt) { - // richie:避免多次update和populate大大降低效率 - if (!evt.getValueIsAdjusting()) { - // shoc 切换的时候加检验 - if (hasInvalid(false)) { - return; - } - JControlPane.this.controlUpdatePane.update(); - JControlPane.this.controlUpdatePane.populate(); - JControlPane.this.checkButtonEnabled(); - } - } - }); - } - - public JNameEdList createJNameList() { - JNameEdList nameEdList = new JNameEdList(new DefaultListModel()) { - protected void doAfterLostFocus() { - JControlPane.this.updateControlUpdatePane(); - } - }; - nameEdList.setCellRenderer(new NameableListCellRenderer()); - return nameEdList; - } - - public void updateControlUpdatePane() { - controlUpdatePane.update(); - } - - protected void doWhenPopulate(BasicBeanPane beanPane){ - - } - - protected int getLeftPreferredSize() { - return shorts.length * SHORT_WIDTH; - } - - protected ShortCut4JControlPane[] createShortcuts() { - return new ShortCut4JControlPane[]{ - addItemShortCut(), - removeItemShortCut(), - copyItemShortCut(), - moveUpItemShortCut(), - moveDownItemShortCut(), - sortItemShortCut() - }; - } - - protected ShortCut4JControlPane addItemShortCut() { - ShortCut addItemShortCut; - if (creators.length == 1) { - addItemShortCut = new AddItemUpdateAction(creators); - } else { - addItemShortCut = new AddItemMenuDef(creators); - } - return new AbsoluteEnableShortCut(addItemShortCut); - } - - protected ShortCut4JControlPane removeItemShortCut() { - return new NormalEnableShortCut(new RemoveItemAction()); - } - - protected ShortCut4JControlPane copyItemShortCut() { - return new NormalEnableShortCut(new CopyItemAction()); - } - - protected ShortCut4JControlPane moveUpItemShortCut() { - return new NormalEnableShortCut(new MoveUpItemAction()); - } - - protected ShortCut4JControlPane moveDownItemShortCut() { - return new NormalEnableShortCut(new MoveDownItemAction()); - } - - protected ShortCut4JControlPane sortItemShortCut() { - return new NormalEnableShortCut(new SortItemAction()); - } - - public void setNameListEditable(boolean editable) { - this.nameableList.setEditable(editable); - } - - public Nameable[] update() { - java.util.List res = new java.util.ArrayList(); - this.controlUpdatePane.update(); - DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); - for (int i = 0, len = listModel.getSize(); i < len; i++) { - res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); - } - - return res.toArray(new Nameable[res.size()]); - } - - public void populate(Nameable[] nameableArray) { - DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); - listModel.removeAllElements(); - if (ArrayUtils.isEmpty(nameableArray)) { - return; - } - - for (Nameable aNameableArray : nameableArray) { - listModel.addElement(new ListModelElement(aNameableArray)); - } - - if (listModel.size() > 0) { - this.nameableList.setSelectedIndex(0); - } - this.checkButtonEnabled(); - } - - /** - * 添加名字改变时的listener - * - * @param l 名字改变时的监听 - */ - public void addModNameActionListener(ModNameActionListener l) { - this.nameableList.addModNameActionListener(l); - } - - /** - * 添加Editinglistener - * - * @param l 监听 - */ - public void addEditingListner(PropertyChangeAdapter l) { - this.nameableList.addEditingListner(l); - } - - /* - * 刷新当前的选中的UpdatePane - */ - protected void populateSelectedValue() { - JControlPane.this.controlUpdatePane.populate(); - } - - /** - * 根据name,选中JNameEdList中的item - */ - public void setSelectedName(String name) { - DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); - for (int i = 0, len = listModel.getSize(); i < len; i++) { - Nameable item = ((ListModelElement) listModel.getElementAt(i)).wrapper; - if (ComparatorUtils.equals(name, item.getName())) { - this.nameableList.setSelectedIndex(i); - break; - } - } - } - - public String getEditingName() { - return this.nameableList.getEditingName(); - } - - public Object getEditingType() { - return this.nameableList.getAllTypes()[editingIndex]; - } - - public void setWarnigText(int index) { - this.nameableList.setWarnigText(index); - } - - /** - * 获取选中的名字 - */ - public String getSelectedName() { - ListModelElement el = (ListModelElement) this.nameableList.getSelectedValue(); - - return el == null ? null : el.wrapper.getName(); - } - - /** - * 刷新 NameableCreator - * - * @param creators 生成器 - */ - public void refreshNameableCreator(NameableCreator[] creators) { - this.creators = creators; - shorts = this.createShortcuts(); - toolbarDef.clearShortCuts(); - for (ShortCut4JControlPane sj : shorts) { - toolbarDef.addShortCut(sj.getShortCut()); - } - - toolbarDef.updateToolBar(toolBar); - toolBar.validate(); - toolBar.repaint(); - this.repaint(); - } - - protected boolean isNameRepeted(java.util.List[] list, String name) { - for (int i = 0; i < list.length; i++) { - if (list[i].contains(name)) { - isNameRepeated = true; - return true; - } - } - isNameRepeated = false; - return false; - } - - /** - * 名字是否重复 - * @return 重复则返回true - */ - public boolean isNameRepeated() { - return isNameRepeated; - } - - /** - * 添加 Nameable - * - * @param nameable 添加的Nameable - * @param index 序号 - */ - public void addNameable(Nameable nameable, int index) { - JNameEdList nameEdList = JControlPane.this.nameableList; - DefaultListModel model = (DefaultListModel) nameEdList.getModel(); - - ListModelElement el = new ListModelElement(nameable); - model.add(index, el); - nameableList.setSelectedIndex(index); - nameableList.ensureIndexIsVisible(index); - - nameEdList.repaint(); - } - - /** - * 是否重命名 - * @return 是则true - */ - public boolean isContainsRename() { - String rename = Inter.getLocText("FR-Please_Rename") + "!"; - String[] names = this.nameableList.getAllNames(); - for (int i = names.length - 1; i >= 0; i--) { - if (ComparatorUtils.equals(names[i], rename)) { - return true; - } - } - return false; - } - - protected DefaultListModel getModel() { - return (DefaultListModel) JControlPane.this.nameableList.getModel(); - } - - private String createUnrepeatedCopyName(String suffix) { - DefaultListModel model = this.getModel(); - String[] names = new String[model.getSize()]; - for (int i = 0; i < model.size(); i++) { - names[i] = ((ListModelElement) model.get(i)).wrapper.getName(); - } - String lastName = "CopyOf" + suffix; - while (ArrayUtils.contains(names, lastName)) { - lastName = "CopyOf" + lastName; - } - return lastName; - } - - - /** - * 生成不重复的名字 - * - * @param prefix 名字前缀 - * @return 名字 - */ - public String createUnrepeatedName(String prefix) { - DefaultListModel model = this.getModel(); - Nameable[] all = new Nameable[model.getSize()]; - for (int i = 0; i < model.size(); i++) { - all[i] = ((ListModelElement) model.get(i)).wrapper; - } - // richer:生成的名字从1开始. kunsnat: 添加属性从0开始. - int count = all.length + 1; - while (true) { - String name_test = prefix + count; - boolean repeated = false; - for (int i = 0, len = model.size(); i < len; i++) { - Nameable nameable = all[i]; - if (ComparatorUtils.equals(nameable.getName(), name_test)) { - repeated = true; - break; - } - } - - if (!repeated) { - return name_test; - } - - count++; - } - } - - /** - * 增加项的UpdateAction - */ - protected class AddItemUpdateAction extends UpdateAction { - final NameableCreator creator; - - public AddItemUpdateAction(NameableCreator[] creators) { - this.creator = creators[0]; - this.setName(Inter.getLocText("FR-Action_Add")); - this.setMnemonic('A'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/add.png")); - } - - public void actionPerformed(ActionEvent e) { - Nameable nameable = creator.createNameable(JControlPane.this); - - JControlPane.this.addNameable(nameable, getModel().getSize()); - } - } - - /* - * 增加项的MenuDef - */ - protected class AddItemMenuDef extends MenuDef { - public AddItemMenuDef(NameableCreator[] creators) { - this.setName(Inter.getLocText("FR-Action_Add")); - this.setMnemonic('A'); - this.setIconPath("/com/fr/design/images/control/addPopup.png"); - wrapActionListener(creators); - } - - private void wrapActionListener(NameableCreator[] creators) { - for (final NameableCreator creator : creators) { - if (!whetherAdd(creator.menuName())){ - continue; - } - boolean isTrue = ComparatorUtils.equals(creator.menuName(), Inter.getLocText("Datasource-Stored_Procedure")) || - ComparatorUtils.equals(creator.menuName(), Inter.getLocText("DS-Relation_TableData")) || ComparatorUtils.equals(creator.menuName(), Inter.getLocText("DS-Multi_Dimensional_Database")); - if (isTrue) { - this.addShortCut(new LineSeparator()); - } - this.addShortCut(new UpdateAction() { - { - this.setName(creator.menuName()); - Icon icon = creator.menuIcon(); - if (icon != null) { - this.setSmallIcon(icon); - } - } - - public void actionPerformed(ActionEvent e) { - if (hasInvalid(true)) { - return; - } - - Nameable nameable = creator.createNameable(JControlPane.this); - - JControlPane.this.addNameable(nameable, getModel().getSize()); - } - }); - } - } - - private boolean whetherAdd(String itemName){ - JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (jTemplate == null) { - return false; - } - //先屏蔽掉这个,之后还有别的 - String[] names = {Inter.getLocText("FR-Hyperlink_Chart_Float")}; - for (String name : names){ - if(!jTemplate.isJWorkBook() && ComparatorUtils.equals(itemName, name)){ - return false; - } - } - String formName = Inter.getLocText("Hyperlink-Form_link"); - return !(jTemplate.isJWorkBook() && ComparatorUtils.equals(itemName, formName)); - } - } - - /* - * 移除item - */ - private class RemoveItemAction extends UpdateAction { - public RemoveItemAction() { - this.setName(Inter.getLocText("FR-Action_Remove")); - this.setMnemonic('R'); - this.setSmallIcon(BaseUtils - .readIcon("/com/fr/base/images/cell/control/remove.png")); - } - - public void actionPerformed(ActionEvent evt) { - try { - JControlPane.this.nameableList.getCellEditor() - .stopCellEditing(); - } catch (Exception ignored) { - } - // bug:在选中一个NameObject并删除,会遗留下Name. - doBeforeRemove(); - if (GUICoreUtils.removeJListSelectedNodes(SwingUtilities - .getWindowAncestor(JControlPane.this), nameableList)) { - checkButtonEnabled(); - doAfterRemove(); - } - } - } - - /* - * CopyItem - */ - private class CopyItemAction extends UpdateAction { - public CopyItemAction() { - this.setName(Inter.getLocText("FR-Action_Copy")); - this.setMnemonic('C'); - this.setSmallIcon(BaseUtils - .readIcon("/com/fr/base/images/cell/control/copy.png")); - } - - public void actionPerformed(ActionEvent evt) { - // p:选中的值. - ListModelElement selectedValue = (ListModelElement) nameableList.getSelectedValue(); - if (selectedValue == null) { - return; - } - - controlUpdatePane.update(); - - Nameable selectedNameable = selectedValue.wrapper; - - // p: 用反射机制实现 - try { - Nameable newNameable = (Nameable) BaseUtils.cloneObject(selectedNameable); - newNameable.setName(createUnrepeatedCopyName(selectedNameable.getName())); - - JControlPane.this.addNameable(newNameable, nameableList.getSelectedIndex() + 1); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - } - - /* - * 上移Item - */ - private class MoveUpItemAction extends UpdateAction { - public MoveUpItemAction() { - this.setName(Inter.getLocText("Utils-Move_Up")); - this.setMnemonic('U'); - this.setSmallIcon(BaseUtils - .readIcon("/com/fr/design/images/control/up.png")); - } - - public void actionPerformed(ActionEvent evt) { - int selectedIndex = nameableList.getSelectedIndex(); - if (selectedIndex == -1) { - return; - } - - // 上移 - if (selectedIndex > 0) { - DefaultListModel listModel = (DefaultListModel) nameableList - .getModel(); - - Object selecteObj1 = listModel.get(selectedIndex - 1); - listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); - listModel.set(selectedIndex, selecteObj1); - - nameableList.setSelectedIndex(selectedIndex - 1); - nameableList.ensureIndexIsVisible(selectedIndex - 1); - } - } - } - - /* - * 下移Item - */ - private class MoveDownItemAction extends UpdateAction { - public MoveDownItemAction() { - this.setName(Inter.getLocText("Utils-Move_Down")); - this.setMnemonic('D'); - this.setSmallIcon(BaseUtils - .readIcon("/com/fr/design/images/control/down.png")); - } - - public void actionPerformed(ActionEvent evt) { - int selectedIndex = nameableList.getSelectedIndex(); - if (selectedIndex == -1) { - return; - } - - if (selectedIndex < nameableList.getModel().getSize() - 1) { - DefaultListModel listModel = (DefaultListModel) nameableList - .getModel(); - - Object selecteObj1 = listModel.get(selectedIndex + 1); - listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); - listModel.set(selectedIndex, selecteObj1); - - nameableList.setSelectedIndex(selectedIndex + 1); - nameableList.ensureIndexIsVisible(selectedIndex + 1); - } - } - } - - private class SortItemAction extends UpdateAction { - private boolean isAtoZ = false; - - public SortItemAction() { - this.setName(Inter.getLocText("FR-Action_Sort")); - this.setMnemonic('S'); - this.setSmallIcon(BaseUtils - .readIcon("/com/fr/design/images/control/sortAsc.png")); - } - - public void actionPerformed(ActionEvent evt) { - // p:选中的值. - Object selectedValue = nameableList.getSelectedValue(); - - DefaultListModel listModel = (DefaultListModel) nameableList - .getModel(); - Nameable[] nameableArray = new Nameable[listModel.getSize()]; - if (nameableArray.length <= 0) { - return; - } - - for (int i = 0; i < listModel.getSize(); i++) { - nameableArray[i] = ((ListModelElement) listModel.getElementAt(i)).wrapper; - } - - // p:排序. - if (isAtoZ) { - Comparator nameableComparator = new Comparator() { - public int compare(Nameable o1, Nameable o2) { - return -ComparatorUtils.compare(o1.getName(), o2 - .getName()); - } - }; - isAtoZ = !isAtoZ; - Arrays.sort(nameableArray, nameableComparator); - } else { - Comparator nameableComparator = new Comparator() { - public int compare(Nameable o1, Nameable o2) { - return ComparatorUtils.compare(o1.getName(), o2 - .getName()); - } - }; - isAtoZ = !isAtoZ; - Arrays.sort(nameableArray, nameableComparator); - } - - for (int i = 0; i < nameableArray.length; i++) { - listModel.set(i, new ListModelElement(nameableArray[i])); - } - - // p:需要选中以前的那个值. - if (selectedValue != null) { - nameableList.setSelectedValue(selectedValue, true); - } - - checkButtonEnabled(); - // p:需要repaint. - nameableList.repaint(); - } - } - - /* - * JNameEdList的鼠标事件 - */ - private MouseListener listMouseListener = new MouseAdapter() { - public void mouseReleased(MouseEvent evt) { - nameableList.stopEditing(); - if (evt.getClickCount() >= 2 - && SwingUtilities.isLeftMouseButton(evt)) { - editingIndex = nameableList.getSelectedIndex(); - selectedName = nameableList.getNameAt(editingIndex); - nameableList.editItemAt(nameableList.getSelectedIndex()); - } - // peter:处理右键的弹出菜单 - if (!SwingUtilities.isRightMouseButton(evt)) { - return; - } - - // peter: 注意,在checkButtonEnabled()方法里面,设置了所有的Action的Enabled. - checkButtonEnabled(); - - // p:右键菜单. - JPopupMenu popupMenu = new JPopupMenu(); - - for (ShortCut4JControlPane sj : shorts) { - sj.getShortCut().intoJPopupMenu(popupMenu); - } - - // peter: 只有弹出菜单有子菜单的时候,才需要弹出来. - GUICoreUtils.showPopupMenu(popupMenu, nameableList, evt.getX() - 1, - evt.getY() - 1); - } - - public void mouseMoved(MouseEvent e) { - - } - }; - - /** - * 检查按钮可用状态 Check button enabled. - */ - public void checkButtonEnabled() { - int selectedIndex = nameableList.getSelectedIndex(); - if (selectedIndex == -1) { - this.cardLayout.show(cardPane, "SELECT"); - } else { - this.cardLayout.show(cardPane, "EDIT"); - } - for (ShortCut4JControlPane sj : this.shorts) { - sj.checkEnable(); - } - } - - protected void doBeforeRemove(){ - - } - - protected void doAfterRemove(){ - - } - - public NameableCreator[] creators() { - return creators == null ? new NameableCreator[0] : creators; - } - - /* - * Nameable的ListCellRenerer - */ - private class NameableListCellRenderer extends - DefaultListCellRenderer { - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, value, index, isSelected, - cellHasFocus); - - if (value instanceof ListModelElement) { - Nameable wrappee = ((ListModelElement) value).wrapper; - this.setText(((ListModelElement) value).wrapper.getName()); - - boolean iconSet = false; - for (NameableCreator creator : JControlPane.this.creators) { - if (creator.menuIcon() != null && creator.acceptObject2Populate(wrappee) != null) { - this.setIcon(creator.menuIcon()); - this.setToolTipText(creator.createTooltip()); - iconSet = true; - break; - } - } - if (!iconSet) { - this.setIcon(BaseUtils.readIcon("/com/fr/base/images/oem/cpt.png")); - } - } - - return this; - } - } - - public class AbsoluteEnableShortCut extends ShortCut4JControlPane { - public AbsoluteEnableShortCut(ShortCut shortCut) { - this.shortCut = shortCut; - } - - /** - * 检查是否可用 - */ - public void checkEnable() { - this.shortCut.setEnabled(true); - } - } - - public class NormalEnableShortCut extends ShortCut4JControlPane { - public NormalEnableShortCut(ShortCut shortCut) { - this.shortCut = shortCut; - } - - /** - * 检查是否可用 - */ - public void checkEnable() { - this.shortCut.setEnabled(getModel() - .getSize() > 0 - && JControlPane.this.nameableList.getSelectedIndex() != -1); - } - } - - public class SortEnableShortCut extends ShortCut4JControlPane { - public SortEnableShortCut(ShortCut shortCut) { - this.shortCut = shortCut; - } - - /** - * 检查是否可用 - */ - @Override - public void checkEnable() { - this.shortCut.setEnabled(getModel().getSize() > 1); - } - - } - - public class MoveUpEnableShortCut extends ShortCut4JControlPane { - public MoveUpEnableShortCut(ShortCut shortCut) { - this.shortCut = shortCut; - } - - /** - * 检查是否可用 - */ - @Override - public void checkEnable() { - this.shortCut.setEnabled(getModel().getSize() > 1 - && JControlPane.this.nameableList.getSelectedIndex() > 0); - } - - } - - public class MoveDownEnableShortCut extends ShortCut4JControlPane { - public MoveDownEnableShortCut(ShortCut shortCut) { - this.shortCut = shortCut; - } - - /** - * 检查是否可用 - */ - @Override - public void checkEnable() { - this.shortCut.setEnabled(getModel().getSize() > 1 - && JControlPane.this.nameableList.getSelectedIndex() < JControlPane.this.nameableList.getModel().getSize() - 1); - } - - } - - private class JControlUpdatePane extends JPanel { - private CardLayout card; - private JPanel cardPane; - private BasicBeanPane[] updatePanes; - - private ListModelElement elEditing; - - public JControlUpdatePane() { - initUpdatePane(); - } - - private void initUpdatePane() { - if (creators == null) { - return; - } - card = new CardLayout(); - cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); - cardPane.setLayout(card); - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.add(cardPane); - int len = creators.length; - updatePanes = new BasicBeanPane[len]; - } - - public void populate() { - ListModelElement el = (ListModelElement) JControlPane.this.nameableList.getSelectedValue(); - if (el == null) { - return; - } - - elEditing = el; - - for (int i = 0, len = updatePanes.length; i < len; i++) { - Object ob2Populate = creators[i].acceptObject2Populate(el.wrapper); - if (ob2Populate != null) { - if (updatePanes[i] == null) { - if (isMulti(creators[i].getUpdatePane()) || isTree(creators[i].getUpdatePane())) { - updatePanes[i] = createPaneByCreators(creators[i], el.wrapper.getName()); - } else { - updatePanes[i] = createPaneByCreators(creators[i]); - } - cardPane.add(updatePanes[i], String.valueOf(i)); - } - card.show(cardPane, String.valueOf(i)); - updatePanes[i].populateBean(ob2Populate); - doWhenPopulate(updatePanes[i]); - break; - } - } - } - - public boolean isMulti(Class _class){ - return ComparatorUtils.equals(_class, GlobalMultiTDTableDataPane.class) || ComparatorUtils.equals(_class, MultiTDTableDataPane.class); - } - - public boolean isTree(Class _class){ - return ComparatorUtils.equals(_class, GlobalTreeTableDataPane.class) || ComparatorUtils.equals(_class, TreeTableDataPane.class); - } - - public void update() { - for (int i = 0; i < updatePanes.length; i++) { - BasicBeanPane pane = updatePanes[i]; - - if (pane != null && pane.isVisible()) { - Object bean = pane.updateBean(); - if (i < JControlPane.this.creators.length) { - JControlPane.this.creators[i].saveUpdatedBean(elEditing, bean); - } - } - } - } - - public void checkValid() throws Exception { - if (updatePanes != null) { - for (int i = 0; i < updatePanes.length; i++) { - if (updatePanes[i] != null) { - updatePanes[i].checkValid(); - } - } - } - } - } - - protected BasicBeanPane createPaneByCreators(NameableCreator creator) { - try { - return creator.getUpdatePane().newInstance(); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } - - protected BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { - Constructor constructor = null; - try { - constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); - constructor.setAccessible(true); - return (BasicBeanPane) constructor.newInstance(string); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } - - } - - // 选项添加个数有限制等情况下 要求能控制快捷按钮的状态 - protected void setToolbarDefEnable(int shortCutIndex, int itemIndex, boolean enabled) { - if (this.toolbarDef.getShortCutCount() > shortCutIndex) { - ShortCut sc = this.toolbarDef.getShortCut(shortCutIndex); - if (sc instanceof AddItemMenuDef) { - AddItemMenuDef am = (AddItemMenuDef) sc; - if (am.getShortCutCount() > itemIndex) { - am.getShortCut(itemIndex).setEnabled(enabled); - } - } - } - } - - /** - * 检查是否符合规范 - * - * @throws Exception - */ - public void checkValid() throws Exception { - this.controlUpdatePane.checkValid(); - } - - private int getInValidIndex() { - BasicBeanPane[] p = controlUpdatePane.updatePanes; - if (p != null) { - for (int i = 0; i < p.length; i++) { - if (p[i] != null) { - try { - p[i].checkValid(); - } catch (Exception e) { - return i; - } - } - } - } - return -1; - } - - private boolean hasInvalid(boolean isAdd) { - int idx = JControlPane.this.getInValidIndex(); - if (isAdd || nameableList.getSelectedIndex() != idx) { - try { - checkValid(); - } catch (Exception exp) { - JOptionPane.showMessageDialog(JControlPane.this, exp.getMessage()); - nameableList.setSelectedIndex(idx); - return true; - } - } - return false; - } - - - /** - * 设置选中项 - * - * @param index 选中项的序列号 - */ - public void setSelectedIndex(int index) { - nameableList.setSelectedIndex(index); - } -} \ No newline at end of file +package com.fr.design.gui.controlpane; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; + +import javax.swing.*; +import java.awt.*; + +/** + * Coder: zack + * Date: 2016/5/17 + * Time: 15:07 + */ +public abstract class JControlPane extends BasicPane implements UnrepeatedNameHelper { + protected static final int SHORT_WIDTH = 30; //每加一个short Divider位置加30 + protected JPanel controlUpdatePane; + + private ShortCut4JControlPane[] shorts; + private NameableCreator[] creators; + private ToolBarDef toolbarDef; + + private UIToolbar toolBar; + // peter:这是整体的一个cardLayout Pane + protected CardLayout cardLayout; + + protected JPanel cardPane; + + public JControlPane() { + this.initComponentPane(); + } + + /** + * 生成添加按钮的NameableCreator + * + * @return 按钮的NameableCreator + */ + public abstract NameableCreator[] createNameableCreators(); + + public ShortCut4JControlPane[] getShorts() { + return shorts; + } + + public void setShorts(ShortCut4JControlPane[] shorts) { + this.shorts = shorts; + } + + public void setCreators(NameableCreator[] creators) { + this.creators = creators; + } + + public ToolBarDef getToolbarDef() { + return toolbarDef; + } + + public void setToolbarDef(ToolBarDef toolbarDef) { + this.toolbarDef = toolbarDef; + } + + public UIToolbar getToolBar() { + return toolBar; + } + + public void setToolBar(UIToolbar toolBar) { + this.toolBar = toolBar; + } + + public CardLayout getCardLayout() { + return cardLayout; + } + + public void setCardLayout(CardLayout cardLayout) { + this.cardLayout = cardLayout; + } + + public JPanel getCardPane() { + return cardPane; + } + + public void setCardPane(JPanel cardPane) { + this.cardPane = cardPane; + } + + protected void initComponentPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.creators = this.createNameableCreators(); + this.controlUpdatePane = createControlUpdatePane(); + + // p: edit card layout + this.cardLayout = new CardLayout(); + cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + cardPane.setLayout(this.cardLayout); + // p:选择的Label + UILabel selectLabel = new UILabel(); + cardPane.add(selectLabel, "SELECT"); + cardPane.add(controlUpdatePane, "EDIT"); + // SplitPane + JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, getLeftPane(), cardPane); + mainSplitPane.setBorder(BorderFactory.createLineBorder(GUICoreUtils.getTitleLineBorderColor())); + mainSplitPane.setOneTouchExpandable(true); + + this.add(mainSplitPane, BorderLayout.CENTER); + mainSplitPane.setDividerLocation(getLeftPreferredSize()); + this.checkButtonEnabled(); + } + + protected abstract JPanel createControlUpdatePane(); + + protected JPanel getLeftPane() { + // LeftPane + JPanel leftPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + initLeftPane(leftPane); + + shorts = this.createShortcuts(); + if (ArrayUtils.isEmpty(shorts)) { + return leftPane; + } + + toolbarDef = new ToolBarDef(); + for (ShortCut4JControlPane sj : shorts) { + toolbarDef.addShortCut(sj.getShortCut()); + } + toolBar = ToolBarDef.createJToolBar(); + toolbarDef.updateToolBar(toolBar); + leftPane.add(toolBar, BorderLayout.NORTH); + return leftPane; + } + + /** + * 初始化左边面板 + */ + protected void initLeftPane(JPanel leftPane) { + + } + + protected int getLeftPreferredSize() { + return shorts.length * SHORT_WIDTH; + } + + + protected ShortCut4JControlPane[] createShortcuts() { + return new ShortCut4JControlPane[]{ + addItemShortCut(), + removeItemShortCut(), + copyItemShortCut(), + moveUpItemShortCut(), + moveDownItemShortCut(), + sortItemShortCut() + }; + } + + protected abstract ShortCut4JControlPane addItemShortCut(); + + protected abstract ShortCut4JControlPane removeItemShortCut(); + + protected abstract ShortCut4JControlPane copyItemShortCut(); + + protected abstract ShortCut4JControlPane moveUpItemShortCut(); + + protected abstract ShortCut4JControlPane moveDownItemShortCut(); + + protected abstract ShortCut4JControlPane sortItemShortCut(); + + public abstract Nameable[] update(); + + + public void populate(Nameable[] nameableArray) { + } + + /** + * 检查按钮可用状态 Check button enabled. + */ + public void checkButtonEnabled() { + } + + protected void doBeforeRemove() { + } + + protected void doAfterRemove() { + } + + public NameableCreator[] creators() { + return creators == null ? new NameableCreator[0] : creators; + } + + protected abstract boolean hasInvalid(boolean isAdd); + + /** + * 刷新 NameableCreator + * + * @param creators 生成器 + */ + public void refreshNameableCreator(NameableCreator[] creators) { + this.creators = creators; + shorts = this.createShortcuts(); + toolbarDef.clearShortCuts(); + for (ShortCut4JControlPane sj : shorts) { + toolbarDef.addShortCut(sj.getShortCut()); + } + + toolbarDef.updateToolBar(toolBar); + toolBar.validate(); + toolBar.repaint(); + this.repaint(); + } +} diff --git a/designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java new file mode 100644 index 000000000..dd91b7824 --- /dev/null +++ b/designer_base/src/com/fr/design/gui/controlpane/JListControlPane.java @@ -0,0 +1,966 @@ +package com.fr.design.gui.controlpane; + +import com.fr.base.BaseUtils; +import com.fr.base.FRContext; +import com.fr.design.actions.UpdateAction; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.data.tabledata.tabledatapane.GlobalMultiTDTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.GlobalTreeTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.MultiTDTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.TreeTableDataPane; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilist.JNameEdList; +import com.fr.design.gui.ilist.ListModelElement; +import com.fr.design.gui.ilist.ModNameActionListener; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.menu.LineSeparator; +import com.fr.design.menu.MenuDef; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; +import com.fr.stable.core.PropertyChangeAdapter; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; +import java.util.Comparator; + +public abstract class JListControlPane extends JControlPane { + public static final String LIST_NAME = "JControl_List"; + + protected JNameEdList nameableList; + protected int editingIndex; + protected String selectedName; + private boolean isNameRepeated = false; + + public JListControlPane() { + this.initComponentPane(); + } + + @Override + protected JPanel createControlUpdatePane() { + return new JControlUpdatePane(); + } + + /** + * 生成添加按钮的NameableCreator + * + * @return 按钮的NameableCreator + */ + @Override + public abstract NameableCreator[] createNameableCreators(); + + + @Override + protected void initLeftPane(JPanel leftPane) { + nameableList = createJNameList(); + nameableList.setName(LIST_NAME); + leftPane.add(new UIScrollPane(nameableList), BorderLayout.CENTER); + + + nameableList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + nameableList.addMouseListener(listMouseListener); + nameableList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + // richie:避免多次update和populate大大降低效率 + if (!evt.getValueIsAdjusting()) { + // shoc 切换的时候加检验 + if (hasInvalid(false)) { + return; + } + ((JControlUpdatePane) JListControlPane.this.controlUpdatePane).update(); + ((JControlUpdatePane) JListControlPane.this.controlUpdatePane).populate(); + JListControlPane.this.checkButtonEnabled(); + } + } + }); + } + + public JNameEdList createJNameList() { + JNameEdList nameEdList = new JNameEdList(new DefaultListModel()) { + @Override + protected void doAfterLostFocus() { + JListControlPane.this.updateControlUpdatePane(); + } + }; + nameEdList.setCellRenderer(new NameableListCellRenderer()); + return nameEdList; + } + + public void updateControlUpdatePane() { + ((JControlUpdatePane) controlUpdatePane).update(); + } + + protected void doWhenPopulate(BasicBeanPane beanPane) { + + } + + @Override + protected ShortCut4JControlPane addItemShortCut() { + ShortCut addItemShortCut; + NameableCreator[] creators = creators(); + if (creators.length == 1) { + addItemShortCut = new AddItemUpdateAction(creators); + } else { + addItemShortCut = new AddItemMenuDef(creators); + } + return new AbsoluteEnableShortCut(addItemShortCut); + } + + @Override + protected ShortCut4JControlPane removeItemShortCut() { + return new NormalEnableShortCut(new RemoveItemAction()); + } + + @Override + protected ShortCut4JControlPane copyItemShortCut() { + return new NormalEnableShortCut(new CopyItemAction()); + } + + @Override + protected ShortCut4JControlPane moveUpItemShortCut() { + return new NormalEnableShortCut(new MoveUpItemAction()); + } + + @Override + protected ShortCut4JControlPane moveDownItemShortCut() { + return new NormalEnableShortCut(new MoveDownItemAction()); + } + + @Override + protected ShortCut4JControlPane sortItemShortCut() { + return new NormalEnableShortCut(new SortItemAction()); + } + + public void setNameListEditable(boolean editable) { + this.nameableList.setEditable(editable); + } + + @Override + public Nameable[] update() { + java.util.List res = new java.util.ArrayList(); + ((JControlUpdatePane) this.controlUpdatePane).update(); + DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); + } + + return res.toArray(new Nameable[res.size()]); + } + + @Override + public void populate(Nameable[] nameableArray) { + DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); + listModel.removeAllElements(); + if (ArrayUtils.isEmpty(nameableArray)) { + return; + } + + for (Nameable aNameableArray : nameableArray) { + listModel.addElement(new ListModelElement(aNameableArray)); + } + + if (listModel.size() > 0) { + this.nameableList.setSelectedIndex(0); + } + this.checkButtonEnabled(); + } + + /** + * 添加名字改变时的listener + * + * @param l 名字改变时的监听 + */ + public void addModNameActionListener(ModNameActionListener l) { + this.nameableList.addModNameActionListener(l); + } + + /** + * 添加Editinglistener + * + * @param l 监听 + */ + public void addEditingListner(PropertyChangeAdapter l) { + this.nameableList.addEditingListner(l); + } + + /* + * 刷新当前的选中的UpdatePane + */ + protected void populateSelectedValue() { + ((JControlUpdatePane) JListControlPane.this.controlUpdatePane).populate(); + } + + /** + * 根据name,选中JNameEdList中的item + */ + public void setSelectedName(String name) { + DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + Nameable item = ((ListModelElement) listModel.getElementAt(i)).wrapper; + if (ComparatorUtils.equals(name, item.getName())) { + this.nameableList.setSelectedIndex(i); + break; + } + } + } + + public String getEditingName() { + return this.nameableList.getEditingName(); + } + + public Object getEditingType() { + return this.nameableList.getAllTypes()[editingIndex]; + } + + public void setWarnigText(int index) { + this.nameableList.setWarnigText(index); + } + + /** + * 获取选中的名字 + */ + public String getSelectedName() { + ListModelElement el = (ListModelElement) this.nameableList.getSelectedValue(); + + return el == null ? null : el.wrapper.getName(); + } + + protected boolean isNameRepeted(java.util.List[] list, String name) { + for (int i = 0; i < list.length; i++) { + if (list[i].contains(name)) { + isNameRepeated = true; + return true; + } + } + isNameRepeated = false; + return false; + } + + /** + * 名字是否重复 + * + * @return 重复则返回true + */ + public boolean isNameRepeated() { + return isNameRepeated; + } + + /** + * 添加 Nameable + * + * @param nameable 添加的Nameable + * @param index 序号 + */ + public void addNameable(Nameable nameable, int index) { + JNameEdList nameEdList = JListControlPane.this.nameableList; + DefaultListModel model = (DefaultListModel) nameEdList.getModel(); + + ListModelElement el = new ListModelElement(nameable); + model.add(index, el); + nameableList.setSelectedIndex(index); + nameableList.ensureIndexIsVisible(index); + + nameEdList.repaint(); + } + + /** + * 是否重命名 + * + * @return 是则true + */ + public boolean isContainsRename() { + String rename = Inter.getLocText("FR-Please_Rename") + "!"; + String[] names = this.nameableList.getAllNames(); + for (int i = names.length - 1; i >= 0; i--) { + if (ComparatorUtils.equals(names[i], rename)) { + return true; + } + } + return false; + } + + protected DefaultListModel getModel() { + return (DefaultListModel) JListControlPane.this.nameableList.getModel(); + } + + private String createUnrepeatedCopyName(String suffix) { + DefaultListModel model = this.getModel(); + String[] names = new String[model.getSize()]; + for (int i = 0; i < model.size(); i++) { + names[i] = ((ListModelElement) model.get(i)).wrapper.getName(); + } + String lastName = "CopyOf" + suffix; + while (ArrayUtils.contains(names, lastName)) { + lastName = "CopyOf" + lastName; + } + return lastName; + } + + + /** + * 生成不重复的名字 + * + * @param prefix 名字前缀 + * @return 名字 + */ + @Override + public String createUnrepeatedName(String prefix) { + DefaultListModel model = this.getModel(); + Nameable[] all = new Nameable[model.getSize()]; + for (int i = 0; i < model.size(); i++) { + all[i] = ((ListModelElement) model.get(i)).wrapper; + } + // richer:生成的名字从1开始. kunsnat: 添加属性从0开始. + int count = all.length + 1; + while (true) { + String name_test = prefix + count; + boolean repeated = false; + for (int i = 0, len = model.size(); i < len; i++) { + Nameable nameable = all[i]; + if (ComparatorUtils.equals(nameable.getName(), name_test)) { + repeated = true; + break; + } + } + + if (!repeated) { + return name_test; + } + + count++; + } + } + + /** + * 增加项的UpdateAction + */ + protected class AddItemUpdateAction extends UpdateAction { + final NameableCreator creator; + + public AddItemUpdateAction(NameableCreator[] creators) { + this.creator = creators[0]; + this.setName(Inter.getLocText("FR-Action_Add")); + this.setMnemonic('A'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/add.png")); + } + + @Override + public void actionPerformed(ActionEvent e) { + Nameable nameable = creator.createNameable(JListControlPane.this); + + JListControlPane.this.addNameable(nameable, getModel().getSize()); + } + } + + /* + * 增加项的MenuDef + */ + protected class AddItemMenuDef extends MenuDef { + public AddItemMenuDef(NameableCreator[] creators) { + this.setName(Inter.getLocText("FR-Action_Add")); + this.setMnemonic('A'); + this.setIconPath("/com/fr/design/images/control/addPopup.png"); + wrapActionListener(creators); + } + + private void wrapActionListener(NameableCreator[] creators) { + for (final NameableCreator creator : creators) { + if (!whetherAdd(creator.menuName())) { + continue; + } + boolean isTrue = ComparatorUtils.equals(creator.menuName(), Inter.getLocText("Datasource-Stored_Procedure")) || + ComparatorUtils.equals(creator.menuName(), Inter.getLocText("DS-Relation_TableData")) || ComparatorUtils.equals(creator.menuName(), Inter.getLocText("DS-Multi_Dimensional_Database")); + if (isTrue) { + this.addShortCut(new LineSeparator()); + } + this.addShortCut(new UpdateAction() { + { + this.setName(creator.menuName()); + Icon icon = creator.menuIcon(); + if (icon != null) { + this.setSmallIcon(icon); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + if (hasInvalid(true)) { + return; + } + + Nameable nameable = creator.createNameable(JListControlPane.this); + + JListControlPane.this.addNameable(nameable, getModel().getSize()); + } + }); + } + } + + private boolean whetherAdd(String itemName) { + JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (jTemplate == null) { + return false; + } + //先屏蔽掉这个,之后还有别的 + String[] names = {Inter.getLocText("FR-Hyperlink_Chart_Float")}; + for (String name : names) { + if (!jTemplate.isJWorkBook() && ComparatorUtils.equals(itemName, name)) { + return false; + } + } + String formName = Inter.getLocText("Hyperlink-Form_link"); + return !(jTemplate.isJWorkBook() && ComparatorUtils.equals(itemName, formName)); + } + } + + /* + * 移除item + */ + private class RemoveItemAction extends UpdateAction { + public RemoveItemAction() { + this.setName(Inter.getLocText("FR-Action_Remove")); + this.setMnemonic('R'); + this.setSmallIcon(BaseUtils + .readIcon("/com/fr/base/images/cell/control/remove.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + try { + JListControlPane.this.nameableList.getCellEditor() + .stopCellEditing(); + } catch (Exception ignored) { + } + // bug:在选中一个NameObject并删除,会遗留下Name. + doBeforeRemove(); + if (GUICoreUtils.removeJListSelectedNodes(SwingUtilities + .getWindowAncestor(JListControlPane.this), nameableList)) { + checkButtonEnabled(); + doAfterRemove(); + } + } + } + + /* + * CopyItem + */ + private class CopyItemAction extends UpdateAction { + public CopyItemAction() { + this.setName(Inter.getLocText("FR-Action_Copy")); + this.setMnemonic('C'); + this.setSmallIcon(BaseUtils + .readIcon("/com/fr/base/images/cell/control/copy.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + // p:选中的值. + ListModelElement selectedValue = (ListModelElement) nameableList.getSelectedValue(); + if (selectedValue == null) { + return; + } + + ((JControlUpdatePane) controlUpdatePane).update(); + + Nameable selectedNameable = selectedValue.wrapper; + + // p: 用反射机制实现 + try { + Nameable newNameable = (Nameable) BaseUtils.cloneObject(selectedNameable); + newNameable.setName(createUnrepeatedCopyName(selectedNameable.getName())); + + JListControlPane.this.addNameable(newNameable, nameableList.getSelectedIndex() + 1); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + } + + /* + * 上移Item + */ + private class MoveUpItemAction extends UpdateAction { + public MoveUpItemAction() { + this.setName(Inter.getLocText("Utils-Move_Up")); + this.setMnemonic('U'); + this.setSmallIcon(BaseUtils + .readIcon("/com/fr/design/images/control/up.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + int selectedIndex = nameableList.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 上移 + if (selectedIndex > 0) { + DefaultListModel listModel = (DefaultListModel) nameableList + .getModel(); + + Object selecteObj1 = listModel.get(selectedIndex - 1); + listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + nameableList.setSelectedIndex(selectedIndex - 1); + nameableList.ensureIndexIsVisible(selectedIndex - 1); + } + } + } + + /* + * 下移Item + */ + private class MoveDownItemAction extends UpdateAction { + public MoveDownItemAction() { + this.setName(Inter.getLocText("Utils-Move_Down")); + this.setMnemonic('D'); + this.setSmallIcon(BaseUtils + .readIcon("/com/fr/design/images/control/down.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + int selectedIndex = nameableList.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + if (selectedIndex < nameableList.getModel().getSize() - 1) { + DefaultListModel listModel = (DefaultListModel) nameableList + .getModel(); + + Object selecteObj1 = listModel.get(selectedIndex + 1); + listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + nameableList.setSelectedIndex(selectedIndex + 1); + nameableList.ensureIndexIsVisible(selectedIndex + 1); + } + } + } + + private class SortItemAction extends UpdateAction { + private boolean isAtoZ = false; + + public SortItemAction() { + this.setName(Inter.getLocText("FR-Action_Sort")); + this.setMnemonic('S'); + this.setSmallIcon(BaseUtils + .readIcon("/com/fr/design/images/control/sortAsc.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + // p:选中的值. + Object selectedValue = nameableList.getSelectedValue(); + + DefaultListModel listModel = (DefaultListModel) nameableList + .getModel(); + Nameable[] nameableArray = new Nameable[listModel.getSize()]; + if (nameableArray.length <= 0) { + return; + } + + for (int i = 0; i < listModel.getSize(); i++) { + nameableArray[i] = ((ListModelElement) listModel.getElementAt(i)).wrapper; + } + + // p:排序. + if (isAtoZ) { + Comparator nameableComparator = new Comparator() { + @Override + public int compare(Nameable o1, Nameable o2) { + return -ComparatorUtils.compare(o1.getName(), o2 + .getName()); + } + }; + isAtoZ = !isAtoZ; + Arrays.sort(nameableArray, nameableComparator); + } else { + Comparator nameableComparator = new Comparator() { + @Override + public int compare(Nameable o1, Nameable o2) { + return ComparatorUtils.compare(o1.getName(), o2 + .getName()); + } + }; + isAtoZ = !isAtoZ; + Arrays.sort(nameableArray, nameableComparator); + } + + for (int i = 0; i < nameableArray.length; i++) { + listModel.set(i, new ListModelElement(nameableArray[i])); + } + + // p:需要选中以前的那个值. + if (selectedValue != null) { + nameableList.setSelectedValue(selectedValue, true); + } + + checkButtonEnabled(); + // p:需要repaint. + nameableList.repaint(); + } + } + + /* + * JNameEdList的鼠标事件 + */ + private MouseListener listMouseListener = new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent evt) { + nameableList.stopEditing(); + if (evt.getClickCount() >= 2 + && SwingUtilities.isLeftMouseButton(evt)) { + editingIndex = nameableList.getSelectedIndex(); + selectedName = nameableList.getNameAt(editingIndex); + nameableList.editItemAt(nameableList.getSelectedIndex()); + } + // peter:处理右键的弹出菜单 + if (!SwingUtilities.isRightMouseButton(evt)) { + return; + } + + // peter: 注意,在checkButtonEnabled()方法里面,设置了所有的Action的Enabled. + checkButtonEnabled(); + + // p:右键菜单. + JPopupMenu popupMenu = new JPopupMenu(); + + for (ShortCut4JControlPane sj : getShorts()) { + sj.getShortCut().intoJPopupMenu(popupMenu); + } + + // peter: 只有弹出菜单有子菜单的时候,才需要弹出来. + GUICoreUtils.showPopupMenu(popupMenu, nameableList, evt.getX() - 1, + evt.getY() - 1); + } + + @Override + public void mouseMoved(MouseEvent e) { + + } + }; + + /** + * 检查按钮可用状态 Check button enabled. + */ + @Override + public void checkButtonEnabled() { + + int selectedIndex = nameableList.getSelectedIndex(); + if (selectedIndex == -1) { + this.cardLayout.show(cardPane, "SELECT"); + } else { + this.cardLayout.show(cardPane, "EDIT"); + } + for (ShortCut4JControlPane sj : getShorts()) { + sj.checkEnable(); + } + } + + /* + * Nameable的ListCellRenerer + */ + private class NameableListCellRenderer extends + DefaultListCellRenderer { + @Override + public Component getListCellRendererComponent(JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, + cellHasFocus); + + if (value instanceof ListModelElement) { + Nameable wrappee = ((ListModelElement) value).wrapper; + this.setText(((ListModelElement) value).wrapper.getName()); + + boolean iconSet = false; + for (NameableCreator creator : JListControlPane.this.creators()) { + if (creator.menuIcon() != null && creator.acceptObject2Populate(wrappee) != null) { + this.setIcon(creator.menuIcon()); + this.setToolTipText(creator.createTooltip()); + iconSet = true; + break; + } + } + if (!iconSet) { + this.setIcon(BaseUtils.readIcon("/com/fr/base/images/oem/cpt.png")); + } + } + + return this; + } + } + + public class AbsoluteEnableShortCut extends ShortCut4JControlPane { + public AbsoluteEnableShortCut(ShortCut shortCut) { + this.shortCut = shortCut; + } + + /** + * 检查是否可用 + */ + @Override + public void checkEnable() { + this.shortCut.setEnabled(true); + } + } + + public class NormalEnableShortCut extends ShortCut4JControlPane { + public NormalEnableShortCut(ShortCut shortCut) { + this.shortCut = shortCut; + } + + /** + * 检查是否可用 + */ + @Override + public void checkEnable() { + this.shortCut.setEnabled(getModel() + .getSize() > 0 + && JListControlPane.this.nameableList.getSelectedIndex() != -1); + } + } + + public class SortEnableShortCut extends ShortCut4JControlPane { + public SortEnableShortCut(ShortCut shortCut) { + this.shortCut = shortCut; + } + + /** + * 检查是否可用 + */ + @Override + public void checkEnable() { + this.shortCut.setEnabled(getModel().getSize() > 1); + } + + } + + public class MoveUpEnableShortCut extends ShortCut4JControlPane { + public MoveUpEnableShortCut(ShortCut shortCut) { + this.shortCut = shortCut; + } + + /** + * 检查是否可用 + */ + @Override + public void checkEnable() { + this.shortCut.setEnabled(getModel().getSize() > 1 + && JListControlPane.this.nameableList.getSelectedIndex() > 0); + } + + } + + public class MoveDownEnableShortCut extends ShortCut4JControlPane { + public MoveDownEnableShortCut(ShortCut shortCut) { + this.shortCut = shortCut; + } + + /** + * 检查是否可用 + */ + @Override + public void checkEnable() { + this.shortCut.setEnabled(getModel().getSize() > 1 + && JListControlPane.this.nameableList.getSelectedIndex() < JListControlPane.this.nameableList.getModel().getSize() - 1); + } + + } + + private class JControlUpdatePane extends JPanel { + private CardLayout card; + private JPanel cardPane; + private BasicBeanPane[] updatePanes; + + private ListModelElement elEditing; + + public JControlUpdatePane() { + initUpdatePane(); + } + + private void initUpdatePane() { + NameableCreator[] creators = creators(); + if (creators == null) { + return; + } + card = new CardLayout(); + cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + cardPane.setLayout(card); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.add(cardPane); + int len = creators.length; + updatePanes = new BasicBeanPane[len]; + } + + public void populate() { + ListModelElement el = (ListModelElement) JListControlPane.this.nameableList.getSelectedValue(); + if (el == null) { + return; + } + + elEditing = el; + NameableCreator[] creators = creators(); + + for (int i = 0, len = updatePanes.length; i < len; i++) { + Object ob2Populate = creators[i].acceptObject2Populate(el.wrapper); + if (ob2Populate != null) { + if (updatePanes[i] == null) { + if (isMulti(creators[i].getUpdatePane()) || isTree(creators[i].getUpdatePane())) { + updatePanes[i] = createPaneByCreators(creators[i], el.wrapper.getName()); + } else { + updatePanes[i] = createPaneByCreators(creators[i]); + } + cardPane.add(updatePanes[i], String.valueOf(i)); + } + card.show(cardPane, String.valueOf(i)); + updatePanes[i].populateBean(ob2Populate); + doWhenPopulate(updatePanes[i]); + break; + } + } + } + + public boolean isMulti(Class _class) { + return ComparatorUtils.equals(_class, GlobalMultiTDTableDataPane.class) || ComparatorUtils.equals(_class, MultiTDTableDataPane.class); + } + + public boolean isTree(Class _class) { + return ComparatorUtils.equals(_class, GlobalTreeTableDataPane.class) || ComparatorUtils.equals(_class, TreeTableDataPane.class); + } + + public void update() { + NameableCreator[] creators = creators(); + for (int i = 0; i < updatePanes.length; i++) { + BasicBeanPane pane = updatePanes[i]; + + if (pane != null && pane.isVisible()) { + Object bean = pane.updateBean(); + if (i < creators.length) { + creators[i].saveUpdatedBean(elEditing, bean); + } + } + } + } + + public void checkValid() throws Exception { + if (updatePanes != null) { + for (int i = 0; i < updatePanes.length; i++) { + if (updatePanes[i] != null) { + updatePanes[i].checkValid(); + } + } + } + } + } + + protected BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + return creator.getUpdatePane().newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + protected BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { + Constructor constructor = null; + try { + constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); + constructor.setAccessible(true); + return (BasicBeanPane) constructor.newInstance(string); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + + } + + // 选项添加个数有限制等情况下 要求能控制快捷按钮的状态 + protected void setToolbarDefEnable(int shortCutIndex, int itemIndex, boolean enabled) { + ToolBarDef toolbarDef = getToolbarDef(); + if (toolbarDef.getShortCutCount() > shortCutIndex) { + ShortCut sc = toolbarDef.getShortCut(shortCutIndex); + if (sc instanceof AddItemMenuDef) { + AddItemMenuDef am = (AddItemMenuDef) sc; + if (am.getShortCutCount() > itemIndex) { + am.getShortCut(itemIndex).setEnabled(enabled); + } + } + } + } + + /** + * 检查是否符合规范 + * + * @throws Exception + */ + @Override + public void checkValid() throws Exception { + ((JControlUpdatePane) this.controlUpdatePane).checkValid(); + } + + private int getInValidIndex() { + BasicBeanPane[] p = ((JControlUpdatePane) controlUpdatePane).updatePanes; + if (p != null) { + for (int i = 0; i < p.length; i++) { + if (p[i] != null) { + try { + p[i].checkValid(); + } catch (Exception e) { + return i; + } + } + } + } + return -1; + } + + @Override + protected boolean hasInvalid(boolean isAdd) { + int idx = JListControlPane.this.getInValidIndex(); + if (isAdd || nameableList.getSelectedIndex() != idx) { + try { + checkValid(); + } catch (Exception exp) { + JOptionPane.showMessageDialog(JListControlPane.this, exp.getMessage()); + nameableList.setSelectedIndex(idx); + return true; + } + } + return false; + } + /** + * 设置选中项 + * + * @param index 选中项的序列号 + */ + public void setSelectedIndex(int index) { + nameableList.setSelectedIndex(index); + } + +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/controlpane/ObjectJControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/ObjectJControlPane.java index fb944b93b..69fe1d642 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/ObjectJControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/ObjectJControlPane.java @@ -11,7 +11,7 @@ import com.fr.design.beans.BasicBeanPane; * @author zhou * @since 2012-4-5上午9:29:20 */ -public abstract class ObjectJControlPane extends JControlPane { +public abstract class ObjectJControlPane extends JListControlPane { private Object object; public ObjectJControlPane() { diff --git a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java index fe1412772..b7992e60e 100644 --- a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java +++ b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java @@ -4,7 +4,7 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.HyperlinkPluginAction; import com.fr.design.actions.UpdateAction; import com.fr.design.fun.HyperlinkProvider; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.module.DesignModuleFactory; import com.fr.general.Inter; @@ -25,7 +25,7 @@ import java.util.List; * @author kunsnat E-mail:kunsnat@gmail.com * @version 创建时间:2013-6-25 上午11:17:57 */ -public class HyperlinkGroupPane extends JControlPane { +public class HyperlinkGroupPane extends JListControlPane { /** * 生成添加按钮的NameableCreator diff --git a/designer_base/src/com/fr/design/gui/style/BackgroundNoImagePane.java b/designer_base/src/com/fr/design/gui/style/BackgroundNoImagePane.java index 7e2680eef..00465d83e 100644 --- a/designer_base/src/com/fr/design/gui/style/BackgroundNoImagePane.java +++ b/designer_base/src/com/fr/design/gui/style/BackgroundNoImagePane.java @@ -1,10 +1,10 @@ package com.fr.design.gui.style; import com.fr.design.event.UIObserverListener; -import com.fr.design.mainframe.backgroundpane.BackgroundSettingPane; -import com.fr.design.mainframe.backgroundpane.ColorBackgroundPane; -import com.fr.design.mainframe.backgroundpane.NullBackgroundPane; -import java.util.ArrayList; +import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.GradientBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; /** * Created with IntelliJ IDEA. @@ -18,8 +18,9 @@ public class BackgroundNoImagePane extends BackgroundPane{ super(); } - protected void initPaneList(){ - ColorBackgroundPane colorBackgroundPane = new ColorBackgroundPane(); + @Override + protected BackgroundQuickPane[] supportKindsOfBackgroundUI() { + ColorBackgroundQuickPane colorBackgroundPane = new ColorBackgroundQuickPane(); colorBackgroundPane.registerChangeListener(new UIObserverListener() { @Override @@ -27,7 +28,7 @@ public class BackgroundNoImagePane extends BackgroundPane{ fireStateChanged(); } }); - GradientPane gradientPane = new GradientPane(); + GradientBackgroundQuickPane gradientPane = new GradientBackgroundQuickPane(); gradientPane.registerChangeListener(new UIObserverListener() { @Override @@ -35,10 +36,10 @@ public class BackgroundNoImagePane extends BackgroundPane{ fireStateChanged(); } }); - paneList = new ArrayList(); - paneList.add(new NullBackgroundPane()); - paneList.add(colorBackgroundPane); - paneList.add(gradientPane); - + return new BackgroundQuickPane[]{ + new NullBackgroundQuickPane(), + colorBackgroundPane, + gradientPane + }; } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/style/BackgroundPane.java b/designer_base/src/com/fr/design/gui/style/BackgroundPane.java index 8c03e6202..1bf6d7e4b 100644 --- a/designer_base/src/com/fr/design/gui/style/BackgroundPane.java +++ b/designer_base/src/com/fr/design/gui/style/BackgroundPane.java @@ -1,148 +1,145 @@ -package com.fr.design.gui.style; - -/* - * Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. - */ - -import java.awt.BorderLayout; -import java.awt.CardLayout; -import java.awt.Dimension; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import com.fr.base.Style; -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.mainframe.backgroundpane.BackgroundSettingPane; -import com.fr.design.mainframe.backgroundpane.ColorBackgroundPane; -import com.fr.design.mainframe.backgroundpane.ImageBackgroundPane; -import com.fr.design.mainframe.backgroundpane.NullBackgroundPane; -import com.fr.design.mainframe.backgroundpane.PatternBackgroundPane; -import com.fr.design.mainframe.backgroundpane.TextureBackgroundPane; -import com.fr.general.Background; -import com.fr.general.Inter; - -/** - * - * @author zhou - * @since 2012-5-28下午6:22:09 - */ -public class BackgroundPane extends AbstractBasicStylePane { - - private UIComboBox typeComboBox; - - protected List paneList; - - public BackgroundPane() { - this.initComponents(); - } - - protected void initComponents() { - this.setLayout(new BorderLayout(0, 6)); - typeComboBox = new UIComboBox(); - final CardLayout cardlayout = new CardLayout(); - this.add(typeComboBox, BorderLayout.NORTH); - - initPaneList(); - final JPanel centerPane = new JPanel(cardlayout) { - @Override - public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度 - int index = typeComboBox.getSelectedIndex(); - return new Dimension(super.getPreferredSize().width, paneList.get(index).getPreferredSize().height); - } - }; - for (int i = 0; i < paneList.size(); i++) { - BackgroundSettingPane pane = paneList.get(i); - typeComboBox.addItem(pane.title4PopupWindow()); - centerPane.add(pane, pane.title4PopupWindow()); - } - this.add(centerPane, BorderLayout.CENTER); - typeComboBox.addItemListener(new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - cardlayout.show(centerPane, (String)typeComboBox.getSelectedItem()); - fireStateChanged(); - } - }); - } - - protected void initPaneList(){ - paneList = new ArrayList(); - paneList.add(new NullBackgroundPane()); - paneList.add(new ColorBackgroundPane()); - paneList.add(new TextureBackgroundPane()); - paneList.add(new PatternBackgroundPane()); - paneList.add(new ImageBackgroundPane()); - paneList.add(new GradientPane()); - } - - /** - * 事件监听 - * @param changeListener 事件 - */ - public void addChangeListener(ChangeListener changeListener) { - listenerList.add(ChangeListener.class, changeListener); - } - - /** - */ - protected void fireStateChanged() { - Object[] listeners = listenerList.getListenerList(); - ChangeEvent e = null; - - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == ChangeListener.class) { - if (e == null) { - e = new ChangeEvent(this); - } - ((ChangeListener)listeners[i + 1]).stateChanged(e); - } - } - } - - /** - * 名称 - * @return 名称 - */ - public String title4PopupWindow() { - return Inter.getLocText("FR-Utils_Background"); - } - - /** - * Populate background. - */ - public void populateBean(Background background) { - for (int i = 0; i < paneList.size(); i++) { - BackgroundSettingPane pane = paneList.get(i); - if (pane.accept(background)) { - pane.populateBean(background); - typeComboBox.setSelectedIndex(i); - return; - } - } - } - - /** - * Update background. - */ - public Background update() { - return paneList.get(typeComboBox.getSelectedIndex()).updateBean(); - } - - @Override - public void populateBean(Style style) { - this.populateBean(style.getBackground()); - } - - @Override - public Style update(Style style) { - return style.deriveBackground(this.update()); - } - +package com.fr.design.gui.style; + +import com.fr.base.Style; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.fun.BackgroundQuickUIProvider; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.mainframe.backgroundpane.*; +import com.fr.general.Background; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; + +/** + * @author zhou + * @since 2012-5-28下午6:22:09 + */ +public class BackgroundPane extends AbstractBasicStylePane { + + private UIComboBox typeComboBox; + + protected BackgroundQuickPane[] paneList; + + public BackgroundPane() { + this.initComponents(); + } + + protected void initComponents() { + this.setLayout(new BorderLayout(0, 6)); + typeComboBox = new UIComboBox(); + final CardLayout cardlayout = new CardLayout(); + this.add(typeComboBox, BorderLayout.NORTH); + + paneList = supportKindsOfBackgroundUI(); + + final JPanel centerPane = new JPanel(cardlayout) { + @Override + public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度 + int index = typeComboBox.getSelectedIndex(); + return new Dimension(super.getPreferredSize().width, paneList[index].getPreferredSize().height); + } + }; + for (BackgroundQuickPane pane : paneList) { + typeComboBox.addItem(pane.title4PopupWindow()); + centerPane.add(pane, pane.title4PopupWindow()); + } + this.add(centerPane, BorderLayout.CENTER); + typeComboBox.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + cardlayout.show(centerPane, (String) typeComboBox.getSelectedItem()); + fireStateChanged(); + } + }); + } + + protected BackgroundQuickPane[] supportKindsOfBackgroundUI() { + java.util.List kinds = new ArrayList<>(); + kinds.add(new NullBackgroundQuickPane()); + kinds.add(new ColorBackgroundQuickPane()); + kinds.add(new TextureBackgroundQuickPane()); + kinds.add(new PatternBackgroundQuickPane()); + kinds.add(new ImageBackgroundQuickPane()); + kinds.add(new GradientBackgroundQuickPane()); + BackgroundQuickUIProvider[] providers = ExtraDesignClassManager.getInstance().getBackgroundQuickUIProviders(); + for (BackgroundQuickUIProvider provider : providers) { + kinds.add(provider.appearanceForBackground()); + + } + return kinds.toArray(new BackgroundQuickPane[kinds.size()]); + } + + + /** + * 事件监听 + * + * @param changeListener 事件 + */ + public void addChangeListener(ChangeListener changeListener) { + listenerList.add(ChangeListener.class, changeListener); + } + + /** + */ + protected void fireStateChanged() { + Object[] listeners = listenerList.getListenerList(); + ChangeEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ChangeListener.class) { + if (e == null) { + e = new ChangeEvent(this); + } + ((ChangeListener) listeners[i + 1]).stateChanged(e); + } + } + } + + /** + * 名称 + * + * @return 名称 + */ + public String title4PopupWindow() { + return Inter.getLocText("FR-Utils_Background"); + } + + /** + * Populate background. + */ + public void populateBean(Background background) { + for (int i = 0; i < paneList.length; i++) { + BackgroundQuickPane pane = paneList[i]; + if (pane.accept(background)) { + pane.populateBean(background); + typeComboBox.setSelectedIndex(i); + return; + } + } + } + + /** + * Update background. + */ + public Background update() { + return paneList[typeComboBox.getSelectedIndex()].updateBean(); + } + + @Override + public void populateBean(Style style) { + this.populateBean(style.getBackground()); + } + + @Override + public Style update(Style style) { + return style.deriveBackground(this.update()); + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/style/BackgroundSpecialPane.java b/designer_base/src/com/fr/design/gui/style/BackgroundSpecialPane.java index 59efe3a53..43c1d133c 100644 --- a/designer_base/src/com/fr/design/gui/style/BackgroundSpecialPane.java +++ b/designer_base/src/com/fr/design/gui/style/BackgroundSpecialPane.java @@ -1,12 +1,7 @@ package com.fr.design.gui.style; import com.fr.design.event.UIObserverListener; -import com.fr.design.mainframe.backgroundpane.BackgroundSettingPane; -import com.fr.design.mainframe.backgroundpane.ColorBackgroundPane; -import com.fr.design.mainframe.backgroundpane.ImageBackgroundPane; -import com.fr.design.mainframe.backgroundpane.NullBackgroundPane; - -import java.util.ArrayList; +import com.fr.design.mainframe.backgroundpane.*; /** * Created with IntelliJ IDEA. @@ -20,8 +15,9 @@ public class BackgroundSpecialPane extends BackgroundPane{ super(); } - protected void initPaneList(){ - ColorBackgroundPane colorBackgroundPane = new ColorBackgroundPane(); + @Override + protected BackgroundQuickPane[] supportKindsOfBackgroundUI() { + ColorBackgroundQuickPane colorBackgroundPane = new ColorBackgroundQuickPane(); colorBackgroundPane.registerChangeListener(new UIObserverListener() { @Override @@ -29,7 +25,7 @@ public class BackgroundSpecialPane extends BackgroundPane{ fireStateChanged(); } }); - ImageBackgroundPane imageBackgroundPane = new ImageBackgroundPane(); + ImageBackgroundQuickPane imageBackgroundPane = new ImageBackgroundQuickPane(); imageBackgroundPane.registerChangeListener(new UIObserverListener() { @Override @@ -37,18 +33,18 @@ public class BackgroundSpecialPane extends BackgroundPane{ fireStateChanged(); } }); - GradientPane gradientPane = new GradientPane(); + GradientBackgroundQuickPane gradientPane = new GradientBackgroundQuickPane(); gradientPane.registerChangeListener(new UIObserverListener() { @Override public void doChange() { fireStateChanged(); } }); - paneList = new ArrayList(); - paneList.add(new NullBackgroundPane()); - paneList.add(colorBackgroundPane); - paneList.add(imageBackgroundPane); - paneList.add(gradientPane); - + return new BackgroundQuickPane[] { + new NullBackgroundQuickPane(), + colorBackgroundPane, + imageBackgroundPane, + gradientPane + }; } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/BackgroundSettingPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/BackgroundQuickPane.java similarity index 83% rename from designer_base/src/com/fr/design/mainframe/backgroundpane/BackgroundSettingPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/BackgroundQuickPane.java index 82eafecb7..1b796c438 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/BackgroundSettingPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/BackgroundQuickPane.java @@ -1,33 +1,33 @@ -package com.fr.design.mainframe.backgroundpane; - -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.event.UIObserver; -import com.fr.general.Background; - -/** - * @author zhou - * @since 2012-5-29下午1:12:28 - */ -public abstract class BackgroundSettingPane extends BasicBeanPane implements UIObserver { - - public abstract boolean accept(Background background); - - @Override - public abstract void populateBean(Background background); - - @Override - public abstract Background updateBean(); - - @Override - public abstract String title4PopupWindow(); - - /** - * 组件是否需要响应添加的观察者事件 - * - * @return 如果需要响应观察者事件则返回true,否则返回false - */ - public boolean shouldResponseChangeListener() { - - return true; - } +package com.fr.design.mainframe.backgroundpane; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.event.UIObserver; +import com.fr.general.Background; + +/** + * @author zhou + * @since 2012-5-29下午1:12:28 + */ +public abstract class BackgroundQuickPane extends BasicBeanPane implements UIObserver { + + public abstract boolean accept(Background background); + + @Override + public abstract void populateBean(Background background); + + @Override + public abstract Background updateBean(); + + @Override + public abstract String title4PopupWindow(); + + /** + * 组件是否需要响应添加的观察者事件 + * + * @return 如果需要响应观察者事件则返回true,否则返回false + */ + public boolean shouldResponseChangeListener() { + + return true; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/ColorBackgroundPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java similarity index 91% rename from designer_base/src/com/fr/design/mainframe/backgroundpane/ColorBackgroundPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java index 1b7fea0eb..f08b0a89b 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/ColorBackgroundPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java @@ -1,72 +1,72 @@ -package com.fr.design.mainframe.backgroundpane; - -import com.fr.base.background.ColorBackground; -import com.fr.design.event.UIObserverListener; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Background; -import com.fr.general.Inter; -import com.fr.design.style.color.NewColorSelectPane; - -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; - -/** - * @author zhou - * @since 2012-5-29下午1:12:14 - */ -public class ColorBackgroundPane extends BackgroundSettingPane { - - private NewColorSelectPane detailColorSelectPane; - - public ColorBackgroundPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - detailColorSelectPane = new NewColorSelectPane(); - this.add(detailColorSelectPane, BorderLayout.NORTH); - } - - public void populateBean(Background background) { - ColorBackground colorBackgroud = (ColorBackground) background; - this.detailColorSelectPane.setColor(colorBackgroud.getColor()); - } - - public Background updateBean() { - this.detailColorSelectPane.updateUsedColor(); - return ColorBackground.getInstance(this.detailColorSelectPane.getNotNoneColor()); - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - detailColorSelectPane.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - } - - @Override - /** - * 是否为ColorBackground 类型 - * - * @param background 背景 - * @return 同上 - * - */ - public boolean accept(Background background) { - return background instanceof ColorBackground; - } - - @Override - /** - * 窗口名称 - * @return 同上 - */ - public String title4PopupWindow() { - return Inter.getLocText("Color"); - } +package com.fr.design.mainframe.backgroundpane; + +import com.fr.base.background.ColorBackground; +import com.fr.design.event.UIObserverListener; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.design.style.color.NewColorSelectPane; + +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; + +/** + * @author zhou + * @since 2012-5-29下午1:12:14 + */ +public class ColorBackgroundQuickPane extends BackgroundQuickPane { + + private NewColorSelectPane detailColorSelectPane; + + public ColorBackgroundQuickPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + detailColorSelectPane = new NewColorSelectPane(); + this.add(detailColorSelectPane, BorderLayout.NORTH); + } + + public void populateBean(Background background) { + ColorBackground colorBackgroud = (ColorBackground) background; + this.detailColorSelectPane.setColor(colorBackgroud.getColor()); + } + + public Background updateBean() { + this.detailColorSelectPane.updateUsedColor(); + return ColorBackground.getInstance(this.detailColorSelectPane.getNotNoneColor()); + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + detailColorSelectPane.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + + @Override + /** + * 是否为ColorBackground 类型 + * + * @param background 背景 + * @return 同上 + * + */ + public boolean accept(Background background) { + return background instanceof ColorBackground; + } + + @Override + /** + * 窗口名称 + * @return 同上 + */ + public String title4PopupWindow() { + return Inter.getLocText("Color"); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/style/GradientPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/GradientBackgroundQuickPane.java similarity index 91% rename from designer_base/src/com/fr/design/gui/style/GradientPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/GradientBackgroundQuickPane.java index ed713ffe7..08ef9e61c 100644 --- a/designer_base/src/com/fr/design/gui/style/GradientPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/GradientBackgroundQuickPane.java @@ -1,123 +1,122 @@ -package com.fr.design.gui.style; - -import com.fr.base.background.GradientBackground; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.backgroundpane.BackgroundSettingPane; -import com.fr.general.Background; -import com.fr.general.Inter; -import com.fr.design.style.background.gradient.GradientBar; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; - -/** - * @author zhou - * @since 2012-5-30上午10:36:21 - */ -public class GradientPane extends BackgroundSettingPane { - private static final long serialVersionUID = -6854603990673031897L; - - private static final int DEFAULT_GRADIENT_WIDTH = 185; - - private int gradientBarWidth = DEFAULT_GRADIENT_WIDTH; - - private GradientBar gradientBar; - private UIButtonGroup directionPane; - - public GradientPane() { - constructPane(); - } - - public GradientPane(int gradientBarWidth) { - this.gradientBarWidth = gradientBarWidth; - constructPane(); - } - - private void constructPane(){ - String[] textArray = {Inter.getLocText("Utils-Left_to_Right"), Inter.getLocText("Utils-Top_to_Bottom")}; - Integer[] valueArray = {GradientBackground.LEFT2RIGHT, GradientBackground.TOP2BOTTOM}; - directionPane = new UIButtonGroup(textArray, valueArray); - directionPane.setSelectedIndex(0); - gradientBar = new GradientBar(4, this.gradientBarWidth); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {p, f}; - double[] rowSize = {p, p,}; - - Component[][] components = new Component[][]{ - new Component[]{gradientBar, null}, - new Component[]{new UILabel(Inter.getLocText("Gradient-Direction") + ":"), directionPane} - }; - JPanel Gradient = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - this.setLayout(new BorderLayout()); - this.add(Gradient, BorderLayout.CENTER); - } - - public void populateBean(Background background) { - GradientBackground bg = (GradientBackground) background; - this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); - this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); - directionPane.setSelectedItem(bg.getDirection()); - if (bg.isUseCell()) { - return; - } - double startValue = (double) bg.getBeginPlace(); - double endValue = (double) bg.getFinishPlace(); - gradientBar.setStartValue(startValue); - gradientBar.setEndValue(endValue); - if(this.gradientBar.getSelectColorPointBtnP1() != null && this.gradientBar.getSelectColorPointBtnP2() != null){ - this.gradientBar.getSelectColorPointBtnP1().setX(startValue); - this.gradientBar.getSelectColorPointBtnP2().setX(endValue); - } - this.gradientBar.repaint(); - } - - public GradientBackground updateBean() { - GradientBackground gb = new GradientBackground(gradientBar.getSelectColorPointBtnP1().getColorInner(), gradientBar.getSelectColorPointBtnP2().getColorInner()); - gb.setDirection(directionPane.getSelectedItem()); - if (gradientBar.isOriginalPlace()) { - gb.setUseCell(true); - } else { - gb.setUseCell(false); - gb.setBeginPlace((float) gradientBar.getStartValue()); - gb.setFinishPlace((float) gradientBar.getEndValue()); - } - return gb; - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - gradientBar.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - directionPane.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - } - - @Override - public boolean accept(Background background) { - return background instanceof GradientBackground; - } - - @Override - public String title4PopupWindow() { - return Inter.getLocText("Gradient-Color"); - } - +package com.fr.design.mainframe.backgroundpane; + +import com.fr.base.background.GradientBackground; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.style.background.gradient.GradientBar; +import com.fr.general.Background; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; + +/** + * @author zhou + * @since 2012-5-30上午10:36:21 + */ +public class GradientBackgroundQuickPane extends BackgroundQuickPane { + private static final long serialVersionUID = -6854603990673031897L; + + private static final int DEFAULT_GRADIENT_WIDTH = 185; + + private int gradientBarWidth = DEFAULT_GRADIENT_WIDTH; + + private GradientBar gradientBar; + private UIButtonGroup directionPane; + + public GradientBackgroundQuickPane() { + constructPane(); + } + + public GradientBackgroundQuickPane(int gradientBarWidth) { + this.gradientBarWidth = gradientBarWidth; + constructPane(); + } + + private void constructPane(){ + String[] textArray = {Inter.getLocText("Utils-Left_to_Right"), Inter.getLocText("Utils-Top_to_Bottom")}; + Integer[] valueArray = {GradientBackground.LEFT2RIGHT, GradientBackground.TOP2BOTTOM}; + directionPane = new UIButtonGroup(textArray, valueArray); + directionPane.setSelectedIndex(0); + gradientBar = new GradientBar(4, this.gradientBarWidth); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + double[] rowSize = {p, p,}; + + Component[][] components = new Component[][]{ + new Component[]{gradientBar, null}, + new Component[]{new UILabel(Inter.getLocText("Gradient-Direction") + ":"), directionPane} + }; + JPanel Gradient = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + this.setLayout(new BorderLayout()); + this.add(Gradient, BorderLayout.CENTER); + } + + public void populateBean(Background background) { + GradientBackground bg = (GradientBackground) background; + this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); + this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); + directionPane.setSelectedItem(bg.getDirection()); + if (bg.isUseCell()) { + return; + } + double startValue = (double) bg.getBeginPlace(); + double endValue = (double) bg.getFinishPlace(); + gradientBar.setStartValue(startValue); + gradientBar.setEndValue(endValue); + if(this.gradientBar.getSelectColorPointBtnP1() != null && this.gradientBar.getSelectColorPointBtnP2() != null){ + this.gradientBar.getSelectColorPointBtnP1().setX(startValue); + this.gradientBar.getSelectColorPointBtnP2().setX(endValue); + } + this.gradientBar.repaint(); + } + + public GradientBackground updateBean() { + GradientBackground gb = new GradientBackground(gradientBar.getSelectColorPointBtnP1().getColorInner(), gradientBar.getSelectColorPointBtnP2().getColorInner()); + gb.setDirection(directionPane.getSelectedItem()); + if (gradientBar.isOriginalPlace()) { + gb.setUseCell(true); + } else { + gb.setUseCell(false); + gb.setBeginPlace((float) gradientBar.getStartValue()); + gb.setFinishPlace((float) gradientBar.getEndValue()); + } + return gb; + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + gradientBar.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + directionPane.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + + @Override + public boolean accept(Background background) { + return background instanceof GradientBackground; + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("Gradient-Color"); + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/ImageBackgroundPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/ImageBackgroundQuickPane.java similarity index 93% rename from designer_base/src/com/fr/design/mainframe/backgroundpane/ImageBackgroundPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/ImageBackgroundQuickPane.java index 7565d7d78..114b704c0 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/ImageBackgroundPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/ImageBackgroundQuickPane.java @@ -1,185 +1,185 @@ -package com.fr.design.mainframe.backgroundpane; - -import com.fr.base.BaseUtils; -import com.fr.base.Style; -import com.fr.base.background.ImageBackground; -import com.fr.design.constants.UIConstants; -import com.fr.design.border.UIRoundedBorder; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.DesignerContext; -import com.fr.general.Background; -import com.fr.general.Inter; -import com.fr.stable.Constants; -import com.fr.stable.CoreGraphHelper; -import com.fr.design.style.background.image.ImageFileChooser; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; - -/** - * @author zhou - * @since 2012-5-29下午1:12:06 - */ -public class ImageBackgroundPane extends BackgroundSettingPane { - - private ImagePreviewPane previewPane; - private Style imageStyle = null; - private ChangeListener changeListener = null; - private ImageFileChooser imageFileChooser; - - private UIButtonGroup imageLayoutPane; - - public ImageBackgroundPane() { - this(true); - } - - public ImageBackgroundPane(boolean hasImageLayout) { - this.setLayout(new BorderLayout(0, 4)); - String[] nameArray = {Inter.getLocText("FR-Background_Image_Default"), Inter.getLocText("FR-Background_Image_Titled"), Inter.getLocText("FR-Background_Image_Adjust"), Inter.getLocText("FR-Background_Image_Extend")}; - Byte[] valueArray = {Constants.IMAGE_CENTER, Constants.IMAGE_TILED, Constants.IMAGE_EXTEND, Constants.IMAGE_ADJUST}; - imageLayoutPane = new UIButtonGroup(nameArray, valueArray); - imageLayoutPane.setSelectedIndex(0); - - previewPane = new ImagePreviewPane(); - JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - borderPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); - borderPane.setPreferredSize(new Dimension(0, 145)); - borderPane.add(previewPane, BorderLayout.CENTER); - this.add(borderPane, BorderLayout.NORTH); - previewPane.addChangeListener(imageSizeChangeListener); - - JPanel southPane = new JPanel(new BorderLayout(0, 4)); - JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - contentPane.add(southPane, BorderLayout.NORTH); - this.add(contentPane, BorderLayout.CENTER); - - JPanel selectFilePane = new JPanel(new GridLayout(0, 2)); - - UIButton selectPictureButton = new UIButton(Inter.getLocText("Image-Select_Picture")); - selectFilePane.add(new JPanel()); - selectFilePane.add(selectPictureButton); - selectPictureButton.addActionListener(selectPictureActionListener); - - if(hasImageLayout){ - southPane.add(imageLayoutPane, BorderLayout.CENTER); - } - southPane.add(selectFilePane, BorderLayout.SOUTH); - - imageLayoutPane.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); - previewPane.setImageStyle(imageStyle); - previewPane.repaint(); - } - }); - } - - /** - * Select picture. - */ - ActionListener selectPictureActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - if (imageFileChooser == null) { - imageFileChooser = new ImageFileChooser(); - imageFileChooser.setMultiSelectionEnabled(false); - } - int returnVal = imageFileChooser.showOpenDialog(DesignerContext.getDesignerFrame()); - if (returnVal != JFileChooser.CANCEL_OPTION) { - File selectedFile = imageFileChooser.getSelectedFile(); - - if (selectedFile != null && selectedFile.isFile()) { - Image image = BaseUtils.readImage(selectedFile.getPath()); - CoreGraphHelper.waitForImage(image); - - previewPane.setImage(image); - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); - previewPane.setImageStyle(imageStyle); - previewPane.repaint(); - } else { - previewPane.setImage(null); - } - fireChagneListener(); - } - - } - }; - - public void populateBean(Background background) { - - ImageBackground imageBackground = (ImageBackground) background; - imageLayoutPane.setSelectedItem((byte) imageBackground.getLayout()); - Style.DEFAULT_STYLE.deriveImageLayout(imageBackground.getLayout()); - - previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); - previewPane.setImage(imageBackground.getImage()); - previewPane.repaint(); - } - - public Background updateBean() { - ImageBackground imageBackground = new ImageBackground(previewPane.getImage()); - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); - imageBackground.setLayout(imageStyle.getImageLayout()); - return imageBackground; - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - changeListener = new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }; - imageLayoutPane.addChangeListener(changeListener); - } - - - private void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } - - ChangeListener imageSizeChangeListener = new ChangeListener() { - - public void stateChanged(ChangeEvent evt) { - if (imageLayoutPane.getSelectedItem() != null) { - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); - previewPane.setImageStyle(imageStyle); - previewPane.repaint(); - } - } - }; - - /** - * 判断是否是图片背景 - * @param background 背景 - * @return 判断是否是图片背景 - */ - public boolean accept(Background background) { - return background instanceof ImageBackground; - } - - /** - * 标题 - * @return 标题 - */ - public String title4PopupWindow() { - return Inter.getLocText("FR-Background_Image"); - } +package com.fr.design.mainframe.backgroundpane; + +import com.fr.base.BaseUtils; +import com.fr.base.Style; +import com.fr.base.background.ImageBackground; +import com.fr.design.constants.UIConstants; +import com.fr.design.border.UIRoundedBorder; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.stable.Constants; +import com.fr.stable.CoreGraphHelper; +import com.fr.design.style.background.image.ImageFileChooser; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +/** + * @author zhou + * @since 2012-5-29下午1:12:06 + */ +public class ImageBackgroundQuickPane extends BackgroundQuickPane { + + private ImagePreviewPane previewPane; + private Style imageStyle = null; + private ChangeListener changeListener = null; + private ImageFileChooser imageFileChooser; + + private UIButtonGroup imageLayoutPane; + + public ImageBackgroundQuickPane() { + this(true); + } + + public ImageBackgroundQuickPane(boolean hasImageLayout) { + this.setLayout(new BorderLayout(0, 4)); + String[] nameArray = {Inter.getLocText("FR-Background_Image_Default"), Inter.getLocText("FR-Background_Image_Titled"), Inter.getLocText("FR-Background_Image_Adjust"), Inter.getLocText("FR-Background_Image_Extend")}; + Byte[] valueArray = {Constants.IMAGE_CENTER, Constants.IMAGE_TILED, Constants.IMAGE_EXTEND, Constants.IMAGE_ADJUST}; + imageLayoutPane = new UIButtonGroup(nameArray, valueArray); + imageLayoutPane.setSelectedIndex(0); + + previewPane = new ImagePreviewPane(); + JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + borderPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); + borderPane.setPreferredSize(new Dimension(0, 145)); + borderPane.add(previewPane, BorderLayout.CENTER); + this.add(borderPane, BorderLayout.NORTH); + previewPane.addChangeListener(imageSizeChangeListener); + + JPanel southPane = new JPanel(new BorderLayout(0, 4)); + JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + contentPane.add(southPane, BorderLayout.NORTH); + this.add(contentPane, BorderLayout.CENTER); + + JPanel selectFilePane = new JPanel(new GridLayout(0, 2)); + + UIButton selectPictureButton = new UIButton(Inter.getLocText("Image-Select_Picture")); + selectFilePane.add(new JPanel()); + selectFilePane.add(selectPictureButton); + selectPictureButton.addActionListener(selectPictureActionListener); + + if(hasImageLayout){ + southPane.add(imageLayoutPane, BorderLayout.CENTER); + } + southPane.add(selectFilePane, BorderLayout.SOUTH); + + imageLayoutPane.addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); + previewPane.setImageStyle(imageStyle); + previewPane.repaint(); + } + }); + } + + /** + * Select picture. + */ + ActionListener selectPictureActionListener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + if (imageFileChooser == null) { + imageFileChooser = new ImageFileChooser(); + imageFileChooser.setMultiSelectionEnabled(false); + } + int returnVal = imageFileChooser.showOpenDialog(DesignerContext.getDesignerFrame()); + if (returnVal != JFileChooser.CANCEL_OPTION) { + File selectedFile = imageFileChooser.getSelectedFile(); + + if (selectedFile != null && selectedFile.isFile()) { + Image image = BaseUtils.readImage(selectedFile.getPath()); + CoreGraphHelper.waitForImage(image); + + previewPane.setImage(image); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); + previewPane.setImageStyle(imageStyle); + previewPane.repaint(); + } else { + previewPane.setImage(null); + } + fireChagneListener(); + } + + } + }; + + public void populateBean(Background background) { + + ImageBackground imageBackground = (ImageBackground) background; + imageLayoutPane.setSelectedItem((byte) imageBackground.getLayout()); + Style.DEFAULT_STYLE.deriveImageLayout(imageBackground.getLayout()); + + previewPane.setImageStyle(ImageBackgroundQuickPane.this.imageStyle); + previewPane.setImage(imageBackground.getImage()); + previewPane.repaint(); + } + + public Background updateBean() { + ImageBackground imageBackground = new ImageBackground(previewPane.getImage()); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); + imageBackground.setLayout(imageStyle.getImageLayout()); + return imageBackground; + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + changeListener = new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }; + imageLayoutPane.addChangeListener(changeListener); + } + + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + + ChangeListener imageSizeChangeListener = new ChangeListener() { + + public void stateChanged(ChangeEvent evt) { + if (imageLayoutPane.getSelectedItem() != null) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(imageLayoutPane.getSelectedItem()); + previewPane.setImageStyle(imageStyle); + previewPane.repaint(); + } + } + }; + + /** + * 判断是否是图片背景 + * @param background 背景 + * @return 判断是否是图片背景 + */ + public boolean accept(Background background) { + return background instanceof ImageBackground; + } + + /** + * 标题 + * @return 标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("FR-Background_Image"); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/NullBackgroundPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/NullBackgroundQuickPane.java similarity index 89% rename from designer_base/src/com/fr/design/mainframe/backgroundpane/NullBackgroundPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/NullBackgroundQuickPane.java index 6edd7c7fc..60d39ed2d 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/NullBackgroundPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/NullBackgroundQuickPane.java @@ -1,54 +1,54 @@ -package com.fr.design.mainframe.backgroundpane; - -import com.fr.design.event.UIObserverListener; -import com.fr.general.Background; -import com.fr.general.Inter; - -import java.awt.*; - -/** - * @author zhou - * @since 2012-5-29下午1:12:24 - */ -public class NullBackgroundPane extends BackgroundSettingPane { - - public Dimension getPreferredSize(){ - return new Dimension(0,0); - } - - public void populateBean(Background background) { - // do nothing. - } - - public Background updateBean() { - return null; - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - - } - - - /** - * 是否接受 - * @param background 背景 - * @return 是则返回true - */ - public boolean accept(Background background) { - return background == null; - } - - /** - * 名称 - * @return 名称 - */ - public String title4PopupWindow() { - return Inter.getLocText("Background-Null"); - } - +package com.fr.design.mainframe.backgroundpane; + +import com.fr.design.event.UIObserverListener; +import com.fr.general.Background; +import com.fr.general.Inter; + +import java.awt.*; + +/** + * @author zhou + * @since 2012-5-29下午1:12:24 + */ +public class NullBackgroundQuickPane extends BackgroundQuickPane { + + public Dimension getPreferredSize(){ + return new Dimension(0,0); + } + + public void populateBean(Background background) { + // do nothing. + } + + public Background updateBean() { + return null; + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + + } + + + /** + * 是否接受 + * @param background 背景 + * @return 是则返回true + */ + public boolean accept(Background background) { + return background == null; + } + + /** + * 名称 + * @return 名称 + */ + public String title4PopupWindow() { + return Inter.getLocText("Background-Null"); + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java similarity index 92% rename from designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java index 7e3e15042..4e31405d1 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/PatternBackgroundQuickPane.java @@ -1,211 +1,211 @@ -package com.fr.design.mainframe.backgroundpane; - -import com.fr.base.GraphHelper; -import com.fr.base.background.PatternBackground; -import com.fr.design.constants.UIConstants; -import com.fr.design.border.UIRoundedBorder; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Background; -import com.fr.general.Inter; -import com.fr.design.style.color.ColorSelectBox; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.geom.Rectangle2D; - -/** - * @author zhou - * @since 2012-5-29下午1:12:33 - */ -public class PatternBackgroundPane extends BackgroundSettingPane { - - private int patternIndex = 0; // pattern index. - private ColorSelectBox foregroundColorPane; - private ColorSelectBox backgroundColorPane; - private PatternButton[] patternButtonArray; - - public PatternBackgroundPane() { - this.setLayout(new BorderLayout(0, 4)); - - JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - this.add(contentPane, BorderLayout.NORTH); - contentPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); - - JPanel typePane2 = new JPanel(); - contentPane.add(typePane2); - typePane2.setLayout(new GridLayout(0, 8, 1, 1)); - typePane2.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); - ButtonGroup patternButtonGroup = new ButtonGroup(); - patternButtonArray = new PatternButton[PatternBackground.PATTERN_COUNT]; - for (int i = 0; i < PatternBackground.PATTERN_COUNT; i++) { - patternButtonArray[i] = new PatternButton(i); - patternButtonGroup.add(patternButtonArray[i]); - typePane2.add(patternButtonArray[i]); - } - - JPanel colorPane = new JPanel(new GridLayout(0, 2)); - foregroundColorPane = new ColorSelectBox(70); - backgroundColorPane = new ColorSelectBox(70); - foregroundColorPane.setSelectObject(Color.lightGray); - backgroundColorPane.setSelectObject(Color.black); - - colorPane.add(this.createLabelColorPane(Inter.getLocText("Foreground") + ":", foregroundColorPane)); - colorPane.add(this.createLabelColorPane(Inter.getLocText("Background") + ":", backgroundColorPane)); - this.add(colorPane, BorderLayout.CENTER); - foregroundColorPane.addSelectChangeListener(colorChangeListener); - backgroundColorPane.addSelectChangeListener(colorChangeListener); - } - - @Override - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.height = 190; - return dim; - } - - private JPanel createLabelColorPane(String text, JComponent colorPane) { - JPanel labelColorPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); - labelColorPane.add(new UILabel(text)); - labelColorPane.add(colorPane); - - return labelColorPane; - } - - public void populateBean(Background background) { - PatternBackground patternBackground = (PatternBackground) background; - int patternIndex = patternBackground.getPatternIndex(); - - if (patternIndex >= 0 && patternIndex < this.patternButtonArray.length) { - this.patternButtonArray[patternIndex].setSelected(true); - this.patternIndex = patternIndex; - } else { - this.patternIndex = 0; - } - - foregroundColorPane.setSelectObject(patternBackground.getForeground()); - backgroundColorPane.setSelectObject(patternBackground.getBackground()); - } - - public Background updateBean() { - return new PatternBackground(patternIndex, foregroundColorPane.getSelectObject(), backgroundColorPane.getSelectObject()); - } - - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - foregroundColorPane.addSelectChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - backgroundColorPane.addSelectChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - for (int i = 0, count = patternButtonArray.length; i < count; i ++) { - patternButtonArray[i].addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - } - } - - - // Foreground or Background changed. - ChangeListener colorChangeListener = new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - for (int i = 0; i < patternButtonArray.length; i++) { - patternButtonArray[i].setPatternForeground(foregroundColorPane.getSelectObject()); - patternButtonArray[i].setPatternBackground(backgroundColorPane.getSelectObject()); - } - - PatternBackgroundPane.this.repaint();// repaint - } - }; - - /** - * Pattern type button. - */ - class PatternButton extends JToggleButton implements ActionListener { - - public PatternButton(int pIndex) { - this.pIndex = pIndex; - this.addActionListener(this); - - this.setCursor(new Cursor(Cursor.HAND_CURSOR)); - this.setBorder(null); - this.patternBackground = new PatternBackground(this.pIndex, Color.lightGray, Color.black); - } - - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - - Dimension d = getSize(); - this.patternBackground.paint(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); - - if (this.pIndex == patternIndex) {// it's selected. - g2d.setPaint(UIConstants.LINE_COLOR); - GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); - } - } - - public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width, 20); - } - - public void setPatternForeground(Color foreground) { - this.patternBackground.setForeground(foreground); - } - - public void setPatternBackground(Color background) { - this.patternBackground.setBackground(background); - } - - /** - * set Pattern index. - */ - public void actionPerformed(ActionEvent evt) { - PatternBackgroundPane.this.patternIndex = pIndex; - - fireChagneListener(); - PatternBackgroundPane.this.repaint();// repaint - } - - public void addChangeListener(ChangeListener changeListener) { - this.changeListener = changeListener; - } - - private void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } - - private int pIndex = 0; - private PatternBackground patternBackground; - } - - @Override - public boolean accept(Background background) { - return background instanceof PatternBackground; - } - - @Override - public String title4PopupWindow() { - return Inter.getLocText("Background-Pattern"); - } +package com.fr.design.mainframe.backgroundpane; + +import com.fr.base.GraphHelper; +import com.fr.base.background.PatternBackground; +import com.fr.design.constants.UIConstants; +import com.fr.design.border.UIRoundedBorder; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.design.style.color.ColorSelectBox; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.geom.Rectangle2D; + +/** + * @author zhou + * @since 2012-5-29下午1:12:33 + */ +public class PatternBackgroundQuickPane extends BackgroundQuickPane { + + private int patternIndex = 0; // pattern setIndex. + private ColorSelectBox foregroundColorPane; + private ColorSelectBox backgroundColorPane; + private PatternButton[] patternButtonArray; + + public PatternBackgroundQuickPane() { + this.setLayout(new BorderLayout(0, 4)); + + JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + this.add(contentPane, BorderLayout.NORTH); + contentPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); + + JPanel typePane2 = new JPanel(); + contentPane.add(typePane2); + typePane2.setLayout(new GridLayout(0, 8, 1, 1)); + typePane2.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); + ButtonGroup patternButtonGroup = new ButtonGroup(); + patternButtonArray = new PatternButton[PatternBackground.PATTERN_COUNT]; + for (int i = 0; i < PatternBackground.PATTERN_COUNT; i++) { + patternButtonArray[i] = new PatternButton(i); + patternButtonGroup.add(patternButtonArray[i]); + typePane2.add(patternButtonArray[i]); + } + + JPanel colorPane = new JPanel(new GridLayout(0, 2)); + foregroundColorPane = new ColorSelectBox(70); + backgroundColorPane = new ColorSelectBox(70); + foregroundColorPane.setSelectObject(Color.lightGray); + backgroundColorPane.setSelectObject(Color.black); + + colorPane.add(this.createLabelColorPane(Inter.getLocText("Foreground") + ":", foregroundColorPane)); + colorPane.add(this.createLabelColorPane(Inter.getLocText("Background") + ":", backgroundColorPane)); + this.add(colorPane, BorderLayout.CENTER); + foregroundColorPane.addSelectChangeListener(colorChangeListener); + backgroundColorPane.addSelectChangeListener(colorChangeListener); + } + + @Override + public Dimension getPreferredSize() { + Dimension dim = super.getPreferredSize(); + dim.height = 190; + return dim; + } + + private JPanel createLabelColorPane(String text, JComponent colorPane) { + JPanel labelColorPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); + labelColorPane.add(new UILabel(text)); + labelColorPane.add(colorPane); + + return labelColorPane; + } + + public void populateBean(Background background) { + PatternBackground patternBackground = (PatternBackground) background; + int patternIndex = patternBackground.getPatternIndex(); + + if (patternIndex >= 0 && patternIndex < this.patternButtonArray.length) { + this.patternButtonArray[patternIndex].setSelected(true); + this.patternIndex = patternIndex; + } else { + this.patternIndex = 0; + } + + foregroundColorPane.setSelectObject(patternBackground.getForeground()); + backgroundColorPane.setSelectObject(patternBackground.getBackground()); + } + + public Background updateBean() { + return new PatternBackground(patternIndex, foregroundColorPane.getSelectObject(), backgroundColorPane.getSelectObject()); + } + + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + foregroundColorPane.addSelectChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + backgroundColorPane.addSelectChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + for (int i = 0, count = patternButtonArray.length; i < count; i ++) { + patternButtonArray[i].addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + } + + + // Foreground or Background changed. + ChangeListener colorChangeListener = new ChangeListener() { + + public void stateChanged(ChangeEvent e) { + for (int i = 0; i < patternButtonArray.length; i++) { + patternButtonArray[i].setPatternForeground(foregroundColorPane.getSelectObject()); + patternButtonArray[i].setPatternBackground(backgroundColorPane.getSelectObject()); + } + + PatternBackgroundQuickPane.this.repaint();// repaint + } + }; + + /** + * Pattern type button. + */ + class PatternButton extends JToggleButton implements ActionListener { + + public PatternButton(int pIndex) { + this.pIndex = pIndex; + this.addActionListener(this); + + this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + this.setBorder(null); + this.patternBackground = new PatternBackground(this.pIndex, Color.lightGray, Color.black); + } + + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + + Dimension d = getSize(); + this.patternBackground.paint(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); + + if (this.pIndex == patternIndex) {// it's selected. + g2d.setPaint(UIConstants.LINE_COLOR); + GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); + } + } + + public Dimension getPreferredSize() { + return new Dimension(super.getPreferredSize().width, 20); + } + + public void setPatternForeground(Color foreground) { + this.patternBackground.setForeground(foreground); + } + + public void setPatternBackground(Color background) { + this.patternBackground.setBackground(background); + } + + /** + * set Pattern setIndex. + */ + public void actionPerformed(ActionEvent evt) { + PatternBackgroundQuickPane.this.patternIndex = pIndex; + + fireChagneListener(); + PatternBackgroundQuickPane.this.repaint();// repaint + } + + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + + private int pIndex = 0; + private PatternBackground patternBackground; + } + + @Override + public boolean accept(Background background) { + return background instanceof PatternBackground; + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("Background-Pattern"); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/backgroundpane/TextureBackgroundPane.java b/designer_base/src/com/fr/design/mainframe/backgroundpane/TextureBackgroundQuickPane.java similarity index 94% rename from designer_base/src/com/fr/design/mainframe/backgroundpane/TextureBackgroundPane.java rename to designer_base/src/com/fr/design/mainframe/backgroundpane/TextureBackgroundQuickPane.java index caff963d6..dcd386343 100644 --- a/designer_base/src/com/fr/design/mainframe/backgroundpane/TextureBackgroundPane.java +++ b/designer_base/src/com/fr/design/mainframe/backgroundpane/TextureBackgroundQuickPane.java @@ -1,173 +1,173 @@ -package com.fr.design.mainframe.backgroundpane; - -import com.fr.base.GraphHelper; -import com.fr.base.background.TextureBackground; -import com.fr.design.constants.UIConstants; -import com.fr.design.border.UIRoundedBorder; -import com.fr.design.event.UIObserverListener; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Background; -import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.geom.Rectangle2D; - -public class TextureBackgroundPane extends BackgroundSettingPane { - - private TexturePaint texturePaint; - private TextureButton[] textureButtonArray; - - public TextureBackgroundPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - borderPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); - JPanel contentPane = new JPanel(); - borderPane.add(contentPane, BorderLayout.NORTH); - this.add(borderPane, BorderLayout.NORTH); - contentPane.setLayout(new GridLayout(0, 8, 1, 1)); - contentPane.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); - borderPane.setPreferredSize(new Dimension(0, 145)); - ButtonGroup patternButtonGroup = new ButtonGroup(); - textureButtonArray = new TextureButton[EMBED_TEXTURE_PAINT_ARRAY.length]; - for (int i = 0; i < EMBED_TEXTURE_PAINT_ARRAY.length; i++) { - textureButtonArray[i] = new TextureButton(EMBED_TEXTURE_PAINT_ARRAY[i], EMBED_TEXTURE_PAINT_DES_ARRAY[i]); - patternButtonGroup.add(textureButtonArray[i]); - contentPane.add(textureButtonArray[i]); - } - } - - public void populateBean(Background background) { - TextureBackground textureBackground = (TextureBackground) background; - - this.texturePaint = textureBackground.getTexturePaint(); - - - for (int i = 0; i < textureButtonArray.length; i++) { - if (ComparatorUtils.equals(textureButtonArray[i].getTexturePaint(), this.texturePaint)) { - textureButtonArray[i].setSelected(true); - break; - } - } - } - - public Background updateBean() { - if (this.texturePaint == null) { - textureButtonArray[0].doClick(); - } - return new TextureBackground(this.texturePaint); - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - for (int i = 0, count = textureButtonArray.length; i < count; i++) { - textureButtonArray[i].addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - } - } - - - /** - * Texture type button. - */ - class TextureButton extends JToggleButton implements ActionListener { - - private TexturePaint buttonTexturePaint; - - public TextureButton(TexturePaint buttonTexturePaint, String tooltip) { - this.buttonTexturePaint = buttonTexturePaint; - this.setToolTipText(tooltip); - - this.setCursor(new Cursor(Cursor.HAND_CURSOR)); - this.addActionListener(this); - this.setBorder(null); - } - - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - - Dimension d = getSize(); - - g2d.setPaint(this.buttonTexturePaint); - GraphHelper.fill(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); - - if (ComparatorUtils.equals(texturePaint, this.buttonTexturePaint)) {// it's - // selected. - g2d.setPaint(UIConstants.LINE_COLOR); - } else { - g2d.setPaint(null); - } - GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); - } - - public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width, 20); - } - - public TexturePaint getTexturePaint() { - return this.buttonTexturePaint; - } - - /** - * set Pattern index. - */ - public void actionPerformed(ActionEvent evt) { - TextureBackgroundPane.this.texturePaint = this.getTexturePaint(); - - fireChagneListener(); - TextureBackgroundPane.this.repaint(); // repaint. - } - - public void addChangeListener(ChangeListener changeListener) { - this.changeListener = changeListener; - } - - private void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } - } - - public static final TexturePaint[] EMBED_TEXTURE_PAINT_ARRAY = new TexturePaint[]{TextureBackground.NEWSPRINT_TEXTURE_PAINT, TextureBackground.RECYCLED_PAPER_TEXTURE_PAINT, - TextureBackground.PARCHMENT_TEXTURE_PAINT, TextureBackground.STATIONERY_TEXTURE_PAINT, TextureBackground.GREEN_MARBLE_TEXTURE_PAINT, - TextureBackground.WHITE_MARBLE_TEXTURE_PAINT, TextureBackground.BROWN_MARBLE_TEXTURE_PAINT, TextureBackground.GRANITE_TEXTURE_PAINT, - TextureBackground.BLUE_TISSUE_PAPER_TEXTURE_PAINT, TextureBackground.PINK_TISSUE_PAPER_TEXTURE_PAINT, TextureBackground.PURPLE_MESH_TEXTURE_PAINT, - TextureBackground.BOUQUET_TEXTURE_PAINT, TextureBackground.PAPYRUS_TEXTURE_PAINT, TextureBackground.CANVAS_TEXTURE_PAINT, TextureBackground.DENIM_TEXTURE_PAINT, - TextureBackground.WOVEN_MAT_TEXTURE_PAINT, TextureBackground.WATER_DROPLETS_TEXTURE_PAINT, TextureBackground.PAPER_BAG_TEXTURE_PAINT, TextureBackground.FISH_FOSSIL_TEXTURE_PAINT, - TextureBackground.SAND_TEXTURE_PAINT, TextureBackground.CORK_TEXTURE_PAINT, TextureBackground.WALNUT_TEXTURE_PAINT, TextureBackground.OAK_TEXTURE_PAINT, - TextureBackground.MEDIUM_WOOD_TEXTURE_PAINT}; - private static final String[] EMBED_TEXTURE_PAINT_DES_ARRAY = new String[]{Inter.getLocText("BackgroundTexture-Newsprint"), Inter.getLocText("BackgroundTexture-RecycledPaper"), - Inter.getLocText("BackgroundTexture-Parchment"), Inter.getLocText("BackgroundTexture-Stationery"), Inter.getLocText("BackgroundTexture-GreenMarble"), - Inter.getLocText("BackgroundTexture-WhiteMarble"), Inter.getLocText("BackgroundTexture-BrownMarble"), Inter.getLocText("BackgroundTexture-Granite"), - Inter.getLocText("BackgroundTexture-BlueTissuePaper"), Inter.getLocText("BackgroundTexture-PinkTissuePaper"), Inter.getLocText("BackgroundTexture-PurpleMesh"), - Inter.getLocText("BackgroundTexture-Bouquet"), Inter.getLocText("BackgroundTexture-Papyrus"), Inter.getLocText("BackgroundTexture-Canvas"), - Inter.getLocText("BackgroundTexture-Denim"), Inter.getLocText("BackgroundTexture-WovenMat"), Inter.getLocText("BackgroundTexture-WaterDroplets"), - Inter.getLocText("BackgroundTexture-PaperBag"), Inter.getLocText("BackgroundTexture-FishFossil"), Inter.getLocText("BackgroundTexture-Sand"), - Inter.getLocText("BackgroundTexture-Cork"), Inter.getLocText("BackgroundTexture-Walnut"), Inter.getLocText("BackgroundTexture-Oak"), - Inter.getLocText("BackgroundTexture-MediumWood")}; - - @Override - public boolean accept(Background background) { - return background instanceof TextureBackground; - } - - @Override - public String title4PopupWindow() { - return Inter.getLocText("Background-Texture"); - } +package com.fr.design.mainframe.backgroundpane; + +import com.fr.base.GraphHelper; +import com.fr.base.background.TextureBackground; +import com.fr.design.constants.UIConstants; +import com.fr.design.border.UIRoundedBorder; +import com.fr.design.event.UIObserverListener; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Background; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.geom.Rectangle2D; + +public class TextureBackgroundQuickPane extends BackgroundQuickPane { + + private TexturePaint texturePaint; + private TextureButton[] textureButtonArray; + + public TextureBackgroundQuickPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + borderPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5)); + JPanel contentPane = new JPanel(); + borderPane.add(contentPane, BorderLayout.NORTH); + this.add(borderPane, BorderLayout.NORTH); + contentPane.setLayout(new GridLayout(0, 8, 1, 1)); + contentPane.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); + borderPane.setPreferredSize(new Dimension(0, 145)); + ButtonGroup patternButtonGroup = new ButtonGroup(); + textureButtonArray = new TextureButton[EMBED_TEXTURE_PAINT_ARRAY.length]; + for (int i = 0; i < EMBED_TEXTURE_PAINT_ARRAY.length; i++) { + textureButtonArray[i] = new TextureButton(EMBED_TEXTURE_PAINT_ARRAY[i], EMBED_TEXTURE_PAINT_DES_ARRAY[i]); + patternButtonGroup.add(textureButtonArray[i]); + contentPane.add(textureButtonArray[i]); + } + } + + public void populateBean(Background background) { + TextureBackground textureBackground = (TextureBackground) background; + + this.texturePaint = textureBackground.getTexturePaint(); + + + for (int i = 0; i < textureButtonArray.length; i++) { + if (ComparatorUtils.equals(textureButtonArray[i].getTexturePaint(), this.texturePaint)) { + textureButtonArray[i].setSelected(true); + break; + } + } + } + + public Background updateBean() { + if (this.texturePaint == null) { + textureButtonArray[0].doClick(); + } + return new TextureBackground(this.texturePaint); + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + for (int i = 0, count = textureButtonArray.length; i < count; i++) { + textureButtonArray[i].addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + } + + + /** + * Texture type button. + */ + class TextureButton extends JToggleButton implements ActionListener { + + private TexturePaint buttonTexturePaint; + + public TextureButton(TexturePaint buttonTexturePaint, String tooltip) { + this.buttonTexturePaint = buttonTexturePaint; + this.setToolTipText(tooltip); + + this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + this.addActionListener(this); + this.setBorder(null); + } + + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + + Dimension d = getSize(); + + g2d.setPaint(this.buttonTexturePaint); + GraphHelper.fill(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); + + if (ComparatorUtils.equals(texturePaint, this.buttonTexturePaint)) {// it's + // selected. + g2d.setPaint(UIConstants.LINE_COLOR); + } else { + g2d.setPaint(null); + } + GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, d.height - 1)); + } + + public Dimension getPreferredSize() { + return new Dimension(super.getPreferredSize().width, 20); + } + + public TexturePaint getTexturePaint() { + return this.buttonTexturePaint; + } + + /** + * set Pattern setIndex. + */ + public void actionPerformed(ActionEvent evt) { + TextureBackgroundQuickPane.this.texturePaint = this.getTexturePaint(); + + fireChagneListener(); + TextureBackgroundQuickPane.this.repaint(); // repaint. + } + + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + } + + public static final TexturePaint[] EMBED_TEXTURE_PAINT_ARRAY = new TexturePaint[]{TextureBackground.NEWSPRINT_TEXTURE_PAINT, TextureBackground.RECYCLED_PAPER_TEXTURE_PAINT, + TextureBackground.PARCHMENT_TEXTURE_PAINT, TextureBackground.STATIONERY_TEXTURE_PAINT, TextureBackground.GREEN_MARBLE_TEXTURE_PAINT, + TextureBackground.WHITE_MARBLE_TEXTURE_PAINT, TextureBackground.BROWN_MARBLE_TEXTURE_PAINT, TextureBackground.GRANITE_TEXTURE_PAINT, + TextureBackground.BLUE_TISSUE_PAPER_TEXTURE_PAINT, TextureBackground.PINK_TISSUE_PAPER_TEXTURE_PAINT, TextureBackground.PURPLE_MESH_TEXTURE_PAINT, + TextureBackground.BOUQUET_TEXTURE_PAINT, TextureBackground.PAPYRUS_TEXTURE_PAINT, TextureBackground.CANVAS_TEXTURE_PAINT, TextureBackground.DENIM_TEXTURE_PAINT, + TextureBackground.WOVEN_MAT_TEXTURE_PAINT, TextureBackground.WATER_DROPLETS_TEXTURE_PAINT, TextureBackground.PAPER_BAG_TEXTURE_PAINT, TextureBackground.FISH_FOSSIL_TEXTURE_PAINT, + TextureBackground.SAND_TEXTURE_PAINT, TextureBackground.CORK_TEXTURE_PAINT, TextureBackground.WALNUT_TEXTURE_PAINT, TextureBackground.OAK_TEXTURE_PAINT, + TextureBackground.MEDIUM_WOOD_TEXTURE_PAINT}; + private static final String[] EMBED_TEXTURE_PAINT_DES_ARRAY = new String[]{Inter.getLocText("BackgroundTexture-Newsprint"), Inter.getLocText("BackgroundTexture-RecycledPaper"), + Inter.getLocText("BackgroundTexture-Parchment"), Inter.getLocText("BackgroundTexture-Stationery"), Inter.getLocText("BackgroundTexture-GreenMarble"), + Inter.getLocText("BackgroundTexture-WhiteMarble"), Inter.getLocText("BackgroundTexture-BrownMarble"), Inter.getLocText("BackgroundTexture-Granite"), + Inter.getLocText("BackgroundTexture-BlueTissuePaper"), Inter.getLocText("BackgroundTexture-PinkTissuePaper"), Inter.getLocText("BackgroundTexture-PurpleMesh"), + Inter.getLocText("BackgroundTexture-Bouquet"), Inter.getLocText("BackgroundTexture-Papyrus"), Inter.getLocText("BackgroundTexture-Canvas"), + Inter.getLocText("BackgroundTexture-Denim"), Inter.getLocText("BackgroundTexture-WovenMat"), Inter.getLocText("BackgroundTexture-WaterDroplets"), + Inter.getLocText("BackgroundTexture-PaperBag"), Inter.getLocText("BackgroundTexture-FishFossil"), Inter.getLocText("BackgroundTexture-Sand"), + Inter.getLocText("BackgroundTexture-Cork"), Inter.getLocText("BackgroundTexture-Walnut"), Inter.getLocText("BackgroundTexture-Oak"), + Inter.getLocText("BackgroundTexture-MediumWood")}; + + @Override + public boolean accept(Background background) { + return background instanceof TextureBackground; + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("Background-Texture"); + } } \ 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 561da37f3..4268f7ea1 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -35,6 +35,7 @@ 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; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenu; @@ -272,7 +273,7 @@ public abstract class ToolBarMenuDock { if (!BaseUtils.isAuthorityEditing()) { menuDef.addShortCut( new ConnectionListAction(), - new GlobalTableDataAction() + createGlobalTDAction() ); } @@ -297,6 +298,11 @@ public abstract class ToolBarMenuDock { return menuDef; } + private ShortCut createGlobalTDAction() { + TableDataPaneProcessor processor = ExtraDesignClassManager.getInstance().getTableDataPaneProcessor(); + return processor == null ? new GlobalTableDataAction() : processor.createServerTDAction(); + } + private boolean shouldShowPlugin() { return FRContext.isChineseEnv() || ComparatorUtils.equals(GeneralContext.getLocale(), Locale.TAIWAN); } diff --git a/designer_base/src/com/fr/design/parameter/ParameterArrayPane.java b/designer_base/src/com/fr/design/parameter/ParameterArrayPane.java index 5a36ece13..223c93078 100644 --- a/designer_base/src/com/fr/design/parameter/ParameterArrayPane.java +++ b/designer_base/src/com/fr/design/parameter/ParameterArrayPane.java @@ -2,7 +2,7 @@ package com.fr.design.parameter; import com.fr.base.ConfigManager; import com.fr.base.Parameter; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.NameableSelfCreator; import com.fr.design.gui.controlpane.UnrepeatedNameHelper; @@ -18,7 +18,7 @@ import javax.swing.*; import java.util.Arrays; import java.util.List; -public class ParameterArrayPane extends JControlPane { +public class ParameterArrayPane extends JListControlPane { /** * Constructor. */ diff --git a/designer_base/src/com/fr/design/style/AbstractPopBox.java b/designer_base/src/com/fr/design/style/AbstractPopBox.java index a9001b6b5..4630c51ae 100644 --- a/designer_base/src/com/fr/design/style/AbstractPopBox.java +++ b/designer_base/src/com/fr/design/style/AbstractPopBox.java @@ -2,7 +2,7 @@ package com.fr.design.style; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.style.background.BackgroundJComponent; -import com.fr.design.style.background.gradient.GradientPane; +import com.fr.design.style.background.gradient.GradientBackgroundPane; import com.fr.general.Background; import javax.swing.*; @@ -96,8 +96,8 @@ public abstract class AbstractPopBox extends JPanel { mouseClick(evt); } }; - if (!this.isWindowEventInit && SwingUtilities.getAncestorOfClass(GradientPane.class, this) != null) { - SwingUtilities.getAncestorOfClass(GradientPane.class, this).addMouseListener(parentMouseListener); + if (!this.isWindowEventInit && SwingUtilities.getAncestorOfClass(GradientBackgroundPane.class, this) != null) { + SwingUtilities.getAncestorOfClass(GradientBackgroundPane.class, this).addMouseListener(parentMouseListener); this.isWindowEventInit = true; } } diff --git a/designer_base/src/com/fr/design/style/background/BackgroundDetailPane.java b/designer_base/src/com/fr/design/style/background/BackgroundDetailPane.java new file mode 100644 index 000000000..694f2c8c1 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/BackgroundDetailPane.java @@ -0,0 +1,18 @@ +package com.fr.design.style.background; + +import com.fr.general.Background; + +import javax.swing.*; +import javax.swing.event.ChangeListener; + +/** + * Created by richie on 16/5/18. + */ +public abstract class BackgroundDetailPane extends JPanel { + + public abstract void populate(Background background); + + public abstract Background update() throws Exception; + + public abstract void addChangeListener(ChangeListener changeListener); +} diff --git a/designer_base/src/com/fr/design/style/background/BackgroundFactory.java b/designer_base/src/com/fr/design/style/background/BackgroundFactory.java new file mode 100644 index 000000000..6dd04773a --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/BackgroundFactory.java @@ -0,0 +1,121 @@ +package com.fr.design.style.background; + + +import com.fr.base.background.*; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.fun.BackgroundUIProvider; +import com.fr.design.style.background.gradient.GradientBackgroundPane; +import com.fr.design.style.background.impl.*; +import com.fr.general.Background; +import com.fr.general.Inter; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +/** + * Created by richie on 16/5/18. + */ +public class BackgroundFactory { + + private static Map, BackgroundUIWrapper> map = new LinkedHashMap<>(); + private static Map, BackgroundUIWrapper> browser = new LinkedHashMap<>(); + + static { + registerUniversal(map); + registerImageBackground(map); + registerUniversal(browser); + registerBrowserImageBackground(browser); + registerExtra(map); + registerExtra(browser); + } + + private static void registerUniversal(Map, BackgroundUIWrapper> map) { + map.put(null, BackgroundUIWrapper.create() + .setType(NullBackgroundPane.class).setTitle(Inter.getLocText("Background-Null"))); + map.put(ColorBackground.class, BackgroundUIWrapper.create() + .setType(ColorBackgroundPane.class).setTitle(Inter.getLocText("Color"))); + map.put(TextureBackground.class, BackgroundUIWrapper.create() + .setType(TextureBackgroundPane.class).setTitle(Inter.getLocText("Background-Texture"))); + map.put(PatternBackground.class, BackgroundUIWrapper.create() + .setType(PatternBackgroundPane.class).setTitle(Inter.getLocText("Background-Pattern"))); + map.put(GradientBackground.class, BackgroundUIWrapper.create() + .setType(GradientBackgroundPane.class).setTitle(Inter.getLocText("Gradient-Color"))); + } + + private static void registerImageBackground(Map, BackgroundUIWrapper> map) { + map.put(ImageBackground.class, BackgroundUIWrapper.create() + .setType(ImageBackgroundPane.class).setTitle(Inter.getLocText("Image"))); + } + + private static void registerBrowserImageBackground(Map, BackgroundUIWrapper> map) { + map.put(ImageBackground.class, BackgroundUIWrapper.create() + .setType(ImageBackgroundPane4Browser.class).setTitle(Inter.getLocText("Image"))); + } + + private static void registerExtra(Map, BackgroundUIWrapper> map) { + for (BackgroundUIProvider provider : ExtraDesignClassManager.getInstance().getBackgroundUIProviders()) { + map.put(provider.targetClass(), BackgroundUIWrapper.create() + .setType(provider.targetUIClass()).setTitle(provider.targetTitle())); + } + } + + + public static Set> kindsOfKey() { + return map.keySet(); + } + + public static BackgroundUIWrapper getWrapper(Class category) { + return map.get(category); + } + + public static BackgroundDetailPane createIfAbsent(Class category) { + BackgroundUIWrapper wrapper = map.get(category); + return createByWrapper(wrapper); + } + + public static BackgroundDetailPane createIfAbsent(int index) { + for (BackgroundUIWrapper wrapper : map.values()) { + if (wrapper.getIndex() == index) { + return createByWrapper(wrapper); + } + } + return new NullBackgroundPane(); + } + + public static Set> browserKindsOfKey() { + return browser.keySet(); + } + + public static BackgroundUIWrapper getBrowserWrapper(Class category) { + return browser.get(category); + } + + public static BackgroundDetailPane createBrowserIfAbsent(Class category) { + BackgroundUIWrapper wrapper = browser.get(category); + return createByWrapper(wrapper); + } + + public static BackgroundDetailPane createBrowserIfAbsent(int index) { + for (BackgroundUIWrapper wrapper : browser.values()) { + if (wrapper.getIndex() == index) { + return createByWrapper(wrapper); + } + } + return new NullBackgroundPane(); + } + + private static BackgroundDetailPane createByWrapper(BackgroundUIWrapper wrapper) { + Class clazz = wrapper.getType(); + if (clazz == null) { + clazz = NullBackgroundPane.class; + } + BackgroundDetailPane quickPane; + try { + quickPane = clazz.newInstance(); + } catch (Exception e) { + quickPane = new NullBackgroundPane(); + } + return quickPane; + } +} diff --git a/designer_base/src/com/fr/design/style/background/BackgroundPane.java b/designer_base/src/com/fr/design/style/background/BackgroundPane.java index 679a9a4a1..07a1e2131 100644 --- a/designer_base/src/com/fr/design/style/background/BackgroundPane.java +++ b/designer_base/src/com/fr/design/style/background/BackgroundPane.java @@ -4,87 +4,32 @@ package com.fr.design.style.background; import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.GridLayout; -import java.awt.Image; -import java.awt.LayoutManager; -import java.awt.TexturePaint; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.geom.Rectangle2D; -import java.io.File; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.ButtonGroup; -import javax.swing.JFileChooser; +import java.util.HashMap; +import java.util.Map; import com.fr.design.gui.frpane.UITabbedPane; -import com.fr.design.gui.ibutton.UIRadioButton; -import com.fr.design.gui.ilable.UILabel; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JScrollPane; -import javax.swing.JToggleButton; -import javax.swing.SwingConstants; + import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; -import com.fr.base.BaseUtils; -import com.fr.base.FRContext; -import com.fr.base.GraphHelper; -import com.fr.base.Style; -import com.fr.base.background.ColorBackground; -import com.fr.base.background.GradientBackground; -import com.fr.base.background.ImageBackground; -import com.fr.base.background.PatternBackground; -import com.fr.base.background.TextureBackground; -import com.fr.design.gui.ibutton.UIButton; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.dialog.BasicPane; import com.fr.general.Background; -import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; import com.fr.general.Inter; -import com.fr.stable.Constants; -import com.fr.stable.CoreGraphHelper; -import com.fr.design.style.background.gradient.GradientPane; -import com.fr.design.style.background.image.ImageFileChooser; -import com.fr.design.style.background.image.ImagePreviewPane; -import com.fr.design.style.color.ColorSelectBox; -import com.fr.design.style.color.DetailColorSelectPane; -import com.fr.design.utils.gui.GUICoreUtils; public class BackgroundPane extends BasicPane { - private static final int BACKGROUND_NULL = 0; - private static final int BACKGROUND_COLOR = 1; - private static final int BACKGROUND_TEXTURE = 2; - private static final int BACKGROUND_PATTERN = 3; - private static final int BACKGROUND_IMAGE = 4; - private static final int BACKGROUND_GRADIENT_COLOR = 5; - private UITabbedPane tabbedPane = null; - private NullBackgroundPane nullBackgroundPane = null; - private ColorBackgroundPane colorBackgroundPane = null; - private TextureBackgroundPane textureBackgroundPane = null; - private PatternBackgroundPane patternBackgroundPane = null; - private ImageBackgroundPane imageBackgroundPane = null; - private GradientPane gradientPane = null; + protected UITabbedPane tabbedPane = null; + private EventListenerList eventChangeList = new EventListenerList(); - private static boolean isBrowserBackgroundPane; + protected Map cacheMap = new HashMap<>(); - public BackgroundPane(){ - this(false); - } //需求说: 如果是浏览器背景, 隐藏掉几个button - public BackgroundPane(boolean isBrowserBackgroundPane) { - BackgroundPane.isBrowserBackgroundPane = isBrowserBackgroundPane; + public BackgroundPane() { this.initComponents(); this.setPreferredSize(new Dimension(400, 300)); } @@ -103,16 +48,21 @@ public class BackgroundPane extends BasicPane { tabbedPane = new UITabbedPane(); this.add(tabbedPane, BorderLayout.CENTER); - tabbedPane.addTab(Inter.getLocText("Background-Null"), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); - tabbedPane.addTab(Inter.getLocText("Color"), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); - tabbedPane.addTab(Inter.getLocText("Background-Texture"),FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); - tabbedPane.addTab(Inter.getLocText("Background-Pattern"), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); - tabbedPane.addTab(Inter.getLocText("Image"), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); - tabbedPane.addTab(Inter.getLocText("Gradient-Color"), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); + initTabPane(); + tabbedPane.addChangeListener(backgroundChangeListener); tabbedPane.setPreferredSize(new Dimension(200, 210)); } + protected void initTabPane() { + int index = 0; + for (Class key : BackgroundFactory.kindsOfKey()) { + BackgroundUIWrapper wrapper = BackgroundFactory.getWrapper(key); + wrapper.setIndex(index++); + tabbedPane.addTab(Inter.getLocText(wrapper.getTitle()), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); + } + } + public void addChangeListener(ChangeListener changeListener) { eventChangeList.add(ChangeListener.class, changeListener); } @@ -138,131 +88,65 @@ public class BackgroundPane extends BasicPane { return Inter.getLocText("Background"); } - private NullBackgroundPane getNullBackgroundPane() { - if (this.nullBackgroundPane == null) { - this.nullBackgroundPane = new NullBackgroundPane(); - nullBackgroundPane.addChangeListener(backgroundChangeListener); - } - return this.nullBackgroundPane; - } - private ColorBackgroundPane getColorBackgroundPane() { - if (this.colorBackgroundPane == null) { - this.colorBackgroundPane = new ColorBackgroundPane(); - colorBackgroundPane.addChangeListener(backgroundChangeListener); + protected BackgroundDetailPane getTabItemPane(Background background, int index) { + BackgroundDetailPane quickPane = cacheMap.get(index); + if (quickPane == null) { + quickPane = BackgroundFactory.createIfAbsent(background == null ? null : background.getClass()); + quickPane.addChangeListener(backgroundChangeListener); + cacheMap.put(index, quickPane); } - return this.colorBackgroundPane; + tabbedPane.setComponentAt(index, quickPane); + tabbedPane.setSelectedIndex(index); + return quickPane; } - private TextureBackgroundPane getTextureBackgroundPane() { - if (this.textureBackgroundPane == null) { - this.textureBackgroundPane = new TextureBackgroundPane(); - textureBackgroundPane.addChangeListener(backgroundChangeListener); + protected BackgroundDetailPane getTabItemPaneByIndex(int index) { + BackgroundDetailPane quickPane = cacheMap.get(index); + if (quickPane == null) { + quickPane = BackgroundFactory.createIfAbsent(index); + tabbedPane.setComponentAt(index, quickPane); + cacheMap.put(index, quickPane); + quickPane.addChangeListener(backgroundChangeListener); } - return this.textureBackgroundPane; + return quickPane; } - private PatternBackgroundPane getPatternBackgroundPane() { - if (this.patternBackgroundPane == null) { - this.patternBackgroundPane = new PatternBackgroundPane(); - patternBackgroundPane.addChangeListener(backgroundChangeListener); - } - return this.patternBackgroundPane; - } - - private ImageBackgroundPane getImageBackgroundPane() { - if (this.imageBackgroundPane == null) { - this.imageBackgroundPane = new ImageBackgroundPane(); - imageBackgroundPane.addChangeListener(backgroundChangeListener); - } - return this.imageBackgroundPane; - } - - private GradientPane getGradientPane() { - if (this.gradientPane == null) { - this.gradientPane = new GradientPane(); - gradientPane.addChangeListener(backgroundChangeListener); - } - - return this.gradientPane; - } /** * Populate background. */ public void populate(Background background) { - if (background == null) { - tabbedPane.setComponentAt(0, this.getNullBackgroundPane()); - tabbedPane.setSelectedIndex(0); - nullBackgroundPane.populate(background); - } else { - if (background instanceof ColorBackground) { - tabbedPane.setComponentAt(1, this.getColorBackgroundPane()); - tabbedPane.setSelectedIndex(1); - colorBackgroundPane.populate(background); - } else if (background instanceof TextureBackground) { - tabbedPane.setComponentAt(2, this.getTextureBackgroundPane()); - tabbedPane.setSelectedIndex(2); - textureBackgroundPane.populate(background); - } else if (background instanceof PatternBackground) { - tabbedPane.setComponentAt(3, this.getPatternBackgroundPane()); - tabbedPane.setSelectedIndex(3); - patternBackgroundPane.populate(background); - } else if (background instanceof ImageBackground) { - tabbedPane.setComponentAt(4, this.getImageBackgroundPane()); - tabbedPane.setSelectedIndex(4); - imageBackgroundPane.populate(background); - } else if (background instanceof GradientBackground) { - tabbedPane.setComponentAt(5, this.getGradientPane()); - tabbedPane.setSelectedIndex(5); - gradientPane.populate(background); - } - } + BackgroundUIWrapper wrapper = getBackgroundUIWrapper(background); + int index = wrapper.getIndex(); + BackgroundDetailPane quickPane = getTabItemPane(background, index); + quickPane.populate(background); tabbedPane.doLayout(); tabbedPane.validate(); } + protected BackgroundUIWrapper getBackgroundUIWrapper(Background background) { + return BackgroundFactory.getWrapper(background == null ? null : background.getClass()); + } + /** * Update background. */ public Background update() { + int index = tabbedPane.getSelectedIndex(); + BackgroundDetailPane quickPane = getTabItemPaneByIndex(index); try { - Component selectComponent = tabbedPane.getSelectedComponent(); - if (selectComponent.getClass() == JPanel.class) {//需要初始化. - int selectedIndex = tabbedPane.getSelectedIndex(); - if (selectedIndex == BACKGROUND_NULL) { - selectComponent = this.getNullBackgroundPane(); - } else if (selectedIndex == BACKGROUND_COLOR) { - selectComponent = this.getColorBackgroundPane(); - } else if (selectedIndex == BACKGROUND_TEXTURE) { - selectComponent = this.getTextureBackgroundPane(); - } else if (selectedIndex == BACKGROUND_PATTERN) { - selectComponent = this.getPatternBackgroundPane(); - } else if (selectedIndex == BACKGROUND_IMAGE) { - selectComponent = this.getImageBackgroundPane(); - } else if (selectedIndex == BACKGROUND_GRADIENT_COLOR) { - selectComponent = this.getGradientPane(); - } - - tabbedPane.setComponentAt(selectedIndex, selectComponent); - } - - if (selectComponent instanceof BackgroundSettingPane) { - return ((BackgroundSettingPane) selectComponent).update(); - } else if (selectComponent instanceof GradientPane) { - return ((GradientPane) selectComponent).update(); - } + return quickPane.update(); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + FRLogger.getLogger().error(e.getMessage(), e); } - return null; } /** * Change listener. */ - private ChangeListener backgroundChangeListener = new ChangeListener() { + protected ChangeListener backgroundChangeListener = new ChangeListener() { public void stateChanged(ChangeEvent evt) { previewPane.setBackgroundObject(update()); @@ -271,687 +155,4 @@ public class BackgroundPane extends BasicPane { }; private BackgroundPreviewLabel previewPane = null; - public static abstract class BackgroundSettingPane extends JPanel { - - public abstract void populate(Background background); - - public abstract Background update() throws Exception; - - public abstract void addChangeListener(ChangeListener changeListener); - } - - /** - * Null background pane. - */ - private static class NullBackgroundPane extends BackgroundSettingPane { - - public NullBackgroundPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - UILabel centerLabel = new UILabel( - Inter.getLocText("Background-Background_is_NULL") + "..."); - this.add(centerLabel); - centerLabel.setHorizontalAlignment(SwingConstants.CENTER); - centerLabel.setBorder(BorderFactory.createLineBorder(GUICoreUtils.getTitleLineBorderColor())); - } - - public void populate(Background background) { - // do nothing. - } - - public Background update() throws Exception { - return null; - } - - public void addChangeListener(ChangeListener changeListener) { - // do nothing. - } - } - - /** - * Color background pane. - */ - private static class ColorBackgroundPane extends BackgroundSettingPane { - - private DetailColorSelectPane detailColorSelectPane; - - public ColorBackgroundPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - detailColorSelectPane = new DetailColorSelectPane(); - this.add(detailColorSelectPane, BorderLayout.CENTER); - } - - public void populate(Background background) { - if (background instanceof ColorBackground) { - ColorBackground colorBackgroud = (ColorBackground) background; - this.detailColorSelectPane.populate(colorBackgroud.getColor()); - } else { - this.detailColorSelectPane.populate(Color.white); - } - } - - public Background update() throws Exception { - return ColorBackground.getInstance(this.detailColorSelectPane.update()); - } - - public void addChangeListener(ChangeListener changeListener) { - detailColorSelectPane.addChangeListener(changeListener); - } - } - - private static abstract class BPane extends BackgroundSettingPane { - BPane(int nColumn) { - this.initComponents(nColumn); - } - - private void initComponents(int nColumn) { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); - - JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - this.add(contentPane, BorderLayout.NORTH); -// contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); - - // type type. - - JPanel typePane=FRGUIPaneFactory.createTitledBorderPane(titleOfTypePane()); - contentPane.add(typePane); - JPanel typePane2 = new JPanel(); - typePane.add(typePane2); - typePane2.setLayout(layoutOfTypePane(nColumn)); - setChildrenOfTypePane(typePane2); - - setChildrenOfContentPane(contentPane); - } - - protected abstract String titleOfTypePane(); - protected abstract LayoutManager layoutOfTypePane(int nColumn); - protected abstract void setChildrenOfTypePane(JPanel typePane2); - protected void setChildrenOfContentPane(JPanel contentPane) {} - } - - /** - * Texture background pane. TODO kunsnat: 拆出去. 真特么的长.. - */ - public static class TextureBackgroundPane extends BPane { - - private TexturePaint texturePaint; - private TextureButton[] textureButtonArray; - - public TextureBackgroundPane() { - super(8);// 默认的. - } - - public TextureBackgroundPane(int colum) { - super(colum);// 自定义的. - } - - protected LayoutManager layoutOfTypePane(int nColumn) { - return FRGUIPaneFactory.createNColumnGridLayout(nColumn); - } - - protected String titleOfTypePane() { - return Inter.getLocText("Background-Texture"); - } - protected void setChildrenOfTypePane(JPanel typePane2) { - ButtonGroup patternButtonGroup = new ButtonGroup(); - textureButtonArray = new TextureButton[EMBED_TEXTURE_PAINT_ARRAY.length]; - for (int i = 0; i < EMBED_TEXTURE_PAINT_ARRAY.length; i++) { - textureButtonArray[i] = new TextureButton( - EMBED_TEXTURE_PAINT_ARRAY[i], EMBED_TEXTURE_PAINT_DES_ARRAY[i]); - patternButtonGroup.add(textureButtonArray[i]); - typePane2.add(textureButtonArray[i]); - } - } - - public void populate(Background background) { - if (background instanceof TextureBackground) { - TextureBackground textureBackground = (TextureBackground) background; - - this.texturePaint = textureBackground.getTexturePaint(); - - for (int i = 0; i < textureButtonArray.length; i++) { - if (ComparatorUtils.equals(textureButtonArray[i].getTexturePaint(), this.texturePaint)) { - textureButtonArray[i].setSelected(true); - break; - } - } - } else { - this.textureButtonArray[0].setSelected(true); - this.texturePaint = textureButtonArray[0].getTexturePaint(); - } - } - - public Background update() throws Exception { - return new TextureBackground(this.texturePaint); - } - - public void addChangeListener(ChangeListener changeListener) { - for (int i = 0; i < this.textureButtonArray.length; i++) { - this.textureButtonArray[i].addChangeListener(changeListener); - } - } - - /** - * Texture type button. - */ - class TextureButton extends JToggleButton implements ActionListener { - - private TexturePaint buttonTexturePaint; - - public TextureButton(TexturePaint buttonTexturePaint, String tooltip) { - this.buttonTexturePaint = buttonTexturePaint; - this.setToolTipText(tooltip); - - this.setCursor(new Cursor(Cursor.HAND_CURSOR)); - this.addActionListener(this); - this.setBorder(null); - } - - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - - Dimension d = getSize(); - - g2d.setPaint(this.buttonTexturePaint); - GraphHelper.fill(g2d, new Rectangle2D.Double(0, 0, d.width - 1, - d.height - 1)); - - if (ComparatorUtils.equals(texturePaint, this.buttonTexturePaint)) {// it's - // selected. - g2d.setPaint(Color.black); - } else { - g2d.setPaint(Color.gray); - } - GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, - d.height - 1)); - } - - public Dimension getPreferredSize() { - return new Dimension(36, 32); - } - - public TexturePaint getTexturePaint() { - return this.buttonTexturePaint; - } - - /** - * set Pattern index. - */ - public void actionPerformed(ActionEvent evt) { - TextureBackgroundPane.this.texturePaint = this.getTexturePaint(); - - fireChagneListener(); - TextureBackgroundPane.this.repaint(); // repaint. - } - - public void addChangeListener(ChangeListener changeListener) { - this.changeListener = changeListener; - } - - private void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } - } - } - - public static class PatternBackgroundPaneNoFore extends PatternBackgroundPane { - - public PatternBackgroundPaneNoFore(int nColumn) { - super(nColumn); - } - - // 重载 不加载两个前后按钮 - protected void setChildrenOfContentPane(JPanel contentPane) { - foregroundColorPane = new ColorSelectBox(80); - backgroundColorPane = new ColorSelectBox(80); - foregroundColorPane.setSelectObject(Color.lightGray); - backgroundColorPane.setSelectObject(Color.black); - } - } - - /** - * Pattern background pane. - */ - public static class PatternBackgroundPane extends BPane { - - private int patternIndex = 0; // pattern index. - protected ColorSelectBox foregroundColorPane; - protected ColorSelectBox backgroundColorPane; - private PatternButton[] patternButtonArray; - - public PatternBackgroundPane() { - super(12); - - foregroundColorPane.addSelectChangeListener(colorChangeListener); - backgroundColorPane.addSelectChangeListener(colorChangeListener); - } - - public PatternBackgroundPane(int nColumn) { - super(nColumn); - - if(foregroundColorPane != null) { - foregroundColorPane.addSelectChangeListener(colorChangeListener); - } - if(backgroundColorPane != null) { - backgroundColorPane.addSelectChangeListener(colorChangeListener); - } - } - - protected String titleOfTypePane() { - return Inter.getLocText("Background-Pattern"); - } - protected LayoutManager layoutOfTypePane(int nColumn) { - return FRGUIPaneFactory.createNColumnGridLayout(nColumn); - } - - protected void setChildrenOfTypePane(JPanel typePane2) { - ButtonGroup patternButtonGroup = new ButtonGroup(); - patternButtonArray = new PatternButton[PatternBackground.PATTERN_COUNT]; - for (int i = 0; i < PatternBackground.PATTERN_COUNT; i++) { - patternButtonArray[i] = new PatternButton(i); - patternButtonGroup.add(patternButtonArray[i]); - typePane2.add(patternButtonArray[i]); - } - } - - protected void setChildrenOfContentPane(JPanel contentPane) { - // colors - JPanel colorPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Colors")); - contentPane.add(colorPane); - - foregroundColorPane = new ColorSelectBox(80); - backgroundColorPane = new ColorSelectBox(80); - foregroundColorPane.setSelectObject(Color.lightGray); - backgroundColorPane.setSelectObject(Color.black); - - colorPane.add(Box.createHorizontalStrut(2)); - colorPane.add(this.createLabelColorPane(Inter.getLocText("Foreground") - + ":", foregroundColorPane)); - - colorPane.add(Box.createHorizontalStrut(8)); - - colorPane.add(this.createLabelColorPane(Inter.getLocText("Background") - + ":", backgroundColorPane)); - } - - private JPanel createLabelColorPane(String text, - ColorSelectBox colorPane) { - JPanel labelColorPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - labelColorPane.add(new UILabel(text)); - labelColorPane.add(colorPane); - - return labelColorPane; - } - - public void populate(Background background) { - if (background != null && background instanceof PatternBackground) { - PatternBackground patternBackground = (PatternBackground) background; - int patternIndex = patternBackground.getPatternIndex(); - - if (patternIndex >= 0 - && patternIndex < this.patternButtonArray.length) { - this.patternButtonArray[patternIndex].setSelected(true); - this.patternIndex = patternIndex; - } else { - this.patternIndex = 0; - } - - foregroundColorPane.setSelectObject(patternBackground.getForeground()); - backgroundColorPane.setSelectObject(patternBackground.getBackground()); - } else { - patternIndex = 0; - this.patternButtonArray[0].setSelected(true); - - foregroundColorPane.setSelectObject(Color.lightGray); - backgroundColorPane.setSelectObject(Color.black); - } - } - - public Background update() throws Exception { - return new PatternBackground(patternIndex, foregroundColorPane.getSelectObject(), backgroundColorPane.getSelectObject()); - } - - public void addChangeListener(ChangeListener changeListener) { - foregroundColorPane.addSelectChangeListener(changeListener); - backgroundColorPane.addSelectChangeListener(changeListener); - - for (int i = 0; i < this.patternButtonArray.length; i++) { - this.patternButtonArray[i].addChangeListener(changeListener); - } - } - // Foreground or Background changed. - ChangeListener colorChangeListener = new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - for (int i = 0; i < patternButtonArray.length; i++) { - patternButtonArray[i].setPatternForeground(foregroundColorPane.getSelectObject()); - patternButtonArray[i].setPatternBackground(backgroundColorPane.getSelectObject()); - } - - PatternBackgroundPane.this.repaint();// repaint - } - }; - - /** - * Pattern type button. - */ - class PatternButton extends JToggleButton implements ActionListener { - - public PatternButton(int pIndex) { - this.pIndex = pIndex; - this.addActionListener(this); - - this.setCursor(new Cursor(Cursor.HAND_CURSOR)); - this.setBorder(null); - this.patternBackground = new PatternBackground(this.pIndex, - Color.lightGray, Color.black); - } - - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - - Dimension d = getSize(); - this.patternBackground.paint(g2d, new Rectangle2D.Double(0, 0, - d.width - 1, d.height - 1)); - - if (this.pIndex == patternIndex) {// it's selected. - g2d.setPaint(new Color(255, 51, 0)); - } else { - g2d.setPaint(Color.gray); - } - GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, - d.height - 1)); - } - - public Dimension getPreferredSize() { - return new Dimension(24, 24); - } - - public void setPatternForeground(Color foreground) { - this.patternBackground.setForeground(foreground); - } - - public void setPatternBackground(Color background) { - this.patternBackground.setBackground(background); - } - - /** - * set Pattern index. - */ - public void actionPerformed(ActionEvent evt) { - PatternBackgroundPane.this.patternIndex = pIndex; - - fireChagneListener(); - PatternBackgroundPane.this.repaint();// repaint - } - - public void addChangeListener(ChangeListener changeListener) { - this.changeListener = changeListener; - } - - private void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } - private int pIndex = 0; - private PatternBackground patternBackground; - } - } - - /** - * Image background pane. - */ - private static class ImageBackgroundPane extends BackgroundSettingPane { - - private ImagePreviewPane previewPane = null; - private Style imageStyle = null; - private ChangeListener changeListener = null; - private ImageFileChooser imageFileChooser = null; - private UILabel imageSizeLabel = new UILabel(); - - private JRadioButton defaultRadioButton = null; - private JRadioButton tiledRadioButton = null; - private JRadioButton extendRadioButton = null; - private JRadioButton adjustRadioButton = null; - - public ImageBackgroundPane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - - // preview pane - JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); - this.add(previewContainerPane, BorderLayout.CENTER); - - JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Preview")); - previewOwnerPane.setLayout(new BorderLayout()); - previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER); - - - previewPane = new ImagePreviewPane(); - previewOwnerPane.add(new JScrollPane(previewPane)); - previewPane.addChangeListener(imageSizeChangeListener); - - JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); - previewContainerPane.add(selectFilePane, BorderLayout.EAST); - selectFilePane.setBorder(BorderFactory.createEmptyBorder(8, 2, 4, 0)); - - UIButton selectPictureButton = new UIButton( - Inter.getLocText("Image-Select_Picture")); - selectFilePane.add(selectPictureButton, BorderLayout.NORTH); - selectPictureButton.setMnemonic('S'); - selectPictureButton.addActionListener(selectPictureActionListener); - JPanel layoutPane=FRGUIPaneFactory.createMediumHGapHighTopFlowInnerContainer_M_Pane(); - selectFilePane.add(layoutPane, BorderLayout.CENTER); - - //布局 - defaultRadioButton = new UIRadioButton(Inter.getLocText("Default")); - tiledRadioButton = new UIRadioButton(Inter.getLocText("Image-Titled")); - extendRadioButton = new UIRadioButton(Inter.getLocText("Image-Extend")); - adjustRadioButton = new UIRadioButton(Inter.getLocText("Image-Adjust")); - - defaultRadioButton.addActionListener(layoutActionListener); - tiledRadioButton.addActionListener(layoutActionListener); - extendRadioButton.addActionListener(layoutActionListener); - adjustRadioButton.addActionListener(layoutActionListener); - - JPanel jp = new JPanel(new GridLayout(4, 1, 15, 15)); - jp.add(defaultRadioButton); - jp.add(tiledRadioButton); - if(!isBrowserBackgroundPane){ - jp.add(extendRadioButton); - jp.add(adjustRadioButton); - } - layoutPane.add(jp); - - ButtonGroup layoutBG = new ButtonGroup(); - layoutBG.add(defaultRadioButton); - layoutBG.add(tiledRadioButton); - layoutBG.add(extendRadioButton); - layoutBG.add(adjustRadioButton); - - defaultRadioButton.setSelected(true); - - // init image file chooser. - imageFileChooser = new ImageFileChooser(); - imageFileChooser.setMultiSelectionEnabled(false); - } - /** - * Select picture. - */ - ActionListener selectPictureActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - int returnVal = imageFileChooser.showOpenDialog(ImageBackgroundPane.this); - if (returnVal != JFileChooser.CANCEL_OPTION) { - File selectedFile = imageFileChooser.getSelectedFile(); - - if (selectedFile != null && selectedFile.isFile()) { - Image image = BaseUtils.readImage(selectedFile.getPath()); - CoreGraphHelper.waitForImage(image); - - previewPane.setImage(image); - setImageStyle(); - previewPane.setImageStyle(imageStyle); - previewPane.repaint(); - } else { - previewPane.setImage(null); - } - } - - fireChagneListener(); - } - }; - - private void setImageStyle(){ - if(tiledRadioButton.isSelected()){ - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); - }else if(adjustRadioButton.isSelected()){ - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); - }else if(extendRadioButton.isSelected()){ - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); - }else{ - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); - } - } - - ActionListener layoutActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - setImageStyle(); - changeImageStyle(); - } - - private void changeImageStyle() { - previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); - previewPane.repaint(); - } - }; - - public void populate(Background background) { - - if (background instanceof ImageBackground) { - ImageBackground imageBackground = (ImageBackground) background; - - if (imageBackground.getLayout() == Constants.IMAGE_CENTER) { - defaultRadioButton.setSelected(true); - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); - }else if(imageBackground.getLayout() == Constants.IMAGE_EXTEND){ - extendRadioButton.setSelected(true); - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); - }else if(imageBackground.getLayout() == Constants.IMAGE_ADJUST){ - adjustRadioButton.setSelected(true); - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); - }else { - tiledRadioButton.setSelected(true); - imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); - } - - previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); - if (imageBackground.getImage() != null) { - previewPane.setImage(imageBackground.getImage()); - imageSizeLabel.setText(previewPane.getImage().getWidth(null) - + " X " + previewPane.getImage().getHeight(null)); - } - - if (imageBackground.getImage() != null) { - previewPane.setImage(imageBackground.getImage()); - } - } else { - previewPane.setImage(null); - tiledRadioButton.setSelected(true); - - imageSizeLabel.setText(""); - } - - fireChagneListener(); - } - - public Background update() throws Exception { - ImageBackground imageBackground = new ImageBackground(previewPane.getImage()); - setImageStyle(); - imageBackground.setLayout(imageStyle.getImageLayout()); - return imageBackground; - } - - public void addChangeListener(ChangeListener changeListener) { - this.changeListener = changeListener; - } - - private void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } - ChangeListener imageSizeChangeListener = new ChangeListener() { - - public void stateChanged(ChangeEvent evt) { - Image image = ((ImagePreviewPane) evt.getSource()).getImage(); - - if (image == null) { - imageSizeLabel.setText(""); - } else { - imageSizeLabel.setText(Inter.getLocText(new String[] {"Size", "px"}, new String[] {": " + image.getWidth(null) + "x" + image.getHeight(null)})); - } - } - }; - } - - public static final TexturePaint[] EMBED_TEXTURE_PAINT_ARRAY = new TexturePaint[]{ - TextureBackground.NEWSPRINT_TEXTURE_PAINT, - TextureBackground.RECYCLED_PAPER_TEXTURE_PAINT, - TextureBackground.PARCHMENT_TEXTURE_PAINT, - TextureBackground.STATIONERY_TEXTURE_PAINT, - TextureBackground.GREEN_MARBLE_TEXTURE_PAINT, - TextureBackground.WHITE_MARBLE_TEXTURE_PAINT, - TextureBackground.BROWN_MARBLE_TEXTURE_PAINT, - TextureBackground.GRANITE_TEXTURE_PAINT, - TextureBackground.BLUE_TISSUE_PAPER_TEXTURE_PAINT, - TextureBackground.PINK_TISSUE_PAPER_TEXTURE_PAINT, - TextureBackground.PURPLE_MESH_TEXTURE_PAINT, - TextureBackground.BOUQUET_TEXTURE_PAINT, - TextureBackground.PAPYRUS_TEXTURE_PAINT, - TextureBackground.CANVAS_TEXTURE_PAINT, - TextureBackground.DENIM_TEXTURE_PAINT, - TextureBackground.WOVEN_MAT_TEXTURE_PAINT, - TextureBackground.WATER_DROPLETS_TEXTURE_PAINT, - TextureBackground.PAPER_BAG_TEXTURE_PAINT, - TextureBackground.FISH_FOSSIL_TEXTURE_PAINT, - TextureBackground.SAND_TEXTURE_PAINT, - TextureBackground.CORK_TEXTURE_PAINT, - TextureBackground.WALNUT_TEXTURE_PAINT, - TextureBackground.OAK_TEXTURE_PAINT, - TextureBackground.MEDIUM_WOOD_TEXTURE_PAINT}; - private static final String[] EMBED_TEXTURE_PAINT_DES_ARRAY = new String[]{ - Inter.getLocText("BackgroundTexture-Newsprint"), - Inter.getLocText("BackgroundTexture-RecycledPaper"), - Inter.getLocText("BackgroundTexture-Parchment"), - Inter.getLocText("BackgroundTexture-Stationery"), - Inter.getLocText("BackgroundTexture-GreenMarble"), - Inter.getLocText("BackgroundTexture-WhiteMarble"), - Inter.getLocText("BackgroundTexture-BrownMarble"), - Inter.getLocText("BackgroundTexture-Granite"), - Inter.getLocText("BackgroundTexture-BlueTissuePaper"), - Inter.getLocText("BackgroundTexture-PinkTissuePaper"), - Inter.getLocText("BackgroundTexture-PurpleMesh"), - Inter.getLocText("BackgroundTexture-Bouquet"), - Inter.getLocText("BackgroundTexture-Papyrus"), - Inter.getLocText("BackgroundTexture-Canvas"), - Inter.getLocText("BackgroundTexture-Denim"), - Inter.getLocText("BackgroundTexture-WovenMat"), - Inter.getLocText("BackgroundTexture-WaterDroplets"), - Inter.getLocText("BackgroundTexture-PaperBag"), - Inter.getLocText("BackgroundTexture-FishFossil"), - Inter.getLocText("BackgroundTexture-Sand"), - Inter.getLocText("BackgroundTexture-Cork"), - Inter.getLocText("BackgroundTexture-Walnut"), - Inter.getLocText("BackgroundTexture-Oak"), - Inter.getLocText("BackgroundTexture-MediumWood") - }; } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/background/BackgroundPane4Browser.java b/designer_base/src/com/fr/design/style/background/BackgroundPane4Browser.java new file mode 100644 index 000000000..a1f06f065 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/BackgroundPane4Browser.java @@ -0,0 +1,51 @@ +package com.fr.design.style.background; + +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Background; +import com.fr.general.Inter; + +/** + * Created by richie on 16/5/18. + */ +public class BackgroundPane4Browser extends BackgroundPane { + + public BackgroundPane4Browser() { + super(); + } + + protected void initTabPane() { + int index = 0; + for (Class key : BackgroundFactory.browserKindsOfKey()) { + BackgroundUIWrapper wrapper = BackgroundFactory.getBrowserWrapper(key); + wrapper.setIndex(index++); + tabbedPane.addTab(Inter.getLocText(wrapper.getTitle()), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); + } + } + + protected BackgroundUIWrapper getBackgroundUIWrapper(Background background) { + return BackgroundFactory.getBrowserWrapper(background == null ? null : background.getClass()); + } + + protected BackgroundDetailPane getTabItemPane(Background background, int index) { + BackgroundDetailPane quickPane = cacheMap.get(index); + if (quickPane == null) { + quickPane = BackgroundFactory.createBrowserIfAbsent(background == null ? null : background.getClass()); + quickPane.addChangeListener(backgroundChangeListener); + cacheMap.put(index, quickPane); + } + tabbedPane.setComponentAt(index, quickPane); + tabbedPane.setSelectedIndex(index); + return quickPane; + } + + protected BackgroundDetailPane getTabItemPaneByIndex(int index) { + BackgroundDetailPane quickPane = cacheMap.get(index); + if (quickPane == null) { + quickPane = BackgroundFactory.createBrowserIfAbsent(index); + tabbedPane.setComponentAt(index, quickPane); + cacheMap.put(index, quickPane); + quickPane.addChangeListener(backgroundChangeListener); + } + return quickPane; + } +} diff --git a/designer_base/src/com/fr/design/style/background/BackgroundSelectPane.java b/designer_base/src/com/fr/design/style/background/BackgroundSelectPane.java index 0dc68a8a2..1262d2ab4 100644 --- a/designer_base/src/com/fr/design/style/background/BackgroundSelectPane.java +++ b/designer_base/src/com/fr/design/style/background/BackgroundSelectPane.java @@ -13,7 +13,6 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.dialog.BasicPane; import com.fr.general.Background; import com.fr.general.Inter; -import com.fr.design.style.background.BackgroundPane.BackgroundSettingPane; /** * @author kunsnat E-mail:kunsnat@gmail.com @@ -26,9 +25,9 @@ public abstract class BackgroundSelectPane extends BasicPane { private Background background; private ArrayList listenerList = new ArrayList(); - public abstract BackgroundSettingPane getShowPane(double preWidth); + public abstract BackgroundDetailPane getShowPane(double preWidth); - protected void initBackgroundShowPane(final BackgroundSettingPane backgroundPane) { + protected void initBackgroundShowPane(final BackgroundDetailPane backgroundPane) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); backgroundPane.addChangeListener(new ChangeListener() { diff --git a/designer_base/src/com/fr/design/style/background/BackgroundUIWrapper.java b/designer_base/src/com/fr/design/style/background/BackgroundUIWrapper.java new file mode 100644 index 000000000..9502674a3 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/BackgroundUIWrapper.java @@ -0,0 +1,49 @@ +package com.fr.design.style.background; + +/** + * Created by richie on 16/5/18. + */ +public class BackgroundUIWrapper { + + public static BackgroundUIWrapper create() { + return new BackgroundUIWrapper(); + } + + private int index = -1; + private String title; + private Class clazz; + + private BackgroundUIWrapper() { + + } + + public Class getType() { + return clazz; + } + + public BackgroundUIWrapper setType(Class clazz) { + this.clazz = clazz; + return this; + } + + public String getTitle() { + return title; + } + + public BackgroundUIWrapper setTitle(String title) { + this.title = title; + return this; + } + + public int getIndex() { + return index; + } + + + public BackgroundUIWrapper setIndex(int index) { + if (this.index == -1) { + this.index = index; + } + return this; + } +} diff --git a/designer_base/src/com/fr/design/style/background/gradient/GradientPane.java b/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java similarity index 93% rename from designer_base/src/com/fr/design/style/background/gradient/GradientPane.java rename to designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java index 232b7e225..9ab11eb14 100644 --- a/designer_base/src/com/fr/design/style/background/gradient/GradientPane.java +++ b/designer_base/src/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -1,135 +1,135 @@ -package com.fr.design.style.background.gradient; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.ButtonGroup; - -import com.fr.design.gui.ibutton.UIRadioButton; -import com.fr.design.gui.ilable.UILabel; -import javax.swing.JPanel; -import javax.swing.SwingConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import com.fr.base.background.GradientBackground; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Background; -import com.fr.general.Inter; -import com.fr.design.style.background.BackgroundPane.BackgroundSettingPane; - -/** - * 渐变色的面板,不是很pp,面板应用显得繁琐,有写可以写成控件类型,比如色彩选择的。。,可以做得花哨点 - * @author ben - */ -public class GradientPane extends BackgroundSettingPane { - private static final long serialVersionUID = -6854603990673031897L; - - private UIRadioButton left2right, top2bottom; - private GradientBar gradientBar; - private ChangeListener changeListener = null; - - public GradientPane() { - - // bug 5452 简化GradientPane - JPanel jpanel = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText(new String[]{"Gradient-Color", "Set"})); - jpanel.setPreferredSize(new Dimension(450, 320)); - jpanel.setLayout(new BorderLayout()); - - // neil:增加渐变色拖动条 - JPanel gradientPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - JPanel blankJp = new JPanel(); - gradientBar = new GradientBar(4, 254); - blankJp.add(gradientBar); - UILabel jl = new UILabel(Inter.getLocText("Drag_to_select_gradient")); - jl.setHorizontalAlignment(SwingConstants.CENTER); - gradientPanel.add(jl, BorderLayout.NORTH); - gradientPanel.add(blankJp, BorderLayout.SOUTH); - jpanel.add(gradientPanel, BorderLayout.NORTH); - - JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); - JPanel innercenterPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - centerPane.add(new UILabel(" ")); - centerPane.add(innercenterPane); - innercenterPane.add(new UILabel(Inter.getLocText("Gradient-Direction") + ":")); - - left2right = new UIRadioButton(Inter.getLocText("PageSetup-Landscape")); - innercenterPane.add(left2right); - left2right.setSelected(true); - left2right.addActionListener(reviewListener); - - top2bottom = new UIRadioButton(Inter.getLocText("PageSetup-Portrait")); - innercenterPane.add(top2bottom); - top2bottom.addActionListener(reviewListener); - - ButtonGroup toggle = new ButtonGroup(); - toggle.add(left2right); - toggle.add(top2bottom); - jpanel.add(centerPane, BorderLayout.CENTER); - - this.add(jpanel); - } - - - public void populate(Background background) { - if (!(background instanceof GradientBackground)) { - return; - } - GradientBackground bg = (GradientBackground) background; - this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); - this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); - if (bg.getDirection() == GradientBackground.LEFT2RIGHT) { - left2right.setSelected(true); - } else { - top2bottom.setSelected(true); - } - if (bg.isUseCell()) { - return; - } - double startValue = (double) bg.getBeginPlace(); - double endValue = (double) bg.getFinishPlace(); - gradientBar.setStartValue(startValue); - gradientBar.setEndValue(endValue); - this.gradientBar.repaint(); - } - - public GradientBackground update() { - GradientBackground gb = new GradientBackground( - gradientBar.getSelectColorPointBtnP1().getColorInner(), - gradientBar.getSelectColorPointBtnP2().getColorInner()); - if (left2right.isSelected()) { - gb.setDirection(GradientBackground.LEFT2RIGHT); - } else { - gb.setDirection(GradientBackground.TOP2BOTTOM); - } - if (gradientBar.isOriginalPlace()) { - gb.setUseCell(true); - } else { - gb.setUseCell(false); - gb.setBeginPlace((float) gradientBar.getStartValue()); - gb.setFinishPlace((float) gradientBar.getEndValue()); - } - return gb; - } - - - ActionListener reviewListener = new ActionListener() { - public void actionPerformed(ActionEvent e) { - fireChagneListener(); - } - }; - - public void addChangeListener(ChangeListener changeListener) { - this.changeListener = changeListener; - gradientBar.addChangeListener(changeListener); - } - - public void fireChagneListener() { - if (this.changeListener != null) { - ChangeEvent evt = new ChangeEvent(this); - this.changeListener.stateChanged(evt); - } - } +package com.fr.design.style.background.gradient; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.ButtonGroup; + +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.ilable.UILabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import com.fr.base.background.GradientBackground; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.design.style.background.BackgroundDetailPane; + +/** + * 渐变色的面板,不是很pp,面板应用显得繁琐,有写可以写成控件类型,比如色彩选择的。。,可以做得花哨点 + * @author ben + */ +public class GradientBackgroundPane extends BackgroundDetailPane { + private static final long serialVersionUID = -6854603990673031897L; + + private UIRadioButton left2right, top2bottom; + private GradientBar gradientBar; + private ChangeListener changeListener = null; + + public GradientBackgroundPane() { + + // bug 5452 简化GradientPane + JPanel jpanel = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText(new String[]{"Gradient-Color", "Set"})); + jpanel.setPreferredSize(new Dimension(450, 320)); + jpanel.setLayout(new BorderLayout()); + + // neil:增加渐变色拖动条 + JPanel gradientPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel blankJp = new JPanel(); + gradientBar = new GradientBar(4, 254); + blankJp.add(gradientBar); + UILabel jl = new UILabel(Inter.getLocText("Drag_to_select_gradient")); + jl.setHorizontalAlignment(SwingConstants.CENTER); + gradientPanel.add(jl, BorderLayout.NORTH); + gradientPanel.add(blankJp, BorderLayout.SOUTH); + jpanel.add(gradientPanel, BorderLayout.NORTH); + + JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); + JPanel innercenterPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + centerPane.add(new UILabel(" ")); + centerPane.add(innercenterPane); + innercenterPane.add(new UILabel(Inter.getLocText("Gradient-Direction") + ":")); + + left2right = new UIRadioButton(Inter.getLocText("PageSetup-Landscape")); + innercenterPane.add(left2right); + left2right.setSelected(true); + left2right.addActionListener(reviewListener); + + top2bottom = new UIRadioButton(Inter.getLocText("PageSetup-Portrait")); + innercenterPane.add(top2bottom); + top2bottom.addActionListener(reviewListener); + + ButtonGroup toggle = new ButtonGroup(); + toggle.add(left2right); + toggle.add(top2bottom); + jpanel.add(centerPane, BorderLayout.CENTER); + + this.add(jpanel); + } + + + public void populate(Background background) { + if (!(background instanceof GradientBackground)) { + return; + } + GradientBackground bg = (GradientBackground) background; + this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); + this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); + if (bg.getDirection() == GradientBackground.LEFT2RIGHT) { + left2right.setSelected(true); + } else { + top2bottom.setSelected(true); + } + if (bg.isUseCell()) { + return; + } + double startValue = (double) bg.getBeginPlace(); + double endValue = (double) bg.getFinishPlace(); + gradientBar.setStartValue(startValue); + gradientBar.setEndValue(endValue); + this.gradientBar.repaint(); + } + + public GradientBackground update() { + GradientBackground gb = new GradientBackground( + gradientBar.getSelectColorPointBtnP1().getColorInner(), + gradientBar.getSelectColorPointBtnP2().getColorInner()); + if (left2right.isSelected()) { + gb.setDirection(GradientBackground.LEFT2RIGHT); + } else { + gb.setDirection(GradientBackground.TOP2BOTTOM); + } + if (gradientBar.isOriginalPlace()) { + gb.setUseCell(true); + } else { + gb.setUseCell(false); + gb.setBeginPlace((float) gradientBar.getStartValue()); + gb.setFinishPlace((float) gradientBar.getEndValue()); + } + return gb; + } + + + ActionListener reviewListener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + fireChagneListener(); + } + }; + + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + gradientBar.addChangeListener(changeListener); + } + + public void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/background/impl/BPane.java b/designer_base/src/com/fr/design/style/background/impl/BPane.java new file mode 100644 index 000000000..9a9805a5c --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/BPane.java @@ -0,0 +1,46 @@ +package com.fr.design.style.background.impl; + +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundDetailPane; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by richie on 16/5/18. + */ +public abstract class BPane extends BackgroundDetailPane { + + public BPane(int nColumn) { + this.initComponents(nColumn); + } + + private void initComponents(int nColumn) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + + JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + this.add(contentPane, BorderLayout.NORTH); +// contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); + + // type type. + + JPanel typePane = FRGUIPaneFactory.createTitledBorderPane(titleOfTypePane()); + contentPane.add(typePane); + JPanel typePane2 = new JPanel(); + typePane.add(typePane2); + typePane2.setLayout(layoutOfTypePane(nColumn)); + setChildrenOfTypePane(typePane2); + + setChildrenOfContentPane(contentPane); + } + + protected abstract String titleOfTypePane(); + + protected abstract LayoutManager layoutOfTypePane(int nColumn); + + protected abstract void setChildrenOfTypePane(JPanel typePane2); + + protected void setChildrenOfContentPane(JPanel contentPane) { + } +} diff --git a/designer_base/src/com/fr/design/style/background/impl/ColorBackgroundPane.java b/designer_base/src/com/fr/design/style/background/impl/ColorBackgroundPane.java new file mode 100644 index 000000000..effbe6328 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/ColorBackgroundPane.java @@ -0,0 +1,42 @@ +package com.fr.design.style.background.impl; + +import com.fr.base.background.ColorBackground; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.style.color.DetailColorSelectPane; +import com.fr.general.Background; + +import javax.swing.event.ChangeListener; +import java.awt.*; + +/** + * Color background pane. + */ +public class ColorBackgroundPane extends BackgroundDetailPane { + + private DetailColorSelectPane detailColorSelectPane; + + public ColorBackgroundPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + detailColorSelectPane = new DetailColorSelectPane(); + this.add(detailColorSelectPane, BorderLayout.CENTER); + } + + public void populate(Background background) { + if (background instanceof ColorBackground) { + ColorBackground colorBackgroud = (ColorBackground) background; + this.detailColorSelectPane.populate(colorBackgroud.getColor()); + } else { + this.detailColorSelectPane.populate(Color.white); + } + } + + public Background update() throws Exception { + return ColorBackground.getInstance(this.detailColorSelectPane.update()); + } + + public void addChangeListener(ChangeListener changeListener) { + detailColorSelectPane.addChangeListener(changeListener); + } +} diff --git a/designer_base/src/com/fr/design/style/background/impl/ImageBackgroundPane.java b/designer_base/src/com/fr/design/style/background/impl/ImageBackgroundPane.java new file mode 100644 index 000000000..62ad05485 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/ImageBackgroundPane.java @@ -0,0 +1,230 @@ +package com.fr.design.style.background.impl; + +import com.fr.base.BaseUtils; +import com.fr.base.Style; +import com.fr.base.background.ImageBackground; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.style.background.image.ImageFileChooser; +import com.fr.design.style.background.image.ImagePreviewPane; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.stable.Constants; +import com.fr.stable.CoreGraphHelper; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +/** + * Image background pane. + */ +public class ImageBackgroundPane extends BackgroundDetailPane { + + private ImagePreviewPane previewPane = null; + private Style imageStyle = null; + private ChangeListener changeListener = null; + private ImageFileChooser imageFileChooser = null; + private UILabel imageSizeLabel = new UILabel(); + + protected JRadioButton defaultRadioButton = null; + protected JRadioButton tiledRadioButton = null; + private JRadioButton extendRadioButton = null; + private JRadioButton adjustRadioButton = null; + + public ImageBackgroundPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + // preview pane + JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + this.add(previewContainerPane, BorderLayout.CENTER); + + JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Preview")); + previewOwnerPane.setLayout(new BorderLayout()); + previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER); + + + previewPane = new ImagePreviewPane(); + previewOwnerPane.add(new JScrollPane(previewPane)); + previewPane.addChangeListener(imageSizeChangeListener); + + JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + previewContainerPane.add(selectFilePane, BorderLayout.EAST); + selectFilePane.setBorder(BorderFactory.createEmptyBorder(8, 2, 4, 0)); + + UIButton selectPictureButton = new UIButton( + Inter.getLocText("Image-Select_Picture")); + selectFilePane.add(selectPictureButton, BorderLayout.NORTH); + selectPictureButton.setMnemonic('S'); + selectPictureButton.addActionListener(selectPictureActionListener); + JPanel layoutPane = FRGUIPaneFactory.createMediumHGapHighTopFlowInnerContainer_M_Pane(); + selectFilePane.add(layoutPane, BorderLayout.CENTER); + + //布局 + defaultRadioButton = new UIRadioButton(Inter.getLocText("Default")); + tiledRadioButton = new UIRadioButton(Inter.getLocText("Image-Titled")); + extendRadioButton = new UIRadioButton(Inter.getLocText("Image-Extend")); + adjustRadioButton = new UIRadioButton(Inter.getLocText("Image-Adjust")); + + defaultRadioButton.addActionListener(layoutActionListener); + tiledRadioButton.addActionListener(layoutActionListener); + extendRadioButton.addActionListener(layoutActionListener); + adjustRadioButton.addActionListener(layoutActionListener); + + JPanel jp = new JPanel(new GridLayout(4, 1, 15, 15)); + for (JRadioButton button : imageLayoutButtons()) { + jp.add(button); + } + layoutPane.add(jp); + + ButtonGroup layoutBG = new ButtonGroup(); + layoutBG.add(defaultRadioButton); + layoutBG.add(tiledRadioButton); + layoutBG.add(extendRadioButton); + layoutBG.add(adjustRadioButton); + + defaultRadioButton.setSelected(true); + + // init image file chooser. + imageFileChooser = new ImageFileChooser(); + imageFileChooser.setMultiSelectionEnabled(false); + } + + protected JRadioButton[] imageLayoutButtons() { + return new JRadioButton[]{ + defaultRadioButton, + tiledRadioButton, + extendRadioButton, + adjustRadioButton + }; + } + + /** + * Select picture. + */ + ActionListener selectPictureActionListener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + int returnVal = imageFileChooser.showOpenDialog(ImageBackgroundPane.this); + if (returnVal != JFileChooser.CANCEL_OPTION) { + File selectedFile = imageFileChooser.getSelectedFile(); + + if (selectedFile != null && selectedFile.isFile()) { + Image image = BaseUtils.readImage(selectedFile.getPath()); + CoreGraphHelper.waitForImage(image); + + previewPane.setImage(image); + setImageStyle(); + previewPane.setImageStyle(imageStyle); + previewPane.repaint(); + } else { + previewPane.setImage(null); + } + } + + fireChagneListener(); + } + }; + + private void setImageStyle() { + if (tiledRadioButton.isSelected()) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); + } else if (adjustRadioButton.isSelected()) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); + } else if (extendRadioButton.isSelected()) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); + } else { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); + } + } + + ActionListener layoutActionListener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + setImageStyle(); + changeImageStyle(); + } + + private void changeImageStyle() { + previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); + previewPane.repaint(); + } + }; + + public void populate(Background background) { + + if (background instanceof ImageBackground) { + ImageBackground imageBackground = (ImageBackground) background; + + if (imageBackground.getLayout() == Constants.IMAGE_CENTER) { + defaultRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); + } else if (imageBackground.getLayout() == Constants.IMAGE_EXTEND) { + extendRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); + } else if (imageBackground.getLayout() == Constants.IMAGE_ADJUST) { + adjustRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); + } else { + tiledRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); + } + + previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); + if (imageBackground.getImage() != null) { + previewPane.setImage(imageBackground.getImage()); + imageSizeLabel.setText(previewPane.getImage().getWidth(null) + + " X " + previewPane.getImage().getHeight(null)); + } + + if (imageBackground.getImage() != null) { + previewPane.setImage(imageBackground.getImage()); + } + } else { + previewPane.setImage(null); + tiledRadioButton.setSelected(true); + + imageSizeLabel.setText(""); + } + + fireChagneListener(); + } + + public Background update() throws Exception { + ImageBackground imageBackground = new ImageBackground(previewPane.getImage()); + setImageStyle(); + imageBackground.setLayout(imageStyle.getImageLayout()); + return imageBackground; + } + + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + + ChangeListener imageSizeChangeListener = new ChangeListener() { + + public void stateChanged(ChangeEvent evt) { + Image image = ((ImagePreviewPane) evt.getSource()).getImage(); + + if (image == null) { + imageSizeLabel.setText(""); + } else { + imageSizeLabel.setText(Inter.getLocText(new String[]{"Size", "px"}, new String[]{": " + image.getWidth(null) + "x" + image.getHeight(null)})); + } + } + }; +} diff --git a/designer_base/src/com/fr/design/style/background/impl/ImageBackgroundPane4Browser.java b/designer_base/src/com/fr/design/style/background/impl/ImageBackgroundPane4Browser.java new file mode 100644 index 000000000..4d15f18ac --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/ImageBackgroundPane4Browser.java @@ -0,0 +1,25 @@ +package com.fr.design.style.background.impl; + +import com.fr.stable.ArrayUtils; + +import javax.swing.*; + +/** + * Created by richie on 16/5/18. + */ +public class ImageBackgroundPane4Browser extends ImageBackgroundPane { + + + public ImageBackgroundPane4Browser() { + super(); + } + + @Override + protected JRadioButton[] imageLayoutButtons() { + + return (JRadioButton[]) ArrayUtils.addAll(super.imageLayoutButtons(), new JRadioButton[] { + defaultRadioButton, + tiledRadioButton, + }); + } +} diff --git a/designer_base/src/com/fr/design/style/background/impl/NullBackgroundPane.java b/designer_base/src/com/fr/design/style/background/impl/NullBackgroundPane.java new file mode 100644 index 000000000..ea108019a --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/NullBackgroundPane.java @@ -0,0 +1,39 @@ +package com.fr.design.style.background.impl; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Background; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeListener; + +/** + * Null background pane. + */ +public class NullBackgroundPane extends BackgroundDetailPane { + + public NullBackgroundPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + UILabel centerLabel = new UILabel( + Inter.getLocText("Background-Background_is_NULL") + "..."); + this.add(centerLabel); + centerLabel.setHorizontalAlignment(SwingConstants.CENTER); + centerLabel.setBorder(BorderFactory.createLineBorder(GUICoreUtils.getTitleLineBorderColor())); + } + + public void populate(Background background) { + // do nothing. + } + + public Background update() throws Exception { + return null; + } + + public void addChangeListener(ChangeListener changeListener) { + // do nothing. + } +} diff --git a/designer_base/src/com/fr/design/style/background/impl/PatternBackgroundPane.java b/designer_base/src/com/fr/design/style/background/impl/PatternBackgroundPane.java new file mode 100644 index 000000000..a1481e6d6 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/PatternBackgroundPane.java @@ -0,0 +1,208 @@ +package com.fr.design.style.background.impl; + +import com.fr.base.GraphHelper; +import com.fr.base.background.PatternBackground; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.color.ColorSelectBox; +import com.fr.general.Background; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.geom.Rectangle2D; + +/** + * Pattern background pane. + */ +public class PatternBackgroundPane extends BPane { + + private int patternIndex = 0; // pattern setIndex. + protected ColorSelectBox foregroundColorPane; + protected ColorSelectBox backgroundColorPane; + private PatternButton[] patternButtonArray; + + public PatternBackgroundPane() { + super(12); + + foregroundColorPane.addSelectChangeListener(colorChangeListener); + backgroundColorPane.addSelectChangeListener(colorChangeListener); + } + + public PatternBackgroundPane(int nColumn) { + super(nColumn); + + if(foregroundColorPane != null) { + foregroundColorPane.addSelectChangeListener(colorChangeListener); + } + if(backgroundColorPane != null) { + backgroundColorPane.addSelectChangeListener(colorChangeListener); + } + } + + protected String titleOfTypePane() { + return Inter.getLocText("Background-Pattern"); + } + protected LayoutManager layoutOfTypePane(int nColumn) { + return FRGUIPaneFactory.createNColumnGridLayout(nColumn); + } + + protected void setChildrenOfTypePane(JPanel typePane2) { + ButtonGroup patternButtonGroup = new ButtonGroup(); + patternButtonArray = new PatternButton[PatternBackground.PATTERN_COUNT]; + for (int i = 0; i < PatternBackground.PATTERN_COUNT; i++) { + patternButtonArray[i] = new PatternButton(i); + patternButtonGroup.add(patternButtonArray[i]); + typePane2.add(patternButtonArray[i]); + } + } + + protected void setChildrenOfContentPane(JPanel contentPane) { + // colors + JPanel colorPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Colors")); + contentPane.add(colorPane); + + foregroundColorPane = new ColorSelectBox(80); + backgroundColorPane = new ColorSelectBox(80); + foregroundColorPane.setSelectObject(Color.lightGray); + backgroundColorPane.setSelectObject(Color.black); + + colorPane.add(Box.createHorizontalStrut(2)); + colorPane.add(this.createLabelColorPane(Inter.getLocText("Foreground") + + ":", foregroundColorPane)); + + colorPane.add(Box.createHorizontalStrut(8)); + + colorPane.add(this.createLabelColorPane(Inter.getLocText("Background") + + ":", backgroundColorPane)); + } + + private JPanel createLabelColorPane(String text, + ColorSelectBox colorPane) { + JPanel labelColorPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + labelColorPane.add(new UILabel(text)); + labelColorPane.add(colorPane); + + return labelColorPane; + } + + public void populate(Background background) { + if (background != null && background instanceof PatternBackground) { + PatternBackground patternBackground = (PatternBackground) background; + int patternIndex = patternBackground.getPatternIndex(); + + if (patternIndex >= 0 + && patternIndex < this.patternButtonArray.length) { + this.patternButtonArray[patternIndex].setSelected(true); + this.patternIndex = patternIndex; + } else { + this.patternIndex = 0; + } + + foregroundColorPane.setSelectObject(patternBackground.getForeground()); + backgroundColorPane.setSelectObject(patternBackground.getBackground()); + } else { + patternIndex = 0; + this.patternButtonArray[0].setSelected(true); + + foregroundColorPane.setSelectObject(Color.lightGray); + backgroundColorPane.setSelectObject(Color.black); + } + } + + public Background update() throws Exception { + return new PatternBackground(patternIndex, foregroundColorPane.getSelectObject(), backgroundColorPane.getSelectObject()); + } + + public void addChangeListener(ChangeListener changeListener) { + foregroundColorPane.addSelectChangeListener(changeListener); + backgroundColorPane.addSelectChangeListener(changeListener); + + for (int i = 0; i < this.patternButtonArray.length; i++) { + this.patternButtonArray[i].addChangeListener(changeListener); + } + } + // Foreground or Background changed. + ChangeListener colorChangeListener = new ChangeListener() { + + public void stateChanged(ChangeEvent e) { + for (int i = 0; i < patternButtonArray.length; i++) { + patternButtonArray[i].setPatternForeground(foregroundColorPane.getSelectObject()); + patternButtonArray[i].setPatternBackground(backgroundColorPane.getSelectObject()); + } + + PatternBackgroundPane.this.repaint();// repaint + } + }; + + /** + * Pattern type button. + */ + class PatternButton extends JToggleButton implements ActionListener { + + public PatternButton(int pIndex) { + this.pIndex = pIndex; + this.addActionListener(this); + + this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + this.setBorder(null); + this.patternBackground = new PatternBackground(this.pIndex, + Color.lightGray, Color.black); + } + + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + + Dimension d = getSize(); + this.patternBackground.paint(g2d, new Rectangle2D.Double(0, 0, + d.width - 1, d.height - 1)); + + if (this.pIndex == patternIndex) {// it's selected. + g2d.setPaint(new Color(255, 51, 0)); + } else { + g2d.setPaint(Color.gray); + } + GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, + d.height - 1)); + } + + public Dimension getPreferredSize() { + return new Dimension(24, 24); + } + + public void setPatternForeground(Color foreground) { + this.patternBackground.setForeground(foreground); + } + + public void setPatternBackground(Color background) { + this.patternBackground.setBackground(background); + } + + /** + * set Pattern setIndex. + */ + public void actionPerformed(ActionEvent evt) { + PatternBackgroundPane.this.patternIndex = pIndex; + + fireChagneListener(); + PatternBackgroundPane.this.repaint();// repaint + } + + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + private int pIndex = 0; + private PatternBackground patternBackground; + } +} diff --git a/designer_base/src/com/fr/design/style/background/impl/PatternBackgroundPaneNoFore.java b/designer_base/src/com/fr/design/style/background/impl/PatternBackgroundPaneNoFore.java new file mode 100644 index 000000000..79fdaf389 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/PatternBackgroundPaneNoFore.java @@ -0,0 +1,24 @@ +package com.fr.design.style.background.impl; + +import com.fr.design.style.color.ColorSelectBox; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by richie on 16/5/18. + */ +public class PatternBackgroundPaneNoFore extends PatternBackgroundPane { + + public PatternBackgroundPaneNoFore(int nColumn) { + super(nColumn); + } + + // 重载 不加载两个前后按钮 + protected void setChildrenOfContentPane(JPanel contentPane) { + foregroundColorPane = new ColorSelectBox(80); + backgroundColorPane = new ColorSelectBox(80); + foregroundColorPane.setSelectObject(Color.lightGray); + backgroundColorPane.setSelectObject(Color.black); + } +} diff --git a/designer_base/src/com/fr/design/style/background/impl/TextureBackgroundPane.java b/designer_base/src/com/fr/design/style/background/impl/TextureBackgroundPane.java new file mode 100644 index 000000000..9800675c1 --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/impl/TextureBackgroundPane.java @@ -0,0 +1,197 @@ +package com.fr.design.style.background.impl; + +import com.fr.base.GraphHelper; +import com.fr.base.background.TextureBackground; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Background; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.geom.Rectangle2D; + +/** + * Texture background pane. TODO kunsnat: 拆出去. 真特么的长.. + */ +public class TextureBackgroundPane extends BPane { + + private static final TexturePaint[] EMBED_TEXTURE_PAINT_ARRAY = new TexturePaint[]{ + TextureBackground.NEWSPRINT_TEXTURE_PAINT, + TextureBackground.RECYCLED_PAPER_TEXTURE_PAINT, + TextureBackground.PARCHMENT_TEXTURE_PAINT, + TextureBackground.STATIONERY_TEXTURE_PAINT, + TextureBackground.GREEN_MARBLE_TEXTURE_PAINT, + TextureBackground.WHITE_MARBLE_TEXTURE_PAINT, + TextureBackground.BROWN_MARBLE_TEXTURE_PAINT, + TextureBackground.GRANITE_TEXTURE_PAINT, + TextureBackground.BLUE_TISSUE_PAPER_TEXTURE_PAINT, + TextureBackground.PINK_TISSUE_PAPER_TEXTURE_PAINT, + TextureBackground.PURPLE_MESH_TEXTURE_PAINT, + TextureBackground.BOUQUET_TEXTURE_PAINT, + TextureBackground.PAPYRUS_TEXTURE_PAINT, + TextureBackground.CANVAS_TEXTURE_PAINT, + TextureBackground.DENIM_TEXTURE_PAINT, + TextureBackground.WOVEN_MAT_TEXTURE_PAINT, + TextureBackground.WATER_DROPLETS_TEXTURE_PAINT, + TextureBackground.PAPER_BAG_TEXTURE_PAINT, + TextureBackground.FISH_FOSSIL_TEXTURE_PAINT, + TextureBackground.SAND_TEXTURE_PAINT, + TextureBackground.CORK_TEXTURE_PAINT, + TextureBackground.WALNUT_TEXTURE_PAINT, + TextureBackground.OAK_TEXTURE_PAINT, + TextureBackground.MEDIUM_WOOD_TEXTURE_PAINT}; + + private static final String[] EMBED_TEXTURE_PAINT_DES_ARRAY = new String[]{ + Inter.getLocText("BackgroundTexture-Newsprint"), + Inter.getLocText("BackgroundTexture-RecycledPaper"), + Inter.getLocText("BackgroundTexture-Parchment"), + Inter.getLocText("BackgroundTexture-Stationery"), + Inter.getLocText("BackgroundTexture-GreenMarble"), + Inter.getLocText("BackgroundTexture-WhiteMarble"), + Inter.getLocText("BackgroundTexture-BrownMarble"), + Inter.getLocText("BackgroundTexture-Granite"), + Inter.getLocText("BackgroundTexture-BlueTissuePaper"), + Inter.getLocText("BackgroundTexture-PinkTissuePaper"), + Inter.getLocText("BackgroundTexture-PurpleMesh"), + Inter.getLocText("BackgroundTexture-Bouquet"), + Inter.getLocText("BackgroundTexture-Papyrus"), + Inter.getLocText("BackgroundTexture-Canvas"), + Inter.getLocText("BackgroundTexture-Denim"), + Inter.getLocText("BackgroundTexture-WovenMat"), + Inter.getLocText("BackgroundTexture-WaterDroplets"), + Inter.getLocText("BackgroundTexture-PaperBag"), + Inter.getLocText("BackgroundTexture-FishFossil"), + Inter.getLocText("BackgroundTexture-Sand"), + Inter.getLocText("BackgroundTexture-Cork"), + Inter.getLocText("BackgroundTexture-Walnut"), + Inter.getLocText("BackgroundTexture-Oak"), + Inter.getLocText("BackgroundTexture-MediumWood") + }; + + private TexturePaint texturePaint; + private TextureButton[] textureButtonArray; + + public TextureBackgroundPane() { + super(8);// 默认的. + } + + public TextureBackgroundPane(int colum) { + super(colum);// 自定义的. + } + + protected LayoutManager layoutOfTypePane(int nColumn) { + return FRGUIPaneFactory.createNColumnGridLayout(nColumn); + } + + protected String titleOfTypePane() { + return Inter.getLocText("Background-Texture"); + } + protected void setChildrenOfTypePane(JPanel typePane2) { + ButtonGroup patternButtonGroup = new ButtonGroup(); + textureButtonArray = new TextureButton[EMBED_TEXTURE_PAINT_ARRAY.length]; + for (int i = 0; i < EMBED_TEXTURE_PAINT_ARRAY.length; i++) { + textureButtonArray[i] = new TextureButton( + EMBED_TEXTURE_PAINT_ARRAY[i], EMBED_TEXTURE_PAINT_DES_ARRAY[i]); + patternButtonGroup.add(textureButtonArray[i]); + typePane2.add(textureButtonArray[i]); + } + } + + public void populate(Background background) { + if (background instanceof TextureBackground) { + TextureBackground textureBackground = (TextureBackground) background; + + this.texturePaint = textureBackground.getTexturePaint(); + + for (int i = 0; i < textureButtonArray.length; i++) { + if (ComparatorUtils.equals(textureButtonArray[i].getTexturePaint(), this.texturePaint)) { + textureButtonArray[i].setSelected(true); + break; + } + } + } else { + this.textureButtonArray[0].setSelected(true); + this.texturePaint = textureButtonArray[0].getTexturePaint(); + } + } + + public Background update() throws Exception { + return new TextureBackground(this.texturePaint); + } + + public void addChangeListener(ChangeListener changeListener) { + for (int i = 0; i < this.textureButtonArray.length; i++) { + this.textureButtonArray[i].addChangeListener(changeListener); + } + } + + /** + * Texture type button. + */ + class TextureButton extends JToggleButton implements ActionListener { + + private TexturePaint buttonTexturePaint; + + public TextureButton(TexturePaint buttonTexturePaint, String tooltip) { + this.buttonTexturePaint = buttonTexturePaint; + this.setToolTipText(tooltip); + + this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + this.addActionListener(this); + this.setBorder(null); + } + + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + + Dimension d = getSize(); + + g2d.setPaint(this.buttonTexturePaint); + GraphHelper.fill(g2d, new Rectangle2D.Double(0, 0, d.width - 1, + d.height - 1)); + + if (ComparatorUtils.equals(texturePaint, this.buttonTexturePaint)) {// it's + // selected. + g2d.setPaint(Color.black); + } else { + g2d.setPaint(Color.gray); + } + GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, d.width - 1, + d.height - 1)); + } + + public Dimension getPreferredSize() { + return new Dimension(36, 32); + } + + public TexturePaint getTexturePaint() { + return this.buttonTexturePaint; + } + + /** + * set Pattern setIndex. + */ + public void actionPerformed(ActionEvent evt) { + TextureBackgroundPane.this.texturePaint = this.getTexturePaint(); + + fireChagneListener(); + TextureBackgroundPane.this.repaint(); // repaint. + } + + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + } +} diff --git a/designer_base/src/com/fr/design/style/background/pattern/PatternSelectPane.java b/designer_base/src/com/fr/design/style/background/pattern/PatternSelectPane.java index b8f9ea384..47a352447 100644 --- a/designer_base/src/com/fr/design/style/background/pattern/PatternSelectPane.java +++ b/designer_base/src/com/fr/design/style/background/pattern/PatternSelectPane.java @@ -1,8 +1,8 @@ package com.fr.design.style.background.pattern; import com.fr.general.Inter; -import com.fr.design.style.background.BackgroundPane.BackgroundSettingPane; -import com.fr.design.style.background.BackgroundPane.PatternBackgroundPaneNoFore; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.style.background.impl.PatternBackgroundPaneNoFore; import com.fr.design.style.background.BackgroundSelectPane; @@ -20,7 +20,7 @@ public class PatternSelectPane extends BackgroundSelectPane { } @Override - public BackgroundSettingPane getShowPane(double preWidth) { + public BackgroundDetailPane getShowPane(double preWidth) { // 最少6个. 因为项目太多了. 会拉的很长 int column = Math.max((int)preWidth / 25, 6); return new PatternBackgroundPaneNoFore(column); diff --git a/designer_base/src/com/fr/design/style/background/texture/TextureSelectPane.java b/designer_base/src/com/fr/design/style/background/texture/TextureSelectPane.java index 86d36bbfb..ea7af5bc4 100644 --- a/designer_base/src/com/fr/design/style/background/texture/TextureSelectPane.java +++ b/designer_base/src/com/fr/design/style/background/texture/TextureSelectPane.java @@ -1,8 +1,8 @@ package com.fr.design.style.background.texture; import com.fr.general.Inter; -import com.fr.design.style.background.BackgroundPane.BackgroundSettingPane; -import com.fr.design.style.background.BackgroundPane.TextureBackgroundPane; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.style.background.impl.TextureBackgroundPane; import com.fr.design.style.background.BackgroundSelectPane; @@ -19,7 +19,7 @@ public class TextureSelectPane extends BackgroundSelectPane { initBackgroundShowPane(getShowPane(preWidth)); } - public BackgroundSettingPane getShowPane(double preWidth) { + public BackgroundDetailPane getShowPane(double preWidth) { // 计算合适的列. 至少4个. 最多8个. int column = Math.max((int)preWidth / 40, 4); return new TextureBackgroundPane(column); diff --git a/designer_base/src/com/fr/env/EnvListPane.java b/designer_base/src/com/fr/env/EnvListPane.java index a59d6ba91..0f8121582 100644 --- a/designer_base/src/com/fr/env/EnvListPane.java +++ b/designer_base/src/com/fr/env/EnvListPane.java @@ -41,7 +41,7 @@ import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; import com.fr.design.beans.BasicBeanPane; import com.fr.design.dialog.InformationWarnPane; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.ipasswordfield.UIPassWordField; @@ -63,7 +63,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; -public class EnvListPane extends JControlPane { +public class EnvListPane extends JListControlPane { public EnvListPane() { super(); addEditingListner(new PropertyChangeAdapter() { diff --git a/designer_chart/src/com/fr/design/chart/ChartControlPane.java b/designer_chart/src/com/fr/design/chart/ChartControlPane.java index 390d780fb..1ac74dbea 100644 --- a/designer_chart/src/com/fr/design/chart/ChartControlPane.java +++ b/designer_chart/src/com/fr/design/chart/ChartControlPane.java @@ -3,7 +3,7 @@ package com.fr.design.chart; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.ChartCollection; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.layout.FRGUIPaneFactory; @@ -18,7 +18,7 @@ import java.util.HashMap; * 管理图表类型Pane * @author kunsnat: ChartComponent移出. */ -public class ChartControlPane extends JControlPane { +public class ChartControlPane extends JListControlPane { private static final long serialVersionUID = 7336270815128413184L; public ChartControlPane() { diff --git a/designer_chart/src/com/fr/design/chart/axis/ChartAlertLinePane.java b/designer_chart/src/com/fr/design/chart/axis/ChartAlertLinePane.java index 28a06e22a..e6bde825a 100644 --- a/designer_chart/src/com/fr/design/chart/axis/ChartAlertLinePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/ChartAlertLinePane.java @@ -4,14 +4,14 @@ import com.fr.general.Inter; import com.fr.general.NameObject; import com.fr.stable.Nameable; import com.fr.chart.chartattr.ChartAlertValue; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import java.util.ArrayList; import java.util.List; -public class ChartAlertLinePane extends JControlPane { +public class ChartAlertLinePane extends JListControlPane { public NameableCreator[] createNameableCreators() { return new NameableCreator[]{ diff --git a/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java b/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java index e2afed994..a91914396 100644 --- a/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java +++ b/designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java @@ -22,7 +22,7 @@ public interface IndependentChartUIProvider extends Level { String XML_TAG = "IndependentChartUIProvider"; - int CURRENT_API_LEVEL = 2; + int CURRENT_API_LEVEL = 3; /** * 图表的类型定义界面类型,就是属性表的第一个界面 diff --git a/designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java b/designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java index b1361b21f..ffe91cd0d 100644 --- a/designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java +++ b/designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java @@ -15,9 +15,13 @@ import com.fr.general.ComparatorUtils; * Created by Mitisky on 16/3/7. */ public abstract class AbstractIndependentChartUIWithAPILevel implements IndependentChartUIProvider { + private static final int OLD_PLUGIN_LEVEL = -2; + @Override + //以前的插件没有覆写这个方法,所以始终获取到-2,比当前level低,提示更新. + //新的插件编译进去的是当前LEVEL,当之后LEVEL增加,会比编译进去的LEVEL大,提示更新. public int currentAPILevel() { - return CURRENT_API_LEVEL; + return OLD_PLUGIN_LEVEL; } public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesAttrPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesAttrPane.java index 7fb006c84..a5f8b6d0a 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesAttrPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/DataSeriesAttrPane.java @@ -7,7 +7,7 @@ import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.design.chart.series.SeriesCondition.impl.DataSeriesConditionPaneFactory; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; @@ -20,7 +20,7 @@ import java.util.List; * * @see DataSeriesConditionPane */ -public class DataSeriesAttrPane extends JControlPane { +public class DataSeriesAttrPane extends JListControlPane { private static final long serialVersionUID = -7265389532959632525L; private Plot plot; diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/TrendLineControlPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/TrendLineControlPane.java index 583d2c3bd..b59c5df6b 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/TrendLineControlPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/TrendLineControlPane.java @@ -5,14 +5,14 @@ import com.fr.general.NameObject; import com.fr.stable.Nameable; import com.fr.chart.base.AttrTrendLine; import com.fr.chart.base.ConditionTrendLine; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import java.util.ArrayList; import java.util.List; -public class TrendLineControlPane extends JControlPane { +public class TrendLineControlPane extends JListControlPane { public NameableCreator[] createNameableCreators() { return new NameableCreator[] { diff --git a/designer_chart/src/com/fr/design/mainframe/MapArrayPane.java b/designer_chart/src/com/fr/design/mainframe/MapArrayPane.java index 14926e71c..3dd189d30 100644 --- a/designer_chart/src/com/fr/design/mainframe/MapArrayPane.java +++ b/designer_chart/src/com/fr/design/mainframe/MapArrayPane.java @@ -32,7 +32,7 @@ import java.util.List; * Date: 14/12/3 * Time: 上午10:00 */ -public class MapArrayPane extends JControlPane { +public class MapArrayPane extends JListControlPane { private static final int LEFT_WIDTH = 180; private static final Color LINE_COLOR = new Color(176, 176, 176); private static final int TOP_GAP = 5; diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/MeterPlotReportDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/MeterPlotReportDataContentPane.java index e4001079b..b785373bc 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/MeterPlotReportDataContentPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/report/MeterPlotReportDataContentPane.java @@ -46,7 +46,7 @@ public class MeterPlotReportDataContentPane extends AbstractReportDataContentPan double[] rowSize = { p, p, p}; Component[][] components = new Component[][]{ - new Component[]{new UILabel(CATENAME), singCatePane = new TinyFormulaPane()}, + new Component[]{new UILabel(CATENAME), getSingCatePane()}, new Component[]{new UILabel(NVALUE), singValuePane = new TinyFormulaPane()}, new Component[]{null, null} }; @@ -73,7 +73,7 @@ public class MeterPlotReportDataContentPane extends AbstractReportDataContentPan MeterReportDefinition meterDefinition = (MeterReportDefinition)definition; if (meterDefinition.getName() != null) { - singCatePane.getUITextField().setText(meterDefinition.getName().toString()); + populateSingCatePane(meterDefinition.getName().toString()); } if (meterDefinition.getValue() != null) { singValuePane.getUITextField().setText(meterDefinition.getValue().toString()); @@ -82,13 +82,18 @@ public class MeterPlotReportDataContentPane extends AbstractReportDataContentPan filterPane.populateBean(collection); } - - public void updateBean(ChartCollection collection) { + + protected void populateSingCatePane(String name) { + singCatePane.getUITextField().setText(name); + } + + public void updateBean(ChartCollection collection) { if (collection != null) { MeterReportDefinition meterDefinition = new MeterReportDefinition(); - - meterDefinition.setName(canBeFormula(singCatePane.getUITextField().getText())); + + updateSingCatePane(meterDefinition); + meterDefinition.setValue(canBeFormula(singValuePane.getUITextField().getText())); collection.getSelectedChart().setFilterDefinition(meterDefinition); @@ -96,10 +101,19 @@ public class MeterPlotReportDataContentPane extends AbstractReportDataContentPan filterPane.updateBean(collection); } } - - @Override + + protected void updateSingCatePane(MeterReportDefinition meterDefinition) { + + meterDefinition.setName(canBeFormula(singCatePane.getUITextField().getText())); + + } + + @Override protected String[] columnNames() { return new String[]{"", ""}; } + protected Component getSingCatePane() { + return singCatePane = new TinyFormulaPane(); + } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/MeterPlotTableDataContentPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/MeterPlotTableDataContentPane.java index 5ea4e8fe6..a12f4370a 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/MeterPlotTableDataContentPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/MeterPlotTableDataContentPane.java @@ -49,14 +49,7 @@ public class MeterPlotTableDataContentPane extends AbstractTableDataContentPane double[] columnSize = { p,f}; double[] rowSize = { p, p,p,p,p,p,p,p, p}; - Component[][] components = new Component[][]{ - new Component[]{new BoldFontTextLabel(METER_NAME, SwingConstants.RIGHT), nameBox}, - new Component[]{new BoldFontTextLabel(METER_VALUE, SwingConstants.RIGHT), valueBox}, - new Component[]{new JSeparator(), null}, - new Component[]{new BoldFontTextLabel(Inter.getLocText("Chart-Data_Filter"))}, - new Component[]{filterPane, null} - - } ; + Component[][] components = createComponents(); JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); this.add(panel,BorderLayout.CENTER); @@ -65,7 +58,17 @@ public class MeterPlotTableDataContentPane extends AbstractTableDataContentPane valueBox.addItemListener(tooltipListener); } - protected void refreshBoxListWithSelectTableData(List list) { + private Component[][] createComponents() { + return new Component[][]{ + new Component[]{new BoldFontTextLabel(METER_NAME, SwingConstants.RIGHT), getNameComponent()}, + new Component[]{new BoldFontTextLabel(METER_VALUE, SwingConstants.RIGHT), valueBox}, + new Component[]{new JSeparator(), null}, + new Component[]{new BoldFontTextLabel(Inter.getLocText("Chart-Data_Filter"))}, + new Component[]{filterPane, null} + }; + } + + protected void refreshBoxListWithSelectTableData(List list) { refreshBoxItems(nameBox, list); refreshBoxItems(valueBox, list); } @@ -84,28 +87,42 @@ public class MeterPlotTableDataContentPane extends AbstractTableDataContentPane public void populateBean(ChartCollection ob) { if(ob != null && ob.getSelectedChart().getFilterDefinition() instanceof MeterTableDefinition) { MeterTableDefinition meter = (MeterTableDefinition)ob.getSelectedChart().getFilterDefinition(); - - nameBox.setSelectedItem(meter.getName()); + + populateNameComponent(meter); + valueBox.setSelectedItem(meter.getValue()); filterPane.populateBean(ob); } } - /** + protected void populateNameComponent(MeterTableDefinition meter) { + nameBox.setSelectedItem(meter.getName()); + } + + /** * 保存界面属性. */ public void updateBean(ChartCollection ob) { if(ob != null) { - MeterTableDefinition meter = new MeterTableDefinition(); + MeterTableDefinition meter = getMeterTableDefinition(); ob.getSelectedChart().setFilterDefinition(meter); - meter.setName(Utils.objectToString(nameBox.getSelectedItem())); + updateNameComponent(meter); + meter.setValue(Utils.objectToString(valueBox.getSelectedItem())); filterPane.updateBean(ob); } } - /** + protected MeterTableDefinition getMeterTableDefinition(){ + return new MeterTableDefinition(); + } + + protected void updateNameComponent(MeterTableDefinition meter) { + meter.setName(Utils.objectToString(nameBox.getSelectedItem())); + } + + /** * 重新布局整个面板 */ public void redoLayoutPane(){ @@ -113,4 +130,7 @@ public class MeterPlotTableDataContentPane extends AbstractTableDataContentPane } + protected Component getNameComponent() { + return nameBox; + } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java index 8e6784d92..b8fb5ae74 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java @@ -89,15 +89,25 @@ public class SeriesNameUseFieldNamePane extends FurtherBasicBeanPane data = seriesDataPane.updateBean(); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java index f068bbbdd..2d5099db4 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldValuePane.java @@ -82,13 +82,7 @@ public class SeriesNameUseFieldValuePane extends FurtherBasicBeanPane { @Override protected List> initPaneList() { - nameFieldValuePane = new SeriesNameUseFieldValuePane(); - nameFieldNamePane = new SeriesNameUseFieldNamePane(); + nameFieldValuePane = createValuePane(); + nameFieldNamePane = createNamePane(); List> paneList = new ArrayList>(); paneList.add(nameFieldValuePane); paneList.add(nameFieldNamePane); return paneList; } + protected SeriesNameUseFieldValuePane createValuePane() { + return new SeriesNameUseFieldValuePane(); + } + + protected SeriesNameUseFieldNamePane createNamePane() { + return new SeriesNameUseFieldNamePane(); + } + public void populateBean(ChartCollection ob, boolean isNeedSummary) { this.isNeedSummary = isNeedSummary; TopDefinitionProvider definition = ob.getSelectedChart().getFilterDefinition(); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundNoImagePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundNoImagePane.java index 447ba1107..439d2efe6 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundNoImagePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundNoImagePane.java @@ -1,8 +1,8 @@ package com.fr.design.mainframe.chart.gui.style; -import com.fr.design.gui.style.GradientPane; -import com.fr.design.mainframe.backgroundpane.ColorBackgroundPane; -import com.fr.design.mainframe.backgroundpane.NullBackgroundPane; +import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.GradientBackgroundQuickPane; +import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; /** * 背景界面, 无图片和纹理选项. @@ -16,8 +16,8 @@ public class ChartBackgroundNoImagePane extends ChartBackgroundPane { } protected void initList() { - paneList.add(new NullBackgroundPane()); - paneList.add(new ColorBackgroundPane()); - paneList.add(new GradientPane(CHART_GRADIENT_WIDTH)); + paneList.add(new NullBackgroundQuickPane()); + paneList.add(new ColorBackgroundQuickPane()); + paneList.add(new GradientBackgroundQuickPane(CHART_GRADIENT_WIDTH)); } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundPane.java index 7cbffadfd..13c4269e8 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartBackgroundPane.java @@ -4,13 +4,9 @@ import com.fr.chart.chartglyph.GeneralInfo; import com.fr.design.gui.frpane.UINumberDragPane; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.style.GradientPane; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.backgroundpane.BackgroundSettingPane; -import com.fr.design.mainframe.backgroundpane.ColorBackgroundPane; -import com.fr.design.mainframe.backgroundpane.ImageBackgroundPane; -import com.fr.design.mainframe.backgroundpane.NullBackgroundPane; +import com.fr.design.mainframe.backgroundpane.*; import com.fr.design.dialog.BasicPane; import com.fr.general.Background; import com.fr.general.Inter; @@ -33,7 +29,7 @@ public class ChartBackgroundPane extends BasicPane{ private static final long serialVersionUID = 6955952013135176051L; private static final double ALPHA_V = 100.0; protected static final int CHART_GRADIENT_WIDTH = 150; - protected List paneList; + protected List paneList; private UIComboBox typeComboBox; private UINumberDragPane transparent; @@ -41,7 +37,7 @@ public class ChartBackgroundPane extends BasicPane{ public ChartBackgroundPane() { typeComboBox = new UIComboBox(); final CardLayout cardlayout = new CardLayout(); - paneList = new ArrayList(); + paneList = new ArrayList(); initList(); @@ -54,7 +50,7 @@ public class ChartBackgroundPane extends BasicPane{ } }; for (int i = 0; i < paneList.size(); i++) { - BackgroundSettingPane pane = paneList.get(i); + BackgroundQuickPane pane = paneList.get(i); typeComboBox.addItem(pane.title4PopupWindow()); centerPane.add(pane, pane.title4PopupWindow()); } @@ -89,10 +85,10 @@ public class ChartBackgroundPane extends BasicPane{ } protected void initList() { - paneList.add(new NullBackgroundPane()); - paneList.add(new ColorBackgroundPane()); - paneList.add(new ImageBackgroundPane()); - paneList.add(new GradientPane(CHART_GRADIENT_WIDTH)); + paneList.add(new NullBackgroundQuickPane()); + paneList.add(new ColorBackgroundQuickPane()); + paneList.add(new ImageBackgroundQuickPane()); + paneList.add(new GradientBackgroundQuickPane(CHART_GRADIENT_WIDTH)); } /** @@ -127,7 +123,7 @@ public class ChartBackgroundPane extends BasicPane{ double alpha = attr.getAlpha() * ALPHA_V; transparent.populateBean(alpha); for (int i = 0; i < paneList.size(); i++) { - BackgroundSettingPane pane = paneList.get(i); + BackgroundQuickPane pane = paneList.get(i); if (pane.accept(background)) { pane.populateBean(background); typeComboBox.setSelectedIndex(i); diff --git a/designer_chart/src/com/fr/design/module/ChartPreStyleManagerPane.java b/designer_chart/src/com/fr/design/module/ChartPreStyleManagerPane.java index 5d1b246d4..87d9577bd 100644 --- a/designer_chart/src/com/fr/design/module/ChartPreStyleManagerPane.java +++ b/designer_chart/src/com/fr/design/module/ChartPreStyleManagerPane.java @@ -4,7 +4,7 @@ import com.fr.base.ChartPreStyleManagerProvider; import com.fr.base.ChartPreStyleServerManager; import com.fr.base.Utils; import com.fr.chart.base.ChartPreStyle; -import com.fr.design.gui.controlpane.JControlPane; +import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.mainframe.DesignerContext; @@ -22,7 +22,7 @@ import java.util.Iterator; * @author kunsnat E-mail:kunsnat@gmail.com * @version 创建时间:2013-8-21 下午02:33:48 */ -public class ChartPreStyleManagerPane extends JControlPane { +public class ChartPreStyleManagerPane extends JListControlPane { @Override /**