summaryrefslogtreecommitdiff
path: root/development/pim/pim_howto
Unidiff
Diffstat (limited to 'development/pim/pim_howto') (more/less context) (ignore whitespace changes)
-rw-r--r--development/pim/pim_howto/pim_howto.lyx112
1 files changed, 60 insertions, 52 deletions
diff --git a/development/pim/pim_howto/pim_howto.lyx b/development/pim/pim_howto/pim_howto.lyx
index 4571996..1e43d63 100644
--- a/development/pim/pim_howto/pim_howto.lyx
+++ b/development/pim/pim_howto/pim_howto.lyx
@@ -52,8 +52,8 @@
52 \let\item\@idxitem} 52 \let\item\@idxitem}
53 {\if@restonecol\onecolumn\else\clearpage\fi} 53 {\if@restonecol\onecolumn\else\clearpage\fi}
54\end_preamble 54\end_preamble
55\language german 55\language american
56\inputencoding auto 56\inputencoding default
57\fontscheme ae 57\fontscheme ae
58\graphics default 58\graphics default
59\float_placement htbp 59\float_placement htbp
@@ -70,7 +70,7 @@
70\tocdepth 3 70\tocdepth 3
71\paragraph_separation skip 71\paragraph_separation skip
72\defskip medskip 72\defskip medskip
73\quotes_language german 73\quotes_language english
74\quotes_times 2 74\quotes_times 2
75\papercolumns 1 75\papercolumns 1
76\papersides 2 76\papersides 2
@@ -97,7 +97,7 @@ Abstract
97 97
98The Opie-Pim API provides a powerfull access interface to the PIM (Personal 98The Opie-Pim API provides a powerfull access interface to the PIM (Personal
99 Information Management) data which contains your contact information, the 99 Information Management) data which contains your contact information, the
100 dates in your calender tool (in this paper called datebook events) and 100 dates in your calendar tool (in this paper called datebook events) and
101 your todo events. 101 your todo events.
102 Beside providing full featured access to this information, it covers the 102 Beside providing full featured access to this information, it covers the
103 real management of this informantion - the access of the databases - from 103 real management of this informantion - the access of the databases - from
@@ -106,7 +106,7 @@ The Opie-Pim API provides a powerfull access interface to the PIM (Personal
106\layout Standard 106\layout Standard
107 107
108While starting to read the automatically generated API-documentation, the 108While starting to read the automatically generated API-documentation, the
109 user may be confused by a lot of unneccessary classes and details which 109 user may be confused by a lot of unnecessary classes and details which
110 makes the quick start not as easy as possible. 110 makes the quick start not as easy as possible.
111 Due to the fact that a user will not need most of the details, this paper 111 Due to the fact that a user will not need most of the details, this paper
112 should help to start to become confortable with those details he need to 112 should help to start to become confortable with those details he need to
@@ -124,7 +124,7 @@ While starting to read the automatically generated API-documentation, the
124Introduction 124Introduction
125\layout Standard 125\layout Standard
126 126
127Before starting to jump into the work, we should introduce some specialities 127Before starting to jump into the work, we should introduce some specialties
128 of the PIM API, first. 128 of the PIM API, first.
129 To know these facts should help to avoid possible irritations and misunderstand 129 To know these facts should help to avoid possible irritations and misunderstand
130ings: 130ings:
@@ -133,11 +133,11 @@ ings:
133The PIM-API heavily uses C++ templates (as known as generic classes), but 133The PIM-API heavily uses C++ templates (as known as generic classes), but
134 you don't have to understand very deeple what templates are doing and how 134 you don't have to understand very deeple what templates are doing and how
135 they work! Most of the API works without even seeing the templates. 135 they work! Most of the API works without even seeing the templates.
136 In some cases whe have to use them (for instance to use the factory classes), 136 In some cases we have to use them (for instance to use the factory classes),
137 but this guide will provide examples which should help to find the path 137 but this guide will provide examples which should help to find the path
138 through. 138 through.
139 But it is a good idea to read some short introduction of templates to avoid 139 But it is a good idea to read some short introduction of templates to avoid
140 unneccessary mistakes. 140 unnecessary mistakes.
141\layout Enumerate 141\layout Enumerate
142 142
143The PIM-API is split into two parts: The 143The PIM-API is split into two parts: The
@@ -151,7 +151,7 @@ backend.
151\emph default 151\emph default
152 While the frontend provides the API for the user, the backend implements 152 While the frontend provides the API for the user, the backend implements
153 how to access the databases and what to do with the data. 153 how to access the databases and what to do with the data.
154 As we just want to access data, this paper just focusses the frontend. 154 As we just want to access data, this paper just focuses the frontend.
155 Thus, you should ignore all classes which contains something like 155 Thus, you should ignore all classes which contains something like
156\begin_inset Quotes gld 156\begin_inset Quotes gld
157\end_inset 157\end_inset
@@ -160,8 +160,8 @@ backend
160\begin_inset Quotes grd 160\begin_inset Quotes grd
161\end_inset 161\end_inset
162 162
163 in its name! Backends are just interessting for people who want to extend 163 in its name! Backends are just interesting for people who want to extend
164 or implement new possiblities about how to access databases, which will 164 or implement new possibilities about how to access databases, which will
165 be discussed at the end of this paper. 165 be discussed at the end of this paper.
166 Currently, you just have to understand that there do exist several backends 166 Currently, you just have to understand that there do exist several backends
167 for every type of PIM data (Contact, Todo, Datebook) which controls whether 167 for every type of PIM data (Contact, Todo, Datebook) which controls whether
@@ -217,7 +217,7 @@ OPimAccessFactory
217 This operation is defined like this: 217 This operation is defined like this:
218\layout LyX-Code 218\layout LyX-Code
219 219
220T* defaultAccess (typename OPimGlobal::PimType type, const QString &appName) 220T* defaultAccess (typename OPimGlobal::PimType type, const QString &appName)
221\layout Standard 221\layout Standard
222 222
223You just have to add the following lines to your source code to use it (this 223You just have to add the following lines to your source code to use it (this
@@ -241,7 +241,7 @@ If everything works as expected, you will receive a pointer to the contact
241 access-class which has to be used for accessing the database. 241 access-class which has to be used for accessing the database.
242 Accessing the datebook database works equally 242 Accessing the datebook database works equally
243\begin_inset Foot 243\begin_inset Foot
244collapsed true 244collapsed false
245 245
246\layout Standard 246\layout Standard
247 247
@@ -275,9 +275,9 @@ defaultAccess()
275 275
276 276
277\emph default 277\emph default
278, the default dabase is accessed automatically 278, the default database is accessed automatically
279\begin_inset Foot 279\begin_inset Foot
280collapsed true 280collapsed false
281 281
282\layout Standard 282\layout Standard
283 283
@@ -360,7 +360,7 @@ data-class
360\emph default 360\emph default
361 for the selected access-class: OPimContact 361 for the selected access-class: OPimContact
362\begin_inset Foot 362\begin_inset Foot
363collapsed true 363collapsed false
364 364
365\layout Standard 365\layout Standard
366 366
@@ -374,7 +374,7 @@ see
374 374
375 for OPimContactAccess, OPimEvent 375 for OPimContactAccess, OPimEvent
376\begin_inset Foot 376\begin_inset Foot
377collapsed true 377collapsed false
378 378
379\layout Standard 379\layout Standard
380 380
@@ -388,7 +388,7 @@ see
388 388
389 for ODateBookAccess and OPimTodo 389 for ODateBookAccess and OPimTodo
390\begin_inset Foot 390\begin_inset Foot
391collapsed true 391collapsed false
392 392
393\layout Standard 393\layout Standard
394 394
@@ -406,7 +406,7 @@ see
406bool load (); 406bool load ();
407\layout LyX-Code 407\layout LyX-Code
408 408
409bool reload (); 409bool reload ();
410\layout LyX-Code 410\layout LyX-Code
411 411
412bool save (); 412bool save ();
@@ -414,13 +414,13 @@ bool save ();
414 414
415\layout LyX-Code 415\layout LyX-Code
416 416
417bool add (const T& t); 417bool add (const T& t);
418\layout LyX-Code 418\layout LyX-Code
419 419
420bool remove (const T& t); 420bool remove (const T& t);
421\layout LyX-Code 421\layout LyX-Code
422 422
423bool replace (const T& t); 423bool replace (const T& t);
424\layout Standard 424\layout Standard
425 425
426After receiving an access-object, we have to load the existing dataset into 426After receiving an access-object, we have to load the existing dataset into
@@ -460,11 +460,11 @@ without
460\series default 460\series default
461 removing any local changes 461 removing any local changes
462\begin_inset Foot 462\begin_inset Foot
463collapsed true 463collapsed false
464 464
465\layout Standard 465\layout Standard
466 466
467We should check whether all dabases behave like this! (se) 467We should check whether all databases behave like this! (se)
468\end_inset 468\end_inset
469 469
470. 470.
@@ -496,7 +496,7 @@ OPimRecordList
496 496
497\layout LyX-Code 497\layout LyX-Code
498 498
499List allRecords (); 499List allRecords();
500\layout Standard 500\layout Standard
501 501
502In fact, this 502In fact, this
@@ -504,10 +504,10 @@ In fact, this
504List 504List
505\emph default 505\emph default
506 just contains a list of uid's to take care of memory space. 506 just contains a list of uid's to take care of memory space.
507 As every record is identified by an unique identifaction number which is 507 As every record is identified by an unique identification number which
508 called UID (Unique IDentification), these numbers just exists once in the 508 is called UID (Unique Identification), these numbers just exists once in
509 database which is currently on access! To receive the real record, you 509 the database which is currently on access! To receive the real record,
510 have to use the operation 510 you have to use the operation
511\begin_inset Quotes gld 511\begin_inset Quotes gld
512\end_inset 512\end_inset
513 513
@@ -515,10 +515,10 @@ find()
515\begin_inset Quotes grd 515\begin_inset Quotes grd
516\end_inset 516\end_inset
517 517
518 with a valid UID as paramter: 518 with a valid UID as parameter:
519\layout LyX-Code 519\layout LyX-Code
520 520
521T find (UID uid); 521T find (UID uid);
522\layout Standard 522\layout Standard
523 523
524This is all you need to realize a basic access to the PIM-Databases! The 524This is all you need to realize a basic access to the PIM-Databases! The
@@ -558,7 +558,7 @@ As shown in the previous chapter, all we need to access the PIM-Database
558. 558.
559\layout Standard 559\layout Standard
560 560
561But first we will start with intoducing some features of the 561But first we will start with introducing some features of the
562\series bold 562\series bold
563OPimAccessFactory 563OPimAccessFactory
564\series default 564\series default
@@ -581,7 +581,7 @@ defaultAccess()
581\begin_inset Quotes grd 581\begin_inset Quotes grd
582\end_inset 582\end_inset
583 583
584 to request an access-object to the dafault backend. 584 to request an access-object to the default backend.
585 Whether this default backend will access the XML, VCard or SQLite database 585 Whether this default backend will access the XML, VCard or SQLite database
586 type, is defined by the configuration file 586 type, is defined by the configuration file
587\begin_inset Quotes gld 587\begin_inset Quotes gld
@@ -616,18 +616,18 @@ defaultAccess()
616\layout Standard 616\layout Standard
617 617
618If the developer wants to select a special database type for sure without 618If the developer wants to select a special database type for sure without
619 unnecessary side effects, he has to use the oparation 619 unnecessary side effects, he has to use the operation
620\emph on 620\emph on
621create() 621create()
622\emph default 622\emph default
623 which has the following parameters: 623 which has the following parameters:
624\layout LyX-Code 624\layout LyX-Code
625 625
626T * create (OPimGlobal::PimType type, OPimGlobal::DatabaseStyle dbStyle, 626T* create (OPimGlobal::PimType type, OPimGlobal::DatabaseStyle dbStyle,
627 const QString &appName, const QString &fileName=QString::null) 627 const QString &appName, const QString &fileName=QString::null)
628\layout Standard 628\layout Standard
629 629
630Some paramters are already known, like type and appName (see section 630Some parameters are already known, like type and appName (see section
631\begin_inset LatexCommand \ref{sec:Instantiate-the-Access} 631\begin_inset LatexCommand \ref{sec:Instantiate-the-Access}
632 632
633\end_inset 633\end_inset
@@ -746,10 +746,10 @@ In most cases it is not sufficient to receive just a list of all information
746 in a database. 746 in a database.
747 It is essential to get a subset of the information available and to be 747 It is essential to get a subset of the information available and to be
748 able to sort it. 748 able to sort it.
749 For this kind of excercise we provide some special operations which provide 749 For this kind of exercise we provide some special operations which provide
750 searching and sorting in an incremental manner 750 searching and sorting in an incremental manner
751\begin_inset Foot 751\begin_inset Foot
752collapsed true 752collapsed false
753 753
754\layout Standard 754\layout Standard
755 755
@@ -840,7 +840,7 @@ matchRegexp()
840The function is defined like this: 840The function is defined like this:
841\layout LyX-Code 841\layout LyX-Code
842 842
843List matchRegexp (const QRegExp &r); 843List matchRegexp (const QRegExp& r);
844\layout Standard 844\layout Standard
845 845
846The 846The
@@ -897,22 +897,22 @@ OPimContact searchQuery;
897\layout LyX-Code 897\layout LyX-Code
898 898
899searchQuery.setLastName( 899searchQuery.setLastName(
900\begin_inset Quotes gld 900\begin_inset Quotes eld
901\end_inset 901\end_inset
902 902
903Eilers 903Eilers
904\begin_inset Quotes grd 904\begin_inset Quotes erd
905\end_inset 905\end_inset
906 906
907 ); 907 );
908\layout LyX-Code 908\layout LyX-Code
909 909
910searchQuery.setHomeZip( 910searchQuery.setHomeZip(
911\begin_inset Quotes gld 911\begin_inset Quotes eld
912\end_inset 912\end_inset
913 913
9143* 9143*
915\begin_inset Quotes grd 915\begin_inset Quotes srd
916\end_inset 916\end_inset
917 917
918 ); 918 );
@@ -959,8 +959,8 @@ The next step is to put this query into the operation which is defined like
959 this: 959 this:
960\layout LyX-Code 960\layout LyX-Code
961 961
962List queryByExample (const T& query, int querySettings, const QDateTime 962List queryByExample (const T& query, int querySettings, const QDateTime&
963 &startperiod=QDateTime()) 963 startperiod=QDateTime())
964\layout Standard 964\layout Standard
965 965
966The first parameter 966The first parameter
@@ -980,7 +980,15 @@ querySettings
980\end_inset 980\end_inset
981 981
982 to configure the search properly. 982 to configure the search properly.
983 This settings are defined by the enum QuerySettings in the class 983 This settings are defined by the enumeration
984\begin_inset Quotes gld
985\end_inset
986
987QuerySettings
988\begin_inset Quotes grd
989\end_inset
990
991 in the class
984\series bold 992\series bold
985OPimBase 993OPimBase
986\series default 994\series default
@@ -1082,7 +1090,7 @@ It should be clear at this stage, that this query is very powerful and -
1082 depending to the querySettings - could be very complicated to implement. 1090 depending to the querySettings - could be very complicated to implement.
1083 Thus, not all backends do support all features defined by querySettings 1091 Thus, not all backends do support all features defined by querySettings
1084\begin_inset Foot 1092\begin_inset Foot
1085collapsed true 1093collapsed false
1086 1094
1087\layout Standard 1095\layout Standard
1088 1096
@@ -1097,10 +1105,10 @@ At this time, just the contact database for XML and VCard is supporting
1097 application) we provide the following operations: 1105 application) we provide the following operations:
1098\layout LyX-Code 1106\layout LyX-Code
1099 1107
1100bool hasQuerySettings( uint querySettings ); 1108bool hasQuerySettings( uint querySettings );
1101\layout LyX-Code 1109\layout LyX-Code
1102 1110
1103uint querySettings(); 1111uint querySettings();
1104\layout Standard 1112\layout Standard
1105 1113
1106The first operation 1114The first operation
@@ -1202,7 +1210,7 @@ List
1202\end_inset 1210\end_inset
1203 1211
1204 as the first parameter. 1212 as the first parameter.
1205 The search operation will just occure on this set of uid's! 1213 The search operation will just occur on this set of uid's!
1206\layout Subsection 1214\layout Subsection
1207 1215
1208Sorting 1216Sorting
@@ -1212,7 +1220,7 @@ To sort a given dataset, you should use the following operation (or one
1212 of the others which behave slightly differently): 1220 of the others which behave slightly differently):
1213\layout LyX-Code 1221\layout LyX-Code
1214 1222
1215List sorted (const List& list, bool ascending, int sortOrder, int sortFilter, 1223List sorted (const List& list, bool ascending, int sortOrder, int sortFilter,
1216 const QArray< UID >& cats); 1224 const QArray< UID >& cats);
1217\layout Standard 1225\layout Standard
1218 1226
@@ -1401,7 +1409,7 @@ Internal Signal Handling: Automatic Propagation of Changes
1401 1409
1402\layout Standard 1410\layout Standard
1403 1411
1404Need to be written and is not implemented completly! 1412Need to be written and is not implemented completely!
1405\layout Chapter 1413\layout Chapter
1406 1414
1407Howto Extend and Write New Backends 1415Howto Extend and Write New Backends