Ignore:
Timestamp:
02/18/13 18:18:11 (12 years ago)
Author:
pharms
Message:
  • added a GUI model test
  • performed some bug fixes
  • added a possibility to navigate a traverser to a specific GUI element in the model
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/GUIModel.java

    r1086 r1088  
    163163 
    164164        for (TreeNode node : allNodes) { 
    165             for (TreeNode child : node.children) { 
    166                 if (child.guiElement.equals(guiElement)) { 
    167                     if (parent != null) { 
    168                         parent = node.guiElement; 
    169                     } 
    170                     else { 
    171                         Console 
     165            if (node.children != null) { 
     166                for (TreeNode child : node.children) { 
     167                    if (child.guiElement.equals(guiElement)) { 
     168                        if (parent != null) { 
     169                            parent = node.guiElement; 
     170                        } 
     171                        else { 
     172                            Console 
    172173                            .traceln(Level.SEVERE, 
    173174                                     "Multiple nodes in the internal GUI model match the same GUI element. " 
    174                                          + "This should not be the case and the GUI model is probably invalid."); 
     175                                             + "This should not be the case and the GUI model is probably invalid."); 
     176                        } 
    175177                    } 
    176178                } 
     
    208210    public Traverser getTraverser() { 
    209211        return new Traverser(); 
     212    } 
     213 
     214    /** 
     215     * returns a traverser for the GUI model starting at the given GUI element. Returns null, if 
     216     * the GUI element is not part of the model. 
     217     *  
     218     * @return a traverser 
     219     */ 
     220    public Traverser getTraverser(IGUIElement startingAt) { 
     221        TreeNode node = findNode(startingAt); 
     222         
     223        if (node != null) { 
     224            Traverser traverser = new Traverser(); 
     225            traverser.navigateTo(node); 
     226            return traverser; 
     227        } 
     228        else { 
     229            return null; 
     230        } 
    210231    } 
    211232 
     
    616637         */ 
    617638        public boolean hasNextSibling() { 
    618             StackEntry entry = nodeStack.pop(); 
    619             boolean result = nodeStack.peek().treeNode.children.size() > (entry.index + 1); 
    620             pushChild(entry.index); 
     639            boolean result = false; 
     640            if (nodeStack.size() > 1) { 
     641                StackEntry entry = nodeStack.pop(); 
     642                result = nodeStack.peek().treeNode.children.size() > (entry.index + 1); 
     643                pushChild(entry.index); 
     644            } 
     645             
    621646            return result; 
    622647        } 
     
    662687        } 
    663688         
     689        /** 
     690         * <p> 
     691         * navigates the traverser to the given node in the GUI model 
     692         * </p> 
     693         */ 
     694        private boolean navigateTo(TreeNode node) { 
     695            if (hasFirstChild()) { 
     696                IGUIElement childElement = firstChild(); 
     697             
     698                while (childElement != null) { 
     699                    if (childElement.equals(node.guiElement)) { 
     700                        return true; 
     701                    } 
     702                    else if (navigateTo(node)) { 
     703                        return true; 
     704                    } 
     705                    else { 
     706                        childElement = nextSibling(); 
     707                    } 
     708                } 
     709             
     710                parent(); 
     711            } 
     712             
     713            return false; 
     714        } 
     715 
    664716        /** 
    665717         * <p> 
Note: See TracChangeset for help on using the changeset viewer.