FormConfig.pas 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. {Unidad con formulario de configuración para manejar las propiedades de
  2. una aplicación. Está pensado para usarse con frames de la clase Tframe,
  3. definida en la unidad "PropertyFrame".
  4. }
  5. unit FormConfig;
  6. {$mode objfpc}{$H+}
  7. interface
  8. uses
  9. SysUtils, Classes, Forms, Graphics, SynEdit, Buttons, ComCtrls, ExtCtrls,
  10. StdCtrls, EditBtn, MisUtils, FrameCfgSynEdit, Globales, MiConfigXML;
  11. type
  12. TEvCambiaProp = procedure of object; //evento para indicar que hay cambio
  13. { TConfig }
  14. TConfig = class(TForm)
  15. bitAceptar: TBitBtn;
  16. bitAplicar: TBitBtn;
  17. bitCancel: TBitBtn;
  18. chkListDet: TCheckBox;
  19. chkMarLin: TCheckBox;
  20. chkMosOcul: TCheckBox;
  21. chkMosRut: TCheckBox;
  22. chkOpenLast: TCheckBox;
  23. chkRefDesp: TCheckBox;
  24. DirectoryEdit1: TDirectoryEdit;
  25. DirectoryEdit2: TDirectoryEdit;
  26. DirectoryEdit3: TDirectoryEdit;
  27. edTpoMax: TEdit;
  28. edTpoMax1: TEdit;
  29. Label1: TLabel;
  30. Label2: TLabel;
  31. lblRutLeng: TLabel;
  32. lblRutMac: TLabel;
  33. lblRutScript: TLabel;
  34. PageControl1: TPageControl;
  35. Panel1: TPanel;
  36. TabGeneral: TTabSheet;
  37. TabFilePath: TTabSheet;
  38. TabMacSett: TTabSheet;
  39. TabMacEdit: TTabSheet;
  40. TabRemEdit: TTabSheet;
  41. TabRemExpl: TTabSheet;
  42. TreeView1: TTreeView;
  43. procedure bitAceptarClick(Sender: TObject);
  44. procedure bitAplicarClick(Sender: TObject);
  45. procedure bitCancelClick(Sender: TObject);
  46. procedure FormCreate(Sender: TObject);
  47. procedure FormDestroy(Sender: TObject);
  48. procedure FormShow(Sender: TObject);
  49. procedure TreeView1Click(Sender: TObject);
  50. private
  51. procedure MostEnVentana;
  52. { private declarations }
  53. public
  54. //msjError: string;
  55. edMacr : TSynEdit; //Referencia al editor panel de comando
  56. edRemo : TSynEdit; //Referencia al editor remoto
  57. //Frames de configuración
  58. fcEdMacr : TfraCfgSynEdit; //Editor de macros
  59. fcEdRemo : TfraCfgSynEdit; //Editor remoto
  60. //Evento
  61. OnPropertiesChanged: procedure of object; //Evento de cambio de propiedades
  62. public //Propiedades generales
  63. VerPanCom : boolean; //Panel de comandos
  64. VerBHerPcom : boolean; //Barra de herramientas
  65. VerBHerTerm : boolean; //Barra de herramientas
  66. VerBarEst : boolean; //Barra de estado
  67. TipAlineam : integer; //Tipo de alineamiento de pantalla
  68. RecentFiles : TStringList; //Lista de archivos recientes
  69. public //Propiedades de rutas de archivos
  70. UltScript: string; //Último script editado
  71. AbrirUltScr: boolean;
  72. Scripts : string;
  73. Macros : string;
  74. Lenguajes: string;
  75. public //Configruaciones de macros
  76. TpoMax : integer;
  77. marLin : boolean;
  78. public //Configuraciones del explorador remoto
  79. ListDet: boolean;
  80. MosRut : boolean; //muestra la ruta actual
  81. MosOcul: boolean;
  82. RefDesp: boolean;
  83. TpoMax2: integer;
  84. public
  85. procedure Iniciar();
  86. procedure ReadFromFile(iniFile: string='');
  87. procedure SaveToFile(iniFile: string='');
  88. procedure Configurar(Id: string='');
  89. end;
  90. var
  91. Config: TConfig;
  92. implementation
  93. {$R *.lfm}
  94. { TConfig }
  95. procedure TConfig.FormCreate(Sender: TObject);
  96. begin
  97. RecentFiles := TStringList.Create;
  98. //Crea frames de configuración de SynEdit
  99. fcEdMacr:= TfraCfgSynEdit.Create(Self);
  100. fcEdMacr.Name := 'emac'; //Para que no de error de nombre
  101. fcEdMacr.parent := TabMacEdit;
  102. fcEdRemo:= TfraCfgSynEdit.Create(Self);
  103. fcEdRemo.Name := 'erem'; //Para que no de error de nombre
  104. fcEdRemo.parent := TabRemEdit;
  105. //Prepara página y Selecciona primera opción
  106. PageControl1.ShowTabs := false;
  107. TreeView1.Items[0].Selected:=true;
  108. TreeView1Click(self);
  109. cfgFile.VerifyFile;
  110. end;
  111. procedure TConfig.FormDestroy(Sender: TObject);
  112. begin
  113. RecentFiles.Destroy
  114. end;
  115. procedure TConfig.FormShow(Sender: TObject);
  116. begin
  117. MostEnVentana; //carga las propiedades en el frame
  118. end;
  119. procedure TConfig.Iniciar();
  120. //Inicia el formulario de configuración. Debe llamarse antes de usar el formulario y
  121. //después de haber cargado todos los frames.
  122. begin
  123. //Configuraciones generales
  124. cfgFile.Asoc_Bol('VerPanCom' , @VerPanCom , true);
  125. cfgFile.Asoc_Bol('VerBHerPcom', @VerBHerPcom, true);
  126. cfgFile.Asoc_Bol('VerBHerTerm', @VerBHerTerm, true);
  127. cfgFile.Asoc_Bol('VerBarEst' , @VerBarEst , true);
  128. cfgFile.Asoc_Int('TipAlineam' , @TipAlineam , 0);
  129. cfgFile.Asoc_StrList('Recents_ses', @RecentFiles);
  130. //Propiedades de rutas de archivos
  131. cfgFile.Asoc_Str('UltScript' , @UltScript ,'');
  132. cfgFile.Asoc_Bol('AbrirUltScr', @AbrirUltScr, chkOpenLast , true);
  133. cfgFile.Asoc_Str('Scripts' , @Scripts , DirectoryEdit1, patScripts);
  134. cfgFile.Asoc_Str('Macros' , @Macros , DirectoryEdit2, patMacros);
  135. cfgFile.Asoc_Str('Lenguajes' , @Lenguajes , DirectoryEdit3, patSyntax);
  136. //Configuraciones de macros
  137. cfgFile.Asoc_Int('TpoMax' , @TpoMax, edTpoMax , 10, 1, 180);
  138. cfgFile.Asoc_Bol('MarLin' , @marLin, chkMarLin, false);
  139. //Configuración de editor de macros
  140. fcEdMacr.Iniciar('edMacros', cfgFile, $E8FFE8);
  141. //Configuración de editor remoto
  142. fcEdRemo.Iniciar('edRemoto', cfgFile);
  143. //Configuraciones del explorador remoto
  144. cfgFile.Asoc_Int('TpoMax2' , @TpoMax2, edTpoMax1 , 10, 1, 180);
  145. cfgFile.Asoc_Bol('MosRut' , @MosRut , chkMosRut , true);
  146. cfgFile.Asoc_Bol('ListDet' , @ListDet, chkListDet, true);
  147. cfgFile.Asoc_Bol('MosOcul' , @MosOcul, chkMosOcul, false);
  148. cfgFile.Asoc_Bol('RefDesp' , @RefDesp, chkRefDesp, true);
  149. //lee parámetros del archivo de configuración.
  150. ReadFromFile;
  151. end;
  152. procedure TConfig.TreeView1Click(Sender: TObject);
  153. begin
  154. if TreeView1.Selected = nil then exit;
  155. //hay ítem seleccionado
  156. case IdFromTTreeNode(TreeView1.Selected) of
  157. '1',
  158. // '1.1' : ;
  159. '1.2' : TabFilePath.Show;
  160. '2',
  161. '2.1' : TabMacSett.Show;
  162. '2.2' : TabMacEdit.Show;
  163. '3',
  164. '3.1' : TabRemEdit.Show;
  165. '4' : TabRemExpl.Show;
  166. end;
  167. end;
  168. procedure TConfig.bitAceptarClick(Sender: TObject);
  169. begin
  170. bitAplicarClick(Self);
  171. if cfgFile.MsjErr<>'' then exit; //hubo error
  172. self.Close; //porque es modal
  173. end;
  174. procedure TConfig.bitAplicarClick(Sender: TObject);
  175. begin
  176. if not cfgFile.WindowToProperties then begin
  177. MsgErr(cfgFile.MsjErr);
  178. end;
  179. //Valida las rutas leidas
  180. if not DirectoryExists(Scripts) then begin
  181. MsgExc('Folder not found: %s',[Scripts]);
  182. Scripts := patScripts;
  183. end;
  184. if not DirectoryExists(Macros) then begin
  185. MsgExc('Folder not found: %s', [Macros]);
  186. Macros := patMacros;
  187. end;
  188. if not DirectoryExists(Lenguajes) then begin
  189. MsgExc('Folder not found: %s', [Lenguajes]);
  190. Lenguajes := patSyntax;
  191. end;
  192. if OnPropertiesChanged<>nil then OnPropertiesChanged();
  193. SaveToFile; //Guarda propiedades en disco
  194. end;
  195. procedure TConfig.bitCancelClick(Sender: TObject);
  196. begin
  197. self.Hide;
  198. end;
  199. procedure TConfig.Configurar(Id: string='');
  200. //Muestra el formulario, de modo que permita configurar la sesión actual
  201. var
  202. it: TTreeNode;
  203. begin
  204. if Id<> '' then begin /////se pide mostrar un Id en especial
  205. //oculta los demás
  206. it := TTreeNodeFromId(Id,TreeView1);
  207. if it <> nil then it.Selected:=true;
  208. TreeView1Click(self);
  209. end else begin ////////muestra todos
  210. for it in TreeView1.Items do begin
  211. it.Visible:=true;
  212. end;
  213. end;
  214. Showmodal;
  215. end;
  216. procedure TConfig.MostEnVentana;
  217. //Muestra las propiedades en la ventana de configuración.
  218. begin
  219. if not cfgFile.PropertiesToWindow then begin
  220. MsgErr(cfgFile.MsjErr);
  221. end;
  222. end;
  223. procedure TConfig.ReadFromFile(iniFile: string = '');
  224. begin
  225. if not cfgFile.FileToProperties then begin
  226. MsgErr(cfgFile.MsjErr);
  227. end;
  228. if OnPropertiesChanged<>nil then OnPropertiesChanged();
  229. end;
  230. procedure TConfig.SaveToFile(iniFile: string='');
  231. //Escribe el archivo de configuración
  232. begin
  233. if not cfgFile.PropertiesToFile then begin
  234. MsgErr(cfgFile.MsjErr);
  235. end;
  236. end;
  237. end.