Changeset 528


Ignore:
Timestamp:
11/08/09 12:31:46 (2 years ago)
Author:
octorian
Message:

Saving of folder expansion state for the home screen

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/MailHomeScreen.java

    r501 r528  
    6262import org.logicprobe.LogicMail.model.MailboxNodeListener; 
    6363import org.logicprobe.LogicMail.model.Node; 
     64import org.logicprobe.LogicMail.util.DataStoreFactory; 
     65import org.logicprobe.LogicMail.util.Serializable; 
     66import org.logicprobe.LogicMail.util.SerializableHashtable; 
    6467 
    6568/** 
     
    261264                generateMailTree(); 
    262265                populateMailTree(mailTreeRootNode); 
    263         } 
    264          
     266                loadScreenMetadata(); 
     267        } 
     268 
    265269        private void generateMailTree() { 
    266270                mailTreeRootNode = new TreeNode(null, 0); 
     
    426430         */ 
    427431        public boolean onClose() { 
     432                saveScreenMetadata(); 
    428433                // Roundabout kludge for now 
    429434                ((StandardScreen)screen).tryShutdownApplication(); 
     
    673678                return accountNode; 
    674679        } 
     680         
     681        private void loadScreenMetadata() { 
     682                DataStoreFactory.getMetadataStore().load(); 
     683        SerializableHashtable folderMetadata; 
     684        folderMetadata = 
     685                (SerializableHashtable)DataStoreFactory.getMetadataStore().getNamedObject( 
     686                                this.getClass().toString()); 
     687 
     688        if(folderMetadata != null) { 
     689            int curNode = treeField.nextNode(0, 0, true); 
     690            Object cookie; 
     691            Object value; 
     692            Vector actions = new Vector(); 
     693             
     694            // Walk the folder tree and build a depth-first list of 
     695            // nodes we need to set the expansion state for 
     696            while(curNode > 0) { 
     697                if(treeField.getFirstChild(curNode) != -1) { 
     698                    cookie = treeField.getCookie(curNode); 
     699                    if(cookie instanceof TreeNode) { 
     700                        String key = getTreeNodeKey((TreeNode)cookie); 
     701                        value = folderMetadata.get(key); 
     702                        if(value instanceof Boolean) { 
     703                            actions.addElement(new Object[] { new Integer(curNode), value } ); 
     704                        } 
     705                    } 
     706                } 
     707                curNode = treeField.nextNode(curNode, 0, true); 
     708            } 
     709             
     710            // Iterate backwards across the results from above, and set 
     711            // the appropriate node expansion states.  This approach is 
     712            // necessary so complex trees will be configured properly. 
     713            Object[] action; 
     714            for(int i = actions.size() - 1; i >= 0; i--) { 
     715                action = (Object[])actions.elementAt(i); 
     716                treeField.setExpanded(((Integer)action[0]).intValue(), ((Boolean)action[1]).booleanValue()); 
     717            } 
     718        } 
     719        treeField.setCurrentNode(treeField.getFirstChild(0)); 
     720                 
     721        } 
     722         
     723        private void saveScreenMetadata() { 
     724        SerializableHashtable folderMetadata = new SerializableHashtable(); 
     725        int curNode = treeField.nextNode(0, 0, true); 
     726        Object cookie; 
     727        while(curNode > 0) { 
     728            if(treeField.getFirstChild(curNode) != -1) { 
     729                cookie = treeField.getCookie(curNode); 
     730                if(cookie instanceof TreeNode) { 
     731                        String key = getTreeNodeKey((TreeNode)cookie); 
     732                    folderMetadata.put( 
     733                            key, 
     734                            new Boolean(treeField.getExpanded(curNode))); 
     735                } 
     736            } 
     737            curNode = treeField.nextNode(curNode, 0, true); 
     738        } 
     739         
     740        DataStoreFactory.getMetadataStore().putNamedObject( 
     741                        this.getClass().toString(), folderMetadata); 
     742        DataStoreFactory.getMetadataStore().save(); 
     743        } 
     744 
     745        private static String getTreeNodeKey(TreeNode treeNode) { 
     746                Node node = treeNode.node; 
     747                String key; 
     748                if(node instanceof Serializable) { 
     749                        key = Long.toString(((Serializable)node).getUniqueId()); 
     750                } 
     751                else { 
     752                        key = node.toString(); 
     753                } 
     754                return key; 
     755        } 
    675756} 
Note: See TracChangeset for help on using the changeset viewer.