-// Label label = new Label(container, SWT.NONE);
-// label.setText("Diagrams to Export:");
-// GridDataFactory.fillDefaults().span(3, 1).applyTo(label);
-
- Label filterLabel = new Label(container, SWT.NONE);
- filterLabel.setText("Fi<er:");
- GridDataFactory.fillDefaults().span(1, 1).applyTo(filterLabel);
- filter = new Text(container, SWT.BORDER);
- GridDataFactory.fillDefaults().span(2, 1).applyTo(filter);
- filter.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- resetFilterString(filter.getText());
- }
- });
-
- tree = new CheckboxTreeViewer(container, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
- {
- tree.setUseHashlookup(true);
- GridDataFactory.fillDefaults().grab(true, true).span(3, 1).applyTo(tree.getControl());
- tree.getControl().setToolTipText("Selects the diagram to include in the exported document.");
- tree.setAutoExpandLevel(TreeViewer.ALL_LEVELS);
- tree.addCheckStateListener(new ICheckStateListener(){
- void addOrRemoveSelection(Node node, boolean add) {
- if (add)
- selectedNodes.add(node);
- else
- selectedNodes.remove(node);
- }
- void addOrRemoveSelectionRec(Node node, boolean add) {
- addOrRemoveSelection(node, add);
- for (Node child : node.getChildren())
- addOrRemoveSelectionRec(child, add);
- }
- @Override
- public void checkStateChanged(CheckStateChangedEvent event) {
- final boolean checked = event.getChecked();
- Node checkedNode = (Node) event.getElement();
-
- Set<Node> nodes = new HashSet<Node>();
- Set<Node> selection = ISelectionUtils.filterSetSelection(tree.getSelection(), Node.class);
- if (selection.contains(checkedNode))
- nodes.addAll(selection);
- else
- tree.setSelection(StructuredSelection.EMPTY);
- nodes.add(checkedNode);
-
- for (Node node : nodes) {
- addOrRemoveSelectionRec(node, checked);
-
-// tree.setSubtreeChecked(node, checked);
-// The checked node is always either checked or not checked, never grayed.
-// tree.setGrayed(node, checkStateProvider.isGrayed(node));
-
-// Node parent = node.getParent();
-// if (parent != null) {
-// tree.setChecked(parent, checkStateProvider.isChecked(parent));
-// tree.setGrayed(parent, checkStateProvider.isGrayed(parent));
-// }
- }
-
- refreshAndExpandTree();
- validatePage();
- }
- });
-
- tree.setContentProvider(new ITreeContentProvider(){
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- @Override
- public void dispose() {
- }
- @Override
- public Object[] getElements(Object inputElement) {
- return exportModel.nodes.roots.toArray();
- }
- @Override
- public boolean hasChildren(Object element) {
- Node n = (Node) element;
- if (n.getChildren().isEmpty()) return false;
- for (Node c : n.getChildren()) if (hasDiagram(c)) return true;
- return false;
-
- }
- @Override
- public Object getParent(Object element) {
- Node n = (Node) element;
- return n.getParent();
- }
- @Override
- public Object[] getChildren(Object parentElement) {
- Node n = (Node) parentElement;
- List<Object> result = new ArrayList<Object>( n.getChildren().size() );
- for (Node c : n.getChildren())
- if (hasDiagram(c))
- result.add(c);
- return result.toArray();
- }
-
- boolean hasDiagram(Node n)
- {
- if (n.getDiagramResource()!=null) return true;
- for (Node c : n.getChildren()) if (hasDiagram(c)) return true;
- return false;
- }
- });
- tree.setLabelProvider(new CellLabelProvider() {
- @Override
- public void update(ViewerCell cell) {
- Object e = cell.getElement();
- if (e instanceof Node) {
- Node n = (Node) e;
- String name = DiagramPrinter.formDiagramName(n, false);
- cell.setText(name);
-
- if (n.getDiagramResource() == null)
- cell.setForeground(noDiagramColor);
- else
- cell.setForeground(null);
- } else {
- cell.setText("invalid input: " + e.getClass().getSimpleName());
- }
- }
- });
- tree.setComparator(new ViewerComparator(AlphanumComparator.CASE_INSENSITIVE_COMPARATOR));
- tree.setFilters(new ViewerFilter[] {
- new ViewerFilter() {
- @Override
- public boolean select(Viewer viewer, Object parentElement, Object element) {
- if (matcher == null)
- return true;
-
- Node node = (Node) element;
- // If any children are in sight, show this element.
- for (Node child : node.getChildren()) {
- if (select(viewer, element, child))
- return true;
- }
-
- return matcher.reset(node.getName().toLowerCase()).matches();
- }
- }
- });
- tree.setCheckStateProvider(checkStateProvider);
- }
-
- Composite bar = new Composite(container, SWT.NONE);
- GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(bar);
- bar.setLayout(new RowLayout());
- Button selectAll = new Button(bar, SWT.PUSH);
- selectAll.setText("Select &All");
- selectAll.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- selectedNodes.addAll(exportModel.nodes.breadthFirstFlatten());
- for (Node root : exportModel.nodes.roots)
- tree.setSubtreeChecked(root, true);
- validatePage();
- }
- });
- Button clearSelection = new Button(bar, SWT.PUSH);
- clearSelection.setText("&Clear Selection");
- clearSelection.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- selectedNodes.clear();
- for (Node root : exportModel.nodes.roots)
- tree.setSubtreeChecked(root, false);
- validatePage();
- }
- });
- Button selectVisible = new Button(bar, SWT.PUSH);
- selectVisible.setText("&Select Visible");
- selectVisible.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- selectedNodes.addAll(getVisibleNodes());
- refreshAndExpandTree();
- validatePage();
- }
- });
- Button deselectVisible = new Button(bar, SWT.PUSH);
- deselectVisible.setText("&Deselect Visible");
- deselectVisible.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- selectedNodes.removeAll(getVisibleNodes());
- refreshAndExpandTree();
- validatePage();
- }
- });