fpmhelp.inc 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. {
  2. $Id$
  3. This file is part of the ffff
  4. Copyright (c) 1998 by Berczi Gabor
  5. Help menu entries
  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. procedure TIDEApp.HelpContents;
  13. var FileID: word;
  14. Ctx : THelpCtx;
  15. var Found: boolean;
  16. begin
  17. CheckHelpSystem;
  18. Found:=HelpFacility^.TopicSearch('Table of contents',FileID,Ctx);
  19. if Found then
  20. Help(FileID,Ctx,false)
  21. else
  22. Help(0,hcContents,false);
  23. end;
  24. procedure TIDEApp.HelpHelpIndex;
  25. begin
  26. HelpIndex('');
  27. end;
  28. procedure TIDEApp.HelpTopicSearch;
  29. begin
  30. end;
  31. procedure TIDEApp.HelpPrevTopic;
  32. begin
  33. if HelpWindow=nil then HelpContents else
  34. with HelpWindow^ do
  35. if GetState(sfVisible) then Message(HelpWindow^.HelpView,evCommand,cmPrevTopic,nil)
  36. else begin HelpWindow^.Show; HelpWindow^.MakeFirst; end;
  37. end;
  38. procedure TIDEApp.HelpUsingHelp;
  39. begin
  40. Help(0,hcUsingHelp,false);
  41. end;
  42. type
  43. PHelpFileListBox = ^THelpFileListBox;
  44. THelpFileListBox = object(TListBox)
  45. function GetText(Item: sw_Integer; MaxLen: sw_Integer): String; virtual;
  46. end;
  47. PHelpFilesDialog = ^THelpFilesDialog;
  48. THelpFilesDialog = object(TCenterDialog)
  49. constructor Init;
  50. procedure HandleEvent(var Event: TEvent); virtual;
  51. destructor Done; virtual;
  52. private
  53. LB: PHelpFileListBox;
  54. C : PUnsortedStringCollection;
  55. end;
  56. function THelpFileListBox.GetText(Item: sw_Integer; MaxLen: sw_Integer): String;
  57. var S: string;
  58. P: integer;
  59. begin
  60. S:=inherited GetText(Item,MaxLen);
  61. P:=Pos('|',S);
  62. if P>0 then S:=copy(S,P+1,255)+' - '+copy(S,1,P-1);
  63. GetText:=copy(S,1,MaxLen);
  64. end;
  65. constructor THelpFilesDialog.Init;
  66. var R,R2: TRect;
  67. SB: PScrollBar;
  68. I: integer;
  69. begin
  70. R.Assign(0,0,round(ScreenWidth*5/8),ScreenHeight-10);
  71. inherited Init(R, dialog_helpfiles);
  72. New(C, Init(20,10));
  73. GetExtent(R); R.Grow(-2,-2); Inc(R.A.Y); R.B.X:=R.B.X-13;
  74. R2.Copy(R); R2.Move(1,0); R2.A.X:=R2.B.X-1;
  75. New(SB, Init(R2)); Insert(SB);
  76. New(LB, Init(R, 1, SB));
  77. for I:=0 to HelpFiles^.Count-1 do
  78. begin
  79. C^.Insert(NewStr(HelpFiles^.At(I)^));
  80. end;
  81. LB^.NewList(C);
  82. Insert(LB);
  83. R2.Copy(R); Dec(R2.A.Y); R2.B.Y:=R2.A.Y+1;
  84. Insert(New(PLabel, Init(R2, label_helpfiles_helpfiles, LB)));
  85. GetExtent(R); R.Grow(-2,-2); Inc(R.A.Y); R.A.X:=R.B.X-13+1; R.B.Y:=R.A.Y+2;
  86. Insert(New(PButton, Init(R, button_OK, cmOK, bfDefault)));
  87. R.Move(0,2);
  88. Insert(New(PButton, Init(R, button_New, cmAddItem, bfNormal)));
  89. R.Move(0,2);
  90. Insert(New(PButton, Init(R, button_Delete, cmDeleteItem, bfNormal)));
  91. R.Move(0,2);
  92. Insert(New(PButton, Init(R, button_Cancel, cmCancel, bfNormal)));
  93. LB^.Select;
  94. end;
  95. procedure THelpFilesDialog.HandleEvent(var Event: TEvent);
  96. var I: integer;
  97. D: PFileDialog;
  98. FileName: string;
  99. Re: word;
  100. S: string;
  101. LS: PFPHTMLFileLinkScanner;
  102. BS: PBufStream;
  103. begin
  104. case Event.What of
  105. evKeyDown :
  106. case Event.KeyCode of
  107. kbIns :
  108. begin
  109. Message(@Self,evCommand,cmAddItem,nil);
  110. ClearEvent(Event);
  111. end;
  112. kbDel :
  113. begin
  114. Message(@Self,evCommand,cmDeleteItem,nil);
  115. ClearEvent(Event);
  116. end;
  117. end;
  118. evCommand :
  119. case Event.Command of
  120. cmAddItem :
  121. begin
  122. S:='';
  123. New(D, Init(HelpFileExts,
  124. dialog_installhelpfile,
  125. label_installhelpfile_filename,
  126. fdOpenButton,hidOpenHelpFile));
  127. Re:=Desktop^.ExecView(D);
  128. if Re<>cmCancel then
  129. begin
  130. D^.GetFileName(FileName);
  131. if UpcaseStr(ExtOf(FileName))=UpcaseStr(HTMLIndexExt) then
  132. begin
  133. S:='HTML Index';
  134. end
  135. else
  136. if UpcaseStr(copy(ExtOf(FileName),1,length(HTMLExt)))=UpcaseStr(HTMLExt) then
  137. begin
  138. Re:=ConfirmBox(msg_createkeywordindexforhelpfile,nil,true);
  139. if Re<>cmCancel then
  140. if Re=cmNo then
  141. Re:=InputBox(dialog_topictitle,label_topictitle_title,S,40)
  142. else
  143. begin
  144. ShowMessage(msg_pleasewaitwhilecreatingindex);
  145. S:='HTML Index';
  146. PushStatus(FormatStrStr(msg_buildingindexfile,FileName));
  147. New(LS, Init(DirOf(FileName)));
  148. LS^.ProcessDocument(FileName,[soSubDocsOnly]);
  149. if LS^.GetDocumentCount=0 then
  150. begin
  151. ErrorBox(FormatStrStr(msg_filedoesnotcontainanylinks,FileName),nil);
  152. Re:=cmCancel;
  153. end
  154. else
  155. begin
  156. FileName:=DirAndNameOf(FileName)+HTMLIndexExt;
  157. if ExistsFile(FileName) then
  158. if ConfirmBox(FormatStrStr(msg_filealreadyexistsoverwrite,FileName),nil,true)<>cmYes then
  159. Re:=cmCancel;
  160. if Re<>cmCancel then
  161. begin
  162. PushStatus(FormatStrStr(msg_storinghtmlindexinfile,FileName));
  163. New(BS, Init(FileName, stCreate, 4096));
  164. if Assigned(BS)=false then
  165. begin
  166. ErrorBox(FormatStrStr(msg_cantcreatefile,FileName),nil);
  167. Re:=cmCancel;
  168. end
  169. else
  170. begin
  171. LS^.StoreDocuments(BS^);
  172. if BS^.Status<>stOK then
  173. begin
  174. ErrorBox(FormatStrInt(msg_errorstoringindexdata,BS^.Status),nil);
  175. Re:=cmCancel;
  176. end;
  177. Dispose(BS, Done);
  178. end;
  179. PopStatus;
  180. end;
  181. end;
  182. Dispose(LS, Done);
  183. PopStatus;
  184. HideMessage;
  185. end;
  186. end;
  187. end;
  188. if Re<>cmCancel then
  189. begin
  190. if S<>'' then FileName:=FileName+'|'+S;
  191. LB^.List^.Insert(NewStr(FileName));
  192. LB^.SetRange(LB^.List^.Count);
  193. ReDraw;
  194. end;
  195. Dispose(D, Done);
  196. ClearEvent(Event);
  197. end;
  198. cmDeleteItem :
  199. if LB^.Range>0 then
  200. begin
  201. LB^.List^.AtFree(LB^.Focused);
  202. LB^.SetRange(LB^.List^.Count);
  203. ReDraw;
  204. ClearEvent(Event);
  205. end;
  206. cmOK :
  207. begin
  208. HelpFiles^.FreeAll;
  209. for I:=0 to LB^.List^.Count-1 do
  210. HelpFiles^.Insert(NewStr(C^.At(I)^));
  211. end;
  212. end;
  213. end;
  214. inherited HandleEvent(Event);
  215. end;
  216. destructor THelpFilesDialog.Done;
  217. begin
  218. if C<>nil then
  219. begin
  220. C^.FreeAll;
  221. Dispose(C, Done);
  222. end;
  223. inherited Done;
  224. end;
  225. procedure TIDEApp.HelpFiles;
  226. var
  227. PHFD : PHelpFilesDialog;
  228. begin
  229. New(PHFD, Init);
  230. if Desktop^.ExecView(PHFD)=cmOK then
  231. begin
  232. DoneHelpSystem;
  233. Message(Application,evBroadcast,cmHelpFilesChanged,nil);
  234. InitHelpSystem;
  235. end;
  236. if assigned(PHFD) then
  237. Dispose(PHFD, Done);
  238. end;
  239. procedure TIDEApp.About;
  240. begin
  241. ExecuteDialog(New(PFPAboutDialog, Init), nil);
  242. end;
  243. {
  244. $Log$
  245. Revision 1.4 2002-09-07 15:40:43 peter
  246. * old logs removed and tabs fixed
  247. Revision 1.3 2002/03/14 17:01:54 pierre
  248. + find Table of contents for FPC docs
  249. }