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.
170 lines
5.4 KiB
170 lines
5.4 KiB
package com.fr.poly; |
|
|
|
import com.fr.base.BaseUtils; |
|
import com.fr.base.chart.BaseChart; |
|
import com.fr.base.chart.BaseChartGetter; |
|
import com.fr.base.chart.BaseChartNameID; |
|
import com.fr.base.vcs.DesignerMode; |
|
import com.fr.design.ChartTypeInterfaceManager; |
|
import com.fr.design.constants.UIConstants; |
|
import com.fr.design.gui.ibutton.UIButton; |
|
import com.fr.design.gui.itooltip.MultiLineToolTip; |
|
import com.fr.design.i18n.Toolkit; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.mainframe.dnd.SerializableTransferable; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.report.poly.PolyECBlock; |
|
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; |
|
|
|
import javax.swing.BorderFactory; |
|
import javax.swing.JFrame; |
|
import javax.swing.JPanel; |
|
import javax.swing.JToolBar; |
|
import javax.swing.JToolTip; |
|
import javax.swing.SwingConstants; |
|
import javax.swing.UIManager; |
|
import javax.swing.UnsupportedLookAndFeelException; |
|
import java.awt.BorderLayout; |
|
import java.awt.Dimension; |
|
import java.awt.datatransfer.Transferable; |
|
import java.awt.dnd.DnDConstants; |
|
import java.awt.dnd.DragGestureEvent; |
|
import java.awt.dnd.DragGestureListener; |
|
import java.awt.dnd.DragSource; |
|
import java.awt.dnd.DragSourceDragEvent; |
|
import java.awt.dnd.DragSourceDropEvent; |
|
import java.awt.dnd.DragSourceEvent; |
|
import java.awt.dnd.DragSourceListener; |
|
import java.io.Serializable; |
|
|
|
/** |
|
* 拖动聚合块的那个竖的动作条 |
|
* |
|
* @editor zhou |
|
* @since 2012-3-23下午3:42:10 |
|
*/ |
|
public class PolyComponentsBar extends JToolBar { |
|
private SerIcon[] serIcons; |
|
private static final int MAX_BAR_NUM = 15; |
|
|
|
public PolyComponentsBar() { |
|
setOrientation(SwingConstants.VERTICAL); |
|
setBorder(BorderFactory.createEmptyBorder(4, 4, 0, 4)); |
|
setFloatable(false); |
|
setBackground(UIConstants.TOOLBARUI_BACKGROUND); |
|
setLayout(FRGUIPaneFactory.create1ColumnGridLayout()); |
|
BaseChartNameID[] typeName = BaseChartGetter.getStaticAllChartBaseNames(); |
|
int typeLen = typeName.length < MAX_BAR_NUM ? typeName.length : MAX_BAR_NUM; |
|
serIcons = new SerIcon[typeLen + 1]; |
|
serIcons[0] = new SerIcon( |
|
PolyECBlock.class, |
|
Toolkit.i18nText("Fine-Design_Report_Poly_Report_Block"), |
|
"com/fr/design/images/poly/toolbar/Poly-Report_Block.png" |
|
); |
|
this.add(serIcons[0]); |
|
for (int i = 0; i < typeLen; i++) { |
|
BaseChart[] rowChart = BaseChartGetter.getStaticChartTypes(typeName[i].getPlotID()); |
|
String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(typeName[i].getPlotID()); |
|
serIcons[i + 1] = new SerIcon(rowChart[0], Toolkit.i18nText(typeName[i].getName()), iconPath); |
|
this.add(serIcons[i + 1]); |
|
} |
|
|
|
} |
|
|
|
/** |
|
* 设置是否可用状态 |
|
*/ |
|
public void checkEnable() { |
|
for (SerIcon serIcon : serIcons) { |
|
serIcon.setEnabled(!DesignerMode.isAuthorityEditing()); |
|
} |
|
} |
|
|
|
private class SerIcon extends UIButton implements DragGestureListener, DragSourceListener { |
|
private DragSource dragSource; |
|
private Serializable serializable; |
|
|
|
/** |
|
* @param serializable s |
|
* @param text 按钮名 |
|
* @param iconPath 图标路径 |
|
*/ |
|
public SerIcon(Serializable serializable, String text, String iconPath) { |
|
super(BaseUtils.readIcon(iconPath)); |
|
this.serializable = serializable; |
|
this.setToolTipText(text); |
|
this.set4ToolbarButton(); |
|
dragSource = new DragSource(); |
|
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this); |
|
} |
|
|
|
@Override |
|
public Dimension getPreferredSize() { |
|
return new Dimension(getIcon().getIconWidth(), getIcon().getIconHeight()); |
|
} |
|
|
|
@Override |
|
public JToolTip createToolTip() { |
|
MultiLineToolTip tip = new MultiLineToolTip(); |
|
tip.setComponent(this); |
|
tip.setOpaque(false); |
|
return tip; |
|
} |
|
|
|
@Override |
|
public void dragGestureRecognized(DragGestureEvent dge) { |
|
Transferable t = new SerializableTransferable(serializable); |
|
dragSource.startDrag(dge, DragSource.DefaultCopyDrop, t, this); |
|
getModel().setArmed(false); |
|
getModel().setRollover(false); |
|
repaint(); |
|
} |
|
|
|
@Override |
|
public void dragEnter(DragSourceDragEvent dsde) { |
|
|
|
} |
|
|
|
@Override |
|
public void dragOver(DragSourceDragEvent dsde) { |
|
|
|
} |
|
|
|
@Override |
|
public void dropActionChanged(DragSourceDragEvent dsde) { |
|
|
|
} |
|
|
|
@Override |
|
public void dragExit(DragSourceEvent dse) { |
|
|
|
} |
|
|
|
@Override |
|
public void dragDropEnd(DragSourceDropEvent dsde) { |
|
|
|
} |
|
} |
|
|
|
/** |
|
* 测试下 |
|
* |
|
* @param args 参数 |
|
*/ |
|
public static void main(String... args) { |
|
try { |
|
UIManager.setLookAndFeel(new WindowsLookAndFeel()); |
|
} catch (UnsupportedLookAndFeelException e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
} |
|
JFrame f = new JFrame(); |
|
JPanel p = (JPanel) f.getContentPane(); |
|
p.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
PolyComponentsBar pbp = new PolyComponentsBar(); |
|
p.add(pbp, BorderLayout.CENTER); |
|
|
|
f.setSize(400, 300); |
|
f.setVisible(true); |
|
|
|
} |
|
}
|
|
|