Mata.Li
6 years ago
24 changed files with 385 additions and 50 deletions
After Width: | Height: | Size: 274 B |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,46 @@ |
|||||||
|
package com.fr.design.module; |
||||||
|
|
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.DesignerFrame; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by mengao on 2017/11/23. |
||||||
|
* 空数据配置action |
||||||
|
*/ |
||||||
|
public class ChartEmptyDataStyleAction extends UpdateAction { |
||||||
|
|
||||||
|
public ChartEmptyDataStyleAction() { |
||||||
|
this.setSmallIcon(IOUtils.readIcon("com/fr/design/images/EmptyChart.png")); |
||||||
|
this.setName(Inter.getLocText("FR-Designer_Chart_Empty_Data")); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); |
||||||
|
final ChartEmptyDataStylePane pane = new ChartEmptyDataStylePane(); |
||||||
|
BasicDialog dialog = pane.showWindow(designerFrame); |
||||||
|
dialog.addDialogActionListener(new DialogActionAdapter() { |
||||||
|
@Override |
||||||
|
public void doOk() { |
||||||
|
pane.updateBean(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doCancel() { |
||||||
|
//直接关闭弹出框
|
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
pane.populateBean(); |
||||||
|
dialog.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,242 @@ |
|||||||
|
package com.fr.design.module; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.ChartEmptyDataStyleConf; |
||||||
|
import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.DesignerFrame; |
||||||
|
import com.fr.design.style.background.image.ImageFileChooser; |
||||||
|
import com.fr.design.style.background.image.ImagePreviewPane; |
||||||
|
import com.fr.design.utils.ImageUtils; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.GeneralContext; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.stable.CoreGraphHelper; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.ButtonGroup; |
||||||
|
import javax.swing.JFileChooser; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JScrollPane; |
||||||
|
import javax.swing.SwingWorker; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.GridLayout; |
||||||
|
import java.awt.Image; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.io.File; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by mengao on 2017/11/23. |
||||||
|
*/ |
||||||
|
public class ChartEmptyDataStylePane extends AbstractAttrNoScrollPane { |
||||||
|
private static final int WIDTH = 150; |
||||||
|
private static final int HEIGHT = 20; |
||||||
|
private static final int FIVE = 5; |
||||||
|
private static final int TEN = 10; |
||||||
|
private static final int THIRTY = 30; |
||||||
|
private static Image DEFAULT_EMPTY_DATA_IMAGE; |
||||||
|
|
||||||
|
|
||||||
|
private UIButtonGroup emptyData; |
||||||
|
private UIRadioButton defaultRadioButton; |
||||||
|
private UIRadioButton customRadioButton; |
||||||
|
private UIButton selectPictureButton; |
||||||
|
|
||||||
|
private ImagePreviewPane previewPane; |
||||||
|
private ImageFileChooser imageFileChooser; |
||||||
|
|
||||||
|
private Image emptyDataImage = DEFAULT_EMPTY_DATA_IMAGE; |
||||||
|
private SwingWorker<Void, Void> imageWorker; |
||||||
|
|
||||||
|
|
||||||
|
static { |
||||||
|
DEFAULT_EMPTY_DATA_IMAGE = GeneralContext.isChineseEnv() ? IOUtils.readImage("com/fr/design/images/zh_emptydata.png") |
||||||
|
: IOUtils.readImage("com/fr/design/images/us_emptydata.png"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
JPanel content = new JPanel(new BorderLayout()); |
||||||
|
content.add(creatNorthPane(), BorderLayout.NORTH); |
||||||
|
content.add(creatCenterPane(), BorderLayout.CENTER); |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel creatNorthPane() { |
||||||
|
emptyData = new UIButtonGroup(new String[]{Inter.getLocText("Plugin-ChartF_Open"), Inter.getLocText("Plugin-ChartF_Close")}); |
||||||
|
emptyData.setSelectedIndex(0); |
||||||
|
emptyData.setPreferredSize(new Dimension(WIDTH, HEIGHT)); |
||||||
|
emptyData.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
checkEmptyDataStyle(); |
||||||
|
repaintPreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
UILabel promptContent = new UILabel(Inter.getLocText("FR-Designer_Tip_Content")); |
||||||
|
JPanel northPane = GUICoreUtils.createFlowPane(new Component[]{promptContent, emptyData}, FlowLayout.LEFT, TEN, 0); |
||||||
|
northPane.setBorder(BorderFactory.createEmptyBorder(0, FIVE, 0, 0)); |
||||||
|
return northPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel creatCenterPane() { |
||||||
|
JPanel centerPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
|
||||||
|
// preview pane
|
||||||
|
JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||||
|
centerPane.add(previewContainerPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Preview")); |
||||||
|
previewOwnerPane.setLayout(new BorderLayout()); |
||||||
|
previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER); |
||||||
|
previewContainerPane.add(initSelectFilePane(), BorderLayout.EAST); |
||||||
|
previewPane = new ImagePreviewPane(); |
||||||
|
previewOwnerPane.add(new JScrollPane(previewPane)); |
||||||
|
|
||||||
|
|
||||||
|
// init image file chooser.
|
||||||
|
imageFileChooser = new ImageFileChooser(); |
||||||
|
imageFileChooser.setMultiSelectionEnabled(false); |
||||||
|
return centerPane; |
||||||
|
} |
||||||
|
|
||||||
|
public JPanel initSelectFilePane() { |
||||||
|
|
||||||
|
JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||||
|
|
||||||
|
selectFilePane.setBorder(BorderFactory.createEmptyBorder(TEN, FIVE, 0, THIRTY)); |
||||||
|
|
||||||
|
defaultRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer_DEFAULT")); |
||||||
|
customRadioButton = new UIRadioButton(Inter.getLocText("FR-Designer-Widget-Style_Custom")); |
||||||
|
ButtonGroup buttonGroup = new ButtonGroup(); |
||||||
|
defaultRadioButton.setSelected(true); |
||||||
|
buttonGroup.add(defaultRadioButton); |
||||||
|
buttonGroup.add(customRadioButton); |
||||||
|
|
||||||
|
defaultRadioButton.addActionListener(getLayoutActionListener()); |
||||||
|
customRadioButton.addActionListener(getLayoutActionListener()); |
||||||
|
|
||||||
|
JPanel jp = new JPanel(new GridLayout(3, 1, 0, TEN)); |
||||||
|
jp.add(defaultRadioButton); |
||||||
|
jp.add(customRadioButton); |
||||||
|
|
||||||
|
selectPictureButton = new UIButton( |
||||||
|
Inter.getLocText("FR-Designer_Background_Image_Select")); |
||||||
|
selectPictureButton.addActionListener(getSelectPictureActionListener()); |
||||||
|
jp.add(selectPictureButton); |
||||||
|
|
||||||
|
|
||||||
|
selectFilePane.add(jp, BorderLayout.NORTH); |
||||||
|
return selectFilePane; |
||||||
|
} |
||||||
|
|
||||||
|
private ActionListener getLayoutActionListener() { |
||||||
|
return new ActionListener() { |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
emptyDataImage = null; |
||||||
|
checkCustomImage(); |
||||||
|
repaintPreviewPane(); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Select picture. |
||||||
|
*/ |
||||||
|
private ActionListener getSelectPictureActionListener() { |
||||||
|
return new ActionListener() { |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
int returnVal = imageFileChooser.showOpenDialog(ChartEmptyDataStylePane.this); |
||||||
|
if (returnVal != JFileChooser.CANCEL_OPTION) { |
||||||
|
final File selectedFile = imageFileChooser.getSelectedFile(); |
||||||
|
|
||||||
|
if (selectedFile != null && selectedFile.isFile()) { |
||||||
|
previewPane.showLoading(); |
||||||
|
if (imageWorker != null && !imageWorker.isDone()) { |
||||||
|
imageWorker = null; |
||||||
|
} |
||||||
|
imageWorker = new SwingWorker<Void, Void>() { |
||||||
|
@Override |
||||||
|
protected Void doInBackground() throws Exception { |
||||||
|
emptyDataImage = imageFileChooser.isCheckSelected() ? ImageUtils.defaultImageCompress(selectedFile) : BaseUtils.readImage(selectedFile.getPath()); |
||||||
|
CoreGraphHelper.waitForImage(emptyDataImage); |
||||||
|
repaintPreviewPane(); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}; |
||||||
|
imageWorker.execute(); |
||||||
|
} else { |
||||||
|
previewPane.setImage(null); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private void checkEmptyDataStyle() { |
||||||
|
boolean b = emptyData.getSelectedIndex() == 0; |
||||||
|
defaultRadioButton.setEnabled(b); |
||||||
|
customRadioButton.setEnabled(b); |
||||||
|
selectPictureButton.setEnabled(b); |
||||||
|
} |
||||||
|
|
||||||
|
private void checkCustomImage() { |
||||||
|
selectPictureButton.setVisible(customRadioButton.isSelected()); |
||||||
|
} |
||||||
|
|
||||||
|
private void repaintPreviewPane() { |
||||||
|
emptyDataImage = customRadioButton.isSelected() ? emptyDataImage : DEFAULT_EMPTY_DATA_IMAGE; |
||||||
|
previewPane.setImage(emptyData.getSelectedIndex() == 0 ? emptyDataImage : null); |
||||||
|
previewPane.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getIconPath() { |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Inter.getLocText("FR-Designer_Chart_Empty_Data"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean() { |
||||||
|
ChartEmptyDataStyleConf manager = ChartEmptyDataStyleConf.getInstance(); |
||||||
|
emptyData.setSelectedIndex(manager.isOpenEmptyDataStyle() == true ? 0 : 1); |
||||||
|
customRadioButton.setSelected(manager.isCustomEmptyDataStyle()); |
||||||
|
emptyDataImage = manager.getEmptyDataImage(); |
||||||
|
|
||||||
|
checkEmptyDataStyle(); |
||||||
|
checkCustomImage(); |
||||||
|
repaintPreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean() { |
||||||
|
ChartEmptyDataStyleConf manager = ChartEmptyDataStyleConf.getInstance(); |
||||||
|
|
||||||
|
manager.setOpenEmptyDataStyle(emptyData.getSelectedIndex() == 0); |
||||||
|
manager.setCustomEmptyDataStyle(customRadioButton.isSelected()); |
||||||
|
manager.setEmptyDataImage(emptyDataImage); |
||||||
|
|
||||||
|
// 通知报表整个刷新.
|
||||||
|
DesignerFrame frame = DesignerContext.getDesignerFrame(); |
||||||
|
if (frame != null) { |
||||||
|
frame.repaint(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Loading…
Reference in new issue