Browse Source

REPORT-2773 mac中复制快捷键的修复

master
hzzz 8 years ago
parent
commit
7e2f1a851d
  1. 340
      designer/src/com/fr/design/mainframe/FormatBrushAction.java

340
designer/src/com/fr/design/mainframe/FormatBrushAction.java

@ -1,171 +1,171 @@
package com.fr.design.mainframe;
import com.fr.base.BaseUtils;
import com.fr.base.Style;
import com.fr.design.actions.ElementCaseAction;
import com.fr.general.Inter;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.Selection;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.elementcase.TemplateElementCase;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER;
/**
* Author : daisy
* Date: 13-8-7
* Time: 上午11:05
*/
public class FormatBrushAction extends ElementCaseAction {
private ElementCasePane ePane;
private CellSelection oldSelection;
public FormatBrushAction(ElementCasePane t) {
super(t);
this.setName(Inter.getLocText("M_Edit-FormatBrush"));
this.setMnemonic('B');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/formatBrush.png"));
this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, DEFAULT_MODIFIER));
}
public boolean executeActionReturnUndoRecordNeeded() {
ePane = (ElementCasePane) getEditingComponent();
if (ePane != null) {
Selection selection = ePane.getSelection();
if (!(selection instanceof CellSelection)) {
return false;
}
oldSelection = ((CellSelection) selection).clone();
ePane.setFormatReferencedCell(oldSelection);
int cellRectangleCount = oldSelection.getCellRectangleCount();
if (cellRectangleCount > 1) {
//格式刷只支持单次选择的区域,如果用ctrl复选选中了多片区域,点击格式刷按钮时弹出提示
//判断是不是连续区域
//荣国是连续区域,那么这些长方形的长加起来应该等于
if (!isContinueArea()) {
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Can_not_use_FormatBursh"));
ePane.setFormatState(DesignerContext.FORMAT_STATE_NULL);
ePane.getFormatBrush().setSelected(false);
return false;
}
}
//只对单个区域进行格式刷操作
((ElementCasePane) DesignerContext.getReferencedElementCasePane()).getGrid().setNotShowingTableSelectPane(false);
ePane.repaint();
return true;
}
return false;
}
/**
* 判断是不是连续区域
*
* @return
*/
private boolean isContinueArea() {
int xStart = oldSelection.getCellRectangle(1).x;
int xend = 0;
int yStrat = oldSelection.getCellRectangle(1).y;
int yend = 0;
int totalNum = 0;
for (int i = 0; i < oldSelection.getCellRectangleCount(); i++) {
Rectangle temp = oldSelection.getCellRectangle(i);
if (temp.getX() < xStart) {
xStart = temp.x;
}
if (temp.getX() + temp.getWidth() > xend) {
xend = (int) (temp.getX() + temp.getWidth());
}
if (temp.getY() < yStrat) {
yStrat = temp.y;
}
if (temp.getY() + temp.getHeight() > yend) {
yend = (int) (temp.getY() + temp.getHeight());
}
totalNum += (int) (temp.getWidth() * temp.getHeight());
}
if ((xend - xStart) * (yend - yStrat) == totalNum) {
oldSelection = new CellSelection(xStart, yStrat, (xend - xStart), (yend - yStrat));
ePane.setSelection(oldSelection);
ePane.setFormatReferencedCell(oldSelection);
return true;
}
return false;
}
public void updateFormatBrush(Style[][] referencedStyle, CellSelection cs, ElementCasePane reportPane) {
//得到被参照的单元格的行列数
if (referencedStyle == null) {
return;
}
int rowSpan = referencedStyle[0].length;
int columnSpan = referencedStyle.length;
//开始进行格式刷样式复制
TemplateElementCase elementCase = reportPane.getEditingElementCase();
int rowNum = cs.getRowSpan();
int columnNum = cs.getColumnSpan();
//如果只点选了一个,则自动补足
if (cs.getColumnSpan() * cs.getRowSpan() == 1) {
rowNum = rowSpan;
columnNum = columnSpan;
}
for (int j = 0; j < rowNum; j++) {
for (int i = 0; i < columnNum; i++) {
int column = i + cs.getColumn();
int row = j + cs.getRow();
TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row);
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(column, row);
elementCase.addCellElement(cellElement);
}
cellElement.setStyle(referencedStyle[i % columnSpan][j % rowSpan]);
}
}
}
private Style[][] getOldStyles(CellSelection oldSelection) {
Style[][] referencedStyle = new Style[oldSelection.getColumnSpan()][oldSelection.getRowSpan()];
int cellRectangleCount = oldSelection.getCellRectangleCount();
TemplateElementCase elementCase = ePane.getEditingElementCase();
for (int rect = 0; rect < cellRectangleCount; rect++) {
Rectangle cellRectangle = oldSelection.getCellRectangle(rect);
for (int j = 0; j < cellRectangle.height; j++) {
for (int i = 0; i < cellRectangle.width; i++) {
int column = i + cellRectangle.x;
int row = j + cellRectangle.y;
TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row);
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(column, row);
elementCase.addCellElement(cellElement);
}
Style style = cellElement.getStyle();
if (style == null) {
style = style.DEFAULT_STYLE;
}
referencedStyle[i][j] = style;
}
}
}
return referencedStyle;
}
package com.fr.design.mainframe;
import com.fr.base.BaseUtils;
import com.fr.base.Style;
import com.fr.design.actions.ElementCaseAction;
import com.fr.general.Inter;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.Selection;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.elementcase.TemplateElementCase;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER;
/**
* Author : daisy
* Date: 13-8-7
* Time: 上午11:05
*/
public class FormatBrushAction extends ElementCaseAction {
private ElementCasePane ePane;
private CellSelection oldSelection;
public FormatBrushAction(ElementCasePane t) {
super(t);
this.setName(Inter.getLocText("M_Edit-FormatBrush"));
this.setMnemonic('B');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/formatBrush.png"));
this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, DEFAULT_MODIFIER));
}
public boolean executeActionReturnUndoRecordNeeded() {
ePane = (ElementCasePane) getEditingComponent();
if (ePane != null) {
Selection selection = ePane.getSelection();
if (!(selection instanceof CellSelection)) {
return false;
}
oldSelection = ((CellSelection) selection).clone();
ePane.setFormatReferencedCell(oldSelection);
int cellRectangleCount = oldSelection.getCellRectangleCount();
if (cellRectangleCount > 1) {
//格式刷只支持单次选择的区域,如果用ctrl复选选中了多片区域,点击格式刷按钮时弹出提示
//判断是不是连续区域
//荣国是连续区域,那么这些长方形的长加起来应该等于
if (!isContinueArea()) {
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Can_not_use_FormatBursh"));
ePane.setFormatState(DesignerContext.FORMAT_STATE_NULL);
ePane.getFormatBrush().setSelected(false);
return false;
}
}
//只对单个区域进行格式刷操作
((ElementCasePane) DesignerContext.getReferencedElementCasePane()).getGrid().setNotShowingTableSelectPane(false);
ePane.repaint();
return true;
}
return false;
}
/**
* 判断是不是连续区域
*
* @return
*/
private boolean isContinueArea() {
int xStart = oldSelection.getCellRectangle(1).x;
int xend = 0;
int yStrat = oldSelection.getCellRectangle(1).y;
int yend = 0;
int totalNum = 0;
for (int i = 0; i < oldSelection.getCellRectangleCount(); i++) {
Rectangle temp = oldSelection.getCellRectangle(i);
if (temp.getX() < xStart) {
xStart = temp.x;
}
if (temp.getX() + temp.getWidth() > xend) {
xend = (int) (temp.getX() + temp.getWidth());
}
if (temp.getY() < yStrat) {
yStrat = temp.y;
}
if (temp.getY() + temp.getHeight() > yend) {
yend = (int) (temp.getY() + temp.getHeight());
}
totalNum += (int) (temp.getWidth() * temp.getHeight());
}
if ((xend - xStart) * (yend - yStrat) == totalNum) {
oldSelection = new CellSelection(xStart, yStrat, (xend - xStart), (yend - yStrat));
ePane.setSelection(oldSelection);
ePane.setFormatReferencedCell(oldSelection);
return true;
}
return false;
}
public void updateFormatBrush(Style[][] referencedStyle, CellSelection cs, ElementCasePane reportPane) {
//得到被参照的单元格的行列数
if (referencedStyle == null) {
return;
}
int rowSpan = referencedStyle[0].length;
int columnSpan = referencedStyle.length;
//开始进行格式刷样式复制
TemplateElementCase elementCase = reportPane.getEditingElementCase();
int rowNum = cs.getRowSpan();
int columnNum = cs.getColumnSpan();
//如果只点选了一个,则自动补足
if (cs.getColumnSpan() * cs.getRowSpan() == 1) {
rowNum = rowSpan;
columnNum = columnSpan;
}
for (int j = 0; j < rowNum; j++) {
for (int i = 0; i < columnNum; i++) {
int column = i + cs.getColumn();
int row = j + cs.getRow();
TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row);
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(column, row);
elementCase.addCellElement(cellElement);
}
cellElement.setStyle(referencedStyle[i % columnSpan][j % rowSpan]);
}
}
}
private Style[][] getOldStyles(CellSelection oldSelection) {
Style[][] referencedStyle = new Style[oldSelection.getColumnSpan()][oldSelection.getRowSpan()];
int cellRectangleCount = oldSelection.getCellRectangleCount();
TemplateElementCase elementCase = ePane.getEditingElementCase();
for (int rect = 0; rect < cellRectangleCount; rect++) {
Rectangle cellRectangle = oldSelection.getCellRectangle(rect);
for (int j = 0; j < cellRectangle.height; j++) {
for (int i = 0; i < cellRectangle.width; i++) {
int column = i + cellRectangle.x;
int row = j + cellRectangle.y;
TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row);
if (cellElement == null) {
cellElement = new DefaultTemplateCellElement(column, row);
elementCase.addCellElement(cellElement);
}
Style style = cellElement.getStyle();
if (style == null) {
style = style.DEFAULT_STYLE;
}
referencedStyle[i][j] = style;
}
}
}
return referencedStyle;
}
}
Loading…
Cancel
Save