1 package org.columba.mail.gui.tree.action; 17 18 import java.util.Observable ; 19 import java.util.Observer ; 20 21 import org.columa.core.config.IDefaultItem; 22 import org.columba.api.gui.frame.IFrameMediator; 23 import org.columba.api.selection.ISelectionListener; 24 import org.columba.api.selection.SelectionChangedEvent; 25 import org.columba.core.config.DefaultItem; 26 import org.columba.core.gui.action.AbstractColumbaAction; 27 import org.columba.core.xml.XmlElement; 28 import org.columba.mail.config.IFolderItem; 29 import org.columba.mail.config.MailConfig; 30 import org.columba.mail.folder.IMailFolder; 31 import org.columba.mail.folder.IMailbox; 32 import org.columba.mail.gui.frame.MailFrameMediator; 33 import org.columba.mail.gui.tree.selection.TreeSelectionChangedEvent; 34 35 38 public abstract class AbstractMoveFolderAction extends AbstractColumbaAction 39 implements ISelectionListener, Observer { 40 41 private IMailFolder lastSelectedFolder; 42 43 49 public AbstractMoveFolderAction(IFrameMediator frameMediator, String name) { 50 super(frameMediator, name); 51 52 ((MailFrameMediator) frameMediator).registerTreeSelectionListener(this); 53 registerSortingObserver(); 54 } 55 56 64 protected abstract boolean isActionEnabledByIndex(int folderIndex); 65 66 69 private void registerSortingObserver() { 70 XmlElement sortElement = MailConfig.getInstance().get("options") 71 .getElement("/options/gui/tree/sorting"); 72 if (sortElement == null) { 73 XmlElement treeElement = MailConfig.getInstance().get("options") 74 .getElement("/options/gui/tree"); 75 if (treeElement == null) { 76 treeElement = MailConfig.getInstance().get("options") 77 .getElement("/options/gui").addSubElement("tree"); 78 } 79 sortElement = treeElement.addSubElement("sorting"); 80 } 81 sortElement.addObserver(this); 82 } 83 84 85 public void update(Observable o, Object arg) { 86 enableAction(); 87 } 88 89 92 private void enableAction() { 93 XmlElement sortElement = MailConfig.getInstance().get("options") 94 .getElement("/options/gui/tree/sorting"); 95 96 IDefaultItem item = new DefaultItem(sortElement); 97 boolean sorted = item.getBoolean("sorted"); 98 if (sorted) { 99 setEnabled(false); 100 } else { 101 reenableActionFromSelectedFolder(); 102 } 103 } 104 105 108 private void reenableActionFromSelectedFolder() { 109 if ( (lastSelectedFolder == null) || (lastSelectedFolder.getParent() == null) ) { 110 setEnabled(false); 111 } else { 112 IFolderItem item = lastSelectedFolder.getConfiguration(); 113 114 if (item.getString("property", "accessrights").equals("user")) { 115 int index = lastSelectedFolder.getParent().getIndex( 116 lastSelectedFolder); 117 118 setEnabled(isActionEnabledByIndex(index)); 119 } else { 120 setEnabled(false); 121 } 122 } 123 } 124 125 128 public void selectionChanged(SelectionChangedEvent e) { 129 if (((TreeSelectionChangedEvent) e).getSelected().length > 0) { 130 IMailFolder folder = ((TreeSelectionChangedEvent) e) 131 .getSelected()[0]; 132 if ((folder != null) && folder instanceof IMailbox) { 133 lastSelectedFolder = folder; 134 } else { 135 lastSelectedFolder = null; 136 } 137 enableAction(); 138 } else { 139 setEnabled(false); 140 } 141 } 142 143 146 protected IMailFolder getLastSelectedFolder() { 147 return lastSelectedFolder; 148 } 149 } 150 | Popular Tags |