diff options
Diffstat (limited to 'mailnews/base/public/nsIMsgDBView.idl')
-rw-r--r-- | mailnews/base/public/nsIMsgDBView.idl | 527 |
1 files changed, 527 insertions, 0 deletions
diff --git a/mailnews/base/public/nsIMsgDBView.idl b/mailnews/base/public/nsIMsgDBView.idl new file mode 100644 index 000000000..2d64c547f --- /dev/null +++ b/mailnews/base/public/nsIMsgDBView.idl @@ -0,0 +1,527 @@ +/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" +#include "MailNewsTypes2.idl" + +interface nsIMsgFolder; +interface nsIMsgWindow; +interface nsIMessenger; +interface nsIMsgDBHdr; +interface nsIMsgThread; +interface nsIMsgDBViewCommandUpdater; +interface nsIMsgDatabase; +interface nsIMsgSearchSession; +interface nsIMutableArray; +interface nsISimpleEnumerator; +interface nsIMsgCustomColumnHandler; + +typedef long nsMsgViewNotificationCodeValue; +typedef long nsMsgViewCommandCheckStateValue; +typedef long nsMsgViewCommandTypeValue; +typedef long nsMsgNavigationTypeValue; + +[scriptable, uuid(682a18be-fd18-11d4-a5be-0060b0fc04b7)] +interface nsMsgViewSortOrder +{ + const nsMsgViewSortOrderValue none = 0; + const nsMsgViewSortOrderValue ascending = 1; + const nsMsgViewSortOrderValue descending = 2; +}; + +[scriptable, uuid(f28a1cdf-06c3-4e98-8f66-f49991670071)] +interface nsMsgViewType { + const nsMsgViewTypeValue eShowAllThreads = 0; + const nsMsgViewTypeValue eShowThreadsWithUnread = 2; + const nsMsgViewTypeValue eShowWatchedThreadsWithUnread = 3; + const nsMsgViewTypeValue eShowQuickSearchResults = 4; + const nsMsgViewTypeValue eShowVirtualFolderResults = 5; + const nsMsgViewTypeValue eShowSearch = 6; +}; + +[scriptable, uuid(64852276-1dd2-11b2-8103-afe12002c053)] +interface nsMsgViewFlagsType +{ + /** + * flags for GetViewFlags + */ + const nsMsgViewFlagsTypeValue kNone = 0x0; + const nsMsgViewFlagsTypeValue kThreadedDisplay = 0x1; + const nsMsgViewFlagsTypeValue kShowIgnored = 0x8; + const nsMsgViewFlagsTypeValue kUnreadOnly = 0x10; + const nsMsgViewFlagsTypeValue kExpandAll = 0x20; + const nsMsgViewFlagsTypeValue kGroupBySort = 0x40; +}; + +[scriptable, uuid(b94fc200-3008-420a-85c7-67842f133ef8)] +interface nsMsgViewSortType +{ + const nsMsgViewSortTypeValue byNone = 0x11; /* not sorted */ + const nsMsgViewSortTypeValue byDate = 0x12; + const nsMsgViewSortTypeValue bySubject = 0x13; + const nsMsgViewSortTypeValue byAuthor = 0x14; + const nsMsgViewSortTypeValue byId = 0x15; + const nsMsgViewSortTypeValue byThread = 0x16; + const nsMsgViewSortTypeValue byPriority = 0x17; + const nsMsgViewSortTypeValue byStatus = 0x18; + const nsMsgViewSortTypeValue bySize = 0x19; + const nsMsgViewSortTypeValue byFlagged = 0x1a; + const nsMsgViewSortTypeValue byUnread = 0x1b; + const nsMsgViewSortTypeValue byRecipient = 0x1c; + const nsMsgViewSortTypeValue byLocation = 0x1d; + const nsMsgViewSortTypeValue byTags = 0x1e; + const nsMsgViewSortTypeValue byJunkStatus = 0x1f; + const nsMsgViewSortTypeValue byAttachments = 0x20; + const nsMsgViewSortTypeValue byAccount = 0x21; + const nsMsgViewSortTypeValue byCustom = 0x22; + const nsMsgViewSortTypeValue byReceived = 0x23; + const nsMsgViewSortTypeValue byCorrespondent = 0x24; +}; + +[scriptable, uuid(255d1c1e-fde7-11d4-a5be-0060b0fc04b7)] +interface nsMsgViewNotificationCode +{ + const nsMsgViewNotificationCodeValue none = 0; + /* No change; this call is just being used to potentially nest other sets of calls + inside it. The "where" and "num" parameters are unused. + */ + const nsMsgViewNotificationCodeValue insertOrDelete = 1; + /* Some lines have been inserted or deleted. + The "where" parameter will indicate the first line that has been added or + removed; the "num" parameter will indicate how many lines, and will be positive on + an insertion and negative on a deletion. + */ + const nsMsgViewNotificationCodeValue changed = 2; + /* Some lines have had their contents changed (e.g., messages have been marked read + or something.) "where" indicates the first line with a change; "num" indicates + how many chaged. + */ + const nsMsgViewNotificationCodeValue scramble = 3; + /* Everything changed. Probably means we resorted the folder. We are still working + with the same set of items, or at least have some overlap, but all the indices are + invalid. The "where" and "num" parameters are unused. + */ + const nsMsgViewNotificationCodeValue all = 4; + /* Everything changed. We're now not displaying anything like what we were; we + probably opened a new folder or something. The FE needs to forget anything it ever knew + about what was being displayed, and start over. The "where" and "num" parameters are + unused. + */ + const nsMsgViewNotificationCodeValue totalContentChanged = 5; + /* Introduced for the address book to support virtual list views. The total number of + entries on the LDAP directory has changed and the FE must update its scrollbar. The + "num" parameter contains the total number of entries on the LDAP server. + */ + const nsMsgViewNotificationCodeValue newTopIndex = 6; + /* Introduced for the address book to support virtual list views. The virtual list view + cache data has changed and the FE view may be out of date. The view should be updated + so that the first/top index in the view is the index in the "where" parameter. The + scrollbar should be updated to match the new position. + */ + +}; + +[scriptable, uuid(4ec9248e-0108-11d5-a5be-0060b0fc04b7)] +interface nsMsgViewCommandCheckState +{ + const nsMsgViewCommandCheckStateValue notUsed = 0; + const nsMsgViewCommandCheckStateValue checked = 1; + const nsMsgViewCommandCheckStateValue unchecked = 2; +}; + +[scriptable, uuid(ad36e6cc-0109-11d5-a5be-0060b0fc04b7)] +interface nsMsgViewCommandType +{ + const nsMsgViewCommandTypeValue markMessagesRead = 0; + const nsMsgViewCommandTypeValue markMessagesUnread = 1; + const nsMsgViewCommandTypeValue toggleMessageRead = 2; + + const nsMsgViewCommandTypeValue flagMessages = 3; + const nsMsgViewCommandTypeValue unflagMessages = 4; + + const nsMsgViewCommandTypeValue toggleThreadWatched = 6; + + const nsMsgViewCommandTypeValue deleteMsg = 7; + const nsMsgViewCommandTypeValue deleteNoTrash = 8; + const nsMsgViewCommandTypeValue markThreadRead = 9; + const nsMsgViewCommandTypeValue markAllRead = 10; + const nsMsgViewCommandTypeValue expandAll = 11; + const nsMsgViewCommandTypeValue collapseAll = 12; + + const nsMsgViewCommandTypeValue copyMessages = 13; + const nsMsgViewCommandTypeValue moveMessages = 14; + + const nsMsgViewCommandTypeValue selectAll = 15; + const nsMsgViewCommandTypeValue downloadSelectedForOffline = 16; + const nsMsgViewCommandTypeValue downloadFlaggedForOffline = 17; + + const nsMsgViewCommandTypeValue selectThread = 18; + const nsMsgViewCommandTypeValue selectFlagged = 19; + const nsMsgViewCommandTypeValue cmdRequiringMsgBody = 20; + const nsMsgViewCommandTypeValue label0 = 21; + const nsMsgViewCommandTypeValue label1 = 22; + const nsMsgViewCommandTypeValue label2 = 23; + const nsMsgViewCommandTypeValue label3 = 24; + const nsMsgViewCommandTypeValue label4 = 25; + const nsMsgViewCommandTypeValue label5 = 26; + const nsMsgViewCommandTypeValue lastLabel = 26; + + const nsMsgViewCommandTypeValue junk = 27; + const nsMsgViewCommandTypeValue unjunk = 28; + const nsMsgViewCommandTypeValue undeleteMsg = 29; + + const nsMsgViewCommandTypeValue applyFilters = 30; + const nsMsgViewCommandTypeValue runJunkControls = 31; + const nsMsgViewCommandTypeValue deleteJunk = 32; +}; + +[scriptable, uuid(65903eb2-1dd2-11b2-ac45-c5b69c1618d7)] +interface nsMsgNavigationType +{ + const nsMsgNavigationTypeValue firstMessage = 1; + const nsMsgNavigationTypeValue nextMessage = 2; + const nsMsgNavigationTypeValue previousMessage = 3; + const nsMsgNavigationTypeValue lastMessage = 4; + /** + * must match nsMsgViewCommandTypeValue toggleThreadKilled + */ + const nsMsgNavigationTypeValue toggleThreadKilled = 5; + const nsMsgNavigationTypeValue firstUnreadMessage = 6; + const nsMsgNavigationTypeValue nextUnreadMessage = 7; + const nsMsgNavigationTypeValue previousUnreadMessage = 8; + const nsMsgNavigationTypeValue lastUnreadMessage = 9; + const nsMsgNavigationTypeValue nextUnreadThread = 10; + const nsMsgNavigationTypeValue nextUnreadFolder = 11; + const nsMsgNavigationTypeValue nextFolder = 12; + const nsMsgNavigationTypeValue readMore = 13; + /** + * Go back to the previous visited message + */ + const nsMsgNavigationTypeValue back = 15; + /** + * Go forward to the previous visited message + */ + const nsMsgNavigationTypeValue forward = 16; + const nsMsgNavigationTypeValue firstFlagged = 17; + const nsMsgNavigationTypeValue nextFlagged = 18; + const nsMsgNavigationTypeValue previousFlagged = 19; + const nsMsgNavigationTypeValue firstNew = 20; + const nsMsgNavigationTypeValue editUndo = 21; + const nsMsgNavigationTypeValue editRedo = 22; + const nsMsgNavigationTypeValue toggleSubthreadKilled = 23; +}; + + +[scriptable, uuid(fe8a2326-4dd0-11e5-8b8a-206a8aa7a25c)] +interface nsIMsgDBView : nsISupports +{ + void open(in nsIMsgFolder folder, in nsMsgViewSortTypeValue sortType, in nsMsgViewSortOrderValue sortOrder, in nsMsgViewFlagsTypeValue viewFlags, out long count); + void openWithHdrs(in nsISimpleEnumerator aHeaders, in nsMsgViewSortTypeValue aSortType, + in nsMsgViewSortOrderValue aSortOrder, + in nsMsgViewFlagsTypeValue aViewFlags, out long aCount); + void close(); + + void init(in nsIMessenger aMessengerInstance, in nsIMsgWindow aMsgWindow, in nsIMsgDBViewCommandUpdater aCommandUpdater); + + void sort(in nsMsgViewSortTypeValue sortType, in nsMsgViewSortOrderValue sortOrder); + + void doCommand(in nsMsgViewCommandTypeValue command); + void doCommandWithFolder(in nsMsgViewCommandTypeValue command, in nsIMsgFolder destFolder); + void getCommandStatus(in nsMsgViewCommandTypeValue command, out boolean selectable_p, + out nsMsgViewCommandCheckStateValue selected_p); + + readonly attribute nsMsgViewTypeValue viewType; + attribute nsMsgViewFlagsTypeValue viewFlags; + /** Assigning to this value does not induce a sort; use the sort() method! */ + attribute nsMsgViewSortTypeValue sortType; + readonly attribute nsMsgViewSortOrderValue sortOrder; + /** + * Reflects the current secondary sort when a secondary sort is in effect. + * If the primary sort is by date or id, the value of this attribute is moot. + * Assigning to this value does not induce a sort; use the sort() method once + * to set your secondary sort, then use it again to set your primary sort. + * The only conceivable reason to write to this value is if you have a + * grouped view where you want to affect the sort order of the (secondary) + * date sort. (Secondary sort is always by date for grouped views.) + */ + attribute nsMsgViewSortTypeValue secondarySortType; + /** + * Reflects the current secondary sort order. + * Assigning to this value does not induce a sort; use the sort() method for + * all primary and secondary sort needs. The only reason to assign to this + * value is to affect the secondary sort of a grouped view. + */ + attribute nsMsgViewSortOrderValue secondarySortOrder; + readonly attribute nsMsgKey keyForFirstSelectedMessage; + readonly attribute nsMsgViewIndex viewIndexForFirstSelectedMsg; + /** + * this method will automatically expand the destination thread, + * if needs be. + */ + void viewNavigate(in nsMsgNavigationTypeValue motion, out nsMsgKey resultId, out nsMsgViewIndex resultIndex, out nsMsgViewIndex threadIndex, in boolean wrap); + + /** + * Indicates if navigation of the passed motion type is valid. + */ + boolean navigateStatus(in nsMsgNavigationTypeValue motion); + + readonly attribute nsIMsgFolder msgFolder; + attribute nsIMsgFolder viewFolder; // in the case of virtual folders, the VF db. + + nsMsgKey getKeyAt(in nsMsgViewIndex index); + + /** + * Get the view flags at the passed in index. + * + * @param aIndex - index to get the view flags for + * + * @ return - 32 bit view flags (e.g., elided) + */ + unsigned long getFlagsAt(in nsMsgViewIndex aIndex); + + /** + * Get the msg hdr at the passed in index + * + * @param aIndex - index to get the msg hdr at. + * + * @return - msg hdr at the passed in index + * @exception - NS_MSG_INVALID_DBVIEW_INDEX + */ + nsIMsgDBHdr getMsgHdrAt(in nsMsgViewIndex aIndex); + + nsIMsgFolder getFolderForViewIndex(in nsMsgViewIndex index); // mainly for search + ACString getURIForViewIndex(in nsMsgViewIndex index); + nsIMsgDBView cloneDBView(in nsIMessenger aMessengerInstance, in nsIMsgWindow aMsgWindow, in nsIMsgDBViewCommandUpdater aCommandUpdater); + + /** + * Provides a list of the message headers for the currently selected messages. + * If the "mail.operate_on_msgs_in_collapsed_threads" preference is enabled, + * then any collapsed thread roots that are selected will also (conceptually) + * have all of the messages in that thread selected and they will be included + * in the returned list. The one exception to this is if the front end fails + * to summarize the selection, and we fall back to just displaying a single + * message. In that case, we won't include the children of the collapsed + * thread. However, the numSelected attribute will count those children, + * because the summarizeSelection code uses that to know that it should + * try to summarize the selection. + * + * If the user has right-clicked on a message, this will return that message + * (and any collapsed children if so enabled) and not the selection prior to + * the right-click. + * + * @return an array containing the selected message headers. You are free to + * mutate the array; it will not affect the underlying selection. + */ + void getSelectedMsgHdrs([optional] out unsigned long count, + [retval, array, size_is(count)] + out nsIMsgDBHdr headers); + + [deprecated] nsIMutableArray getMsgHdrsForSelection(); + + void getURIsForSelection(out unsigned long count, [retval, array, size_is(count)] out string uris); + void getIndicesForSelection(out unsigned long count, [retval, array, size_is(count)] out nsMsgViewIndex indices); + + readonly attribute ACString URIForFirstSelectedMessage; + readonly attribute nsIMsgDBHdr hdrForFirstSelectedMessage; + void loadMessageByMsgKey(in nsMsgKey aMsgKey); + void loadMessageByViewIndex(in nsMsgViewIndex aIndex); + void loadMessageByUrl(in string aUrl); + void reloadMessage(); + void reloadMessageWithAllParts(); + + /** + * The number of selected messages. If the + * "mail.operate_on_msgs_in_collapsed_threads" preference is enabled, then + * any collapsed thread roots that are selected will also conceptually have + * all of the messages in that thread selected. + */ + readonly attribute unsigned long numSelected; + readonly attribute nsMsgViewIndex msgToSelectAfterDelete; + readonly attribute nsMsgViewIndex currentlyDisplayedMessage; + + /** + * Number of messages in view, including messages in collapsed threads. + * Not currently implemented for threads with unread or watched threads + * with unread. + */ + readonly attribute long numMsgsInView; + // used by "go to folder" feature + // and "remember last selected message" feature + // if key is not found, we don't select. + void selectMsgByKey(in nsMsgKey key); + + void selectFolderMsgByKey(in nsIMsgFolder aFolder, in nsMsgKey aKey); + // we'll suppress displaying messages if the message pane is collapsed + attribute boolean suppressMsgDisplay; + + // we'll suppress command updating during folder loading + attribute boolean suppressCommandUpdating; + + /** + * Suppress change notifications. This is faster than Begin/EndUpdateBatch + * on the tree, but less safe in that you're responsible for row invalidation + * and row count changes. + */ + attribute boolean suppressChangeNotifications; + + //to notify tree that rows are going away + void onDeleteCompleted(in boolean succeeded); + + readonly attribute nsIMsgDatabase db; + + readonly attribute boolean supportsThreading; + + attribute nsIMsgSearchSession searchSession; + readonly attribute boolean removeRowOnMoveOrDelete; + + /** + * Finds the view index of the passed in msgKey. Note this should not + * be called on cross-folder views since the msgKey may not be unique. + * + * @param aMsgKey - key to find. + * @param aExpand - whether to expand a collapsed thread to find the key. + * + * @return - view index of msg hdr, -1 if hdr not found. + */ + nsMsgViewIndex findIndexFromKey(in nsMsgKey aMsgKey, in boolean aExpand); + /** + * Finds the view index of the passed in msgHdr. + * + * @param aMsgHdr - hdr to find. + * @param aExpand - whether to expand a collapsed thread to find the hdr. + * + * @return - view index of msg hdr, -1 if hdr not found. + */ + nsMsgViewIndex findIndexOfMsgHdr(in nsIMsgDBHdr aMsgHdr, in boolean aExpand); + void ExpandAndSelectThreadByIndex(in nsMsgViewIndex aIndex, in boolean aAugment); + + /** + * This method returns the nsIMsgThread object containing the header displayed + * at the desired row. For grouped views and cross folder saved searches, + * this will be the view thread, not the db thread. + * + * @param aIndex view index we want corresponding thread object of. + * + * @return the thread object at the requested view index + */ + nsIMsgThread getThreadContainingIndex(in nsMsgViewIndex aIndex); + + /** + * Insert rows into the view. The caller should use NoteChange() below to + * update the view. + * + * @param aIndex view index for insertion start. + * @param aNumRows number of rows to insert. + * @param aKey msgKey. + * @param aFlags msgFlags. + * @param aLevel treeview indent level. + * @param aFolder nsIMsgFolder, required for search/xfvf views. + */ + void insertTreeRows(in nsMsgViewIndex aIndex, in unsigned long aNumRows, + in nsMsgKey aKey, in nsMsgViewFlagsTypeValue aFlags, + in unsigned long aLevel, in nsIMsgFolder aFolder); + + /** + * Remove rows from the view. The caller should use NoteChange() below to + * update the view. + * + * @param aIndex view index for removal start. + * @param aNumRows number of rows to remove. + */ + void removeTreeRows(in nsMsgViewIndex aIndex, in unsigned long aNumRows); + + /** + * Notify tree that rows have changed. + * + * @param aFirstLineChanged first view index for changed rows. + * @param aNumRows number of rows changed; < 0 means removed. + * @param aChangeType changeType. + */ + void NoteChange(in nsMsgViewIndex aFirstLineChanged, in long aNumRows, + in nsMsgViewNotificationCodeValue aChangeType); + + /** + * Return the view thread corresponding to aMsgHdr. If we're a cross-folder + * view, then it would be the cross folder view thread, otherwise, the + * db thread object. + * + * @param aMsgHdr message header we want the view thread object of. + * + * @return view thread object for msg hdr. + */ + nsIMsgThread getThreadContainingMsgHdr(in nsIMsgDBHdr aMsgHdr); + + // use lines or kB for size? + readonly attribute boolean usingLines; + + // Custom Column Implementation note: see nsIMsgCustomColumnHandler + + // attaches a custom column handler to a specific column (can be a new column or a built in) + void addColumnHandler(in AString aColumn, in nsIMsgCustomColumnHandler aHandler); + + // removes a custom column handler leaving the column to be handled by the system + void removeColumnHandler(in AString aColumn); + + // returns the custom column handler attached to a specific column - if any + nsIMsgCustomColumnHandler getColumnHandler(in AString aColumn); + + /** + * The custom column to use for sorting purposes (when sort type is + * nsMsgViewSortType.byCustom.) + */ + attribute AString curCustomColumn; + + /** + * The custom column used for a secondary sort, blank if secondarySort is + * not byCustom. The secondary sort design is such that the desired secondary + * is sorted first, followed by sort by desired primary. The secondary is + * read only, as it is set internally according to this design. + */ + readonly attribute AString secondaryCustomColumn; + /** + * Scriptable accessor for the cell text for a column + * + * @param aRow - row we want cell text for + * @param aColumnName - name of column we want cell text for + * + * @returns The cell text for the given row and column, if any. + * @notes This does not work for custom columns yet. + */ + AString cellTextForColumn(in long aRow, in wstring aColumnName); +}; + +/* this interface is rapidly morphing from a command updater interface into a more generic + FE updater interface to handle changes in the view +*/ + +[scriptable, uuid(ce8f52ee-e742-4b31-8bdd-2b3a8168a117)] +interface nsIMsgDBViewCommandUpdater : nsISupports +{ + /* Eventually we'll flush this out into some kind of rich interface + which may take specifc selection changed type notifications like + no selections, single selection, multi-selection, etc. For starters, + we are going to keep it generic. The back end will only push an update + command status when the # of selected items changes. + */ + + void updateCommandStatus(); + + /* displayed message has changed */ + void displayMessageChanged(in nsIMsgFolder aFolder, in AString aSubject, in ACString aKeywords); + + /** + * allows the backend to tell the front end to re-determine + * which message we should selet after a delete or move + */ + void updateNextMessageAfterDelete(); + + /** + * tell the front end that the selection has changed, and may need to be + * resummarized. + * + * @return true if we did summarize, false otherwise. + */ + boolean summarizeSelection(); +}; |