mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-28 15:02:49 +02:00
288 lines
8.3 KiB
ObjectPascal
288 lines
8.3 KiB
ObjectPascal
{
|
|
*****************************************************************************
|
|
* *
|
|
* This file is part of the EducationLaz package *
|
|
* *
|
|
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
|
|
* for details about the copyright. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
* *
|
|
*****************************************************************************
|
|
|
|
Author: Mattias Gaertner
|
|
|
|
Abstract:
|
|
Frame to setup the component palette.
|
|
}
|
|
unit EduCompPalette;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LCLProc, FileUtil, LResources, Forms, Controls, Graphics,
|
|
Dialogs, ComCtrls, ExtCtrls, StdCtrls, AvgLvlTree,
|
|
FormEditingIntf, LazConfigStorage, IDEOptionsIntf, ComponentReg,
|
|
IDEImagesIntf, LazIDEIntf,
|
|
EduOptions;
|
|
|
|
type
|
|
{ TEduComponentPaletteOptions }
|
|
|
|
TEduComponentPaletteOptions = class(TEduOptionsNode)
|
|
private
|
|
fVisible: TStringToStringTree;
|
|
function GetComponentVisible(ComponentName: string): boolean;
|
|
procedure SetComponentVisible(ComponentName: string; const AValue: boolean);
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
function Load(Config: TConfigStorage): TModalResult; override;
|
|
function Save(Config: TConfigStorage): TModalResult; override;
|
|
procedure Apply(Enable: boolean); override;
|
|
property ComponentVisible[ComponentName: string]: boolean read GetComponentVisible write SetComponentVisible;
|
|
end;
|
|
|
|
{ TEduCompPaletteFrame }
|
|
|
|
TEduCompPaletteFrame = class(TAbstractIDEOptionsEditor)
|
|
ComponentsGroupBox: TGroupBox;
|
|
ComponentsTreeView: TTreeView;
|
|
procedure ComponentsTreeViewMouseDown(Sender: TObject;
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
private
|
|
HideImgID: LongInt;
|
|
ShowImgID: LongInt;
|
|
procedure FillComponentTreeView;
|
|
procedure SaveFillComponentTreeView;
|
|
public
|
|
function GetTitle: String; override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
end;
|
|
|
|
var
|
|
EduComponentPaletteOptions: TEduComponentPaletteOptions = nil;
|
|
|
|
procedure Register;
|
|
|
|
implementation
|
|
|
|
procedure Register;
|
|
begin
|
|
EduComponentPaletteOptions:=TEduComponentPaletteOptions.Create;
|
|
EducationOptions.Root.Add(EduComponentPaletteOptions);
|
|
RegisterIDEOptionsEditor(EduOptionID,TEduCompPaletteFrame,EduOptionCompPaletteID);
|
|
end;
|
|
|
|
{ TEduCompPaletteFrame }
|
|
|
|
procedure TEduCompPaletteFrame.ComponentsTreeViewMouseDown(Sender: TObject;
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
var
|
|
Node: TTreeNode;
|
|
Hit: THitTests;
|
|
begin
|
|
if Button<>mbLeft then exit;
|
|
Node:=ComponentsTreeView.GetNodeAt(X,Y);
|
|
if (Node=nil) then exit;
|
|
if Node.Parent=nil then exit;
|
|
Hit:=ComponentsTreeView.GetHitTestInfoAt(X,Y);
|
|
if htOnStateIcon in Hit then begin
|
|
if Node.StateIndex=ShowImgID then
|
|
Node.StateIndex:=HideImgID
|
|
else
|
|
Node.StateIndex:=ShowImgID;
|
|
end;
|
|
end;
|
|
|
|
procedure TEduCompPaletteFrame.FillComponentTreeView;
|
|
var
|
|
i: Integer;
|
|
Page: TBaseComponentPage;
|
|
j: Integer;
|
|
Comp: TRegisteredComponent;
|
|
PageNode: TTreeNode;
|
|
CompNode: TTreeNode;
|
|
ResHandle: TLResource;
|
|
Image: TCustomBitmap;
|
|
CompName: String;
|
|
begin
|
|
if ComponentsTreeView.Images=nil then begin
|
|
ComponentsTreeView.Images:=TImageList.Create(Self);
|
|
ComponentsTreeView.Images.Width:=ComponentPaletteImageWidth;
|
|
ComponentsTreeView.Images.Height:=ComponentPaletteImageHeight;
|
|
ComponentsTreeView.StateImages:=IDEImages.Images_16;
|
|
end else
|
|
ComponentsTreeView.Images.Clear;
|
|
ShowImgID:=IDEImages.LoadImage(16,'menu_run');
|
|
HideImgID:=IDEImages.LoadImage(16,'menu_stop');
|
|
ComponentsTreeView.BeginUpdate;
|
|
ComponentsTreeView.Items.Clear;
|
|
for i:=0 to IDEComponentPalette.Count-1 do begin
|
|
Page:=IDEComponentPalette[i];
|
|
if Page.PageName='' then continue;
|
|
PageNode:=ComponentsTreeView.Items.Add(nil,Page.PageName);
|
|
for j:=0 to Page.Count-1 do begin
|
|
Comp:=Page[j];
|
|
CompName:=Comp.ComponentClass.ClassName;
|
|
CompNode:=ComponentsTreeView.Items.AddChild(PageNode,CompName);
|
|
ResHandle := LazarusResources.Find(CompName);
|
|
if ResHandle <> nil then
|
|
Image := CreateBitmapFromLazarusResource(ResHandle)
|
|
else
|
|
Image := nil;
|
|
if Image = nil then
|
|
Image := CreateBitmapFromLazarusResource('default');
|
|
CompNode.ImageIndex:=ComponentsTreeView.Images.Add(Image,nil);
|
|
Image.Free;
|
|
CompNode.SelectedIndex:=CompNode.ImageIndex;
|
|
if EduComponentPaletteOptions.ComponentVisible[CompName] then
|
|
CompNode.StateIndex:=ShowImgID
|
|
else
|
|
CompNode.StateIndex:=HideImgID;
|
|
end;
|
|
PageNode.Expanded:=true;
|
|
end;
|
|
ComponentsTreeView.EndUpdate;
|
|
end;
|
|
|
|
procedure TEduCompPaletteFrame.SaveFillComponentTreeView;
|
|
var
|
|
Node: TTreeNode;
|
|
CompName: String;
|
|
begin
|
|
Node:=ComponentsTreeView.Items.GetFirstNode;
|
|
while Node<>nil do begin
|
|
if Node.Parent<>nil then begin
|
|
CompName:=Node.Text;
|
|
EduComponentPaletteOptions.ComponentVisible[CompName]:=
|
|
Node.StateIndex=ShowImgID;
|
|
end else begin
|
|
|
|
end;
|
|
Node:=Node.GetNext;
|
|
end;
|
|
end;
|
|
|
|
function TEduCompPaletteFrame.GetTitle: String;
|
|
begin
|
|
Result:='Component palette';
|
|
end;
|
|
|
|
procedure TEduCompPaletteFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TEduCompPaletteFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
ComponentsGroupBox.Caption:='Visible components';
|
|
FillComponentTreeView;
|
|
end;
|
|
|
|
class function TEduCompPaletteFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result:=nil;
|
|
end;
|
|
|
|
procedure TEduCompPaletteFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
SaveFillComponentTreeView;
|
|
end;
|
|
|
|
{ TEduComponentPaletteOptions }
|
|
|
|
function TEduComponentPaletteOptions.GetComponentVisible(ComponentName: string
|
|
): boolean;
|
|
begin
|
|
Result:=fVisible[ComponentName]='1';
|
|
end;
|
|
|
|
procedure TEduComponentPaletteOptions.SetComponentVisible(
|
|
ComponentName: string; const AValue: boolean);
|
|
begin
|
|
if AValue then
|
|
fVisible[ComponentName]:='1'
|
|
else
|
|
fVisible.Delete(ComponentName);
|
|
end;
|
|
|
|
constructor TEduComponentPaletteOptions.Create;
|
|
begin
|
|
inherited Create;
|
|
Name:='ComponentPalette';
|
|
fVisible:=TStringToStringTree.Create(false);
|
|
end;
|
|
|
|
destructor TEduComponentPaletteOptions.Destroy;
|
|
begin
|
|
FreeAndNil(fVisible);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TEduComponentPaletteOptions.Load(Config: TConfigStorage
|
|
): TModalResult;
|
|
var
|
|
Cnt: LongInt;
|
|
i: Integer;
|
|
ComponentName: String;
|
|
begin
|
|
fVisible.Clear;
|
|
Cnt:=Config.GetValue('Visible/Count',0);
|
|
for i:=1 to Cnt do begin
|
|
ComponentName:=Config.GetValue('Visible/Item'+IntToStr(i),'');
|
|
if ComponentName='' then continue;
|
|
fVisible[ComponentName]:='1';
|
|
end;
|
|
Result:=inherited Load(Config);
|
|
end;
|
|
|
|
function TEduComponentPaletteOptions.Save(Config: TConfigStorage
|
|
): TModalResult;
|
|
var
|
|
Node: TAvgLvlTreeNode;
|
|
Item: PStringToStringItem;
|
|
Cnt: Integer;
|
|
begin
|
|
Cnt:=0;
|
|
Node:=fVisible.Tree.FindLowest;
|
|
while Node<>nil do begin
|
|
inc(Cnt);
|
|
Item:=PStringToStringItem(Node.Data);
|
|
Config.SetDeleteValue('Visible/Item'+IntToStr(Cnt),Item^.Name,'');
|
|
Node:=fVisible.Tree.FindSuccessor(Node);
|
|
end;
|
|
Config.SetDeleteValue('Visible/Count',Cnt,0);
|
|
Result:=inherited Save(Config);
|
|
end;
|
|
|
|
procedure TEduComponentPaletteOptions.Apply(Enable: boolean);
|
|
var
|
|
i: Integer;
|
|
Page: TBaseComponentPage;
|
|
j: Integer;
|
|
Comp: TRegisteredComponent;
|
|
begin
|
|
inherited Apply(Enable);
|
|
for i:=0 to IDEComponentPalette.Count-1 do begin
|
|
Page:=IDEComponentPalette[i];
|
|
for j:=0 to Page.Count-1 do begin
|
|
Comp:=Page[j];
|
|
Comp.Visible:=(not Enable) or ComponentVisible[Comp.ComponentClass.ClassName];
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
{$I educomppalette.lrs}
|
|
|
|
end.
|
|
|