From d3ca72b5ff6391bcc356ae7187dd26c946d912b8 Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Sun, 8 Dec 2013 09:27:27 +0000 Subject: [PATCH] Export/Import GraphicList --- Packages/X2CLGraphicsEditor.dfm | 234 ++++++++++--------------------- Packages/X2CLGraphicsEditor.pas | 239 +++++++++++++++++++++++--------- Source/X2CLGraphicList.pas | 11 +- X2CL.groupproj | 2 +- 4 files changed, 255 insertions(+), 231 deletions(-) diff --git a/Packages/X2CLGraphicsEditor.dfm b/Packages/X2CLGraphicsEditor.dfm index d3d4fa8..90b675c 100644 --- a/Packages/X2CLGraphicsEditor.dfm +++ b/Packages/X2CLGraphicsEditor.dfm @@ -1,10 +1,10 @@ object GraphicsEditorForm: TGraphicsEditorForm Left = 325 Top = 363 - Width = 534 - Height = 451 BorderIcons = [biSystemMenu] Caption = '' + ClientHeight = 413 + ClientWidth = 518 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -12,7 +12,6 @@ object GraphicsEditorForm: TGraphicsEditorForm Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False - Position = poDefaultPosOnly OnClose = FormClose PixelsPerInch = 96 TextHeight = 13 @@ -20,24 +19,25 @@ object GraphicsEditorForm: TGraphicsEditorForm Left = 189 Top = 0 Width = 4 - Height = 424 + Height = 413 + ExplicitHeight = 424 end object pnlImage: TPanel Left = 193 Top = 0 - Width = 333 - Height = 424 + Width = 325 + Height = 413 Align = alClient BevelOuter = bvNone TabOrder = 1 object tbImage: TToolBar Left = 0 Top = 0 - Width = 333 + Width = 325 Height = 26 AutoSize = True + DrawingStyle = dsGradient EdgeBorders = [ebTop, ebBottom] - Flat = True Images = ilsIcons TabOrder = 0 object tbOpen: TToolButton @@ -59,8 +59,8 @@ object GraphicsEditorForm: TGraphicsEditorForm object sbImage: TScrollBox Left = 0 Top = 26 - Width = 333 - Height = 370 + Width = 325 + Height = 334 Align = alClient BevelInner = bvNone BevelKind = bkTile @@ -78,27 +78,40 @@ object GraphicsEditorForm: TGraphicsEditorForm end object pnlProperties: TPanel Left = 0 - Top = 396 - Width = 333 - Height = 28 + Top = 360 + Width = 325 + Height = 53 Align = alBottom BevelOuter = bvNone - Caption = 'pnlProperties' TabOrder = 2 DesignSize = ( - 333 - 28) + 325 + 53) object lblName: TLabel Left = 8 - Top = 8 + Top = 32 Width = 31 Height = 13 Caption = 'Name:' end + object lblClassType: TLabel + Left = 8 + Top = 6 + Width = 309 + Height = 13 + Anchors = [akLeft, akTop, akRight] + AutoSize = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clGrayText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end object txtName: TEdit Left = 52 - Top = 4 - Width = 277 + Top = 28 + Width = 269 Height = 21 Anchors = [akLeft, akTop, akRight] TabOrder = 0 @@ -110,7 +123,7 @@ object GraphicsEditorForm: TGraphicsEditorForm Left = 0 Top = 0 Width = 189 - Height = 424 + Height = 413 Align = alLeft BevelOuter = bvNone TabOrder = 0 @@ -118,7 +131,7 @@ object GraphicsEditorForm: TGraphicsEditorForm Left = 0 Top = 26 Width = 189 - Height = 398 + Height = 387 Style = lbVirtual Align = alClient ItemHeight = 13 @@ -134,8 +147,8 @@ object GraphicsEditorForm: TGraphicsEditorForm Width = 189 Height = 26 AutoSize = True + DrawingStyle = dsGradient EdgeBorders = [ebTop, ebBottom] - Flat = True Images = ilsIcons TabOrder = 0 object tbNew: TToolButton @@ -165,6 +178,23 @@ object GraphicsEditorForm: TGraphicsEditorForm Top = 0 Action = actDown end + object tbSep2: TToolButton + Left = 100 + Top = 0 + Width = 8 + ImageIndex = 9 + Style = tbsSeparator + end + object tbExport: TToolButton + Left = 108 + Top = 0 + Action = actExport + end + object tbImport: TToolButton + Left = 131 + Top = 0 + Action = actImport + end end end object ilsIcons: TImageList @@ -172,135 +202,7 @@ object GraphicsEditorForm: TGraphicsEditorForm Top = 360 Bitmap = { 494C010107000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000003000000001002000000000000030 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000003600000028000000400000002000000001002000000000000020 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -558,12 +460,8 @@ object GraphicsEditorForm: TGraphicsEditorForm 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000300000000100010000000000800100000000000000000000 - 000000000000000000000000FFFFFF0000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000FFFFFFFFFFFF0000EFFDFFFFFFFF0000 + 2800000040000000200000000100010000000000000100000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFFFFFF0000EFFDFFFFFFFF0000 C7FFFFFFFFFF0000C3FBF83FFEFF0000E3F7F83FFC7F0000F1E7F83FF83F0000 F8CFF83FF01F0000FC1FC007E00F0000FE3FE00FC0070000FC1FF01FF83F0000 F8CFF83FF83F0000E1E7FC7FF83F0000C3F3FEFFF83F0000C7FDFFFFFFFF0000 @@ -627,6 +525,18 @@ object GraphicsEditorForm: TGraphicsEditorForm ShortCut = 16424 OnExecute = actDownExecute end + object actExport: TAction + Caption = '&Export' + Hint = 'Export all graphics' + ImageIndex = 3 + OnExecute = actExportExecute + end + object actImport: TAction + Caption = '&Import' + Hint = 'Import all graphics' + ImageIndex = 2 + OnExecute = actImportExecute + end end object dlgOpen: TOpenPictureDialog Left = 20 @@ -636,4 +546,14 @@ object GraphicsEditorForm: TGraphicsEditorForm Left = 104 Top = 304 end + object dlgExport: TSaveDialog + Filter = 'GraphicList Export (*.gle)|*.gle' + Left = 104 + Top = 256 + end + object dlgImport: TOpenDialog + Filter = 'GraphicList Export (*.gle)|*.gle' + Left = 24 + Top = 256 + end end diff --git a/Packages/X2CLGraphicsEditor.pas b/Packages/X2CLGraphicsEditor.pas index 324ce26..62da487 100644 --- a/Packages/X2CLGraphicsEditor.pas +++ b/Packages/X2CLGraphicsEditor.pas @@ -26,64 +26,72 @@ uses type TGraphicsEditorForm = class(TForm) - actAdd: TAction; - actClear: TAction; - actDelete: TAction; - actDown: TAction; - actOpen: TAction; - actSave: TAction; - actUp: TAction; - alGraphics: TActionList; - dlgOpen: TOpenPictureDialog; - dlgSave: TSavePictureDialog; - ilsIcons: TImageList; - imgPreview: TImage; - lblName: TLabel; - lstGraphics: TListBox; - pnlGraphics: TPanel; - pnlImage: TPanel; - pnlProperties: TPanel; - sbImage: TScrollBox; - spltGraphics: TSplitter; - tbClear: TToolButton; - tbDelete: TToolButton; - tbDown: TToolButton; - tbGraphics: TToolBar; - tbImage: TToolBar; - tbNew: TToolButton; - tbOpen: TToolButton; - tbSave: TToolButton; - tbSep1: TToolButton; - tbUp: TToolButton; - txtName: TEdit; + actAdd: TAction; + actClear: TAction; + actDelete: TAction; + actDown: TAction; + actOpen: TAction; + actSave: TAction; + actUp: TAction; + alGraphics: TActionList; + dlgOpen: TOpenPictureDialog; + dlgSave: TSavePictureDialog; + ilsIcons: TImageList; + imgPreview: TImage; + lblName: TLabel; + lstGraphics: TListBox; + pnlGraphics: TPanel; + pnlImage: TPanel; + pnlProperties: TPanel; + sbImage: TScrollBox; + spltGraphics: TSplitter; + tbClear: TToolButton; + tbDelete: TToolButton; + tbDown: TToolButton; + tbGraphics: TToolBar; + tbImage: TToolBar; + tbNew: TToolButton; + tbOpen: TToolButton; + tbSave: TToolButton; + tbSep1: TToolButton; + tbUp: TToolButton; + txtName: TEdit; + lblClassType: TLabel; + tbExport: TToolButton; + tbImport: TToolButton; + actExport: TAction; + actImport: TAction; + tbSep2: TToolButton; + dlgExport: TSaveDialog; + dlgImport: TOpenDialog; - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure lstGraphicsClick(Sender: TObject); - procedure txtNameChange(Sender: TObject); + function lstGraphicsDataFind(Control: TWinControl; FindString: String): Integer; procedure actAddExecute(Sender: TObject); + procedure actClearExecute(Sender: TObject); procedure actDeleteExecute(Sender: TObject); - procedure actUpExecute(Sender: TObject); procedure actDownExecute(Sender: TObject); + procedure actExportExecute(Sender: TObject); + procedure actImportExecute(Sender: TObject); procedure actOpenExecute(Sender: TObject); procedure actSaveExecute(Sender: TObject); - procedure actClearExecute(Sender: TObject); - procedure lstGraphicsData(Control: TWinControl; Index: Integer; - var Data: String); - function lstGraphicsDataFind(Control: TWinControl; - FindString: String): Integer; + procedure actUpExecute(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure lstGraphicsClick(Sender: TObject); + procedure lstGraphicsData(Control: TWinControl; Index: Integer; var Data: String); procedure lstGraphicsKeyPress(Sender: TObject; var Key: Char); + procedure txtNameChange(Sender: TObject); private - FComponent: TX2GraphicContainer; - FComponentDesigner: IDesigner; - FUpdating: Boolean; + FComponent: TX2GraphicContainer; + FComponentDesigner: IDesigner; + FUpdating: Boolean; procedure InternalExecute(const AComponent: TComponent; const ADesigner: IDesigner); procedure LoadGraphic(AGraphic: TX2GraphicContainerItem; const AFileName: string); procedure ItemChanged(AUpdatePreview: Boolean = True); - procedure UpdateUI(); - procedure UpdatePreview(); + procedure UpdateUI; + procedure UpdatePreview; function Active(out AIndex: Integer; out AGraphic: TX2GraphicContainerItem): Boolean; protected @@ -95,12 +103,13 @@ type implementation uses Graphics, + IniFiles, SysUtils, Windows; var - EditorInstance: TGraphicsEditorForm; + EditorInstance: TGraphicsEditorForm; {$R *.dfm} @@ -115,6 +124,7 @@ begin EditorInstance.InternalExecute(AComponent, ADesigner); end; + procedure TGraphicsEditorForm.InternalExecute(const AComponent: TComponent; const ADesigner: IDesigner); begin FComponent := TX2GraphicContainer(AComponent); @@ -126,9 +136,9 @@ begin lstGraphics.Count := FComponent.GraphicCount; lstGraphics.ItemIndex := 0; - UpdateUI(); - UpdatePreview(); - Show(); + UpdateUI; + UpdatePreview; + Show; end; @@ -147,6 +157,7 @@ end; procedure TGraphicsEditorForm.LoadGraphic(AGraphic: TX2GraphicContainerItem; const AFileName: string); begin AGraphic.Picture.LoadFromFile(AFileName); + if Length(AGraphic.PictureName) = 0 then begin AGraphic.PictureName := ChangeFileExt(ExtractFileName(AFileName), ''); @@ -160,14 +171,14 @@ begin if Assigned(FComponentDesigner) then FComponentDesigner.Modified; - UpdateUI(); + UpdateUI; if AUpdatePreview then UpdatePreview; end; -procedure TGraphicsEditorForm.UpdateUI(); +procedure TGraphicsEditorForm.UpdateUI; var enabled: Boolean; index: Integer; @@ -185,13 +196,14 @@ begin actSave.Enabled := enabled; actClear.Enabled := enabled; + actExport.Enabled := (FComponent.GraphicCount > 0); actUp.Enabled := enabled and (index > 0); actDown.Enabled := enabled and (index < Pred(FComponent.GraphicCount)); end; -procedure TGraphicsEditorForm.UpdatePreview(); +procedure TGraphicsEditorForm.UpdatePreview; var index: Integer; graphic: TX2GraphicContainerItem; @@ -202,11 +214,18 @@ begin if Active(index, graphic) then begin imgPreview.Picture.Assign(graphic.Picture); - txtName.Text := graphic.PictureName; + + if Assigned(graphic.Picture.Graphic) then + lblClassType.Caption := graphic.Picture.Graphic.ClassName + else + lblClassType.Caption := ''; + + txtName.Text := graphic.PictureName; lstGraphics.Invalidate; end else begin imgPreview.Picture.Assign(nil); + lblClassType.Caption := ''; txtName.Text := ''; end; finally @@ -230,8 +249,8 @@ end; procedure TGraphicsEditorForm.lstGraphicsClick(Sender: TObject); begin - UpdateUI(); - UpdatePreview(); + UpdateUI; + UpdatePreview; end; @@ -265,7 +284,7 @@ begin dlgOpen.Filter := GraphicFilter(TGraphic); dlgOpen.Options := dlgOpen.Options + [ofAllowMultiSelect]; - if dlgOpen.Execute() then + if dlgOpen.Execute then begin for fileIndex := 0 to Pred(dlgOpen.Files.Count) do begin @@ -275,13 +294,13 @@ begin begin graphic.Container := FComponent; lstGraphics.Count := FComponent.GraphicCount; - + LoadGraphic(graphic, dlgOpen.Files[fileIndex]); end else raise Exception.Create('Failed to create TX2GraphicContainerItem!'); end; - ItemChanged(); + ItemChanged; end; end else raise Exception.Create('Designer not found!'); @@ -299,7 +318,7 @@ begin { First attempt to remove the component; this will raise an exception if it's not allowed, for example due to it being introduced in an ancestor. } - graphic.Free(); + graphic.Free; lstGraphics.Count := FComponent.GraphicCount; if index > Pred(FComponent.GraphicCount) then @@ -307,7 +326,7 @@ begin lstGraphics.ItemIndex := index; - ItemChanged(); + ItemChanged; end; end; @@ -359,14 +378,15 @@ begin dlgOpen.Filter := GraphicFilter(TGraphic); dlgOpen.Options := dlgOpen.Options - [ofAllowMultiSelect]; - if dlgOpen.Execute() then + if dlgOpen.Execute then begin LoadGraphic(graphic, dlgOpen.FileName); - ItemChanged(); + ItemChanged; end; end; end; + procedure TGraphicsEditorForm.actSaveExecute(Sender: TObject); var index: Integer; @@ -380,11 +400,12 @@ begin dlgSave.Filter := GraphicFilter(graphicClass); dlgSave.FileName := ChangeFileExt(graphic.PictureName, '.' + GraphicExtension(graphicClass)); - if dlgSave.Execute() then + if dlgSave.Execute then graphic.Picture.SaveToFile(dlgSave.FileName); end; end; + procedure TGraphicsEditorForm.actClearExecute(Sender: TObject); var index: Integer; @@ -394,7 +415,97 @@ begin if Active(index, graphic) then begin graphic.Picture.Assign(nil); - ItemChanged(); + ItemChanged; + end; +end; + + +procedure TGraphicsEditorForm.actExportExecute(Sender: TObject); +var + exportFile: TIniFile; + exportBaseFileName: string; + exportPath: string; + index: Integer; + graphic: TX2GraphicContainerItem; + fileName: string; + +begin + if dlgExport.Execute then + begin + exportPath := ExtractFilePath(dlgExport.FileName); + exportBaseFileName := ChangeFileExt(ExtractFileName(dlgExport.FileName), ''); + + exportFile := TIniFile.Create(dlgExport.FileName); + try + for index := 0 to Pred(FComponent.GraphicCount) do + begin + graphic := FComponent.Graphics[index]; + exportFile.WriteString('PictureName', IntToStr(index), graphic.PictureName); + + if Assigned(graphic.Picture.Graphic) then + begin + fileName := exportBaseFileName + '.' + IntToStr(index) + '.' + GraphicExtension(TGraphicClass(graphic.Picture.Graphic.ClassType)); + + graphic.Picture.Graphic.SaveToFile(exportPath + fileName); + exportFile.WriteString('FileName', IntToStr(index), fileName); + end; + end; + + ShowMessage('Graphics have been exported'); + finally + FreeAndNil(exportFile); + end; + end; +end; + + +procedure TGraphicsEditorForm.actImportExecute(Sender: TObject); +var + importFile: TIniFile; + importPath: string; + index: Integer; + graphic: TX2GraphicContainerItem; + fileName: string; + +begin + if dlgImport.Execute then + begin + if FComponent.GraphicCount > 0 then + begin + if MessageBox(Self.Handle, 'All graphics will be replaced. Do you want to continue?', 'Import', MB_YESNO or MB_ICONQUESTION) <> ID_YES then + exit; + end; + + lstGraphics.Clear; + FComponent.Clear; + + importPath := ExtractFilePath(dlgImport.FileName); + importFile := TIniFile.Create(dlgImport.FileName); + try + index := 0; + + while importFile.ValueExists('PictureName', IntToStr(index)) do + begin + graphic := TX2GraphicContainerItem(FComponentDesigner.CreateComponent(TX2GraphicContainerItem, nil, 0, 0, 0, 0)); + + if Assigned(graphic) then + begin + graphic.Container := FComponent; + graphic.PictureName := importFile.ReadString('PictureName', IntToStr(index), IntToStr(index)); + + fileName := importFile.ReadString('FileName', IntToStr(index), ''); + if (Length(fileName) > 0) and FileExists(importPath + fileName) then + graphic.Picture.LoadFromFile(importPath + fileName); + end; + + Inc(index); + end; + finally + FreeAndNil(importFile); + + lstGraphics.Count := FComponent.GraphicCount; + ItemChanged(True); + end; end; end; @@ -406,7 +517,7 @@ begin if (Operation = opRemove) and (AComponent = FComponent) then begin FComponent := nil; - Close(); + Close; end; end; diff --git a/Source/X2CLGraphicList.pas b/Source/X2CLGraphicList.pas index 6471468..32a89c7 100644 --- a/Source/X2CLGraphicList.pas +++ b/Source/X2CLGraphicList.pas @@ -22,18 +22,11 @@ uses Controls, Graphics; -{$IFDEF VER150} +{$IF CompilerVersion >= 15} {$WARN UNSAFE_CODE OFF} {$WARN UNSAFE_CAST OFF} {$WARN UNSAFE_TYPE OFF} -{$ENDIF} - -{$IFDEF VER180} -{$WARN UNSAFE_CODE OFF} -{$WARN UNSAFE_CAST OFF} -{$WARN UNSAFE_TYPE OFF} -{$ENDIF} - +{$IFEND} type // Forward declarations diff --git a/X2CL.groupproj b/X2CL.groupproj index a260a85..674ab05 100644 --- a/X2CL.groupproj +++ b/X2CL.groupproj @@ -13,7 +13,7 @@ Default.Personality - +