Browse Source

Merge pull request #909 in BA/design from ~HZZZ/design:fix-REPORT-2811 to dev

* commit 'd618b70f1e6a31a2906851af70a3c903bba6eb0d':
  fix
  use UIPopupMenu
  PMD
  REPORT-2811 设计器表单,点击控件下方的展开按钮,设计器最小化后,控件界面还在桌面上
master
superman 8 years ago
parent
commit
599423bc16
  1. 189
      designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java

189
designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java

@ -2,7 +2,6 @@ package com.fr.design.mainframe;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.constants.UIConstants;
import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XCreatorUtils;
@ -12,6 +11,7 @@ import com.fr.design.gui.core.WidgetOption;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
import com.fr.design.utils.gui.LayoutUtils; import com.fr.design.utils.gui.LayoutUtils;
import com.fr.form.ui.*; import com.fr.form.ui.*;
@ -28,10 +28,12 @@ import java.util.List;
public class FormParaWidgetPane extends JPanel { public class FormParaWidgetPane extends JPanel {
private static FormParaWidgetPane THIS; private static FormParaWidgetPane THIS;
private final static int BORDER = 5;
private List<WidgetOption> predifinedwidgeList = new ArrayList<WidgetOption>(); private List<WidgetOption> predifinedwidgeList = new ArrayList<WidgetOption>();
private JWindow chartTypeWindow; private UIPopupMenu chartTypePopupMenu;
private JWindow widgetTypeWindow; private UIPopupMenu widgetTypePopupMenu;
private WidgetOption[] widgetOptions = null; private WidgetOption[] widgetOptions = null;
private WidgetOption[] chartOptions = null; private WidgetOption[] chartOptions = null;
private WidgetOption[] layoutOptions = null; private WidgetOption[] layoutOptions = null;
@ -89,6 +91,56 @@ public class FormParaWidgetPane extends JPanel {
initFormParaComponent(); initFormParaComponent();
} }
private void initWidgetTypePopUp() {
if (widgetTypePopupMenu == null) {
JPanel widgetPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
loadPredefinedWidget();
int rowNum = calculateWidgetWindowRowNum();
JPanel westPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
for (WidgetOption o : loadWidgetOptions()) {
westPanel.add(new ToolBarButton(o));
}
int x = commonWidgetNum * (widgetButtonWidth + smallGAP) - smallGAP;
westPanel.setPreferredSize(new Dimension(x, (int) (rowNum * westPanel.getPreferredSize().getHeight())));
JPanel eastPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
for (WidgetOption no : predifinedwidgeList) {
eastPane.add(new ToolBarButton(no));
}
int maxWidth = preWidgetShowMaxNum * (widgetButtonWidth + smallGAP) - smallGAP;
int width = predifinedwidgeList.size() >= preWidgetShowMaxNum ? maxWidth : (int) eastPane.getPreferredSize().getWidth();
eastPane.setPreferredSize(new Dimension(width, (int) (rowNum * eastPane.getPreferredSize().getHeight())));
UIScrollPane eastScrollPane = new UIScrollPane(eastPane);
eastScrollPane.setBorder(null);
int maxHeight = preWidgetShowMaxRow * (widgetButtonHeight + smallGAP) - smallGAP;
int height = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? maxHeight : (int) eastPane.getPreferredSize().getHeight();
width = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? (int) eastPane.getPreferredSize().getWidth() + smallGAP + jsparatorWidth : (int) eastPane.getPreferredSize().getWidth();
eastScrollPane.setPreferredSize(new Dimension(width, height));
widgetPane.add(westPanel);
widgetPane.add(createJSeparator(height));
widgetPane.add(eastScrollPane);
widgetTypePopupMenu = new UIPopupMenu();
widgetTypePopupMenu.add(widgetPane);
}
}
private void initChartTypePopUp() {
if (chartTypePopupMenu == null){
JPanel componentsPara = new JPanel(new FlowLayout(FlowLayout.LEFT));
WidgetOption[] chartOptions = loadChartOptions();
for (WidgetOption chartOption : chartOptions) {
componentsPara.add(new ToolBarButton(chartOption));
}
int x = COMMON_CHAR_NUM * (widgetButtonWidth + smallGAP);
int y = (int) Math.ceil(chartOptions.length / ((double) COMMON_CHAR_NUM)) * (widgetButtonHeight + smallGAP);
componentsPara.setPreferredSize(new Dimension(x, y));
chartTypePopupMenu = new UIPopupMenu();
chartTypePopupMenu.add(componentsPara);
}
}
private void initFormParaComponent() { private void initFormParaComponent() {
this.removeAll(); this.removeAll();
@ -200,18 +252,10 @@ public class FormParaWidgetPane extends JPanel {
chartPopUpButton.addMouseListener(new MouseAdapter() { chartPopUpButton.addMouseListener(new MouseAdapter() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
JPanel componentsPara = new JPanel(new FlowLayout(FlowLayout.LEFT)); initChartTypePopUp();
WidgetOption[] chartOptions = loadChartOptions(); chartTypePopupMenu.show(FormParaWidgetPane.this,
for (WidgetOption chartOption : chartOptions) { (int) jSeparatorLayout.getLocation().getX() + BORDER,
componentsPara.add(new ToolBarButton(chartOption)); (int) jSeparatorLayout.getLocation().getY());
}
int x = COMMON_CHAR_NUM * (widgetButtonWidth + smallGAP);
int y = (int) Math.ceil(chartOptions.length / ((double) COMMON_CHAR_NUM)) * (widgetButtonHeight + smallGAP);
componentsPara.setPreferredSize(new Dimension(x, y));
chartTypeWindow = new PopUpWindow(componentsPara, Inter.getLocText("FR-Designer-Form-ToolBar_Chart"));
chartTypeWindow.setLocation((int) jSeparatorLayout.getLocationOnScreen().getX() + 1, (int) jSeparatorLayout.getLocationOnScreen().getY());
chartTypeWindow.setSize(chartTypeWindow.getPreferredSize());
chartTypeWindow.setVisible(true);
} }
}); });
labelPane.add(chartPopUpButton, BorderLayout.EAST); labelPane.add(chartPopUpButton, BorderLayout.EAST);
@ -228,40 +272,10 @@ public class FormParaWidgetPane extends JPanel {
chartPopUpButton.addMouseListener(new MouseAdapter() { chartPopUpButton.addMouseListener(new MouseAdapter() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
JPanel widgetPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); initWidgetTypePopUp();
loadPredefinedWidget(); widgetTypePopupMenu.show(FormParaWidgetPane.this,
int rowNum = calculateWidgetWindowRowNum(); (int) jSeparatorChart.getLocation().getX() + BORDER,
JPanel westPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); (int) jSeparatorChart.getLocation().getY());
for (WidgetOption o : loadWidgetOptions()) {
westPanel.add(new ToolBarButton(o));
}
int x = commonWidgetNum * (widgetButtonWidth + smallGAP);
westPanel.setPreferredSize(new Dimension(x, (int) (rowNum * westPanel.getPreferredSize().getHeight())));
JPanel eastPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
for (WidgetOption no : predifinedwidgeList) {
eastPane.add(new ToolBarButton(no));
}
int maxWidth = preWidgetShowMaxNum * (widgetButtonWidth + smallGAP);
int width = predifinedwidgeList.size() >= preWidgetShowMaxNum ? maxWidth : (int) eastPane.getPreferredSize().getWidth();
eastPane.setPreferredSize(new Dimension(width, (int) (rowNum * eastPane.getPreferredSize().getHeight())));
UIScrollPane eastScrollPane = new UIScrollPane(eastPane);
eastScrollPane.setBorder(null);
int maxHeight = preWidgetShowMaxRow * (widgetButtonHeight + smallGAP);
int height = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? maxHeight : (int) eastPane.getPreferredSize().getHeight();
width = predifinedwidgeList.size() >= preWidgetShowMaxNum * preWidgetShowMaxRow ? (int) eastPane.getPreferredSize().getWidth() + smallGAP + jsparatorWidth : (int) eastPane.getPreferredSize().getWidth();
eastScrollPane.setPreferredSize(new Dimension(width, height));
widgetPane.add(westPanel);
widgetPane.add(createJSeparator(height));
widgetPane.add(eastScrollPane);
widgetTypeWindow = new PopUpWindow(widgetPane, Inter.getLocText("FR-Designer-Form-ToolBar_Widget"));
widgetTypeWindow.setSize(widgetTypeWindow.getPreferredSize());
if (jSeparatorChart != null) {
widgetTypeWindow.setLocation((int) jSeparatorChart.getLocationOnScreen().getX() + 1, (int) jSeparatorChart.getLocationOnScreen().getY());
}
widgetTypeWindow.setVisible(true);
} }
}); });
@ -354,83 +368,6 @@ public class FormParaWidgetPane extends JPanel {
} }
} }
private class PopUpWindow extends JWindow {
private JPanel northPane;
private String typeName;
private int LineWidth = 5;
private int BarWidth = 10;
public PopUpWindow(JPanel northPane, String typeName) {
super();
this.northPane = northPane;
this.typeName = typeName;
this.getContentPane().add(initComponents());
this.doLayout();
Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK);
}
private AWTEventListener awt = new AWTEventListener() {
public void eventDispatched(AWTEvent event) {
if (event instanceof MouseEvent) {
MouseEvent mv = (MouseEvent) event;
if (mv.getClickCount() > 0) {
Point point = new Point((int) (mv.getLocationOnScreen().getX()), (int) mv.getLocationOnScreen().getY());
// 直接contains在mac下,点击内部也会消失
Dimension d = PopUpWindow.this.getSize();
Point p = PopUpWindow.this.getLocation();
Rectangle rect = new Rectangle(p, d);
if (!rect.contains(point)) {
PopUpWindow.this.setVisible(false);
}
}
}
}
};
protected JPanel initComponents() {
JPanel rootPane = new EditorChoosePane();
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(17, 0));
contentPane.add(northPane, BorderLayout.CENTER);
JPanel labelPane = new JPanel(new BorderLayout());
labelPane.add(new UILabel(typeName, UILabel.CENTER), BorderLayout.CENTER);
JButton popUpButton = createPopDownButton();
popUpButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
PopUpWindow.this.setVisible(false);
}
});
labelPane.add(popUpButton, BorderLayout.EAST);
contentPane.add(labelPane, BorderLayout.SOUTH);
rootPane.add(contentPane, BorderLayout.CENTER);
return rootPane;
}
}
private class EditorChoosePane extends JPanel {
public EditorChoosePane() {
super();
((FlowLayout) this.getLayout()).setVgap(1);
}
@Override
public void paintComponent(Graphics g) {
Rectangle r = this.getBounds();
g.setColor(UIConstants.NORMAL_BACKGROUND);
g.fillRoundRect(r.x, r.y, r.width, r.height, 0, 0);
g.setColor(UIConstants.LINE_COLOR);
g.drawLine(r.x, r.y, r.x, r.y + r.height);
g.drawLine(r.x, r.y + r.height - 1, r.x + r.width - 1, r.y + r.height - 1);
g.drawLine(r.x + r.width - 1, r.y, r.x + r.width - 1, r.y + r.height - 1);
}
}
private WidgetOption[] loadWidgetOptions() { private WidgetOption[] loadWidgetOptions() {
if (widgetOptions == null) { if (widgetOptions == null) {
widgetOptions = (WidgetOption[]) ArrayUtils.addAll(WidgetOption.getFormWidgetIntance(), ExtraDesignClassManager.getInstance().getFormWidgetOptions()); widgetOptions = (WidgetOption[]) ArrayUtils.addAll(WidgetOption.getFormWidgetIntance(), ExtraDesignClassManager.getInstance().getFormWidgetOptions());

Loading…
Cancel
Save