168 private ItemList list;
169 private final SashForm treeSash;
170 private final IPageContainer container;
171 private final List<ColumnSettings> listColumns = new ArrayList<>();
172 private String listOrderBy;
173 private Set<IType<?>> selectedTypes = Collections.emptySet();
174 private final TypeFilterBuilder typeFilterTree;
175 private IItemCollection selectionItems;
176 private FlavorSelector flavorSelector;
177 private Boolean showTypesWithoutEvents;
178
179 EventBrowserUI(Composite parent, FormToolkit toolkit, IState state, IPageContainer container) {
180 this.container = container;
181
182 Form form = DataPageToolkit.createForm(parent, toolkit, getName(), getIcon());
183
184 treeSash = new SashForm(form.getBody(), SWT.HORIZONTAL);
185 toolkit.adapt(treeSash);
186 typeFilterTree = DataPageToolkit.buildEventTypeTree(treeSash, toolkit, this::onTypeChange, false);
187 MCContextMenuManager mm = typeFilterTree.getMenuManager();
188 IAction addPageAction = ActionToolkit.action(this::addPage,
189 Messages.EventBrowserPage_NEW_PAGE_USING_TYPES_ACTION, NEW_PAGE_ICON);
190 mm.appendToGroup(MCContextMenuManager.GROUP_NEW, addPageAction);
191
192 IAction typesWithoutEventsAction = ActionToolkit.checkAction(this::setTypesWithoutEvents,
193 Messages.EventBrowserPage_DISPLAY_TYPES_WITHOUT_EVENTS, null);
194 showTypesWithoutEvents = StateToolkit.readBoolean(state, SHOW_TYPES_WITHOUT_EVENTS, true);
195 typesWithoutEventsAction.setChecked(showTypesWithoutEvents);
196 mm.appendToGroup(MCContextMenuManager.GROUP_OPEN, typesWithoutEventsAction);
197
198 SelectionStoreActionToolkit.addSelectionStoreActions(typeFilterTree.getViewer(), () -> selectedTypes,
199 container.getSelectionStore(), Messages.EventBrowserPage_EVENT_TYPE_TREE_SELECTION, mm);
200
201 Composite listParent = toolkit.createComposite(treeSash);
202 listParent.setLayout(new FillLayout());
203 PersistableSashForm.loadState(treeSash, state.getChild(TREE_SASH));
204
205 form.getToolBarManager().add(addPageAction);
206 form.getToolBarManager().add(new Separator());
207 OrientationAction.installActions(form, treeSash);
208
211 TableSettings settings = new TableSettings(itemListState);
212 listColumns.addAll(settings.getColumns());
213 listOrderBy = settings.getOrderBy();
214 }
215 list = new ItemListBuilder().build(listParent, null);
216
217 flavorSelector = FlavorSelector.itemsWithTimerange(form, null, getDataSource().getItems(), container,
218 this::onInputSelected, flavorSelectorState);
219
220 addResultActions(form);
221 if (treeExpansion != null) {
222 typeFilterTree.getViewer().setExpandedTreePaths(treeExpansion);
223 } else {
224 typeFilterTree.getViewer().expandAll();
225 }
226 typeFilterTree.getViewer().setSelection(treeSelection);
227 // if (topIndex >= 0) {
228 // typeFilterTree.getViewer().getTree().setTopItem(typeFilterTree.getViewer().getTree().getItem(topIndex));
229 // }
230 list.getManager().setSelectionState(tableSelection);
231 }
232
233 private void addPage() {
234 PageManager pm = FlightRecorderUI.getDefault().getPageManager();
235 pm.makeRoot(pm.createPage(ItemHandlerPage.Factory.class, new ItemHandlerUiStandIn(selectedTypes)));
236 }
237
238 private void setTypesWithoutEvents(boolean checked) {
239 showTypesWithoutEvents = checked;
240 refreshTree();
241 }
242
243 private void onInputSelected(IItemCollection items, IRange<IQuantity> timeRange) {
244 this.selectionItems = (items == null) ? getDataSource().getItems() : items;
245 refreshTree();
246 }
247
248 private void refreshTree() {
249 boolean noTypesWereSelected = selectedTypes.isEmpty();
250
251 typeFilterTree.getViewer().getControl().setRedraw(false);
252 TreePath[] expansion = typeFilterTree.getViewer().getExpandedTreePaths();
253 ISelection selection = typeFilterTree.getViewer().getSelection();
254 typeFilterTree.setInput(getDataSource().getTypeTree((ItemCollectionToolkit.stream(selectionItems)
255 .filter(ii -> showTypesWithoutEvents || ii.hasItems()))));
|
168 private ItemList list;
169 private final SashForm treeSash;
170 private final IPageContainer container;
171 private final List<ColumnSettings> listColumns = new ArrayList<>();
172 private String listOrderBy;
173 private Set<IType<?>> selectedTypes = Collections.emptySet();
174 private final TypeFilterBuilder typeFilterTree;
175 private IItemCollection selectionItems;
176 private FlavorSelector flavorSelector;
177 private Boolean showTypesWithoutEvents;
178
179 EventBrowserUI(Composite parent, FormToolkit toolkit, IState state, IPageContainer container) {
180 this.container = container;
181
182 Form form = DataPageToolkit.createForm(parent, toolkit, getName(), getIcon());
183
184 treeSash = new SashForm(form.getBody(), SWT.HORIZONTAL);
185 toolkit.adapt(treeSash);
186 typeFilterTree = DataPageToolkit.buildEventTypeTree(treeSash, toolkit, this::onTypeChange, false);
187 MCContextMenuManager mm = typeFilterTree.getMenuManager();
188 IAction addPageAction = ActionToolkit.action(() -> DataPageToolkit.addPage(selectedTypes),
189 Messages.EventBrowserPage_NEW_PAGE_USING_TYPES_ACTION, NEW_PAGE_ICON);
190 mm.appendToGroup(MCContextMenuManager.GROUP_NEW, addPageAction);
191
192 IAction typesWithoutEventsAction = ActionToolkit.checkAction(this::setTypesWithoutEvents,
193 Messages.EventBrowserPage_DISPLAY_TYPES_WITHOUT_EVENTS, null);
194 showTypesWithoutEvents = StateToolkit.readBoolean(state, SHOW_TYPES_WITHOUT_EVENTS, true);
195 typesWithoutEventsAction.setChecked(showTypesWithoutEvents);
196 mm.appendToGroup(MCContextMenuManager.GROUP_OPEN, typesWithoutEventsAction);
197
198 SelectionStoreActionToolkit.addSelectionStoreActions(typeFilterTree.getViewer(), () -> selectedTypes,
199 container.getSelectionStore(), Messages.EventBrowserPage_EVENT_TYPE_TREE_SELECTION, mm);
200
201 Composite listParent = toolkit.createComposite(treeSash);
202 listParent.setLayout(new FillLayout());
203 PersistableSashForm.loadState(treeSash, state.getChild(TREE_SASH));
204
205 form.getToolBarManager().add(addPageAction);
206 form.getToolBarManager().add(new Separator());
207 OrientationAction.installActions(form, treeSash);
208
211 TableSettings settings = new TableSettings(itemListState);
212 listColumns.addAll(settings.getColumns());
213 listOrderBy = settings.getOrderBy();
214 }
215 list = new ItemListBuilder().build(listParent, null);
216
217 flavorSelector = FlavorSelector.itemsWithTimerange(form, null, getDataSource().getItems(), container,
218 this::onInputSelected, flavorSelectorState);
219
220 addResultActions(form);
221 if (treeExpansion != null) {
222 typeFilterTree.getViewer().setExpandedTreePaths(treeExpansion);
223 } else {
224 typeFilterTree.getViewer().expandAll();
225 }
226 typeFilterTree.getViewer().setSelection(treeSelection);
227 // if (topIndex >= 0) {
228 // typeFilterTree.getViewer().getTree().setTopItem(typeFilterTree.getViewer().getTree().getItem(topIndex));
229 // }
230 list.getManager().setSelectionState(tableSelection);
231 }
232
233 private void setTypesWithoutEvents(boolean checked) {
234 showTypesWithoutEvents = checked;
235 refreshTree();
236 }
237
238 private void onInputSelected(IItemCollection items, IRange<IQuantity> timeRange) {
239 this.selectionItems = (items == null) ? getDataSource().getItems() : items;
240 refreshTree();
241 }
242
243 private void refreshTree() {
244 boolean noTypesWereSelected = selectedTypes.isEmpty();
245
246 typeFilterTree.getViewer().getControl().setRedraw(false);
247 TreePath[] expansion = typeFilterTree.getViewer().getExpandedTreePaths();
248 ISelection selection = typeFilterTree.getViewer().getSelection();
249 typeFilterTree.setInput(getDataSource().getTypeTree((ItemCollectionToolkit.stream(selectionItems)
250 .filter(ii -> showTypesWithoutEvents || ii.hasItems()))));
|