diff --git a/designer_base/src/com/fr/design/dialog/BasicDialog.java b/designer_base/src/com/fr/design/dialog/BasicDialog.java index 703b19205..bc9ec749d 100644 --- a/designer_base/src/com/fr/design/dialog/BasicDialog.java +++ b/designer_base/src/com/fr/design/dialog/BasicDialog.java @@ -13,6 +13,7 @@ public abstract class BasicDialog extends UIDialog { public static final Dimension CHART = new Dimension(760, 560); public static final Dimension MAP_SIZE = new Dimension(760, 450); public static final Dimension UPDATE_ONLINE_SIZE = new Dimension(600,300); + public static final Dimension TOOLBAR_SIZE = new Dimension(660, 327); public BasicDialog(Frame parent) { super(parent); diff --git a/designer_base/src/com/fr/design/dialog/BasicPane.java b/designer_base/src/com/fr/design/dialog/BasicPane.java index eb1b41305..05c6a84f2 100644 --- a/designer_base/src/com/fr/design/dialog/BasicPane.java +++ b/designer_base/src/com/fr/design/dialog/BasicPane.java @@ -251,6 +251,30 @@ public abstract class BasicPane extends JPanel { return dg; } + /** + * 显示窗口 + * + * @param window 窗口 + * @param l 对话框监听器 + * @return 对话框 + */ + public BasicDialog showToolBarWindow(Window window, DialogActionListener l) { + BasicDialog dg; + if (window instanceof Frame) { + dg = new DIALOG((Frame) window); + } else { + dg = new DIALOG((Dialog) window); + } + + if (l != null) { + dg.addDialogActionListener(l); + } + dg.setBasicDialogSize(BasicDialog.TOOLBAR_SIZE); + GUICoreUtils.centerWindow(dg); + dg.setResizable(false); + return dg; + } + protected abstract String title4PopupWindow(); public String getTitle() { diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index a932548cc..f30ddb758 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -11,6 +11,7 @@ import com.fr.design.fun.impl.AbstractFormElementCaseEditorProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.*; import com.fr.design.mainframe.widget.editors.BooleanEditor; +import com.fr.design.mainframe.widget.editors.ECToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; @@ -92,11 +93,12 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public void propertyChange() { initStyle(); } + }), new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) .setI18NName(Inter.getLocText("FR-Layout_Padding")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) + new CRPropertyDescriptor("ToolBars", this.data.getClass()).setEditorClass(ECToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; diff --git a/designer_form/src/com/fr/design/mainframe/FEditToolBar.java b/designer_form/src/com/fr/design/mainframe/FEditToolBar.java new file mode 100644 index 000000000..4ca4ab9c1 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FEditToolBar.java @@ -0,0 +1,481 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.javascript.JavaScriptActionPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.style.background.BackgroundPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.widget.IconDefinePane; +import com.fr.form.ui.*; +import com.fr.form.ui.Button; +import com.fr.form.web.button.Export; +import com.fr.general.Background; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +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.ActionListener; +import java.util.*; + +/** + * Created by harry on 2017-3-2. + */ +public class FEditToolBar extends BasicPane { + + private JList list; + private DefaultListModel listModel; + private JPanel right; + private CardLayout card; + private ButtonPane bp; + private FToolBarButton lastButton; + private Background background = null; + private UICheckBox defaultCheckBox; + + private ListSelectionListener listSelectionListener = new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + if (lastButton != null) { + lastButton.setWidget(bp.update()); + } + if (list.getSelectedValue() instanceof FToolBarButton) { + lastButton = (FToolBarButton) list.getSelectedValue(); + if (lastButton.getWidget() instanceof Button) { + card.show(right, "button"); + bp.populate(lastButton.getWidget()); + } else { + bp.populate(lastButton.getWidget()); + card.show(right, "none"); + } + } + } + }; + + + private ActionListener actioner = new ActionListener() { + /** + * + */ + public void actionPerformed(ActionEvent arg0) { + final BackgroundPane backgroundPane = new BackgroundPane(); + BasicDialog dialog = backgroundPane.showWindow(DesignerContext.getDesignerFrame()); + backgroundPane.populate(FEditToolBar.this.background); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + FEditToolBar.this.background = backgroundPane.update(); + if (FEditToolBar.this.background != null) { + FEditToolBar.this.defaultCheckBox.setSelected(false); + } + } + }); + dialog.setVisible(true); + } + }; + + public FEditToolBar() { + initComponent(); + } + + /** + * 初始化 + */ + public void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel left = FRGUIPaneFactory.createBorderLayout_S_Pane(); + listModel = new DefaultListModel(); + list = new JList(listModel); + list.setCellRenderer(render); + left.add(new JScrollPane(list), BorderLayout.CENTER); + if (listModel.getSize() > 0) { + list.setSelectedIndex(0); + } + + ToolBarDef toolbarDef = new ToolBarDef(); + toolbarDef.addShortCut(new MoveUpItemAction()); + toolbarDef.addShortCut(new MoveDownItemAction()); + toolbarDef.addShortCut(new RemoveAction()); + UIToolbar toolBar = ToolBarDef.createJToolBar(); + toolbarDef.updateToolBar(toolBar); + left.add(toolBar, BorderLayout.NORTH); + + right = FRGUIPaneFactory.createCardLayout_S_Pane(); + card = new CardLayout(); + right.setLayout(card); + bp = new ButtonPane(); + right.add("none", FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane()); + right.add("button", bp); + + JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, left, right); + // splitPane.setDividerLocation(left.getMinimumSize().width); + splitPane.setDividerLocation(120); + this.add(splitPane); + list.addListSelectionListener(listSelectionListener); + JPanel backgroundPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + UIButton bgButton = new UIButton(Inter.getLocText(new String[]{"Background", "Set"})); + defaultCheckBox = new UICheckBox(Inter.getLocText(new String[]{"Default", "Background"})); + bgButton.addActionListener(actioner); + backgroundPane.add(defaultCheckBox); + backgroundPane.add(bgButton); + backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Background", "Set"}))); + this.add(backgroundPane, BorderLayout.SOUTH); + } + + ListCellRenderer render = new DefaultListCellRenderer() { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + + if (value instanceof FToolBarButton) { + FToolBarButton button = (FToolBarButton) value; + this.setText(button.getNameOption().optionName()); + this.setIcon(button.getNameOption().optionIcon()); + } + return this; + } + }; + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Edit"); + } + + public void populate(FToolBar ftoolbar) { + this.populate(ftoolbar, null); + } + + public void populate(FToolBar ftoolbar, FToolBarButton button) { + if (ftoolbar == null) { + return; + } + for (int i = 0; i < ftoolbar.getButtonlist().size(); i++) { + listModel.addElement(ftoolbar.getButtonlist().get(i)); + } + this.list.validate(); + this.list.repaint(); + if (ftoolbar.getButtonlist().size() > 0) { + this.list.setSelectedIndex(0); + } + if (button != null) { + this.list.setSelectedValue(button, true); + } + this.background = ftoolbar.getBackground(); + + this.defaultCheckBox.setSelected(ftoolbar.isDefault() ? true : false); + } + + public FToolBar update() { + if (this.list.getSelectedIndex() > -1) { + for (int i = 0; i < listModel.getSize(); i++) { + this.list.setSelectedIndex(i); + FToolBarButton toolBarButton = (FToolBarButton) this.list.getSelectedValue(); + Widget widget = this.bp.update(); + toolBarButton.setWidget(widget); + if (widget instanceof Button) { + String iconname = ((Button) widget).getIconName(); + if (StringUtils.isNotBlank(iconname)) { + Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconname); + toolBarButton.setIcon(new ImageIcon(iimage)); + } + } + } + } + java.util.List list = new ArrayList(); + for (int i = 0; i < listModel.size(); i++) { + list.add((FToolBarButton) listModel.get(i)); + } + FToolBar ftoolBar = new FToolBar(); + ftoolBar.setButtonlist(list); + + ftoolBar.setDefault(this.defaultCheckBox.isSelected()); + if (!ftoolBar.isDefault()) { + ftoolBar.setBackground(this.background); + } + return ftoolBar; + } + + private class MoveUpItemAction extends UpdateAction { + public MoveUpItemAction() { + this.setName(Inter.getLocText("Utils-Move_Up")); + this.setMnemonic('U'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + } + + /** + * + */ + public void actionPerformed(ActionEvent evt) { + int selectedIndex = list.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 上移 + if (selectedIndex > 0) { + DefaultListModel listModel = (DefaultListModel) list.getModel(); + + Object selecteObj1 = listModel.get(selectedIndex - 1); + listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + list.setSelectedIndex(selectedIndex - 1); + list.ensureIndexIsVisible(selectedIndex - 1); + list.validate(); + } + } + } + + private class MoveDownItemAction extends UpdateAction { + public MoveDownItemAction() { + this.setName(Inter.getLocText("Utils-Move_Down")); + this.setMnemonic('D'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + } + + /** + * + */ + public void actionPerformed(ActionEvent evt) { + int selectedIndex = list.getSelectedIndex(); + if (selectedIndex == -1) { + return; + } + + // 下移 + if (selectedIndex == -1) { + return; + } + + if (selectedIndex < list.getModel().getSize() - 1) { + DefaultListModel listModel = (DefaultListModel) list.getModel(); + + Object selecteObj1 = listModel.get(selectedIndex + 1); + listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); + listModel.set(selectedIndex, selecteObj1); + + list.setSelectedIndex(selectedIndex + 1); + list.ensureIndexIsVisible(selectedIndex + 1); + list.validate(); + } + } + } + + public class RemoveAction extends UpdateAction { + public RemoveAction() { + this.setName(Inter.getLocText("FR-Designer_Delete")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); + } + + /** + * 动作 + * @param e 事件 + */ + public void actionPerformed(ActionEvent e) { + int i = list.getSelectedIndex(); + if (i < 0 || !(listModel.getElementAt(i) instanceof FToolBarButton)) { + return; + } + int val = JOptionPane.showConfirmDialog(FEditToolBar.this, Inter.getLocText("FR-Designer_Are_You_Sure_To_Delete_The_Data") + "?", "Message", JOptionPane.YES_NO_OPTION); + if (val != JOptionPane.YES_OPTION) { + return; + } + listModel.removeElementAt(i); + list.validate(); + if (listModel.size() > 0) { + list.setSelectedIndex(0); + } else { + card.show(right, "none"); + } + } + } + + public class ButtonPane extends BasicPane { + private CardLayout card; + private JPanel centerPane; + private UICheckBox icon, text, excelP, excelO; + private Widget widget; + private UITextField nameField; + private IconDefinePane iconPane; + private UIButton button; + private JavaScriptActionPane javaScriptPane; + + public ButtonPane() { + this.initComponents(); + } + + /** + * 初始化元素 + */ + public void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); + icon = new UICheckBox(Inter.getLocText("FR-Designer_Show_Icon")); + text = new UICheckBox(Inter.getLocText("FR-Designer_Show_Text")); + + north.add(icon, BorderLayout.NORTH); + north.add(text, BorderLayout.CENTER); + + nameField = new UITextField(8); + iconPane = new IconDefinePane(); + javaScriptPane = JavaScriptActionPane.createDefault(); + + double p = TableLayout.PREFERRED; + double rowSize[] = {p, p}; + double columnSize[] = {p, p}; + + Component[][] coms = new Component[][]{{new UILabel(Inter.getLocText(new String[]{"Widget", "Printer-Alias"}) + ":"), nameField}, {new UILabel(Inter.getLocText(new String[]{"Widget", "Icon"}) + ":"), iconPane}}; + + JPanel nameIconPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize); + + north.add(nameIconPane, BorderLayout.SOUTH); + + north.setBorder(BorderFactory.createTitledBorder(Inter.getLocText(new String[]{"Form-Button", "Property", "Set"}))); + this.add(north, BorderLayout.NORTH); + JPanel none = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + centerPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + card = new CardLayout(); + centerPane.setLayout(card); + centerPane.add("custom", getCustomPane()); + centerPane.add("export", getExport()); + centerPane.add("none", none); + + this.add(centerPane, BorderLayout.CENTER); + } + + + private JPanel getCustomPane() { + JPanel customPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); + + button = new UIButton(Inter.getLocText("FR-Designer_User_Defined_Event")); + customPane.add(button); + customPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Edit") + "JS", null)); + button.addActionListener(l); + return customPane; + } + + private JPanel getExport() { + JPanel export = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + // export.setLayout(new BoxLayout(export, BoxLayout.Y_AXIS)); + excelP = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Page")); + excelO = new UICheckBox(Inter.getLocText("FR-Designer-Output_Excel_Simple")); + export.add(excelP); + export.add(Box.createVerticalStrut(2)); + export.add(excelO); + export.add(Box.createVerticalStrut(2)); + + export.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText(new String[]{"Form-Button", "Property", "Set"}), null)); + return export; + } + + @Override + protected String title4PopupWindow() { + return "Button"; + } + + ActionListener l = new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (!(widget instanceof CustomToolBarButton)) { + return; + } + if (javaScriptPane == null || ((CustomToolBarButton)widget).getJSImpl() == null) { + javaScriptPane = JavaScriptActionPane.createDefault(); + } + javaScriptPane.setPreferredSize(new Dimension(750, 500)); + BasicDialog dialog = javaScriptPane.showWindow(SwingUtilities.getWindowAncestor(ButtonPane.this)); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + ((CustomToolBarButton) widget).setJSImpl(javaScriptPane.updateBean()); + } + }); + dialog.setVisible(true); + } + }; + + /** + * 更新 + * @param widget 对应组件 + */ + public void populate(Widget widget) { + this.widget = widget; + card.show(centerPane, "none"); + if (widget instanceof Button) { + populateDefault(); + } + if (widget instanceof Export) { + populateExport(); + } else if (widget instanceof CustomToolBarButton) { + populateCustomToolBarButton(); + } + } + + private void populateExport(){ + card.show(centerPane, "export"); + Export export = (Export) widget; + this.excelP.setSelected(export.isExcelPAvailable()); + this.excelO.setSelected(export.isExcelOAvailable()); + } + + private void populateCustomToolBarButton(){ + card.show(centerPane, "custom"); + CustomToolBarButton customToolBarButton = (CustomToolBarButton) widget; + if (customToolBarButton.getJSImpl() != null) { + this.javaScriptPane.populateBean(customToolBarButton.getJSImpl()); + } + } + + + + private void populateDefault(){ + Button button = (Button) widget; + this.icon.setSelected(button.isShowIcon()); + this.text.setSelected(button.isShowText()); + this.nameField.setText(button.getText()); + this.iconPane.populate(((Button) widget).getIconName()); + } + + /** + * 更新 + * + * @return 对应组件 + */ + public Widget update() { + if (widget instanceof Export) { + updateExport(); + } else if (widget instanceof CustomToolBarButton) { + ((CustomToolBarButton) widget).setJSImpl(this.javaScriptPane.updateBean()); + } + if (widget instanceof Button) { + updateDefault(); + } + + return widget; + } + + private void updateDefault(){ + ((Button) widget).setShowIcon(this.icon.isSelected()); + ((Button) widget).setShowText(this.text.isSelected()); + ((Button) widget).setText(this.nameField.getText()); + ((Button) widget).setIconName(this.iconPane.update()); + } + + + private void updateExport(){ + Export export = (Export) widget; + export.setExcelPAvailable(this.excelP.isSelected()); + export.setExcelOAvailable(this.excelO.isSelected()); + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java b/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java new file mode 100644 index 000000000..00f9dae61 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FSettingToolBar.java @@ -0,0 +1,84 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by harry on 2017-3-2. + */ +public class FSettingToolBar extends JPanel { + private Icon setIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnsetting.png"); + private Icon delIcon = BaseUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnclear.png"); + private UIButton setButton; + private UIButton delButton; + private FToolBarPane toolBarPane; + + public FSettingToolBar(String name,FToolBarPane toolBarPane) { + super(); + this.setBackground(Color.lightGray); + this.add(new UILabel(name)); + this.toolBarPane = toolBarPane; + setButton = GUICoreUtils.createTransparentButton(setIcon, setIcon, setIcon); + setButton.setToolTipText(Inter.getLocText("Edit_Button_ToolBar")); + setButton.setAction(new SetAction()); + delButton = GUICoreUtils.createTransparentButton(delIcon, delIcon, delIcon); + delButton.setToolTipText(Inter.getLocText("Remove_Button_ToolBar")); + delButton.setAction(new DelAction()); + this.add(setButton); + this.add(delButton); + } + + public void setEnabled(boolean b) { + setButton.setEnabled(b); + delButton.setEnabled(b); + } + + public void addActionListener(ActionListener l){ + setButton.addActionListener(l); + delButton.addActionListener(l); + } + + private class SetAction extends AbstractAction { + + public SetAction() { + this.putValue(Action.SMALL_ICON, setIcon); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + final FEditToolBar tb = new FEditToolBar(); + tb.populate(toolBarPane.getFToolBar()); + BasicDialog dialog = tb.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + toolBarPane.setFToolBar(tb.update()); + } + }); + dialog.setVisible(true); + } + } + + private class DelAction extends AbstractAction { + + public DelAction() { + this.putValue(Action.SMALL_ICON, delIcon); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + toolBarPane.removeAll(); + toolBarPane.removeButtonList(); + toolBarPane.repaint(); + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FToolBar.java b/designer_form/src/com/fr/design/mainframe/FToolBar.java new file mode 100644 index 000000000..5eb519680 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FToolBar.java @@ -0,0 +1,68 @@ +package com.fr.design.mainframe; + +import com.fr.form.ui.ToolBar; +import com.fr.form.ui.Widget; +import com.fr.general.Background; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by harry on 2017-3-2. + */ +public class FToolBar { + private List buttonlist = new ArrayList(); + private Background background = null; + private boolean isDefault = true; + + public List getButtonlist() { + return buttonlist; + } + + public void setButtonlist(List buttonlist) { + if (buttonlist == null || buttonlist.size() < 0) { + this.buttonlist = new ArrayList(); + } else { + this.buttonlist = buttonlist; + } + } + + public void addButton(FToolBarButton toolBarButton) { + this.buttonlist.add(toolBarButton); + } + + public void removeButton(FToolBarButton toolBarButton) { + this.buttonlist.remove(toolBarButton); + } + + public void clearButton() { + this.buttonlist.clear(); + } + + public Background getBackground() { + return background; + } + + public void setBackground(Background background) { + this.background = background; + } + + public boolean isDefault() { + return isDefault; + } + + public void setDefault(boolean isDefault) { + this.isDefault = isDefault; + } + + public ToolBar getToolBar() { + Widget[] n = new Widget[this.getButtonlist().size()]; + for (int j = 0; j < this.getButtonlist().size(); j++) { + n[j] = this.getButtonlist().get(j).getWidget(); + } + ToolBar toolBar = new ToolBar(n); + toolBar.setBackground(this.background); + toolBar.setDefault(this.isDefault); + return toolBar; + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FToolBarButton.java new file mode 100644 index 000000000..c65b31757 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FToolBarButton.java @@ -0,0 +1,159 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.form.ui.Widget; +import com.fr.form.ui.WidgetManager; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/** + * Created by harry on 2017-3-2. + */ +public class FToolBarButton extends UIButton implements MouseListener { + private Widget widget; + private WidgetOption no; + + public FToolBarButton(Icon icon, Widget widget) { + this(null, icon, widget); + } + + public FToolBarButton(String text, Icon icon, Widget widget) { + super(text, icon); + this.widget = widget; + if (widget instanceof com.fr.form.ui.Button) { + com.fr.form.ui.Button button = (com.fr.form.ui.Button) widget; + String iconName = button.getIconName(); + if (StringUtils.isNotEmpty(iconName)) { + Image iimage = WidgetManager.getProviderInstance().getIconManager().getIconImage(iconName); + if (iimage != null) { + setIcon(new ImageIcon(iimage)); + } + } + } + this.addMouseListener(this); + setMargin(new Insets(0, 0, 0, 0)); + } + + + /** + * 改变按钮的权限细粒度状态 + * + * @param selectedRole 选择的角色 + * @param isVisible 是否可见 + */ + public void changeAuthorityState(String selectedRole, boolean isVisible) { + this.widget.changeOnlyVisibleAuthorityState(selectedRole, isVisible); + } + + /** + * 是都做过权限细粒度 + * + * @param role 选择的角色 + * @return 若是对应的该角色做过权限细粒度,则返回true + */ + public boolean isDoneAuthorityEdited(String role) { + return this.widget.isDoneVisibleAuthority(role); + } + + public Widget getWidget() { + return this.widget; + } + + + public void setWidget(Widget widget) { + this.widget = widget; + } + + public WidgetOption getNameOption() { + return this.no; + } + + public void setNameOption(WidgetOption no) { + this.no = no; + } + + + protected void paintBorder(Graphics g) { + this.setBorderType(UIButton.NORMAL_BORDER); + super.paintBorder(g); + } + + /** + * 处理鼠标点击事件 + * + * @param e 鼠标点击事件 + */ + public void mouseClicked(MouseEvent e) { + if (BaseUtils.isAuthorityEditing()) { + auhtorityMouseAction(); + return; + } + if (e.getClickCount() >= 2) { + if (this.getParent() instanceof FToolBarPane) { + final FToolBarPane tb = (FToolBarPane) this.getParent(); + final FEditToolBar etb = new FEditToolBar(); + etb.populate(tb.getFToolBar(), this); + BasicDialog dialog = etb.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + tb.setFToolBar(etb.update()); + } + }); + dialog.setVisible(true); + } + } + } + + + private void auhtorityMouseAction() { + if (this.getParent() instanceof FToolBarPane && this.isEnabled()) { + this.setSelected(!this.isSelected()); + + } + + } + + /** + * 鼠标进入事件 + * + * @param e 鼠标进入事件 + */ + public void mouseEntered(MouseEvent e) { + + } + + /** + * 鼠标退出事件 + * + * @param e 鼠标退出事件 + */ + public void mouseExited(MouseEvent e) { + + } + + /** + * 鼠标按下事件 + * + * @param e 鼠标事件 + */ + public void mousePressed(MouseEvent e) { + + } + + /** + * 鼠标释放事件 + * + * @param e 鼠标事件 + */ + public void mouseReleased(MouseEvent e) { + + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FToolBarPane.java b/designer_form/src/com/fr/design/mainframe/FToolBarPane.java new file mode 100644 index 000000000..f58651bde --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FToolBarPane.java @@ -0,0 +1,233 @@ +package com.fr.design.mainframe; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.ui.ToolBar; +import com.fr.form.ui.Widget; + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.List; + +/** + * Created by harry on 2017-3-2. + */ +public class FToolBarPane extends BasicBeanPane { + + private FToolBar ftoolbar = new FToolBar(); + + public FToolBarPane() { + super(); + this.initComponent(); + } + + + /** + * 添加鼠标监听 + * + * @param mouselistener 鼠标监听 + */ + public void addAuthorityListener(MouseListener mouselistener) { + List list = ftoolbar.getButtonlist(); + for (int i = 0; i < list.size(); i++) { + list.get(i).addMouseListener(mouselistener); + } + } + + public FToolBarPane(FToolBarButton button) { + super(); + this.initComponent(); + this.add(button); + } + + /** + * 初始化组件 + */ + public void initComponent() { + this.addMouseListener(listener); + this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); + this.setTransferHandler(new ToolBarHandler(TransferHandler.COPY)); + this.setBorder(BorderFactory.createTitledBorder("")); + } + + /** + * 删除鼠标事件 + */ + public void removeDefaultMouseListener() { + this.removeMouseListener(listener); + } + + @Override + protected String title4PopupWindow() { + return "Toolbar"; + } + + public void setSelectedButton(FToolBarButton button) { + this.ftoolbar.addButton(button); + } + + /** + * 添加组件 + * + * @param comp 组件 + * + * @return 被添加的组件 + */ + public Component add(Component comp) { + if (comp instanceof FToolBarButton) { + this.ftoolbar.addButton((FToolBarButton) comp); + } + return super.add(comp); + } + + private Component addComp(Component comp) { + return super.add(comp); + } + + + public void removeButtonList() { + this.ftoolbar.clearButton(); + } + + protected void setFToolBar(FToolBar ftoolbar) { + if (ftoolbar == null) { + ftoolbar = new FToolBar(); + } + this.ftoolbar = ftoolbar; + this.setToolBar(this.ftoolbar.getButtonlist()); + } + + public List getToolBarButtons() { + return ftoolbar.getButtonlist(); + } + + protected FToolBar getFToolBar() { + return this.ftoolbar; + } + + public boolean isEmpty() { + return this.ftoolbar.getButtonlist().size() <= 0; + } + + private void setToolBar(List list) { + if (list == null || list.size() < 0) { + return; + } + this.removeAll(); + for (int i = 0; i < list.size(); i++) { + this.addComp(list.get(i)); + } + this.validate(); + this.repaint(); + + } + + @Override + public void populateBean(ToolBar toolbar) { + this.removeAll(); + this.getFToolBar().clearButton(); + for (int j = 0; j < toolbar.getWidgetSize(); j++) { + Widget widget = toolbar.getWidget(j); + WidgetOption no = WidgetOption.getToolBarButton(widget.getClass()); + if (no == null){ + //如果装了什么插件, 放到了工具栏上, 后来删除了插件, 模板里还存着之前的控件 + continue; + } + + FToolBarButton button = new FToolBarButton(no.optionIcon(), widget); + button.setNameOption(no); + this.add(button); + this.validate(); + this.repaint(); + } + this.getFToolBar().setBackground(toolbar.getBackground()); + this.getFToolBar().setDefault(toolbar.isDefault()); + } + + @Override + public ToolBar updateBean() { + return this.ftoolbar.getToolBar(); + } + + MouseListener listener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() >= 2 && !SwingUtilities.isRightMouseButton(e)) { + final FEditToolBar tb = new FEditToolBar(); + tb.populate(getFToolBar()); + BasicDialog dialog = tb.showWindow(SwingUtilities.getWindowAncestor(FToolBarPane.this)); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + FToolBarPane.this.setFToolBar(tb.update()); + } + }); + dialog.setVisible(true); + } + } + }; + + + /* + * 拖拽属性设置 + */ + private class ToolBarHandler extends TransferHandler { + private int action; + + public ToolBarHandler(int action) { + this.action = action; + } + + + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + if (!support.isDrop()) { + return false; + } + + if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) { + return false; + } + + boolean actionSupported = (action & support.getSourceDropActions()) == action; + if (actionSupported) { + support.setDropAction(action); + return true; + } + + return false; + } + + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (!canImport(support)) { + return false; + } + WidgetOption data; + try { + data = (WidgetOption) support.getTransferable().getTransferData(DataFlavor.stringFlavor); + } catch (UnsupportedFlavorException e) { + return false; + } catch (java.io.IOException e) { + return false; + } + + Widget widget = data.createWidget(); + FToolBarButton btn = new FToolBarButton(data.optionIcon(), widget); + btn.setNameOption(data); + FToolBarPane.this.add(btn); + FToolBarPane.this.validate(); + FToolBarPane.this.repaint(); + return true; + } + + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java new file mode 100644 index 000000000..e94abdc99 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java @@ -0,0 +1,54 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.gui.core.WidgetOptionFactory; +import com.fr.form.ui.CustomToolBarButton; +import com.fr.form.web.button.ExcelO; +import com.fr.form.web.button.ExcelP; +import com.fr.form.web.button.Export; +import com.fr.form.web.button.page.*; +import com.fr.general.Inter; + +/** + * Created by harry on 2017-3-3. + */ +public class FormWebWidgetConstants { + + private FormWebWidgetConstants() { + } + + public static WidgetOption[] getFormECToolBarInstance() { + return new WidgetOption[]{FIRST, PREVIOUS, PAGENAVI, NEXT, LAST, EXPORT, EXCELP, EXCELO, CUSTOM_BUTTON}; + } + + // 当前页/总页数 + public static final WidgetOption PAGENAVI = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"HJS-Current_Page", "HF-Number_of_Page"}, new String[]{"/", ""}), + BaseUtils.readIcon("/com/fr/web/images/pageNumber.png"), PageNavi.class); + // 首页 + public static final WidgetOption FIRST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-First"), BaseUtils.readIcon("/com/fr/web/images/first.png"), + First.class); + // 末页 + public static final WidgetOption LAST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Last"), BaseUtils.readIcon("/com/fr/web/images/last.png"), + Last.class); + // 前一页 + public static final WidgetOption PREVIOUS = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Previous"), + BaseUtils.readIcon("/com/fr/web/images/previous.png"), Previous.class); + // 后一页 + public static final WidgetOption NEXT = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Next"), BaseUtils.readIcon("/com/fr/web/images/next.png"), + Next.class); + + // 导出成Excel 分页导出 + public static final WidgetOption EXCELP = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "FR-Designer_Export_Excel_Page"}, new String[]{"(", ")"}), + BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelP.class); + // 导出成Excel 原样导出 + public static final WidgetOption EXCELO = WidgetOptionFactory.createByWidgetClass(Inter.getLocText(new String[]{"Excel", "FR-Designer_Export_Excel_Simple"}, new String[]{"(", ")"}), + BaseUtils.readIcon("/com/fr/web/images/excel.png"), ExcelO.class); + // 导出 + public static final WidgetOption EXPORT = WidgetOptionFactory + .createByWidgetClass(Inter.getLocText("FR-Engine_Export"), BaseUtils.readIcon("/com/fr/web/images/export.png"), Export.class); + + public static final WidgetOption CUSTOM_BUTTON = WidgetOptionFactory + .createByWidgetClass(Inter.getLocText(new String[]{"Custom", "Form-Button"}), CustomToolBarButton.class); + +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java new file mode 100644 index 000000000..e7bf4662f --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleECToolBarEditor.java @@ -0,0 +1,57 @@ +package com.fr.design.mainframe.widget.accessibles; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.mainframe.FormWebWidgetConstants; +import com.fr.design.mainframe.widget.editors.ECToolBarPane; +import com.fr.design.mainframe.widget.wrappers.ECToolBarWrapper; +import com.fr.form.web.FToolBarManager; +import com.fr.stable.ArrayUtils; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by harry on 2017-2-23. + */ +public class AccessibleECToolBarEditor extends UneditableAccessibleEditor { + private ECToolBarPane pane; + + public AccessibleECToolBarEditor() { + super(new ECToolBarWrapper()); + } + + @Override + protected void showEditorPane() { + if (pane == null) { + pane = new ECToolBarPane(); + pane.setDefaultToolBar(getDefaultToolBarManager(), getToolBarInstance()); + } + BasicDialog dlg = pane.showToolBarWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { + + @Override + public void doOk() { + setValue(pane.updateBean()); + fireStateChanged(); + } + }); + FToolBarManager[] managers = (FToolBarManager[]) getValue(); + pane.setCheckBoxSelected(ArrayUtils.isNotEmpty(managers)); + pane.populateBean((FToolBarManager[]) getValue()); + dlg.setVisible(true); + } + + private FToolBarManager getDefaultToolBarManager() { + return FToolBarManager.createDefaultToolBar(); + } + + private WidgetOption[] getToolBarInstance() { + List defaultOptions = Arrays.asList(FormWebWidgetConstants.getFormECToolBarInstance()); + List options = new ArrayList(); + options.addAll(defaultOptions); + return options.toArray(new WidgetOption[options.size()]); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java new file mode 100644 index 000000000..eea19ced7 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarEditor.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.design.mainframe.widget.accessibles.AccessibleECToolBarEditor; +import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; + +/** + * Created by harry on 2017-2-23. + */ +public class ECToolBarEditor extends AccessiblePropertyEditor { + public ECToolBarEditor() { + super(new AccessibleECToolBarEditor()); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java new file mode 100644 index 000000000..ea2bbe7a4 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ECToolBarPane.java @@ -0,0 +1,304 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.base.BaseUtils; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.core.WidgetOption; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.FSettingToolBar; +import com.fr.design.mainframe.FToolBarButton; +import com.fr.design.mainframe.FToolBarPane; +import com.fr.form.ui.Widget; +import com.fr.form.web.FLocation; +import com.fr.form.web.FToolBarManager; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.image.ImageObserver; +import java.util.*; +import java.util.List; + +/** + * Created by harry on 2017-2-23. + */ +public class ECToolBarPane extends BasicBeanPane { + private static final int COLUMN = 2; + private int row = 6; + private DefaultTableModel toolbarButtonTableModel; + private JTable layoutTable; + private UICheckBox isUseToolBarCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Use_ToolBar") + ":"); // 是否使用工具栏 + + private FToolBarPane northToolBar; + private FToolBarPane southToolBar; + private FToolBarManager defaultToolBar; + + + public ECToolBarPane() { + toolbarButtonTableModel = new TableModel(row ,COLUMN); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel north = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UIButton defaultButton = new UIButton(Inter.getLocText("FR-Designer_Restore_Default")); + // 恢复默认按钮 + defaultButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + northToolBar.removeButtonList(); + northToolBar.removeAll(); + southToolBar.removeButtonList(); + southToolBar.removeAll(); + if (defaultToolBar == null) { + return; + } + FToolBarManager toolBarManager = defaultToolBar; + toolBarManager.setToolBarLocation(FLocation.createTopEmbedLocation()); + FToolBarManager[] tbm = new FToolBarManager[] { toolBarManager }; + populateBean(tbm); + ECToolBarPane.this.repaint(); + } + }); + + north.add(isUseToolBarCheckBox, BorderLayout.WEST); + JPanel aa = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + aa.add(defaultButton); + north.add(aa, BorderLayout.CENTER); + this.add(north, BorderLayout.NORTH); + + northToolBar = new FToolBarPane(); + northToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); + northToolBar.setBackground(Color.lightGray); + + UIButton topButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/arrow/arrow_up.png")); + topButton.setBorder(null); + topButton.setOpaque(false); + topButton.setContentAreaFilled(false); + topButton.setFocusPainted(false); + topButton.setRequestFocusEnabled(false); + topButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (isSelectedtable()) { + WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); + Widget widget = no.createWidget(); + FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + tb.setNameOption(no); + northToolBar.add(tb); + northToolBar.validate(); + northToolBar.repaint(); + } else { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_ChooseOneButton")); + } + } + }); + + UIButton downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/arrow/arrow_down.png")); + downButton.setBorder(null); + downButton.setMargin(null); + downButton.setOpaque(false); + downButton.setContentAreaFilled(false); + downButton.setFocusPainted(false); + downButton.setRequestFocusEnabled(false); + downButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (isSelectedtable()) { + WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); + Widget widget = no.createWidget(); + FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + tb.setNameOption(no); + southToolBar.add(tb); + southToolBar.validate(); + southToolBar.repaint(); + } else { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_ChooseOneButton")); + } + } + }); + + initLayoutTable(); + + JPanel center = FRGUIPaneFactory.createBorderLayout_S_Pane(); + center.setBackground(Color.white); + center.add(topButton, BorderLayout.NORTH); + JPanel small = FRGUIPaneFactory.createBorderLayout_S_Pane(); + small.setBackground(Color.white); + small.add(new UILabel(StringUtils.BLANK), BorderLayout.NORTH); + small.add(layoutTable, BorderLayout.CENTER); + center.add(small, BorderLayout.CENTER); + center.add(downButton, BorderLayout.SOUTH); + southToolBar = new FToolBarPane(); + southToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); + southToolBar.setBackground(Color.lightGray); + JPanel movePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel northContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + FSettingToolBar top = new FSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Top"), northToolBar); + northContentPane.add(top, BorderLayout.EAST); + northContentPane.add(northToolBar, BorderLayout.CENTER); + northContentPane.setBackground(Color.lightGray); + + JPanel southContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + FSettingToolBar bottom = new FSettingToolBar(Inter.getLocText("FR-Designer_ToolBar_Bottom"), southToolBar); + southContentPane.add(bottom, BorderLayout.EAST); + southContentPane.add(southToolBar, BorderLayout.CENTER); + southContentPane.setBackground(Color.lightGray); + + movePane.add(northContentPane, BorderLayout.NORTH); + movePane.add(center, BorderLayout.CENTER); + movePane.add(southContentPane, BorderLayout.SOUTH); + + this.add(new JScrollPane(movePane), BorderLayout.CENTER); + + isUseToolBarCheckBox.setSelected(false); + } + + private void initLayoutTable() { + layoutTable = new JTable(toolbarButtonTableModel); + layoutTable.setDefaultRenderer(Object.class, tableRenderer); + layoutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + layoutTable.setColumnSelectionAllowed(false); + layoutTable.setRowSelectionAllowed(false); + layoutTable.setBackground(Color.white); + int columnWidth = Integer.parseInt(Inter.getLocText("FR-Designer_LayoutTable_Column_Width")); + for (int i = 0; i < layoutTable.getColumnModel().getColumnCount(); i++) { + layoutTable.getColumnModel().getColumn(i).setPreferredWidth(columnWidth); + } + layoutTable.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() > 1 && !SwingUtilities.isRightMouseButton(e)) { + WidgetOption no = (WidgetOption)layoutTable.getValueAt(layoutTable.getSelectedRow(), layoutTable.getSelectedColumn()); + Widget widget = no.createWidget(); + FToolBarButton tb = new FToolBarButton(no.optionIcon(), widget); + tb.setNameOption(no); + northToolBar.add(tb); + northToolBar.validate(); + northToolBar.repaint(); + } + } + }); + } + + private boolean isSelectedtable() { + for (int i = 0; i < layoutTable.getColumnCount(); i++) { + if (layoutTable.isColumnSelected(i)) { + return true; + } + } + return false; + } + + /** + * 是否被选中 + * @return 同上 + */ + public boolean isUseToolbar() { + return this.isUseToolBarCheckBox.isSelected(); + } + + public void setDefaultToolBar(FToolBarManager defaultToolBar, WidgetOption[] buttonArray) { + this.defaultToolBar = defaultToolBar; + if (buttonArray != null) { + for (int i = 0; i < buttonArray.length; i++) { + toolbarButtonTableModel.setValueAt(buttonArray[i], i % row, i / row); + } + } + + } + + DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer() { + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + if (value instanceof WidgetOption) { + WidgetOption nameOption = (WidgetOption)value; + this.setText(nameOption.optionName()); + + Icon icon = nameOption.optionIcon(); + if (icon != null) { + this.setIcon(icon); + } + } + if (value == null) { + this.setText(StringUtils.EMPTY); + this.setIcon(null); + } + return this; + } + }; + + @Override + protected String title4PopupWindow() { + return Inter.getLocText(new String[]{"Form-EC_toolbar", "Set"}); + } + + public void setCheckBoxSelected(boolean b) { + this.isUseToolBarCheckBox.setSelected(b); + } + + @Override + public void populateBean(FToolBarManager[] toolBarManager) { + if (ArrayUtils.isEmpty(toolBarManager)) { + defaultToolBar.setToolBarLocation(FLocation.createTopEmbedLocation()); + toolBarManager = new FToolBarManager[] { defaultToolBar }; + } + if (ArrayUtils.isEmpty(toolBarManager)) { + return; + } + for (int i = 0; i < toolBarManager.length; i++) { + FLocation location = toolBarManager[i].getToolBarLocation(); + if (location instanceof FLocation.Embed) { + if (((FLocation.Embed)location).getPosition() == Constants.TOP) { + northToolBar.populateBean(toolBarManager[i].getToolBar()); + } else if (((FLocation.Embed)location).getPosition() == Constants.BOTTOM) { + southToolBar.populateBean(toolBarManager[i].getToolBar()); + } + } + } + } + + @Override + public FToolBarManager[] updateBean() { + if(!isUseToolbar()){ + return new FToolBarManager[0]; + } + List toolBarManagerList = new ArrayList(); + if (!northToolBar.isEmpty()) { + FToolBarManager north = new FToolBarManager(); + north.setToolBar(northToolBar.updateBean()); + north.setToolBarLocation(FLocation.createTopEmbedLocation()); + toolBarManagerList.add(north); + } + + if (!southToolBar.isEmpty()) { + FToolBarManager south = new FToolBarManager(); + south.setToolBar(southToolBar.updateBean()); + south.setToolBarLocation(FLocation.createBottomEmbedLocation()); + toolBarManagerList.add(south); + } + return toolBarManagerList.toArray(new FToolBarManager[toolBarManagerList.size()]); + } + + private class TableModel extends DefaultTableModel { + public TableModel(int i, int j) { + super(i, j); + } + + // 禁止jtable的双击编辑功能 + public boolean isCellEditable(int row, int column) { + return false; + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java new file mode 100644 index 000000000..5faf54348 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ECToolBarWrapper.java @@ -0,0 +1,34 @@ +package com.fr.design.mainframe.widget.wrappers; + +import com.fr.design.Exception.ValidationException; +import com.fr.design.designer.properties.Decoder; +import com.fr.design.designer.properties.Encoder; +import com.fr.form.web.FToolBarManager; +import com.fr.general.Inter; + +/** + * Created by harry on 2017-3-1. + */ +public class ECToolBarWrapper implements Encoder, Decoder { + @Override + public Object decode(String txt) { + return null; + } + + @Override + public void validate(String txt) throws ValidationException { + + } + + @Override + public String encode(Object v) { + if (v == null) { + return null; + } + FToolBarManager[] toolBarManager = (FToolBarManager[])v; + if (toolBarManager.length != 0) { + return Inter.getLocText("FR-Designer_Open"); + } + return Inter.getLocText("FR-Designer_Close"); + } +}