Browse Source

Merge remote-tracking branch 'origin/release/10.0' into release/10.0

feature/big-screen
pengda 4 years ago
parent
commit
0bf03a25b3
  1. 9
      designer-base/src/main/java/com/fr/design/actions/file/OpenRecentReportMenuDef.java
  2. 23
      designer-base/src/main/java/com/fr/design/cell/AbstractCellElementPropertyPane.java
  3. 34
      designer-base/src/main/java/com/fr/design/cell/CellElementPropertyComponent.java
  4. 11
      designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java
  5. 17
      designer-base/src/main/java/com/fr/design/data/BasicTableDataUtils.java
  6. 53
      designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java
  7. 2
      designer-base/src/main/java/com/fr/design/fun/CellAttributeProvider.java
  8. 18
      designer-base/src/main/java/com/fr/design/fun/CellPropertyPaneProvider.java
  9. 15
      designer-base/src/main/java/com/fr/design/fun/impl/AbstractCellPropertyPaneProvider.java
  10. 6
      designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java
  11. 27
      designer-base/src/test/java/com/fr/design/data/BasicTableDataUtilsTest.java
  12. 13
      designer-chart/src/main/java/com/fr/design/chartx/component/combobox/ColorSchemeComboBox.java
  13. 142
      designer-chart/src/main/java/com/fr/design/module/ChartPreStyleListPane.java
  14. 156
      designer-chart/src/main/java/com/fr/design/module/ChartPreStyleManagerPane.java
  15. 2
      designer-chart/src/main/java/com/fr/design/module/ChartPreStylePane.java
  16. 4
      designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java
  17. 16
      designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java
  18. 2
      designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java
  19. 2
      designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java
  20. 30
      designer-realize/src/main/java/com/fr/design/mainframe/CellElementPropertyPane.java
  21. 2
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java
  22. 1
      designer-realize/src/main/java/com/fr/design/write/submit/SmartInsertDBManipulationPane.java

9
designer-base/src/main/java/com/fr/design/actions/file/OpenRecentReportMenuDef.java

@ -1,6 +1,7 @@
package com.fr.design.actions.file; package com.fr.design.actions.file;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.io.File;
import java.util.List; import java.util.List;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
@ -11,6 +12,7 @@ import com.fr.design.mainframe.DesignerContext;
import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.KeySetUtils;
import com.fr.design.menu.MenuDef; import com.fr.design.menu.MenuDef;
import com.fr.file.FILEFactory; import com.fr.file.FILEFactory;
import com.fr.file.FileFILE;
/** /**
* Open Resent MenuDef. * Open Resent MenuDef.
@ -68,7 +70,12 @@ public class OpenRecentReportMenuDef extends MenuDef {
* @param e 事件 * @param e 事件
*/ */
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
DesignerContext.getDesignerFrame().openTemplate(FILEFactory.createFILE(this.getPath())); File file = new File(this.getPath());
if (file.exists()) {
DesignerContext.getDesignerFrame().openTemplate(new FileFILE(file));
} else {
DesignerContext.getDesignerFrame().openTemplate(FILEFactory.createFILE(this.getPath()));
}
} }
public String getPath() { public String getPath() {

23
designer-base/src/main/java/com/fr/design/cell/AbstractCellElementPropertyPane.java

@ -0,0 +1,23 @@
package com.fr.design.cell;
import com.fr.design.designer.TargetComponent;
import com.fr.design.dialog.BasicPane;
import javax.swing.JPanel;
/**
* @author zack
* @version 10.0
* Created by zack on 2020/7/14
*/
public abstract class AbstractCellElementPropertyPane extends BasicPane implements CellElementPropertyComponent {
@Override
public JPanel toPanel() {
return this;
}
@Override
public boolean accept(TargetComponent tc) {
return true;
}
}

34
designer-base/src/main/java/com/fr/design/cell/CellElementPropertyComponent.java

@ -0,0 +1,34 @@
package com.fr.design.cell;
import com.fr.design.designer.TargetComponent;
import javax.swing.JPanel;
/**
* 单元格属性配置面板接口
* @author zack
* @version 10.0
* Created by zack on 2020/7/14
*/
public interface CellElementPropertyComponent {
/**
* 判断当前编辑的对象是否显示当前实现
* @param tc
* @return
*/
boolean accept(TargetComponent tc);
/**
* 加载数据
* @param tc
*/
void populate(TargetComponent tc);
/**
* 返回当前属性面板,默认返回this
* @return
*/
JPanel toPanel();
}

11
designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java

@ -446,7 +446,16 @@ public abstract class BasicTableDataTreePane extends DockingView implements Resp
* @param srcName 数据集来源(比如报表块就是报表块的名称) * @param srcName 数据集来源(比如报表块就是报表块的名称)
* @param tableDataSource 数据集 * @param tableDataSource 数据集
*/ */
public Map<String, String> addTableData(String srcName, TableDataSource tableDataSource, boolean isCover) {
return new HashMap<>(0);
}
public Map<String, String> addTableData(String srcName, TableDataSource tableDataSource) { public Map<String, String> addTableData(String srcName, TableDataSource tableDataSource) {
return new HashMap<>(0); return addTableData(srcName, tableDataSource, false);
}
public void removeTableData(String sourceName) {
} }
} }

17
designer-base/src/main/java/com/fr/design/data/BasicTableDataUtils.java

@ -1,5 +1,6 @@
package com.fr.design.data; package com.fr.design.data;
import com.fr.data.TableDataSource;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -10,6 +11,7 @@ import com.fr.stable.StringUtils;
* Created by hades on 2020/4/27 * Created by hades on 2020/4/27
*/ */
public abstract class BasicTableDataUtils { public abstract class BasicTableDataUtils {
private static final String SEPARATOR = "-";
private static final int LEN = 2; private static final int LEN = 2;
@ -33,4 +35,19 @@ public abstract class BasicTableDataUtils {
} }
return false; return false;
} }
public static String getTableDataName(boolean isCover, TableDataSource tds, String tdName, String srcName, boolean isDsNameRepeaded) {
if (isCover) {
return srcName + SEPARATOR + tdName;
}
if (tds.getTableData(tdName) != null || isDsNameRepeaded) {//如果有同名的就拼上来源名称
tdName = srcName + SEPARATOR + tdName;
}
int i = 0;
while (tds.getTableData(tdName) != null) {
i++;//如果拼上名字后依然已经存在就加编号
tdName += i;
}
return tdName;
}
} }

53
designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java

@ -9,6 +9,7 @@ import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.data.BasicTableDataTreePane; import com.fr.design.data.BasicTableDataTreePane;
import com.fr.design.data.BasicTableDataUtils;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.tabledata.StoreProcedureWorkerListener; import com.fr.design.data.tabledata.StoreProcedureWorkerListener;
import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane;
@ -59,7 +60,7 @@ import java.util.Map;
public class TableDataTreePane extends BasicTableDataTreePane { public class TableDataTreePane extends BasicTableDataTreePane {
private static TableDataTreePane singleton = new TableDataTreePane(); private static TableDataTreePane singleton = new TableDataTreePane();
public static final int PLUGIN_LISTENER_PRIORITY = 1; public static final int PLUGIN_LISTENER_PRIORITY = 1;
public synchronized static BasicTableDataTreePane getInstance(DesignModelAdapter<?, ?> tc) { public synchronized static BasicTableDataTreePane getInstance(DesignModelAdapter<?, ?> tc) {
@ -96,10 +97,10 @@ public class TableDataTreePane extends BasicTableDataTreePane {
addMenuDef.setIconPath(IconPathConstants.ADD_POPMENU_ICON_PATH); addMenuDef.setIconPath(IconPathConstants.ADD_POPMENU_ICON_PATH);
createAddMenuDef(); createAddMenuDef();
// 创建插件监听 // 创建插件监听
createPluginListener(); createPluginListener();
editAction = new EditAction(); editAction = new EditAction();
removeAction = new RemoveAction(); removeAction = new RemoveAction();
previewTableDataAction = new PreviewTableDataAction(dataTree); previewTableDataAction = new PreviewTableDataAction(dataTree);
@ -139,27 +140,27 @@ public class TableDataTreePane extends BasicTableDataTreePane {
new TableDataTreeDragSource(dataTree, DnDConstants.ACTION_COPY); new TableDataTreeDragSource(dataTree, DnDConstants.ACTION_COPY);
checkButtonEnabled(); checkButtonEnabled();
} }
private void createPluginListener() { private void createPluginListener() {
//菜单栏监听 //菜单栏监听
GeneralContext.listenPluginRunningChanged(new PluginEventListener(PLUGIN_LISTENER_PRIORITY) { GeneralContext.listenPluginRunningChanged(new PluginEventListener(PLUGIN_LISTENER_PRIORITY) {
@Override @Override
public void on(PluginEvent event) { public void on(PluginEvent event) {
addMenuDef.clearShortCuts(); addMenuDef.clearShortCuts();
createAddMenuDef(); createAddMenuDef();
} }
}, new PluginFilter() { }, new PluginFilter() {
@Override @Override
public boolean accept(PluginContext context) { public boolean accept(PluginContext context) {
return context.contain(PluginModule.ExtraDesign); return context.contain(PluginModule.ExtraDesign);
} }
}); });
//监听数据集插件 //监听数据集插件
GeneralContext.listenPluginRunningChanged(new PluginEventListener() { GeneralContext.listenPluginRunningChanged(new PluginEventListener() {
@Override @Override
@ -188,8 +189,8 @@ public class TableDataTreePane extends BasicTableDataTreePane {
} }
}); });
} }
protected void checkButtonEnabled() { protected void checkButtonEnabled() {
super.checkButtonEnabled(editAction, previewTableDataAction, removeAction, op, dataTree); super.checkButtonEnabled(editAction, previewTableDataAction, removeAction, op, dataTree);
} }
@ -339,10 +340,11 @@ public class TableDataTreePane extends BasicTableDataTreePane {
/** /**
* 合并数据集 * 合并数据集
* @param srcName 数据集来源(比如报表块就是报表块的名称) *
* @param srcName 数据集来源(比如报表块就是报表块的名称)
* @param tableDataSource 数据集 * @param tableDataSource 数据集
*/ */
public Map<String, String> addTableData(String srcName, TableDataSource tableDataSource) { public Map<String, String> addTableData(String srcName, TableDataSource tableDataSource, boolean isCover) {
Map<String, String> tdNameMap = new HashMap<>(); Map<String, String> tdNameMap = new HashMap<>();
allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook());
DesignTableDataManager.setThreadLocal(DesignTableDataManager.NO_PARAMETER); DesignTableDataManager.setThreadLocal(DesignTableDataManager.NO_PARAMETER);
@ -352,14 +354,8 @@ public class TableDataTreePane extends BasicTableDataTreePane {
String tdName = (String) tdIterator.next(); String tdName = (String) tdIterator.next();
String oldName = tdName; String oldName = tdName;
TableData td = tableDataSource.getTableData(tdName); TableData td = tableDataSource.getTableData(tdName);
if (tds.getTableData(tdName) != null || isDsNameRepeaded(tdName)) {//如果有同名的就拼上来源名称 boolean isDsNameRepeaded = isDsNameRepeaded(tdName);
tdName = srcName + tdName; tdName = BasicTableDataUtils.getTableDataName(isCover, tds, tdName, srcName, isDsNameRepeaded);
}
int i = 0;
while (tds.getTableData(tdName) != null) {
i++;//如果拼上名字后依然已经存在就加编号
tdName += i;
}
tds.putTableData(tdName, td); tds.putTableData(tdName, td);
if (!ComparatorUtils.equals(oldName, tdName)) { if (!ComparatorUtils.equals(oldName, tdName)) {
tdNameMap.put(oldName, tdName); tdNameMap.put(oldName, tdName);
@ -367,8 +363,19 @@ public class TableDataTreePane extends BasicTableDataTreePane {
} }
tc.parameterChanged(); tc.parameterChanged();
dataTree.refresh(); dataTree.refresh();
return Collections.unmodifiableMap(tdNameMap); return Collections.unmodifiableMap(tdNameMap);
} }
@Override
public void removeTableData(String sourceName) {
TableDataSource tds = tc.getBook();
tds.removeTableData(sourceName);
dataTree.refresh();
}
public void addDataPane(final AbstractTableDataPane<?> uPanel, String paneName) { public void addDataPane(final AbstractTableDataPane<?> uPanel, String paneName) {
final NamePane nPanel = uPanel.asNamePane(); final NamePane nPanel = uPanel.asNamePane();
nPanel.setObjectName(paneName); nPanel.setObjectName(paneName);

2
designer-base/src/main/java/com/fr/design/fun/CellAttributeProvider.java

@ -4,8 +4,10 @@ import com.fr.design.gui.frpane.AbstractAttrNoScrollPane;
import com.fr.stable.fun.mark.Immutable; import com.fr.stable.fun.mark.Immutable;
/** /**
* 单元格属性面板扩展接口,接口基本逻辑不通且不符合接口设计规范,单元格属性扩展可以使用CellPropertyPaneProvider
* Created by zhouping on 2015/11/11. * Created by zhouping on 2015/11/11.
*/ */
@Deprecated
public interface CellAttributeProvider extends Immutable{ public interface CellAttributeProvider extends Immutable{
String MARK_STRING = "CellAttributeProvider"; String MARK_STRING = "CellAttributeProvider";

18
designer-base/src/main/java/com/fr/design/fun/CellPropertyPaneProvider.java

@ -0,0 +1,18 @@
package com.fr.design.fun;
import com.fr.design.cell.CellElementPropertyComponent;
/**
* 单元格设置(属性)扩展接口
* @author zack
* @version 10.0
* Created by zack on 2020/7/14
*/
public interface CellPropertyPaneProvider extends PropertyItemPaneProvider {
/**
* 构造单元格属性面板,面板实现需要使用单例模式实现
* @return 面板类
*/
CellElementPropertyComponent getSingletonCelPropertyPane();
}

15
designer-base/src/main/java/com/fr/design/fun/impl/AbstractCellPropertyPaneProvider.java

@ -0,0 +1,15 @@
package com.fr.design.fun.impl;
import com.fr.design.fun.CellPropertyPaneProvider;
import com.fr.stable.fun.mark.API;
/**
* Created by zhouping on 2015/11/11.
*/
@API(level = CellPropertyPaneProvider.CURRENT_LEVEL)
public abstract class AbstractCellPropertyPaneProvider extends AbstractPropertyItemPaneProvider implements CellPropertyPaneProvider {
public int currentAPILevel() {
return CellPropertyPaneProvider.CURRENT_LEVEL;
}
}

6
designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java

@ -227,8 +227,10 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
itemBean.getEnableModes()); itemBean.getEnableModes());
UIButton button = propertyItem.getButton(); UIButton button = propertyItem.getButton();
List<ActionListener> buttonListeners = itemBean.getButtonListeners(); List<ActionListener> buttonListeners = itemBean.getButtonListeners();
for (ActionListener buttonListener : buttonListeners) { if (buttonListeners != null) {
button.addActionListener(buttonListener); for (ActionListener buttonListener : buttonListeners) {
button.addActionListener(buttonListener);
}
} }
propertyItemMap.put(key, propertyItem); propertyItemMap.put(key, propertyItem);

27
designer-base/src/test/java/com/fr/design/data/BasicTableDataUtilsTest.java

@ -1,6 +1,9 @@
package com.fr.design.data; package com.fr.design.data;
import com.fr.base.TableData;
import com.fr.data.TableDataSource;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.easymock.EasyMock;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -41,4 +44,26 @@ public class BasicTableDataUtilsTest extends TestCase {
Assert.assertFalse(result12); Assert.assertFalse(result12);
} }
}
@Test
public void testGetTableDataName() {
TableDataSource source = EasyMock.mock(TableDataSource.class);
TableData tableData = EasyMock.mock(TableData.class);
EasyMock.expect(source.getTableData("ds1")).andReturn(tableData).anyTimes();
EasyMock.expect(source.getTableData("test-ds1")).andReturn(tableData).anyTimes();
EasyMock.expect(source.getTableData("test-ds11")).andReturn(null).anyTimes();
EasyMock.replay(source, tableData);
Assert.assertEquals("test-ds1", BasicTableDataUtils.getTableDataName(true, source, "ds1", "test", false));
Assert.assertEquals("test-ds11", BasicTableDataUtils.getTableDataName(false, source, "ds1", "test", false));
source = EasyMock.mock(TableDataSource.class);
EasyMock.expect(source.getTableData("ds1")).andReturn(null).anyTimes();
EasyMock.expect(source.getTableData("test-ds1")).andReturn(null).anyTimes();
EasyMock.replay(source);
Assert.assertEquals("test-ds1", BasicTableDataUtils.getTableDataName(true, source, "ds1", "test", false));
Assert.assertEquals("ds1", BasicTableDataUtils.getTableDataName(false, source, "ds1", "test", false));
Assert.assertEquals("test-ds1", BasicTableDataUtils.getTableDataName(false, source, "ds1", "test", true));
}
}

13
designer-chart/src/main/java/com/fr/design/chartx/component/combobox/ColorSchemeComboBox.java

@ -52,7 +52,7 @@ public class ColorSchemeComboBox extends UIComboBox {
this.setRenderer(new ColorSchemeCellRenderer()); this.setRenderer(new ColorSchemeCellRenderer());
} }
private Map<String, ColorInfo> getColorSchemesFromConfig() { protected Map<String, ColorInfo> getColorSchemesFromConfig() {
Map<String, ColorInfo> colorSchemes = new LinkedHashMap<>(); Map<String, ColorInfo> colorSchemes = new LinkedHashMap<>();
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance(); ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
@ -92,7 +92,14 @@ public class ColorSchemeComboBox extends UIComboBox {
} }
public void refresh() { public void refresh() {
this.colorSchemes = getColorSchemesFromConfig(); refresh(null);
}
public void refresh(Map<String, ColorInfo> colorSchemes) {
if (colorSchemes == null) {
colorSchemes = getColorSchemesFromConfig();
}
this.colorSchemes = colorSchemes;
this.setModel(new DefaultComboBoxModel(colorSchemes.keySet().toArray())); this.setModel(new DefaultComboBoxModel(colorSchemes.keySet().toArray()));
} }
@ -149,7 +156,7 @@ public class ColorSchemeComboBox extends UIComboBox {
return colorSchemes.keySet(); return colorSchemes.keySet();
} }
public class ColorInfo { public static class ColorInfo {
private List<Color> colors; private List<Color> colors;

142
designer-chart/src/main/java/com/fr/design/module/ChartPreStyleListPane.java

@ -0,0 +1,142 @@
package com.fr.design.module;
import com.fr.base.ChartColorMatching;
import com.fr.base.ChartPreStyleConfig;
import com.fr.base.Utils;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.gui.controlpane.JListControlPane;
import com.fr.design.gui.controlpane.NameObjectCreator;
import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.design.gui.controlpane.ShortCut4JControlPane;
import com.fr.design.gui.ilist.ModNameActionListener;
import com.fr.design.menu.ShortCut;
import com.fr.general.NameObject;
import com.fr.stable.Nameable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-07-08
*/
public class ChartPreStyleListPane extends JListControlPane {
ChartPreStyleManagerPane chartPreStyleManagerPane;
public ChartPreStyleListPane(ChartPreStyleManagerPane chartPreStyleManagerPane) {
super();
this.chartPreStyleManagerPane = chartPreStyleManagerPane;
initListener();
}
/**
* 创建有名字的creator
*
* @return 有名字的creator数组
*/
@Override
public NameableCreator[] createNameableCreators() {
return new NameableCreator[]{
new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_PreStyle_Duplicate"),
ChartColorMatching.class, ChartPreStylePane.class)
};
}
@Override
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_PreStyle");
}
@Override
public BasicBeanPane createPaneByCreators(NameableCreator creator) {
return new ChartPreStylePane() {
@Override
protected void refreshWhenStyleChange(ChartColorMatching preStyle) {
super.refreshWhenStyleChange(preStyle);
chartPreStyleManagerPane.refreshDefaultColorBox();
}
};
}
protected ShortCut4JControlPane[] createShortcuts() {
return new ShortCut4JControlPane[]{
shortCutFactory.addItemShortCut(),
createRemoveItemShortCut(),
shortCutFactory.copyItemShortCut(),
shortCutFactory.moveUpItemShortCut(),
shortCutFactory.moveDownItemShortCut(),
shortCutFactory.sortItemShortCut()
};
}
private ShortCut4JControlPane createRemoveItemShortCut() {
ShortCut4JControlPane shortCut4JControlPane = shortCutFactory.removeItemShortCut();
//替换删除按钮的check事件。
ShortCut shortCut = shortCut4JControlPane.getShortCut();
shortCut4JControlPane = new MoreThanOneShortCut(shortCut);
return shortCut4JControlPane;
}
public void initListener() {
nameableList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
chartPreStyleManagerPane.refreshDefaultColorBox();
}
});
nameableList.addModNameActionListener(new ModNameActionListener() {
@Override
public void nameModed(int index, String oldName, String newName) {
chartPreStyleManagerPane.refreshDefaultColorBox(oldName, newName);
}
});
}
public void populateBean() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance().mirror();
ArrayList list = new ArrayList();
Iterator keys = config.names();
while (keys.hasNext()) {
Object key = keys.next();
ChartColorMatching value = (ChartColorMatching) config.getPreStyle(key);
list.add(new NameObject(Utils.objectToString(key), value));
}
Nameable[] values = (Nameable[]) list.toArray(new Nameable[list.size()]);
populate(values);
if (config.containsName(config.getCurrentStyle())) {
this.setSelectedName(config.getCurrentStyle());
}
}
public void updateBean() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
Nameable[] values = update();
config.clearAllPreStyle();
for (Nameable value : values) {
config.putPreStyle(value.getName(), ((NameObject) value).getObject());
}
}
private class MoreThanOneShortCut extends ShortCut4JControlPane {
public MoreThanOneShortCut(ShortCut shortCut) {
this.shortCut = shortCut;
}
@Override
public void checkEnable() {
this.shortCut.setEnabled(nameableList.getModel().getSize() > 1);
}
}
}

156
designer-chart/src/main/java/com/fr/design/module/ChartPreStyleManagerPane.java

@ -2,72 +2,114 @@ package com.fr.design.module;
import com.fr.base.ChartColorMatching; import com.fr.base.ChartColorMatching;
import com.fr.base.ChartPreStyleConfig; import com.fr.base.ChartPreStyleConfig;
import com.fr.base.Utils; import com.fr.design.chartx.component.combobox.ColorSchemeComboBox;
import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralUtils;
import com.fr.general.NameObject; import com.fr.general.NameObject;
import com.fr.stable.Nameable; import com.fr.stable.Nameable;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import java.util.ArrayList; import javax.swing.JPanel;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.awt.BorderLayout;
import java.awt.Dimension;
/** /**
* 图表预定义管理 界面, 在工具栏-服务器管理中. * 图表预定义管理 界面, 在工具栏-服务器管理中.
*
* @author kunsnat E-mail:kunsnat@gmail.com * @author kunsnat E-mail:kunsnat@gmail.com
* @version 创建时间2013-8-21 下午02:33:48 * @version 创建时间2013-8-21 下午02:33:48
*/ */
public class ChartPreStyleManagerPane extends JListControlPane { public class ChartPreStyleManagerPane extends BasicPane {
@Override private ColorSchemeComboBox defaultColorBox;
/**
* 创建有名字的creator private ChartPreStyleListPane chartPreStyleListPane;
* @return 有名字的creator数组
*/ public ChartPreStyleManagerPane() {
public NameableCreator[] createNameableCreators() { initComponent();
return new NameableCreator[]{ }
new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_PreStyle_Duplicate"),
ChartColorMatching.class, ChartPreStylePane.class) private void initComponent() {
}; this.setLayout(FRGUIPaneFactory.createBorderLayout());
} JPanel colorBoxPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
@Override chartPreStyleListPane = new ChartPreStyleListPane(this);
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_PreStyle"); initDefaultColorBox();
} colorBoxPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Chart_Match_Default_Color_Scheme") + ":"));
colorBoxPane.add(defaultColorBox);
public void populateBean() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance().mirror(); this.add(colorBoxPane, BorderLayout.NORTH);
ArrayList list = new ArrayList(); this.add(chartPreStyleListPane, BorderLayout.CENTER);
}
Iterator keys = config.names();
while(keys.hasNext()) { private void initDefaultColorBox() {
Object key = keys.next(); Map<String, ColorSchemeComboBox.ColorInfo> colorSchemes = new LinkedHashMap<>();
ChartColorMatching value = (ChartColorMatching) config.getPreStyle(key); ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
Iterator names = config.names();
list.add(new NameObject(Utils.objectToString(key), value)); while (names.hasNext()) {
} Object key = names.next();
ColorSchemeComboBox.ColorInfo colorInfo = new ColorSchemeComboBox.ColorInfo();
Nameable[] values = (Nameable[])list.toArray(new Nameable[list.size()]); ChartColorMatching colorMatching = (ChartColorMatching) config.getPreStyle(key);
populate(values); colorInfo.setGradient(colorMatching.getGradient());
colorInfo.setColors(colorMatching.getColorList());
if(config.containsName(config.getCurrentStyle())) { colorSchemes.put(colorMatching.getId(), colorInfo);
this.setSelectedName(config.getCurrentStyle()); }
} defaultColorBox = new ColorSchemeComboBox(colorSchemes);
} defaultColorBox.setPreferredSize(new Dimension(TableLayout4VanChartHelper.EDIT_AREA_WIDTH, 20));
}
public void updateBean() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance(); private void refreshColorSchemes() {
Nameable[] nameables = chartPreStyleListPane.update();
config.setCurrentStyle(getSelectedName()); Map<String, ColorSchemeComboBox.ColorInfo> colorSchemes = new LinkedHashMap<>();
for (Nameable value : nameables) {
Nameable[] values = update(); String name = value.getName();
config.clearAllPreStyle(); ChartColorMatching colorMatching = (ChartColorMatching) ((NameObject) value).getObject();
ColorSchemeComboBox.ColorInfo colorInfo = new ColorSchemeComboBox.ColorInfo();
for (Nameable value : values) { colorInfo.setGradient(colorMatching.getGradient());
config.putPreStyle(value.getName(), ((NameObject) value).getObject()); colorInfo.setColors(colorMatching.getColorList());
} colorSchemes.put(name, colorInfo);
} }
defaultColorBox.refresh(colorSchemes);
}
public void refreshDefaultColorBox() {
Object selectedItem = defaultColorBox.getSelectedItem();
refreshColorSchemes();
defaultColorBox.setSelectedItem(selectedItem);
}
public void refreshDefaultColorBox(String oldName, String newName) {
Object selectedItem = defaultColorBox.getSelectedItem();
if (ComparatorUtils.equals(selectedItem, oldName)) {
selectedItem = newName;
}
refreshColorSchemes();
defaultColorBox.setSelectedItem(selectedItem);
}
@Override
protected String title4PopupWindow() {
return Toolkit.i18nText("Fine-Design_Report_ServerM_Predefined_Styles");
}
public void populateBean() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
String currentStyle = config.getCurrentStyle();
defaultColorBox.setSelectedItem(currentStyle);
chartPreStyleListPane.populateBean();
}
public void updateBean() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
config.setCurrentStyle(GeneralUtils.objectToString(defaultColorBox.getSelectedItem()));
chartPreStyleListPane.updateBean();
}
} }

2
designer-chart/src/main/java/com/fr/design/module/ChartPreStylePane.java

@ -80,7 +80,7 @@ public class ChartPreStylePane extends BasicBeanPane<ChartColorMatching> {
} }
} }
private void refreshWhenStyleChange(ChartColorMatching preStyle) { protected void refreshWhenStyleChange(ChartColorMatching preStyle) {
if(chartComponent != null) { if(chartComponent != null) {
demoPlot.setPlotFillStyle(ChartUtils.chartColorMatching2AttrFillStyle(preStyle)); demoPlot.setPlotFillStyle(ChartUtils.chartColorMatching2AttrFillStyle(preStyle));
chartComponent.reset(); chartComponent.reset();

4
designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java

@ -306,12 +306,12 @@ public class SelectionModel {
// 清除被选中的组件 // 清除被选中的组件
selection.reset(); selection.reset();
} }
designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED);
setSelectedCreator(isInPara ? designer.getParaComponent() : designer.getRootComponent());
setSelectedCreator(isInPara ? designer.getParaComponent() : designer.getRootComponent());
// 触发事件 // 触发事件
designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED);
designer.repaint(); designer.repaint();
} }
} }

16
designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java

@ -298,7 +298,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
@Override @Override
public JComponent createToolPane(BaseJForm jform, FormDesigner formEditor) { public JComponent createToolPane(BaseJForm jform, FormDesigner formEditor) {
if (!DesignerMode.isAuthorityEditing()) { if (!DesignerMode.isAuthorityEditing()) {
if (isDedicateContainer()) { if (isDedicateContainer() && this.getComponentCount() > 0) {
// 图表块和报表块由于控件树处不显示,但对应的属性表要显示,此处处理下 // 图表块和报表块由于控件树处不显示,但对应的属性表要显示,此处处理下
XCreator child = ((XLayoutContainer) this).getXCreator(0); XCreator child = ((XLayoutContainer) this).getXCreator(0);
return child.createToolPane(jform, formEditor); return child.createToolPane(jform, formEditor);
@ -408,7 +408,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public Component getParentShow(){ public Component getParentShow(){
return this.getParent(); return this.getParent();
} }
/** /**
* 重置组件的名称 * 重置组件的名称
* *
@ -418,18 +418,18 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void resetCreatorName(String name) { public void resetCreatorName(String name) {
toData().setWidgetName(name); toData().setWidgetName(name);
} }
/** /**
* 遍历所有命名相关的组件到集合中 * 遍历所有命名相关的组件到集合中
* *
* @param xCreators 集合 * @param xCreators 集合
*/ */
public void traversalNameRelatedXCreators(Set<XCreator> xCreators) { public void traversalNameRelatedXCreators(Set<XCreator> xCreators) {
xCreators.add(this); xCreators.add(this);
int componentCount = getComponentCount(); int componentCount = getComponentCount();
for (int i = 0; i < componentCount; i++) { for (int i = 0; i < componentCount; i++) {
Component component = getComponent(i); Component component = getComponent(i);
if (component instanceof XCreator) { if (component instanceof XCreator) {
XCreator xCreator = (XCreator) component; XCreator xCreator = (XCreator) component;
@ -439,7 +439,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
} }
} }
} }
/** /**
* 重置组件的可见性 * 重置组件的可见性
* *
@ -448,7 +448,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void resetVisible(boolean visible) { public void resetVisible(boolean visible) {
toData().setVisible(visible); toData().setVisible(visible);
} }
/** /**
* 返回编辑的子组件scale为其内部组件 * 返回编辑的子组件scale为其内部组件
* @return 组件 * @return 组件
@ -804,4 +804,4 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
return false; return false;
} }
} }

2
designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java

@ -105,7 +105,7 @@ public class FormCreatorDropTarget extends DropTarget {
SharableEditorProvider sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); SharableEditorProvider sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId);
SharableWidgetProvider bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); SharableWidgetProvider bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId);
if (sharableEditor != null && bindInfo != null) { if (sharableEditor != null && bindInfo != null) {
Map<String, String> tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource()); Map<String, String> tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true);
//合并数据集之后,可能会有数据集名称变化,做一下联动 //合并数据集之后,可能会有数据集名称变化,做一下联动
//共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集 //共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集
for (Map.Entry<String, String> entry : tdNameMap.entrySet()) { for (Map.Entry<String, String> entry : tdNameMap.entrySet()) {

2
designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java

@ -258,6 +258,7 @@ public class RichTextToolBar extends BasicPane{
boolean isSub = RichTextToolBar.this.subPane.isSelected(); boolean isSub = RichTextToolBar.this.subPane.isSelected();
MutableAttributeSet attr = new SimpleAttributeSet(); MutableAttributeSet attr = new SimpleAttributeSet();
if (!isSub && RichTextToolBar.this.superPane.isSelected()) { if (!isSub && RichTextToolBar.this.superPane.isSelected()) {
RichTextToolBar.this.superPane.setSelected(false);
StyleConstants.setSuperscript(attr, false); StyleConstants.setSuperscript(attr, false);
} }
// 调用setCharacterAttributes函数设置文本区选择文本的字体 // 调用setCharacterAttributes函数设置文本区选择文本的字体
@ -273,6 +274,7 @@ public class RichTextToolBar extends BasicPane{
// 调用setCharacterAttributes函数设置文本区选择文本的字体 // 调用setCharacterAttributes函数设置文本区选择文本的字体
MutableAttributeSet attr = new SimpleAttributeSet(); MutableAttributeSet attr = new SimpleAttributeSet();
if (!isSuper && RichTextToolBar.this.subPane.isSelected()) { if (!isSuper && RichTextToolBar.this.subPane.isSelected()) {
RichTextToolBar.this.subPane.setSelected(false);
StyleConstants.setSubscript(attr, false); StyleConstants.setSubscript(attr, false);
} }
StyleConstants.setSuperscript(attr, !isSuper); StyleConstants.setSuperscript(attr, !isSuper);

30
designer-realize/src/main/java/com/fr/design/mainframe/CellElementPropertyPane.java

@ -4,9 +4,13 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.cell.CellElementPropertyComponent;
import com.fr.design.fun.BackgroundQuickUIProvider; import com.fr.design.fun.BackgroundQuickUIProvider;
import com.fr.design.fun.CellAttributeProvider; import com.fr.design.fun.CellAttributeProvider;
import com.fr.design.fun.CellPropertyPaneProvider;
import com.fr.design.fun.PresentKindProvider; import com.fr.design.fun.PresentKindProvider;
import com.fr.design.fun.PropertyItemPaneProvider;
import com.fr.design.gui.frpane.UITitlePanel; import com.fr.design.gui.frpane.UITitlePanel;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itabpane.TitleChangeListener; import com.fr.design.gui.itabpane.TitleChangeListener;
@ -31,6 +35,7 @@ import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.Dimension;
import java.util.Set;
/** /**
@ -156,6 +161,7 @@ public class CellElementPropertyPane extends DockingView {
return; return;
} }
ePane.getSelection().populatePropertyPane(ePane); ePane.getSelection().populatePropertyPane(ePane);
populateExtraCellProperties(ePane);
} }
@Override @Override
@ -188,5 +194,29 @@ public class CellElementPropertyPane extends DockingView {
EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_CELL_ATTR); EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_CELL_ATTR);
EastRegionContainerPane.getInstance().setWindow2PreferWidth(); EastRegionContainerPane.getInstance().setWindow2PreferWidth();
} }
private void populateExtraCellProperties(ElementCasePane ePane) {
if (ePane == null) {
return;
}
Selection selection = ePane.getSelection();
if (selection instanceof CellSelection) {
//单元格属性,限定下是选中单个单元格
TemplateElementCase elementCase = ePane.getEditingElementCase();
if (elementCase != null) {
Set<PropertyItemPaneProvider> itemPaneProviders = ExtraDesignClassManager.getInstance().getArray(PropertyItemPaneProvider.XML_TAG);
if (itemPaneProviders != null) {
for (PropertyItemPaneProvider itemPaneProvider : itemPaneProviders) {
if(itemPaneProvider instanceof CellPropertyPaneProvider){
CellPropertyPaneProvider cellPropertyPaneProvider = (CellPropertyPaneProvider) itemPaneProvider;
CellElementPropertyComponent cellElementPropertyPane = cellPropertyPaneProvider.getSingletonCelPropertyPane();
if (cellElementPropertyPane != null && cellElementPropertyPane.accept(ePane)) {
cellElementPropertyPane.populate(ePane);
}
}
}
}
}
}
}
} }

2
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java

@ -28,7 +28,6 @@ import com.fr.design.present.ConditionAttributesGroupPane;
import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.roleAuthority.RolesAlreadyEditedPane;
import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionEvent;
import com.fr.design.selection.SelectionListener; import com.fr.design.selection.SelectionListener;
import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection; import com.fr.grid.selection.Selection;
import com.fr.page.ReportSettingsProvider; import com.fr.page.ReportSettingsProvider;
@ -82,6 +81,7 @@ public class ElementCasePaneDelegate extends ElementCasePane<WorkSheet> {
} }
CellWidgetPropertyPane.getInstance().populate(ElementCasePaneDelegate.this); CellWidgetPropertyPane.getInstance().populate(ElementCasePaneDelegate.this);
CellElementPropertyPane.getInstance().populate(ElementCasePaneDelegate.this); CellElementPropertyPane.getInstance().populate(ElementCasePaneDelegate.this);
QuickEditorRegion.getInstance().populate(getCurrentEditor()); QuickEditorRegion.getInstance().populate(getCurrentEditor());
JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
// 模板初始化完成后,才能初始化超级链接面板 // 模板初始化完成后,才能初始化超级链接面板

1
designer-realize/src/main/java/com/fr/design/write/submit/SmartInsertDBManipulationPane.java

@ -238,6 +238,7 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
dlg.setModal(false); dlg.setModal(false);
dlg.setVisible(true); dlg.setVisible(true);
dlg.setAlwaysOnTop(true);
} }
private void showDialogAfterAddCellAction() { private void showDialogAfterAddCellAction() {

Loading…
Cancel
Save