帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

771 lines
26 KiB

/*
* Copyright(c) 2001-2011, FineReport Inc, All Rights Reserved.
*/
package com.fr.design.form.parameter;
import com.fr.base.BaseUtils;
import com.fr.base.Parameter;
import com.fr.base.parameter.ParameterUI;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter;
import com.fr.design.actions.UpdateAction;
import com.fr.design.designer.beans.actions.CopyAction;
import com.fr.design.designer.beans.actions.CutAction;
import com.fr.design.designer.beans.actions.FormDeleteAction;
import com.fr.design.designer.beans.actions.PasteAction;
import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter;
import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.beans.location.Direction;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWAbsoluteLayout;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.designer.properties.FormWidgetAuthorityEditPane;
import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.mainframe.AuthorityEditPane;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.EastRegionContainerPane;
import com.fr.design.mainframe.FormArea;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormDesignerModeForSpecial;
import com.fr.design.mainframe.FormDesignerUI;
import com.fr.design.mainframe.FormParaPane;
import com.fr.design.mainframe.FormWidgetDetailPane;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.mainframe.WidgetToolBarPane;
import com.fr.design.parameter.ParaDefinitePane;
import com.fr.design.parameter.ParameterDesignerProvider;
import com.fr.design.parameter.ParameterPropertyPane;
import com.fr.form.main.Form;
import com.fr.form.main.parameter.FormParameterUI;
import com.fr.form.parameter.FormSubmitButton;
import com.fr.form.ui.EditorHolder;
import com.fr.form.ui.WidgetValue;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.container.WParameterLayout;
import com.fr.stable.ArrayUtils;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User : Richer
* Version: 6.5.5
* Date : 11-7-5
* Time : 下午7:46
* 表单类型的参数设计器
*/
// TODO ALEX_SEP FormDesigner和FormParaDesignEditor应该共用Form的编辑,但是FormParaDesignEditor不应该直接就是FormDesigner
public class FormParaDesigner extends FormDesigner implements ParameterDesignerProvider {
private static final int NUM_IN_A_LINE = 4;
private static final int H_COMPONENT_GAP = 165;
public static final int V_COMPONENT_GAP = 25;
private static final int FIRST_V_LOCATION = 35;
private static final int FIRST_H_LOCATION = 90;
private static final int SECOND_H_LOCATION = 170;
private static final int ADD_HEIGHT = 20;
private static final int H_GAP = 105;
private static final int SUBMIT_BUTTON_H_LOCATION = 270;
private static final int PARA_IMAGE_SHIFT_X = -4;
private static final int FORM_AREA_PADDING_LEFT = 13;
private static Image paraImage = BaseUtils.readImage("/com/fr/design/images/form/parameter.png");
private UpdateAction[] basicMainPaneActions;
public FormParaDesigner() {
this(new FormParameterUI());
}
public FormParaDesigner(FormParameterUI ui) {
super(gen(ui));
}
private static Form gen(Form form) {
WLayout container = form.getContainer();
if (container == null) {
container = new WParameterLayout();
}
container.setWidgetName("para");
form.setContainer(container);
return form;
}
protected FormDesignerModeForSpecial<?> createFormDesignerTargetMode() {
return new FormParaTargetMode(this);
}
/**
* 开始编辑参数面板的时候进行的初始化
*/
public void initBeforeUpEdit() {
WidgetToolBarPane.getInstance(this);
EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.REPORT_PARA);
EastRegionContainerPane.getInstance().replaceWidgetLibPane(
FormWidgetDetailPane.getInstance(this));
if (!DesignerMode.isAuthorityEditing()) {
ParameterPropertyPane parameterPropertyPane = ParameterPropertyPane.getInstance(this); // 传入this的同时会更新参数面板高度
parameterPropertyPane.refreshState();
EastRegionContainerPane.getInstance().addParameterPane(parameterPropertyPane);
EastRegionContainerPane.getInstance().replaceWidgetSettingsPane(
WidgetPropertyPane.getInstance(this));
} else {
EastRegionContainerPane.getInstance().removeParameterPane();
showAuthorityEditPane();
}
}
/**
* 创建权限编辑面板
*
* @return 面板
*/
public AuthorityEditPane createAuthorityEditPane() {
return new FormWidgetAuthorityEditPane(this);
}
/**
* 内容属性表面板
*
* @return 内容属性表面板
*/
public JPanel getEastUpPane() {
return WidgetPropertyPane.getInstance(this);
}
/**
* 参数属性表
*
* @return 参数属性表
*/
public JPanel getEastDownPane() {
return FormWidgetDetailPane.getInstance(this);
}
/**
* 权限编辑面板
*
* @return 权限编辑面板
*/
public AuthorityEditPane getAuthorityEditPane() {
FormWidgetAuthorityEditPane formWidgetAuthorityEditPane = new FormWidgetAuthorityEditPane(this);
formWidgetAuthorityEditPane.populateDetials();
return formWidgetAuthorityEditPane;
}
/**
* 给包含此FormParaDesigner的ParameterDefinitePane添加事件
*
* @param paraDefinitePane 面板
*/
public void addListener(final ParaDefinitePane paraDefinitePane) {
this.getEditListenerTable().addListener(new DesignerEditListener() {
@Override
public void fireCreatorModified(final DesignerEvent evt) {
if (evt.getCreatorEventID() != DesignerEvent.CREATOR_SELECTED) {
paraDefinitePane.setParameterArray(
paraDefinitePane.getNoRepeatParas(DesignModelAdapter.getCurrentModelAdapter().getParameters()));
paraDefinitePane.refreshParameter();
}
}
});
}
/**
* 包裹一层FormArea
*
* @return 区域
*/
public Component createWrapper() {
FormArea area = new FormArea(this, false);
area.setBorder(BorderFactory.createEmptyBorder(0, FORM_AREA_PADDING_LEFT, 0, 0));
return area;
}
/**
* 刷新控件
*/
public void refreshAllNameWidgets() {
XCreatorUtils.refreshAllNameWidgets(this.getRootComponent());
}
/**
* 刷新tableData
*
* @param oldName 旧名称
* @param newName 新名称
*/
public void refresh4TableData(String oldName, String newName) {
this.getTarget().renameTableData(this.getTarget().getContainer(), oldName, newName);
this.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_SELECTED);
}
/**
* 刷新参数
*
* @param p 参数面板
*/
public void refreshParameter(ParaDefinitePane p) {
refreshParameter(p, DesignerContext.getDesignerFrame().getSelectedJTemplate());
}
/**
* 刷新参数
*
* @param p 参数面板
* @param jt 当前模版
*/
public void refreshParameter(ParaDefinitePane p, JTemplate jt) {
XLayoutContainer rootContainer = this.getRootComponent();
java.util.List<String> namelist = getAllXCreatorNameList(rootContainer);
// parameterArray是报表的所有参数, nameList是已经在参数面板添加过控件的参数名
// 与已有的参数列表比较 如果已经存在 就除去
Parameter[] ps = p.getParameterArray();
if (ps != null) {
for (Parameter parameter : ps) {
for (String name : namelist) {
if (name.equalsIgnoreCase(parameter.getName())) {
p.setParameterArray((Parameter[]) ArrayUtils.removeElement(p.getParameterArray(), parameter));
}
}
}
}
ParameterPropertyPane.getInstance().getParameterToolbarPane().populateBean(
p.getParameterArray() == null ? new Parameter[0] : p.getParameterArray());
ParameterPropertyPane.getInstance().refreshState(jt);
}
/**
* 判断这个参数面板是否没有控件
*
* @return 参数面板是否没有控件
*/
public boolean isBlank() {
XLayoutContainer rootContainer = this.getRootComponent();
List<String> xx = getAllXCreatorNameList(rootContainer);
return xx.isEmpty();
}
protected void setToolbarButtons(boolean flag) {
DesignerContext.getDesignerFrame().checkCombineUp(!flag, NAME_ARRAY_LIST);
}
/**
* 看看参数面板中的控件是否有和模板参数同名的
*
* @param allParameters 参数
* @return 是否有同名
*/
public boolean isWithoutParaXCreator(Parameter[] allParameters) {
XLayoutContainer rootContainer = this.getRootComponent();
List<String> xx = getAllXCreatorNameList(rootContainer);
for (Parameter parameter : allParameters) {
for (String name : xx) {
if (name.equalsIgnoreCase(parameter.getName())) {
return false;
}
}
}
return true;
}
/**
* 参数面板控件的名字
*
* @return 名字
*/
public List<String> getAllXCreatorNameList() {
XLayoutContainer rootContainer = this.getRootComponent();
List<String> namelist = new ArrayList<String>();
for (int i = 0; i < rootContainer.getXCreatorCount(); i++) {
if (rootContainer.getXCreator(i) instanceof XLayoutContainer) {
namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i)));
} else {
namelist.add(rootContainer.getXCreator(i).toData().getWidgetName());
}
}
return namelist;
}
private List<String> getAllXCreatorNameList(XLayoutContainer rootContainer) {
List<String> namelist = new ArrayList<String>();
for (int i = 0; i < rootContainer.getXCreatorCount(); i++) {
if (rootContainer.getXCreator(i) instanceof XLayoutContainer) {
namelist.addAll(getAllXCreatorNameList((XLayoutContainer) rootContainer.getXCreator(i)));
} else {
namelist.add(rootContainer.getXCreator(i).toData().getWidgetName());
}
}
return namelist;
}
/**
* 是否有查询按钮
*
* @return 有无查询按钮
*/
public boolean isWithQueryButton() {
XLayoutContainer rootContainer = this.getRootComponent();
return searchQueryCreators(rootContainer);
}
/**
* 返回复制粘贴删除等动作
*
* @return 同上
*/
public UpdateAction[] getActions() {
if (designerActions == null) {
designerActions = new ArrayList<UpdateAction>(Arrays.asList(new UpdateAction[]{new CutAction(this), new CopyAction(this), new PasteAction(this),
new FormDeleteAction(this)}));
dmlActions(designerActions);
}
return designerActions.toArray(new UpdateAction[designerActions.size()]);
}
public UpdateAction[] getBasicMainActions() {
if (basicMainPaneActions == null) {
basicMainPaneActions = new UpdateAction[]{new CutAction(this), new CopyAction(this), new PasteAction(this),
new FormDeleteAction(this)};
}
return basicMainPaneActions;
}
private boolean searchQueryCreators(XLayoutContainer rootContainer) {
boolean b = false;
for (int i = 0; i < rootContainer.getXCreatorCount(); i++) {
if (rootContainer.getXCreator(i) instanceof XLayoutContainer) {
b = searchQueryCreators((XLayoutContainer) rootContainer.getXCreator(i));
} else if (rootContainer.getXCreator(i) instanceof XFormSubmit) {
b = true;
}
}
return b;
}
/**
* 就是getTarget 为了返回ParameterUI接口而不冲突另写个
*
* @return
*/
public ParameterUI getParaTarget() {
return (FormParameterUI) super.getTarget();
}
/**
* ParameterDefinitePane通过ParaDesigner来调用ParameterPropertyPane
*
* @param p 面板
*/
public void populateParameterPropertyPane(ParaDefinitePane p) {
ParameterPropertyPane.getInstance().populateBean(p);
}
/**
* 初始化
*/
public void initWidgetToolbarPane() {
WidgetToolBarPane.getInstance(this);
}
/**
* populate
*
* @param ui
*/
public void populate(ParameterUI ui) {
if (ui == null) {
return;
}
if (this.getTarget() == ui) {
repaint();
return;
}
this.setTarget((FormParameterUI) ui.convert());
this.refreshRoot();
}
/**
* 报表直接判断底层是否是绝对布局
*
* @return 是则返回true
*/
public boolean hasWAbsoluteLayout() {
return this.getTarget().getContainer() instanceof WAbsoluteLayout;
}
/**
* 刷新底层容器
*/
public void refreshRoot() {
XLayoutContainer layoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator(this.getTarget()
.getContainer());
if (layoutContainer == null) {
layoutContainer = new XWParameterLayout();
}
layoutContainer.setSize(LARGE_PREFERRED_SIZE);
setRootComponent(layoutContainer);
}
/**
* 是否是报表的参数面板
*
* @return 是
*/
public boolean isFormParaDesigner() {
return true;
}
public XLayoutContainer getParaComponent() {
return getRootComponent();
}
private void paintLinkParameters(Graphics clipg) {
Parameter[] paras = DesignModelAdapter.getCurrentModelAdapter().getParameters();
if (paras == null || paras.length == 0) {
return;
}
Graphics g = clipg.create();
g.setColor(Color.RED);
if (!(this.getRootComponent() instanceof XWAbsoluteLayout)) {
return;
}
XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent();
for (int i = 0; i < layout.getXCreatorCount(); i++) {
XCreator creator = layout.getXCreator(i);
if (!creator.isVisible()) {
continue;
}
for (Parameter p : paras) {
if (p.getName().equalsIgnoreCase(creator.toData().getWidgetName())) {
g.drawImage(paraImage, creator.getX() + PARA_IMAGE_SHIFT_X, creator.getY() + 2, null);
break;
}
}
}
}
/**
* 得到合适的大小
*
* @return
*/
public Dimension getPreferredSize() {
return getDesignSize();
}
public Dimension getDesignSize() {
return ((FormParameterUI) getTarget()).getDesignSize();
}
/**
* 设置其UI类为DesignerUI,负责渲染
*/
@Override
public void updateUI() {
setUI(new FormDesignerUI() {
@Override
protected Rectangle getFitPaintBounds(Component component, Component parent) {
return new Rectangle(0, 0, parent.getSize().width, parent.getSize().height);
}
});
}
/**
* 设置高度
*
* @param height
*/
public void setDesignHeight(int height) {
Dimension dim = getPreferredSize();
dim.height = height;
((FormParameterUI) getTarget()).setDesignSize(dim);
}
/**
* paintContent
*
* @param clipg
*/
public void paintContent(Graphics clipg) {
Dimension dim;
dim = ((FormParameterUI) getTarget()).getDesignSize();
getRootComponent().setSize(dim);
getRootComponent().paint(clipg);
paintLinkParameters(clipg);
paintOp(clipg, getOutlineBounds());
}
private void paintOp(Graphics offg, Rectangle bounds) {
Color oldColor = offg.getColor();
Insets insets = getOutlineInsets();
offg.setColor(XCreatorConstants.OP_COLOR);
offg.fillRect(bounds.x, bounds.y + bounds.height, bounds.width + insets.right, insets.bottom);
offg.fillRect(bounds.x + bounds.width, bounds.y, insets.right, bounds.height);
offg.setColor(oldColor);
}
protected void setRootComponent(XLayoutContainer component) {
component.setDirections(new int[]{Direction.BOTTOM, Direction.RIGHT});
super.setRootComponent(component);
}
/**
* 刷新尺寸
*/
public void populateRootSize() {
((FormParameterUI) getTarget()).setDesignSize(getRootComponent().getSize());
if (getParaComponent().acceptType(XWParameterLayout.class)) {
WParameterLayout layout = (WParameterLayout) getParaComponent().toData();
layout.setDesignWidth(getRootComponent().getWidth());
}
}
/**
* 保存参数界面的宽度
*
* @param width 指定的宽度
*/
public void updateWidth(int width) {
FormParameterUI parameterUI = ((FormParameterUI) getTarget());
parameterUI.setDesignSize(new Dimension(width, parameterUI.getDesignSize().height));
}
/**
* 保存参数界面的高度
*
* @param height 指定的高度
*/
public void updateHeight(int height) {
FormParameterUI parameterUI = ((FormParameterUI) getTarget());
parameterUI.setDesignSize(new Dimension(parameterUI.getDesignSize().width, height));
}
/**
* 在参数很多时,全部添加的时候,可以向下一次排版,若去掉就会在参数面板堆到一起
*
* @param creator 组件 z
* @param x 长度
* @param y 长度 c
* @param layout 布局
* @return 是否扩展
*/
public boolean prepareForAdd(XCreator creator, int x, int y, XWAbsoluteLayout layout) {
// 参数界面,自动扩展
if (!isRoot(layout)) {
return false;
}
Dimension size = layout.getSize();
Boolean needResize = false;
if (creator.getWidth() / 2 + x > layout.getWidth()) {
size.width = creator.getWidth() / 2 + x + ADD_HEIGHT;
needResize = true;
}
if (creator.getHeight() / 2 + y > layout.getHeight()) {
size.height = creator.getHeight() / 2 + y + ADD_HEIGHT;
needResize = true;
}
if (needResize) {
layout.setSize(size);
populateRootSize();
}
return true;
}
/**
* 加入参数
*
* @param parameter 参数 c
* @param currentIndex 位置 w
* @return 是否加入 s
*/
public boolean addingParameter2Editor(Parameter parameter, int currentIndex) {
com.fr.form.ui.Label label = new com.fr.form.ui.Label();
String name = parameter.getName();
label.setWidgetName("Label" + name);
label.setWidgetValue(new WidgetValue(name + ":"));
XCreator xCreator = XCreatorUtils.createXCreator(label);
if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
+ FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
return false;
}
EditorHolder editor = new EditorHolder(parameter);
xCreator = XCreatorUtils.createXCreator(editor);
if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
+ SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
return false;
}
return true;
}
/**
* 加入参数
*
* @param parameter 参数 c
* @param currentIndex 位置 w
* @return 是否加入 s
*/
public boolean addingParameter2EditorWithQueryButton(Parameter parameter, int currentIndex) {
com.fr.form.ui.Label label = new com.fr.form.ui.Label();
String name = parameter.getName();
label.setWidgetName("Label" + name);
label.setWidgetValue(new WidgetValue(name + ":"));
XCreator xCreator = XCreatorUtils.createXCreator(label);
if (!(this.autoAddComponent(xCreator, FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP
* (currentIndex / NUM_IN_A_LINE)))) {
return false;
}
EditorHolder editor = new EditorHolder(parameter);
editor.setWidgetName(name);
xCreator = XCreatorUtils.createXCreator(editor);
if (!(this.autoAddComponent(xCreator, SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP
* (currentIndex / NUM_IN_A_LINE)))) {
return false;
}
FormSubmitButton formSubmitButton = new FormSubmitButton();
formSubmitButton.setWidgetName("Search");
formSubmitButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Query"));
xCreator = XCreatorUtils.createXCreator(formSubmitButton);
if (!(this.autoAddComponent(xCreator, SUBMIT_BUTTON_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP
* (currentIndex / NUM_IN_A_LINE)))) {
return false;
}
return true;
}
/**
* 加入参数
*
* @param parameterArray 参数 c
* @param currentIndex 位置 w
* @return 是否加入 s
*/
public void addingAllParameter2Editor(Parameter[] parameterArray, int currentIndex) {
addingAllParameter2EditorWithReturnValue(parameterArray, currentIndex);
}
/**
* @param parameterArray 参数数组
* @param currentIndex 添加所有参数前的index值
* @Description: 添加所有的参数,并返回当前的currentIndex。此方法为addingAllParameter2Editor的兼容方法。
* @return: 添加所有参数后的index值
* @Author: Henry.Wang
* @date: 2020/8/5 19:40
*/
public int addingAllParameter2EditorWithReturnValue(Parameter[] parameterArray, int currentIndex) {
for (int i = 0; i < parameterArray.length; i++) {
com.fr.form.ui.Label label = new com.fr.form.ui.Label();
label.setWidgetName("Label" + parameterArray[i].getName());
label.setWidgetValue(new WidgetValue(parameterArray[i].getName() + ":"));
XCreator xCreator = XCreatorUtils.createXCreator(label);
if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
+ FIRST_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
break;
}
// 每行显示5组
EditorHolder editor = new EditorHolder(parameterArray[i]);
editor.setWidgetName(parameterArray[i].getName());
xCreator = XCreatorUtils.createXCreator(editor);
if (!(this.autoAddComponent(xCreator, H_COMPONENT_GAP * (currentIndex % NUM_IN_A_LINE)
+ SECOND_H_LOCATION, FIRST_V_LOCATION + V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE)))) {
break;
}
currentIndex++;
}
if (!isWithQueryButton()) {
FormSubmitButton formSubmitButton = new FormSubmitButton();
formSubmitButton.setWidgetName("Search");
formSubmitButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Query"));
XCreator xCreator = XCreatorUtils.createXCreator(formSubmitButton);
if (this.autoAddComponent(xCreator, H_COMPONENT_GAP * 3 + H_GAP, FIRST_V_LOCATION
+ V_COMPONENT_GAP * (currentIndex / NUM_IN_A_LINE))) {
currentIndex = ((int) Math.ceil((currentIndex + 1) / (double) NUM_IN_A_LINE)) * NUM_IN_A_LINE;
}
}
return currentIndex;
}
/**
* 自动添加
*
* @param xCreator 组件 z
* @param x 位置 w
* @param y 位置
* @return 是否添加 s
*/
public boolean autoAddComponent(XCreator xCreator, int x, int y) {
XWAbsoluteLayout layout = (XWAbsoluteLayout) this.getRootComponent();
FRAbsoluteLayoutAdapter adapter = (FRAbsoluteLayoutAdapter) layout.getLayoutAdapter();
if (prepareForAdd(xCreator, x, y, layout)) {
adapter.addBean(xCreator, x, y);
}
this.getSelectionModel().setSelectedCreator(xCreator);
repaint();
return true;
}
/**
* 工具栏
*
* @return 工具栏面板 g
*/
public JPanel[] toolbarPanes4Form() {
return new JPanel[]{FormParaPane.getInstance(this)};
}
/**
* 复制等按钮
*
* @return 按钮组 a
*/
public JComponent[] toolBarButton4Form() {
UpdateAction[] actions = getBasicMainActions();
JComponent[] components = new JComponent[actions.length];
for (int i = 0; i < actions.length; i++) {
components[i] = actions[i].createToolBarComponent();
}
return components;
}
@Override
public boolean checkIfBeyondValidArea(MouseEvent e) {
return false;
}
@Override
public boolean isCurrentComponentCutable() {
return !isRootSelected();
}
@Override
public boolean isCurrentComponentCopyable() {
return !isRootSelected();
}
}