@ -1,7 +1,6 @@
package com.fr.design.file ;
package com.fr.design.file ;
import com.fr.base.BaseUtils ;
import com.fr.base.GraphHelper ;
import com.fr.base.GraphHelper ;
import com.fr.base.svg.IconUtils ;
import com.fr.base.svg.IconUtils ;
import com.fr.base.vcs.DesignerMode ;
import com.fr.base.vcs.DesignerMode ;
@ -19,7 +18,6 @@ import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.TemplateSavingChecker ;
import com.fr.design.mainframe.TemplateSavingChecker ;
import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager ;
import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager ;
import com.fr.design.utils.DesignUtils ;
import com.fr.design.utils.DesignUtils ;
import com.fr.design.utils.TemplateUtils ;
import com.fr.design.utils.gui.GUICoreUtils ;
import com.fr.design.utils.gui.GUICoreUtils ;
import com.fr.design.utils.gui.GUIPaintUtils ;
import com.fr.design.utils.gui.GUIPaintUtils ;
import com.fr.design.worker.WorkerManager ;
import com.fr.design.worker.WorkerManager ;
@ -42,11 +40,11 @@ import javax.swing.JComponent;
import javax.swing.JMenu ;
import javax.swing.JMenu ;
import javax.swing.JMenuItem ;
import javax.swing.JMenuItem ;
import javax.swing.JOptionPane ;
import javax.swing.JOptionPane ;
import javax.swing.JPanel ;
import javax.swing.JSeparator ;
import javax.swing.JSeparator ;
import javax.swing.MenuElement ;
import javax.swing.MenuElement ;
import javax.swing.SwingConstants ;
import javax.swing.SwingConstants ;
import javax.swing.SwingUtilities ;
import javax.swing.SwingUtilities ;
import javax.swing.ToolTipManager ;
import javax.swing.plaf.basic.BasicMenuItemUI ;
import javax.swing.plaf.basic.BasicMenuItemUI ;
import java.awt.AWTEvent ;
import java.awt.AWTEvent ;
import java.awt.AlphaComposite ;
import java.awt.AlphaComposite ;
@ -70,6 +68,8 @@ import java.awt.geom.Line2D;
import java.awt.geom.Path2D ;
import java.awt.geom.Path2D ;
import java.awt.geom.RoundRectangle2D ;
import java.awt.geom.RoundRectangle2D ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.stream.Collectors ;
import static com.fr.design.dialog.FineJOptionPane.showConfirmDialog ;
import static com.fr.design.dialog.FineJOptionPane.showConfirmDialog ;
import static javax.swing.JOptionPane.OK_CANCEL_OPTION ;
import static javax.swing.JOptionPane.OK_CANCEL_OPTION ;
@ -213,6 +213,35 @@ public class MultiTemplateTabPane extends JComponent {
} ) ;
} ) ;
}
}
/ * *
* 模板可以关闭的条件
* /
class CloseCondition {
private CloseOption closeOption ;
public CloseCondition ( CloseOption closeOption ) {
this . closeOption = closeOption ;
}
/ * *
* 判断模板是否可以关闭 , 两个条件 : 1 、 是否满足CloseOption里面的条件 ( 在左侧 、 在右侧等 ) 2 、 是否和当前正在编辑模板属于同一种模板tab操作类型
* @param closeJTemplate
* @param tplIndex
* @param i
* @return
* /
public boolean shouldClose ( JTemplate closeJTemplate , int tplIndex , int i ) {
boolean matchOption = this . closeOption . shouldClose ( tplIndex , i ) ;
JTemplate currentTemplate = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
if ( ! JTemplate . isValid ( currentTemplate ) ) {
return matchOption ;
}
return matchOption & & ComparatorUtils . equals ( closeJTemplate . getTemplateTabOperatorType ( ) ,
currentTemplate . getTemplateTabOperatorType ( ) ) ;
}
}
enum CloseOption {
enum CloseOption {
Left ( Toolkit . i18nText ( "Fine-Design_Close_templates_To_The_Left" ) ) {
Left ( Toolkit . i18nText ( "Fine-Design_Close_templates_To_The_Left" ) ) {
@Override
@Override
@ -323,29 +352,34 @@ public class MultiTemplateTabPane extends JComponent {
@Override
@Override
public void actionPerformed ( ActionEvent e ) {
public void actionPerformed ( ActionEvent e ) {
SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane ( false ) ;
//只有关闭所有模板才需要判断当前模板,关闭左侧、右侧、其他都不需要
if ( saveSomeTempaltePane . showSavePane ( ) ) {
SaveSomeTemplatePane saveSomeTemplatePane = new SaveSomeTemplatePane ( option = = CloseOption . All ) ;
CloseCondition closeCondition = new CloseCondition ( option ) ;
if ( saveSomeTemplatePane . showSavePane ( closeCondition , false ) ) {
JTemplate < ? , ? > [ ] templates = new JTemplate < ? , ? > [ openedTemplate . size ( ) ] ;
JTemplate < ? , ? > [ ] templates = new JTemplate < ? , ? > [ openedTemplate . size ( ) ] ;
for ( int i = 0 ; i < openedTemplate . size ( ) ; i + + ) {
for ( int i = 0 ; i < openedTemplate . size ( ) ; i + + ) {
templates [ i ] = openedTemplate . get ( i ) ;
templates [ i ] = openedTemplate . get ( i ) ;
}
}
JTemplate < ? , ? > currentTemplate = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
JTemplate < ? , ? > currentTemplate = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
closeTemplate ( templates , currentTemplate ) ;
closeTemplate ( closeCondition , templates , currentTemplate ) ;
if ( option = = CloseOption . All ) {
if ( openedTemplate . size ( ) = = 0 ) {
DesignerContext . getDesignerFrame ( ) . addAndActivateJTemplate ( ) ;
DesignerContext . getDesignerFrame ( ) . addAndActivateJTemplate ( ) ;
} else if ( option = = CloseOption . All ) {
//openedTemplate(0)是JVirtualTemplate时需重新打开
openedTemplate . get ( 0 ) . activeOldJTemplate ( ) ;
} else {
} else {
DesignerContext . getDesignerFrame ( ) . activateJTemplate ( currentTemplate ) ;
currentTemplate . activeOldJTemplate ( ) ;
}
}
MultiTemplateTabPane . getInstance ( ) . repaint ( ) ;
MultiTemplateTabPane . getInstance ( ) . repaint ( ) ;
}
}
}
}
private void closeTemplate ( JTemplate < ? , ? > [ ] templates , JTemplate < ? , ? > currentTemplate ) {
private void closeTemplate ( CloseCondition closeCondition , JTemplate < ? , ? > [ ] templates , JTemplate < ? , ? > currentTemplate ) {
for ( int i = 0 ; i < templates . length ; i + + ) {
for ( int i = 0 ; i < templates . length ; i + + ) {
if ( op tion. shouldClose ( tplIndex , i ) ) {
if ( closeCondi tion. shouldClose ( templates [ i ] , tplIndex , i ) ) {
JTemplate < ? , ? > jTemplate = templates [ i ] ;
JTemplate < ? , ? > jTemplate = templates [ i ] ;
if ( jTemplate = = currentTemplate ) {
if ( jTemplate = = currentTemplate ) {
currentTemplate = option = = CloseOption . All ? null : templates [ tplIndex ] ;
currentTemplate = option = = CloseOption . All ? null : templates [ tplIndex ] ;
@ -378,6 +412,46 @@ public class MultiTemplateTabPane extends JComponent {
return openedTemplate . get ( selectedIndex ) ;
return openedTemplate . get ( selectedIndex ) ;
}
}
/ * *
* 关闭所有指定模板tab操作类型的模板
* @param operatorType
* /
public void closeOtherByOperatorType ( String operatorType ) {
JTemplate < ? , ? > currentEditingTemplate = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane ( false ) ;
if ( saveSomeTempaltePane . showSavePane ( ) ) {
List < JTemplate < ? , ? > > openedTemplate = HistoryTemplateListCache . getInstance ( ) . getHistoryList ( ) ;
JTemplate < ? , ? > [ ] templates = new JTemplate < ? , ? > [ openedTemplate . size ( ) ] ;
for ( int i = 0 ; i < openedTemplate . size ( ) ; i + + ) {
templates [ i ] = openedTemplate . get ( i ) ;
}
closeTemplate ( templates , currentEditingTemplate , operatorType ) ;
DesignerContext . getDesignerFrame ( ) . activateJTemplate ( currentEditingTemplate ) ;
MultiTemplateTabPane . getInstance ( ) . repaint ( ) ;
}
}
/ * *
* 关闭指定的非当前编辑模板
* @param templates
* @param operatorType
* /
private static void closeTemplate ( JTemplate < ? , ? > [ ] templates , JTemplate < ? , ? > currentEditingTemplate , String operatorType ) {
for ( int i = 0 ; i < templates . length ; i + + ) {
JTemplate < ? , ? > jTemplate = templates [ i ] ;
boolean needClose = ComparatorUtils . equals ( operatorType , jTemplate . getTemplateTabOperatorType ( ) )
& & jTemplate ! = currentEditingTemplate ;
if ( ! needClose ) {
continue ;
}
MultiTemplateTabPane . getInstance ( ) . closeFormat ( jTemplate ) ;
HistoryTemplateListCache . getInstance ( ) . closeSelectedReport ( jTemplate ) ;
MultiTemplateTabPane . getInstance ( ) . closeAndFreeLock ( jTemplate ) ;
}
}
/ * *
/ * *
* 关闭掉当前已打开文件列表中指定的文件
* 关闭掉当前已打开文件列表中指定的文件
@ -478,11 +552,7 @@ public class MultiTemplateTabPane extends JComponent {
private String tempalteShowName ( JTemplate < ? , ? > template ) {
private String tempalteShowName ( JTemplate < ? , ? > template ) {
String name = TemplateUtils . createLockeTemplatedName ( template , template . getTemplateName ( ) ) ;
return template . getTabShowName ( template ) ;
if ( ! template . isSaved ( ) & & ! name . endsWith ( " *" ) ) {
name + = " *" ;
}
return name ;
}
}
/ * *
/ * *
@ -500,40 +570,7 @@ public class MultiTemplateTabPane extends JComponent {
private void showListDown ( ) {
private void showListDown ( ) {
UIScrollPopUpMenu menu = MultiTemplateTabMenuFactory . getInstance ( ) . createMenu ( ) ;
UIScrollPopUpMenu menu = new UIScrollPopUpMenu ( ) ;
menu . setBorder ( BorderFactory . createEmptyBorder ( - 3 , 3 , 3 , 0 ) ) ;
menu . add ( initCloseOther ( ) ) ;
JSeparator separator = new JSeparator ( ) {
@Override
public Dimension getPreferredSize ( ) {
Dimension d = super . getPreferredSize ( ) ;
d . height = 1 ;
return d ;
}
} ;
menu . add ( new JPanel ( ) {
@Override
public Dimension getPreferredSize ( ) {
Dimension d = super . getPreferredSize ( ) ;
d . height = 1 ;
return d ;
}
} ) ;
separator . setForeground ( UIConstants . LINE_COLOR ) ;
menu . add ( separator ) ;
menu . add ( new JPanel ( ) {
@Override
public Dimension getPreferredSize ( ) {
Dimension d = super . getPreferredSize ( ) ;
d . height = 1 ;
return d ;
}
} ) ;
UIMenuItem [ ] items = createListDownTemplate ( ) ;
for ( int i = 0 ; i < items . length ; i + + ) {
menu . add ( items [ i ] ) ;
}
GUICoreUtils . showPopupMenu ( menu , MultiTemplateTabPane . getInstance ( ) , MultiTemplateTabPane . getInstance ( ) . getWidth ( ) - menu . getPreferredSize ( ) . width , getY ( ) - 1 + getHeight ( ) ) ;
GUICoreUtils . showPopupMenu ( menu , MultiTemplateTabPane . getInstance ( ) , MultiTemplateTabPane . getInstance ( ) . getWidth ( ) - menu . getPreferredSize ( ) . width , getY ( ) - 1 + getHeight ( ) ) ;
}
}
@ -583,6 +620,9 @@ public class MultiTemplateTabPane extends JComponent {
//从可以开始展示在tab面板上的tab开始画
//从可以开始展示在tab面板上的tab开始画
for ( int i = minPaintIndex ; i < = maxPaintIndex ; i + + ) {
for ( int i = minPaintIndex ; i < = maxPaintIndex ; i + + ) {
JTemplate template = openedTemplate . get ( i ) ;
JTemplate template = openedTemplate . get ( i ) ;
if ( ! showJTemplateTab ( template ) ) {
continue ;
}
Icon icon = template . getIcon ( ) ;
Icon icon = template . getIcon ( ) ;
String name = tempalteShowName ( template ) ;
String name = tempalteShowName ( template ) ;
//如果tab名字的长度大于最大能显示的英文字符长度,则进行省略号处理
//如果tab名字的长度大于最大能显示的英文字符长度,则进行省略号处理
@ -717,13 +757,67 @@ public class MultiTemplateTabPane extends JComponent {
minPaintIndex = 0 ;
minPaintIndex = 0 ;
maxPaintIndex = openedTemplate . size ( ) - 1 ;
maxPaintIndex = openedTemplate . size ( ) - 1 ;
}
}
//需要根据每个tab的宽度重新check下实际的maxPaintIndex和minPaintIndex
checkActualPaintIndex ( ) ;
}
/ * *
* 先计算出需要补充的tab个数
* @return
* /
private int calTabCountComplemented ( ) {
int a = 0 ;
for ( int i = minPaintIndex ; i < = maxPaintIndex ; i + + ) {
JTemplate template = openedTemplate . get ( i ) ;
if ( ! showJTemplateTab ( template ) ) {
a + + ;
}
}
return a ;
}
/ * *
* 由于可能存在宽度为0的tab , 所以这边需要重新check下 , 先往后补 , 再往前补
* /
private void checkActualPaintIndex ( ) {
int tabCount = calTabCountComplemented ( ) ;
if ( tabCount = = 0 ) {
return ;
}
if ( maxPaintIndex < openedTemplate . size ( ) - 1 ) {
for ( int i = maxPaintIndex + 1 ; i < openedTemplate . size ( ) ; i + + ) {
JTemplate template = openedTemplate . get ( i ) ;
if ( showJTemplateTab ( template ) ) {
tabCount - - ;
}
maxPaintIndex + + ;
if ( tabCount = = 0 ) {
return ;
}
}
}
if ( minPaintIndex > 0 ) {
for ( int i = minPaintIndex - 1 ; i > = 0 ; i - - ) {
JTemplate template = openedTemplate . get ( i ) ;
if ( showJTemplateTab ( template ) ) {
tabCount - - ;
}
minPaintIndex - - ;
if ( tabCount = = 0 ) {
return ;
}
}
}
}
}
//个数小于最多能容纳的个数的情况下,看看宽度每个要画多少
//个数小于最多能容纳的个数的情况下,看看宽度每个要画多少
private void calculateRealAverageWidth ( double maxwidth , int templateNum ) {
private void calculateRealAverageWidth ( double maxwidth , int templateNum ) {
JTemplate jTemplate = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
List < JTemplate < ? , ? > > showTemplates = getOpenedJTemplatesByOperator ( jTemplate . getTemplateTabOperatorType ( ) ) ;
int num = openedTemplate . size ( ) > templateNum ? templateNum : openedTemplate . size ( ) ;
int num = Math . min ( showTemplates . size ( ) , templateNum ) ;
realWidth = ( int ) ( maxwidth / ( num ) ) ;
realWidth = ( int ) ( maxwidth / ( num ) ) ;
if ( realWidth > MAXWIDTH ) {
if ( realWidth > MAXWIDTH ) {
realWidth = MAXWIDTH ;
realWidth = MAXWIDTH ;
@ -932,7 +1026,7 @@ public class MultiTemplateTabPane extends JComponent {
activePrevTemplateAfterClose ( ) ;
activePrevTemplateAfterClose ( ) ;
}
}
private void closeAndFreeLock ( @Nonnull JTemplate < ? , ? > template ) {
public void closeAndFreeLock ( @Nonnull JTemplate < ? , ? > template ) {
FILE file = template . getEditingFILE ( ) ;
FILE file = template . getEditingFILE ( ) ;
// 只有是环境内的文件,才执行释放锁
// 只有是环境内的文件,才执行释放锁
if ( file ! = null & & file . isEnvFile ( ) ) {
if ( file ! = null & & file . isEnvFile ( ) ) {
@ -986,9 +1080,12 @@ public class MultiTemplateTabPane extends JComponent {
// selectIndex 没有变化,但是对应的模板已经变成了前一张模板
// selectIndex 没有变化,但是对应的模板已经变成了前一张模板
if ( closeIconIndex = = selectedIndex | | isCloseCurrent ) {
if ( closeIconIndex = = selectedIndex | | isCloseCurrent ) {
// 如果当前关闭的模板在最右侧,那么预览上一个,防止数组越界
// 如果当前关闭的模板在最右侧,那么预览上一个,防止数组越界
// 关闭的模板是当前选中的模板时,需要重新计算下一个待展示的模板的index
if ( selectedIndex > = maxPaintIndex ) {
if ( selectedIndex > = maxPaintIndex ) {
// selectIndex 不会 <0 因为如果关闭的是打开的最后一个模板,那么关闭之后 openedTemplate.isEmpty() = true
// selectIndex 不会 <0 因为如果关闭的是打开的最后一个模板,那么关闭之后 openedTemplate.isEmpty() = true
selectedIndex - - ;
selectedIndex = calNextShowJTemplateIndex ( selectedIndex - 1 ) ;
} else {
selectedIndex = calNextShowJTemplateIndex ( selectedIndex ) ;
}
}
isCloseCurrent = false ;
isCloseCurrent = false ;
}
}
@ -1005,6 +1102,26 @@ public class MultiTemplateTabPane extends JComponent {
}
}
}
}
/ * *
* 计算下一个可以展示的模板index
* @param currentIndex
* @return
* /
public int calNextShowJTemplateIndex ( int currentIndex ) {
//先看是否有可以展示的模板
for ( int i = currentIndex ; i > = 0 ; i - - ) {
if ( showJTemplateTab ( openedTemplate . get ( i ) ) ) {
return i ;
}
}
for ( int i = currentIndex ; i > = 0 ; i - - ) {
if ( ! showJTemplateTab ( openedTemplate . get ( i ) ) ) {
return i ;
}
}
return - 1 ;
}
private boolean isOverCloseIcon ( int evtX ) {
private boolean isOverCloseIcon ( int evtX ) {
boolean isOverCloseIcon = false ;
boolean isOverCloseIcon = false ;
@ -1027,7 +1144,7 @@ public class MultiTemplateTabPane extends JComponent {
private int getTemplateIndex ( int evtX ) {
private int getTemplateIndex ( int evtX ) {
int textX = 0 ;
int textX = 0 ;
for ( int i = minPaintIndex ; i < = maxPaintIndex ; i + + ) {
for ( int i = minPaintIndex ; i < = maxPaintIndex ; i + + ) {
int textWidth = realWidth ;
int textWidth = showJTemplateTab ( openedTemplate . get ( i ) ) ? realWidth : 0 ;
if ( evtX > = textX & & evtX < textX + textWidth ) {
if ( evtX > = textX & & evtX < textX + textWidth ) {
return i ;
return i ;
}
}
@ -1089,6 +1206,7 @@ public class MultiTemplateTabPane extends JComponent {
private class MultiTemplateTabMouseListener implements MouseListener {
private class MultiTemplateTabMouseListener implements MouseListener {
private boolean oldLightWeightPopupEnabled ;
/ * *
/ * *
* 鼠标进入
* 鼠标进入
@ -1097,7 +1215,8 @@ public class MultiTemplateTabPane extends JComponent {
* /
* /
@Override
@Override
public void mouseEntered ( MouseEvent e ) {
public void mouseEntered ( MouseEvent e ) {
// do nothing
this . oldLightWeightPopupEnabled = ToolTipManager . sharedInstance ( ) . isLightWeightPopupEnabled ( ) ;
ToolTipManager . sharedInstance ( ) . setLightWeightPopupEnabled ( false ) ;
}
}
/ * *
/ * *
@ -1107,6 +1226,9 @@ public class MultiTemplateTabPane extends JComponent {
* /
* /
@Override
@Override
public void mouseExited ( MouseEvent e ) {
public void mouseExited ( MouseEvent e ) {
ToolTipManager . sharedInstance ( ) . setEnabled ( false ) ;
ToolTipManager . sharedInstance ( ) . setEnabled ( true ) ;
ToolTipManager . sharedInstance ( ) . setLightWeightPopupEnabled ( this . oldLightWeightPopupEnabled ) ;
listDownMode = LIST_DOWN ;
listDownMode = LIST_DOWN ;
closeIconIndex = - 1 ;
closeIconIndex = - 1 ;
mouseOveredIndex = - 1 ;
mouseOveredIndex = - 1 ;
@ -1184,29 +1306,44 @@ public class MultiTemplateTabPane extends JComponent {
//没有点击关闭和ListDown按钮,则切换到点击的模板处
//没有点击关闭和ListDown按钮,则切换到点击的模板处
closeIconIndex = - 1 ;
closeIconIndex = - 1 ;
clodeMode = CLOSE ;
clodeMode = CLOSE ;
int tempSelectedIndex = selectedIndex ;
switchJTemplate ( getTemplateIndex ( evtX ) ) ;
if ( selectedIndex ! = getTemplateIndex ( evtX ) & & getTemplateIndex ( evtX ) ! = - 1 ) {
openedTemplate . get ( selectedIndex ) . stopEditing ( ) ;
selectedIndex = getTemplateIndex ( evtX ) ;
//如果在权限编辑情况下,不允许切换到表单类型的工作簿
if ( DesignerMode . isAuthorityEditing ( ) & & ! openedTemplate . get ( selectedIndex ) . isJWorkBook ( ) ) {
DesignerContext . getDesignerFrame ( ) . addAndActivateJTemplate ( openedTemplate . get ( tempSelectedIndex ) ) ;
FineJOptionPane . showMessageDialog ( DesignerContext . getDesignerFrame ( ) , Toolkit . i18nText ( "Fine-Design_Basic_Form_Authority_Edited_Cannot_Be_Supported" )
+ "!" , Toolkit . i18nText ( "Fine-Design_Basic_Alert" ) , JOptionPane . WARNING_MESSAGE ) ;
MultiTemplateTabPane . this . repaint ( ) ;
return ;
}
JTemplate evtXTemplate = openedTemplate . get ( getTemplateIndex ( evtX ) ) ;
evtXTemplate . activeNewJTemplate ( ) ;
}
isShowList = false ;
isShowList = false ;
}
}
MultiTemplateTabPane . this . repaint ( ) ;
MultiTemplateTabPane . this . repaint ( ) ;
}
}
}
/ * *
* 切换到指定模板
* @param jTemplate
* /
public void switchJTemplate ( JTemplate jTemplate ) {
int switchIndex = this . openedTemplate . indexOf ( jTemplate ) ;
if ( switchIndex > = 0 ) {
switchJTemplate ( switchIndex ) ;
}
}
/ * *
* 切换到指定index
* @param switchIndex
* /
private void switchJTemplate ( int switchIndex ) {
int tempSelectedIndex = selectedIndex ;
if ( selectedIndex ! = switchIndex & & switchIndex ! = - 1 ) {
openedTemplate . get ( selectedIndex ) . stopEditing ( ) ;
selectedIndex = switchIndex ;
//如果在权限编辑情况下,不允许切换到表单类型的工作簿
if ( DesignerMode . isAuthorityEditing ( ) & & ! openedTemplate . get ( selectedIndex ) . isJWorkBook ( ) ) {
DesignerContext . getDesignerFrame ( ) . addAndActivateJTemplate ( openedTemplate . get ( tempSelectedIndex ) ) ;
FineJOptionPane . showMessageDialog ( DesignerContext . getDesignerFrame ( ) , Toolkit . i18nText ( "Fine-Design_Basic_Form_Authority_Edited_Cannot_Be_Supported" )
+ "!" , Toolkit . i18nText ( "Fine-Design_Basic_Alert" ) , JOptionPane . WARNING_MESSAGE ) ;
MultiTemplateTabPane . this . repaint ( ) ;
return ;
}
JTemplate evtXTemplate = openedTemplate . get ( switchIndex ) ;
evtXTemplate . activeNewJTemplate ( ) ;
}
}
}
private boolean checkCurrentClose ( JTemplate template ) {
private boolean checkCurrentClose ( JTemplate template ) {
@ -1251,5 +1388,34 @@ public class MultiTemplateTabPane extends JComponent {
}
}
}
}
/ * *
* 判断是否显示在tab栏上
* @param jTemplate
* @return
* /
private boolean showJTemplateTab ( JTemplate jTemplate ) {
JTemplate current = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
return ComparatorUtils . equals ( current . getTemplateTabOperatorType ( ) , jTemplate . getTemplateTabOperatorType ( ) ) ;
}
/ * *
* 获取tab操作类型的模板
* @param operator
* @return
* /
public List < JTemplate < ? , ? > > getOpenedJTemplatesByOperator ( String operator ) {
return openedTemplate . stream ( ) . filter ( ( jTemplate ) - > ComparatorUtils . equals ( jTemplate . getTemplateTabOperatorType ( ) , operator ) )
. collect ( Collectors . toList ( ) ) ;
}
/ * *
* 根据tab操作类型进行分类
* @return
* /
public Map < String , List < JTemplate < ? , ? > > > getOpenedJTemplatesByCategory ( ) {
return openedTemplate . stream ( )
. collect ( Collectors . groupingBy ( JTemplate : : getTemplateTabOperatorType ) ) ;
}
}
}