plough
6 years ago
71 changed files with 3095 additions and 800 deletions
@ -0,0 +1,223 @@
|
||||
package com.fr.design.actions.file.export; |
||||
|
||||
import com.fr.base.vcs.DesignerMode; |
||||
import com.fr.design.actions.JTemplateAction; |
||||
import com.fr.design.gui.iprogressbar.FRProgressBar; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.JTemplate; |
||||
import com.fr.exception.RemoteDesignPermissionDeniedException; |
||||
import com.fr.file.FILE; |
||||
import com.fr.file.FILEChooserPane; |
||||
import com.fr.io.exporter.ExporterKey; |
||||
import com.fr.file.filter.ChooseFileFilter; |
||||
import com.fr.io.exporter.DesignExportType; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.stable.ProductConstants; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.third.jodd.io.FileNameUtil; |
||||
import com.fr.workspace.WorkContext; |
||||
import com.fr.workspace.server.exporter.TemplateExportOperator; |
||||
|
||||
import javax.swing.JOptionPane; |
||||
import javax.swing.SwingWorker; |
||||
import javax.swing.UIManager; |
||||
import java.awt.event.ActionEvent; |
||||
import java.io.OutputStream; |
||||
import java.util.Map; |
||||
|
||||
public abstract class AbstractExportAction<E extends JTemplate<?, ?>> extends JTemplateAction<E> { |
||||
|
||||
private FRProgressBar progressbar; |
||||
|
||||
public AbstractExportAction(E t) { |
||||
super(t); |
||||
} |
||||
|
||||
/** |
||||
* 导出接口名 |
||||
* |
||||
* @return String scopeName |
||||
*/ |
||||
public abstract ExporterKey exportKey(); |
||||
|
||||
/** |
||||
* 导出类型 |
||||
* |
||||
* @return DesignExportType tyoe |
||||
*/ |
||||
public abstract DesignExportType exportType(); |
||||
|
||||
/** |
||||
* 目标文件过滤器 |
||||
* |
||||
* @return ChooseFileFilter filter |
||||
*/ |
||||
protected abstract ChooseFileFilter getChooseFileFilter(); |
||||
|
||||
/** |
||||
* 目标文件扩展名 |
||||
* |
||||
* @return String extensionName |
||||
*/ |
||||
protected abstract String getDefaultExtension(); |
||||
|
||||
/** |
||||
* 处理参数 |
||||
* |
||||
* @return Map para |
||||
*/ |
||||
protected abstract Map<String, Object> processParameter(); |
||||
|
||||
|
||||
/** |
||||
* 执行方法 |
||||
*/ |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
|
||||
if (!processNotSaved()) { |
||||
return; |
||||
} |
||||
|
||||
Map<String, Object> para = processParameter(); |
||||
|
||||
// 选择输入的文件
|
||||
FILEChooserPane fileChooserPane = FILEChooserPane.getMultiEnvInstance(true, false); |
||||
fileChooserPane.addChooseFILEFilter(this.getChooseFileFilter()); |
||||
|
||||
|
||||
String fileName = getTargetFileName(); |
||||
fileChooserPane.setFileNameTextField(fileName, "." + this.getDefaultExtension()); |
||||
int saveValue = fileChooserPane.showSaveDialog(DesignerContext.getDesignerFrame(), "." + this.getDefaultExtension()); |
||||
if (saveValue == FILEChooserPane.JOPTIONPANE_OK_OPTION || saveValue == FILEChooserPane.OK_OPTION) { |
||||
FILE target = fileChooserPane.getSelectedFILE(); |
||||
try { |
||||
target.mkfile(); |
||||
} catch (Exception exp) { |
||||
FineLoggerFactory.getLogger().error("Error In Make New File", exp); |
||||
} |
||||
FineLoggerFactory.getLogger().info("\"" + target.getName() + "\"" + Toolkit.i18nText("Fine-Design_Report_Prepare_Export") + "!"); |
||||
|
||||
progressbar = new FRProgressBar( |
||||
createExportWork(getSource(), target, para), |
||||
DesignerContext.getDesignerFrame(), |
||||
Toolkit.i18nText("Fine-Design_Report_Exporting"), |
||||
StringUtils.EMPTY, |
||||
0, |
||||
100); |
||||
|
||||
progressbar.start(); |
||||
} |
||||
} |
||||
|
||||
private FILE getSource() { |
||||
return this.getEditingComponent().getEditingFILE(); |
||||
} |
||||
|
||||
private String getTargetFileName() { |
||||
FILE source = getSource(); |
||||
String fileName = source.getName(); |
||||
return FileNameUtil.removeExtension(fileName); |
||||
} |
||||
|
||||
private boolean processNotSaved() { |
||||
//当前编辑的模板
|
||||
E e = getEditingComponent(); |
||||
if (!e.isALLSaved() && !DesignerMode.isVcsMode()) { |
||||
e.stopEditing(); |
||||
int returnVal = JOptionPane.showConfirmDialog( |
||||
DesignerContext.getDesignerFrame(), |
||||
Toolkit.i18nText("Fine-Design_Basic_Utils_Would_You_Like_To_Save") + " \"" + e.getEditingFILE() + "\" ?", |
||||
ProductConstants.PRODUCT_NAME, |
||||
JOptionPane.YES_NO_CANCEL_OPTION, |
||||
JOptionPane.QUESTION_MESSAGE |
||||
); |
||||
if (returnVal == JOptionPane.YES_OPTION) { |
||||
e.saveTemplate(); |
||||
FineLoggerFactory.getLogger().info( |
||||
Toolkit.i18nText("Fine-Design_Basic_Template_Already_Saved", e.getEditingFILE().getName()) |
||||
); |
||||
return true; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
private SwingWorker createExportWork(final FILE source, final FILE target, final Map<String, Object> parameterMap) { |
||||
final String path = source.getPath(); |
||||
final String name = target.getName(); |
||||
|
||||
return new SwingWorker<Void, Void>() { |
||||
|
||||
@Override |
||||
protected Void doInBackground() throws Exception { |
||||
//bug 10516
|
||||
Thread.sleep(100); |
||||
try (OutputStream outputStream = target.asOutputStream()) { |
||||
this.setProgress(10); |
||||
dealExporter(outputStream, path, parameterMap); |
||||
this.setProgress(80); |
||||
outputStream.flush(); |
||||
outputStream.close(); |
||||
this.setProgress(100); |
||||
|
||||
FineLoggerFactory.getLogger().info("\"" + name + "\"" + Toolkit.i18nText("Fine-Design_Report_Finish_Export") + "!"); |
||||
JOptionPane.showMessageDialog( |
||||
DesignerContext.getDesignerFrame(), |
||||
Toolkit.i18nText("Fine-Design_Report_Exported_Successfully") + "\n" + name); |
||||
|
||||
|
||||
} catch (RemoteDesignPermissionDeniedException exp) { |
||||
this.setProgress(100); |
||||
target.closeTemplate(); |
||||
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
||||
JOptionPane.showMessageDialog( |
||||
DesignerContext.getDesignerFrame(), |
||||
Toolkit.i18nText("Fine-Engine_Remote_Design_Permission_Denied"), |
||||
null, |
||||
JOptionPane.ERROR_MESSAGE, |
||||
UIManager.getIcon("OptionPane.errorIcon") |
||||
); |
||||
} catch (Exception exp) { |
||||
this.setProgress(100); |
||||
target.closeTemplate(); |
||||
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
||||
JOptionPane.showMessageDialog( |
||||
DesignerContext.getDesignerFrame(), |
||||
Toolkit.i18nText("Fine-Design_Report_Export_Failed") + "\n" + path, |
||||
null, |
||||
JOptionPane.ERROR_MESSAGE, |
||||
UIManager.getIcon("OptionPane.errorIcon") |
||||
); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void done() { |
||||
progressbar.close(); |
||||
} |
||||
}; |
||||
} |
||||
|
||||
private void dealExporter(OutputStream outputStream, String path, final Map<String, Object> para) throws Exception { |
||||
|
||||
// 没有办法处理这个 isLocal 判断,因为一个是修改参数传递结果,一个是返回值做结果
|
||||
// todo 后续想想办法
|
||||
if (WorkContext.getCurrent().isLocal()) { |
||||
WorkContext.getCurrent().get(TemplateExportOperator.class) |
||||
.export(exportKey(), exportType(), outputStream, path, para); |
||||
} else { |
||||
byte[] contents = |
||||
WorkContext.getCurrent().get(TemplateExportOperator.class) |
||||
.export(exportKey(), exportType(), null, path, para); |
||||
|
||||
outputStream.write(contents); |
||||
} |
||||
} |
||||
|
||||
} |
@ -1,16 +1,154 @@
|
||||
package com.fr.design.file; |
||||
|
||||
import com.fr.base.chart.chartdata.CallbackEvent; |
||||
import com.fr.design.mainframe.JTemplate; |
||||
import com.fr.file.FILE; |
||||
import com.fr.file.FileNodeFILE; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 历史模板缓存 |
||||
* |
||||
* <p> |
||||
* 为可能存在的插件做兼容处理 |
||||
* |
||||
* @see HistoryTemplateListCache |
||||
* @deprecated use HistoryTemplateListCache instead |
||||
*/ |
||||
@Deprecated |
||||
public class HistoryTemplateListPane { |
||||
public static HistoryTemplateListCache getInstance() { |
||||
public class HistoryTemplateListPane implements CallbackEvent { |
||||
|
||||
|
||||
private static volatile HistoryTemplateListPane THIS; |
||||
|
||||
public static HistoryTemplateListPane getInstance() { |
||||
if (THIS == null) { |
||||
synchronized (HistoryTemplateListPane.class) { |
||||
if (THIS == null) { |
||||
THIS = new HistoryTemplateListPane(); |
||||
} |
||||
} |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private static HistoryTemplateListCache instead() { |
||||
return HistoryTemplateListCache.getInstance(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 关闭选择的文件 |
||||
* |
||||
* @param selected 选择的 |
||||
*/ |
||||
public void closeSelectedReport(JTemplate<?, ?> selected) { |
||||
instead().closeSelectedReport(selected); |
||||
} |
||||
|
||||
/** |
||||
* 临时关闭选择的文件 |
||||
* |
||||
* @param selected 选择的 |
||||
*/ |
||||
public void closeVirtualSelectedReport(JTemplate<?, ?> selected) { |
||||
instead().closeVirtualSelectedReport(selected); |
||||
} |
||||
|
||||
|
||||
public JTemplate<?, ?> getCurrentEditingTemplate() { |
||||
return instead().getCurrentEditingTemplate(); |
||||
} |
||||
|
||||
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) { |
||||
instead().setCurrentEditingTemplate(jt); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 添加历史记录 |
||||
*/ |
||||
public void addHistory() { |
||||
instead().addHistory(); |
||||
} |
||||
|
||||
|
||||
public List<JTemplate<?, ?>> getHistoryList() { |
||||
return instead().getHistoryList(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 清空历史记录 |
||||
*/ |
||||
public void removeAllHistory() { |
||||
instead().removeAllHistory(); |
||||
} |
||||
|
||||
public int getHistoryCount() { |
||||
return instead().getHistoryCount(); |
||||
} |
||||
|
||||
|
||||
public JTemplate<?, ?> get(int index) { |
||||
return instead().get(index); |
||||
} |
||||
|
||||
|
||||
public JTemplate<?, ?> getTemplate(int index) { |
||||
return instead().getTemplate(index); |
||||
} |
||||
|
||||
/** |
||||
* 获取模板的index |
||||
* |
||||
* @param jt 模板 |
||||
* @return 位置 |
||||
*/ |
||||
public int contains(JTemplate<?, ?> jt) { |
||||
return instead().contains(jt); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 判断是否打开过该模板 |
||||
* |
||||
* @param filename 文件名 |
||||
* @return 文件位置 |
||||
*/ |
||||
public int contains(String filename) { |
||||
return instead().contains(filename); |
||||
} |
||||
|
||||
/** |
||||
* 是否是当前编辑的文件 |
||||
* |
||||
* @param filename 文件名 |
||||
* @return 是则返回TRUE |
||||
*/ |
||||
public boolean isCurrentEditingFile(String filename) { |
||||
return instead().isCurrentEditingFile(filename); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void callback() { |
||||
instead().callback(); |
||||
} |
||||
|
||||
/** |
||||
* 打开new模板的同时关闭old模板,优先关已保存的、先打开的 |
||||
*/ |
||||
public void closeOverLineTemplate() { |
||||
instead().closeOverLineTemplate(); |
||||
} |
||||
|
||||
|
||||
public void deleteFile(FileNodeFILE file) { |
||||
instead().deleteFile(file); |
||||
} |
||||
|
||||
public boolean rename(FILE tplFile, String from, String to) { |
||||
return instead().rename(tplFile, from, to); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,99 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||
import com.fr.form.ui.CardSwitchButton; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.cardtag.mobile.DefaultMobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
|
||||
import java.awt.BasicStroke; |
||||
import java.awt.Dimension; |
||||
import java.awt.FontMetrics; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
|
||||
public class DefaultMobileStyleDefinePane extends MobileTemplateStyleDefinePane { |
||||
|
||||
public DefaultMobileStyleDefinePane(WCardTagLayout tagLayout) { |
||||
super(tagLayout); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MobileTemplateStyle ob) { |
||||
updatePreviewPane(); |
||||
} |
||||
|
||||
protected void createConfigPane() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected void initDefaultConfig() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateSubStyle() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateBean() { |
||||
return new DefaultMobileTemplateStyle(); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||
return new DefaultMobileTemplateStyle(); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
protected MobileTemplatePreviewPane createPreviewPane() { |
||||
return new DefaultStylePreviewPane(); |
||||
} |
||||
|
||||
public class DefaultStylePreviewPane extends MobileTemplatePreviewPane { |
||||
|
||||
public DefaultStylePreviewPane() { |
||||
this.setBackground(DefaultMobileTemplateStyle.DEFAULT_INITIAL_COLOR); |
||||
} |
||||
|
||||
public void repaint() { |
||||
super.repaint(); |
||||
} |
||||
|
||||
@Override |
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Dimension dimension = this.getSize(); |
||||
int panelWidth = dimension.width; |
||||
int panelHeight = dimension.height; |
||||
Graphics2D g2d = (Graphics2D) g.create(); |
||||
FRFont frFont = DefaultMobileTemplateStyle.DEFAULT_TAB_FONT.getFont(); |
||||
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||
WCardTagLayout cardTagLayout = DefaultMobileStyleDefinePane.this.getTagLayout(); |
||||
int eachWidth = panelWidth / cardTagLayout.getWidgetCount(); |
||||
g2d.setFont(frFont); |
||||
int fontHeight = fm.getHeight(); |
||||
int ascentHeight = fm.getAscent(); |
||||
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||
CardSwitchButton cardSwitchButton = cardTagLayout.getSwitchButton(i); |
||||
String widgetName = cardSwitchButton.getText(); |
||||
int width = fm.stringWidth(widgetName); |
||||
g2d.drawString(widgetName, (eachWidth - width) / 2, (panelHeight - fontHeight) / 2 + ascentHeight); |
||||
if (i == 0) { |
||||
g2d.setStroke(new BasicStroke(2.0f)); |
||||
g2d.drawLine(0, panelHeight - 1, eachWidth, panelHeight - 1); |
||||
} |
||||
g2d.translate(eachWidth, 0); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,193 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.base.IconManager; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||
import com.fr.form.ui.CardSwitchButton; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.cardtag.mobile.DownMenuStyle; |
||||
import com.fr.general.cardtag.mobile.LineDescription; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.FontMetrics; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Stroke; |
||||
import java.util.ArrayList; |
||||
|
||||
public class DownMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { |
||||
private LinePane splitLinePane; |
||||
private TabIconConfigPane initIconConfigPane; |
||||
private TabIconConfigPane selectIconConfigPane; |
||||
|
||||
public DownMenuStyleDefinePane(WCardTagLayout tagLayout) { |
||||
super(tagLayout); |
||||
} |
||||
|
||||
protected void createExtraConfPane(JPanel centerPane) { |
||||
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||
UITitleSplitLine iconSplitLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Icon"), 520); |
||||
iconSplitLine.setPreferredSize(new Dimension(520, 20)); |
||||
centerPane.add(iconSplitLine); |
||||
|
||||
initIconConfigPane = new TabIconConfigPane(getTagLayout().getWidgetCount()); |
||||
selectIconConfigPane = new TabIconConfigPane(getTagLayout().getWidgetCount()); |
||||
|
||||
UILabel initIconLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Initial_Icon")); |
||||
UILabel selectIconLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Select_Icon")); |
||||
initIconLabel.setPreferredSize(new Dimension(55, 20)); |
||||
selectIconLabel.setPreferredSize(new Dimension(55, 20)); |
||||
JPanel initIconContainPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initIconLabel, initIconConfigPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
JPanel selectIconContainePane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectIconLabel, selectIconConfigPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
initIconContainPane.setPreferredSize(new Dimension(240, 50)); |
||||
selectIconContainePane.setPreferredSize(new Dimension(240, 50)); |
||||
panel.add(initIconContainPane); |
||||
panel.add(selectIconContainePane); |
||||
UITitleSplitLine splitLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Spit_Line"), 520); |
||||
splitLine.setPreferredSize(new Dimension(520, 20)); |
||||
splitLinePane = new LinePane(); |
||||
splitLinePane.addLineChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
centerPane.add(panel); |
||||
centerPane.add(splitLine); |
||||
centerPane.add(splitLinePane); |
||||
} |
||||
|
||||
@Override |
||||
protected void initDefaultConfig() { |
||||
this.initialColorBox.setSelectObject(DownMenuStyle.DEFAULT_INITIAL_COLOR); |
||||
this.fontConfPane.populate(DownMenuStyle.DEFAULT_TAB_FONT.getFont()); |
||||
this.selectColorBox.setSelectObject(DownMenuStyle.DEFAULT_SELECT_COLOR); |
||||
this.selectFontColor.setColor(DownMenuStyle.DEFAULT_SELECT_FONT_COLOR); |
||||
this.splitLinePane.populate(DownMenuStyle.DEFAULT_SPLIT_LINE); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplatePreviewPane createPreviewPane() { |
||||
return new DownMenuStylePreviewPane(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void populateBean(MobileTemplateStyle ob) { |
||||
super.populateBean(ob); |
||||
DownMenuStyle downMenuStyle = (DownMenuStyle) ob; |
||||
splitLinePane.populate(downMenuStyle.getSplitLine()); |
||||
ArrayList<String> initialIconNames = new ArrayList<String>(); |
||||
ArrayList<String> selectIconNames = new ArrayList<String>(); |
||||
for (int i = 0; i < getTagLayout().getWidgetCount(); i++) { |
||||
CardSwitchButton cardSwitchButton = (CardSwitchButton) getTagLayout().getWidget(i); |
||||
initialIconNames.add(cardSwitchButton.getInitIconName()); |
||||
selectIconNames.add(cardSwitchButton.getSelectIconName()); |
||||
} |
||||
initIconConfigPane.populate(initialIconNames); |
||||
selectIconConfigPane.populate(selectIconNames); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||
return new DownMenuStyle(); |
||||
} |
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateStyleWithSelectConf() { |
||||
DownMenuStyle downMenuStyle = new DownMenuStyle(); |
||||
downMenuStyle.setSplitLine(splitLinePane.update()); |
||||
ArrayList<String> initialIconNames = initIconConfigPane.update(); |
||||
ArrayList<String> selectIconNames = selectIconConfigPane.update(); |
||||
for (int i = 0; i < getTagLayout().getWidgetCount(); i++) { |
||||
CardSwitchButton cardSwitchButton = (CardSwitchButton) getTagLayout().getWidget(i); |
||||
cardSwitchButton.setInitIconName(initialIconNames.get(i)); |
||||
cardSwitchButton.setSelectIconName(selectIconNames.get(i)); |
||||
} |
||||
return downMenuStyle; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
public class DownMenuStylePreviewPane extends MobileTemplatePreviewPane { |
||||
private static final int ICON_OFFSET = 16; |
||||
private static final int GAP = 6; |
||||
private static final String PAINT_ICON = "fund_white"; |
||||
private LineDescription splitLine; |
||||
|
||||
public DownMenuStylePreviewPane() { |
||||
this.setBackground(Color.decode("#3888EE")); |
||||
} |
||||
|
||||
public void repaint() { |
||||
super.repaint(); |
||||
} |
||||
|
||||
@Override |
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Color selectFontColor = this.getTabFontConfig().getSelectColor(); |
||||
Dimension dimension = this.getSize(); |
||||
int panelWidth = dimension.width; |
||||
int panelHeight = dimension.height; |
||||
Graphics2D g2d = (Graphics2D) g.create(); |
||||
FRFont frFont = this.getTabFontConfig().getFont(); |
||||
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||
WCardTagLayout cardTagLayout = DownMenuStyleDefinePane.this.getTagLayout(); |
||||
int eachWidth = panelWidth / cardTagLayout.getWidgetCount(); |
||||
g2d.setFont(frFont); |
||||
int fontHeight = fm.getHeight(); |
||||
int ascent = fm.getAscent(); |
||||
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||
|
||||
g2d.setColor(i == 0 ? selectFontColor : frFont.getForeground()); |
||||
CardSwitchButton cardSwitchButton = cardTagLayout.getSwitchButton(i); |
||||
String widgetName = cardSwitchButton.getText(); |
||||
int width = fm.stringWidth(widgetName); |
||||
if(i == 0){ |
||||
Color oldColor = g2d.getColor(); |
||||
g2d.setColor(this.getSelectColor()); |
||||
g2d.fillRect(0, 0 ,eachWidth, panelHeight); |
||||
g2d.setColor(oldColor); |
||||
} |
||||
String iconName = PAINT_ICON; |
||||
g2d.drawImage(IconManager.getIconManager().getIconImage(iconName), (eachWidth - ICON_OFFSET) / 2, (panelHeight - ICON_OFFSET - GAP - fontHeight) / 2, null); |
||||
g2d.drawString(widgetName, (eachWidth - width) / 2, (panelHeight + ICON_OFFSET + GAP - fontHeight) / 2 + ascent); |
||||
Stroke oldStroke = g2d.getStroke(); |
||||
if (splitLine.getLineStyle() != 0) { |
||||
g2d.setColor(splitLine.getColor()); |
||||
g2d.setStroke(GraphHelper.getStroke(splitLine.getLineStyle())); |
||||
g2d.drawLine(eachWidth, 0, eachWidth, panelHeight); |
||||
} |
||||
g2d.setStroke(oldStroke); |
||||
g2d.translate(eachWidth, 0); |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
public void populateConfig(MobileTemplateStyle templateStyle) { |
||||
super.populateConfig(templateStyle); |
||||
this.splitLine = ((DownMenuStyle) templateStyle).getSplitLine(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,108 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.gui.icombobox.LineComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.layout.VerticalFlowLayout; |
||||
import com.fr.design.style.color.NewColorSelectBox; |
||||
import com.fr.general.cardtag.mobile.LineDescription; |
||||
import com.fr.stable.CoreConstants; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.event.EventListenerList; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
public class LinePane extends JPanel { |
||||
private LineComboBox lineStyle; |
||||
private NewColorSelectBox lineColor; |
||||
private EventListenerList lineChangeListener = new EventListenerList(); |
||||
|
||||
public LinePane() { |
||||
init(); |
||||
} |
||||
|
||||
private void init() { |
||||
this.setLayout(new VerticalFlowLayout(FlowLayout.CENTER, 0, 10)); |
||||
this.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||
UILabel lineLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style")); |
||||
UILabel colorLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Colors")); |
||||
lineLabel.setPreferredSize(new Dimension(55, 20)); |
||||
colorLabel.setPreferredSize(new Dimension(55, 20)); |
||||
|
||||
lineStyle = new LineComboBox(CoreConstants.UNDERLINE_STYLE_ARRAY); |
||||
lineStyle.setPreferredSize(new Dimension(152, 20)); |
||||
lineColor = new NewColorSelectBox(137); |
||||
lineStyle.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireLineStateChanged(); |
||||
} |
||||
}); |
||||
lineColor.addSelectChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
fireLineStateChanged(); |
||||
} |
||||
}); |
||||
this.add(TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{lineLabel, lineStyle}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM)); |
||||
this.add(TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{colorLabel, lineColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM)); |
||||
} |
||||
|
||||
public LineDescription update() { |
||||
LineDescription lineDescription = new LineDescription(); |
||||
lineDescription.setColor(lineColor.getSelectObject()); |
||||
lineDescription.setLineStyle(lineStyle.getSelectedLineStyle()); |
||||
return lineDescription; |
||||
} |
||||
|
||||
public void populate(LineDescription lineDescription) { |
||||
lineStyle.setSelectedLineStyle(lineDescription.getLineStyle()); |
||||
lineColor.setSelectObject(lineDescription.getColor()); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 添加监听 |
||||
* |
||||
* @param changeListener 监听列表 |
||||
*/ |
||||
public void addLineChangeListener(ChangeListener changeListener) { |
||||
lineChangeListener.add(ChangeListener.class, changeListener); |
||||
} |
||||
|
||||
/** |
||||
* 移除监听 |
||||
* Removes an old ColorChangeListener. |
||||
* |
||||
* @param changeListener 监听列表 |
||||
*/ |
||||
public void removeLineChangeListener(ChangeListener changeListener) { |
||||
lineChangeListener.remove(ChangeListener.class, changeListener); |
||||
} |
||||
|
||||
/** |
||||
* 颜色状态改变 |
||||
*/ |
||||
public void fireLineStateChanged() { |
||||
Object[] listeners = lineChangeListener.getListenerList(); |
||||
ChangeEvent e = null; |
||||
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||
if (listeners[i] == ChangeListener.class) { |
||||
if (e == null) { |
||||
e = new ChangeEvent(this); |
||||
} |
||||
((ChangeListener) listeners[i + 1]).stateChanged(e); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,218 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.dialog.AttrScrollPane; |
||||
import com.fr.design.dialog.BasicScrollPane; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.widget.MobileTabFontConfPane; |
||||
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||
import com.fr.design.style.color.NewColorSelectBox; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.TabFontConfig; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.border.TitledBorder; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.Font; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
public abstract class MobileTemplateStyleDefinePane extends BasicBeanPane<MobileTemplateStyle> { |
||||
private static final String[] TAB_STYLES = new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Default"), |
||||
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Custom")}; |
||||
private UIComboBox custom; |
||||
protected NewColorSelectBox initialColorBox; |
||||
protected MobileTabFontConfPane fontConfPane; |
||||
private JPanel centerPane; |
||||
protected MobileTemplatePreviewPane previewPane; |
||||
private WCardTagLayout tagLayout; |
||||
|
||||
|
||||
public MobileTemplatePreviewPane getPreviewPane() { |
||||
return previewPane; |
||||
} |
||||
|
||||
public MobileTemplateStyleDefinePane(WCardTagLayout tagLayout) { |
||||
this.tagLayout = tagLayout; |
||||
init(); |
||||
} |
||||
|
||||
|
||||
public WCardTagLayout getTagLayout() { |
||||
return tagLayout; |
||||
} |
||||
|
||||
protected void init() { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
previewPane = createPreviewPane(); |
||||
previewPane.setPreferredSize(new Dimension(500, 60)); |
||||
JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
TitledBorder titledBorder = GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"), null); |
||||
titledBorder.setTitleFont(FRFont.getInstance("PingFangSC-Regular", Font.PLAIN, 9, Color.BLUE)); |
||||
northPane.setBorder(titledBorder); |
||||
northPane.setPreferredSize(new Dimension(500, 83)); |
||||
northPane.add(previewPane, BorderLayout.CENTER); |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
createConfigPane(); |
||||
|
||||
} |
||||
|
||||
protected void createConfigPane() { |
||||
JPanel configPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
TitledBorder titledBorder = GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Set"), null); |
||||
titledBorder.setTitleFont(FRFont.getInstance("PingFangSC-Regular", Font.PLAIN, 9, Color.BLUE)); |
||||
configPane.setBorder(titledBorder); |
||||
centerPane = createCenterPane(); |
||||
custom = new UIComboBox(TAB_STYLES); |
||||
custom.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
boolean isCustom = custom.getSelectedIndex() == 1; |
||||
centerPane.setVisible(isCustom); |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
centerPane.setVisible(false); |
||||
custom.setPreferredSize(new Dimension(157, 20)); |
||||
final JPanel scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||
@Override |
||||
protected JPanel createContentPane() { |
||||
return scrollPanel; |
||||
} |
||||
}; |
||||
configPane.add(basicScrollPane, BorderLayout.CENTER); |
||||
this.add(configPane, BorderLayout.CENTER); |
||||
|
||||
JPanel outPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); |
||||
outPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 5, 20)); |
||||
UILabel tabStyleLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Style")); |
||||
tabStyleLabel.setPreferredSize(new Dimension(55, 20)); |
||||
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{tabStyleLabel, custom}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
jPanel.setPreferredSize(new Dimension(200, 20)); |
||||
outPanel.add(jPanel); |
||||
scrollPanel.add(outPanel, BorderLayout.NORTH); |
||||
|
||||
UITitleSplitLine backgroundSplit = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background"), 520); |
||||
backgroundSplit.setPreferredSize(new Dimension(520, 20)); |
||||
centerPane.add(backgroundSplit); |
||||
|
||||
centerPane.add(createBackgroundConfPane()); |
||||
|
||||
UITitleSplitLine fontSplit = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Char"), 520); |
||||
fontSplit.setPreferredSize(new Dimension(520, 20)); |
||||
centerPane.add(fontSplit); |
||||
|
||||
centerPane.add(createFontConfPane()); |
||||
|
||||
createExtraConfPane(centerPane); |
||||
|
||||
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||
initDefaultConfig(); |
||||
} |
||||
|
||||
protected JPanel createCenterPane() { |
||||
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||
return panel; |
||||
} |
||||
|
||||
protected JPanel createBackgroundConfPane() { |
||||
initialColorBox = new NewColorSelectBox(137); |
||||
initialColorBox.addSelectChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
UILabel fillLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill")); |
||||
fillLabel.setPreferredSize(new Dimension(55, 20)); |
||||
|
||||
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{fillLabel, initialColorBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
jPanel.setPreferredSize(new Dimension(240, 20)); |
||||
initialColorBox.setPreferredSize(new Dimension(157, 20)); |
||||
jPanel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||
return jPanel; |
||||
} |
||||
|
||||
protected JPanel createFontConfPane() { |
||||
fontConfPane = new MobileTabFontConfPane(); |
||||
fontConfPane.addFontChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
UILabel initCharLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Init_Char")); |
||||
initCharLabel.setPreferredSize(new Dimension(55, 20)); |
||||
JPanel jPanel3 = GUICoreUtils.createBoxFlowInnerContainerPane(5, 0); |
||||
jPanel3.add(initCharLabel); |
||||
jPanel3.add(fontConfPane); |
||||
jPanel3.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20)); |
||||
return jPanel3; |
||||
} |
||||
|
||||
|
||||
protected void createExtraConfPane(JPanel centerPane) { |
||||
|
||||
} |
||||
|
||||
protected abstract void initDefaultConfig(); |
||||
|
||||
protected abstract MobileTemplatePreviewPane createPreviewPane(); |
||||
|
||||
@Override |
||||
public void populateBean(MobileTemplateStyle ob) { |
||||
centerPane.setVisible(ob.isCustom()); |
||||
custom.setSelectedItem(!ob.isCustom() ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Default") : |
||||
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Custom")); |
||||
initialColorBox.setSelectObject(ob.getInitialColor()); |
||||
fontConfPane.populate(ob.getTabFontConfig().getFont()); |
||||
updatePreviewPane(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateBean() { |
||||
if (custom.getSelectedIndex() == 0) { |
||||
return getDefaultTemplateStyle(); |
||||
} |
||||
MobileTemplateStyle ob = updateSubStyle(); |
||||
ob.setCustom(custom.getSelectedIndex() == 1); |
||||
ob.setInitialColor(initialColorBox.getSelectObject()); |
||||
TabFontConfig config = ob.getTabFontConfig(); |
||||
config.setFont(fontConfPane.update()); |
||||
return ob; |
||||
} |
||||
|
||||
protected abstract MobileTemplateStyle getDefaultTemplateStyle(); |
||||
|
||||
public void updatePreviewPane() { |
||||
previewPane.populateConfig(updateBean()); |
||||
previewPane.setBackground(previewPane.getInitialColor()); |
||||
previewPane.repaint(); |
||||
} |
||||
|
||||
public abstract MobileTemplateStyle updateSubStyle(); |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
} |
@ -0,0 +1,165 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||
import com.fr.design.style.color.NewColorSelectBox; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.SliderStyle; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.FontMetrics; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
|
||||
public class SliderStyleDefinePane extends MobileTemplateStyleDefinePane { |
||||
private NewColorSelectBox initDotColor; |
||||
private NewColorSelectBox selectDotColor; |
||||
|
||||
|
||||
public SliderStyleDefinePane(WCardTagLayout tagLayout) { |
||||
super(tagLayout); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MobileTemplateStyle ob) { |
||||
super.populateBean(ob); |
||||
SliderStyle sliderStyle = (SliderStyle) ob; |
||||
initDotColor.setSelectObject(sliderStyle.getInitDotColor()); |
||||
selectDotColor.setSelectObject(sliderStyle.getSelectDotColor()); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||
return new SliderStyle(); |
||||
} |
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateSubStyle() { |
||||
SliderStyle sliderStyle = new SliderStyle(); |
||||
sliderStyle.setInitDotColor(initDotColor.getSelectObject()); |
||||
sliderStyle.setSelectDotColor(selectDotColor.getSelectObject()); |
||||
return sliderStyle; |
||||
} |
||||
|
||||
|
||||
protected void createExtraConfPane(JPanel centerPane) { |
||||
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||
UITitleSplitLine dotIndicator = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Slider_Dot_Indicator"), 520); |
||||
dotIndicator.setPreferredSize(new Dimension(520, 20)); |
||||
centerPane.add(dotIndicator); |
||||
initDotColor = new NewColorSelectBox(137); |
||||
initDotColor.addSelectChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
selectDotColor = new NewColorSelectBox(137); |
||||
selectDotColor.addSelectChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
UILabel initColor = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Init_Fill")); |
||||
|
||||
UILabel selectColor = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Select_Fill")); |
||||
initColor.setPreferredSize(new Dimension(55, 20)); |
||||
selectColor.setPreferredSize(new Dimension(55, 20)); |
||||
JPanel initDotColorPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initColor, initDotColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
JPanel selectDotColorPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectColor, selectDotColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
initDotColorPane.setPreferredSize(new Dimension(240, 20)); |
||||
selectDotColorPane.setPreferredSize(new Dimension(240, 20)); |
||||
panel.add(initDotColorPane); |
||||
panel.add(selectDotColorPane); |
||||
centerPane.add(panel); |
||||
} |
||||
|
||||
@Override |
||||
protected void initDefaultConfig() { |
||||
this.initialColorBox.setSelectObject(SliderStyle.DEFAULT_INITIAL_COLOR); |
||||
this.fontConfPane.populate(SliderStyle.DEFAULT_TAB_FONT.getFont()); |
||||
initDotColor.setSelectObject(SliderStyle.DEFAULT_INITIAL_DOT_COLOR); |
||||
selectDotColor.setSelectObject(SliderStyle.DEFAULT_SELECT_DOT_COLOR); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplatePreviewPane createPreviewPane() { |
||||
return new SliderStylePreviewPane(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
|
||||
public class SliderStylePreviewPane extends MobileTemplatePreviewPane { |
||||
private static final int CIRCLE_SIZE = 6; |
||||
private static final int GAP = 4; |
||||
private static final int OFFSET_X = 10; |
||||
private Color initDotColor; |
||||
private Color selectDotColor; |
||||
|
||||
public SliderStylePreviewPane() { |
||||
|
||||
} |
||||
|
||||
public void repaint() { |
||||
super.repaint(); |
||||
} |
||||
|
||||
@Override |
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Dimension dimension = this.getSize(); |
||||
int panelHeight = dimension.height; |
||||
Graphics2D g2d = (Graphics2D) g.create(); |
||||
FRFont frFont = this.getTabFontConfig().getFont(); |
||||
g2d.setFont(frFont); |
||||
g2d.setColor(frFont.getForeground()); |
||||
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||
int fontHeight = fm.getHeight(); |
||||
int ascent = fm.getAscent(); |
||||
g2d.drawString(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Slider_Title"), OFFSET_X, (panelHeight - fontHeight - GAP - CIRCLE_SIZE) / 2 + ascent); |
||||
WCardTagLayout cardTagLayout = SliderStyleDefinePane.this.getTagLayout(); |
||||
g2d.translate(OFFSET_X, (panelHeight + fontHeight + GAP - CIRCLE_SIZE) / 2); |
||||
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||
if (i == 0) { |
||||
g2d.setColor(selectDotColor); |
||||
g2d.fillOval(0, 0, CIRCLE_SIZE, CIRCLE_SIZE); |
||||
g2d.translate(CIRCLE_SIZE + GAP, 0); |
||||
continue; |
||||
} |
||||
g2d.setColor(initDotColor); |
||||
g2d.fillOval(0, 0, CIRCLE_SIZE, CIRCLE_SIZE); |
||||
g2d.translate(CIRCLE_SIZE + GAP, 0); |
||||
} |
||||
|
||||
} |
||||
|
||||
public void populateConfig(MobileTemplateStyle templateStyle) { |
||||
super.populateConfig(templateStyle); |
||||
this.initDotColor = ((SliderStyle) templateStyle).getInitDotColor(); |
||||
this.selectDotColor = ((SliderStyle) templateStyle).getSelectDotColor(); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,113 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.gui.ibutton.UIColorButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.widget.MobileTabFontConfPane; |
||||
import com.fr.design.style.color.NewColorSelectBox; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
|
||||
public abstract class StyleDefinePaneWithSelectConf extends MobileTemplateStyleDefinePane { |
||||
|
||||
protected NewColorSelectBox selectColorBox; |
||||
protected UIColorButton selectFontColor; |
||||
|
||||
public StyleDefinePaneWithSelectConf(WCardTagLayout tagLayout) { |
||||
super(tagLayout); |
||||
} |
||||
|
||||
protected JPanel createBackgroundConfPane() { |
||||
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||
initialColorBox = new NewColorSelectBox(137); |
||||
initialColorBox.addSelectChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
|
||||
selectColorBox = new NewColorSelectBox(137); |
||||
selectColorBox.addSelectChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
UILabel initFillLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Init_Fill")); |
||||
UILabel selectFillLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Select_Fill")); |
||||
initFillLabel.setPreferredSize(new Dimension(55, 20)); |
||||
selectFillLabel.setPreferredSize(new Dimension(55, 20)); |
||||
JPanel jPanel2 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initFillLabel, initialColorBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
JPanel jPanel3 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectFillLabel, selectColorBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
jPanel2.setPreferredSize(new Dimension(240, 20)); |
||||
jPanel3.setPreferredSize(new Dimension(240, 20)); |
||||
panel.add(jPanel2); |
||||
panel.add(jPanel3); |
||||
return panel; |
||||
} |
||||
|
||||
protected JPanel createFontConfPane() { |
||||
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||
fontConfPane = new MobileTabFontConfPane(); |
||||
fontConfPane.addFontChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
selectFontColor = new UIColorButton(); |
||||
selectFontColor.addColorChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
|
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
UILabel initCharLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Init_Char")); |
||||
initCharLabel.setPreferredSize(new Dimension(55, 20)); |
||||
JPanel jPanel3 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initCharLabel, fontConfPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
jPanel3.setPreferredSize(new Dimension(500, 20)); |
||||
|
||||
UILabel selectCharLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Select_Char")); |
||||
selectCharLabel.setPreferredSize(new Dimension(55, 20)); |
||||
selectFontColor.setPreferredSize(new Dimension(20, 20)); |
||||
JPanel jPanel4 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectCharLabel, selectFontColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
JPanel jPanel5 = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||
jPanel5.setPreferredSize(new Dimension(500, 20)); |
||||
jPanel5.add(jPanel4); |
||||
panel.add(jPanel3); |
||||
panel.add(jPanel5); |
||||
return panel; |
||||
} |
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateSubStyle() { |
||||
MobileTemplateStyle mobileTemplateStyle = updateStyleWithSelectConf(); |
||||
mobileTemplateStyle.setSelectColor(selectColorBox.getSelectObject()); |
||||
mobileTemplateStyle.getTabFontConfig().setSelectColor(selectFontColor.getColor()); |
||||
return mobileTemplateStyle; |
||||
} |
||||
|
||||
protected abstract MobileTemplateStyle updateStyleWithSelectConf(); |
||||
|
||||
@Override |
||||
public void populateBean(MobileTemplateStyle mobileTemplateStyle) { |
||||
super.populateBean(mobileTemplateStyle); |
||||
selectColorBox.setSelectObject(mobileTemplateStyle.getSelectColor()); |
||||
selectFontColor.setColor(mobileTemplateStyle.getTabFontConfig().getSelectColor()); |
||||
} |
||||
} |
@ -0,0 +1,172 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.base.IconManager; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.web.CustomIconPane; |
||||
import com.fr.form.ui.WidgetInfoConfig; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.Constants; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JComponent; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JToggleButton; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.plaf.basic.BasicButtonUI; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Cursor; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Image; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.geom.Rectangle2D; |
||||
import java.util.ArrayList; |
||||
|
||||
public class TabIconConfigPane extends JPanel { |
||||
private UIButton editIconButton; |
||||
private String curIconName; |
||||
private IconButton selectIconButton; |
||||
private ArrayList<IconButton> iconButtons = new ArrayList<IconButton>(); |
||||
|
||||
public TabIconConfigPane(int count) { |
||||
initComp(count); |
||||
} |
||||
|
||||
public void initComp(int count) { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
JPanel panel = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
||||
editIconButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Edit")); |
||||
editIconButton.setPreferredSize(new Dimension(62, 20)); |
||||
panel.add(editIconButton); |
||||
editIconButton.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent e) { |
||||
final CustomIconPane cip = new CustomIconPane(); |
||||
BasicDialog editDialog = cip.showWindow(DesignerContext.getDesignerFrame()); |
||||
editDialog.addDialogActionListener(new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
curIconName = cip.update(); |
||||
setShowIconImage(); |
||||
TabIconConfigPane.this.repaint(); |
||||
} |
||||
}); |
||||
editDialog.setVisible(true); |
||||
} |
||||
}); |
||||
editIconButton.setEnabled(false); |
||||
this.add(panel, BorderLayout.CENTER); |
||||
|
||||
JPanel northPane = new JPanel(); |
||||
northPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||
for (int i = 0; i < count; i++) { |
||||
IconButton iconButton = new IconButton(""); |
||||
northPane.add(iconButton); |
||||
iconButtons.add(iconButton); |
||||
} |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
} |
||||
|
||||
public void setShowIconImage() { |
||||
selectIconButton.setIconName(curIconName); |
||||
} |
||||
|
||||
public void populate(ArrayList<String> iconArr) { |
||||
for (int i = 0; i < iconButtons.size(); i++) { |
||||
iconButtons.get(i).setIconName(iconArr.get(i)); |
||||
} |
||||
} |
||||
|
||||
public ArrayList<String> update() { |
||||
ArrayList<String> iconNames = new ArrayList<String>(); |
||||
for (int i = 0; i < iconButtons.size(); i++) { |
||||
iconNames.add(iconButtons.get(i).getIconName()); |
||||
} |
||||
return iconNames; |
||||
} |
||||
|
||||
|
||||
private class IconButton extends JToggleButton implements ActionListener { |
||||
private String iconName; |
||||
private Image iconImage = null; |
||||
private static final int ICON_BUTTON_SIZE = 20; |
||||
private static final int ICON_X = 2; |
||||
private static final int ICON_Y = 2; |
||||
|
||||
public IconButton(String name) { |
||||
this.iconName = name; |
||||
this.addActionListener(this); |
||||
this.setBackground(Color.WHITE); |
||||
this.setCursor(new Cursor(Cursor.HAND_CURSOR)); |
||||
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(name); |
||||
} |
||||
|
||||
@Override |
||||
public void updateUI() { |
||||
setUI(new BasicButtonUI() { |
||||
public void paint(Graphics g, JComponent c) { |
||||
super.paint(g, c); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return iconName; |
||||
} |
||||
|
||||
public void setIconName(String iconName) { |
||||
this.iconName = iconName; |
||||
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(iconName); |
||||
} |
||||
|
||||
@Override |
||||
public void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
Graphics2D g2d = (Graphics2D) g; |
||||
// carl:这里缩放显示 16 × 16
|
||||
if (iconImage != null) { |
||||
g2d.drawImage(iconImage, ICON_X, ICON_Y, IconManager.DEFAULT_ICONWIDTH, IconManager.DEFAULT_ICONHEIGHT, null); |
||||
} |
||||
if (this.iconName != null && ComparatorUtils.equals(this, selectIconButton)) { |
||||
g2d.setPaint(Color.decode("#419BF9")); |
||||
} else { |
||||
g2d.setPaint(Color.decode("#D9DADD")); |
||||
} |
||||
GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, 20, 20), Constants.LINE_MEDIUM); |
||||
} |
||||
|
||||
@Override |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(ICON_BUTTON_SIZE, ICON_BUTTON_SIZE); |
||||
} |
||||
|
||||
public void actionPerformed(ActionEvent evt) { |
||||
selectIconButton = this; |
||||
editIconButton.setEnabled(true); |
||||
TabIconConfigPane.this.repaint();// repaint
|
||||
} |
||||
|
||||
@Override |
||||
public void addChangeListener(ChangeListener changeListener) { |
||||
this.changeListener = changeListener; |
||||
} |
||||
|
||||
private void fireChagneListener() { |
||||
if (this.changeListener != null) { |
||||
ChangeEvent evt = new ChangeEvent(this); |
||||
this.changeListener.stateChanged(evt); |
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,55 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.cardtag.mobile.DefaultMobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.DownMenuStyle; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.SliderStyle; |
||||
import com.fr.general.cardtag.mobile.UpMenuStyle; |
||||
import com.fr.invoke.Reflect; |
||||
import com.fr.log.FineLoggerFactory; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
public class TemplateStyleDefinePaneFactory { |
||||
private static Map<String, StyleDefinePaneUI> defineMap = new HashMap<String, StyleDefinePaneUI>(); |
||||
|
||||
static { |
||||
defineMap.put(DefaultMobileTemplateStyle.STYLE_NAME, new StyleDefinePaneUI(DefaultMobileStyleDefinePane.class)); |
||||
defineMap.put(UpMenuStyle.STYLE_NAME, new StyleDefinePaneUI(UpMenuStyleDefinePane.class)); |
||||
defineMap.put(DownMenuStyle.STYLE_NAME, new StyleDefinePaneUI(DownMenuStyleDefinePane.class)); |
||||
defineMap.put(SliderStyle.STYLE_NAME, new StyleDefinePaneUI(SliderStyleDefinePane.class)); |
||||
} |
||||
|
||||
public static BasicBeanPane<MobileTemplateStyle> createDefinePane(String style, WCardTagLayout tagLayout) { |
||||
StyleDefinePaneUI styleDefinePaneUI = defineMap.get(style); |
||||
Class<? extends BasicBeanPane<MobileTemplateStyle>> clazz = styleDefinePaneUI.getaClass(); |
||||
if (clazz == null) { |
||||
} |
||||
BasicBeanPane<MobileTemplateStyle> quickPane = null; |
||||
try { |
||||
quickPane = Reflect.on(clazz).create(tagLayout).get(); |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return quickPane; |
||||
} |
||||
|
||||
private static class StyleDefinePaneUI { |
||||
private Class<? extends BasicBeanPane<MobileTemplateStyle>> aClass; |
||||
|
||||
public StyleDefinePaneUI(Class<? extends BasicBeanPane<MobileTemplateStyle>> aClass) { |
||||
this.aClass = aClass; |
||||
} |
||||
|
||||
public Class<? extends BasicBeanPane<MobileTemplateStyle>> getaClass() { |
||||
return aClass; |
||||
} |
||||
|
||||
public void setaClass(Class<? extends BasicBeanPane<MobileTemplateStyle>> aClass) { |
||||
this.aClass = aClass; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,222 @@
|
||||
package com.fr.design.mainframe.mobile.ui; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.gui.ibutton.UIRadioButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||
import com.fr.form.ui.CardSwitchButton; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.cardtag.mobile.LineDescription; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.UpMenuStyle; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.ButtonGroup; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.FontMetrics; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Stroke; |
||||
|
||||
public class UpMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { |
||||
private UIRadioButton gapFix; |
||||
private UIRadioButton titleWidthFix; |
||||
private LinePane bottomBorderPane; |
||||
private LinePane underLinePane; |
||||
|
||||
public UpMenuStyleDefinePane(WCardTagLayout tagLayout) { |
||||
super(tagLayout); |
||||
} |
||||
|
||||
protected JPanel createCenterPane() { |
||||
JPanel panel = super.createCenterPane(); |
||||
UILabel displayGap = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Display_Gap")); |
||||
displayGap.setPreferredSize(new Dimension(55, 20)); |
||||
gapFix = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Gap_Fix")); |
||||
titleWidthFix = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Title_Width_Fix")); |
||||
ButtonGroup buttonGroup = new ButtonGroup(); |
||||
titleWidthFix.setSelected(true); |
||||
buttonGroup.add(gapFix); |
||||
gapFix.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||
titleWidthFix.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||
buttonGroup.add(titleWidthFix); |
||||
gapFix.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
titleWidthFix.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
|
||||
|
||||
JPanel flowLeft = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); |
||||
flowLeft.add(gapFix); |
||||
flowLeft.add(titleWidthFix); |
||||
JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{displayGap, flowLeft}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
centerPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 15, 20)); |
||||
centerPane.setPreferredSize(new Dimension(500, 20)); |
||||
JPanel outerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
outerPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 15, 0)); |
||||
outerPane.add(centerPane, BorderLayout.CENTER); |
||||
panel.add(outerPane); |
||||
return panel; |
||||
} |
||||
|
||||
protected void createExtraConfPane(JPanel centerPane) { |
||||
bottomBorderPane = new LinePane(); |
||||
underLinePane = new LinePane(); |
||||
bottomBorderPane.addLineChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
underLinePane.addLineChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
updatePreviewPane(); |
||||
} |
||||
}); |
||||
UITitleSplitLine titleSplitLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Spit_Line"), 520); |
||||
titleSplitLine.setPreferredSize(new Dimension(520, 20)); |
||||
centerPane.add(titleSplitLine); |
||||
centerPane.add(bottomBorderPane); |
||||
UITitleSplitLine titleUnderLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Under_Line"), 520); |
||||
titleUnderLine.setPreferredSize(new Dimension(520, 20)); |
||||
centerPane.add(titleUnderLine); |
||||
centerPane.add(underLinePane); |
||||
} |
||||
|
||||
@Override |
||||
protected void initDefaultConfig() { |
||||
this.initialColorBox.setSelectObject(UpMenuStyle.DEFAULT_INITIAL_COLOR); |
||||
this.fontConfPane.populate(UpMenuStyle.DEFAULT_TAB_FONT.getFont()); |
||||
this.selectColorBox.setSelectObject(UpMenuStyle.DEFAULT_SELECT_COLOR); |
||||
this.selectFontColor.setColor(UpMenuStyle.DEFAULT_SELECT_FONT_COLOR); |
||||
this.bottomBorderPane.populate(UpMenuStyle.DEFAULT_BOTTOM_BORDER); |
||||
this.underLinePane.populate(UpMenuStyle.DEFAULT_UNDER_LINE); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplatePreviewPane createPreviewPane() { |
||||
return new UpMenuStylePreviewPane(); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MobileTemplateStyle ob) { |
||||
super.populateBean(ob); |
||||
UpMenuStyle style = (UpMenuStyle) ob; |
||||
gapFix.setSelected(style.isGapFix()); |
||||
titleWidthFix.setSelected(style.isTitleWidthFix()); |
||||
bottomBorderPane.populate(style.getBottomBorder()); |
||||
underLinePane.populate(style.getUnderline()); |
||||
} |
||||
|
||||
@Override |
||||
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||
return new UpMenuStyle(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public MobileTemplateStyle updateStyleWithSelectConf() { |
||||
UpMenuStyle style = new UpMenuStyle(); |
||||
style.setGapFix(gapFix.isSelected()); |
||||
style.setTitleWidthFix(titleWidthFix.isSelected()); |
||||
style.setBottomBorder(bottomBorderPane.update()); |
||||
style.setUnderline(underLinePane.update()); |
||||
return style; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
|
||||
public class UpMenuStylePreviewPane extends MobileTemplatePreviewPane { |
||||
private LineDescription bottomBorder; |
||||
private LineDescription underLine; |
||||
private boolean isGapFix; |
||||
|
||||
public UpMenuStylePreviewPane() { |
||||
this.setBackground(Color.WHITE); |
||||
} |
||||
|
||||
public void repaint() { |
||||
super.repaint(); |
||||
} |
||||
|
||||
@Override |
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Color selectFontColor = this.getTabFontConfig().getSelectColor(); |
||||
Dimension dimension = this.getSize(); |
||||
int panelWidth = dimension.width; |
||||
int panelHeight = dimension.height; |
||||
Graphics2D g2d = (Graphics2D) g.create(); |
||||
FRFont frFont = UpMenuStyleDefinePane.this.fontConfPane.update(); |
||||
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||
WCardTagLayout cardTagLayout = UpMenuStyleDefinePane.this.getTagLayout(); |
||||
int eachWidth = panelWidth / cardTagLayout.getWidgetCount(); |
||||
g2d.setFont(frFont); |
||||
int fontHeight = fm.getHeight(); |
||||
int ascentHeight = fm.getAscent(); |
||||
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||
g2d.setColor(i == 0 ? selectFontColor : frFont.getForeground()); |
||||
CardSwitchButton cardSwitchButton = cardTagLayout.getSwitchButton(i); |
||||
String widgetName = cardSwitchButton.getText(); |
||||
int width = fm.stringWidth(widgetName); |
||||
if(i == 0){ |
||||
Color oldColor = g2d.getColor(); |
||||
g2d.setColor(this.getSelectColor()); |
||||
g2d.fillRect(0, 0 ,eachWidth, panelHeight); |
||||
g2d.setColor(oldColor); |
||||
} |
||||
g2d.drawString(widgetName, (eachWidth - width) / 2, (panelHeight - fontHeight) / 2 + ascentHeight); |
||||
Stroke oldStroke = g2d.getStroke(); |
||||
if (i == 0) { |
||||
g2d.setColor(this.underLine.getColor()); |
||||
g2d.setStroke(GraphHelper.getStroke(underLine.getLineStyle())); |
||||
int underLineX = this.isGapFix ? (eachWidth - width) / 2 : 0; |
||||
int underLineWidth = this.isGapFix ? width : eachWidth; |
||||
g2d.drawLine(underLineX, panelHeight - 1, underLineX + underLineWidth, panelHeight - 1); |
||||
} |
||||
if (bottomBorder.getLineStyle() != 0) { |
||||
g2d.setColor(bottomBorder.getColor()); |
||||
g2d.setStroke(GraphHelper.getStroke(bottomBorder.getLineStyle())); |
||||
g2d.drawLine(eachWidth, 0, eachWidth, panelHeight); |
||||
} |
||||
g2d.setStroke(oldStroke); |
||||
g2d.translate(eachWidth, 0); |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
public void populateConfig(MobileTemplateStyle templateStyle) { |
||||
super.populateConfig(templateStyle); |
||||
this.bottomBorder = ((UpMenuStyle) templateStyle).getBottomBorder(); |
||||
this.underLine = ((UpMenuStyle) templateStyle).getUnderline(); |
||||
this.isGapFix = ((UpMenuStyle) templateStyle).isGapFix(); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,144 @@
|
||||
package com.fr.design.mainframe.widget; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Utils; |
||||
import com.fr.design.gui.ibutton.UIColorButton; |
||||
import com.fr.design.gui.ibutton.UIToggleButton; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.general.FRFont; |
||||
|
||||
import javax.swing.Icon; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.event.EventListenerList; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.Font; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.Vector; |
||||
|
||||
public class MobileTabFontConfPane extends JPanel { |
||||
private static final Icon[] ITALIC_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic_white.png")}; |
||||
private static final Icon[] BOLD_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold_white.png")}; |
||||
|
||||
private EventListenerList fontChangeListener = new EventListenerList(); |
||||
private UIComboBox fontFamily; |
||||
private UIComboBox fontSize; |
||||
private UIToggleButton bold; |
||||
private UIColorButton color; |
||||
private UIToggleButton italic; |
||||
|
||||
|
||||
public MobileTabFontConfPane() { |
||||
super(); |
||||
init(); |
||||
} |
||||
|
||||
private void init() { |
||||
this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||
fontFamily = new UIComboBox(Utils.getAvailableFontFamilyNames4Report()); |
||||
Vector<Integer> integerList = new Vector<Integer>(); |
||||
for (int i = 1; i < 100; i++) { |
||||
integerList.add(i); |
||||
} |
||||
fontFamily.setPreferredSize(new Dimension(152, 20)); |
||||
fontSize = new UIComboBox(integerList); |
||||
color = new UIColorButton(); |
||||
bold = new UIToggleButton(BOLD_ICONS, true); |
||||
italic = new UIToggleButton(ITALIC_ICONS, true); |
||||
fontFamily.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireFontStateChanged(); |
||||
} |
||||
}); |
||||
fontSize.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireFontStateChanged(); |
||||
} |
||||
}); |
||||
bold.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
fireFontStateChanged(); |
||||
} |
||||
}); |
||||
italic.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
fireFontStateChanged(); |
||||
} |
||||
}); |
||||
color.addColorChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
fireFontStateChanged(); |
||||
} |
||||
}); |
||||
this.add(fontFamily); |
||||
this.add(fontSize); |
||||
this.add(color); |
||||
this.add(bold); |
||||
this.add(italic); |
||||
|
||||
} |
||||
|
||||
public FRFont update() { |
||||
String family = (String) fontFamily.getSelectedItem(); |
||||
int size = (int) fontSize.getSelectedItem(); |
||||
int style = Font.PLAIN; |
||||
style += this.bold.isSelected() ? Font.BOLD : Font.PLAIN; |
||||
style += this.italic.isSelected() ? Font.ITALIC : Font.PLAIN; |
||||
FRFont frFont = FRFont.getInstance(family, style, size, color.getColor()); |
||||
return frFont; |
||||
} |
||||
|
||||
public void populate(FRFont frFont) { |
||||
fontFamily.setSelectedItem(frFont.getFamily()); |
||||
fontSize.setSelectedItem(frFont.getSize()); |
||||
color.setColor(frFont.getForeground()); |
||||
bold.setSelected(frFont.isBold()); |
||||
italic.setSelected(frFont.isItalic()); |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 添加监听 |
||||
* |
||||
* @param changeListener 监听列表 |
||||
*/ |
||||
public void addFontChangeListener(ChangeListener changeListener) { |
||||
fontChangeListener.add(ChangeListener.class, changeListener); |
||||
} |
||||
|
||||
/** |
||||
* 移除监听 |
||||
* Removes an old ColorChangeListener. |
||||
* |
||||
* @param changeListener 监听列表 |
||||
*/ |
||||
public void removeFontChangeListener(ChangeListener changeListener) { |
||||
fontChangeListener.remove(ChangeListener.class, changeListener); |
||||
} |
||||
|
||||
/** |
||||
* 颜色状态改变 |
||||
*/ |
||||
public void fireFontStateChanged() { |
||||
Object[] listeners = fontChangeListener.getListenerList(); |
||||
ChangeEvent e = null; |
||||
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||
if (listeners[i] == ChangeListener.class) { |
||||
if (e == null) { |
||||
e = new ChangeEvent(this); |
||||
} |
||||
((ChangeListener) listeners[i + 1]).stateChanged(e); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
package com.fr.design.mainframe.widget; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.general.FRFont; |
||||
import javax.swing.JPanel; |
||||
import java.awt.Color; |
||||
import java.awt.Dimension; |
||||
import java.awt.Graphics; |
||||
|
||||
public class UITitleSplitLine extends JPanel { |
||||
private static final Color LINE_COLOR = Color.decode("#E0E0E1"); |
||||
private static final Color TITLE_COLOR = Color.decode("#333334"); |
||||
private static final FRFont TITLE_FONT = FRFont.getInstance("PingFangSC-Regular", 0, 12.0F); |
||||
private static final int OFFSETX = 10; |
||||
private static final int OFFSET = 3; |
||||
private Color color; |
||||
private UILabel label; |
||||
private int width; |
||||
|
||||
|
||||
|
||||
public UITitleSplitLine(String title, int width) { |
||||
this(title, LINE_COLOR, width); |
||||
} |
||||
|
||||
public UITitleSplitLine(String title, Color color, int width) { |
||||
super(); |
||||
this.color = color; |
||||
this.width = width; |
||||
this.label = new UILabel(title); |
||||
} |
||||
|
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Dimension size = label.getPreferredSize(); |
||||
int labelH = size.height; |
||||
g.setColor(color); |
||||
g.drawLine(0, labelH / 2, OFFSETX, labelH / 2); |
||||
g.drawLine(OFFSETX + size.width + OFFSET * 2, labelH / 2, width, labelH / 2); |
||||
g.translate(OFFSETX + OFFSET, 0); |
||||
label.setFont(TITLE_FONT); |
||||
label.setForeground(TITLE_COLOR); |
||||
label.setSize(size.width, size.height); |
||||
label.paint(g); |
||||
g.translate(-OFFSETX - OFFSET, 0); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,10 @@
|
||||
package com.fr.design.mainframe.widget.accessibles; |
||||
|
||||
import com.fr.design.dialog.BasicPane; |
||||
|
||||
public abstract class AbstractTemplateStylePane<T> extends BasicPane { |
||||
|
||||
public abstract void populate(T ob); |
||||
|
||||
public abstract T update(); |
||||
} |
@ -0,0 +1,112 @@
|
||||
package com.fr.design.mainframe.widget.accessibles; |
||||
|
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.mobile.ui.TemplateStyleDefinePaneFactory; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyleType; |
||||
import javax.swing.DefaultListCellRenderer; |
||||
import javax.swing.DefaultListModel; |
||||
import javax.swing.JList; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.ListCellRenderer; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.CardLayout; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public class MobileTemplateStylePane extends AbstractTemplateStylePane<MobileTemplateStyle> { |
||||
private static final List<MobileTemplateStyleType> STYLE_LIST = new ArrayList<MobileTemplateStyleType>(); |
||||
static { |
||||
STYLE_LIST.add(MobileTemplateStyleType.DEFAULT_STYLE); |
||||
STYLE_LIST.add(MobileTemplateStyleType.UP_MENU_STYLE); |
||||
STYLE_LIST.add(MobileTemplateStyleType.DOWN_MENU_STYLE); |
||||
STYLE_LIST.add(MobileTemplateStyleType.SLIDER_STYLE); |
||||
} |
||||
|
||||
private DefaultListModel listModel; |
||||
private JList styleList; |
||||
private Map<String, BasicBeanPane<MobileTemplateStyle>> map = new HashMap<>(); |
||||
private JPanel right; |
||||
private CardLayout card; |
||||
public MobileTemplateStylePane(WCardTagLayout tagLayout){ |
||||
init(tagLayout); |
||||
} |
||||
|
||||
public void init(WCardTagLayout tagLayout){ |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
listModel = new DefaultListModel(); |
||||
card = new CardLayout(); |
||||
right = FRGUIPaneFactory.createCardLayout_S_Pane(); |
||||
right.setLayout(card); |
||||
for(MobileTemplateStyleType style : STYLE_LIST){ |
||||
listModel.addElement(style.getDisplayName()); |
||||
BasicBeanPane<MobileTemplateStyle> styleBasicBeanPane = TemplateStyleDefinePaneFactory.createDefinePane(style.getStyle(), tagLayout); |
||||
map.put(style.getDisplayName(), styleBasicBeanPane); |
||||
right.add(style.getDisplayName(), styleBasicBeanPane); |
||||
} |
||||
styleList = new JList(listModel); |
||||
styleList.setCellRenderer(render); |
||||
|
||||
JPanel westPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
westPane.add(styleList, BorderLayout.CENTER); |
||||
westPane.setPreferredSize(new Dimension(100, 500)); |
||||
|
||||
|
||||
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
JPanel attrConfPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
centerPane.setPreferredSize(new Dimension(500, 500)); |
||||
attrConfPane.add(right, BorderLayout.CENTER); |
||||
centerPane.add(attrConfPane, BorderLayout.CENTER); |
||||
styleList.addMouseListener(new MouseAdapter() { |
||||
public void mouseClicked(MouseEvent e) { |
||||
String selectedValue = (String)styleList.getSelectedValue(); |
||||
card.show(right, selectedValue); |
||||
} |
||||
}); |
||||
this.add(westPane, BorderLayout.WEST); |
||||
this.add(centerPane, BorderLayout.CENTER); |
||||
} |
||||
public static ListCellRenderer render = new DefaultListCellRenderer() { |
||||
@Override |
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||
|
||||
if (value instanceof MobileTemplateStyle) { |
||||
MobileTemplateStyle l = (MobileTemplateStyle) value; |
||||
this.setText(l.toString()); |
||||
} |
||||
return this; |
||||
} |
||||
}; |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tab_Style_Template"); |
||||
} |
||||
|
||||
public void populate(MobileTemplateStyle templateStyle) { |
||||
for(int i = 0; i< listModel.getSize(); i++){ |
||||
String style = templateStyle.getStyle(); |
||||
MobileTemplateStyleType templateStyleType = MobileTemplateStyleType.parse(style); |
||||
if((listModel.getElementAt(i)).equals(templateStyleType.getDisplayName())){ |
||||
styleList.setSelectedIndex(i); |
||||
map.get(templateStyle.toString()).populateBean(templateStyle); |
||||
card.show(right, templateStyle.toString()); |
||||
return; |
||||
} |
||||
} |
||||
styleList.setSelectedIndex(0); |
||||
} |
||||
|
||||
public MobileTemplateStyle update() { |
||||
return map.get(styleList.getSelectedValue()).updateBean(); |
||||
} |
||||
} |
@ -0,0 +1,53 @@
|
||||
package com.fr.design.mainframe.widget.preview; |
||||
|
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
import com.fr.general.cardtag.mobile.TabFontConfig; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.awt.Color; |
||||
|
||||
public abstract class MobileTemplatePreviewPane extends JPanel { |
||||
private Color initialColor; |
||||
private Color selectColor; |
||||
private TabFontConfig tabFontConfig = new TabFontConfig(); |
||||
|
||||
public Color getInitialColor() { |
||||
return initialColor; |
||||
} |
||||
|
||||
public void setInitialColor(Color initialColor) { |
||||
this.initialColor = initialColor; |
||||
} |
||||
|
||||
public Color getSelectColor() { |
||||
return selectColor; |
||||
} |
||||
|
||||
public void setSelectColor(Color selectColor) { |
||||
this.selectColor = selectColor; |
||||
} |
||||
|
||||
public TabFontConfig getTabFontConfig() { |
||||
return tabFontConfig; |
||||
} |
||||
|
||||
public void setTabFontConfig(TabFontConfig tabFontConfig) { |
||||
this.tabFontConfig = tabFontConfig; |
||||
} |
||||
|
||||
public MobileTemplatePreviewPane(){ |
||||
|
||||
} |
||||
|
||||
public void populateConfig(MobileTemplateStyle templateStyle){ |
||||
this.setInitialColor(templateStyle.getInitialColor()); |
||||
this.setBackground(templateStyle.getInitialColor()); |
||||
this.setSelectColor(templateStyle.getSelectColor()); |
||||
this.setTabFontConfig(templateStyle.getTabFontConfig()); |
||||
} |
||||
|
||||
public void repaint (){ |
||||
super.repaint(); |
||||
} |
||||
|
||||
} |
@ -1,4 +1,4 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
package com.fr.design.actions; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.iofile.attr.MobileOnlyTemplateAttrMark; |
@ -1,4 +1,4 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
package com.fr.design.actions; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.actions.UpdateAction; |
@ -1,4 +1,4 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
package com.fr.design.actions; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Parameter; |
@ -0,0 +1,77 @@
|
||||
package com.fr.design.actions.file.export; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.base.extension.FileExtension; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.JForm; |
||||
import com.fr.design.menu.KeySetUtils; |
||||
import com.fr.design.parameter.ParameterInputPane; |
||||
import com.fr.file.filter.ChooseFileFilter; |
||||
import com.fr.form.main.Form; |
||||
import com.fr.io.exporter.DesignExportScope; |
||||
import com.fr.io.exporter.DesignExportType; |
||||
import com.fr.io.exporter.ExporterKey; |
||||
import com.fr.stable.ArrayUtils; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* Export Embedded. |
||||
*/ |
||||
public class EmbeddedFormExportExportAction extends AbstractExportAction<JForm> { |
||||
|
||||
|
||||
public EmbeddedFormExportExportAction(JForm jwb) { |
||||
super(jwb); |
||||
this.setMenuKeySet(KeySetUtils.EMBEDDED_EXPORT); |
||||
this.setName(getMenuKeySet().getMenuKeySetName() + "..."); |
||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/oem/logo.png")); |
||||
} |
||||
|
||||
@Override |
||||
public ExporterKey exportKey() { |
||||
return DesignExportScope.FINE_FORM; |
||||
} |
||||
|
||||
@Override |
||||
protected String getDefaultExtension() { |
||||
return getEditingComponent().suffix().substring(1); |
||||
} |
||||
|
||||
@Override |
||||
public DesignExportType exportType() { |
||||
return DesignExportType.EMBEDDED_FORM; |
||||
} |
||||
|
||||
@Override |
||||
protected Map<String, Object> processParameter() { |
||||
// 输入参数
|
||||
final Map<String, Object> parameterMap = new HashMap<String, Object>(); |
||||
Form tpl = this.getEditingComponent().getTarget(); |
||||
|
||||
Parameter[] parameters = tpl.getParameters(); |
||||
// 检查Parameter.
|
||||
if (ArrayUtils.isNotEmpty(parameters)) { |
||||
final ParameterInputPane pPane = new ParameterInputPane(parameters); |
||||
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
parameterMap.putAll(pPane.update()); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
return parameterMap; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected ChooseFileFilter getChooseFileFilter() { |
||||
return new ChooseFileFilter(FileExtension.FRM.getExtensions(), Toolkit.i18nText("Fine-Design_Form_EmbeddedTD")); |
||||
} |
||||
} |
@ -0,0 +1,30 @@
|
||||
package com.fr.design.designer.properties.mobile; |
||||
|
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; |
||||
import com.fr.design.gui.itable.AbstractPropertyTable; |
||||
import com.fr.design.widget.ui.designer.mobile.TabMobileWidgetDefinePane; |
||||
|
||||
public class TabMobilePropertyUI extends AbstractWidgetPropertyUIProvider { |
||||
private XCreator xCreator; |
||||
|
||||
public TabMobilePropertyUI(XCreator xCreator){ |
||||
this.xCreator = xCreator; |
||||
} |
||||
|
||||
@Override |
||||
public AbstractPropertyTable createWidgetAttrTable() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public BasicPane createWidgetAttrPane() { |
||||
return new TabMobileWidgetDefinePane(xCreator); |
||||
} |
||||
|
||||
@Override |
||||
public String tableTitle() { |
||||
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Mobile_Attr"); |
||||
} |
||||
} |
@ -1,155 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.design.actions.JTemplateAction; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.iprogressbar.FRProgressBar; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.DesignerFrame; |
||||
import com.fr.design.mainframe.JForm; |
||||
import com.fr.design.mainframe.JTemplate; |
||||
import com.fr.design.menu.KeySetUtils; |
||||
import com.fr.design.parameter.ParameterInputPane; |
||||
import com.fr.file.FILE; |
||||
import com.fr.file.FILEChooserPane; |
||||
import com.fr.file.filter.ChooseFileFilter; |
||||
import com.fr.form.main.Form; |
||||
import com.fr.form.main.FormEmbeddedTableDataExporter; |
||||
import com.fr.log.FineLoggerFactory; |
||||
|
||||
import com.fr.stable.ArrayUtils; |
||||
import com.fr.stable.project.ProjectConstants; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.io.FileOutputStream; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* Export Embedded. |
||||
*/ |
||||
public class EmbeddedFormExportExportAction extends JTemplateAction<JForm>{ |
||||
|
||||
private FRProgressBar progressbar; |
||||
/** |
||||
* Constructor |
||||
*/ |
||||
public EmbeddedFormExportExportAction(JForm jwb) { |
||||
super(jwb); |
||||
this.setMenuKeySet(KeySetUtils.EMBEDDED_EXPORT); |
||||
this.setName(getMenuKeySet().getMenuKeySetName() + "..."); |
||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/oem/logo.png")); |
||||
} |
||||
|
||||
/** |
||||
* Action触发事件 |
||||
* |
||||
* @param e 触发事件 |
||||
* |
||||
*/ |
||||
public void actionPerformed(ActionEvent e) { |
||||
JTemplate jwb = this.getEditingComponent(); |
||||
FILE editingFILE = jwb.getEditingFILE(); |
||||
DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); |
||||
|
||||
final Map<String, Object> parameterMap = new HashMap<String, Object>(); |
||||
final Form tpl = this.getEditingComponent().getTarget(); |
||||
inputParameter(parameterMap, tpl, designerFrame); |
||||
|
||||
FILEChooserPane fileChooserPane = FILEChooserPane.getInstance(false, true); |
||||
fileChooserPane.setFILEFilter(this.getChooseFileFilter()); |
||||
|
||||
String filenName = editingFILE.getName(); |
||||
fileChooserPane.setFileNameTextField(filenName, ProjectConstants.FRM_SUFFIX); |
||||
int saveValue = fileChooserPane.showSaveDialog(designerFrame, ProjectConstants.FRM_SUFFIX); |
||||
if (isCancel(saveValue)) { |
||||
fileChooserPane = null; |
||||
return; |
||||
} |
||||
|
||||
if (isOk(saveValue)) { |
||||
startExport(parameterMap, tpl, designerFrame, fileChooserPane); |
||||
} |
||||
} |
||||
|
||||
private void startExport(Map<String, Object> parameterMap, Form tpl, DesignerFrame designerFrame, |
||||
FILEChooserPane fileChooserPane){ |
||||
FILE file = fileChooserPane.getSelectedFILE(); |
||||
try { |
||||
file.mkfile(); |
||||
} catch (Exception e1) { |
||||
FineLoggerFactory.getLogger().error("Error In Make New File"); |
||||
} |
||||
fileChooserPane = null; |
||||
FRContext.getLogger().info("\"" + file.getName() + "\"" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Prepare_Export") + "!"); |
||||
|
||||
(progressbar = new FRProgressBar(createExportWork(file, tpl, parameterMap), designerFrame, |
||||
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exporting"), "", 0, 100)).start(); |
||||
} |
||||
|
||||
private boolean isOk(int saveValue){ |
||||
return saveValue == FILEChooserPane.JOPTIONPANE_OK_OPTION || saveValue == FILEChooserPane.OK_OPTION; |
||||
} |
||||
|
||||
private boolean isCancel(int saveValue){ |
||||
return saveValue == FILEChooserPane.CANCEL_OPTION || saveValue == FILEChooserPane.JOPTIONPANE_CANCEL_OPTION; |
||||
} |
||||
|
||||
private void inputParameter(final Map<String, Object> parameterMap, final Form tpl, DesignerFrame designerFrame){ |
||||
Parameter[] parameters = tpl.getParameters(); |
||||
if (ArrayUtils.isNotEmpty(parameters)) {// 检查Parameter.
|
||||
final ParameterInputPane pPane = new ParameterInputPane(parameters); |
||||
pPane.showSmallWindow(designerFrame, new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
parameterMap.putAll(pPane.update()); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
} |
||||
|
||||
protected ChooseFileFilter getChooseFileFilter() { |
||||
return new ChooseFileFilter(new String[]{"frm"}, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_EmbeddedTD")); |
||||
} |
||||
|
||||
private SwingWorker createExportWork(FILE file, final Form tpl, final Map parameterMap) { |
||||
final String filePath = file.getPath(); |
||||
final String fileGetName = file.getName(); |
||||
|
||||
SwingWorker exportWorker = new SwingWorker<Void, Void>() { |
||||
protected Void doInBackground() throws Exception { |
||||
Thread.sleep(100); |
||||
try { |
||||
final FileOutputStream fileOutputStream = new FileOutputStream(filePath); |
||||
|
||||
this.setProgress(10); |
||||
FormEmbeddedTableDataExporter exporter = new FormEmbeddedTableDataExporter(); |
||||
exporter.export(fileOutputStream, tpl, parameterMap); |
||||
this.setProgress(80); |
||||
fileOutputStream.close(); |
||||
this.setProgress(100); |
||||
|
||||
FRContext.getLogger().info("\"" + fileGetName + "\"" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Finish_Export") + "!"); |
||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), |
||||
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exported_Successfully") + "\n" + fileGetName); |
||||
} catch (Exception exp) { |
||||
this.setProgress(100); |
||||
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Failed") + "\n" + filePath); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public void done() { |
||||
progressbar.close(); |
||||
} |
||||
}; |
||||
return exportWorker; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,69 @@
|
||||
package com.fr.design.widget.ui.designer.mobile; |
||||
|
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.FormDesigner; |
||||
import com.fr.design.mainframe.widget.accessibles.AccessibleTemplateStyleEditor; |
||||
import com.fr.design.mainframe.widget.accessibles.MobileTemplateStylePane; |
||||
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
|
||||
public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { |
||||
private XCreator xCreator; |
||||
private AccessibleTemplateStyleEditor templateStyleEditor; |
||||
private AttributeChangeListener changeListener; |
||||
|
||||
public TabMobileWidgetDefinePane(XCreator xCreator) { |
||||
this.xCreator = xCreator; |
||||
} |
||||
|
||||
private void bindListeners2Widgets() { |
||||
reInitAllListeners(); |
||||
this.changeListener = new AttributeChangeListener() { |
||||
@Override |
||||
public void attributeChange() { |
||||
update(); |
||||
} |
||||
}; |
||||
} |
||||
/** |
||||
* 后台初始化所有事件. |
||||
*/ |
||||
private void reInitAllListeners() { |
||||
initListener(this); |
||||
} |
||||
|
||||
@Override |
||||
public void initPropertyGroups(Object source) { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tab_Style_Template")); |
||||
templateStyleEditor = new AccessibleTemplateStyleEditor(new MobileTemplateStylePane((WCardTagLayout) xCreator.toData())); |
||||
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{label, templateStyleEditor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||
this.add(jPanel, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
public void populate(FormDesigner designer) { |
||||
templateStyleEditor.setValue(((WCardTagLayout)xCreator.toData()).getMobileTemplateStyle()); |
||||
// 数据 populate 完成后,再设置监听
|
||||
this.bindListeners2Widgets(); |
||||
this.addAttributeChangeListener(changeListener); |
||||
} |
||||
|
||||
@Override |
||||
public void update() { |
||||
((WCardTagLayout)xCreator.toData()).setMobileTemplateStyle((MobileTemplateStyle) templateStyleEditor.getValue()); |
||||
DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); // 触发设计器保存按钮亮起来
|
||||
|
||||
} |
||||
} |
@ -1,196 +0,0 @@
|
||||
/* |
||||
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
package com.fr.design.actions.file.export; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.design.actions.JWorkBookAction; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.iprogressbar.FRProgressBar; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.DesignerFrame; |
||||
import com.fr.design.mainframe.JWorkBook; |
||||
import com.fr.design.parameter.ParameterInputPane; |
||||
import com.fr.file.FILE; |
||||
import com.fr.file.FILEChooserPane; |
||||
import com.fr.file.filter.ChooseFileFilter; |
||||
import com.fr.log.FineLoggerFactory; |
||||
|
||||
import com.fr.io.exporter.AppExporter; |
||||
import com.fr.io.exporter.CSVExporter; |
||||
import com.fr.io.exporter.EmbeddedTableDataExporter; |
||||
import com.fr.io.exporter.ExcelExporter; |
||||
import com.fr.io.exporter.Exporter; |
||||
import com.fr.io.exporter.PDFExporterProcessor; |
||||
import com.fr.io.exporter.WordExporter; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.main.impl.WorkBook; |
||||
import com.fr.page.PageSetProvider; |
||||
import com.fr.report.ReportHelper; |
||||
import com.fr.report.core.ReportUtils; |
||||
import com.fr.report.report.Report; |
||||
import com.fr.report.worksheet.WorkSheet; |
||||
import com.fr.stable.ActorConstants; |
||||
import com.fr.stable.ActorFactory; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.io.OutputStream; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* Abstract export action. |
||||
*/ |
||||
public abstract class AbstractExportAction extends JWorkBookAction { |
||||
protected AbstractExportAction(JWorkBook jwb) { |
||||
super(jwb); |
||||
} |
||||
|
||||
private FRProgressBar progressbar; |
||||
|
||||
protected WorkBook getTemplateWorkBook() { |
||||
return this.getEditingComponent().getTarget(); |
||||
} |
||||
|
||||
/** |
||||
* 执行方法 |
||||
*/ |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
JWorkBook jwb = this.getEditingComponent(); |
||||
FILE editingFILE = jwb.getEditingFILE(); |
||||
DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); |
||||
|
||||
// 弹出参数
|
||||
final java.util.Map parameterMap = new java.util.HashMap(); |
||||
final TemplateWorkBook tpl = getTemplateWorkBook(); |
||||
Parameter[] parameters = tpl.getParameters(); |
||||
if (parameters != null && parameters.length > 0) {// 检查Parameter.
|
||||
final ParameterInputPane pPane = new ParameterInputPane( |
||||
parameters); |
||||
pPane.showSmallWindow(designerFrame, new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
parameterMap.putAll(pPane.update()); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
|
||||
// Choose a file name....
|
||||
FILEChooserPane fileChooserPane = FILEChooserPane.getInstance(true, true); |
||||
fileChooserPane.addChooseFILEFilter(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) { |
||||
FineLoggerFactory.getLogger().error("Error In Make New File"); |
||||
} |
||||
fileChooserPane = null; |
||||
FRContext.getLogger().info("\"" + file.getName() + "\"" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Prepare_Export") + "!"); |
||||
|
||||
(progressbar = new FRProgressBar(createExportWork(file, tpl, parameterMap), designerFrame, |
||||
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exporting"), "", 0, 100)).start(); |
||||
} |
||||
} |
||||
|
||||
private SwingWorker createExportWork(final FILE file, final TemplateWorkBook tpl, final Map parameterMap) { |
||||
final String filePath = file.getPath(); |
||||
final String fileGetName = file.getName(); |
||||
|
||||
SwingWorker exportWorker = new SwingWorker<Void, Void>() { |
||||
|
||||
@Override |
||||
protected Void doInBackground() throws Exception { |
||||
Thread.sleep(100); //bug 10516
|
||||
try { |
||||
OutputStream outputStream = file.asOutputStream(); |
||||
|
||||
this.setProgress(10); |
||||
dealExporter(outputStream, tpl, parameterMap); |
||||
this.setProgress(80); |
||||
outputStream.flush(); |
||||
outputStream.close(); |
||||
this.setProgress(100); |
||||
|
||||
FRContext.getLogger().info("\"" + fileGetName + "\"" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Finish_Export") + "!"); |
||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), |
||||
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exported_Successfully") + "\n" + fileGetName); |
||||
} catch (Exception exp) { |
||||
this.setProgress(100); |
||||
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
||||
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Failed") + "\n" + filePath, |
||||
null, 0, UIManager.getIcon("OptionPane.errorIcon")); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void done() { |
||||
progressbar.close(); |
||||
} |
||||
}; |
||||
return exportWorker; |
||||
} |
||||
|
||||
private void dealExporter(OutputStream outputStream, final TemplateWorkBook tpl, final Map parameterMap) throws Exception { |
||||
final Exporter exporter = AbstractExportAction.this.getExporter(); |
||||
if (exporter instanceof AppExporter) { |
||||
AppExporter appExporter = (AppExporter) exporter; |
||||
if (exporter instanceof ExcelExporter || exporter instanceof CSVExporter |
||||
|| exporter instanceof PDFExporterProcessor || exporter instanceof WordExporter) { |
||||
ReportHelper.clearFormulaResult(tpl);// 清空rpt中的公式计算结果
|
||||
|
||||
appExporter.export(outputStream, tpl.execute(parameterMap, ActorFactory.getActor(ActorConstants.TYPE_PAGE) |
||||
)); |
||||
} else { |
||||
ReportHelper.clearFormulaResult(tpl);// 清空currentReport中的公式计算结果
|
||||
|
||||
PageSetProvider pageSet = tpl.execute(parameterMap, ActorFactory.getActor(ActorConstants.TYPE_PAGE)).generateReportPageSet( |
||||
ReportUtils.getPaperSettingListFromWorkBook(tpl)).traverse4Export(); |
||||
appExporter.export(outputStream, pageSet); |
||||
pageSet.release(); |
||||
} |
||||
} else if (exporter instanceof EmbeddedTableDataExporter) { |
||||
((EmbeddedTableDataExporter) exporter).export(outputStream, (WorkBook) tpl, parameterMap); |
||||
} |
||||
} |
||||
|
||||
/* |
||||
* 这边判断是否有层式报表,有层式需要使用大数据量导出 |
||||
*/ |
||||
protected boolean hasLayerReport(TemplateWorkBook tpl) { |
||||
if (tpl == null) { |
||||
return false; |
||||
} |
||||
for (int i = 0; i < tpl.getReportCount(); i++) { |
||||
Report r = tpl.getReport(i); |
||||
if (r instanceof WorkSheet) { |
||||
if (((WorkSheet) r).getLayerReportAttr() != null) { |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
protected abstract ChooseFileFilter getChooseFileFilter(); |
||||
|
||||
protected abstract String getDefaultExtension(); |
||||
|
||||
protected abstract Exporter getExporter(); |
||||
} |
@ -0,0 +1,57 @@
|
||||
/* |
||||
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
package com.fr.design.actions.file.export; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.JWorkBook; |
||||
import com.fr.design.parameter.ParameterInputPane; |
||||
import com.fr.io.exporter.ExporterKey; |
||||
import com.fr.io.exporter.DesignExportScope; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.main.impl.WorkBook; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* Abstract export action. |
||||
*/ |
||||
public abstract class AbstractWorkBookExportAction extends AbstractExportAction<JWorkBook> { |
||||
|
||||
|
||||
protected AbstractWorkBookExportAction(JWorkBook jwb) { |
||||
super(jwb); |
||||
} |
||||
|
||||
|
||||
protected WorkBook getTemplateWorkBook() { |
||||
return this.getEditingComponent().getTarget(); |
||||
} |
||||
|
||||
public ExporterKey exportKey() { |
||||
return DesignExportScope.FINE_BOOK; |
||||
} |
||||
|
||||
@Override |
||||
protected Map<String, Object> processParameter() { |
||||
// 弹出参数
|
||||
final Map<String, Object> parameterMap = new HashMap<>(); |
||||
final TemplateWorkBook tpl = getTemplateWorkBook(); |
||||
Parameter[] parameters = tpl.getParameters(); |
||||
// 检查Parameter
|
||||
if (parameters != null && parameters.length > 0) { |
||||
final ParameterInputPane pPane = new ParameterInputPane( |
||||
parameters); |
||||
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
parameterMap.putAll(pPane.update()); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
return parameterMap; |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
package com.fr.design.widget.ui.mobile; |
||||
|
||||
import com.fr.base.mobile.MobileScanCodeAttr; |
||||
import com.fr.base.mobile.ScanCodeState; |
||||
import com.fr.design.foldablepane.UIExpandablePane; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.widget.mobile.WidgetMobilePane; |
||||
import com.fr.form.ui.TextEditor; |
||||
import com.fr.form.ui.Widget; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
|
||||
public class ScanCodeMobilePane extends WidgetMobilePane { |
||||
|
||||
private UICheckBox appScanCodeCheck; |
||||
|
||||
protected void init() { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.add(getMobileSettingPane(), BorderLayout.NORTH); |
||||
} |
||||
|
||||
private UIExpandablePane getMobileSettingPane() { |
||||
JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
appScanCodeCheck = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Support_Scan_Code"), true); |
||||
appScanCodeCheck.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); |
||||
panel.add(appScanCodeCheck); |
||||
final JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
panelWrapper.add(panel, BorderLayout.NORTH); |
||||
return new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, panelWrapper); |
||||
} |
||||
|
||||
@Override |
||||
public void populate(Widget widget) { |
||||
MobileScanCodeAttr mobileScanCodeAttr = ((TextEditor) widget).getMobileScanCodeAttr(); |
||||
ScanCodeState scanCodeState = mobileScanCodeAttr.getScanCodeState(); |
||||
appScanCodeCheck.setSelected(scanCodeState.getState()); |
||||
} |
||||
|
||||
@Override |
||||
public void update(Widget widget) { |
||||
MobileScanCodeAttr mobileScanCodeAttr = ((TextEditor) widget).getMobileScanCodeAttr(); |
||||
mobileScanCodeAttr.setScanCodeState(ScanCodeState.parse(appScanCodeCheck.isSelected())); |
||||
} |
||||
|
||||
|
||||
} |
Binary file not shown.
Loading…
Reference in new issue