You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
308 lines
11 KiB
308 lines
11 KiB
8 years ago
|
package com.fr.design.actions.cell;
|
||
|
|
||
|
import java.awt.BorderLayout;
|
||
|
import java.awt.Color;
|
||
|
import java.awt.GridLayout;
|
||
|
import java.awt.event.MouseAdapter;
|
||
|
import java.awt.event.MouseEvent;
|
||
|
|
||
|
import javax.swing.BorderFactory;
|
||
|
import javax.swing.Box;
|
||
|
import javax.swing.Icon;
|
||
|
import javax.swing.JPanel;
|
||
|
import javax.swing.JPopupMenu;
|
||
|
import javax.swing.JSeparator;
|
||
|
import javax.swing.SwingUtilities;
|
||
|
import javax.swing.UIManager;
|
||
|
import javax.swing.event.ChangeEvent;
|
||
|
import javax.swing.event.ChangeListener;
|
||
|
import javax.swing.event.EventListenerList;
|
||
|
|
||
|
import com.fr.base.BaseUtils;
|
||
|
import com.fr.base.CellBorderStyle;
|
||
|
import com.fr.design.gui.ibutton.UIButton;
|
||
|
import com.fr.design.gui.ibutton.UICombinationButton;
|
||
|
import com.fr.design.gui.ipoppane.PopupHider;
|
||
|
import com.fr.design.icon.BorderIcon;
|
||
|
import com.fr.design.layout.FRGUIPaneFactory;
|
||
|
import com.fr.design.style.BorderUtils;
|
||
|
import com.fr.design.dialog.BasicDialog;
|
||
|
import com.fr.design.dialog.DialogActionAdapter;
|
||
|
import com.fr.general.Inter;
|
||
|
import com.fr.design.mainframe.ElementCasePane;
|
||
|
import com.fr.stable.Constants;
|
||
|
import com.fr.design.style.BorderPane;
|
||
|
import com.fr.design.style.color.TransparentPane;
|
||
|
import com.fr.design.utils.gui.GUICoreUtils;
|
||
|
|
||
|
/**
|
||
|
* 这个Pane用来显示常用边框和设置自定义边框
|
||
|
*
|
||
|
* @author richer
|
||
|
*
|
||
|
*/
|
||
|
public class UIToolbarBorderButton extends UICombinationButton implements PopupHider {
|
||
|
private EventListenerList styleChangeListenerList = new EventListenerList();
|
||
|
private boolean isCanBeNull = false;
|
||
|
private ElementCasePane reportPane;
|
||
|
private JPopupMenu popupWin;
|
||
|
|
||
|
public UIToolbarBorderButton(Icon icon, ElementCasePane reportPane) {
|
||
|
super(new UIButton(icon), new UIButton(BaseUtils.readIcon("/com/fr/design/images/gui/popup.gif")));
|
||
|
this.reportPane = reportPane;
|
||
|
}
|
||
|
|
||
|
public CellBorderStyle getCellBorderStyle() {
|
||
|
return this.cellBorderStyle;
|
||
|
}
|
||
|
|
||
|
public void setCellBorderStyle(CellBorderStyle cellBorderStyle) {
|
||
|
this.cellBorderStyle = cellBorderStyle;
|
||
|
this.leftButton.setIcon(new BorderIcon(cellBorderStyle));
|
||
|
fireStyleStateChanged();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void setEnabled(boolean enabled) {
|
||
|
super.setEnabled(enabled);
|
||
|
|
||
|
if (!enabled) {
|
||
|
cellBorderStyle = null;
|
||
|
}
|
||
|
|
||
|
leftButton.setEnabled(enabled);
|
||
|
rightButton.setEnabled(enabled);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void setToolTipText(String tooltipText) {
|
||
|
super.setToolTipText(tooltipText);
|
||
|
|
||
|
leftButton.setToolTipText(tooltipText);
|
||
|
rightButton.setToolTipText(tooltipText);
|
||
|
}
|
||
|
|
||
|
|
||
|
private void showPopupMenu() {
|
||
|
if (popupWin != null && popupWin.isVisible()) {
|
||
|
hidePopupMenu();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!this.isEnabled()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
popupWin = this.getActionPopupMenu();
|
||
|
GUICoreUtils.showPopupMenu(popupWin, this, 0, this.getSize().height);
|
||
|
}
|
||
|
|
||
|
protected JPopupMenu getActionPopupMenu() {
|
||
|
if (this.popupWin == null) {
|
||
|
this.popupWin = new BorderStyleControlWindow(this.isCanBeNull());
|
||
|
}
|
||
|
|
||
|
return popupWin;
|
||
|
}
|
||
|
|
||
|
protected void leftButtonClickEvent() {
|
||
|
UIToolbarBorderButton.this.cellBorderStyle = ((BorderIcon)getLeftButton().getIcon()).cellBorderStyle;
|
||
|
UIToolbarBorderButton.this.fireStyleStateChanged();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void rightButtonClickEvent() {
|
||
|
showPopupMenu();
|
||
|
}
|
||
|
|
||
|
class BorderStyleControlWindow extends JPopupMenu {
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*/
|
||
|
public BorderStyleControlWindow(boolean isSupportTransparent) {
|
||
|
this.initComponents(isSupportTransparent);
|
||
|
}
|
||
|
|
||
|
public void initComponents(boolean isSupportTransparent) {
|
||
|
setLightWeightPopupEnabled(JPopupMenu.getDefaultLightWeightPopupEnabled());
|
||
|
|
||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout());
|
||
|
setBorderPainted(true);
|
||
|
setBorder(UIManager.getBorder("PopupMenu.border"));
|
||
|
setOpaque(false);
|
||
|
setDoubleBuffered(true);
|
||
|
setFocusable(false);
|
||
|
|
||
|
this.add(new NormalBorderPane(isSupportTransparent, UIToolbarBorderButton.this), BorderLayout.CENTER);
|
||
|
this.pack();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// richer:常用边框线类型展现面板
|
||
|
class NormalBorderPane extends TransparentPane {
|
||
|
PopupHider popupHider;
|
||
|
|
||
|
public NormalBorderPane(boolean isSupportTransparent, PopupHider popupHider) {
|
||
|
super(isSupportTransparent);
|
||
|
this.popupHider = popupHider;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void initCenterPaneChildren(JPanel centerPane) {
|
||
|
JPanel menuColorPane = new /**/JPanel();
|
||
|
centerPane.add(menuColorPane);
|
||
|
|
||
|
menuColorPane.setLayout(new /**/GridLayout(3, 4, 2, 2));
|
||
|
for (int i = 0; i < borderStyleArray.length; i++) {
|
||
|
final UIButton borderStyleCell = new UIButton(new BorderIcon(borderStyleArray[i]));
|
||
|
borderStyleCell.set4ToolbarButton();
|
||
|
borderStyleCell.addMouseListener(new MouseAdapter() {
|
||
|
@Override
|
||
|
public void mousePressed(MouseEvent e) {
|
||
|
UIButton toolBarButton = (UIButton) e.getSource();
|
||
|
if (toolBarButton.getIcon() instanceof BorderIcon) {
|
||
|
BorderIcon borderIcon = (BorderIcon) toolBarButton.getIcon();
|
||
|
UIToolbarBorderButton.this.setCellBorderStyle(borderIcon.cellBorderStyle);
|
||
|
hidePopupMenu();
|
||
|
} else {
|
||
|
UIToolbarBorderButton.this.setCellBorderStyle(borderStyleArray[0]);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
borderStyleCell.addMouseListener(new MouseAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void mouseEntered(MouseEvent e) {
|
||
|
borderStyleCell.setBorder(BorderFactory.createEtchedBorder());
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void mouseExited(MouseEvent e) {
|
||
|
borderStyleCell.setBorder(null);
|
||
|
}
|
||
|
});
|
||
|
borderStyleCell.setToolTipText(BorderStyleTooltips[i]);
|
||
|
menuColorPane.add(borderStyleCell);
|
||
|
}
|
||
|
|
||
|
centerPane.add(Box.createVerticalStrut(5));
|
||
|
centerPane.add(new JSeparator());
|
||
|
centerPane.add(Box.createVerticalStrut(5));
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void doTransparent() {
|
||
|
UIToolbarBorderButton.this.setCellBorderStyle(null);
|
||
|
popupHider.hidePopupMenu();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void customButtonPressed() {
|
||
|
popupHider.hidePopupMenu();
|
||
|
final BorderPane borderPane = new BorderPane();
|
||
|
BasicDialog borderDialog = borderPane.showWindow(SwingUtilities.getWindowAncestor(reportPane));
|
||
|
Object[] fourObjectArray = BorderUtils.createCellBorderObject(reportPane);
|
||
|
if (fourObjectArray != null && fourObjectArray.length == 4) {
|
||
|
borderPane.populate((CellBorderStyle) fourObjectArray[0], ((Boolean) fourObjectArray[1]).booleanValue(),
|
||
|
((Integer) fourObjectArray[2]).intValue(), (Color) fourObjectArray[3]);
|
||
|
}
|
||
|
borderDialog.addDialogActionListener(new DialogActionAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void doOk() {
|
||
|
CellBorderStyle cellBorderStyle = borderPane.update();
|
||
|
UIToolbarBorderButton.this.setCellBorderStyle(cellBorderStyle);
|
||
|
}
|
||
|
});
|
||
|
borderDialog.setVisible(true);
|
||
|
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected String title4PopupWindow() {
|
||
|
return Inter.getLocText("Border");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds a new StyleChangeListener
|
||
|
*/
|
||
|
public void addStyleChangeListener(ChangeListener changeListener) {
|
||
|
styleChangeListenerList.add(ChangeListener.class, changeListener);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Removes an old StyleChangeListener.
|
||
|
*/
|
||
|
public void removeColorChangeListener(ChangeListener changeListener) {
|
||
|
styleChangeListenerList.remove(ChangeListener.class, changeListener);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public void fireStyleStateChanged() {
|
||
|
Object[] listeners = styleChangeListenerList.getListenerList();
|
||
|
ChangeEvent e = null;
|
||
|
|
||
|
for (int i = listeners.length - 2; i >= 0; i -= 2) {
|
||
|
if (listeners[i] == ChangeListener.class) {
|
||
|
if (e == null) {
|
||
|
e = new ChangeEvent(this);
|
||
|
}
|
||
|
((ChangeListener) listeners[i + 1]).stateChanged(e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean isCanBeNull() {
|
||
|
return this.isCanBeNull;
|
||
|
}
|
||
|
|
||
|
public void setCanBeNull(boolean isCanBeNull) {
|
||
|
this.isCanBeNull = isCanBeNull;
|
||
|
}
|
||
|
|
||
|
private CellBorderStyle cellBorderStyle = new CellBorderStyle();
|
||
|
|
||
|
private static final CellBorderStyle[] borderStyleArray = {
|
||
|
new CellBorderStyle(),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_THIN, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_NONE, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black,
|
||
|
Constants.LINE_THIN, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_DOUBLE, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_THICK, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_THIN, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_DOUBLE, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_THICK, Color.black,
|
||
|
Constants.LINE_NONE, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_THIN, Color.black,
|
||
|
Constants.LINE_THIN, Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_THIN),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_THIN, Color.black, Constants.LINE_THIN, Color.black,
|
||
|
Constants.LINE_THIN, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE),
|
||
|
new CellBorderStyle(Color.black, Constants.LINE_THICK, Color.black, Constants.LINE_THICK, Color.black, Constants.LINE_THICK, Color.black,
|
||
|
Constants.LINE_THICK, Color.black, Constants.LINE_NONE, Color.black, Constants.LINE_NONE) };
|
||
|
private static final String[] BorderStyleTooltips = { Inter.getLocText("NO_Border_Line"), Inter.getLocText("Bottom_Border_Line"),
|
||
|
Inter.getLocText("Left_Border_Line"), Inter.getLocText("Right_Border_Line"), Inter.getLocText("Double_Bottom_BorderLine"),
|
||
|
Inter.getLocText("Thick_Bottom_Border_Line"), Inter.getLocText("Top_Bottom_Border_Line"),
|
||
|
Inter.getLocText("Top_And_Double_Bottom_Border_Line"), Inter.getLocText("Top_And_Thick_Bottom_Border_Line"),
|
||
|
Inter.getLocText("All_Border_Line"), Inter.getLocText("Out_Border_Line"), Inter.getLocText("Out_Thick_Border_Line") };
|
||
|
|
||
|
@Override
|
||
|
public void hidePopupMenu() {
|
||
|
if (popupWin != null) {
|
||
|
popupWin.setVisible(false);
|
||
|
}
|
||
|
|
||
|
popupWin = null;
|
||
|
}
|
||
|
}
|