Skip to content

Commit 09b73a5

Browse files
committed
added Reset Defaults, Apply and OK actions implementation
1 parent 443de2a commit 09b73a5

File tree

1 file changed

+75
-110
lines changed

1 file changed

+75
-110
lines changed

it.baeyens.arduino.core/src/it/baeyens/arduino/ui/LibraryPreferencePage.java

Lines changed: 75 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,30 @@
11
package it.baeyens.arduino.ui;
22

33
import java.util.HashMap;
4-
import java.util.Map.Entry;
4+
import java.util.Map;
55

66
import org.eclipse.core.runtime.IProgressMonitor;
77
import org.eclipse.core.runtime.IStatus;
88
import org.eclipse.core.runtime.MultiStatus;
99
import org.eclipse.core.runtime.jobs.Job;
1010
import org.eclipse.jface.preference.PreferencePage;
11-
import org.eclipse.jface.viewers.CheckStateChangedEvent;
12-
import org.eclipse.jface.viewers.CheckboxCellEditor;
1311
import org.eclipse.jface.viewers.CheckboxTreeViewer;
14-
import org.eclipse.jface.viewers.ComboBoxViewerCellEditor;
15-
import org.eclipse.jface.viewers.ICellModifier;
16-
import org.eclipse.jface.viewers.ICheckStateListener;
1712
import org.eclipse.jface.viewers.ICheckStateProvider;
1813
import org.eclipse.jface.viewers.ILabelProviderListener;
1914
import org.eclipse.jface.viewers.ITableLabelProvider;
2015
import org.eclipse.jface.viewers.ITreeContentProvider;
21-
import org.eclipse.jface.viewers.LabelProvider;
2216
import org.eclipse.jface.viewers.TreeViewer;
2317
import org.eclipse.jface.viewers.Viewer;
24-
import org.eclipse.jface.viewers.ViewerFilter;
2518
import org.eclipse.swt.SWT;
2619
import org.eclipse.swt.custom.CCombo;
2720
import org.eclipse.swt.custom.TreeEditor;
28-
import org.eclipse.swt.events.FocusAdapter;
29-
import org.eclipse.swt.events.FocusEvent;
30-
import org.eclipse.swt.events.KeyAdapter;
31-
import org.eclipse.swt.events.KeyEvent;
32-
import org.eclipse.swt.events.MenuAdapter;
33-
import org.eclipse.swt.events.MenuEvent;
34-
import org.eclipse.swt.events.ModifyEvent;
35-
import org.eclipse.swt.events.ModifyListener;
36-
import org.eclipse.swt.events.MouseAdapter;
37-
import org.eclipse.swt.events.MouseEvent;
3821
import org.eclipse.swt.events.SelectionAdapter;
3922
import org.eclipse.swt.events.SelectionEvent;
4023
import org.eclipse.swt.graphics.Image;
41-
import org.eclipse.swt.graphics.Point;
4224
import org.eclipse.swt.layout.GridData;
4325
import org.eclipse.swt.layout.GridLayout;
4426
import org.eclipse.swt.widgets.Composite;
4527
import org.eclipse.swt.widgets.Control;
46-
import org.eclipse.swt.widgets.Event;
47-
import org.eclipse.swt.widgets.Listener;
48-
import org.eclipse.swt.widgets.Menu;
49-
import org.eclipse.swt.widgets.MenuItem;
50-
import org.eclipse.swt.widgets.Table;
5128
import org.eclipse.swt.widgets.Text;
5229
import org.eclipse.swt.widgets.Tree;
5330
import org.eclipse.swt.widgets.TreeColumn;
@@ -63,25 +40,22 @@
6340

6441
public class LibraryPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
6542

66-
protected HashMap<String, String> ModdedLibraries = null;
67-
private Table table;
68-
ModifyListener tt = new ModifyListener() {
69-
70-
@Override
71-
public void modifyText(ModifyEvent e) {
72-
// TODO Auto-generated method stub
73-
CCombo theCombo = (CCombo) e.getSource();
74-
String libname = (String) theCombo.getData();
75-
String version = theCombo.getText();
76-
LibraryPreferencePage.this.ModdedLibraries.put(libname, version);
77-
}
78-
};
79-
43+
private Tree tree;
44+
private CheckboxTreeViewer viewer;
45+
private TreeEditor editor;
46+
8047
@Override
8148
public void init(IWorkbench workbench) {
8249
// nothing needed here
8350
}
8451

52+
@Override
53+
protected void performDefaults() {
54+
viewer.setInput(new LibraryTree());
55+
editor.getEditor().dispose();
56+
super.performDefaults();
57+
}
58+
8559
@Override
8660
protected Control createContents(Composite parent) {
8761
Composite control = new Composite(parent, SWT.NONE);
@@ -91,57 +65,46 @@ protected Control createContents(Composite parent) {
9165
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, false);
9266
desc.setLayoutData(layoutData);
9367
desc.setBackground(parent.getBackground());
94-
desc.setText("Add/remove libraries or change available versions."); //$NON-NLS-1$
95-
createTree(control);
68+
desc.setText("Add/remove libraries or change their version.");
69+
this.createTree(control);
9670

9771
return control;
9872
}
9973

100-
protected IStatus updateInstallation(IProgressMonitor monitor) {
101-
MultiStatus status = new MultiStatus(Activator.getId(), 0, Messages.ui_installing_arduino_libraries, null);
102-
103-
if (this.ModdedLibraries != null) {
104-
if (this.ModdedLibraries.size() > 0) {
105-
106-
for (Entry<String, String> curTableItem : this.ModdedLibraries.entrySet()) {
107-
String Version = curTableItem.getValue();
108-
String libName = curTableItem.getKey();
109-
Library removeLib = Manager.getLibraryIndex().getInstalledLibrary(libName);
110-
if (removeLib != null) {
111-
if (!(removeLib.getVersion().equals(Version))) {
112-
status.add(removeLib.remove(monitor));
113-
}
114-
115-
}
116-
Library curLib = Manager.getLibraryIndex().getLibrary(libName, Version);
117-
if (curLib != null) {
118-
if (!curLib.isInstalled()) {
119-
status.add(curLib.install(monitor));
120-
}
121-
}
74+
@Override
75+
public boolean performOk() {
76+
final HashMap<String, String> libs = new HashMap<>();
77+
for (TreeItem category : tree.getItems()) {
78+
for (TreeItem item : category.getItems()) {
79+
if (item.getData() instanceof LibraryTree.Library) {
80+
libs.put(item.getText(0), item.getText(1));
12281
}
12382
}
12483
}
125-
return status;
126-
}
127-
128-
@Override
129-
public boolean performOk() {
13084
new Job(Messages.ui_Adopting_arduino_libraries) {
13185

13286
@Override
13387
protected IStatus run(IProgressMonitor monitor) {
134-
135-
return updateInstallation(monitor);
136-
88+
MultiStatus status = new MultiStatus(Activator.getId(), 0, Messages.ui_installing_arduino_libraries, null);
89+
for (Map.Entry<String, String> lib : libs.entrySet()) {
90+
Library toRemove = Manager.getLibraryIndex().getInstalledLibrary(lib.getKey());
91+
if (toRemove != null && !toRemove.getVersion().equals(lib.getValue())) {
92+
status.add(toRemove.remove(monitor));
93+
}
94+
Library toInstall = Manager.getLibraryIndex().getLibrary(lib.getKey(), lib.getValue());
95+
if (toInstall != null && !toInstall.isInstalled()) {
96+
status.add(toInstall.install(monitor));
97+
}
98+
}
99+
return status;
137100
}
138101
}.schedule();
139102

140103
return true;
141104
}
142-
105+
143106
public void createTree(Composite parent) {
144-
// Filtering applied to all columns
107+
// filtering applied to all columns
145108
PatternFilter filter = new PatternFilter() {
146109
protected boolean isLeafMatch(final Viewer viewer, final Object element) {
147110
TreeViewer treeViewer = (TreeViewer) viewer;
@@ -155,11 +118,11 @@ protected boolean isLeafMatch(final Viewer viewer, final Object element) {
155118
return isMatch;
156119
}
157120
};
158-
FilteredTree tree = new FilteredTree(parent, SWT.CHECK | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION, filter,
159-
true);
121+
122+
tree = new FilteredTree(parent, SWT.CHECK | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION, filter, true).getViewer().getTree();
160123

161-
// Trick to replace the tree viewer
162-
CheckboxTreeViewer viewer = new CheckboxTreeViewer(tree.getViewer().getTree());
124+
// trick to replace the tree viewer
125+
viewer = new CheckboxTreeViewer(tree);
163126
viewer.setLabelProvider(new LibraryLabelProvider());
164127
viewer.setContentProvider(new LibraryContentProvider());
165128
viewer.setCheckStateProvider(new LibraryCheckProvider());
@@ -171,25 +134,16 @@ protected boolean isLeafMatch(final Viewer viewer, final Object element) {
171134
TreeColumn version = new TreeColumn(viewer.getTree(), SWT.LEFT);
172135
version.setWidth(100);
173136

174-
// Create the editor and set its attributes
175-
final TreeEditor editor = new TreeEditor(viewer.getTree());
137+
// create the editor and set its attributes
138+
editor = new TreeEditor(viewer.getTree());
176139
editor.horizontalAlignment = SWT.LEFT;
177140
editor.grabHorizontal = true;
178141
editor.setColumn(1);
179-
// viewer.expandAll();
180-
// for (TreeItem category : viewer.getTree().getItems()) {
181-
// for (TreeItem library : category.getItems()) {
182-
// if (((LibraryTree.Library) library.getData()).getInstalled() != null) {
183-
// // mark library as installed
184-
// library.setChecked(true);
185-
// }
186-
// verifySubtreeCheckStatus(category);
187-
// }
188-
// }
189-
// viewer.collapseAll();
190142

143+
// this ensures the tree labels are displayed correctly
191144
viewer.refresh(true);
192145

146+
// tree interactions listener
193147
viewer.getTree().addSelectionListener(new SelectionAdapter() {
194148
public void widgetSelected(SelectionEvent event) {
195149
if (editor.getEditor() != null) {
@@ -200,9 +154,9 @@ public void widgetSelected(SelectionEvent event) {
200154
if (item.getItemCount() > 0) {
201155
item.setGrayed(false);
202156
for (TreeItem child : item.getItems()) {
203-
child.setChecked(child.getChecked());
157+
child.setChecked(item.getChecked());
204158
if (child.getChecked()) {
205-
child.setText(1, ((LibraryTree.Library) item.getData()).getLatest());
159+
child.setText(1, ((LibraryTree.Library) child.getData()).getLatest());
206160
} else {
207161
child.setText(1, "");
208162
}
@@ -228,9 +182,6 @@ public void widgetSelected(SelectionEvent event) {
228182

229183
// Compute the width for the editor
230184
// Also, compute the column width, so that the dropdown fits
231-
// editor.minimumWidth = combo.computeSize(SWT.DEFAULT,
232-
// SWT.DEFAULT).x;
233-
// version.setWidth(editor.minimumWidth);
234185

235186
// Set the focus on the dropdown and set into the editor
236187
combo.setFocus();
@@ -250,7 +201,13 @@ public void widgetSelected(SelectionEvent event) {
250201
});
251202
}
252203

253-
public void verifySubtreeCheckStatus(TreeItem item) {
204+
/**
205+
* Ensures the correct checked/unchecked/greyed attributes are set
206+
* on the category.
207+
*
208+
* @param item the tree item representing the category
209+
*/
210+
private void verifySubtreeCheckStatus(TreeItem item) {
254211
boolean grayed = false;
255212
boolean checked = false;
256213
for (TreeItem child : item.getItems()) {
@@ -264,7 +221,12 @@ public void verifySubtreeCheckStatus(TreeItem item) {
264221
item.setGrayed(grayed);
265222
}
266223

267-
static class LibraryLabelProvider implements ITableLabelProvider {
224+
/**
225+
*
226+
* Displays the tree labels for both columns: name and version
227+
*
228+
*/
229+
private static class LibraryLabelProvider implements ITableLabelProvider {
268230

269231
@Override
270232
public void addListener(ILabelProviderListener arg0) {
@@ -303,14 +265,18 @@ public String getColumnText(Object element, int col) {
303265
return null;
304266
}
305267
}
306-
307-
static class LibraryCheckProvider implements ICheckStateProvider {
268+
269+
/**
270+
* Provides the correct checked status for installed libraries
271+
*
272+
*/
273+
private static class LibraryCheckProvider implements ICheckStateProvider {
308274
@Override
309275
public boolean isChecked(Object element) {
310276
if (element instanceof LibraryTree.Library) {
311277
return ((LibraryTree.Library) element).getInstalled() != null;
312278
} else if (element instanceof LibraryTree.Category) {
313-
for (LibraryTree.Library library : ((LibraryTree.Category)element).getLibraries()) {
279+
for (LibraryTree.Library library : ((LibraryTree.Category) element).getLibraries()) {
314280
if (library.getInstalled() != null) {
315281
return true;
316282
}
@@ -322,7 +288,7 @@ public boolean isChecked(Object element) {
322288
@Override
323289
public boolean isGrayed(Object element) {
324290
if (element instanceof LibraryTree.Category && isChecked(element)) {
325-
for (LibraryTree.Library library : ((LibraryTree.Category)element).getLibraries()) {
291+
for (LibraryTree.Library library : ((LibraryTree.Category) element).getLibraries()) {
326292
if (library.getInstalled() == null) {
327293
return true;
328294
}
@@ -332,7 +298,11 @@ public boolean isGrayed(Object element) {
332298
}
333299
}
334300

335-
static class LibraryContentProvider implements ITreeContentProvider {
301+
/**
302+
* Provides the tree content data
303+
*
304+
*/
305+
private static class LibraryContentProvider implements ITreeContentProvider {
336306

337307
@Override
338308
public Object[] getChildren(Object node) {
@@ -341,7 +311,10 @@ public Object[] getChildren(Object node) {
341311

342312
@Override
343313
public Object getParent(Object node) {
344-
return ((LibraryTree.Node) node).getParent();
314+
if (node instanceof LibraryTree.Node) {
315+
return ((LibraryTree.Node) node).getParent();
316+
}
317+
return null;
345318
}
346319

347320
@Override
@@ -367,13 +340,5 @@ public void dispose() {
367340
@Override
368341
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
369342
}
370-
371-
public Object[] getValue(Object node) {
372-
if (node instanceof LibraryTree.Library) {
373-
return ((LibraryTree.Library) node).getVersions().toArray();
374-
} else {
375-
return null;
376-
}
377-
}
378343
}
379344
}

0 commit comments

Comments
 (0)