Browse Source

Merge pull request #903 in BA/design from ~HZZZ/design:fix-REPORT-2773 to dev

* commit 'ac5976346ac2ce30299cf629d062c78ed029e458':
  PMD
  PMD
  PMD
  PMD
  REPORT-2773 mac中复制快捷键的修复
  PMD
  PMD
  REPORT-2773 mac中复制快捷键的修复
  REPORT-2773 mac中复制快捷键的修复
master
superman 7 years ago
parent
commit
d30d8bfc7b
  1. 366
      designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java
  2. 392
      designer/src/com/fr/grid/GridKeyListener.java
  3. 1605
      designer/src/com/fr/grid/GridMouseAdapter.java
  4. 21
      designer_base/src/com/fr/common/inputevent/InputEventBaseOnOS.java
  5. 4
      designer_base/src/com/fr/design/gui/icombobox/ExtendedComboBox.java
  6. 3
      designer_base/src/com/fr/design/gui/icombobox/UIComboBoxUI.java
  7. 585
      designer_base/src/com/fr/design/gui/ilist/CheckBoxList.java
  8. 20
      designer_base/src/com/fr/design/gui/itable/TableSorter.java
  9. 3
      designer_base/src/com/fr/design/gui/itree/refreshabletree/UserObjectRefreshJTree.java
  10. 3
      designer_base/src/com/fr/design/roleAuthority/UIRoleTreeUI.java
  11. 5
      designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java

366
designer/src/com/fr/design/mainframe/AuthorityToolBarPane.java

File diff suppressed because one or more lines are too long

392
designer/src/com/fr/grid/GridKeyListener.java

@ -1,212 +1,208 @@
package com.fr.grid; package com.fr.grid;
import java.awt.Toolkit; import com.fr.common.inputevent.InputEventBaseOnOS;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.CellSelection;
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.report.elementcase.ElementCase; import com.fr.report.elementcase.ElementCase;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/** /**
*
* @editor zhou * @editor zhou
* @since 2012-3-23上午10:55:36 * @since 2012-3-23上午10:55:36
*/ */
public class GridKeyListener implements KeyListener { public class GridKeyListener implements KeyListener {
private static final int DIFF = 48; // 103 - 55 = 48, 小键盘和大键盘数字的差值 48
private Grid grid; private static final int DELAY = 32;
// Keypressed last time private Grid grid;
private long keyPressedLastTime = 0; // Keypressed last time
private boolean isKeyPressedContentChanged = false; private long keyPressedLastTime = 0;
private boolean isKeyPressedContentChanged = false;
public GridKeyListener(Grid grid) {
this.grid = grid; public GridKeyListener(Grid grid) {
} this.grid = grid;
}
public void keyPressed(KeyEvent evt) {
if (!grid.isEnabled() || evt.isConsumed()) {// 如果用户在自己的KyeListener里面consume了.就不执行下面的代码了. public void keyPressed(KeyEvent evt) {
return; if (!grid.isEnabled() || evt.isConsumed()) {// 如果用户在自己的KyeListener里面consume了.就不执行下面的代码了.
} return;
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt); }
if (newEvt == null) { if (KeyEventWork.processKeyEvent(evt) == null) {
return; return;
} }
long systemCurrentTime = System.currentTimeMillis(); long systemCurrentTime = System.currentTimeMillis();
int code = evt.getKeyCode(); int code = evt.getKeyCode();
boolean isNeedRepaint = false; boolean isNeedRepaint = false;
ElementCasePane reportPane = grid.getElementCasePane(); ElementCasePane reportPane = grid.getElementCasePane();
ElementCase report = reportPane.getEditingElementCase(); ElementCase report = reportPane.getEditingElementCase();
if (reportPane.getSelection() instanceof FloatSelection) { if (reportPane.getSelection() instanceof FloatSelection) {
if (systemCurrentTime - keyPressedLastTime <= 2) { if (systemCurrentTime - keyPressedLastTime <= 2) {
return; return;
} else { } else {
keyPressedLastTime = systemCurrentTime; keyPressedLastTime = systemCurrentTime;
} }
dealWithFloatSelection(reportPane, code); dealWithFloatSelection(reportPane, code);
} else {
} else { if (systemCurrentTime - keyPressedLastTime <= DELAY) {
if (systemCurrentTime - keyPressedLastTime <= 32) { return;
return; } else {
} else { keyPressedLastTime = systemCurrentTime;
keyPressedLastTime = systemCurrentTime; }
} dealWithCellSelection(evt, code);
dealWithCellSelection(evt, code); }
switch (code) {
} case KeyEvent.VK_PAGE_UP: {// page up
reportPane.getVerticalScrollBar().setValue(Math.max(0, grid.getVerticalValue() - grid.getVerticalExtent()));
switch (code) { isNeedRepaint = true;
case KeyEvent.VK_PAGE_UP: {// page up break;
reportPane.getVerticalScrollBar().setValue(Math.max(0, grid.getVerticalValue() - grid.getVerticalExtent())); }
isNeedRepaint = true; case KeyEvent.VK_PAGE_DOWN: {// page down
break; reportPane.getVerticalScrollBar().setValue(grid.getVerticalValue() + grid.getVerticalExtent());
} isNeedRepaint = true;
case KeyEvent.VK_PAGE_DOWN: {// page down break;
reportPane.getVerticalScrollBar().setValue(grid.getVerticalValue() + grid.getVerticalExtent()); }
isNeedRepaint = true; // Richie:Ctrl + A全选单元格
break; case KeyEvent.VK_A:
} if (InputEventBaseOnOS.isControlDown(evt)) {
// Richie:Ctrl + A全选单元格 reportPane.setSelection(new CellSelection(0, 0, report.getColumnCount(), report.getRowCount()));
case KeyEvent.VK_A: }
if (code == KeyEvent.VK_A && evt.isControlDown()) { isNeedRepaint = true;
reportPane.setSelection(new CellSelection(0, 0, report.getColumnCount(), report.getRowCount())); break;
isNeedRepaint = true; }
} if (isNeedRepaint) {
isNeedRepaint = true; reportPane.repaint();
break; }
} }
if (isNeedRepaint) { /**
reportPane.repaint(); * 单选中悬浮元素时只处理4个方向键
} *
} * @param reportPane
* @param code
/** */
* 单选中悬浮元素时只处理4个方向键 private void dealWithFloatSelection(ElementCasePane reportPane, int code) {
* boolean isContentChanged = false;
* @param reportPane FloatSelection floatselection = (FloatSelection) reportPane.getSelection();
* @param code
*/ switch (code) {
private void dealWithFloatSelection(ElementCasePane reportPane, int code) { case KeyEvent.VK_LEFT: {// left
boolean isContentChanged = false; floatselection.moveLeft(reportPane);
FloatSelection floatselection = (FloatSelection)reportPane.getSelection(); isContentChanged = true;
break;
switch (code) { }
case KeyEvent.VK_LEFT: {// left case KeyEvent.VK_RIGHT: {// right
floatselection.moveLeft(reportPane); floatselection.moveRight(reportPane);
isContentChanged = true; isContentChanged = true;
break; break;
} }
case KeyEvent.VK_RIGHT: {// right case KeyEvent.VK_UP: {// up
floatselection.moveRight(reportPane); floatselection.moveUp(reportPane);
isContentChanged = true; isContentChanged = true;
break; break;
} }
case KeyEvent.VK_UP: {// up case KeyEvent.VK_DOWN: {// down
floatselection.moveUp(reportPane); floatselection.moveDown(reportPane);
isContentChanged = true; isContentChanged = true;
break; break;
} }
case KeyEvent.VK_DOWN: {// down }
floatselection.moveDown(reportPane);
isContentChanged = true; if (isContentChanged) {
break; grid.getElementCasePane().repaint();
} this.isKeyPressedContentChanged = true;
} }
}
if (isContentChanged) {
grid.getElementCasePane().repaint(); private void dealWithCellSelection(KeyEvent evt, int code) {
this.isKeyPressedContentChanged = true; switch (code) {
} case KeyEvent.VK_ESCAPE: {
} if (grid.isCellEditing()) {
grid.cancelEditing();
private void dealWithCellSelection(KeyEvent evt, int code) { }
switch (code) { break;
case KeyEvent.VK_ESCAPE: { }
if (grid.isCellEditing()) { case KeyEvent.VK_F2: {
grid.cancelEditing(); if (!grid.isCellEditing()) {
} grid.startEditing();
break; }
}
case KeyEvent.VK_F2: { break;
if (!grid.isCellEditing()) { }
grid.startEditing(); }
}
// 支持小键盘
break; if (IS_NUM_PAD_KEY(code)) {
} keyTyped(evt);
} }
}
// 支持小键盘
if (IS_NUM_PAD_KEY(code)) { public void keyReleased(KeyEvent evt) {
keyTyped(evt); if (!grid.isEnabled() || evt.isConsumed()) {
} return;
} }
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
public void keyReleased(KeyEvent evt) { if (newEvt == null) {
if (!grid.isEnabled() || evt.isConsumed()) { return;
return; }
}
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt); if (this.isKeyPressedContentChanged) {
if (newEvt == null) { grid.getElementCasePane().fireTargetModified();
return;
} this.isKeyPressedContentChanged = false;
}
if (this.isKeyPressedContentChanged) { }
grid.getElementCasePane().fireTargetModified();
public void keyTyped(KeyEvent evt) {
this.isKeyPressedContentChanged = false; if (!grid.isEnabled() || evt.isConsumed()) {
} return;
} }
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt);
public void keyTyped(KeyEvent evt) { if (newEvt == null || InputEventBaseOnOS.isControlDown(evt)) {// uneditable.
if (!grid.isEnabled() || evt.isConsumed()) { return;
return; }
} char ch = evt.getKeyChar();
KeyEvent newEvt = KeyEventWork.processKeyEvent(evt); if (ch == KeyEvent.VK_TAB) {// 禁止Tab键.
if (newEvt == null || evt.isControlDown()) {// uneditable. return;
return; }
} int code = evt.getKeyCode();
char ch = evt.getKeyChar(); if (Character.isDefined(ch)) {// VK_SUBTRACT小键盘的减号
if (ch == KeyEvent.VK_TAB) {// 禁止Tab键. Selection s = grid.getElementCasePane().getSelection();
return; if (s instanceof CellSelection) {
} if (!grid.getElementCasePane().isSelectedOneCell()) {
int code = evt.getKeyCode(); Toolkit.getDefaultToolkit().beep();
if (Character.isDefined(ch)) {// VK_SUBTRACT小键盘的减号 return;
Selection s = grid.getElementCasePane().getSelection(); }
if (s instanceof CellSelection) { if (!grid.isCellEditing()) {
if (!grid.getElementCasePane().isSelectedOneCell()) { grid.startEditing(true);
Toolkit.getDefaultToolkit().beep(); }
return;
} if (grid.getCellEditor() != null && grid.editorComponent != null) {
if (!grid.isCellEditing()) { if (IS_NUM_PAD_KEY(code)) {
grid.startEditing(true); KeyEvent ke = new KeyEvent(grid, KeyEvent.KEY_PRESSED, 0, 0, code - DIFF, ch);
} grid.editorComponent.dispatchEvent(ke);
ke.consume();
if (grid.getCellEditor() != null && grid.editorComponent != null) { } else {
if (IS_NUM_PAD_KEY(code)) { if (!evt.isConsumed()) {
// 103 - 55 = 48, 小键盘和大键盘数字的差值 48 grid.editorComponent.dispatchEvent(evt);
KeyEvent ke = new KeyEvent(grid, KeyEvent.KEY_PRESSED, 0, 0, code - 48, ch); }
grid.editorComponent.dispatchEvent(ke); }
ke.consume(); }
} else { }
if (!evt.isConsumed()) { }
grid.editorComponent.dispatchEvent(evt); }
}
} /**
} * 小键盘
} *
} * @param code
} * @return
/** */
* 小键盘 private static boolean IS_NUM_PAD_KEY(int code) {
* @param code return code == KeyEvent.VK_NUMPAD0 || code == KeyEvent.VK_NUMPAD1
* @return
*/
private static boolean IS_NUM_PAD_KEY(int code){
return code == KeyEvent.VK_NUMPAD0 || code == KeyEvent.VK_NUMPAD1
|| code == KeyEvent.VK_NUMPAD2 || code == KeyEvent.VK_NUMPAD2
|| code == KeyEvent.VK_NUMPAD3 || code == KeyEvent.VK_NUMPAD3
|| code == KeyEvent.VK_NUMPAD4 || code == KeyEvent.VK_NUMPAD4
@ -215,10 +211,10 @@ public class GridKeyListener implements KeyListener {
|| code == KeyEvent.VK_NUMPAD7 || code == KeyEvent.VK_NUMPAD7
|| code == KeyEvent.VK_NUMPAD8 || code == KeyEvent.VK_NUMPAD8
|| code == KeyEvent.VK_NUMPAD9 || code == KeyEvent.VK_NUMPAD9
|| code == KeyEvent.VK_MULTIPLY || code == KeyEvent.VK_MULTIPLY
|| code == KeyEvent.VK_ADD || code == KeyEvent.VK_ADD
|| code == KeyEvent.VK_SUBTRACT || code == KeyEvent.VK_SUBTRACT
|| code == KeyEvent.VK_DECIMAL || code == KeyEvent.VK_DECIMAL
|| code == KeyEvent.VK_DIVIDE; || code == KeyEvent.VK_DIVIDE;
} }
} }

1605
designer/src/com/fr/grid/GridMouseAdapter.java

File diff suppressed because it is too large Load Diff

21
designer_base/src/com/fr/common/inputevent/InputEventBaseOnOS.java

@ -0,0 +1,21 @@
package com.fr.common.inputevent;
import com.fr.stable.OperatingSystem;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
/**
* Created by hzzz on 2017/5/26.
*/
public class InputEventBaseOnOS {
private static final boolean IS_MACOS = OperatingSystem.isMacOS();
public static boolean isControlDown(MouseEvent e) {
return IS_MACOS ? e.isMetaDown() : e.isControlDown();
}
public static boolean isControlDown(KeyEvent e) {
return IS_MACOS ? e.isMetaDown() : e.isControlDown();
}
}

4
designer_base/src/com/fr/design/gui/icombobox/ExtendedComboBox.java

@ -1,5 +1,7 @@
package com.fr.design.gui.icombobox; package com.fr.design.gui.icombobox;
import com.fr.common.inputevent.InputEventBaseOnOS;
import java.awt.Component; import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
@ -76,7 +78,7 @@ public class ExtendedComboBox extends UIComboBox {
protected JList createList() { protected JList createList() {
return new JList(comboBox.getModel()) { return new JList(comboBox.getModel()) {
public void processMouseEvent(MouseEvent e) { public void processMouseEvent(MouseEvent e) {
if (e.isControlDown()) { if (InputEventBaseOnOS.isControlDown(e)) {
// Fix for 4234053. Filter out the Control // Fix for 4234053. Filter out the Control
// Key from the list. // Key from the list.
// ie., don't allow CTRL key deselection. // ie., don't allow CTRL key deselection.

3
designer_base/src/com/fr/design/gui/icombobox/UIComboBoxUI.java

@ -16,6 +16,7 @@ import javax.swing.plaf.basic.BasicComboBoxUI;
import javax.swing.plaf.basic.BasicComboPopup; import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup; import javax.swing.plaf.basic.ComboPopup;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import sun.swing.DefaultLookup; import sun.swing.DefaultLookup;
@ -209,7 +210,7 @@ public class UIComboBoxUI extends BasicComboBoxUI implements MouseListener {
@Override @Override
public void processMouseEvent(MouseEvent e) { public void processMouseEvent(MouseEvent e) {
if (e.isControlDown()) { if (InputEventBaseOnOS.isControlDown(e)) {
e = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers() ^ DEFAULT_MODIFIER, e.getX(), e.getY(), e.getClickCount(), e = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers() ^ DEFAULT_MODIFIER, e.getX(), e.getY(), e.getClickCount(),
e.isPopupTrigger()); e.isPopupTrigger());
} }

585
designer_base/src/com/fr/design/gui/ilist/CheckBoxList.java

@ -1,311 +1,300 @@
package com.fr.design.gui.ilist; package com.fr.design.gui.ilist;
import java.awt.BorderLayout; import com.fr.design.gui.icheckbox.UICheckBox;
import java.awt.Component; import com.fr.stable.StringUtils;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.*;
import java.awt.event.KeyAdapter; import javax.swing.border.Border;
import java.awt.event.KeyEvent; import javax.swing.border.EmptyBorder;
import java.awt.event.MouseAdapter; import java.awt.*;
import java.awt.event.MouseEvent; import java.awt.event.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.EventListener; import java.util.EventListener;
import java.util.List; import java.util.List;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.stable.StringUtils;
/** /**
* CheckBoxs + JList. * CheckBoxs + JList.
*/ */
public class CheckBoxList extends JComponent { public class CheckBoxList extends JComponent {
/** private final static int X_COORDINATE = 20;
* 选择状态----全选和全不选
* /**
* @editor zhou * 选择状态----全选和全不选
* @since 2012-4-1下午2:39:10 *
*/ * @editor zhou
public static enum SelectedState { * @since 2012-4-1下午2:39:10
ALL, NONE */
} public static enum SelectedState {
ALL, NONE
private boolean[] selects; }
private JList jlist;
private UICheckBox chooseAll; private boolean[] selects;
private JList jlist;
public CheckBoxList(Object[] items) { private UICheckBox chooseAll;
this(items, SelectedState.NONE, StringUtils.EMPTY);
} public CheckBoxList(Object[] items) {
this(items, SelectedState.NONE, StringUtils.EMPTY);
public CheckBoxList(Object[] items, String name) { }
this(items, SelectedState.NONE, name);
} public CheckBoxList(Object[] items, String name) {
this(items, SelectedState.NONE, name);
/** }
* Class constructor.
* /**
* @param items * Class constructor.
* Items with which to populate the list. *
* @param default_state * @param items Items with which to populate the list.
* default state, true or false * @param state default state, true or false
*/ */
public CheckBoxList(Object[] items, SelectedState state, String name) { public CheckBoxList(Object[] items, SelectedState state, String name) {
jlist = new BOXLIST(items); jlist = new BOXLIST(items);
jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
this.selects = new boolean[items.length]; this.selects = new boolean[items.length];
boolean default_state = (state == SelectedState.ALL); boolean default_state = (state == SelectedState.ALL);
Arrays.fill(this.selects, default_state); Arrays.fill(this.selects, default_state);
jlist.setCellRenderer(new CheckListCellRenderer()); jlist.setCellRenderer(new CheckListCellRenderer());
jlist.addMouseListener(new MouseAdapter() { jlist.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
doCheck(); doCheck();
} }
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
doCheck(); doCheck();
} }
}); });
jlist.addKeyListener(new KeyAdapter() { jlist.addKeyListener(new KeyAdapter() {
@Override @Override
public void keyTyped(KeyEvent e) { public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == ' ') { if (e.getKeyChar() == ' ') {
doCheck(); doCheck();
} }
} }
}); });
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
chooseAll = new UICheckBox(name, default_state); chooseAll = new UICheckBox(name, default_state);
chooseAll.addActionListener(new ActionListener() { chooseAll.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (chooseAll.isSelected()) { if (chooseAll.isSelected()) {
setSelected(true); setSelected(true);
} else { } else {
setSelected(false); setSelected(false);
} }
} }
}); });
this.add(chooseAll, BorderLayout.NORTH); this.add(chooseAll, BorderLayout.NORTH);
this.add(jlist, BorderLayout.CENTER); this.add(jlist, BorderLayout.CENTER);
} }
/* /*
* 用于CellRenderer显示value为text * 用于CellRenderer显示value为text
*/ */
protected String value2Text(Object value) { protected String value2Text(Object value) {
return value != null ? value.toString() : StringUtils.EMPTY; return value != null ? value.toString() : StringUtils.EMPTY;
} }
public void setItems(Object[] os) { public void setItems(Object[] os) {
if (os == null) { if (os == null) {
this.setSelected(false); this.setSelected(false);
} else { } else {
for (int i = 0, len = os.length; i < len; i++) { for (int i = 0, len = os.length; i < len; i++) {
Object o = os[i]; Object o = os[i];
for (int j = 0, jen = jlist.getModel().getSize(); j < jen; j++) { for (int j = 0, jen = jlist.getModel().getSize(); j < jen; j++) {
if (o.equals(jlist.getModel().getElementAt(j))) { if (o.equals(jlist.getModel().getElementAt(j))) {
this.setSelected(j, true); this.setSelected(j, true);
} }
} }
} }
} }
this.repaint(); this.repaint();
} }
/** /**
* Is selected * Is selected
*/ */
public boolean isSelected(int index) { public boolean isSelected(int index) {
if (selects == null || index >= selects.length) { if (selects == null || index >= selects.length) {
return false; return false;
} }
return selects[index]; return selects[index];
} }
public void setSelected(int index, boolean isSelected) { public void setSelected(int index, boolean isSelected) {
if (selects == null || index >= selects.length) { if (selects == null || index >= selects.length) {
return; return;
} }
selects[index] = isSelected; selects[index] = isSelected;
this.repaint(this.getBounds()); this.repaint(this.getBounds());
this.fireCheckBoxListSelectionChangeListener(); this.fireCheckBoxListSelectionChangeListener();
} }
private void setSelected(boolean isSelected) { private void setSelected(boolean isSelected) {
if (selects == null) { if (selects == null) {
return; return;
} }
for (int i = 0; i < selects.length; i++) { for (int i = 0; i < selects.length; i++) {
selects[i] = isSelected; selects[i] = isSelected;
} }
this.repaint(this.getBounds()); this.repaint(this.getBounds());
this.fireCheckBoxListSelectionChangeListener(); this.fireCheckBoxListSelectionChangeListener();
} }
/** /**
* Returns an array of the objects that have been selected. Overrides the * Returns an array of the objects that have been selected. Overrides the
* JList method. * JList method.
*/ */
public Object[] getSelectedValues() { public Object[] getSelectedValues() {
return this.jlist.getSelectedValues(); return this.jlist.getSelectedValues();
} }
private class BOXLIST extends JList { private class BOXLIST extends JList {
public BOXLIST(Object[] items) { public BOXLIST(Object[] items) {
super(items); super(items);
} }
@Override @Override
protected void processMouseEvent(MouseEvent e) { protected void processMouseEvent(MouseEvent e) {
if (e.getX() < 20) { if (e.getX() < X_COORDINATE) {
if (e.isControlDown() || e.isAltDown() || e.isShiftDown() || e.isMetaDown()) { boolean anyMaskDown = e.isControlDown() || e.isAltDown() || e.isShiftDown() || e.isMetaDown();
int[] indices = getSelectedIndices(); if (anyMaskDown) {
if (indices.length == 0) { int[] indices = getSelectedIndices();
super.processMouseEvent(e); if (indices.length == 0) {
} super.processMouseEvent(e);
} else { }
super.processMouseEvent(e); } else {
} super.processMouseEvent(e);
} else { }
super.processMouseEvent(e); } else {
} super.processMouseEvent(e);
int id = e.getID(); }
switch (id) { int id = e.getID();
case MouseEvent.MOUSE_PRESSED: switch (id) {
break; case MouseEvent.MOUSE_PRESSED:
case MouseEvent.MOUSE_RELEASED: break;
break; case MouseEvent.MOUSE_RELEASED:
case MouseEvent.MOUSE_CLICKED: break;
doCheck(); case MouseEvent.MOUSE_CLICKED:
break; doCheck();
case MouseEvent.MOUSE_EXITED: break;
break; case MouseEvent.MOUSE_EXITED:
case MouseEvent.MOUSE_ENTERED: break;
break; case MouseEvent.MOUSE_ENTERED:
} break;
} }
}
@Override
protected void processMouseMotionEvent(MouseEvent e) { @Override
if (e.getX() < 20) { protected void processMouseMotionEvent(MouseEvent e) {
return; if (e.getX() < X_COORDINATE) {
} return;
}
super.processMouseEvent(e);
} super.processMouseEvent(e);
}
@Override
public Object[] getSelectedValues() { @Override
List<Object> list = new ArrayList<Object>(selects.length); public Object[] getSelectedValues() {
for (int i = 0; i < selects.length; i++) { List<Object> list = new ArrayList<Object>(selects.length);
if (selects[i]) { for (int i = 0; i < selects.length; i++) {
list.add(this.getModel().getElementAt(i)); if (selects[i]) {
} list.add(this.getModel().getElementAt(i));
} }
}
return list.toArray();
} return list.toArray();
}
}
}
private void doCheck() {
// p:这里必须改变所有选择checkbox. private void doCheck() {
int index = jlist.getSelectedIndex(); // p:这里必须改变所有选择checkbox.
boolean sValue = !selects[index]; int index = jlist.getSelectedIndex();
boolean sValue = !selects[index];
// p:开始设置所有选择的checkbox.
int[] indices = jlist.getSelectedIndices(); // p:开始设置所有选择的checkbox.
for (int i = 0; i < indices.length; i++) { int[] indices = jlist.getSelectedIndices();
setSelected(indices[i], sValue); for (int i = 0; i < indices.length; i++) {
} setSelected(indices[i], sValue);
for (boolean selected : selects) { }
if (!selected) { for (boolean selected : selects) {
chooseAll.setSelected(false); if (!selected) {
return; chooseAll.setSelected(false);
} return;
} }
chooseAll.setSelected(true); }
repaint(); chooseAll.setSelected(true);
} repaint();
}
private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
private static final Border NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
private class CheckListCellRenderer extends UICheckBox implements ListCellRenderer {
private class CheckListCellRenderer extends UICheckBox implements ListCellRenderer {
public CheckListCellRenderer() {
this.setOpaque(true); public CheckListCellRenderer() {
this.setBorder(noFocusBorder); this.setOpaque(true);
} this.setBorder(NO_FOCUS_BORDER);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
this.setText(value2Text(value)); public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
this.setSelected(selects[index]); this.setText(value2Text(value));
this.setFont(list.getFont()); this.setSelected(selects[index]);
this.setFont(list.getFont());
if (isSelected) {
this.setBackground(list.getSelectionBackground()); if (isSelected) {
this.setForeground(list.getSelectionForeground()); this.setBackground(list.getSelectionBackground());
} else { this.setForeground(list.getSelectionForeground());
this.setBackground(list.getBackground()); } else {
this.setForeground(list.getForeground()); this.setBackground(list.getBackground());
} this.setForeground(list.getForeground());
}
if (cellHasFocus) {
this.setBorder(UIManager.getBorder("List.focusCellHighlightBorder")); if (cellHasFocus) {
} else { this.setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));
this.setBorder(noFocusBorder); } else {
} this.setBorder(NO_FOCUS_BORDER);
}
return this;
} return this;
} }
}
public void addCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
this.listenerList.add(CheckBoxListSelectionChangeListener.class, l); public void addCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
} this.listenerList.add(CheckBoxListSelectionChangeListener.class, l);
}
public void removeCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
this.listenerList.remove(CheckBoxListSelectionChangeListener.class, l); public void removeCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) {
} this.listenerList.remove(CheckBoxListSelectionChangeListener.class, l);
}
public void fireCheckBoxListSelectionChangeListener() {
// Guaranteed to return a non-null array public void fireCheckBoxListSelectionChangeListener() {
Object[] listeners = listenerList.getListenerList(); // Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event // Process the listeners last to first, notifying
for (int i = listeners.length - 2; i >= 0; i -= 2) { // those that are interested in this event
if (listeners[i] == CheckBoxListSelectionChangeListener.class) { for (int i = listeners.length - 2; i >= 0; i -= 2) {
((CheckBoxListSelectionChangeListener)listeners[i + 1]).selectionChanged(this); if (listeners[i] == CheckBoxListSelectionChangeListener.class) {
} ((CheckBoxListSelectionChangeListener) listeners[i + 1]).selectionChanged(this);
} }
}
}
}
public static interface CheckBoxListSelectionChangeListener extends EventListener {
public void selectionChanged(CheckBoxList target); public static interface CheckBoxListSelectionChangeListener extends EventListener {
} public void selectionChanged(CheckBoxList target);
}
public ListModel getModel() {
return jlist.getModel(); public ListModel getModel() {
} return jlist.getModel();
}
} }

20
designer_base/src/com/fr/design/gui/itable/TableSorter.java

@ -15,6 +15,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import javax.swing.Icon; import javax.swing.Icon;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelEvent;
@ -79,7 +81,7 @@ import javax.swing.table.TableModel;
public class TableSorter extends AbstractTableModel { public class TableSorter extends AbstractTableModel {
protected TableModel tableModel; protected TableModel tableModel;
private static final int ADD = 4;
public static final int DESCENDING = -1; public static final int DESCENDING = -1;
public static final int NOT_SORTED = 0; public static final int NOT_SORTED = 0;
public static final int ASCENDING = 1; public static final int ASCENDING = 1;
@ -341,17 +343,14 @@ public class TableSorter extends AbstractTableModel {
fireTableChanged(e); fireTableChanged(e);
return; return;
} }
// If the table structure has changed, cancel the sorting; the
// If the table structure has changed, cancel the sorting; the // sorting columns may have been either moved or deleted from the model.
// sorting columns may have been either moved or deleted from
// the model.
if (e.getFirstRow() == TableModelEvent.HEADER_ROW) { if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
cancelSorting(); cancelSorting();
fireTableChanged(e); fireTableChanged(e);
return; return;
} }
// We can map a cell event through to the view without widening
// We can map a cell event through to the view without widening
// when the following conditions apply: // when the following conditions apply:
// //
// a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and, // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
@ -380,8 +379,7 @@ public class TableSorter extends AbstractTableModel {
column, e.getType())); column, e.getType()));
return; return;
} }
// Something has happened to the data that may have invalidated the row order.
// Something has happened to the data that may have invalidated the row order.
clearSortingState(); clearSortingState();
fireTableDataChanged(); fireTableDataChanged();
return; return;
@ -396,13 +394,13 @@ public class TableSorter extends AbstractTableModel {
int column = columnModel.getColumn(viewColumn).getModelIndex(); int column = columnModel.getColumn(viewColumn).getModelIndex();
if (column != -1) { if (column != -1) {
int status = getSortingStatus(column); int status = getSortingStatus(column);
if (!e.isControlDown()) { if (!InputEventBaseOnOS.isControlDown(e)) {
cancelSorting(); cancelSorting();
} }
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed. // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
status = status + (e.isShiftDown() ? -1 : 1); status = status + (e.isShiftDown() ? -1 : 1);
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1} status = (status + ADD) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status); setSortingStatus(column, status);
} }
} }

3
designer_base/src/com/fr/design/gui/itree/refreshabletree/UserObjectRefreshJTree.java

@ -1,5 +1,6 @@
package com.fr.design.gui.itree.refreshabletree; package com.fr.design.gui.itree.refreshabletree;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.general.NameObject; import com.fr.general.NameObject;
import com.fr.design.gui.itree.refreshabletree.loader.ChildrenLoaderFactory; import com.fr.design.gui.itree.refreshabletree.loader.ChildrenLoaderFactory;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
@ -147,7 +148,7 @@ public abstract class UserObjectRefreshJTree<T extends UserObjectOP<?>> extends
} }
} }
// marks:鼠标在上次选中的paths上,则将上次的paths设为的树的路径,否则将鼠标所在的节点设为选中的节点 // marks:鼠标在上次选中的paths上,则将上次的paths设为的树的路径,否则将鼠标所在的节点设为选中的节点
if (!(e.isShiftDown() || e.isControlDown())) { if (!(e.isShiftDown() || InputEventBaseOnOS.isControlDown(e))) {
if (isFind) { if (isFind) {
setSelectionPaths(oldPaths); setSelectionPaths(oldPaths);
} else { } else {

3
designer_base/src/com/fr/design/roleAuthority/UIRoleTreeUI.java

@ -1,5 +1,6 @@
package com.fr.design.roleAuthority; package com.fr.design.roleAuthority;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.gui.itree.UITreeUI; import com.fr.design.gui.itree.UITreeUI;
import javax.swing.tree.TreePath; import javax.swing.tree.TreePath;
@ -15,7 +16,7 @@ import java.awt.event.MouseEvent;
public class UIRoleTreeUI extends UITreeUI { public class UIRoleTreeUI extends UITreeUI {
protected void selectPathForEvent(TreePath path, MouseEvent event) { /* Adjust from the anchor point. */ protected void selectPathForEvent(TreePath path, MouseEvent event) { /* Adjust from the anchor point. */
if (event.isControlDown() && tree.isPathSelected(path)) { if (InputEventBaseOnOS.isControlDown(event) && tree.isPathSelected(path)) {
tree.removeSelectionPath(path); tree.removeSelectionPath(path);
} else if (event.isShiftDown()) { } else if (event.isShiftDown()) {
tree.setAnchorSelectionPath(null); tree.setAnchorSelectionPath(null);

5
designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java

@ -1,5 +1,6 @@
package com.fr.design.designer.beans.models; package com.fr.design.designer.beans.models;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.AdapterBus;
import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.LayoutAdapter;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.events.DesignerEvent;
@ -61,7 +62,7 @@ public class SelectionModel {
* @param e 鼠标事件 * @param e 鼠标事件
*/ */
public void selectACreatorAtMouseEvent(MouseEvent e) { public void selectACreatorAtMouseEvent(MouseEvent e) {
if (!e.isControlDown() && !e.isShiftDown()) { if (!InputEventBaseOnOS.isControlDown(e) && !e.isShiftDown()) {
// 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件
selection.reset(); selection.reset();
} }
@ -372,7 +373,7 @@ public class SelectionModel {
public Direction getDirectionAt(MouseEvent e) { public Direction getDirectionAt(MouseEvent e) {
Direction dir; Direction dir;
if (e.isControlDown() || e.isShiftDown()) { if (InputEventBaseOnOS.isControlDown(e) || e.isShiftDown()) {
XCreator creator = designer.getComponentAt(e.getX(), e.getY(), selection.getSelectedCreators()); XCreator creator = designer.getComponentAt(e.getX(), e.getY(), selection.getSelectedCreators());
if (creator != designer.getRootComponent() && selection.addedable(creator)) { if (creator != designer.getRootComponent() && selection.addedable(creator)) {
return Location.add; return Location.add;

Loading…
Cancel
Save