@ -1,6 +1,7 @@
package com.fr.design.mainframe ;
package com.fr.design.mainframe ;
import com.fine.theme.icon.LazyIcon ;
import com.fine.theme.icon.LazyIcon ;
import com.fine.theme.utils.FineUIUtils ;
import com.formdev.flatlaf.ui.FlatUIUtils ;
import com.formdev.flatlaf.ui.FlatUIUtils ;
import com.fr.base.GraphHelper ;
import com.fr.base.GraphHelper ;
import com.fr.base.svg.IconUtils ;
import com.fr.base.svg.IconUtils ;
@ -27,17 +28,16 @@ import com.fr.report.report.TemplateReport;
import com.fr.report.worksheet.WorkSheet ;
import com.fr.report.worksheet.WorkSheet ;
import javax.swing.Icon ;
import javax.swing.Icon ;
import javax.swing.JComponent ;
import javax.swing.JOptionPane ;
import javax.swing.JOptionPane ;
import javax.swing.JPanel ;
import javax.swing.JPanel ;
import javax.swing.JPopupMenu ;
import javax.swing.JPopupMenu ;
import javax.swing.SwingUtilities ;
import javax.swing.SwingUtilities ;
import javax.swing.UIManager ;
import javax.swing.UIManager ;
import java.awt.BasicStroke ;
import java.awt.BorderLayout ;
import java.awt.BorderLayout ;
import java.awt.Color ;
import java.awt.Color ;
import java.awt.Dimension ;
import java.awt.Dimension ;
import java.awt.FontMetrics ;
import java.awt.FontMetrics ;
import java.awt.BasicStroke ;
import java.awt.Graphics ;
import java.awt.Graphics ;
import java.awt.Graphics2D ;
import java.awt.Graphics2D ;
import java.awt.Point ;
import java.awt.Point ;
@ -49,22 +49,26 @@ import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent ;
import java.awt.event.MouseEvent ;
import java.awt.event.MouseListener ;
import java.awt.event.MouseListener ;
import java.awt.event.MouseMotionListener ;
import java.awt.event.MouseMotionListener ;
import java.awt.geom.Path2D ;
import java.awt.geom.RoundRectangle2D ;
import java.awt.geom.RoundRectangle2D ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.List ;
import static com.fine.theme.utils.FineClientProperties.setStyle ;
/ * *
/ * *
* NameTabPane of sheets
* NameTabPane of sheets
*
*
* @editor zhou
* @author zhou
* @since 2012 - 3 - 26下午1 : 45 : 53
* @since 11 . 0
* Created on 2012 - 3 - 26
* /
* /
public class SheetNameTabPane extends JComponent implements MouseListener , MouseMotionListener , RemoveListener {
public class SheetNameTabPane extends JPanel implements MouseListener , MouseMotionListener , RemoveListener {
private static final Color BORDER_COLOR = UIManager . getColor ( "Center.ZoneBorderColor" ) ;
private Color borderColor = UIManager . getColor ( "Center.ZoneBorderColor" ) ;
private static final Color BACKGROUND_COLOR = UIManager . getColor ( "Center.OuterShadowColor" ) ;
private Color backgroundColor = UIManager . getColor ( "Center.OuterShadowColor" ) ;
private static final Color SELECTED_COLOR = UIManager . getColor ( "South.SheetSelectedColor" ) ;
private Color selectedColor = UIManager . getColor ( "South.SheetSelectedColor" ) ;
private static final Color FONT_COLOR = UIManager . getColor ( "DarkenedFontColor" ) ;
private Color fontColor = UIManager . getColor ( "DarkenedFontColor" ) ;
private static final Icon ADD_WORK_SHEET = new LazyIcon ( "add_worksheet" ) ;
private static final Icon ADD_WORK_SHEET = new LazyIcon ( "add_worksheet" ) ;
protected static final Icon ADD_POLY_SHEET = new LazyIcon ( "add_polysheet" ) ;
protected static final Icon ADD_POLY_SHEET = new LazyIcon ( "add_polysheet" ) ;
@ -81,12 +85,12 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
private static final int POLY_TOSHEET_LEFT = 30 ; // 添加poly按钮左侧距sheet面板右侧的距离
private static final int POLY_TOSHEET_LEFT = 30 ; // 添加poly按钮左侧距sheet面板右侧的距离
private static final int POLY_TOSHEET_RIGHT = 50 ; // 添加poly按钮右侧距sheet面板右侧的距离
private static final int POLY_TOSHEET_RIGHT = 50 ; // 添加poly按钮右侧距sheet面板右侧的距离
private static final int ICON_SEP_DISTANCE = UIManager . getInt ( "South.SheetIconSepDistance" ) ;
private int iconSepDistance = UIManager . getInt ( "South.SheetIconSepDistance" ) ;
private static final int SHEET_ICON_GAP = UIManager . getInt ( "South.SheetIconGap" ) ; // 每个sheet图标之间的距离
private int sheetIconGap = UIManager . getInt ( "South.SheetIconGap" ) ; // 每个sheet图标之间的距离
private static final int TOOLBAR_HEIGHT = UIManager . getInt ( "South.SheetBarHeight" ) ;
private int toolbarHeight = UIManager . getInt ( "South.SheetBarHeight" ) ;
private static final int ADD_WIDTH_BY_SHEETNAME = UIManager . getInt ( "South.SheetAddWidth" ) ; //sheet名字的文本到图标边框的距离
private int addWidthBySheetname = UIManager . getInt ( "South.SheetAddWidth" ) ; //sheet名字的文本到图标边框的距离
private static final int TAB_BUTTON_GAP = UIManager . getInt ( "South.SheetTabButtonGap" ) ; // 两个添加按钮与其他组件预留的间隔
private int tabButtonGap = UIManager . getInt ( "South.SheetTabButtonGap" ) ; // 两个添加按钮与其他组件预留的间隔
private static final int SHEET_TAB_RADIUS = UIManager . getInt ( "South.SheetTabRadius" ) ; // sheet标签栏圆角属性
private int sheetTabRadius = UIManager . getInt ( "South.SheetTabRadius" ) ; // sheet标签栏圆角属性
/ * *
/ * *
* 左移和右移按钮
* 左移和右移按钮
@ -160,12 +164,12 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
this . addMouseListener ( this ) ;
this . addMouseListener ( this ) ;
this . addMouseMotionListener ( this ) ;
this . addMouseMotionListener ( this ) ;
this . setBorder ( null ) ;
this . setBorder ( null ) ;
this . setForeground ( FONT_COLOR ) ;
this . setForeground ( fontColor ) ;
this . setBackground ( BACKGROUND_COLOR ) ;
setStyle ( this , "LightGreyPanel" ) ;
leftButton = new UIButton ( LEFT_ICON ) {
leftButton = new UIButton ( LEFT_ICON ) {
@Override
@Override
public Dimension getPreferredSize ( ) {
public Dimension getPreferredSize ( ) {
return new Dimension ( super . getPreferredSize ( ) . width , TOOLBAR_HEIGHT ) ;
return new Dimension ( super . getPreferredSize ( ) . width , toolbarHeight ) ;
}
}
} ;
} ;
leftButton . set4ToolbarButton ( ) ;
leftButton . set4ToolbarButton ( ) ;
@ -173,7 +177,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
rightButton = new UIButton ( RIGHT_ICON ) {
rightButton = new UIButton ( RIGHT_ICON ) {
@Override
@Override
public Dimension getPreferredSize ( ) {
public Dimension getPreferredSize ( ) {
return new Dimension ( super . getPreferredSize ( ) . width , TOOLBAR_HEIGHT ) ;
return new Dimension ( super . getPreferredSize ( ) . width , toolbarHeight ) ;
}
}
} ;
} ;
rightButton . set4ToolbarButton ( ) ;
rightButton . set4ToolbarButton ( ) ;
@ -332,7 +336,6 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
* /
* /
@Override
@Override
public void paintComponent ( Graphics g ) {
public void paintComponent ( Graphics g ) {
super . paintComponent ( g ) ;
isAuthorityEditing = DesignerMode . isAuthorityEditing ( ) ;
isAuthorityEditing = DesignerMode . isAuthorityEditing ( ) ;
showCount = 0 ;
showCount = 0 ;
// 开始画那些Tab.
// 开始画那些Tab.
@ -343,7 +346,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
double textHeight = this . getSize ( ) . getHeight ( ) - 1 ;
double textHeight = this . getSize ( ) . getHeight ( ) - 1 ;
widthArray = calculateWidthArray ( ) ;
widthArray = calculateWidthArray ( ) ;
int operationWidth = TAB_BUTTON_GAP + getAddWorkSheet ( ) . getIconWidth ( ) + ICON_SEP_DISTANCE + ADD_POLY_SHEET . getIconWidth ( ) ;
int operationWidth = tabButtonGap + getAddWorkSheet ( ) . getIconWidth ( ) + iconSepDistance + ADD_POLY_SHEET . getIconWidth ( ) ;
double maxWidth = getWidth ( ) - operationWidth - buttonPane . getWidth ( ) ; // 最大宽度
double maxWidth = getWidth ( ) - operationWidth - buttonPane . getWidth ( ) ; // 最大宽度
paintBackgroundAndLine ( g2d , textHeight , maxWidth , charWidth , textAscent ) ;
paintBackgroundAndLine ( g2d , textHeight , maxWidth , charWidth , textAscent ) ;
checkButton ( showCount < widthArray . length ) ;
checkButton ( showCount < widthArray . length ) ;
@ -361,11 +364,18 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
}
}
private void paintBackgroundAndLine ( Graphics2D g2d , double textHeight , double maxWidth , int charWidth , int textAscent ) {
private void paintBackgroundAndLine ( Graphics2D g2d , double textHeight , double maxWidth , int charWidth , int textAscent ) {
int arc = FineUIUtils . getAndScaleInt ( "Center.arc" , 10 ) / 2 ;
Path2D roundedPath = FineUIUtils . createPartRoundRectangle ( 0 , 0 , this . getWidth ( ) , this . getHeight ( ) , 0 , 0 , 0 , arc ) ;
FlatUIUtils . setRenderingHints ( g2d ) ;
g2d . setColor ( getBackground ( ) ) ;
g2d . fill ( roundedPath ) ;
showCount = 0 ;
showCount = 0 ;
int addIconlocation = 0 ;
int addIconlocation = 0 ;
WorkBook workBook = reportComposite . getEditingWorkBook ( ) ;
WorkBook workBook = reportComposite . getEditingWorkBook ( ) ;
int reportCount = workBook . getReportCount ( ) ;
int reportCount = workBook . getReportCount ( ) ;
double textX = SHEET_ICON_GAP ;
double textX = sheetIconGap ;
for ( int i = scrollIndex ; i < reportCount ; i + + ) {
for ( int i = scrollIndex ; i < reportCount ; i + + ) {
lastOneIndex = i ;
lastOneIndex = i ;
TemplateReport templateReport = workBook . getTemplateReport ( i ) ;
TemplateReport templateReport = workBook . getTemplateReport ( i ) ;
@ -397,20 +407,20 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
}
}
// 画两个添加sheet图标
// 画两个添加sheet图标
iconLocation = isOvertakeWidth ? ( int ) ( maxWidth ) : addIconlocation + TAB_BUTTON_GAP ;
iconLocation = isOvertakeWidth ? ( int ) ( maxWidth ) : addIconlocation + tabButtonGap ;
paintAddButton ( g2d ) ;
paintAddButton ( g2d ) ;
}
}
protected void paintAddButton ( Graphics2D g2d ) {
protected void paintAddButton ( Graphics2D g2d ) {
getAddWorkSheet ( ) . paintIcon ( this , g2d , iconLocation , 3 ) ;
getAddWorkSheet ( ) . paintIcon ( this , g2d , iconLocation , 3 ) ;
ADD_POLY_SHEET . paintIcon ( this , g2d , iconLocation + getAddWorkSheet ( ) . getIconWidth ( ) + ICON_SEP_DISTANCE , 3 ) ;
ADD_POLY_SHEET . paintIcon ( this , g2d , iconLocation + getAddWorkSheet ( ) . getIconWidth ( ) + iconSepDistance , 3 ) ;
}
}
private void paintTab ( Graphics2D g2d , double textHeight , double textX , String sheetName , int charWidth , int textAscent , int i , boolean isNeedPaintAuthority , boolean isSelected ) {
private void paintTab ( Graphics2D g2d , double textHeight , double textX , String sheetName , int charWidth , int textAscent , int i , boolean isNeedPaintAuthority , boolean isSelected ) {
Color backgroundColor = isSelected ? SELECTED_COLOR : ( isNeedPaintAuthority ? UIConstants . AUTHORITY_SHEET_UNSELECTED : getBackground ( ) ) ;
Color backgroundColor = isSelected ? selectedColor : ( isNeedPaintAuthority ? UIConstants . AUTHORITY_SHEET_UNSELECTED : getBackground ( ) ) ;
g2d . setColor ( backgroundColor ) ;
g2d . setColor ( backgroundColor ) ;
// 绘制圆角矩形背景
// 绘制圆角矩形背景
@ -418,11 +428,11 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
FlatUIUtils . setRenderingHints ( g2d ) ;
FlatUIUtils . setRenderingHints ( g2d ) ;
int width = widthArray [ i ] ;
int width = widthArray [ i ] ;
int height = ( int ) textHeight + SHEET_TAB_RADIUS ;
int height = ( int ) textHeight + sheetTabRadius ;
RoundRectangle2D . Double backgroundRect = new RoundRectangle2D . Double ( textX , - 10 , width , height , SHEET_TAB_RADIUS , SHEET_TAB_RADIUS ) ;
RoundRectangle2D . Double backgroundRect = new RoundRectangle2D . Double ( textX , - 10 , width , height , sheetTabRadius , sheetTabRadius ) ;
g2d . fill ( backgroundRect ) ;
g2d . fill ( backgroundRect ) ;
g2d . setColor ( BORDER_COLOR ) ;
g2d . setColor ( borderColor ) ;
g2d . setStroke ( new BasicStroke ( 1 ) ) ;
g2d . setStroke ( new BasicStroke ( 1 ) ) ;
g2d . draw ( backgroundRect ) ;
g2d . draw ( backgroundRect ) ;
}
}
@ -475,7 +485,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
int [ ] widthArray = new int [ reportCount ] ;
int [ ] widthArray = new int [ reportCount ] ;
for ( int i = 0 ; i < reportCount ; i + + ) {
for ( int i = 0 ; i < reportCount ; i + + ) {
String sheetName = workBook . getReportName ( i ) ;
String sheetName = workBook . getReportName ( i ) ;
widthArray [ i ] = fm . stringWidth ( sheetName ) + charWidth * 2 - 1 + ADD_WIDTH_BY_SHEETNAME ;
widthArray [ i ] = fm . stringWidth ( sheetName ) + charWidth * 2 - 1 + addWidthBySheetname ;
}
}
return widthArray ;
return widthArray ;
}
}
@ -595,7 +605,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
this . setReleasedXY ( e . getX ( ) , e . getY ( ) ) ;
this . setReleasedXY ( e . getX ( ) , e . getY ( ) ) ;
int width = 0 ;
int width = 0 ;
for ( int w : widthArray ) {
for ( int w : widthArray ) {
width = width + w + SHEET_ICON_GAP ;
width = width + w + sheetIconGap ;
}
}
if ( isAuthorityEditing ) {
if ( isAuthorityEditing ) {
return ;
return ;
@ -759,7 +769,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse
widthArray = calculateWidthArray ( ) ;
widthArray = calculateWidthArray ( ) ;
int width = widthArray [ i ] ;
int width = widthArray [ i ] ;
textX + = width + 1 ;
textX + = width + 1 ;
int operationWidth = TAB_BUTTON_GAP + getAddWorkSheet ( ) . getIconWidth ( ) + ICON_SEP_DISTANCE + ADD_POLY_SHEET . getIconWidth ( ) ;
int operationWidth = tabButtonGap + getAddWorkSheet ( ) . getIconWidth ( ) + iconSepDistance + ADD_POLY_SHEET . getIconWidth ( ) ;
double maxWidth = getWidth ( ) - operationWidth - buttonPane . getWidth ( ) ; // 最大宽度
double maxWidth = getWidth ( ) - operationWidth - buttonPane . getWidth ( ) ; // 最大宽度
if ( i < widthArray . length - 1 & & textX + widthArray [ i + 1 ] + 1 > maxWidth ) {
if ( i < widthArray . length - 1 & & textX + widthArray [ i + 1 ] + 1 > maxWidth ) {
isOvertakeWidth = true ;
isOvertakeWidth = true ;