帆软报表设计器源代码。
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.
 
 
 
 

167 lines
6.6 KiB

package com.fr.design.extra;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ilist.UIList;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.IOUtils;
import com.fr.plugin.context.PluginMarker;
import com.fr.plugin.license.Licensed;
import com.fr.plugin.manage.PluginManager;
import com.fr.plugin.manage.control.PluginTaskCallback;
import com.fr.plugin.manage.control.PluginTaskResult;
import com.fr.plugin.view.PluginView;
import com.fr.stable.StringUtils;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author richie
* @date 2015-03-09
* @since 8.0
*/
public class PluginControlPane extends BasicPane {
private UIList pluginList;
private DefaultListModel listModel;
private PluginDetailPane detailPane;
private java.util.List<PluginSelectListener> listeners = new ArrayList<PluginSelectListener>();
private List<PluginView> plugins;
private UITextField searchTextField;
public PluginControlPane() {
setLayout(new BorderLayout());
searchTextField = new UITextField();
searchTextField.setColumns(20);
searchTextField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
doSearch(searchTextField.getText());
}
@Override
public void removeUpdate(DocumentEvent e) {
doSearch(searchTextField.getText());
}
@Override
public void changedUpdate(DocumentEvent e) {
doSearch(searchTextField.getText());
}
});
add(GUICoreUtils.createFlowPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Search") + ":"), searchTextField, FlowLayout.LEFT), BorderLayout.NORTH);
pluginList = new UIList();
DefaultListCellRenderer renderer = 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 PluginView) {
Licensed context = PluginManager.getContext(PluginMarker.read((PluginView) value));
if (context == null) {
return this;
}
String extraInfo = "";
if (context.isLicDamaged()) {
extraInfo = "(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Plugin_Damaged") + ")";
} else if (!context.isFree()) {
if (context.isAvailable()) {
extraInfo = "(" + (context.isOnTrial() ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Designer_Trial") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Designer_Authorized")) + context.getLeftDays() + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Designer_Left") + ")";
} else {
extraInfo = "(" + (context.isOnTrial() ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Designer_Trial") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Designer_Authorized")) + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Designer_Expired") + ")";
}
}
setText(((PluginView) value).getName() + extraInfo);
setIcon(IOUtils.readIcon("/com/fr/design/images/server/plugin.png"));
}
return this;
}
};
pluginList.setCellRenderer(renderer);
listModel = new DefaultListModel();
pluginList.setModel(listModel);
JScrollPane jScrollPane = new JScrollPane(pluginList);
PluginDescriptionLabel label = new PluginDescriptionLabel();
label.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Plugin"));
JPanel leftPane = GUICoreUtils.createBorderLayoutPane(
jScrollPane, BorderLayout.CENTER,
label, BorderLayout.NORTH
);
detailPane = new PluginDetailPane();
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPane, detailPane);
splitPane.setDividerLocation(200);
add(new UIScrollPane(splitPane));
pluginList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
PluginView plugin = (PluginView) pluginList.getSelectedValue();
if (plugin != null) {
detailPane.populate(plugin);
for (PluginSelectListener l : listeners) {
l.valueChanged(plugin);
}
} else {
detailPane.reset();
}
}
});
}
public void addPluginSelectionListener(PluginSelectListener l) {
listeners.add(l);
}
public void loadPlugins(java.util.List<PluginView> plugins) {
this.plugins = plugins;
for (PluginView plugin : plugins) {
listModel.addElement(plugin);
}
}
private void doSearch(String text) {
if (StringUtils.isNotBlank(text)) {
listModel.clear();
for (PluginView plugin : plugins) {
if (PluginUtils.isPluginMatch(plugin, text)) {
listModel.addElement(plugin);
}
}
}
}
@Nullable
public PluginView getSelectedPlugin() {
return (PluginView) pluginList.getSelectedValue();
}
public void deletePlugin(PluginView plugin) {
listModel.removeElement(plugin);
String id = plugin.getID();
String version = plugin.getVersion();
PluginManager.getController().uninstall(PluginMarker.create(id, version), true, new PluginTaskCallback() {
@Override
public void done(PluginTaskResult result) {
// do nothing
}
});
}
@Override
protected String title4PopupWindow() {
return "Plugin";
}
}