Ignore:
Timestamp:
04/12/13 15:28:50 (12 years ago)
Author:
pharms
Message:
  • improved visualization of task model
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/ShowTaskTreeDialog.java

    r1146 r1153  
    1515package de.ugoe.cs.autoquest.ui.swt; 
    1616 
     17import java.util.Collection; 
     18import java.util.HashSet; 
    1719import java.util.List; 
     20import java.util.Set; 
    1821 
    1922import org.eclipse.swt.SWT; 
     
    2629import org.eclipse.swt.widgets.Dialog; 
    2730import org.eclipse.swt.widgets.Display; 
     31import org.eclipse.swt.widgets.Event; 
     32import org.eclipse.swt.widgets.Listener; 
    2833import org.eclipse.swt.widgets.Shell; 
    2934import org.eclipse.swt.widgets.Tree; 
     
    9095    private void createContents() { 
    9196        shell = new Shell(getParent(), SWT.SHELL_TRIM | SWT.BORDER | SWT.APPLICATION_MODAL); 
    92         shell.setSize(450, 300); 
     97        shell.setSize(750, 800); 
    9398        shell.setText(getText()); 
    9499 
    95100        shell.setLayout(new GridLayout(4, false)); 
    96101         
    97         SashForm sashForm = new SashForm(shell, SWT.VERTICAL); 
     102        SashForm sashForm = new SashForm(shell, SWT.HORIZONTAL); 
    98103        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1)); 
    99104         
     
    104109                modelTree.removeAll(); 
    105110                TreeItem[] selectedItems = instanceTree.getSelection(); 
    106                 if ((selectedItems.length == 1) && 
    107                     (selectedItems[0].getData() instanceof ITaskInstance)) 
    108                 { 
    109                     buildModelTree((ITaskInstance) selectedItems[0].getData()); 
     111                if (selectedItems.length == 1) { 
     112                    if (selectedItems[0].getData() instanceof ITaskInstance) { 
     113                        buildModelTree((ITaskInstance) selectedItems[0].getData()); 
     114                    } 
     115                    else if (selectedItems[0].getData() instanceof ITaskModel) { 
     116                        buildModelTree((ITaskModel) selectedItems[0].getData()); 
     117                    } 
    110118                } 
    111119            } 
     
    115123 
    116124        modelTree = new Tree(sashForm, SWT.BORDER | SWT.MULTI); 
     125        buildModelTree(taskModel); 
    117126 
    118127        Button btnExpandAll = new Button(shell, SWT.NONE); 
     
    149158        TreeItem root = new TreeItem(instanceTree, SWT.NULL); 
    150159        root.setText(sessions.size() + " sessions"); 
    151         root.setData(sessions); 
     160        root.setData(taskModel); 
    152161         
    153162        for (IUserSession session : sessions) { 
     
    167176            buildInstanceTree(child, childTask); 
    168177        } 
     178    } 
     179 
     180    /** 
     181     *  
     182     */ 
     183    private void buildModelTree(ITaskModel taskModel) { 
     184        modelTree.removeAll(); 
     185         
     186        // load the correct children on expansion 
     187        if (modelTree.getListeners(SWT.Expand).length == 0) { 
     188           modelTree.addListener(SWT.Expand, new Listener() { 
     189               public void handleEvent(final Event event) { 
     190                   ensureChildren((TreeItem) event.item); 
     191                   ((TreeItem) event.item).setExpanded(true); 
     192               } 
     193           }); 
     194        } 
     195         
     196        Collection<ITask> tasks = taskModel.getTasks(); 
     197         
     198        TreeItem root = new TreeItem(modelTree, SWT.NULL); 
     199        root.setText(tasks.size() + " tasks in model"); 
     200        root.setData(taskModel); 
     201 
     202        tasks = determineRootTasks(tasks); 
     203         
     204        for (ITask task : tasks) { 
     205            createTreeItemFor(task, root); 
     206        } 
     207         
     208        root.setExpanded(true); 
    169209    } 
    170210 
     
    178218        root.setData(taskInstance); 
    179219 
    180         buildModelTree(taskInstance.getTask(), root); 
    181         expandAll(root, true); 
    182     } 
    183  
    184     /** 
    185      *  
    186      */ 
    187     private void buildModelTree(ITask task, TreeItem parent) { 
    188         TreeItem node = new TreeItem(parent, SWT.NULL); 
    189         node.setText(task.toString()); 
    190         node.setData(task); 
    191          
     220        createTreeItemFor(taskInstance.getTask(), root); 
     221         
     222        expandAll(root, true, 20); 
     223    } 
     224 
     225    /** 
     226     * 
     227     */ 
     228    private Collection<ITask> determineRootTasks(Collection<ITask> tasks) { 
     229        Set<ITask> result = new HashSet<ITask>(tasks); 
     230         
     231        for (ITask task : tasks) { 
     232            removeChildren(task, result); 
     233        } 
     234         
     235        return result; 
     236    } 
     237 
     238    /** 
     239     * 
     240     */ 
     241    private void removeChildren(ITask task, Set<ITask> result) { 
    192242        if (task instanceof IStructuringTemporalRelationship) { 
    193             for (ITask subTask : ((IStructuringTemporalRelationship) task).getChildren()) { 
    194                 buildModelTree(subTask, node); 
     243            for (ITask child : ((IStructuringTemporalRelationship) task).getChildren()) { 
     244                result.remove(child); 
    195245            } 
    196246        } 
    197247        else if (task instanceof IMarkingTemporalRelationship) { 
    198             buildModelTree(((IMarkingTemporalRelationship) task).getMarkedTask(), node); 
     248            result.remove(((IMarkingTemporalRelationship) task).getMarkedTask()); 
    199249        } 
    200250    } 
     
    205255    private void expandAll(Tree tree, boolean expanded) { 
    206256        for (TreeItem item : tree.getItems()) { 
    207             expandAll(item, expanded); 
    208         } 
    209     } 
    210  
    211     /** 
    212      *  
    213      */ 
    214     private void expandAll(TreeItem item, boolean expanded) { 
    215         item.setExpanded(expanded); 
    216         for (TreeItem childItem : item.getItems()) { 
    217             expandAll(childItem, expanded); 
     257            expandAll(item, expanded, Integer.MAX_VALUE); 
     258        } 
     259    } 
     260 
     261    /** 
     262     *  
     263     */ 
     264    private void expandAll(TreeItem item, boolean expanded, int maxChildrenToExpand) { 
     265        if (expanded) { 
     266            ensureChildren(item); 
     267        } 
     268         
     269        if (item.getItems().length < maxChildrenToExpand) { 
     270            item.setExpanded(expanded); 
     271 
     272            for (TreeItem childItem : item.getItems()) { 
     273                expandAll(childItem, expanded, maxChildrenToExpand); 
     274            } 
    218275        } 
    219276    } 
    220277     
     278    /** 
     279     *  
     280     */ 
     281    private void ensureChildren(TreeItem parent) { 
     282        if (parent.getData() instanceof ITask) { 
     283            TreeItem[] items = parent.getItems(); 
     284            if ((items == null) || (items.length == 0) || (items[0].getData() == null)) { 
     285                for (int i = 0; i < items.length; i++) { 
     286                    items[i].dispose(); 
     287                } 
     288 
     289                ITask task = (ITask) parent.getData(); 
     290 
     291                if (task instanceof IStructuringTemporalRelationship) { 
     292                    for (ITask subTask : ((IStructuringTemporalRelationship) task).getChildren()) { 
     293                        createTreeItemFor(subTask, parent); 
     294                    } 
     295                } 
     296                else if (task instanceof IMarkingTemporalRelationship) { 
     297                    createTreeItemFor 
     298                        (((IMarkingTemporalRelationship) task).getMarkedTask(), parent); 
     299                } 
     300            } 
     301        } 
     302    } 
     303 
     304    /** 
     305     * 
     306     */ 
     307    private void createTreeItemFor(ITask task, TreeItem parent) { 
     308        TreeItem item = new TreeItem(parent, SWT.NULL); 
     309        item.setText(task.toString()); 
     310        item.setData(task); 
     311         
     312        // simulate a child 
     313        if ((task instanceof IStructuringTemporalRelationship) || 
     314            (task instanceof IMarkingTemporalRelationship)) 
     315        { 
     316            new TreeItem(item, SWT.NULL); 
     317        } 
     318    } 
     319 
    221320} 
Note: See TracChangeset for help on using the changeset viewer.