帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

283 lines
8.3 KiB

package com.fr.design.file;
import com.finebi.cbb.utils.CompareUtils;
import com.fr.design.file.impl.DefaultTemplateTabOperate;
import com.fr.design.file.impl.EmptyTemplateTabOperator;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate;
import com.fr.file.FILE;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author kerry
* @since 11.0
* created on 2023-04-14
**/
public class TemplateTabManager {
private static class HOLDER {
private static final TemplateTabManager SINGLETON = new TemplateTabManager();
}
/**
* 返回TemplateTabManager单例对象
* @return
*/
public static TemplateTabManager getInstance() {
return HOLDER.SINGLETON;
}
private TemplateTabManager() {
list.add(DefaultTemplateTabOperate.getInstance());
}
private List<TemplateTabOperateProvider> list = new ArrayList<>();
/**
* 支持注册新的Operator
* @param templateTabOperateProvider
*/
public void register(TemplateTabOperateProvider templateTabOperateProvider) {
this.list.add(templateTabOperateProvider);
}
/**
* 移除operator
* @param templateTabOperateProvider
*/
public void remove(TemplateTabOperateProvider templateTabOperateProvider) {
this.list.remove(templateTabOperateProvider);
}
private boolean closeCurrent = false;
//自动新建的模板B若没有进行任何编辑,切换到其他
// 模板时,模板B会自动关闭
private JTemplate<?, ?> temTemplate = null;
public boolean isCloseCurrent() {
return closeCurrent;
}
public void setCloseCurrent(boolean closeCurrent) {
this.closeCurrent = closeCurrent;
}
public void setTemTemplate(JTemplate<?, ?> temTemplate) {
this.temTemplate = temTemplate;
}
/**
* 刷新tab栏
*/
public void refresh() {
getCurrentOperator().refresh();
}
/**
* 从模板树删除文件
*/
public void deleteOpenedTemplate(JTemplate<?, ?> template) {
TemplateTabOperateProvider provider = getOperatorByTemplate(template);
provider.deleteOpenedTemplate(template);
this.refresh();
}
public JTemplate getSelectedFile() {
return getCurrentOperator().getSelectedFile();
}
/**
* 关闭掉当前文件列表中指定的文件
*
* @param file 指定的文件
*/
public void closeFileTemplate(FILE file) {
for (TemplateTabOperateProvider provider : list) {
provider.closeFileTemplate(file);
}
}
/**
* 关闭指定模板
*
* @param specifiedTemplate
*/
public void closeSpecifiedTemplate(JTemplate<?, ?> specifiedTemplate) {
getCurrentOperator().closeSpecifiedTemplate(specifiedTemplate);
}
/**
* 刷新打开模板
*
* @param tempalteLsit
*/
public void refreshOpenedTemplate(List<JTemplate<?, ?>> tempalteLsit) {
for (TemplateTabOperateProvider provider : list) {
provider.refreshOpenedTemplate(tempalteLsit);
}
}
/**
* 处理自动新建的模板 在切换时的处理
*/
public void doWithtemTemplate() {
//temtemplate保存的一定是手动新建的没有编辑或是编辑了没有保存的模板
//没有保存,说明有编辑;已经保存在磁盘里的文件,说明有过处理,并且已经保存,此时切换都不将其自动关闭
if (temTemplate == null || temTemplate == HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()) {
return;
}
if (!temTemplate.isSaved() || !temTemplate.getEditingFILE().isMemFile()) {
temTemplate = null;
}
//自动新建的模板B若没有进行任何编辑(新建模板没有进行任何编辑时saved都是true):还没有存盘
if (temTemplate != null && temTemplate.getEditingFILE().isMemFile() && temTemplate.isSaved()) {
HistoryTemplateListCache.getInstance().closeSelectedReport(temTemplate);
temTemplate = null;
resetSelectIndex(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate());
}
}
/**
* 重置选中index
* @param jTemplate
*/
public void resetSelectIndex(JTemplate jTemplate) {
getCurrentOperator().resetSelectIndex(jTemplate);
}
/**
* 激活新模板
*/
public void activeNewTemplate() {
//先看其他模式中是否有已打开的模板,有的话切换过去
for (TemplateTabOperateProvider templateTabOperateProvider : list) {
if (templateTabOperateProvider.getOpenedJTemplates().size() != 0) {
templateTabOperateProvider.getSelectedFile().activeNewJTemplate();
refresh();
return;
}
}
//都没有的话,新建并激活模板
DesignerContext.getDesignerFrame().addAndActivateJTemplate();
//此时刚自动新建的模板在HistoryTemplateListCache的editingTemplate
TemplateTabManager.getInstance().setTemTemplate(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate());
refresh();
}
/**
* 后台关闭当前编辑模板
*/
public void closeCurrentTpl() {
JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
this.setCloseCurrent(true);
this.closeFormat(jTemplate);
this.closeSpecifiedTemplate(jTemplate);
}
/**
* 关闭指定索引值模板
*
* @param index
*/
public void closeByIndex(int index) {
getCurrentOperator().closeByIndex(index);
}
/**
* 关闭指定索引值模板
*
* @param jTemplate
*/
public void closeByJTemplate(JTemplate jTemplate) {
TemplateTabOperateProvider operator = getOperatorByOperatorType(jTemplate.getTemplateTabOperatorType());
operator.closeByIndex(operator.getJTemplateIndex(jTemplate));
}
/**
* 切换到指定tab栏的指定索引值模板
*
* @param jTemplate
*/
public void switchByJTemplate(JTemplate jTemplate) {
TemplateTabOperateProvider operator = getOperatorByOperatorType(jTemplate.getTemplateTabOperatorType());
operator.switchTpl(operator.getJTemplateIndex(jTemplate));
}
/**
* 获取所有打开的模板map
*
* @return
*/
public Map<String, List<JTemplate<?, ?>>> getAllOpenedTemplateMap() {
Map<String, List<JTemplate<?, ?>>> resultMap = new HashMap<>();
for (TemplateTabOperateProvider provider : list) {
resultMap.put(provider.getOperatorType(), provider.getOpenedJTemplates());
}
return resultMap;
}
/**
* 关闭其他
*/
public void closeOthers() {
TemplateTabOperateProvider currentOperator = getCurrentOperator();
currentOperator.closeAction(CloseOption.Others,
currentOperator.getJTemplateIndex(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()));
}
public String getTemplateShowName(JTemplate temTemplate){
return getCurrentOperator().getTemplateShowName(temTemplate);
}
/**
* 关闭模板
*
* @param closedTemplate 模板
*/
public void closeFormat(JTemplate closedTemplate) {
//表单不需要处理
if (!closedTemplate.isJWorkBook()) {
return;
}
if (DesignerContext.getFormatState() == DesignerContext.FORMAT_STATE_NULL) {
return;
}
//是被参照的模板被关闭,则重置格式刷
closedTemplate.doConditionCancelFormat();
}
public TemplateTabOperateProvider getCurrentOperator() {
return getOperatorByTemplate(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate());
}
private TemplateTabOperateProvider getOperatorByTemplate(JTemplate jTemplate) {
return getOperatorByOperatorType(jTemplate.getTemplateTabOperatorType());
}
private TemplateTabOperateProvider getOperatorByOperatorType(String type) {
for (TemplateTabOperateProvider provider : list) {
if (CompareUtils.isEqual(provider.getOperatorType(), type)) {
return provider;
}
}
return EmptyTemplateTabOperator.getInstance();
}
}