daniel
8 years ago
61 changed files with 232 additions and 2432 deletions
@ -1,37 +0,0 @@ |
|||||||
package com.fr.design.event; |
|
||||||
|
|
||||||
import com.fr.design.gui.itree.filetree.TemplateFileTree; |
|
||||||
import com.fr.design.mainframe.dnd.ArrayTransferable; |
|
||||||
import com.fr.design.mainframe.dnd.SerializableTransferable; |
|
||||||
import com.fr.general.web.ParameterConsts; |
|
||||||
import com.fr.stable.StringUtils; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.*; |
|
||||||
import java.awt.dnd.DragGestureEvent; |
|
||||||
import java.awt.dnd.DragGestureListener; |
|
||||||
import java.awt.dnd.DragSource; |
|
||||||
import java.awt.dnd.DragSourceAdapter; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created with IntelliJ IDEA. |
|
||||||
* User: richie |
|
||||||
* Date: 13-11-4 |
|
||||||
* Time: 下午2:17 |
|
||||||
*/ |
|
||||||
public class TemplateTreeDragSource extends DragSourceAdapter implements DragGestureListener { |
|
||||||
private DragSource source; |
|
||||||
|
|
||||||
public TemplateTreeDragSource(JTree tree, int actions) { |
|
||||||
source = new DragSource(); |
|
||||||
source.createDefaultDragGestureRecognizer(tree, actions, this); |
|
||||||
|
|
||||||
} |
|
||||||
public void dragGestureRecognized(DragGestureEvent dge) { |
|
||||||
Component comp = dge.getComponent(); |
|
||||||
if (comp instanceof TemplateFileTree) { |
|
||||||
String selectedPath = ((TemplateFileTree)comp).getSelectedTemplatePath(); |
|
||||||
source.startDrag(dge, DragSource.DefaultLinkDrop, new SerializableTransferable(selectedPath), this); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,13 @@ |
|||||||
|
package com.fr.design.gui.chart; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by daniel on 2016/11/2. |
||||||
|
*/ |
||||||
|
public interface ChartEditPaneProvider { |
||||||
|
|
||||||
|
|
||||||
|
void gotoPane(String... id); |
||||||
|
|
||||||
|
void fire(); |
||||||
|
|
||||||
|
} |
File diff suppressed because one or more lines are too long
@ -1,143 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
package com.fr.design.mainframe; |
|
||||||
|
|
||||||
import java.awt.BorderLayout; |
|
||||||
import java.awt.Component; |
|
||||||
|
|
||||||
import javax.swing.BorderFactory; |
|
||||||
import javax.swing.JComponent; |
|
||||||
import javax.swing.JPanel; |
|
||||||
import javax.swing.SwingConstants; |
|
||||||
import javax.swing.event.ChangeEvent; |
|
||||||
import javax.swing.event.ChangeListener; |
|
||||||
|
|
||||||
import com.fr.chart.chartattr.ChartCollection; |
|
||||||
import com.fr.design.constants.UIConstants; |
|
||||||
import com.fr.design.designer.TargetComponent; |
|
||||||
import com.fr.design.gui.ibutton.UIToggleButton; |
|
||||||
import com.fr.design.gui.ilable.UILabel; |
|
||||||
import com.fr.design.gui.itabpane.TitleChangeListener; |
|
||||||
import com.fr.design.layout.FRGUIPaneFactory; |
|
||||||
import com.fr.design.module.DesignModuleFactory; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
public class ChartAndWidgetPropertyPane extends MiddleChartPropertyPane { |
|
||||||
|
|
||||||
public synchronized static ChartAndWidgetPropertyPane getInstance(BaseFormDesigner formEditor) { |
|
||||||
if(singleton == null) { |
|
||||||
singleton = new ChartAndWidgetPropertyPane(formEditor); |
|
||||||
} |
|
||||||
|
|
||||||
singleton.setWidgetPropertyPane(DesignModuleFactory.getWidgetPropertyPane(formEditor)); |
|
||||||
singleton.setSureProperty(); |
|
||||||
return singleton; |
|
||||||
} |
|
||||||
|
|
||||||
public static ChartAndWidgetPropertyPane getInstance() { |
|
||||||
if(singleton == null) { |
|
||||||
singleton = new ChartAndWidgetPropertyPane(); |
|
||||||
} |
|
||||||
return singleton; |
|
||||||
} |
|
||||||
|
|
||||||
private static ChartAndWidgetPropertyPane singleton; |
|
||||||
|
|
||||||
private BaseWidgetPropertyPane widgetpane = null; |
|
||||||
|
|
||||||
private UIToggleButton hisButton; |
|
||||||
|
|
||||||
public ChartAndWidgetPropertyPane() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
public ChartAndWidgetPropertyPane(BaseFormDesigner formEditor) { |
|
||||||
super(); |
|
||||||
this.widgetpane = DesignModuleFactory.getWidgetPropertyPane(formEditor); |
|
||||||
} |
|
||||||
|
|
||||||
public void setWidgetPropertyPane(BaseWidgetPropertyPane pane) { |
|
||||||
this.widgetpane = pane; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected void createMainPane() { |
|
||||||
this.add(chartEditPane, BorderLayout.CENTER); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected void createNameLabel() { |
|
||||||
nameLabel = new UILabel(); |
|
||||||
nameLabel.setHorizontalAlignment(SwingConstants.LEFT); |
|
||||||
nameLabel.setBorder(BorderFactory.createEmptyBorder(-2, 6, 2, 0)); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected JComponent createNorthComponent() { |
|
||||||
JPanel toolPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
||||||
|
|
||||||
JPanel hisPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
||||||
hisPane.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); |
|
||||||
hisButton = new UIToggleButton(Inter.getLocText(new String[]{"Widget", "Attribute"}), UIConstants.HISTORY_ICON); |
|
||||||
hisButton.setNormalPainted(false); |
|
||||||
hisButton.setBorderPaintedOnlyWhenPressed(true); |
|
||||||
hisPane.add(hisButton, BorderLayout.CENTER); |
|
||||||
|
|
||||||
hisButton.addChangeListener(new ChangeListener() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void stateChanged(ChangeEvent e) { |
|
||||||
cardChange(); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
toolPane.add(nameLabel, BorderLayout.CENTER); |
|
||||||
toolPane.add(hisPane, BorderLayout.EAST); |
|
||||||
|
|
||||||
titleListener = new TitleChangeListener() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void fireTitleChange(String addName) { |
|
||||||
if(hisButton.isSelected()) { |
|
||||||
nameLabel.setText(Inter.getLocText(new String[]{"Widget", "Form-Widget_Property_Table"})); |
|
||||||
}else { |
|
||||||
nameLabel.setText(Inter.getLocText("Chart-Property_Table") + '-' + addName); |
|
||||||
} |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
return toolPane; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 感觉ChartCollection加载图表属性界面. |
|
||||||
* @param collection 收集图表 |
|
||||||
* @param ePane 面板 |
|
||||||
*/ |
|
||||||
public void populateChartPropertyPane(ChartCollection collection, TargetComponent<?> ePane) { |
|
||||||
super.populateChartPropertyPane(collection, ePane); |
|
||||||
//表单中的图表切换界面上得更新
|
|
||||||
resetChartEditPane(); |
|
||||||
} |
|
||||||
|
|
||||||
protected void resetChartEditPane() { |
|
||||||
cardChange(); |
|
||||||
} |
|
||||||
|
|
||||||
private void cardChange() { |
|
||||||
remove(chartEditPane); |
|
||||||
remove((Component)widgetpane); |
|
||||||
if(hisButton.isSelected()) { |
|
||||||
nameLabel.setText(Inter.getLocText(new String[]{"Widget", "Form-Widget_Property_Table"})); |
|
||||||
add((Component)widgetpane, BorderLayout.CENTER); |
|
||||||
} else { |
|
||||||
String tabname = chartEditPane.getSelectedTabName(); |
|
||||||
nameLabel.setText(Inter.getLocText(new String[]{"Utils-The-Chart", "Form-Widget_Property_Table"}) + (tabname != null ? ('-' + chartEditPane.getSelectedTabName()) : "")); |
|
||||||
add(chartEditPane, BorderLayout.CENTER); |
|
||||||
} |
|
||||||
validate(); |
|
||||||
repaint(); |
|
||||||
revalidate(); |
|
||||||
} |
|
||||||
} |
|
@ -1,134 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe; |
|
||||||
|
|
||||||
import com.fr.base.chart.BaseChartCollection; |
|
||||||
import com.fr.chart.chartattr.ChartCollection; |
|
||||||
import com.fr.design.designer.TargetComponent; |
|
||||||
import com.fr.design.gui.chart.BaseChartPropertyPane; |
|
||||||
import com.fr.design.gui.ilable.UILabel; |
|
||||||
import com.fr.design.gui.itabpane.TitleChangeListener; |
|
||||||
import com.fr.design.mainframe.chart.ChartDesignEditPane; |
|
||||||
import com.fr.design.mainframe.chart.ChartEditPane; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.*; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 下午12:43 |
|
||||||
*/ |
|
||||||
public class ChartDesignerPropertyPane extends BaseChartPropertyPane { |
|
||||||
private static ChartDesignerPropertyPane instance; |
|
||||||
private TargetComponentContainer container = new TargetComponentContainer(); |
|
||||||
private ChartEditPane chartEditPane; |
|
||||||
private UILabel nameLabel; |
|
||||||
private TitleChangeListener titleListener = new TitleChangeListener() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void fireTitleChange(String addName) { |
|
||||||
nameLabel.setText(Inter.getLocText("Chart-Property_Table") + '-' + addName); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
public synchronized static ChartDesignerPropertyPane getInstance() { |
|
||||||
if (instance == null) { |
|
||||||
instance = new ChartDesignerPropertyPane(); |
|
||||||
} |
|
||||||
instance.setSureProperty(); |
|
||||||
return instance; |
|
||||||
} |
|
||||||
|
|
||||||
public ChartDesignerPropertyPane() { |
|
||||||
this.setLayout(new BorderLayout()); |
|
||||||
this.setBorder(null); |
|
||||||
|
|
||||||
createNameLabel(); |
|
||||||
this.add(nameLabel, BorderLayout.NORTH); |
|
||||||
chartEditPane = ChartDesignEditPane.getInstance(); |
|
||||||
this.add(chartEditPane, BorderLayout.CENTER); |
|
||||||
} |
|
||||||
|
|
||||||
private void createNameLabel() { |
|
||||||
nameLabel = new UILabel() { |
|
||||||
@Override |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
return new Dimension(super.getPreferredSize().width, 18); |
|
||||||
} |
|
||||||
}; |
|
||||||
nameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 1, 0)); |
|
||||||
nameLabel.setHorizontalAlignment(SwingConstants.CENTER); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setSureProperty() { |
|
||||||
chartEditPane.setContainer(container); |
|
||||||
chartEditPane.addTitleChangeListener(titleListener); |
|
||||||
String tabname = chartEditPane.getSelectedTabName(); |
|
||||||
nameLabel.setText(Inter.getLocText("Chart-Property_Table") + (tabname != null ? ('-' + chartEditPane.getSelectedTabName()) : "")); |
|
||||||
resetChartEditPane(); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
protected void resetChartEditPane() { |
|
||||||
remove(chartEditPane); |
|
||||||
add(chartEditPane, BorderLayout.CENTER); |
|
||||||
validate(); |
|
||||||
repaint(); |
|
||||||
revalidate(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setSupportCellData(boolean supportCellData){ |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 感觉ChartCollection加载图表属性界面. |
|
||||||
* @param collection 收集图表 |
|
||||||
* @param chartDesigner 图表设计 |
|
||||||
*/ |
|
||||||
public void populateChartPropertyPane(BaseChartCollection collection, TargetComponent<?> chartDesigner) { |
|
||||||
if (collection instanceof ChartCollection) { |
|
||||||
this.container.setEPane(chartDesigner); |
|
||||||
chartEditPane.populate((ChartCollection) collection); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setWidgetPropertyPane(BaseWidgetPropertyPane pane) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 刷新 |
|
||||||
*/ |
|
||||||
public void refreshDockingView() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getViewTitle() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Icon getViewIcon() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 位置 |
|
||||||
* @return 位置 |
|
||||||
*/ |
|
||||||
public Location preferredLocation() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
@ -1,47 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe; |
|
||||||
|
|
||||||
import com.fr.form.ui.ChartBook; |
|
||||||
|
|
||||||
import java.awt.*; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-13 |
|
||||||
* Time: 下午2:32 |
|
||||||
*/ |
|
||||||
public class ChartUndoState extends BaseUndoState<JChart> { |
|
||||||
private ChartBook chartBook; |
|
||||||
private Dimension designerSize; |
|
||||||
private double widthValue; |
|
||||||
private double heightValue; |
|
||||||
|
|
||||||
public ChartUndoState(JChart t,ChartArea area) { |
|
||||||
super(t); |
|
||||||
try { |
|
||||||
this.chartBook = (ChartBook) t.getTarget().clone(); |
|
||||||
} catch (CloneNotSupportedException e) { |
|
||||||
throw new RuntimeException(e); |
|
||||||
} |
|
||||||
this.widthValue =area.getCustomWidth(); |
|
||||||
this.heightValue = area.getCustomHeight(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public ChartBook getChartBook(){ |
|
||||||
return this.chartBook; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 应用状态 |
|
||||||
*/ |
|
||||||
public void applyState() { |
|
||||||
this.getApplyTarget().applyUndoState(this); |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
@ -1,376 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
* 图表类型文件 |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.file.FILEChooserPane; |
|
||||||
import com.fr.file.FILEChooserPane4Chart; |
|
||||||
import com.fr.form.ui.ChartBook; |
|
||||||
import com.fr.design.DesignModelAdapter; |
|
||||||
import com.fr.design.event.TargetModifiedEvent; |
|
||||||
import com.fr.design.event.TargetModifiedListener; |
|
||||||
import com.fr.design.gui.imenu.UIMenuItem; |
|
||||||
import com.fr.design.layout.FRGUIPaneFactory; |
|
||||||
import com.fr.design.mainframe.actions.ExcelExportAction4Chart; |
|
||||||
import com.fr.design.mainframe.actions.PDFExportAction4Chart; |
|
||||||
import com.fr.design.mainframe.actions.PNGExportAction4Chart; |
|
||||||
import com.fr.design.mainframe.form.FormECCompositeProvider; |
|
||||||
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; |
|
||||||
import com.fr.design.menu.ShortCut; |
|
||||||
import com.fr.design.menu.ToolBarDef; |
|
||||||
import com.fr.file.FILE; |
|
||||||
import com.fr.general.Inter; |
|
||||||
import com.fr.json.JSONArray; |
|
||||||
import com.fr.json.JSONException; |
|
||||||
import com.fr.json.JSONObject; |
|
||||||
import com.fr.stable.StringUtils; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.*; |
|
||||||
import java.awt.datatransfer.StringSelection; |
|
||||||
|
|
||||||
/** |
|
||||||
* 图表crt文件 |
|
||||||
* <p/> |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-13 |
|
||||||
* Time: 下午2:28 |
|
||||||
*/ |
|
||||||
public class JChart extends JTemplate<ChartBook, ChartUndoState> { |
|
||||||
public static final String XML_TAG = "JChart"; |
|
||||||
private static final String CHART_CARD = "FORM"; |
|
||||||
private static final String ELEMENTCASE_CARD = "ELEMENTCASE"; |
|
||||||
|
|
||||||
private static final String[] CARDNAME = new String[]{CHART_CARD, ELEMENTCASE_CARD}; |
|
||||||
private static final int TOOLBARPANEDIMHEIGHT_FORM = 60; |
|
||||||
//图表设计器
|
|
||||||
ChartDesigner chartDesigner; |
|
||||||
|
|
||||||
//中间编辑区域, carllayout布局
|
|
||||||
private JPanel tabCenterPane; |
|
||||||
private CardLayout cardLayout; |
|
||||||
//当前编辑的组件对象
|
|
||||||
private JComponent editingComponent; |
|
||||||
private FormECCompositeProvider reportComposite; |
|
||||||
|
|
||||||
public JChart() { |
|
||||||
super(new ChartBook(), "Chart"); |
|
||||||
} |
|
||||||
|
|
||||||
public JChart(ChartBook chartFile, FILE file) { |
|
||||||
super(chartFile, file); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected JPanel createCenterPane() { |
|
||||||
tabCenterPane = FRGUIPaneFactory.createCardLayout_S_Pane(); |
|
||||||
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
||||||
centerPane.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 0, new Color(85, 85, 85))); |
|
||||||
chartDesigner = new ChartDesigner(this.getTarget()); |
|
||||||
ChartArea area = new ChartArea(chartDesigner); |
|
||||||
centerPane.add(area, BorderLayout.CENTER); |
|
||||||
tabCenterPane.add(centerPane, CHART_CARD, 0); |
|
||||||
chartDesigner.addTargetModifiedListener(new TargetModifiedListener() { |
|
||||||
public void targetModified(TargetModifiedEvent e) { |
|
||||||
JChart.this.fireTargetModified();// 调用保存*, 调用刷新界面, 刷新工具栏按钮
|
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
this.add(tabCenterPane, BorderLayout.CENTER); |
|
||||||
return tabCenterPane; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 移除选择 |
|
||||||
*/ |
|
||||||
public void removeTemplateSelection() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 刷新容器 |
|
||||||
*/ |
|
||||||
public void refreshContainer() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 移除参数面板选择 |
|
||||||
*/ |
|
||||||
public void removeParameterPaneSelection() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建设计模式 |
|
||||||
* |
|
||||||
* @return 返回模式 |
|
||||||
*/ |
|
||||||
protected DesignModelAdapter<ChartBook, ?> createDesignModel() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建预览得菜单 |
|
||||||
* |
|
||||||
* @return 菜单 |
|
||||||
*/ |
|
||||||
public UIMenuItem[] createMenuItem4Preview() { |
|
||||||
return new UIMenuItem[0]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建撤销状态 |
|
||||||
* |
|
||||||
* @return 状态 |
|
||||||
*/ |
|
||||||
protected ChartUndoState createUndoState() { |
|
||||||
return new ChartUndoState(this,chartDesigner.getArea()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 应用撤销状态 |
|
||||||
* |
|
||||||
* @param chartUndoState 撤销状态 |
|
||||||
*/ |
|
||||||
protected void applyUndoState(ChartUndoState chartUndoState) { |
|
||||||
try { |
|
||||||
this.setTarget((ChartBook)chartUndoState.getChartBook().clone()); |
|
||||||
chartDesigner.setTarget(this.getTarget()); |
|
||||||
chartDesigner.populate(); |
|
||||||
}catch (CloneNotSupportedException e) { |
|
||||||
throw new RuntimeException(e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 后缀 |
|
||||||
* |
|
||||||
* @return 后缀 |
|
||||||
*/ |
|
||||||
public String suffix() { |
|
||||||
return ".crt"; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 复制 |
|
||||||
*/ |
|
||||||
public void copy() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 黏贴 |
|
||||||
* |
|
||||||
* @return 是否鸟贴成功 |
|
||||||
*/ |
|
||||||
public boolean paste() { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否剪切 |
|
||||||
* |
|
||||||
* @return 剪切成功 |
|
||||||
*/ |
|
||||||
public boolean cut() { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建权限编辑面板 |
|
||||||
* |
|
||||||
* @return 面板 |
|
||||||
*/ |
|
||||||
public AuthorityEditPane createAuthorityEditPane() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 工具栏 |
|
||||||
* |
|
||||||
* @return 工具栏 |
|
||||||
*/ |
|
||||||
public ToolBarMenuDockPlus getToolBarMenuDockPlus() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 东上面板 |
|
||||||
* |
|
||||||
* @return 面板 |
|
||||||
*/ |
|
||||||
public JPanel getEastUpPane() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 东下面板 |
|
||||||
* |
|
||||||
* @return 面板 |
|
||||||
*/ |
|
||||||
public JPanel getEastDownPane() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 工具栏菜单 |
|
||||||
* |
|
||||||
* @return 菜单 |
|
||||||
*/ |
|
||||||
public ToolBarDef[] toolbars4Target() { |
|
||||||
return new ToolBarDef[0]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 表单面板 |
|
||||||
* |
|
||||||
* @return 面板 |
|
||||||
*/ |
|
||||||
public JPanel[] toolbarPanes4Form() { |
|
||||||
return new JPanel[0]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 模版菜单 |
|
||||||
* |
|
||||||
* @return 模版菜单 |
|
||||||
*/ |
|
||||||
public ShortCut[] shortcut4TemplateMenu() { |
|
||||||
return new ShortCut[0]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 权限编辑菜单 |
|
||||||
* |
|
||||||
* @return 菜单 |
|
||||||
*/ |
|
||||||
public ShortCut[] shortCuts4Authority() { |
|
||||||
return new ShortCut[0]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 工具条表单 |
|
||||||
* |
|
||||||
* @return 表单 |
|
||||||
*/ |
|
||||||
public JComponent[] toolBarButton4Form() { |
|
||||||
return new JComponent[0]; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 权限编辑工具栏,但是图表设计器里面用于正常工具栏不是全县编辑 |
|
||||||
* |
|
||||||
* @return 工具条 |
|
||||||
*/ |
|
||||||
public JComponent toolBar4Authority() { |
|
||||||
return chartDesigner.getChartToolBarPane(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 工具条高度 |
|
||||||
* |
|
||||||
* @return 工具条高度 |
|
||||||
*/ |
|
||||||
public int getToolBarHeight() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否是报表 |
|
||||||
* |
|
||||||
* @return 不是 |
|
||||||
*/ |
|
||||||
public boolean isJWorkBook() { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否是图表 |
|
||||||
* |
|
||||||
* @return 是则返回true |
|
||||||
*/ |
|
||||||
public boolean isChartBook() { |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置权限编辑模式 |
|
||||||
* |
|
||||||
* @param isUpMode 没有权限编辑 |
|
||||||
*/ |
|
||||||
public void setAuthorityMode(boolean isUpMode) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 刷新工具区域 |
|
||||||
*/ |
|
||||||
public void refreshToolArea() { |
|
||||||
DesignerContext.getDesignerFrame().resetToolkitByPlus(JChart.this); |
|
||||||
chartDesigner.populate(); |
|
||||||
ChartDesignerPropertyPane.getInstance().populateChartPropertyPane(getTarget().getChartCollection(), chartDesigner); |
|
||||||
EastRegionContainerPane.getInstance().replaceUpPane(ChartDesignerPropertyPane.getInstance()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 导出菜单的子菜单 ,目前用于图表设计器 |
|
||||||
* |
|
||||||
* @return 子菜单 |
|
||||||
*/ |
|
||||||
public ShortCut[] shortcut4ExportMenu() { |
|
||||||
return new ShortCut[]{new PNGExportAction4Chart(this), new ExcelExportAction4Chart(this), new PDFExportAction4Chart(this)}; |
|
||||||
} |
|
||||||
|
|
||||||
public Icon getIcon() { |
|
||||||
return BaseUtils.readIcon("/com/fr/design/images/chart.png"); |
|
||||||
} |
|
||||||
|
|
||||||
public ChartDesigner getChartDesigner(){ |
|
||||||
return chartDesigner; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 复制JS代码 |
|
||||||
*/ |
|
||||||
public void copyJS(){ |
|
||||||
JSONObject jsonObject =this.getTarget().createExportConfig(); |
|
||||||
String jsonString = StringUtils.EMPTY; |
|
||||||
if(jsonObject != null){ |
|
||||||
try{ |
|
||||||
if(jsonObject.has("charts")){ |
|
||||||
JSONArray charts = jsonObject.getJSONArray("charts"); |
|
||||||
jsonString = charts.toString(2); |
|
||||||
}else{ |
|
||||||
jsonString = jsonObject.toString(2); |
|
||||||
} |
|
||||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Chart-CopyJS_Message"), Inter.getLocText("FR-Chart-Action_Copy")+"JS", JOptionPane.INFORMATION_MESSAGE); |
|
||||||
}catch (JSONException ex){ |
|
||||||
FRContext.getLogger().error(ex.getMessage()); |
|
||||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Chart-CopyJS_Failed")+"!", Inter.getLocText("Error"), JOptionPane.ERROR_MESSAGE); |
|
||||||
} |
|
||||||
}else{ |
|
||||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Chart-CopyJS_Failed")+"!", Inter.getLocText("Error"), JOptionPane.ERROR_MESSAGE); |
|
||||||
} |
|
||||||
StringSelection stringSelection = new StringSelection(jsonString); |
|
||||||
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null); |
|
||||||
}; |
|
||||||
|
|
||||||
/** |
|
||||||
* 系列风格改动 |
|
||||||
*/ |
|
||||||
public void styleChange(){ |
|
||||||
chartDesigner.clearToolBarStyleChoose(); |
|
||||||
} |
|
||||||
|
|
||||||
protected FILEChooserPane getFILEChooserPane(boolean isShowLoc){ |
|
||||||
return new FILEChooserPane4Chart(true, isShowLoc); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,132 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.actions; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.design.gui.iprogressbar.FRProgressBar; |
|
||||||
import com.fr.form.ui.ChartBook; |
|
||||||
import com.fr.design.mainframe.DesignerContext; |
|
||||||
import com.fr.design.mainframe.DesignerFrame; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.design.mainframe.exporter.Exporter4Chart; |
|
||||||
import com.fr.file.FILE; |
|
||||||
import com.fr.file.FILEChooserPane; |
|
||||||
import com.fr.file.filter.ChooseFileFilter; |
|
||||||
import com.fr.general.FRLogger; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.event.ActionEvent; |
|
||||||
import java.io.FileOutputStream; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 上午9:48 |
|
||||||
*/ |
|
||||||
public abstract class AbstractExportAction4JChart extends JChartAction { |
|
||||||
protected AbstractExportAction4JChart(JChart chart){ |
|
||||||
super(chart); |
|
||||||
} |
|
||||||
|
|
||||||
private FRProgressBar progressbar; |
|
||||||
|
|
||||||
protected ChartBook getChartBook(){ |
|
||||||
return this.getEditingComponent().getTarget(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 执行方法 |
|
||||||
* @param e 事件 |
|
||||||
*/ |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
JChart chart = this.getEditingComponent(); |
|
||||||
FILE editingFILE = chart.getEditingFILE(); |
|
||||||
DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); |
|
||||||
|
|
||||||
// 弹出参数
|
|
||||||
final java.util.Map parameterMap = new java.util.HashMap(); |
|
||||||
final ChartBook chartBook = getChartBook(); |
|
||||||
|
|
||||||
// Choose a file name....
|
|
||||||
FILEChooserPane fileChooserPane = FILEChooserPane.getInstance(false, true); |
|
||||||
fileChooserPane.setFILEFilter(this.getChooseFileFilter()); |
|
||||||
|
|
||||||
// 打开文件后输出文件名修改,eg:w.cpt.doc / w.svg.doc,去掉中间的后缀名~~ w.doc
|
|
||||||
String filenName = editingFILE.getName(); |
|
||||||
if (filenName.indexOf('.') != -1) { |
|
||||||
filenName = filenName.substring(0, editingFILE.getName().lastIndexOf('.')); |
|
||||||
} |
|
||||||
fileChooserPane.setFileNameTextField(filenName, "." + this.getDefaultExtension()); |
|
||||||
int saveValue = fileChooserPane.showSaveDialog(designerFrame, "." + this.getDefaultExtension()); |
|
||||||
if (saveValue == FILEChooserPane.CANCEL_OPTION || saveValue == FILEChooserPane.JOPTIONPANE_CANCEL_OPTION) { |
|
||||||
fileChooserPane = null; |
|
||||||
return; |
|
||||||
} else if (saveValue == FILEChooserPane.JOPTIONPANE_OK_OPTION || saveValue == FILEChooserPane.OK_OPTION) { |
|
||||||
FILE file = fileChooserPane.getSelectedFILE(); |
|
||||||
try { |
|
||||||
file.mkfile(); |
|
||||||
} catch (Exception e1) { |
|
||||||
FRLogger.getLogger().error("Error In Make New File"); |
|
||||||
} |
|
||||||
fileChooserPane = null; |
|
||||||
FRContext.getLogger().info("\"" + file.getName() + "\"" + Inter.getLocText("Prepare_Export") + "!"); |
|
||||||
|
|
||||||
(progressbar = new FRProgressBar(createExportWork(file, chartBook), designerFrame, |
|
||||||
Inter.getLocText("Exporting"), "", 0, 100)).start(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
private SwingWorker createExportWork(FILE file, final ChartBook chartBook) { |
|
||||||
final String filePath = file.getPath(); |
|
||||||
final String fileGetName = file.getName(); |
|
||||||
|
|
||||||
SwingWorker exportWorker = new SwingWorker<Void, Void>() { |
|
||||||
protected Void doInBackground() throws Exception { |
|
||||||
Thread.sleep(100); //bug 10516
|
|
||||||
try { |
|
||||||
final FileOutputStream fileOutputStream = new FileOutputStream(filePath); |
|
||||||
|
|
||||||
this.setProgress(10); |
|
||||||
dealExporter(fileOutputStream,chartBook); |
|
||||||
this.setProgress(80); |
|
||||||
fileOutputStream.close(); |
|
||||||
this.setProgress(100); |
|
||||||
|
|
||||||
FRContext.getLogger().info("\"" + fileGetName + "\"" + Inter.getLocText("Finish_Export") + "!"); |
|
||||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), |
|
||||||
Inter.getLocText("Exported_successfully") + "\n" + filePath); |
|
||||||
} catch (Exception exp) { |
|
||||||
this.setProgress(100); |
|
||||||
FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); |
|
||||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Export_failed") + "\n" + filePath); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
public void done() { |
|
||||||
progressbar.close(); |
|
||||||
} |
|
||||||
}; |
|
||||||
return exportWorker; |
|
||||||
} |
|
||||||
|
|
||||||
private void dealExporter(FileOutputStream fileOutputStream, final ChartBook chartBook) throws Exception { |
|
||||||
final Exporter4Chart exporter = AbstractExportAction4JChart.this.getExporter(); |
|
||||||
exporter.export(fileOutputStream,this.getEditingComponent()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected abstract ChooseFileFilter getChooseFileFilter(); |
|
||||||
|
|
||||||
protected abstract String getDefaultExtension(); |
|
||||||
|
|
||||||
protected abstract Exporter4Chart getExporter(); |
|
||||||
|
|
||||||
} |
|
@ -1,68 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.actions; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.base.ExcelUtils; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.design.mainframe.exporter.ExcelExporter4Chart; |
|
||||||
import com.fr.design.mainframe.exporter.Exporter4Chart; |
|
||||||
import com.fr.design.menu.MenuKeySet; |
|
||||||
import com.fr.file.filter.ChooseFileFilter; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.event.KeyEvent; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 上午9:52 |
|
||||||
*/ |
|
||||||
public class ExcelExportAction4Chart extends AbstractExportAction4JChart { |
|
||||||
|
|
||||||
private MenuKeySet excel= new MenuKeySet() { |
|
||||||
@Override |
|
||||||
public char getMnemonic() { |
|
||||||
return 'E'; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getMenuName() { |
|
||||||
return Inter.getLocText("FR-Chart-Format_Excel"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public KeyStroke getKeyStroke() { |
|
||||||
return KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.CTRL_MASK); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
public ExcelExportAction4Chart(JChart chart) { |
|
||||||
super(chart); |
|
||||||
this.setMenuKeySet(excel); |
|
||||||
this.setName(getMenuKeySet().getMenuKeySetName()); |
|
||||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
|
||||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/excel.png")); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected ChooseFileFilter getChooseFileFilter() { |
|
||||||
return new ChooseFileFilter(new String[]{"xls", "xlsx"}, Inter.getLocText("Export-Excel")); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String getDefaultExtension() { |
|
||||||
return ExcelUtils.checkThirdJarSupportPOI() ? "xlsx" : "xls"; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected Exporter4Chart getExporter() { |
|
||||||
return new ExcelExporter4Chart(); |
|
||||||
} |
|
||||||
} |
|
@ -1,21 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.actions; |
|
||||||
|
|
||||||
import com.fr.design.actions.JTemplateAction; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 上午9:47 |
|
||||||
*/ |
|
||||||
public abstract class JChartAction extends JTemplateAction<JChart> { |
|
||||||
public JChartAction(JChart jChart) { |
|
||||||
super(jChart); |
|
||||||
} |
|
||||||
} |
|
@ -1,61 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.actions; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.design.actions.UpdateAction; |
|
||||||
import com.fr.design.mainframe.DesignerContext; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.design.menu.MenuKeySet; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.event.ActionEvent; |
|
||||||
import java.awt.event.InputEvent; |
|
||||||
import java.awt.event.KeyEvent; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-13 |
|
||||||
* Time: 下午3:22 |
|
||||||
*/ |
|
||||||
public class NewChartAction extends UpdateAction{ |
|
||||||
|
|
||||||
public NewChartAction(){ |
|
||||||
this.setMenuKeySet(NEW_CHART); |
|
||||||
this.setName(getMenuKeySet().getMenuKeySetName()); |
|
||||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
|
||||||
this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/newchart_normal.png")); |
|
||||||
this.setAccelerator(getMenuKeySet().getKeyStroke()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 执行事件 |
|
||||||
* @param e 事件 |
|
||||||
*/ |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
DesignerContext.getDesignerFrame().addAndActivateJTemplate(new JChart()); |
|
||||||
} |
|
||||||
|
|
||||||
public static final MenuKeySet NEW_CHART = new MenuKeySet() { |
|
||||||
@Override |
|
||||||
public char getMnemonic() { |
|
||||||
return 'F'; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getMenuName() { |
|
||||||
return Inter.getLocText("M-New_ChartBook"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public KeyStroke getKeyStroke() { |
|
||||||
return KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK); |
|
||||||
} |
|
||||||
}; |
|
||||||
} |
|
@ -1,65 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.actions; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.design.mainframe.exporter.Exporter4Chart; |
|
||||||
import com.fr.design.mainframe.exporter.PdfExporter4Chart; |
|
||||||
import com.fr.design.menu.MenuKeySet; |
|
||||||
import com.fr.file.filter.ChooseFileFilter; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 上午10:16 |
|
||||||
*/ |
|
||||||
public class PDFExportAction4Chart extends AbstractExportAction4JChart { |
|
||||||
|
|
||||||
private MenuKeySet pdf = new MenuKeySet() { |
|
||||||
@Override |
|
||||||
public char getMnemonic() { |
|
||||||
return 'P'; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getMenuName() { |
|
||||||
return Inter.getLocText("FR-Chart-Format_PDF"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public KeyStroke getKeyStroke() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
public PDFExportAction4Chart(JChart chart) { |
|
||||||
super(chart); |
|
||||||
this.setMenuKeySet(pdf); |
|
||||||
this.setName(getMenuKeySet().getMenuKeySetName()); |
|
||||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
|
||||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/pdf.png")); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected ChooseFileFilter getChooseFileFilter() { |
|
||||||
return new ChooseFileFilter(new String[]{"pdf"}, Inter.getLocText("Export-PDF")); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String getDefaultExtension() { |
|
||||||
return "pdf"; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected Exporter4Chart getExporter() { |
|
||||||
return new PdfExporter4Chart(); |
|
||||||
} |
|
||||||
} |
|
@ -1,66 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.actions; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.design.mainframe.exporter.Exporter4Chart; |
|
||||||
import com.fr.design.mainframe.exporter.ImageExporter4Chart; |
|
||||||
import com.fr.design.menu.MenuKeySet; |
|
||||||
import com.fr.file.filter.ChooseFileFilter; |
|
||||||
import com.fr.general.Inter; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import java.awt.event.KeyEvent; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 上午10:18 |
|
||||||
*/ |
|
||||||
public class PNGExportAction4Chart extends AbstractExportAction4JChart { |
|
||||||
|
|
||||||
private MenuKeySet menuSet = new MenuKeySet() { |
|
||||||
@Override |
|
||||||
public char getMnemonic() { |
|
||||||
return 'M'; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getMenuName() { |
|
||||||
return Inter.getLocText("FR-Chart-Format_Image"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public KeyStroke getKeyStroke() { |
|
||||||
return KeyStroke.getKeyStroke(KeyEvent.VK_M, KeyEvent.CTRL_MASK); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
public PNGExportAction4Chart(JChart chart) { |
|
||||||
super(chart); |
|
||||||
this.setMenuKeySet(menuSet); |
|
||||||
this.setName(getMenuKeySet().getMenuKeySetName()); |
|
||||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
|
||||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/exportimg.png")); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected ChooseFileFilter getChooseFileFilter() { |
|
||||||
return new ChooseFileFilter(new String[]{"png"}, Inter.getLocText("Image")); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String getDefaultExtension() { |
|
||||||
return "png"; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected Exporter4Chart getExporter() { |
|
||||||
return new ImageExporter4Chart(); |
|
||||||
} |
|
||||||
} |
|
@ -1,94 +0,0 @@ |
|||||||
package com.fr.design.mainframe.exporter; |
|
||||||
|
|
||||||
import com.fr.base.ExcelUtils; |
|
||||||
import com.fr.design.mainframe.ChartDesigner; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.general.FRLogger; |
|
||||||
import com.fr.general.IOUtils; |
|
||||||
import com.fr.stable.CoreGraphHelper; |
|
||||||
import com.fr.third.v2.org.apache.poi.hssf.usermodel.HSSFClientAnchor; |
|
||||||
import com.fr.third.v2.org.apache.poi.hssf.usermodel.HSSFWorkbook; |
|
||||||
import com.fr.third.v2.org.apache.poi.ss.usermodel.ClientAnchor; |
|
||||||
import com.fr.third.v2.org.apache.poi.ss.usermodel.Drawing; |
|
||||||
import com.fr.third.v2.org.apache.poi.ss.usermodel.Sheet; |
|
||||||
import com.fr.third.v2.org.apache.poi.ss.usermodel.Workbook; |
|
||||||
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFClientAnchor; |
|
||||||
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFWorkbook; |
|
||||||
import java.awt.*; |
|
||||||
import java.awt.image.BufferedImage; |
|
||||||
import java.io.ByteArrayOutputStream; |
|
||||||
import java.io.IOException; |
|
||||||
import java.io.OutputStream; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-22 |
|
||||||
* Time: 上午10:47 |
|
||||||
*/ |
|
||||||
public class ExcelExporter4Chart extends ImageExporter4Chart { |
|
||||||
private static final int PICTURE_TYPE_PNG = 6 ; |
|
||||||
private static final int DEFAULT_COLUMN_SPAN = 12; |
|
||||||
private static final int DEFAULT_ROW_SPAN = 26; |
|
||||||
private Workbook workbook; |
|
||||||
private ClientAnchor anchor; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 导出 |
|
||||||
* |
|
||||||
* @param out 输出流 |
|
||||||
* @param chart 图表文件 |
|
||||||
* @throws Exception 异常 |
|
||||||
*/ |
|
||||||
public void export(OutputStream out, JChart chart) throws Exception { |
|
||||||
try { |
|
||||||
ChartDesigner designer = chart.getChartDesigner(); |
|
||||||
int imageWidth = designer.getArea().getCustomWidth(); |
|
||||||
int imageHeight = designer.getArea().getCustomHeight(); |
|
||||||
BufferedImage image = CoreGraphHelper.createBufferedImage(imageWidth, (int) imageHeight, BufferedImage.TYPE_INT_RGB); |
|
||||||
Graphics2D g2d = image.createGraphics(); |
|
||||||
paintGlyph(g2d,imageWidth,imageHeight,designer); |
|
||||||
g2d.dispose(); |
|
||||||
if (checkExcelExportVersion()) { |
|
||||||
workbook = new XSSFWorkbook(); |
|
||||||
}else{ |
|
||||||
workbook = new HSSFWorkbook(); |
|
||||||
} |
|
||||||
Sheet sheet = workbook.createSheet(); |
|
||||||
if(checkExcelExportVersion()){ |
|
||||||
anchor = new XSSFClientAnchor(0,0,0,0,1,1,DEFAULT_COLUMN_SPAN,DEFAULT_ROW_SPAN); |
|
||||||
}else{ |
|
||||||
anchor = new HSSFClientAnchor(0,0,0,0,(short)1,1,(short)DEFAULT_COLUMN_SPAN,DEFAULT_ROW_SPAN); |
|
||||||
} |
|
||||||
Drawing patriarch = sheet.createDrawingPatriarch(); |
|
||||||
patriarch.createPicture(anchor,loadPicture(image)); |
|
||||||
workbook.write(out); |
|
||||||
out.flush(); |
|
||||||
}catch (Exception e){ |
|
||||||
FRLogger.getLogger().error(e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private boolean checkExcelExportVersion() { |
|
||||||
return ExcelUtils.checkThirdJarSupportPOI(); |
|
||||||
} |
|
||||||
// 加载图片.
|
|
||||||
private int loadPicture(BufferedImage bufferedImage)throws IOException { |
|
||||||
ByteArrayOutputStream bos = null; |
|
||||||
try { |
|
||||||
bos = new ByteArrayOutputStream(); |
|
||||||
IOUtils.writeImage(bufferedImage, "png", bos); |
|
||||||
//引用这个参数是jdk1.5的版本 XSSFWorkbook.PICTURE_TYPE_PNG, 在1.4下无法编译, 所有手动去掉这个参数.
|
|
||||||
return workbook.addPicture(bos.toByteArray(), PICTURE_TYPE_PNG); |
|
||||||
} finally { |
|
||||||
if (bos != null) { |
|
||||||
bos.flush(); |
|
||||||
bos.close(); |
|
||||||
} |
|
||||||
bufferedImage.flush(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,25 +0,0 @@ |
|||||||
package com.fr.design.mainframe.exporter; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
|
|
||||||
import java.io.OutputStream; |
|
||||||
|
|
||||||
/** |
|
||||||
* 图表设计器crt文件的导出成其他类型文件的接口 |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-21 |
|
||||||
* Time: 下午7:14 |
|
||||||
*/ |
|
||||||
public interface Exporter4Chart { |
|
||||||
|
|
||||||
/** |
|
||||||
* 将结果crt导出成目标文件 |
|
||||||
* |
|
||||||
* @param out 输出流 |
|
||||||
* @param chart chart文件 |
|
||||||
* @throws Exception 导出失败则抛出此异常 |
|
||||||
*/ |
|
||||||
public void export(OutputStream out, JChart chart) throws Exception; |
|
||||||
|
|
||||||
} |
|
@ -1,89 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.mainframe.exporter; |
|
||||||
|
|
||||||
import com.fr.base.chart.BaseChartGlyph; |
|
||||||
import com.fr.base.chart.chartdata.BaseTableDefinition; |
|
||||||
import com.fr.base.chart.chartdata.ChartData; |
|
||||||
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
|
||||||
import com.fr.chart.chartattr.Chart; |
|
||||||
import com.fr.chart.chartattr.ChartCollection; |
|
||||||
import com.fr.chart.chartglyph.ChartGlyph; |
|
||||||
import com.fr.data.TableDataSource; |
|
||||||
import com.fr.design.mainframe.ChartDesigner; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.script.Calculator; |
|
||||||
import com.fr.stable.Constants; |
|
||||||
import com.fr.stable.CoreGraphHelper; |
|
||||||
|
|
||||||
import javax.imageio.ImageIO; |
|
||||||
import java.awt.*; |
|
||||||
import java.awt.image.BufferedImage; |
|
||||||
import java.io.OutputStream; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-15 |
|
||||||
* Time: 上午10:04 |
|
||||||
*/ |
|
||||||
public class ImageExporter4Chart implements Exporter4Chart{ |
|
||||||
private int resolution = Constants.DEFAULT_WEBWRITE_AND_SCREEN_RESOLUTION; |
|
||||||
protected Calculator calculator; |
|
||||||
|
|
||||||
|
|
||||||
public ImageExporter4Chart() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 导出 |
|
||||||
* |
|
||||||
* @param out 输出流 |
|
||||||
* @param chart 图表文件 |
|
||||||
* @throws Exception 异常 |
|
||||||
*/ |
|
||||||
public void export(OutputStream out, JChart chart) throws Exception { |
|
||||||
ChartDesigner designer = chart.getChartDesigner(); |
|
||||||
int imageWidth = designer.getArea().getCustomWidth(); |
|
||||||
int imageHeight = designer.getArea().getCustomHeight(); |
|
||||||
BufferedImage image = CoreGraphHelper.createBufferedImage(imageWidth, (int) imageHeight, BufferedImage.TYPE_INT_RGB); |
|
||||||
Graphics2D g2d = image.createGraphics(); |
|
||||||
paintGlyph(g2d,imageWidth,imageHeight,designer); |
|
||||||
ImageIO.write(image, "png", out); |
|
||||||
} |
|
||||||
|
|
||||||
protected void paintGlyph(Graphics2D g2d,int imageWidth,int imageHeight,ChartDesigner designer){ |
|
||||||
if (imageWidth == 0 || imageHeight == 0) { |
|
||||||
return; |
|
||||||
} |
|
||||||
this.calculator = Calculator.createCalculator(); |
|
||||||
this.calculator.setAttribute(TableDataSource.class, null); |
|
||||||
g2d.setColor(Color.white); |
|
||||||
g2d.fillRect(0, 0, imageWidth,imageHeight); |
|
||||||
ChartCollection chartCollection = (ChartCollection) designer.getTarget().getChartCollection(); |
|
||||||
Chart editingChart = chartCollection.getSelectedChart(); |
|
||||||
|
|
||||||
TopDefinitionProvider topDefinition = editingChart.getFilterDefinition(); |
|
||||||
ChartData chartData4Glyph = null; |
|
||||||
if (topDefinition instanceof BaseTableDefinition) { |
|
||||||
chartData4Glyph = ((BaseTableDefinition) topDefinition).calcu4ChartData(calculator, editingChart.getDataProcessor()); |
|
||||||
} |
|
||||||
|
|
||||||
if (chartData4Glyph == null) { |
|
||||||
chartData4Glyph = editingChart.defaultChartData(); |
|
||||||
} |
|
||||||
|
|
||||||
BaseChartGlyph chartGlyph = null; |
|
||||||
if (editingChart != null && editingChart.getPlot() != null) { |
|
||||||
chartGlyph = editingChart.createGlyph(chartData4Glyph); |
|
||||||
} |
|
||||||
if (chartGlyph instanceof ChartGlyph) { |
|
||||||
Image glyphImage = ((ChartGlyph) chartGlyph).toImage(imageWidth, imageHeight, resolution); |
|
||||||
g2d.drawImage(glyphImage, 0, 0, null); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,382 +0,0 @@ |
|||||||
package com.fr.design.mainframe.exporter; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.design.mainframe.ChartDesigner; |
|
||||||
import com.fr.design.mainframe.JChart; |
|
||||||
import com.fr.general.ComparatorUtils; |
|
||||||
import com.fr.general.FRLogger; |
|
||||||
import com.fr.stable.OperatingSystem; |
|
||||||
import com.fr.stable.StableUtils; |
|
||||||
import com.fr.third.com.lowagie.text.Document; |
|
||||||
import com.fr.third.com.lowagie.text.ExceptionConverter; |
|
||||||
import com.fr.third.com.lowagie.text.Rectangle; |
|
||||||
import com.fr.third.com.lowagie.text.pdf.*; |
|
||||||
|
|
||||||
import java.awt.*; |
|
||||||
import java.io.ByteArrayOutputStream; |
|
||||||
import java.io.File; |
|
||||||
import java.io.IOException; |
|
||||||
import java.io.OutputStream; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Locale; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-22 |
|
||||||
* Time: 上午10:20 |
|
||||||
*/ |
|
||||||
public class PdfExporter4Chart extends ImageExporter4Chart { |
|
||||||
protected static MyFontMapper fontMapper = null; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 将结果crt导出成目标文件 |
|
||||||
* |
|
||||||
* @param out 输出流 |
|
||||||
* @param chart chart文件 |
|
||||||
* @throws Exception 导出失败则抛出此异常 |
|
||||||
*/ |
|
||||||
public void export(OutputStream out, JChart chart) throws Exception { |
|
||||||
ChartDesigner designer = chart.getChartDesigner(); |
|
||||||
int imageWidth = designer.getArea().getCustomWidth(); |
|
||||||
int imageHeight = designer.getArea().getCustomHeight(); |
|
||||||
Document document = null; |
|
||||||
PdfWriter writer = null; |
|
||||||
ByteArrayOutputStream bo = new ByteArrayOutputStream(); |
|
||||||
|
|
||||||
if (document == null) { |
|
||||||
document = new Document(new Rectangle(imageWidth, imageHeight)); |
|
||||||
writer = PdfWriter.getInstance(document, bo); |
|
||||||
document.open(); |
|
||||||
} |
|
||||||
//将chart画到PDF上去
|
|
||||||
PdfContentByte cb = writer.getDirectContent(); |
|
||||||
Graphics2D g2d = cb.createGraphics(imageWidth, imageHeight, prepareFontMapper()); |
|
||||||
paintGlyph(g2d, imageWidth, imageHeight, designer); |
|
||||||
g2d.dispose(); |
|
||||||
if (document != null) { |
|
||||||
document.close(); |
|
||||||
} |
|
||||||
|
|
||||||
try { |
|
||||||
out.write(bo.toByteArray()); |
|
||||||
out.flush(); |
|
||||||
out.close(); |
|
||||||
} catch (IOException e) { |
|
||||||
FRLogger.getLogger().error(e.getMessage()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
private static void insertDirectory4Linux() { |
|
||||||
/* |
|
||||||
* alex:在222这台Redhat的机器上测试,发现把从windows拷来的simsun.ttc只有放在usr/share/fonts/default/Type1里面才可以用起来 |
|
||||||
* 如果是放在usr/share/fonts目录或是${env}/resources/fonts目录下面,虽然可以读到,但是awtToPdf之后返回出去却依旧无法起作用 |
|
||||||
* 中文字依然挤在一起 |
|
||||||
* |
|
||||||
* 觉得实在很诡异,可能必须放在系统字体的文件夹下面才行吧 |
|
||||||
* |
|
||||||
* PS:这是在用Graphics drawString的时候遇到的问题 |
|
||||||
*/ |
|
||||||
//Linux
|
|
||||||
InsertDirectory(fontMapper, new File("/usr/X11R6/lib/X11/fonts")); |
|
||||||
InsertDirectory(fontMapper, new File("/usr/share/fonts")); |
|
||||||
String path = StableUtils.pathJoin(new String[]{FRContext.getCurrentEnv().getPath(), "fonts"}); |
|
||||||
//再去web-inf/fonts里面找一下, 省去客户四处找jdk安装路径的麻烦
|
|
||||||
InsertDirectory(fontMapper, new File(path)); |
|
||||||
|
|
||||||
//Solaris
|
|
||||||
InsertDirectory(fontMapper, new File("/usr/X/lib/X11/fonts/TrueType")); |
|
||||||
InsertDirectory(fontMapper, new File("/usr/openwin/lib/X11/fonts/TrueType")); |
|
||||||
} |
|
||||||
|
|
||||||
private static void insertDirectory4Windows() { |
|
||||||
String libraryPath = System.getProperty("java.library.path"); |
|
||||||
String[] libraryPathArray = StableUtils.splitString(libraryPath, ";"); |
|
||||||
for (int i = 0; i < libraryPathArray.length; i++) { |
|
||||||
File libraryFile = new File(libraryPathArray[i]); |
|
||||||
InsertDirectory(fontMapper, new File(libraryFile, "Fonts")); |
|
||||||
} |
|
||||||
|
|
||||||
InsertDirectory(fontMapper, new File("C:\\WINNT\\Fonts")); |
|
||||||
InsertDirectory(fontMapper, new File("C:\\WINDOWS\\Fonts")); |
|
||||||
} |
|
||||||
|
|
||||||
//peter:循环所有的目录,遍历所有的FontMapper.
|
|
||||||
protected static void InsertDirectory(MyFontMapper fontMapper, File dir) { |
|
||||||
if (dir == null || !dir.exists() || !dir.isDirectory()) { |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
fontMapper.insertDirectory(dir.getAbsolutePath()); |
|
||||||
|
|
||||||
File[] listFiles = dir.listFiles(); |
|
||||||
for (int i = 0; i < listFiles.length; i++) { |
|
||||||
InsertDirectory(fontMapper, listFiles[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Prepares FontMapper. |
|
||||||
*/ |
|
||||||
protected static MyFontMapper prepareFontMapper() { |
|
||||||
if (fontMapper != null) { |
|
||||||
return fontMapper; |
|
||||||
} |
|
||||||
|
|
||||||
fontMapper = new MyFontMapper(); |
|
||||||
try { |
|
||||||
//然后加载系统Font字体.
|
|
||||||
if (OperatingSystem.isWindows()) { |
|
||||||
insertDirectory4Windows(); |
|
||||||
|
|
||||||
} else { |
|
||||||
insertDirectory4Linux(); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
String javaHomeProp = System.getProperty("java.home"); |
|
||||||
if (javaHomeProp != null) { |
|
||||||
File javaFontFile = new File(StableUtils.pathJoin(new String[]{ |
|
||||||
javaHomeProp, "lib", "fonts" |
|
||||||
})); |
|
||||||
if (javaFontFile.exists() && javaFontFile.isDirectory()) { |
|
||||||
InsertDirectory(fontMapper, javaFontFile); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (FRContext.getLocale() == Locale.CHINA || FRContext.getLocale() == Locale.CHINESE) { |
|
||||||
MyFontMapper.defaultFont = BaseFont.createFont(MyFontMapper.CHINESE_SIMPLIFIED_FONT, MyFontMapper.CHINESE_SIMPLIFIED_ENCODING_H, BaseFont.NOT_EMBEDDED); |
|
||||||
} else if (FRContext.getLocale() == Locale.TAIWAN || FRContext.getLocale() == Locale.TRADITIONAL_CHINESE) { |
|
||||||
MyFontMapper.defaultFont = BaseFont.createFont(MyFontMapper.CHINESE_TRADITIONAL_FONT_M_SUNG, MyFontMapper.CHINESE_TRADITIONAL_ENCODING_H, BaseFont.NOT_EMBEDDED); |
|
||||||
} else if (FRContext.getLocale() == Locale.JAPAN || FRContext.getLocale() == Locale.JAPANESE) { |
|
||||||
MyFontMapper.defaultFont = BaseFont.createFont(MyFontMapper.JAPANESE_FONT_GO, MyFontMapper.JAPANESE_ENCODING_H, BaseFont.NOT_EMBEDDED); |
|
||||||
} else if (FRContext.getLocale() == Locale.KOREA || FRContext.getLocale() == Locale.KOREAN) { |
|
||||||
MyFontMapper.defaultFont = BaseFont.createFont(MyFontMapper.KOREAN_FONT_GO_THIC, MyFontMapper.KOREAN_ENCODING_H, BaseFont.NOT_EMBEDDED); |
|
||||||
} else { |
|
||||||
//默认也设置一个吧45422 , 不设置默认字体, linux英文环境导不出来
|
|
||||||
MyFontMapper.defaultFont = BaseFont.createFont(MyFontMapper.CHINESE_SIMPLIFIED_FONT, MyFontMapper.CHINESE_SIMPLIFIED_ENCODING_H, BaseFont.NOT_EMBEDDED); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
FRContext.getLogger().error(e.getMessage(), e); |
|
||||||
} |
|
||||||
|
|
||||||
return fontMapper; |
|
||||||
} |
|
||||||
|
|
||||||
public static class MyFontMapper implements FontMapper { |
|
||||||
|
|
||||||
public static final String CHINESE_SIMPLIFIED_FONT = "STSong-Light"; |
|
||||||
public static final String CHINESE_SIMPLIFIED_ENCODING_H = "UniGB-UCS2-H"; |
|
||||||
public static final String CHINESE_SIMPLIFIED_ENCODING_V = "UniGB-UCS2-V"; |
|
||||||
|
|
||||||
public static final String CHINESE_TRADITIONAL_FONT_M_HEI = "MHei-Medium"; |
|
||||||
public static final String CHINESE_TRADITIONAL_FONT_M_SUNG = "MSung-Light"; |
|
||||||
public static final String CHINESE_TRADITIONAL_ENCODING_H = "UniCNS-UCS2-H"; |
|
||||||
public static final String CHINESE_TRADITIONAL_ENCODING_V = "UniCNS-UCS2-V"; |
|
||||||
|
|
||||||
public static final String JAPANESE_FONT_GO = "HeiseiKakuGo-W5"; |
|
||||||
public static final String JAPANESE_FONT_MIN = "HeiseiMin-W3"; |
|
||||||
public static final String JAPANESE_ENCODING_H = "UniJIS-UCS2-H"; |
|
||||||
public static final String JAPANESE_ENCODING_V = "UniJIS-UCS2-V"; |
|
||||||
public static final String JAPANESE_ENCODING_HW_H = "UniJIS-UCS2-HW-H"; |
|
||||||
public static final String JAPANESE_ENCODING_HW_V = "UniJIS-UCS2-HW-V"; |
|
||||||
|
|
||||||
public static final String KOREAN_FONT_GO_THIC = "HYGoThic-Medium"; |
|
||||||
public static final String KOREAN_FONT_S_MYEONG_JO = "HYSMyeongJo-Medium"; |
|
||||||
public static final String KOREAN_ENCODING_H = "UniKS-UCS2-H"; |
|
||||||
public static final String KOREAN_ENCODING_V = "UniKS-UCS2-V"; |
|
||||||
|
|
||||||
public static BaseFont defaultFont; |
|
||||||
private HashMap mapper; |
|
||||||
|
|
||||||
public static class BaseFontParameters { |
|
||||||
|
|
||||||
public String fontName; |
|
||||||
public String encoding; |
|
||||||
public boolean embedded; |
|
||||||
public boolean cached; |
|
||||||
public byte ttfAfm[]; |
|
||||||
public byte pfb[]; |
|
||||||
|
|
||||||
public BaseFontParameters(String fontName) { |
|
||||||
this.fontName = fontName; |
|
||||||
encoding = BaseFont.IDENTITY_H; |
|
||||||
embedded = true; |
|
||||||
cached = true; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* toString方法 |
|
||||||
* |
|
||||||
* @return 对象说明 |
|
||||||
*/ |
|
||||||
public String toString() { |
|
||||||
return "{fontName:" + fontName + ",encoding:" + encoding + ",embedded:" + embedded + ",cached:" + cached; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public MyFontMapper() { |
|
||||||
mapper = new HashMap(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 转化字体 |
|
||||||
* |
|
||||||
* @param font awt字体 |
|
||||||
* @return pdf字体 |
|
||||||
*/ |
|
||||||
public BaseFont awtToPdf(Font font) { |
|
||||||
try { |
|
||||||
BaseFontParameters p = getBaseFontParameters(font.getFontName()); |
|
||||||
|
|
||||||
/* |
|
||||||
* alex:不明真相 |
|
||||||
* 经测试,Arial粗体在getFontName返回的是Arial Bold,可以在上面的方法中得到对应的p |
|
||||||
* 所以getFontName是有用的 |
|
||||||
* 但是在linux上测试,宋体在getFontName返回的却是Dialog这种逻辑字体,只有getName才返回SimSun |
|
||||||
* 所以还需要getBaseFontParameters一下 |
|
||||||
*/ |
|
||||||
if (p == null) { |
|
||||||
p = getBaseFontParameters(font.getName()); |
|
||||||
} |
|
||||||
|
|
||||||
if (p != null) { |
|
||||||
return BaseFont.createFont(p.fontName, p.encoding, p.embedded, p.cached, p.ttfAfm, p.pfb); |
|
||||||
} else { |
|
||||||
// FRContext.getLogger().info(Inter.getLocText("Utils-Font_Not_Found") + ":" + font.getFontName());
|
|
||||||
|
|
||||||
// alex:未找到合适的字体,如果有默认字体,用之,没有的话,根据Bold & Italic设置字体
|
|
||||||
if (defaultFont != null) { |
|
||||||
return defaultFont; |
|
||||||
} else { |
|
||||||
String fontKey = BaseFont.COURIER; |
|
||||||
if (font.isBold() && font.isItalic()) { |
|
||||||
fontKey = BaseFont.COURIER_BOLDOBLIQUE; |
|
||||||
} else if (font.isBold()) { |
|
||||||
fontKey = BaseFont.COURIER_BOLD; |
|
||||||
} else if (font.isItalic()) { |
|
||||||
fontKey = BaseFont.COURIER_OBLIQUE; |
|
||||||
} |
|
||||||
|
|
||||||
return BaseFont.createFont(fontKey, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); |
|
||||||
} |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
FRContext.getLogger().error(e.getMessage(), e); |
|
||||||
throw new ExceptionConverter(e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 转化字体 |
|
||||||
* |
|
||||||
* @param font pdf字体 |
|
||||||
* @param size 大小 |
|
||||||
* @return 转化后awt字体 |
|
||||||
*/ |
|
||||||
public Font pdfToAwt(BaseFont font, int size) { |
|
||||||
String[][] names = font.getFullFontName(); |
|
||||||
if (names.length == 1) { |
|
||||||
return new Font(names[0][3], 0, size); |
|
||||||
} |
|
||||||
String name10 = null; |
|
||||||
String name3x = null; |
|
||||||
for (int k = 0; k < names.length; ++k) { |
|
||||||
String[] name = names[k]; |
|
||||||
if (ComparatorUtils.equals(name[0], "1") && ComparatorUtils.equals(name[1], "0")) { |
|
||||||
name10 = name[3]; |
|
||||||
} else if (ComparatorUtils.equals(name[2], "1033")) { |
|
||||||
name3x = name[3]; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
String finalName = name3x; |
|
||||||
if (finalName == null) { |
|
||||||
finalName = name10; |
|
||||||
} |
|
||||||
if (finalName == null) { |
|
||||||
finalName = names[0][3]; |
|
||||||
} |
|
||||||
return new Font(finalName, 0, size); |
|
||||||
} |
|
||||||
|
|
||||||
private BaseFontParameters getBaseFontParameters(String name) { |
|
||||||
return (BaseFontParameters) mapper.get(name); |
|
||||||
} |
|
||||||
|
|
||||||
protected void insertNames(String names[][], String path) { |
|
||||||
String main = null; |
|
||||||
int k = 0; |
|
||||||
do { |
|
||||||
if (k >= names.length) { |
|
||||||
break; |
|
||||||
} |
|
||||||
String[] name = names[k]; |
|
||||||
if (ComparatorUtils.equals(name[2], "1033")) { |
|
||||||
main = name[3]; |
|
||||||
break; |
|
||||||
} |
|
||||||
k++; |
|
||||||
} while (true); |
|
||||||
if (main == null) { |
|
||||||
main = names[0][3]; |
|
||||||
} |
|
||||||
BaseFontParameters p = new BaseFontParameters(path); |
|
||||||
|
|
||||||
// alex:不一样的名字可能对应同样的BaseFontParameters,比如simsun和宋体都对应同样的p
|
|
||||||
mapper.put(main, p); |
|
||||||
for (k = 0; k < names.length; k++) { |
|
||||||
mapper.put(names[k][3], p); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 插入目录里的字体 |
|
||||||
* |
|
||||||
* @param dir 目录 |
|
||||||
* @return 插入数量 |
|
||||||
*/ |
|
||||||
public int insertDirectory(String dir) { |
|
||||||
File file = new File(dir); |
|
||||||
if (!file.exists() || !file.isDirectory()) { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
File[] files = file.listFiles(); |
|
||||||
int count = 0; |
|
||||||
for (int k = 0; k < files.length; k++) { |
|
||||||
file = files[k]; |
|
||||||
String name = file.getPath().toLowerCase(); |
|
||||||
try { |
|
||||||
if (matchPostfix(name)) { |
|
||||||
String[][] names = BaseFont.getFullFontName(file.getPath(), BaseFont.CP1252, null); |
|
||||||
insertNames(names, file.getPath()); |
|
||||||
count++; |
|
||||||
} else if (name.endsWith(".ttc")) { |
|
||||||
String[] ttcs = BaseFont.enumerateTTCNames(file.getPath()); |
|
||||||
for (int j = 0; j < ttcs.length; j++) { |
|
||||||
String nt = String.valueOf(new StringBuffer(file.getPath()).append(',').append(j)); |
|
||||||
String[][] names = BaseFont.getFullFontName(nt, BaseFont.CP1252, null); |
|
||||||
insertNames(names, nt); |
|
||||||
} |
|
||||||
|
|
||||||
count++; |
|
||||||
} |
|
||||||
} catch (Exception exception) { |
|
||||||
FRContext.getLogger().error(exception.getMessage(), exception); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return count; |
|
||||||
} |
|
||||||
|
|
||||||
private boolean matchPostfix(String name) { |
|
||||||
return name.endsWith(".ttf") || name.endsWith(".otf") || name.endsWith(".afm"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1 +1 @@ |
|||||||
package com.fr.design.module;
import com.fr.chart.base.ChartInternationalNameContentBean;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.charttypes.ChartTypeManager;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.actions.core.ActionFactory;
import com.fr.design.chart.ChartDialog;
import com.fr.design.chart.gui.ChartComponent;
import com.fr.design.chart.gui.ChartWidgetOption;
import com.fr.design.gui.core.WidgetOption;
import com.fr.design.mainframe.App;
import com.fr.design.mainframe.ChartAndWidgetPropertyPane;
import com.fr.design.mainframe.ChartPropertyPane;
import com.fr.form.ui.ChartEditor;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.stable.bridge.StableFactory;
import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider;
import javax.swing.*;
/**
* Created by IntelliJ IDEA.
* Author : Richer
* Version: 7.0.3
* Date: 13-7-8
* Time: 上午9:13
*/
public class ChartDesignerModule extends DesignModule {
public void start() {
super.start();
dealBeforeRegister();
register();
registerFloatEditor();
}
protected void dealBeforeRegister(){
StableFactory.registerMarkedClass(ExtraChartDesignClassManagerProvider.XML_TAG, ChartTypeInterfaceManager.class);
StableFactory.getStaticMarkedInstanceObjectFromClass(ExtraChartDesignClassManagerProvider.XML_TAG, ExtraChartDesignClassManagerProvider.class);
}
private void register(){
DesignModuleFactory.registerHyperlinkGroupType(new ChartHyperlinkGroup());
DesignModuleFactory.registerChartEditorClass(ChartEditor.class);
DesignModuleFactory.registerChartComponentClass(ChartComponent.class);
DesignModuleFactory.registerChartDialogClass(ChartDialog.class);
DesignModuleFactory.registerChartAndWidgetPropertyPane(ChartAndWidgetPropertyPane.class);
DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class);
ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction());
}
protected void registerFloatEditor() {
ActionFactory.registerChartCollection(ChartCollection.class);
}
/**
* 返回设计器能打开的模板类型的一个数组列表
*
* @return 可以打开的模板类型的数组
*/
public App<?>[] apps4TemplateOpener() {
return new App[0];
}
protected WidgetOption[] options4Show() {
ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames();
ChartWidgetOption[] child = new ChartWidgetOption[typeName.length];
for (int i = 0; i < typeName.length; i++) {
String plotID = typeName[i].getPlotID();
Chart[] rowChart = ChartTypeManager.getInstance().getChartTypes(plotID);
if(rowChart == null) {
continue;
}
String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID);
Icon icon = IOUtils.readIcon(iconPath);
child[i] = new ChartWidgetOption(Inter.getLocText(typeName[i].getName()), icon, ChartEditor.class, rowChart[0]);
}
return child;
}
public String getInterNationalName() {
return Inter.getLocText("FR-Chart-Design_ChartModule");
}
} |
package com.fr.design.module;
import com.fr.chart.base.ChartInternationalNameContentBean;
import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.charttypes.ChartTypeManager;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.actions.core.ActionFactory;
import com.fr.design.chart.ChartDialog;
import com.fr.design.chart.gui.ChartComponent;
import com.fr.design.chart.gui.ChartWidgetOption;
import com.fr.design.gui.core.WidgetOption;
import com.fr.design.mainframe.App;
import com.fr.design.mainframe.ChartPropertyPane;
import com.fr.form.ui.ChartEditor;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.stable.bridge.StableFactory;
import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider;
import javax.swing.*;
/**
* Created by IntelliJ IDEA.
* Author : Richer
* Version: 7.0.3
* Date: 13-7-8
* Time: 上午9:13
*/
public class ChartDesignerModule extends DesignModule {
public void start() {
super.start();
dealBeforeRegister();
register();
registerFloatEditor();
}
protected void dealBeforeRegister(){
StableFactory.registerMarkedClass(ExtraChartDesignClassManagerProvider.XML_TAG, ChartTypeInterfaceManager.class);
StableFactory.getStaticMarkedInstanceObjectFromClass(ExtraChartDesignClassManagerProvider.XML_TAG, ExtraChartDesignClassManagerProvider.class);
}
private void register(){
DesignModuleFactory.registerHyperlinkGroupType(new ChartHyperlinkGroup());
DesignModuleFactory.registerChartEditorClass(ChartEditor.class);
DesignModuleFactory.registerChartComponentClass(ChartComponent.class);
DesignModuleFactory.registerChartDialogClass(ChartDialog.class);
DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class);
ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction());
}
protected void registerFloatEditor() {
ActionFactory.registerChartCollection(ChartCollection.class);
}
/**
* 返回设计器能打开的模板类型的一个数组列表
*
* @return 可以打开的模板类型的数组
*/
public App<?>[] apps4TemplateOpener() {
return new App[0];
}
protected WidgetOption[] options4Show() {
ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames();
ChartWidgetOption[] child = new ChartWidgetOption[typeName.length];
for (int i = 0; i < typeName.length; i++) {
String plotID = typeName[i].getPlotID();
Chart[] rowChart = ChartTypeManager.getInstance().getChartTypes(plotID);
if(rowChart == null) {
continue;
}
String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID);
Icon icon = IOUtils.readIcon(iconPath);
child[i] = new ChartWidgetOption(Inter.getLocText(typeName[i].getName()), icon, ChartEditor.class, rowChart[0]);
}
return child;
}
public String getInterNationalName() {
return Inter.getLocText("FR-Chart-Design_ChartModule");
}
} |
@ -1,95 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.design.module; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.base.io.XMLEncryptUtils; |
|
||||||
import com.fr.chart.base.ChartInternationalNameContentBean; |
|
||||||
import com.fr.chart.chartattr.Chart; |
|
||||||
import com.fr.chart.charttypes.ChartTypeManager; |
|
||||||
import com.fr.chart.module.ChartModule; |
|
||||||
import com.fr.design.DesignerEnvManager; |
|
||||||
import com.fr.design.chart.gui.ChartWidgetOption; |
|
||||||
import com.fr.design.gui.core.WidgetOption; |
|
||||||
import com.fr.design.mainframe.*; |
|
||||||
import com.fr.file.FILE; |
|
||||||
import com.fr.form.ui.ChartBook; |
|
||||||
import com.fr.form.ui.ChartEditor; |
|
||||||
import com.fr.general.Inter; |
|
||||||
import com.fr.general.ModuleContext; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-13 |
|
||||||
* Time: 下午2:56 |
|
||||||
*/ |
|
||||||
public class ChartStartModule extends ChartDesignerModule { |
|
||||||
|
|
||||||
protected void dealBeforeRegister(){ |
|
||||||
ModuleContext.startModule(ChartModule.class.getName()); |
|
||||||
} |
|
||||||
|
|
||||||
protected void registerFloatEditor() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
protected WidgetOption[] options4Show() { |
|
||||||
ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); |
|
||||||
ChartWidgetOption[] child = new ChartWidgetOption[typeName.length]; |
|
||||||
for (int i = 0; i < typeName.length; i++) { |
|
||||||
Chart[] rowChart = ChartTypeManager.getInstance().getChartTypes(typeName[i].getPlotID()); |
|
||||||
child[i] = new ChartWidgetOption(Inter.getLocText(typeName[i].getName()), BaseUtils |
|
||||||
.readIcon("com/fr/design/images/form/toolbar/" + typeName[i].getName() + ".png"), |
|
||||||
ChartEditor.class, rowChart[0]); |
|
||||||
} |
|
||||||
return child; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 应用打开器 |
|
||||||
* @return 应用 |
|
||||||
*/ |
|
||||||
public App<?>[] apps4TemplateOpener() { |
|
||||||
return new App[]{new AbstractAppProvider<ChartBook>() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public String[] defaultExtentions() { |
|
||||||
return new String[]{"crt"}; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public JTemplate<ChartBook, ?> openTemplate(FILE tplFile) { |
|
||||||
return new JChart(asIOFile(tplFile), tplFile); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public ChartBook asIOFile(FILE file) { |
|
||||||
if (XMLEncryptUtils.isCptEncoded() && |
|
||||||
!XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())) { |
|
||||||
if (!new DecodeDialog(file).isPwdRight()) { |
|
||||||
FRContext.getLogger().error(Inter.getLocText("FR-Chart-Password_Error")); |
|
||||||
return new ChartBook(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
ChartBook tpl = new ChartBook(); |
|
||||||
//打开通知
|
|
||||||
FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, |
|
||||||
new String[]{"\"" + file.getName() + "\"" + ",", "..."})); |
|
||||||
try { |
|
||||||
tpl.readStream(file.asInputStream()); |
|
||||||
} catch (Exception exp) { |
|
||||||
FRContext.getLogger().error("Failed to generate frm from " + file, exp); |
|
||||||
return null; |
|
||||||
} |
|
||||||
return tpl; |
|
||||||
} |
|
||||||
}}; |
|
||||||
} |
|
||||||
} |
|
@ -1,18 +0,0 @@ |
|||||||
package com.fr.start; |
|
||||||
|
|
||||||
import java.awt.Image; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
|
|
||||||
public class ChartSplashPane extends SplashPane{ |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建启动画面的背景图片 |
|
||||||
* |
|
||||||
* @return 背景图片 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public Image createSplashBackground() { |
|
||||||
return BaseUtils.readImage("/com/fr/design/images/splash4Chart.png"); |
|
||||||
} |
|
||||||
} |
|
@ -1,406 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
|
||||||
*/ |
|
||||||
|
|
||||||
package com.fr.start; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.design.DesignerEnvManager; |
|
||||||
import com.fr.design.actions.file.WebPreviewUtils; |
|
||||||
import com.fr.design.actions.help.AboutAction; |
|
||||||
import com.fr.design.constants.UIConstants; |
|
||||||
import com.fr.design.file.HistoryTemplateListPane; |
|
||||||
import com.fr.design.file.MutilTempalteTabPane; |
|
||||||
import com.fr.design.file.NewTemplatePane; |
|
||||||
import com.fr.design.gui.ibutton.UIButton; |
|
||||||
import com.fr.design.gui.itoolbar.UILargeToolbar; |
|
||||||
import com.fr.design.mainframe.*; |
|
||||||
import com.fr.design.mainframe.actions.*; |
|
||||||
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; |
|
||||||
import com.fr.design.menu.*; |
|
||||||
import com.fr.design.module.ChartStartModule; |
|
||||||
import com.fr.general.FRFont; |
|
||||||
import com.fr.general.Inter; |
|
||||||
import com.fr.general.web.ParameterConsts; |
|
||||||
import com.fr.stable.Constants; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import javax.swing.border.MatteBorder; |
|
||||||
import java.awt.*; |
|
||||||
import java.awt.event.ActionEvent; |
|
||||||
import java.awt.event.ActionListener; |
|
||||||
import java.awt.event.InputEvent; |
|
||||||
import java.awt.event.KeyEvent; |
|
||||||
import java.util.ArrayList; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by IntelliJ IDEA. |
|
||||||
* Author : daisy |
|
||||||
* Version: 6.5.6 |
|
||||||
* Date: 14-10-13 |
|
||||||
* Time: 上午11:02 |
|
||||||
*/ |
|
||||||
public class Designer4Chart extends BaseDesigner { |
|
||||||
private static final int TOOLBAR_HEIGHT = 53; |
|
||||||
private static final int TOOLBAR_WIDTH =60+34+7+1+7 ; |
|
||||||
private static final int GAP = 7; |
|
||||||
private static final int EAST_WIDTH = 292; |
|
||||||
private static final int MESSAGEPORT = 51460; |
|
||||||
private UIButton saveButton; |
|
||||||
private UIButton undo; |
|
||||||
private UIButton redo; |
|
||||||
private UIButton run; |
|
||||||
private UIButton copy; |
|
||||||
|
|
||||||
/** |
|
||||||
* 主函数 |
|
||||||
* |
|
||||||
* @param args 入口参数 |
|
||||||
*/ |
|
||||||
public static void main(String[] args) { |
|
||||||
new Designer4Chart(args); |
|
||||||
} |
|
||||||
|
|
||||||
public Designer4Chart(String[] args) { |
|
||||||
super(args); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String module2Start() { |
|
||||||
EastRegionContainerPane.getInstance().setDownPaneVisible(false); |
|
||||||
EastRegionContainerPane.getInstance().setContainerWidth(EAST_WIDTH); |
|
||||||
return ChartStartModule.class.getName(); |
|
||||||
} |
|
||||||
|
|
||||||
protected void initLanguage() { |
|
||||||
//这两句的位置不能随便调换,因为会影响语言切换的问题
|
|
||||||
FRContext.setLanguage(Constants.LANGUAGE_ENGLISH); |
|
||||||
} |
|
||||||
|
|
||||||
protected void initDefaultFont(){ |
|
||||||
FRContext.getDefaultValues().setFRFont(FRFont.getInstance("Meiryo", Font.PLAIN, 9)); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* build得路径 |
|
||||||
* @return build得路径 |
|
||||||
*/ |
|
||||||
public String buildPropertiesPath() { |
|
||||||
return "/com/fr/chart/base/build.properties"; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建文件菜单项 |
|
||||||
* @return 菜单项 |
|
||||||
*/ |
|
||||||
public ShortCut[] createNewFileShortCuts() { |
|
||||||
ArrayList<ShortCut> shortCuts = new ArrayList<ShortCut>(); |
|
||||||
shortCuts.add(new NewChartAction()); |
|
||||||
return shortCuts.toArray(new ShortCut[shortCuts.size()]); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建新模版 |
|
||||||
* @return 模版 |
|
||||||
*/ |
|
||||||
public JTemplate<?, ?> createNewTemplate() { |
|
||||||
return new JChart(); |
|
||||||
} |
|
||||||
|
|
||||||
protected void resetToolTips(){ |
|
||||||
copy.setToolTipText(Inter.getLocText("FR-Chart-Action_Copy")+"JS"); |
|
||||||
run.setToolTipText(PREVIEW.getMenuKeySetName()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建设计器上几个比较大的图标:新建cpt,保存,前进,后退,运行。 |
|
||||||
* |
|
||||||
* @return 返回大图标对应的工具栏 |
|
||||||
*/ |
|
||||||
public UILargeToolbar createLargeToolbar() { |
|
||||||
|
|
||||||
UILargeToolbar largeToolbar = new UILargeToolbar(FlowLayout.LEFT){ |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
return new Dimension(TOOLBAR_WIDTH ,TOOLBAR_HEIGHT); |
|
||||||
} |
|
||||||
}; |
|
||||||
largeToolbar.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 4)); |
|
||||||
largeToolbar.add(new JPanel() { |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
Dimension dim = super.getPreferredSize(); |
|
||||||
dim.width = 1; |
|
||||||
return dim; |
|
||||||
} |
|
||||||
}); |
|
||||||
createRunButton(); |
|
||||||
largeToolbar.add(run); |
|
||||||
largeToolbar.add(new JPanel() { |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
Dimension dim = super.getPreferredSize(); |
|
||||||
dim.width = GAP; |
|
||||||
return dim; |
|
||||||
} |
|
||||||
}); |
|
||||||
largeToolbar.addSeparator(new Dimension(2, 42)); |
|
||||||
largeToolbar.add(new JPanel() { |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
Dimension dim = super.getPreferredSize(); |
|
||||||
dim.width = GAP; |
|
||||||
return dim; |
|
||||||
} |
|
||||||
}); |
|
||||||
createCopyButton(); |
|
||||||
largeToolbar.add(copy); |
|
||||||
largeToolbar.add(new JPanel() { |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
Dimension dim = super.getPreferredSize(); |
|
||||||
dim.width = GAP; |
|
||||||
return dim; |
|
||||||
} |
|
||||||
}); |
|
||||||
largeToolbar.addSeparator(new Dimension(2, 42)); |
|
||||||
|
|
||||||
largeToolbar.setBorder(new MatteBorder(new Insets(0, 0, 1, 0), UIConstants.LINE_COLOR)); |
|
||||||
return largeToolbar; |
|
||||||
} |
|
||||||
|
|
||||||
protected int getStartPort(){ |
|
||||||
return MESSAGEPORT; |
|
||||||
} |
|
||||||
|
|
||||||
protected DesignerFrame createDesignerFrame(){ |
|
||||||
|
|
||||||
return new DesignerFrame4Chart(this); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建上面一排的工具栏按钮 |
|
||||||
* |
|
||||||
* @return 按钮 |
|
||||||
*/ |
|
||||||
public UIButton[] createUp() { |
|
||||||
return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; |
|
||||||
} |
|
||||||
|
|
||||||
private UIButton createRunButton() { |
|
||||||
run = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/pageb24.png")) { |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
return new Dimension(34, 43); |
|
||||||
} |
|
||||||
}; |
|
||||||
run.setToolTipText(PREVIEW.getMenuKeySetName()); |
|
||||||
run.set4ChartLargeToolButton(); |
|
||||||
run.addActionListener(new ActionListener() { |
|
||||||
@Override |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
JTemplate<?, ?> jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
||||||
if (jt == null) { |
|
||||||
return; |
|
||||||
} |
|
||||||
onChartPreview(jt); |
|
||||||
} |
|
||||||
}); |
|
||||||
return run; |
|
||||||
} |
|
||||||
|
|
||||||
public static void onChartPreview(JTemplate<?, ?> jt) { |
|
||||||
WebPreviewUtils.actionPerformed(jt, null, ParameterConsts.CHARTLET); |
|
||||||
} |
|
||||||
|
|
||||||
public static final MenuKeySet PREVIEW = new MenuKeySet() { |
|
||||||
@Override |
|
||||||
public char getMnemonic() { |
|
||||||
return 'P'; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getMenuName() { |
|
||||||
return Inter.getLocText("FR-Chart-Template_Preview"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public KeyStroke getKeyStroke() { |
|
||||||
return KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
private UIButton createCopyButton(){ |
|
||||||
copy = new UIButton(BaseUtils.readIcon("com/fr/design/images/copyjs.png")) { |
|
||||||
public Dimension getPreferredSize() { |
|
||||||
return new Dimension(34, 43); |
|
||||||
} |
|
||||||
}; |
|
||||||
copy.setToolTipText(Inter.getLocText("FR-Chart-Action_Copy")+"JS"); |
|
||||||
copy.set4ChartLargeToolButton(); |
|
||||||
copy.addActionListener(new ActionListener() { |
|
||||||
@Override |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
JTemplate<?, ?> jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
||||||
if (jt == null) { |
|
||||||
return; |
|
||||||
} |
|
||||||
DesignerContext.getDesignerFrame().refreshToolbar(); |
|
||||||
|
|
||||||
jt.stopEditing(); |
|
||||||
if (!jt.isSaved() && !jt.saveTemplate2Env()) { |
|
||||||
return; |
|
||||||
} |
|
||||||
//复制代码
|
|
||||||
jt.copyJS(); |
|
||||||
} |
|
||||||
}); |
|
||||||
return copy; |
|
||||||
} |
|
||||||
|
|
||||||
private UIButton createSaveButton() { |
|
||||||
saveButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/save.png")); |
|
||||||
saveButton.setToolTipText(KeySetUtils.SAVE_TEMPLATE.getMenuKeySetName()); |
|
||||||
saveButton.set4ToolbarButton(); |
|
||||||
saveButton.addActionListener(new ActionListener() { |
|
||||||
@Override |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
JTemplate<?, ?> jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
||||||
jt.stopEditing(); |
|
||||||
jt.saveTemplate(); |
|
||||||
jt.requestFocus(); |
|
||||||
} |
|
||||||
}); |
|
||||||
return saveButton; |
|
||||||
} |
|
||||||
|
|
||||||
private UIButton createUndoButton() { |
|
||||||
undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); |
|
||||||
undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); |
|
||||||
undo.set4ToolbarButton(); |
|
||||||
undo.addActionListener(new ActionListener() { |
|
||||||
@Override |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
JTemplate<?, ?> jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
||||||
if (jt != null) { |
|
||||||
jt.undo(); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
return undo; |
|
||||||
} |
|
||||||
|
|
||||||
private UIButton createRedoButton() { |
|
||||||
redo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/redo.png")); |
|
||||||
redo.setToolTipText(KeySetUtils.REDO.getMenuKeySetName()); |
|
||||||
redo.set4ToolbarButton(); |
|
||||||
redo.addActionListener(new ActionListener() { |
|
||||||
@Override |
|
||||||
public void actionPerformed(ActionEvent e) { |
|
||||||
JTemplate<?, ?> jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
||||||
if (jt != null) { |
|
||||||
jt.redo(); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
return redo; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 重置工具条 |
|
||||||
* @param toolbarComponent 工具栏 |
|
||||||
* @param plus 对象 |
|
||||||
* @return 工具条对象 |
|
||||||
*/ |
|
||||||
public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) { |
|
||||||
return plus.toolBar4Authority(); |
|
||||||
} |
|
||||||
|
|
||||||
public NewTemplatePane getNewTemplatePane(){ |
|
||||||
return new NewTemplatePane() { |
|
||||||
@Override |
|
||||||
public Icon getNew() { |
|
||||||
return BaseUtils.readIcon("/com/fr/design/images/newchart_normal.png"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Icon getMouseOverNew() { |
|
||||||
return BaseUtils.readIcon("/com/fr/design/images/newchart_over.png"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Icon getMousePressNew() { |
|
||||||
return BaseUtils.readIcon("/com/fr/design/images/newchart_press.png"); |
|
||||||
} |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
@Override |
|
||||||
protected void refreshLargeToolbarState() { |
|
||||||
JTemplate<?, ?> jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
||||||
if (jt == null) { |
|
||||||
return; |
|
||||||
} |
|
||||||
saveButton.setEnabled(!jt.isSaved()); |
|
||||||
MutilTempalteTabPane.getInstance().refreshOpenedTemplate(HistoryTemplateListPane.getInstance().getHistoryList()); |
|
||||||
MutilTempalteTabPane.getInstance().repaint(); |
|
||||||
if (DesignerEnvManager.getEnvManager().isSupportUndo()) { |
|
||||||
undo.setEnabled(jt.canUndo()); |
|
||||||
redo.setEnabled(jt.canRedo()); |
|
||||||
} else { |
|
||||||
undo.setEnabled(false); |
|
||||||
redo.setEnabled(false); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected SplashPane createSplashPane() { |
|
||||||
return new ChartSplashPane(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
*更新工具栏 |
|
||||||
*/ |
|
||||||
public void updateToolBarDef() { |
|
||||||
refreshLargeToolbarState(); |
|
||||||
} |
|
||||||
|
|
||||||
protected void addCloseCurrentTemplateAction(MenuDef menuDef) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
protected void addPreferenceAction(MenuDef menuDef) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
protected void addSwitchExistEnvAction(MenuDef menuDef) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public MenuDef[] createTemplateShortCuts(ToolBarMenuDockPlus plus) { |
|
||||||
MenuDef menuDef = new MenuDef(KeySetUtils.EXPORT_CHART.getMenuKeySetName(), KeySetUtils.EXPORT_CHART.getMnemonic()); |
|
||||||
menuDef.addShortCut(plus.shortcut4ExportMenu()); |
|
||||||
return new MenuDef[] {menuDef}; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 创建帮助菜单得菜单项 |
|
||||||
* @return 菜单项 |
|
||||||
*/ |
|
||||||
public ShortCut[] createHelpShortCuts() { |
|
||||||
resetToolTips(); |
|
||||||
return new ShortCut[]{ |
|
||||||
new ChartWebAction(), |
|
||||||
SeparatorDef.DEFAULT, |
|
||||||
new ChartFeedBackAciton(), |
|
||||||
SeparatorDef.DEFAULT, |
|
||||||
new UpdateOnlineAction(), |
|
||||||
new AboutAction() |
|
||||||
}; |
|
||||||
} |
|
||||||
|
|
||||||
protected ShortCut openTemplateAction(){ |
|
||||||
return new OpenChartAction(); |
|
||||||
} |
|
||||||
|
|
||||||
protected String[] startFileSuffix(){ |
|
||||||
return new String[]{".crt"}; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
Loading…
Reference in new issue