more work on #73868. converting ab from tree to outliner.

get sort indicators to work, make it so even if we persist some old or illegal
value for "sortedColumn", we do the right thing.

NOT PART OF THE BUILD.
This commit is contained in:
sspitzer%netscape.com 2001-11-16 01:40:22 +00:00
parent b1f34ef0e7
commit 2420d3f3fb
2 changed files with 30 additions and 16 deletions

View File

@ -51,7 +51,11 @@ interface nsIAbViewListener : nsISupports
[scriptable, uuid(e35c015c-1dd1-11b2-9494-f88326252aae)]
interface nsIAbView : nsISupports
{
void init(in string URI, in nsIAbViewListener abViewListener, in wstring sortColumn, in wstring sortDirection);
/**
* returns the actual sortColumn. migration, switching from mozilla to netscape 6.x, etc, could cause
* the "persisted" sortColumn to be bogus.
*/
wstring init(in string URI, in nsIAbViewListener abViewListener, in wstring sortColumn, in wstring sortDirection);
void close();
void sortBy(in wstring sortColumn, in wstring sortDirection);

View File

@ -198,10 +198,12 @@ nsresult nsAbView::RemovePrefObservers()
}
NS_IMETHODIMP nsAbView::Init(const char *aURI, nsIAbViewListener *abViewListener,
const PRUnichar *colID, const PRUnichar *sortDirection)
const PRUnichar *colID, const PRUnichar *sortDirection, PRUnichar **result)
{
nsresult rv;
NS_ENSURE_ARG_POINTER(result);
mURI = aURI;
mAbViewListener = abViewListener;
@ -224,7 +226,20 @@ NS_IMETHODIMP nsAbView::Init(const char *aURI, nsIAbViewListener *abViewListener
rv = EnumerateCards();
NS_ENSURE_SUCCESS(rv, rv);
rv = SortBy(colID, sortDirection);
// see if the persisted sortColumn is valid.
// it may not be, if you migrated from older versions, or switched between
// a mozilla build and a commercial build, which have different columns.
nsAutoString actualSortColumn;
actualSortColumn = colID;
if (nsCRT::strcmp(colID, NS_LITERAL_STRING(GENERATED_NAME_COLUMN_ID).get()) && mCards.Count()) {
nsIAbCard *card = ((AbCard *)(mCards.ElementAt(0)))->card;
nsXPIDLString value;
rv = card->GetCardUnicharValue(colID, getter_Copies(value));
if (NS_FAILED(rv))
actualSortColumn = NS_LITERAL_STRING(GENERATED_NAME_COLUMN_ID).get();
}
rv = SortBy(actualSortColumn.get(), sortDirection);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsIAddrBookSession> abSession = do_GetService(NS_ADDRBOOKSESSION_CONTRACTID, &rv);
@ -237,7 +252,9 @@ NS_IMETHODIMP nsAbView::Init(const char *aURI, nsIAbViewListener *abViewListener
rv = mAbViewListener->OnCountChanged(mCards.Count());
NS_ENSURE_SUCCESS(rv,rv);
}
return rv;
*result = nsCRT::strdup(actualSortColumn.get());
return NS_OK;
}
NS_IMETHODIMP nsAbView::GetDirectory(nsIAbDirectory **aDirectory)
@ -424,15 +441,7 @@ NS_IMETHODIMP nsAbView::ToggleOpenState(PRInt32 index)
NS_IMETHODIMP nsAbView::CycleHeader(const PRUnichar *colID, nsIDOMElement *elt)
{
nsresult rv;
// reverse the sort
if (nsCRT::strcmp(mSortDirection.get(), NS_LITERAL_STRING("ascending").get()))
rv = SortBy(colID, NS_LITERAL_STRING("ascending").get());
else
rv = SortBy(colID, NS_LITERAL_STRING("descending").get());
NS_ENSURE_SUCCESS(rv,rv);
return rv;
return NS_OK;
}
nsresult nsAbView::InvalidateOutliner(PRInt32 row)
@ -554,13 +563,14 @@ NS_IMETHODIMP nsAbView::SortBy(const PRUnichar *colID, const PRUnichar *sortDir)
{
nsresult rv;
PRInt32 count = mCards.Count();
nsAutoString sortColumn;
if (!colID)
sortColumn = NS_LITERAL_STRING(GENERATED_NAME_COLUMN_ID); // default sort
else
sortColumn = NS_LITERAL_STRING(GENERATED_NAME_COLUMN_ID).get(); // default sort
else
sortColumn = colID;
PRInt32 count = mCards.Count();
PRInt32 i;
// if we are sorting by how we are already sorted,