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