forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathabcom.h
664 lines (534 loc) · 26.4 KB
/
abcom.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _AB_COM_H_
#define _AB_COM_H_
#include "xp_core.h"
#include "msgcom.h"
#include "abdefn.h"
#include "dirprefs.h"
#ifdef XP_CPLUSPLUS
class AB_Pane;
class AB_ContainerPane;
class AB_ContainerInfo;
class AB_MailingListPane;
class AB_PersonPane;
#else
typedef struct AB_Pane AB_Pane;
typedef struct AB_ContainerPane AB_ContainerPane;
typedef struct AB_ContainerInfo AB_ContainerInfo;
typedef struct AB_MailingListPane AB_MailingListPane;
typedef struct AB_PersonPane AB_PersonPane;
#endif
XP_BEGIN_PROTOS
#define AB_API extern "C"
#if defined(XP_MAC)
#define FE_IMPLEMENTS_SHOW_PROPERTY_SHEET
#endif
const ABID AB_ABIDUNKNOWN = 0; /* Find a better home for this somewhere! */
/* new errors added by mscott for the 2 pane AB UI. I will eventually name this enumerated type AB_Error */
enum
{
AB_SUCCESS = 0,
AB_FAILURE,
AB_INVALID_PANE,
AB_INVALID_CONTAINER,
AB_INVALID_ATTRIBUTE,
AB_OUT_OF_MEMORY
};
/* these are the types of possible containers */
typedef enum
{
AB_LDAPContainer,
AB_MListContainer, /* a mailing list */
AB_PABContainer /* a personal AB */
} AB_ContainerType;
/* AB_ContainerAttributes define the types of information FEs can ask the BE about
a AB_ContainerInfo in the ABContainerPane. */
typedef enum
{
attribContainerType, /* mailing list? LDAP directory? PAB? */
attribName, /* the name for the container */
attribNumChildren, /* how many child containers does this container have? */
attribDepth, /* container depth in the overall hierarchy. 0 == root ctr, 1 == one level below a root container, etc. */
attribContainerInfo /* FEs might want to get the container Info * for a line in the container pane */
} AB_ContainerAttribute;
typedef struct AB_ContainerAttribValue
{
AB_ContainerAttribute attrib; /* used to determine value of the union */
union{
char * string;
int32 number; /* used by numchildren & depth */
AB_ContainerType containerType;
AB_ContainerInfo * container;
} u;
} AB_ContainerAttribValue;
typedef enum
{
AB_Drag_Not_Allowed = 0x00000000,
AB_Require_Copy = 0x00000001,
AB_Require_Move = 0x00000002,
AB_Default_Drag = 0xFFFFFFFF
} AB_DragEffect;
typedef enum
{
AB_attribUnknown = 0, /* unrecognized attribute */
AB_attribEntryType, /* mailing list or person entry */
AB_attribEntryID,
AB_attribFullName,
AB_attribNickName,
AB_attribGivenName, /* all of the following are person entry specific */
AB_attribMiddleName,
AB_attribFamilyName,
AB_attribCompanyName,
AB_attribLocality,
AB_attribRegion,
AB_attribEmailAddress,
AB_attribInfo,
AB_attribHTMLMail,
AB_attribExpandedName,
AB_attribTitle,
AB_attribPOAddress,
AB_attribStreetAddress,
AB_attribZipCode,
AB_attribCountry,
AB_attribWorkPhone,
AB_attribFaxPhone,
AB_attribHomePhone,
AB_attribDistName,
AB_attribSecurity,
AB_attribCoolAddress,
AB_attribUseServer,
AB_attribPager,
AB_attribCellularPhone,
AB_attribDisplayName,
AB_attribWinCSID, /* character set id */
AB_attribOther /* any attrib with this value or higher is always a string type (our dyanmic attributes) */
} AB_AttribID;
/* WARNING!!! WILL BE PHASING THIS STRUCTURE OUT!!!! */
typedef struct AB_EntryAttributeItem{
AB_AttribID id;
char * description; /* resource string specifying a user-readable descript for the attrib i.e. "First Name" */
XP_Bool sortable; /* is this attribute sortable? (may help FEs display the column if they know if it can be sorted or not */
}AB_EntryAttributeItem;
typedef enum{
AB_MailingList = 0,
AB_Person
} AB_EntryType;
typedef struct AB_AttributeValue
{
AB_AttribID attrib; /* we need this to know how to read the union */
union{
char * string;
XP_Bool boolValue;
AB_EntryType entryType; /* mailing list or person entry */
int16 shortValue; /* use for server type or WinCSID field */
} u;
} AB_AttributeValue;
/* New Column ID structure used to abstract the columns in the AB_Pane used by the FEs from the attributes thos columns actually
represent. */
typedef enum{
AB_ColumnID0 = 0,
AB_ColumnID1,
AB_ColumnID2,
AB_ColumnID3,
AB_ColumnID4,
AB_ColumnID5,
AB_ColumnID6,
AB_NumberOfColumns /* make sure this is always the last one!! */
} AB_ColumnID;
typedef struct AB_ColumnInfo{
AB_AttribID attribID; /* the attrib ID this column is displaying */
char * displayString; /* column display string */
XP_Bool sortable; /* is this column attribute sortable? i.e. phone number is not! */
} AB_ColumnInfo;
/**********************************************************************************************
FE Call back functions. We'll show the types here...NOTE: FEs must now register their call back
functions through these APIs so the back end knows which return to use.
*********************************************************************************************/
/* FEs must register this function with the appropriate pane, it is called by the back end in
response to the following commands: AB_PropertiesCmd, AB_AddUserCmd, AB_AddMailingListCmd */
/* typedef int AB_ShowPropertySheetForEntryFunc (MSG_Pane * pane, AB_EntryType entryType); */
typedef int AB_ShowPropertySheetForEntryFunc (MSG_Pane * pane, MWContext * context);
int AB_SetShowPropertySheetForEntryFunc(
MSG_Pane * abPane,
AB_ShowPropertySheetForEntryFunc * func);
/* BE sets the type for the DIR_Server and hands it to the FEs to be displayed & filled out in a
pane. It is called by the back end in response to the following commands: AB_PropertiesCmd,
AB_NewLDAPDirectory, AB_NewAddressBook. */
typedef int AB_ShowPropertySheetForDirFunc(DIR_Server * server, MWContext * context, XP_Bool newDirectory /* is it a new directory? */);
int AB_SetShowPropertySheetForDirFunc(
MSG_Pane * abcPane, /* container pane */
AB_ShowPropertySheetForDirFunc * func);
/***************************************************************************************
DON'T USE THIS FUNCTION!!!! THIS WILL BE PHASING OUT!!!!!! #mscott 01/21/98
This is a callback into the FE instructing them to bring up a person entry pane or a
mailing list pane. The back end has already created the pane. A type is included to let the FE
determine if the pane is a mailing list or person entry pane. In addition, in the case of a mailing list
pane, the FE must still initialize the mailing list pane before it can be used
***************************************************************************************/
#ifdef FE_IMPLEMENTS_SHOW_PROPERTY_SHEET
extern int FE_ShowPropertySheetForAB2(
MSG_Pane * pane, /* BE created mailing list or person entry pane */
AB_EntryType entryType); /* mailing list or person entry */
#endif
/***************************************************************************************
None pane-specific APIs. These function work on many panes
***************************************************************************************/
int AB_ClosePane(MSG_Pane * pane);
/****************************************************************************************
Address Book Pane General APIs - creating, initializing, closing, changing containers,
searching, etc.
*****************************************************************************************/
int AB_CreateABPane(
MSG_Pane ** abPane,
MWContext * context,
MSG_Master * master);
int AB_InitializeABPane(
MSG_Pane * abPane,
AB_ContainerInfo * abContainer);
/* to change the container the abPane is currently displaying */
int AB_ChangeABContainer(
MSG_Pane * abPane,
AB_ContainerInfo * container); /* the new containerInfo to display */
int AB_GetEntryIndex(
MSG_Pane * abPane,
ABID id, /* entry id in the database */
MSG_ViewIndex * index); /* FE allocated, BE fills with index */
int AB_GetABIDForIndex(
MSG_Pane * abPane,
MSG_ViewIndex index,
ABID * id); /* FE allocated. BE fills with the id you want */
int AB_SearchDirectoryAB2(
MSG_Pane * abPane,
char * searchString);
int AB_LDAPSearchResultsAB2(
MSG_Pane * abPane,
MSG_ViewIndex index,
int32 num);
int AB_FinishSearchAB2(MSG_Pane * abPane);
int AB_CommandAB2(
MSG_Pane * srcPane, /* NOTE: this can be a ABpane or an ABContainerPane!!! you can delete containers & entries */
AB_CommandType command, /* delete or mailto are the only currently supported commands */
MSG_ViewIndex * indices,
int32 numIndices);
int AB_CommandStatusAB2(
MSG_Pane * srcPane, /* NOTE: Can be an ABPane or an ABContainerPane!! */
AB_CommandType command,
MSG_ViewIndex * indices,
int32 numIndices,
XP_Bool * selectable_p,
MSG_COMMAND_CHECK_STATE * selected_p,
const char ** displayString,
XP_Bool * plural_p);
/* still need to add registering and unregistering compose windows */
/****************************************************************************************
AB_ContainerInfo General APIs - adding users and a sender. Doesn't require a pane.
*****************************************************************************************/
int AB_AddUserAB2(
AB_ContainerInfo * abContainer, /* the container to add the person to */
AB_AttributeValue * values, /* FE defined array of attribute values for the new user. FE must free this array */
uint16 numItems,
ABID * entryID); /* BE returns the ABID for this new user */
int AB_AddUserWithUIAB2(
AB_ContainerInfo * abContainer,
AB_AttributeValue * values,
uint16 numItems,
XP_Bool lastOneToAdd);
int AB_AddSenderAB2(
AB_ContainerInfo * abContainer,
char * author,
char * url);
/****************************************************************************************
Drag and Drop Related APIs - vcards, ab lines, containers, etc.
*****************************************************************************************/
int AB_DragEntriesIntoContainer(
MSG_Pane * srcPane, /* could be an ABPane or ABCPane */
const MSG_ViewIndex * srcIndices, /* indices of items to be dragged */
int32 numIndices,
AB_ContainerInfo * destContainer,
AB_DragEffect request); /* copy or move? */
/* FE's should call this function to determine if the drag & drop they want to perform is
valid or not. I would recommend calling it before the FE actually performs the drag & drop call */
AB_DragEffect AB_DragEntriesIntoContainerStatus(
MSG_Pane * abPane,
const MSG_ViewIndex * indices,
int32 numIndices,
AB_ContainerInfo * destContainer,
AB_DragEffect request); /* do you want to do a move? a copy? default drag? */
/****************************************************************************************
Importing and Exporting - ABs from files, vcards...
*****************************************************************************************/
typedef enum
{
AB_Filename, /* char * in import and export APIs contain an FE allocated/freed filename */
AB_PromptForFileName, /* prompt for file name on import or export */
AB_Vcard,
AB_CommaList, /* comma separated list of email addresses */
AB_RawData /* we don't know what it is, will try to extract email addresses */
} AB_ImportExportType;
int AB_ImportData(
AB_ContainerInfo * destContainer,
const char * buffer, /* could be a filename or NULL (if type = prompt for filename) or a block of data to be imported */
int32 bufSize, /* how big is the buffer? */
AB_ImportExportType dataType); /* valid types: All */
/* returns TRUE if the container accepts imports of the data type and FALSE otherwise */
XP_Bool AB_ImportDataStatus(
AB_ContainerInfo * destContainer,
AB_ImportExportType dataType);
/* exporting always occurs to a file unless the data type is vcard. Only valid export data types are: vcard,
filename, prompt for filename */
int AB_ExportData(
AB_ContainerInfo * srcContainer,
char ** buffer, /* filename or NULL. Or if type = Vcard, the BE allocated vcard. FE responosible for freeing it?? */
int32 * bufSize, /* ignored unless VCard is data type in which case FE allocates, BE fills */
AB_ImportExportType dataType); /* valid types: filename, prompt for filename, vcard */
/****************************************************************************************
ABContainer Pane --> Creation, Loading, getting line data for each container.
*****************************************************************************************/
int AB_CreateContainerPane(
MSG_Pane ** abContainerPane, /* BE will pass back ptr to pane through this */
MWContext * context,
MSG_Master * master);
int AB_InitializeContainerPane(MSG_Pane * abContainerPane);
/* this will return MSG_VIEWINDEXNONE if the container info is not in the pane */
MSG_ViewIndex AB_GetIndexForContainer(
MSG_Pane * abContainerPane,
AB_ContainerInfo * container); /* container you want the index for */
/* this will return NULL if the index is invalid */
AB_ContainerInfo * AB_GetContainerForIndex(
MSG_Pane * abContainerPane,
const MSG_ViewIndex index);
/* the following set of APIs support getting/setting container pane line data out such as the container's
name, type, etc. We are going to try a particular discipline for memory management of AB_ContainerAttribValues.
For APIs which get an attribute value, the BE will actually allocate the struct. To free the space, the FE should
call AB_FreeContainerAttribValue. For any API which sets an attribute value, the FE is responsible for allocating and
de-allocating the data. */
int AB_GetContainerAttributeForPane(
MSG_Pane * abContainerPane,
MSG_ViewIndex index, /* index of container you want information for */
AB_ContainerAttribute attrib, /* attribute FE wants to know */
AB_ContainerAttribValue ** value); /* BE allocates struct. FE should call AB_FreeContainerAttribValue to free space when done */
int AB_SetContainerAttributeForPane(
MSG_Pane * abContainerPane,
MSG_ViewIndex index,
AB_ContainerAttribValue * value); /* FE handles all memory allocation! */
int AB_GetContainerAttribute(
AB_ContainerInfo * ctr,
AB_ContainerAttribute attrib,
AB_ContainerAttribValue ** value); /* BE allocates struct. FE should call AB_FreeContainerAttribValue to free space when donee */
int AB_SetContainerAttribute(
AB_ContainerInfo * ctr,
AB_ContainerAttribValue * value); /* FE handles all memory allocateion / deallocation! */
int AB_GetContainerAttributes(
AB_ContainerInfo * ctr,
AB_ContainerAttribute * attribsArray,
AB_ContainerAttribValue ** valuesArray,
uint16 * numItems);
int AB_SetContainerAttributes(
AB_ContainerInfo * ctr,
AB_ContainerAttribValue * valuesArray,
uint16 numItems);
/* getting and setting multiple container attributes on a per container pane basis */
int AB_GetContainerAttributesForPane(
MSG_Pane * abContainerPane,
MSG_ViewIndex index,
AB_ContainerAttribute * attribsArray,
AB_ContainerAttribValue ** valuesArray,
uint16 * numItems);
int AB_SetContainerAttributesForPane(
MSG_Pane * abContainerPane,
MSG_ViewIndex index,
AB_ContainerAttribValue * valuesArray,
uint16 numItems);
int AB_FreeContainerAttribValue(AB_ContainerAttribValue * value); /* BE will free the attribute value */
int AB_FreeContainerAttribValues(AB_ContainerAttribValue * valuesArray, uint16 numItems);
XP_Bool AB_IsStringContainerAttribValue(AB_ContainerAttribValue * value); /* use this to determine if your attrib is a string attrib */
/* Use the following two functions to build the combo box in the Address Window of all the root level containers.
You first ask for the number of root level (PABs and LDAP directories). Use this number to allocate an array of
AB_ContainerInfo ptrs. Give this array to the back end and we will fill it. FE can destroy array when done with it.
FE shoud NOT be deleting the individual AB_ContainerInfo ptrs. */
int AB_GetNumRootContainers(
MSG_Pane * abContainerPane,
int32 * numRootContainers);
int AB_GetOrderedRootContainers(
MSG_Pane * abContainerPane,
AB_ContainerInfo ** ctrArray, /* FE Allocated & Freed */
int32 * numCtrs); /* in - # of elements in ctrArray. out - BE fills with # root containers stored in ctrArray */
/* sometimes you want to get a handle on the DIR_Sever for a particular container. Both return NULL if for some
reason there wasn't a DIR_Server. If the container is a mailing list, returns DIR_Server of the PAB the list is in.
NOTE: If you modify any of the DIR_Server properties, you should call AB_UpdateDIRServerForContainer to make sure that the container
(and hence any pane views on the container) are updated */
DIR_Server * AB_GetDirServerForContainer(AB_ContainerInfo * container);
/* Please don't call this function. It is going away!!! Use AB_UpdateDirServerForContainerPane instead!! */
int AB_UpdateDIRServerForContainer(AB_ContainerInfo * container);
/* will create a new container in the container pane if the directory does not already exist. Otherwise updates the
directory's container in the pane */
int AB_UpdateDIRServerForContainerPane(
MSG_Pane * abContainerPane,
DIR_Server * directory);
/*******************************************************************************************************************
Old Column Header APIs. These will be phased out!!! Please don't use them
******************************************************************************************************************/
int AB_GetNumEntryAttributesForContainer(
AB_ContainerInfo * container,
uint16 * numItems); /* BE will fill this integer with the number of available attributes for the container */
int AB_GetEntryAttributesForContainer(
AB_ContainerInfo * container,
AB_EntryAttributeItem * items, /* FE allocated array which BE fills with values */
uint16 * maxItems); /* FE passes in # elements allocated in array. BE returns # elements filled in array */
/********************************************************************************************************************
Our New Column Header APIs. We'll be phasing out AB_GetNumEntryAttributesForContainer and AB_GetEntryAttributesForContainer
********************************************************************************************************************/
AB_ColumnInfo * AB_GetColumnInfo(
AB_ContainerInfo * container,
AB_ColumnID columnID);
int AB_GetNumColumnsForContainer(AB_ContainerInfo * container);
int AB_GetColumnAttribIDs(
AB_ContainerInfo * container,
AB_AttribID * attribIDs, /* FE allocated array of attribs. BE fills with values */
int * numAttribs); /* FE passes in # elements allocated in array. BE returns # elements filled */
int AB_FreeColumnInfo(AB_ColumnInfo * columnInfo);
/****************************************************************************************
AB Pane List Data -> how to get ab pane line attributes such as name, address, phone, etc.
*****************************************************************************************/
/* to actually get an entry attribute */
int AB_GetEntryAttributeForPane(
MSG_Pane * abPane,
MSG_ViewIndex index,
AB_AttribID attrib, /* what attribute do you want? */
AB_AttributeValue ** valueArray); /* BE handles memory allocation. FE must call AB_FreeEntryAttributeValue when done */
int AB_GetEntryAttribute(
AB_ContainerInfo * container,
ABID entryid, /* an identifier or key used to name the object in the container */
AB_AttribID attrib, /* attribute type the FE wants to know */
AB_AttributeValue ** valueArray); /* BE handles memory allocation. FE must call AB_FreeEntryAttributeValue when done */
int AB_SetEntryAttribute(
AB_ContainerInfo * container,
ABID entryid, /* an identifier or key used to name the object in the container */
AB_AttributeValue * value); /* FE handles all memory allocation */
int AB_SetEntryAttributeForPane(
MSG_Pane * abPane,
MSG_ViewIndex index,
AB_AttributeValue * value); /* FE handles all memory allocation */
/* we also allow you to set entry attributes in batch by passing in an array of attribute values */
int AB_SetEntryAttributes(
AB_ContainerInfo * container,
ABID entryID,
AB_AttributeValue * valuesArray, /* FE allocated array of attribute values to set */
uint16 numItems); /* FE passes in # items in array */
int AB_SetEntryAttributesForPane(
MSG_Pane * abPane,
MSG_ViewIndex index,
AB_AttributeValue * valuesArray,
uint16 numItems);
int AB_GetEntryAttributes(
AB_ContainerInfo * container,
ABID entryID,
AB_AttribID * attribs, /* FE allocated array of attribs that you want */
AB_AttributeValue ** values, /* BE allocates & fills an array of values for the input array of attribs */
uint16 * numItems); /* IN: size of attribs array. OUT: # of values in value array */
int AB_GetEntryAttributesForPane(
MSG_Pane * abPane,
MSG_ViewIndex index,
AB_AttribID * attribs, /* FE allocated array of attribs that you want */
AB_AttributeValue ** values,
uint16 * numItems);
/* Memory allocation APIs for setting/getting entry attribute values */
int AB_FreeEntryAttributeValue(AB_AttributeValue * value /* pointer to a value */);
int AB_FreeEntryAttributeValues(AB_AttributeValue * values /* array of values */, uint16 numItems);
int AB_CopyEntryAttributeValue(
AB_AttributeValue * srcValue, /* already allocated attribute value you want to copy from */
AB_AttributeValue * destValue); /* already allocated attribute value you want to copy into */
XP_Bool AB_IsStringEntryAttributeValue(AB_AttributeValue * value);
/****************************************************************************************
Sorting
*****************************************************************************************/
/* sorting by first name is a global setting. It is set per abPane and does not change
when you load a new container into the abPane */
XP_Bool AB_GetSortByFirstNameAB2(MSG_Pane * abPane); /* is the pane sorting by first name? */
void AB_SortByFirstNameAB2(
MSG_Pane * abPane,
XP_Bool sortByFirstName); /* true for sort by first, false for last first */
/* Insert our sort by column stuff here */
int AB_SortByAttribute(
MSG_Pane * abPane,
AB_AttribID id, /* attribute we want to sort by */
XP_Bool sortAscending);
int AB_GetPaneSortedByAB2(
MSG_Pane * abPane,
AB_AttribID * attribID); /* BE fills with the attribute we are sorting by */
XP_Bool AB_GetPaneSortedAscendingAB2(MSG_Pane * abPane);
/*****************************************************************************************
APIs for the Mailing List Pane. In addition to these, the mailing list pane responds to
previous AB APIs such as AB_Close, MSG_GetNumLines().
****************************************************************************************/
int AB_InitializeMailingListPaneAB2(MSG_Pane * mailingListPane);
AB_ContainerInfo * AB_GetContainerForMailingList(MSG_Pane * mailingListPane);
/* this could return ABID = 0 for a new entry that is not in the database */
ABID AB_GetABIDForMailingListIndex(
MSG_Pane * mailingListPane,
const MSG_ViewIndex index);
MSG_ViewIndex AB_GetMailingListIndexForABID(
MSG_Pane * mailingListPane,
ABID entryID); /* this function could return MSG_VIEWINDEXNONE if entryID = 0 or not in list */
/* Use these two APIs to get Mailing List ENTRY attributes (i.e. people or other mailing list attributes in this mailing list) */
int AB_SetMailingListEntryAttributes(
MSG_Pane * pane,
const MSG_ViewIndex index,
AB_AttributeValue * valuesArray, /* FE allocated array of attribute values you want to set */
uint16 numItems);
int AB_GetMailingListEntryAttributes(
MSG_Pane * mailingListPane,
const MSG_ViewIndex index,
AB_AttribID * attribs, /* FE allocated & freed array of attribs you want */
AB_AttributeValue ** values, /* BE allocates & fills values for the input array of attribs */
uint16 * numItems); /* FE provides # attribs in array. BE fills with # values returned in values */
/* Use these two APIs to Set and Get the Mailing List properties. */
int AB_GetMailingListAttributes(
MSG_Pane * mailingListPane,
AB_AttribID * attribs, /* FE allocated array of attribs */
AB_AttributeValue ** values, /* BE allocates & fills values. FE must call a free to the back end */
uint16 * numItems);
int AB_SetMailingListAttributes(
MSG_Pane * mailingListPane,
AB_AttributeValue * valuesArray, /* FE allocated array of attribute values you want to set */
uint16 numItems);
/*******************************************************************************************
APIs for the person entry pane aka the person property sheets. The person entry pane is created
by the back end and given to the front end in the call FE_ShowPropertySheetFor. In the current
incarnation, person atributes are set and retrieved through the person entry pane and NOT through
the AB_ContainerInfo the person is in. If you "cheat" and go through the container directly, you may
not be getting the correct information. When the person entry pane is committed, the changes are pushed
back into the container. During the commit process, if it is a new person then a new entry is made in the
database.
********************************************************************************************/
AB_ContainerInfo * AB_GetContainerForPerson(MSG_Pane * personPane);
ABID AB_GetABIDForPerson(MSG_Pane * personPane); /* could return 0 if new user */
/* get and set the person attributes here */
int AB_SetPersonEntryAttributes(
MSG_Pane * personPane,
AB_AttributeValue * valuesArray,
uint16 numItems);
int AB_GetPersonEntryAttributes(
MSG_Pane * personPane,
AB_AttribID * attribs, /* FE allocted & freed array of attribs they want */
AB_AttributeValue ** values, /* BE allocates & fills values */
uint16 * numItems); /* in - FE provides # of attribs. out - BE fills with # values */
int AB_CommitChanges(MSG_Pane * pane); /* commits changes to a mailing list pane or a person entry pane! */
XP_END_PROTOS
#endif /* _AB_COM_H */