diff --git a/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java b/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java new file mode 100644 index 0000000000..0a93616293 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java @@ -0,0 +1,56 @@ +package com.fr.design.fun; + +import com.fr.base.chart.BaseChartCollection; +import com.fr.chartx.attr.ChartProvider; +import com.fr.general.FRFont; +import com.fr.report.cell.CellElement; +import com.fr.stable.fun.mark.Selectable; + +import java.awt.Font; + +/** + * 主要用于fvs报表块内元素默认值的调整,以达到所见所得效果,后续fvs内置后删除 + */ +public interface DefaultValueAdjustProvider extends Selectable { + String MARK_STRING = "DefaultValueAdjustProvider"; + int CURRENT_LEVEL = 1; + + /** + * 调整单元格对象默认值 + * + * @param cellElement + */ + void adjustCellElement(CellElement cellElement); + + /** + * 调整富文本默认值 + * + * @param fontSize + * @return + */ + int adjustRichTextTransform(int fontSize, double transformedFontSize); + + /** + * 调整ChartCollection + * + * @param chartCollection + */ + void adjustChartCollectionStyle(BaseChartCollection chartCollection); + + /** + * 调整图表 + * + * @param chartProvider + */ + void adjustChart(ChartProvider chartProvider); + + + /** + * 转成当前分辨率下显示的font + * @param font + * @param resolution + * @return + */ + Font transformFontByResolution(FRFont font, int resolution); + +} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractDefaultValueAdjustProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractDefaultValueAdjustProvider.java new file mode 100644 index 0000000000..b2fc58ba8f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractDefaultValueAdjustProvider.java @@ -0,0 +1,24 @@ +package com.fr.design.fun.impl; + + +import com.fr.design.fun.DefaultValueAdjustProvider; +import com.fr.stable.fun.assist.Selector; +import com.fr.stable.fun.impl.AbstractProvider; +import com.fr.stable.fun.mark.API; + +@API(level = DefaultValueAdjustProvider.CURRENT_LEVEL) +public abstract class AbstractDefaultValueAdjustProvider extends AbstractProvider implements DefaultValueAdjustProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + public String mark4Provider() { + return this.getClass().getName(); + } + + public Selector selector() { + return Selector.ALWAYS; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/AbsoluteMeasureUIMode.java b/designer-base/src/main/java/com/fr/design/mainframe/AbsoluteMeasureUIMode.java new file mode 100644 index 0000000000..2085127d73 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/AbsoluteMeasureUIMode.java @@ -0,0 +1,37 @@ +package com.fr.design.mainframe; + +import com.fr.base.AutoChangeLineProvider; +import com.fr.base.DefaultAutoChangeLine; +import com.fr.base.ScreenResolution; +import com.fr.design.fun.ReportLengthUNITProvider; +import com.fr.design.unit.UnitConvertUtil; + +public class AbsoluteMeasureUIMode implements DesignerUIMode { + + private static class AbsoluteMeasureUIModeHolder { + private static final AbsoluteMeasureUIMode absoluteMeasureUIMode = new AbsoluteMeasureUIMode(); + } + + private AbsoluteMeasureUIMode() { + + } + + public static AbsoluteMeasureUIMode getInstance() { + return AbsoluteMeasureUIModeHolder.absoluteMeasureUIMode; + } + + @Override + public ReportLengthUNITProvider parseLengthUNIT(int unitType) { + return UnitConvertUtil.parseLengthUNIT(unitType); + } + + @Override + public AutoChangeLineProvider getAutoChangeLineStrategy() { + return new DefaultAutoChangeLine(); + } + + @Override + public int getScreenResolution() { + return ScreenResolution.getScreenResolution(); + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIMode.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIMode.java new file mode 100644 index 0000000000..801291125a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIMode.java @@ -0,0 +1,17 @@ +package com.fr.design.mainframe; + +import com.fr.base.AutoChangeLineProvider;; +import com.fr.design.fun.ReportLengthUNITProvider; + +/** + * 设计器上和展示相关配置 + */ +public interface DesignerUIMode { + + ReportLengthUNITProvider parseLengthUNIT(int unitType); + + AutoChangeLineProvider getAutoChangeLineStrategy(); + + int getScreenResolution(); + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java index 400f698185..cd99f728a2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java @@ -1,19 +1,14 @@ package com.fr.design.mainframe; import com.fr.base.AutoChangeLineProvider; -import com.fr.base.DefaultAutoChangeLine; -import com.fr.base.ScreenResolution; import com.fr.design.fun.ReportLengthUNITProvider; -import com.fr.design.unit.UnitConvertUtil; -import com.fr.form.fit.NewUIModeAutoChangeLine; import com.fr.general.ComparatorUtils; -import com.fr.stable.Constants; /** * Created by kerry on 2020-06-05 */ public class DesignerUIModeConfig { - private DesignerUIMode mode = DesignerUIMode.ABSOLUTE_MEASURE_UI_MODE; + private DesignerUIMode mode = AbsoluteMeasureUIMode.getInstance(); private static class DesignerUIModeConfigHolder { private static final DesignerUIModeConfig designerUIModeConfig = new DesignerUIModeConfig(); @@ -34,21 +29,25 @@ public class DesignerUIModeConfig { * @return boolean */ public boolean simulateWebUIMode() { - return ComparatorUtils.equals(DesignerUIMode.SIMULATE_WEB_UI_MODE, mode); + return ComparatorUtils.equals(SimulateWebUIMode.getInstance(), mode); } /** * 设置新ui模式 */ public void setSimulateWebUIMode() { - this.mode = DesignerUIMode.SIMULATE_WEB_UI_MODE; + this.mode = SimulateWebUIMode.getInstance(); + } + + public void setDesignerUIMode(DesignerUIMode mode) { + this.mode = mode; } /** * 设置老ui模式 */ public void setAbsoluteMeasureUIMode() { - this.mode = DesignerUIMode.ABSOLUTE_MEASURE_UI_MODE; + this.mode = AbsoluteMeasureUIMode.getInstance(); } /** @@ -78,50 +77,4 @@ public class DesignerUIModeConfig { return mode.getScreenResolution(); } - - private enum DesignerUIMode { - ABSOLUTE_MEASURE_UI_MODE { - @Override - protected ReportLengthUNITProvider parseLengthUNIT(int unitType) { - return UnitConvertUtil.parseLengthUNIT(unitType); - } - - @Override - public AutoChangeLineProvider getAutoChangeLineStrategy() { - return new DefaultAutoChangeLine(); - } - - @Override - protected int getScreenResolution() { - return ScreenResolution.getScreenResolution(); - } - - }, - SIMULATE_WEB_UI_MODE { - @Override - protected ReportLengthUNITProvider parseLengthUNIT(int unitType) { - return new PXReportLengthUNIT(); - } - - @Override - public AutoChangeLineProvider getAutoChangeLineStrategy() { - return new NewUIModeAutoChangeLine(); - } - - @Override - protected int getScreenResolution() { - return Constants.DEFAULT_WEBWRITE_AND_SCREEN_RESOLUTION; - } - - }; - - protected abstract ReportLengthUNITProvider parseLengthUNIT(int unitType); - - public abstract AutoChangeLineProvider getAutoChangeLineStrategy(); - - - protected abstract int getScreenResolution(); - - } - } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/SimulateWebUIMode.java b/designer-base/src/main/java/com/fr/design/mainframe/SimulateWebUIMode.java new file mode 100644 index 0000000000..a13bff759f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/SimulateWebUIMode.java @@ -0,0 +1,38 @@ +package com.fr.design.mainframe; + +import com.fr.base.AutoChangeLineProvider; +import com.fr.design.fun.ReportLengthUNITProvider; +import com.fr.form.fit.NewUIModeAutoChangeLine; +import com.fr.stable.Constants; + +public class SimulateWebUIMode implements DesignerUIMode { + + private static class SimulateWebUIModeHolder { + private static final SimulateWebUIMode simulateWebUIMode = new SimulateWebUIMode(); + } + + private SimulateWebUIMode() { + + } + + public static SimulateWebUIMode getInstance() { + return SimulateWebUIModeHolder.simulateWebUIMode; + } + + + @Override + public ReportLengthUNITProvider parseLengthUNIT(int unitType) { + return new PXReportLengthUNIT(); + } + + @Override + public AutoChangeLineProvider getAutoChangeLineStrategy() { + return new NewUIModeAutoChangeLine(); + } + + @Override + public int getScreenResolution() { + return Constants.DEFAULT_WEBWRITE_AND_SCREEN_RESOLUTION; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java index 8b1abe71b4..0923c7f659 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/utils/DefaultThemedTemplateCellElementCase.java @@ -5,7 +5,9 @@ import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.settings.ThemedCellStyle; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.mainframe.JTemplate; +import com.fr.design.utils.DesignUtils; import com.fr.report.cell.DefaultTemplateCellElement; /** @@ -41,6 +43,10 @@ public class DefaultThemedTemplateCellElementCase { cellElement.setStyle(DesignModeContext.isDuchampMode() ? nameStyle.getRealStyle() : nameStyle); } } + DefaultValueAdjustProvider adjustProvider = DesignUtils.getValueAdjust(); + if (adjustProvider != null) { + adjustProvider.adjustCellElement(cellElement); + } return cellElement; } } diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java index 47690bba9b..dfeeacc608 100644 --- a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java @@ -7,6 +7,7 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; import com.fr.design.deeplink.DeepLinkCore; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.gui.UILookAndFeel; import com.fr.design.i18n.Toolkit; @@ -18,11 +19,14 @@ import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; import com.fr.general.GeneralContext; import com.fr.log.FineLoggerFactory; +import com.fr.plugin.injectable.PluginModule; import com.fr.stable.ArrayUtils; import com.fr.stable.CommonCodeUtils; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.stable.bridge.ObjectHolder; import com.fr.stable.os.OperatingSystem; +import com.fr.stable.plugin.ExtraDesignClassManagerProvider; import com.fr.start.ServerStarter; import com.fr.start.common.DesignerStartupContext; import com.fr.start.common.DesignerStartupUtil; @@ -48,6 +52,7 @@ import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Enumeration; import java.util.Locale; +import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -463,4 +468,17 @@ public class DesignUtils { return xmlDesignerVersion; } + public static DefaultValueAdjustProvider getValueAdjust() { + ExtraDesignClassManager extraDesignClassManager = PluginModule.getAgent(PluginModule.ExtraDesign); + if (extraDesignClassManager != null) { + Set providers = extraDesignClassManager.getArray(DefaultValueAdjustProvider.MARK_STRING); + for (DefaultValueAdjustProvider provider : providers) { + if (provider.selector().accept(new ObjectHolder())) { + return provider; + } + } + } + return null; + } + } diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java index ac75786314..d90f2af422 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java @@ -17,6 +17,7 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.actions.core.ActionFactory; import com.fr.design.border.UITitledBorder; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.icheckbox.UICheckBox; @@ -32,6 +33,7 @@ import com.fr.design.style.color.ColorCell; import com.fr.design.style.color.ColorFactory; import com.fr.design.style.color.ColorSelectBox; import com.fr.design.style.color.ColorSelectable; +import com.fr.design.utils.DesignUtils; import com.fr.general.FRFont; import com.fr.stable.AssistUtils; import com.fr.stable.Constants; @@ -171,6 +173,10 @@ public final class GUICoreUtils { FRFont frFont = style.getFRFont(); textField.setFont(new Font(frFont.getFontName(), frFont.getStyle(), frFont.getShowSize(resolution))); + DefaultValueAdjustProvider valueAdjust = DesignUtils.getValueAdjust(); + if (valueAdjust != null) { + textField.setFont(valueAdjust.transformFontByResolution(frFont, resolution)); + } textField.setForeground(style.getFRFont().getForeground()); if (style.getBackground() instanceof ColorBackground) { diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/replace_help.svg b/designer-base/src/main/resources/com/fr/design/images/buttonicon/replace_help.svg new file mode 100644 index 0000000000..fdbd5eca5e --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/buttonicon/replace_help.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-chart/src/main/java/com/fr/design/chart/ChartDialog.java b/designer-chart/src/main/java/com/fr/design/chart/ChartDialog.java index bce90aaaeb..183f14b768 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/ChartDialog.java +++ b/designer-chart/src/main/java/com/fr/design/chart/ChartDialog.java @@ -4,9 +4,11 @@ import com.fr.base.chart.BaseChartCollection; import com.fr.chart.chartattr.ChartCollection; import com.fr.design.dialog.BasicDialog; import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.gui.chart.MiddleChartDialog; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.third.joda.time.DateTime; @@ -87,6 +89,10 @@ public class ChartDialog extends MiddleChartDialog { return new ActionListener() { public void actionPerformed(ActionEvent e) { chartTypePane.update((ChartCollection) cc, createTime); + DefaultValueAdjustProvider adjustProvider = DesignUtils.getValueAdjust(); + if (adjustProvider != null) { + adjustProvider.adjustChartCollectionStyle(cc); + } doOK(); } }; diff --git a/designer-chart/src/main/java/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer-chart/src/main/java/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 11d2e32e4d..35b0c0d5bc 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -8,10 +8,12 @@ import com.fr.chart.web.ChartHyperPoplink; import com.fr.chartx.attr.ChartProvider; import com.fr.design.chart.gui.ChartComponent; import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.hyperlink.AbstractHyperLinkPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.chart.ChartHyperEditPane; +import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.log.FineLoggerFactory; import com.fr.van.chart.config.DefaultStyleHelper4Van; @@ -67,7 +69,10 @@ public class ChartHyperPoplinkPane extends AbstractHyperLinkPane implements BaseJForm implements BaseJForm implements BaseJForm" + Toolkit.i18nText("Fine-Design_Report_Community_Help") + ""); + UIToggleButton contentButton = new UIToggleButton(Toolkit.i18nText("Fine-Design_Basic_Templates_Content")); contentButton.setSelected(true); contentButton.setBorderPainted(false); - leftJpanel.add(contentButton); - leftJpanel.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, new Color(218, 218, 221))); + leftPanel.add(contentButton); + leftPanel.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, new Color(218, 218, 221))); //填充一下面板 - int labelNum = 14; - for (int i = 0; i < labelNum; i++) { - leftJpanel.add(new UILabel(StringUtils.EMPTY)); + for (int i = 0; i < FILL_COUNT; i++) { + leftPanel.add(new UILabel(StringUtils.EMPTY)); } + + //添加帮助文档按钮及超链 + iconLabel.setIcon(HELP_ICON); + iconLabel.setToolTipText(Toolkit.i18nText("Fine-Design_Replace_Tooltip")); + //设置游标 + iconLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); + iconLabel.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + BrowseUtils.browser(HELP_URL); + } + }); + leftPanel.add(iconLabel); } - public JPanel getLeftJpanel() { - return leftJpanel; + public JPanel getLeftPanel() { + return leftPanel; } - public void setLeftJpanel(JPanel leftJpanel) { - this.leftJpanel = leftJpanel; + public void setLeftPanel(JPanel leftPanel) { + this.leftPanel = leftPanel; } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java index 5c57e6d6a1..0c8819abff 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java @@ -102,8 +102,8 @@ public class ITTableEditor extends UITableModelAdapter { public void add(List list) { for (Info info : list) { addRow(info.getContent()); - fireTableDataChanged(); } + fireTableDataChanged(); } public enum ChooseIndex { diff --git a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java index 74654cd2ef..ebaf13b7f8 100644 --- a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java +++ b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java @@ -12,14 +12,15 @@ import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.form.util.FontTransformUtil; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.UIFormula; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.style.FRFontPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.report.RichTextEditingPane; -import com.fr.design.report.RichTextPane; import com.fr.design.style.color.UIToolbarColorButton; +import com.fr.design.utils.DesignUtils; import com.fr.general.FRFont; import com.fr.log.FineLoggerFactory; import com.fr.report.cell.cellattr.core.RichTextConverter; @@ -51,7 +52,6 @@ import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.math.BigDecimal; /** * @@ -512,12 +512,23 @@ public class RichTextToolBar extends BasicPane { //pt转为px =*4/3 private int scaleUp(int fontSize) { - return roundUp(FontTransformUtil.pt2px(fontSize)); + double value = FontTransformUtil.pt2px(fontSize); + DefaultValueAdjustProvider adjustProvider = DesignUtils.getValueAdjust(); + if (adjustProvider != null) { + return adjustProvider.adjustRichTextTransform(fontSize, value); + + } + return roundUp(value); } //px转pt = *3/4 private int scaleDown(int fontSize) { - return roundUp(FontTransformUtil.px2pt(fontSize)); + double value = FontTransformUtil.px2pt(fontSize); + DefaultValueAdjustProvider adjustProvider = DesignUtils.getValueAdjust(); + if (adjustProvider != null) { + return adjustProvider.adjustRichTextTransform(fontSize, value); + } + return roundUp(value); } diff --git a/designer-realize/src/main/java/com/fr/grid/AbstractGridHeaderMouseHandler.java b/designer-realize/src/main/java/com/fr/grid/AbstractGridHeaderMouseHandler.java index 97e95a34f4..2927f74d69 100644 --- a/designer-realize/src/main/java/com/fr/grid/AbstractGridHeaderMouseHandler.java +++ b/designer-realize/src/main/java/com/fr/grid/AbstractGridHeaderMouseHandler.java @@ -38,6 +38,8 @@ import java.lang.reflect.Method; public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { protected static final int FUZZY_EDGE = 10; protected static final int SEPARATOR_GAP = 5; + //只选中一个 + private static final int ONLY_SELECT_ONE = 1; protected GridHeader gHeader; private int dragType = GridUtils.DRAG_NONE; @@ -109,7 +111,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { if (between(evt, tmpSize1, tmpSize2)) { if (index >= dragIndex) { try { - if(method != null) { + if (method != null) { method.invoke(report, dragIndex, FU.valueOfPix(evtOffset(evt, oldEndValueSize), resolution)); } } catch (Exception e) { @@ -118,7 +120,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { //sizeList.set(dragIndex, FU.valueOfPix(evtOffset(evt, oldEndValueSize), resolution)); } else { try { - if(method != null) { + if (method != null) { method.invoke(report, index, FU.valueOfPix(evtOffset(evt, (int) tmpSize1), resolution)); } } catch (Exception e) { @@ -128,7 +130,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { // from all to do. for (int h = (dragIndex - 1); h > index; h--) { try { - if(method != null) { + if (method != null) { method.invoke(report, h, UNIT.ZERO); } } catch (Exception e) { @@ -219,7 +221,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { ePane.getGrid().stopEditing();// james 停止当前的所有编辑 // peter:选中格子位置. - ColumnRow selectedCellPoint = GridUtils.getAdjustEventColumnRow_withresolution(ePane, evt.getX(), evt.getY(),resolution); + ColumnRow selectedCellPoint = GridUtils.getAdjustEventColumnRow_withresolution(ePane, evt.getX(), evt.getY(), resolution); iterateScrollBar(ePane, evt, PRESS_ACTION); @@ -227,7 +229,7 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { if (SwingUtilities.isRightMouseButton(evt)) { Selection cs = ePane.getSelection(); resetSelectionByRightButton(selectedCellPoint, cs, ePane); - + checkEndMultiSelectIndex(cs); UIPopupMenu popupMenu = createPopupMenu(ePane, evt, Math.max(dragIndex, Math.max(this.startMultiSelectIndex, this.endMultiSelectIndex))); if (popupMenu != null) { GUICoreUtils.showPopupMenu(popupMenu, gHeader, evt.getX() + 1, evt.getY() + 1); @@ -246,6 +248,16 @@ public abstract class AbstractGridHeaderMouseHandler extends MouseInputAdapter { ePane.repaint(); } + /** + * 如果行列中有只选中一个的情况,更新下endIndex,防止列宽或行宽不匹配 + * @param selection 与ElementCasePane绑定的选择对象 + */ + private void checkEndMultiSelectIndex(Selection selection) { + if (selection.getSelectedColumns().length == ONLY_SELECT_ONE || selection.getSelectedRows().length == ONLY_SELECT_ONE) { + this.endMultiSelectIndex = this.startMultiSelectIndex; + } + } + protected abstract void resetSelectionByRightButton(ColumnRow mouseSelectedColumnRow, Selection cs, ElementCasePane ePane);