1998-09-09 04:52:38 +04:00
|
|
|
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public License
|
|
|
|
* Version 1.0 (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 Grendel mail/news client.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
|
|
* Corporation. Portions created by Netscape are Copyright (C) 1997
|
|
|
|
* Netscape Communications Corporation. All Rights Reserved.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
package grendel.integrator;
|
|
|
|
|
|
|
|
import java.awt.Image;
|
|
|
|
import java.awt.Toolkit;
|
|
|
|
import java.util.Enumeration;
|
|
|
|
import java.util.Vector;
|
|
|
|
|
|
|
|
import javax.activation.DataHandler;
|
|
|
|
|
1999-01-09 06:55:32 +03:00
|
|
|
import javax.swing.event.ChangeEvent;
|
|
|
|
import javax.swing.event.EventListenerList;
|
1998-09-09 04:52:38 +04:00
|
|
|
|
1999-01-09 06:55:32 +03:00
|
|
|
//import netscape.shell.IShellIntegrator;
|
|
|
|
//import netscape.shell.IShellView;
|
|
|
|
//import netscape.shell.IShellViewCtx;
|
|
|
|
//import netscape.shell.ShellViewCtxListener;
|
1998-09-09 04:52:38 +04:00
|
|
|
|
|
|
|
import javax.mail.Folder;
|
|
|
|
import javax.mail.MessagingException;
|
|
|
|
|
|
|
|
import grendel.view.ViewedFolder;
|
|
|
|
import grendel.ui.UIFactory;
|
|
|
|
|
|
|
|
public class FolderCtx implements IShellViewCtx {
|
|
|
|
IShellIntegrator fIntegrator;
|
|
|
|
IShellViewCtx fParent;
|
|
|
|
ViewedFolder fFolder;
|
|
|
|
Vector fChildren = new Vector();
|
|
|
|
DataHandler fDataHandler;
|
|
|
|
EventListenerList fListeners = new EventListenerList();
|
|
|
|
boolean fInited;
|
|
|
|
|
|
|
|
|
|
|
|
public FolderCtx(ViewedFolder aFolder) {
|
|
|
|
fFolder = aFolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes this view e.g., the Integrator calls this first so you can
|
|
|
|
* identify the view.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
public void initialize( IShellIntegrator shell, IShellViewCtx aParent ) {
|
|
|
|
fIntegrator = shell;
|
|
|
|
fParent = aParent;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provides an enumeration for the subviews in this view.
|
|
|
|
*
|
|
|
|
* @param iFlags Flags determining which items to iclude in the enumeration
|
|
|
|
* @see #FOLDERS
|
|
|
|
* @see #NONFOLDERS
|
|
|
|
* @see #INCLUDEHIDDEN
|
|
|
|
*
|
|
|
|
* @return An Enumeration for the view context's children
|
|
|
|
*/
|
|
|
|
public Enumeration children( int iFlags ) {
|
|
|
|
if (!fInited) {
|
|
|
|
initChildren();
|
|
|
|
}
|
|
|
|
return fChildren.elements();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provides an array of the view context's children
|
|
|
|
*
|
|
|
|
* @param iFlags Flags determining which items to iclude in the array
|
|
|
|
* @see #FOLDERS
|
|
|
|
* @see #NONFOLDERS
|
|
|
|
* @see #INCLUDEHIDDEN
|
|
|
|
*
|
|
|
|
* @return An array of the view context's children
|
|
|
|
*/
|
|
|
|
public IShellViewCtx[] getChildren( int iFlags ) {
|
|
|
|
if (!fInited) {
|
|
|
|
initChildren();
|
|
|
|
}
|
|
|
|
IShellViewCtx res[] = new IShellViewCtx[fChildren.size()];
|
|
|
|
fChildren.copyInto(res);
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the number of children for the view context.
|
|
|
|
*
|
|
|
|
* @param iFlags Flags determining which items to iclude in the array
|
|
|
|
* @see #FOLDERS
|
|
|
|
* @see #NONFOLDERS
|
|
|
|
* @see #INCLUDEHIDDEN
|
|
|
|
*
|
|
|
|
* @return the number of children for the view context
|
|
|
|
*/
|
|
|
|
public int getChildCount( int iFlags ) {
|
|
|
|
if (!fInited) {
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
return fChildren.size();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the view context's direct parent view context.
|
|
|
|
*
|
|
|
|
* @return the view context's parent.
|
|
|
|
*/
|
|
|
|
public IShellViewCtx getParent() {
|
|
|
|
return fParent;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the view context's parent.
|
|
|
|
*
|
|
|
|
* @param viewCtx the parent of this view context.
|
|
|
|
*/
|
|
|
|
public void setParent( IShellViewCtx viewCtx ) {
|
|
|
|
fParent = viewCtx;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compares two subviews.
|
|
|
|
*
|
|
|
|
* @param subview1 identifies the first subview to compare
|
|
|
|
* @param subview2 identifies the second subview to compare
|
|
|
|
*
|
|
|
|
* @return Less than zero - The first subview should precede the second
|
|
|
|
* Greater than zero - The first subview should follow the second
|
|
|
|
* Zero - The two subviews are the same
|
|
|
|
*/
|
|
|
|
public int compareIDs( IShellViewCtx subview1, IShellViewCtx subview2 ) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an IShellView object. Note the object created must be different
|
|
|
|
* than this view i.e., different references, because the Integrator may
|
|
|
|
* instruct this view to create more than one independent view.
|
|
|
|
*
|
|
|
|
* @return an IShellView object representing this view
|
|
|
|
*/
|
|
|
|
public IShellView createView(Object aObject) {
|
|
|
|
return new FolderView(fFolder.getFolder());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the view's preferences that display in the shell's shared
|
|
|
|
* preference window.
|
|
|
|
*
|
|
|
|
* @return an object specifying property information for the view's
|
|
|
|
* preferences. Note the property information is found via introspection.
|
|
|
|
* @see java.beans.BeanInfo
|
|
|
|
*/
|
|
|
|
public Object getGlobalPreferences() {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns attributes of this view.
|
|
|
|
*
|
|
|
|
* @return one or more flags describing the specified subview's attributes
|
|
|
|
* @see #CANCOPY
|
|
|
|
* @see #CANDELETE
|
|
|
|
* @see #CANMOVE
|
|
|
|
* @see #CANRENAME
|
|
|
|
* @see #READONLY
|
|
|
|
* @see #HASSUBFOLDER
|
|
|
|
* @see #FOLDER
|
|
|
|
*/
|
|
|
|
public int getAttributes() {
|
|
|
|
return FOLDER|READONLY|HASSUBFOLDER;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Supplies an icon for this view
|
|
|
|
*
|
|
|
|
* @param iTypeFlags one or more flags specifying the requested icon's type
|
|
|
|
* @see java.beans.BeanInfo#ICON_COLOR_16x16
|
|
|
|
* @see java.beans.BeanInfo#ICON_MONO_16x16
|
|
|
|
* @see java.beans.BeanInfo#ICON_COLOR_32x32
|
|
|
|
* @see java.beans.BeanInfo#ICON_MONO_32x32
|
|
|
|
* @see #OPEN
|
|
|
|
*
|
|
|
|
* @return an icon for the subview
|
|
|
|
*/
|
|
|
|
public Image getIcon( int iTypeFlags ) {
|
|
|
|
Image res = null;
|
|
|
|
|
|
|
|
switch (iTypeFlags) {
|
|
|
|
case java.beans.BeanInfo.ICON_COLOR_16x16:
|
|
|
|
case java.beans.BeanInfo.ICON_MONO_16x16:
|
|
|
|
res = UIFactory.Instance().getFolderImage(fFolder,
|
|
|
|
false, false);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case java.beans.BeanInfo.ICON_COLOR_32x32:
|
|
|
|
case java.beans.BeanInfo.ICON_MONO_32x32:
|
|
|
|
res = UIFactory.Instance().getFolderImage(fFolder,
|
|
|
|
false, true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a human readable name for this view
|
|
|
|
*
|
|
|
|
* @return a string representation of this view
|
|
|
|
*/
|
|
|
|
public String getDisplayName() {
|
|
|
|
return fFolder.getFolder().getName();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the display name for the specified subview
|
|
|
|
*
|
|
|
|
* @param name the new display name for this view
|
|
|
|
*/
|
|
|
|
public void setDisplayName( String name ) {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a change listener for monitoring changes on the ctx.
|
|
|
|
* e.g., the view ctx child state may have changed.
|
|
|
|
*/
|
|
|
|
public void addShellViewCtxListener( ShellViewCtxListener l ) {
|
|
|
|
fListeners.add(ShellViewCtxListener.class, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a change listener for monitoring changes on the ctx.
|
|
|
|
*/
|
|
|
|
public void removeShellViewCtxListener( ShellViewCtxListener l ) {
|
|
|
|
fListeners.remove(ShellViewCtxListener.class, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setDataHandler(DataHandler aHandler) {
|
|
|
|
fDataHandler = aHandler;
|
|
|
|
}
|
|
|
|
|
|
|
|
public DataHandler getDataHandler() {
|
|
|
|
return fDataHandler;
|
|
|
|
}
|
|
|
|
|
|
|
|
void initChildren() {
|
|
|
|
fChildren.removeAllElements();
|
|
|
|
ViewedFolder folder = fFolder.getFirstSubFolder();
|
|
|
|
while (folder != null) {
|
|
|
|
FolderCtx child = new FolderCtx(folder);
|
|
|
|
fChildren.addElement(child);
|
|
|
|
child.initialize(fIntegrator, this);
|
|
|
|
folder = folder.getNextFolder();
|
|
|
|
}
|
|
|
|
fInited = true;
|
|
|
|
notifyChange();
|
|
|
|
}
|
|
|
|
|
|
|
|
void notifyChange() {
|
|
|
|
Object[] listeners = fListeners.getListenerList();
|
|
|
|
ChangeEvent event = null;
|
|
|
|
for (int i = 0; i < listeners.length - 1; i += 2) {
|
|
|
|
// Lazily create the event:
|
|
|
|
if (event == null)
|
|
|
|
event = new ChangeEvent(this);
|
|
|
|
((ShellViewCtxListener)listeners[i+1]).childrenChanged(event);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|