use of org.eclipse.swt.events.VerifyEvent in project cubrid-manager by CUBRID.
the class ConnectionComposite method createBrokerInfoGroup.
private void createBrokerInfoGroup(Composite composite) {
Group brokerInfoGroup = new Group(composite, SWT.NONE);
brokerInfoGroup.setText(Messages.grpBrokerInfo);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
brokerInfoGroup.setLayoutData(gridData);
brokerInfoGroup.setLayout(createGridLayout(3));
Label brokerIpLabel = new Label(brokerInfoGroup, SWT.LEFT);
brokerIpLabel.setText(Messages.lblLoginServerName);
brokerIpLabel.setLayoutData(createGridData(1, 1, -1, -1));
brokerIpText = new Text(brokerInfoGroup, SWT.LEFT | SWT.BORDER);
brokerIpText.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 2, 1, 100, -1));
brokerIpText.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent event) {
brokerIpText.selectAll();
}
});
Label brokerPortLabel = new Label(brokerInfoGroup, SWT.LEFT);
brokerPortLabel.setText(Messages.lblLoginBrokerPort);
brokerPortLabel.setLayoutData(createGridData(1, 1, -1, -1));
VerifyListener verifyListener = new VerifyListener() {
public void verifyText(VerifyEvent event) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher matcher = pattern.matcher(event.text);
if (matcher.matches()) {
event.doit = true;
} else if (event.text.length() > 0) {
event.doit = false;
} else {
event.doit = true;
}
}
};
Composite portAndShardComp = new Composite(brokerInfoGroup, SWT.NONE);
portAndShardComp.setLayout(createGridLayout(3, 0, 0));
portAndShardComp.setLayoutData(createGridData(FILL_HORIZONTAL, 2, 1, -1, -1));
if (isMultiBroker) {
brokerPortCombo = new Combo(portAndShardComp, SWT.LEFT | SWT.BORDER);
brokerPortCombo.setLayoutData(createGridData(GridData.BEGINNING, 1, 1, 100, -1));
brokerPortCombo.addVerifyListener(verifyListener);
} else {
brokerPortText = new Text(portAndShardComp, SWT.LEFT | SWT.BORDER);
brokerPortText.setLayoutData(createGridData(BEGINNING, 1, 1, 100, -1));
brokerPortText.addVerifyListener(verifyListener);
}
btnShard = new Button(portAndShardComp, SWT.CHECK);
btnShard.setLayoutData(createGridData(BEGINNING, 1, 1, -1, -1));
btnShard.setText(com.cubrid.common.ui.query.Messages.shardBrokerLabel);
btnShard.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (btnShard.getSelection()) {
openWarningBox(shardBrokerAlert);
}
btnShardId.setEnabled(btnShard.getSelection());
}
});
btnShardId = new Button(portAndShardComp, SWT.PUSH);
btnShardId.setLayoutData(createGridData(HORIZONTAL_ALIGN_END, 1, 1, -1, -1));
btnShardId.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ShardIdSelectionDialog dialog = new ShardIdSelectionDialog(getShell());
dialog.setDatabaseInfo(dbInfo);
dialog.setShardId(curShardId);
dialog.setShardVal(curShardVal);
dialog.setShardQueryType(shardQueryType);
if (dialog.open() == OK_ID) {
curShardId = dialog.getShardId();
curShardVal = dialog.getShardVal();
shardQueryType = dialog.getShardQueryType();
if (dbInfo != null) {
dbInfo.setCurrentShardId(curShardId);
dbInfo.setCurrentShardVal(curShardVal);
dbInfo.setShardQueryType(shardQueryType);
}
updateShardIdButtonText();
}
}
});
updateShardIdButtonText();
Label charsetLabel = new Label(brokerInfoGroup, SWT.LEFT);
charsetLabel.setText(com.cubrid.common.ui.query.Messages.lblCharSet);
charsetLabel.setLayoutData(createGridData(1, 1, -1, -1));
charsetCombo = new Combo(brokerInfoGroup, SWT.LEFT | SWT.BORDER);
charsetCombo.setLayoutData(createGridData(FILL_HORIZONTAL, 2, 1, 100, -1));
Label jdbcLabel = new Label(brokerInfoGroup, SWT.LEFT);
jdbcLabel.setText(Messages.lblDbJdbcVersion);
jdbcLabel.setLayoutData(createGridData(1, 1, -1, -1));
jdbcCombo = new Combo(brokerInfoGroup, SWT.LEFT | SWT.READ_ONLY | SWT.BORDER);
jdbcCombo.setLayoutData(createGridData(FILL_HORIZONTAL, 1, 1, 100, -1));
Button btnOpen = new Button(brokerInfoGroup, SWT.NONE);
btnOpen.setText(Messages.btnBrowse);
btnOpen.setLayoutData(createGridData(1, 1, 80, -1));
btnOpen.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
JdbcManageDialog dialog = new JdbcManageDialog(getShell());
if (dialog.open() == OK_ID) {
String jdbcVersion = dialog.getSelectedJdbcVersion();
if (isBlank(jdbcVersion)) {
jdbcVersion = jdbcCombo.getText();
}
resetJdbcCombo(jdbcVersion);
}
}
});
// JDBC attributes
Label attrLabel = new Label(brokerInfoGroup, SWT.LEFT);
attrLabel.setText(Messages.lblJdbcAttr);
attrLabel.setLayoutData(createGridData(1, 1, -1, -1));
attrText = new Text(brokerInfoGroup, SWT.LEFT | SWT.BORDER);
attrText.setEditable(false);
attrText.setLayoutData(createGridData(FILL_HORIZONTAL, 1, 1, 100, -1));
Button btnAttr = new Button(brokerInfoGroup, SWT.NONE);
btnAttr.setText(Messages.btnJdbcAttr);
btnAttr.setLayoutData(createGridData(1, 1, 80, -1));
btnAttr.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
JdbcOptionDialog dialog = new JdbcOptionDialog(getShell(), attrText.getText());
if (dialog.open() == OK_ID) {
attrText.setText(dialog.getJdbcOptions());
}
}
});
}
use of org.eclipse.swt.events.VerifyEvent in project dbeaver by serge-rider.
the class BitStringInlineEditor method createControl.
@Override
protected Text createControl(Composite editPlaceholder) {
final boolean inline = valueController.getEditType() == IValueController.EditType.INLINE;
final Text editor = new Text(valueController.getEditPlaceholder(), inline ? SWT.BORDER : SWT.NONE);
editor.setEditable(!valueController.isReadOnly());
final int precision = valueController.getValueType().getPrecision();
editor.setTextLimit(precision <= 1 ? 1 : precision);
editor.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
for (int i = 0; i < e.text.length(); i++) {
char ch = e.text.charAt(i);
if (ch != '0' && ch != '1') {
e.doit = false;
return;
}
}
e.doit = true;
}
});
return editor;
}
use of org.eclipse.swt.events.VerifyEvent in project cubrid-manager by CUBRID.
the class DiagStatusMonitorTemplateDialog method addTemplateListener.
/**
* Adds the listener to template
*
*/
private void addTemplateListener() {
// Add the listeners
nameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent me) {
String name = nameText.getText().trim();
if (name.length() == 0) {
isOkenable[0] = false;
} else {
isOkenable[0] = true;
List<ICubridNode> children = selection.getChildren();
boolean hasSame = false;
for (ICubridNode child : children) {
if (child.getLabel().equals(name)) {
hasSame = true;
break;
}
}
if (hasSame) {
isOkenable[1] = false;
} else {
isOkenable[1] = true;
}
}
enableOk();
}
});
samplingTermscombo.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent ve) {
String text = ve.text;
if (("").equals(text)) {
return;
}
if (text.matches("^\\d$")) {
ve.doit = true;
} else {
ve.doit = false;
}
}
});
samplingTermscombo.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent me) {
String samplingTerms = samplingTermscombo.getText().trim();
if (ValidateUtil.isInteger(samplingTerms)) {
isOkenable[2] = true;
if (Arrays.asList(samplingTermsItems).contains(samplingTerms)) {
isOkenable[3] = true;
} else {
isOkenable[3] = false;
}
} else {
isOkenable[2] = false;
}
enableOk();
}
});
discriptionText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent me) {
String desc = discriptionText.getText().trim();
if (desc.length() == 0) {
isOkenable[4] = false;
} else {
isOkenable[4] = true;
}
enableOk();
}
});
if (null != targetDbNameCombo) {
targetDbNameCombo.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent me) {
String targetDb = targetDbNameCombo.getText().trim();
boolean hasServer = false;
for (int i = 0; i < tagetTbl.getItemCount(); i++) {
if (tagetTbl.getItem(i).getText(0).startsWith("server")) {
hasServer = true;
break;
}
}
if (hasServer && targetDb.length() == 0) {
isOkenable[5] = false;
} else {
isOkenable[5] = true;
}
List<String> dbs = selection.getServer().getServerInfo().getAllDatabaseList();
if (dbs.contains(targetDb)) {
isOkenable[6] = true;
} else {
isOkenable[6] = false;
}
enableOk();
}
});
}
}
use of org.eclipse.swt.events.VerifyEvent in project cubrid-manager by CUBRID.
the class EditMonitorIntervalDialog method createDialogArea.
/**
* Creates and returns the contents of the upper part of this dialog (above
* the button bar).
*
* @param parent The parent composite to contain the dialog area
* @return the dialog area control
*/
protected Control createDialogArea(Composite parent) {
Composite parentComp = (Composite) super.createDialogArea(parent);
int columePerLine = isEditable ? 3 : 2;
Composite intervalComp = new Composite(parentComp, SWT.RESIZE);
GridLayout layoutIntervalComp = new GridLayout(columePerLine, false);
intervalComp.setLayout(layoutIntervalComp);
intervalComp.setLayoutData(new GridData(GridData.FILL_BOTH));
Label lblInterval = new Label(intervalComp, SWT.NONE);
final GridData gdLblInterval = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1);
gdLblInterval.widthHint = 80;
lblInterval.setLayoutData(gdLblInterval);
lblInterval.setText(Messages.lblInterval);
intervalCombo = new Combo(intervalComp, SWT.BORDER);
final GridData gdIntervalCombo = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
gdIntervalCombo.widthHint = 160;
intervalCombo.setLayoutData(gdIntervalCombo);
intervalCombo.setItems(itemsOfIntervalCombo);
intervalCombo.setText(interval);
intervalCombo.setEnabled(false);
if (isEditable) {
intervalCombo.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent event) {
String text = event.text;
if (StringUtil.isEmpty(text)) {
return;
}
if (text.matches("^\\d*$")) {
event.doit = true;
} else {
event.doit = false;
}
}
});
intervalCombo.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
String str = intervalCombo.getText();
if (StringUtil.isEmpty(str)) {
isOkEnable = false;
enableOk();
return;
}
int interval = Integer.parseInt(str);
if (interval >= 10 && interval < 3600) {
isOkEnable = true;
} else {
isOkEnable = false;
}
enableOk();
}
});
btnEditCheck = new Button(intervalComp, SWT.CHECK);
btnEditCheck.setText(Messages.btnEditInterval);
btnEditCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
isEditEnable = btnEditCheck.getSelection();
intervalCombo.setEnabled(isEditEnable);
}
});
btnEditCheck.setSelection(false);
}
return parentComp;
}
use of org.eclipse.swt.events.VerifyEvent in project translationstudio8 by heartsome.
the class SegmentViewer method initListeners.
private void initListeners() {
StyledText styledText = getTextWidget();
// 去掉默认的复制、粘贴键绑定,以实现在复制、粘贴前对标记的处理
styledText.setKeyBinding('V' | SWT.MOD1, SWT.NULL);
styledText.setKeyBinding(SWT.INSERT | SWT.MOD2, SWT.NULL);
styledText.setKeyBinding('C' | SWT.MOD1, SWT.NULL);
styledText.setKeyBinding(SWT.INSERT | SWT.MOD1, SWT.NULL);
getDocument().addDocumentListener(new IDocumentListener() {
public void documentChanged(DocumentEvent e) {
}
public void documentAboutToBeChanged(DocumentEvent event) {
String method = belongToUndoOrRedo();
if (event.getLength() > 0 && method != null) {
try {
String text = event.getDocument().get(event.getOffset(), event.getLength());
Matcher matcher = PATTERN.matcher(text);
List<InnerTag> cache = new ArrayList<InnerTag>();
while (matcher.find()) {
String placeHolder = matcher.group();
InnerTag innerTag = InnerTagUtil.getInnerTag(getInnerTagCacheList(), placeHolder);
if (innerTag != null && innerTag.isVisible()) {
innerTag.setVisible(false);
if ("undo".equals(method) && innerTag.getInnerTagBean().isWrongTag()) {
cache.add(innerTag);
}
}
}
for (InnerTag t : cache) {
innerTagCacheList.remove(t);
t.dispose();
}
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
/**
* 是否属于撤销或者重做的操作。
* @return ;
*/
private String belongToUndoOrRedo() {
IUndoManager undoManager = getUndoManager();
if (undoManager != null) {
StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
for (StackTraceElement stackTraceElement : stackTraceElements) {
if (undoManager.getClass().getName().equals(stackTraceElement.getClassName())) {
String methodName = stackTraceElement.getMethodName();
if ("undo".equals(methodName) || "redo".equals(methodName)) {
return methodName;
}
}
}
}
return null;
}
});
/**
* 处理在显示非打印隐藏字符的情况光标移动问题。兼容非打印字符替换符号
*/
styledText.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e) {
if (!XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
return;
}
if (e.stateMask == SWT.NONE && (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN)) {
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
char c = styledText.getText().charAt(offset);
char _c = styledText.getText().charAt(offset - 1);
if (c == '\n' && (_c == Constants.LINE_SEPARATOR_CHARACTER)) {
styledText.setCaretOffset(offset - 1);
}
}
}
public void keyPressed(KeyEvent e) {
if (!XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
return;
}
if (e.stateMask == SWT.NONE && (e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT)) {
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
char c = styledText.getText().charAt(offset);
char _c = styledText.getText().charAt(offset - 1);
if ((c == '' && (_c == Constants.TAB_CHARACTER || _c == Constants.SPACE_CHARACTER)) || (c == '\n' && (_c == Constants.LINE_SEPARATOR_CHARACTER))) {
if (e.keyCode == SWT.ARROW_LEFT) {
styledText.setCaretOffset(offset - 1);
} else if (e.keyCode == SWT.ARROW_RIGHT) {
styledText.setCaretOffset(offset + 1);
}
}
} else if (e.stateMask == SWT.CTRL && (e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT)) {
// 单独对 ctrl + right ,ctrl + left 换行的处理
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
char c = styledText.getText().charAt(offset);
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
char _c = styledText.getText().charAt(offset - 1);
if (c == '\n' && (_c == Constants.LINE_SEPARATOR_CHARACTER)) {
if (e.keyCode == SWT.ARROW_LEFT) {
styledText.setCaretOffset(offset - 1);
} else if (e.keyCode == SWT.ARROW_RIGHT) {
styledText.setCaretOffset(offset + 1);
}
}
} else if ((e.stateMask == SWT.SHIFT || e.stateMask == (SWT.SHIFT | SWT.CTRL)) && (e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT)) {
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
char c = styledText.getText().charAt(offset);
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
char _c = styledText.getText().charAt(offset - 1);
if ((c == '' && (_c == Constants.TAB_CHARACTER || _c == Constants.SPACE_CHARACTER)) || (c == '\n' && (_c == Constants.LINE_SEPARATOR_CHARACTER))) {
if (e.keyCode == SWT.ARROW_LEFT) {
styledText.invokeAction(ST.SELECT_COLUMN_PREVIOUS);
} else if (e.keyCode == SWT.ARROW_RIGHT) {
styledText.invokeAction(ST.SELECT_COLUMN_NEXT);
}
}
} else if ((e.stateMask == SWT.SHIFT) && (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN)) {
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
char c = styledText.getText().charAt(offset);
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
char _c = styledText.getText().charAt(offset - 1);
if (c == '\n' && (_c == Constants.LINE_SEPARATOR_CHARACTER)) {
if (e.keyCode == SWT.ARROW_UP) {
styledText.invokeAction(ST.SELECT_COLUMN_PREVIOUS);
} else if (e.keyCode == SWT.ARROW_DOWN) {
styledText.invokeAction(ST.SELECT_COLUMN_NEXT);
}
}
}
}
});
/**
* 处理在显示非打印隐藏字符的情况光标移动问题。兼容非打印字符替换符号
*/
styledText.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
if (!XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
return;
}
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
// hidden character
char c = styledText.getText().charAt(offset);
// display character
char _c = styledText.getText().charAt(offset - 1);
if ((_c == Constants.LINE_SEPARATOR_CHARACTER || _c == Constants.TAB_CHARACTER || _c == Constants.SPACE_CHARACTER) && (c == '\n' || c == '')) {
styledText.setCaretOffset(offset + 1);
}
}
public void mouseDoubleClick(MouseEvent e) {
}
});
/**
* 选择内容时对非打印字符的处理
*/
styledText.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
StyledText styledText = (StyledText) e.widget;
int offset = styledText.getCaretOffset();
if (offset < 1 || offset >= styledText.getCharCount()) {
return;
}
char c = styledText.getText().charAt(offset);
char _c = styledText.getText().charAt(offset - 1);
if ((c == '' && (_c == Constants.TAB_CHARACTER || _c == Constants.SPACE_CHARACTER)) || (c == '\n' && (_c == Constants.LINE_SEPARATOR_CHARACTER))) {
int caretOffset = styledText.getCaretOffset();
Point p = styledText.getSelection();
if (caretOffset == p.x) {
styledText.invokeAction(ST.SELECT_COLUMN_PREVIOUS);
} else if (caretOffset == p.y) {
styledText.invokeAction(ST.SELECT_COLUMN_NEXT);
}
}
}
});
styledText.addVerifyListener(new VerifyListener() {
public void verifyText(final VerifyEvent e) {
String t = e.text;
if ((e.start == e.end) || (e.start != e.end && !e.text.equals(""))) {
// 添加内容时
if (XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
t = t.replace("\t", Constants.TAB_CHARACTER + "").replace(" ", Constants.SPACE_CHARACTER + "");
t = t.replace(System.getProperty("line.separator"), "\n");
StringBuffer bf = new StringBuffer(t);
int i = bf.indexOf("\n");
if (i != -1) {
if (i == 0) {
bf.insert(i, Constants.LINE_SEPARATOR_CHARACTER);
} else if (i != 0 && bf.charAt(i - 1) != Constants.LINE_SEPARATOR_CHARACTER) {
bf.insert(i, Constants.LINE_SEPARATOR_CHARACTER);
}
i = bf.indexOf("\n", i + 1);
}
e.text = bf.toString();
}
return;
}
final StyledText styledText = (StyledText) e.widget;
final String text = styledText.getText(e.start, e.end - 1);
final Matcher matcher = PATTERN.matcher(text);
if (matcher.find()) {
// 被删除的部分中存在标记的的情况,进行特殊处理。
if (isSource()) {
e.doit = false;
setToolTipMessage(Messages.getString("innertag.SegmentViewer.msg1"));
return;
}
matcher.reset();
styledText.getDisplay().syncExec(new Runnable() {
public void run() {
deleteInnerTagInPairs(e, matcher);
}
});
}
if (XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
if (text.length() == 1 && (text.equals("\n") || text.indexOf('') != -1)) {
char c = styledText.getText().charAt(e.start - 1);
if (c == Constants.LINE_SEPARATOR_CHARACTER || c == Constants.SPACE_CHARACTER || c == Constants.TAB_CHARACTER) {
styledText.replaceTextRange(e.start - 1, 2, "");
e.doit = false;
}
} else if (text.length() == 1 && (text.indexOf(Constants.LINE_SEPARATOR_CHARACTER) != -1 || text.indexOf(Constants.TAB_CHARACTER) != -1 || text.indexOf(Constants.TAB_CHARACTER) != -1)) {
char c = styledText.getText().charAt(e.start + 1);
if (c == '\n' || c == '') {
styledText.replaceTextRange(e.start, 2, "");
e.doit = false;
}
}
}
}
/**
* 成对删除内部标记
*/
private void deleteInnerTagInPairs(final VerifyEvent e, Matcher matcher) {
StyledText styledText = (StyledText) e.widget;
// 记录被删除的标记的索引。
ArrayList<Integer> tagIndexes = new ArrayList<Integer>();
while (matcher.find()) {
String placeHolder = matcher.group();
InnerTag innerTag = InnerTagUtil.getInnerTag(SegmentViewer.this.getInnerTagCacheList(), placeHolder);
if (innerTag != null && innerTag.isVisible()) {
innerTag.setVisible(false);
// 保存成对标记中未完全删除的标记索引
TagType tagType = innerTag.getInnerTagBean().getType();
if (tagType == TagType.START || tagType == TagType.END) {
// 处理成对标记的成对删除
// 标记索引
Integer tagIndex = Integer.valueOf(innerTag.getInnerTagBean().getIndex());
if (tagIndexes.contains(tagIndex)) {
// 如果已经包含此索引,说明成对标记的2个部分都已经删除。
tagIndexes.remove(tagIndex);
} else {
// 如果未包含此索引,则说明只删除了一个部分(开始或结束)的标记。
tagIndexes.add(tagIndex);
}
}
}
}
if (!tagIndexes.isEmpty()) {
// 存在未删除的情况。
getUndoManager().beginCompoundChange();
// 上一步已经修改,取消修改操作。
e.doit = false;
// 替换改动内容
styledText.getContent().replaceTextRange(e.start, e.end - e.start, e.text);
for (int i = 0; i < errorTagStart; i++) {
// 删除成对标记中未被删除的部分。
InnerTag innerTag = innerTagCacheList.get(i);
if (innerTag != null && innerTag.isVisible()) {
if (tagIndexes.contains(innerTag.getInnerTagBean().getIndex())) {
innerTag.setVisible(false);
String placeHolder = placeHolderBuilder.getPlaceHolder(null, i);
int start = -1;
if ((start = styledText.getText().indexOf(placeHolder)) != -1) {
styledText.getContent().replaceTextRange(start, placeHolder.length(), "");
}
tagIndexes.remove(Integer.valueOf(innerTag.getInnerTagBean().getIndex()));
if (tagIndexes.isEmpty()) {
break;
}
}
}
}
getUndoManager().endCompoundChange();
/**
* 通知更新主菜单(actionBar)中“撤销重做”等菜单项的状态,参见
* net.heartsome.cat.ts.ui.xliffeditor.nattable.editor.XLIFFEditorActionHandler
*/
styledText.notifyListeners(SWT.Selection, null);
}
}
});
/**
* 重绘时,将当前文本段中存在的内部标记对应的控件显示出来
*/
styledText.addPaintObjectListener(new PaintObjectListener() {
public void paintObject(PaintObjectEvent event) {
StyleRange styleRange = event.style;
if (styleRange != null) {
String text = ((StyledText) event.widget).getText();
int end = styleRange.start + styleRange.length;
if (text.length() < end) {
return;
}
String styledString = text.substring(styleRange.start, end);
Matcher matcher = PATTERN.matcher(styledString);
if (matcher.matches()) {
InnerTag tag = InnerTagUtil.getInnerTag(SegmentViewer.this.getInnerTagCacheList(), styledString);
if (tag != null) {
if (!tag.isVisible()) {
tag.setVisible(true);
}
// int y = event.y + event.ascent - styleRange.metrics.ascent;
int lineHeight = getTextWidget().getLineHeight();
// innerTag.setLocation(event.x + SEGMENT_LINE_SPACING / 2, event.y + SEGMENT_LINE_SPACING /
// 2 /* 行距的一半 */);
int y = event.y + lineHeight / 2 - tag.getBounds().height / 2;
tag.setLocation(event.x + SEGMENT_LINE_SPACING, y);
}
}
}
}
});
/**
* 鼠标移动时,清除错误消息。
*/
styledText.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
if (getTextWidget().getToolTipText() != null && getTextWidget().getToolTipText().length() > 0) {
setToolTipMessage("");
}
}
});
// 处理修改内容时,需要非打印字符添加样式。
styledText.addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
if (!XliffEditorParameter.getInstance().isShowNonpirnttingCharacter()) {
return;
}
String s = event.text;
Matcher matcher = Constants.NONPRINTING_PATTERN.matcher(s);
TextStyle style = new TextStyle(null, GUIHelper.getColor(new RGB(100, 100, 100)), null);
List<StyleRange> ranges = new ArrayList<StyleRange>();
while (matcher.find()) {
int start = event.start + matcher.start();
StyleRange range = new StyleRange(style);
range.start = start;
range.length = 1;
ranges.add(range);
}
for (StyleRange range : ranges) {
getTextWidget().setStyleRange(range);
}
}
});
styledText.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
for (InnerTag tag : innerTagCacheList) {
if (tag.isSelected()) {
tag.setSelected(false);
tag.redraw();
}
}
String styledString = getTextWidget().getSelectionText();
Matcher matcher = PATTERN.matcher(styledString);
while (matcher.find()) {
String s = matcher.group();
InnerTag tag = InnerTagUtil.getInnerTag(SegmentViewer.this.getInnerTagCacheList(), s);
if (tag != null) {
tag.setSelected(true);
tag.redraw();
}
}
}
});
}
Aggregations