pilot-qof 0.2.3
|
00001 /*************************************************************************** 00002 * qof-datebook.c 00003 * 00004 * Thu Oct 21 15:38:39 2004 00005 * Copyright 2004-2007 Neil Williams 00006 * linux@codehelp.co.uk 00007 ****************************************************************************/ 00008 /* 00009 This program is free software; you can redistribute it and/or modify 00010 it under the terms of the GNU General Public License as published by 00011 the Free Software Foundation; either version 3 of the License, or 00012 (at your option) any later version. 00013 00014 This program is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU General Public License for more details. 00018 00019 You should have received a copy of the GNU General Public License 00020 along with this program. If not, see <http://www.gnu.org/licenses/>. 00021 */ 00029 #define _GNU_SOURCE 00030 #include "config.h" 00031 #include <glib.h> 00032 #include <glib/gprintf.h> 00033 #include <qof.h> 00034 #include <stdlib.h> 00035 #include "pi-datebook.h" 00036 #include "qof-main.h" 00037 #include "pilot-qof.h" 00038 #include "qof-datebook.h" 00039 00040 static QofLogModule log_module = PQ_MOD_PILOT; 00041 00043 typedef struct 00044 { 00045 QofInstance inst; 00046 Appointment_t wrap; //0.12 00047 gchar *category; 00048 gboolean repeater; 00059 } QofDateBook; 00060 00075 #define ENUM_REPEAT_LIST(_) \ 00076 _(repeatNone,) \ 00077 _(repeatDaily,) \ 00078 _(repeatWeekly,) \ 00079 _(repeatMonthlyByDay,) \ 00080 _(repeatMonthlyByDate,) \ 00081 _(repeatYearly,) 00082 00083 AS_STRING_DEC_NON_TYPEDEF (repeatTypes, ENUM_REPEAT_LIST) 00084 FROM_STRING_DEC_NON_TYPEDEF (repeatTypes, ENUM_REPEAT_LIST) 00086 #define ENUM_ALARM_UNIT(_) \ 00087 _(advMinutes,) _(advHours,) _(advDays,) 00088 AS_STRING_DEC_NON_TYPEDEF (alarmTypes, ENUM_ALARM_UNIT) 00089 FROM_STRING_DEC_NON_TYPEDEF (alarmTypes, ENUM_ALARM_UNIT) 00090 00093 #define ENUM_MONTH_DAYQ(_) \ 00094 _(dom1stSun,) _(dom1stMon,) _(dom1stTue,) _(dom1stWen,) _(dom1stThu,) \ 00095 _(dom1stFri,) _(dom1stSat,) _(dom2ndSun,) _(dom2ndMon,) _(dom2ndTue,) \ 00096 _(dom2ndWen,) _(dom2ndThu,) _(dom2ndFri,) _(dom2ndSat,) _(dom3rdSun,) \ 00097 _(dom3rdMon,) _(dom3rdTue,) _(dom3rdWen,) _(dom3rdThu,) _(dom3rdFri,) \ 00098 _(dom3rdSat,) _(dom4thSun,) _(dom4thMon,) _(dom4thTue,) _(dom4thWen,) \ 00099 _(dom4thThu,) _(dom4thFri,) _(dom4thSat,) \ 00100 _(domLastSun,) _(domLastMon,) _(domLastTue,) _(domLastWen,) \ 00101 _(domLastThu,) _(domLastFri,) _(domLastSat,) 00102 AS_STRING_DEC_NON_TYPEDEF (DayOfMonthType, ENUM_MONTH_DAYQ) 00103 FROM_STRING_DEC_NON_TYPEDEF (DayOfMonthType, ENUM_MONTH_DAYQ) 00104 AS_STRING_FUNC_NON_TYPEDEF (repeatTypes, ENUM_REPEAT_LIST) 00105 FROM_STRING_FUNC_NON_TYPEDEF (repeatTypes, ENUM_REPEAT_LIST) 00106 AS_STRING_FUNC_NON_TYPEDEF (DayOfMonthType, ENUM_MONTH_DAYQ) 00107 FROM_STRING_FUNC_NON_TYPEDEF (DayOfMonthType, ENUM_MONTH_DAYQ) 00108 AS_STRING_FUNC_NON_TYPEDEF (alarmTypes, ENUM_ALARM_UNIT) 00109 FROM_STRING_FUNC_NON_TYPEDEF (alarmTypes, ENUM_ALARM_UNIT) 00116 static QofDateBook * 00117 datebook_create (QofBook * book) 00118 { 00119 Appointment_t *qd; 00120 QofDateBook *obj; 00121 QofCollection *coll; 00122 GList *all; 00123 00124 obj = g_new0 (QofDateBook, 1); 00125 qof_instance_init (&obj->inst, PILOT_LINK_QOF_DATEBOOK, book); 00126 coll = qof_book_get_collection (book, PILOT_LINK_QOF_DATEBOOK); 00127 all = qof_collection_get_data (coll); 00128 all = g_list_prepend (all, obj); 00129 qof_collection_set_data (coll, all); 00130 qd = &obj->wrap; 00131 obj->repeater = FALSE; 00133 qd->exception = NULL; 00134 return obj; 00135 } 00136 00137 Appointment_t * datebook_get_pilot (QofInstance * inst) 00138 { 00139 QofDateBook * d; 00140 00141 d = (QofDateBook *)inst; 00142 return &d->wrap; 00143 } 00144 00145 static gboolean 00146 datebook_getEvent (QofDateBook * d) 00147 { 00148 Appointment_t *qd; 00149 00150 g_return_val_if_fail (d != NULL, -1); 00151 qd = &d->wrap; 00152 return (qd->event) ? TRUE : FALSE; 00153 } 00154 00155 static QofTime * 00156 datebook_getBegin (QofDateBook * d) 00157 { 00158 Appointment_t *qd; 00159 QofTime *qt; 00160 00161 g_return_val_if_fail (d != NULL, NULL); 00162 qd = &d->wrap; 00163 qt = qof_time_from_tm (&qd->begin, 0); 00164 return qt; 00165 } 00166 00167 static QofTime * 00168 datebook_getEnd (QofDateBook * d) 00169 { 00170 Appointment_t *qd; 00171 QofTime *qt; 00172 00173 g_return_val_if_fail (d != NULL, NULL); 00174 qd = &d->wrap; 00175 qt = qof_time_from_tm (&qd->end, 0); 00176 return qt; 00177 } 00178 00179 static gboolean 00180 datebook_getAlarm (QofDateBook * d) 00181 { 00182 Appointment_t *qd; 00183 00184 g_return_val_if_fail (d != NULL, FALSE); 00185 qd = &d->wrap; 00186 return (qd->alarm == 1) ? TRUE : FALSE; 00187 } 00188 00189 static gint 00190 datebook_getAdvance (QofDateBook * d) 00191 { 00192 Appointment_t *qd; 00193 00194 g_return_val_if_fail (d != NULL, -1); 00195 qd = &d->wrap; 00196 return (datebook_getAlarm (d)) ? qd->advance : 0; 00197 } 00198 00203 static const gchar * 00204 datebook_getAdvanceUnit (QofDateBook * d) 00205 { 00206 Appointment_t *qd; 00207 gchar *unit; 00208 00209 g_return_val_if_fail (d != NULL, NULL); 00210 qd = &d->wrap; 00211 if (datebook_getAlarm (d) == FALSE) 00212 return NULL; 00213 unit = g_strdup (alarmTypesasString (qd->advanceUnits)); 00214 return unit; 00215 } 00216 00217 static const gchar * 00218 datebook_getRepeatType (QofDateBook * d) 00219 { 00220 Appointment_t *qd; 00221 gchar *type_label; 00222 00223 g_return_val_if_fail (d != NULL, NULL); 00224 qd = &d->wrap; 00225 type_label = g_strdup (repeatTypesasString (qd->repeatType)); 00226 return type_label; 00227 } 00228 00229 static gboolean 00230 datebook_getRepeatForever (QofDateBook * d) 00231 { 00232 Appointment_t *qd; 00233 00234 g_return_val_if_fail (d != NULL, -1); 00235 qd = &d->wrap; 00236 return (qd->repeatForever == 1) ? TRUE : FALSE; 00237 } 00238 00239 static QofTime * 00240 datebook_getRepeatEnd (QofDateBook * d) 00241 { 00242 Appointment_t *qd; 00243 00244 g_return_val_if_fail (d != NULL, NULL); 00245 qd = &d->wrap; 00246 if (qd->repeatType == repeatNone) 00247 qd->repeatEnd = qd->end; 00248 return qof_time_from_tm (&qd->repeatEnd, 0); 00249 } 00250 00257 static gint 00258 datebook_getRepeatFrequency (QofDateBook * d) 00259 { 00260 Appointment_t *qd; 00261 00262 g_return_val_if_fail (d != NULL, -1); 00263 qd = &d->wrap; 00264 return qd->repeatFrequency; 00265 } 00266 00267 static const gchar * 00268 datebook_getRepeatDay (QofDateBook * d) 00269 { 00270 Appointment_t *qd; 00271 enum DayOfMonthType type; 00272 gchar *g; 00273 00274 g_return_val_if_fail (d != NULL, NULL); 00275 qd = &d->wrap; 00276 if (qd->repeatType == repeatNone) 00277 return NULL; 00278 type = qd->repeatDay; 00279 g = g_strdup (DayOfMonthTypeasString (type)); 00280 return g; 00281 } 00282 00317 static QofDateFormat df = 0; 00318 00319 static gchar * 00320 datebook_getRepeatWeekStart (QofDateBook * d) 00321 { 00322 Appointment_t *qd; 00323 QofTime *qt; 00324 QofDate *qdate; 00325 gboolean result; 00326 gchar *retval; 00327 00328 g_return_val_if_fail (d != NULL, NULL); 00329 qd = &d->wrap; 00330 if (qd->repeatType == repeatNone) 00331 return NULL; 00332 qt = qof_time_get_current (); 00333 if (df == 0) 00334 { 00335 result = qof_date_format_add ("%A", &df); 00336 if (!result) 00337 { 00338 PERR (" failed to fetch the locale format"); 00339 return NULL; 00340 } 00341 } 00342 qdate = qof_date_from_qtime (qt); 00343 if (qdate->qd_mday < qdate->qd_wday) 00344 qdate->qd_mday += 7; 00345 qdate->qd_mday -= (qdate->qd_wday + qd->repeatWeekstart); 00346 qof_date_valid (qdate); 00347 qof_time_free (qt); 00348 retval = qof_date_print (qdate, df); 00349 qof_date_free (qdate); 00350 return retval; 00351 } 00352 00353 static gint 00354 datebook_getExceptions (QofDateBook * d) 00355 { 00356 Appointment_t *qd; 00357 00358 g_return_val_if_fail (d != NULL, -1); 00359 qd = &d->wrap; 00360 return qd->exceptions; 00361 } 00362 00363 static gchar * 00364 datebook_getDescription (QofDateBook * d) 00365 { 00366 Appointment_t *qd; 00367 00368 g_return_val_if_fail (d != NULL, NULL); 00369 qd = &d->wrap; 00370 return qd->description; 00371 } 00372 00373 static gchar * 00374 datebook_getNote (QofDateBook * d) 00375 { 00376 Appointment_t *qd; 00377 00378 g_return_val_if_fail (d != NULL, NULL); 00379 qd = &d->wrap; 00380 return qd->note; 00381 } 00382 00383 static gchar * 00384 datebook_getCategory (QofDateBook * d) 00385 { 00386 g_return_val_if_fail (d != NULL, NULL); 00387 return d->category; 00388 } 00389 00390 static double 00391 datebook_getDuration (QofDateBook * d) 00392 { 00393 QofTime *qt_diff, *qt_start, *qt_end; 00394 gdouble retval; 00395 00396 g_return_val_if_fail (d, 0); 00397 qt_start = datebook_getBegin (d); 00398 qt_end = datebook_getEnd (d); 00399 qt_diff = qof_time_diff (qt_end, qt_start); 00400 retval = qof_time_get_secs (qt_diff) / 3600; 00401 qof_time_free (qt_diff); 00402 qof_time_free (qt_start); 00403 qof_time_free (qt_end); 00404 return retval; 00405 } 00406 00407 static gboolean 00408 datebook_check_repeater (QofDateBook * d) 00409 { 00410 g_return_val_if_fail (d, FALSE); 00411 return d->repeater; 00412 } 00413 00414 static void 00415 datebook_set_repeater (QofDateBook * d, gboolean e) 00416 { 00417 g_return_if_fail (d != NULL); 00418 d->repeater = e; 00419 } 00420 00421 static void 00422 datebook_setEvent (QofDateBook * d, gboolean e) 00423 { 00424 Appointment_t *qd; 00425 00426 g_return_if_fail (d != NULL); 00427 qd = &d->wrap; 00428 qd->event = 0; 00429 if (e == TRUE) 00430 qd->event = 1; 00431 } 00432 00433 static void 00434 datebook_setBegin (QofDateBook * d, QofTime *qt) 00435 { 00436 Appointment_t *qd; 00437 gboolean result; 00438 QofDate *qdate; 00439 00440 g_return_if_fail (d != NULL); 00441 qd = &d->wrap; 00442 qdate = qof_date_from_qtime (qt); 00443 result = qof_date_to_struct_tm (qdate, &qd->begin, 0); 00444 if(!result) 00445 PERR (" Date too large for begin."); 00446 qof_date_free (qdate); 00447 } 00448 00449 static void 00450 datebook_setEnd (QofDateBook * d, QofTime *qt) 00451 { 00452 Appointment_t *qd; 00453 gboolean result; 00454 QofDate *qdate; 00455 00456 g_return_if_fail (d != NULL); 00457 qd = &d->wrap; 00458 qdate = qof_date_from_qtime (qt); 00459 result = qof_date_to_struct_tm (qdate, &qd->end, 0); 00460 if(!result) 00461 PERR (" Date too large for end."); 00462 qof_date_free (qdate); 00463 } 00464 00465 static void 00466 datebook_setAlarm (QofDateBook * d, gboolean e) 00467 { 00468 Appointment_t *qd; 00469 00470 g_return_if_fail (d != NULL); 00471 qd = &d->wrap; 00472 if (e) 00473 qd->alarm = 1; 00474 } 00475 00476 static void 00477 datebook_setAdvance (QofDateBook * d, gint e) 00478 { 00479 Appointment_t *qd; 00480 00481 g_return_if_fail (d != NULL); 00482 qd = &d->wrap; 00483 qd->advance = e; 00484 } 00485 00486 static void 00487 datebook_setAdvanceUnit (QofDateBook * d, const gchar * e) 00488 { 00489 Appointment_t *qd; 00490 enum alarmTypes type; 00491 00492 g_return_if_fail (d != NULL); 00493 if (e == NULL) 00494 return; 00495 qd = &d->wrap; 00496 alarmTypesfromString (e, &type); 00497 qd->advanceUnits = type; 00498 } 00499 00504 static void 00505 datebook_setRepeatType (QofDateBook * d, const gchar * type_label) 00506 { 00507 Appointment_t *qd; 00508 enum repeatTypes type; 00509 00510 g_return_if_fail (d != NULL); 00511 qd = &d->wrap; 00512 repeatTypesfromString (type_label, &type); 00513 qd->repeatType = type; 00514 } 00515 00516 static void 00517 datebook_setRepeatForever (QofDateBook * d, gboolean e) 00518 { 00519 Appointment_t *qd; 00520 00521 g_return_if_fail (d != NULL); 00522 qd = &d->wrap; 00523 if (e) 00524 qd->repeatForever = 1; 00525 } 00526 00527 static void 00528 datebook_setRepeatEnd (QofDateBook * d, QofTime *qt) 00529 { 00530 Appointment_t *qd; 00531 gboolean result; 00532 QofDate *qdate; 00533 00534 g_return_if_fail (d != NULL); 00535 qd = &d->wrap; 00536 qdate = qof_date_from_qtime (qt); 00537 result = qof_date_to_struct_tm (qdate, &qd->repeatEnd, 0); 00538 if(!result) 00539 PERR (" Date too large for repeatEnd."); 00540 qof_date_free (qdate); 00541 } 00542 00543 static void 00544 datebook_setRepeatFrequency (QofDateBook * d, gint e) 00545 { 00546 Appointment_t *qd; 00547 00548 g_return_if_fail (d != NULL); 00549 qd = &d->wrap; 00550 qd->repeatFrequency = e; 00551 } 00552 00553 static void 00554 datebook_setRepeatDay (QofDateBook * d, const gchar * e) 00555 { 00556 Appointment_t *qd; 00557 enum DayOfMonthType type; 00558 00559 g_return_if_fail (d != NULL); 00560 if (e == NULL) 00561 return; 00562 qd = &d->wrap; 00563 DayOfMonthTypefromString (e, &type); 00564 qd->repeatDay = type; 00565 } 00566 00574 static void 00575 datebook_setRepeatWeekStart (QofDateBook * d, gchar * e) 00576 { 00577 gchar day[MAX_DATE_LENGTH]; 00578 Appointment_t *qd; 00579 time_t local; 00580 struct tm *local_tm; 00581 gint i, diff; 00582 gboolean found; 00583 00584 g_return_if_fail (d != NULL); 00585 qd = &d->wrap; 00586 diff = 0; 00587 found = FALSE; 00588 local = time (NULL); 00589 local_tm = localtime (&local); 00590 if (local_tm->tm_wday <= 7) 00591 diff = 1; 00592 else 00593 diff = -1; 00594 for (i = 0; i < 7; i++) 00595 { 00596 strftime (day, MAX_DATE_LENGTH, "%A", local_tm); 00597 if (0 == safe_strcmp (e, day)) 00598 { 00599 found = TRUE; 00600 break; 00601 } 00602 local_tm->tm_mday += diff; 00603 } 00604 if (!found) 00605 i = 0; 00606 qd->repeatWeekstart = i; 00607 } 00608 00609 static void 00610 datebook_setExceptions (QofDateBook * d, gint e) 00611 { 00612 Appointment_t *qd; 00613 00614 g_return_if_fail (d != NULL); 00615 qd = &d->wrap; 00616 qd->exceptions = e; 00617 } 00618 00619 static void 00620 datebook_setDescription (QofDateBook * d, gchar * h) 00621 { 00622 Appointment_t *qd; 00623 00624 g_return_if_fail (d); 00625 qd = &d->wrap; 00626 qd->description = g_strdup (qof_util_make_utf8 (h)); 00627 } 00628 00629 static void 00630 datebook_setNote (QofDateBook * d, gchar * h) 00631 { 00632 Appointment_t *qd; 00633 00634 g_return_if_fail (d); 00635 qd = &d->wrap; 00636 if (!h) 00637 return; 00638 qd->note = g_strdup (qof_util_make_utf8 (h)); 00639 } 00640 00641 static void 00642 datebook_setCategory (QofDateBook * d, gchar * n) 00643 { 00644 g_return_if_fail (d != NULL); 00645 d->category = g_strdup (qof_util_make_utf8 (n)); 00646 } 00647 00648 void 00649 datebook_repeater_clone (QofEntity * ent, QofTime * qt_end, QofTime * qt_increment) 00650 { 00651 QofDateBook * clone; 00652 QofInstance * inst; 00653 QofBook * book; 00654 QofDateBook * obj; 00655 00656 obj = (QofDateBook*)ent; 00657 inst = (QofInstance*)obj; 00658 book = inst->book; 00659 clone = datebook_create (book); 00660 clone->repeater = TRUE; 00661 /* clone the main parts of the event */ 00662 datebook_setEvent (clone, datebook_getEvent (obj)); 00663 datebook_setAlarm (clone, datebook_getAlarm (obj)); 00664 datebook_setAdvance (clone, datebook_getAdvance (obj)); 00665 datebook_setAdvanceUnit (clone, datebook_getAdvanceUnit (obj)); 00666 datebook_setDescription (clone, datebook_getDescription (obj)); 00667 datebook_setNote (clone, datebook_getNote (obj)); 00668 datebook_setCategory (clone, datebook_getCategory (obj)); 00669 /* the clone does not repeat */ 00670 datebook_setExceptions (clone, 0); 00671 datebook_setRepeatEnd (clone, qt_end); 00672 datebook_setRepeatForever (clone, FALSE); 00673 datebook_setRepeatType (clone, 00674 repeatTypesasString (repeatNone)); 00675 datebook_setBegin (clone, qt_increment); 00676 datebook_setEnd (clone, qt_end); 00677 } 00678 00679 static const gchar * 00680 datebookPrintable (gpointer instance) 00681 { 00682 return datebook_getDescription ((QofDateBook *) instance); 00683 } 00684 00685 static QofObject datebook_object_def = { 00686 interface_version:QOF_OBJECT_VERSION, 00687 e_type:PILOT_LINK_QOF_DATEBOOK, 00688 type_label:QOF_DATEBOOK_DESC, 00689 create:(gpointer) datebook_create, 00690 book_begin:NULL, 00691 book_end:NULL, 00692 is_dirty:qof_collection_is_dirty, 00693 mark_clean:qof_collection_mark_clean, 00694 foreach:qof_collection_foreach, 00695 printable:datebookPrintable, 00696 version_cmp:(gint (*)(gpointer, gpointer)) qof_instance_version_cmp, 00697 }; 00698 00699 gboolean 00700 DateBookRegister (void) 00701 { 00702 static QofParam params[] = { 00703 {DATEBOOK_EVENT, QOF_TYPE_BOOLEAN, 00704 (QofAccessFunc) datebook_getEvent, 00705 (QofSetterFunc) datebook_setEvent}, 00706 {DATEBOOK_BEGIN, QOF_TYPE_TIME, (QofAccessFunc) datebook_getBegin, 00707 (QofSetterFunc) datebook_setBegin}, 00708 {DATEBOOK_END, QOF_TYPE_TIME, (QofAccessFunc) datebook_getEnd, 00709 (QofSetterFunc) datebook_setEnd}, 00710 {DATEBOOK_ALARM, QOF_TYPE_BOOLEAN, 00711 (QofAccessFunc) datebook_getAlarm, 00712 (QofSetterFunc) datebook_setAlarm}, 00713 {DATEBOOK_ADVANCE, QOF_TYPE_INT32, 00714 (QofAccessFunc) datebook_getAdvance, 00715 (QofSetterFunc) datebook_setAdvance}, 00716 {DATEBOOK_ADV_UNIT, QOF_TYPE_STRING, 00717 (QofAccessFunc) datebook_getAdvanceUnit, 00718 (QofSetterFunc) datebook_setAdvanceUnit}, 00719 {DATEBOOK_REPEAT_TYPE, QOF_TYPE_STRING, 00720 (QofAccessFunc) datebook_getRepeatType, 00721 (QofSetterFunc) datebook_setRepeatType}, 00722 {DATEBOOK_REPEAT_FOREVER, QOF_TYPE_BOOLEAN, 00723 (QofAccessFunc) datebook_getRepeatForever, 00724 (QofSetterFunc) datebook_setRepeatForever}, 00725 {DATEBOOK_REPEAT_END, QOF_TYPE_TIME, 00726 (QofAccessFunc) datebook_getRepeatEnd, 00727 (QofSetterFunc) datebook_setRepeatEnd}, 00728 {DATEBOOK_REPEAT_FREQUENCY, QOF_TYPE_INT32, 00729 (QofAccessFunc) datebook_getRepeatFrequency, 00730 (QofSetterFunc) datebook_setRepeatFrequency}, 00731 {DATEBOOK_REPEAT_DAY, QOF_TYPE_STRING, 00732 (QofAccessFunc) datebook_getRepeatDay, 00733 (QofSetterFunc) datebook_setRepeatDay}, 00734 {DATEBOOK_REPEAT_WEEK_START, QOF_TYPE_STRING, 00735 (QofAccessFunc) datebook_getRepeatWeekStart, 00736 (QofSetterFunc) datebook_setRepeatWeekStart}, 00737 {DATEBOOK_EXCEPTIONS, QOF_TYPE_INT32, 00738 (QofAccessFunc) datebook_getExceptions, 00739 (QofSetterFunc) datebook_setExceptions}, 00740 {DATEBOOK_DESCRIPTION, QOF_TYPE_STRING, 00741 (QofAccessFunc) datebook_getDescription, 00742 (QofSetterFunc) datebook_setDescription}, 00743 {DATEBOOK_CATEGORY, QOF_TYPE_STRING, 00744 (QofAccessFunc) datebook_getCategory, 00745 (QofSetterFunc) datebook_setCategory}, 00746 {DATEBOOK_REPEATER, QOF_TYPE_BOOLEAN, 00747 (QofAccessFunc) datebook_check_repeater, 00748 (QofSetterFunc) datebook_set_repeater}, 00749 {DATEBOOK_NOTE, QOF_TYPE_STRING, (QofAccessFunc) datebook_getNote, 00750 (QofSetterFunc) datebook_setNote}, 00751 {DATEBOOK_DURATION, QOF_TYPE_DOUBLE, 00752 (QofAccessFunc) datebook_getDuration, NULL}, 00753 {DATEBOOK_EXCEPTION, QOF_TYPE_KVP, 00754 (QofAccessFunc) qof_instance_get_slots, NULL}, 00755 {QOF_PARAM_BOOK, QOF_ID_BOOK, 00756 (QofAccessFunc) qof_instance_get_book, NULL}, 00757 {QOF_PARAM_GUID, QOF_TYPE_GUID, 00758 (QofAccessFunc) qof_instance_get_guid, NULL}, 00759 {NULL}, 00760 }; 00761 00762 qof_class_register (PILOT_LINK_QOF_DATEBOOK, NULL, params); 00763 00764 return qof_object_register (&datebook_object_def); 00765 } 00766