1 Implement detail of floating layout
 
   5 Mainly, we maintain two floating list data for a wxRichTextBuffer.
 
   6 'struct FloatRectMap' is used to represent a floating object's region,
 
   7 and 'class wxFloatCollector' is a container of all 'struct FloatRectMap'.
 
   8 It maintains all the information of the positions of all the floating
 
   9 objects with two list of 'struct FloatRectMap', one for objects floated
 
  10 to left and the other for right.
 
  12 wxRichTextAnchoredObject is introduced to represent a kind of objects
 
  13 that can be floated. wxRichTextImage is made to be a child class of
 
  14 this one. In future, we may introduce some other floating object type
 
  15 like wxRichTextTable. And we also introduce a twin object of this one,
 
  16 it is wxRichTextPlaceHoldingObject. When the object is set to be a
 
  17 floating one, we will place a 'placing holding' object in its origin
 
  18 position, this makes us to record the position of the object correctly
 
  19 even if the containing paragraph change its content.
 
  21 Also, along with wxRichTextAnchoredObject, we also introduce a 
 
  22 wxRichTextAnchoredObjectAttr class, which contains the attributes of
 
  23 floating direction, floating offset and etc. wxRichTextImageAttr is made
 
  24 to be a subclass of this one.
 
  26 Finally, wxRichTextImageDlg is a image control dialog, in which users can
 
  27 set the alignment, floating direction, size, offset of the image, in addition,
 
  28 users can also move the image between paragraph with this dialog.
 
  32 With floating objects, when we layout a paragraph, wxFloatCollector will
 
  33 firstly collect all the floating objects of the paragraphs before this
 
  34 one. And then, layout the floating objects of this paragraph, then layout
 
  35 the normal objects using the available rect info according the floating
 
  38 Generally, the basic paragraph layout algorithm:
 
  39 1. All paragraphs before this one is layout well, so use wxFloatCollector
 
  40    to collect the floating objects state;
 
  41 2. Collect all the 'place holding objects' of the paragraph, layout the
 
  42    floating objects with the space available for it;
 
  43 3. For other objects left, make line break as:
 
  44    GetAvailableWidth with a <y, h> pair, where y is the vertical position
 
  45    of the line and h is the minimum height of the line.
 
  46    After we get the width, do line break and normal layout.
 
  50 If we use floating attributes with list style, it may cause some problems.
 
  51 Something like image/text overlap may happen. Since, list style is applied
 
  52 to the paragraph after its normal layout, in which phrase, floating layout
 
  53 is done, list style will change the position of the paragraph and so may