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.
161 lines
5.0 KiB
161 lines
5.0 KiB
/* |
|
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. |
|
*/ |
|
package com.fr.design.style.background; |
|
|
|
import java.awt.BorderLayout; |
|
import java.awt.Dimension; |
|
import java.util.HashMap; |
|
import java.util.Map; |
|
|
|
import com.fr.design.gui.frpane.UITabbedPane; |
|
|
|
import javax.swing.event.ChangeEvent; |
|
import javax.swing.event.ChangeListener; |
|
import javax.swing.event.EventListenerList; |
|
|
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.dialog.BasicPane; |
|
import com.fr.general.Background; |
|
import com.fr.log.FineLoggerFactory; |
|
|
|
|
|
public class BackgroundPane extends BasicPane { |
|
|
|
protected UITabbedPane tabbedPane = null; |
|
|
|
private EventListenerList eventChangeList = new EventListenerList(); |
|
protected Map<Integer, BackgroundDetailPane> cacheMap = new HashMap<>(); |
|
|
|
|
|
//需求说: 如果是浏览器背景, 隐藏掉几个button |
|
public BackgroundPane() { |
|
this.initComponents(); |
|
this.setPreferredSize(new Dimension(400, 300)); |
|
} |
|
|
|
|
|
protected void initComponents() { |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
previewPane = new BackgroundPreviewLabel(); |
|
previewPane.addBackgroundChangeListener(new ChangeListener() { |
|
|
|
public void stateChanged(ChangeEvent e) { |
|
fireStateChanged(); |
|
} |
|
}); |
|
tabbedPane = new UITabbedPane(); |
|
this.add(tabbedPane, BorderLayout.CENTER); |
|
|
|
initTabPane(); |
|
|
|
tabbedPane.addChangeListener(backgroundChangeListener); |
|
tabbedPane.setPreferredSize(new Dimension(200, 210)); |
|
} |
|
|
|
protected void initTabPane() { |
|
int index = 0; |
|
for (Class<? extends Background> key : BackgroundFactory.kindsOfKey()) { |
|
BackgroundUIWrapper wrapper = BackgroundFactory.getWrapper(key); |
|
wrapper.setIndex(index++); |
|
tabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText(wrapper.getTitle()), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); |
|
} |
|
} |
|
|
|
public void addChangeListener(ChangeListener changeListener) { |
|
eventChangeList.add(ChangeListener.class, changeListener); |
|
} |
|
|
|
/** |
|
*/ |
|
public void fireStateChanged() { |
|
Object[] listeners = eventChangeList.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); |
|
} |
|
} |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background"); |
|
} |
|
|
|
|
|
protected BackgroundDetailPane getTabItemPane(Background background, int index) { |
|
BackgroundDetailPane quickPane = cacheMap.get(index); |
|
if (quickPane == null) { |
|
quickPane = BackgroundFactory.createIfAbsent(background == null ? null : background.getClass()); |
|
quickPane.addChangeListener(backgroundChangeListener); |
|
cacheMap.put(index, quickPane); |
|
} |
|
tabbedPane.setComponentAt(index, quickPane); |
|
tabbedPane.setSelectedIndex(index); |
|
return quickPane; |
|
} |
|
|
|
protected BackgroundDetailPane getTabItemPaneByIndex(int index) { |
|
BackgroundDetailPane quickPane = cacheMap.get(index); |
|
if (quickPane == null) { |
|
quickPane = BackgroundFactory.createIfAbsent(index); |
|
tabbedPane.setComponentAt(index, quickPane); |
|
cacheMap.put(index, quickPane); |
|
quickPane.addChangeListener(backgroundChangeListener); |
|
} |
|
return quickPane; |
|
} |
|
|
|
|
|
/** |
|
* Populate background. |
|
*/ |
|
public void populate(Background background) { |
|
BackgroundUIWrapper wrapper = getBackgroundUIWrapper(background); |
|
if (wrapper == null) { |
|
return; |
|
} |
|
int index = wrapper.getIndex(); |
|
BackgroundDetailPane quickPane = getTabItemPane(background, index); |
|
quickPane.populate(background); |
|
|
|
tabbedPane.doLayout(); |
|
tabbedPane.validate(); |
|
} |
|
|
|
protected BackgroundUIWrapper getBackgroundUIWrapper(Background background) { |
|
return BackgroundFactory.getWrapper(background == null ? null : background.getClass()); |
|
} |
|
|
|
/** |
|
* Update background. |
|
*/ |
|
public Background update() { |
|
int index = tabbedPane.getSelectedIndex(); |
|
BackgroundDetailPane quickPane = getTabItemPaneByIndex(index); |
|
try { |
|
return quickPane.update(); |
|
} catch (Exception e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
} |
|
return null; |
|
} |
|
/** |
|
* Change listener. |
|
*/ |
|
protected ChangeListener backgroundChangeListener = new ChangeListener() { |
|
|
|
public void stateChanged(ChangeEvent evt) { |
|
previewPane.setBackgroundObject(update()); |
|
previewPane.repaint(); |
|
} |
|
}; |
|
private BackgroundPreviewLabel previewPane = null; |
|
|
|
} |