forked from fanruan/design
hades
3 years ago
7 changed files with 247 additions and 56 deletions
After Width: | Height: | Size: 255 B |
After Width: | Height: | Size: 220 B |
@ -1,47 +0,0 @@
|
||||
package com.fr.design.designer.creator; |
||||
|
||||
import com.fr.design.form.util.XCreatorConstants; |
||||
import com.fr.general.IOUtils; |
||||
import java.awt.AlphaComposite; |
||||
import java.awt.Color; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Image; |
||||
import java.awt.Rectangle; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/06/30 |
||||
*/ |
||||
public class SelectedBorderIcon { |
||||
|
||||
private static final Image EDIT_ICON = IOUtils.readImage("/com/fr/design/images/control/show_edit.png"); |
||||
private static final Image SETTING_ICON = IOUtils.readImage("/com/fr/design/images/control/show_setting.png"); |
||||
private static final float ALPHA = 0.7F; |
||||
private static final int TIP_WIDTH = 20; |
||||
private static final int TIP_HEIGHT = 40; |
||||
private static final int ARC_VALUE = 4; |
||||
// 组件到整个提示之间的空隙
|
||||
private static final int CREATOR_TO_TIP_GAP = 5; |
||||
// icon在整个提示背景下缩进
|
||||
private static final int TIP_ICON_GAP = 2; |
||||
|
||||
/** |
||||
* 在bounds范围的右上角绘制特定图标 |
||||
* |
||||
* @param g |
||||
* @param bounds |
||||
*/ |
||||
public void paint(Graphics g, Rectangle bounds) { |
||||
Graphics2D g2d = (Graphics2D) g; |
||||
AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, ALPHA); |
||||
g2d.setColor(XCreatorConstants.EDIT_COLOR); |
||||
g2d.setComposite(alphaComposite); |
||||
g2d.fillRoundRect(bounds.x + bounds.width + CREATOR_TO_TIP_GAP, bounds.y, TIP_WIDTH, TIP_HEIGHT, ARC_VALUE, ARC_VALUE); |
||||
g2d.drawImage(EDIT_ICON, bounds.x + bounds.width + CREATOR_TO_TIP_GAP + TIP_ICON_GAP, bounds.y + TIP_ICON_GAP, EDIT_ICON.getWidth(null), EDIT_ICON.getHeight(null), null); |
||||
g2d.drawImage(SETTING_ICON, bounds.x + bounds.width + CREATOR_TO_TIP_GAP + TIP_ICON_GAP, bounds.y + CREATOR_TO_TIP_GAP + EDIT_ICON.getHeight(null), SETTING_ICON.getWidth(null), SETTING_ICON.getHeight(null), null); |
||||
g2d.setColor(Color.WHITE); |
||||
g2d.drawLine(bounds.x + bounds.width + CREATOR_TO_TIP_GAP + TIP_ICON_GAP, bounds.y + TIP_WIDTH, bounds.x + bounds.width + CREATOR_TO_TIP_GAP + TIP_ICON_GAP + EDIT_ICON.getWidth(null), bounds.y + TIP_WIDTH); |
||||
} |
||||
} |
@ -0,0 +1,193 @@
|
||||
package com.fr.design.designer.ui; |
||||
|
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.CoverReportPane; |
||||
import com.fr.design.mainframe.EditingMouseListener; |
||||
import com.fr.design.mainframe.FormDesigner; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.stable.ArrayUtils; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.awt.Container; |
||||
import java.awt.Dimension; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Insets; |
||||
import java.awt.LayoutManager; |
||||
import java.awt.Rectangle; |
||||
import java.awt.RenderingHints; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
import java.awt.event.MouseListener; |
||||
import javax.swing.AbstractButton; |
||||
import javax.swing.Icon; |
||||
import javax.swing.JButton; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JToggleButton; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/7/8 |
||||
*/ |
||||
public class PopupControlPanel extends JPanel { |
||||
|
||||
private static final int ARC_VALUE = 4; |
||||
private static final Color FILLED_COLOR = new Color(60, 63, 65); |
||||
private static final int V_GAP = 10; |
||||
private static final int H_GAP = 2; |
||||
|
||||
private Dimension defaultDimension = new Dimension(20, 60); |
||||
private Rectangle rectangle; |
||||
private final JButton editButton; |
||||
private final JButton settingButton; |
||||
private final JToggleButton toggleButton; |
||||
private final XCreator creator; |
||||
private final UILabel firstLabel; |
||||
private final UILabel secondLabel; |
||||
|
||||
public PopupControlPanel(XCreator creator, FormDesigner designer) { |
||||
FineLoggerFactory.getLogger().error("shared: {}", creator.isShared()); |
||||
if (creator.isShared()) { |
||||
defaultDimension = new Dimension(20, 85); |
||||
} |
||||
setLayout(getCustomLayout()); |
||||
this.creator = creator; |
||||
editButton = createNormalButton(IOUtils.readIcon("/com/fr/design/images/control/show_edit.png"), Toolkit.i18nText("Fine-Design_Form_Edit_Widget")); |
||||
editButton.addMouseListener(new MouseAdapter() { |
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
int x = rectangle.x + rectangle.width / 2; |
||||
int y = rectangle.y + rectangle.height / 2; |
||||
XCreator childCreator = PopupControlPanel.this.creator.getEditingChildCreator(); |
||||
MouseListener[] listeners = designer.getMouseListeners(); |
||||
if (ArrayUtils.isNotEmpty(listeners) && listeners[0] instanceof EditingMouseListener) { |
||||
childCreator.respondClick(((EditingMouseListener) listeners[0]), new MouseEvent(childCreator, MouseEvent.MOUSE_CLICKED, e.getWhen(), e.getModifiers(), x, y, 2, false)); |
||||
} |
||||
} |
||||
}); |
||||
settingButton = createNormalButton(IOUtils.readIcon("/com/fr/design/images/control/show_setting.png"), Toolkit.i18nText("Fine-Design_Share_Help_Settings")); |
||||
|
||||
settingButton.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
CoverReportPane.showShareConfig(creator.toData()); |
||||
} |
||||
}); |
||||
toggleButton = new JToggleButton(IOUtils.readIcon("/com/fr/design/images/control/edit_lock.png")); |
||||
initButtonStyle(toggleButton); |
||||
toggleButton.setSelectedIcon(IOUtils.readIcon("com/fr/design/images/control/edit_unlock.png")); |
||||
toggleButton.setToolTipText(Toolkit.i18nText("Fine-Design_Form_Lock_Widget_Ratio")); |
||||
toggleButton.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
JToggleButton toggleBtn = (JToggleButton) e.getSource(); |
||||
String toolTipText = toggleBtn.isSelected() ? Toolkit.i18nText("Fine-Design_Form_UnLock_Widget_Ratio") : Toolkit.i18nText("Fine-Design_Form_Lock_Widget_Ratio"); |
||||
toggleBtn.setToolTipText(toolTipText); |
||||
} |
||||
}); |
||||
|
||||
firstLabel = createLabel(); |
||||
secondLabel = createLabel(); |
||||
|
||||
add(editButton); |
||||
add(toggleButton); |
||||
add(settingButton); |
||||
add(firstLabel); |
||||
add(secondLabel); |
||||
} |
||||
|
||||
protected LayoutManager getCustomLayout() { |
||||
return new LayoutManager() { |
||||
|
||||
@Override |
||||
public void removeLayoutComponent(Component comp) { |
||||
} |
||||
|
||||
@Override |
||||
public Dimension preferredLayoutSize(Container parent) { |
||||
return defaultDimension; |
||||
} |
||||
|
||||
@Override |
||||
public Dimension minimumLayoutSize(Container parent) { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void layoutContainer(Container parent) { |
||||
int width = parent.getPreferredSize().width; |
||||
int buttonWidth = editButton.getPreferredSize().width; |
||||
int buttonHeight = editButton.getPreferredSize().height; |
||||
int x = (width - buttonWidth) / 2; |
||||
editButton.setBounds(x, V_GAP, buttonWidth, buttonHeight); |
||||
firstLabel.setBounds(x, V_GAP + editButton.getHeight() + V_GAP / 2, buttonWidth, buttonHeight); |
||||
toggleButton.setBounds(x, V_GAP * 2 + editButton.getHeight(), buttonWidth, buttonHeight); |
||||
if (creator.isShared()) { |
||||
secondLabel.setBounds(x, V_GAP * 2 + editButton.getHeight() + toggleButton.getHeight() + V_GAP / 2, buttonWidth, buttonHeight); |
||||
settingButton.setBounds(x, V_GAP * 3 + editButton.getHeight() + toggleButton.getHeight(), buttonWidth, buttonHeight); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void addLayoutComponent(String name, Component comp) { |
||||
} |
||||
}; |
||||
} |
||||
|
||||
private JButton createNormalButton(Icon icon, String toolTipText) { |
||||
JButton button = new JButton(icon); |
||||
initButtonStyle(button); |
||||
button.setToolTipText(toolTipText); |
||||
return button; |
||||
} |
||||
|
||||
private void initButtonStyle(AbstractButton button) { |
||||
button.setBorderPainted(false); |
||||
button.setBorder(null); |
||||
button.setMargin(new Insets(0, 0, 0, 0)); |
||||
button.setContentAreaFilled(false); |
||||
} |
||||
|
||||
private UILabel createLabel() { |
||||
return new UILabel() { |
||||
@Override |
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Graphics2D g2d = (Graphics2D) g; |
||||
g2d.setColor(Color.WHITE); |
||||
g2d.drawLine(H_GAP, 0, toggleButton.getWidth() - H_GAP, 0); |
||||
|
||||
} |
||||
}; |
||||
} |
||||
|
||||
@Override |
||||
protected void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
int w = this.getWidth(); |
||||
int h = this.getHeight(); |
||||
Graphics2D g2d = (Graphics2D) g; |
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
||||
g2d.setColor(FILLED_COLOR); |
||||
g2d.fillRoundRect(0, 0, w - 1, h - 1, ARC_VALUE, ARC_VALUE); |
||||
g2d.setColor(Color.WHITE); |
||||
g2d.drawRoundRect(0, 0, w - 1, h - 1, ARC_VALUE, ARC_VALUE); |
||||
} |
||||
|
||||
public Dimension getDefaultDimension() { |
||||
return defaultDimension; |
||||
} |
||||
|
||||
public void setRelativeBounds(Rectangle rectangle) { |
||||
this.rectangle = rectangle; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,36 @@
|
||||
package com.fr.design.designer.ui; |
||||
|
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.FormDesigner; |
||||
import java.awt.Rectangle; |
||||
import javax.swing.JDialog; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/7/09 |
||||
*/ |
||||
public class SelectedPopupDialog extends JDialog { |
||||
|
||||
/** |
||||
* 弹窗的相对组件的偏移 |
||||
*/ |
||||
public static final int OFFSET_X = 5; |
||||
|
||||
private final PopupControlPanel controlPanel; |
||||
|
||||
public SelectedPopupDialog(XCreator creator, FormDesigner designer) { |
||||
super(DesignerContext.getDesignerFrame()); |
||||
this.setUndecorated(true); |
||||
this.setModal(false); |
||||
controlPanel = new PopupControlPanel(creator, designer); |
||||
this.getContentPane().add(controlPanel); |
||||
this.setSize(controlPanel.getDefaultDimension()); |
||||
} |
||||
|
||||
public void setRelativeBounds(Rectangle rectangle) { |
||||
this.controlPanel.setRelativeBounds(rectangle); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue