mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-12 09:22:45 +02:00
224 lines
6.9 KiB
ObjectPascal
224 lines
6.9 KiB
ObjectPascal
unit project_resources_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Graphics, Forms, Controls, ComCtrls, Dialogs,
|
|
LCLProc, LCLType,
|
|
IDEOptionsIntf, IDEImagesIntf, IDEDialogs, Project,
|
|
ProjectUserResources, LCLStrConsts, ExtCtrls, StdCtrls, LazarusIDEStrConsts;
|
|
|
|
type
|
|
|
|
{ TResourcesOptionsFrame }
|
|
|
|
TResourcesOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
cbResourceType: TComboBox;
|
|
edResourceName: TEdit;
|
|
lblResourceType: TLabel;
|
|
lblResourceName: TLabel;
|
|
lbResources: TListView;
|
|
dlgOpen: TOpenDialog;
|
|
ToolBar1: TToolBar;
|
|
btnAdd: TToolButton;
|
|
btnDelete: TToolButton;
|
|
btnClear: TToolButton;
|
|
procedure btnAddClick(Sender: TObject);
|
|
procedure btnClearClick(Sender: TObject);
|
|
procedure btnDeleteClick(Sender: TObject);
|
|
procedure cbResourceTypeChange(Sender: TObject);
|
|
procedure edResourceNameEditingDone(Sender: TObject);
|
|
procedure edResourceNameKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
procedure lbResourcesInsert(Sender: TObject; Item: TListItem);
|
|
procedure lbResourcesSelectItem(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean);
|
|
private
|
|
FProject: TProject;
|
|
procedure AddResource(AFileName: String);
|
|
procedure AddResourceItem(ResFile: String; ResType: TUserResourceType; ResName: String);
|
|
public
|
|
function GetTitle: string; override;
|
|
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TResourcesOptionsFrame }
|
|
|
|
procedure TResourcesOptionsFrame.btnAddClick(Sender: TObject);
|
|
var
|
|
FileName: String;
|
|
aFilename: String;
|
|
begin
|
|
if dlgOpen.Execute then
|
|
begin
|
|
for FileName in dlgOpen.Files do
|
|
begin
|
|
aFilename := Filename;
|
|
if not FProject.IsVirtual then
|
|
aFileName := CreateRelativePath(aFileName, FProject.ProjectDirectory);
|
|
AddResource(aFileName);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.btnClearClick(Sender: TObject);
|
|
begin
|
|
if IDEMessageDialog(lisConfirmDelete, rsResourceClear, mtConfirmation, [mbYes, mbNo]) = mrYes then
|
|
lbResources.Items.Clear;
|
|
btnClear.Enabled := lbResources.Items.Count > 0;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.btnDeleteClick(Sender: TObject);
|
|
begin
|
|
if Assigned(lbResources.Selected) then
|
|
lbResources.Items.Delete(lbResources.Selected.Index);
|
|
btnClear.Enabled := lbResources.Items.Count > 0;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.cbResourceTypeChange(Sender: TObject);
|
|
begin
|
|
lbResources.Selected.SubItems[0] := ResourceTypeToStr[TUserResourceType(cbResourceType.ItemIndex)];
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.edResourceNameEditingDone(Sender: TObject);
|
|
begin
|
|
lbResources.Selected.SubItems[1] := edResourceName.Text;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.edResourceNameKeyDown(Sender: TObject;
|
|
var Key: Word; Shift: TShiftState);
|
|
begin
|
|
if Key = VK_RETURN then
|
|
begin
|
|
edResourceName.EditingDone;
|
|
Key := 0;
|
|
end;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.lbResourcesInsert(Sender: TObject;
|
|
Item: TListItem);
|
|
begin
|
|
btnClear.Enabled := lbResources.Items.Count > 0;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.lbResourcesSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
|
|
begin
|
|
btnDelete.Enabled := Assigned(lbResources.Selected);
|
|
edResourceName.Enabled := Assigned(lbResources.Selected);
|
|
if edResourceName.Enabled then
|
|
edResourceName.Text := lbResources.Selected.SubItems[1]
|
|
else
|
|
edResourceName.Text := '';
|
|
cbResourceType.Enabled := Assigned(lbResources.Selected);
|
|
if cbResourceType.Enabled then
|
|
cbResourceType.ItemIndex := Ord(StrToResourceType(lbResources.Selected.SubItems[0]))
|
|
else
|
|
cbResourceType.ItemIndex := -1;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.AddResourceItem(ResFile: String; ResType: TUserResourceType; ResName: String);
|
|
var
|
|
Item: TListItem;
|
|
begin
|
|
Item := lbResources.Items.Add;
|
|
Item.Caption := ResFile;
|
|
Item.SubItems.Add(ResourceTypeToStr[ResType]);
|
|
Item.SubItems.Add(ResName);
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.AddResource(AFileName: String);
|
|
var
|
|
ResName, Ext: String;
|
|
begin
|
|
Ext := UTF8UpperCase(ExtractFileExt(AFileName));
|
|
ResName := UTF8UpperCase(ExtractFileNameOnly(AFileName));
|
|
case Ext of
|
|
'.BMP': AddResourceItem(AFileName, rtBitmap, ResName);
|
|
'.CUR': AddResourceItem(AFileName, rtCursor, ResName);
|
|
'.ICO': AddResourceItem(AFileName, rtIcon, ResName);
|
|
//'.FNT', '.FON', '.TTF': AddResourceItem(AFileName, rtFont, ResName);
|
|
else
|
|
AddResourceItem(AFileName, rtRCData, ResName);
|
|
end;
|
|
end;
|
|
|
|
function TResourcesOptionsFrame.GetTitle: string;
|
|
begin
|
|
Result := dlgPOResources;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
var
|
|
rt: TUserResourceType;
|
|
begin
|
|
ToolBar1.Images := IDEImages.Images_16;
|
|
lbResources.Column[0].Caption := rsResourceFileName;
|
|
lbResources.Column[1].Caption := rsResourceType;
|
|
lbResources.Column[2].Caption := rsResource;
|
|
btnAdd.Caption := lisBtnAdd;
|
|
btnDelete.Caption := lisBtnDelete;
|
|
btnAdd.ImageIndex := IDEImages.LoadImage(16, 'laz_add');
|
|
btnDelete.ImageIndex := IDEImages.LoadImage(16, 'laz_delete');
|
|
btnClear.Caption := lisDeleteAll;
|
|
btnClear.ImageIndex := IDEImages.LoadImage(16, 'menu_clean');
|
|
lblResourceName.Caption := rsResource + ':';
|
|
lblResourceType.Caption := rsResourceType + ':';
|
|
for rt := Low(TUserResourceType) to High(TUserResourceType) do
|
|
cbResourceType.Items.Add(ResourceTypeToStr[rt]);
|
|
// system resources can be:
|
|
// 1. Graphic files
|
|
// 2. Font files
|
|
// 3. Any files
|
|
dlgOpen.Filter := GraphicFilter(TGraphic)+'|'+Format(rsAllFiles,[GetAllFilesMask, GetAllFilesMask,'']);
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Project: TProject absolute AOptions;
|
|
List: TResourceList;
|
|
I: Integer;
|
|
begin
|
|
FProject := Project;
|
|
lbResources.Items.Clear;
|
|
List := Project.ProjResources.UserResources.List;
|
|
lbResources.Items.BeginUpdate;
|
|
try
|
|
for I := 0 to List.Count - 1 do
|
|
AddResourceItem(List[I]^.FileName, List[I]^.ResType, List[I]^.ResName);
|
|
finally
|
|
lbResources.Items.EndUpdate;
|
|
end;
|
|
btnClear.Enabled := lbResources.Items.Count > 0;
|
|
end;
|
|
|
|
procedure TResourcesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Project: TProject absolute AOptions;
|
|
I: Integer;
|
|
begin
|
|
Project.ProjResources.UserResources.List.Clear;
|
|
for I := 0 to lbResources.Items.Count - 1 do
|
|
Project.ProjResources.UserResources.List.AddResource(lbResources.Items[I].Caption,
|
|
StrToResourceType(lbResources.Items[I].SubItems[0]), lbResources.Items[I].SubItems[1]);
|
|
end;
|
|
|
|
class function TResourcesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TProject;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupProject, TResourcesOptionsFrame, ProjectOptionsResources);
|
|
|
|
end.
|
|
|