mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 14:19:10 +02:00
educationlaz: implemented hiding menu items
git-svn-id: trunk@22241 -
This commit is contained in:
parent
1a06444518
commit
5ea22214c6
@ -38,7 +38,7 @@ type
|
|||||||
|
|
||||||
TEduGeneralOptions = class(TEduOptionsNode)
|
TEduGeneralOptions = class(TEduOptionsNode)
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create; override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
function Load(Config: TConfigStorage): TModalResult; override;
|
function Load(Config: TConfigStorage): TModalResult; override;
|
||||||
function Save(Config: TConfigStorage): TModalResult; override;
|
function Save(Config: TConfigStorage): TModalResult; override;
|
||||||
|
@ -45,6 +45,8 @@ type
|
|||||||
function Load(Config: TConfigStorage): TModalResult; override;
|
function Load(Config: TConfigStorage): TModalResult; override;
|
||||||
function Save(Config: TConfigStorage): TModalResult; override;
|
function Save(Config: TConfigStorage): TModalResult; override;
|
||||||
function MenuItemToPath(Item: TIDEMenuItem): string;
|
function MenuItemToPath(Item: TIDEMenuItem): string;
|
||||||
|
function FindItemWithPath(Path: string): TIDEMenuItem;
|
||||||
|
function KeepItemVisible(Item: TIDEMenuItem): boolean;
|
||||||
procedure Apply(Enable: boolean); override;
|
procedure Apply(Enable: boolean); override;
|
||||||
property MenuHidden[MenuPath: string]: boolean read GetMenuHidden write SetMenuHidden;
|
property MenuHidden[MenuPath: string]: boolean read GetMenuHidden write SetMenuHidden;
|
||||||
end;
|
end;
|
||||||
@ -200,12 +202,33 @@ end;
|
|||||||
procedure TEduMenuFrame.SaveMenuTree;
|
procedure TEduMenuFrame.SaveMenuTree;
|
||||||
var
|
var
|
||||||
TVNode: TTreeNode;
|
TVNode: TTreeNode;
|
||||||
|
NewHide: Boolean;
|
||||||
|
OldHide: boolean;
|
||||||
|
Item: TIDEMenuItem;
|
||||||
|
Path: String;
|
||||||
|
OldHidden: TStringToStringTree;
|
||||||
begin
|
begin
|
||||||
EduMenuOptions.ClearHMenuidden;
|
OldHidden:=TStringToStringTree.Create(false);
|
||||||
TVNode:=MenusTreeView.Items.GetFirstNode;
|
try
|
||||||
while TVNode<>nil do begin
|
OldHidden.Assign(EduMenuOptions.fHidden);
|
||||||
EduMenuOptions.MenuHidden[TVNodeToIDEMenuPath(TVNode)]:=TVNode.StateIndex=HideImgID;
|
EduMenuOptions.ClearHMenuidden;
|
||||||
TVNode:=TVNode.GetNext;
|
TVNode:=MenusTreeView.Items.GetFirstNode;
|
||||||
|
while TVNode<>nil do begin
|
||||||
|
NewHide:=TVNode.StateIndex=HideImgID;
|
||||||
|
Path:=TVNodeToIDEMenuPath(TVNode);
|
||||||
|
OldHide:=OldHidden.Contains(Path);
|
||||||
|
EduMenuOptions.MenuHidden[Path]:=NewHide;
|
||||||
|
if NewHide<>OldHide then begin
|
||||||
|
Item:=EduMenuOptions.FindItemWithPath(Path);
|
||||||
|
if (Item<>nil) and (not EduMenuOptions.KeepItemVisible(Item)) then begin
|
||||||
|
Item.Visible:=not NewHide;
|
||||||
|
//debugln(['TEduMenuFrame.SaveMenuTree changed visibility: ',Item.GetPath,' visible=',Item.Visible,' Path=',Path,' OldHide=',OldHide,' NewHide=',NewHide]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
TVNode:=TVNode.GetNext;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
OldHidden.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -224,10 +247,8 @@ procedure TEduMenuFrame.UpdateTVNodeImage(TVNode: TTreeNode);
|
|||||||
|
|
||||||
function ContainsHiddenNode(Node: TTreeNode): boolean;
|
function ContainsHiddenNode(Node: TTreeNode): boolean;
|
||||||
begin
|
begin
|
||||||
if (Node.StateIndex=HideImgID) and (Node<>TVNode) then begin
|
if (Node.StateIndex=HideImgID) and (Node<>TVNode) then
|
||||||
debugln(['ContainsHiddenNode hidden Node=',Node.Text,' tvNode=',TVNode.Text]);
|
|
||||||
exit(true);
|
exit(true);
|
||||||
end;
|
|
||||||
Node:=Node.GetFirstChild;
|
Node:=Node.GetFirstChild;
|
||||||
while Node<>nil do begin
|
while Node<>nil do begin
|
||||||
if ContainsHiddenNode(Node) then exit(true);
|
if ContainsHiddenNode(Node) then exit(true);
|
||||||
@ -236,11 +257,8 @@ procedure TEduMenuFrame.UpdateTVNodeImage(TVNode: TTreeNode);
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
|
||||||
OldStateIndex: LongInt;
|
|
||||||
begin
|
begin
|
||||||
if TVNode=nil then exit;
|
if TVNode=nil then exit;
|
||||||
OldStateIndex:=TVNode.StateIndex;
|
|
||||||
if TVNode.StateIndex=HideImgID then
|
if TVNode.StateIndex=HideImgID then
|
||||||
TVNode.StateIndex:=HideImgID
|
TVNode.StateIndex:=HideImgID
|
||||||
else if ContainsHiddenNode(TVNode) then
|
else if ContainsHiddenNode(TVNode) then
|
||||||
@ -380,10 +398,40 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TEduMenuOptions.FindItemWithPath(Path: string): TIDEMenuItem;
|
||||||
|
begin
|
||||||
|
Result:=IDEMenuRoots.FindByPath(Path,false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TEduMenuOptions.KeepItemVisible(Item: TIDEMenuItem): boolean;
|
||||||
|
begin
|
||||||
|
if (Item=mnuEnvironment) or (Item.HasAsParent(mnuEnvironment)) then exit(true);
|
||||||
|
Result:=false;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TEduMenuOptions.Apply(Enable: boolean);
|
procedure TEduMenuOptions.Apply(Enable: boolean);
|
||||||
|
|
||||||
|
procedure ApplyRecursive(Item: TIDEMenuItem);
|
||||||
|
var
|
||||||
|
Section: TIDEMenuSection;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
if (not KeepItemVisible(Item)) and MenuHidden[MenuItemToPath(Item)] then
|
||||||
|
Item.Visible:=false;
|
||||||
|
// Note: do not show items. Some items should be hidden independent of education.
|
||||||
|
if Item is TIDEMenuSection then begin
|
||||||
|
Section:=TIDEMenuSection(Item);
|
||||||
|
for i:=0 to Section.Count-1 do
|
||||||
|
ApplyRecursive(Section[i]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
inherited Apply(Enable);
|
inherited Apply(Enable);
|
||||||
// ToDo
|
for i:=0 to IDEMenuRoots.Count-1 do
|
||||||
|
ApplyRecursive(IDEMenuRoots[i]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
@ -90,6 +90,7 @@ type
|
|||||||
function GetContainerSection: TIDEMenuSection;
|
function GetContainerSection: TIDEMenuSection;
|
||||||
function GetContainerMenuItem: TMenuItem;
|
function GetContainerMenuItem: TMenuItem;
|
||||||
function Size: integer; virtual;
|
function Size: integer; virtual;
|
||||||
|
function HasAsParent(Item: TIDEMenuItem): boolean;
|
||||||
procedure WriteDebugReport(const Prefix: string;
|
procedure WriteDebugReport(const Prefix: string;
|
||||||
MenuItemDebugReport: boolean); virtual;
|
MenuItemDebugReport: boolean); virtual;
|
||||||
procedure ConsistencyCheck; virtual;
|
procedure ConsistencyCheck; virtual;
|
||||||
@ -797,6 +798,18 @@ begin
|
|||||||
Result:=FSize;
|
Result:=FSize;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TIDEMenuItem.HasAsParent(Item: TIDEMenuItem): boolean;
|
||||||
|
var
|
||||||
|
CurItem: TIDEMenuSection;
|
||||||
|
begin
|
||||||
|
CurItem:=Section;
|
||||||
|
while CurItem<>nil do begin
|
||||||
|
if CurItem=Item then exit(true);
|
||||||
|
CurItem:=CurItem.Section;
|
||||||
|
end;
|
||||||
|
Result:=false;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIDEMenuItem.WriteDebugReport(const Prefix: string;
|
procedure TIDEMenuItem.WriteDebugReport(const Prefix: string;
|
||||||
MenuItemDebugReport: boolean);
|
MenuItemDebugReport: boolean);
|
||||||
begin
|
begin
|
||||||
|
@ -192,6 +192,7 @@ type
|
|||||||
constructor Create(const ACompareItems, ACompareNameWithItem: TListSortCompare);
|
constructor Create(const ACompareItems, ACompareNameWithItem: TListSortCompare);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
|
procedure Assign(Src: TStringToStringTree);
|
||||||
function Contains(const Name: string): Boolean;
|
function Contains(const Name: string): Boolean;
|
||||||
procedure Delete(const Name: string);
|
procedure Delete(const Name: string);
|
||||||
procedure Add(const Name, Value, Delimiter: string);
|
procedure Add(const Name, Value, Delimiter: string);
|
||||||
@ -1428,6 +1429,21 @@ begin
|
|||||||
FItems.Clear;
|
FItems.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TStringToStringTree.Assign(Src: TStringToStringTree);
|
||||||
|
var
|
||||||
|
Node: TAvgLvlTreeNode;
|
||||||
|
Item: PStringToStringItem;
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
if Src=nil then exit;
|
||||||
|
Node:=Src.Tree.FindLowest;
|
||||||
|
while Node<>nil do begin
|
||||||
|
Item:=PStringToStringItem(Node.Data);
|
||||||
|
Values[Item^.Name]:=Item^.Value;
|
||||||
|
Node:=Src.Tree.FindSuccessor(Node);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TStringToStringTree.Contains(const Name: string): Boolean;
|
function TStringToStringTree.Contains(const Name: string): Boolean;
|
||||||
begin
|
begin
|
||||||
Result:=FindNode(Name)<>nil;
|
Result:=FindNode(Name)<>nil;
|
||||||
|
Loading…
Reference in New Issue
Block a user