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: ''
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?
> 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).
> 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.
Mattias
_________________________________________________________________
To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives