summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--development/pim/pim_howto/pim_howto.lyx252
1 files changed, 163 insertions, 89 deletions
diff --git a/development/pim/pim_howto/pim_howto.lyx b/development/pim/pim_howto/pim_howto.lyx
index 1e43d63..a99b0df 100644
--- a/development/pim/pim_howto/pim_howto.lyx
+++ b/development/pim/pim_howto/pim_howto.lyx
@@ -4,58 +4,27 @@
\begin_preamble
\fancyhead{}
\fancyfoot{}
\fancyhead[LE,RO]{\slshape \leftmark}
\fancyhead[LO,RE]{\slshape \leftmark}
\fancyhead[RE,LO]{\thepage}
%\fancyhead[LO,RE]{}
% \usepackage{ae}
+\usepackage[T1]{fontenc}
\usepackage[bookmarksopen,colorlinks]{hyperref}
% \pdfoutput=1
% \pdfcompresslevel=8
% \pdfinfo{
% /Title ClearSim-RealtTime und Andere
% /Creator (Tex)
% /Author (Stefan Eilers)
% /Subject ()
% /Keywords (Simulation,Real-Time,ClearSim,prototype,efsm)
% }
-\renewcommand\familydefault{\sfdefault}
-
-\usepackage{multicol}
-\newcommand\NrCol{3}
-\renewenvironment{theindex}
- {\columnseprule \z@
- \columnsep 35\p@
- \section*{\indexname}%
- \@mkboth{\MakeUppercase\indexname}%
- {\MakeUppercase\indexname}%
- \begin{multicols}{\NrCol}\thispagestyle{plain}\parindent\z@
- \parskip\z@ \@plus .3\p@\relax
- \let\item\@idxitem}
- {\clearpage %
- \end{multicols}}
-
-\renewenvironment{theindex}
- {\if@twocolumn
- \@restonecolfalse
- \else
- \@restonecoltrue
- \fi
- \columnseprule \z@
- \columnsep 35\p@
- \twocolumn[\refstepcounter{section}%
- \section{\indexname}]%
- \@mkboth{\MakeUppercase\indexname}%
- {\MakeUppercase\indexname}%
- \thispagestyle{plain}\parindent\z@
- \parskip\z@ \@plus .3\p@\relax
- \let\item\@idxitem}
- {\if@restonecol\onecolumn\else\clearpage\fi}
\end_preamble
\language american
\inputencoding default
\fontscheme ae
\graphics default
\float_placement htbp
\paperfontsize default
\spacing single
@@ -77,22 +46,22 @@
\paperpagestyle fancy
\layout Title
How to use the Opie-Pim API without getting tired!
\newline
(Aka: Hitchhikers Guide Through the Opie-Pim API)
\newline
-(Pre V 0.1)
+(V 0.2)
\layout Author
\family sans
-Stefan Eilers
+Stefan Eilers (stefan@eilers-online.net)
\layout Section*
\family sans
Abstract
\layout Standard
The Opie-Pim API provides a powerfull access interface to the PIM (Personal
@@ -109,16 +78,26 @@ While starting to read the automatically generated API-documentation, the
user may be confused by a lot of unnecessary classes and details which
makes the quick start not as easy as possible.
Due to the fact that a user will not need most of the details, this paper
should help to start to become confortable with those details he need to
solve his problems.
\layout Standard
+\series bold
+You will find a more recent version at:
+\begin_inset LatexCommand \url{http://www.sra.uni-hannover.de/~eilers/apihowto/pim_howto.pdf}
+
+\end_inset
+
+
+\layout Standard
+
+
\begin_inset LatexCommand \tableofcontents{}
\end_inset
\layout Chapter
Introduction
@@ -212,34 +191,47 @@ OPimAccessFactory
\begin_inset LatexCommand \url{http://www.sra.uni-hannover.de/~eilers/apidocs/pim2/html/classOpie_1_1OPimAccessFactory.html}
\end_inset
).
This operation is defined like this:
\layout LyX-Code
-T* defaultAccess (typename OPimGlobal::PimType type, const QString &appName)
+T* defaultAccess (
+\newline
+typename OPimGlobal::PimType type,
+\newline
+const QString &appName)
\layout Standard
You just have to add the following lines to your source code to use it (this
example is for accessing the contact database):
\layout LyX-Code
+\layout LyX-Code
+
#include <opie2/opimaccessfactory.h>
\layout LyX-Code
use namespace Opie;
\layout Standard
[...]
\layout LyX-Code
-OPimContactAccess* sourceDB = OPimAccessFactory<OPimContactAccess>::defaultAcces
-s( OPimGlobal::CONTACTLIST, "my-app" );
+OPimContactAccess* sourceDB =
+\newline
+OPimAccessFactory<OPimContactAccess>::defaultAccess(
+\newline
+OPimGlobal::CONTACTLIST,
+\newline
+"my-app" );
+\layout LyX-Code
+
\layout Standard
If everything works as expected, you will receive a pointer to the contact
access-class which has to be used for accessing the database.
Accessing the datebook database works equally
\begin_inset Foot
collapsed false
@@ -247,25 +239,35 @@ collapsed false
The API will be changed in the future: ODateBookAccess will be renamed to
OPimEventAccess.
\end_inset
:
\layout LyX-Code
-ODateBookAccess* sourceDB = OPimAccessFactory<ODatebookAccess>::defaultAccess(
- OPimGlobal::DATEBOOK, "my-app" );
+ODateBookAccess* sourceDB =
+\newline
+OPimAccessFactory<ODatebookAccess>::defaultAccess(
+\newline
+OPimGlobal::DATEBOOK,
+\newline
+"my-app" );
\layout Standard
And the same for todo:
\layout LyX-Code
-OPimTodoAccess* sourceDB = OPimAccessFactory<OPimTodoAccess>::defaultAccess(
- OPimGlobal::TODOLIST, "my-app" );
+OPimTodoAccess* sourceDB =
+\newline
+OPimAccessFactory<OPimTodoAccess>::defaultAccess(
+\newline
+OPimGlobal::TODOLIST,
+\newline
+"my-app" );
\layout Standard
Using
\emph on
\begin_inset Quotes gld
\end_inset
@@ -480,52 +482,135 @@ If you want to work with the existing dataset, you need to get a list of
\end_inset
allRecords()
\begin_inset Quotes grd
\end_inset
which returns a list of all available records as an
\series bold
-OPimRecordList
+OPimRecordList<T>
\series default
(see
\begin_inset LatexCommand \url{http://www.sra.uni-hannover.de/~eilers/apidocs/pim2/html/classOpie_1_1OPimRecordList.html}
\end_inset
).
-
+ This OPimRecordList is a template and should be used with the right class
+ parameter
+\begin_inset Quotes eld
+\end_inset
+
+T
+\begin_inset Quotes erd
+\end_inset
+
+ which is currently one of the following: OPimContact, OPimTodo and OPimEvent.
\layout LyX-Code
-List allRecords();
+OPimRecordList<T> allRecords();
\layout Standard
In fact, this
-\emph on
-List
-\emph default
+\begin_inset Quotes eld
+\end_inset
+
+OPimRecordList<T>
+\begin_inset Quotes erd
+\end_inset
+
just contains a list of uid's to take care of memory space.
- As every record is identified by an unique identification number which
- is called UID (Unique Identification), these numbers just exists once in
- the database which is currently on access! To receive the real record,
- you have to use the operation
+ Every record is identified by an unique identification number which is
+ called UID (Unique Identification).
+ These numbers just exists once in the database which is currently on access!
+ To receive the real record, you have to use the operation
\begin_inset Quotes gld
\end_inset
find()
\begin_inset Quotes grd
\end_inset
with a valid UID as parameter:
\layout LyX-Code
T find (UID uid);
\layout Standard
+The remaining question is, how to get a valid UID out of a list to use the
+
+\begin_inset Quotes eld
+\end_inset
+
+find()
+\begin_inset Quotes erd
+\end_inset
+
+ in a correct manner.
+ This could be done by requesting a special element of the list, using the
+ operator[] or by using iterators.
+ The first one would be like this
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+Please do not forget to use
+\begin_inset Quotes eld
+\end_inset
+
+use namespace Opie;
+\begin_inset Quotes erd
+\end_inset
+
+ to enable the namespace
+\begin_inset Quotes eld
+\end_inset
+
+Opie
+\begin_inset Quotes erd
+\end_inset
+
+!!
+\end_inset
+
+:
+\layout LyX-Code
+
+OPimRecordList<OPimContact> list = allRecords();
+\layout LyX-Code
+
+for ( int i = 0; i < list.count(); i++ ){
+\layout LyX-Code
+
+ cout << "The UID is: " << list[i] << endl;
+\layout LyX-Code
+
+}
+\layout Standard
+
+Using the iterator is as easy as the previous one:
+\layout LyX-Code
+
+OPimRecordList<OPimContact> list = allRecords();
+\layout LyX-Code
+
+OPimRecordList<OPimContact>::iterator it;
+\layout LyX-Code
+
+for ( it = list.begin(); it != list.end(); ++it ){
+\layout LyX-Code
+
+ count << "The UID is: " << (*it) << endl;
+\layout LyX-Code
+
+}
+\layout Standard
+
This is all you need to realize a basic access to the PIM-Databases! The
next chapter will guide you into more details of the PIM-API.
\layout Chapter
How to Access PIM-Data: Detailed View
\layout Standard
As shown in the previous chapter, all we need to access the PIM-Database
@@ -748,31 +833,24 @@ In most cases it is not sufficient to receive just a list of all information
able to sort it.
For this kind of exercise we provide some special operations which provide
searching and sorting in an incremental manner
\begin_inset Foot
collapsed false
\layout Standard
-FIXME: matchRegexp() does take a list of uid's.
+FIXME: matchRegexp() does not take a list of uid's.
Therefore it is currently not possible to use it in an incremental manner!
(se)
\end_inset
.
- Therefore it is possible to research a
-\begin_inset Quotes gld
-\end_inset
-
-List
-\begin_inset Quotes grd
-\end_inset
-
- which was returned by a previous search query and to sort it afterwards.
+ Therefore it is possible to use a list which was returned by a previous
+ search query and to sort it afterwards.
Before we will take a close look into sorting, we will start with searching.
There exist two different ways of searching:
\layout Enumerate
Search a complete database for a special regular expression, using
\begin_inset Quotes gld
\end_inset
@@ -835,28 +913,28 @@ matchRegexp()
\end_inset
\layout Standard
The function is defined like this:
\layout LyX-Code
-List matchRegexp (const QRegExp& r);
+OPimRecordList<T> matchRegexp (const QRegExp& r);
\layout Standard
The
\begin_inset Quotes gld
\end_inset
-List
+OPimRecordList<T>
\begin_inset Quotes grd
\end_inset
- is still a OPimRecordList which contains 0 or more uid's of matching records.
+ is still a list which contains 0 or more uid's of matching records.
As already discussed in section
\begin_inset LatexCommand \ref{sec:Accessing-the-access-object}
\end_inset
you have to use the
\begin_inset Quotes gld
\end_inset
@@ -891,36 +969,20 @@ Eilers
\end_inset
you have to do the following:
\layout LyX-Code
OPimContact searchQuery;
\layout LyX-Code
-searchQuery.setLastName(
-\begin_inset Quotes eld
-\end_inset
-
-Eilers
-\begin_inset Quotes erd
-\end_inset
-
- );
+searchQuery.setLastName( "Eilers" );
\layout LyX-Code
-searchQuery.setHomeZip(
-\begin_inset Quotes eld
-\end_inset
-
-3*
-\begin_inset Quotes srd
-\end_inset
-
- );
+searchQuery.setHomeZip( "3*" );
\layout Standard
We use an usual
\begin_inset Quotes gld
\end_inset
OPimContact
\begin_inset Quotes grd
@@ -954,18 +1016,19 @@ AND
as we would do to find files in a filesystem.
\layout Standard
The next step is to put this query into the operation which is defined like
this:
\layout LyX-Code
-List queryByExample (const T& query, int querySettings, const QDateTime&
- startperiod=QDateTime())
+OPimRecordList<T> queryByExample (const T& query,
+\newline
+int querySettings, const QDateTime& startperiod=QDateTime())
\layout Standard
The first parameter
\begin_inset Quotes gld
\end_inset
query
\begin_inset Quotes grd
@@ -1065,18 +1128,21 @@ endperiod
\layout LyX-Code
use namespace Opie;
\layout LyX-Code
[...]
\layout LyX-Code
-List found_items = queryByExample( searchQuery, OPimBase::WildCards | OpimBase::
-IgnoreCase );
+OPimRecordList<OPimContact> found_items =
+\newline
+sourceDB->queryByExample( searchQuery,
+\newline
+OPimBase::WildCards | OpimBase::IgnoreCase );
\layout Standard
This operation may return a list of entries which can be accessed as above,
using the
\begin_inset Quotes gld
\end_inset
find()
@@ -1212,21 +1278,29 @@ List
as the first parameter.
The search operation will just occur on this set of uid's!
\layout Subsection
Sorting
\layout Standard
To sort a given dataset, you should use the following operation (or one
- of the others which behave slightly differently):
+ of the others which behave slightly differently, see
+\begin_inset LatexCommand \url{http://www.sra.uni-hannover.de/~eilers/apidocs/pim2/html/classOpie_1_1OPimAccessTemplate.html}
+
+\end_inset
+
+):
\layout LyX-Code
-List sorted (const List& list, bool ascending, int sortOrder, int sortFilter,
- const QArray< UID >& cats);
+OPimRecordList<T> sorted (const List& list,
+\newline
+bool ascending, int sortOrder, int sortFilter,
+\newline
+const QArray< UID >& cats);
\layout Standard
This sort operation takes a list of uid's as returned for instance from
a search query.
The parameter
\begin_inset Quotes gld
\end_inset