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.
154 lines
5.5 KiB
154 lines
5.5 KiB
package com.fr.design.mainframe.theme; |
|
|
|
import com.fr.base.theme.TemplateTheme; |
|
import com.fr.base.theme.settings.ThemedCellStyle; |
|
import com.fr.design.beans.FurtherBasicBeanPane; |
|
import com.fr.design.cell.CellRectangleStylePreviewPane; |
|
import com.fr.design.file.HistoryTemplateListCache; |
|
import com.fr.design.gui.ibutton.UIRadioButton; |
|
import com.fr.design.i18n.Toolkit; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.mainframe.DesignerBean; |
|
import com.fr.design.mainframe.JTemplate; |
|
import com.fr.general.ComparatorUtils; |
|
import com.fr.general.IOUtils; |
|
|
|
import javax.swing.BorderFactory; |
|
import javax.swing.DefaultListModel; |
|
import javax.swing.Icon; |
|
import javax.swing.JList; |
|
import javax.swing.JPanel; |
|
import javax.swing.ListCellRenderer; |
|
import javax.swing.event.ChangeEvent; |
|
import javax.swing.event.ChangeListener; |
|
import javax.swing.event.ListSelectionEvent; |
|
import javax.swing.event.ListSelectionListener; |
|
import java.awt.BorderLayout; |
|
import java.awt.Component; |
|
import java.awt.Dimension; |
|
import java.awt.Graphics; |
|
import java.io.Serializable; |
|
import java.util.List; |
|
|
|
public class ThemedCellStyleListPane extends FurtherBasicBeanPane<ThemedCellStyle> implements DesignerBean { |
|
|
|
private static final int LEFT_BORDER = 10; |
|
private static final int RIGHT_BORDER = 10; |
|
private final DefaultListModel<ThemedCellStyle> defaultListModel; |
|
private final JList<ThemedCellStyle> styleList; |
|
private ChangeListener changeListener; |
|
|
|
public ThemedCellStyleListPane(boolean supportInnerBorder) { |
|
defaultListModel = new DefaultListModel<>(); |
|
styleList = new JList<>(defaultListModel); |
|
styleList.setCellRenderer(new RadioButtonListCellRangeRenderer(supportInnerBorder)); |
|
styleList.setOpaque(false); |
|
styleList.setBackground(null); |
|
styleList.addListSelectionListener(new ListSelectionListener() { |
|
@Override |
|
public void valueChanged(ListSelectionEvent e) { |
|
if (e.getValueIsAdjusting() && changeListener != null) { |
|
changeListener.stateChanged(new ChangeEvent(styleList)); |
|
} |
|
} |
|
}); |
|
setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
add(styleList, BorderLayout.CENTER); |
|
setBorder(BorderFactory.createEmptyBorder(0 ,LEFT_BORDER, 0, RIGHT_BORDER)); |
|
} |
|
|
|
public void addChangeListener(ChangeListener changeListener) { |
|
this.changeListener = changeListener; |
|
} |
|
|
|
/** |
|
* 重置 |
|
*/ |
|
public void reset() { |
|
refreshBeanElement(); |
|
styleList.setSelectedIndex(0); |
|
} |
|
|
|
@Override |
|
public void populateBean(ThemedCellStyle ob) { |
|
refreshBeanElement(); |
|
if (ob == null) { |
|
styleList.setSelectedIndex(0); |
|
return; |
|
} |
|
for (int i = 0; i < defaultListModel.getSize(); i++) { |
|
if (ComparatorUtils.equals(ob.getName(), defaultListModel.get(i).getName())) { |
|
styleList.setSelectedIndex(i); |
|
break; |
|
} |
|
} |
|
} |
|
|
|
@Override |
|
public ThemedCellStyle updateBean() { |
|
return styleList.getSelectedValue(); |
|
} |
|
|
|
@Override |
|
public String title4PopupWindow() { |
|
return Toolkit.i18nText("Fine-Design_Report_Predefined_Style"); |
|
} |
|
|
|
@Override |
|
public boolean accept(Object ob) { |
|
return ob instanceof ThemedCellStyle; |
|
} |
|
|
|
@Override |
|
public void refreshBeanElement() { |
|
defaultListModel.removeAllElements(); |
|
JTemplate<?, ?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
|
if (template != null) { |
|
TemplateTheme theme = template.getTemplateTheme(); |
|
List<ThemedCellStyle> styleList = theme.getCellStyleList().getCellStyleList(); |
|
for (ThemedCellStyle themedCellStyle: styleList) { |
|
defaultListModel.addElement(themedCellStyle); |
|
} |
|
} |
|
styleList.setModel(defaultListModel); |
|
} |
|
|
|
private static class RadioButtonListCellRangeRenderer extends JPanel implements ListCellRenderer<ThemedCellStyle>, Serializable { |
|
|
|
private static final Icon selectedMarkIcon = IOUtils.readIcon("/com/fr/design/form/images/marked.png"); |
|
|
|
private final CellRectangleStylePreviewPane previewArea; |
|
private boolean selected = false; |
|
|
|
public RadioButtonListCellRangeRenderer(boolean supportInnerBorder) { |
|
super(); |
|
setLayout(new BorderLayout(5, 0)); |
|
setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
|
previewArea = new CellRectangleStylePreviewPane(supportInnerBorder); |
|
add(previewArea, BorderLayout.CENTER); |
|
} |
|
|
|
@Override |
|
public Component getListCellRendererComponent(JList<? extends ThemedCellStyle> list, ThemedCellStyle value, int index, boolean isSelected, boolean cellHasFocus) { |
|
this.selected = isSelected; |
|
previewArea.setPlainText(value.getName()); |
|
previewArea.setStyle(value.getStyle(), value.getCellBorderStyle()); |
|
|
|
int preferredWidth = list.getWidth() - 15; |
|
preferredWidth = Math.max(0, preferredWidth); |
|
int preferredHeight = 0; |
|
previewArea.setPreferredSize(new Dimension(preferredWidth, preferredHeight)); |
|
|
|
return this; |
|
} |
|
|
|
@Override |
|
public void paint(Graphics g) { |
|
super.paint(g); |
|
|
|
if (selected) { |
|
selectedMarkIcon.paintIcon(this, g, getWidth() - selectedMarkIcon.getIconWidth(), 5); |
|
} |
|
} |
|
} |
|
} |