Changeset 549


Ignore:
Timestamp:
11/20/09 22:41:43 (2 years ago)
Author:
octorian
Message:

Merge and cleanup

Location:
trunk
Files:
4 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LogicMail/src/org/logicprobe/LogicMail/model/MailFileManager.java

    r532 r549  
    130130         */ 
    131131        public void writeMessage(MessageNode messageNode) throws IOException { 
     132                if(cacheUrl == null) { return; } 
     133                 
    132134                // Create a file connection for the message 
    133135                FileConnection fileConnection = getMailboxFileConnection(messageNode.getParent()); 
     
    168170         */ 
    169171        public MessageToken[] readMessageTokens(MailboxNode mailboxNode) throws IOException { 
     172                if(cacheUrl == null) { return new MessageToken[0]; } 
     173                 
    170174                //TODO: Implement an indexing mechanism to avoid listing the whole directory 
    171175                //TODO: Provide support for partial listing requests 
     
    191195         
    192196        public MessageNode[] readMessageNodes(MailboxNode mailboxNode) throws IOException { 
     197                if(cacheUrl == null) { return new MessageNode[0]; } 
     198 
    193199                Vector messageNodeList = new Vector(); 
    194200                 
     
    211217         
    212218        public MessageNode readMessageNode(MailboxNode mailboxNode, MessageToken messageToken, boolean loadContent) throws IOException { 
     219                if(cacheUrl == null) { return null; } 
     220 
    213221                FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 
    214222                if(!fileConnection.exists()) { return null; } 
     
    229237         
    230238        public MimeMessageContent[] readMessageContent(MailboxNode mailboxNode, MessageToken messageToken) throws IOException { 
     239                if(cacheUrl == null) { return null; } 
     240                 
    231241                FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 
    232242                if(!fileConnection.exists()) { return null; } 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/AccountConfigScreen.java

    r481 r549  
    3333 
    3434import java.util.Vector; 
     35 
    3536import net.rim.device.api.ui.Field; 
    3637import net.rim.device.api.ui.FieldChangeListener; 
     
    4445import net.rim.device.api.ui.component.RichTextField; 
    4546import net.rim.device.api.ui.component.SeparatorField; 
     47import net.rim.device.api.ui.component.TextField; 
    4648import net.rim.device.api.ui.container.VerticalFieldManager; 
    4749import net.rim.device.api.ui.text.TextFilter; 
     
    213215    private Manager initFieldsBasic() { 
    214216        Manager manager = new VerticalFieldManager(); 
    215         serverNameField = new BasicEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_SERVER) + ' ', acctConfig.getServerName()); 
     217        serverNameField = new BasicEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_SERVER) + ' ', acctConfig.getServerName(), 
     218                        256, TextField.NO_NEWLINE); 
    216219        serverSecurityField = new ObjectChoiceField( 
    217220                        resources.getString(LogicMailResource.CONFIG_ACCOUNT_SECURITY), 
     
    223226                        acctConfig.getServerSecurity()); 
    224227        serverSecurityField.setChangeListener(fieldChangeListener); 
    225         serverPortField = new BasicEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_PORT) + ' ', Integer.toString(acctConfig.getServerPort())); 
     228        serverPortField = new BasicEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_PORT) + ' ', Integer.toString(acctConfig.getServerPort()), 
     229                        5, TextField.NO_NEWLINE); 
    226230        serverPortField.setFilter(TextFilter.get(TextFilter.NUMERIC)); 
    227         serverUserField = new BasicEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_USERNAME) + ' ', acctConfig.getServerUser()); 
    228         serverPassField = new PasswordEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_PASSWORD) + ' ', acctConfig.getServerPass()); 
     231        serverUserField = new BasicEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_USERNAME) + ' ', acctConfig.getServerUser(), 
     232                        256, TextField.NO_NEWLINE); 
     233        serverPassField = new PasswordEditField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_PASSWORD) + ' ', acctConfig.getServerPass(), 
     234                        256, TextField.NO_NEWLINE); 
    229235        useMdsField = new CheckboxField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_USEMDSPROXY), !acctConfig.getDeviceSide()); 
    230236        identityField = new ObjectChoiceField(resources.getString(LogicMailResource.CONFIG_ACCOUNT_IDENTITY) + ' ', identityConfigs, 0); 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/ConfigScreen.java

    r463 r549  
    4646import org.logicprobe.LogicMail.conf.AccountConfig; 
    4747import org.logicprobe.LogicMail.conf.ConnectionConfig; 
     48import org.logicprobe.LogicMail.conf.GlobalConfig; 
    4849import org.logicprobe.LogicMail.conf.IdentityConfig; 
    4950import org.logicprobe.LogicMail.conf.ImapConfig; 
     
    8990     */ 
    9091    private void initFields() { 
    91         configTreeField = new TreeField( 
     92        configTreeField = FieldFactory.getInstance().getScreenTreeField( 
    9293            new TreeFieldCallback() { 
    9394                public void drawTreeItem(TreeField treeField, Graphics graphics, int node, int y, int width, int indent) { 
     
    99100        configTreeField.setIndentWidth(20); 
    100101         
    101         globalId = configTreeField.addChildNode(0, resources.getString(LogicMailResource.CONFIG_GLOBAL_SETTINGS)); 
    102         identitiesId = configTreeField.addSiblingNode(globalId, resources.getString(LogicMailResource.CONFIG_IDENTITIES)); 
    103         accountsId = configTreeField.addSiblingNode(identitiesId, resources.getString(LogicMailResource.CONFIG_ACCOUNTS)); 
    104         outgoingId = configTreeField.addSiblingNode(accountsId, resources.getString(LogicMailResource.CONFIG_OUTGOING_SERVERS)); 
     102        globalId = configTreeField.addChildNode(0, new ConfigTreeNode(resources.getString(LogicMailResource.CONFIG_GLOBAL_SETTINGS))); 
     103        identitiesId = configTreeField.addSiblingNode(globalId, new ConfigTreeNode(resources.getString(LogicMailResource.CONFIG_IDENTITIES))); 
     104        accountsId = configTreeField.addSiblingNode(identitiesId, new ConfigTreeNode(resources.getString(LogicMailResource.CONFIG_ACCOUNTS))); 
     105        outgoingId = configTreeField.addSiblingNode(accountsId, new ConfigTreeNode(resources.getString(LogicMailResource.CONFIG_OUTGOING_SERVERS))); 
    105106 
    106107        add(configTreeField); 
     
    137138    public void configTreeFieldDrawTreeItem(TreeField treeField, Graphics graphics, int node, int y, int width, int indent) { 
    138139        Object cookie = treeField.getCookie(node); 
    139         graphics.drawText(cookie.toString(), indent, y, Graphics.ELLIPSIS, width); 
     140        graphics.drawText(cookie.toString(), indent + 2, y, Graphics.ELLIPSIS, width); 
    140141    } 
    141142     
     
    205206    protected void makeMenu(Menu menu, int instance) { 
    206207        int id = configTreeField.getCurrentNode(); 
    207         Object cookie = configTreeField.getCookie(id); 
     208         
     209        Object cookie; 
     210        Object rawCookie = configTreeField.getCookie(id); 
     211        if(rawCookie instanceof ConfigTreeNode) { 
     212                cookie = ((ConfigTreeNode)rawCookie).cookie; 
     213        } 
     214        else { 
     215                cookie = null; 
     216        } 
     217         
    208218        if(id != identitiesId && id != accountsId && id != outgoingId) { 
    209219            menu.add(selectItem); 
     
    304314        else { 
    305315            int parentNode = configTreeField.getParent(curNode); 
     316            Object cookie = ((ConfigTreeNode)configTreeField.getCookie(curNode)).cookie; 
    306317            if(parentNode == identitiesId) { 
    307                 IdentityConfig identityConfig = (IdentityConfig)configTreeField.getCookie(curNode); 
     318                IdentityConfig identityConfig = (IdentityConfig)cookie; 
    308319                IdentityConfigScreen identityConfigScreen = new IdentityConfigScreen(identityConfig); 
    309320                UiApplication.getUiApplication().pushModalScreen(identityConfigScreen); 
     
    315326            } 
    316327            else if(parentNode == accountsId) { 
    317                 AccountConfig acctConfig = (AccountConfig)configTreeField.getCookie(curNode); 
     328                AccountConfig acctConfig = (AccountConfig)cookie; 
    318329                AccountConfigScreen accountConfigScreen = new AccountConfigScreen(acctConfig); 
    319330                UiApplication.getUiApplication().pushModalScreen(accountConfigScreen); 
     
    325336            } 
    326337            else if(parentNode == outgoingId) { 
    327                 OutgoingConfig outgoingConfig = (OutgoingConfig)configTreeField.getCookie(curNode); 
     338                OutgoingConfig outgoingConfig = (OutgoingConfig)cookie; 
    328339                OutgoingConfigScreen outgoingConfigScreen = new OutgoingConfigScreen(outgoingConfig); 
    329340                UiApplication.getUiApplication().pushModalScreen(outgoingConfigScreen); 
     
    347358        if(prevNode == -1) { return; } 
    348359 
    349         Object cookie = configTreeField.getCookie(curNode); 
     360        Object cookie = ((ConfigTreeNode)configTreeField.getCookie(curNode)).cookie; 
     361        Object prevCookie = ((ConfigTreeNode)configTreeField.getCookie(prevNode)).cookie; 
    350362         
    351363        boolean result = false; 
     
    353365        if(cookie instanceof IdentityConfig) { 
    354366                IdentityConfig curConfig = (IdentityConfig)cookie; 
    355                 IdentityConfig prevConfig = (IdentityConfig)configTreeField.getCookie(prevNode); 
     367                IdentityConfig prevConfig = (IdentityConfig)prevCookie; 
    356368                 
    357369                int curConfigIndex = mailSettings.indexOfIdentityConfig(curConfig); 
     
    364376        else if(cookie instanceof AccountConfig) { 
    365377                AccountConfig curConfig = (AccountConfig)cookie; 
    366                 AccountConfig prevConfig = (AccountConfig)configTreeField.getCookie(prevNode); 
     378                AccountConfig prevConfig = (AccountConfig)prevCookie; 
    367379                 
    368380                int curConfigIndex = mailSettings.indexOfAccountConfig(curConfig); 
     
    375387        else if(cookie instanceof OutgoingConfig) { 
    376388                OutgoingConfig curConfig = (OutgoingConfig)cookie; 
    377                 OutgoingConfig prevConfig = (OutgoingConfig)configTreeField.getCookie(prevNode); 
     389                OutgoingConfig prevConfig = (OutgoingConfig)prevCookie; 
    378390                 
    379391                int curConfigIndex = mailSettings.indexOfOutgoingConfig(curConfig); 
     
    398410        if(nextNode == -1) { return; } 
    399411 
    400         Object cookie = configTreeField.getCookie(curNode); 
     412        Object cookie = ((ConfigTreeNode)configTreeField.getCookie(curNode)).cookie; 
     413        Object nextCookie = ((ConfigTreeNode)configTreeField.getCookie(nextNode)).cookie; 
    401414         
    402415        boolean result = false; 
     
    404417        if(cookie instanceof IdentityConfig) { 
    405418                IdentityConfig curConfig = (IdentityConfig)cookie; 
    406                 IdentityConfig nextConfig = (IdentityConfig)configTreeField.getCookie(nextNode); 
     419                IdentityConfig nextConfig = (IdentityConfig)nextCookie; 
    407420                 
    408421                int curConfigIndex = mailSettings.indexOfIdentityConfig(curConfig); 
     
    415428        else if(cookie instanceof AccountConfig) { 
    416429                AccountConfig curConfig = (AccountConfig)cookie; 
    417                 AccountConfig nextConfig = (AccountConfig)configTreeField.getCookie(nextNode); 
     430                AccountConfig nextConfig = (AccountConfig)nextCookie; 
    418431                 
    419432                int curConfigIndex = mailSettings.indexOfAccountConfig(curConfig); 
     
    426439        else if(cookie instanceof OutgoingConfig) { 
    427440                OutgoingConfig curConfig = (OutgoingConfig)cookie; 
    428                 OutgoingConfig nextConfig = (OutgoingConfig)configTreeField.getCookie(nextNode); 
     441                OutgoingConfig nextConfig = (OutgoingConfig)nextCookie; 
    429442                 
    430443                int curConfigIndex = mailSettings.indexOfOutgoingConfig(curConfig); 
     
    450463        int curNode = configTreeField.getCurrentNode(); 
    451464        if(curNode != -1) { 
    452                 curCookie = configTreeField.getCookie(curNode); 
     465                curCookie = ((ConfigTreeNode)configTreeField.getCookie(curNode)).cookie; 
    453466        } 
    454467        else { 
     
    476489        for(int i = numIdentities-1; i >= 0; i--) { 
    477490            identityConfig = mailSettings.getIdentityConfig(i); 
    478             configTreeField.addChildNode(identitiesId, identityConfig); 
     491            configTreeField.addChildNode(identitiesId, new ConfigTreeNode(identityConfig)); 
    479492            identityIndexMap.put(identityConfig, new Integer(i)); 
    480493        } 
     
    483496        for(int i = numAccounts-1; i >= 0; i--) { 
    484497            acctConfig = mailSettings.getAccountConfig(i); 
    485             configTreeField.addChildNode(accountsId, acctConfig); 
     498            configTreeField.addChildNode(accountsId, new ConfigTreeNode(acctConfig)); 
    486499            accountIndexMap.put(acctConfig, new Integer(i)); 
    487500        } 
     
    490503        for(int i = numOutgoing-1; i >= 0; i--) { 
    491504            outgoingConfig = mailSettings.getOutgoingConfig(i); 
    492             configTreeField.addChildNode(outgoingId, outgoingConfig); 
     505            configTreeField.addChildNode(outgoingId, new ConfigTreeNode(outgoingConfig)); 
    493506            outgoingIndexMap.put(outgoingConfig, new Integer(i)); 
    494507        } 
     
    497510                int node = configTreeField.nextNode(0, 0, true); 
    498511                while(node != -1) { 
    499                         if(configTreeField.getCookie(node) == curCookie) { 
     512                        if(((ConfigTreeNode)configTreeField.getCookie(node)).cookie == curCookie) { 
    500513                                configTreeField.setCurrentNode(node); 
    501514                                break; 
     
    549562    private void deleteSelectedIdentity() { 
    550563        IdentityConfig identityConfig = 
    551             (IdentityConfig)configTreeField.getCookie(configTreeField.getCurrentNode()); 
     564            (IdentityConfig)((ConfigTreeNode)configTreeField.getCookie(configTreeField.getCurrentNode())).cookie; 
    552565         
    553566        int index = ((Integer)identityIndexMap.get(identityConfig)).intValue(); 
     
    592605    private void deleteSelectedAccount() { 
    593606        AccountConfig acctConfig = 
    594             (AccountConfig)configTreeField.getCookie(configTreeField.getCurrentNode()); 
     607            (AccountConfig)((ConfigTreeNode)configTreeField.getCookie(configTreeField.getCurrentNode())).cookie; 
    595608         
    596609        int index = ((Integer)accountIndexMap.get(acctConfig)).intValue(); 
     
    626639    private void deleteSelectedOutgoingServer() { 
    627640        OutgoingConfig outgoingConfig = 
    628             (OutgoingConfig)configTreeField.getCookie(configTreeField.getCurrentNode()); 
     641            (OutgoingConfig)((ConfigTreeNode)configTreeField.getCookie(configTreeField.getCurrentNode())).cookie; 
    629642         
    630643        int index = ((Integer)outgoingIndexMap.get(outgoingConfig)).intValue(); 
     
    639652        } 
    640653    } 
     654     
     655        private static class ConfigTreeNode implements TreeFieldNode { 
     656                public Object cookie; 
     657                 
     658                public ConfigTreeNode(Object cookie) { 
     659                        this.cookie = cookie; 
     660                } 
     661 
     662                public String toString() { 
     663                        return cookie.toString(); 
     664                } 
     665                 
     666                public boolean isNodeSelectable() { 
     667                        if((cookie instanceof GlobalConfig) 
     668                        || (cookie instanceof IdentityConfig) 
     669                        || (cookie instanceof AccountConfig) 
     670                        || (cookie instanceof OutgoingConfig)) { 
     671                                return true; 
     672                        } 
     673                        else { 
     674                                return false; 
     675                        } 
     676                } 
     677        } 
    641678} 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/FieldFactory.java

    r501 r549  
    4444         */ 
    4545        private static String[] factoryClasses = { 
    46                 "org.logicprobe.LogicMail.ui.FieldFactoryBB47", 
     46                "org.logicprobe.LogicMail.ui.FieldFactoryBB50T", 
     47                "org.logicprobe.LogicMail.ui.FieldFactoryBB50", 
     48                "org.logicprobe.LogicMail.ui.FieldFactoryBB47T", 
     49                "org.logicprobe.LogicMail.ui.FieldFactoryBB47", 
    4750                "org.logicprobe.LogicMail.ui.FieldFactoryBB42" 
    4851        }; 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/GlobalConfigScreen.java

    r510 r549  
    6464    private ObjectChoiceField languageChoiceField; 
    6565    private CheckboxField unicodeNormalizationCheckboxField; 
     66     
    6667    private ObjectChoiceField messageDisplayChoiceField; 
    6768    private BasicEditField messageCountEditField; 
     
    214215                        resources.getString(LogicMailResource.CONFIG_GLOBAL_CONNECTION_DEBUGGING), 
    215216                existingConfig.getConnDebug()); 
    216          
    217                 add(languageChoiceField); 
    218                 add(unicodeNormalizationCheckboxField); 
     217 
     218 
     219                add(new LabeledSeparatorField("Message display", Field.NON_FOCUSABLE | LabeledSeparatorField.BOTTOM_BORDER)); 
    219220                add(messageDisplayChoiceField); 
    220221            add(messageCountEditField); 
    221222            add(displayOrderChoiceField); 
    222223            add(hideDeletedMessagesCheckboxField); 
     224 
     225                add(new LabeledSeparatorField("Networking", Field.NON_FOCUSABLE | LabeledSeparatorField.TOP_BORDER | LabeledSeparatorField.BOTTOM_BORDER)); 
    223226            add(wifiModeChoiceField); 
    224             add(localDataLocationChoiceLabel); 
    225227            add(overrideHostnameCheckboxField); 
    226228            add(localHostnameEditField); 
     229             
     230            add(new LabeledSeparatorField("Other", Field.NON_FOCUSABLE | LabeledSeparatorField.TOP_BORDER | LabeledSeparatorField.BOTTOM_BORDER)); 
     231            add(localDataLocationChoiceLabel); 
     232                add(languageChoiceField); 
     233                add(unicodeNormalizationCheckboxField); 
    227234            add(connectionDebuggingCheckboxField); 
    228235    } 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/MailHomeScreen.java

    r528 r549  
    8282        private Hashtable mailboxTreeNodeMap; 
    8383        private boolean firstVisible; 
    84         private TreeNode mailTreeRootNode; 
     84        private MailHomeTreeNode mailTreeRootNode; 
    8585        private MailManagerListener mailManagerListener; 
    8686        private AccountNodeListener accountNodeListener; 
     
    196196        private void initMenuItems() { 
    197197            selectFolderItem = new TreeNodeMenuItem(resources, LogicMailResource.MENUITEM_SELECT, 100, 8) { 
    198                         public void runNode(TreeNode treeNode) { 
     198                        public void runNode(MailHomeTreeNode treeNode) { 
    199199                                selectFolderItemHandler(treeNode); 
    200200                        } 
    201201                }; 
    202202                refreshStatusItem = new TreeNodeMenuItem(resources, LogicMailResource.MENUITEM_REFRESH_STATUS, 110, 10) { 
    203                         public void runNode(TreeNode treeNode) { 
     203                        public void runNode(MailHomeTreeNode treeNode) { 
    204204                                refreshStatusItemHandler(treeNode); 
    205205                        } 
    206206                }; 
    207207                refreshFoldersItem = new TreeNodeMenuItem(resources, LogicMailResource.MENUITEM_REFRESH_FOLDERS, 111, 10) { 
    208                         public void runNode(TreeNode treeNode) { 
     208                        public void runNode(MailHomeTreeNode treeNode) { 
    209209                                refreshFoldersItemHandler(treeNode); 
    210210                        } 
    211211                }; 
    212212                compositionItem = new TreeNodeMenuItem(resources, LogicMailResource.MENUITEM_COMPOSE_EMAIL, 200000, 9) { 
    213                         public void runNode(TreeNode treeNode) { 
     213                        public void runNode(MailHomeTreeNode treeNode) { 
    214214                                compositionItemHandler(treeNode); 
    215215                        } 
    216216                }; 
    217217                disconnectItem = new TreeNodeMenuItem(resources, LogicMailResource.MENUITEM_DISCONNECT, 200000, 9) { 
    218                         public void runNode(TreeNode treeNode) { 
     218                        public void runNode(MailHomeTreeNode treeNode) { 
    219219                                disconnectItemHandler(treeNode); 
    220220                        } 
     
    230230                        int nodeId = treeField.getCurrentNode(); 
    231231                        if(nodeId != -1) { 
    232                                 runNode((TreeNode)treeField.getCookie(nodeId)); 
    233                         } 
    234                 } 
    235                  
    236                 public abstract void runNode(TreeNode treeNode); 
     232                                runNode((MailHomeTreeNode)treeField.getCookie(nodeId)); 
     233                        } 
     234                } 
     235                 
     236                public abstract void runNode(MailHomeTreeNode treeNode); 
    237237        } 
    238238         
     
    243243        private void accountNodeListener_AccountStatusChanged(AccountNodeEvent e) { 
    244244                if(e.getType() == AccountNodeEvent.TYPE_CONNECTION) { 
    245                         TreeNode node = (TreeNode)accountTreeNodeMap.get(e.getSource()); 
     245                        MailHomeTreeNode node = (MailHomeTreeNode)accountTreeNodeMap.get(e.getSource()); 
    246246                        if(node != null) { 
    247247                                refreshMailTreeNode(node); 
     
    254254 
    255255        private void mailboxNodeListener_MailboxStatusChanged(MailboxNodeEvent e) { 
    256                 TreeNode mailboxTreeNode = (TreeNode)mailboxTreeNodeMap.get(e.getSource()); 
     256                MailHomeTreeNode mailboxTreeNode = (MailHomeTreeNode)mailboxTreeNodeMap.get(e.getSource()); 
    257257                if(mailboxTreeNode != null) { 
    258258                        refreshMailTreeNode(mailboxTreeNode); 
     
    268268 
    269269        private void generateMailTree() { 
    270                 mailTreeRootNode = new TreeNode(null, 0); 
     270                mailTreeRootNode = new MailHomeTreeNode(null, 0); 
    271271                 
    272272                AccountNode[] accounts = mailRootNode.getAccounts(); 
    273                 mailTreeRootNode.children = new TreeNode[accounts.length]; 
     273                mailTreeRootNode.children = new MailHomeTreeNode[accounts.length]; 
    274274                for(int i=0; i<accounts.length; i++) { 
    275                         TreeNode accountTreeNode = new TreeNode(accounts[i], TreeNode.TYPE_ACCOUNT); 
     275                        MailHomeTreeNode accountTreeNode = new MailHomeTreeNode(accounts[i], MailHomeTreeNode.TYPE_ACCOUNT); 
    276276                        MailboxNode rootMailbox = accounts[i].getRootMailbox(); 
    277277                        if(rootMailbox != null) { 
    278278                                MailboxNode[] mailboxNodes = rootMailbox.getMailboxes(); 
    279                                 accountTreeNode.children = new TreeNode[mailboxNodes.length]; 
     279                                accountTreeNode.children = new MailHomeTreeNode[mailboxNodes.length]; 
    280280                                for(int j=0; j < mailboxNodes.length; j++) { 
    281281                                        accountTreeNode.children[j] = populateMailboxTreeNode(mailboxNodes[j]); 
     
    288288        } 
    289289 
    290         private TreeNode populateMailboxTreeNode(MailboxNode mailboxNode) { 
    291                 TreeNode mailboxTreeNode = new TreeNode(mailboxNode, TreeNode.TYPE_MAILBOX); 
     290        private MailHomeTreeNode populateMailboxTreeNode(MailboxNode mailboxNode) { 
     291                MailHomeTreeNode mailboxTreeNode = new MailHomeTreeNode(mailboxNode, MailHomeTreeNode.TYPE_MAILBOX); 
    292292 
    293293                mailboxNode.addMailboxNodeListener(mailboxNodeListener); 
     
    295295                 
    296296                MailboxNode[] mailboxes = mailboxNode.getMailboxes(); 
    297                 mailboxTreeNode.children = new TreeNode[mailboxes.length]; 
     297                mailboxTreeNode.children = new MailHomeTreeNode[mailboxes.length]; 
    298298                for(int i=0; i < mailboxes.length; i++) { 
    299299                        mailboxTreeNode.children[i] = populateMailboxTreeNode(mailboxes[i]); 
     
    321321                // from the node-id map, and remove them from the tree. 
    322322                Vector mailboxNodeList = new Vector(); 
    323                 TreeNode accountTreeNode = (TreeNode)accountTreeNodeMap.get(accountNode); 
     323                MailHomeTreeNode accountTreeNode = (MailHomeTreeNode)accountTreeNodeMap.get(accountNode); 
    324324                getMailboxNodes(mailboxNodeList, accountTreeNode); 
    325325                int size = mailboxNodeList.size(); 
     
    337337                if(rootMailbox != null) { 
    338338                        MailboxNode[] mailboxNodes = rootMailbox.getMailboxes(); 
    339                         accountTreeNode.children = new TreeNode[mailboxNodes.length]; 
     339                        accountTreeNode.children = new MailHomeTreeNode[mailboxNodes.length]; 
    340340                        for(int i=0; i < mailboxNodes.length; i++) { 
    341341                                accountTreeNode.children[i] = populateMailboxTreeNode(mailboxNodes[i]); 
     
    345345        } 
    346346         
    347         private void selectFolderItemHandler(TreeNode treeNode) { 
     347        private void selectFolderItemHandler(MailHomeTreeNode treeNode) { 
    348348                if(treeNode.node instanceof MailboxNode) { 
    349349                        MailboxNode mailboxNode = (MailboxNode)treeNode.node; 
     
    352352        } 
    353353 
    354         private void refreshStatusItemHandler(TreeNode treeNode) { 
     354        private void refreshStatusItemHandler(MailHomeTreeNode treeNode) { 
    355355                AccountNode accountNode = getAccountForTreeNode(treeNode); 
    356356                 
     
    360360        } 
    361361 
    362         private void refreshFoldersItemHandler(TreeNode treeNode) { 
     362        private void refreshFoldersItemHandler(MailHomeTreeNode treeNode) { 
    363363                AccountNode accountNode = getAccountForTreeNode(treeNode); 
    364364                 
     
    368368        } 
    369369 
    370         private void disconnectItemHandler(TreeNode treeNode) { 
     370        private void disconnectItemHandler(MailHomeTreeNode treeNode) { 
    371371                AccountNode accountNode = getAccountForTreeNode(treeNode); 
    372372 
     
    376376        } 
    377377 
    378         private void compositionItemHandler(TreeNode treeNode) { 
     378        private void compositionItemHandler(MailHomeTreeNode treeNode) { 
    379379                AccountNode accountNode = getAccountForTreeNode(treeNode); 
    380380 
     
    384384        } 
    385385         
    386         public void populateMailTree(TreeNode rootNode) { 
     386        public void populateMailTree(MailHomeTreeNode rootNode) { 
    387387                synchronized(UiApplication.getEventLock()) { 
    388388                        // Clear any existing nodes 
     
    392392                        // Freshly populate the tree 
    393393                        int firstNode = -1; 
    394                         TreeNode[] nodes = rootNode.children; 
     394                        MailHomeTreeNode[] nodes = rootNode.children; 
    395395                        if(nodes != null) { 
    396396                                for(int i = nodes.length - 1; i >= 0; --i) { 
     
    407407        } 
    408408 
    409         private void populateMailTreeChildren(int parent, TreeNode node) { 
     409        private void populateMailTreeChildren(int parent, MailHomeTreeNode node) { 
    410410                if(node.children != null) { 
    411411                        for(int i = node.children.length - 1; i >= 0; --i) { 
     
    417417        } 
    418418         
    419         public void refreshMailTreeNode(TreeNode node) { 
     419        public void refreshMailTreeNode(MailHomeTreeNode node) { 
    420420                Integer nodeInt = (Integer)nodeIdMap.get(node); 
    421421                if(nodeInt != null) { 
     
    453453     */ 
    454454    public void makeMenu(Menu menu, int instance) { 
    455         TreeNode treeNode = (TreeNode)treeField.getCookie(treeField.getCurrentNode()); 
     455        MailHomeTreeNode treeNode = (MailHomeTreeNode)treeField.getCookie(treeField.getCurrentNode()); 
    456456                if(treeNode.node instanceof MailboxNode) { 
    457457                        menu.add(selectFolderItem); 
     
    560560                 
    561561                // Check whether we can enable composition 
    562                 TreeNode treeNode = (TreeNode)treeField.getCookie(curNode); 
     562                MailHomeTreeNode treeNode = (MailHomeTreeNode)treeField.getCookie(curNode); 
    563563                if(treeNode.node instanceof AccountNode) { 
    564564                        if(((AccountNode)treeNode.node).hasMailSender()) { 
     
    590590                        Graphics graphics, 
    591591                        int node, int y, int width, int indent) { 
    592                 TreeNode treeNode = (TreeNode)treeField.getCookie(node); 
     592                MailHomeTreeNode treeNode = (MailHomeTreeNode)treeField.getCookie(node); 
    593593                int rowHeight = treeField.getRowHeight(); 
    594594                int fontHeight = graphics.getFont().getHeight(); 
     
    607607                buf.append(treeNode.node.toString()); 
    608608                 
    609                 if(treeNode.type == TreeNode.TYPE_ACCOUNT) { 
     609                if(treeNode.type == MailHomeTreeNode.TYPE_ACCOUNT) { 
    610610                        graphics.setFont(origFont.derive(Font.BOLD)); 
    611611                } 
    612                 else if(treeNode.type == TreeNode.TYPE_MAILBOX) { 
     612                else if(treeNode.type == MailHomeTreeNode.TYPE_MAILBOX) { 
    613613                        MailboxNode mailboxNode = (MailboxNode)treeNode.node; 
    614614                         
     
    632632         
    633633        /** Tree node data class */ 
    634         static class TreeNode { 
     634        private static class MailHomeTreeNode implements TreeFieldNode { 
    635635                public static final int TYPE_ACCOUNT = 1; 
    636636                public static final int TYPE_MAILBOX = 2; 
     
    638638                public Node node; 
    639639                public int type; 
    640                 public TreeNode[] children; 
    641                  
    642                 public TreeNode(Node node, int type) { 
     640                public MailHomeTreeNode[] children; 
     641                 
     642                public MailHomeTreeNode(Node node, int type) { 
    643643                        this.node = node; 
    644644                        this.type = type; 
     645                } 
     646                 
     647                public boolean isNodeSelectable() { 
     648                        if(node instanceof MailboxNode) { 
     649                                MailboxNode mailboxNode = (MailboxNode)node; 
     650                                return mailboxNode.isSelectable(); 
     651                        } 
     652                        else { 
     653                                return false; 
     654                        } 
    645655                } 
    646656        } 
     
    653663         * @param nodeId Starting node. 
    654664         */ 
    655         private static void getMailboxNodes(Vector result, TreeNode treeNode) { 
     665        private static void getMailboxNodes(Vector result, MailHomeTreeNode treeNode) { 
    656666                if(treeNode.node instanceof MailboxNode) { 
    657667                        result.addElement(treeNode.node); 
     
    664674        } 
    665675 
    666         private static AccountNode getAccountForTreeNode(TreeNode treeNode) { 
     676        private static AccountNode getAccountForTreeNode(MailHomeTreeNode treeNode) { 
    667677                AccountNode accountNode; 
    668678                if(treeNode.node instanceof AccountNode) { 
     
    697707                if(treeField.getFirstChild(curNode) != -1) { 
    698708                    cookie = treeField.getCookie(curNode); 
    699                     if(cookie instanceof TreeNode) { 
    700                         String key = getTreeNodeKey((TreeNode)cookie); 
     709                    if(cookie instanceof MailHomeTreeNode) { 
     710                        String key = getTreeNodeKey((MailHomeTreeNode)cookie); 
    701711                        value = folderMetadata.get(key); 
    702712                        if(value instanceof Boolean) { 
     
    728738            if(treeField.getFirstChild(curNode) != -1) { 
    729739                cookie = treeField.getCookie(curNode); 
    730                 if(cookie instanceof TreeNode) { 
    731                         String key = getTreeNodeKey((TreeNode)cookie); 
     740                if(cookie instanceof MailHomeTreeNode) { 
     741                        String key = getTreeNodeKey((MailHomeTreeNode)cookie); 
    732742                    folderMetadata.put( 
    733743                            key, 
     
    743753        } 
    744754 
    745         private static String getTreeNodeKey(TreeNode treeNode) { 
     755        private static String getTreeNodeKey(MailHomeTreeNode treeNode) { 
    746756                Node node = treeNode.node; 
    747757                String key; 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/MailboxScreen.java

    r497 r549  
    5454import org.logicprobe.LogicMail.model.MessageNodeEvent; 
    5555import org.logicprobe.LogicMail.model.MessageNodeListener; 
     56import org.logicprobe.LogicMail.ui.ScreenProvider.ShortcutItem; 
    5657import org.logicprobe.LogicMail.util.EventObjectRunnable; 
    5758 
     
    6364 */ 
    6465public class MailboxScreen extends AbstractScreenProvider { 
     66        private static final int SHORTCUT_COMPOSE = 0; 
     67        private static final int SHORTCUT_UP = 3; 
     68        private static final int SHORTCUT_DOWN = 4; 
     69         
    6570        private MailboxNode mailboxNode; 
    6671    private Vector knownMessages; 
     
    7176    private Screen screen; 
    7277    private MessageActions messageActions; 
     78    private boolean composeEnabled; 
    7379 
    7480    private MenuItem selectItem; 
     
    147153        } 
    148154         
     155        composeEnabled = mailboxNode.getParentAccount().hasMailSender(); 
     156        ((StandardScreen)screen).setShortcutEnabled(SHORTCUT_COMPOSE, composeEnabled); 
     157         
    149158        // TODO: Support message list changes between display pushing 
    150159        // TODO: Support updating when messages are deleted 
     
    162171    } 
    163172     
     173        /* (non-Javadoc) 
     174         * @see org.logicprobe.LogicMail.ui.AbstractScreenProvider#hasShortcuts() 
     175         */ 
     176        public boolean hasShortcuts() { 
     177                return true; 
     178        } 
     179         
     180        /* (non-Javadoc) 
     181         * @see org.logicprobe.LogicMail.ui.AbstractScreenProvider#getShortcuts() 
     182         */ 
     183        public ShortcutItem[] getShortcuts() { 
     184                // Note: This method is only called once, during initialization of the screen, 
     185                // and only on devices that have touchscreen support.  The strings for the 
     186                // shortcuts are contained within the main application library's resources. 
     187                // However, the icons are contained within the platform support library 
     188                // containing actual touchscreen API support. 
     189                return new ShortcutItem[] { 
     190                        new ShortcutItem( 
     191                                        SHORTCUT_COMPOSE, 
     192                                        resources.getString(LogicMailResource.MENUITEM_COMPOSE_EMAIL), 
     193                                        "shortcut-compose.png", "shortcut-compose-d.png"), 
     194                        null, 
     195                        null, 
     196                        new ShortcutItem( 
     197                                        SHORTCUT_UP, 
     198                                        resources.getString(LogicMailResource.MENUITEM_SCROLL_UP), 
     199                                        "shortcut-up.png", "shortcut-up-d.png"), 
     200                        new ShortcutItem( 
     201                                        SHORTCUT_DOWN, 
     202                                        resources.getString(LogicMailResource.MENUITEM_SCROLL_DOWN), 
     203                                        "shortcut-down.png", "shortcut-down-d.png") 
     204                }; 
     205        } 
     206         
    164207        /** 
    165208         * Initializes the fields. 
     
    236279                menu.add(propertiesItem); 
    237280        } 
    238         if(mailboxNode.getParentAccount().hasMailSender()) { 
     281        if(composeEnabled) { 
    239282            menu.add(compositionItem); 
    240283        } 
     
    441484        return retval; 
    442485    } 
     486     
     487    /* (non-Javadoc) 
     488     * @see org.logicprobe.LogicMail.ui.AbstractScreenProvider#shortcutAction(org.logicprobe.LogicMail.ui.ScreenProvider.ShortcutItem) 
     489     */ 
     490    public void shortcutAction(ShortcutItem item) { 
     491        switch(item.getId()) { 
     492        case SHORTCUT_COMPOSE: 
     493                compositionItem.run(); 
     494                break; 
     495        case SHORTCUT_UP: 
     496                screen.scroll(Manager.UPWARD); 
     497                break; 
     498        case SHORTCUT_DOWN: 
     499                screen.scroll(Manager.DOWNWARD); 
     500                break; 
     501        } 
     502    } 
    443503} 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/ui/ScreenFactory.java

    r501 r549  
    4545         */ 
    4646        private static String[] factoryClasses = { 
    47                 "org.logicprobe.LogicMail.ui.ScreenFactoryBB47", 
     47                "org.logicprobe.LogicMail.ui.ScreenFactoryBB50T", 
     48                "org.logicprobe.LogicMail.ui.ScreenFactoryBB50", 
     49                "org.logicprobe.LogicMail.ui.ScreenFactoryBB47T", 
     50                "org.logicprobe.LogicMail.ui.ScreenFactoryBB47", 
    4851                "org.logicprobe.LogicMail.ui.ScreenFactoryBB42" 
    4952        }; 
  • trunk/LogicMail_BB47T/src/org/logicprobe/LogicMail/ui/FieldFactoryBB47T.java

    r547 r549  
    3535import net.rim.device.api.ui.component.TreeFieldCallback; 
    3636 
    37 public class FieldFactoryBB47 extends FieldFactory { 
     37public class FieldFactoryBB47T extends FieldFactory { 
    3838        private boolean hasTouchscreen; 
    3939        private FieldFactory oldFieldFactory; 
    4040         
    41         public FieldFactoryBB47() { 
     41        public FieldFactoryBB47T() { 
    4242                hasTouchscreen = Touchscreen.isSupported(); 
    4343                oldFieldFactory = new FieldFactoryBB42(); 
  • trunk/LogicMail_BB47T/src/org/logicprobe/LogicMail/ui/ScreenFactoryBB47T.java

    r547 r549  
    3131package org.logicprobe.LogicMail.ui; 
    3232 
    33 import net.rim.device.api.ui.Touchscreen; 
    34  
    35 import org.logicprobe.LogicMail.model.AccountNode; 
    3633import org.logicprobe.LogicMail.model.MailRootNode; 
    3734import org.logicprobe.LogicMail.model.MailboxNode; 
    38 import org.logicprobe.LogicMail.model.MessageNode; 
    3935 
    40 public class ScreenFactoryBB47 extends ScreenFactory { 
    41         private boolean hasTouchscreen; 
    42         private ScreenFactory oldScreenFactory; 
    43          
    44         public ScreenFactoryBB47() { 
    45                 hasTouchscreen = Touchscreen.isSupported(); 
    46                 oldScreenFactory = new ScreenFactoryBB42(); 
     36public class ScreenFactoryBB47T extends ScreenFactoryBB42 { 
     37        public ScreenFactoryBB47T() { 
    4738        } 
    4839         
    4940        public StandardScreen getMailHomeScreen(NavigationController navigationController, MailRootNode mailRootNode) { 
    50                 if(hasTouchscreen) { 
    51                         return new StandardTouchScreen(navigationController, new MailHomeScreen(mailRootNode)); 
    52                 } 
    53                 else { 
    54                         return oldScreenFactory.getMailHomeScreen(navigationController, mailRootNode); 
    55                 } 
     41                return new StandardTouchScreen(navigationController, new MailHomeScreen(mailRootNode)); 
    5642        } 
    5743 
    5844        public StandardScreen getMailboxScreen(NavigationController navigationController, MailboxNode mailboxNode) { 
    59                 return oldScreenFactory.getMailboxScreen(navigationController, mailboxNode); 
    60         } 
    61          
    62         public StandardScreen getMessageScreen(NavigationController navigationController, MessageNode messageNode) { 
    63                 return oldScreenFactory.getMessageScreen(navigationController, messageNode); 
    64         } 
    65  
    66         public StandardScreen getCompositionScreen(NavigationController navigationController, AccountNode accountNode) { 
    67                 return oldScreenFactory.getCompositionScreen(navigationController, accountNode); 
    68         } 
    69          
    70         public StandardScreen getCompositionScreen(NavigationController navigationController, AccountNode accountNode, MessageNode messageNode) { 
    71                 return oldScreenFactory.getCompositionScreen(navigationController, accountNode, messageNode); 
    72         } 
    73          
    74         public StandardScreen getCompositionScreen(NavigationController navigationController, AccountNode accountNode, String address) { 
    75                 return oldScreenFactory.getCompositionScreen(navigationController, accountNode, address); 
    76         } 
    77          
    78         public StandardScreen getCompositionReplyScreen(NavigationController navigationController, AccountNode accountNode, MessageNode messageNode, boolean replyAll) { 
    79                 return oldScreenFactory.getCompositionReplyScreen(navigationController, accountNode, messageNode, replyAll); 
    80         } 
    81          
    82         public StandardScreen getCompositionForwardScreen(NavigationController navigationController, AccountNode accountNode, MessageNode messageNode) { 
    83                 return oldScreenFactory.getCompositionForwardScreen(navigationController, accountNode, messageNode); 
     45                return new StandardTouchScreen(navigationController, new MailboxScreen(mailboxNode)); 
    8446        } 
    8547} 
  • trunk/LogicMail_BB47T/src/org/logicprobe/LogicMail/ui/TouchScreenTreeField.java

    r501 r549  
    3131package org.logicprobe.LogicMail.ui; 
    3232 
    33 import org.logicprobe.LogicMail.model.MailboxNode; 
    34 import org.logicprobe.LogicMail.ui.MailHomeScreen.TreeNode; 
    35  
    36 import net.rim.device.api.ui.Font; 
     33import net.rim.device.api.system.Bitmap; 
    3734import net.rim.device.api.ui.Graphics; 
    3835import net.rim.device.api.ui.TouchEvent; 
     
    4845public class TouchScreenTreeField extends TreeField { 
    4946        private TreeFieldCallback callback; 
     47        private static Bitmap chevronIcon = Bitmap.getBitmapResource("chevron_right_black_15x22.png"); 
     48        private static Bitmap chevronIconHighlighted = Bitmap.getBitmapResource("chevron_right_white_15x22.png"); 
     49        private static int chevronIconWidth = chevronIcon.getWidth(); 
     50        private static int chevronIconHeight = chevronIcon.getHeight(); 
    5051         
    5152        public TouchScreenTreeField(TreeFieldCallback callback, long style) { 
     
    6768                if(isNodeSelectable(node)) { 
    6869                        int rowWidth = width + indent; 
    69                         Font origFont = graphics.getFont(); 
    70                         graphics.setFont(origFont.derive(Font.BOLD)); 
    71                         int xPos = rowWidth - (graphics.getFont().getAdvance('>') * 2); 
    72                         graphics.drawText(">", xPos, y, 0, rowWidth - xPos); 
    73                         graphics.setFont(origFont); 
     70                        int xPos = rowWidth - (chevronIconWidth * 2); 
     71                         
     72                        if(getCurrentNode() == node) { 
     73                                graphics.drawBitmap(xPos, y, chevronIconWidth, chevronIconHeight, chevronIconHighlighted, 0, 0); 
     74                        } 
     75                        else { 
     76                                graphics.drawBitmap(xPos, y, chevronIconWidth, chevronIconHeight, chevronIcon, 0, 0); 
     77                        } 
     78                         
    7479                        drawWidth -= (rowWidth - xPos); 
    7580                } 
     
    7984        private boolean isNodeSelectable(int node) { 
    8085                Object cookie = this.getCookie(node); 
    81                 if(cookie instanceof TreeNode) { 
    82                         TreeNode treeNode = (TreeNode)cookie; 
    83                         if(treeNode.node instanceof MailboxNode) { 
    84                                 MailboxNode mailboxNode = (MailboxNode)treeNode.node; 
    85                                 return mailboxNode.isSelectable(); 
    86                         } 
    87                         else { 
    88                                 return false; 
    89                         } 
     86                if(cookie instanceof TreeFieldNode) { 
     87                        return ((TreeFieldNode)cookie).isNodeSelectable(); 
    9088                } 
    9189                else { 
Note: See TracChangeset for help on using the changeset viewer.