Mattias Gaertner wrote:
On Tue, 17 Jan 2006 17:04:57 +0800
Funky Beast <[EMAIL PROTECTED]> wrote:


Mattias Gaertner wrote:

On 16 Jan 2006 21:36:09 +0100
Darius Blaszijk <[EMAIL PROTECTED]> wrote:



On Mon, 2006-01-16 at 19:59, Mattias Gaertner wrote:


What we need:
1. a hint window to right of the completion box.
2. the search for the fpdoc/xml path
3. the parsing of the fpdoc xml item and showing as formatted text

If someone implements 1 and 3, I will do 2.

The fpdoc/xml path is already known, you set it for LazDoc already, so
perhaps you can use that.


I meant the full path. Example

docs/xml/lcl/controls.xml#TCustomControl.Paint


Every designtime package can register its own help files.
Actually the help generates paths of type TPascalHelpContextList defined in
ideintf/helpintf.pas
For example:
pihcFilename:      '/path/of/your/package/docs'
pihcType:          'TYourComponent'
pihcProcedure:     'YourMethod'
pihcParameterList: ''


I see.

which is converted by the TFPDocHTMLHelpDatabase to the fpdoc html path.
I will extend TFPDocHTMLHelpDatabase to create the fpdoc xml path.

I'll start with 3, 1 & 2 would be meaningless without 3.
I'll create a class to store the properties of the found element.
Below is a prototype, do add in if i missed something.

//***********************************************************************
****** TCompletionItemDesc = class
 sPackage: string;
 sModule: string;
 sShort: string;
 sDescription: string;
 sSeeAlso: string;
 end;


What's package and what's module? Can you add some comments?

I was extracting whatever tags i could find in the xml documents.
sPackage represents the tag e.g. <package name="lcl"> at beginning
of every xml doc.
sModule represents the tag e.g. <module name="StdCtrls"> also at begin
of every xml doc.
If there are any irrelevent tags included, do not hesitate to remove it.
TCompletionItemInfo = class(TComponent)
 private
  //Stores info of currently selected
  FCurrentElement: TCompletionItemDesc;
  //XML FileName (absolute path).
  //If filename different, load slLazDocXML again.
  //If file not found, clear slLazDocXML.
  FXMLFileName: string;

  procedure SetXMLFileName(sFileName: string);
 protected
  //Stores Doc XML
  slLazDocXML: TStrings;
 public
  constructor Create(AOwner: TComponent): override;
  destructor Destroy; override;

  //Locates and store info into CurrentElement returns true if found
  function Fill_CurrentElement(sElementName: string): Boolean;

  //Locate and fill CurrentElement by specifying a path
  //e.g.
  /usr/local/lazarus/docs/xml/lcl/controls.xml#TCustomControl.Paint
  //Function will parse sPath, //load XML file if necessary, file not
  found -- Exit, //locate Element specified at end of path,
  //finally fill up CurrentElement by parsing up to next '</element>'
  tag. //Returns true if successful, clear CurrentElement members if
  false. function Get_Element_from_Path(sPath: string): Boolean;

  property CurrentElement: TCompletionItemDesc read FCurrentElement
                                              write FCurrentElement;
  property XMLFileName: string read FXMLFileName write SetXMLFileName;
 end;
//***********************************************************************
******

So basically the usage is to invoke function Get_Element_from_Path,
if it succeeds, get the values from members of CurrentElement property.

If above prototype is correct, i'll start working on the body.

Should the above be placed in the SourceEditProcs.pas?


No. Start a new unit, say 'CodeHelp' (ide/codehelp.pas).
Roger that.

Any content populated 'controls.xml' files i can test with?


Maybe stdctrls.xml TEdit entries.

Initially i was planning to have a quick hint of the whole view of the
item when the mouse moves over an item in the completion box. This can be
achieved by a MouseMove method which calculates the Y value to know which
item the mouse is pointing at. Then extracting the hint from a 'hint list'
which is maintained by modifying PaintCompletionItem method to return the
formated string to the hint list base on the index value. So the 'hint
list' only needs to maintain a few number of strings=NBLinesInWindow (i.e.
the displayed items).


The PaintCompletionItem does not need the list, so you don't need them
neither. Just retrieve the item on the fly as PaintCompletionItem.
Although I think, when the completion help box is already there, you can
easier use the up/down keys than move your hand to the mouse.


Agreed, that was my initial thoughts when i couldn't identify my projects'
functions which have names that are too long to display entirely in the
completion box (had to do trial and error).

A tiny question, what about identifiers in user's projects which might not
have an xml document to refer to?


Mattias


_________________________________________________________________
    To unsubscribe: mail [EMAIL PROTECTED] with
               "unsubscribe" as the Subject
  archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to