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_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 05c7aa6a6..7ed85365d 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary= FR-Designer_Data-confusion= FR-Designer_Data_Type= FR-Designer_Double_Click_Edit_OR_Clear= +FR-Designer_Edit_Button_ToolBar= FR-Designer_Email= FR-Designer_Enabled= FR-Designer_End-Date= @@ -161,6 +162,7 @@ FR-Designer_Refresh_Parameter_In_SQL= FR-Designer_Reg_Expressions= FR-Designer_Reg_Max_Length= FR-Designer_Reg_Min_Length= +FR-Designer_Remove_Button_ToolBar= FR-Designer_ReportColumns-Columns= FR-Designer_Return-Date= FR-Designer_RichText= @@ -582,4 +584,4 @@ FR-Designer_Mouse_Click_Tips= FR-Designer-Move_Tab_First=move to first FR-Designer-Move_Tab_End=move to end FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file +FR-Designer-Move_Tab_Prev=move to previous diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index fcece5756..e7604d42c 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=Data Dictionary FR-Designer_Data-confusion=Data Confusion FR-Designer_Data_Type=Data type FR-Designer_Double_Click_Edit_OR_Clear=Double Click to Edit or Clear +FR-Designer_Edit_Button_ToolBar=Edit Button ToolBar FR-Designer_Email=Mail FR-Designer_Enabled=Enabled FR-Designer_End-Date=End Date @@ -163,6 +164,7 @@ FR-Designer_Refresh_Parameter_In_SQL=Whether to refresh parameters in the SQL FR-Designer_Reg_Expressions=Regular expressions FR-Designer_Reg_Max_Length=max length FR-Designer_Reg_Min_Length=min length +FR-Designer_Remove_Button_ToolBar=Remove Button ToolBar FR-Designer_ReportColumns-Columns=Multi-columns/lines FR-Designer_Return-Date=Return Date FR-Designer_RichText=Insert Rich Text @@ -583,4 +585,4 @@ FR-Designer_Mouse_Click_Tips=The background of the mouse to click the button, in FR-Designer-Move_Tab_First=move to first FR-Designer-Move_Tab_End=move to end FR-Designer-Move_Tab_Next=move to next -FR-Designer-Move_Tab_Prev=move to previous \ No newline at end of file +FR-Designer-Move_Tab_Prev=move to previous diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index 233078394..7cc3163c0 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u30C7\u30FC\u30BF\u5B57\u5178 FR-Designer_Data-confusion=\u30C7\u30FC\u30BF\u6DF7\u4EA4 FR-Designer_Data_Type=\u30C7\u30FC\u30BF\u30BF\u30A4\u30D7 FR-Designer_Double_Click_Edit_OR_Clear=\u30C0\u30D6\u30EB\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u7DE8\u96C6\u307E\u305F\u306F\u30AF\u30EA\u30A2\u3059\u308B +FR-Designer_Edit_Button_ToolBar=\u30DC\u30BF\u30F3\u306B\u3042\u308B\u30C4\u30FC\u30EB\u6B04\u7DE8\u96C6 FR-Designer_Email=\u30E1\u30FC\u30EB FR-Designer_Enabled=\u4F7F\u7528\u53EF\u80FD FR-Designer_End-Date=\u7D42\u4E86\u65E5\u671F @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\u4E2D\u306E\u30D1\u30E9\u30E1\u30FC\u30 FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u73FE\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u3055 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u3055 +FR-Designer_Remove_Button_ToolBar=\u30DC\u30BF\u30F3\u304C\u3042\u308B\u30C4\u30FC\u30EB\u30D0\u30FC\u3092\u30EA\u30E0\u30FC\u30D6 FR-Designer_ReportColumns-Columns=\u6BB5\u7D44\u307F FR-Designer_Return-Date=\u65E5\u671F\u306B\u623B\u308B FR-Designer_RichText=\u30EA\u30C3\u30C1\u6587\u66F8\u633F\u5165 @@ -553,4 +555,4 @@ FR-Designer_Mouse_Click_Tips= FR-Designer-Move_Tab_First= FR-Designer-Move_Tab_End= FR-Designer-Move_Tab_Next= -FR-Designer-Move_Tab_Prev= \ No newline at end of file +FR-Designer-Move_Tab_Prev= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index a54595e0c..9942d0e86 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\uB370\uC774\uD130\uC0AC\uC804 FR-Designer_Data-confusion=\uB370\uC774\uD130\uD63C\uD569 FR-Designer_Data_Type=\uB370\uC774\uD130\uC720\uD615 FR-Designer_Double_Click_Edit_OR_Clear=\uB354\uBE14\uD074\uB9AD\uD558\uC5EC\uD3B8\uC9D1\uB610\uB294\uD074\uB9AC\uC5B4\uC2E4\uD589 +FR-Designer_Edit_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uD3B8\uC9D1 FR-Designer_Email=\uBA54\uC77C FR-Designer_Enabled=\uC0AC\uC6A9\uAC00\uB2A5 FR-Designer_End-Date=\uC885\uB8CC\uB0A0\uC9DC @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=SQL\uC758\uB9E4\uAC1C\uBCC0\uC218\uB97C\uC0 FR-Designer_Reg_Expressions=\uC815\uADDC\uD45C\uD604\uC2DD FR-Designer_Reg_Max_Length=\uCD5C\uB300\uAE38\uC774 FR-Designer_Reg_Min_Length=\uCD5C\uC18C\uAE38\uC774 +FR-Designer_Remove_Button_ToolBar=\uD0A4\uAC00\uC788\uB294\uD234\uBC14\uC81C\uAC70 FR-Designer_ReportColumns-Columns=\uC140\uB098\uB204\uAE30 FR-Designer_Return-Date=\uB0A0\uC9DC\uB3CC\uC544\uAC00\uAE30 FR-Designer_RichText=\uB9AC\uCE58\uD14D\uC2A4\uD2B8\uBC15\uC2A4\uC0BD\uC785 @@ -550,4 +552,4 @@ FR-Designer_Mouse_Click_Tips= FR-Designer-Move_Tab_First= FR-Designer-Move_Tab_End= FR-Designer-Move_Tab_Next= -FR-Designer-Move_Tab_Prev= \ No newline at end of file +FR-Designer-Move_Tab_Prev= diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 53aab70e5..d8789a58c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u6570\u636E\u5B57\u5178 FR-Designer_Data-confusion=\u6570\u636E\u6DF7\u6DC6 FR-Designer_Data_Type=\u6570\u636E\u7C7B\u578B FR-Designer_Double_Click_Edit_OR_Clear=\u53CC\u51FB\u8FDB\u884C\u7F16\u8F91\u6216\u6E05\u9664 +FR-Designer_Edit_Button_ToolBar=\u7F16\u8F91\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_Email=\u90AE\u4EF6 FR-Designer_Enabled=\u53EF\u7528 FR-Designer_End-Date=\u7ED3\u675F\u65E5\u671F @@ -163,6 +164,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u662F\u5426\u5237\u65B0SQL\u4E2D\u7684\u53 FR-Designer_Reg_Expressions=\u6B63\u5219\u8868\u8FBE\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u957F\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u957F\u5EA6 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u94AE\u6240\u5728\u5DE5\u5177\u680F FR-Designer_ReportColumns-Columns=\u5206\u680F FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText=\u63D2\u5165\u5BCC\u6587\u672C @@ -587,4 +589,4 @@ FR-Designer_Mouse_Click_Tips=\u9F20\u6807\u70B9\u51FB\u6309\u94AE\u65F6\u80CC\u6 FR-Designer-Move_Tab_First=\u79FB\u52A8\u5230\u9996\u4F4D FR-Designer-Move_Tab_End=\u79FB\u52A8\u5230\u672B\u5C3E FR-Designer-Move_Tab_Next=\u5F80\u540E\u79FB\u52A8 -FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52A8 \ No newline at end of file +FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52A8 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 68622ad34..68648424c 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -91,6 +91,7 @@ FR-Designer_DS-Dictionary=\u8CC7\u6599\u5B57\u5178 FR-Designer_Data-confusion=\u8CC7\u6599\u6DF7\u6DC6 FR-Designer_Data_Type=\u8CC7\u6599\u985E\u578B FR-Designer_Double_Click_Edit_OR_Clear=\u96D9\u64CA\u9032\u884C\u7DE8\u8F2F\u6216\u6E05\u9664 +FR-Designer_Edit_Button_ToolBar=\u7DE8\u8F2F\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_Email=\u90F5\u4EF6 FR-Designer_Enabled=\u53EF\u7528 FR-Designer_End-Date=\u7D50\u675F\u65E5\u671F @@ -162,6 +163,7 @@ FR-Designer_Refresh_Parameter_In_SQL=\u5728SQL\u4E2D\u91CD\u65B0\u6574\u7406\u76 FR-Designer_Reg_Expressions=\u6B63\u5247\u8868\u9054\u5F0F FR-Designer_Reg_Max_Length=\u6700\u5927\u9577\u5EA6 FR-Designer_Reg_Min_Length=\u6700\u5C0F\u9577\u5EA6 +FR-Designer_Remove_Button_ToolBar=\u79FB\u9664\u6309\u9215\u6240\u5728\u5DE5\u5177\u6B04 FR-Designer_ReportColumns-Columns=\u5831\u8868\u6B04\u4F4D FR-Designer_Return-Date=\u8FD4\u56DE\u65E5\u671F FR-Designer_RichText= RTF @@ -575,4 +577,4 @@ FR-Designer_Mouse_Click_Tips= FR-Designer-Move_Tab_First=\u79FB\u52D5\u5230\u9996\u4F4D FR-Designer-Move_Tab_End=\u79FB\u52D5\u5230\u672B\u5C3E FR-Designer-Move_Tab_Next=\u5F80\u5F8C\u79FB\u52D5 -FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52D5 \ No newline at end of file +FR-Designer-Move_Tab_Prev=\u5F80\u524D\u79FB\u52D5 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 7b6dac0e8..c7cd3b493 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -10,11 +10,9 @@ import com.fr.design.fun.WidgetPropertyUIProvider; 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.ElementCaseToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -99,11 +97,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(ElementCaseToolBarEditor.class) .setI18NName(Inter.getLocText("Form-EC_toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") }; diff --git a/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java b/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java new file mode 100644 index 000000000..c2c487ef5 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormEditToolBar.java @@ -0,0 +1,481 @@ +package com.fr.design.mainframe; + +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.IOUtils; +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 FormEditToolBar extends BasicPane { + + private JList list; + private DefaultListModel listModel; + private JPanel right; + private CardLayout card; + private ButtonPane bp; + private FormToolBarButton 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 FormToolBarButton) { + lastButton = (FormToolBarButton) 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(FormEditToolBar.this.background); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + FormEditToolBar.this.background = backgroundPane.update(); + if (FormEditToolBar.this.background != null) { + FormEditToolBar.this.defaultCheckBox.setSelected(false); + } + } + }); + dialog.setVisible(true); + } + }; + + public FormEditToolBar() { + 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("FR-Designer-Output_Background_Set")); + defaultCheckBox = new UICheckBox(Inter.getLocText("FR-Designer-Output_Default_Background")); + bgButton.addActionListener(actioner); + backgroundPane.add(defaultCheckBox); + backgroundPane.add(bgButton); + backgroundPane.setBorder(BorderFactory.createTitledBorder(Inter.getLocText("FR-Designer-Output_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 FormToolBarButton) { + FormToolBarButton button = (FormToolBarButton) 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(FormToolBar ftoolbar) { + this.populate(ftoolbar, null); + } + + public void populate(FormToolBar ftoolbar, FormToolBarButton 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 FormToolBar update() { + if (this.list.getSelectedIndex() > -1) { + for (int i = 0; i < listModel.getSize(); i++) { + this.list.setSelectedIndex(i); + FormToolBarButton toolBarButton = (FormToolBarButton) 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((FormToolBarButton) listModel.get(i)); + } + FormToolBar ftoolBar = new FormToolBar(); + 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(IOUtils.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(IOUtils.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(IOUtils.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 FormToolBarButton)) { + return; + } + int val = JOptionPane.showConfirmDialog(FormEditToolBar.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/FormSettingToolBar.java b/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java new file mode 100644 index 000000000..c84776789 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormSettingToolBar.java @@ -0,0 +1,84 @@ +package com.fr.design.mainframe; + +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.IOUtils; +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 FormSettingToolBar extends JPanel { + private Icon setIcon = IOUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnsetting.png"); + private Icon delIcon = IOUtils.readIcon("com/fr/design/images/toolbarbtn/toolbarbtnclear.png"); + private UIButton setButton; + private UIButton delButton; + private FormToolBarPane toolBarPane; + + public FormSettingToolBar(String name, FormToolBarPane toolBarPane) { + super(); + this.setBackground(Color.lightGray); + this.add(new UILabel(name)); + this.toolBarPane = toolBarPane; + setButton = GUICoreUtils.createTransparentButton(setIcon, setIcon, setIcon); + setButton.setToolTipText(Inter.getLocText("FR-Designer_Edit_Button_ToolBar")); + setButton.setAction(new SetAction()); + delButton = GUICoreUtils.createTransparentButton(delIcon, delIcon, delIcon); + delButton.setToolTipText(Inter.getLocText("FR-Designer_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 FormEditToolBar tb = new FormEditToolBar(); + 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/FormToolBar.java b/designer_form/src/com/fr/design/mainframe/FormToolBar.java new file mode 100644 index 000000000..860144dc8 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormToolBar.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 FormToolBar { + 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(FormToolBarButton toolBarButton) { + this.buttonlist.add(toolBarButton); + } + + public void removeButton(FormToolBarButton 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[] widgets = new Widget[this.getButtonlist().size()]; + for (int j = 0; j < this.getButtonlist().size(); j++) { + widgets[j] = this.getButtonlist().get(j).getWidget(); + } + ToolBar toolBar = new ToolBar(widgets); + toolBar.setBackground(this.background); + toolBar.setDefault(this.isDefault); + return toolBar; + } +} diff --git a/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java new file mode 100644 index 000000000..a9651c7fa --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarButton.java @@ -0,0 +1,164 @@ +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.roleAuthority.ReportAndFSManagePane; +import com.fr.design.utils.gui.GUIPaintUtils; +import com.fr.form.ui.Widget; +import com.fr.form.ui.WidgetManager; +import com.fr.stable.Constants; +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 FormToolBarButton extends JButton implements MouseListener { + private Widget widget; + private WidgetOption widgetOption; + + public FormToolBarButton(Icon icon, Widget widget) { + this(null, icon, widget); + } + + public FormToolBarButton(String text, Icon icon, Widget widget) { + super(text, icon); + setBackground(null); + setRolloverEnabled(true); + 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.widgetOption; + } + + public void setNameOption(WidgetOption widgetOption) { + this.widgetOption = widgetOption; + } + + + protected void paintBorder(Graphics g) { + paintBorder(g, this); + } + + protected void paintBorder(Graphics g, FormToolBarButton b) { + String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName(); + GUIPaintUtils.drawBorder((Graphics2D) g, 0, 0, b.getWidth(), b.getHeight(), true, Constants.NULL, b.isDoneAuthorityEdited(selectedRoles)); + } + + /** + * 处理鼠标点击事件 + * + * @param e 鼠标点击事件 + */ + public void mouseClicked(MouseEvent e) { + //该button只在报表块工具栏中使用, + //parent只有FormToolBarPane一种,故可以直接强转 + final FormToolBarPane toolBarPane = (FormToolBarPane) this.getParent(); + if (BaseUtils.isAuthorityEditing()) { + auhtorityMouseAction(); + return; + } + if (e.getClickCount() >= 2) { + final FormEditToolBar editToolBar = new FormEditToolBar(); + editToolBar.populate(toolBarPane.getFToolBar(), this); + BasicDialog dialog = editToolBar.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + toolBarPane.setFToolBar(editToolBar.update()); + } + }); + dialog.setVisible(true); + } + } + + + private void auhtorityMouseAction() { + if (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/FormToolBarPane.java b/designer_form/src/com/fr/design/mainframe/FormToolBarPane.java new file mode 100644 index 000000000..e64259b27 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormToolBarPane.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 FormToolBarPane extends BasicBeanPane { + + private FormToolBar ftoolbar = new FormToolBar(); + + public FormToolBarPane() { + 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 FormToolBarPane(FormToolBarButton 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(FormToolBarButton button) { + this.ftoolbar.addButton(button); + } + + /** + * 添加组件 + * + * @param comp 组件 + * + * @return 被添加的组件 + */ + public Component add(Component comp) { + if (comp instanceof FormToolBarButton) { + this.ftoolbar.addButton((FormToolBarButton) comp); + } + return super.add(comp); + } + + private Component addComp(Component comp) { + return super.add(comp); + } + + + public void removeButtonList() { + this.ftoolbar.clearButton(); + } + + protected void setFToolBar(FormToolBar ftoolbar) { + if (ftoolbar == null) { + ftoolbar = new FormToolBar(); + } + this.ftoolbar = ftoolbar; + this.setToolBar(this.ftoolbar.getButtonlist()); + } + + public List getToolBarButtons() { + return ftoolbar.getButtonlist(); + } + + protected FormToolBar 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; + } + + FormToolBarButton button = new FormToolBarButton(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 FormEditToolBar tb = new FormEditToolBar(); + tb.populate(getFToolBar()); + BasicDialog dialog = tb.showWindow(SwingUtilities.getWindowAncestor(FormToolBarPane.this)); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + FormToolBarPane.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(); + FormToolBarButton btn = new FormToolBarButton(data.optionIcon(), widget); + btn.setNameOption(data); + FormToolBarPane.this.add(btn); + FormToolBarPane.this.validate(); + FormToolBarPane.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..4bf970234 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/FormWebWidgetConstants.java @@ -0,0 +1,54 @@ +package com.fr.design.mainframe; + +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.IOUtils; +import com.fr.general.Inter; + +/** + * Created by harry on 2017-3-3. + */ +public class FormWebWidgetConstants { + + private FormWebWidgetConstants() { + } + + public static WidgetOption[] getFormElementCaseToolBarInstance() { + 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[]{"/", ""}), + IOUtils.readIcon("/com/fr/web/images/pageNumber.png"), PageNavi.class); + // 首页 + public static final WidgetOption FIRST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-First"), IOUtils.readIcon("/com/fr/web/images/first.png"), + First.class); + // 末页 + public static final WidgetOption LAST = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Last"), IOUtils.readIcon("/com/fr/web/images/last.png"), + Last.class); + // 前一页 + public static final WidgetOption PREVIOUS = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Previous"), + IOUtils.readIcon("/com/fr/web/images/previous.png"), Previous.class); + // 后一页 + public static final WidgetOption NEXT = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Engine_ReportServerP-Next"), IOUtils.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[]{"(", ")"}), + IOUtils.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[]{"(", ")"}), + IOUtils.readIcon("/com/fr/web/images/excel.png"), ExcelO.class); + // 导出 + public static final WidgetOption EXPORT = WidgetOptionFactory + .createByWidgetClass(Inter.getLocText("FR-Engine_Export"), IOUtils.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/AccessibleElementCaseToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.java new file mode 100644 index 000000000..1695892ba --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleElementCaseToolBarEditor.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.ElementCaseToolBarPane; +import com.fr.design.mainframe.widget.wrappers.ElementCaseToolBarWrapper; +import com.fr.form.web.FormToolBarManager; +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 AccessibleElementCaseToolBarEditor extends UneditableAccessibleEditor { + private ElementCaseToolBarPane pane; + + public AccessibleElementCaseToolBarEditor() { + super(new ElementCaseToolBarWrapper()); + } + + @Override + protected void showEditorPane() { + if (pane == null) { + pane = new ElementCaseToolBarPane(); + pane.setDefaultToolBar(getDefaultToolBarManager(), getToolBarInstance()); + } + BasicDialog dlg = pane.showToolBarWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { + + @Override + public void doOk() { + setValue(pane.updateBean()); + fireStateChanged(); + } + }); + FormToolBarManager[] managers = (FormToolBarManager[]) getValue(); + pane.setCheckBoxSelected(ArrayUtils.isNotEmpty(managers)); + pane.populateBean((FormToolBarManager[]) getValue()); + dlg.setVisible(true); + } + + private FormToolBarManager getDefaultToolBarManager() { + return FormToolBarManager.createDefaultToolBar(); + } + + private WidgetOption[] getToolBarInstance() { + List defaultOptions = Arrays.asList(FormWebWidgetConstants.getFormElementCaseToolBarInstance()); + 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/ElementCaseToolBarEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarEditor.java new file mode 100644 index 000000000..de252c984 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarEditor.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.design.mainframe.widget.accessibles.AccessibleElementCaseToolBarEditor; +import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; + +/** + * Created by harry on 2017-2-23. + */ +public class ElementCaseToolBarEditor extends AccessiblePropertyEditor { + public ElementCaseToolBarEditor() { + super(new AccessibleElementCaseToolBarEditor()); + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java new file mode 100644 index 000000000..624dc956a --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/ElementCaseToolBarPane.java @@ -0,0 +1,304 @@ +package com.fr.design.mainframe.widget.editors; + +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.FormSettingToolBar; +import com.fr.design.mainframe.FormToolBarButton; +import com.fr.design.mainframe.FormToolBarPane; +import com.fr.form.ui.Widget; +import com.fr.form.web.FormToolBarManager; +import com.fr.form.web.Location; +import com.fr.general.IOUtils; +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 ElementCaseToolBarPane 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 FormToolBarPane northToolBar; + private FormToolBarPane southToolBar; + private FormToolBarManager defaultToolBar; + + + public ElementCaseToolBarPane() { + 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; + } + FormToolBarManager toolBarManager = defaultToolBar; + toolBarManager.setToolBarLocation(Location.createTopEmbedLocation()); + FormToolBarManager[] tbm = new FormToolBarManager[] { toolBarManager }; + populateBean(tbm); + ElementCaseToolBarPane.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 FormToolBarPane(); + northToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); + northToolBar.setBackground(Color.lightGray); + + UIButton topButton = new UIButton(IOUtils.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(); + FormToolBarButton tb = new FormToolBarButton(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(IOUtils.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(); + FormToolBarButton tb = new FormToolBarButton(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 FormToolBarPane(); + southToolBar.setPreferredSize(new Dimension(ImageObserver.WIDTH, 26)); + southToolBar.setBackground(Color.lightGray); + JPanel movePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel northContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + FormSettingToolBar top = new FormSettingToolBar(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(); + FormSettingToolBar bottom = new FormSettingToolBar(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(); + FormToolBarButton tb = new FormToolBarButton(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(FormToolBarManager 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(FormToolBarManager[] toolBarManager) { + if (ArrayUtils.isEmpty(toolBarManager)) { + defaultToolBar.setToolBarLocation(Location.createTopEmbedLocation()); + toolBarManager = new FormToolBarManager[] { defaultToolBar }; + } + if (ArrayUtils.isEmpty(toolBarManager)) { + return; + } + for (int i = 0; i < toolBarManager.length; i++) { + Location location = toolBarManager[i].getToolBarLocation(); + if (location instanceof Location.Embed) { + if (((Location.Embed)location).getPosition() == Constants.TOP) { + northToolBar.populateBean(toolBarManager[i].getToolBar()); + } else if (((Location.Embed)location).getPosition() == Constants.BOTTOM) { + southToolBar.populateBean(toolBarManager[i].getToolBar()); + } + } + } + } + + @Override + public FormToolBarManager[] updateBean() { + if(!isUseToolbar()){ + return new FormToolBarManager[0]; + } + List toolBarManagerList = new ArrayList(); + if (!northToolBar.isEmpty()) { + FormToolBarManager north = new FormToolBarManager(); + north.setToolBar(northToolBar.updateBean()); + north.setToolBarLocation(Location.createTopEmbedLocation()); + toolBarManagerList.add(north); + } + + if (!southToolBar.isEmpty()) { + FormToolBarManager south = new FormToolBarManager(); + south.setToolBar(southToolBar.updateBean()); + south.setToolBarLocation(Location.createBottomEmbedLocation()); + toolBarManagerList.add(south); + } + return toolBarManagerList.toArray(new FormToolBarManager[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/ElementCaseToolBarWrapper.java b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ElementCaseToolBarWrapper.java new file mode 100644 index 000000000..e244c2a22 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/wrappers/ElementCaseToolBarWrapper.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.FormToolBarManager; +import com.fr.general.Inter; + +/** + * Created by harry on 2017-3-1. + */ +public class ElementCaseToolBarWrapper 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; + } + FormToolBarManager[] toolBarManager = (FormToolBarManager[])v; + if (toolBarManager.length != 0) { + return Inter.getLocText("FR-Designer_Open"); + } + return Inter.getLocText("FR-Designer_Close"); + } +}