You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1346 lines
48 KiB
1346 lines
48 KiB
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// UIMISC.H - header for common miscellaneous functions used by the UI
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
#ifndef __UIMISC_H_
|
|
#define __UIMISC_H_
|
|
|
|
#define IDC_TREEVIEW 9010 //These should really be in resource.h
|
|
#define IDC_SPLITTER 9011
|
|
|
|
#define TOOLTIP
|
|
|
|
#define MAX_DISPLAY_NAME_LENGTH 32
|
|
#define MAX_UI_STR 200
|
|
#define MAX_BUF_STR 4*MAX_UI_STR
|
|
|
|
#ifndef WIN16
|
|
static LPTSTR g_szWABHelpFileName = TEXT("WAB.HLP");
|
|
#else
|
|
static LPTSTR g_szWABHelpFileName = TEXT("WAB16.HLP");
|
|
#endif
|
|
extern const LPTSTR szInternetCallKey;
|
|
extern const LPTSTR szCallto;
|
|
extern const LPTSTR szCRLF;
|
|
extern const LPTSTR szColon;
|
|
extern const LPTSTR szTrailingDots;
|
|
extern const LPTSTR szArrow;
|
|
extern const LPTSTR szBackSlash;
|
|
|
|
|
|
#define IDC_BB_NEW 8080
|
|
#define IDC_BB_PROPERTIES 8082
|
|
#define IDC_BB_DELETE 8083
|
|
#define IDC_BB_FIND 8084
|
|
#define IDC_BB_PRINT 8085
|
|
#define IDC_BB_ACTION 8086
|
|
#define IDC_BB_ADD_TO_ADDRBOOK 8087
|
|
|
|
// This should not be an enumeration as tbPrint can drop out at
|
|
// run-time. Be very careful if you change the order of this
|
|
// enumeration - search for all uses of these enumerated values
|
|
// first. There is code in ui_abook.c which relies on tbPrint
|
|
// being in front of tbAction.
|
|
enum _Toolbar
|
|
{
|
|
tbNew=0,
|
|
tbProperties,
|
|
tbDelete,
|
|
tbFind,
|
|
tbPrint,
|
|
tbAction, //upto this many on the toolbar
|
|
tbAddToWAB,
|
|
tbCopy, //these on the context menu
|
|
tbPaste,
|
|
tbNewEntry,
|
|
tbNewGroup,
|
|
tbNewFolder,
|
|
tbMAX
|
|
};
|
|
|
|
enum _AddressModalDialogState // Used in various forms of modal IAB_ADDRESS dialogs
|
|
{
|
|
STATE_SELECT_RECIPIENTS = 0,
|
|
STATE_PICK_USER,
|
|
STATE_BROWSE,
|
|
STATE_BROWSE_MODAL
|
|
};
|
|
|
|
// Returned values from our Search Dialog Proc
|
|
enum _SearchDialogReturnValues
|
|
{
|
|
SEARCH_CANCEL=0,
|
|
SEARCH_OK,
|
|
SEARCH_ERROR,
|
|
SEARCH_CLOSE,
|
|
SEARCH_USE
|
|
};
|
|
|
|
|
|
//#define VCARD
|
|
|
|
// **** Keep this enum below in sync with the Main menu structure in CoolUI.RC
|
|
enum _MainMenuSubMenus
|
|
{
|
|
idmFile = 0,
|
|
idmEdit,
|
|
idmView,
|
|
idmTools,
|
|
idmHelp
|
|
};
|
|
|
|
enum _FileMenu
|
|
{
|
|
idmNewContact = 0,
|
|
idmNewGroup,
|
|
idmNewFolder,
|
|
idmFSep1,
|
|
idmProperties,
|
|
idmDelete,
|
|
idmFSep2,
|
|
idmImport,
|
|
idmExport,
|
|
idmFSep3,
|
|
idmPrint,
|
|
idmFSep4,
|
|
#ifdef FUTURE
|
|
idmFolders,
|
|
idmSepFolders,
|
|
#endif
|
|
idmSwitchUsers,
|
|
idmAllContents,
|
|
idmFSep5,
|
|
idmClose,
|
|
idmFileMax,
|
|
};
|
|
|
|
enum _EditMenu
|
|
{
|
|
idmCopy=0,
|
|
idmPaste,
|
|
idmESep1,
|
|
idmSelectAll,
|
|
idmESep2,
|
|
// idmProfile,
|
|
// idmESep3,
|
|
idmFindPeople,
|
|
};
|
|
|
|
enum _ViewMenus
|
|
{
|
|
idmToolBar=0,
|
|
idmStatusBar,
|
|
idmGroupsList,
|
|
idmSepUI,
|
|
idmLargeIcon,
|
|
idmSmallIcon,
|
|
idmList,
|
|
idmDetails,
|
|
idmSepListStyle,
|
|
idmSortBy,
|
|
idmSepSort,
|
|
idmRefresh,
|
|
idmViewMax,
|
|
};
|
|
|
|
enum _ToolsMenus
|
|
{
|
|
idmAccounts=0,
|
|
idmSepAccounts,
|
|
idmOptions,
|
|
idsSepOptions,
|
|
idmAction,
|
|
};
|
|
|
|
#define WAB_ONEOFF_NOADDBUTTON 0x00000080 // Flag used to surpress AddToWABButton in iAddrBook::Details
|
|
|
|
|
|
#ifdef HM_GROUP_SYNCING
|
|
// [PaulHi] Private message to begin a second group synchronization pass to main UI thread
|
|
#define WM_USER_SYNCGROUPS WM_USER+102
|
|
#endif
|
|
|
|
|
|
// Private message we send to our toolbar container so it can forward it to
|
|
// the toolbar.
|
|
#define WM_PRVATETOOLBARENABLE WM_USER+101
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// IMPORTANT NOTE: If you change this, you must change lprgAddrBookColHeaderIDs in
|
|
// globals.c!
|
|
//
|
|
enum _AddrBookColumns
|
|
{
|
|
colDisplayName=0,
|
|
colEmailAddress,
|
|
colOfficePhone,
|
|
colHomePhone,
|
|
NUM_COLUMNS
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// This structure is used for storing the address book position and column sizes
|
|
// in the registry for persistence
|
|
//
|
|
typedef struct _AddressBookPosColSize
|
|
{
|
|
RECT rcPos;
|
|
int nColWidth[NUM_COLUMNS];
|
|
BOOL bViewToolbar;
|
|
DWORD dwListViewStyle;
|
|
int nListViewStyleMenuID;
|
|
BOOL bViewStatusBar;
|
|
int colOrderArray[NUM_COLUMNS];
|
|
BOOL bViewGroupList;
|
|
int nTab;
|
|
int nTViewWidth;
|
|
} ABOOK_POSCOLSIZE, * LPABOOK_POSCOLSIZE;
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
extern const TCHAR *g_rgszAdvancedFindAttrs[];
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// This represents all the listview boxes in the UI
|
|
// Using these tags we can customize the context sensitive menus
|
|
// in one sub routine saving code duplication ...
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
enum _AllTheListViewBoxes
|
|
{
|
|
lvMainABView = 0,
|
|
lvDialogABContents, // Modeless address view LV
|
|
lvDialogModalABContents, // Modal addres vuew LV
|
|
lvDialogABTo, // To Well LV
|
|
lvDialogABCC, // CC Well LV
|
|
lvDialogABBCC, // BCC Well LV
|
|
lvDialogDistList, // Disttribution list UI LV
|
|
lvDialogResolve, // Resolve dialog LV
|
|
lvDialogFind, // Find dialog results LV
|
|
lvMainABTV, // TreeView in main AB
|
|
lvToolBarAction,
|
|
lvToolBarNewEntry,
|
|
#ifdef COLSEL_MENU
|
|
lvMainABHeader, // column selection viewin main AB
|
|
#endif // COLSEL_MENU
|
|
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// These are indexes into the bitmaps to show the little bitmap
|
|
// next to each entry - this has to be synchronized with the bmps
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
enum _ListViewImages
|
|
{
|
|
imageMailUser=0, //Common to small and large imagelists
|
|
imageDistList,
|
|
imageSortDescending,
|
|
imageSortAscending,
|
|
imageDirectoryServer,
|
|
imageUnknown,
|
|
imageMailUserLDAP,
|
|
imageAddressBook,
|
|
imageMailUserWithCert,
|
|
imageMailUserMe,
|
|
imageFolderClosed,
|
|
imageFolderOpen,
|
|
imageMailUserOneOff,
|
|
imageMax
|
|
};
|
|
|
|
//
|
|
// cellwidth of LV image lists
|
|
//
|
|
#define S_BITMAP_WIDTH 16
|
|
#define S_BITMAP_HEIGHT 16
|
|
#define L_BITMAP_WIDTH 32
|
|
|
|
#define RGB_TRANSPARENT (COLORREF)0x00FF00FF
|
|
|
|
//
|
|
// UI control spacing - TBD confirm these numbers
|
|
//
|
|
#define BORDER 3 //pixels
|
|
#define CONTROL_SPACING 3
|
|
|
|
|
|
// UI Refresh timer defines
|
|
#define WAB_REFRESH_TIMER 14 // timer identifier
|
|
#define WAB_REFRESH_TIMEOUT 4000 // time-out value - 4 seconds
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// LDAP_SEARCH_PARAMS - specifies parameters for LDAP searches
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
enum _LDAPSearch
|
|
{
|
|
ldspDisplayName,
|
|
ldspEmail,
|
|
ldspAddress,
|
|
ldspPhone,
|
|
ldspOther,
|
|
ldspMAX
|
|
};
|
|
|
|
typedef struct _LDAPSearchParams
|
|
{
|
|
LPADRBOOK lpIAB;
|
|
TCHAR szContainerName[MAX_UI_STR];
|
|
TCHAR szData[ldspMAX][MAX_UI_STR];
|
|
BOOL bUseOtherBase;
|
|
} LDAP_SEARCH_PARAMS, * LPLDAP_SEARCH_PARAMS;
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Stores info about each entry in the list view control
|
|
// Each entry in the list view controls has 1 structure corresponding to that
|
|
// entry
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
typedef struct _RecipientInfo
|
|
{
|
|
ULONG cbEntryID;
|
|
LPENTRYID lpEntryID;
|
|
TCHAR szDisplayName[MAX_DISPLAY_NAME_LENGTH];//The actual text that is displayed
|
|
// LPTSTR szDisplayName;
|
|
TCHAR szEmailAddress[MAX_DISPLAY_NAME_LENGTH];
|
|
TCHAR szHomePhone[MAX_DISPLAY_NAME_LENGTH];
|
|
TCHAR szOfficePhone[MAX_DISPLAY_NAME_LENGTH];
|
|
TCHAR szByLastName[MAX_DISPLAY_NAME_LENGTH]; // Stores the text preloaded by last name first
|
|
TCHAR szByFirstName[MAX_DISPLAY_NAME_LENGTH];// Stores preloaded DisplayName
|
|
ULONG ulRecipientType;
|
|
ULONG ulObjectType;
|
|
BOOL bHasCert;
|
|
BOOL bIsMe;
|
|
ULONG ulOldAdrListEntryNumber; //if this was an element passed into the Address lpAdrList
|
|
//we store its original AdrList index here so that we dont
|
|
//have to do inefficient searches later ...
|
|
// ***VERY IMPORTANT*** Legal values range from 1 to AdrList->cValues (not from 0)
|
|
LPTSTR lpByRubyFirstName;
|
|
LPTSTR lpByRubyLastName;
|
|
struct _RecipientInfo * lpNext;
|
|
struct _RecipientInfo * lpPrev;
|
|
} RECIPIENT_INFO, * LPRECIPIENT_INFO;
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Hack structure used for talking between the Find dialog and the select
|
|
// recipients dialog
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
typedef struct _AdrParmFindInfo
|
|
{
|
|
LPADRPARM lpAdrParms;
|
|
LPRECIPIENT_INFO * lppTo;
|
|
LPRECIPIENT_INFO * lppCC;
|
|
LPRECIPIENT_INFO * lppBCC;
|
|
int DialogState; // identifies where it was called from
|
|
int nRetVal; // return code identifies what action closed the dialog
|
|
LPENTRYID lpEntryID;
|
|
ULONG cbEntryID;
|
|
} ADRPARM_FINDINFO, * LPADRPARM_FINDINFO;
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// A structure that will contain the LDAP URL subparts ...
|
|
typedef struct _LDAPURL
|
|
{
|
|
LPTSTR lpszServer; // Server name
|
|
LPTSTR lpszBase; // Base <dn>
|
|
LPTSTR * ppszAttrib; // Attributes requested
|
|
ULONG ulAttribCount; //
|
|
ULONG ulScope; // Search scope
|
|
LPTSTR lpszFilter; // search filter
|
|
LPTSTR lpszExtension; // And extension part of the URL
|
|
LPTSTR lpszBindName; // A bindname extension for the URL
|
|
BOOL bServerOnly; // Only found a server entry
|
|
DWORD dwAuthType; // Authentication Type
|
|
LPRECIPIENT_INFO lpList;// used to cache multple query results
|
|
} LDAPURL, * LPLDAPURL;
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// This structure holds information about
|
|
// the sort order of a particular list view
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
typedef struct _SortInfo
|
|
{
|
|
int iOldSortCol;
|
|
int iOlderSortCol;
|
|
BOOL bSortAscending;
|
|
BOOL bSortByLastName;
|
|
} SORT_INFO, *LPSORT_INFO;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// We will subclass some of the child controls on the main Address Book View to
|
|
// enable tabbing between the controls - the following
|
|
// are used in this subclassing
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
enum _SubClassedControlIndexs
|
|
{
|
|
s_EditQF=0,
|
|
s_ListAB,
|
|
s_TV,
|
|
s_Max
|
|
};
|
|
|
|
typedef struct _ToolTipInfo
|
|
{
|
|
int iItem;
|
|
BOOL bActive;
|
|
TCHAR szTipText[MAX_BUF_STR];
|
|
UINT_PTR uTooltipTimer;
|
|
BOOL bShowTooltip;
|
|
} TOOLTIP_INFO, * LPTOOLTIPINFO;
|
|
|
|
typedef struct _TVItemStuff
|
|
{
|
|
ULONG ulObjectType;
|
|
LPSBinary lpsbEID;
|
|
LPSBinary lpsbParent;
|
|
HTREEITEM hItemParent;
|
|
} TVITEM_STUFF, * LPTVITEM_STUFF;
|
|
|
|
|
|
// There may be several property sheets in the final version of the details pane
|
|
// Each list will have a seperate set of controls corresponding to different properties
|
|
// We want to retrieve the control values and map them into a property-array
|
|
// Each dialog will create its own proparray on exiting. The original record will also
|
|
// have some properties that never got mapped in the first place and some which may have been
|
|
// deleted thru the ui. Hence we look at the old array and the new array and create a merged
|
|
// list of props ... all mapped props in the new arrays superscede props in the
|
|
// old array
|
|
|
|
enum _PropSheets{ propSummary = 0,
|
|
propPersonal, // a list of all the property sheets on this page
|
|
propHome,
|
|
propBusiness,
|
|
propNotes,
|
|
propConferencing,
|
|
propCert,
|
|
propOrg,
|
|
propTrident,
|
|
propFamily,
|
|
TOTAL_PROP_SHEETS
|
|
};
|
|
|
|
enum _DLPropSheets{ propGroup = 0,
|
|
propGroupOther,
|
|
propDLMax
|
|
};
|
|
|
|
enum _DetailsDialogReturnValues
|
|
{
|
|
DETAILS_RESET = 0, //blank return value
|
|
DETAILS_OK,
|
|
DETAILS_CANCEL,
|
|
DETAILS_ADDTOWAB
|
|
};
|
|
|
|
enum
|
|
{
|
|
contactHome=0,
|
|
contactBusiness,
|
|
groupOther,
|
|
contactPersonal,
|
|
};
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// The PropArrayInfo is used by the property sheets displaying details on
|
|
// contacts or groups
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Misc flags used here
|
|
#define DETAILS_DNisCompanyName 0x00000001
|
|
#define DETAILS_DNisNickName 0x00000002
|
|
#define DETAILS_DNisFMLName 0x00000004
|
|
#define DETAILS_UseRubyPersonal 0x00000008 // Determines if the displayed prop sheet is a RUBY one for Japan/China/Korea
|
|
#define DETAILS_Initializing 0x00000010 // Prevents WM_COMMAND triggers during initialization
|
|
#define DETAILS_ProgChange 0x00000020 // Diffrentiates between changes in Display Name caused by user and by other parts of the code
|
|
#define DETAILS_EditingEmail 0x00000040 // So we can abort the email editing if user cancels
|
|
#define DETAILS_HideAddToWABButton 0x00000080 // Hides the add-to-wab button for some one-offs
|
|
#define DETAILS_ShowCerts 0x00000100 // Decides whether or not to show certs UI
|
|
#define DETAILS_ShowTrident 0x00000200 // Decides whether or not to show Trident in UI
|
|
#define DETAILS_ShowNetMeeting 0x00000400 // Decides whether or not to show Netmeeting stuff
|
|
#define DETAILS_ShowOrg 0x00000800 // Decides whether or not to show Org UI
|
|
#define DETAILS_EditingConf 0x00001000 // Tracks if editing a server/email pair
|
|
#define DETAILS_ShowSummary 0x00002000 // Decides whether or not to present summary information
|
|
#define DETAILS_EditingOneOff 0x00004000 // Tracks if editing a group one-off
|
|
#define DETAILS_DefHomeChanged 0x00008000 // Used to track changes in non-Edit controls on the Home prop sheets
|
|
#define DETAILS_DefBusChanged 0x00010000 // Used to track changes in non-Edit controls on the Business prop sheets
|
|
#define DETAILS_GenderChanged 0x00020000 // Used to track changes in Gender
|
|
#define DETAILS_DateChanged 0x00040000 // Used to track changes in Date-Time fields
|
|
#define DETAILS_ChildrenChanged 0x00080000 // Used to track changes in PR_CHILDRENS_NAMES
|
|
#define DETAILS_EditingChild 0x00100000 // Tracks if we're in the middle of editing a children name
|
|
|
|
typedef struct _PropArrayInfo
|
|
{
|
|
ULONG cbEntryID; // Entryid of this item
|
|
LPENTRYID lpEntryID;
|
|
ULONG ulOperationType; // SHOW_DETAILS or SHOW_NEW_ENTRY
|
|
ULONG ulObjectType; // MAILUSER or DISTLIST
|
|
LPMAPIPROP lpPropObj; // Actual object we are displaying
|
|
int nRetVal;
|
|
BOOL bSomethingChanged; // flags changes so we dont waste processing
|
|
BOOL bPropSheetOpened[TOTAL_PROP_SHEETS];
|
|
ULONG ulFlags;
|
|
HWND hWndDisplayNameField; // Holds HWND of DN edit field
|
|
int ulTridentPageIndex; // index of the trident sheet in case we need to remove it
|
|
LPADRBOOK lpIAB;
|
|
LPIWABDOCHOST lpIWABDocHost;
|
|
int nDefaultServerIndex;
|
|
int nBackupServerIndex;
|
|
LPTSTR szDefaultServerName; // LocalAlloc storage for these and then free them later ..
|
|
ULONG cchDefaultServerName;
|
|
LPTSTR szBackupServerName;
|
|
ULONG cchBackupServerName;
|
|
int nConfEditIndex;
|
|
SBinary sbDLEditingOneOff;
|
|
HWND hWndComboConf;
|
|
LPRECIPIENT_INFO lpContentsList; // Used by groups only for member lists
|
|
LPCERT_ITEM lpCItem; // Keeps a list of all our cert items ...
|
|
int nPropSheetPages; // Total number of propsheets for this item
|
|
HPROPSHEETPAGE * lphpages; // An array of all the prop sheets created for this item
|
|
LPWABEXTDISPLAY lpWED; // Stores info about extended prop sheets
|
|
LPEXTDLLINFO lpExtList; // List of shell extension objects
|
|
LPTSTR lpLDAPURL; // Points to the LDAP URL, if any, being displayed
|
|
BOOL bIsNTDSURL; // True if the LDAP URL represents an object from an NTDS
|
|
LPTSTR lpszOldName; // used for caching the old name of the prop being displayed
|
|
int nNTDSPropSheetPages; // Tracks the number of NTDS PropSheet extensions
|
|
HPROPSHEETPAGE * lphNTDSpages; // We cache the NTDS extension prop pages seperately since we may need to replace out own pages with these
|
|
GUID guidExt; // Used while creating prop sheet extensions for identifying the appropriate extension
|
|
} PROP_ARRAY_INFO, * LPPROP_ARRAY_INFO;
|
|
|
|
#define DL_INFO PROP_ARRAY_INFO
|
|
#define LPDL_INFO LPPROP_ARRAY_INFO
|
|
|
|
//
|
|
// The following structure is used to cache various data associated with the
|
|
// main browse UI for the WAB
|
|
//
|
|
typedef struct _tabBrowseWindowInfo
|
|
{
|
|
// Following are used in ui_abook.c in the main ui
|
|
HWND hWndListAB; // Handle of main list view
|
|
HWND hWndBB; // Handle of Button Bar
|
|
HWND hWndEditQF;
|
|
HWND hWndStaticQF;
|
|
HWND hWndAB; // Handle of the Address Book Window
|
|
HWND hWndSB; // Status bar
|
|
int iFocus; // Tracks who has the focus
|
|
LPRECIPIENT_INFO lpContentsList;
|
|
LPADRBOOK lpAdrBook; // Hangs on to AdrBook object
|
|
LPIAB lpIAB; // Internal version of AdrBook object
|
|
WNDPROC fnOldProc[s_Max]; // Subclass some of the control procs
|
|
HWND s_hWnd[s_Max]; // HWNDS of subclasses controls
|
|
LPFNDISMISS lpfnDismiss;// Context for dismissing in the case of modeless IAdrBook window
|
|
LPVOID lpvDismissContext; // Dismiss context as above
|
|
HWND hWndTools; // handle of the toolbar window
|
|
SORT_INFO SortInfo; // Sort Info
|
|
#ifdef TOOLBAR_BACK
|
|
HBITMAP hbmBack; // handle of the toolbar background
|
|
HPALETTE hpalBkgnd; // handle of the toolbar background palette
|
|
#endif
|
|
HWND hWndTT; // Tooltip control info in ui_abook.c
|
|
TOOLTIP_INFO tti;
|
|
BOOL bDoQuickFilter;
|
|
// bobn: brianv says we have to take this out...
|
|
//int nCount;
|
|
// Used to override automatic notification-fueled refreshes
|
|
BOOL bDontRefreshLV;
|
|
// Related to Treeview in ui_Abook.c
|
|
HWND hWndTV;
|
|
HWND hWndSplitter;
|
|
// Related to drag and drop
|
|
LPIWABDRAGDROP lpIWABDragDrop;
|
|
// Related to Notifications and updates
|
|
LPMAPIADVISESINK lpAdviseSink;
|
|
ULONG ulAdviseConnection;
|
|
|
|
BOOL bDeferNotification; // Used to defer next notification request
|
|
|
|
HTREEITEM hti; //used for caching rt-click items for treeview
|
|
|
|
LPWABFOLDER lpUserFolder; // Used only to mark the User-Folder being rt-clicked
|
|
#ifdef COLSEL_MENU
|
|
ULONG iSelColumn; // Used for Column Selection caching
|
|
#endif
|
|
} BWI, * LPBWI;
|
|
|
|
#define bwi_lpUserFolder lpbwi->lpUserFolder
|
|
#define bwi_hti lpbwi->hti
|
|
#define bwi_hWndListAB lpbwi->hWndListAB
|
|
#define bwi_hWndBB lpbwi->hWndBB
|
|
#define bwi_hWndSB lpbwi->hWndSB
|
|
#define bwi_bDoQuickFilter lpbwi->bDoQuickFilter
|
|
// bobn: brianv says we have to take this out...
|
|
//#define bwi_nCount lpbwi->nCount
|
|
#define bwi_bDeferNotification lpbwi->bDeferNotification
|
|
|
|
#define bwi_SortInfo lpbwi->SortInfo
|
|
|
|
#define bwi_hWndTT lpbwi->hWndTT
|
|
#define bwi_tt_iItem ((lpbwi->tti).iItem)
|
|
#define bwi_tt_bActive lpbwi->tti.bActive
|
|
#define bwi_tt_szTipText ((lpbwi->tti).szTipText)
|
|
#define bwi_tt_TooltipTimer ((lpbwi->tti).uTooltipTimer)
|
|
#define bwi_tt_bShowTooltip ((lpbwi->tti).bShowTooltip)
|
|
|
|
#define bwi_hWndTV (lpbwi->hWndTV)
|
|
#define bwi_hWndSplitter (lpbwi->hWndSplitter)
|
|
|
|
#define bwi_hWndEditQF lpbwi->hWndEditQF
|
|
#define bwi_hWndStaticQF lpbwi->hWndStaticQF
|
|
#define bwi_hWndAB lpbwi->hWndAB
|
|
#define bwi_iFocus lpbwi->iFocus
|
|
#define bwi_lpIAB (lpbwi->lpIAB)
|
|
#define bwi_lpAdrBook (lpbwi->lpAdrBook)
|
|
#define bwi_fnOldProc (lpbwi->fnOldProc)
|
|
#define bwi_s_hWnd (lpbwi->s_hWnd)
|
|
#define bwi_lpContentsList (lpbwi->lpContentsList)
|
|
#define bwi_lpfnDismiss (lpbwi->lpfnDismiss)
|
|
#define bwi_lpvDismissContext (lpbwi->lpvDismissContext)
|
|
|
|
#define bwi_hWndTools (lpbwi->hWndTools)
|
|
|
|
#ifdef TOOLBAR_BACK
|
|
#define bwi_hbmBack (lpbwi->hbmBack)
|
|
#define bwi_hpalBkgnd (lpbwi->hpalBkgnd)
|
|
#endif
|
|
|
|
#define bwi_bDontRefreshLV (lpbwi->bDontRefreshLV)
|
|
#define bwi_lpIWABDragDrop (lpbwi->lpIWABDragDrop)
|
|
|
|
#define bwi_lpAdviseSink (lpbwi->lpAdviseSink)
|
|
#define bwi_ulAdviseConnection (lpbwi->ulAdviseConnection)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Each thread can generate a different Address Book window .. need to
|
|
// keep the data thread safe ...
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
typedef struct _tagPerThreadGlobalData
|
|
{
|
|
// Persistent search params
|
|
LDAP_SEARCH_PARAMS LDAPsp;// Search parameters for LDAP
|
|
|
|
LPADRBOOK lpIAB;
|
|
HACCEL hAccTable; // Accelerator TAble
|
|
|
|
HWND hWndFind; // hWnd of Find dialog so LDAP cancel dialog has a parent
|
|
HWND hDlgCancel; // hWnd of the Cancel dialog
|
|
BOOL bDontShowCancel; // Dont show the cancel dialog when the find is launched ...
|
|
|
|
// Used in print dialog
|
|
BOOL bPrintUserAbort;
|
|
HWND hWndPrintAbortDlg;
|
|
|
|
// Tracks if this is an OpenExSession
|
|
BOOL bIsWABOpenExSession;
|
|
BOOL bIsUnicodeOutlook; // Tracks if this WAB supports Unicode in which case we don't need to do Unicode conversions for it
|
|
|
|
#ifdef HM_GROUP_SYNCING
|
|
LPTSTR lptszHMAccountId; // Keeps Hotmail syncing account ID across two synchronization passes.
|
|
#endif
|
|
|
|
BOOL bDisableParent;
|
|
|
|
// Tracks first run for Directory Service modification
|
|
BOOL bFirstRun;
|
|
|
|
// Default Platform/Dialog Font
|
|
HFONT hDefFont;
|
|
HFONT hDlgFont;
|
|
|
|
// Caches a cookie for LDAP paged results
|
|
struct berval * pCookie;
|
|
|
|
} PTGDATA, * LPPTGDATA;
|
|
|
|
#define pt_hDefFont (lpPTGData->hDefFont)
|
|
#define pt_hDlgFont (lpPTGData->hDlgFont)
|
|
#define pt_pCookie (lpPTGData->pCookie)
|
|
#define pt_LDAPsp (lpPTGData->LDAPsp)
|
|
|
|
#define pt_hWndFind lpPTGData->hWndFind
|
|
#define pt_hDlgCancel lpPTGData->hDlgCancel
|
|
#define pt_bDontShowCancel lpPTGData->bDontShowCancel
|
|
|
|
#define pt_bPrintUserAbort (lpPTGData->bPrintUserAbort)
|
|
#define pt_hWndPrintAbortDlg (lpPTGData->hWndPrintAbortDlg)
|
|
|
|
#define pt_bIsWABOpenExSession (lpPTGData->bIsWABOpenExSession)
|
|
#define pt_bIsUnicodeOutlook (lpPTGData->bIsUnicodeOutlook)
|
|
|
|
#define pt_bDisableParent (lpPTGData->bDisableParent)
|
|
|
|
#define pt_bFirstRun (lpPTGData->bFirstRun)
|
|
|
|
#define pt_lpIAB (lpPTGData->lpIAB)
|
|
#define pt_hAccTable (lpPTGData->hAccTable)
|
|
|
|
// This is a global
|
|
DWORD dwTlsIndex; // index for private thread storage
|
|
|
|
|
|
// for COLSEL_MENU stuff
|
|
#ifdef COLSEL_MENU
|
|
extern const ULONG MenuToPropTagMap[];
|
|
#endif // COLSEL_MENU
|
|
|
|
/**** MISC UI FUNCTIONS ****/
|
|
|
|
// Gets a threads storage pointer or creates a new one if none found
|
|
LPPTGDATA __fastcall GetThreadStoragePointer();
|
|
|
|
//This function frees up RECIPIENT_INFO structures
|
|
void FreeRecipItem(LPRECIPIENT_INFO * lppItem);
|
|
|
|
|
|
// This function loads a string and allocates space for it.
|
|
LPTSTR LoadAllocString(int StringID);
|
|
|
|
|
|
// This function initializes a list view
|
|
HRESULT HrInitListView( HWND hWndLV, // List view hWnd
|
|
DWORD dwStyle, // Style
|
|
BOOL bShowHeaders); // Hide or show column headers
|
|
|
|
|
|
// This function fills a list view from a contents list
|
|
HRESULT HrFillListView( HWND hWndLV,
|
|
LPRECIPIENT_INFO lpContentsList);
|
|
|
|
|
|
// Call to create main view to address book
|
|
HWND hCreateAddressBookWindow( LPADRBOOK lpIAB,
|
|
HWND hWndParent,
|
|
LPADRPARM lpszCaption);
|
|
|
|
|
|
// Creates a ContentsList from the property store
|
|
HRESULT HrGetWABContentsList( LPIAB lpIAB,
|
|
SORT_INFO SortInfo,
|
|
LPSPropTagArray lpPTA,
|
|
LPSPropertyRestriction lpPropRes,
|
|
ULONG ulFlags,
|
|
LPSBinary lpsbContainer,
|
|
BOOL bGetProfileContents,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
|
|
#define LDAP_USE_ADVANCED_FILTER 0x04000000 // completely made up flag
|
|
// for passing a advanced filter
|
|
// to the LDAP_FindRow
|
|
// Creates ContentsList from an LDAP container
|
|
HRESULT HrGetLDAPContentsList( LPADRBOOK lpIAB,
|
|
ULONG cbContainerEID,
|
|
LPENTRYID lpContainerEID,
|
|
SORT_INFO SortInfo,
|
|
LPSRestriction lpPropRes,
|
|
LPTSTR lpAdvFilter,
|
|
LPSPropTagArray lpPTA,
|
|
ULONG ulFlags,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
// Trims leading and trailing spaces from strings
|
|
BOOL TrimSpaces(TCHAR * szBuf);
|
|
|
|
|
|
// Sort Call Back funciton for list views
|
|
int CALLBACK ListViewSort( LPARAM lParam1,
|
|
LPARAM lParam2,
|
|
LPARAM lParamSort);
|
|
|
|
|
|
// Retrieves the HWND for a list view column header
|
|
//HWND GetListViewColumnHeader(HWND hWndLV, DWORD dwPos);
|
|
|
|
|
|
// Paints bmps onto list view column headers
|
|
void SetColumnHeaderBmp( HWND hWndLV,
|
|
SORT_INFO SortInfo);
|
|
|
|
// Returns TRUE if the current viewed container is the PAB
|
|
BOOL CurrentContainerIsPAB(HWND hWndCombo);
|
|
|
|
// Cleans up the list view and releases the contents list
|
|
void ClearListView( HWND hWndLV,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
|
|
// Deletes the selected items from a list view control and the property store
|
|
void DeleteSelectedItems( HWND hWndLV,
|
|
LPADRBOOK lpIAB,
|
|
HANDLE hPropertyStore,
|
|
LPFILETIME lpftLast);
|
|
|
|
|
|
// Calls properties on a list view item
|
|
HRESULT HrShowLVEntryProperties( HWND hWndLV,
|
|
ULONG ulFlags,
|
|
LPADRBOOK lpIAB,
|
|
LPFILETIME lpftLast);
|
|
|
|
|
|
// Exports list view items to vCard files
|
|
HRESULT VCardExportSelectedItems(HWND hWndLV,
|
|
LPADRBOOK lpIAB);
|
|
|
|
|
|
// Imports vCard file to property store
|
|
HRESULT VCardImport(HWND hWnd, LPADRBOOK lpIAB, LPTSTR szVCardFile, LPSPropValue * lppProp);
|
|
|
|
|
|
// Selects the specified list view item
|
|
void LVSelectItem( HWND hWndList,
|
|
int iItemIndex);
|
|
|
|
|
|
// Given an entryid, reads a single item from the store and creates a list view item
|
|
BOOL ReadSingleContentItem( LPADRBOOK lpIAB,
|
|
ULONG cbEntryID,
|
|
LPENTRYID lpEntryID,
|
|
LPRECIPIENT_INFO * lppItem);
|
|
|
|
|
|
// Converts an lpPropArray into a LPRECIPIENT_INFO item
|
|
void GetRecipItemFromPropArray( ULONG ulcPropCount,
|
|
LPSPropValue rgPropVals,
|
|
LPRECIPIENT_INFO * lppItem);
|
|
|
|
|
|
// Inserts a single RecipientInfo item into a list view
|
|
void AddSingleItemToListView( HWND hWndLV,
|
|
LPRECIPIENT_INFO lpItem);
|
|
|
|
|
|
// Higher level function that takes a WAB entryid and puts it in the list view
|
|
// Calls most of the above functions (this function assumes caller has checked that
|
|
// the entryid is a valid wab entryid
|
|
BOOL AddWABEntryToListView( LPADRBOOK lpIAB,
|
|
HWND hWndLV,
|
|
ULONG cbEID,
|
|
LPENTRYID lpEID,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
|
|
// Called by the NewContact menu items or buttons
|
|
HRESULT AddNewObjectToListViewEx( LPADRBOOK lpIAB,
|
|
HWND hWndLV,
|
|
HWND hWndTV,
|
|
HTREEITEM hSelItem,
|
|
LPSBinary lpsbContEID,
|
|
ULONG ulObjectType,
|
|
SORT_INFO * lpSortInfo,
|
|
LPRECIPIENT_INFO * lppContentsList,
|
|
LPFILETIME lpftLast,
|
|
LPULONG lpcbEID,
|
|
LPENTRYID * lppEID);
|
|
|
|
HRESULT AddEntryToContainer(LPADRBOOK lpIAB,
|
|
ULONG ulObjType, //MAPI_DISTLIST or MAPI_ABCONT
|
|
ULONG cbGroupEntryID,
|
|
LPENTRYID lpGroupEntryID,
|
|
DWORD cbEID,
|
|
LPENTRYID lpEID);
|
|
|
|
// Customizes and displays the context menu for various list views in the UI
|
|
int ShowLVContextMenu(int LV, // idicates which list view this is
|
|
HWND hWndLV,
|
|
HWND hWndCombo,
|
|
LPARAM lParam, // contains the mouse pos info when called from WM_CONTEXTMENU
|
|
LPVOID lpVoid, //misc stuff we want to pass in
|
|
LPADRBOOK lpIAB, HWND hWndTV);
|
|
|
|
// Gets the child's coordinates in client units
|
|
void GetChildClientRect( HWND hWndChild,
|
|
LPRECT lprc);
|
|
|
|
|
|
// Finds the item in the LV matching the text in the EditBox
|
|
void DoLVQuickFind(HWND hWndEdit, HWND hWndLV);
|
|
|
|
|
|
// Does string searching of one within the other
|
|
BOOL SubstringSearch(LPTSTR pszTarget, LPTSTR pszSearch);
|
|
|
|
|
|
|
|
// Gets the props from a object
|
|
HRESULT HrGetPropArray( LPADRBOOK lpIAB,
|
|
LPSPropTagArray lpPTA,
|
|
ULONG cbEntryID,
|
|
LPENTRYID lpEntryID,
|
|
ULONG ulFlags,
|
|
ULONG * lpcValues,
|
|
LPSPropValue * lppPropArray);
|
|
|
|
|
|
|
|
// Calls CreateEntry for a new mailuser/distlist ...
|
|
HRESULT HrCreateNewEntry( LPADRBOOK lpIAB, //AdrBook Object
|
|
HWND hWndParent, //Hwnd for dialog
|
|
ULONG ulCreateObjectType, //MAILUSER or DISTLIST
|
|
ULONG cbEIDContainer,
|
|
LPENTRYID lpEIDContainer,
|
|
ULONG ulContObjectType,
|
|
ULONG ulFlags,
|
|
BOOL bShowBeforeAdding,
|
|
ULONG cValues,
|
|
LPSPropValue lpPropArray,
|
|
ULONG *lpcbEntryID,
|
|
LPENTRYID *lppEntryID );
|
|
|
|
|
|
HRESULT HrGetWABTemplateID( LPADRBOOK lpIAB,
|
|
ULONG ulObjectType,
|
|
ULONG * lpcbEID,
|
|
LPENTRYID * lppEID);
|
|
|
|
|
|
BOOL CheckForCycle( LPADRBOOK lpAdrBook,
|
|
LPENTRYID lpEIDChild,
|
|
ULONG cbEIDChild,
|
|
LPENTRYID lpEIDParent,
|
|
ULONG cbEIDParent); //from distlist.c
|
|
|
|
|
|
// Used for sorting columns in various list views ...
|
|
void SortListViewColumn( LPIAB lpIAB,
|
|
HWND hWndLV, //ListView Handle
|
|
int iSortCol, //Column to sort by
|
|
LPSORT_INFO lpSortInfo,
|
|
BOOL bUseCurrentSettings); // Sort Info structre specific for each dialog
|
|
|
|
|
|
|
|
// Used for storing sort info for persistence between sessions.
|
|
BOOL ReadRegistrySortInfo(LPIAB lpIAB, LPSORT_INFO lpSortInfo);
|
|
BOOL WriteRegistrySortInfo(LPIAB lpIAB, SORT_INFO SortInfo);
|
|
|
|
// Constructs a localized display name from individual pieces
|
|
BOOL SetLocalizedDisplayName(
|
|
LPTSTR lpszFirstName,
|
|
LPTSTR lpszMiddleName,
|
|
LPTSTR lpszLastName,
|
|
LPTSTR lpszCompanyName,
|
|
LPTSTR lpszNickName,
|
|
LPTSTR * lppszBuf,
|
|
ULONG ulszBuf,
|
|
BOOL bDNbyLN,
|
|
LPTSTR lpTemplate,
|
|
LPTSTR * lppszRetBuf);
|
|
|
|
|
|
// Callback for setting all the children windows to default GUI font ..
|
|
#define PARENT_IS_DIALOG 0 // We treat dialog children differently from window children
|
|
#define PARENT_IS_WINDOW 1 // so need these LPARAM values to differentiate..
|
|
STDAPI_(BOOL) SetChildDefaultGUIFont(HWND hWndChild, LPARAM lParam);
|
|
|
|
|
|
// Used for populating the Combo box with LDAP server names ...
|
|
HRESULT PopulateContainerList( LPADRBOOK lpIAB,
|
|
HWND hWndLV,
|
|
LPTSTR lpszSelection,
|
|
LPTSTR lptszPreferredSelection);
|
|
|
|
|
|
// Used for freeing the associated structure in each container List Views
|
|
void FreeLVItemParam(HWND hWndLV);
|
|
|
|
|
|
// Gets the EntryID of the current container ...
|
|
void GetCurrentContainerEID(HWND hWndLV,
|
|
LPULONG lpcbContEID,
|
|
LPENTRYID * lppContEID);
|
|
|
|
|
|
// Shows the LDAP search dialog and creates a restriction
|
|
HRESULT HrShowSearchDialog(LPADRBOOK lpIAB,
|
|
HWND hWndParent,
|
|
LPADRPARM_FINDINFO lpAPFI,
|
|
LPLDAPURL lplu,
|
|
LPSORT_INFO lpSortInfo);
|
|
|
|
|
|
// Gets contents from an LDAP search and container
|
|
HRESULT HrSearchAndGetLDAPContents(
|
|
LDAP_SEARCH_PARAMS LDAPsp,
|
|
LPTSTR lpAdvFilter,
|
|
HWND hWndList,
|
|
LPADRBOOK lpIAB,
|
|
SORT_INFO SortInfo,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
// Gets contents from a WAB local store container
|
|
HRESULT HrGetWABContents( HWND hWndList,
|
|
LPADRBOOK lpIAB,
|
|
LPSBinary lpsbContainer,
|
|
SORT_INFO SortInfo,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
|
|
// Shows UI to modify current list of servers
|
|
HRESULT HrShowDirectoryServiceModificationDlg(HWND hWndParent, LPIAB lpIAB);
|
|
|
|
// Creates a new blank mailuser object
|
|
HRESULT HrCreateNewObject(LPADRBOOK lpIAB,
|
|
LPSBinary lpsbContainer,
|
|
ULONG ulObjectType,
|
|
ULONG ulFlags,
|
|
LPMAPIPROP * lppPropObj);
|
|
|
|
// Generic message box displayer ...
|
|
int ShowMessageBox(HWND hWndParent, int MsgId, int ulFlags);
|
|
int __cdecl ShowMessageBoxParam(HWND hWndParent, int MsgId, int ulFlags, ...);
|
|
|
|
|
|
// atoi converter
|
|
int my_atoi(LPTSTR lpsz);
|
|
|
|
// Reads the default registry LDAP country name
|
|
BOOL ReadRegistryLDAPDefaultCountry(LPTSTR szCountry, DWORD cchCountry, LPTSTR szCountryCode, DWORD cchCountryCode);
|
|
|
|
#ifdef OLD_STUFF
|
|
// Fills a drop down list with the LDAP country names
|
|
void FillComboLDAPCountryNames(HWND hWndCombo);
|
|
// Writes the defaule country name to the registry
|
|
BOOL WriteRegistryLDAPDefaultCountry(LPTSTR szCountry);
|
|
#endif //OLD_STUFF
|
|
|
|
// Looks at Combo and ListView and determines which options to enable or disable
|
|
void GetCurrentOptionsState(HWND hWndCombo,
|
|
HWND hWndLV,
|
|
LPBOOL lpbState);
|
|
|
|
// Adds selected LDAP items to the Address Book
|
|
HRESULT HrAddToWAB( LPADRBOOK lpIAB,
|
|
HWND hWndLV,
|
|
LPFILETIME lpftLast);
|
|
|
|
|
|
// Coolbar creating function ...
|
|
HWND CreateCoolBar(LPBWI lpbwi, HWND hwndParent);
|
|
|
|
|
|
// Directory Services Proeprties property sheet
|
|
HRESULT HrShowDSProps(HWND hWndParent,LPTSTR ptszAcct, LPTSTR *pptszName, BOOL bAddNew);
|
|
|
|
|
|
// Saves the modeless dialog size and position to registry for persistence
|
|
BOOL WriteRegistryPositionInfo(LPIAB lpIAB, LPABOOK_POSCOLSIZE lpABPosColSize, LPTSTR szKey);
|
|
|
|
|
|
// Retrieves the modeless dialog size and position to registry for persistence
|
|
BOOL ReadRegistryPositionInfo(LPIAB lpIAB, LPABOOK_POSCOLSIZE lpABPosColSize, LPTSTR szKey);
|
|
|
|
|
|
// Processes the nmcustomdraw message from the list view
|
|
LRESULT ProcessLVCustomDraw(HWND hWnd, LPARAM lParam, BOOL bIsDialog);
|
|
|
|
|
|
// Quick Filter for list view
|
|
void DoLVQuickFilter( LPADRBOOK lpIAB,
|
|
HWND hWndEdit,
|
|
HWND hWndLV,
|
|
LPSORT_INFO lpSortInfo,
|
|
ULONG ulFlags,
|
|
int nMinLen,
|
|
LPRECIPIENT_INFO * lppContentsList);
|
|
|
|
// Sets the objects name in the properties window title
|
|
void SetWindowPropertiesTitle(HWND hDlg, LPTSTR lpszName);
|
|
|
|
void SCS(HWND hwndParent);
|
|
|
|
|
|
// Copies an items (partial) contents into the clipboard
|
|
HRESULT HrCopyItemDataToClipboard(HWND hWnd, LPADRBOOK lpIAB, HWND hWndLV);
|
|
|
|
|
|
// Gets the items data and puts it all into 1 long string
|
|
HRESULT HrGetLVItemDataString(LPADRBOOK lpIAB, HWND hWndLV, int iItemIndex, LPTSTR * lppszData);
|
|
|
|
LPTSTR FormatAllocFilter(int StringID1, LPCTSTR lpFilter1,
|
|
int StringID2, LPCTSTR lpFilter2,
|
|
int StringID3, LPCTSTR lpFilter3);
|
|
|
|
|
|
// Shellexecutes a "mailto" to selected entry ...
|
|
HRESULT HrSendMailToSelectedContacts(HWND hWndLV, LPADRBOOK lpIAB, int nExtEmail);
|
|
|
|
|
|
// Show certificate properties
|
|
//HRESULT HrShowCertProps(HWND hWndParent,
|
|
// LPCERT_DISPLAY_PROPS lpCDP);
|
|
|
|
// Shows the Help About dialog box
|
|
INT_PTR CALLBACK HelpAboutDialogProc( HWND hDlg,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam);
|
|
|
|
|
|
// Helps truncate DBCS strings correctly
|
|
ULONG TruncatePos(LPTSTR lpsz, ULONG nMaxLen);
|
|
|
|
// Local WAB search
|
|
HRESULT HrDoLocalWABSearch( IN HANDLE hPropertyStore,
|
|
IN LPSBinary lpsbCont,
|
|
IN LDAP_SEARCH_PARAMS LDAPsp,
|
|
OUT LPULONG lpulFoundCount,
|
|
OUT LPSBinary * lprgsbEntryIDs );
|
|
|
|
|
|
// Adds a non-wab entry to the wab
|
|
HRESULT HrEntryAddToWAB( LPADRBOOK lpIAB,
|
|
HWND hWndParent,
|
|
ULONG cbInputEID,
|
|
LPENTRYID lpInputEID,
|
|
ULONG * lpcbOutputEID,
|
|
LPENTRYID * lppOutputEID);
|
|
|
|
|
|
// Deciphers a vCard File and then shows one off details on it
|
|
HRESULT HrShowOneOffDetailsOnVCard( LPADRBOOK lpIAB,
|
|
HWND hWnd,
|
|
LPTSTR szvCardFile);
|
|
|
|
// Checks if the current locale needs Ruby Support
|
|
BOOL bIsRubyLocale();
|
|
|
|
void FreeRecipList(LPRECIPIENT_INFO * lppList);
|
|
|
|
void SetSBinary(LPSBinary lpsb, ULONG cb, LPBYTE lpb);
|
|
|
|
|
|
HRESULT HrProcessLDAPUrl(LPADRBOOK lpIAB, HWND hWnd,
|
|
ULONG ulFlags, LPTSTR szLDAPUrl,
|
|
LPMAILUSER * lppMailUser);
|
|
|
|
HRESULT VCardRetrieve(LPADRBOOK lpIAB,
|
|
HWND hWndParent,
|
|
ULONG ulFlags,
|
|
LPTSTR lpszFileName,
|
|
LPSTR lpszBuf,
|
|
LPMAILUSER * lppMailUser);
|
|
|
|
HRESULT VCardCreate( LPADRBOOK lpIAB,
|
|
HWND hWndParent,
|
|
ULONG ulFlags,
|
|
LPTSTR lpszFileName,
|
|
LPMAILUSER lpMailUser);
|
|
|
|
//void ShellUtil_RunClientRegCommand(HWND hwnd, LPCTSTR pszClient);
|
|
HRESULT HrShellExecInternetCall(LPADRBOOK lpIAB, HWND hWndLV);
|
|
|
|
|
|
// Open a vCard and add it to the wab based on file name
|
|
HRESULT OpenAndAddVCard(LPBWI lpbwi, LPTSTR szVCardFile);
|
|
|
|
|
|
// removes illegal chars from potential file names
|
|
void TrimIllegalFileChars(LPTSTR sz);
|
|
|
|
// DistList prop sheets
|
|
//
|
|
INT_PTR CreateDLPropertySheet( HWND hwndOwner,
|
|
LPDL_INFO lpPropArrayInfo);
|
|
|
|
|
|
// Copies truncated version of Src to Dest
|
|
int CopyTruncate(LPTSTR szDest, LPTSTR szSrc, int nMaxLen);
|
|
|
|
// Adds an item's parent's eid to the item
|
|
HRESULT AddFolderParentEIDToItem(LPIAB lpIAB,
|
|
ULONG cbFolderEntryID,
|
|
LPENTRYID lpFolderEntryID,
|
|
LPMAPIPROP lpMU, ULONG cbEID, LPENTRYID lpEID);
|
|
|
|
// Adds an item's eid to its parent
|
|
HRESULT AddItemEIDToFolderParent( LPIAB lpIAB,
|
|
ULONG cbFolderEntryId,
|
|
LPENTRYID lpFolderEntryId,
|
|
ULONG cbEID, LPENTRYID lpEID);
|
|
|
|
// Adds the specified entry to the specified WAB Profile Folder
|
|
HRESULT AddEntryToFolder(LPADRBOOK lpIAB,
|
|
LPMAPIPROP lpMailUser,
|
|
ULONG cbFolderEntryId,
|
|
LPENTRYID lpFolderEntryId,
|
|
DWORD cbEID,
|
|
LPENTRYID lpEID);
|
|
|
|
// imports another WAB file
|
|
HRESULT HrImportWABFile(HWND hWnd, LPADRBOOK lpIAB, ULONG ulFlags, LPTSTR lpszFileName);
|
|
|
|
LPRECIPIENT_INFO GetItemFromLV(HWND hWndLV, int iItem);
|
|
|
|
// determines what the UI icon for the entry should be..
|
|
int GetWABIconImage(LPRECIPIENT_INFO lpItem);
|
|
|
|
//
|
|
// Functions related to using Outlook store
|
|
BOOL SetRegistryUseOutlook(BOOL bUseOutlook);
|
|
BOOL bUseOutlookStore();
|
|
BOOL bCheckForOutlookWABDll(LPTSTR lpszDllPath, DWORD cchDllPath);
|
|
|
|
|
|
// Functions used in managing rt-click extensions
|
|
void FreeActionItemList(LPIAB lpIAB);
|
|
HRESULT HrUpdateActionItemList(LPIAB lpIAB);
|
|
LRESULT ProcessActionCommands(LPIAB lpIAB, HWND hWndLV,
|
|
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
void AddExtendedMenuItems(LPADRBOOK lpIAB, HWND hWndLV, HMENU hMenuAction, BOOL bUpdateStatus, BOOL bAddSendMailItems);
|
|
void AddExtendedSendMailToItems(LPADRBOOK lpIAB, HWND hWndLV, HMENU hMenuAction, BOOL bAddItems);
|
|
void GetContextMenuExtCommandString(LPIAB lpIAB, int uCmd, LPTSTR sz, ULONG cbsz);
|
|
|
|
|
|
// Stuff to do with GetMe / SetMe
|
|
HRESULT HrGetMeObject(LPADRBOOK lpIAB, ULONG ulFlags, DWORD * lpdwAction, SBinary * lpsbEID, ULONG_PTR ulParam);
|
|
HRESULT HrSetMeObject(LPADRBOOK lpIAB, ULONG ulFlags, SBinary sbEID, ULONG_PTR ulParam);
|
|
|
|
// Stuff to do with the print and abort import dialog
|
|
void CreateShowAbortDialog(HWND hWndParent, int idsTitle, int idsIcon, int ProgMax, int ProgCurrent);
|
|
void CloseAbortDlg();
|
|
BOOL CALLBACK FAbortProc(HDC hdcPrn, INT nCode);
|
|
void SetPrintDialogMsg(int idsMsg, int idsFormat, LPTSTR lpszMsg);
|
|
INT_PTR CALLBACK FAbortDlgProc(HWND hwnd, UINT msg,WPARAM wp, LPARAM lp);
|
|
BOOL bTimeToAbort();
|
|
|
|
HRESULT HrSaveHotmailSyncInfoOnDeletion(LPADRBOOK lpAdrBook, LPSBinary lpEID);
|
|
HRESULT HrAssociateOneOffGroupMembersWithContacts(LPADRBOOK lpAdrBook,
|
|
LPSBinary lpsbGroupEID,
|
|
LPDISTLIST lpDistList);
|
|
|
|
// Stuff used in adding extension property pages to the WAB Prop Sheets
|
|
//
|
|
typedef HRESULT (_ADDPROPPAGES_) (LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam, int * lpnPage);
|
|
typedef _ADDPROPPAGES_ FAR *LPFNADDPAGES;
|
|
|
|
BOOL CALLBACK AddPropSheetPageProc( HPROPSHEETPAGE hpage, LPARAM lParam );
|
|
void FreePropExtList(LPEXTDLLINFO lpList);
|
|
HRESULT GetExtDisplayInfo(LPIAB lpIAB, LPPROP_ARRAY_INFO lpPropArrayInfo, BOOL fReadOnly, BOOL bMailUser);
|
|
BOOL ChangedExtDisplayInfo(LPPROP_ARRAY_INFO lpPropArrayInfo, BOOL bChanged);
|
|
void FreeExtDisplayInfo(LPPROP_ARRAY_INFO lpPropArrayInfo);
|
|
|
|
#ifdef COLSEL_MENU
|
|
BOOL ColSel_PropTagToString( ULONG ulPropTag, LPTSTR lpszString, ULONG cchSize);
|
|
#endif // COLSEL_MENU
|
|
|
|
BOOL IsWindowOnScreen(LPRECT lprc); // determines if window is onscreen
|
|
BOOL IsHTTPMailEnabled(LPIAB lpIAB);
|
|
|
|
/*********************************************************************/
|
|
|
|
#ifdef WIN16 // Need WINAPI for 16 bits
|
|
typedef BOOL WINAPI (_INITCOMMONCONTROLSEX_)(LPINITCOMMONCONTROLSEX lpiccex);
|
|
typedef _INITCOMMONCONTROLSEX_ FAR *LP_INITCOMMONCONTROLSEX;
|
|
|
|
typedef HPROPSHEETPAGE WINAPI (_CREATEPROPERTYSHEETPAGE_)(PROPSHEETPAGE * lppsp);
|
|
typedef _CREATEPROPERTYSHEETPAGE_ FAR * LP_CREATEPROPERTYSHEETPAGE;
|
|
|
|
typedef BOOL WINAPI (_IMAGELIST_DRAW_)(HIMAGELIST himl, int i, HDC hdcDst,int x, int y, UINT fStyle);
|
|
typedef _IMAGELIST_DRAW_ FAR * LPIMAGELIST_DRAW;
|
|
|
|
typedef BOOL WINAPI (_IMAGELIST_DESTROY_)(HIMAGELIST himl);
|
|
typedef _IMAGELIST_DESTROY_ FAR * LPIMAGELIST_DESTROY;
|
|
|
|
typedef HIMAGELIST WINAPI (_IMAGELIST_LOADIMAGE_)(HINSTANCE hi, LPTSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
|
|
typedef _IMAGELIST_LOADIMAGE_ FAR *LPIMAGELIST_LOADIMAGE;
|
|
|
|
typedef COLORREF WINAPI (_IMAGELIST_SETBKCOLOR_)(HIMAGELIST himl, COLORREF clrBk);
|
|
typedef _IMAGELIST_SETBKCOLOR_ FAR *LPIMAGELIST_SETBKCOLOR;
|
|
|
|
typedef BOOL WINAPI (_TRACKMOUSEEVENT_)(LPTRACKMOUSEEVENT lpEventTrack);
|
|
typedef _TRACKMOUSEEVENT_ FAR *LP_TRACKMOUSEEVENT;
|
|
|
|
typedef int WINAPI (_PROPERTYSHEET_)(LPCPROPSHEETHEADER lppsph);
|
|
typedef _PROPERTYSHEET_ FAR *LPPROPERTYSHEET;
|
|
#else // WIN16
|
|
typedef BOOL (_INITCOMMONCONTROLSEX_)(LPINITCOMMONCONTROLSEX lpiccex);
|
|
typedef _INITCOMMONCONTROLSEX_ FAR *LP_INITCOMMONCONTROLSEX;
|
|
|
|
/*
|
|
typedef HPROPSHEETPAGE (_CREATEPROPERTYSHEETPAGE_)(PROPSHEETPAGE * lppsp);
|
|
typedef _CREATEPROPERTYSHEETPAGE_ FAR * LP_CREATEPROPERTYSHEETPAGE;
|
|
*/
|
|
typedef HPROPSHEETPAGE (_CREATEPROPERTYSHEETPAGE_A_)(LPCPROPSHEETPAGEA lppsp);
|
|
typedef HPROPSHEETPAGE (_CREATEPROPERTYSHEETPAGE_W_)(LPCPROPSHEETPAGEW lppsp);
|
|
|
|
typedef _CREATEPROPERTYSHEETPAGE_A_ FAR * LP_CREATEPROPERTYSHEETPAGE_A;
|
|
typedef _CREATEPROPERTYSHEETPAGE_W_ FAR * LP_CREATEPROPERTYSHEETPAGE_W;
|
|
|
|
typedef BOOL (_IMAGELIST_DRAW_)(HIMAGELIST himl, int i, HDC hdcDst,int x, int y, UINT fStyle);
|
|
typedef _IMAGELIST_DRAW_ FAR * LPIMAGELIST_DRAW;
|
|
|
|
typedef BOOL (_IMAGELIST_DESTROY_)(HIMAGELIST himl);
|
|
typedef _IMAGELIST_DESTROY_ FAR * LPIMAGELIST_DESTROY;
|
|
|
|
/*
|
|
typedef HIMAGELIST (_IMAGELIST_LOADIMAGE_)(HINSTANCE hi, LPCSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
|
|
typedef _IMAGELIST_LOADIMAGE_ FAR *LPIMAGELIST_LOADIMAGE;
|
|
*/
|
|
|
|
typedef HIMAGELIST (_IMAGELIST_LOADIMAGE_A_)(HINSTANCE hi, LPCSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
|
|
typedef HIMAGELIST (_IMAGELIST_LOADIMAGE_W_)(HINSTANCE hi, LPCWSTR lpbmp,int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
|
|
|
|
typedef _IMAGELIST_LOADIMAGE_A_ FAR *LPIMAGELIST_LOADIMAGE_A;
|
|
typedef _IMAGELIST_LOADIMAGE_W_ FAR *LPIMAGELIST_LOADIMAGE_W;
|
|
|
|
typedef COLORREF (_IMAGELIST_SETBKCOLOR_)(HIMAGELIST himl, COLORREF clrBk);
|
|
typedef _IMAGELIST_SETBKCOLOR_ FAR *LPIMAGELIST_SETBKCOLOR;
|
|
|
|
typedef BOOL (_TRACKMOUSEEVENT_)(LPTRACKMOUSEEVENT lpEventTrack);
|
|
typedef _TRACKMOUSEEVENT_ FAR *LP_TRACKMOUSEEVENT;
|
|
|
|
/*
|
|
typedef int (_PROPERTYSHEET_)(LPCPROPSHEETHEADER lppsph);
|
|
typedef _PROPERTYSHEET_ FAR *LPPROPERTYSHEET;
|
|
*/
|
|
typedef INT_PTR (_PROPERTYSHEET_A_)(LPCPROPSHEETHEADERA lppsphA);
|
|
typedef INT_PTR (_PROPERTYSHEET_W_)(LPCPROPSHEETHEADERW lppsphW);
|
|
|
|
typedef _PROPERTYSHEET_A_ FAR *LPPROPERTYSHEET_A;
|
|
typedef _PROPERTYSHEET_W_ FAR *LPPROPERTYSHEET_W;
|
|
#endif
|
|
|
|
BOOL InitCommonControlLib(void);
|
|
ULONG DeinitCommCtrlClientLib(void);
|
|
BOOL __fastcall IsSpace(LPTSTR lpChar);
|
|
/*********************************************************************/
|
|
|
|
// The following messages are used for shutting down the WAB when the user changes to modify the locale
|
|
// so that the new set of WAB resources can be brought in ..
|
|
// These are used in conjunction with MLLoadLibrary
|
|
#define PUI_OFFICE_COMMAND (WM_USER + 0x0901)
|
|
#define PLUGUI_CMD_SHUTDOWN 0 // wParam value
|
|
#define PLUGUI_CMD_QUERY 1 // wParam value
|
|
#define OFFICE_VERSION_9 9 // standardized value to return for Office 9 apps
|
|
|
|
typedef struct _PLUGUI_INFO
|
|
{
|
|
unsigned uMajorVersion : 8; // Used to indicate App;s major version number
|
|
unsigned uOleServer : 1; // BOOL, TRUE if this is an OLE process
|
|
unsigned uUnused : 23; // not used
|
|
} PLUGUI_INFO;
|
|
|
|
typedef union _PLUGUI_QUERY
|
|
{
|
|
UINT uQueryVal;
|
|
PLUGUI_INFO PlugUIInfo;
|
|
} PLUGUI_QUERY;
|
|
// End of Pluggable UI section
|
|
|
|
#endif
|