- 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:
paul 2007-05-02 08:55:41 +00:00
parent e19a42fc45
commit 48cce57d5d
4 changed files with 183 additions and 2 deletions

1
.gitattributes vendored
View File

@ -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

View File

@ -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.

View File

@ -35,6 +35,7 @@ uses
IDEDialogs,
IDEExternToolIntf,
IDEHelpIntf,
IDEImagesIntf,
IDEMsgIntf,
IDETextConverter,
IDEWindowIntf,

175
ideintf/ideimagesintf.pas Normal file
View 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.