fphelp.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. {
  2. $Id$
  3. This file is part of the Free Pascal Integrated Development Environment
  4. Copyright (c) 1998 by Berczi Gabor
  5. Help routines for the IDE
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit FPHelp;
  13. interface
  14. uses
  15. Drivers,HelpCtx,
  16. WHelp,WHlpView,WHTML,
  17. {$ifdef EDITORS}
  18. Editors,
  19. {$else}
  20. WEditor,WCEdit,
  21. {$endif}
  22. WViews,WHTMLScn,
  23. FPViews;
  24. type
  25. PIDEStatusLine = ^TIDEStatusLine;
  26. TIDEStatusLine = object(TAdvancedStatusLine)
  27. function Hint(AHelpCtx: Word): String; virtual;
  28. procedure HandleEvent(var Event: TEvent); virtual;
  29. end;
  30. PFPHTMLFileLinkScanner = ^TFPHTMLFileLinkScanner;
  31. TFPHTMLFileLinkScanner = object(THTMLFileLinkScanner)
  32. function CheckURL(const URL: string): boolean; virtual;
  33. function CheckText(const Text: string): boolean; virtual;
  34. procedure ProcessDoc(Doc: PHTMLLinkScanFile); virtual;
  35. end;
  36. procedure Help(FileID, Context: THelpCtx; Modal: boolean);
  37. procedure HelpIndex(Keyword: string);
  38. procedure HelpTopicSearch(Editor: PEditor);
  39. procedure HelpTopic(const S: string);
  40. procedure CloseHelpWindows;
  41. procedure InitHelpSystem;
  42. procedure DoneHelpSystem;
  43. procedure InitHelpFiles;
  44. procedure DoneHelpFiles;
  45. procedure PushStatus(S: string);
  46. procedure SetStatus(S: string);
  47. procedure ClearStatus;
  48. procedure PopStatus;
  49. const
  50. HelpWindow : PFPHelpWindow = nil;
  51. HelpInited : boolean = false;
  52. implementation
  53. uses Objects,Views,App,MsgBox,Commands,
  54. WUtils,WHTMLHlp,
  55. FPString,FPConst,FPVars,FPUtils;
  56. const
  57. MaxStatusLevel = {$ifdef FPC}10{$else}1{$endif};
  58. var StatusStack : array[0..MaxStatusLevel] of string[MaxViewWidth];
  59. const
  60. StatusStackPtr : integer = 0;
  61. procedure TIDEStatusLine.HandleEvent(var Event: TEvent);
  62. begin
  63. case Event.What of
  64. evBroadcast :
  65. case Event.Command of
  66. cmUpdate : Update;
  67. end;
  68. end;
  69. inherited HandleEvent(Event);
  70. end;
  71. function TIDEStatusLine.Hint(AHelpCtx: Word): String;
  72. var S: string;
  73. begin
  74. case AHelpCtx of
  75. hcNoContext : S:='';
  76. hcDragging : S:='';
  77. hcSourceWindow : S:='';
  78. hcHelpWindow : S:='';
  79. hcCalcWindow : S:='';
  80. hcInfoWindow : S:='';
  81. hcClipboardWindow:S:='';
  82. hcBrowserWindow : S:='';
  83. hcMessagesWindow: S:='';
  84. hcASCIITableWindow: S:='';
  85. hcGDBWindow : S:=hint_rawgdbwindow;
  86. hcBreakpointListWindow : S:=hint_allbreakpoints;
  87. hcSystemMenu : S:=hint_systemmenu;
  88. hcUpdate : S:=hint_update;
  89. hcAbout : S:=hint_about;
  90. hcFileMenu : S:=hint_filemenu;
  91. hcNew : S:=hint_filenew;
  92. hcNewFromTemplate:S:=hint_filenewfromtemplate;
  93. hcOpen : S:=hint_fileopen;
  94. hcSave : S:=hint_filesave;
  95. hcSaveAs : S:=hint_filesaveas;
  96. hcSaveAll : S:=hint_filesaveall;
  97. hcChangeDir : S:=hint_changedir;
  98. hcDOSShell : S:=hint_dosshell;
  99. hcQuit : S:=hint_exit;
  100. hcRecentFileBase..hcRecentFileBase+10
  101. : S:=hint_openrecentfile;
  102. hcEditMenu : S:=hint_editmenu;
  103. hcUndo : S:=hint_editundo;
  104. hcRedo : S:=hint_editredo;
  105. hcCut : S:=hint_editcut;
  106. hcCopy : S:=hint_editcopy;
  107. hcPaste : S:=hint_editpaste;
  108. hcCopyWin : S:=hint_editcopywin;
  109. hcPasteWin : S:=hint_editpastewin;
  110. hcClear : S:=hint_editclear;
  111. hcShowClipboard : S:=hint_showclipboard;
  112. hcSearchMenu : S:=hint_searchmenu;
  113. hcFind : S:=hint_searchfind;
  114. hcReplace : S:=hint_searchreplace;
  115. hcSearchAgain : S:=hint_searchagain;
  116. hcGotoLine : S:=hint_gotoline;
  117. hcObjects : S:=hint_objects;
  118. hcModules : S:=hint_modules;
  119. hcGlobals : S:=hint_globals;
  120. hcSymbol : S:=hint_symbol;
  121. hcRunMenu : S:=hint_runmenu;
  122. hcRun : S:=hint_run;
  123. hcParameters : S:=hint_runparameters;
  124. hcResetDebugger : S:=hint_resetprogram;
  125. hcContToCursor : S:=hint_rununtilcursor;
  126. hcUntilReturn : S:=hint_rununtilreturn;
  127. hcUserScreen : S:=hint_userscreen;
  128. hcCompileMenu : S:=hint_compilemenu;
  129. hcCompile : S:=hint_compile;
  130. hcMake : S:=hint_make;
  131. hcBuild : S:=hint_build;
  132. hcTarget : S:=hint_target;
  133. hcPrimaryFile : S:=hint_primaryfile;
  134. hcClearPrimary : S:=hint_clearprimaryfile;
  135. hcInformation : S:=hint_information;
  136. hcCompilerMessages:S:=hint_showmessages;
  137. hcDebugMenu : S:=hint_debugmenu;
  138. hcToggleBreakpoint : S:=hint_togglebreakpoint;
  139. hcNewBreakpoint : S:=hint_createnewbreakpoint;
  140. hcEditBreakpoint : S:=hint_editbreakpoint;
  141. hcDeleteBreakpoint : S:=hint_deletebreakpoint;
  142. hcOpenGDBWindow : S:=hint_opengdbwindow;
  143. hcAddWatch : S:=hint_addwatch;
  144. hcWatches : S:=hint_watches;
  145. hcStack : S:=hint_callstack;
  146. hcBreakpointList : S:=hint_editbreakpoints;
  147. hcToolsMenu : S:=hint_toolsmenu;
  148. hcCalculator : S:=hint_calculator;
  149. hcGrep : S:=hint_grep;
  150. hcMsgGotoSource : S:=hint_gotosource;
  151. hcRegisters : S:=hint_registers;
  152. hcToolsMessages : S:=hint_messageswindow;
  153. hcToolsBase..
  154. hcToolsBase+MaxToolCount
  155. : S:=hint_usertool;
  156. hcASCIITable : S:=hint_asciitable;
  157. hcOptionsMenu : S:=hint_optionsmenu;
  158. hcSwitchesMode : S:=hint_switchesmode;
  159. hcCompiler : S:=hint_compiler;
  160. hcMemorySizes : S:=hint_memorysizes;
  161. hcLinker : S:=hint_linkeroptions;
  162. hcDebugger : S:=hint_debugoptions;
  163. hcDirectories : S:=hint_directories;
  164. hcBrowser : S:=hint_browser;
  165. hcTools : S:=hint_tools;
  166. hcEnvironmentMenu:S:=hint_environmentmenu;
  167. hcPreferences : S:=hint_preferences;
  168. hcEditor : S:=hint_editoroptions;
  169. hcCodeCompleteOptions:S:=hint_codecomplete;
  170. hcCodeTemplateOptions:S:=hint_codetemplates;
  171. hcMouse : S:=hint_mouseoptions;
  172. hcDesktopOptions: S:=hint_desktopoptions;
  173. hcStartup : S:=hint_startup;
  174. hcColors : S:=hint_colors;
  175. hcOpenINI : S:=hint_openini;
  176. hcSaveINI : S:=hint_saveini;
  177. hcSaveAsINI : S:=hint_saveasini;
  178. hcWindowMenu : S:=hint_windowmenu;
  179. hcTile : S:=hint_tile;
  180. hcCascade : S:=hint_cascade;
  181. hcCloseAll : S:=hint_closeall;
  182. hcResize : S:=hint_resize;
  183. hcZoom : S:=hint_zoom;
  184. hcNext : S:=hint_next;
  185. hcPrev : S:=hint_prev;
  186. hcClose : S:=hint_closewindow;
  187. hcWindowList : S:=hint_windowlist;
  188. hcUserScreenWindow:S:=hint_userscreenwindow;
  189. hcHelpMenu : S:=hint_helpmenu;
  190. hcHelpContents : S:=hint_helpcontents;
  191. hcHelpIndex : S:=hint_helpindex;
  192. hcHelpTopicSearch:S:=hint_helptopicsearch;
  193. hcHelpPrevTopic : S:=hint_helpprevtopic;
  194. hcHelpUsingHelp : S:=hint_helphowtouse;
  195. hcHelpFiles : S:=hint_helpfiles;
  196. hcOpenAtCursor : S:=hint_openatcursor;
  197. hcBrowseAtCursor: S:=hint_browseatcursor;
  198. hcEditorOptions : S:=hint_editoroptionscur;
  199. else S:='???';
  200. end;
  201. Hint:=S;
  202. end;
  203. procedure TFPHTMLFileLinkScanner.ProcessDoc(Doc: PHTMLLinkScanFile);
  204. begin
  205. PushStatus(FormatStrStr(msg_indexingfile,Doc^.GetDocumentURL));
  206. inherited ProcessDoc(Doc);
  207. PopStatus;
  208. end;
  209. function TFPHTMLFileLinkScanner.CheckURL(const URL: string): boolean;
  210. var OK: boolean;
  211. const HTTPPrefix = 'http:';
  212. FTPPrefix = 'ftp:';
  213. begin
  214. OK:=inherited CheckURL(URL);
  215. if OK then OK:=DirAndNameOf(URL)<>'';
  216. if OK then OK:=CompareText(copy(ExtOf(URL),1,4),'.HTM')=0;
  217. if OK then OK:=CompareText(copy(URL,1,length(HTTPPrefix)),HTTPPrefix)<>0;
  218. if OK then OK:=CompareText(copy(URL,1,length(FTPPrefix)),FTPPrefix)<>0;
  219. CheckURL:=OK;
  220. end;
  221. function TFPHTMLFileLinkScanner.CheckText(const Text: string): boolean;
  222. var OK: boolean;
  223. S: string;
  224. begin
  225. S:=Trim(Text);
  226. OK:=(S<>'') and (copy(S,1,1)<>'[');
  227. CheckText:=OK;
  228. end;
  229. procedure InitHelpSystem;
  230. procedure AddOAFile(HelpFile: string);
  231. begin
  232. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  233. if HelpFacility^.AddOAHelpFile(HelpFile)=false then
  234. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  235. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  236. end;
  237. procedure AddHTMLFile(TOCEntry,HelpFile: string);
  238. begin
  239. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  240. if HelpFacility^.AddHTMLHelpFile(HelpFile, TOCEntry)=false then
  241. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  242. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  243. end;
  244. procedure AddHTMLIndexFile(HelpFile: string);
  245. begin
  246. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  247. if HelpFacility^.AddHTMLIndexHelpFile(HelpFile)=false then
  248. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  249. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  250. end;
  251. var I,P: sw_integer;
  252. S: string;
  253. TopicTitle: string;
  254. begin
  255. New(HelpFacility, Init);
  256. PushStatus(msg_LoadingHelpFiles);
  257. for I:=0 to HelpFiles^.Count-1 do
  258. begin
  259. S:=HelpFiles^.At(I)^; TopicTitle:='';
  260. P:=Pos('|',S);
  261. if P>0 then
  262. begin TopicTitle:=copy(S,P+1,255); S:=copy(S,1,P-1); end;
  263. if TopicTitle='' then TopicTitle:=S;
  264. if copy(UpcaseStr(ExtOf(S)),1,length(HTMLExt))=UpcaseStr(HTMLExt) then { this recognizes both .htm and .html }
  265. AddHTMLFile(TopicTitle,S) else
  266. if UpcaseStr(ExtOf(S))=UpcaseStr(HTMLIndexExt) then
  267. AddHTMLIndexFile(S) else
  268. AddOAFile(S);
  269. end;
  270. PopStatus;
  271. end;
  272. procedure CheckHelpSystem;
  273. begin
  274. if HelpInited then Exit;
  275. InitHelpSystem;
  276. HelpInited:=true;
  277. end;
  278. procedure DoneHelpSystem;
  279. begin
  280. if assigned(HelpFacility) then
  281. begin
  282. Dispose(HelpFacility, Done);
  283. HelpFacility:=nil;
  284. end;
  285. HelpInited:=false;
  286. end;
  287. procedure HelpCreateWindow;
  288. var R: TRect;
  289. begin
  290. CheckHelpSystem;
  291. if HelpWindow=nil then
  292. begin
  293. Desktop^.GetExtent(R); R.Grow(-15,-3); Dec(R.A.Y);
  294. New(HelpWindow, Init(R, dialog_help, 0, 0, SearchFreeWindowNo));
  295. if HelpWindow<>nil then
  296. begin
  297. HelpWindow^.Hide;
  298. Desktop^.Insert(HelpWindow);
  299. end;
  300. end;
  301. end;
  302. procedure Help(FileID, Context: THelpCtx; Modal: boolean);
  303. begin
  304. if Modal then
  305. begin MessageBox(msg_modalhelpnotimplemented,nil,mfInformation+mfInsertInApp+mfOKButton); Exit; end;
  306. HelpCreateWindow;
  307. with HelpWindow^ do
  308. begin
  309. HelpWindow^.ShowTopic(0,Context);
  310. if GetState(sfVisible)=false then Show;
  311. MakeFirst;
  312. end;
  313. Message(Application,evCommand,cmUpdate,nil);
  314. end;
  315. procedure HelpTopicSearch(Editor: PEditor);
  316. var S: string;
  317. begin
  318. if Editor=nil then S:='' else
  319. S:=GetEditorCurWord(Editor);
  320. HelpTopic(S);
  321. end;
  322. procedure HelpTopic(const S: string);
  323. var FileID: word;
  324. Ctx : THelpCtx;
  325. var Found: boolean;
  326. begin
  327. CheckHelpSystem;
  328. PushStatus(msg_LocatingTopic);
  329. Found:=HelpFacility^.TopicSearch(S,FileID,Ctx);
  330. PopStatus;
  331. if Found then
  332. Help(FileID,Ctx,false)
  333. else
  334. HelpIndex(S);
  335. end;
  336. procedure HelpIndex(Keyword: string);
  337. begin
  338. HelpCreateWindow;
  339. with HelpWindow^ do
  340. begin
  341. PushStatus(msg_BuildingHelpIndex);
  342. HelpWindow^.ShowIndex;
  343. if Keyword<>'' then
  344. HelpWindow^.HelpView^.Lookup(Keyword);
  345. PopStatus;
  346. if GetState(sfVisible)=false then Show;
  347. MakeFirst;
  348. end;
  349. Message(Application,evCommand,cmUpdate,nil);
  350. end;
  351. procedure PushStatus(S: string);
  352. begin
  353. if StatusLine=nil then
  354. Exit;
  355. If StatusStackPtr<=MaxStatusLevel then
  356. StatusStack[StatusStackPtr]:=PAdvancedStatusLine(StatusLine)^.GetStatusText
  357. else
  358. StatusStack[MaxStatusLevel]:=PAdvancedStatusLine(StatusLine)^.GetStatusText;
  359. SetStatus(S);
  360. Inc(StatusStackPtr);
  361. end;
  362. procedure PopStatus;
  363. begin
  364. if StatusLine=nil then
  365. Exit;
  366. Dec(StatusStackPtr);
  367. If StatusStackPtr<=MaxStatusLevel then
  368. SetStatus(StatusStack[StatusStackPtr])
  369. else
  370. SetStatus(StatusStack[MaxStatusLevel]);
  371. end;
  372. procedure SetStatus(S: string);
  373. begin
  374. if StatusLine=nil then
  375. Exit;
  376. PAdvancedStatusLine(StatusLine)^.SetStatusText(S);
  377. end;
  378. procedure ClearStatus;
  379. begin
  380. PAdvancedStatusLine(StatusLine)^.ClearStatusText;
  381. end;
  382. function FPHTMLGetSectionColor(Section: THTMLSection; var Color: byte): boolean;
  383. var OK: boolean;
  384. S: string;
  385. begin
  386. Color:=0;
  387. OK:=(ord(Section) in [1..length(CHTMLSectionAttrs)]);
  388. if OK then
  389. begin
  390. S:=#0;
  391. S:=copy(CHTMLSectionAttrs,ord(Section),1);
  392. if Assigned(Application)=false then Color:=0 else
  393. Color:=Application^.GetColor(ord(S[1]));
  394. if (Color and $0f) = ((Color and $f0) shr 4) then { same color ? }
  395. OK:=false;
  396. end;
  397. FPHTMLGetSectionColor:=OK;
  398. end;
  399. procedure InitHelpFiles;
  400. begin
  401. HTMLGetSectionColor:={$ifdef FPC}@{$endif}FPHTMLGetSectionColor;
  402. New(HelpFiles, Init(10,10));
  403. end;
  404. procedure DoneHelpFiles;
  405. begin
  406. if assigned(HelpFiles) then
  407. Dispose(HelpFiles, Done);
  408. end;
  409. procedure CloseHelpWindows;
  410. procedure CloseIfHelpWindow(P: PView); {$ifndef FPC}far;{$endif}
  411. begin
  412. if P^.HelpCtx=hcHelpWindow then
  413. begin
  414. Message(P,evCommand,cmClose,nil);
  415. Dispose(P, Done); { help windows are only hidden on close so we've
  416. to destroy them manually }
  417. end;
  418. end;
  419. begin
  420. Desktop^.ForEach(@CloseIfHelpWindow);
  421. end;
  422. END.
  423. {
  424. $Log$
  425. Revision 1.33 2000-06-16 08:50:40 pierre
  426. + new bunch of Gabor's changes
  427. Revision 1.32 2000/05/30 07:18:33 pierre
  428. + colors for HTML help by Gabor
  429. Revision 1.31 2000/05/29 10:44:56 pierre
  430. + New bunch of Gabor's changes: see fixes.txt
  431. Revision 1.30 2000/05/02 08:42:27 pierre
  432. * new set of Gabor changes: see fixes.txt
  433. Revision 1.29 2000/04/25 08:42:33 pierre
  434. * New Gabor changes : see fixes.txt
  435. Revision 1.28 2000/03/21 23:31:14 pierre
  436. adapted to wcedit addition by Gabor
  437. Revision 1.27 2000/02/07 11:58:01 pierre
  438. Gabor's code inserted
  439. Revision 1.26 2000/01/08 18:26:20 florian
  440. + added a register window, doesn't work yet
  441. Revision 1.25 2000/01/05 17:25:26 pierre
  442. * typo error corrected
  443. Revision 1.24 2000/01/03 11:38:33 michael
  444. Changes from Gabor
  445. Revision 1.23 1999/09/09 16:31:45 pierre
  446. * some breakpoint related fixes and Help contexts
  447. Revision 1.22 1999/09/09 14:15:27 pierre
  448. + cmCopyWin,cmPasteWin
  449. Revision 1.21 1999/08/16 18:25:17 peter
  450. * Adjusting the selection when the editor didn't contain any line.
  451. * Reserved word recognition redesigned, but this didn't affect the overall
  452. syntax highlight speed remarkably (at least not on my Amd-K6/350).
  453. The syntax scanner loop is a bit slow but the main problem is the
  454. recognition of special symbols. Switching off symbol processing boosts
  455. the performance up to ca. 200%...
  456. * The editor didn't allow copying (for ex to clipboard) of a single character
  457. * 'File|Save as' caused permanently run-time error 3. Not any more now...
  458. * Compiler Messages window (actually the whole desktop) did not act on any
  459. keypress when compilation failed and thus the window remained visible
  460. + Message windows are now closed upon pressing Esc
  461. + At 'Run' the IDE checks whether any sources are modified, and recompiles
  462. only when neccessary
  463. + BlockRead and BlockWrite (Ctrl+K+R/W) implemented in TCodeEditor
  464. + LineSelect (Ctrl+K+L) implemented
  465. * The IDE had problems closing help windows before saving the desktop
  466. Revision 1.20 1999/08/03 20:22:31 peter
  467. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  468. + Desktop saving should work now
  469. - History saved
  470. - Clipboard content saved
  471. - Desktop saved
  472. - Symbol info saved
  473. * syntax-highlight bug fixed, which compared special keywords case sensitive
  474. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  475. * with 'whole words only' set, the editor didn't found occourences of the
  476. searched text, if the text appeared previously in the same line, but didn't
  477. satisfied the 'whole-word' condition
  478. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  479. (ie. the beginning of the selection)
  480. * when started typing in a new line, but not at the start (X=0) of it,
  481. the editor inserted the text one character more to left as it should...
  482. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  483. * Shift shouldn't cause so much trouble in TCodeEditor now...
  484. * Syntax highlight had problems recognizing a special symbol if it was
  485. prefixed by another symbol character in the source text
  486. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  487. Revision 1.19 1999/07/12 13:14:17 pierre
  488. * LineEnd bug corrected, now goes end of text even if selected
  489. + Until Return for debugger
  490. + Code for Quit inside GDB Window
  491. Revision 1.18 1999/07/10 01:24:16 pierre
  492. + First implementation of watches window
  493. Revision 1.17 1999/06/30 23:58:14 pierre
  494. + BreakpointsList Window implemented
  495. with Edit/New/Delete functions
  496. + Individual breakpoint dialog with support for all types
  497. ignorecount and conditions
  498. (commands are not yet implemented, don't know if this wolud be useful)
  499. awatch and rwatch have problems because GDB does not annotate them
  500. I fixed v4.16 for this
  501. Revision 1.16 1999/06/28 19:32:19 peter
  502. * fixes from gabor
  503. Revision 1.15 1999/06/25 00:39:58 pierre
  504. help for cmSymbol,cmAddWatch,cmStack and cmBreakpoint list
  505. Revision 1.14 1999/04/07 21:55:46 peter
  506. + object support for browser
  507. * html help fixes
  508. * more desktop saving things
  509. * NODEBUG directive to exclude debugger
  510. Revision 1.13 1999/03/23 15:11:28 peter
  511. * desktop saving things
  512. * vesa mode
  513. * preferences dialog
  514. Revision 1.12 1999/03/16 12:38:09 peter
  515. * tools macro fixes
  516. + tph writer
  517. + first things for resource files
  518. Revision 1.11 1999/03/01 15:41:53 peter
  519. + Added dummy entries for functions not yet implemented
  520. * MenuBar didn't update itself automatically on command-set changes
  521. * Fixed Debugging/Profiling options dialog
  522. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is set
  523. * efBackSpaceUnindents works correctly
  524. + 'Messages' window implemented
  525. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  526. + Added TP message-filter support (for ex. you can call GREP thru
  527. GREP2MSG and view the result in the messages window - just like in TP)
  528. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  529. so topic search didn't work...
  530. * In FPHELP.PAS there were still context-variables defined as word instead
  531. of THelpCtx
  532. * StdStatusKeys() was missing from the statusdef for help windows
  533. + Topic-title for index-table can be specified when adding a HTML-files
  534. Revision 1.10 1999/02/22 11:51:35 peter
  535. * browser updates from gabor
  536. Revision 1.9 1999/02/19 18:43:45 peter
  537. + open dialog supports mask list
  538. Revision 1.8 1999/02/11 19:07:21 pierre
  539. * GDBWindow redesigned :
  540. normal editor apart from
  541. that any kbEnter will send the line (for begin to cursor)
  542. to GDB command !
  543. GDBWindow opened in Debugger Menu
  544. still buggy :
  545. -echo should not be present if at end of text
  546. -GDBWindow becomes First after each step (I don't know why !)
  547. Revision 1.7 1999/02/08 17:40:01 pierre
  548. + cmContToCursor added
  549. Revision 1.6 1999/02/08 10:37:43 peter
  550. + html helpviewer
  551. Revision 1.5 1999/02/04 12:23:44 pierre
  552. + cmResetDebugger and cmGrep
  553. * Avoid StatusStack overflow
  554. Revision 1.4 1999/01/21 11:54:13 peter
  555. + tools menu
  556. + speedsearch in symbolbrowser
  557. * working run command
  558. Revision 1.3 1999/01/04 11:49:44 peter
  559. * 'Use tab characters' now works correctly
  560. + Syntax highlight now acts on File|Save As...
  561. + Added a new class to syntax highlight: 'hex numbers'.
  562. * There was something very wrong with the palette managment. Now fixed.
  563. + Added output directory (-FE<xxx>) support to 'Directories' dialog...
  564. * Fixed some possible bugs in Running/Compiling, and the compilation/run
  565. process revised
  566. Revision 1.2 1998/12/28 15:47:44 peter
  567. + Added user screen support, display & window
  568. + Implemented Editor,Mouse Options dialog
  569. + Added location of .INI and .CFG file
  570. + Option (INI) file managment implemented (see bottom of Options Menu)
  571. + Switches updated
  572. + Run program
  573. Revision 1.3 1998/12/22 10:39:42 peter
  574. + options are now written/read
  575. + find and replace routines
  576. }