From: <fd...@us...> - 2003-11-30 19:42:48
|
Update of /cvsroot/columba/columba/src/mail/core/org/columba/mail/folderoptions In directory sc8-pr-cvs1:/tmp/cvs-serv16016/src/mail/core/org/columba/mail/folderoptions Added Files: package.html SortingOptionsPlugin.java AbstractFolderOptionsPlugin.java FilterOptionsPlugin.java ColumnOptionsPlugin.java FolderOptionsController.java ThreadedViewOptionsPlugin.java Log Message: [feature]added most plugins, still some finishing touches and gui work has to be done. Currently, you can View->Configure Columns..., Folder Options - choose individual options you want to override, including filtering/threaded-view/sorting state/columns --- NEW FILE: package.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <head> <!-- @(#)package.html 1.0 2003/08/23 The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is "The Columba Project" The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. All Rights Reserved. --> </head> <body bgcolor="white"> Configuration options, which can be assigned on a per-folder basis, or globally. <p> This includes, which columns to show in the message-list. The sorting order, filter properties, enabling/disabling of the threaded-view, etc. </body> </html> --- NEW FILE: SortingOptionsPlugin.java --- //The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.folderoptions; import org.columba.core.config.DefaultItem; import org.columba.core.xml.XmlElement; import org.columba.mail.folder.Folder; import org.columba.mail.gui.frame.MailFrameMediator; import org.columba.mail.gui.frame.TableViewOwner; import org.columba.mail.gui.table.TableController; /** * @author fdietz */ public class SortingOptionsPlugin extends AbstractFolderOptionsPlugin { public SortingOptionsPlugin(MailFrameMediator mediator) { super("sorting", mediator); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#loadOptionsFromXml(org.columba.core.xml.XmlElement) */ public void loadOptionsFromXml(Folder folder) { XmlElement sorting = getConfigNode(folder); DefaultItem item = new DefaultItem(sorting); String column = item.get("column"); if (column == null) { column = "Date"; } boolean order = item.getBoolean("order", true); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); tableController.getTableModelSorter().setSortingColumn(column); tableController.getTableModelSorter().setSortingOrder(order); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#saveOptionsToXml() */ public void saveOptionsToXml(Folder folder) { XmlElement sorting = getConfigNode(folder); DefaultItem item = new DefaultItem(sorting); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); String column = tableController.getTableModelSorter().getSortingColumn(); boolean order = tableController.getTableModelSorter().getSortingOrder(); sorting.addAttribute("column", column); sorting.addAttribute("order", Boolean.toString(order)); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#createDefaultElement() */ public XmlElement createDefaultElement(boolean global) { XmlElement sorting = super.createDefaultElement(global); sorting.addAttribute("column", "Date"); sorting.addAttribute("order", "true"); return sorting; } } --- NEW FILE: AbstractFolderOptionsPlugin.java --- //The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.folderoptions; import org.columba.core.plugin.PluginInterface; import org.columba.core.xml.XmlElement; import org.columba.mail.config.FolderItem; import org.columba.mail.folder.Folder; import org.columba.mail.gui.frame.MailFrameMediator; /** * @author fdietz */ public abstract class AbstractFolderOptionsPlugin implements PluginInterface { private MailFrameMediator mediator; private String name; public AbstractFolderOptionsPlugin( String name, MailFrameMediator mediator) { this.name = name; this.mediator = mediator; } /** * Get xml configuration of this plugin. * <p> * * Following a simple example of a toolbar configuration:<br> * * <pre> * <toolbar enabled="true" show_icon="true" show_text="false"> * <button name="Cut"/> * <button name="Copy"/> * <button name="Paste"/> * <button name="Delete"/> * </toolbar> * </pre> * * <p> * So, this method will return the the top-level xml element * <b>toolbar</b>. * * @return top-level xml treenode */ public abstract void saveOptionsToXml(Folder folder); /** * Load options of this plugin from xml element. * <p> * Following the example used above, this element should * have the name <b>toolbar</b>. * <p> * @param element configuration options node */ public abstract void loadOptionsFromXml(Folder folder); /** * Get frame mediator * * @return frame mediator */ public MailFrameMediator getMediator() { return mediator; } /** * Get configuration node. * <p> * Determine if this should be applied globally or * on a per-folder basis. * <p> * This way, plugins don't have to know, if they work * on global or local options. * * @param folder currently selected folder * @return xml node */ public XmlElement getConfigNode(Folder folder) { XmlElement parent = null; boolean global = false; if (folder == null) { parent = FolderItem.getGlobalOptions(); global = true; } else { parent = folder.getFolderItem().getFolderOptions(); global = false; } XmlElement child = parent.getElement(getName()); if (child == null) { child = createDefaultElement(global); parent.addElement(child); } if (global) { return child; } if (child.getAttribute("overwrite").equals("true")) { // use folder-based options return child; } else { // use global options parent = FolderItem.getGlobalOptions(); child = parent.getElement(getName()); if (child == null) { child = createDefaultElement(true); parent.addElement(child); } return child; } } /** * Create default node. * * @return xml node */ public XmlElement createDefaultElement(boolean global) { XmlElement parent = new XmlElement(getName()); // only local options have overwrite attribute if (!global) parent.addAttribute("overwrite", "false"); return parent; } /** * Get name of configuration * * @return config name */ public String getName() { return name; } } --- NEW FILE: FilterOptionsPlugin.java --- //The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.folderoptions; import org.columba.core.config.DefaultItem; import org.columba.core.xml.XmlElement; import org.columba.mail.folder.Folder; import org.columba.mail.gui.frame.MailFrameMediator; import org.columba.mail.gui.frame.MailFrameView; import org.columba.mail.gui.frame.TableViewOwner; import org.columba.mail.gui.table.FilterToolbar; import org.columba.mail.gui.table.TableController; import org.columba.mail.gui.table.model.TableModelFilter; /** * @author fdietz */ public class FilterOptionsPlugin extends AbstractFolderOptionsPlugin { /** * @param name * @param mediator */ public FilterOptionsPlugin(MailFrameMediator mediator) { super("filter", mediator); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#saveOptionsToXml(org.columba.mail.folder.Folder) */ public void saveOptionsToXml(Folder folder) { XmlElement parent = getConfigNode(folder); DefaultItem item = new DefaultItem(parent); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); TableModelFilter model = tableController.getTableModelFilteredView(); item.set("new_state", model.getNewFlag()); item.set("answered_state", model.getAnsweredFlag()); item.set("flagged_state", model.getFlaggedFlag()); item.set("attachment_state", model.getAttachmentFlag()); item.set("expunged_state", model.getExpungedFlag()); item.set("pattern", model.getPatternString()); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#loadOptionsFromXml(org.columba.mail.folder.Folder) */ public void loadOptionsFromXml(Folder folder) { XmlElement parent = getConfigNode(folder); DefaultItem item = new DefaultItem(parent); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); TableModelFilter model = tableController.getTableModelFilteredView(); FilterToolbar toolbar = ((MailFrameView)getMediator().getView()).getFilterToolbar(); model.setNewFlag(item.getBoolean("new_state")); toolbar.enableNew(item.getBoolean("new_state")); model.setAnsweredFlag(item.getBoolean("answered_state")); toolbar.enableAnswered(item.getBoolean("answered_state")); model.setFlaggedFlag(item.getBoolean("flagged_state")); toolbar.enableFlagged(item.getBoolean("flagged_state")); model.setAttachmentFlag(item.getBoolean("attachment_state")); toolbar.enableAttachment(item.getBoolean("attachment_state")); model.setExpungedFlag(item.getBoolean("expunged_state")); toolbar.enableExpunged(item.getBoolean("expunged_state")); String t = item.get("pattern"); if (t == null) { t = ""; } model.setPatternString(t); toolbar.setPattern(t); model.setDataFiltering(true); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#createDefaultElement() */ public XmlElement createDefaultElement(boolean global) { XmlElement parent = super.createDefaultElement(global); parent.addAttribute("new_state", "false"); parent.addAttribute("answered_state", "false"); parent.addAttribute("flagged_state", "false"); parent.addAttribute("expunged_state", "false"); parent.addAttribute("attachment_state", "false"); parent.addAttribute("pattern", ""); return parent; } } --- NEW FILE: ColumnOptionsPlugin.java --- //The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.folderoptions; import org.columba.core.config.DefaultItem; import org.columba.core.xml.XmlElement; import org.columba.mail.folder.Folder; import org.columba.mail.gui.frame.MailFrameMediator; import org.columba.mail.gui.frame.TableViewOwner; import org.columba.mail.gui.table.TableController; import org.columba.mail.gui.table.TableView; import java.awt.Dimension; import java.util.Enumeration; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableColumn; /** * @author fdietz */ public class ColumnOptionsPlugin extends AbstractFolderOptionsPlugin { /** * @param name * @param mediator */ public ColumnOptionsPlugin(MailFrameMediator mediator) { super("columns", mediator); } private XmlElement findColumn(XmlElement parent, String name) { for (int i = 0; i < parent.count(); i++) { XmlElement child = parent.getElement(i); if (child.getAttribute("name").equals(name)) { return child; } } return null; } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#saveOptionsToXml(org.columba.mail.folder.Folder) */ public void saveOptionsToXml(Folder folder) { XmlElement columns = getConfigNode(folder); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); TableView view = tableController.getView(); // for each column int c = view.getColumnCount(); Enumeration enum = view.getColumnModel().getColumns(); while (enum.hasMoreElements()) { TableColumn tc = (TableColumn) enum.nextElement(); String name = (String) tc.getHeaderValue(); XmlElement column = findColumn(columns, name); column.addAttribute("enabled", "true"); // save width int size = tc.getWidth(); column.addAttribute("width", Integer.toString(size)); /* // save position int position = tc.getModelIndex(); column.addAttribute("position", Integer.toString(position)); */ } } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#loadOptionsFromXml(org.columba.mail.folder.Folder) */ public void loadOptionsFromXml(Folder folder) { XmlElement columns = getConfigNode(folder); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); TableView view = tableController.getView(); // remove all columns from table model tableController.getHeaderTableModel().clearColumns(); // remove all columns for column model view.setColumnModel(new DefaultTableColumnModel()); // add columns for (int i = 0; i < columns.count(); i++) { XmlElement column = columns.getElement(i); DefaultItem columnItem = new DefaultItem(column); if (columnItem.getBoolean("enabled")) { String name = columnItem.get("name"); int size = columnItem.getInteger("width"); // add column to table model tableController.getHeaderTableModel().addColumn(name); // add column to JTable column model view.addColumn(view.createTableColumn(name, size)); } } // resize/move columns // -> this has to happen, after all columns are added // -> in the JTable, otherwise it doesn't have any effect for (int i = 0; i < columns.count(); i++) { XmlElement column = columns.getElement(i); DefaultItem columnItem = new DefaultItem(column); if (columnItem.getBoolean("enabled")) { String name = columnItem.get("name"); int size = columnItem.getInteger("width"); int position = columnItem.getInteger("position"); TableColumn tc = view.getColumn(name); // resize column width tc.setPreferredWidth(size); /* // move column to new position view.moveColumn(tc.getModelIndex(), position); */ } } // for some weird reason the table loses its inter-cell spacing // property, when changing the underlying column model // -> setting this to (0,0) again view.setIntercellSpacing(new Dimension(0, 0)); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#createDefaultElement() */ public XmlElement createDefaultElement(boolean global) { XmlElement columns = super.createDefaultElement(global); // these are the items, enabled as default columns.addElement(createColumn("Status", "23", "1")); columns.addElement(createColumn("Attachment", "23", "2")); columns.addElement(createColumn("Flagged", "23", "3")); columns.addElement(createColumn("Priority", "23", "4")); columns.addElement(createColumn("Subject", "200", "5")); columns.addElement(createColumn("From", "100", "6")); columns.addElement(createColumn("Date", "100", "7")); columns.addElement(createColumn("Size", "50", "8")); columns.addElement(createColumn("Spam", "23", "9")); // more available items, but disabled XmlElement column = createColumn("To", "100", "10"); column.addAttribute("enabled", "false"); columns.addElement(column); column = createColumn("Cc", "100", "11"); column.addAttribute("enabled", "false"); columns.addElement(column); return columns; } /** * Create new XmlElement with custom attributes. * * @param name name of column * @param width column width * @return parent xml element */ private static XmlElement createColumn(String name, String width, String position) { XmlElement column = new XmlElement("column"); column.addAttribute("name", name); column.addAttribute("width", width); column.addAttribute("position", position); column.addAttribute("enabled", "true"); return column; } } --- NEW FILE: FolderOptionsController.java --- //The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.folderoptions; import org.columba.core.main.MainInterface; import org.columba.core.plugin.PluginHandlerNotFoundException; import org.columba.core.xml.XmlElement; import org.columba.mail.config.FolderItem; import org.columba.mail.folder.Folder; import org.columba.mail.gui.frame.MailFrameMediator; import org.columba.mail.plugin.FolderOptionsPluginHandler; import java.util.HashMap; import java.util.Map; /** * @author fdietz */ public class FolderOptionsController { private MailFrameMediator mediator; private Map map; private FolderOptionsPluginHandler handler; public FolderOptionsController(MailFrameMediator mediator) { this.mediator = mediator; map = new HashMap(); try { handler = (FolderOptionsPluginHandler) MainInterface.pluginManager.getHandler( "org.columba.mail.folderoptions"); } catch (PluginHandlerNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public AbstractFolderOptionsPlugin getPlugin(String name) { if (map.containsKey(name)) { // already loaded return (AbstractFolderOptionsPlugin) map.get(name); } else { AbstractFolderOptionsPlugin plugin = null; try { plugin = (AbstractFolderOptionsPlugin) handler.getPlugin(name, new Object[] { mediator }); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } map.put(name, plugin); return plugin; } } public void load(Folder folder) { String[] ids = handler.getPluginIdList(); for (int i = 0; i < ids.length; i++) { AbstractFolderOptionsPlugin plugin = getPlugin(ids[i]); plugin.loadOptionsFromXml(folder); } } public void save(Folder folder) { String[] ids = handler.getPluginIdList(); for (int i = 0; i < ids.length; i++) { AbstractFolderOptionsPlugin plugin = getPlugin(ids[i]); plugin.saveOptionsToXml(folder); } } public void load() { String[] ids = handler.getPluginIdList(); for (int i = 0; i < ids.length; i++) { AbstractFolderOptionsPlugin plugin = getPlugin(ids[i]); plugin.loadOptionsFromXml(null); } } public static XmlElement getConfigNode(Folder folder, String name) { XmlElement parent = null; boolean global = false; if (folder == null) { parent = FolderItem.getGlobalOptions(); global = true; } else { parent = folder.getFolderItem().getFolderOptions(); global = false; } XmlElement child = parent.getElement(name); if (global) { return child; } String overwrite = child.getAttribute("overwrite"); if ((overwrite != null) && (overwrite.equals("true"))) { // use folder-based options return child; } else { // use global options parent = FolderItem.getGlobalOptions(); child = parent.getElement(name); return child; } } } --- NEW FILE: ThreadedViewOptionsPlugin.java --- //The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.folderoptions; import org.columba.core.config.DefaultItem; import org.columba.core.xml.XmlElement; import org.columba.mail.folder.Folder; import org.columba.mail.gui.frame.MailFrameMediator; import org.columba.mail.gui.frame.TableViewOwner; import org.columba.mail.gui.table.TableController; /** * @author fdietz */ public class ThreadedViewOptionsPlugin extends AbstractFolderOptionsPlugin { /** * @param name * @param mediator */ public ThreadedViewOptionsPlugin(MailFrameMediator mediator) { super("threadedview", mediator); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#saveOptionsToXml(org.columba.mail.folder.Folder) */ public void saveOptionsToXml(Folder folder) { XmlElement parent = getConfigNode(folder); DefaultItem item = new DefaultItem(parent); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); item.set("enabled", tableController.getTableModelThreadedView().isEnabled()); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#loadOptionsFromXml(org.columba.mail.folder.Folder) */ public void loadOptionsFromXml(Folder folder) { XmlElement parent = getConfigNode(folder); DefaultItem item = new DefaultItem(parent); boolean enableThreadedView = item.getBoolean("enabled", false); TableController tableController = ((TableViewOwner) getMediator()).getTableController(); tableController.getTableModelThreadedView().setEnabled(enableThreadedView); tableController.getHeaderTableModel().enableThreadedView(enableThreadedView); tableController.getView().enableThreadedView(enableThreadedView); } /** * @see org.columba.mail.folderoptions.AbstractFolderOptionsPlugin#createDefaultElement() */ public XmlElement createDefaultElement(boolean global) { XmlElement parent = super.createDefaultElement(global); parent.addAttribute("enabled", "false"); return parent; } } |