home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / Chip_2003-01_cd1.bin / zkuste / delphi / kolekce / d567 / FLEXCEL.ZIP / XLSAdapter / TemplateStore.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-09-26  |  5.2 KB  |  217 lines

  1. unit TemplateStore;
  2.  
  3. interface
  4. {$R XlsTemplateStore.res}
  5. uses
  6.   SysUtils, Classes, XlsMessages, XlsBaseTemplateStore, contnrs;
  7.  
  8. type
  9.   TXlsTemplate= class (TCollectionItem)
  10.   private
  11.     FFileName: TFileName;
  12.     FCompress: boolean;
  13.     FStorages: TXlsStorageList;
  14.  
  15.     procedure SetFileName(const Value: TFileName);
  16.     procedure SetCompress(const Value: boolean);
  17.  
  18.     property Compress: boolean read FCompress write SetCompress;
  19.   protected
  20.     function GetDisplayName: string; override;
  21.     procedure SetDisplayName(const Value: string); override;
  22.  
  23.     procedure WriteData(Stream: TStream);
  24.     procedure ReadData(Stream: TStream);
  25.     procedure DefineProperties(Filer: TFiler); override;
  26.     function Equal(aTemplate: TXlsTemplate): Boolean;
  27.   public
  28.     property Storages: TXlsStorageList read FStorages;
  29.     constructor Create(Collection: TCollection); override;
  30.     destructor Destroy; override;
  31.  
  32.     procedure SaveAs(const aFileName: TFileName);
  33.   published
  34.     property FileName: TFileName read FFileName write SetFileName stored false;
  35.   end;
  36.  
  37.   TXlsTemplateList=class(TOwnedCollection) //Items are TXlsTemplate
  38.   private
  39.     FCompress: boolean;
  40.     procedure SetCompress(const Value: boolean);
  41.     property Compress: boolean read FCompress write SetCompress;
  42.     function GetItems(Index: integer): TXlsTemplate;
  43.   public
  44.     property Items[Index: integer]: TXlsTemplate read GetItems; default;
  45.   end;
  46.  
  47.   TXlsTemplateStore = class(TXlsBaseTemplateStore)
  48.   private
  49.     FCompress: boolean;
  50.     procedure SetCompress(const Value: boolean);
  51.     { Private declarations }
  52.   protected
  53.     FTemplates: TXlsTemplateList;
  54.     function GetStorages(Name: String): TXlsStorageList; override;
  55.     { Protected declarations }
  56.   public
  57.     { Public declarations }
  58.     constructor Create(AOwner: TComponent); override;
  59.     destructor Destroy;override;
  60.   published
  61.     { Published declarations }
  62.     property Templates: TXlsTemplateList read FTemplates write FTemplates;
  63.     property Compress: boolean read FCompress write SetCompress;
  64.  
  65.  
  66.     //PENDING:AssignTo
  67.   end;
  68.  
  69. procedure Register;
  70.  
  71. implementation
  72. procedure Register;
  73. begin
  74.   RegisterComponents('FlexCel', [TXlsTemplateStore]);
  75. end;
  76.  
  77.  
  78. { TXlsTemplate }
  79.  
  80. constructor TXlsTemplate.Create(Collection: TCollection);
  81. begin
  82.   inherited;
  83.   FStorages:=TXlsStorageList.Create;
  84. end;
  85.  
  86. procedure TXlsTemplate.DefineProperties(Filer: TFiler);
  87.  
  88.   function DoWrite: Boolean;
  89.   begin
  90.     if Filer.Ancestor <> nil then
  91.       Result := not (Filer.Ancestor is TXlsTemplate) or
  92.         not Equal(TXlsTemplate(Filer.Ancestor))
  93.     else
  94.       Result := FFileName<>'';
  95.   end;
  96.  
  97. begin
  98.   inherited DefineProperties(Filer);
  99.   Filer.DefineBinaryProperty('TemplateData', ReadData, WriteData, DoWrite);
  100. end;
  101.  
  102. destructor TXlsTemplate.Destroy;
  103. begin
  104.   FreeAndNil(FStorages);
  105.   inherited;
  106. end;
  107.  
  108. function TXlsTemplate.Equal(aTemplate: TXlsTemplate): Boolean;
  109. begin
  110.   Result:=FFileName=aTemplate.FFileName;
  111. end;
  112.  
  113. function TXlsTemplate.GetDisplayName: string;
  114. begin
  115.   Result:=FFileName;
  116. end;
  117.  
  118. procedure TXlsTemplate.ReadData(Stream: TStream);
  119. var
  120.   Version: SmallInt;
  121.   Ln: integer;
  122. begin
  123.   Stream.ReadBuffer(Version, SizeOf(Version));
  124.   Stream.ReadBuffer(Ln, SizeOF(Ln));
  125.   SetLength(FFileName, Ln);
  126.   Stream.ReadBuffer(FFileName[1], Ln);
  127.   FStorages.ReadData(Stream);
  128. end;
  129.  
  130. procedure TXlsTemplate.SaveAs(const aFileName: TFileName);
  131. begin
  132.   FStorages.SaveAs(aFileName);
  133. end;
  134.  
  135. procedure TXlsTemplate.SetCompress(const Value: boolean);
  136. var
  137.   i:integer;
  138. begin
  139.   FCompress := Value;
  140.   for i:=0 to FStorages.Count-1 do FStorages[i].Compress:=Value;
  141. end;
  142.  
  143. procedure TXlsTemplate.SetDisplayName(const Value: string);
  144. begin
  145.   inherited;
  146.   FileName:=Value;
  147. end;
  148.  
  149. procedure TXlsTemplate.SetFileName(const Value: TFileName);
  150. begin
  151.   FStorages.LoadFrom(Value);
  152.   FFileName := ExtractFileName(Value);
  153. end;
  154.  
  155. procedure TXlsTemplate.WriteData(Stream: TStream);
  156. var
  157.   Version: SmallInt;
  158.   Ln: integer;
  159. begin
  160.   Version:=1;
  161.   Stream.WriteBuffer(Version,SizeOf(Version));
  162.   Ln:=Length(FFileName);
  163.   Stream.WriteBuffer(Ln, SizeOf(Ln));
  164.   Stream.WriteBuffer(FFileName[1], Ln);
  165.   FStorages.WriteData(Stream);
  166. end;
  167.  
  168. { TXlsTemplateStore }
  169.  
  170. constructor TXlsTemplateStore.Create(AOwner: TComponent);
  171. begin
  172.   inherited;
  173.   FTemplates:= TXlsTemplateList.Create(Self, TXlsTemplate);
  174. end;
  175.  
  176. destructor TXlsTemplateStore.Destroy;
  177. begin
  178.   FreeAndNil(FTemplates);
  179.   inherited;
  180. end;
  181.  
  182. function TXlsTemplateStore.GetStorages(Name: String): TXlsStorageList;
  183. var
  184.   i: integer;
  185. begin
  186.   Name:= ExtractFileName(Name);
  187.   for i:=0 to Templates.Count -1 do if Templates[i].FileName=Name then
  188.   begin
  189.     Result:=Templates[i].Storages;
  190.     exit;
  191.   end;
  192.   raise Exception.CreateFmt(ErrFileNotFound, [Name]);
  193. end;
  194.  
  195. procedure TXlsTemplateStore.SetCompress(const Value: boolean);
  196. begin
  197.   FCompress := Value;
  198.   Templates.Compress:=Value;
  199. end;
  200.  
  201. { TXlsTemplateList }
  202.  
  203. function TXlsTemplateList.GetItems(Index: integer): TXlsTemplate;
  204. begin
  205.   Result:= inherited Items[Index] as TXlsTemplate;
  206. end;
  207.  
  208. procedure TXlsTemplateList.SetCompress(const Value: boolean);
  209. var
  210.   i:integer;
  211. begin
  212.   FCompress := Value;
  213.   for i:=0 to Count-1 do Items[i].Compress:=true;
  214. end;
  215.  
  216. end.
  217.