summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graemeg@gmail.com>2014-08-20 02:11:13 +0100
committerGraeme Geldenhuys <graemeg@gmail.com>2014-08-20 02:11:13 +0100
commitc8acc2c1666015daeb3038c838e5018c0ecd8903 (patch)
tree5ad2edaf0e5fb6be146491226dca4d915333d80d /docs
parentc45010b6370b50f8e6192ddb7dc3d7762c8c29f7 (diff)
parentd0d8573b046e5020d05c86a970d303084de19b7d (diff)
downloadfpGUI-c8acc2c1666015daeb3038c838e5018c0ecd8903.tar.xz
Merge branch 'release-1.2' into master
Diffstat (limited to 'docs')
-rwxr-xr-xdocs/build_html.sh8
-rwxr-xr-xdocs/build_ipf.sh8
-rwxr-xr-xdocs/build_rtf.sh9
-rw-r--r--docs/fpGUIHelpIntegration.lpk2
-rw-r--r--docs/fpGUI_tech_ref.tex243
-rw-r--r--docs/fpc_lang_ref.ipf4
-rw-r--r--docs/fpgui-docs-project.xml15
-rw-r--r--docs/git_howto.txt170
-rw-r--r--docs/layouting_de.html129
-rw-r--r--docs/manifest.xml4
-rw-r--r--docs/xml/corelib/fpg_base.xml99
-rw-r--r--docs/xml/corelib/fpg_extinterpolation.xml2
-rw-r--r--docs/xml/gui/fpg_tree.xml17
13 files changed, 293 insertions, 417 deletions
diff --git a/docs/build_html.sh b/docs/build_html.sh
index fd36b7bf..b43cdd63 100755
--- a/docs/build_html.sh
+++ b/docs/build_html.sh
@@ -15,20 +15,12 @@ $app \
--input='-Fi../src/corelib ../src/corelib/x11/fpg_x11.pas' --descr=xml/corelib/x11/fpg_x11.xml \
--input='-Fi../src/corelib ../src/corelib/gdi/fpg_gdi.pas' --descr=xml/corelib/gdi/fpg_gdi.xml \
--input='-Fi../src/corelib -Fi../src ../src/corelib/fpg_main.pas' --descr=xml/corelib/fpg_main.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_cmdlineparams.pas' --descr=xml/corelib/fpg_cmdlineparams.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_extinterpolation.pas' --descr=xml/corelib/fpg_extinterpolation.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_imgfmt_bmp.pas' --descr=xml/corelib/fpg_imgfmt_bmp.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stdimages.pas' --descr=xml/corelib/fpg_stdimages.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stringutils.pas' --descr=xml/corelib/fpg_stringutils.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_widget.pas' --descr=xml/corelib/fpg_widget.xml \
--input='-Fi../src/corelib -Fi../src/corelib/x11 ../src/corelib/fpg_utils.pas' --descr=xml/corelib/fpg_utils.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_popupwindow.pas' --descr=xml/corelib/fpg_popupwindow.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_wuline.pas' --descr=xml/corelib/fpg_wuline.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_imagelist.pas' --descr=xml/corelib/fpg_imagelist.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_constants.pas' --descr=xml/corelib/fpg_constants.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_pofiles.pas' --descr=xml/corelib/fpg_pofiles.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_translations.pas' --descr=xml/corelib/fpg_translations.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stringhashlist.pas' --descr=xml/corelib/fpg_stringhashlist.xml \
--input='-Fi../src -Fu../src/corelib/x11/ -Fi../src/corelib/x11/ -Fu../src/gui/ -Fu../src/corelib/ ../src/corelib/fpg_command_intf.pas' --descr=xml/corelib/fpg_command_intf.xml \
--input='-Fi../src/gui ../src/gui/fpg_dialogs.pas' --descr=xml/gui/fpg_dialogs.xml \
--input='-Fi../src/gui ../src/gui/fpg_hyperlink.pas' --descr=xml/gui/fpg_hyperlink.xml \
diff --git a/docs/build_ipf.sh b/docs/build_ipf.sh
index 14b0693c..bdb841b1 100755
--- a/docs/build_ipf.sh
+++ b/docs/build_ipf.sh
@@ -14,20 +14,12 @@ $app \
--input='-Fi../src/corelib ../src/corelib/x11/fpg_x11.pas' --descr=xml/corelib/x11/fpg_x11.xml \
--input='-Fi../src/corelib ../src/corelib/gdi/fpg_gdi.pas' --descr=xml/corelib/gdi/fpg_gdi.xml \
--input='-Fi../src/corelib -Fi../src ../src/corelib/fpg_main.pas' --descr=xml/corelib/fpg_main.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_cmdlineparams.pas' --descr=xml/corelib/fpg_cmdlineparams.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_extinterpolation.pas' --descr=xml/corelib/fpg_extinterpolation.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_imgfmt_bmp.pas' --descr=xml/corelib/fpg_imgfmt_bmp.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stdimages.pas' --descr=xml/corelib/fpg_stdimages.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stringutils.pas' --descr=xml/corelib/fpg_stringutils.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_widget.pas' --descr=xml/corelib/fpg_widget.xml \
--input='-Fi../src/corelib -Fi../src/corelib/x11 ../src/corelib/fpg_utils.pas' --descr=xml/corelib/fpg_utils.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_popupwindow.pas' --descr=xml/corelib/fpg_popupwindow.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_wuline.pas' --descr=xml/corelib/fpg_wuline.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_imagelist.pas' --descr=xml/corelib/fpg_imagelist.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_constants.pas' --descr=xml/corelib/fpg_constants.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_pofiles.pas' --descr=xml/corelib/fpg_pofiles.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_translations.pas' --descr=xml/corelib/fpg_translations.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stringhashlist.pas' --descr=xml/corelib/fpg_stringhashlist.xml \
--input='-Fi../src -Fu../src/corelib/x11/ -Fi../src/corelib/x11/ -Fu../src/gui/ -Fu../src/corelib/ ../src/corelib/fpg_command_intf.pas' --descr=xml/corelib/fpg_command_intf.xml \
--input='-Fi../src/gui ../src/gui/fpg_dialogs.pas' --descr=xml/gui/fpg_dialogs.xml \
--input='-Fi../src/gui ../src/gui/fpg_hyperlink.pas' --descr=xml/gui/fpg_hyperlink.xml \
diff --git a/docs/build_rtf.sh b/docs/build_rtf.sh
index eb879f05..33b1825e 100755
--- a/docs/build_rtf.sh
+++ b/docs/build_rtf.sh
@@ -13,20 +13,13 @@ $app \
--input='-Fi../src/corelib ../src/corelib/x11/fpg_x11.pas' --descr=xml/corelib/x11/fpg_x11.xml \
--input='-Fi../src/corelib ../src/corelib/gdi/fpg_gdi.pas' --descr=xml/corelib/gdi/fpg_gdi.xml \
--input='-Fi../src/corelib -Fi../src ../src/corelib/fpg_main.pas' --descr=xml/corelib/fpg_main.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_cmdlineparams.pas' --descr=xml/corelib/fpg_cmdlineparams.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_extinterpolation.pas' --descr=xml/corelib/fpg_extinterpolation.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_imgfmt_bmp.pas' --descr=xml/corelib/fpg_imgfmt_bmp.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stdimages.pas' --descr=xml/corelib/fpg_stdimages.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stringutils.pas' --descr=xml/corelib/fpg_stringutils.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_widget.pas' --descr=xml/corelib/fpg_widget.xml \
--input='-Fi../src/corelib -Fi../src/corelib/x11 ../src/corelib/fpg_utils.pas' --descr=xml/corelib/fpg_utils.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_popupwindow.pas' --descr=xml/corelib/fpg_popupwindow.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_wuline.pas' --descr=xml/corelib/fpg_wuline.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_imagelist.pas' --descr=xml/corelib/fpg_imagelist.xml \
--input='-Fi../src/corelib ../src/corelib/fpg_constants.pas' --descr=xml/corelib/fpg_constants.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_pofiles.pas' --descr=xml/corelib/fpg_pofiles.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_translations.pas' --descr=xml/corelib/fpg_translations.xml \
- --input='-Fi../src/corelib ../src/corelib/fpg_stringhashlist.pas' --descr=xml/corelib/fpg_stringhashlist.xml \
+ --input='-Fi../src -Fu../src/corelib/x11/ -Fi../src/corelib/x11/ -Fu../src/gui/ -Fu../src/corelib/ ../src/corelib/fpg_command_intf.pas' --descr=xml/corelib/fpg_command_intf.xml \
--input='-Fi../src/gui ../src/gui/fpg_dialogs.pas' --descr=xml/gui/fpg_dialogs.xml \
--input='-Fi../src/gui ../src/gui/fpg_hyperlink.pas' --descr=xml/gui/fpg_hyperlink.xml \
--input='-Fi../src/gui ../src/gui/fpg_colormapping.pas' --descr=xml/gui/fpg_colormapping.xml \
diff --git a/docs/fpGUIHelpIntegration.lpk b/docs/fpGUIHelpIntegration.lpk
index 7d02a4e4..81c16ce8 100644
--- a/docs/fpGUIHelpIntegration.lpk
+++ b/docs/fpGUIHelpIntegration.lpk
@@ -24,7 +24,7 @@
"/>
<License Value="LGPL
"/>
- <Version Minor="3"/>
+ <Version Major="1" Minor="2"/>
<Files Count="1">
<Item1>
<Filename Value="pkghelpfpGUI.pas"/>
diff --git a/docs/fpGUI_tech_ref.tex b/docs/fpGUI_tech_ref.tex
deleted file mode 100644
index b62c959b..00000000
--- a/docs/fpGUI_tech_ref.tex
+++ /dev/null
@@ -1,243 +0,0 @@
-\documentclass[a4paper,11pt]{report}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Edited: 2010-02-23
-% NOTE:
-% THIS DOCUMENT IS OUTDATED. IT WAS BASED ON THE fpGUI v0.4 DESIGN.
-%
-% This file remains in the repository for historic purposes only.
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Define the title
-\author{Graeme Geldenhuys}
-\title{fpGUI - A technical reference}
-
-% Some custom settings
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
-
-\begin{document}
-
-% generates the title
-\maketitle
-\newpage
-
-% insert the table of contents
-\tableofcontents
-\newpage
-
-% *******************************************************************
-\chapter{Introduction}
-After developing many cross platform applications with Kylix and Delphi
-I started getting very frustrated with the differences between the look and
-behavior of the applications under Linux and Windows. The code was also
-riddled with IFDEF statements.
-
-Then I stumbled across the Free Pascal and Lazarus projects. I thought this
-is it, the answer to all my cross platform development problems. Unfortunately
-after working with Lazarus for a few months I started finding more and more
-issues with the widget sets, though the IDE was great.
-
-The Lazarus LCL is a wrapper for each platforms native widget set. This
-brought with it the same issues I experienced with Kylix and Delphi. This got
-me thinking about how I could resolve this issue.
-
-Then it hit me - implement the widget set myself using Free Pascal! Painting
-the widgets myself to get a consistent look and implementing a consistent
-behaviour. Instead of reinventing the wheel, I thought I would do some searching
-to see if there is another project I can contribute to or help by giving me
-a head start.
-
-The first version of my widget set was based around a heavily modified version
-of the Light Pascal Toolkit\footnote{http://sourceforge.net/projects/lptk}.
-I then discovered the discontinued fpGUI and fpGFX projects. I tried
-to contact the original author to no avail. The fpGUI code hasn't been
-touched in four years (since early 2002). After studying the code for a
-few weeks, I came to the conclusion that fpGUI is much closer to what I strived
-to accomplish with my modified LPTK. A lot was still missing from fpGUI though.
-
-After thinking long and hard, I decided to start my widget set again, but
-this time based on the work done in fpGUI and fpGFX. I also added to the
-mix some good ideas I saw in Qt 4.1. So far I have completed quite a few things
-missing in fpGUI, but I still need to do a lot to get to the point where I
-can test drive it in a commercial application. I set myself a list of
-things outstanding which should get it to a usable level. I also added a
-lot of documentation as I went as there was no documentation included with
-the original fpGUI and fpGFX projects. Documentation is important
-to attract other developers in using the widget set.
-
-
-
-% *******************************************************************
-\chapter{GUI and Events}
-This chapter is currently a copy and paste of an email I wrote explaining
-how the events work. The difference between the GFX events and the GUI events.
-Soon I will rewrite this chapter and add a lot more detail. Here follows the email
-text for now.
-
-The GFX part gets events from the windowing system, be that X11 or
-GDI. That means that TFCustomWindow gets all the events from the
-windowing system.
-
-Now the GUI part. Every widget is \emph{not} a TFCustomWindow, so every
-widget doesn't have a Handle. The GUI is implemented with only one
-handle per Form (TFForm). All widgets are just painted onto the canvas
-of the TFForm.
-
-If you look at the TFCustomForm you will see it has a instance of
-TFCustomWindow stored in FWnd. That instance gets all the events from
-the windowing system. So to let the widgets also get events we have to
-implement our own event system. The TFCustomForm will then send those
-custom events (TEventObj descendants) by translating the windowing
-events into our custom GUI events.
-
-For example:\\
-Lets say we have a Form with a Button on it. Now we want to handle a
-OnMouseMove event on the Button. The flow of events will go as follows:
-
-\begin{itemize}
- \item TFCustomForm.Wnd will receive the OnMouseMove from the windowing
-system and process it in the WndMouseMoved() method.
-
- \item WndMouseMoved() will translate that windowing system event into
-whatever GUI events are needed and start sending them.
-
- \item Any TWidget descendant handles events in the ProcessEvent() method.
-TWidget being the big one.
-
- \item Because TFCustomForm is a TFContainerWidget descendant, it means it
-can contain other widgets. So it starts distributing the GUI events to
-the children. Distribution is done by the DistributeEvent() method.
-
- \item If TFCustomButton needed to do any special processing with the GUI
-event, it would handle it in its ProcessEvent() method.
-TWidget.ProcessEvent normally does most of the generic work.
-
- \item As an example of a widget that does custom processing, have a
-look at the TFMenuItem.ProcessEvent(). In this case it handles the
-TMouseEnterEventObj and TMouseLeaveEventObj events so it can changes
-it's look when the mouse enters a menu item or leaves a menu item.
-\end{itemize}
-
-So as a summary:\\
-TFCustomForm contains a instance of a GFX window. Translates all the
-GFX events (underlying windowing events) to GUI events (TEventObj
-descendants) and distributes them to the children of the Form.
-
-
-% *******************************************************************
-\chapter{Layout Algorithm}
-
-\section{Initialisation of a window (form)}
-If a window presents itself for the first time, and no standard size was
- given, then it must compute these.
- This is a recursive process, with which the event TCalcSizesEventObj is
- set for all children of the window from top to bottom in the Widget tree
- (beginning with the window).
- TWidget reacts to the receipt of this event as follows (in TWidget.EvCalcSizes):
-
-\begin{itemize}
- \item The event is passed on with TWidget.DistributeEvent to all children.
-
- \item The virtual protected method TWidget.DoCalcSizes is called.
- Again derived Widgets overwrites this method, in order to compute its sizes
- of (minimum, maximum, optimum).
-
- \item The results of DoCalcSizes are if necessary corrected, e.g.
- the maximum size may not be smaller than the minimum size.
-
- \item If the code for the window finished the dispatch of this event, all Widgets
- in the window has valid statements of size.
- Now it can do its own, initials size sets (this is the before computed
- optimum size of the window).
- This is accomplished by TWidget.SetBounds.
-\end{itemize}
-
-... to be continued ...
-
-
-% *******************************************************************
-\chapter{Single vs Multi handle decision}
-
-... to be written ...
-
-What follows below are just some snippets from the newsgroup and mailing
-lists that I want to reorganise into a chapter. These are things that
-were discussed that I don't want to forget.
-
-\section{Notes from the newsgroup}
-One handle per Form. Widgets are just painted onto the Form canvas. This
-will support the most platforms and give us a consistent behavior.
-
-See the /prototype/multihandle directory.
-
-I spoke to Martin Schreiber (MSEgui author) about this as well and the
-better way seems to be to have one handle per Form (window) and do you
-own custom events. Implementing as much as you can yourself, will give
-you a consistent behavior on all platforms and make it more portable.
-
-Martin also tried to implement one handle per widget and came to the
-following conclusion with makes sense. If you want you GUI Framework to
-work the same across multiple platforms, you cannot rely on specific
-behavior on a platform. With one handle per widget you are relying on
-the underling windowing systems event handling and may very well differ
-from another platform (which it normally does). This is what Martin
-experienced, and the only way to get consistent event handling was to do
-if yourself. Clipping regions was another issue Martin mentioned.
-
-All his points made perfect sense to me, so I continued with the fpGUI
-based on one handle per Form and will guarantee that all events, and
-clipping regions will work exactly the same on all platforms. Just
-creating the simple prototype I already experienced different behaviors
-between Windows and Linux.
-
-See the thread titled "Comments from Martin Schreiber" dated 2006-12-07.
-There I posted some of the discussions with Martin.
-
-But then I remembered a very strong argument for one handle per window:
-Some platforms I would like to see fpGUI running on the future simply don't support one window inside another. Like Linux Framebuffer for example. I'm not sure about Symbian OS UIQ 3, but I think too.
-
-
-\section{Email from Martin Schreiber}
-Pro's for to have a window handle for every widget:
-It is possible to use more code from the operating system (clipping,
-focus handling, mouse enter/leave...
-
-Con's:
-The functionality of your widgets depends on the OS. It is not easy to
-achieve the same behavior with different systems.
-You have less control over the behavior of the widgets.
-If there are very much widgets in a application there can be performance
-and resource problems (in win95/98 the maximal count of gdi objects and
-window handles is limited).
-You probably need to implement simplified widgets without handles too
-(TGraphicControl) which brakes orthogonality.
-
-I did three attempts to develop a GUI environment, the first approach
-was based on VCL, the second on CLX and now MSEgui which is done from
-scratch.
-With VCL and CLX I needed very much time to find workarounds to change
-their behavior, some things where simply not possible to realize.
-With about the same expenditure of time I have reached in MSEgui a
-really enjoyable level.
-As an example, the implementation of transparent widgets took me weeks
-in VCL/CLX, semi-transparency was almost unreachable.
-In MSEgui I could implement transparent widgets in 10 minutes because my
-self developed clipping handling was flexible enough.
-
-So my tip is to do as much as possible by your self, at the end you will
-need less time and the quality will be much better.
-But don't underestimate the expenditure of the project.
-For comparison: I invested about 10'000 hours into the development of
-MSEide+MSEgui up to now.
-
-Martin
-
-% *******************************************************************
-\chapter{Database Components}
-
-... to be written ...
-
-
-\end{document}
diff --git a/docs/fpc_lang_ref.ipf b/docs/fpc_lang_ref.ipf
index c6440957..abe951e9 100644
--- a/docs/fpc_lang_ref.ipf
+++ b/docs/fpc_lang_ref.ipf
@@ -5003,7 +5003,7 @@ internally to denote 'nodefault'.
:p.
aoeu
.* START HERE !!!!!!!!!!!!!!!!!!!!!!
-
+:h5.*** START HERE ***
.* ==============================================================
:h2 name=interfaces.Interfaces
@@ -5156,7 +5156,7 @@ used by a program or another unit. The syntax for a unit is as follows:
&ra.─────┬────────────────────────────────────────────┬─ :hp2.end:ehp2. ── . ─────────────────&ra.&la.
├─ initialization part ─┬───────────────────┬┤
│ └ finalization part ┘│
- └─ :hp2.begin:ehp2. ─── statement ─┬───────────────────┘
+ └─ :hp2.begin:ehp2. ─┬─ statement ─┬───────────────────┘
^───── ; ─────┘
&ra.&ra.─── unit header ── :hp2.unit:ehp2. ── unit identifier ── ; ──────────────────────────────&ra.&la.
diff --git a/docs/fpgui-docs-project.xml b/docs/fpgui-docs-project.xml
index c4758228..48395aba 100644
--- a/docs/fpgui-docs-project.xml
+++ b/docs/fpgui-docs-project.xml
@@ -45,6 +45,8 @@
<unit file="../src/gui/fpg_tree.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<!-- undocumented units -->
+ <unit file="../src/corelib/fpg_dbugintf.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
+ <unit file="../src/corelib/fpg_dbugmsg.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_animation.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_checkbox.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_combobox.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
@@ -69,14 +71,18 @@
<unit file="../src/gui/fpg_radiobutton.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_readonly.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_scrollbar.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
+ <unit file="../src/gui/fpg_scrollframe.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_spinedit.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_splitter.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_style.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_style_bitmap.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_style_bluecurve.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
+ <unit file="../src/gui/fpg_style_carbon.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_style_clearlooks.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_style_motif.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
+ <unit file="../src/gui/fpg_style_plastic.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_style_win2k.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
+ <unit file="../src/gui/fpg_style_win8.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_stylemanager.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_tab.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
<unit file="../src/gui/fpg_trackbar.pas" options="-Fi../src -Fu../src/gui/ -Fu../src/corelib/"/>
@@ -133,15 +139,20 @@
and value as on the actual command-line. Boolean options must have
a value of 'true', '1' or 'yes' -->
<option name="format" value="ipf"/>
+ <option name="hide-protected" value="true"/>
+ <option name="duplinkeddoc" value="true"/>
<!--
+ ## Various output formats
<option name="format" value="ipf"/>
<option name="format" value="html"/>
<option name="format" value="rtf"/>
<option name="format" value="chm"/>
--->
+
+ ## Options for IPF output
<option name="hide-protected" value="true"/>
<option name="duplinkeddoc" value="true"/>
-<!--
+
+ ## Options for HTML output
<option name="footer-date" value="yyyy-mm-dd"/>
-->
</options>
diff --git a/docs/git_howto.txt b/docs/git_howto.txt
new file mode 100644
index 00000000..ce532d0e
--- /dev/null
+++ b/docs/git_howto.txt
@@ -0,0 +1,170 @@
+> Hi. I'm on develop branch. I commited change, how can I push it to
+> you?
+
+I'll explain the preferred method, instead of the simpler "send me a
+patch file". The preferred method has many more benefits for you and me,
+and makes integrating other developers changes easier.
+
+This is a bit long winded, but most of it is actually just about
+setting up a new remote repository. This setup process is only done
+once. The actual "how to share a branch with others" is answered near
+the end. So if you know how to setup a forked Github repository, then
+just skip to the end.
+
+
+Using Github
+------------
+If you cloned from SourceForge or from my GitHub repository, then you
+only have "read" access. So you will not be allowed to push changes.
+
+Best is to register with Github (it is free, and very quick). Browse to
+my fpGUI repository on Github (it is a mirror of the SourceForge one).
+
+ http://github.com/graemeg/fpGUI
+
+Click the "fork" button. Github will now fork my repository, and you
+should end up with a fpGUI repository in your github account.
+
+ NOTE: This fork isn't automatically kept in sync with mine - it is
+ your repository - you keep it up to date via 'git push'.
+
+Now back in your Github account, note the read-write URI for the fpGUI
+repository. It will be something like...
+
+ git@github.com:<username>/fpGUI.git
+
+Now on your PC, simply add the remote repository (no need to do a new
+clone):
+
+ git remote add github <read-write url supplied by Github>
+
+Now you can do a 'git fetch github' or 'git pull github'... If your
+repository was up to date, nothing will be updated accept for references
+to the branches in the 'github' remote.
+
+If you do a 'git remote' command, you should now see 'origin' and
+'github' listed.
+
+
+Lets do some coding (in a separate branch)
+------------------------------------------
+Now you can get to the "lets do some programming bit". Create a new
+branch off 'develop', which we call a "feature" branch.
+
+ NOTE: Never do development work in 'master' or the 'develop'
+ branches. This will just cause you unnecessary work, and makes
+ my job more difficult fetching code from your repository.
+
+ $> git checkout -b myfeature develop
+
+Now write some code, an make some commits. All the commits will go
+into the branch named 'myfeature'. To see a graphical overview of your
+repository, type 'gitk --all'
+
+
+Moving local commits out of a wrong branch
+------------------------------------------
+Now if you accidentally made commits in 'master' or 'develop', it is
+not a problem to fix. This is the huge benefit of Git. Commits are
+local at first, so things can be shuffled around before you make them
+public.
+
+The easiest way to fix commits in a wrong branch, is to use the GUI
+tool 'gitk'. Run 'gitk --all'
+
+Find the commit under the 'develop' branch that still references
+'origin/develop', then right-click and select "Create new branch".
+Give at a meaningful name. We'll call it 'feature-1' just for now:
+
+Now close gitk, and switch to that new branch.
+
+ git checkout feature-1
+
+Now back into gitk via 'gitk --all'. The 'feature-1' branch will be in
+bold, indicating it is the current branch. Now we are going to
+cherry-pick commits from another branch. This just means we are going
+to duplicate commits from one branch into another.
+
+Find the commit(s) you made in the wrong branch. From oldest to
+newest, select a commit, right-click and select "Cherry-pick this
+commit". You will now see that commit is duplicated in your
+'feature-1' branch. Keep going until you have cherry-picked all your
+commits you want to move.
+
+Now you should have all your commits is the right branch, but
+'develop' still has them too. No problem. We will simply tell git
+discard those commits, by resetting the 'develop' branch to match
+'origin/develop'.
+
+Select the commit containing the reference 'origin/develop' (this
+should be the same commit you branched your 'feature-1' branch from.
+Right click on that commit, and select "Reset develop branch to here".
+
+Now if you refresh the view, F5, or quit and restart gitk, you will
+see your local commit history has been fixed, and your local commits
+have been moved to the feature branch.
+
+
+How to share my feature branch
+------------------------------
+Finally, we want to share the 'myfeature' branch, so we need to push
+it to the 'github' remote.
+
+ $> git push github myfeature
+
+
+This will push the 'myfeature' branch to your repository on Github.
+Now on the Github website under the 'myfeature' branch, there should
+be a button "send a pull request". Click that, and I'll be notified
+via email to take a look at your code.
+
+To keep your repository in sync with the official fpGUI repository,
+pull from 'origin' (which will be SourceForge, or my fpGUI mirror on
+Github - depending which repository you clone in the beginning). Make
+sure you are in say the 'master' branch. Then do the following:
+
+ $> git push github
+
+
+How to delete a remote branch
+-----------------------------
+Once you are done with a branch you shared - for example if it was
+merged into the official fpGUI code, then you can delete the branch
+from your Github repository.
+
+ $> git push github :myfeature
+
+
+How to delete a local branch
+----------------------------
+Now the 'myfeature' branch is deleted on the remote repository. Now
+you can delete it locally on your PC too. Make sure you our in some
+other branch, not 'myfeature'.
+
+eg: $> git checkout master
+ $> git branch -d myfeature
+
+
+
+For any details on any of the commands used above, Git includes
+excellent help. Just type:
+
+ $> git help <command>
+
+eg:
+
+ $> git help remote
+ $> git help branch
+ $> git help push
+
+
+
+The Github also has some excellent documentation on using Git, and
+using the Github services. Here is one such document.
+
+About Remote Repositories:
+ https://help.github.com/categories/18/articles
+
+
+ --------------------[ end ]---------------------
+
diff --git a/docs/layouting_de.html b/docs/layouting_de.html
deleted file mode 100644
index 0d2f5c0c..00000000
--- a/docs/layouting_de.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<html><head><title>fpGUI Layouting</title>
-
-
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta name="Generator" content="LaTeX2HTML v2K.1beta"></head><body>
-
-<h1><a name="SECTION00010000000000000000">
-Der fpGUI Layouting-Algorithmus</a>
-</h1>
-
-Sebastian Günther, 2001-02-12
-
-<p>
-
-</p><h2><a name="SECTION00011000000000000000">
-Initialisierung eines Fensters (Forms)</a>
-</h2>
-
-<p>
-Wenn sich ein Fenster zum ersten Mal darstellt, und keine Standardgröße vorgegeben
-wurde, dann muß es diese selbst berechnen. Dies ist ein rekursiver Prozeß, bei
-dem allen Kindern des Fensters das Ereignis <tt>TCalcSizesEventObj</tt> von
-oben nach unten im Widget-Baum zugestellt wird (beginnend beim Fenster selbst).
-<tt>TWidget</tt> reagiert auf den Empfang dieses Ereignisses folgendermaßen
-(in <tt>TWidget.EvCalcSizes</tt>):
-
-</p><p>
-
-</p><ol>
-<li>Das Ereignis wird mit <tt>TWidget.DistributeEvent</tt> an alle Kinder weitergeleitet
-</li>
-<li>Die virtuelle geschützte Methode <tt>TWidget.DoCalcSizes</tt> wird aufgerufen.
-Abgeleitete Widgets überschreiben diese Methode, um ihre Größen (Minimum, Maximum,
-Optimum) neu zu berechnen.
-</li>
-<li>Die Ergebnisse von <tt>DoCalcSizes</tt> werden ggf. korrigiert, z.B. darf die
-Maximalgröße nicht kleiner als die Minimalgröße sein.
-</li>
-</ol>
-Wenn der Code für das Fenster den Versand dieses Ereignisses fertiggestellt
-hat, haben alle Widgets im Fenster gültige Größenangaben. Nun kann es seine
-eigene, initiale Größe setzen (dies ist die vorher berechnete Optimum-Größe
-des Fensters). Dies wird per <tt>TWidget.SetBounds</tt> durchgeführt.
-
-<p>
-
-</p><h2><a name="SECTION00012000000000000000">
-Zuweisung einer neuen Position und Größe mit <tt>TWidget.SetBounds</tt></a>
-</h2>
-
-<p>
-<tt>SetBounds</tt> dient zwei Zwecken: Dem Setzen einer neuen Position, und
-dem Setzen einer neuen Größe für ein Widget. Zunächst werden die neuen Daten
-ins Widget übernommen. <tt>SetBounds</tt> überprüft anschließend, ob eine Größenänderung
-vorliegt - wenn ja, wird ein <tt>TApplySizeEventObj</tt>-Ereignis ausgelöst.
-Der Default-Handler in TWidget führt nun zwei einfache Schritte durch:
-
-</p><p>
-
-</p><ol>
-<li>Aufruf der virtuellen geschützten Methode <tt>TWidget.DoApplySize</tt>
-</li>
-<li>Weiterleitung des Ereignisses an alle Kinder per <tt>TWidget.DistributeEvent</tt>
-</li>
-</ol>
-<tt>DoApplySize</tt> dürfte von allen Widgets überschrieben werden, die Kinder
-besitzen - denn dies ist der einzig richtige Ort, um die Kinder zu layouten
-(also ihre Position und Größe festzulegen.)
-
-<p>
-Das <tt>TApplySizeEventObj</tt>-Ereignis führt ein wichtiges Flag mit: <tt>ForcedSize</tt>
-gibt an, ob die nun folgende Größenänderung 'erzwungen' ist oder nicht. Erzwungen
-bedeutet, daß Änderungen an untergeordneten Widgets (s.u.) <i>keinen</i> erneuten
-Layout-Vorgang auslösen sollen. Dies wird beispielsweise in folgenden Fällen
-genutzt:
-
-</p><p>
-
-</p><ul>
-<li>Der Anwender hat ein Fenster manuell auf eine bestimmte Größe gebracht
-</li>
-<li>Eine ScrollBox löscht üblicherweise dieses Flag für ihre Kinder auf jeden Fall,
-da der Inhalt der ScrollBox meist unabhängig von dem 'Drumherum' ist.
-</li>
-</ul>
-Der aktuelle 'Gezwungenheits-Zustand' wird über das Flag <tt>wsSizeIsForced</tt>
-in <tt>TWidget.WidgetState</tt> angezeigt.
-
-<p>
-Forms behandeln dieses Ereignis auf etwas andere Art und Weise: Der Wunsch nach
-einer Größenänderung wird an das unterliegende fpGFX-Fenster weitergeleitet;
-dieses liefert irgendwann die Nachricht, daß nun die neue Größe aktiv ist. Als
-Reaktion ruft es nun <tt>TWidget.SetBounds</tt> <i>für sich selbst</i> auf -
-also die geerbte Methode. Diese sorgt dann, wie bei anderen Widgets auch, für
-ein korrektes Layouting.
-
-</p><p>
-
-</p><h2><a name="SECTION00013000000000000000">
-Änderungen eines Widgets</a>
-</h2>
-
-<p>
-Wenn sich bestimmte Eigenschaften eines Widgets ändern, kann sich dadurch auch
-dessen Größe ändern. Bei Verdacht auf Größenänderung sollten Widgets intern
-immer die Methode <tt>TWidget.Update</tt> aufrufen. Ist die Größe des aktuellen
-Widgets erzwungen, so bricht diese Methode sofort ab. Ansonsten wird zunächst
-eine neue Berechnung der Größen per <tt>TCalcSizesEventObj</tt>-Ereignis veranlaßt.
-Sollten diese nun von den alten Größen abweichen, so wird das Ereignis <tt>TUpdateEventObj</tt>
-ausgelöst. Dieses wird <tt>nicht</tt> an Kinder weitergeleitet, stattdessen
-ruft der Default-Handler in <tt>TWidget</tt> die <tt>Update</tt>-Methode des
-Eltern-Widgets auf. Der Handler für Forms reagiert auf dieses Ereignis allerdings
-mit einer Anpassung der Fenstergröße mit Hilfe der <tt>SetBounds</tt>-Methode.
-
-</p><p>
-
-</p><h2><a name="SECTION00014000000000000000">
-Widget ändert seine Sichtbarkeit</a>
-</h2>
-
-<p>
-Wenn ein normales Widget sichtbar oder unsichtbar wird, und diese Änderung vom
-Widget selbst (und nicht seinem Eltern-Widget) ausgelöst wurde, dann wird für
-das Eltern-Widget die <tt>TWidget.Update</tt>-Methode aufgerufen. Dieses prüft
-nun den Einfluß dieser Änderung auf das Layout, und löst ggf. ein Relayouting
-aus.
-
-
-</p></body></html> \ No newline at end of file
diff --git a/docs/manifest.xml b/docs/manifest.xml
index d89f8ec5..addb40c3 100644
--- a/docs/manifest.xml
+++ b/docs/manifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0"?>
<packages>
<package name="fpgui">
- <version major="0" minor="6" micro="3" build="0"/>
- <filename>fpgui-0.6.3-0.zip</filename>
+ <version major="1" minor="2" micro="0" build="0"/>
+ <filename>fpgui-1.2.0-0.zip</filename>
<author>Graeme Geldenhuys</author>
<license>Modified LGPL</license>
<email>graemeg@gmail.com</email>
diff --git a/docs/xml/corelib/fpg_base.xml b/docs/xml/corelib/fpg_base.xml
index 05a1f72f..f052e2f0 100644
--- a/docs/xml/corelib/fpg_base.xml
+++ b/docs/xml/corelib/fpg_base.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<fpdoc-descriptions>
<package name="fpGUI">
@@ -52,7 +52,7 @@ etc.).
<!-- record type Visibility: default -->
<element name="TRGBTriple">
<short>A record structure holding the RGBA values of a color</short>
- <descr><printshort id="TRGBTriple"/>. This is now marked as "deprecated". Please use <link id="fpg_base.TFPColor">TFPColor</link> instead.</descr>
+ <descr><printshort id="TRGBTriple"/>.</descr>
<seealso/>
</element>
<!-- variable Visibility: default -->
@@ -79,8 +79,8 @@ means no titlebar or window borders are going to be created.</short>
</element>
<!-- enumeration value Visibility: default -->
<element name="TWindowType.wtModalForm">
- <short>This windows type is similar to <link id="fpg_base.TWindowType.wtWindow">wtWindow</link>, but grabs focus.</short>
- <descr>This windows is the same as <link id="fpg_base.TWindowType.wtWindow">wtWindow</link>, but grabs the input focus until it has closed. This window normally doesn't appear in the taskbar.</descr>
+ <short>This windows type is similar to wtWindow, but grabs focus.</short>
+ <descr>This windows is the same as <link id="#fpgui.fpg_base.TWindowType.wtWindow">wtWindow</link>, but grabs the input focus until it has closed. This window normally doesn't appear in the taskbar.</descr>
</element>
<!-- enumeration value Visibility: default -->
<element name="TWindowType.wtPopup">
@@ -717,18 +717,18 @@ help.</remark></descr>
it brings a window to the front - above all other windows of the application. Note that
this only changes the z-order, it doesn't actually change window focus.</descr>
<seealso>
-<link id="fpg_base.TfpgWindowBase.ActivateWindow"></link>
+<link id="fpg_base.TfpgWindowBase.ActivateWindow"/>
</seealso>
</element>
<element name="TfpgWindowBase.ActivateWindow">
-<short>This makse the target window the active window</short>
+<short>This makes the target window the active window</short>
<descr>This doesn't have much meaning at the widget level, but at the TfpgForm level,
it makes the target window the active window. Note that depending on the operating system
and Window Manager, the active window could still be obscured by other windows. Under Windows,
it seems that the active window is always brought to the front too.</descr>
<seealso>
-<link id="#fpgui.fpg_base.TfpgWindowBase.BringToFront"></link>
+<link id="#fpgui.fpg_base.TfpgWindowBase.BringToFront"/>
</seealso>
</element>
@@ -831,6 +831,10 @@ consecutive lines being drawn without overlapping pixels.</descr>
<element name="TfpgCanvasBase.StretchDraw">
<short>Allows you to draw a bitmap, stretched or shrunken from its original size</short>
+<descr><printshort id="#fpgui.fpg_base.TfpgCanvasBase.StretchDraw"/>. Default
+interpolation is <link id="#fpgui.fpg_base.TfpgMitchelInterpolation">TfpgMitchelInterpolation</link>,
+but others (found in <link id="#fpgui.fpg_extinterpolation">fpg_extinterpolation.pas</link>) can
+be used too, by using the <link id="#fpgui.fpg_base.TfpgCanvasBase.InterpolationFilter">InterpolationFilter</link> property of the Canvas.</descr>
</element>
<!-- function Visibility: default -->
@@ -931,6 +935,7 @@ Right. And the Top is always smaller than the Bottom.
<descr>This does not do any drawing, in only clips the line coordinates. This method is used internally by <link id="TfpgCanvasBase.DrawLineClipped"/>.</descr>
</element>
+
<element name="TfpgCanvasBase.GradientFill">
<short>Paints a rectangle with a gradient</short>
<descr><printshort id="#fpgui.fpg_base.TfpgCanvasBase.GradientFill"/>. If the gradient direction is
@@ -939,6 +944,71 @@ set to gdVertical, then it paints from top to bottom.</descr>
</element>
+<element name="TfpgCanvasBase.DrawArc">
+<short>Draws an outline arc shape</short>
+<descr><p><printshort id="#fpgui.fpg_base.TfpgCanvasBase.DrawArc"/>. It uses the TfpgCanvas.Color
+value to draw the arc.</p>
+<dl>
+<dt>x</dt>
+<dd>The left x co-ordinate of the arc drawing position</dd>
+<dt>y</dt>
+<dd>The top y co-ordinate of the arc drawing position</dd>
+<dt>w</dt>
+<dd>The width of the whole arc</dd>
+<dt>h</dt>
+<dd>The height of the whole arc</dd>
+<dt>a1</dt>
+<dd>This is the starting point of the arc. A value of 0 is the 3 o'clock
+position. A value of 270 is the 6 o'clock position. Positive values move
+counter-clockwise, and negative values move clockwise.</dd>
+<dt>a2</dt>
+<dd>This parameter is the length of the arc in degrees. A positive value
+goes counter-clockwise, and a negative values goes clockwise.</dd>
+</dl>
+</descr>
+<seealso>
+ <link id="#fpgui.fpg_base.TfpgCanvasBase.FillArc">TfpgCanvasBase.FillArc</link>
+</seealso>
+<example file="examples/fpg_base.fpgcanvasbase.drawarc.pas"/>
+</element>
+
+
+<element name="TfpgCanvasBase.FillArc.a1">
+<descr>This is the starting point of the arc. A value of 0 is the 3 o'clock
+position. A value of 270 is the 6 o'clock position. Positive values move
+counter-clockwise, and negative values move clockwise.</descr>
+</element>
+
+
+<element name="TfpgCanvasBase.FillArc">
+<short>Draws a filled arc shape</short>
+<descr><p><printshort id="#fpgui.fpg_base.TfpgCanvasBase.FillArc"/>. It uses the TfpgCanvas.Color
+value to draw and fill the arc.</p>
+<dl>
+<dt>x</dt>
+<dd>The left x co-ordinate of the arc drawing position</dd>
+<dt>y</dt>
+<dd>The top y co-ordinate of the arc drawing position</dd>
+<dt>w</dt>
+<dd>The width of the whole arc</dd>
+<dt>h</dt>
+<dd>The height of the whole arc</dd>
+<dt>a1</dt>
+<dd>This is the starting point of the arc. A value of 0 is the 3 o'clock
+position. A value of 270 is the 6 o'clock position. Positive values move
+counter-clockwise, and negative values move clockwise.</dd>
+<dt>a2</dt>
+<dd>This parameter is the length of the arc in degrees. A positive value
+goes counter-clockwise, and a negative values goes clockwise.</dd>
+</dl>
+</descr>
+<seealso>
+ <link id="#fpgui.fpg_base.TfpgCanvasBase.DrawArc">TfpgCanvasBase.DrawArc</link>
+</seealso>
+<example file="examples/fpg_base.fpgcanvasbase.fillarc.pas"/>
+</element>
+
+
<element name="TFileEntry">
<short>A simple data object representing a file</short>
<descr><printshort id="TFileEntry"/>. Some properties are OS dependant.</descr>
@@ -971,8 +1041,7 @@ set to gdVertical, then it paints from top to bottom.</descr>
<element name="TFPColor">
<short>A record structure holding the RGBA values of a color.</short>
<descr>This is the same declaration as the one found in FPImage (included with the
-Free Pascal Compiler). In future when FPImage is integrated with fpGUI, this declaration
-will be removed.</descr>
+Free Pascal Compiler). Except the fpGUI version uses Byte values and not Word values. This is now marked as "deprecated". Please use <link id="fpg_base.TRGBTripple">TRGBTripple</link> instead.</descr>
</element>
<element name="TfpgPoint">
@@ -1038,18 +1107,22 @@ for more information.</p></descr>
</element>
<element name="TfpgApplicationBase">
-<short>aoeu</short>
-<descr></descr>
+<short>Base class for the fpgApplication variable</short>
+<descr>This is the base class of TfpgApplication. All fpGUI-based applications
+will contain a instance of TfpgApplication. It encapsulates the application as
+a whole, and also supplies many useful functions and events.</descr>
</element>
<element name="TfpgApplicationBase.HelpFile">
<short>Specify a help file for the application</short>
-<descr>bla bla bla</descr>
+<descr>This property is used to assign the help file (normally an INF file) which
+contains the help for the application.</descr>
</element>
<element name="TfpgApplicationBase.InvokeHelp">
<short>Run the help viewer</short>
-<descr>bla bla bla</descr>
+<descr>This method will invoke the defined help viewer, passing it the HelpContext
+or HelpKeyword as parameter. The default help viewer is fpGUI's DocView.</descr>
</element>
diff --git a/docs/xml/corelib/fpg_extinterpolation.xml b/docs/xml/corelib/fpg_extinterpolation.xml
index af129a1f..81d66e83 100644
--- a/docs/xml/corelib/fpg_extinterpolation.xml
+++ b/docs/xml/corelib/fpg_extinterpolation.xml
@@ -4,7 +4,7 @@
<module name="fpg_extinterpolation">
<short>Extra interpolation filter declarations.</short>
<descr>
- <p>Some more interpolation filters for <link id="fpg_base.TfpgCanvasBase.StretchDraw">TfpgCanvasBase.StretchDraw</link>:<br/>
+ <p>This unit defines more interpolation filters for <link id="fpg_base.TfpgCanvasBase.StretchDraw">TfpgCanvasBase.StretchDraw</link>:<br/>
Bessel, Gaussian and Sinc are infinite impulse response (IIR),
the others are finite impulse response (FIR). The implementation
of Bessel and Sinc are windowed with Blackman filter.</p>
diff --git a/docs/xml/gui/fpg_tree.xml b/docs/xml/gui/fpg_tree.xml
index 6a69fd64..da1c631f 100644
--- a/docs/xml/gui/fpg_tree.xml
+++ b/docs/xml/gui/fpg_tree.xml
@@ -10,6 +10,20 @@ You can include icons with items' text labels and display different icons to
indicate whether a node is expanded or collapsed.</p>
</descr>
+<element name="TfpgTreeNode">
+<short>TfpgTreeNdoe describes an individual node in a tree view widget.</short>
+<descr>Each node in a tree view control consists of a label and an optional
+bitmapped image. Each item can be the parent of a list of subitems. By clicking
+an item, the user can expand or collapse the associated list of subitems.</descr>
+<seealso>
+ <link id="fpgui.fpg_tree.TfpgTreeView">TfpgTreeView</link>
+</seealso>
+</element>
+
+<element name="TfpgTreeNode.TreeView">
+<short>Specifies the tree view widget that displays the node.</short>
+<descr>Use TreeView to determine the tree view associated with the tree node.</descr>
+</element>
<element name="TfpgTreeView">
<short>Represents a window that displays a hierachy list of items</short>
@@ -21,6 +35,9 @@ in a tree view control consists of a label and a number of optional bitmapped im
Each node can have a list of subnodes associated with it. By clicking on a node,
the user can expand or collapse the associated list of subnodes.</p>
<remark>There is basic column support, but this is still very experimental.</remark></descr>
+<seealso>
+ <link id="fpgui.fpg_tree.TfpgTreeNode">TfpgTreeNode</link>
+</seealso>
</element>
<element name="TfpgTreeView.FullCollapse">