forked from fanruan/design
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; |
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 |
* @see HistoryTemplateListCache |
||||||
* @deprecated use HistoryTemplateListCache instead |
* @deprecated use HistoryTemplateListCache instead |
||||||
*/ |
*/ |
||||||
@Deprecated |
@Deprecated |
||||||
public class HistoryTemplateListPane { |
public class HistoryTemplateListPane implements CallbackEvent { |
||||||
public static HistoryTemplateListCache getInstance() { |
|
||||||
|
|
||||||
|
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(); |
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.BaseUtils; |
||||||
import com.fr.base.iofile.attr.MobileOnlyTemplateAttrMark; |
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.base.BaseUtils; |
||||||
import com.fr.design.actions.UpdateAction; |
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.BaseUtils; |
||||||
import com.fr.base.Parameter; |
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