fphelp.pas 23 KB

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