This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
AlonsoYSal_FactuGES/Cliente/uMenuUtils.pas
2007-06-21 16:02:50 +00:00

180 lines
4.5 KiB
ObjectPascal

unit uMenuUtils;
interface
uses
Forms, ImgList, ActnList, JvPageList, JvNavigationPane, Menus;
procedure MergeMenus(Source, Dest: TMainMenu; ImageIndex : Integer = -1);
procedure SortMenuByTag(Menu : TMainMenu);
function CreatePageNavPane(const APageList : TJvCustomPageList;
ACaption : String; AAction : TAction; AImageIndex : Integer): Integer;
procedure PopulateNavPagePane(APanePage : TJvNavPanelPage;
AMenuItem: TMenuItem; AImageList : TCustomImageList;
AStyleManager : TJvNavPaneStyleManager);
implementation
uses
Controls, ComCtrls, Classes, Math, TBXDkPanels, StrUtils, SysUtils,
ExtCtrls;
type
TAssignCallback = procedure(Source, Dest: TMenuItem);
procedure AssignMenus(Source, Dest: TMenuItem; AImageIndex : Integer;
AssignProc: TAssignCallback);
var
I: Integer;
Item: TMenuItem;
begin
for I := 0 to Source.Count - 1 do
begin
Item := Dest.Find(Source.Items[I].Caption);
if Item = NIL then
begin
Item := TMenuItem.Create(Dest);
Dest.Add(Item);
if Assigned(AssignProc) then
begin
AssignProc(Source.Items[I], Item);
if (Source.Items[I].ImageIndex >= 0) then
Item.ImageIndex := Source.Items[I].ImageIndex + AImageIndex;
end;
end;
AssignMenus(Source.Items[I], Item, AImageIndex, AssignProc);
end;
end;
procedure AssignMenuItem(Source, Dest: TMenuItem);
begin
Dest.Caption := Source.Caption;
Dest.Hint := Source.Hint;
Dest.Checked := Source.Checked;
Dest.GroupIndex := Source.GroupIndex;
Dest.Tag := Source.Tag;
Dest.Action := Source.Action;
Dest.ImageIndex := Source.ImageIndex;
Dest.ShortCut := Source.ShortCut;
Dest.RadioItem := Source.RadioItem;
Dest.AutoCheck := Source.AutoCheck;
Dest.AutoHotkeys := Source.AutoHotkeys;
Dest.AutoLineReduction := Source.AutoLineReduction;
Dest.Break := Source.Break;
Dest.Default := Source.Default;
Dest.Enabled := Source.Enabled;
Dest.HelpContext := Source.HelpContext;
Dest.Visible := Source.Visible;
end;
procedure SortMenuItems(MenuItems : TMenuItem);
function CompareTags(Item1, Item2: Pointer): Integer;
begin
Result := CompareValue(TMenuItem(Item1).Tag, TMenuItem(Item2).Tag);
end;
var
I: Integer;
AList : TList;
begin
AList := TList.Create;
try
for I := 0 to MenuItems.Count - 1 do
begin
SortMenuItems(MenuItems.Items[i]);
AList.Add(Pointer(MenuItems.Items[i]));
end;
AList.Sort(@CompareTags);
for i := 0 to AList.Count - 1 do
TMenuItem(AList.Items[i]).MenuIndex := i;
finally
AList.Free;
end;
end;
procedure MergeMenus(Source, Dest: TMainMenu; ImageIndex : Integer = -1);
begin
AssignMenus(Source.Items, Dest.Items, ImageIndex, AssignMenuItem);
end;
procedure SortMenuByTag(Menu : TMainMenu);
begin
SortMenuItems(Menu.Items);
end;
function CreatePageNavPane(const APageList : TJvCustomPageList;
ACaption : String; AAction : TAction; AImageIndex : Integer): Integer;
var
APanePage: TJvNavPanelPage;
begin
Result := 0;
APanePage := TJvNavPanelPage.Create(Application);
with APanePage do
begin
Caption := StringReplace(ACaption, '&', '', []);
Action := AAction;
PageList := APageList;
Iconic := False;
ImageIndex := AImageIndex;
Result := PageIndex;
end;
end;
procedure PopulateNavPagePane(APanePage : TJvNavPanelPage;
AMenuItem: TMenuItem; AImageList : TCustomImageList;
AStyleManager : TJvNavPaneStyleManager);
var
APanel : TScrollBox;
ItemIndex : Integer;
begin
with TJvNavPanelDivider.Create(Application) do
begin
Parent := APanePage;
Caption := 'Accesos directos';
ParentStyleManager := True;
Align := alTop;
end;
APanel := TScrollBox.Create(Application);
with APanel do
begin
BevelEdges := [];
BorderStyle := bsNone;
Parent := APanePage;
ParentColor := True;
ParentFont := True;
Align := alClient;
end;
for ItemIndex := 0 to (AMenuItem.Count - 1) do
begin
if AMenuItem[ItemIndex].Caption <> '-' then
with TJvNavPanelButton.Create(Application) do
begin
Parent := APanel;
Align := alTop;
Tag := AMenuItem[ItemIndex].Tag;
Caption := AMenuItem[ItemIndex].Caption;
Action := AMenuItem[ItemIndex].Action;
Images := AImageList;
ImageIndex := AMenuItem[ItemIndex].ImageIndex;
Height := 32;
StyleManager := AStyleManager;
Invalidate;
end;
end;
end;
end.