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.
222 lines
8.2 KiB
222 lines
8.2 KiB
/* |
|
* Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved. |
|
*/ |
|
package com.fr.design.mainframe; |
|
|
|
import com.fr.base.BaseUtils; |
|
import com.fr.design.ExtraDesignClassManager; |
|
import com.fr.design.cell.CellElementPropertyComponent; |
|
import com.fr.design.fun.BackgroundQuickUIProvider; |
|
import com.fr.design.fun.CellAttributeProvider; |
|
import com.fr.design.fun.CellPropertyPaneProvider; |
|
import com.fr.design.fun.PresentKindProvider; |
|
import com.fr.design.fun.PropertyItemPaneProvider; |
|
import com.fr.design.gui.frpane.UITitlePanel; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.gui.itabpane.TitleChangeListener; |
|
import com.fr.design.mainframe.cell.CellElementEditPane; |
|
import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase; |
|
import com.fr.general.GeneralContext; |
|
|
|
import com.fr.grid.selection.CellSelection; |
|
import com.fr.grid.selection.FloatSelection; |
|
import com.fr.grid.selection.Selection; |
|
import com.fr.plugin.context.PluginContext; |
|
import com.fr.plugin.injectable.PluginModule; |
|
import com.fr.plugin.manage.PluginFilter; |
|
import com.fr.plugin.observer.PluginEvent; |
|
import com.fr.plugin.observer.PluginEventListener; |
|
import com.fr.report.cell.Elem; |
|
import com.fr.report.elementcase.TemplateElementCase; |
|
|
|
import javax.swing.BorderFactory; |
|
import javax.swing.Icon; |
|
import javax.swing.JPanel; |
|
import javax.swing.SwingConstants; |
|
import java.awt.BorderLayout; |
|
import java.awt.Dimension; |
|
import java.util.Set; |
|
|
|
|
|
/** |
|
* 所有组件一次全部加载,不存在延迟加载。 原因:设计器打开第一张模板的时候,会初始化许多许多东西。这个过程需要很长时间(快的3-5s)。 |
|
* 单元格属性表初始化全部组件,也用不了多长时间,相对于上面的(3-5s)很短,用户根本不会感觉多了时间。 |
|
* 所以基本不影响体验。而且,以后用单元格属性表时,不会应为里面的部分组件没有初始化而导致设计器突然卡一下,很流畅的. |
|
* |
|
* @author zhou |
|
* @since 2012-5-24下午1:50:21 |
|
*/ |
|
public class CellElementPropertyPane extends DockingView { |
|
|
|
static { |
|
GeneralContext.listenPluginRunningChanged(new PluginEventListener() { |
|
|
|
@Override |
|
public void on(PluginEvent event) { |
|
|
|
synchronized (CellElementPropertyPane.class) { |
|
singleton = new CellElementPropertyPane(); |
|
} |
|
} |
|
}, new PluginFilter() { |
|
|
|
@Override |
|
public boolean accept(PluginContext context) { |
|
|
|
return context.contain(PluginModule.ExtraDesign, BackgroundQuickUIProvider.MARK_STRING) |
|
|| context.contain(PluginModule.ExtraDesign, PresentKindProvider.MARK_STRING) |
|
|| context.contain(PluginModule.ExtraDesign, CellAttributeProvider.MARK_STRING); |
|
|
|
} |
|
}); |
|
} |
|
|
|
|
|
public static CellElementPropertyPane getInstance() { |
|
if (singleton == null) { |
|
synchronized (CellElementPropertyPane.class) { |
|
if (singleton == null) { |
|
singleton = new CellElementPropertyPane(); |
|
} |
|
} |
|
} |
|
return singleton; |
|
} |
|
|
|
private static volatile CellElementPropertyPane singleton; |
|
|
|
private CellElementEditPane cellElementEditPane; |
|
|
|
private JPanel titlePane; |
|
private UILabel title; |
|
|
|
private TitleChangeListener titleListener = new TitleChangeListener() { |
|
|
|
@Override |
|
public void fireTitleChange(String addName) { |
|
title.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellElement_Property_Table") + '-' + addName); |
|
} |
|
}; |
|
|
|
|
|
private CellElementPropertyPane() { |
|
this.setLayout(new BorderLayout()); |
|
this.setBorder(null); |
|
cellElementEditPane = new CellElementEditPane(); |
|
cellElementEditPane.addTitleChangeListner(titleListener); |
|
titlePane = new JPanel(new BorderLayout()); |
|
title = new UILabel(this.getViewTitle() + '-' + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Expand_Attribute")) { |
|
private static final long serialVersionUID = 1L; |
|
|
|
@Override |
|
public Dimension getPreferredSize() { |
|
return new Dimension(super.getPreferredSize().width, 19); |
|
} |
|
}; |
|
title.setHorizontalAlignment(SwingConstants.CENTER); |
|
title.setVerticalAlignment(SwingConstants.CENTER); |
|
titlePane.add(title, BorderLayout.CENTER); |
|
titlePane.setBorder(BorderFactory.createEmptyBorder(10,0,1,0)); |
|
// this.add(titlePane, BorderLayout.NORTH); |
|
this.add(cellElementEditPane, BorderLayout.CENTER); |
|
|
|
} |
|
|
|
@Override |
|
public void refreshDockingView() { |
|
singleton = new CellElementPropertyPane(); |
|
} |
|
|
|
private Elem getSelectedElement(Selection selection, TemplateElementCase elementCase) { |
|
Elem element = null; |
|
if (selection instanceof CellSelection) { |
|
CellSelection cs = (CellSelection) selection; |
|
element = elementCase.getCellElement(cs.getColumn(), cs.getRow()); |
|
} else if (selection instanceof FloatSelection) { |
|
FloatSelection fs = (FloatSelection) selection; |
|
element = elementCase.getFloatElement(fs.getSelectedFloatName()); |
|
} |
|
|
|
if (element == null) { |
|
element = DefaultThemedTemplateCellElementCase.createInstance(0, 0); |
|
} |
|
return element; |
|
} |
|
|
|
public void removeAll() { |
|
this.remove(titlePane); |
|
this.remove(cellElementEditPane); |
|
} |
|
|
|
public void reInit(ElementCasePane ePane) { |
|
if (cellElementEditPane.getParent() == null) { // 如果处于隐藏状态,则让其显示 |
|
this.add(cellElementEditPane, BorderLayout.CENTER); |
|
} |
|
cellElementEditPane.populate(ePane); |
|
} |
|
|
|
public void populate(ElementCasePane ePane) { |
|
TemplateElementCase elementCase = ePane.getEditingElementCase(); |
|
if (elementCase == null) { |
|
return; |
|
} |
|
ePane.getSelection().populatePropertyPane(ePane); |
|
populateExtraCellProperties(ePane); |
|
} |
|
|
|
@Override |
|
public String getViewTitle() { |
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellElement_Property_Table"); |
|
} |
|
|
|
@Override |
|
public Icon getViewIcon() { |
|
return BaseUtils.readIcon("/com/fr/design/images/m_report/qb.png"); |
|
} |
|
|
|
@Override |
|
public Location preferredLocation() { |
|
return Location.WEST_BELOW; |
|
} |
|
|
|
@Override |
|
public UITitlePanel createTitlePanel() { |
|
return new UITitlePanel(this); |
|
} |
|
|
|
/** |
|
* 一些面板可能有二级菜单(比如说形态) |
|
* |
|
* @param id |
|
*/ |
|
public void GoToPane(String... id) { |
|
cellElementEditPane.setSelectedIndex(id); |
|
EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_CELL_ATTR); |
|
EastRegionContainerPane.getInstance().setWindow2PreferWidth(); |
|
} |
|
private void populateExtraCellProperties(ElementCasePane ePane) { |
|
if (ePane == null) { |
|
return; |
|
} |
|
Selection selection = ePane.getSelection(); |
|
if (selection instanceof CellSelection) { |
|
//单元格属性,限定下是选中单个单元格 |
|
TemplateElementCase elementCase = ePane.getEditingElementCase(); |
|
if (elementCase != null) { |
|
Set<PropertyItemPaneProvider> itemPaneProviders = ExtraDesignClassManager.getInstance().getArray(PropertyItemPaneProvider.XML_TAG); |
|
if (itemPaneProviders != null) { |
|
for (PropertyItemPaneProvider itemPaneProvider : itemPaneProviders) { |
|
if(itemPaneProvider instanceof CellPropertyPaneProvider){ |
|
CellPropertyPaneProvider cellPropertyPaneProvider = (CellPropertyPaneProvider) itemPaneProvider; |
|
CellElementPropertyComponent cellElementPropertyPane = cellPropertyPaneProvider.getSingletonCelPropertyPane(); |
|
if (cellElementPropertyPane != null && cellElementPropertyPane.accept(ePane)) { |
|
cellElementPropertyPane.populate(ePane); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
}
|
|
|