@@ -29,15 +29,41 @@ interface
2929
3030uses
3131 Controls,SysUtils,ExtCtrls,StdCtrls,Forms,Buttons,LCLType,Dialogs,
32- Classes,Graphics,FPImage,IntfGraphics,ComCtrls,SpriteFile,Global;
32+ Classes,Graphics,FPImage,IntfGraphics,ComCtrls, Menus, SpriteFile,Global, Types ;
3333
3434type
3535
3636 { TMainForm }
3737
3838 TMainForm = class (TForm)
3939 edRenameSprite: TEdit;
40+ AppMenu: TMainMenu;
4041 MainSpritePanel: TPanel;
42+ FileMenu: TMenuItem;
43+ menuClosePool: TMenuItem;
44+ menuImportImage: TMenuItem;
45+ menuDeleteSprite: TMenuItem;
46+ MenuItem1: TMenuItem;
47+ menuAbout: TMenuItem;
48+ contRenameSprite: TMenuItem;
49+ contDeleteSprite: TMenuItem;
50+ contSavePalette: TMenuItem;
51+ MenuItem3: TMenuItem;
52+ contConvertSprite: TMenuItem;
53+ menuConvertSprite: TMenuItem;
54+ menuOptions: TMenuItem;
55+ ContextMenu: TPopupMenu;
56+ btnConvertSprite: TToolButton;
57+ ToolMenu: TMenuItem;
58+ menuSavePalette: TMenuItem;
59+ menuSaveSprite: TMenuItem;
60+ menuSaveAsPNG: TMenuItem;
61+ menuSaveAsBMP: TMenuItem;
62+ menuSaveAsBMPPNG: TMenuItem;
63+ MenuItem2: TMenuItem;
64+ menuRenameSprite: TMenuItem;
65+ SpriteMenu: TMenuItem;
66+ menuOpenFile: TMenuItem;
4167 StatusBarImages: TImageList;
4268 Texture: TImage;
4369 MainToolBarImages: TImageList;
@@ -67,6 +93,7 @@ TMainForm = class(TForm)
6793 btnDeleteSprite: TToolButton;
6894 procedure btnAboutClick (Sender: TObject);
6995 procedure btnCloseFileClick (Sender: TObject);
96+ procedure btnConvertSpriteClick (Sender: TObject);
7097 procedure btnDeleteSpriteClick (Sender: TObject);
7198 procedure btnImportImageClick (Sender: TObject);
7299 procedure btnOptionsClick (Sender: TObject);
@@ -87,6 +114,7 @@ TMainForm = class(TForm)
87114 procedure sb_OpenFileClick (Sender: TObject);
88115 procedure CloseSpriteFile ;
89116 procedure LoadAFile (filename: String);
117+ procedure ContextPopup (Sender: TObject; MousePos: TPoint;var Handled: Boolean);
90118 procedure UpdateStatusBar ;
91119 procedure ArrangeSprites ;
92120 procedure FormCreate (Sender: TObject);
@@ -117,7 +145,7 @@ TMainForm = class(TForm)
117145 SpriteList: TSpriteFile; // The container for the sprites
118146 const
119147 AppTitle = ' Sprite Converter' ;
120- AppVersion = ' 1.03 ' ;
148+ AppVersion = ' 1.04 ' ;
121149 procedure AfterConstruction ; override;
122150 end ;
123151
@@ -191,6 +219,8 @@ procedure TMainForm.Image1DblClick(Sender: TObject);
191219 x:=TImage(Sender).Tag;
192220 if Sender is TLabel then
193221 x:=TLabel(Sender).Tag;
222+ // Deselect any that are selected
223+ if select=x then Image1Click(image[x]);
194224 // Read the sprite
195225 sprite:=SpriteList.ReadSprite(x);
196226 // Now we can populate the big image in the dialogue
@@ -356,8 +386,8 @@ procedure TMainForm.LoadAFile(filename: String);
356386 SetLength(spritepal,SpriteList.SpriteCount);
357387 // Initial image position on the form - this will change
358388 ix:=4 ;
359- wide:=0 ; // We need to work out the widest sprite
360- tall:=0 ; // And the tallest
389+ // wide:=0; //We need to work out the widest sprite
390+ // tall:=0; //And the tallest
361391 for x:=oldCount to SpriteList.SpriteCount-1 do
362392 begin
363393 // Display it
@@ -388,17 +418,30 @@ procedure TMainForm.LoadAFile(filename: String);
388418 if SpriteList.SpriteCount>0 then
389419 begin
390420 // Enable the controls
391- btnSaveAsBMPPNG.Enabled:=True;
392- btnSaveAsBMP.Enabled :=True;
393- btnSaveAsPNG.Enabled :=True;
394- btnSaveSprite.Enabled :=True;
421+ btnSaveAsBMPPNG.Enabled :=True;
422+ menuSaveAsBMPPNG.Enabled:=True;
423+ btnSaveAsBMP.Enabled :=True;
424+ menuSaveAsBMP.Enabled :=True;
425+ btnSaveAsPNG.Enabled :=True;
426+ menuSaveAsPNG.Enabled :=True;
427+ btnSaveSprite.Enabled :=True;
428+ menuSaveSprite.Enabled :=True;
395429 // Update the status bar
396430 UpdateStatusBar;
397431 // Allow re-arranging
398432 sprload:=False;
399433 end ;
400434end ;
401435
436+ { ------------------------------------------------------------------------------}
437+ // Middle button (two finger on mac touchpad) has been clicked
438+ { ------------------------------------------------------------------------------}
439+ procedure TMainForm.ContextPopup (Sender: TObject; MousePos: TPoint;
440+ var Handled: Boolean);
441+ begin
442+ Image1Click(Sender);
443+ end ;
444+
402445{ ------------------------------------------------------------------------------}
403446// Update the status bar
404447{ ------------------------------------------------------------------------------}
@@ -525,6 +568,14 @@ procedure TMainForm.btnCloseFileClick(Sender: TObject);
525568 If QueryUnSaved then CloseSpriteFile;
526569end ;
527570
571+ { ------------------------------------------------------------------------------}
572+ // Convert a sprite
573+ { ------------------------------------------------------------------------------}
574+ procedure TMainForm.btnConvertSpriteClick (Sender: TObject);
575+ begin
576+ // Convert a sprite: colour depth; OS compatibility; mask type; mode data
577+ end ;
578+
528579{ ------------------------------------------------------------------------------}
529580// Delete a sprite
530581{ ------------------------------------------------------------------------------}
@@ -720,6 +771,16 @@ procedure TMainForm.DisableButtons;
720771 btnSavePalette.Enabled :=False;
721772 btnRenameSprite.Enabled:=False;
722773 btnDeleteSprite.Enabled:=False;
774+ menuSaveAsBMPPNG.Enabled:=False;
775+ menuSaveAsBMP.Enabled :=False;
776+ menuSaveAsPNG.Enabled :=False;
777+ menuSaveSprite.Enabled :=False;
778+ menuSavePalette.Enabled :=False;
779+ menuRenameSprite.Enabled:=False;
780+ menuDeleteSprite.Enabled:=False;
781+ contSavePalette.Enabled :=False;
782+ contRenameSprite.Enabled:=False;
783+ contDeleteSprite.Enabled:=False;
723784end ;
724785
725786{ ------------------------------------------------------------------------------}
@@ -743,6 +804,9 @@ procedure TMainForm.FormShow(Sender: TObject);
743804 // Sprite thumbnails
744805 thumbnailwidth :=Round(32 *Screen.PixelsPerInch/96 );
745806 thumbnailheight:=Round(32 *Screen.PixelsPerInch/96 );
807+ // widest and tallest
808+ wide:=Round(thumbnailwidth*2.5 );
809+ tall:=Round(thumbnailheight*2 );
746810end ;
747811
748812{ ------------------------------------------------------------------------------}
@@ -779,18 +843,30 @@ procedure TMainForm.Image1Click(Sender: TObject);
779843 spritename[x].Color:=clBlue;
780844 spritename[x].Font.Color:=clWhite;
781845 select:=x;
782- btnSavePalette.Enabled:=spritepal[select];
783- btnRenameSprite.Enabled:=True;
784- btnDeleteSprite.Enabled:=True;
846+ btnSavePalette.Enabled :=spritepal[select];
847+ menuSavePalette.Enabled :=spritepal[select];
848+ contSavePalette.Enabled :=spritepal[select];
849+ btnRenameSprite.Enabled :=True;
850+ btnDeleteSprite.Enabled :=True;
851+ menuRenameSprite.Enabled:=True;
852+ menuDeleteSprite.Enabled:=True;
853+ contRenameSprite.Enabled:=True;
854+ contDeleteSprite.Enabled:=True;
785855 end
786856 else
787857 if (x=select)and (x>=0 )and (edit)then btnRenameSpriteClick(Sender)
788858 else
789859 begin
790860 select:=-1 ; // Or mark as deselected
791- btnSavePalette.Enabled:=False;
792- btnRenameSprite.Enabled:=False;
793- btnDeleteSprite.Enabled:=False;
861+ btnSavePalette.Enabled :=False;
862+ btnRenameSprite.Enabled :=False;
863+ btnDeleteSprite.Enabled :=False;
864+ menuSavePalette.Enabled :=False;
865+ menuRenameSprite.Enabled:=False;
866+ menuDeleteSprite.Enabled:=False;
867+ contSavePalette.Enabled :=False;
868+ contRenameSprite.Enabled:=False;
869+ contDeleteSprite.Enabled:=False;
794870 end ;
795871end ;
796872
@@ -839,6 +915,16 @@ procedure TMainForm.sb_SaveClick(Sender: TObject);
839915 if TToolButton(Sender).Name =' btnSaveAsBMP' then bmp:=True;
840916 if TToolButton(Sender).Name =' btnSaveAsPNG' then png:=True;
841917 end ;
918+ if Sender is TMenuItem then
919+ begin
920+ if TMenuItem(Sender).Name =' menuSaveAsBMPPNG' then
921+ begin
922+ png:=True;
923+ bmp:=True;
924+ end ;
925+ if TMenuItem(Sender).Name =' menuSaveAsBMP' then bmp:=True;
926+ if TMenuItem(Sender).Name =' menuSaveAsPNG' then png:=True;
927+ end ;
842928 // Are there actually any sprites?
843929 if SpriteList.SpriteCount>0 then
844930 begin
@@ -898,12 +984,16 @@ procedure TMainForm.CreateSpriteControl(sprite,x,y: Integer);
898984 spritename[sprite].Left:=x+(((thumbnailwidth*2 )-spritename[sprite].Width)div 2 );
899985 spritename[sprite].OnDblClick:=@Image1DblClick;
900986 spritename[sprite].OnClick:=@Image1Click;
987+ spritename[sprite].OnContextPopup:=@ContextPopup;
988+ spritename[sprite].PopupMenu:=ContextMenu;
901989 spritename[sprite].Tag:=sprite; // For reference later
902990 // Create and populate the sprite image control
903991 image[sprite]:=TImage.Create(MainSpritePanel as TComponent);
904992 image[sprite].Parent:=MainSpritePanel as TWinControl;
905993 image[sprite].OnDblClick:=@Image1DblClick;
906994 image[sprite].OnClick:=@Image1Click;
995+ image[sprite].OnContextPopup:=@ContextPopup;
996+ image[sprite].PopupMenu:=ContextMenu;
907997 image[sprite].Tag:=sprite;
908998 image[sprite].Visible:=True;
909999 image[sprite].Stretch:=True;
@@ -915,11 +1005,11 @@ procedure TMainForm.CreateSpriteControl(sprite,x,y: Integer);
9151005 image[sprite].Height:=thumbnailheight;
9161006 image[sprite].Hint:=spritedata.Name ;
9171007 // Take note if it is the widest so far seen
918- if spritename[sprite].Width>wide then wide:=spritename[sprite].Width;
919- if image[sprite].Width>wide then wide:=image[sprite].Width;
1008+ { if spritename[sprite].Width>wide then wide:=spritename[sprite].Width;
1009+ if image[sprite].Width>wide then wide:=image[sprite].Width;}
9201010 // They're all the same height
921- if tall=0 then
922- tall:=((spritename[sprite].Top+spritename[sprite].Height)-image[sprite].Top);
1011+ { if tall=0 then
1012+ tall:=((spritename[sprite].Top+spritename[sprite].Height)-image[sprite].Top);}
9231013 // Hide them, until later
9241014 spritename[sprite].Visible:=False;
9251015 image[sprite].Visible:=False;
0 commit comments