mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Make tool selection dialog more intuitive
This commit is contained in:
parent
86ef64e116
commit
9c5420b74e
1 changed files with 95 additions and 36 deletions
|
@ -65,8 +65,7 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
private Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT);
|
private Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT);
|
||||||
private Color red = Display.getDefault().getSystemColor(SWT.COLOR_RED);
|
private Color red = Display.getDefault().getSystemColor(SWT.COLOR_RED);
|
||||||
private Color gray = Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY);
|
private Color gray = Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY);
|
||||||
// private Color white = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
|
private IToolListModification tmod = null;
|
||||||
private IToolListModification tmod = null;
|
|
||||||
|
|
||||||
public ToolSelectionDialog(Shell shell, IResourceInfo ri) {
|
public ToolSelectionDialog(Shell shell, IResourceInfo ri) {
|
||||||
super (shell);
|
super (shell);
|
||||||
|
@ -98,7 +97,7 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
removed = new ArrayList();
|
removed = new ArrayList();
|
||||||
left = new ArrayList();
|
left = new ArrayList();
|
||||||
right = new ArrayList();
|
right = new ArrayList();
|
||||||
|
|
||||||
Composite c1 = new Composite(composite, SWT.NONE);
|
Composite c1 = new Composite(composite, SWT.NONE);
|
||||||
c1.setLayoutData(new GridData(GridData.FILL_BOTH));
|
c1.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||||
c1.setLayout(new GridLayout(1, false));
|
c1.setLayout(new GridLayout(1, false));
|
||||||
|
@ -127,7 +126,7 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
TableColumn col = new TableColumn(t1, SWT.NONE);
|
TableColumn col = new TableColumn(t1, SWT.NONE);
|
||||||
col.setText(Messages.getString("ToolSelectionDialog.1")); //$NON-NLS-1$
|
col.setText(Messages.getString("ToolSelectionDialog.1")); //$NON-NLS-1$
|
||||||
col.setWidth(COL_WIDTH);
|
col.setWidth(COL_WIDTH);
|
||||||
|
|
||||||
l1 = new CLabel(c1, SWT.BORDER);
|
l1 = new CLabel(c1, SWT.BORDER);
|
||||||
l1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
l1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
|
|
||||||
|
@ -153,7 +152,7 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
gd.verticalSpan = 2;
|
gd.verticalSpan = 2;
|
||||||
gd.minimumHeight = 100;
|
gd.minimumHeight = 100;
|
||||||
txt2.setLayoutData(gd);
|
txt2.setLayoutData(gd);
|
||||||
|
|
||||||
b_add = new Button(c2, SWT.PUSH);
|
b_add = new Button(c2, SWT.PUSH);
|
||||||
b_add.setText(Messages.getString("ToolSelectionDialog.12")); //$NON-NLS-1$
|
b_add.setText(Messages.getString("ToolSelectionDialog.12")); //$NON-NLS-1$
|
||||||
b_add.addSelectionListener(new SelectionAdapter() {
|
b_add.addSelectionListener(new SelectionAdapter() {
|
||||||
|
@ -164,10 +163,8 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
ITool tool = (ITool)t1.getItem(x).getData();
|
ITool tool = (ITool)t1.getItem(x).getData();
|
||||||
left.remove(tool);
|
left.remove(tool);
|
||||||
right.add(tool);
|
right.add(tool);
|
||||||
|
|
||||||
tmod.changeProjectTools(null, tool);
|
tmod.changeProjectTools(null, tool);
|
||||||
|
updateData();
|
||||||
updateData(true);
|
|
||||||
}});
|
}});
|
||||||
b_add.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
|
b_add.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
|
||||||
|
|
||||||
|
@ -193,7 +190,7 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
|
|
||||||
tmod.changeProjectTools(tool, null);
|
tmod.changeProjectTools(tool, null);
|
||||||
|
|
||||||
updateData(true);
|
updateData();
|
||||||
}});
|
}});
|
||||||
b_del.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
|
b_del.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
|
||||||
|
|
||||||
|
@ -226,11 +223,14 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
for (int j = 0; j<all.length; j++) {
|
for (int j = 0; j<all.length; j++) {
|
||||||
if (all[j] != null) left.add(all[j]);
|
if (all[j] != null) left.add(all[j]);
|
||||||
}
|
}
|
||||||
updateData(false);
|
updateData();
|
||||||
|
|
||||||
return composite;
|
return composite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reaction for <Replace> button press or double-click.
|
||||||
|
*/
|
||||||
private void handleReplace() {
|
private void handleReplace() {
|
||||||
if (! b_rep.isEnabled())
|
if (! b_rep.isEnabled())
|
||||||
return;
|
return;
|
||||||
|
@ -247,30 +247,39 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
|
|
||||||
tmod.changeProjectTools(tool2, tool1);
|
tmod.changeProjectTools(tool2, tool1);
|
||||||
|
|
||||||
updateData(true);
|
updateData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private int removeArrows(Table t) {
|
/**
|
||||||
|
* Removes "triangle" marks from all table's items.
|
||||||
|
* @param t - affected table.
|
||||||
|
*/
|
||||||
|
private void removeArrows(Table t) {
|
||||||
for (int j=0; j<t.getItemCount(); j++) {
|
for (int j=0; j<t.getItemCount(); j++) {
|
||||||
TableItem ti = t.getItem(j);
|
TableItem ti = t.getItem(j);
|
||||||
if (ToolChainEditTab.IMG_ARROW.equals(ti.getImage()))
|
if (ToolChainEditTab.IMG_ARROW.equals(ti.getImage()))
|
||||||
ti.setImage((Image)null);
|
ti.setImage((Image)null);
|
||||||
}
|
}
|
||||||
return t.getSelectionIndex();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean markReplace(int x, Table src, Table dst, Button b) {
|
/**
|
||||||
|
* Adds "triangle" marks for items which can replace selected one.
|
||||||
|
*
|
||||||
|
* @param src - table where selected element is located
|
||||||
|
* @param dst - table where marks should be set
|
||||||
|
* @param b - button (add or del) to be enabled
|
||||||
|
*/
|
||||||
|
private void markReplace(Table src, Table dst, Button b) {
|
||||||
|
int x = src.getSelectionIndex();
|
||||||
if (x == -1)
|
if (x == -1)
|
||||||
return false;
|
return;
|
||||||
ITool tool = (ITool)src.getItem(x).getData();
|
ITool tool = (ITool)src.getItem(x).getData();
|
||||||
IToolModification tm = tmod.getToolModification(tool);
|
IToolModification tm = tmod.getToolModification(tool);
|
||||||
if (tm == null)
|
if (tm == null)
|
||||||
return false;
|
return;
|
||||||
IModificationOperation[] mo = tm.getSupportedOperations();
|
IModificationOperation[] mo = tm.getSupportedOperations();
|
||||||
if (mo == null || mo.length == 0)
|
if (mo == null || mo.length == 0)
|
||||||
return false;
|
return;
|
||||||
boolean result = false;
|
|
||||||
int pos = dst.getSelectionIndex();
|
|
||||||
for (int j=0; j<dst.getItemCount(); j++) {
|
for (int j=0; j<dst.getItemCount(); j++) {
|
||||||
TableItem ti = dst.getItem(j);
|
TableItem ti = dst.getItem(j);
|
||||||
ITool tt = (ITool)ti.getData();
|
ITool tt = (ITool)ti.getData();
|
||||||
|
@ -280,28 +289,68 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
b.setEnabled(true); // enable Add or Del
|
b.setEnabled(true); // enable Add or Del
|
||||||
else if (t.matches(tt)) {
|
else if (t.matches(tt)) {
|
||||||
ti.setImage(ToolChainEditTab.IMG_ARROW);
|
ti.setImage(ToolChainEditTab.IMG_ARROW);
|
||||||
if (pos == j) result = true;
|
|
||||||
break; // exit from modif. loop
|
break; // exit from modif. loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called after user has selected item either in t1 or in t2.
|
||||||
|
*/
|
||||||
private void handleSelection() {
|
private void handleSelection() {
|
||||||
int x1 = removeArrows(t1);
|
removeArrows(t1);
|
||||||
int x2 = removeArrows(t2);
|
removeArrows(t2);
|
||||||
b_add.setEnabled(b_all.getSelection() && x1 > -1);
|
b_add.setEnabled(b_all.getSelection() && t1.getItemCount() > 0);
|
||||||
b_rep.setEnabled(b_all.getSelection() && x1 > -1 && x2 > -1);
|
b_rep.setEnabled(b_all.getSelection() && t1.getItemCount() > 0 && t2.getItemCount() > 0);
|
||||||
b_del.setEnabled(b_all.getSelection() && x2 > -1);
|
b_del.setEnabled(b_all.getSelection() && t2.getItemCount() > 0);
|
||||||
boolean b1 = markReplace(x1, t1, t2, b_add);
|
|
||||||
boolean b2 = markReplace(x2, t2, t1, b_del);
|
if (t1.isFocusControl()) {
|
||||||
if (b1 && b2) b_rep.setEnabled(true);
|
markReplace(t1, t2, b_add);
|
||||||
showErrorMessage(t1, false, x1);
|
int j = adjustPosition(t2);
|
||||||
showErrorMessage(t2, true, x2);
|
markReplace(t2, t1, b_del);
|
||||||
|
if (j != -1)
|
||||||
|
b_rep.setEnabled(true);
|
||||||
|
} else {
|
||||||
|
markReplace(t2, t1, b_del);
|
||||||
|
int j = adjustPosition(t1);
|
||||||
|
markReplace(t1, t2, b_add);
|
||||||
|
if (j != -1)
|
||||||
|
b_rep.setEnabled(true);
|
||||||
|
}
|
||||||
|
showErrorMessage(t1, false);
|
||||||
|
showErrorMessage(t2, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showErrorMessage(Table t, boolean isPrj, int x) {
|
/**
|
||||||
|
* Changes position of inactive table
|
||||||
|
* to enable replacement, if possible.
|
||||||
|
*
|
||||||
|
* returns new position or -1 if there's no tools to replace.
|
||||||
|
*/
|
||||||
|
private int adjustPosition(Table t) {
|
||||||
|
int j = t.getSelectionIndex();
|
||||||
|
TableItem ti = t.getItem(j);
|
||||||
|
if (ToolChainEditTab.IMG_ARROW.equals(ti.getImage()))
|
||||||
|
return j;
|
||||||
|
for (j=0; j<t.getItemCount(); j++) {
|
||||||
|
ti = t.getItem(j);
|
||||||
|
if (ToolChainEditTab.IMG_ARROW.equals(ti.getImage())) {
|
||||||
|
t.select(j);
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays appropriate error message for selected tool.
|
||||||
|
*
|
||||||
|
* @param t - affected table
|
||||||
|
* @param isPrj - whether
|
||||||
|
*/
|
||||||
|
private void showErrorMessage(Table t, boolean isPrj) {
|
||||||
|
int x = t.getSelectionIndex();
|
||||||
if (isPrj)
|
if (isPrj)
|
||||||
txt2.setText(EMPTY_STR);
|
txt2.setText(EMPTY_STR);
|
||||||
else {
|
else {
|
||||||
|
@ -339,7 +388,14 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
l1.setImage(image);
|
l1.setImage(image);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds given tool to the table, sets appropriate font.
|
||||||
|
*
|
||||||
|
* @param tool - tool to add
|
||||||
|
* @param table - affected table
|
||||||
|
* @param bold - whether the tool should be marked by bold font.
|
||||||
|
*/
|
||||||
private void add(ITool tool, Table table, boolean bold) {
|
private void add(ITool tool, Table table, boolean bold) {
|
||||||
IToolModification tm = tmod.getToolModification(tool);
|
IToolModification tm = tmod.getToolModification(tool);
|
||||||
TableItem ti = new TableItem(table, 0);
|
TableItem ti = new TableItem(table, 0);
|
||||||
|
@ -351,7 +407,10 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
ti.setForeground(table.equals(t2) ? red : gray);
|
ti.setForeground(table.equals(t2) ? red : gray);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateData(boolean check) {
|
/**
|
||||||
|
* Refresh data in t1 and t2 tables
|
||||||
|
*/
|
||||||
|
private void updateData() {
|
||||||
removed.clear();
|
removed.clear();
|
||||||
added.clear();
|
added.clear();
|
||||||
int t1_pos = t1.getSelectionIndex();
|
int t1_pos = t1.getSelectionIndex();
|
||||||
|
|
Loading…
Add table
Reference in a new issue