Browse Source

REPORT-58062 【主题切换】细节定制-单元格样式-样式数量较多,菜单栏中选择时没有滚动条

【问题原因】
1. 模版主题功能中工具栏样式按钮中的预定义样式
下拉列表废弃,点击样式菜单直接跳转到右侧属
性面板中的单元格样式面板

2. 修复之前版本就有的单元格样式面板切换交互问题,以及不同单元格之间切换,其样式面板的展示问题.
正确的交互行为应该是:
(1)如果之前有跟随主题的样式,则打开样式面板显示跟随主题,否则就是自定义
(2)对于同一个单元格,用户从自定义切换到跟随主题,则跟随主题没有选中项,且用户样式依然为自定义样式,
当用户在跟随主题面板中选择了某个样式,则用户样式变为跟随主题面板中的被选中样式
(3)对于同一个单元格,用户从跟随主题切换到自定义,如果跟随主题里之前有选中项,自定义的设置与那个被选中项
一致,否则为默认样式,且将单元格样式设置为自定义样式

【改动思路】
同上
research/11.0
Starryi 3 years ago
parent
commit
fbde5db5db
  1. 26
      designer-realize/src/main/java/com/fr/design/actions/cell/CellStyleAttrAction.java
  2. 22
      designer-realize/src/main/java/com/fr/design/actions/cell/CustomCellStyleAction.java
  3. 7
      designer-realize/src/main/java/com/fr/design/actions/cell/GlobalStyleMenuDef.java
  4. 5
      designer-realize/src/main/java/com/fr/design/actions/cell/StyleAction.java
  5. 4
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneDelegate.java
  6. 2
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java
  7. 43
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java
  8. 9
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/ThemedCellStyleListPane.java
  9. 25
      designer-realize/src/main/java/com/fr/grid/selection/CellSelection.java
  10. 4
      designer-realize/src/main/java/com/fr/poly/creator/ECBlockPane.java

26
designer-realize/src/main/java/com/fr/design/actions/cell/CellStyleAttrAction.java

@ -0,0 +1,26 @@
package com.fr.design.actions.cell;
import com.fr.base.BaseUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.design.menu.KeySetUtils;
import com.fr.general.IOUtils;
/**
* @author Starryi
* @version 1.0
* Created by Starryi on 2021/8/26
*/
public class CellStyleAttrAction extends CellAttributeTableAction {
public CellStyleAttrAction() {
this.setMenuKeySet(KeySetUtils.GLOBAL_STYLE);
this.setName(getMenuKeySet().getMenuKeySetName());
this.setMnemonic(getMenuKeySet().getMnemonic());
this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/m_format/cell.png"));
}
@Override
protected String getID() {
return Toolkit.i18nText("Fine-Design_Form_Widget_Style");
}
}

22
designer-realize/src/main/java/com/fr/design/actions/cell/CustomCellStyleAction.java

@ -0,0 +1,22 @@
package com.fr.design.actions.cell;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.CellElementPropertyPane;
import java.awt.event.ActionEvent;
/**
* @author Starryi
* @version 1.0
* Created by Starryi on 2021/8/26
*/
public class CustomCellStyleAction extends CellStyleAttrAction {
@Override
public void actionPerformed(ActionEvent e) {
CellElementPropertyPane.getInstance().GoToPane(
Toolkit.i18nText("Fine-Design_Report_Engine_Style"),
Toolkit.i18nText("Fine-Design_Report_Engine_Custom")
);
}
}

7
designer-realize/src/main/java/com/fr/design/actions/cell/GlobalStyleMenuDef.java

@ -28,6 +28,13 @@ import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener; import java.awt.event.ContainerListener;
import java.util.List; import java.util.List;
/**
* 11.beta.1
* REPORT-51919 主题切换
* REPORT-58062 主题切换细节定制-单元格样式-样式数量较多菜单栏中选择时没有滚动条
* 模版主题化后该菜单列表废弃点击工具栏-单元格-样式菜单将直接跳转到右侧栏单元格样式面板
* @deprecated
*/
public class GlobalStyleMenuDef extends MenuDef { public class GlobalStyleMenuDef extends MenuDef {
private static final int MAX_LENTH = 12; private static final int MAX_LENTH = 12;
private ElementCasePane ePane; private ElementCasePane ePane;

5
designer-realize/src/main/java/com/fr/design/actions/cell/StyleAction.java

@ -12,6 +12,11 @@ import com.fr.design.mainframe.CellElementPropertyPane;
import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.KeySetUtils;
/**
* 11.beta.1
* REPORT-51919 主题切换
* @deprecated
*/
public class StyleAction extends UpdateAction { public class StyleAction extends UpdateAction {
public StyleAction() { public StyleAction() {

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

@ -5,9 +5,9 @@ import com.fr.design.DesignState;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.cell.CellAttributeAction; import com.fr.design.actions.cell.CellAttributeAction;
import com.fr.design.actions.cell.CellExpandAttrAction; import com.fr.design.actions.cell.CellExpandAttrAction;
import com.fr.design.actions.cell.CellStyleAttrAction;
import com.fr.design.actions.cell.CellWidgetAttrAction; import com.fr.design.actions.cell.CellWidgetAttrAction;
import com.fr.design.actions.cell.ConditionAttributesAction; import com.fr.design.actions.cell.ConditionAttributesAction;
import com.fr.design.actions.cell.GlobalStyleMenuDef;
import com.fr.design.actions.columnrow.InsertColumnAction; import com.fr.design.actions.columnrow.InsertColumnAction;
import com.fr.design.actions.columnrow.InsertRowAction; import com.fr.design.actions.columnrow.InsertRowAction;
import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.core.ActionFactory;
@ -201,7 +201,7 @@ public class ElementCasePaneDelegate extends ElementCasePane<WorkSheet> {
MenuDef menuDef = new MenuDef(KeySetUtils.CELL.getMenuKeySetName(), KeySetUtils.CELL.getMnemonic()); MenuDef menuDef = new MenuDef(KeySetUtils.CELL.getMenuKeySetName(), KeySetUtils.CELL.getMnemonic());
menuDef.addShortCut(new CellExpandAttrAction()); menuDef.addShortCut(new CellExpandAttrAction());
menuDef.addShortCut(new GlobalStyleMenuDef(this)); menuDef.addShortCut(new CellStyleAttrAction());
// 单元格形态 // 单元格形态
menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this)); menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this));

2
designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java

@ -70,7 +70,7 @@ public class CellStylePane extends AbstractCellAttrPane {
@Override @Override
public void updateBeans() { public void updateBeans() {
Object[] selectionCellBorderObjects = BorderUtils.createCellBorderObject(elementCasePane); Object[] selectionCellBorderObjects = BorderUtils.createCellBorderObject(elementCasePane);
if (stylePane.getSelectedIndex() == 1) { if (stylePane.getSelectedIndex() == 0) {
Style s = stylePane.updateBean(); Style s = stylePane.updateBean();
TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); TemplateElementCase elementCase = elementCasePane.getEditingElementCase();
int cellRectangleCount = cs.getCellRectangleCount(); int cellRectangleCount = cs.getCellRectangleCount();

43
designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java

@ -8,17 +8,15 @@ import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.teamdev.jxbrowser.deps.org.checkerframework.checker.guieffect.qual.UI; import com.fr.log.FineLoggerFactory;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.CardLayout; import java.awt.CardLayout;
@ -69,8 +67,22 @@ public class StylePane extends BasicPane {
int selectedIndex = followingThemeButtonGroup.getSelectedIndex(); int selectedIndex = followingThemeButtonGroup.getSelectedIndex();
cardLayout.show(contentPane, FOLLOWING_THEME_STRING_ARRAYS[selectedIndex]); cardLayout.show(contentPane, FOLLOWING_THEME_STRING_ARRAYS[selectedIndex]);
if (selectedIndex == 1) { if (selectedIndex == 1) {
customStylePane.populateBean(themedCellStyleListPane.updateBean()); // 对于同一个单元格,跟随主题切换到自定义,若跟随主题面板有选中项,则自定义中的配置与其保持一致,否则自定义中配置保持不变
NameStyle lastSelectedNameStyle = themedCellStyleListPane.updateBean();
if (lastSelectedNameStyle != null) {
Style lastSelectedRealStyle = lastSelectedNameStyle.getRealStyle();
try {
lastSelectedRealStyle = (Style) lastSelectedRealStyle.clone();
if (lastSelectedRealStyle != null) {
customStylePane.populateBean(lastSelectedRealStyle);
}
} catch (CloneNotSupportedException ex) {
FineLoggerFactory.getLogger().error(ex.getMessage(), ex);
}
}
} else { } else {
// 对于同一个单元格,自定义切换到跟随主题,跟随主题应当清除选中项,即没有选中任何主题中的单元格样式,
// 因为还未选中,所以自定义中的配置保持不变,此时若用户切换会自定义,配置应当与之前一样
themedCellStyleListPane.populateBean(null); themedCellStyleListPane.populateBean(null);
} }
} }
@ -153,9 +165,7 @@ public class StylePane extends BasicPane {
} }
public void dealWithBorder(ElementCasePane ePane) { public void dealWithBorder(ElementCasePane ePane) {
if (getSelectedIndex() == 1) { customStylePane.dealWithBorder(ePane);
customStylePane.dealWithBorder(ePane);
}
} }
public void setSelctedByName(String id) { public void setSelctedByName(String id) {
@ -168,16 +178,27 @@ public class StylePane extends BasicPane {
public Style updateBean() { public Style updateBean() {
if (getSelectedIndex() == 0) { if (getSelectedIndex() == 0) {
return themedCellStyleListPane.updateBean(); NameStyle nameStyle = themedCellStyleListPane.updateBean();
} else { if (nameStyle != null) {
return customStylePane.updateBean(); // 只有当前样式面板是跟随主题面板,且跟随主题面板中存在选中项,才使用该样式设置单元格
return nameStyle;
}
} }
return customStylePane.updateBean();
} }
public void populateBean(Style style) { public void populateBean(Style style) {
if (style instanceof NameStyle) { if (style instanceof NameStyle) {
NameStyle nameStyle = (NameStyle) style;
setSelectedIndex(0); setSelectedIndex(0);
themedCellStyleListPane.populateBean((NameStyle) style); themedCellStyleListPane.populateBean(nameStyle);
Style realStyle = nameStyle.getRealStyle();
try {
realStyle = (Style) realStyle.clone();
customStylePane.populateBean(realStyle);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
} else { } else {
setSelectedIndex(1); setSelectedIndex(1);
customStylePane.populateBean(style); customStylePane.populateBean(style);

9
designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/ThemedCellStyleListPane.java

@ -7,6 +7,7 @@ import com.fr.base.theme.TemplateTheme;
import com.fr.base.theme.settings.ThemedCellStyle; import com.fr.base.theme.settings.ThemedCellStyle;
import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerBean; import com.fr.design.mainframe.DesignerBean;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
@ -111,6 +112,10 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane<NameStyle> imp
@Override @Override
public void populateBean(NameStyle ob) { public void populateBean(NameStyle ob) {
refreshBeanElement(); refreshBeanElement();
if (ob == null) {
styleList.setSelectedIndex(-1);
return;
}
for (int i = 0; i < defaultListModel.getSize(); i++) { for (int i = 0; i < defaultListModel.getSize(); i++) {
if (ComparatorUtils.equals(ob, defaultListModel.get(i))) { if (ComparatorUtils.equals(ob, defaultListModel.get(i))) {
styleList.setSelectedIndex(i); styleList.setSelectedIndex(i);
@ -121,7 +126,7 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane<NameStyle> imp
@Override @Override
public NameStyle updateBean() { public NameStyle updateBean() {
return (NameStyle) styleList.getSelectedValue(); return styleList.getSelectedValue();
} }
/** /**
@ -130,7 +135,7 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane<NameStyle> imp
* @return 标题 * @return 标题
*/ */
public String title4PopupWindow() { public String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Predefined_Style"); return Toolkit.i18nText("Fine-Design_Report_Predefined_Style");
} }
/** /**

25
designer-realize/src/main/java/com/fr/grid/selection/CellSelection.java

@ -10,13 +10,11 @@ import com.fr.config.ServerPreferenceConfig;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.cell.CellAttributeAction; import com.fr.design.actions.cell.CellAttributeAction;
import com.fr.design.actions.cell.CellExpandAttrAction; import com.fr.design.actions.cell.CellExpandAttrAction;
import com.fr.design.actions.cell.CellStyleAttrAction;
import com.fr.design.actions.cell.CellWidgetAttrAction; import com.fr.design.actions.cell.CellWidgetAttrAction;
import com.fr.design.actions.cell.CleanAuthorityAction; import com.fr.design.actions.cell.CleanAuthorityAction;
import com.fr.design.actions.cell.ConditionAttributesAction; import com.fr.design.actions.cell.ConditionAttributesAction;
import com.fr.design.actions.cell.EditCellAction; import com.fr.design.actions.cell.EditCellAction;
import com.fr.design.actions.cell.GlobalStyleMenuDef;
import com.fr.design.actions.cell.GlobalStyleMenuDef.GlobalStyleSelection;
import com.fr.design.actions.cell.StyleAction;
import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.core.ActionFactory;
import com.fr.design.actions.edit.CopyAction; import com.fr.design.actions.edit.CopyAction;
import com.fr.design.actions.edit.CutAction; import com.fr.design.actions.edit.CutAction;
@ -29,7 +27,6 @@ import com.fr.design.designer.TargetComponent;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.gui.imenu.UIMenu;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.mainframe.CellElementPropertyPane; import com.fr.design.mainframe.CellElementPropertyPane;
import com.fr.design.mainframe.CellWidgetPropertyPane; import com.fr.design.mainframe.CellWidgetPropertyPane;
@ -470,26 +467,8 @@ public class CellSelection extends Selection {
} }
popup.add(new EditCellAction(ePane).createMenuItem()); popup.add(new EditCellAction(ePane).createMenuItem());
popup.add(DeprecatedActionManager.getCellMenu(ePane).createJMenu()); popup.add(DeprecatedActionManager.getCellMenu(ePane).createJMenu());
// richer:add global style menu
popup.add(new CellExpandAttrAction().createMenuItem()); popup.add(new CellExpandAttrAction().createMenuItem());
if (!ServerPreferenceConfig.getInstance().hasStyle()) { popup.add(new CellStyleAttrAction().createMenuItem());
UIMenu styleMenu = new UIMenu(KeySetUtils.GLOBAL_STYLE.getMenuName());
styleMenu.setIcon(BaseUtils.readIcon("/com/fr/design/images/m_format/cell.png"));
Iterator iterato = ServerPreferenceConfig.getInstance().getStyleNameIterator();
while (iterato.hasNext()) {
String name = (String) iterato.next();
name = GlobalStyleMenuDef.judgeChina(name);
NameStyle nameStyle = NameStyle.getInstance(name);
UpdateAction.UseMenuItem useMenuItem = new GlobalStyleSelection(ePane, nameStyle).createUseMenuItem();
useMenuItem.setNameStyle(nameStyle);
styleMenu.add(useMenuItem);
}
styleMenu.addSeparator();
styleMenu.add(new GlobalStyleMenuDef.CustomStyleAction(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom")));
popup.add(styleMenu);
} else {
popup.add(new StyleAction().createMenuItem());
}
popup.add(DeprecatedActionManager.getPresentMenu(ePane).createJMenu()); popup.add(DeprecatedActionManager.getPresentMenu(ePane).createJMenu());
popup.add(new CellAttributeAction().createMenuItem()); popup.add(new CellAttributeAction().createMenuItem());
JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();

4
designer-realize/src/main/java/com/fr/poly/creator/ECBlockPane.java

@ -8,9 +8,9 @@ import com.fr.design.DesignState;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.cell.CellAttributeAction; import com.fr.design.actions.cell.CellAttributeAction;
import com.fr.design.actions.cell.CellExpandAttrAction; import com.fr.design.actions.cell.CellExpandAttrAction;
import com.fr.design.actions.cell.CellStyleAttrAction;
import com.fr.design.actions.cell.CellWidgetAttrAction; import com.fr.design.actions.cell.CellWidgetAttrAction;
import com.fr.design.actions.cell.ConditionAttributesAction; import com.fr.design.actions.cell.ConditionAttributesAction;
import com.fr.design.actions.cell.GlobalStyleMenuDef;
import com.fr.design.actions.columnrow.InsertColumnAction; import com.fr.design.actions.columnrow.InsertColumnAction;
import com.fr.design.actions.columnrow.InsertRowAction; import com.fr.design.actions.columnrow.InsertRowAction;
import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.core.ActionFactory;
@ -151,7 +151,7 @@ public class ECBlockPane extends PolyElementCasePane {
menuDef.addShortCut(new CellExpandAttrAction()); menuDef.addShortCut(new CellExpandAttrAction());
menuDef.addShortCut(new CellWidgetAttrAction()); menuDef.addShortCut(new CellWidgetAttrAction());
menuDef.addShortCut(new GlobalStyleMenuDef(this)); menuDef.addShortCut(new CellStyleAttrAction());
menuDef.addShortCut(new ConditionAttributesAction()); menuDef.addShortCut(new ConditionAttributesAction());
// 单元格形态 // 单元格形态

Loading…
Cancel
Save