

1. Object Orientation
=====================
In all documents concerning AqBanking the term "class" refers to modules, 
because AqBanking follows the object-orientated pragma.

Example: Functions concerning AB_TRANSACTION are inside the files
transaction.c, transaction_p.h and transaction.h and start with
AB_Transaction_Something. So AB_TRANSACTION is called a "class" inside
this document.


2. Header Files
===============

2.1 Private Header Files
------------------------
Header files ending in *_p.h are considered private header files, only to be
included by the matching *.c file. These are not installed and MUST NOT be
included by any other source file.


2.2. Library-private Header Files
---------------------------------
Header files ending in *_l.h are considered private to AqBanking.
These headers are also not installed and MUST NOT be included by any source
file outside AqBanking (even not by plugins!).


2.3. Backend Header Files
-------------------------
Header files ending in *_be.h can be included by backends but should NOT be
included by applications. These header files might be shipped with special
development packages dedicated to backend development.


2.4. Public Header Files
------------------------
All other header files are public ones which all get installed and which are
free to be included by applications and plugins.




3. QT 3.x, moc, uic
===================

AqBanking makes use of GCC's visibility features. However, uic and moc of QT3
are not aware of that feature, so they generate code which does not export all
needed symbols. Therefore we added a small tool which adds EXPORT macros to
those generated files.
In order to use that tool correctly you'll have to use the following rules in
the makefiles of AqBanking:

%.moc.cpp: %.h
	$(qt3_moc) -o $<.moc.tmp $< && \
	echo "#ifdef HAVE_CONFIG_H" >$@ && \
	echo "# include <config.h>" >>$@ && \
	echo "#endif" >>$@ && \
	cat $<.moc.tmp >>$@ && \
	rm $<.moc.tmp


%.ui.cpp: %.ui
	$(UIC3) $< -impl $<.h -o $<.tmp && \
	echo "#ifdef HAVE_CONFIG_H" >$@ && \
	echo "# include <config.h>" >>$@ && \
	echo "#endif" >>$@ && \
	cat $<.tmp >>$@ && \
	rm $<.tmp

%.ui.h: %.ui
	$(UIC3) $< -o $<.tmp && \
	echo "#include <qbanking/qbanking.h>" >$@ && \
	$(top_srcdir)/admin/insert_api.sh QBANKING_API < $<.tmp >>$@ && \
	rm $<.tmp

The last needs to be adapted for every frontend, e.g. for "QBanking" you would
need QBANKING_API and the header <qbanking/qbanking.h> as used in
this example. For "KBanking" you would use KBANKING_API and 
<kbanking/kbanking.h>.





