Jimmy.Zheng
2 years ago
18 changed files with 521 additions and 41 deletions
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 4.8 KiB |
@ -0,0 +1,74 @@
|
||||
package com.fr.design.designer.creator; |
||||
|
||||
import com.fr.design.designer.ui.ImgPanel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.widget.editors.PictureEditor; |
||||
import com.fr.design.mainframe.widget.editors.UrlLinkEditor; |
||||
import com.fr.design.mainframe.widget.renderer.PictureRenderer; |
||||
import com.fr.design.mainframe.widget.renderer.UrlLinkRenderer; |
||||
import com.fr.form.ui.PictureWidget; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.stable.ArrayUtils; |
||||
import java.awt.Dimension; |
||||
import java.awt.Image; |
||||
import java.beans.IntrospectionException; |
||||
import javax.swing.JComponent; |
||||
|
||||
/** |
||||
* |
||||
* <p>图片控件的creator</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:16 |
||||
**/ |
||||
public class XPicture extends XWidgetCreator { |
||||
|
||||
public XPicture(PictureWidget widget, Dimension dimension) { |
||||
super(widget, dimension); |
||||
} |
||||
|
||||
@Override |
||||
protected String getIconName() { |
||||
return "picture_widget_16.png"; |
||||
} |
||||
|
||||
@Override |
||||
public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { |
||||
return (CRPropertyDescriptor[]) ArrayUtils.addAll(super.supportedDescriptor(), new CRPropertyDescriptor[]{ |
||||
new CRPropertyDescriptor("picUrl", toData().getClass()) |
||||
.setI18NName(Toolkit.i18nText("Fine-Design_Basic_Widget_Type_Image")) |
||||
.setEditorClass(PictureEditor.class) |
||||
.setRendererClass(PictureRenderer.class) |
||||
.putKeyValue("category", "Fine-Design_Basic_Advanced"), |
||||
new CRPropertyDescriptor("urlLink", toData().getClass()) |
||||
.setI18NName(Toolkit.i18nText("Fine-Design_Basic_Hyperlink")) |
||||
.setEditorClass(UrlLinkEditor.class) |
||||
.setRendererClass(UrlLinkRenderer.class) |
||||
.putKeyValue( |
||||
"category", "Fine-Design_Basic_Advanced")}); |
||||
} |
||||
|
||||
@Override |
||||
protected JComponent initEditor() { |
||||
PictureWidget pictureWidget = (PictureWidget) this.data; |
||||
if (this.editor == null) { |
||||
this.editor = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
Object value = pictureWidget.getPicUrl().getValue(); |
||||
ImgPanel imgPanel = new ImgPanel(); |
||||
if (value instanceof Image) { |
||||
imgPanel.setBackgroundImage((Image) value); |
||||
imgPanel.setImageDisplayMode(pictureWidget.getShowType()); |
||||
} else { |
||||
imgPanel.setBackgroundImage(IOUtils.readImage("com/fr/design/images/form/designer/widget/picture_widget_designer_bg.png")); |
||||
imgPanel.setImageDisplayMode(0); |
||||
} |
||||
this.editor.add(imgPanel, "Center"); |
||||
} |
||||
return this.editor; |
||||
} |
||||
|
||||
@Override |
||||
public boolean canEnterIntoParaPane() { |
||||
return false; |
||||
} |
||||
} |
@ -0,0 +1,111 @@
|
||||
package com.fr.design.designer.ui; |
||||
|
||||
import com.fr.general.ImageWithSuffix; |
||||
import java.awt.Graphics; |
||||
import java.awt.Image; |
||||
import javax.swing.JComponent; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* <p>图片控件中的已选图片展示面板</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:17 |
||||
**/ |
||||
public class ImgPanel extends JComponent { |
||||
private static final long serialVersionUID = 1L; |
||||
private Image backgroundImage; |
||||
private int imageDisplayMode; |
||||
private int modeIndex; |
||||
|
||||
public ImgPanel() { |
||||
this(null, 0); |
||||
} |
||||
|
||||
public ImgPanel(Image image, int modeName) { |
||||
setBackgroundImage(image); |
||||
setImageDisplayMode(modeName); |
||||
} |
||||
|
||||
public void setBackgroundImage(Image image) { |
||||
this.backgroundImage = image; |
||||
repaint(); |
||||
} |
||||
|
||||
public Image getBackgroundImage() { |
||||
return this.backgroundImage; |
||||
} |
||||
|
||||
public void setImageDisplayMode(int modeName) { |
||||
if (modeName == 1) { |
||||
this.modeIndex = 0; |
||||
} |
||||
|
||||
if (modeName == 0) { |
||||
this.imageDisplayMode = 0; |
||||
this.modeIndex = 1; |
||||
} |
||||
|
||||
if (modeName == 2) { |
||||
this.imageDisplayMode = 2; |
||||
this.modeIndex = 2; |
||||
} |
||||
if (modeName == 4) { |
||||
this.imageDisplayMode = 4; |
||||
this.modeIndex = 3; |
||||
} |
||||
repaint(); |
||||
} |
||||
|
||||
public int getImageDisplayMode() { |
||||
return this.imageDisplayMode; |
||||
} |
||||
|
||||
@Override |
||||
protected void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
|
||||
if (this.backgroundImage != null) { |
||||
if (this.backgroundImage instanceof ImageWithSuffix) { |
||||
this.backgroundImage = ((ImageWithSuffix) backgroundImage).getImage(); |
||||
} |
||||
int width = getWidth(); |
||||
int height = getHeight(); |
||||
int imageWidth = this.backgroundImage.getWidth(this); |
||||
int imageHeight = this.backgroundImage.getHeight(this); |
||||
|
||||
switch (this.modeIndex) { |
||||
case 0: |
||||
int x = (width - imageWidth) / 2; |
||||
int y = (height - imageHeight) / 2; |
||||
g.drawImage(this.backgroundImage, x, y, this); |
||||
break; |
||||
case 1: |
||||
for (int ix = 0; ix < width; ix += imageWidth) { |
||||
for (int iy = 0; iy < height; iy += imageHeight) { |
||||
g.drawImage(this.backgroundImage, ix, iy, this); |
||||
} |
||||
} |
||||
|
||||
break; |
||||
case 2: |
||||
g.drawImage(this.backgroundImage, 0, 0, width, height, this); |
||||
break; |
||||
case 3: |
||||
double sx = 1.0 * width / imageWidth; |
||||
double sy = 1.0 * height / imageHeight; |
||||
|
||||
if (sx > sy) { |
||||
sx = sy; |
||||
width = (int) (sx * imageWidth); |
||||
} else { |
||||
sy = sx; |
||||
height = (int) (sy * imageHeight); |
||||
} |
||||
int xx = (getWidth() - width) / 2; |
||||
int yy = (getHeight() - height) / 2; |
||||
g.drawImage(this.backgroundImage, xx, yy, width, height, this); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,77 @@
|
||||
package com.fr.design.mainframe.widget.accessibles; |
||||
|
||||
import com.fr.base.Style; |
||||
import com.fr.design.DesignModelAdapter; |
||||
import com.fr.design.designer.creator.XPicture; |
||||
import com.fr.design.designer.ui.ImgPanel; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.WidgetPropertyPane; |
||||
import com.fr.design.mainframe.widget.wrappers.PictureModelWrapper; |
||||
import com.fr.design.report.SelectImagePane; |
||||
import com.fr.form.ui.PictureWidget; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.report.cell.FloatElement; |
||||
import com.fr.report.cell.cellattr.CellImage; |
||||
import javax.swing.JComponent; |
||||
|
||||
|
||||
/** |
||||
* |
||||
* <p>图片控件的图片选择、编辑器</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:13 |
||||
**/ |
||||
public class AccessiblePictureModelEditor extends UneditableAccessibleEditor { |
||||
protected FloatElement element = new FloatElement(); |
||||
private PictureWidget pic; |
||||
|
||||
public AccessiblePictureModelEditor(PictureWidget pic) { |
||||
super(new PictureModelWrapper()); |
||||
this.pic = pic; |
||||
} |
||||
|
||||
@Override |
||||
public FloatElement getValue() { |
||||
return (FloatElement) super.getValue(); |
||||
} |
||||
|
||||
@Override |
||||
protected void showEditorPane() { |
||||
final SelectImagePane imageEditorPane = new SelectImagePane(); |
||||
if (super.getValue() != null) { |
||||
this.element = ((FloatElement) super.getValue()); |
||||
} |
||||
this.element.setStyle(Style.getInstance().deriveImageLayout(this.pic.getShowType())); |
||||
imageEditorPane.populate(this.element); |
||||
final Object oldValue = this.element.getValue(); |
||||
final Style oldStyle = this.element.getStyle(); |
||||
final String oldname = this.element.getName(); |
||||
imageEditorPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
CellImage cellImage = imageEditorPane.update(); |
||||
if ((!ComparatorUtils.equals(cellImage.getImage(), oldValue)) || (!ComparatorUtils.equals(cellImage.getStyle(), oldStyle))) { |
||||
AccessiblePictureModelEditor.this.element.setValue(cellImage.getImage()); |
||||
AccessiblePictureModelEditor.this.element.setStyle(cellImage.getStyle()); |
||||
AccessiblePictureModelEditor.this.element.setName(imageEditorPane.getSelectedImage() == null ? oldname : imageEditorPane.getSelectedImage().toString()); |
||||
AccessiblePictureModelEditor.this.setValue(AccessiblePictureModelEditor.this.element); |
||||
AccessiblePictureModelEditor.this.pic.setShowType(cellImage.getStyle().getImageLayout()); |
||||
AccessiblePictureModelEditor.this.pic.setPicUrl(element); |
||||
ImgPanel p = AccessiblePictureModelEditor.this.getCurrentImgPanel(); |
||||
p.setBackgroundImage(cellImage.getBufferImage()); |
||||
p.setImageDisplayMode(cellImage.getStyle().getImageLayout()); |
||||
AccessiblePictureModelEditor.this.fireStateChanged(); |
||||
DesignModelAdapter d = DesignModelAdapter.getCurrentModelAdapter(); |
||||
d.fireTargetModified(); |
||||
} |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
|
||||
private ImgPanel getCurrentImgPanel() { |
||||
XPicture xPicture = (XPicture) WidgetPropertyPane.getInstance().getEditingFormDesigner().getSelectionModel().getSelection().getSelectedCreator(); |
||||
JComponent editor = (JComponent) xPicture.getComponent(0); |
||||
return (ImgPanel) editor.getComponent(0); |
||||
} |
||||
} |
@ -0,0 +1,57 @@
|
||||
package com.fr.design.mainframe.widget.accessibles; |
||||
|
||||
import com.fr.design.DesignModelAdapter; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; |
||||
import com.fr.design.gui.xpane.FormHyperlinkGroupPane; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.widget.wrappers.UrlLinkModelWrapper; |
||||
import com.fr.js.NameJavaScriptGroup; |
||||
import com.fr.stable.bridge.StableFactory; |
||||
|
||||
/** |
||||
* <p>表单图片控件的链接编辑器</p> |
||||
* @author Jimmy |
||||
*/ |
||||
public class AccessibleUrlLinkModelEditor extends UneditableAccessibleEditor { |
||||
private FormHyperlinkGroupPane hyperlinkPane; |
||||
|
||||
public AccessibleUrlLinkModelEditor() { |
||||
super(new UrlLinkModelWrapper()); |
||||
} |
||||
/** |
||||
* 原插件使用 |
||||
* <p>DesignerContext.getDesignerFrame().getSelectedJTemplate().getHyperLinkPaneNoPop( |
||||
* HyperlinkGroupPaneActionImpl.getInstance()));</p>获取{@see this.hyperlinkPane} |
||||
* 合并插件依赖不到,换种方式 用{@see DesignerActivator将实例注册了} |
||||
*/ |
||||
@Override |
||||
protected void showEditorPane() { |
||||
if (this.hyperlinkPane == null) { |
||||
HyperlinkGroupPaneActionProvider hyperlinkGroupPaneActionProvider = StableFactory.getMarkedInstanceObjectFromClass(HyperlinkGroupPaneActionProvider.XML_TAG,HyperlinkGroupPaneActionProvider.class); |
||||
this.hyperlinkPane = (FormHyperlinkGroupPane) DesignerContext.getDesignerFrame().getSelectedJTemplate().getHyperLinkPaneNoPop( |
||||
hyperlinkGroupPaneActionProvider); |
||||
} |
||||
BasicDialog dialog = this.hyperlinkPane.showWindow(DesignerContext.getDesignerFrame()); |
||||
dialog.addDialogActionListener(new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
super.doOk(); |
||||
NameJavaScriptGroup hyperlinks = AccessibleUrlLinkModelEditor.this.hyperlinkPane.updateJSGroup(); |
||||
AccessibleUrlLinkModelEditor.this.setValue(hyperlinks); |
||||
AccessibleUrlLinkModelEditor.this.fireStateChanged(); |
||||
DesignModelAdapter d = DesignModelAdapter.getCurrentModelAdapter(); |
||||
d.fireTargetModified(); |
||||
} |
||||
}); |
||||
this.hyperlinkPane.populate(getValue()); |
||||
|
||||
dialog.setVisible(true); |
||||
} |
||||
|
||||
@Override |
||||
public NameJavaScriptGroup getValue() { |
||||
return (NameJavaScriptGroup) super.getValue(); |
||||
} |
||||
} |
@ -0,0 +1,17 @@
|
||||
package com.fr.design.mainframe.widget.editors; |
||||
|
||||
import com.fr.design.mainframe.widget.accessibles.AccessiblePictureModelEditor; |
||||
import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; |
||||
import com.fr.form.ui.PictureWidget; |
||||
/** |
||||
* |
||||
* <p>图片控件的图片选择、编辑器</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:15 |
||||
**/ |
||||
public class PictureEditor extends AccessiblePropertyEditor { |
||||
|
||||
public PictureEditor(Object o) { |
||||
super(new AccessiblePictureModelEditor((PictureWidget) o)); |
||||
} |
||||
} |
@ -0,0 +1,17 @@
|
||||
package com.fr.design.mainframe.widget.editors; |
||||
|
||||
import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; |
||||
import com.fr.design.mainframe.widget.accessibles.AccessibleUrlLinkModelEditor; |
||||
|
||||
/** |
||||
* |
||||
* <p><p>图片控件的链接编辑器</p></p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:19 |
||||
**/ |
||||
public class UrlLinkEditor extends AccessiblePropertyEditor { |
||||
|
||||
public UrlLinkEditor() { |
||||
super(new AccessibleUrlLinkModelEditor()); |
||||
} |
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.fr.design.mainframe.widget.renderer; |
||||
|
||||
import com.fr.design.mainframe.widget.wrappers.PictureModelWrapper; |
||||
|
||||
/** |
||||
* <p>图片控件的图片编辑器的EncoderCellRenderer</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:29 |
||||
**/ |
||||
public class PictureRenderer extends EncoderCellRenderer { |
||||
|
||||
public PictureRenderer() { |
||||
super(new PictureModelWrapper()); |
||||
} |
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.fr.design.mainframe.widget.renderer; |
||||
|
||||
|
||||
import com.fr.design.mainframe.widget.wrappers.UrlLinkModelWrapper; |
||||
|
||||
/** |
||||
* <p>图片控件的链接编辑器的EncoderCellRenderer</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:29 |
||||
**/ |
||||
public class UrlLinkRenderer extends EncoderCellRenderer { |
||||
|
||||
public UrlLinkRenderer() { |
||||
super(new UrlLinkModelWrapper()); |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
package com.fr.design.mainframe.widget.wrappers; |
||||
|
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.designer.properties.Decoder; |
||||
import com.fr.design.designer.properties.Encoder; |
||||
import com.fr.report.cell.FloatElement; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
/** |
||||
* <p>图片选择器 {@link com.fr.design.mainframe.widget.accessibles.AccessiblePictureModelEditor}的 Wrapper</p> |
||||
* <p>插件中直接移入,未作改动</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:25 |
||||
**/ |
||||
public class PictureModelWrapper implements Encoder<FloatElement>, Decoder<FloatElement> { |
||||
|
||||
@Override |
||||
public FloatElement decode(String txt) { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void validate(String txt) throws ValidationException { |
||||
// do nothing
|
||||
} |
||||
|
||||
@Override |
||||
public String encode(FloatElement v) { |
||||
if (v != null) { |
||||
return v.getName(); |
||||
} |
||||
return StringUtils.EMPTY; |
||||
} |
||||
} |
@ -0,0 +1,33 @@
|
||||
package com.fr.design.mainframe.widget.wrappers; |
||||
|
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.designer.properties.Decoder; |
||||
import com.fr.design.designer.properties.Encoder; |
||||
import com.fr.js.NameJavaScriptGroup; |
||||
|
||||
/** |
||||
* <p>链接选择器 {@link com.fr.design.mainframe.widget.accessibles.AccessibleUrlLinkModelEditor}的 Wrapper</p> |
||||
* <p>插件中直接移入,未作改动</p> |
||||
* |
||||
* @author Jimmy.Zheng created on 2022/8/11 21:28 |
||||
**/ |
||||
public class UrlLinkModelWrapper implements Encoder<NameJavaScriptGroup>, Decoder<NameJavaScriptGroup> { |
||||
|
||||
@Override |
||||
public NameJavaScriptGroup decode(String txt) { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void validate(String txt) throws ValidationException { |
||||
// do nothing
|
||||
} |
||||
|
||||
@Override |
||||
public String encode(NameJavaScriptGroup v) { |
||||
if (v.size() > 0) { |
||||
return v.getNameHyperlink(0).getName(); |
||||
} |
||||
return null; |
||||
} |
||||
} |
Loading…
Reference in new issue