mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 19:35:58 +02:00
- added interfaces to common IDE imagelists
- IDE main menu switched from using bitmap per item to one imagelist git-svn-id: trunk@11045 -
This commit is contained in:
parent
e19a42fc45
commit
48cce57d5d
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1652,6 +1652,7 @@ ideintf/idecommands.pas svneol=native#text/pascal
|
||||
ideintf/idedialogs.pas svneol=native#text/plain
|
||||
ideintf/ideexterntoolintf.pas svneol=native#text/plain
|
||||
ideintf/idehelpintf.pas svneol=native#text/plain
|
||||
ideintf/ideimagesintf.pas svneol=native#text/pascal
|
||||
ideintf/idemsgintf.pas svneol=native#text/plain
|
||||
ideintf/idetextconverter.pas svneol=native#text/plain
|
||||
ideintf/idewindowintf.pas svneol=native#text/plain
|
||||
|
@ -172,6 +172,8 @@ var
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
IDEImagesIntf;
|
||||
|
||||
{ TMainIDEBase }
|
||||
|
||||
@ -270,7 +272,7 @@ begin
|
||||
MenuItem.Enabled:=mnuEnabled;
|
||||
MenuItem.Checked:=mnuChecked;
|
||||
if bmpName<>'' then
|
||||
MenuItem.Bitmap.LoadFromLazarusResource(bmpName);
|
||||
MenuItem.ImageIndex := IDEImages.LoadImage(16, bmpName);
|
||||
end;
|
||||
|
||||
procedure TMainIDEBase.CreateMenuSeparatorSection(
|
||||
@ -287,7 +289,7 @@ procedure TMainIDEBase.CreateMenuSubSection(ParentSection: TIDEMenuSection;
|
||||
begin
|
||||
Section:=RegisterIDESubMenu(ParentSection,AName,ACaption);
|
||||
if bmpName<>'' then
|
||||
Section.Bitmap.LoadFromLazarusResource(bmpName);
|
||||
Section.ImageIndex := IDEImages.LoadImage(16, bmpName);
|
||||
end;
|
||||
|
||||
procedure TMainIDEBase.CreateMainMenuItem(var Section: TIDEMenuSection;
|
||||
@ -299,6 +301,7 @@ end;
|
||||
procedure TMainIDEBase.SetupMainMenu;
|
||||
begin
|
||||
MainIDEBar.mnuMainMenu := TMainMenu.Create(MainIDEBar);
|
||||
MainIDEBar.mnuMainMenu.Images := IDEImages.Images_16;
|
||||
with MainIDEBar do begin
|
||||
mnuMain:=RegisterIDEMenuRoot('IDEMainMenu',nil);
|
||||
CreateMainMenuItem(mnuFile,'File',lisMenuFile);
|
||||
@ -1046,3 +1049,4 @@ end;
|
||||
|
||||
end.
|
||||
|
||||
|
||||
|
@ -35,6 +35,7 @@ uses
|
||||
IDEDialogs,
|
||||
IDEExternToolIntf,
|
||||
IDEHelpIntf,
|
||||
IDEImagesIntf,
|
||||
IDEMsgIntf,
|
||||
IDETextConverter,
|
||||
IDEWindowIntf,
|
||||
|
175
ideintf/ideimagesintf.pas
Normal file
175
ideintf/ideimagesintf.pas
Normal file
@ -0,0 +1,175 @@
|
||||
unit IDEImagesIntf;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
uses
|
||||
Classes, SysUtils, ImgList, Controls, Graphics, LResources;
|
||||
|
||||
type
|
||||
|
||||
{ TIDEImages }
|
||||
|
||||
TIDEImages = class
|
||||
private
|
||||
FImages_16: TCustomImageList;
|
||||
FImages_24: TCustomImageList;
|
||||
FImageNames_16: TStringList;
|
||||
FImageNames_24: TStringList;
|
||||
protected
|
||||
function GetImages_16: TCustomImageList;
|
||||
function GetImages_24: TCustomImageList;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
|
||||
function GetImageIndex(ImageSize: Integer; ImageName: String): Integer;
|
||||
function LoadImage(ImageSize: Integer; ImageName: String): Integer;
|
||||
|
||||
property Images_16: TCustomImageList read GetImages_16;
|
||||
property Images_24: TCustomImageList read GetImages_24;
|
||||
end;
|
||||
|
||||
function IDEImages: TIDEImages;
|
||||
|
||||
implementation
|
||||
|
||||
var
|
||||
FIDEImages: TIDEImages;
|
||||
|
||||
{ TIDEImages }
|
||||
|
||||
function TIDEImages.GetImages_16: TCustomImageList;
|
||||
begin
|
||||
if FImages_16 = nil then
|
||||
begin
|
||||
FImages_16 := TImageList.Create(nil);
|
||||
FImages_16.Width := 16;
|
||||
FImages_16.Height := 16;
|
||||
end;
|
||||
Result := FImages_16;
|
||||
end;
|
||||
|
||||
function TIDEImages.GetImages_24: TCustomImageList;
|
||||
begin
|
||||
if FImages_24 = nil then
|
||||
begin
|
||||
FImages_24 := TImageList.Create(nil);
|
||||
FImages_24.Width := 24;
|
||||
FImages_24.Height := 24;
|
||||
end;
|
||||
Result := FImages_24;
|
||||
end;
|
||||
|
||||
constructor TIDEImages.Create;
|
||||
begin
|
||||
FImages_16 := nil;
|
||||
FImages_24 := nil;
|
||||
FImageNames_16 := TStringList.Create;
|
||||
FImageNames_16.Sorted := True;
|
||||
FImageNames_16.Duplicates := dupIgnore;
|
||||
FImageNames_24 := TStringList.Create;
|
||||
FImageNames_24.Sorted := True;
|
||||
FImageNames_24.Duplicates := dupIgnore;
|
||||
end;
|
||||
|
||||
destructor TIDEImages.Destroy;
|
||||
begin
|
||||
FImages_16.Free;
|
||||
FImages_24.Free;
|
||||
FImageNames_16.Free;
|
||||
FImageNames_24.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TIDEImages.GetImageIndex(ImageSize: Integer; ImageName: String): Integer;
|
||||
var
|
||||
List: TStringList;
|
||||
begin
|
||||
case ImageSize of
|
||||
16: List := FImageNames_16;
|
||||
24: List := FImageNames_24;
|
||||
else
|
||||
List := nil;
|
||||
end;
|
||||
if List <> nil then
|
||||
begin
|
||||
Result := List.IndexOf(ImageName);
|
||||
if Result <> -1 then
|
||||
Result := Integer(List.Objects[Result]);
|
||||
end
|
||||
else
|
||||
Result := -1;
|
||||
end;
|
||||
|
||||
function TIDEImages.LoadImage(ImageSize: Integer; ImageName: String): Integer;
|
||||
var
|
||||
List: TCustomImageList;
|
||||
Names: TStringList;
|
||||
Graphic: TGraphic;
|
||||
GraphicClass: TGraphicClass;
|
||||
Res: TLResource;
|
||||
Stream: TStream;
|
||||
begin
|
||||
Result := GetImageIndex(ImageSize, ImageName);
|
||||
if Result = -1 then
|
||||
begin
|
||||
List := nil;
|
||||
Names := nil;
|
||||
case ImageSize of
|
||||
16:
|
||||
begin
|
||||
List := FImages_16;
|
||||
Names := FImageNames_16;
|
||||
end;
|
||||
24:
|
||||
begin
|
||||
List := FImages_24;
|
||||
Names := FImageNames_24;
|
||||
end;
|
||||
end;
|
||||
|
||||
if List <> nil then
|
||||
begin
|
||||
Res := LazarusResources.Find(ImageName);
|
||||
if (Res <> nil) and (Res.Value <> '') then
|
||||
begin
|
||||
GraphicClass := GetGraphicClassForFileExtension(Res.ValueType);
|
||||
if GraphicClass <> nil then
|
||||
begin
|
||||
Graphic := GraphicClass.Create;
|
||||
if Graphic is TBitmap then
|
||||
try
|
||||
Stream := TMemoryStream.Create;
|
||||
try
|
||||
Stream.Write(Res.Value[1], length(Res.Value));
|
||||
Stream.Position := 0;
|
||||
Graphic.LoadFromStream(Stream);
|
||||
Result := List.Add(TBitmap(Graphic), nil);
|
||||
Names.AddObject(ImageName, TObject(Result));
|
||||
finally
|
||||
Stream.Free;
|
||||
end;
|
||||
finally
|
||||
Graphic.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function IDEImages: TIDEImages;
|
||||
begin
|
||||
if FIDEImages = nil then
|
||||
FIDEImages := TIDEImages.Create;
|
||||
Result := FIDEImages;
|
||||
end;
|
||||
|
||||
initialization
|
||||
FIDEImages := nil;
|
||||
|
||||
finalization
|
||||
FIDEImages.Free;
|
||||
|
||||
end.
|
Loading…
Reference in New Issue
Block a user