Changeset 528
- Timestamp:
- 11/08/09 12:31:46 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LogicMail/src/org/logicprobe/LogicMail/ui/MailHomeScreen.java
r501 r528 62 62 import org.logicprobe.LogicMail.model.MailboxNodeListener; 63 63 import org.logicprobe.LogicMail.model.Node; 64 import org.logicprobe.LogicMail.util.DataStoreFactory; 65 import org.logicprobe.LogicMail.util.Serializable; 66 import org.logicprobe.LogicMail.util.SerializableHashtable; 64 67 65 68 /** … … 261 264 generateMailTree(); 262 265 populateMailTree(mailTreeRootNode); 263 } 264 266 loadScreenMetadata(); 267 } 268 265 269 private void generateMailTree() { 266 270 mailTreeRootNode = new TreeNode(null, 0); … … 426 430 */ 427 431 public boolean onClose() { 432 saveScreenMetadata(); 428 433 // Roundabout kludge for now 429 434 ((StandardScreen)screen).tryShutdownApplication(); … … 673 678 return accountNode; 674 679 } 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 } 675 756 }
Note: See TracChangeset
for help on using the changeset viewer.
