Eclipse Plugin Development SWTJFace Development Part 4 Viewers

  • Slides: 34
Download presentation
Eclipse Plug-in Development SWT/JFace Development Part 4 Viewers 11/28/2020 Soyatec (http: //www. soyatec. com)

Eclipse Plug-in Development SWT/JFace Development Part 4 Viewers 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Contents § Introducing the JFace Viewers § Viewers in JFace v. Combo. Viewer v.

Contents § Introducing the JFace Viewers § Viewers in JFace v. Combo. Viewer v. List. Viewer v. Table. Viewer q. Filter q. Cell Editor v. Tree. Viewer q. Filter q. Cell Editor 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Viewers § Content provider v IStructured. Content. Provider q List elements of domain q

Viewers § Content provider v IStructured. Content. Provider q List elements of domain q Controls ü List ü Combo ü Table q Array. Content. Provider ü Array ü Collection v ITree. Content. Provider q List children q Determine parent q Tree 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Viewers § Label provider v ILabel. Provider q Used for Lists and Trees q

Viewers § Label provider v ILabel. Provider q Used for Lists and Trees q Defines icon and label for each element v Cell. Label. Provider q Used for Tables q Defines a label provider per column v ITable. Label. Provider q Used for Tables q Provide the text and/or image for each column of a given element 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Viewers § Input v Domain model v Null to clear contents 11/28/2020 Soyatec (http:

Viewers § Input v Domain model v Null to clear contents 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Viewer § Creating a Viewer v Initialize v Set content provider v Set label

Viewer § Creating a Viewer v Initialize v Set content provider v Set label provider v Set input § Manage Selections v ISelection. Change. Listener v IStructured. Selection v Set selection and reveal 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Viewers § Custom a Viewer v create SWT controls for viewer (in constructor) (optional)

Viewers § Custom a Viewer v create SWT controls for viewer (in constructor) (optional) v initialize SWT controls from input (input. Changed) v define viewer-specific update methods v support selections (set. Selection, get. Selection) 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Combo. Viewer § Initialize v Default v With Combo or CCombo control Combo. Viewer

Combo. Viewer § Initialize v Default v With Combo or CCombo control Combo. Viewer viewer 1 = new Combo. Viewer(parent, SWT. READ_ONLY); CCombo ccombo = new CCombo(parent, SWT. READ_ONLY); Combo. Viewer viewer 2 = new Combo. Viewer(ccombo); Combo combo = new Combo(parent, SWT. READ_ONLY); Combo. Viewer viewer 3 = new Combo. Viewer(combo); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

List. Viewer § Initialize v Default v With List control List. Viewer viewer 1

List. Viewer § Initialize v Default v With List control List. Viewer viewer 1 = new List. Viewer(parent); List. Viewer viewer 2 = new List. Viewer(parent, SWT. MULTI | SWT. BORDER); List list = new List(parent, SWT. MULTI | SWT. BORDER); List. Viewer viewer 3 = new List. Viewer(list); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table. Viewer § Initialize v Default v With Table control Table. Viewer viewer 1

Table. Viewer § Initialize v Default v With Table control Table. Viewer viewer 1 = new Table. Viewer(parent); Table. Viewer viewer 2 = new Table. Viewer(parent, SWT. FULL_SELECTION|SWT. BORDER); Table table = new Table(parent, SWT. FULL_SELECTION|SWT. BORDER); Table. Viewer viewer 3 = new Table. Viewer(table); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Domain model v Try to list all books for a library

Table Viewer § Domain model v Try to list all books for a library Library library = new Library("Center Public Library"); library. add. Book(new Book("Children Education, 3 -6 years old" , new Author("Ben Jermain", 34))); library. add. Book(new Book("Children Education, 6 -12 years old" , new Author("Ben Jermain", 34))); library. add. Book(new Book("Baby Names Book", new Author("Quan Jia", 56))); library. add. Book(new Book("Java Development", new Author("Van Jondon", 43))); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Content Provider private static class My. Content. Provicer 1 implements IStructured.

Table Viewer § Content Provider private static class My. Content. Provicer 1 implements IStructured. Content. Provider { public void dispose() { } public void input. Changed(Viewer viewer, Object old. Input, Object new. Input) { } public Object[] get. Elements(Object input. Element) { if (input. Element instanceof Library) { return ((Library) input. Element). get. Books(). to. Array(); } return new Object[0]; } } 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Label provider private static class My. Label. Provider 1 extends Label.

Table Viewer § Label provider private static class My. Label. Provider 1 extends Label. Provider { public String get. Text(Object element) { if (element instanceof Model) { return ((Model) element). get. Name(); } return super. get. Text(element); } } 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Set Input Table. Viewer viewer = new Table. Viewer(shell); viewer. set.

Table Viewer § Set Input Table. Viewer viewer = new Table. Viewer(shell); viewer. set. Content. Provider(new My. Content. Provicer 1()); viewer. set. Label. Provider(new My. Label. Provider 1()); viewer. set. Input(library); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Add columns viewer. get. Table(). set. Header. Visible(true); Table. Viewer. Column

Table Viewer § Add columns viewer. get. Table(). set. Header. Visible(true); Table. Viewer. Column name. Column = new Table. Viewer. Column(viewer, SWT. NONE); name. Column. get. Column(). set. Text("Name"); name. Column. get. Column(). set. Width(200); Table. Viewer. Column author. Column = new Table. Viewer. Column(viewer, SWT. NONE); author. Column. get. Column(). set. Text("Author"); author. Column. get. Column(). set. Width(100); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Update label provider for Author column private static class My. Label.

Table Viewer § Update label provider for Author column private static class My. Label. Provider 2 extends Label. Provider implements ITable. Label. Provider { public Image get. Column. Image(Object element, int column. Index) { return null; } public String get. Column. Text(Object element, int column. Index) { if (element instanceof Book) { if (column. Index == 0) { return ((Book) element). get. Name(); } else if (column. Index == 1) { Author author = ((Book) element). get. Author(); if (author != null) { return author. get. Name(); } } } return null; } } } 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Cell. Lable. Provider v Column. Label. Provider name. Column. set. Label.

Table Viewer § Cell. Lable. Provider v Column. Label. Provider name. Column. set. Label. Provider(new Column. Label. Provider() { public String get. Text(Object element) { if (element instanceof Book) { return ((Book) element). get. Name(); } return super. get. Text(element); } public Color get. Foreground(Object element) { return display. get. System. Color(SWT. COLOR_BLUE); } }); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Cell. Label. Provider v Column. Label. Provider author. Column. set. Label.

Table Viewer § Cell. Label. Provider v Column. Label. Provider author. Column. set. Label. Provider(new Column. Label. Provider() { public String get. Text(Object element) { if (element instanceof Book) { Author author = ((Book) element). get. Author(); if (author != null) { return author. get. Name(); } } return super. get. Text(element); } public Color get. Background(Object element) { return display. get. System. Color(SWT. COLOR_CYAN); } }); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Cell. Label. Provider v Owner. Draw. Label. Provider viewer. set. Label.

Table Viewer § Cell. Label. Provider v Owner. Draw. Label. Provider viewer. set. Label. Provider(new Owner. Draw. Label. Provider() { protected void measure(Event event, Object element) { Line. Entry line = (Line. Entry) element; Point size = event. gc. text. Extent(line); event. width = viewer. get. Table(). get. Column(event. index). get. Width(); int lines = size. x / event. width + 1; event. height = size. y * lines; } protected void paint(Event event, Object element) { Line. Entry entry = (Line. Entry) element; event. gc. draw. Text(entry. line, event. x, event. y, true); } }); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Cell Editor viewer. set. Column. Properties(COLUMN_PROPERYIES); public void modify(Object element, String

Table Viewer § Cell Editor viewer. set. Column. Properties(COLUMN_PROPERYIES); public void modify(Object element, String property, Object value) { if (COLUMN_PROPERYIES[0]. equals(property)) { if (element instanceof Table. Item) { element = ((Table. Item) element). get. Data(); } if (element instanceof Book) { ((Book) element). set. Name(value. to. String()); } } viewer. update(element, new String[] { property }); } viewer. set. Cell. Editors(new Cell. Editor[] { new Text. Cell. Editor(viewer. get. Table()), null }); viewer. set. Cell. Modifier(new ICell. Modifier() { … }); public boolean can. Modify(Object element, String property) { return COLUMN_PROPERYIES[0]. equals(property); } 11/28/2020 public Object get. Value(Object element, String property) { if (COLUMN_PROPERYIES[0]. equals(property)) { if (element instanceof Book) { return ((Book) element). get. Name(); } } return null; } Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Cell Editor with Editing. Support v SWT. FULL_SELECTION author. Column. set.

Table Viewer § Cell Editor with Editing. Support v SWT. FULL_SELECTION author. Column. set. Editing. Support(new Editing. Support(viewer) { protected boolean can. Edit(Object element) { return true; } protected Cell. Editor get. Cell. Editor(Object element) { return new Dialog. Cell. Editor(viewer. get. Table()) { protected Object open. Dialog. Box(Control cell. Editor. Window) { Input. Dialog dialog = new Input. Dialog(cell. Editor. Window. get. Shell(), "Author Name", "Change the name of Author", (String) get. Value(), null); dialog. open(); return dialog. get. Value(); } … }); }; } protected void set. Value(Object element, Object value) { if (element instanceof Book) { Author author = ((Book) element). get. Author(); if (author != null) { author. set. Name(value. to. String()); } } viewer. update(element, null); } 11/28/2020 protected Object get. Value(Object element) { if (element instanceof Book) { Author author = ((Book) element). get. Author(); return author. get. Name(); } return null; } Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Cell. Editors v Text. Cell. Editor v Color. Cell. Editor v

Table Viewer § Cell. Editors v Text. Cell. Editor v Color. Cell. Editor v Combo. Box. Cell. Editor v Checkbox. Cell. Editor v Dialog. Cell. Editor 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Viewer. Filter viewer. add. Filter(new Viewer. Filter() { public boolean select(Viewer

Table Viewer § Viewer. Filter viewer. add. Filter(new Viewer. Filter() { public boolean select(Viewer viewer, Object parent. Element, Object element) { if (element instanceof Book) { Author author = ((Book) element). get. Author(); if (author != null && author. get. Age() < 40) { return false; } } return true; } }); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Viewer. Comparator viewer. get. Table(). set. Sort. Column(name. Column. get. Column());

Table Viewer § Viewer. Comparator viewer. get. Table(). set. Sort. Column(name. Column. get. Column()); name. Column. get. Column(). add. Selection. Listener(new Selection. Adapter() { public void widget. Selected(Selection. Event e) { viewer. set. Comparator(new Viewer. Comparator() { public int compare(Viewer viewer, Object e 1, Object e 2) { String n 1 = ((Book) e 1). get. Name(); String n 2 = ((Book) e 2). get. Name(); int value = Collator. get. Instance(). compare(n 1, n 2); int sort = ((Table. Viewer) viewer). get. Table(). get. Sort. Direction(); if ((sort & SWT. DOWN) != 0) { return -value; } else if ((sort & SWT. UP) != 0) { return value; } return 0; } }); int sort = viewer. get. Table(). get. Sort. Direction(); viewer. get. Table(). set. Sort. Direction( (SWT. UP & sort) != 0 ? SWT. DOWN : SWT. UP); } }); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Virtual Table & ILazy. Content. Provider Table. Viewer viewer = new

Table Viewer § Virtual Table & ILazy. Content. Provider Table. Viewer viewer = new Table. Viewer(shell, SWT. VIRTUAL); viewer. set. Content. Provider(new Lazy. Content. Provider()); viewer. set. Label. Provider(new Label. Provider()); String[] inputs = new String[100000]; for (int i = 0; i < inputs. length; i++) { inputs[i] = "Value " + i; } viewer. set. Item. Count(inputs. length); viewer. set. Use. Hashlookup(true); viewer. set. Input(inputs); 11/28/2020 private static class Lazy. Content. Provider implements ILazy. Content. Provider { private Table. Viewer viewer; private String[] elements; public void dispose() { } public void input. Changed(Viewer viewer, Object old. Input, Object new. Input) { this. viewer = (Table. Viewer) viewer; elements = (String[]) new. Input; } public void update. Element(int index) { viewer. replace(elements[index], index); } } Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Table Viewer § Table. Editor name. Column. set. Label. Provider(new Cell. Label. Provider() {

Table Viewer § Table. Editor name. Column. set. Label. Provider(new Cell. Label. Provider() { public void update(Viewer. Cell cell) { Table. Item item = (Table. Item) cell. get. Item(); if (item. get. Data("EDITOR") != null) { Table. Editor editor = (Table. Editor) item. get. Data("EDITOR"); editor. get. Editor(). dispose(); editor. dispose(); } Table. Editor editor = new Table. Editor(item. get. Parent()); Composite control = new Composite(item. get. Parent(), SWT. NONE); control. set. Background(item. get. Parent(). get. Background()); control. set. Background. Mode(SWT. INHERIT_DEFAULT); Row. Layout layout = new Row. Layout(SWT. HORIZONTAL); control. set. Layout(layout); Button button = new Button(control, SWT. RADIO); button. set. Text(((Book) cell. get. Element()). get. Name()); editor. grab. Horizontal = true; editor. set. Editor(control, item, 0); item. set. Data("EDITOR", editor); } }); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Tree. Viewer § Initialize v Default v With Tree control Tree. Viewer viewer 1

Tree. Viewer § Initialize v Default v With Tree control Tree. Viewer viewer 1 = new Tree. Viewer(parent); Tree. Viewer viewer 2 = new Tree. Viewer(parent, SWT. FULL_SELECTION|SWT. BORDER); Tree tree = new Tree(parent, SWT. FULL_SELECTION|SWT. BORDER); Tree. Viewer viewer 3 = new Tree. Viewer(tree); 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Tree. Viewer § Content Provider v ITree. Content. Provider public Object[] get. Elements(Object input.

Tree. Viewer § Content Provider v ITree. Content. Provider public Object[] get. Elements(Object input. Element) { if (input. Element instanceof List<? >) { return ((List<? >) input. Element). to. Array(); } return new Object[0]; } public Object get. Parent(Object element) { if (element instanceof Book) { return ((Book) element). get. Author(); } return null; } public boolean has. Children(Object element) { return get. Children(element). length != 0; } 11/28/2020 public Object[] get. Children(Object parent. Element) { if (parent. Element instanceof Library) { Set<Author> authors = author. Map. get(parent. Element); if (authors == null) { authors = new Hash. Set<Author>(); List<Book> books = ((Library) parent. Element). get. Books(); for (Book book : books) { Author author = book. get. Author(); if (author == null) { continue; } authors. add(author); } author. Map. put((Library) parent. Element, authors); } return authors. to. Array(); } else if (parent. Element instanceof Author) { return ((Author) parent. Element). get. Books(). to. Array(); } return new Object[0]; } Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Tree Viewer § Expand Collapse v set. Auto. Expand. Level (int level) // 0,

Tree Viewer § Expand Collapse v set. Auto. Expand. Level (int level) // 0, 1 … ALL_LEVELS v set. Expanded. Elements(Object[] elements) v set. Expanded. State(Object element. Or. Tree. Path, boolean expanded) v set. Expanded. Tree. Paths(Tree. Path[] tree. Paths) v set. Expand. Pre. Check. Filters(boolean check. Filters) v expand. All() v collapse. All() 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Tree. Viewer § Tree. Path v ITree. Path. Content. Provider v ITree. Path. Label.

Tree. Viewer § Tree. Path v ITree. Path. Content. Provider v ITree. Path. Label. Provider 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Tree. Viewer § Virtual Tree v ILazy. Tree. Content. Provider v ILazy. Tree. Path.

Tree. Viewer § Virtual Tree v ILazy. Tree. Content. Provider v ILazy. Tree. Path. Content. Provider 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Column Viewer § Column. Viewer. Editor. Activation. Strategy § Focus. Cell. Highlighter v Focus.

Column Viewer § Column. Viewer. Editor. Activation. Strategy § Focus. Cell. Highlighter v Focus. Cell. Owner. Draw. Highlighter § Column. Viewer. Tool. Tip. Support 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

Any Questions? Skype: jin. liu. soyatec Email: jin. liu@soyatec. com 11/28/2020 Soyatec (http: //www.

Any Questions? Skype: jin. liu. soyatec Email: jin. liu@soyatec. com 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec

The end 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype:

The end 11/28/2020 Soyatec (http: //www. soyatec. com) Jin Liu (jin. liu@soyatec. com) Skype: jin. liu. soyatec