mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-06 00:31:27 +00:00
landing mailnews folder pane outliner branch. (#73865)
huge thanks jan varga and hwaara for doing the lion's share of the work to convert the folder pane to use the outliner. reviewed by waterson, andreww, ben, hewitt, pinkerton, attinasi, hwaara, varga, sspitzer, bienvenu. super reviewed by hyatt and sspitzer for the end user: unread and total columns are back in folder pane (like 4.x) also includes fixes for #80844 #85376 #89072 #90075 #93011 #93963 #95298 #54171 #78768 #85088
This commit is contained in:
parent
dd47fcc7b6
commit
1e0e99191d
@ -56,6 +56,23 @@ interface nsIXULTemplateBuilder : nsISupports
|
||||
[scriptable, uuid(f6ed69be-1dd1-11b2-adfc-9db02ac57d88)]
|
||||
interface nsIXULOutlinerBuilderObserver : nsISupports
|
||||
{
|
||||
/**
|
||||
* Methods used by the drag feedback code to determine if a drag is allowable at
|
||||
* the current location. To get the behavior where drops are only allowed on
|
||||
* items, such as the mailNews folder pane, always return false from |canDropBeforeAfter()|.
|
||||
*/
|
||||
boolean canDropOn(in long index);
|
||||
boolean canDropBeforeAfter(in long index, in boolean before);
|
||||
|
||||
/**
|
||||
* Called when the user drops something on this view. The |orientation| param
|
||||
* specifies before/on/after the given |row|.
|
||||
*/
|
||||
const long inDropBefore = 1;
|
||||
const long inDropOn = 2;
|
||||
const long inDropAfter = 3;
|
||||
void onDrop(in long row, in long orientation);
|
||||
|
||||
/**
|
||||
* Called when an item is opened or closed.
|
||||
*/
|
||||
|
@ -960,7 +960,7 @@ nsXULOutlinerBuilder::ReplaceMatch(nsIRDFResource* aMember,
|
||||
// itself out.
|
||||
|
||||
// Notify the box object
|
||||
mBoxObject->RowCountChanged(row, -delta);
|
||||
mBoxObject->RowCountChanged(row, -delta - 1);
|
||||
}
|
||||
}
|
||||
else if (aNewMatch) {
|
||||
@ -1718,26 +1718,71 @@ nsXULOutlinerBuilder::SortSubtree(nsOutlinerRows::Subtree* aSubtree)
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::CanDropOn(PRInt32 index, PRBool *_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
*_retval = PR_FALSE;
|
||||
if (mObservers) {
|
||||
PRUint32 count;
|
||||
mObservers->Count(&count);
|
||||
for (PRUint32 i = 0; i < count; ++i) {
|
||||
nsCOMPtr<nsIXULOutlinerBuilderObserver> observer;
|
||||
mObservers->QueryElementAt(i, NS_GET_IID(nsIXULOutlinerBuilderObserver), getter_AddRefs(observer));
|
||||
if (observer) {
|
||||
observer->CanDropOn(index, _retval);
|
||||
if (*_retval)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* boolean canDropBeforeAfter (in long index, in boolean before); */
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::CanDropBeforeAfter(PRInt32 index, PRBool before, PRBool *_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
*_retval = PR_FALSE;
|
||||
if (mObservers) {
|
||||
PRUint32 count;
|
||||
mObservers->Count(&count);
|
||||
for (PRUint32 i = 0; i < count; ++i) {
|
||||
nsCOMPtr<nsIXULOutlinerBuilderObserver> observer;
|
||||
mObservers->QueryElementAt(i, NS_GET_IID(nsIXULOutlinerBuilderObserver), getter_AddRefs(observer));
|
||||
if (observer) {
|
||||
observer->CanDropBeforeAfter(index, before, _retval);
|
||||
if (*_retval)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::Drop(PRInt32 row, PRInt32 orient)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
if (mObservers) {
|
||||
PRUint32 count;
|
||||
mObservers->Count(&count);
|
||||
for (PRUint32 i = 0; i < count; ++i) {
|
||||
nsCOMPtr<nsIXULOutlinerBuilderObserver> observer;
|
||||
mObservers->QueryElementAt(i, NS_GET_IID(nsIXULOutlinerBuilderObserver), getter_AddRefs(observer));
|
||||
if (observer) {
|
||||
PRBool canDropOn = PR_FALSE;
|
||||
observer->CanDropOn(row, &canDropOn);
|
||||
if (canDropOn)
|
||||
observer->OnDrop(row, orient);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::IsSorted(PRBool *_retval)
|
||||
{
|
||||
*_retval = PR_FALSE;
|
||||
*_retval = mSortVariable;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -960,7 +960,7 @@ nsXULOutlinerBuilder::ReplaceMatch(nsIRDFResource* aMember,
|
||||
// itself out.
|
||||
|
||||
// Notify the box object
|
||||
mBoxObject->RowCountChanged(row, -delta);
|
||||
mBoxObject->RowCountChanged(row, -delta - 1);
|
||||
}
|
||||
}
|
||||
else if (aNewMatch) {
|
||||
@ -1718,26 +1718,71 @@ nsXULOutlinerBuilder::SortSubtree(nsOutlinerRows::Subtree* aSubtree)
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::CanDropOn(PRInt32 index, PRBool *_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
*_retval = PR_FALSE;
|
||||
if (mObservers) {
|
||||
PRUint32 count;
|
||||
mObservers->Count(&count);
|
||||
for (PRUint32 i = 0; i < count; ++i) {
|
||||
nsCOMPtr<nsIXULOutlinerBuilderObserver> observer;
|
||||
mObservers->QueryElementAt(i, NS_GET_IID(nsIXULOutlinerBuilderObserver), getter_AddRefs(observer));
|
||||
if (observer) {
|
||||
observer->CanDropOn(index, _retval);
|
||||
if (*_retval)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* boolean canDropBeforeAfter (in long index, in boolean before); */
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::CanDropBeforeAfter(PRInt32 index, PRBool before, PRBool *_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
*_retval = PR_FALSE;
|
||||
if (mObservers) {
|
||||
PRUint32 count;
|
||||
mObservers->Count(&count);
|
||||
for (PRUint32 i = 0; i < count; ++i) {
|
||||
nsCOMPtr<nsIXULOutlinerBuilderObserver> observer;
|
||||
mObservers->QueryElementAt(i, NS_GET_IID(nsIXULOutlinerBuilderObserver), getter_AddRefs(observer));
|
||||
if (observer) {
|
||||
observer->CanDropBeforeAfter(index, before, _retval);
|
||||
if (*_retval)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::Drop(PRInt32 row, PRInt32 orient)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
if (mObservers) {
|
||||
PRUint32 count;
|
||||
mObservers->Count(&count);
|
||||
for (PRUint32 i = 0; i < count; ++i) {
|
||||
nsCOMPtr<nsIXULOutlinerBuilderObserver> observer;
|
||||
mObservers->QueryElementAt(i, NS_GET_IID(nsIXULOutlinerBuilderObserver), getter_AddRefs(observer));
|
||||
if (observer) {
|
||||
PRBool canDropOn = PR_FALSE;
|
||||
observer->CanDropOn(row, &canDropOn);
|
||||
if (canDropOn)
|
||||
observer->OnDrop(row, orient);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULOutlinerBuilder::IsSorted(PRBool *_retval)
|
||||
{
|
||||
*_retval = PR_FALSE;
|
||||
*_retval = mSortVariable;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -1329,7 +1329,9 @@ nsXULTreeOuterGroupFrame::ReflowFinished(nsIPresShell* aPresShell, PRBool* aFlus
|
||||
// then mark everything as a style change. That
|
||||
// will dirty the tree all the way to its leaves.
|
||||
if (mRowHeightWasSet) {
|
||||
treeBox->MarkStyleChange(state);
|
||||
if (!treeBox)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
treeBox->MarkStyleChange(state);
|
||||
PRInt32 pos = mCurrentIndex*mRowHeight;
|
||||
if (mYPosition != pos)
|
||||
mAdjustScroll = PR_TRUE;
|
||||
|
@ -171,6 +171,8 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
|
||||
|
||||
// Cache our text alignment policy.
|
||||
nsCOMPtr<nsIStyleContext> styleContext;
|
||||
if (!aFrame)
|
||||
return;
|
||||
aFrame->GetStyleContext(getter_AddRefs(styleContext));
|
||||
|
||||
const nsStyleText* textStyle =
|
||||
@ -1678,10 +1680,14 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
// If we're the primary column, we need to indent and paint the twisty and any connecting lines
|
||||
// between siblings.
|
||||
|
||||
PRInt32 level;
|
||||
mView->GetLevel(aRowIndex, &level);
|
||||
|
||||
currX += mIndentation * level;
|
||||
remainingWidth -= mIndentation * level;
|
||||
|
||||
// Always leave space for the twisty.
|
||||
nsRect twistyRect(currX, cellRect.y, remainingWidth, cellRect.height);
|
||||
nsRect dirtyRect;
|
||||
if (dirtyRect.IntersectRect(aDirtyRect, twistyRect))
|
||||
PaintTwisty(aRowIndex, aColumn, twistyRect, aPresContext, aRenderingContext, aDirtyRect, aWhichLayer,
|
||||
remainingWidth, currX);
|
||||
|
||||
@ -1691,8 +1697,6 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
const nsStyleVisibility* vis =
|
||||
(const nsStyleVisibility*)lineContext->GetStyleData(eStyleStruct_Visibility);
|
||||
|
||||
PRInt32 level;
|
||||
mView->GetLevel(aRowIndex, &level);
|
||||
if (vis->IsVisibleOrCollapsed() && level && NS_FRAME_PAINT_LAYER_FOREGROUND == aWhichLayer) {
|
||||
// Paint the connecting lines.
|
||||
aRenderingContext.PushState();
|
||||
@ -1744,9 +1748,9 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
PRBool hasNextSibling;
|
||||
mView->HasNextSibling(currentParent, aRowIndex, &hasNextSibling);
|
||||
if (hasNextSibling)
|
||||
aRenderingContext.DrawLine(x + (i - 1) * mIndentation, y, x + (i - 1) * mIndentation, y + mRowHeight);
|
||||
aRenderingContext.DrawLine(x - (level - i + 1) * mIndentation, y, x - (level - i + 1) * mIndentation, y + mRowHeight);
|
||||
else if (i == level)
|
||||
aRenderingContext.DrawLine(x + (i - 1) * mIndentation, y, x + (i - 1) * mIndentation, y + mRowHeight / 2);
|
||||
aRenderingContext.DrawLine(x - (level - i + 1) * mIndentation, y, x - (level - i + 1) * mIndentation, y + mRowHeight / 2);
|
||||
}
|
||||
|
||||
PRInt32 parent;
|
||||
@ -1758,7 +1762,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
|
||||
// Don't paint off our cell.
|
||||
if (level == maxLevel)
|
||||
aRenderingContext.DrawLine(x + (level - 1) * mIndentation, y + mRowHeight / 2, x + level * mIndentation, y + mRowHeight /2);
|
||||
aRenderingContext.DrawLine(x - mIndentation + 16, y + mRowHeight / 2, x, y + mRowHeight /2);
|
||||
|
||||
PRBool clipState;
|
||||
aRenderingContext.PopState(clipState);
|
||||
@ -1766,9 +1770,6 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
PrefillPropertyArray(aRowIndex, aColumn);
|
||||
mView->GetCellProperties(aRowIndex, aColumn->GetID(), mScratchArray);
|
||||
}
|
||||
|
||||
currX += mIndentation*level;
|
||||
remainingWidth -= mIndentation*level;
|
||||
}
|
||||
|
||||
// Now paint the icon for our cell.
|
||||
|
@ -139,6 +139,8 @@ nsOutlinerBoxObject::GetOutlinerBody()
|
||||
FindBodyElement(startContent, getter_AddRefs(content));
|
||||
|
||||
mPresShell->GetPrimaryFrameFor(content, &frame);
|
||||
if (!frame)
|
||||
return nsnull;
|
||||
|
||||
// It's a frame. Refcounts are irrelevant.
|
||||
nsCOMPtr<nsIOutlinerBoxObject> body;
|
||||
|
@ -171,6 +171,8 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
|
||||
|
||||
// Cache our text alignment policy.
|
||||
nsCOMPtr<nsIStyleContext> styleContext;
|
||||
if (!aFrame)
|
||||
return;
|
||||
aFrame->GetStyleContext(getter_AddRefs(styleContext));
|
||||
|
||||
const nsStyleText* textStyle =
|
||||
@ -1678,10 +1680,14 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
// If we're the primary column, we need to indent and paint the twisty and any connecting lines
|
||||
// between siblings.
|
||||
|
||||
PRInt32 level;
|
||||
mView->GetLevel(aRowIndex, &level);
|
||||
|
||||
currX += mIndentation * level;
|
||||
remainingWidth -= mIndentation * level;
|
||||
|
||||
// Always leave space for the twisty.
|
||||
nsRect twistyRect(currX, cellRect.y, remainingWidth, cellRect.height);
|
||||
nsRect dirtyRect;
|
||||
if (dirtyRect.IntersectRect(aDirtyRect, twistyRect))
|
||||
PaintTwisty(aRowIndex, aColumn, twistyRect, aPresContext, aRenderingContext, aDirtyRect, aWhichLayer,
|
||||
remainingWidth, currX);
|
||||
|
||||
@ -1691,8 +1697,6 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
const nsStyleVisibility* vis =
|
||||
(const nsStyleVisibility*)lineContext->GetStyleData(eStyleStruct_Visibility);
|
||||
|
||||
PRInt32 level;
|
||||
mView->GetLevel(aRowIndex, &level);
|
||||
if (vis->IsVisibleOrCollapsed() && level && NS_FRAME_PAINT_LAYER_FOREGROUND == aWhichLayer) {
|
||||
// Paint the connecting lines.
|
||||
aRenderingContext.PushState();
|
||||
@ -1744,9 +1748,9 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
PRBool hasNextSibling;
|
||||
mView->HasNextSibling(currentParent, aRowIndex, &hasNextSibling);
|
||||
if (hasNextSibling)
|
||||
aRenderingContext.DrawLine(x + (i - 1) * mIndentation, y, x + (i - 1) * mIndentation, y + mRowHeight);
|
||||
aRenderingContext.DrawLine(x - (level - i + 1) * mIndentation, y, x - (level - i + 1) * mIndentation, y + mRowHeight);
|
||||
else if (i == level)
|
||||
aRenderingContext.DrawLine(x + (i - 1) * mIndentation, y, x + (i - 1) * mIndentation, y + mRowHeight / 2);
|
||||
aRenderingContext.DrawLine(x - (level - i + 1) * mIndentation, y, x - (level - i + 1) * mIndentation, y + mRowHeight / 2);
|
||||
}
|
||||
|
||||
PRInt32 parent;
|
||||
@ -1758,7 +1762,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
|
||||
// Don't paint off our cell.
|
||||
if (level == maxLevel)
|
||||
aRenderingContext.DrawLine(x + (level - 1) * mIndentation, y + mRowHeight / 2, x + level * mIndentation, y + mRowHeight /2);
|
||||
aRenderingContext.DrawLine(x - mIndentation + 16, y + mRowHeight / 2, x, y + mRowHeight /2);
|
||||
|
||||
PRBool clipState;
|
||||
aRenderingContext.PopState(clipState);
|
||||
@ -1766,9 +1770,6 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintCell(int aRowIndex,
|
||||
PrefillPropertyArray(aRowIndex, aColumn);
|
||||
mView->GetCellProperties(aRowIndex, aColumn->GetID(), mScratchArray);
|
||||
}
|
||||
|
||||
currX += mIndentation*level;
|
||||
remainingWidth -= mIndentation*level;
|
||||
}
|
||||
|
||||
// Now paint the icon for our cell.
|
||||
|
@ -139,6 +139,8 @@ nsOutlinerBoxObject::GetOutlinerBody()
|
||||
FindBodyElement(startContent, getter_AddRefs(content));
|
||||
|
||||
mPresShell->GetPrimaryFrameFor(content, &frame);
|
||||
if (!frame)
|
||||
return nsnull;
|
||||
|
||||
// It's a frame. Refcounts are irrelevant.
|
||||
nsCOMPtr<nsIOutlinerBoxObject> body;
|
||||
|
@ -50,7 +50,8 @@ function validate(data)
|
||||
// - if the user ALSO entered an @domain, then we just chop it off
|
||||
// - at some point it would be useful to keep the @domain, in case they
|
||||
// wish to override the domain.
|
||||
function validateEmail()
{
|
||||
function validateEmail()
|
||||
{
|
||||
var emailElement = document.getElementById("email");
|
||||
var email = emailElement.value;
|
||||
var emailArray = email.split('@');
|
||||
|
@ -16,6 +16,10 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributors(s):
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
*/
|
||||
|
||||
|
||||
@ -45,22 +49,19 @@ function OpenURL(url)
|
||||
messenger.OpenURL(url);
|
||||
}
|
||||
|
||||
function GetMsgFolderFromNode(folderNode)
|
||||
function GetMsgFolderFromResource(folderResource)
|
||||
{
|
||||
var folderURI = folderNode.getAttribute("id");
|
||||
return GetMsgFolderFromURI(folderURI);
|
||||
if (!folderResource)
|
||||
return null;
|
||||
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
return msgFolder;
|
||||
}
|
||||
|
||||
function GetMsgFolderFromURI(folderURI)
|
||||
{
|
||||
var folderResource = RDF.GetResource(folderURI);
|
||||
if(folderResource)
|
||||
{
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
return msgFolder;
|
||||
}
|
||||
|
||||
return null;
|
||||
return GetMsgFolderFromResource(folderResource);
|
||||
}
|
||||
|
||||
function GetServer(uri)
|
||||
@ -100,35 +101,6 @@ function LoadMessageByUri(uri)
|
||||
|
||||
}
|
||||
|
||||
function ChangeFolderByDOMNode(folderNode)
|
||||
{
|
||||
var uri = folderNode.getAttribute('id');
|
||||
dump(uri + "\n");
|
||||
if (!uri) return;
|
||||
|
||||
var sortType = 0;
|
||||
var sortOrder = 0;
|
||||
var viewFlags = 0;
|
||||
var viewType = 0;
|
||||
var resource = RDF.GetResource(uri);
|
||||
var msgfolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
// don't get the db if this folder is a server
|
||||
// we're going to be display account central
|
||||
if (msgfolder && !msgfolder.isServer)
|
||||
{
|
||||
var msgdb = msgfolder.getMsgDatabase(msgWindow);
|
||||
if (msgdb)
|
||||
{
|
||||
var dbFolderInfo = msgdb.dBFolderInfo;
|
||||
sortType = dbFolderInfo.sortType;
|
||||
sortOrder = dbFolderInfo.sortOrder;
|
||||
viewFlags = dbFolderInfo.viewFlags;
|
||||
viewType = dbFolderInfo.viewType;
|
||||
}
|
||||
}
|
||||
ChangeFolderByURI(uri, viewType, viewFlags, sortType, sortOrder);
|
||||
}
|
||||
|
||||
function setTitleFromFolder(msgfolder, subject)
|
||||
{
|
||||
if (!msgfolder) return;
|
||||
@ -192,11 +164,14 @@ function ChangeFolderByURI(uri, viewType, viewFlags, sortType, sortOrder)
|
||||
|
||||
//if it's a server, clear the threadpane and don't bother trying to load.
|
||||
if(msgfolder.isServer) {
|
||||
msgWindow.openFolder = null;
|
||||
|
||||
ClearThreadPane();
|
||||
|
||||
// Load AccountCentral page here.
|
||||
ShowAccountCentral();
|
||||
return;
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -615,7 +590,7 @@ function UpdateSortIndicator(column,sortDirection)
|
||||
// this is obsolete
|
||||
}
|
||||
|
||||
function SortFolderPane(column, sortKey)
|
||||
function SortFolderPane(column)
|
||||
{
|
||||
var node = FindInSidebar(window, column);
|
||||
if(!node)
|
||||
@ -623,60 +598,25 @@ function SortFolderPane(column, sortKey)
|
||||
dump('Couldnt find sort column\n');
|
||||
return false;
|
||||
}
|
||||
SortColumn(node, sortKey, null, null);
|
||||
//Remove the sortActive attribute because we don't want this pane to have any
|
||||
//sort styles.
|
||||
node.setAttribute("sortActive", "false");
|
||||
return true;
|
||||
}
|
||||
|
||||
function SortColumn(node, sortKey, secondarySortKey, direction)
|
||||
{
|
||||
var xulSortService = Components.classes["@mozilla.org/xul/xul-sort-service;1"].getService();
|
||||
|
||||
if (xulSortService)
|
||||
try
|
||||
{
|
||||
xulSortService = xulSortService.QueryInterface(Components.interfaces.nsIXULSortService);
|
||||
if (xulSortService)
|
||||
{
|
||||
// sort!!!
|
||||
var sortDirection;
|
||||
if(direction)
|
||||
sortDirection = direction;
|
||||
else
|
||||
{
|
||||
var currentDirection = node.getAttribute('sortDirection');
|
||||
if (currentDirection == "ascending")
|
||||
sortDirection = "descending";
|
||||
else if (currentDirection == "descending")
|
||||
sortDirection = "ascending";
|
||||
else sortDirection = "ascending";
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(secondarySortKey)
|
||||
node.setAttribute('resource2', secondarySortKey);
|
||||
xulSortService.Sort(node, sortKey, sortDirection);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
//dump("Sort failed: " + e + "\n");
|
||||
}
|
||||
}
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
folderOutliner.outlinerBoxObject.view.cycleHeader(column, node);
|
||||
}
|
||||
catch (ex)
|
||||
{
|
||||
dump("failed to cycle header: " + ex + "\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function GetSelectedFolderResource()
|
||||
{
|
||||
var folderTree = GetFolderTree();
|
||||
var selectedFolderList = folderTree.selectedItems;
|
||||
var selectedFolder = selectedFolderList[0];
|
||||
var uri = selectedFolder.getAttribute('id');
|
||||
|
||||
var folderResource = RDF.GetResource(uri);
|
||||
return folderResource;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
return GetFolderResource(folderOutliner, startIndex.value);
|
||||
}
|
||||
|
||||
function OnMouseUpThreadAndMessagePaneSplitter()
|
||||
@ -699,27 +639,61 @@ function OnClickThreadAndMessagePaneSplitterGrippy()
|
||||
|
||||
function FolderPaneSelectionChange()
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
if(tree)
|
||||
{
|
||||
var selArray = tree.selectedItems;
|
||||
if ( selArray && (selArray.length == 1) )
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
if (folderOutliner.outlinerBoxObject.selection.count == 1)
|
||||
{
|
||||
ChangeFolderByDOMNode(selArray[0]);
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
if (msgFolder == msgWindow.openFolder)
|
||||
return;
|
||||
else
|
||||
{
|
||||
var sortType = 0;
|
||||
var sortOrder = 0;
|
||||
var viewFlags = 0;
|
||||
var viewType = 0;
|
||||
|
||||
// don't get the db if this folder is a server
|
||||
// we're going to be display account central
|
||||
if (!(msgFolder.isServer))
|
||||
{
|
||||
try
|
||||
{
|
||||
var msgDatabase = msgFolder.getMsgDatabase(msgWindow);
|
||||
if (msgDatabase)
|
||||
{
|
||||
var dbFolderInfo = msgDatabase.dBFolderInfo;
|
||||
sortType = dbFolderInfo.sortType;
|
||||
sortOrder = dbFolderInfo.sortOrder;
|
||||
viewFlags = dbFolderInfo.viewFlags;
|
||||
viewType = dbFolderInfo.viewType;
|
||||
}
|
||||
}
|
||||
catch (ex)
|
||||
{
|
||||
dump("failed to get view & sort values. ex = " + ex +"\n");
|
||||
}
|
||||
}
|
||||
ChangeFolderByURI(folderResource.Value, viewType, viewFlags, sortType, sortOrder);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ClearThreadPane();
|
||||
msgWindow.openFolder = null;
|
||||
ClearThreadPane();
|
||||
}
|
||||
}
|
||||
|
||||
if (!gAccountCentralLoaded)
|
||||
ClearMessagePane();
|
||||
if (gDisplayStartupPage)
|
||||
{
|
||||
loadStartPage();
|
||||
gDisplayStartupPage = false;
|
||||
}
|
||||
if (! gAccountCentralLoaded)
|
||||
ClearMessagePane();
|
||||
|
||||
if (gDisplayStartupPage)
|
||||
{
|
||||
loadStartPage();
|
||||
gDisplayStartupPage = false;
|
||||
}
|
||||
}
|
||||
|
||||
function ClearThreadPane()
|
||||
@ -730,46 +704,6 @@ function ClearThreadPane()
|
||||
}
|
||||
}
|
||||
|
||||
function OpenFolderTreeToFolder(folderURI)
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
return OpenToFolder(tree, folderURI);
|
||||
}
|
||||
|
||||
function OpenToFolder(item, folderURI)
|
||||
{
|
||||
if(item.nodeType != Node.ELEMENT_NODE)
|
||||
return null;
|
||||
|
||||
var uri = item.getAttribute('id');
|
||||
dump(uri);
|
||||
dump('\n');
|
||||
if(uri == folderURI)
|
||||
{
|
||||
dump('found folder: ' + uri);
|
||||
dump('\n');
|
||||
return item;
|
||||
}
|
||||
|
||||
var children = item.childNodes;
|
||||
var length = children.length;
|
||||
var i;
|
||||
dump('folder ' + uri);
|
||||
dump('has ' + length);
|
||||
dump('children\n');
|
||||
for(i = 0; i < length; i++)
|
||||
{
|
||||
var child = children[i];
|
||||
var folder = OpenToFolder(child, folderURI);
|
||||
if(folder)
|
||||
{
|
||||
child.setAttribute('open', 'true');
|
||||
return folder;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function IsSpecialFolder(msgFolder, flags)
|
||||
{
|
||||
if (!msgFolder) {
|
||||
|
@ -20,6 +20,10 @@
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Jan Varga <varga@utcru.sk>
|
||||
Håkan Waara <hwaara@chello.se>
|
||||
-->
|
||||
<!DOCTYPE window SYSTEM "chrome://messenger/locale/folderpane.dtd">
|
||||
|
||||
@ -28,73 +32,107 @@
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<popup id="folderTooltip" class="tooltip" onpopupshowing="return FillInFolderTooltip(document.tooltipNode);" >
|
||||
<text id="foldertooltipText"/>
|
||||
</popup>
|
||||
<outliner id="folderOutliner"
|
||||
flex="1">
|
||||
<outlinerbody flex="1"
|
||||
datasources="rdf:null"
|
||||
ondraggesture="return BeginDragFolderOutliner(event);"
|
||||
onselect="FolderPaneSelectionChange();">
|
||||
<template>
|
||||
<rule>
|
||||
<conditions>
|
||||
<outlinerrow uri="?container"/>
|
||||
<member container="?container" child="?member" />
|
||||
</conditions>
|
||||
|
||||
<tree datasources="rdf:null"
|
||||
id="folderTree" class="mail-folders"
|
||||
onselect="top.FolderPaneSelectionChange();"
|
||||
onblur="goOnEvent(this,'blur')" dd-nodropbetweenrows="true"
|
||||
ondragover="return DragOverTree(event);"
|
||||
ondraggesture="return BeginDragFolderTree(event);"
|
||||
ondragdrop="return DropOnFolderTree(event);"
|
||||
onclick="FolderPaneOnClick(event);">
|
||||
|
||||
<template>
|
||||
<rule>
|
||||
<treechildren flex="1">
|
||||
<treeitem class="folderTreeItem" uri="..."
|
||||
SpecialFolder="rdf:http://home.netscape.com/NC-rdf#SpecialFolder"
|
||||
BiffState="rdf:http://home.netscape.com/NC-rdf#BiffState"
|
||||
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
|
||||
IsSecure="rdf:http://home.netscape.com/NC-rdf#IsSecure"
|
||||
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType"
|
||||
HasUnreadMessages="rdf:http://home.netscape.com/NC-rdf#HasUnreadMessages"
|
||||
NewMessages="rdf:http://home.netscape.com/NC-rdf#NewMessages"
|
||||
SubfoldersHaveUnreadMessages="rdf:http://home.netscape.com/NC-rdf#SubfoldersHaveUnreadMessages"
|
||||
CanRename="rdf:http://home.netscape.com/NC-rdf#CanRename"
|
||||
CanCompact="rdf:http://home.netscape.com/NC-rdf#CanCompact"
|
||||
CanCreateSubfolders="rdf:http://home.netscape.com/NC-rdf#CanCreateSubfolders"
|
||||
CanSubscribe="rdf:http://home.netscape.com/NC-rdf#CanSubscribe"
|
||||
CanFileMessages="rdf:http://home.netscape.com/NC-rdf#CanFileMessages"
|
||||
NoSelect="rdf:http://home.netscape.com/NC-rdf#NoSelect"
|
||||
persist="open">
|
||||
<treerow class="tree-folder-row"
|
||||
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
|
||||
HasUnreadMessages="rdf:http://home.netscape.com/NC-rdf#HasUnreadMessages"
|
||||
NoSelect="rdf:http://home.netscape.com/NC-rdf#NoSelect">
|
||||
<treecell tooltip="folderTooltip" indent="true" class="treecell-indent tree-cell-folderpane-icon"
|
||||
label="rdf:http://home.netscape.com/NC-rdf#FolderTreeName"
|
||||
SpecialFolder="rdf:http://home.netscape.com/NC-rdf#SpecialFolder"
|
||||
BiffState="rdf:http://home.netscape.com/NC-rdf#BiffState"
|
||||
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
|
||||
IsSecure="rdf:http://home.netscape.com/NC-rdf#IsSecure"
|
||||
NewMessages="rdf:http://home.netscape.com/NC-rdf#NewMessages"
|
||||
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType"
|
||||
HasUnreadMessages="rdf:http://home.netscape.com/NC-rdf#HasUnreadMessages"
|
||||
SubfoldersHaveUnreadMessages="rdf:http://home.netscape.com/NC-rdf#SubfoldersHaveUnreadMessages"
|
||||
CanRename="rdf:http://home.netscape.com/NC-rdf#CanRename"
|
||||
CanCompact="rdf:http://home.netscape.com/NC-rdf#CanCompact"
|
||||
CanCreateSubfolders="rdf:http://home.netscape.com/NC-rdf#CanCreateSubfolders"
|
||||
CanSubscribe="rdf:http://home.netscape.com/NC-rdf#CanSubscribe"
|
||||
CanFileMessages="rdf:http://home.netscape.com/NC-rdf#CanFileMessages"
|
||||
NoSelect="rdf:http://home.netscape.com/NC-rdf#NoSelect"/>
|
||||
</treerow>
|
||||
</treeitem>
|
||||
</treechildren>
|
||||
</rule>
|
||||
</template>
|
||||
|
||||
<treecolgroup>
|
||||
<treecol persist="width" width="3*" flex="1" id="FolderColumn" resource="http://home.netscape.com/NC-rdf#FolderTreeName"/>
|
||||
</treecolgroup>
|
||||
|
||||
<treehead>
|
||||
<treerow>
|
||||
</treerow>
|
||||
</treehead>
|
||||
|
||||
</tree>
|
||||
<bindings>
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#FolderTreeName"
|
||||
object="?folderTreeName" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#FolderTreeName?sort=true"
|
||||
object="?folderTreeNameSort" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#FolderTreeSimpleName"
|
||||
object="?folderTreeSimpleName" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#FolderTreeSimpleName?sort=true"
|
||||
object="?folderTreeSimpleNameSort" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#SpecialFolder"
|
||||
object="?specialFolder" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#BiffState"
|
||||
object="?biffState" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#IsServer"
|
||||
object="?isServer" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#NewMessages"
|
||||
object="?newMessages" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#HasUnreadMessages"
|
||||
object="?hasUnreadMessages" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#IsSecure"
|
||||
object="?isSecure" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#ServerType"
|
||||
object="?serverType" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#NoSelect"
|
||||
object="?noSelect" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#TotalUnreadMessages"
|
||||
object="?unreadCount" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#TotalMessages"
|
||||
object="?totalCount" />
|
||||
</bindings>
|
||||
|
||||
<action>
|
||||
<outlinerrow uri="?member">
|
||||
<outlinercell id="folderNameCell"
|
||||
ref="folderNameCol"
|
||||
label="?folderTreeName"
|
||||
properties="specialFolder-?specialFolder
|
||||
biffState-?biffState
|
||||
isServer-?isServer
|
||||
newMessages-?newMessages
|
||||
hasUnreadMessages-?hasUnreadMessages
|
||||
isSecure-?isSecure
|
||||
serverType-?serverType
|
||||
noSelect-?noSelect"/>
|
||||
<outlinercell ref="folderUnreadCol"
|
||||
label="?unreadCount"
|
||||
properties="hasUnreadMessages-?hasUnreadMessages"/>
|
||||
<outlinercell ref="folderTotalCol"
|
||||
label="?totalCount"
|
||||
properties="hasUnreadMessages-?hasUnreadMessages"/>
|
||||
</outlinerrow>
|
||||
</action>
|
||||
</rule>
|
||||
</template>
|
||||
</outlinerbody>
|
||||
<outlinercol id="folderNameCol"
|
||||
flex="5"
|
||||
label="&nameColumn.label;"
|
||||
class="outlinercol-header outlinercol-inset-header"
|
||||
persist="width"
|
||||
ignoreincolumnpicker="true"
|
||||
primary="true"
|
||||
sort="?folderTreeNameSort"/>
|
||||
<splitter class="tree-splitter"/>
|
||||
<outlinercol id="folderUnreadCol"
|
||||
class="outlinercol-header outlinercol-inset-header"
|
||||
persist="hidden width"
|
||||
flex="1"
|
||||
label="&unreadColumn.label;"/>
|
||||
<splitter class="tree-splitter"/>
|
||||
<outlinercol id="folderTotalCol"
|
||||
class="outlinercol-header outlinercol-inset-header"
|
||||
persist="hidden width"
|
||||
flex="1"
|
||||
label="&totalColumn.label;"/>
|
||||
</outliner>
|
||||
</overlay>
|
||||
|
@ -16,6 +16,10 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-2000 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributors(s):
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
*/
|
||||
|
||||
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
|
||||
@ -43,55 +47,54 @@ var FolderPaneController =
|
||||
|
||||
isCommandEnabled: function(command)
|
||||
{
|
||||
// dump("FolderPaneController.IsCommandEnabled(" + command + ")\n");
|
||||
switch ( command )
|
||||
{
|
||||
case "cmd_selectAll":
|
||||
case "cmd_cut":
|
||||
case "cmd_copy":
|
||||
case "cmd_paste":
|
||||
return false;
|
||||
case "cmd_delete":
|
||||
case "button_delete":
|
||||
if ( command == "cmd_delete" )
|
||||
goSetMenuValue(command, 'valueFolder');
|
||||
var folderTree = GetFolderTree();
|
||||
if ( folderTree && folderTree.selectedItems &&
|
||||
folderTree.selectedItems.length > 0)
|
||||
{
|
||||
var canDeleteThisFolder;
|
||||
var specialFolder = null;
|
||||
var isServer = null;
|
||||
var serverType = null;
|
||||
try {
|
||||
var selectedFolder = folderTree.selectedItems[0];
|
||||
specialFolder = selectedFolder.getAttribute('SpecialFolder');
|
||||
isServer = selectedFolder.getAttribute('IsServer');
|
||||
serverType = selectedFolder.getAttribute('ServerType');
|
||||
|
||||
if (serverType == "nntp") {
|
||||
if ( command == "cmd_delete" )
|
||||
{
|
||||
goSetMenuValue(command, 'valueNewsgroup');
|
||||
goSetAccessKey(command, 'valueNewsgroupAccessKey');
|
||||
// dump("FolderPaneController.IsCommandEnabled(" + command + ")\n");
|
||||
switch ( command )
|
||||
{
|
||||
case "cmd_selectAll":
|
||||
case "cmd_cut":
|
||||
case "cmd_copy":
|
||||
case "cmd_paste":
|
||||
return false;
|
||||
case "cmd_delete":
|
||||
case "button_delete":
|
||||
if ( command == "cmd_delete" )
|
||||
goSetMenuValue(command, 'valueFolder');
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
if (startIndex.value >= 0) {
|
||||
var canDeleteThisFolder;
|
||||
var specialFolder = null;
|
||||
var isServer = null;
|
||||
var serverType = null;
|
||||
try {
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
specialFolder = GetFolderAttribute(folderOutliner, folderResource, "SpecialFolder");
|
||||
isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer");
|
||||
serverType = GetFolderAttribute(folderOutliner, folderResource, "ServerType");
|
||||
if (serverType == "nntp") {
|
||||
if ( command == "cmd_delete" ) {
|
||||
goSetMenuValue(command, 'valueNewsgroup');
|
||||
goSetAccessKey(command, 'valueNewsgroupAccessKey');
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
//dump("specialFolder failure: " + ex + "\n");
|
||||
}
|
||||
if (specialFolder == "Inbox" || specialFolder == "Trash" || isServer == "true")
|
||||
canDeleteThisFolder = false;
|
||||
else
|
||||
canDeleteThisFolder = true;
|
||||
return canDeleteThisFolder && isCommandEnabled(command);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
//dump("specialFolder failure: " + ex + "\n");
|
||||
}
|
||||
if (specialFolder == "Inbox" || specialFolder == "Trash" || isServer == "true")
|
||||
canDeleteThisFolder = false;
|
||||
else
|
||||
canDeleteThisFolder = true;
|
||||
return canDeleteThisFolder && isCommandEnabled(command);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
else
|
||||
return false;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
doCommand: function(command)
|
||||
@ -395,7 +398,7 @@ var DefaultController =
|
||||
case "cmd_emptyTrash":
|
||||
return IsEmptyTrashEnabled();
|
||||
case "cmd_compactFolder":
|
||||
return IsCompactFolderEnabled();
|
||||
return IsCompactFolderEnabled();
|
||||
case "cmd_setFolderCharset":
|
||||
return IsFolderCharsetEnabled();
|
||||
case "cmd_close":
|
||||
@ -531,7 +534,7 @@ var DefaultController =
|
||||
return;
|
||||
case "cmd_sendUnsentMsgs":
|
||||
MsgSendUnsentMsgs();
|
||||
return
|
||||
return;
|
||||
case "cmd_openMessage":
|
||||
MsgOpenSelectedMessages();
|
||||
return;
|
||||
@ -658,7 +661,7 @@ function FocusRingUpdate_Mail()
|
||||
GetMessagePane().setAttribute("focusring","false");
|
||||
}
|
||||
|
||||
else if(currentFocusedElement==GetFolderTree()) {
|
||||
else if(currentFocusedElement==GetFolderOutliner()) {
|
||||
// XXX fix me
|
||||
GetThreadOutliner().setAttribute("focusring","false");
|
||||
GetMessagePane().setAttribute("focusring","false");
|
||||
@ -726,13 +729,13 @@ function WhichPaneHasFocus(){
|
||||
var whichPane= null;
|
||||
var currentNode = top.document.commandDispatcher.focusedElement;
|
||||
|
||||
var threadTree = GetThreadOutliner();
|
||||
var folderTree = GetFolderTree();
|
||||
var threadOutliner = GetThreadOutliner();
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var messagePane = GetMessagePane();
|
||||
|
||||
while (currentNode) {
|
||||
if (currentNode === threadTree ||
|
||||
currentNode === folderTree ||
|
||||
if (currentNode === threadOutliner ||
|
||||
currentNode === folderOutliner ||
|
||||
currentNode === messagePane)
|
||||
return currentNode;
|
||||
|
||||
@ -749,7 +752,7 @@ function SetupCommandUpdateHandlers()
|
||||
var widget;
|
||||
|
||||
// folder pane
|
||||
widget = GetFolderTree();
|
||||
widget = GetFolderOutliner();
|
||||
if ( widget )
|
||||
widget.controllers.appendController(FolderPaneController);
|
||||
|
||||
@ -761,17 +764,17 @@ function SetupCommandUpdateHandlers()
|
||||
top.controllers.insertControllerAt(0, DefaultController);
|
||||
}
|
||||
|
||||
function IsSendUnsentMsgsEnabled(folderNode)
|
||||
function IsSendUnsentMsgsEnabled(folderResource)
|
||||
{
|
||||
var identity;
|
||||
try {
|
||||
if (folderNode) {
|
||||
// if folderNode is non-null, it is
|
||||
// is the XULElement for the "Unsent Messages" folder
|
||||
if (folderResource) {
|
||||
// if folderResource is non-null, it is
|
||||
// resource for the "Unsent Messages" folder
|
||||
// we're here because we've done a right click on the "Unsent Messages"
|
||||
// folder (context menu)
|
||||
var folder = GetMsgFolderFromNode(folderNode);
|
||||
return (folder.getTotalMessages(false) > 0);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
return (msgFolder.getTotalMessages(false) > 0);
|
||||
}
|
||||
else {
|
||||
var folders = GetSelectedMsgFolders();
|
||||
@ -802,15 +805,16 @@ function IsSendUnsentMsgsEnabled(folderNode)
|
||||
}
|
||||
|
||||
function IsRenameFolderEnabled()
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
var folderList = tree.selectedItems;
|
||||
|
||||
if(folderList.length == 1)
|
||||
{
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var selection = folderOutliner.outlinerBoxObject.selection;
|
||||
if (selection.count == 1)
|
||||
{
|
||||
var canRename;
|
||||
var folderNode = folderList[0];
|
||||
canRename = (folderNode.getAttribute("CanRename") == "true");
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
selection.getRangeAt(0, startIndex, endIndex);
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
var canRename = GetFolderAttribute(folderOutliner, folderResource, "CanRename") == "true";
|
||||
return canRename && isCommandEnabled("cmd_renameFolder");
|
||||
}
|
||||
else
|
||||
@ -834,16 +838,18 @@ function IsViewNavigationItemEnabled()
|
||||
|
||||
function IsFolderSelected()
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
var folderList = tree.selectedItems;
|
||||
|
||||
if(folderList.length == 1)
|
||||
{
|
||||
var folderNode = folderList[0];
|
||||
return(folderNode.getAttribute("IsServer") != "true");
|
||||
}
|
||||
else
|
||||
return false;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var selection = folderOutliner.outlinerBoxObject.selection;
|
||||
if (selection.count == 1)
|
||||
{
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
selection.getRangeAt(0, startIndex, endIndex);
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
return GetFolderAttribute(folderOutliner, folderResource, "IsServer") != "true";
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
function IsFindEnabled()
|
||||
@ -853,49 +859,42 @@ function IsFindEnabled()
|
||||
|
||||
function MsgDeleteFolder()
|
||||
{
|
||||
//get the selected elements
|
||||
var tree = GetFolderTree();
|
||||
var folderList = tree.selectedItems;
|
||||
var i;
|
||||
var folder, parent;
|
||||
var specialFolder;
|
||||
for(i = 0; i < folderList.length; i++)
|
||||
{
|
||||
folder = folderList[i];
|
||||
folderuri = folder.getAttribute('id');
|
||||
specialFolder = folder.getAttribute('SpecialFolder');
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var selectedFolders = GetSelectedMsgFolders();
|
||||
for (var i = 0; i < selectedFolders.length; i++)
|
||||
{
|
||||
var selectedFolder = selectedFolders[i];
|
||||
var folderResource = selectedFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
var specialFolder = GetFolderAttribute(folderOutliner, folderResource, "SpecialFolder");
|
||||
if (specialFolder != "Inbox" && specialFolder != "Trash")
|
||||
{
|
||||
var msgfolder = GetMsgFolderFromURI(folderuri);
|
||||
var protocolInfo = Components.classes["@mozilla.org/messenger/protocol/info;1?type=" + msgfolder.server.type].getService(Components.interfaces.nsIMsgProtocolInfo);
|
||||
var protocolInfo = Components.classes["@mozilla.org/messenger/protocol/info;1?type=" + selectedFolder.server.type].getService(Components.interfaces.nsIMsgProtocolInfo);
|
||||
|
||||
// do not allow deletion of special folders on imap accounts
|
||||
if ((specialFolder == "Sent" ||
|
||||
specialFolder == "Drafts" ||
|
||||
specialFolder == "Templates") &&
|
||||
!protocolInfo.specialFoldersDeletionAllowed) {
|
||||
!protocolInfo.specialFoldersDeletionAllowed)
|
||||
{
|
||||
var errorMessage = gMessengerBundle.getFormattedString("specialFolderDeletionErr",
|
||||
[specialFolder]);
|
||||
var specialFolderDeletionErrTitle = gMessengerBundle.getString("specialFolderDeletionErrTitle");
|
||||
promptService.alert(window, specialFolderDeletionErrTitle, errorMessage);
|
||||
continue;
|
||||
}
|
||||
else if (isNewsURI(folderuri)) {
|
||||
var unsubscribe = ConfirmUnsubscribe(msgfolder);
|
||||
if (unsubscribe) {
|
||||
UnSubscribe(msgfolder);
|
||||
}
|
||||
else if (isNewsURI(folderResource.Value))
|
||||
{
|
||||
var unsubscribe = ConfirmUnsubscribe(selectedFolder);
|
||||
if (unsubscribe)
|
||||
UnSubscribe(selectedFolder);
|
||||
}
|
||||
else {
|
||||
parent = folder.parentNode.parentNode;
|
||||
var parenturi = parent.getAttribute('id');
|
||||
messenger.DeleteFolders(tree.database,
|
||||
parent.resource, folder.resource);
|
||||
else
|
||||
{
|
||||
var parentResource = selectedFolder.parent.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
messenger.DeleteFolders(GetFolderDatasource(), parentResource, folderResource);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 3pane related commands. Need to go in own file. Putting here for the moment.
|
||||
@ -949,40 +948,11 @@ function MsgViewAllMsgs()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function FillInFolderTooltip(cellNode)
|
||||
{
|
||||
var folderNode = cellNode.parentNode.parentNode;
|
||||
var uri = folderNode.getAttribute('id');
|
||||
var folderTree = GetFolderTree();
|
||||
|
||||
var name = GetFolderNameFromUri(uri, folderTree);
|
||||
|
||||
var folderResource = RDF.GetResource(uri);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var unreadCount = msgFolder.getNumUnread(false);
|
||||
if(unreadCount < 0)
|
||||
unreadCount = 0;
|
||||
|
||||
var totalCount = msgFolder.getTotalMessages(false);
|
||||
if(totalCount < 0)
|
||||
totalCount = 0;
|
||||
|
||||
var textNode = document.getElementById("foldertooltipText");
|
||||
var folderTooltip = name;
|
||||
if(!msgFolder.isServer)
|
||||
folderTooltip += " (" + unreadCount + "/" + totalCount +")";
|
||||
textNode.setAttribute('value', folderTooltip);
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
function GetFolderNameFromUri(uri, tree)
|
||||
function GetFolderNameFromUri(uri, outliner)
|
||||
{
|
||||
var folderResource = RDF.GetResource(uri);
|
||||
|
||||
var db = tree.database;
|
||||
var db = outliner.outlinerBoxObject.outlinerBody.database;
|
||||
|
||||
var nameProperty = RDF.GetResource('http://home.netscape.com/NC-rdf#Name');
|
||||
|
||||
@ -1029,7 +999,7 @@ function SwitchPaneFocus(direction)
|
||||
SetFocusMessagePane();
|
||||
}
|
||||
}
|
||||
else if(focusedElementId == "folderTree")
|
||||
else if(focusedElementId == "folderOutliner")
|
||||
{
|
||||
if (!(IsThreadAndMessagePaneSplitterCollapsed()))
|
||||
SetFocusMessagePane();
|
||||
@ -1081,7 +1051,7 @@ function SwitchPaneFocus(direction)
|
||||
SetFocusFolderPane();
|
||||
|
||||
}
|
||||
else if(focusedElementId == "folderTree")
|
||||
else if(focusedElementId == "folderOutliner")
|
||||
SetFocusThreadPane();
|
||||
}
|
||||
catch(e)
|
||||
@ -1095,23 +1065,20 @@ function SwitchPaneFocus(direction)
|
||||
|
||||
function SetFocusFolderPane()
|
||||
{
|
||||
var folderTree = GetFolderTree();
|
||||
folderTree.focus();
|
||||
return;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
folderOutliner.focus();
|
||||
}
|
||||
|
||||
function SetFocusThreadPane()
|
||||
{
|
||||
var threadTree = GetThreadOutliner();
|
||||
threadTree.focus();
|
||||
return;
|
||||
var threadOutliner = GetThreadOutliner();
|
||||
threadOutliner.focus();
|
||||
}
|
||||
|
||||
function SetFocusMessagePane()
|
||||
{
|
||||
var messagePaneFrame = GetMessagePaneFrame();
|
||||
messagePaneFrame.focus();
|
||||
return;
|
||||
var messagePaneFrame = GetMessagePaneFrame();
|
||||
messagePaneFrame.focus();
|
||||
}
|
||||
|
||||
function is_collapsed(element)
|
||||
|
@ -150,9 +150,8 @@ Rights Reserved.
|
||||
|
||||
<vbox flex="1">
|
||||
<hbox id="mail3PaneVertLayoutBox" persist="collapsed height" flex="1">
|
||||
<vbox flex="1" autostretch="always" persist="width">
|
||||
<sidebarheader type="box" class="sidebarheader-main" label="&mail-sidebar-header.label;"/>
|
||||
<tree id="folderTree" flex="1" style="width:0px;" context="folderPaneContext" persist="collapsed width"/>
|
||||
<vbox id="folderPaneBox" flex="1" autostretch="always" persist="width">
|
||||
<outliner id="folderOutliner" flex="1" style="width:0px;" context="folderPaneContext" persist="collapsed width"/>
|
||||
</vbox>
|
||||
<splitter id="gray_vertical_splitter" collapse="before" persist="state"/>
|
||||
|
||||
|
@ -18,6 +18,9 @@
|
||||
* Copyright (C) 2000 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributors(s):
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
* Hakan Waara <hwaara@chello.se>
|
||||
*/
|
||||
|
||||
//NOTE: gMessengerBundle must be defined and set or this Overlay won't work
|
||||
@ -48,8 +51,9 @@ function fillThreadPaneContextMenu()
|
||||
|
||||
ShowMenuItem("threadPaneContext-sep-reply", true);
|
||||
|
||||
SetupMoveMenuItem("threadPaneContext-moveMenu", numSelected, isNewsgroup, false);
|
||||
SetupCopyMessageUrlMenuItem("threadPaneContext-copyMessageUrl", numSelected, isNewsgroup, numSelected != 1);
|
||||
SetupCopyMenuItem("threadPaneContext-copyMenu", numSelected, false);
|
||||
SetupMoveMenuItem("threadPaneContext-moveMenu", numSelected, isNewsgroup, false);
|
||||
SetupSaveAsMenuItem("threadPaneContext-saveAs", numSelected, false);
|
||||
SetupPrintMenuItem("threadPaneContext-print", numSelected, false);
|
||||
SetupDeleteMenuItem("threadPaneContext-delete", numSelected, isNewsgroup, false);
|
||||
@ -110,6 +114,12 @@ function SetupMoveMenuItem(menuID, numSelected, isNewsgroup, forceHide)
|
||||
EnableMenuItem(menuID, (numSelected > 0));
|
||||
}
|
||||
|
||||
function SetupCopyMessageUrlMenuItem(menuID, numSelected, isNewsgroup, forceHide)
|
||||
{
|
||||
ShowMenuItem(menuID, isNewsgroup && !forceHide);
|
||||
EnableMenuItem(menuID, (numSelected > 0));
|
||||
}
|
||||
|
||||
function SetupCopyMenuItem(menuID, numSelected, forceHide)
|
||||
{
|
||||
ShowMenuItem(menuID, !forceHide);
|
||||
@ -163,21 +173,18 @@ function SetupAddAllToABMenuItem(menuID, numSelected, forceHide)
|
||||
|
||||
function fillFolderPaneContextMenu()
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
var selectedItems = tree.selectedItems;
|
||||
var numSelected = selectedItems.length;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
if (startIndex.value < 0)
|
||||
return;
|
||||
var numSelected = endIndex.value - startIndex.value + 1;
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
|
||||
var popupNode = document.getElementById('folderPaneContext');
|
||||
|
||||
var targetFolder = document.popupNode.parentNode.parentNode;
|
||||
if (targetFolder.getAttribute('selected') != 'true')
|
||||
{
|
||||
tree.selectItem(targetFolder);
|
||||
}
|
||||
|
||||
var isServer = targetFolder.getAttribute('IsServer') == 'true';
|
||||
var serverType = targetFolder.getAttribute('ServerType');
|
||||
var specialFolder = targetFolder.getAttribute('SpecialFolder');
|
||||
var isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer") == 'true';
|
||||
var serverType = GetFolderAttribute(folderOutliner, folderResource, "ServerType");
|
||||
var specialFolder = GetFolderAttribute(folderOutliner, folderResource, "SpecialFolder");
|
||||
var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap");
|
||||
var isNewsgroup = !isServer && serverType == 'nntp';
|
||||
var canGetMessages = (isServer && (serverType != "nntp") && (serverType !="none")) || isNewsgroup;
|
||||
@ -189,9 +196,9 @@ function fillFolderPaneContextMenu()
|
||||
ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1) && !isServer);
|
||||
EnableMenuItem("folderPaneContext-openNewWindow", (true));
|
||||
|
||||
SetupRenameMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
|
||||
SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
|
||||
SetupCompactMenuItem(targetFolder, numSelected);
|
||||
SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
|
||||
SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
|
||||
SetupCompactMenuItem(folderResource, numSelected);
|
||||
|
||||
ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash'));
|
||||
EnableMenuItem("folderPaneContext-emptyTrash", true);
|
||||
@ -199,12 +206,12 @@ function fillFolderPaneContextMenu()
|
||||
var showSendUnsentMessages = (numSelected <= 1) && (specialFolder == 'Unsent Messages');
|
||||
ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
|
||||
if (showSendUnsentMessages) {
|
||||
EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(targetFolder));
|
||||
EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(folderResource));
|
||||
}
|
||||
|
||||
ShowMenuItem("folderPaneContext-sep-edit", (numSelected <= 1));
|
||||
|
||||
SetupNewMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
|
||||
SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
|
||||
|
||||
ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder);
|
||||
EnableMenuItem("folderPaneContext-subscribe", true);
|
||||
@ -224,14 +231,15 @@ function fillFolderPaneContextMenu()
|
||||
return(true);
|
||||
}
|
||||
|
||||
function SetupRenameMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
|
||||
function SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
|
||||
{
|
||||
var isSpecialFolder = specialFolder != 'none';
|
||||
var isMail = serverType != 'nntp';
|
||||
var canRename = (targetFolder.getAttribute('CanRename') == "true");
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var canRename = GetFolderAttribute(folderOutliner, folderResource, "CanRename") == "true";
|
||||
|
||||
ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && !isServer && (specialFolder == "none") && canRename);
|
||||
var folder = GetMsgFolderFromNode(targetFolder);
|
||||
var folder = GetMsgFolderFromResource(folderResource);
|
||||
EnableMenuItem("folderPaneContext-rename", !isServer && folder.isCommandEnabled("cmd_renameFolder"));
|
||||
|
||||
if(canRename)
|
||||
@ -240,7 +248,7 @@ function SetupRenameMenuItem(targetFolder, numSelected, isServer, serverType, sp
|
||||
}
|
||||
}
|
||||
|
||||
function SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
|
||||
function SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
|
||||
{
|
||||
var isMail = serverType != 'nntp';
|
||||
var isSpecialFolder = specialFolder != "none";
|
||||
@ -251,7 +259,7 @@ function SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, sp
|
||||
ShowMenuItem("folderPaneContext-remove", showRemove);
|
||||
if(showRemove)
|
||||
{
|
||||
var folder = GetMsgFolderFromNode(targetFolder);
|
||||
var folder = GetMsgFolderFromResource(folderResource);
|
||||
EnableMenuItem("folderPaneContext-remove", folder.isCommandEnabled("cmd_delete"));
|
||||
}
|
||||
if(isMail && !isSpecialFolder)
|
||||
@ -260,11 +268,12 @@ function SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, sp
|
||||
}
|
||||
}
|
||||
|
||||
function SetupCompactMenuItem(targetFolder, numSelected)
|
||||
function SetupCompactMenuItem(folderResource, numSelected)
|
||||
{
|
||||
var canCompact = (targetFolder.getAttribute('CanCompact') == "true");
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var canCompact = GetFolderAttribute(folderOutliner, folderResource, "CanCompact") == "true";
|
||||
ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && canCompact);
|
||||
var folder = GetMsgFolderFromNode(targetFolder);
|
||||
var folder = GetMsgFolderFromResource(folderResource);
|
||||
EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder"));
|
||||
|
||||
if(canCompact)
|
||||
@ -273,9 +282,10 @@ function SetupCompactMenuItem(targetFolder, numSelected)
|
||||
}
|
||||
}
|
||||
|
||||
function SetupNewMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
|
||||
function SetupNewMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
|
||||
{
|
||||
var canCreateNew = targetFolder.getAttribute('CanCreateSubfolders') == 'true';
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var canCreateNew = GetFolderAttribute(folderOutliner, folderResource, "CanCreateSubfolders") == "true";
|
||||
var isInbox = specialFolder == "Inbox";
|
||||
|
||||
var showNew = ((numSelected <=1) && (serverType != 'nntp') && canCreateNew) || isInbox;
|
||||
@ -348,9 +358,9 @@ function fillMessagePaneContextMenu(contextMenu)
|
||||
SetupReplyToNewsgroupMenuItem("messagePaneContext-replyNewsgroup", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
|
||||
SetupReplyAllMenuItem("messagePaneContext-replyAll" , numSelected, (numSelected == 0 || hideMailItems));
|
||||
SetupForwardMenuItem("messagePaneContext-forward", numSelected, (numSelected == 0 || hideMailItems));
|
||||
SetupForwardAsAttachmentMenuItem("threadPaneContext-forwardAsAttachment", numSelected, hideMailItems);
|
||||
SetupMoveMenuItem("messagePaneContext-moveMenu", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
|
||||
SetupCopyMessageUrlMenuItem("messagePaneContext-copyMessageUrl", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
|
||||
SetupCopyMenuItem("messagePaneContext-copyMenu", numSelected, (numSelected == 0 || hideMailItems));
|
||||
SetupMoveMenuItem("messagePaneContext-moveMenu", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
|
||||
SetupSaveAsMenuItem("messagePaneContext-saveAs", numSelected, (numSelected == 0 || hideMailItems));
|
||||
SetupPrintMenuItem("messagePaneContext-print", numSelected, (numSelected == 0 || hideMailItems));
|
||||
SetupDeleteMenuItem("messagePaneContext-delete", numSelected, isNewsgroup, (numSelected == 0 || hideMailItems));
|
||||
@ -397,6 +407,7 @@ function ShowMessagePaneEditSeparator()
|
||||
{
|
||||
return (IsMenuItemShowing("messagePaneContext-moveMenu") ||
|
||||
IsMenuItemShowing("messagePaneContext-copyMenu") ||
|
||||
IsMenuItemShowing("messagePaneContext-copyMessageUrl") ||
|
||||
IsMenuItemShowing("messagePaneContext-saveAs") ||
|
||||
IsMenuItemShowing("messagePaneContext-print") ||
|
||||
IsMenuItemShowing("messagePaneContext-delete"));
|
||||
@ -440,3 +451,32 @@ function IsMenuItemShowingWithStyle(menuID)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function CopyMessageUrl()
|
||||
{
|
||||
try {
|
||||
var hdr = gDBView.hdrForFirstSelectedMessage;
|
||||
var server = hdr.folder.server;
|
||||
|
||||
var url;
|
||||
if (server.isSecure) {
|
||||
url = "snews://";
|
||||
}
|
||||
else {
|
||||
url = "news://"
|
||||
}
|
||||
url += server.hostName;
|
||||
url += ":";
|
||||
url += server.port;
|
||||
url += "/";
|
||||
url += hdr.messageId;
|
||||
|
||||
var contractid = "@mozilla.org/widget/clipboardhelper;1";
|
||||
var iid = Components.interfaces.nsIClipboardHelper;
|
||||
var clipboard = Components.classes[contractid].getService(iid);
|
||||
clipboard.copyString(url);
|
||||
}
|
||||
catch (ex) {
|
||||
dump("ex="+ex+"\n");
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,10 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributors(s):
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
*/
|
||||
|
||||
//This file stores variables common to mail windows
|
||||
@ -515,32 +519,32 @@ function HideAccountCentral()
|
||||
// prompt if offline.
|
||||
function OpenInboxForServer(server)
|
||||
{
|
||||
try {
|
||||
HideAccountCentral();
|
||||
OpenTwistyForServer(server);
|
||||
var inboxFolder = GetInboxFolder(server);
|
||||
var folderTree = GetFolderTree();
|
||||
var inboxFolderUri = document.getElementById(inboxFolder.URI);
|
||||
ChangeSelection(folderTree, inboxFolderUri);
|
||||
try {
|
||||
HideAccountCentral();
|
||||
OpenTwistyForServer(server);
|
||||
var inboxFolder = GetInboxFolder(server);
|
||||
var folderResource = RDF.GetResource(inboxFolder.URI)
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var folderIndex = GetFolderIndex(folderOutliner, folderResource);
|
||||
ChangeSelection(folderOutliner, folderIndex);
|
||||
|
||||
if(CheckOnline()) {
|
||||
GetMessagesForInboxOnServer(server);
|
||||
}
|
||||
else {
|
||||
var option = PromptGetMessagesOffline();
|
||||
if(option == 0) {
|
||||
if (!gOfflineManager)
|
||||
GetOfflineMgrService();
|
||||
if(CheckOnline())
|
||||
GetMessagesForInboxOnServer(server);
|
||||
else {
|
||||
var option = PromptGetMessagesOffline();
|
||||
if(option == 0) {
|
||||
if (!gOfflineManager)
|
||||
GetOfflineMgrService();
|
||||
|
||||
gOfflineManager.goOnline(false /* sendUnsentMessages */,
|
||||
false /* playbackOfflineImapOperations */,
|
||||
msgWindow);
|
||||
GetMessagesForInboxOnServer(server);
|
||||
}
|
||||
gOfflineManager.goOnline(false /* sendUnsentMessages */,
|
||||
false /* playbackOfflineImapOperations */,
|
||||
msgWindow);
|
||||
GetMessagesForInboxOnServer(server);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
dump("Error opening inbox for server -> " + ex + "\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
dump("Error opening inbox for server -> " + ex + "\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
* Contributors: timeless
|
||||
* slucy@objectivesw.co.uk
|
||||
* Håkan Waara <hwaara@chello.se>
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
*/
|
||||
|
||||
var gMessengerBundle;
|
||||
@ -1081,18 +1082,18 @@ function IsEmptyTrashEnabled()
|
||||
|
||||
function IsCompactFolderEnabled()
|
||||
{
|
||||
var folderTree = GetFolderTree();
|
||||
var selectedFolders = folderTree.selectedItems;
|
||||
var numFolders = selectedFolders.length;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
if (startIndex.value < 0)
|
||||
return false;
|
||||
|
||||
if (numFolders <= 0 )
|
||||
return false;
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
if (! folderResource)
|
||||
return false;
|
||||
|
||||
var folder = selectedFolders[0];
|
||||
if (!folder)
|
||||
return false;
|
||||
|
||||
return (folder.getAttribute('CanCompact') == "true" && isCommandEnabled("cmd_compactFolder"));
|
||||
return GetFolderAttribute(folderOutliner, folderResource, "CanCompact") == "true" && isCommandEnabled("cmd_compactFolder");
|
||||
}
|
||||
|
||||
var gDeleteButton = null;
|
||||
|
@ -321,6 +321,10 @@ Rights Reserved.
|
||||
accesskey="&contextEditAsNew.accesskey;"
|
||||
oncommand="MsgEditMessageAsNew();"/>
|
||||
<menuseparator id="threadPaneContext-sep-reply"/>
|
||||
<menuitem id="threadPaneContext-copyMessageUrl"
|
||||
label="©MessageLocation.label;"
|
||||
accesskey="©MessageLocation.accesskey;"
|
||||
oncommand="CopyMessageUrl()"/>
|
||||
<menu id="threadPaneContext-moveMenu"
|
||||
label="&contextMoveMsgMenu.label;"
|
||||
accesskey="&contextMoveMsgMenu.accesskey;"
|
||||
@ -566,6 +570,10 @@ Rights Reserved.
|
||||
accesskey="&contextEditAsNew.accesskey;"
|
||||
oncommand="MsgEditMessageAsNew();"/>
|
||||
<menuseparator id="messagePaneContext-sep-reply"/>
|
||||
<menuitem id="messagePaneContext-copyMessageUrl"
|
||||
label="©MessageLocation.label;"
|
||||
accesskey="©MessageLocation.accesskey;"
|
||||
oncommand="CopyMessageUrl()"/>
|
||||
<menu id="messagePaneContext-moveMenu"
|
||||
label="&contextMoveMsgMenu.label;"
|
||||
accesskey="&contextMoveMsgMenu.accesskey;"
|
||||
|
@ -29,6 +29,7 @@ var gCurrentMessageUri;
|
||||
var gCurrentFolderUri;
|
||||
var gThreadPaneCommandUpdater = null;
|
||||
var gCurrentMessageIsDeleted = false;
|
||||
var gNextMessageViewIndexAfterDelete = -1;
|
||||
|
||||
// the folderListener object
|
||||
var folderListener = {
|
||||
|
@ -148,8 +148,7 @@ Rights Reserved.
|
||||
|
||||
<hbox style="height:100px" flex="1">
|
||||
<vbox id="sidebar-box">
|
||||
<sidebarheader type="box" class="sidebarheader-main" label="&mail-sidebar-header.label;"/>
|
||||
<tree id="folderTree" flex="1000" context="folderPaneContext" />
|
||||
<outliner id="folderOutliner" flex="1" context="folderPaneContext"/>
|
||||
</vbox>
|
||||
|
||||
<splitter id="sidebar-splitter"/>
|
||||
|
@ -18,326 +18,229 @@
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* disttsc@bart.nl
|
||||
* jarrod.k.gray@rose-hulman.edu
|
||||
* disttsc@bart.nl
|
||||
* jarrod.k.gray@rose-hulman.edu
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
*/
|
||||
|
||||
// cache these services
|
||||
var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService().QueryInterface(Components.interfaces.nsIRDFService);
|
||||
var dragService = Components.classes["@mozilla.org/widget/dragservice;1"].getService().QueryInterface(Components.interfaces.nsIDragService);
|
||||
var nsIDragService = Components.interfaces.nsIDragService;
|
||||
var gSrcCanRename;
|
||||
|
||||
function debugDump(msg)
|
||||
{
|
||||
// uncomment for noise
|
||||
// dump(msg+"\n");
|
||||
//dump(msg+"\n");
|
||||
}
|
||||
|
||||
function DragOverTree(event)
|
||||
function CanDropOnFolderOutliner(index)
|
||||
{
|
||||
if (event.target.localName != "treecell" &&
|
||||
event.target.localName != "treeitem") {
|
||||
event.preventBubble();
|
||||
return false;
|
||||
}
|
||||
|
||||
var dragSession = null;
|
||||
var dragFolder = false;
|
||||
var flavor =false;
|
||||
var flavor = false;
|
||||
|
||||
dragSession = dragService.getCurrentSession();
|
||||
if ( !dragSession ) return(false);
|
||||
|
||||
if ( dragSession.isDataFlavorSupported("text/nsmessageOrfolder") ) flavor = true;
|
||||
if (! dragSession)
|
||||
return false;
|
||||
|
||||
var treeItem = event.target.parentNode.parentNode;
|
||||
if (!treeItem) return(false);
|
||||
if (dragSession.isDataFlavorSupported("text/nsmessageOrfolder"))
|
||||
flavor = true;
|
||||
|
||||
var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
|
||||
if ( !trans ) return(false);
|
||||
|
||||
var targetID = treeItem.getAttribute("id");
|
||||
var targetNode = RDF.GetResource(targetID, true);
|
||||
if (!targetNode) return(false);
|
||||
var targetFolder = targetNode.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
if (! trans)
|
||||
return false;
|
||||
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var targetResource = GetFolderResource(folderOutliner, index);
|
||||
var targetUri = targetResource.Value;
|
||||
var targetFolder = targetResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var targetServer = targetFolder.server;
|
||||
var sourceServer;
|
||||
|
||||
trans.addDataFlavor("text/nsmessageOrfolder");
|
||||
|
||||
for ( var i = 0; i < dragSession.numDropItems; ++i )
|
||||
for (var i = 0; i < dragSession.numDropItems; i++)
|
||||
{
|
||||
dragSession.getData ( trans, i );
|
||||
var dataObj = new Object();
|
||||
var bestFlavor = new Object();
|
||||
var len = new Object();
|
||||
try
|
||||
{
|
||||
trans.getAnyTransferData ( bestFlavor, dataObj, len );
|
||||
}
|
||||
catch (ex)
|
||||
{
|
||||
continue; //no data so continue;
|
||||
}
|
||||
if ( dataObj ) dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
if ( !dataObj ) continue;
|
||||
dragSession.getData (trans, i);
|
||||
var dataObj = new Object();
|
||||
var bestFlavor = new Object();
|
||||
var len = new Object();
|
||||
try
|
||||
{
|
||||
trans.getAnyTransferData ( bestFlavor, dataObj, len );
|
||||
}
|
||||
catch (ex)
|
||||
{
|
||||
continue; //no data so continue;
|
||||
}
|
||||
if (dataObj)
|
||||
dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
if (! dataObj)
|
||||
continue;
|
||||
|
||||
// pull the URL out of the data object
|
||||
var sourceID = dataObj.data.substring(0, len.value);
|
||||
if (!sourceID) continue;
|
||||
// pull the URL out of the data object
|
||||
var sourceUri = dataObj.data.substring(0, len.value);
|
||||
if (! sourceUri)
|
||||
continue;
|
||||
|
||||
var sourceNode;
|
||||
try
|
||||
{
|
||||
sourceNode = RDF.GetResource(sourceID, true);
|
||||
var folder = sourceNode.QueryInterface(Components.interfaces.nsIFolder);
|
||||
if (folder)
|
||||
dragFolder = true;
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
sourceNode = null;
|
||||
var isServer = treeItem.getAttribute("IsServer");
|
||||
if (isServer == "true")
|
||||
{
|
||||
debugDump("***isServer == true\n");
|
||||
return(false);
|
||||
}
|
||||
var canFileMessages = treeItem.getAttribute("CanFileMessages");
|
||||
if (canFileMessages != "true")
|
||||
{
|
||||
debugDump("***canFileMessages == false\n");
|
||||
return(false);
|
||||
}
|
||||
var noSelect = treeItem.getAttribute("NoSelect");
|
||||
if (noSelect == "true")
|
||||
{
|
||||
debugDump("***NoSelect == true\n");
|
||||
return(false);
|
||||
}
|
||||
var hdr = messenger.messageServiceFromURI(sourceID).messageURIToMsgHdr(sourceID);
|
||||
if (hdr.folder == targetFolder)
|
||||
return (false);
|
||||
break;
|
||||
}
|
||||
var sourceResource;
|
||||
try
|
||||
{
|
||||
sourceResource = RDF.GetResource(sourceUri, true);
|
||||
var folder = sourceResource.QueryInterface(Components.interfaces.nsIFolder);
|
||||
if (folder)
|
||||
dragFolder = true;
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
sourceResource = null;
|
||||
var isServer = GetFolderAttribute(folderOutliner, targetResource, "IsServer");
|
||||
if (isServer == "true")
|
||||
{
|
||||
debugDump("***isServer == true\n");
|
||||
return false;
|
||||
}
|
||||
var canFileMessages = GetFolderAttribute(folderOutliner, targetResource, "CanFileMessages");
|
||||
if (canFileMessages != "true")
|
||||
{
|
||||
debugDump("***canFileMessages == false\n");
|
||||
return false;
|
||||
}
|
||||
var noSelect = GetFolderAttribute(folderOutliner, targetResource, "NoSelect");
|
||||
if (noSelect == "true")
|
||||
{
|
||||
debugDump("***NoSelect == true\n");
|
||||
return false;
|
||||
}
|
||||
var hdr = messenger.messageServiceFromURI(sourceUri).messageURIToMsgHdr(sourceUri);
|
||||
if (hdr.folder == targetFolder)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
// we should only get here if we are dragging and dropping folders
|
||||
var sourceResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
var sourceFolder = sourceResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
sourceServer = sourceFolder.server;
|
||||
// we should only get here if we are dragging and dropping folders
|
||||
var sourceResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
var sourceFolder = sourceResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
sourceServer = sourceFolder.server;
|
||||
|
||||
if (targetID == sourceID)
|
||||
return (false);
|
||||
if (targetUri == sourceUri)
|
||||
return false;
|
||||
|
||||
if (sourceServer != targetServer && targetServer.type == "imap") //don't allow drop on different imap servers.
|
||||
return (false);
|
||||
|
||||
if (targetFolder.URI == sourceFolder.parent.URI) //don't allow immediate child to be dropped to it's parent
|
||||
{
|
||||
debugDump(targetFolder.URI + "\n");
|
||||
debugDump(sourceFolder.parent.URI + "\n");
|
||||
return (false);
|
||||
}
|
||||
|
||||
var isAncestor = sourceFolder.isAncestorOf(targetFolder);
|
||||
if (isAncestor) // don't allow parent to be dropped on its ancestors
|
||||
return (false);
|
||||
|
||||
//don't allow drop on different imap servers.
|
||||
if (sourceServer != targetServer && targetServer.type == "imap")
|
||||
return false;
|
||||
|
||||
//don't allow immediate child to be dropped to it's parent
|
||||
if (targetFolder.URI == sourceFolder.parent.URI)
|
||||
{
|
||||
debugDump(targetFolder.URI + "\n");
|
||||
debugDump(sourceFolder.parent.URI + "\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
var isAncestor = sourceFolder.isAncestorOf(targetFolder);
|
||||
// don't allow parent to be dropped on its ancestors
|
||||
if (isAncestor)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dragFolder)
|
||||
{
|
||||
debugDump("***isFolderFlavor == true \n"); //first check these conditions then proceed further
|
||||
|
||||
if (dragSession.dragAction == nsIDragService.DRAGDROP_ACTION_COPY) //no copy for folder drag
|
||||
return(false);
|
||||
//first check these conditions then proceed further
|
||||
debugDump("***isFolderFlavor == true \n");
|
||||
|
||||
var canCreateSubfolders = treeItem.getAttribute('CanCreateSubfolders');
|
||||
if ( canCreateSubfolders == "false") // if cannot create subfolders then a folder cannot be dropped here
|
||||
{
|
||||
debugDump("***canCreateSubfolders == false \n");
|
||||
return(false);
|
||||
}
|
||||
var serverType = treeItem.getAttribute('ServerType');
|
||||
// no copy for folder drag
|
||||
if (dragSession.dragAction == nsIDragService.DRAGDROP_ACTION_COPY)
|
||||
return false;
|
||||
|
||||
// if we've got a folder that can't be renamed
|
||||
// allow us to drop it if we plan on dropping it on "Local Folders"
|
||||
// (but not within the same server, to prevent renaming folders on "Local Folders" that
|
||||
// should not be renamed)
|
||||
if (gSrcCanRename == "false") {
|
||||
if (sourceServer == targetServer) {
|
||||
return(false);
|
||||
}
|
||||
if (serverType != "none") {
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
var canCreateSubfolders = GetFolderAttribute(folderOutliner, targetResource, "CanCreateSubfolders");
|
||||
// if cannot create subfolders then a folder cannot be dropped here
|
||||
if (canCreateSubfolders == "false")
|
||||
{
|
||||
debugDump("***canCreateSubfolders == false \n");
|
||||
return false;
|
||||
}
|
||||
var serverType = GetFolderAttribute(folderOutliner, targetResource, "ServerType");
|
||||
|
||||
// if we've got a folder that can't be renamed
|
||||
// allow us to drop it if we plan on dropping it on "Local Folders"
|
||||
// (but not within the same server, to prevent renaming folders on "Local Folders" that
|
||||
// should not be renamed)
|
||||
var srcCanRename = GetFolderAttribute(folderOutliner, sourceResource, "CanRename");
|
||||
if (srcCanRename == "false") {
|
||||
if (sourceServer == targetServer)
|
||||
return false;
|
||||
if (serverType != "none")
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//XXX other flavors here...
|
||||
|
||||
// touch the attribute on the treeItem to trigger the repaint with the drop feedback
|
||||
// (recall that it is two levels above the target, which is a treeCell).
|
||||
//XXX this is really slow and likes to refresh N times per second.
|
||||
if (flavor) //message or folder
|
||||
//message or folder
|
||||
if (flavor)
|
||||
{
|
||||
event.target.parentNode.parentNode.setAttribute ( "dd-triggerrepaint", 0 );
|
||||
dragSession.canDrop = true;
|
||||
event.preventBubble(); // do not propagate message
|
||||
return true;
|
||||
dragSession.canDrop = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function BeginDragTree(event, tree, flavor)
|
||||
function CanDropBeforeAfterFolderOutliner(index, before)
|
||||
{
|
||||
if ( event.target == tree )
|
||||
return(true); // continue propagating the event
|
||||
|
||||
var treeItem = event.target.parentNode.parentNode;
|
||||
if (!treeItem) return(false);
|
||||
|
||||
var childWithDatabase = tree;
|
||||
if ( ! childWithDatabase )
|
||||
return(false);
|
||||
|
||||
var database = childWithDatabase.database;
|
||||
if ((!RDF) || (!database)) { debugDump("CAN'T GET DATABASE\n"); return(false); }
|
||||
|
||||
var dragStarted = false;
|
||||
|
||||
var transArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
|
||||
if ( !transArray ) return(false);
|
||||
|
||||
var selArray = tree.selectedItems;
|
||||
var count = selArray.length;
|
||||
debugDump("selArray.length = " + count + "\n");
|
||||
for ( var i = 0; i < count; ++i )
|
||||
{
|
||||
|
||||
var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
|
||||
if ( !trans ) return(false);
|
||||
|
||||
var genTextData = Components.classes["@mozilla.org/supports-wstring;1"].createInstance(Components.interfaces.nsISupportsWString);
|
||||
if (!genTextData) return(false);
|
||||
|
||||
trans.addDataFlavor(flavor);
|
||||
|
||||
// get id (url)
|
||||
var id = selArray[i].getAttribute("id");
|
||||
genTextData.data = id;
|
||||
debugDump(" ID #" + i + " = " + id + "\n");
|
||||
|
||||
trans.setTransferData ( flavor, genTextData, id.length * 2 ); // doublebyte byte data
|
||||
|
||||
// put it into the transferable as an |nsISupports|
|
||||
var genTrans = trans.QueryInterface(Components.interfaces.nsISupports);
|
||||
transArray.AppendElement(genTrans);
|
||||
}
|
||||
|
||||
dragService.invokeDragSession ( event.target, transArray, null, nsIDragService.DRAGDROP_ACTION_COPY +
|
||||
nsIDragService.DRAGDROP_ACTION_MOVE );
|
||||
|
||||
dragStarted = true;
|
||||
|
||||
return(!dragStarted); // don't propagate the event if a drag has begun
|
||||
return false;
|
||||
}
|
||||
|
||||
function BeginDragFolderTree(event)
|
||||
function DropOnFolderOutliner(row, orientation)
|
||||
{
|
||||
debugDump("BeginDragFolderTree\n");
|
||||
if (event.target.localName != "treecell" &&
|
||||
event.target.localName != "treeitem")
|
||||
return false;
|
||||
if (orientation != Components.interfaces.nsIOutlinerView.inDropOn)
|
||||
return;
|
||||
|
||||
var tree = GetFolderTree();
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var targetResource = GetFolderResource(folderOutliner, row);
|
||||
|
||||
var treeItem = event.target.parentNode.parentNode;
|
||||
if (!treeItem) return(false);
|
||||
var targetUri = targetResource.Value;
|
||||
debugDump("***targetUri = " + targetUri + "\n");
|
||||
|
||||
if (treeItem.getAttribute('IsServer') == "true")
|
||||
return false;
|
||||
gSrcCanRename = treeItem.getAttribute('CanRename'); //used in DragOverTree
|
||||
|
||||
var serverType = treeItem.getAttribute('ServerType') // do not allow the drag when news is the source
|
||||
if ( serverType == "nntp")
|
||||
{
|
||||
debugDump("***serverType == nntp \n");
|
||||
return(false);
|
||||
}
|
||||
|
||||
return BeginDragTree(event, tree, "text/nsmessageOrfolder");
|
||||
|
||||
}
|
||||
|
||||
function DropOnFolderTree(event)
|
||||
{
|
||||
debugDump("DropOnTree\n");
|
||||
|
||||
var treeRoot = GetFolderTree();
|
||||
if (!treeRoot) return(false);
|
||||
var treeDatabase = treeRoot.database;
|
||||
if (!treeDatabase) return(false);
|
||||
|
||||
// target is the <treecell>, and "id" is on the <treeitem> two levels above
|
||||
var treeItem = event.target.parentNode.parentNode;
|
||||
if (!treeItem) return(false);
|
||||
|
||||
// drop action is always "on" not "before" or "after"
|
||||
// get drop hint attributes
|
||||
var dropBefore = treeItem.getAttribute("dd-droplocation");
|
||||
var dropOn = treeItem.getAttribute("dd-dropon");
|
||||
|
||||
var dropAction;
|
||||
if (dropOn == "true")
|
||||
dropAction = "on";
|
||||
else
|
||||
return(false);
|
||||
|
||||
var targetID = treeItem.getAttribute("id");
|
||||
if (!targetID) return(false);
|
||||
|
||||
debugDump("***targetID = " + targetID + "\n");
|
||||
|
||||
//make sure target is a folder
|
||||
var dragSession = dragService.getCurrentSession();
|
||||
if ( !dragSession ) return(false);
|
||||
if (! dragSession )
|
||||
return;
|
||||
|
||||
var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
|
||||
if ( !trans ) return(false);
|
||||
trans.addDataFlavor("text/nsmessageOrfolder");
|
||||
|
||||
var list = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
|
||||
|
||||
var dropMessage = true;
|
||||
var sourceNode;
|
||||
var sourceUri;
|
||||
var sourceResource;
|
||||
var sourceFolder;
|
||||
var sourceServer;
|
||||
|
||||
trans.addDataFlavor("text/nsmessageOrfolder");
|
||||
|
||||
for ( var i = 0; i < dragSession.numDropItems; ++i )
|
||||
for (var i = 0; i < dragSession.numDropItems; i++)
|
||||
{
|
||||
dragSession.getData ( trans, i );
|
||||
dragSession.getData (trans, i);
|
||||
var dataObj = new Object();
|
||||
var bestFlavor = new Object();
|
||||
var len = new Object();
|
||||
trans.getAnyTransferData ( bestFlavor, dataObj, len );
|
||||
if ( dataObj ) dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
if ( !dataObj ) continue;
|
||||
trans.getAnyTransferData(bestFlavor, dataObj, len);
|
||||
if (dataObj)
|
||||
dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
if (! dataObj)
|
||||
continue;
|
||||
|
||||
// pull the URL out of the data object
|
||||
var sourceID = dataObj.data.substring(0, len.value);
|
||||
if (!sourceID) continue;
|
||||
sourceUri = dataObj.data.substring(0, len.value);
|
||||
if (! sourceUri)
|
||||
continue;
|
||||
|
||||
debugDump(" Node #" + i + ": drop '" + sourceID + "' " + dropAction + " '" + targetID + "'\n");
|
||||
debugDump(" Node #" + i + ": drop " + sourceUri + " to " + targetUri + "\n");
|
||||
|
||||
sourceNode = RDF.GetResource(sourceID, true);
|
||||
sourceResource = RDF.GetResource(sourceUri, true);
|
||||
// only do this for the first object, either they are all messages or they are all folders
|
||||
if (i == 0) {
|
||||
try {
|
||||
sourceFolder = sourceNode.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
sourceFolder = sourceResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
if (sourceFolder) {
|
||||
// we are dropping a folder
|
||||
dropMessage = false;
|
||||
@ -351,105 +254,110 @@ function DropOnFolderTree(event)
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!dropMessage) {
|
||||
if (! dropMessage)
|
||||
dump("drag and drop of multiple folders isn't supported\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (dropMessage) {
|
||||
// from the message uri, get the appropriate messenger service
|
||||
// and then from that service, get the msgDbHdr
|
||||
list.AppendElement(messenger.messageServiceFromURI(sourceID).messageURIToMsgHdr(sourceID));
|
||||
// from the message uri, get the appropriate messenger service
|
||||
// and then from that service, get the msgDbHdr
|
||||
list.AppendElement(messenger.messageServiceFromURI(sourceUri).messageURIToMsgHdr(sourceUri));
|
||||
}
|
||||
else {
|
||||
// Prevent dropping of a node before, after, or on itself
|
||||
if (sourceNode == targetNode)
|
||||
continue;
|
||||
// Prevent dropping of a node before, after, or on itself
|
||||
if (sourceResource == targetResource)
|
||||
continue;
|
||||
|
||||
list.AppendElement(sourceNode);
|
||||
list.AppendElement(sourceResource);
|
||||
}
|
||||
}
|
||||
|
||||
if (list.Count() < 1)
|
||||
return false;
|
||||
return false;
|
||||
|
||||
var isSourceNews = false;
|
||||
isSourceNews = isNewsURI(sourceID);
|
||||
isSourceNews = isNewsURI(sourceUri);
|
||||
|
||||
var targetNode = RDF.GetResource(targetID, true);
|
||||
if (!targetNode) return(false);
|
||||
var targetFolder = targetNode.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var targetFolder = targetResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var targetServer = targetFolder.server;
|
||||
|
||||
if (dropMessage) {
|
||||
// fix this, to get the folder from the sourceID. this won't work with multiple 3 panes
|
||||
// fix this, to get the folder from the sourceUri. this won't work with multiple 3 panes
|
||||
sourceFolder = GetThreadPaneFolder();
|
||||
sourceServer = sourceFolder.server;
|
||||
|
||||
try {
|
||||
if (isSourceNews) {
|
||||
// news to pop or imap is always a copy
|
||||
messenger.CopyMessages(sourceFolder, targetFolder, list, false);
|
||||
}
|
||||
else {
|
||||
// fix this, will not work for multiple 3 panes
|
||||
if (dragSession.dragAction == nsIDragService.DRAGDROP_ACTION_MOVE) {
|
||||
SetNextMessageAfterDelete();
|
||||
if (isSourceNews) {
|
||||
// news to pop or imap is always a copy
|
||||
messenger.CopyMessages(sourceFolder, targetFolder, list, false);
|
||||
}
|
||||
else {
|
||||
// fix this, will not work for multiple 3 panes
|
||||
if (dragSession.dragAction == nsIDragService.DRAGDROP_ACTION_MOVE)
|
||||
SetNextMessageAfterDelete();
|
||||
var dragAction = dragSession.dragAction;
|
||||
if (dragAction == nsIDragService.DRAGDROP_ACTION_COPY)
|
||||
messenger.CopyMessages(sourceFolder, targetFolder, list, false);
|
||||
else if (dragAction == nsIDragService.DRAGDROP_ACTION_MOVE)
|
||||
messenger.CopyMessages(sourceFolder, targetFolder, list, true);
|
||||
}
|
||||
var dragAction = dragSession.dragAction;
|
||||
if (dragAction == nsIDragService.DRAGDROP_ACTION_COPY)
|
||||
messenger.CopyMessages(sourceFolder, targetFolder, list, false);
|
||||
else if (dragAction == nsIDragService.DRAGDROP_ACTION_MOVE)
|
||||
messenger.CopyMessages(sourceFolder, targetFolder, list, true);
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
dump("failed to copy messages: " + ex + "\n");
|
||||
dump("failed to copy messages: " + ex + "\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
sourceServer = sourceFolder.server;
|
||||
try
|
||||
{
|
||||
messenger.CopyFolders(treeDatabase,targetNode,list,(sourceServer == targetServer));
|
||||
messenger.CopyFolders(GetFolderDatasource(), targetResource, list, (sourceServer == targetServer));
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
dump ("Exception : CopyFolder " + ex + "\n");
|
||||
dump ("Exception : CopyFolders " + ex + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
return(false);
|
||||
}
|
||||
|
||||
function DropOnThreadPane(event)
|
||||
function BeginDragFolderOutliner(event)
|
||||
{
|
||||
debugDump("DropOnThreadPane()\n");
|
||||
/* you can't drop on the thread pane */
|
||||
return false;
|
||||
debugDump("BeginDragFolderOutliner\n");
|
||||
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var row = {};
|
||||
var col = {};
|
||||
var elt = {};
|
||||
folderOutliner.outlinerBoxObject.getCellAt(event.clientX, event.clientY, row, col, elt);
|
||||
var folderResource = GetFolderResource(folderOutliner, row.value);
|
||||
|
||||
if (GetFolderAttribute(folderOutliner, folderResource, "IsServer") == "true")
|
||||
{
|
||||
debugDump("***IsServer == true\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// do not allow the drag when news is the source
|
||||
if (GetFolderAttribute(folderOutliner, folderResource, "ServerType") == "nntp")
|
||||
{
|
||||
debugDump("***ServerType == nntp\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
var selectedFolders = GetSelectedFolders();
|
||||
return BeginDragOutliner(event, folderOutliner, selectedFolders, "text/nsmessageOrfolder");
|
||||
}
|
||||
|
||||
function BeginDragThreadPane(event)
|
||||
{
|
||||
debugDump("BeginDragThreadPane\n");
|
||||
debugDump("event.target.localName = " + event.target.localName + "\n");
|
||||
if (event.target.localName != "outlinerbody") return false;
|
||||
debugDump("BeginDragThreadPane\n");
|
||||
|
||||
var outliner = GetThreadOutliner();
|
||||
|
||||
return BeginDragOutliner(event, outliner, "text/nsmessageOrfolder");
|
||||
var threadOutliner = GetThreadOutliner();
|
||||
var selectedMessages = GetSelectedMessages();
|
||||
return BeginDragOutliner(event, threadOutliner, selectedMessages, "text/nsmessageOrfolder");
|
||||
}
|
||||
|
||||
function BeginDragOutliner(event, outliner, flavor)
|
||||
function BeginDragOutliner(event, outliner, selArray, flavor)
|
||||
{
|
||||
if (event.target == outliner) {
|
||||
return(true); // continue propagating the event
|
||||
}
|
||||
|
||||
if (!outliner) {
|
||||
return(false);
|
||||
}
|
||||
|
||||
var dragStarted = false;
|
||||
|
||||
var transArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
|
||||
@ -460,8 +368,8 @@ function BeginDragOutliner(event, outliner, flavor)
|
||||
try {
|
||||
region = Components.classesByID["{da5b130a-1dd1-11b2-ad47-f455b1814a78}"].createInstance(Components.interfaces.nsIScriptableRegion);
|
||||
region.init();
|
||||
var bo = document.getElementById("threadOutlinerBody").boxObject.QueryInterface(Components.interfaces.nsIBoxObject);
|
||||
var obo = outliner.boxObject.QueryInterface(Components.interfaces.nsIOutlinerBoxObject);
|
||||
var obo = outliner.outlinerBoxObject;
|
||||
var bo = obo.outlinerBody.boxObject;
|
||||
var obosel= obo.selection;
|
||||
|
||||
var rowX = bo.x;
|
||||
@ -484,7 +392,6 @@ function BeginDragOutliner(event, outliner, flavor)
|
||||
region = null;
|
||||
}
|
||||
|
||||
var selArray = GetSelectedMessages();
|
||||
var count = selArray.length;
|
||||
debugDump("selArray.length = " + count + "\n");
|
||||
for (i = 0; i < count; ++i ) {
|
||||
|
@ -16,17 +16,22 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Jan Varga (varga@utcru.sk)
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
*/
|
||||
|
||||
/* This is where functions related to the 3 pane window are kept */
|
||||
|
||||
const MSG_FOLDER_FLAG_ELIDED = 0x0010;
|
||||
|
||||
var showPerformance = false;
|
||||
|
||||
var gFolderTree;
|
||||
var gThreadOutliner;
|
||||
var gFolderOutliner;
|
||||
var gMessagePane;
|
||||
var gMessagePaneFrame;
|
||||
var gThreadOutliner;
|
||||
|
||||
var gThreadAndMessagePaneSplitter = null;
|
||||
var gUnreadCount = null;
|
||||
@ -172,11 +177,63 @@ var folderListener = {
|
||||
else if (eventType == "DeleteOrMoveMsgFailed") {
|
||||
HandleDeleteOrMoveMsgFailed(folder);
|
||||
}
|
||||
|
||||
else if (eventType == "CompactCompleted") {
|
||||
HandleCompactCompleted(folder);
|
||||
HandleCompactCompleted(folder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var folderObserver = {
|
||||
canDropOn: function(index)
|
||||
{
|
||||
return CanDropOnFolderOutliner(index);
|
||||
},
|
||||
|
||||
canDropBeforeAfter: function(index, before)
|
||||
{
|
||||
return CanDropBeforeAfterFolderOutliner(index, before);
|
||||
},
|
||||
|
||||
onDrop: function(row, orientation)
|
||||
{
|
||||
DropOnFolderOutliner(row, orientation);
|
||||
},
|
||||
|
||||
onToggleOpenState: function()
|
||||
{
|
||||
},
|
||||
|
||||
onCycleHeader: function(colID, elt)
|
||||
{
|
||||
},
|
||||
|
||||
onCycleCell: function(row, colID)
|
||||
{
|
||||
},
|
||||
|
||||
onSelectionChanged: function()
|
||||
{
|
||||
},
|
||||
|
||||
isEditable: function(row, colID)
|
||||
{
|
||||
return false;
|
||||
},
|
||||
|
||||
onSetCellText: function(row, colID, value)
|
||||
{
|
||||
},
|
||||
|
||||
onPerformAction: function(action)
|
||||
{
|
||||
},
|
||||
|
||||
onPerformActionOnRow: function(action, row)
|
||||
{
|
||||
},
|
||||
|
||||
onPerformActionOnCell: function(action, row, colID)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@ -242,7 +299,6 @@ function HandleDeleteOrMoveMsgCompleted(folder)
|
||||
|
||||
function HandleCompactCompleted (folder)
|
||||
{
|
||||
dump ("Compact Completed \n\n");
|
||||
if(folder)
|
||||
{
|
||||
var resource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
@ -312,14 +368,14 @@ function OnLoadMessenger()
|
||||
|
||||
HideAccountCentral();
|
||||
loadStartPage();
|
||||
InitMsgWindow();
|
||||
InitMsgWindow();
|
||||
|
||||
messenger.SetWindow(window, msgWindow);
|
||||
messenger.SetWindow(window, msgWindow);
|
||||
|
||||
InitializeDataSources();
|
||||
InitPanes();
|
||||
InitializeDataSources();
|
||||
InitPanes();
|
||||
|
||||
accountManager.SetSpecialFoldersForIdentities();
|
||||
accountManager.SetSpecialFoldersForIdentities();
|
||||
|
||||
AddToSession();
|
||||
//need to add to session before trying to load start folder otherwise listeners aren't
|
||||
@ -383,7 +439,6 @@ function OnLoadMessenger()
|
||||
var timeToLoad = (afterLoadMessenger.getTime() - beforeLoadMessenger.getTime())/1000;
|
||||
dump("Time in OnLoadMessger is " + timeToLoad + " seconds\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function OnUnloadMessenger()
|
||||
@ -395,50 +450,40 @@ function Create3PaneGlobals()
|
||||
{
|
||||
}
|
||||
|
||||
function PerformExpandForAllOpenServers(tree)
|
||||
function OpenAndExpandElidedServers()
|
||||
{
|
||||
//dump("PerformExpandForAllOpenServers()\n");
|
||||
|
||||
var uri = null;
|
||||
var open = null;
|
||||
var treechild = null;
|
||||
var server = null;
|
||||
|
||||
if ( tree && tree.childNodes ) {
|
||||
for ( var i = tree.childNodes.length - 1; i >= 0; i-- ) {
|
||||
treechild = tree.childNodes[i];
|
||||
if (treechild.localName == 'treechildren') {
|
||||
var treeitems = treechild.childNodes;
|
||||
for ( var j = treeitems.length - 1; j >= 0; j--) {
|
||||
open = treeitems[j].getAttribute('open');
|
||||
//dump("open="+open+"\n");
|
||||
if (open == "true") {
|
||||
var isServer = (treeitems[j].getAttribute('IsServer') == "true");
|
||||
//dump("isServer="+isServer+"\n");
|
||||
if (isServer) {
|
||||
uri = treeitems[j].getAttribute('id');
|
||||
//dump("uri="+uri+"\n");
|
||||
server = GetServer(uri);
|
||||
if (server) {
|
||||
// don't do this for imap servers.
|
||||
// see bug #41943
|
||||
if (server.type != "imap") {
|
||||
//dump("PerformExpand on " + uri + "\n");
|
||||
server.PerformExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var view = folderOutliner.outlinerBoxObject.view;
|
||||
for (var i = 0; i < view.rowCount; i++)
|
||||
{
|
||||
if (view.isContainer(i))
|
||||
{
|
||||
var folderResource = GetFolderResource(folderOutliner, i);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var open = msgFolder.getFlag(MSG_FOLDER_FLAG_ELIDED)
|
||||
if (open)
|
||||
{
|
||||
view.toggleOpenState(i);
|
||||
var isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer");
|
||||
if (isServer == "true")
|
||||
{
|
||||
var server = msgFolder.server;
|
||||
// Don't do this for imap servers. See bug #41943
|
||||
if (server.type != "imap")
|
||||
server.PerformExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function loadStartFolder(initialUri)
|
||||
{
|
||||
OpenAndExpandElidedServers();
|
||||
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var defaultServer = null;
|
||||
var startFolderUri = initialUri;
|
||||
var startFolderResource = null;
|
||||
var isLoginAtStartUpEnabled = false;
|
||||
var enabledNewMailCheckOnce = false;
|
||||
var mailCheckOncePref = "mail.startup.enabledMailCheckOnce";
|
||||
@ -446,7 +491,9 @@ function loadStartFolder(initialUri)
|
||||
//First get default account
|
||||
try
|
||||
{
|
||||
if(!startFolderUri)
|
||||
if(initialUri)
|
||||
startFolderResource = RDF.GetResource(initialUri);
|
||||
else
|
||||
{
|
||||
var defaultAccount = accountManager.defaultAccount;
|
||||
|
||||
@ -454,8 +501,7 @@ function loadStartFolder(initialUri)
|
||||
var rootFolder = defaultServer.RootFolder;
|
||||
var rootMsgFolder = rootFolder.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
|
||||
var folderResource = rootMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
startFolderUri = folderResource.Value;
|
||||
startFolderResource = rootMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
|
||||
enabledNewMailCheckOnce = pref.GetBoolPref(mailCheckOncePref);
|
||||
|
||||
@ -477,48 +523,40 @@ function loadStartFolder(initialUri)
|
||||
//now find Inbox
|
||||
var outNumFolders = new Object();
|
||||
var inboxFolder = rootMsgFolder.getFoldersWithFlag(0x1000, 1, outNumFolders);
|
||||
if(!inboxFolder) return;
|
||||
if (!inboxFolder) return;
|
||||
|
||||
var resource = inboxFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
startFolderUri = resource.Value;
|
||||
startFolderResource = inboxFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
}
|
||||
}
|
||||
|
||||
var startFolder = document.getElementById(startFolderUri);
|
||||
|
||||
var startFolderIndex = GetFolderIndex(folderOutliner, startFolderResource);
|
||||
//if it's not here we will have to make sure it's open.
|
||||
if(!startFolder && startFolderUri && isLoginAtStartUpEnabled)
|
||||
if(startFolderIndex < 0 && startFolderResource && isLoginAtStartUpEnabled)
|
||||
{
|
||||
// Opens the twisty for the default account
|
||||
OpenTwistyForServer(defaultServer);
|
||||
startFolder = document.getElementById(startFolderUri);
|
||||
OpenTwistyForServer(folderOutliner, defaultServer);
|
||||
startFolderIndex = GetFolderIndex(folderOutliner, startFolderResource);
|
||||
}
|
||||
|
||||
var folderTree= GetFolderTree();
|
||||
ChangeSelection(folderTree, startFolder);
|
||||
ChangeSelection(folderOutliner, startFolderIndex);
|
||||
|
||||
// only do this on startup, when we pass in null
|
||||
if (!initialUri && isLoginAtStartUpEnabled)
|
||||
{
|
||||
// Perform biff on the server to check for new mail, except for imap
|
||||
if (defaultServer.type != "imap" )
|
||||
if (defaultServer.type != "imap")
|
||||
{
|
||||
var localFolder = inboxFolder.QueryInterface(Components.interfaces.nsIMsgLocalMailFolder);
|
||||
if (localFolder)
|
||||
{
|
||||
if (!localFolder.parsingInbox)
|
||||
defaultServer.PerformBiff();
|
||||
else
|
||||
localFolder.checkForNewMessagesAfterParsing = true;
|
||||
if (!localFolder.parsingInbox)
|
||||
defaultServer.PerformBiff();
|
||||
else
|
||||
localFolder.checkForNewMessagesAfterParsing = true;
|
||||
}
|
||||
else //it can be only nntp
|
||||
defaultServer.PerformBiff();
|
||||
}
|
||||
}
|
||||
|
||||
// because the "open" state persists, we'll call
|
||||
// PerformExpand() for all servers that are open at startup.
|
||||
PerformExpandForAllOpenServers(folderTree);
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
@ -530,44 +568,32 @@ function loadStartFolder(initialUri)
|
||||
{
|
||||
MsgGetMessagesForAllServers(defaultServer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function OpenTwistyForServer(server)
|
||||
function OpenTwistyForServer(folderOutliner, server)
|
||||
{
|
||||
var treeNode = GetTreeNodeForServerURI(server.serverURI);
|
||||
var folderIndex = GetFolderIndexForServerURI(folderOutliner, server.serverURI);
|
||||
|
||||
if (treeNode)
|
||||
treeNode.setAttribute('open', 'true');
|
||||
}
|
||||
|
||||
|
||||
function GetTreeNodeForServerURI(serverURI)
|
||||
{
|
||||
var treeNode = null;
|
||||
|
||||
var tree = GetFolderTree();
|
||||
|
||||
// Iterate through folder tree to find the node associated with given serverURI
|
||||
if ( tree && tree.childNodes ) {
|
||||
for ( var i = tree.childNodes.length - 1; i >= 0; i-- ) {
|
||||
var treechild = tree.childNodes[i];
|
||||
if (treechild.localName == 'treechildren') {
|
||||
var treeitems = treechild.childNodes;
|
||||
for ( var j = treeitems.length - 1; j >= 0; j--) {
|
||||
var isServer = treeitems[j].getAttribute('IsServer');
|
||||
if (isServer == "true") {
|
||||
var uri = treeitems[j].getAttribute('id');
|
||||
if (uri == serverURI) {
|
||||
treeNode = treeitems[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (folderIndex >= 0)
|
||||
{
|
||||
var isContainerOpen = folderOutliner.outlinerBoxObject.view.isContainerOpen(folderIndex);
|
||||
if (! isContainerOpen)
|
||||
folderOutliner.outlinerBoxObject.view.toggleOpenState(folderIndex);
|
||||
}
|
||||
return treeNode;
|
||||
}
|
||||
|
||||
|
||||
function GetFolderIndexForServerURI(folderOutliner, serverURI)
|
||||
{
|
||||
var folderResource = RDF.GetResource(serverURI);
|
||||
var isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer");
|
||||
if (isServer == "true")
|
||||
{
|
||||
var folderIndex = GetFolderIndex(folderOutliner, folderResource);
|
||||
return folderIndex;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
function TriggerGetMessages(server)
|
||||
@ -589,14 +615,10 @@ function AddToSession()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function InitPanes()
|
||||
{
|
||||
var folderTree = GetFolderTree();
|
||||
if(folderTree)
|
||||
OnLoadFolderPane(folderTree);
|
||||
|
||||
SetupCommandUpdateHandlers();
|
||||
OnLoadFolderPane();
|
||||
SetupCommandUpdateHandlers();
|
||||
}
|
||||
|
||||
function InitializeDataSources()
|
||||
@ -611,42 +633,67 @@ function InitializeDataSources()
|
||||
SetupMoveCopyMenus('threadPaneContext-copyMenu', accountManagerDataSource, folderDataSource);
|
||||
}
|
||||
|
||||
function OnLoadFolderPane(folderTree)
|
||||
function OnFolderUnreadColAttrModified(event)
|
||||
{
|
||||
gFolderTree = folderTree;
|
||||
SortFolderPane('FolderColumn', 'http://home.netscape.com/NC-rdf#FolderTreeName');
|
||||
if (event.attrName == "hidden")
|
||||
{
|
||||
var folderNameCell = document.getElementById("folderNameCell");
|
||||
var folderNameCol = document.getElementById("folderNameCol");
|
||||
if (event.newValue == "true")
|
||||
{
|
||||
folderNameCell.setAttribute("label", "?folderTreeName");
|
||||
folderNameCol.setAttribute("sort", "?folderTreeNameSort");
|
||||
}
|
||||
else if (event.attrChange == Components.interfaces.nsIDOMMutationEvent.REMOVAL)
|
||||
{
|
||||
folderNameCell.setAttribute("label", "?folderTreeSimpleName");
|
||||
folderNameCol.setAttribute("sort", "?folderTreeSimpleNameSort");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Add folderDataSource and accountManagerDataSource to folderPane
|
||||
accountManagerDataSource = accountManagerDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
folderDataSource = folderDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
var database = GetFolderDatasource();
|
||||
function OnLoadFolderPane()
|
||||
{
|
||||
var folderUnreadCol = document.getElementById("folderUnreadCol");
|
||||
var hidden = folderUnreadCol.getAttribute("hidden");
|
||||
if (!hidden)
|
||||
{
|
||||
var folderNameCell = document.getElementById("folderNameCell");
|
||||
var folderNameCol = document.getElementById("folderNameCol");
|
||||
folderNameCell.setAttribute("label", "?folderTreeSimpleName");
|
||||
folderNameCol.setAttribute("sort", "?folderTreeSimpleNameSort");
|
||||
}
|
||||
folderUnreadCol.addEventListener("DOMAttrModified", OnFolderUnreadColAttrModified, false);
|
||||
|
||||
database.AddDataSource(accountManagerDataSource);
|
||||
SortFolderPane("folderNameCol");
|
||||
|
||||
//Add folderDataSource and accountManagerDataSource to folderPane
|
||||
accountManagerDataSource = accountManagerDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
folderDataSource = folderDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
var database = GetFolderDatasource();
|
||||
|
||||
database.AddDataSource(accountManagerDataSource);
|
||||
database.AddDataSource(folderDataSource);
|
||||
folderTree.setAttribute('ref', 'msgaccounts:/');
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
folderOutliner.outlinerBoxObject.outlinerBody.setAttribute("ref", "msgaccounts:/");
|
||||
|
||||
var folderOutlinerBuilder = folderOutliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
|
||||
folderOutlinerBuilder.addObserver(folderObserver);
|
||||
folderOutliner.addEventListener("click",FolderPaneOnClick,true);
|
||||
}
|
||||
|
||||
function GetFolderDatasource()
|
||||
{
|
||||
var folderTree = GetFolderTree();
|
||||
var db = folderTree.database;
|
||||
if (!db) return false;
|
||||
return db;
|
||||
}
|
||||
|
||||
function OnLoadThreadPane(threadTree)
|
||||
{
|
||||
setTimeout("ShowThreads(false);", 0);
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
return folderOutliner.outlinerBoxObject.outlinerBody.database;
|
||||
}
|
||||
|
||||
/* Functions for accessing particular parts of the window*/
|
||||
function GetFolderTree()
|
||||
function GetFolderOutliner()
|
||||
{
|
||||
if (gFolderTree) return gFolderTree;
|
||||
|
||||
var folderTree = document.getElementById('folderTree');
|
||||
gFolderTree = folderTree;
|
||||
return folderTree;
|
||||
if (! gFolderOutliner)
|
||||
gFolderOutliner = document.getElementById("folderOutliner");
|
||||
return gFolderOutliner;
|
||||
}
|
||||
|
||||
function GetMessagePane()
|
||||
@ -724,7 +771,8 @@ function ClearThreadPaneSelection()
|
||||
if (gDBView) {
|
||||
var outlinerView = gDBView.QueryInterface(Components.interfaces.nsIOutlinerView);
|
||||
var outlinerSelection = outlinerView.selection;
|
||||
outlinerSelection.clearSelection();
|
||||
if (outlinerSelection)
|
||||
outlinerSelection.clearSelection();
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
@ -746,113 +794,102 @@ function ClearMessagePane()
|
||||
}
|
||||
|
||||
|
||||
function GetSelectedFolder()
|
||||
function GetSelectedFolderIndex()
|
||||
{
|
||||
try {
|
||||
var tree = GetFolderTree();
|
||||
var selection = tree.selectedItems;
|
||||
if(selection.length > 0)
|
||||
return selection[0];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
catch (ex) {
|
||||
return null;
|
||||
}
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
return startIndex.value;
|
||||
}
|
||||
|
||||
function FolderPaneOnClick(event)
|
||||
{
|
||||
debug("in FolderPaneClick()\n");
|
||||
// we only care about button 0 (left click) events
|
||||
if (event.button != 0) return;
|
||||
// we only care about button 0 (left click) events
|
||||
if (event.button != 0)
|
||||
return;
|
||||
|
||||
var t = event.originalTarget;
|
||||
var item;
|
||||
var uri;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var row = {};
|
||||
var col = {};
|
||||
var elt = {};
|
||||
folderOutliner.outlinerBoxObject.getCellAt(event.clientX, event.clientY, row, col, elt);
|
||||
|
||||
if (t.getAttribute('twisty') == 'true') {
|
||||
// The twisty is nested three below the treeitem:
|
||||
// <treeitem>
|
||||
// <treerow>
|
||||
// <treecell>
|
||||
// <button class="tree-cell-twisty"> <!-- anonymous -->
|
||||
var treeitem = t.parentNode.parentNode.parentNode;
|
||||
var open = treeitem.getAttribute('open');
|
||||
if(open == "true") {
|
||||
//dump("twisty open\n");
|
||||
if (elt.value == "twisty")
|
||||
{
|
||||
var folderResource = GetFolderResource(folderOutliner, row.value);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
|
||||
item = t.parentNode.parentNode.parentNode;
|
||||
if (item.localName == "treeitem") {
|
||||
var isServer = (treeitem.getAttribute('IsServer') == "true");
|
||||
if (isServer) {
|
||||
uri = treeitem.getAttribute("id");
|
||||
var server = GetServer(uri);
|
||||
if (server) {
|
||||
server.PerformExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var isImap = (treeitem.getAttribute('ServerType') == "imap");
|
||||
if (isImap) {
|
||||
uri = treeitem.getAttribute("id");
|
||||
var folder = GetMsgFolderFromUri(uri);
|
||||
if (folder) {
|
||||
var imapFolder = folder.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
|
||||
if (imapFolder) {
|
||||
imapFolder.performExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (folderOutliner.outlinerBoxObject.view.isContainerOpen(row.value))
|
||||
msgFolder.clearFlag(MSG_FOLDER_FLAG_ELIDED);
|
||||
else
|
||||
{
|
||||
msgFolder.setFlag(MSG_FOLDER_FLAG_ELIDED);
|
||||
var isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer");
|
||||
if (isServer == "true")
|
||||
{
|
||||
var server = msgFolder.server;
|
||||
server.PerformExpand(msgWindow);
|
||||
}
|
||||
else
|
||||
{
|
||||
var serverType = GetFolderAttribute(folderOutliner, folderResource, "ServerType");
|
||||
if (serverType == "imap")
|
||||
{
|
||||
var imapFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
|
||||
imapFolder.performExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((event.originalTarget.localName == "outlinercol") ||
|
||||
(event.originalTarget.localName == "scrollbarbutton")) {
|
||||
// clicking on the name column in the folder pane should not sort
|
||||
event.preventBubble();
|
||||
}
|
||||
else if (event.detail == 2) {
|
||||
FolderPaneDoubleClick(row.value, event);
|
||||
}
|
||||
else if(event.detail == 2)
|
||||
{
|
||||
item = t.parentNode.parentNode;
|
||||
if (item.localName == "treeitem")
|
||||
FolderPaneDoubleClick(item);
|
||||
}
|
||||
}
|
||||
|
||||
function FolderPaneDoubleClick(treeitem)
|
||||
function FolderPaneDoubleClick(folderIndex, event)
|
||||
{
|
||||
var isServer = false;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var folderResource = GetFolderResource(folderOutliner, folderIndex);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var isServer = GetFolderAttribute(folderOutliner, folderResource, "IsServer");
|
||||
|
||||
if (treeitem) {
|
||||
isServer = (treeitem.getAttribute('IsServer') == "true");
|
||||
if (isServer) {
|
||||
var open = treeitem.getAttribute('open');
|
||||
if (open == "true") {
|
||||
var uri = treeitem.getAttribute("id");
|
||||
server = GetServer(uri);
|
||||
if (server) {
|
||||
// double clicking open, PerformExpand()
|
||||
server.PerformExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// double clicking close, don't PerformExpand()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isServer == "true")
|
||||
{
|
||||
if (folderOutliner.outlinerBoxObject.view.isContainerOpen(folderIndex))
|
||||
msgFolder.clearFlag(MSG_FOLDER_FLAG_ELIDED);
|
||||
else
|
||||
{
|
||||
msgFolder.setFlag(MSG_FOLDER_FLAG_ELIDED);
|
||||
var server = msgFolder.server;
|
||||
server.PerformExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Open a new msg window only if we are double clicking on
|
||||
// folders or newsgroups.
|
||||
MsgOpenNewWindowForFolder(folderResource.Value);
|
||||
|
||||
// don't open a new msg window if we are double clicking on a server.
|
||||
// only do it for folders or newsgroups
|
||||
if (!isServer) {
|
||||
MsgOpenNewWindowForFolder(treeitem.getAttribute('id'));
|
||||
}
|
||||
// double clicking should not toggle the open / close state of the
|
||||
// folder. this will happen if we don't prevent the event from
|
||||
// bubbling to the default handler in outliner.xml
|
||||
event.preventBubble();
|
||||
}
|
||||
}
|
||||
|
||||
function ChangeSelection(tree, newSelection)
|
||||
function ChangeSelection(outliner, newIndex)
|
||||
{
|
||||
if(newSelection)
|
||||
{
|
||||
tree.clearItemSelection();
|
||||
tree.selectItem(newSelection);
|
||||
tree.ensureElementIsVisible(newSelection);
|
||||
}
|
||||
if(newIndex >= 0)
|
||||
{
|
||||
outliner.outlinerBoxObject.selection.select(newIndex);
|
||||
outliner.outlinerBoxObject.ensureRowIsVisible(newIndex);
|
||||
}
|
||||
}
|
||||
|
||||
function SetActiveThreadPaneSortColumn(column)
|
||||
@ -876,27 +913,49 @@ function ClearActiveThreadPaneSortColumn()
|
||||
|
||||
}
|
||||
|
||||
function GetSelectedFolders()
|
||||
{
|
||||
var folderArray = [];
|
||||
var k = 0;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var rangeCount = folderOutliner.outlinerBoxObject.selection.getRangeCount();
|
||||
|
||||
for(var i = 0; i < rangeCount; i++)
|
||||
{
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(i, startIndex, endIndex);
|
||||
for (var j = startIndex.value; j <= endIndex.value; j++)
|
||||
{
|
||||
var folderResource = GetFolderResource(folderOutliner, j);
|
||||
folderArray[k++] = folderResource.Value;
|
||||
}
|
||||
}
|
||||
|
||||
return folderArray;
|
||||
}
|
||||
|
||||
function GetSelectedMsgFolders()
|
||||
{
|
||||
var folderTree = GetFolderTree();
|
||||
var selectedFolders = folderTree.selectedItems;
|
||||
var numFolders = selectedFolders.length;
|
||||
var folderArray = [];
|
||||
var k = 0;
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var rangeCount = folderOutliner.outlinerBoxObject.selection.getRangeCount();
|
||||
|
||||
var folderArray = new Array(numFolders);
|
||||
for(var i = 0; i < rangeCount; i++)
|
||||
{
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(i, startIndex, endIndex);
|
||||
for (var j = startIndex.value; j <= endIndex.value; j++)
|
||||
{
|
||||
var msgFolder = GetFolderResource(folderOutliner, j).QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
if(msgFolder)
|
||||
folderArray[k++] = msgFolder;
|
||||
}
|
||||
}
|
||||
|
||||
for(var i = 0; i < numFolders; i++)
|
||||
{
|
||||
var folder = selectedFolders[i];
|
||||
var folderUri = folder.getAttribute("id");
|
||||
var folderResource = RDF.GetResource(folderUri);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
if(msgFolder)
|
||||
{
|
||||
folderArray[i] = msgFolder;
|
||||
}
|
||||
}
|
||||
return folderArray;
|
||||
return folderArray;
|
||||
}
|
||||
|
||||
function GetFirstSelectedMessage()
|
||||
@ -962,25 +1021,22 @@ function ClearMessageSelection()
|
||||
function GetCompositeDataSource(command)
|
||||
{
|
||||
if (command == "GetNewMessages" || command == "NewFolder" || command == "MarkAllMessagesRead")
|
||||
{
|
||||
return GetFolderDatasource();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function SetNextMessageAfterDelete()
|
||||
{
|
||||
//dump("setting next msg view index after delete to " + gDBView.msgToSelectAfterDelete + "\n");
|
||||
gNextMessageViewIndexAfterDelete = gDBView.msgToSelectAfterDelete;
|
||||
}
|
||||
|
||||
function SelectFolder(folderUri)
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
var treeitem = document.getElementById(folderUri);
|
||||
if(tree && treeitem)
|
||||
ChangeSelection(tree, treeitem);
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var folderResource = RDF.GetResource(folderUri);
|
||||
var folderIndex = GetFolderIndex(folderOutliner, folderResource);
|
||||
ChangeSelection(folderOutliner, folderIndex);
|
||||
}
|
||||
|
||||
function SelectMessage(messageUri)
|
||||
@ -1003,12 +1059,31 @@ function SetBusyCursor(window, enable)
|
||||
|
||||
var numFrames = window.frames.length;
|
||||
for(var i = 0; i < numFrames; i++)
|
||||
{
|
||||
SetBusyCursor(window.frames[i], enable);
|
||||
}
|
||||
}
|
||||
|
||||
function GetDBView()
|
||||
{
|
||||
return gDBView;
|
||||
}
|
||||
|
||||
function GetFolderResource(outliner, index)
|
||||
{
|
||||
var outlinerBuilder = outliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
|
||||
return outlinerBuilder.getResourceAtIndex(index);
|
||||
}
|
||||
|
||||
function GetFolderIndex(outliner, resource)
|
||||
{
|
||||
var outlinerBuilder = outliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
|
||||
return outlinerBuilder.getIndexOfResource(resource);
|
||||
}
|
||||
|
||||
function GetFolderAttribute(outliner, source, attribute)
|
||||
{
|
||||
var property = RDF.GetResource("http://home.netscape.com/NC-rdf#" + attribute);
|
||||
var target = outliner.outlinerBoxObject.outlinerBody.database.GetTarget(source, property, true);
|
||||
if (target)
|
||||
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
return target;
|
||||
}
|
||||
|
@ -29,7 +29,9 @@ Contributors:
|
||||
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
|
||||
|
||||
<!DOCTYPE window SYSTEM "chrome://messenger/locale/msgSynchronize.dtd" >
|
||||
<window xmlns:NC="http://home.netscape.com/NC-rdf#"
|
||||
<window xmlns:nc="http://home.netscape.com/NC-rdf#"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
id="select-offline"
|
||||
title="&MsgSelect.label;"
|
||||
@ -42,12 +44,12 @@ Contributors:
|
||||
<script src="chrome://global/content/strres.js"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/mailWindowOverlay.js"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/commandglue.js"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/msgSynchronize.js"/>
|
||||
<stringbundle id="bundle_messenger" src="chrome://messenger/locale/messenger.properties"/>
|
||||
<stringbundle id="bundle_brand" src="chrome://global/locale/brand.properties"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/mailCommands.js"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/mailWindow.js"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/msgMail3PaneWindow.js"/>
|
||||
<script type="application/x-javascript" src="chrome://messenger/content/msgSynchronize.js"/>
|
||||
|
||||
<keyset id="keyset"/>
|
||||
<html class="desc">&MsgSelectDesc.label;</html>
|
||||
@ -57,47 +59,62 @@ Contributors:
|
||||
<rows>
|
||||
<row flex="1">
|
||||
|
||||
<tree class="inset" flex="1" id="synchronizetree" datasources="rdf:null"
|
||||
onclick="onSpaceClick(event);">
|
||||
<outliner flex="1" id="synchronizeOutliner">
|
||||
<outlinerbody flex="1" datasources="rdf:msgaccountmanager rdf:mailnewsfolders" ref="msgaccounts:/" onclick="onSynchronizeClick(event);">
|
||||
<template>
|
||||
<rule>
|
||||
<conditions>
|
||||
<outlinerrow uri="?container"/>
|
||||
<member container="?container" child="?member"/>
|
||||
<triple subject="?member" predicate="http://home.netscape.com/NC-rdf#SupportsOffline" object="true"/>
|
||||
</conditions>
|
||||
|
||||
<template>
|
||||
<rule NC:SupportsOffline="true">
|
||||
<treechildren flex="1">
|
||||
<treeitem class="folderTreeItem" uri="..."
|
||||
SpecialFolder="rdf:http://home.netscape.com/NC-rdf#SpecialFolder"
|
||||
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
|
||||
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType"
|
||||
Synchronize="rdf:http://home.netscape.com/NC-rdf#Synchronize">
|
||||
<bindings>
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#FolderTreeName"
|
||||
object="?folderTreeName" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#FolderTreeName?sort=true"
|
||||
object="?folderTreeNameSort" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#SpecialFolder"
|
||||
object="?specialFolder" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#IsServer"
|
||||
object="?isServer" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#IsSecure"
|
||||
object="?isSecure" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#ServerType"
|
||||
object="?serverType" />
|
||||
<binding subject="?member"
|
||||
predicate="http://home.netscape.com/NC-rdf#Synchronize"
|
||||
object="?synchronize" />
|
||||
</bindings>
|
||||
|
||||
<action>
|
||||
<outlinerrow uri="?member">
|
||||
<outlinercell ref="folderNameCol"
|
||||
label="?folderTreeName"
|
||||
properties="specialFolder-?specialFolder
|
||||
isServer-?isServer
|
||||
isSecure-?isSecure
|
||||
serverType-?serverType"/>
|
||||
<outlinercell ref="syncCol"
|
||||
properties="synchronize-?synchronize
|
||||
isServer-?isServer"/>
|
||||
</outlinerrow>
|
||||
</action>
|
||||
</rule>
|
||||
</template>
|
||||
</outlinerbody>
|
||||
|
||||
<treerow class="tree-folder-row" IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer">
|
||||
<treecell indent="true" class="treecell-indent tree-cell-folderpane-icon"
|
||||
label="rdf:http://home.netscape.com/NC-rdf#FolderTreeName"
|
||||
SpecialFolder="rdf:http://home.netscape.com/NC-rdf#SpecialFolder"
|
||||
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
|
||||
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType"/>
|
||||
<treecell indent="true" allowevents="true" align="center">
|
||||
<checkbox id="selectBox" checked="rdf:http://home.netscape.com/NC-rdf#Synchronize"
|
||||
hidden="rdf:http://home.netscape.com/NC-rdf#SyncDisabled" class="tree-folder-checkbox"/>
|
||||
</treecell>
|
||||
</treerow>
|
||||
</treeitem>
|
||||
</treechildren>
|
||||
</rule>
|
||||
</template>
|
||||
<outlinercol class="outlinercol-header outlinercol-inset-header" id="folderNameCol" flex="5" persist="hidden width" label="&MsgSelectItems.label;" primary="true" />
|
||||
<splitter class="tree-splitter"/>
|
||||
<outlinercol class="outlinercol-header outlinercol-inset-header" id="syncCol" flex="1" persist="hidden width" label="&MsgSelectInd.label;" />
|
||||
</outliner>
|
||||
|
||||
<treecolgroup>
|
||||
<treecol persist="hidden width" flex="5" id="SyncColumn" resource="http://home.netscape.com/NC-rdf#Synchronize"/>
|
||||
<splitter class="tree-splitter"/>
|
||||
<treecol persist="hidden width" flex="1" id="FolderColumn" resource="http://home.netscape.com/NC-rdf#FolderTreeName"/>
|
||||
</treecolgroup>
|
||||
|
||||
<treehead>
|
||||
<treerow>
|
||||
<treecell class="treecell-header" label="&MsgSelectItems.label;"/>
|
||||
<treecell class="treecell-header" label="&MsgSelectInd.label;"/>
|
||||
</treerow>
|
||||
</treehead>
|
||||
</tree>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
|
@ -23,9 +23,14 @@ var gSyncMail = false;
|
||||
var gSyncNews = false;
|
||||
var gSendMessage = true;
|
||||
var gWorkOffline = false;
|
||||
var gSynchronizeTree = null;
|
||||
var gSynchronizeOutliner = null;
|
||||
var gAccountManager = null;
|
||||
var gParentMsgWindow;
|
||||
var gMsgWindow;
|
||||
|
||||
// RDF needs to be defined for GetFolderAttribute in msgMail3PaneWindow.js
|
||||
var RDF = Components.classes['@mozilla.org/rdf/rdf-service;1'].getService().QueryInterface(Components.interfaces.nsIRDFService);
|
||||
|
||||
const MSG_FOLDER_FLAG_OFFLINE = 0x8000000;
|
||||
|
||||
function OnLoad()
|
||||
@ -101,40 +106,26 @@ function selectOnLoad()
|
||||
{
|
||||
doSetOKCancel(selectOkButton,selectCancelButton);
|
||||
|
||||
msgWindow = Components.classes[msgWindowContractID].createInstance(Components.interfaces.nsIMsgWindow);
|
||||
msgWindow.SetDOMWindow(window);
|
||||
gMsgWindow = Components.classes[msgWindowContractID].createInstance(Components.interfaces.nsIMsgWindow);
|
||||
gMsgWindow.SetDOMWindow(window);
|
||||
|
||||
gAccountManager = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
|
||||
gSynchronizeTree = document.getElementById('synchronizetree');
|
||||
gSynchronizeOutliner = document.getElementById('synchronizeOutliner');
|
||||
|
||||
// Add folderDataSource and accountManagerDataSource to tree datatbase
|
||||
var datasourceContractIDPrefix = "@mozilla.org/rdf/datasource;1?name=";
|
||||
var accountManagerDSContractID = datasourceContractIDPrefix + "msgaccountmanager";
|
||||
var folderDSContractID = datasourceContractIDPrefix + "mailnewsfolders";
|
||||
var accountManagerDataSource = Components.classes[accountManagerDSContractID].createInstance();
|
||||
var folderDataSource = Components.classes[folderDSContractID].createInstance();
|
||||
accountManagerDataSource = accountManagerDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
folderDataSource = folderDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
|
||||
gSynchronizeTree.database.AddDataSource(accountManagerDataSource);
|
||||
gSynchronizeTree.database.AddDataSource(folderDataSource);
|
||||
gSynchronizeTree.setAttribute('ref', 'msgaccounts:/');
|
||||
|
||||
SetServerOpen();
|
||||
SortFolder('FolderColumn', 'http://home.netscape.com/NC-rdf#FolderTreeName');
|
||||
LoadSyncTree();
|
||||
SortSynchronizePane('folderNameCol', '?folderTreeNameSort');
|
||||
}
|
||||
|
||||
function SortFolder(column, sortKey)
|
||||
function SortSynchronizePane(column, sortKey)
|
||||
{
|
||||
var node = FindInWindow(window, column);
|
||||
if(!node) {
|
||||
dump('Couldnt find sort column\n');
|
||||
return false;
|
||||
}
|
||||
SortColumn(node, sortKey, null, null);
|
||||
node.setAttribute("sortActive", "false");
|
||||
return true;
|
||||
|
||||
node.setAttribute("sort", sortKey);
|
||||
node.setAttribute("sortDirection", "natural");
|
||||
gSynchronizeOutliner.outlinerBoxObject.view.cycleHeader(column, node);
|
||||
}
|
||||
|
||||
function FindInWindow(currentWindow, id)
|
||||
@ -153,88 +144,53 @@ function FindInWindow(currentWindow, id)
|
||||
}
|
||||
|
||||
|
||||
function LoadSyncTree()
|
||||
function onSynchronizeClick(event)
|
||||
{
|
||||
var allServers = gAccountManager.allServers;
|
||||
for (var i=0;i<allServers.Count();i++) {
|
||||
// we only care about button 0 (left click) events
|
||||
if (event.button != 0)
|
||||
return;
|
||||
|
||||
var currentServer = allServers.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgIncomingServer);
|
||||
var rootURI = currentServer.serverURI;
|
||||
var rootFolder = currentServer.RootFolder;
|
||||
var row = {}
|
||||
var col = {}
|
||||
var elt = {}
|
||||
|
||||
var rootMsgFolder = rootFolder.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var rootFolderResource = rootMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
gSynchronizeOutliner.outlinerBoxObject.getCellAt(event.clientX, event.clientY, row, col, elt);
|
||||
|
||||
if(currentServer.type == "imap"){
|
||||
var imapFolder = rootMsgFolder.QueryInterface(Components.interfaces.nsIMsgImapMailFolder)
|
||||
imapFolder.performExpand(msgWindow);
|
||||
}
|
||||
else if(currentServer.type == "nntp") {
|
||||
currentServer.PerformExpand(msgWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (elt.value == "twisty") {
|
||||
var folderResource = GetFolderResource(gSynchronizeOutliner, row.value);
|
||||
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
|
||||
function SetServerOpen()
|
||||
{
|
||||
if ( gSynchronizeTree && gSynchronizeTree.childNodes ) {
|
||||
for ( var i = gSynchronizeTree.childNodes.length - 1; i >= 0; i-- ) {
|
||||
var treechild = gSynchronizeTree.childNodes[i];
|
||||
if (treechild.localName == 'treechildren') {
|
||||
var treeitems = treechild.childNodes;
|
||||
for ( var j = treeitems.length - 1; j >= 0; j--) {
|
||||
var isServer = treeitems[j].getAttribute("IsServer");
|
||||
if (isServer) {
|
||||
if(treeitems[j].getAttribute('ServerType') == "imap" ||
|
||||
treeitems[j].getAttribute('ServerType') == "nntp") {
|
||||
treeitems[j].setAttribute('open', true);
|
||||
}
|
||||
else {
|
||||
treeitems[j].setAttribute('open', false);
|
||||
}
|
||||
}
|
||||
if (!(gSynchronizeOutliner.outlinerBoxObject.view.isContainerOpen(row.value))) {
|
||||
var serverType = GetFolderAttribute(gSynchronizeOutliner, folderResource, "ServerType");
|
||||
// imap is the only server type that does folder discovery
|
||||
if (serverType != "imap") return;
|
||||
|
||||
if (GetFolderAttribute(gSynchronizeOutliner, folderResource, "IsServer") == "true") {
|
||||
var server = msgFolder.server;
|
||||
server.PerformExpand(gMsgWindow);
|
||||
}
|
||||
else {
|
||||
var imapFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
|
||||
if (imapFolder) {
|
||||
imapFolder.performExpand(gMsgWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onSpaceClick(event)
|
||||
{
|
||||
// if click checkbox, reverse selected status,
|
||||
var t = event.originalTarget;
|
||||
if (t.localName == "checkbox") {
|
||||
var node = t.parentNode.parentNode.parentNode;
|
||||
if (node.localName == "treeitem") {
|
||||
var nodeType = node.getAttribute("ServerType");
|
||||
if(nodeType =="imap" || nodeType =="nntp")
|
||||
UpdateNode(node, t);
|
||||
}
|
||||
else {
|
||||
if (col.value == "syncCol") {
|
||||
UpdateNode(GetFolderResource(gSynchronizeOutliner, row.value), row.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function UpdateNode(node, target)
|
||||
function UpdateNode(resource, row)
|
||||
{
|
||||
var folder = null;
|
||||
var uri = node.getAttribute("id");
|
||||
if(uri)
|
||||
folder = GetMsgFolderFromUri(uri);
|
||||
if(folder) {
|
||||
var folder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
|
||||
if(folder.isServer) {
|
||||
target.setAttribute('value', false);
|
||||
return;
|
||||
}
|
||||
if (folder.isServer)
|
||||
return;
|
||||
|
||||
var oldFlag = folder.getFlag(MSG_FOLDER_FLAG_OFFLINE);
|
||||
if(!oldFlag) {
|
||||
folder.setFlag(MSG_FOLDER_FLAG_OFFLINE);
|
||||
}
|
||||
else {
|
||||
folder.clearFlag(MSG_FOLDER_FLAG_OFFLINE);
|
||||
}
|
||||
}
|
||||
var oldFlag = folder.toggleFlag(MSG_FOLDER_FLAG_OFFLINE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -55,6 +55,10 @@ function ThreadPaneOnClick(event)
|
||||
var col = document.getElementById(colID.value);
|
||||
if (col && col.getAttribute("cycler") != "true" && (childElt.value != "twisty")) {
|
||||
ThreadPaneDoubleClick();
|
||||
// double clicking should not toggle the open / close state of the
|
||||
// thread. this will happen if we don't prevent the event from
|
||||
// bubbling to the default handler in outliner.xml
|
||||
event.preventBubble();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -116,17 +120,17 @@ function MsgComposeDraftMessage()
|
||||
|
||||
function ThreadPaneDoubleClick()
|
||||
{
|
||||
if (IsSpecialFolderSelected(MSG_FOLDER_FLAG_DRAFTS)) {
|
||||
MsgComposeDraftMessage();
|
||||
}
|
||||
else if(IsSpecialFolderSelected(MSG_FOLDER_FLAG_TEMPLATES)) {
|
||||
var loadedFolder = GetLoadedMsgFolder();
|
||||
var messageArray = GetSelectedMessages();
|
||||
ComposeMessage(msgComposeType.Template, msgComposeFormat.Default, loadedFolder, messageArray);
|
||||
}
|
||||
else {
|
||||
MsgOpenSelectedMessages();
|
||||
}
|
||||
if (IsSpecialFolderSelected(MSG_FOLDER_FLAG_DRAFTS)) {
|
||||
MsgComposeDraftMessage();
|
||||
}
|
||||
else if(IsSpecialFolderSelected(MSG_FOLDER_FLAG_TEMPLATES)) {
|
||||
var loadedFolder = GetLoadedMsgFolder();
|
||||
var messageArray = GetSelectedMessages();
|
||||
ComposeMessage(msgComposeType.Template, msgComposeFormat.Default, loadedFolder, messageArray);
|
||||
}
|
||||
else {
|
||||
MsgOpenSelectedMessages();
|
||||
}
|
||||
}
|
||||
|
||||
function ThreadPaneKeyPress(event)
|
||||
@ -294,3 +298,11 @@ function EnsureRowInThreadOutlinerIsVisible(index)
|
||||
var outliner = GetThreadOutliner();
|
||||
outliner.boxObject.QueryInterface(Components.interfaces.nsIOutlinerBoxObject).ensureRowIsVisible(index);
|
||||
}
|
||||
|
||||
function ThreadPaneOnLoad()
|
||||
{
|
||||
var outliner = GetThreadOutliner();
|
||||
outliner.addEventListener("click",ThreadPaneOnClick,true);
|
||||
}
|
||||
|
||||
addEventListener("load",ThreadPaneOnLoad,true);
|
||||
|
@ -31,9 +31,6 @@ Rights Reserved.
|
||||
<script src="chrome://messenger/content/threadPane.js"/>
|
||||
|
||||
<outliner id="threadOutliner" flex="1"
|
||||
ondraggesture="return BeginDragThreadPane(event);"
|
||||
ondragdrop="return DropOnThreadPane(event);"
|
||||
onclick="ThreadPaneOnClick(event);"
|
||||
onkeypress="ThreadPaneKeyPress(event);">
|
||||
<outlinercol id="threadCol" display="&threadColumn.label;" class="outlinercol-header outlinercol-image outlinercol-inset-header threadColumnHeader" currentView="unthreaded" cycler="true" persist="hidden" fixed="true" />
|
||||
<outlinercol id="subjectCol" class="outlinercol-header outlinercell-inset-header sortDirectionIndicator" persist="hidden width" flex="7" label="&subjectColumn.label;" primary="true"/>
|
||||
@ -56,7 +53,9 @@ Rights Reserved.
|
||||
<splitter class="tree-splitter"/>
|
||||
<outlinercol id="totalCol" class="outlinercol-header outlinercol-inset-header sortDirectionIndicator" persist="hidden width" flex="1" label="&totalColumn.label;"/>
|
||||
<outlinercol id="locationCol" class="outlinercol-header outlinercol-inset-header sortDirectionIndicator" persist="width" flex="1" hidden="true" ignoreincolumnpicker="true" label="&locationColumn.label;"/>
|
||||
<outlinerbody id ="threadOutlinerBody" flex="1" onselect="this.parentNode.outlinerBoxObject.view.selectionChanged();"/>
|
||||
<outlinerbody flex="1"
|
||||
onselect="this.parentNode.outlinerBoxObject.view.selectionChanged();"
|
||||
ondraggesture="return BeginDragThreadPane(event);"/>
|
||||
</outliner>
|
||||
|
||||
</overlay>
|
||||
|
@ -16,6 +16,10 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Jan Varga (varga@utcru.sk)
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -42,45 +46,26 @@ function ConvertDOMListToResourceArray(nodeList)
|
||||
|
||||
function GetSelectedFolderURI()
|
||||
{
|
||||
var uri = null;
|
||||
var selectedFolder = null;
|
||||
try {
|
||||
var folderTree = GetFolderTree();
|
||||
var selectedFolderList = folderTree.selectedItems;
|
||||
|
||||
// you can only select one folder / server to add new folder / subscribe to
|
||||
if (selectedFolderList.length == 1) {
|
||||
selectedFolder = selectedFolderList[0];
|
||||
}
|
||||
else {
|
||||
//dump("number of selected folder was " + selectedFolderList.length + "\n");
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
// dump("failed to get the selected folder\n");
|
||||
uri = null;
|
||||
}
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var selection = folderOutliner.outlinerBoxObject.selection;
|
||||
if (selection.count == 1)
|
||||
{
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
selection.getRangeAt(0, startIndex, endIndex);
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
return folderResource.Value;
|
||||
}
|
||||
|
||||
try {
|
||||
if (selectedFolder) {
|
||||
uri = selectedFolder.getAttribute('id');
|
||||
// dump("folder to preselect: " + preselectedURI + "\n");
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
uri = null;
|
||||
}
|
||||
|
||||
return uri;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
function MsgRenameFolder()
|
||||
{
|
||||
var preselectedURI = GetSelectedFolderURI();
|
||||
var folderTree = GetFolderTree();
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
|
||||
var name = GetFolderNameFromUri(preselectedURI, folderTree);
|
||||
var name = GetFolderNameFromUri(preselectedURI, folderOutliner);
|
||||
|
||||
dump("preselectedURI = " + preselectedURI + "\n");
|
||||
var dialog = window.openDialog(
|
||||
@ -94,8 +79,8 @@ function MsgRenameFolder()
|
||||
function RenameFolder(name,uri)
|
||||
{
|
||||
dump("uri,name = " + uri + "," + name + "\n");
|
||||
var folderTree = GetFolderTree();
|
||||
if (folderTree)
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
if (folderOutliner)
|
||||
{
|
||||
if (uri && (uri != "") && name && (name != "")) {
|
||||
var selectedFolder = GetResourceFromUri(uri);
|
||||
@ -111,7 +96,7 @@ function RenameFolder(name,uri)
|
||||
|
||||
ClearThreadPane();
|
||||
ClearMessagePane();
|
||||
folderTree.clearItemSelection();
|
||||
folderOutliner.outlinerBoxObject.selection.clearSelection();
|
||||
}
|
||||
else {
|
||||
dump("no name or nothing selected\n");
|
||||
@ -124,106 +109,73 @@ function RenameFolder(name,uri)
|
||||
|
||||
function MsgEmptyTrash()
|
||||
{
|
||||
var tree = GetFolderTree();
|
||||
if (tree)
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
var startIndex = {};
|
||||
var endIndex = {};
|
||||
folderOutliner.outlinerBoxObject.selection.getRangeAt(0, startIndex, endIndex);
|
||||
if (startIndex.value >= 0)
|
||||
{
|
||||
var folderList = tree.selectedItems;
|
||||
if (folderList)
|
||||
{
|
||||
var folder;
|
||||
folder = folderList[0];
|
||||
if (folder)
|
||||
{
|
||||
var trashUri = GetSelectTrashUri(folder);
|
||||
if (trashUri)
|
||||
{
|
||||
var trashElement = document.getElementById(trashUri);
|
||||
if (trashElement)
|
||||
{
|
||||
dump ('found trash folder\n');
|
||||
trashElement.setAttribute('open','');
|
||||
}
|
||||
var trashSelected = IsSpecialFolderSelected(MSG_FOLDER_FLAG_TRASH);
|
||||
if(trashSelected)
|
||||
{
|
||||
tree.clearItemSelection();
|
||||
}
|
||||
try {
|
||||
messenger.EmptyTrash(tree.database, folder.resource);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
dump ("Exception : messenger.EmptyTrash \n");
|
||||
}
|
||||
if (trashSelected)
|
||||
{
|
||||
trashElement = document.getElementById(trashUri);
|
||||
if (trashElement)
|
||||
ChangeSelection(tree, trashElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
var folderResource = GetFolderResource(folderOutliner, startIndex.value);
|
||||
try {
|
||||
messenger.EmptyTrash(GetFolderDatasource(), folderResource);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
dump ("Exception : messenger.EmptyTrash \n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function MsgCompactFolder(isAll)
|
||||
{
|
||||
//get the selected elements
|
||||
var tree = GetFolderTree();
|
||||
if (tree)
|
||||
{
|
||||
var folderList = tree.selectedItems;
|
||||
if (folderList)
|
||||
{
|
||||
var folder = folderList[0];
|
||||
if (folder)
|
||||
{
|
||||
dump("folder = " + folder.localName + "\n");
|
||||
var selectedFolderUri = folder.getAttribute('id');
|
||||
var isImap=false;
|
||||
if (selectedFolderUri.indexOf("imap:") != -1)
|
||||
isImap = true;
|
||||
if (!isImap) //can be local only
|
||||
{
|
||||
var resource = RDF.GetResource(selectedFolderUri);
|
||||
var msgfolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var expungedBytes = msgfolder.expungedBytes;
|
||||
// Get the selected folders.
|
||||
var selectedFolders = GetSelectedMsgFolders();
|
||||
|
||||
if (expungedBytes > 0)
|
||||
{
|
||||
if (gDBView)
|
||||
gCurrentlyDisplayedMessage = gDBView.currentlyDisplayedMessage;
|
||||
ClearThreadPaneSelection();
|
||||
ClearThreadPane();
|
||||
ClearMessagePane();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isAll) //you have one local folder with no room to compact
|
||||
return;
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
messenger.CompactFolder(tree.database, folder.resource, isAll);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
dump ("Exception : messenger.CompactFolder \n");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (selectedFolders.length == 1)
|
||||
{
|
||||
var selectedFolder = selectedFolders[0];
|
||||
var resource = selectedFolder.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
|
||||
if (selectedFolder.server.type != "imap") //can be local only
|
||||
{
|
||||
var msgfolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
var expungedBytes = msgfolder.expungedBytes;
|
||||
|
||||
if (expungedBytes > 0)
|
||||
{
|
||||
if (gDBView)
|
||||
{
|
||||
gCurrentlyDisplayedMessage = gDBView.currentlyDisplayedMessage;
|
||||
}
|
||||
|
||||
ClearThreadPaneSelection();
|
||||
ClearThreadPane();
|
||||
ClearMessagePane();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isAll) //you have one local folder with no room to compact
|
||||
return;
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
messenger.CompactFolder(GetFolderDatasource(), resource, isAll);
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
dump("Exception : messenger.CompactFolder : " + ex + "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function MsgFolderProperties()
|
||||
{
|
||||
var preselectedURI = GetSelectedFolderURI();
|
||||
var serverType = GetMsgFolderFromUri(preselectedURI).server.type;
|
||||
var folderTree = GetFolderTree();
|
||||
var folderOutliner = GetFolderOutliner();
|
||||
|
||||
var name = GetFolderNameFromUri(preselectedURI, folderTree);
|
||||
var name = GetFolderNameFromUri(preselectedURI, folderOutliner);
|
||||
|
||||
var windowTitle = gMessengerBundle.getString("folderProperties");
|
||||
var dialog = window.openDialog(
|
||||
@ -231,7 +183,7 @@ function MsgFolderProperties()
|
||||
"",
|
||||
"chrome,centerscreen,titlebar,modal",
|
||||
{preselectedURI:preselectedURI, serverType:serverType,
|
||||
msgWindow:msgWindow, title:windowTitle,
|
||||
msgWindow:msgWindow, title:windowTitle,
|
||||
okCallback:FolderProperties,
|
||||
tabID:"", tabIndex:0, name:name});
|
||||
}
|
||||
|
@ -343,6 +343,8 @@ Rights Reserved.
|
||||
<!ENTITY editMsgAsNewCmd.key "e">
|
||||
<!ENTITY moveMsgMenu.label "Move Message">
|
||||
<!ENTITY moveMsgMenu.accesskey "M">
|
||||
<!ENTITY copyMessageLocation.label "Copy Message Location">
|
||||
<!ENTITY copyMessageLocation.accesskey "M">
|
||||
<!ENTITY copyMsgMenu.label "Copy Message">
|
||||
<!ENTITY copyMsgMenu.accesskey "C">
|
||||
<!ENTITY killThreadMenu.label "Ignore Thread">
|
||||
@ -377,8 +379,10 @@ Rights Reserved.
|
||||
<!ENTITY openMessageWindowCmd.accesskey "O">
|
||||
<!ENTITY openMessageWindowCmd.key "o">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<!ENTITY mail-sidebar-header.label "Mail Folders">
|
||||
<!-- Folder Pane -->
|
||||
<!ENTITY nameColumn.label "Name">
|
||||
<!ENTITY unreadColumn.label "Unread">
|
||||
<!ENTITY totalColumn.label "Total">
|
||||
|
||||
<!-- Toolbar items -->
|
||||
<!ENTITY getMsgButton.label "Get Msg">
|
||||
|
@ -76,8 +76,10 @@ nsIRDFResource* nsMsgAccountManagerDataSource::kNC_AccountRoot=nsnull;
|
||||
// attributes of accounts
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_Name=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeName=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeSimpleName=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_NameSort=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeNameSort=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeSimpleNameSort=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_PageTag=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_IsDefaultServer=nsnull;
|
||||
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_SupportsFilters=nsnull;
|
||||
@ -135,8 +137,10 @@ nsMsgAccountManagerDataSource::nsMsgAccountManagerDataSource()
|
||||
getRDFService()->GetResource(NC_RDF_CHILD, &kNC_Child);
|
||||
getRDFService()->GetResource(NC_RDF_NAME, &kNC_Name);
|
||||
getRDFService()->GetResource(NC_RDF_FOLDERTREENAME, &kNC_FolderTreeName);
|
||||
getRDFService()->GetResource(NC_RDF_FOLDERTREESIMPLENAME, &kNC_FolderTreeSimpleName);
|
||||
getRDFService()->GetResource(NC_RDF_NAME_SORT, &kNC_NameSort);
|
||||
getRDFService()->GetResource(NC_RDF_FOLDERTREENAME_SORT, &kNC_FolderTreeNameSort);
|
||||
getRDFService()->GetResource(NC_RDF_FOLDERTREESIMPLENAME_SORT, &kNC_FolderTreeSimpleNameSort);
|
||||
getRDFService()->GetResource(NC_RDF_PAGETAG, &kNC_PageTag);
|
||||
getRDFService()->GetResource(NC_RDF_ISDEFAULTSERVER, &kNC_IsDefaultServer);
|
||||
getRDFService()->GetResource(NC_RDF_SUPPORTSFILTERS, &kNC_SupportsFilters);
|
||||
@ -177,8 +181,10 @@ nsMsgAccountManagerDataSource::~nsMsgAccountManagerDataSource()
|
||||
NS_IF_RELEASE(kNC_Child);
|
||||
NS_IF_RELEASE(kNC_Name);
|
||||
NS_IF_RELEASE(kNC_FolderTreeName);
|
||||
NS_IF_RELEASE(kNC_FolderTreeSimpleName);
|
||||
NS_IF_RELEASE(kNC_NameSort);
|
||||
NS_IF_RELEASE(kNC_FolderTreeNameSort);
|
||||
NS_IF_RELEASE(kNC_FolderTreeSimpleNameSort);
|
||||
NS_IF_RELEASE(kNC_PageTag);
|
||||
NS_IF_RELEASE(kNC_IsDefaultServer);
|
||||
NS_IF_RELEASE(kNC_SupportsFilters);
|
||||
@ -269,7 +275,7 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
|
||||
rv = NS_RDF_NO_VALUE;
|
||||
|
||||
nsAutoString str;
|
||||
if (property == kNC_Name || property == kNC_FolderTreeName) {
|
||||
if (property == kNC_Name || property == kNC_FolderTreeName || property == kNC_FolderTreeSimpleName) {
|
||||
|
||||
rv = getStringBundle();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
@ -343,7 +349,8 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
|
||||
|
||||
// handle sorting of servers
|
||||
else if ((property == kNC_NameSort) ||
|
||||
(property == kNC_FolderTreeNameSort)) {
|
||||
(property == kNC_FolderTreeNameSort) ||
|
||||
(property == kNC_FolderTreeSimpleNameSort)) {
|
||||
|
||||
// make sure we're handling a root folder that is a server
|
||||
nsCOMPtr<nsIMsgIncomingServer> server;
|
||||
@ -644,8 +651,10 @@ nsMsgAccountManagerDataSource::getAccountArcs(nsISupportsArray **aResult)
|
||||
mAccountArcsOut->AppendElement(kNC_Settings);
|
||||
mAccountArcsOut->AppendElement(kNC_Name);
|
||||
mAccountArcsOut->AppendElement(kNC_FolderTreeName);
|
||||
mAccountArcsOut->AppendElement(kNC_FolderTreeSimpleName);
|
||||
mAccountArcsOut->AppendElement(kNC_NameSort);
|
||||
mAccountArcsOut->AppendElement(kNC_FolderTreeNameSort);
|
||||
mAccountArcsOut->AppendElement(kNC_FolderTreeSimpleNameSort);
|
||||
mAccountArcsOut->AppendElement(kNC_PageTag);
|
||||
}
|
||||
|
||||
@ -669,8 +678,10 @@ nsMsgAccountManagerDataSource::getAccountRootArcs(nsISupportsArray **aResult)
|
||||
mAccountRootArcsOut->AppendElement(kNC_Settings);
|
||||
mAccountRootArcsOut->AppendElement(kNC_Name);
|
||||
mAccountRootArcsOut->AppendElement(kNC_FolderTreeName);
|
||||
mAccountRootArcsOut->AppendElement(kNC_FolderTreeSimpleName);
|
||||
mAccountRootArcsOut->AppendElement(kNC_NameSort);
|
||||
mAccountRootArcsOut->AppendElement(kNC_FolderTreeNameSort);
|
||||
mAccountRootArcsOut->AppendElement(kNC_FolderTreeSimpleNameSort);
|
||||
mAccountRootArcsOut->AppendElement(kNC_PageTag);
|
||||
}
|
||||
|
||||
|
@ -106,8 +106,10 @@ protected:
|
||||
|
||||
static nsIRDFResource* kNC_Name;
|
||||
static nsIRDFResource* kNC_FolderTreeName;
|
||||
static nsIRDFResource* kNC_FolderTreeSimpleName;
|
||||
static nsIRDFResource* kNC_NameSort;
|
||||
static nsIRDFResource* kNC_FolderTreeNameSort;
|
||||
static nsIRDFResource* kNC_FolderTreeSimpleNameSort;
|
||||
static nsIRDFResource* kNC_PageTag;
|
||||
static nsIRDFResource* kNC_IsDefaultServer;
|
||||
static nsIRDFResource* kNC_SupportsFilters;
|
||||
|
@ -834,7 +834,7 @@ NS_IMETHODIMP nsMsgDBView::HasNextSibling(PRInt32 rowIndex, PRInt32 afterIndex,
|
||||
PRInt32 i;
|
||||
PRInt32 count;
|
||||
GetRowCount(&count);
|
||||
for(i = afterIndex + 1; i < count - 1; i++) {
|
||||
for(i = afterIndex + 1; i < count; i++) {
|
||||
PRInt32 l;
|
||||
GetLevel(i, &l);
|
||||
if (l < rowIndexLevel)
|
||||
|
@ -52,12 +52,13 @@ static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID);
|
||||
static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID);
|
||||
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_Child = nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_MessageChild = nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_Folder= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_Name= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_FolderTreeName= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_FolderTreeSimpleName= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_NameSort= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_FolderTreeNameSort= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_FolderTreeSimpleNameSort= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_SpecialFolder= nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_ServerType = nsnull;
|
||||
nsIRDFResource* nsMsgFolderDataSource::kNC_CanCreateFoldersOnServer = nsnull;
|
||||
@ -103,6 +104,8 @@ nsIAtom * nsMsgFolderDataSource::kNewMessagesAtom = nsnull;
|
||||
nsIAtom * nsMsgFolderDataSource::kTotalMessagesAtom = nsnull;
|
||||
nsIAtom * nsMsgFolderDataSource::kTotalUnreadMessagesAtom = nsnull;
|
||||
nsIAtom * nsMsgFolderDataSource::kNameAtom = nsnull;
|
||||
nsIAtom * nsMsgFolderDataSource::kSynchronizeAtom = nsnull;
|
||||
|
||||
|
||||
nsMsgFolderDataSource::nsMsgFolderDataSource()
|
||||
{
|
||||
@ -111,12 +114,13 @@ nsMsgFolderDataSource::nsMsgFolderDataSource()
|
||||
|
||||
if (gFolderResourceRefCnt++ == 0) {
|
||||
rdf->GetResource(NC_RDF_CHILD, &kNC_Child);
|
||||
rdf->GetResource(NC_RDF_MESSAGECHILD, &kNC_MessageChild);
|
||||
rdf->GetResource(NC_RDF_FOLDER, &kNC_Folder);
|
||||
rdf->GetResource(NC_RDF_NAME, &kNC_Name);
|
||||
rdf->GetResource(NC_RDF_FOLDERTREENAME, &kNC_FolderTreeName);
|
||||
rdf->GetResource(NC_RDF_FOLDERTREESIMPLENAME, &kNC_FolderTreeSimpleName);
|
||||
rdf->GetResource(NC_RDF_NAME_SORT, &kNC_NameSort);
|
||||
rdf->GetResource(NC_RDF_FOLDERTREENAME_SORT, &kNC_FolderTreeNameSort);
|
||||
rdf->GetResource(NC_RDF_FOLDERTREESIMPLENAME_SORT, &kNC_FolderTreeSimpleNameSort);
|
||||
rdf->GetResource(NC_RDF_SPECIALFOLDER, &kNC_SpecialFolder);
|
||||
rdf->GetResource(NC_RDF_SERVERTYPE, &kNC_ServerType);
|
||||
rdf->GetResource(NC_RDF_CANCREATEFOLDERSONSERVER, &kNC_CanCreateFoldersOnServer);
|
||||
@ -159,8 +163,9 @@ nsMsgFolderDataSource::nsMsgFolderDataSource()
|
||||
kTotalMessagesAtom = NS_NewAtom("TotalMessages");
|
||||
kTotalUnreadMessagesAtom = NS_NewAtom("TotalUnreadMessages");
|
||||
kBiffStateAtom = NS_NewAtom("BiffState");
|
||||
kNewMessagesAtom = NS_NewAtom("NewMessages");
|
||||
kNameAtom = NS_NewAtom("Name");
|
||||
kNewMessagesAtom = NS_NewAtom("NewMessages");
|
||||
kNameAtom = NS_NewAtom("Name");
|
||||
kSynchronizeAtom = NS_NewAtom("Synchronize");
|
||||
}
|
||||
|
||||
CreateLiterals(rdf);
|
||||
@ -174,12 +179,13 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
|
||||
{
|
||||
nsrefcnt refcnt;
|
||||
NS_RELEASE2(kNC_Child, refcnt);
|
||||
NS_RELEASE2(kNC_MessageChild, refcnt);
|
||||
NS_RELEASE2(kNC_Folder, refcnt);
|
||||
NS_RELEASE2(kNC_Name, refcnt);
|
||||
NS_RELEASE2(kNC_FolderTreeName, refcnt);
|
||||
NS_RELEASE2(kNC_FolderTreeSimpleName, refcnt);
|
||||
NS_RELEASE2(kNC_NameSort, refcnt);
|
||||
NS_RELEASE2(kNC_FolderTreeNameSort, refcnt);
|
||||
NS_RELEASE2(kNC_FolderTreeSimpleNameSort, refcnt);
|
||||
NS_RELEASE2(kNC_SpecialFolder, refcnt);
|
||||
NS_RELEASE2(kNC_ServerType, refcnt);
|
||||
NS_RELEASE2(kNC_CanCreateFoldersOnServer, refcnt);
|
||||
@ -223,6 +229,7 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
|
||||
NS_RELEASE(kBiffStateAtom);
|
||||
NS_RELEASE(kNewMessagesAtom);
|
||||
NS_RELEASE(kNameAtom);
|
||||
NS_RELEASE(kSynchronizeAtom);
|
||||
}
|
||||
|
||||
}
|
||||
@ -405,6 +412,7 @@ NS_IMETHODIMP nsMsgFolderDataSource::GetTargets(nsIRDFResource* source,
|
||||
}
|
||||
else if ((kNC_Name == property) ||
|
||||
(kNC_FolderTreeName == property) ||
|
||||
(kNC_FolderTreeSimpleName == property) ||
|
||||
(kNC_SpecialFolder == property) ||
|
||||
(kNC_IsServer == property) ||
|
||||
(kNC_IsSecure == property) ||
|
||||
@ -495,6 +503,7 @@ nsMsgFolderDataSource::HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc,
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
*result = (aArc == kNC_Name ||
|
||||
aArc == kNC_FolderTreeName ||
|
||||
aArc == kNC_FolderTreeSimpleName ||
|
||||
aArc == kNC_SpecialFolder ||
|
||||
aArc == kNC_ServerType ||
|
||||
aArc == kNC_CanCreateFoldersOnServer ||
|
||||
@ -557,6 +566,7 @@ nsMsgFolderDataSource::getFolderArcLabelsOut(nsISupportsArray **arcs)
|
||||
|
||||
(*arcs)->AppendElement(kNC_Name);
|
||||
(*arcs)->AppendElement(kNC_FolderTreeName);
|
||||
(*arcs)->AppendElement(kNC_FolderTreeSimpleName);
|
||||
(*arcs)->AppendElement(kNC_SpecialFolder);
|
||||
(*arcs)->AppendElement(kNC_ServerType);
|
||||
(*arcs)->AppendElement(kNC_CanCreateFoldersOnServer);
|
||||
@ -867,23 +877,25 @@ nsMsgFolderDataSource::OnItemBoolPropertyChanged(nsISupports *item,
|
||||
PRBool oldValue,
|
||||
PRBool newValue)
|
||||
{
|
||||
nsCOMPtr<nsIMsgFolder> folder(do_QueryInterface(item));
|
||||
if(folder)
|
||||
{
|
||||
nsCOMPtr<nsIRDFResource> resource(do_QueryInterface(item));
|
||||
if(resource)
|
||||
{
|
||||
if (kNewMessagesAtom == property)
|
||||
{
|
||||
if (newValue != oldValue) {
|
||||
nsIRDFNode* newMessagesNode = newValue?kTrueLiteral:kFalseLiteral;
|
||||
NotifyPropertyChanged(resource, kNC_NewMessages, newMessagesNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIMsgFolder> folder(do_QueryInterface(item));
|
||||
if (!folder) return rv;
|
||||
|
||||
nsCOMPtr<nsIRDFResource> resource(do_QueryInterface(item));
|
||||
if (!item) return rv;
|
||||
|
||||
if (newValue != oldValue) {
|
||||
nsIRDFNode* literalNode = newValue?kTrueLiteral:kFalseLiteral;
|
||||
if (kNewMessagesAtom == property) {
|
||||
NotifyPropertyChanged(resource, kNC_NewMessages, literalNode);
|
||||
}
|
||||
else if (kSynchronizeAtom == property) {
|
||||
NotifyPropertyChanged(resource, kNC_Synchronize, literalNode);
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -937,15 +949,19 @@ nsresult nsMsgFolderDataSource::createFolderNode(nsIMsgFolder* folder,
|
||||
nsresult rv = NS_RDF_NO_VALUE;
|
||||
|
||||
if (kNC_NameSort == property)
|
||||
rv = createFolderNameNode(folder, target, PR_TRUE);
|
||||
rv = createFolderNameNode(folder, target, PR_TRUE);
|
||||
else if(kNC_FolderTreeNameSort == property)
|
||||
rv = createFolderTreeNameNode(folder, target, PR_TRUE);
|
||||
rv = createFolderTreeNameNode(folder, target, PR_TRUE);
|
||||
else if(kNC_FolderTreeSimpleNameSort == property)
|
||||
rv = createFolderTreeSimpleNameNode(folder, target, PR_TRUE);
|
||||
else if (kNC_Name == property)
|
||||
rv = createFolderNameNode(folder, target, PR_FALSE);
|
||||
rv = createFolderNameNode(folder, target, PR_FALSE);
|
||||
else if (kNC_FolderTreeName == property)
|
||||
rv = createFolderTreeNameNode(folder, target, PR_FALSE);
|
||||
rv = createFolderTreeNameNode(folder, target, PR_FALSE);
|
||||
else if (kNC_FolderTreeSimpleName == property)
|
||||
rv = createFolderTreeSimpleNameNode(folder, target, PR_FALSE);
|
||||
else if ((kNC_SpecialFolder == property))
|
||||
rv = createFolderSpecialNode(folder,target);
|
||||
rv = createFolderSpecialNode(folder,target);
|
||||
else if ((kNC_ServerType == property))
|
||||
rv = createFolderServerTypeNode(folder, target);
|
||||
else if ((kNC_CanCreateFoldersOnServer == property))
|
||||
@ -1040,6 +1056,20 @@ nsresult nsMsgFolderDataSource::createFolderTreeNameNode(nsIMsgFolder *folder,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsMsgFolderDataSource::createFolderTreeSimpleNameNode(nsIMsgFolder * folder, nsIRDFNode **target, PRBool sort)
|
||||
{
|
||||
nsXPIDLString name;
|
||||
nsresult rv = folder->GetAbbreviatedName(getter_Copies(name));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
nsAutoString nameString(name);
|
||||
if(sort)
|
||||
{
|
||||
CreateNameSortString(folder, nameString);
|
||||
}
|
||||
createNode(nameString, target, getRDFService());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsMsgFolderDataSource::CreateNameSortString(nsIMsgFolder *folder, nsAutoString &name)
|
||||
{
|
||||
PRInt32 order;
|
||||
@ -1564,7 +1594,6 @@ nsMsgFolderDataSource::NotifyFolderTreeNameChanged(nsIMsgFolder* aFolder,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// <<<<<<<<< >>>>>>>>>>>>>>>>..
|
||||
// New Messages
|
||||
|
||||
nsresult
|
||||
@ -1639,8 +1668,6 @@ nsMsgFolderDataSource::GetNewMessagesString(PRBool newMessages, nsCAutoString& n
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
// <<<<<<<<< >>>>>>>>>>>>>>>>..
|
||||
|
||||
|
||||
nsresult
|
||||
nsMsgFolderDataSource::OnTotalMessagePropertyChanged(nsIMsgFolder *folder, PRInt32 oldValue, PRInt32 newValue)
|
||||
@ -1914,7 +1941,8 @@ nsresult nsMsgFolderDataSource::DoFolderHasAssertion(nsIMsgFolder *folder,
|
||||
}
|
||||
}
|
||||
else if ((kNC_Name == property) ||
|
||||
(kNC_FolderTreeName == property) ||
|
||||
(kNC_FolderTreeName == property) ||
|
||||
(kNC_FolderTreeSimpleName == property) ||
|
||||
(kNC_SpecialFolder == property) ||
|
||||
(kNC_ServerType == property) ||
|
||||
(kNC_CanCreateFoldersOnServer == property) ||
|
||||
|
@ -107,13 +107,14 @@ public:
|
||||
nsISupportsArray/*<nsIRDFResource>*/* aArguments);
|
||||
protected:
|
||||
|
||||
nsresult GetSenderName(nsAutoString& sender, nsAutoString *senderUserName);
|
||||
nsresult GetSenderName(nsAutoString& sender, nsAutoString *senderUserName);
|
||||
|
||||
nsresult createFolderNode(nsIMsgFolder *folder, nsIRDFResource* property,
|
||||
nsresult createFolderNode(nsIMsgFolder *folder, nsIRDFResource* property,
|
||||
nsIRDFNode **target);
|
||||
nsresult createFolderNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
|
||||
nsresult createFolderTreeNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
|
||||
nsresult createFolderSpecialNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||
nsresult createFolderNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
|
||||
nsresult createFolderTreeNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
|
||||
nsresult createFolderTreeSimpleNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
|
||||
nsresult createFolderSpecialNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||
nsresult createFolderServerTypeNode(nsIMsgFolder *folder,
|
||||
nsIRDFNode **target);
|
||||
nsresult createFolderCanCreateFoldersOnServerNode(nsIMsgFolder *folder,
|
||||
@ -190,12 +191,13 @@ protected:
|
||||
nsresult CreateLiterals(nsIRDFService *rdf);
|
||||
|
||||
static nsIRDFResource* kNC_Child;
|
||||
static nsIRDFResource* kNC_MessageChild;
|
||||
static nsIRDFResource* kNC_Folder;
|
||||
static nsIRDFResource* kNC_Name;
|
||||
static nsIRDFResource* kNC_FolderTreeName;
|
||||
static nsIRDFResource* kNC_FolderTreeSimpleName;
|
||||
static nsIRDFResource* kNC_NameSort;
|
||||
static nsIRDFResource* kNC_FolderTreeNameSort;
|
||||
static nsIRDFResource* kNC_FolderTreeSimpleNameSort;
|
||||
static nsIRDFResource* kNC_Columns;
|
||||
static nsIRDFResource* kNC_MSGFolderRoot;
|
||||
static nsIRDFResource* kNC_SpecialFolder;
|
||||
@ -246,6 +248,7 @@ protected:
|
||||
static nsIAtom* kBiffStateAtom;
|
||||
static nsIAtom* kNewMessagesAtom;
|
||||
static nsIAtom* kNameAtom;
|
||||
static nsIAtom* kSynchronizeAtom;
|
||||
|
||||
static nsrefcnt gFolderResourceRefCnt;
|
||||
|
||||
|
@ -59,9 +59,9 @@ typedef struct _nsMsgRDFNotification {
|
||||
#define NC_RDF_THREADSTATE NC_NAMESPACE_URI "ThreadState"
|
||||
|
||||
#define NC_RDF_CHILD NC_NAMESPACE_URI "child"
|
||||
#define NC_RDF_MESSAGECHILD NC_NAMESPACE_URI "MessageChild"
|
||||
#define NC_RDF_NAME NC_NAMESPACE_URI "Name"
|
||||
#define NC_RDF_FOLDERTREENAME NC_NAMESPACE_URI "FolderTreeName"
|
||||
#define NC_RDF_FOLDERTREESIMPLENAME NC_NAMESPACE_URI "FolderTreeSimpleName"
|
||||
#define NC_RDF_FOLDER NC_NAMESPACE_URI "Folder"
|
||||
#define NC_RDF_SPECIALFOLDER NC_NAMESPACE_URI "SpecialFolder"
|
||||
#define NC_RDF_SERVERTYPE NC_NAMESPACE_URI "ServerType"
|
||||
@ -100,6 +100,7 @@ typedef struct _nsMsgRDFNotification {
|
||||
|
||||
#define NC_RDF_NAME_SORT NC_NAMESPACE_URI "Name?sort=true"
|
||||
#define NC_RDF_FOLDERTREENAME_SORT NC_NAMESPACE_URI "FolderTreeName?sort=true"
|
||||
#define NC_RDF_FOLDERTREESIMPLENAME_SORT NC_NAMESPACE_URI "FolderTreeSimpleName?sort=true"
|
||||
|
||||
//Folder Commands
|
||||
#define NC_RDF_DELETE NC_NAMESPACE_URI "Delete"
|
||||
|
@ -83,6 +83,7 @@ nsIAtom * nsMsgFolder::kTotalUnreadMessagesAtom = nsnull;
|
||||
nsIAtom * nsMsgFolder::kFlaggedAtom = nsnull;
|
||||
nsIAtom * nsMsgFolder::kStatusAtom = nsnull;
|
||||
nsIAtom * nsMsgFolder::kNameAtom = nsnull;
|
||||
nsIAtom * nsMsgFolder::kSynchronizeAtom = nsnull;
|
||||
|
||||
#ifdef MSG_FASTER_URI_PARSING
|
||||
nsCOMPtr<nsIURL> nsMsgFolder::mParsingURL;
|
||||
@ -126,6 +127,7 @@ nsMsgFolder::nsMsgFolder(void)
|
||||
kTotalMessagesAtom = NS_NewAtom("TotalMessages");
|
||||
kStatusAtom = NS_NewAtom("Status");
|
||||
kFlaggedAtom = NS_NewAtom("Flagged");
|
||||
kSynchronizeAtom = NS_NewAtom("Synchronize");
|
||||
|
||||
initializeStrings();
|
||||
|
||||
@ -166,6 +168,7 @@ nsMsgFolder::~nsMsgFolder(void)
|
||||
NS_IF_RELEASE(kFlaggedAtom);
|
||||
NS_IF_RELEASE(kStatusAtom);
|
||||
NS_IF_RELEASE(kNameAtom);
|
||||
NS_IF_RELEASE(kSynchronizeAtom);
|
||||
|
||||
CRTFREEIF(kInboxName);
|
||||
CRTFREEIF(kTrashName);
|
||||
@ -1588,9 +1591,15 @@ NS_IMETHODIMP nsMsgFolder::OnFlagChange(PRUint32 flag)
|
||||
folderInfo->SetFlags((PRInt32) mFlags);
|
||||
if (db)
|
||||
db->Commit(nsMsgDBCommitType::kLargeCommit);
|
||||
|
||||
if (flag & MSG_FOLDER_FLAG_OFFLINE) {
|
||||
PRBool newValue = mFlags & MSG_FOLDER_FLAG_OFFLINE;
|
||||
rv = NotifyBoolPropertyChanged(kSynchronizeAtom, !newValue, newValue);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
}
|
||||
}
|
||||
folderInfo = null_nsCOMPtr();
|
||||
return rv;
|
||||
folderInfo = nsnull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgFolder::SetFlags(PRUint32 aFlags)
|
||||
@ -1617,6 +1626,12 @@ NS_IMETHODIMP nsMsgFolder::GetFoldersWithFlag(PRUint32 flags, PRUint32 resultsiz
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIMsgFolder> folder;
|
||||
PRUint32 cnt;
|
||||
|
||||
// call GetSubFolders() to ensure that mSubFolders is initialized
|
||||
nsCOMPtr <nsIEnumerator> enumerator;
|
||||
rv = GetSubFolders(getter_AddRefs(enumerator));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
rv = mSubFolders->Count(&cnt);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
for (PRUint32 i=0; i < cnt; i++)
|
||||
|
@ -295,6 +295,7 @@ protected:
|
||||
static nsIAtom* kStatusAtom;
|
||||
static nsIAtom* kFlaggedAtom;
|
||||
static nsIAtom* kNameAtom;
|
||||
static nsIAtom* kSynchronizeAtom;
|
||||
|
||||
#ifdef MSG_FASTER_URI_PARSING
|
||||
// cached parsing URL object
|
||||
|
@ -20,6 +20,12 @@
|
||||
<RDF:Description about="chrome://messenger/content/messenger.xul#sizeCol">
|
||||
<hidden>true</hidden>
|
||||
</RDF:Description>
|
||||
<RDF:Description about="chrome://messenger/content/messenger.xul#folderUnreadCol">
|
||||
<hidden>true</hidden>
|
||||
</RDF:Description>
|
||||
<RDF:Description about="chrome://messenger/content/messenger.xul#folderTotalCol">
|
||||
<hidden>true</hidden>
|
||||
</RDF:Description>
|
||||
<RDF:Description about="chrome://messenger/content/messenger.xul">
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#statusCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#sizeCol"/>
|
||||
@ -27,6 +33,8 @@
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#totalCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#OrderReceivedColumn"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#flaggedCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#folderUnreadCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#folderTotalCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#messengerWindow"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#sidebar-panels"/>
|
||||
<NC:persist resource="chrome://messenger/content/messenger.xul#sidebar-panels-splitter-box"/>
|
||||
@ -87,6 +95,12 @@
|
||||
<RDF:Description about="chrome://messenger/content/mail3PaneWindowVertLayout.xul#sizeCol">
|
||||
<hidden>true</hidden>
|
||||
</RDF:Description>
|
||||
<RDF:Description about="chrome://messenger/content/mail3PaneWindowVertLayout.xul#folderUnreadCol">
|
||||
<hidden>true</hidden>
|
||||
</RDF:Description>
|
||||
<RDF:Description about="chrome://messenger/content/mail3PaneWindowVertLayout.xul#folderTotalCol">
|
||||
<hidden>true</hidden>
|
||||
</RDF:Description>
|
||||
<RDF:Description about="chrome://messenger/content/mail3PaneWindowVertLayout.xul">
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#statusCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#sizeCol"/>
|
||||
@ -94,5 +108,7 @@
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#totalCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#OrderReceivedColumn"/>
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#flaggedCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#folderUnreadCol"/>
|
||||
<NC:persist resource="chrome://messenger/content/mail3PaneWindowVertLayout.xul#folderTotalCol"/>
|
||||
</RDF:Description>
|
||||
</RDF:RDF>
|
||||
|
@ -26,8 +26,8 @@ outlinerbody {
|
||||
|
||||
outlinerbody:-moz-outliner-row
|
||||
{
|
||||
height: 17px;
|
||||
border-bottom : 1px solid #FFFFFF;
|
||||
height: 18px;
|
||||
border-bottom : 1px solid #FFFFFF;
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-row(selected)
|
||||
@ -148,3 +148,6 @@ outlinerbody:-moz-outliner-twisty(open) {
|
||||
list-style-image: url("chrome://global/skin/twisty-open.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-indentation {
|
||||
width: 16px;
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ outlinerbody {
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-row {
|
||||
height: 17px;
|
||||
height: 18px;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
@ -144,3 +144,6 @@ outlinerbody:-moz-outliner-twisty(open) {
|
||||
list-style-image: url("chrome://global/skin/twisty-open.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-indentation {
|
||||
width: 16px;
|
||||
}
|
||||
|
@ -16,182 +16,159 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Håkan Waara <hwaara@chello.se>
|
||||
* Jan Varga <varga@utcru.sk>
|
||||
*/
|
||||
|
||||
/* basic mail folders */
|
||||
.tree-cell-folderpane-icon
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-closed.gif");
|
||||
}
|
||||
/* Basic mail folders */
|
||||
outlinerbody:-moz-outliner-image(folderNameCol) {
|
||||
padding-right: 2px;
|
||||
list-style-image : url("chrome://messenger/skin/folder-closed.gif");
|
||||
}
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-open.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, newMessages-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-new-closed.gif");
|
||||
}
|
||||
|
||||
/* special folder */
|
||||
/** Inbox **/
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Inbox"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-inbox.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, newMessages-true) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Special folders */
|
||||
/* ..... Inbox ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
|
||||
padding-right: 2px;
|
||||
list-style-image : url("chrome://messenger/skin/folder-inbox.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-inbox-new.gif");
|
||||
}
|
||||
|
||||
/* ..... Sent ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Sent"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-sent.gif");
|
||||
}
|
||||
|
||||
/* ..... Unsent ..... */
|
||||
|
||||
/* ..... Drafts ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Drafts"] {
|
||||
list-style-image: url("chrome://messenger/skin/folder-draft.gif");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ..... Templates ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Templates"] {
|
||||
list-style-image: url("chrome://messenger/skin/folder-template.gif");
|
||||
}
|
||||
|
||||
|
||||
/* ..... Unsent Messages ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Unsent Messages"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-outbox.gif");
|
||||
}
|
||||
|
||||
/* ..... Drafts ..... */
|
||||
|
||||
/** Trash **/
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Trash"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/folder-trash.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-draft.gif");
|
||||
}
|
||||
|
||||
/* ..... Templates ..... */
|
||||
|
||||
|
||||
/** Server Mail **/
|
||||
.tree-cell-folderpane-icon[IsServer="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-mail.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-template.gif");
|
||||
}
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-mail.gif");
|
||||
/* ..... Trash ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-trash.gif");
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[BiffState="NewMail"][IsServer="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-mail-new.gif");
|
||||
/* Server Mail */
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-mail.gif");
|
||||
}
|
||||
|
||||
treeitem[open="true"] > treerow > .tree-cell-folderpane-icon[BiffState="NewMail"][IsServer="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-mail-new.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-mail-new.gif");
|
||||
}
|
||||
|
||||
/* differentiate new messages on inbox/folders from biff on the server */
|
||||
.tree-cell-folderpane-icon[NewMessages="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/folder-new-closed.gif");
|
||||
font-weight: bold;
|
||||
}
|
||||
/* POP3 servers */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Inbox"][NewMessages="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/folder-inbox-new.gif");
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
treeitem[open="true"] > treerow > .tree-cell-folderpane-icon[NewMessages="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/folder-new-open.gif");
|
||||
font-weight: bold;
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
/* IMAP folders */
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="imap"][IsSecure="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="imap"][IsSecure="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
/* Local servers */
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="none"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-local.gif");
|
||||
}
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="none"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-local.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-local.gif");
|
||||
}
|
||||
|
||||
/* News folders */
|
||||
.tree-cell-folderpane-icon[ServerType="nntp"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"][IsSecure="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-news-lock.gif");
|
||||
}
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"][IsSecure="true"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-news-lock.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, serverType-nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-news.gif");
|
||||
}
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"]
|
||||
{
|
||||
list-style-image: url("chrome://messenger/skin/server-news.gif");
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-news.gif");
|
||||
}
|
||||
|
||||
/*All Servers*/
|
||||
.tree-folder-row[IsServer="true"]
|
||||
{
|
||||
font-weight : bold;
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-news-lock.gif");
|
||||
}
|
||||
|
||||
.tree-folder-row[HasUnreadMessages="true"]
|
||||
{
|
||||
font-weight : bold;
|
||||
}
|
||||
/* All Servers */
|
||||
|
||||
.tree-folder-row[NoSelect="true"]
|
||||
{
|
||||
color : gray;
|
||||
font-style : italic;
|
||||
}
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, isServer-true),
|
||||
outlinerbody:-moz-outliner-cell-text(hasUnreadMessages-true) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#folder-panel
|
||||
{
|
||||
min-width : 10px;
|
||||
}
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
|
||||
color: gray;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#folder-panel {
|
||||
min-width: 10px;
|
||||
}
|
||||
|
||||
/* using tree-cell-folderpane-icon to isolate this rule to the folderpane
|
||||
and prevent such crawls on the threadpane */
|
||||
treeitem[empty="true"] > treerow > .tree-cell-folderpane-icon > .tree-cell-twisty
|
||||
{
|
||||
visibility : hidden;
|
||||
}
|
||||
treeitem[empty="true"] > treerow > .tree-cell-folderpane-icon > .tree-cell-twisty {
|
||||
visibility : hidden;
|
||||
}
|
||||
|
||||
.tree-folder-checkbox {
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol) {
|
||||
list-style-image: url("chrome://messenger/skin/dot.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol, synchronize-true) {
|
||||
list-style-image: url("chrome://messenger/skin/check.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol, isServer-true) {
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
.tree-folder-checkbox
|
||||
{
|
||||
list-style-image: none;
|
||||
}
|
||||
|
@ -63,6 +63,7 @@
|
||||
/* for search */
|
||||
|
||||
outlinerbody:-moz-outliner-image(nameCol, nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
|
@ -140,30 +140,37 @@ outlinerbody:-moz-outliner-image(flaggedCol, flagged) {
|
||||
/* ..... subject column ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, new) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, attach) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail-attach.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail-imapdelete.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-news.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news, new) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-news-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news, attach) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-news-attach.gif");
|
||||
}
|
||||
|
||||
|
@ -16,201 +16,164 @@
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Jan Varga (varga@utcru.sk)
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
*/
|
||||
|
||||
/* basic mail folders */
|
||||
.tree-cell-folderpane-icon
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-closed.gif");
|
||||
}
|
||||
/* Basic mail folders */
|
||||
|
||||
treeitem.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-open.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-closed.gif");
|
||||
}
|
||||
|
||||
/* special folder */
|
||||
/** Inbox **/
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Inbox"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-inbox.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, newMessages-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-new-closed.gif");
|
||||
}
|
||||
|
||||
/* Special folders */
|
||||
/* ..... Inbox ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-inbox.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-inbox-new.gif");
|
||||
}
|
||||
|
||||
/* ..... Sent ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Sent"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-sent.gif");
|
||||
}
|
||||
|
||||
/* ..... Unsent ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Unsent Messages"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-outbox.gif");
|
||||
}
|
||||
|
||||
/* ..... Drafts ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Drafts"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-draft.gif");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ..... Templates ..... */
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Templates"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-template.gif");
|
||||
}
|
||||
|
||||
/* ..... Trash ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-trash.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-mail.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-mail-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, newMessages-true),
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/** Trash **/
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Trash"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-trash.gif");
|
||||
}
|
||||
|
||||
/* XXX this is so evil, but it looks nice on en-US. Should really be a
|
||||
special type that we can style... */
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Drafts"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-draft.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"] > treerow > .tree-cell-folderpane-icon[SpecialFolder="Drafts"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-draft.gif");
|
||||
}
|
||||
/* POP3 servers */
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-mail.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-mail.gif");
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[BiffState="NewMail"][IsServer="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-mail-new.gif");
|
||||
}
|
||||
|
||||
treeitem[open="true"] > treerow > .tree-cell-folderpane-icon[BiffState="NewMail"][IsServer="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-mail-new.gif");
|
||||
}
|
||||
|
||||
/* differentiate new messages on inbox/folders from biff on the server */
|
||||
.tree-cell-folderpane-icon[NewMessages="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-new-closed.gif");
|
||||
font-weight : bold;
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[SpecialFolder="Inbox"][NewMessages="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-inbox-new.gif");
|
||||
font-weight : bold;
|
||||
}
|
||||
|
||||
treeitem[open="true"] > treerow > .tree-cell-folderpane-icon[NewMessages="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-new-open.gif");
|
||||
font-weight : bold;
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
/* IMAP folders */
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="imap"][IsSecure="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="imap"][IsSecure="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
/* Local servers */
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="none"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-local.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="none"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-local.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-local.gif");
|
||||
}
|
||||
|
||||
/* News folders */
|
||||
.tree-cell-folderpane-icon[ServerType="nntp"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"][IsSecure="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-news-lock.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, serverType-nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"][IsSecure="true"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-news-lock.gif");
|
||||
}
|
||||
|
||||
.tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-news.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[open="true"] > treerow > .tree-cell-folderpane-icon[IsServer="true"][ServerType="nntp"]
|
||||
{
|
||||
list-style-image : url("chrome://messenger/skin/server-news.gif");
|
||||
}
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-news.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/server-news-lock.gif");
|
||||
}
|
||||
|
||||
/*All Servers*/
|
||||
.tree-folder-row[IsServer="true"]
|
||||
{
|
||||
font-weight : bold;
|
||||
}
|
||||
|
||||
.tree-folder-row[HasUnreadMessages="true"]
|
||||
{
|
||||
font-weight : bold;
|
||||
}
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, isServer-true),
|
||||
outlinerbody:-moz-outliner-cell-text(hasUnreadMessages-true) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tree-folder-row[NoSelect="true"]
|
||||
{
|
||||
color : gray;
|
||||
font-style : italic;
|
||||
}
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
|
||||
color: gray;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#folder-panel
|
||||
{
|
||||
min-width : 10px;
|
||||
}
|
||||
#folder-panel {
|
||||
min-width: 10px;
|
||||
}
|
||||
|
||||
|
||||
#folderTree
|
||||
{
|
||||
border: none;
|
||||
}
|
||||
#folderTree {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* using tree-cell-folderpane-icon to isolate this rule to the folderpane
|
||||
and prevent such crawls on the threadpane */
|
||||
treeitem[empty="true"] > treerow > .tree-cell-folderpane-icon > .tree-cell-twisty
|
||||
{
|
||||
visibility : hidden;
|
||||
}
|
||||
treeitem[empty="true"] > treerow > .tree-cell-folderpane-icon > .tree-cell-twisty {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.tree-folder-checkbox {
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol) {
|
||||
list-style-image: url("chrome://messenger/skin/dot.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol, synchronize-true) {
|
||||
list-style-image: url("chrome://messenger/skin/check.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol, isServer-true) {
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
.tree-folder-checkbox
|
||||
{
|
||||
list-style-image: none;
|
||||
}
|
||||
|
@ -63,6 +63,7 @@
|
||||
/* for search */
|
||||
|
||||
outlinerbody:-moz-outliner-image(nameCol, nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
|
@ -150,30 +150,37 @@ outlinerbody:-moz-outliner-image(flaggedCol, flagged) {
|
||||
/* ..... subject column ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, new) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, attach) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail-attach.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-mail-imapdelete.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-news.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news, new) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-news-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news, attach) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/message-news-attach.gif");
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ outlinerbody {
|
||||
|
||||
outlinerbody:-moz-outliner-row {
|
||||
border: 1px solid transparent;
|
||||
height: 17px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-row(selected) {
|
||||
@ -166,3 +166,7 @@ outlinerbody:-moz-outliner-twisty(open) {
|
||||
width: 10px; /* The image's width is 10 pixels */
|
||||
list-style-image: url("chrome://global/skin/tree/twisty-open.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-indentation {
|
||||
width: 16px;
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
*
|
||||
* Contributor(s):
|
||||
* Joe Hewitt (hewitt@netscape.com)
|
||||
* Håkan Waara (hwaara@chello.se)
|
||||
* Jan Varga (varga@utcru.sk)
|
||||
*/
|
||||
|
||||
/* ===== folderPane.css =================================================
|
||||
@ -29,163 +31,119 @@
|
||||
|
||||
/* ::::: mail folder ::::: */
|
||||
|
||||
.folderTreeItem {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-closed.gif");
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"]
|
||||
.folderTreeItem[open="true"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-open.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[NewMessages="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, newMessages-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-new.gif");
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][NewMessages="true"],
|
||||
.folderTreeItem[open="true"][NewMessages="true"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-new-open.gif");
|
||||
}
|
||||
|
||||
/* ..... Inbox ..... */
|
||||
|
||||
.folderTreeItem[SpecialFolder="Inbox"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-inbox.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Inbox"],
|
||||
.folderTreeItem[open="true"][SpecialFolder="Inbox"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-inbox-open.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[SpecialFolder="Inbox"][NewMessages="true"],
|
||||
.folderTreeItem[NewMessages="true"][SpecialFolder="Inbox"][selected="true"],
|
||||
.folderTreeItem[NewMessages="true"][SpecialFolder="Inbox"][open="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-inbox-new.gif");
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* ..... Sent ..... */
|
||||
|
||||
.folderTreeItem[SpecialFolder="Sent"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-sent.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Sent"],
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Sent"][NewMessages="true"],
|
||||
.folderTreeItem[open="true"][SpecialFolder="Sent"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-sent-open.gif");
|
||||
}
|
||||
|
||||
/* ..... Drafts ..... */
|
||||
|
||||
.folderTreeItem[SpecialFolder="Drafts"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-draft.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Drafts"],
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Drafts"][NewMessages="true"],
|
||||
.folderTreeItem[open="true"][SpecialFolder="Drafts"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-draft-open.gif");
|
||||
}
|
||||
|
||||
/* ..... Templates ..... */
|
||||
|
||||
.folderTreeItem[SpecialFolder="Templates"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-template.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Templates"],
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Templates"][NewMessages="true"],
|
||||
.folderTreeItem[open="true"][SpecialFolder="Templates"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-template-open.gif");
|
||||
}
|
||||
|
||||
/* ..... Unsent Messages ..... */
|
||||
|
||||
.folderTreeItem[SpecialFolder="Unsent Messages"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-outbox.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Unsent Messages"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-outbox-open.gif");
|
||||
}
|
||||
|
||||
/* ..... Trash ..... */
|
||||
|
||||
.folderTreeItem[SpecialFolder="Trash"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-trash.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Trash"],
|
||||
.folderTreeItem[selected="true"][SpecialFolder="Trash"][NewMessages="true"],
|
||||
.folderTreeItem[open="true"][SpecialFolder="Trash"][NewMessages="true"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-trash-open.gif");
|
||||
}
|
||||
|
||||
/* ..... Server Folders ..... */
|
||||
|
||||
.folderTreeItem[IsServer="true"],
|
||||
.folderTreeItem[IsServer="true"][selected="true"],
|
||||
.folderTreeItem[IsServer="true"][open="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-mail.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[BiffState="NewMail"][IsServer="true"],
|
||||
.folderTreeItem[BiffState="NewMail"][IsServer="true"][selected="true"],
|
||||
.folderTreeItem[BiffState="NewMail"][IsServer="true"][open="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-mail-new.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[IsServer="true"][ServerType="imap"][IsSecure="true"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="imap"][IsSecure="true"][selected="true"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="imap"][IsSecure="true"][open="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
|
||||
}
|
||||
|
||||
/* ..... Local Servers ..... */
|
||||
|
||||
.folderTreeItem[IsServer="true"][ServerType="none"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="none"][selected="true"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="none"][open="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-local.gif");
|
||||
}
|
||||
|
||||
/* ..... News Servers ..... */
|
||||
|
||||
.folderTreeItem[IsServer="true"][ServerType="nntp"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="nntp"][selected="true"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="nntp"][open="true"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
|
||||
}
|
||||
|
||||
.folderTreeItem[IsServer="true"][ServerType="nntp"][IsSecure="true"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="nntp"][IsSecure="true"][selected="true"],
|
||||
.folderTreeItem[IsServer="true"][ServerType="nntp"][IsSecure="true"][open="true"] {
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-news-lock.gif");
|
||||
}
|
||||
|
||||
/* ..... News Folders ..... */
|
||||
|
||||
.folderTreeItem[ServerType="nntp"],
|
||||
.folderTreeItem[ServerType="nntp"][selected="true"],
|
||||
.folderTreeItem[ServerType="nntp"][open="true"] {
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, serverType-nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
/* ..... News Servers ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/server-news-lock.gif");
|
||||
}
|
||||
|
||||
/* ::::: All Servers ::::: */
|
||||
|
||||
.tree-folder-row[IsServer="true"] {
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, isServer-true),
|
||||
outlinerbody:-moz-outliner-cell-text(hasUnreadMessages-true) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tree-folder-row[HasUnreadMessages="true"] {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tree-folder-row[NoSelect="true"] {
|
||||
outlinerbody:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
|
||||
color: gray;
|
||||
font-style: italic;
|
||||
}
|
||||
@ -193,3 +151,18 @@
|
||||
.tree-folder-checkbox {
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol) {
|
||||
list-style-image: url("chrome://global/skin/checkbox/cbox.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol, synchronize-true) {
|
||||
list-style-image: url("chrome://global/skin/checkbox/cbox-check.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(syncCol, isServer-true) {
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -79,6 +79,7 @@ statusbarpanel,
|
||||
/* for search in subscribe */
|
||||
|
||||
outlinerbody:-moz-outliner-image(nameCol, nntp) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
|
||||
}
|
||||
|
||||
|
@ -144,46 +144,57 @@ outlinerbody:-moz-outliner-image(flaggedCol, flagged) {
|
||||
/* ..... subject column ..... */
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, new) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, attach) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-attach.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-imapdelete.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, offline) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-offl.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, new, offline) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-new-offl.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, attach, offline) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-attach-offl.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted, offline) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-mail-delete-offl.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-news.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news, new) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-news-new.gif");
|
||||
}
|
||||
|
||||
outlinerbody:-moz-outliner-image(subjectCol, news, attach) {
|
||||
padding-right: 2px;
|
||||
list-style-image: url("chrome://messenger/skin/icons/message-news-attach.gif");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user