Bug 88593 Make Ctrl+click on thread icon augment entire thread r=mscott sr=bienvenu

This commit is contained in:
neil%parkwaycc.co.uk 2004-05-14 08:43:14 +00:00
Родитель 3d365a7700
Коммит 43971718ba
4 изменённых файлов: 11 добавлений и 23 удалений

Просмотреть файл

@ -319,6 +319,7 @@ interface nsIMsgDBView : nsISupports
readonly attribute boolean removeRowOnMoveOrDelete;
nsMsgViewIndex findIndexFromKey(in nsMsgKey aMsgKey, in boolean aExpand);
void ExpandAndSelectThreadByIndex(in nsMsgViewIndex aIndex, in boolean aAugment);
};
/* this interface is rapidly morphing from a command updater interface into a more generic

Просмотреть файл

@ -81,7 +81,12 @@ function ThreadPaneOnClick(event)
}
else if (col.value.id == "junkStatusCol") {
MsgJunkMailInfo(true);
}
}
else if (col.value.id == "threadCol" && !event.shiftKey &&
(event.ctrlKey || event.metaKey)) {
gDBView.ExpandAndSelectThreadByIndex(row.value, true);
event.preventBubble();
}
}
}

Просмотреть файл

@ -1646,7 +1646,7 @@ NS_IMETHODIMP nsMsgDBView::CycleCell(PRInt32 row, nsITreeColumn* col)
case 't': // threaded cell or total cell
if (colID[1] == 'h')
{
ExpandAndSelectThreadByIndex(row);
ExpandAndSelectThreadByIndex(row, PR_FALSE);
}
break;
case 'f': // flagged column
@ -3873,12 +3873,12 @@ nsresult nsMsgDBView::ExpandAndSelectThread()
rv = mTreeSelection->GetCurrentIndex(&index);
NS_ENSURE_SUCCESS(rv,rv);
rv = ExpandAndSelectThreadByIndex(index);
rv = ExpandAndSelectThreadByIndex(index, PR_FALSE);
NS_ENSURE_SUCCESS(rv,rv);
return NS_OK;
}
nsresult nsMsgDBView::ExpandAndSelectThreadByIndex(nsMsgViewIndex index)
nsresult nsMsgDBView::ExpandAndSelectThreadByIndex(nsMsgViewIndex index, PRBool augment)
{
nsresult rv;
@ -3921,26 +3921,9 @@ nsresult nsMsgDBView::ExpandAndSelectThreadByIndex(nsMsgViewIndex index)
NS_ASSERTION(mTreeSelection, "no tree selection");
if (!mTreeSelection) return NS_ERROR_UNEXPECTED;
// clear the existing selection.
mTreeSelection->ClearSelection();
// is this correct when we are selecting multiple items?
mTreeSelection->SetCurrentIndex(threadIndex);
// the count should be 1 or greater. if there was only one message in the thread, we just select it.
// if more, we select all of them.
mTreeSelection->RangedSelect(threadIndex, threadIndex + count - 1, PR_TRUE /* augment */);
if (count == 1) {
// if we ended up selecting on message, this will cause us to load it.
SelectionChanged();
}
else {
//XXX todo, should multiple selection clear the thread pane? see bug #xxxxx
//do we want to do something like this to clear the message pane
//when the user selects a thread?
//NoteChange(?, ?, nsMsgViewNotificationCode::clearMessagePane);
}
mTreeSelection->RangedSelect(threadIndex + count - 1, threadIndex, augment);
return NS_OK;
}

Просмотреть файл

@ -200,7 +200,6 @@ protected:
nsresult CollapseByIndex(nsMsgViewIndex index, PRUint32 *pNumCollapsed);
nsresult ExpandAll();
nsresult CollapseAll();
nsresult ExpandAndSelectThreadByIndex(nsMsgViewIndex index);
nsresult ExpandAndSelectThread();
// helper routines for thread expanding and collapsing.