@ -1,5 +1,6 @@
package com.fr.design.mainframe.share.ui.block ;
import com.fr.base.FRContext ;
import com.fr.base.GraphHelper ;
import com.fr.base.iofile.attr.SharableAttrMark ;
import com.fr.design.actions.UpdateAction ;
@ -37,17 +38,24 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.Action ;
import javax.swing.Icon ;
import javax.swing.JOptionPane ;
import javax.swing.JPanel ;
import javax.swing.UIManager ;
import java.awt.BorderLayout ;
import java.awt.Color ;
import java.awt.Cursor ;
import java.awt.Dimension ;
import java.awt.Font ;
import java.awt.Graphics ;
import java.awt.Graphics2D ;
import java.awt.Image ;
import java.awt.Rectangle ;
import java.awt.RenderingHints ;
import java.awt.dnd.DnDConstants ;
import java.awt.event.ActionEvent ;
import java.awt.event.MouseEvent ;
import java.awt.font.FontRenderContext ;
import java.awt.font.LineMetrics ;
import java.util.UUID ;
/ * *
@ -67,6 +75,7 @@ public class LocalWidgetBlock extends PreviewWidgetBlock<DefaultSharableWidget>
private boolean hover ;
private final Icon markedMode = IOUtils . readIcon ( "/com/fr/base/images/share/marked.png" ) ;
private final Icon unMarkedMode = IOUtils . readIcon ( "/com/fr/base/images/share/unmarked.png" ) ;
private final Icon incompatibleMarker = IOUtils . readIcon ( "/com/fr/base/images/share/marker_incompatible.png" ) ;
public LocalWidgetBlock ( DefaultSharableWidget provider , LocalWidgetSelectPane parentPane ) {
super ( provider ) ;
@ -198,11 +207,24 @@ public class LocalWidgetBlock extends PreviewWidgetBlock<DefaultSharableWidget>
Widget creatorSource ;
String shareId ;
if ( source instanceof LocalWidgetBlock ) {
LocalWidgetBlock no = ( LocalWidgetBlock ) e . getSource ( ) ;
if ( no = = null ) {
LocalWidgetBlock widgetBlock = ( LocalWidgetBlock ) e . getSource ( ) ;
if ( widgetBlock = = null ) {
return ;
}
shareId = no . getBindInfo ( ) . getId ( ) ;
SharableWidgetProvider widget = widgetBlock . getWidget ( ) ;
if ( widget = = null ) {
return ;
}
if ( ! widget . isCompatibleWithCurrentEnv ( ) ) {
FineJOptionPane . showMessageDialog ( DesignerContext . getDesignerFrame ( ) ,
Toolkit . i18nText ( "Fine-Design_Share_Drag_And_Make_Incompatible_Component_Tip" ) ,
Toolkit . i18nText ( "Fine-Design_Basic_Error" ) ,
JOptionPane . ERROR_MESSAGE ,
UIManager . getIcon ( "OptionPane.errorIcon" )
) ;
return ;
}
shareId = widgetBlock . getBindInfo ( ) . getId ( ) ;
creatorSource = getGroup ( ) . getElCaseEditorById ( shareId ) ;
if ( creatorSource = = null ) {
ShareUIUtils . showErrorMessageDialog ( Toolkit . i18nText ( "Fine-Design_Share_Drag_Error_Info" ) ) ;
@ -211,7 +233,7 @@ public class LocalWidgetBlock extends PreviewWidgetBlock<DefaultSharableWidget>
creatorSource . setWidgetID ( UUID . randomUUID ( ) . toString ( ) ) ;
( ( AbstractBorderStyleWidget ) creatorSource ) . addWidgetAttrMark ( new SharableAttrMark ( true ) ) ;
//tab布局WCardMainBorderLayout通过反射出来的大小是960*480
XCreator xCreator = ShareComponentUtils . createXCreator ( creatorSource , shareId , no . getBindInfo ( ) ) ;
XCreator xCreator = ShareComponentUtils . createXCreator ( creatorSource , shareId , widgetBlock . getBindInfo ( ) ) ;
WidgetToolBarPane . getTarget ( ) . startDraggingBean ( xCreator ) ;
lastPressEvent = null ;
this . setBorder ( null ) ;
@ -221,6 +243,13 @@ public class LocalWidgetBlock extends PreviewWidgetBlock<DefaultSharableWidget>
@Override
public void paint ( Graphics g ) {
super . paint ( g ) ;
Graphics2D g2d = ( Graphics2D ) g ;
boolean isUnusable = ! getWidget ( ) . isCompatibleWithCurrentEnv ( ) ;
if ( isUnusable ) {
paintUnusableMask ( g2d ) ;
}
//绘制删除标志
if ( isEdit ) {
Icon icon = isMarked ? markedMode : unMarkedMode ;
@ -235,6 +264,42 @@ public class LocalWidgetBlock extends PreviewWidgetBlock<DefaultSharableWidget>
}
}
protected void paintUnusableMask ( Graphics2D g2d ) {
Color oldColor = g2d . getColor ( ) ;
Font oldFont = g2d . getFont ( ) ;
g2d . setRenderingHint ( RenderingHints . KEY_ANTIALIASING , RenderingHints . VALUE_ANTIALIAS_ON ) ;
Dimension coverDim = getCoverDimension ( ) ;
double canvasX = 0 ;
double canvasY = 0 ;
double canvasW = coverDim . getWidth ( ) ;
double canvasH = coverDim . getHeight ( ) ;
g2d . setColor ( new Color ( 0 . 0F , 0 . 0F , 0 . 0F , 0 . 4F ) ) ;
GraphHelper . fillRect ( g2d , canvasX , canvasY , canvasW , canvasH ) ;
g2d . setColor ( new Color ( 0 . 0F , 0 . 0F , 0 . 0F , 0 . 5F ) ) ;
GraphHelper . fillRect ( g2d , canvasX , canvasH - 16 , canvasW , 16 ) ;
String tipText = Toolkit . i18nText ( "Fine-Design_Share_Incompatible_Version_Tip" ) ;
Font tipFont = FRContext . getDefaultValues ( ) . getFRFont ( ) . deriveFont ( 8 . 0F ) ;
FontRenderContext frc = g2d . getFontRenderContext ( ) ;
double tipTextWidth = GraphHelper . stringWidth ( tipText , tipFont , frc ) ;
LineMetrics metrics = tipFont . getLineMetrics ( tipText , frc ) ;
double tipTextHeight = metrics . getHeight ( ) ;
g2d . setColor ( Color . WHITE ) ;
g2d . setFont ( tipFont ) ;
GraphHelper . drawString ( g2d , tipText , canvasX + ( canvasW - tipTextWidth ) / 2 . 0F , canvasY + canvasH - ( 16 - tipTextHeight ) / 2 . 0F ) ;
int markerX = ( int ) ( canvasX + ( canvasW - incompatibleMarker . getIconWidth ( ) ) / 2 ) ;
int markerY = ( int ) ( canvasY + ( canvasH - incompatibleMarker . getIconHeight ( ) ) / 2 ) ;
incompatibleMarker . paintIcon ( this , g2d , markerX , markerY ) ;
g2d . setColor ( oldColor ) ;
g2d . setFont ( oldFont ) ;
}
/ * *
* 由鼠标释放时调用该方法来触发左键点击事件
* /