lazarus/components/editortoolbar/edttbconfigfrm.pas
juha e873d7c3ec EditorToolbar: Cleanup by G. Colla.
git-svn-id: trunk@46417 -
2014-10-03 20:08:35 +00:00

908 lines
24 KiB
ObjectPascal

{
Copyright (C) 2007 Graeme Geldenhuys (graemeg@gmail.com)
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
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. See the GNU Library General Public License
for more details.
You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
}
unit EdtTbConfigFrm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Buttons, StdCtrls, ComCtrls, Menus, MenuIntf, editortoolbar_str,
TreeFilterEdit;
type
{ TLvItem }
TLvItem = class (TObject)
Item: TIDEMenuItem;
LvIndex: Integer;
Profile: Integer;
end;
{ TEdtTbConfigForm }
TEdtTbConfigForm = class(TForm)
Bevel1: TBevel;
btnHelp: TBitBtn;
btnAdd: TSpeedButton;
btnMoveDown: TSpeedButton;
btnMoveUp: TSpeedButton;
btnOK: TButton;
btnCancel: TButton;
btnRemove: TSpeedButton;
btnShow: TButton;
btnHide: TButton;
cbPos: TComboBox;
cbProfile: TComboBox;
lblProfile: TLabel;
lbSelect: TLabel;
lblpos: TLabel;
lblMenuTree: TLabel;
lblToolbar: TLabel;
lvToolbar: TListView;
miAll: TMenuItem;
miDesign: TMenuItem;
miDebug: TMenuItem;
miHTML: TMenuItem;
miCustom: TMenuItem;
pnlButtons: TPanel;
FilterEdit: TTreeFilterEdit;
puMenuItems: TPopupMenu;
sbAddDivider: TSpeedButton;
btnClear: TSpeedButton;
Splitter1: TSplitter;
TV: TTreeView;
procedure btnClearClick(Sender: TObject);
procedure btnHelpClick(Sender: TObject);
procedure btnShowClick(Sender: TObject);
procedure btnHideClick(Sender: TObject);
procedure cbPosChange(Sender: TObject);
procedure cbProfileChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure lbToolbarSelectionChange(Sender: TObject; User: boolean);
procedure btnAddClick(Sender: TObject);
procedure btnAddDividerClick(Sender: TObject);
procedure btnMoveDownClick(Sender: TObject);
procedure btnMoveUpClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnRemoveClick(Sender: TObject);
procedure lvToolbarSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure miAllClick(Sender: TObject);
procedure miCustomClick(Sender: TObject);
procedure miDebugClick(Sender: TObject);
procedure miDesignClick(Sender: TObject);
procedure miHTMLClick(Sender: TObject);
procedure puMenuItemsPopup(Sender: TObject);
procedure TVSelectionChanged(Sender: TObject);
private
FToolBarPos: string;
FToolBarShow: boolean;
defImageIndex: integer;
divImageIndex: Integer;
// Main list related entries
MainList: TStringList;
function GetMainListIndex(Item: TListItem): Integer;
procedure UpdateMainListProfile(Item: TListItem);
procedure InsertMainListItem (Item,NextItem: TListItem);
procedure RemoveMainListItem (Item:TListItem);
procedure ExchangeMainListItem (Item1,Item2: TListItem);
procedure SetupCaptions;
procedure LoadCategories;
procedure LoadSettings;
procedure LoadStyleSettings;
procedure SaveSettings;
procedure AddMenuItem(ParentNode: TTreeNode; Item: TIDEMenuItem; Level: Integer);
function RootNodeCaption(Item: TIDEMenuItem): string;
procedure AddListItem(Item: TIDEMenuItem; PMask: Integer);
procedure AddToolBarItem(Item: TIDEMenuItem; PMask: Integer);
procedure AddDivider(PMask: Integer);
procedure FillToolBar;
procedure ReloadToolBar;
public
class function Execute: boolean;
class procedure Setup;
class procedure UpdateVisible(NewStatus: Boolean);
end;
Var
sPosValues: array[0..3] of string = ('Top','Bottom','Right','Left');
sLocalizedPosValues: array[0..3] of string;
CurrProfile: Integer;
implementation
{$R *.lfm}
uses
editortoolbar_impl, LazConfigStorage, BaseIDEIntf, LazIDEIntf, IDEImagesIntf,LCLProc;
{
Function IndexFromLocalized (var AValue: string): Integer;
var
i:Integer;
begin
for i:= 0 to 3 do begin
if AValue = sLocalizedPosValues[i] then begin
Result := I;
exit;
end;
end;
Result := 0; // default is Top
end;
}
Function IndexFromEnglish (var AValue: string): Integer;
var
i:Integer;
begin
for i:= 0 to 3 do begin
if AValue = sPosValues[i] then begin
Result := I;
exit;
end;
end;
Result := 0; // default is Top
end;
{ TEdtTbConfigForm }
procedure TEdtTbConfigForm.FormCreate(Sender: TObject);
begin
inherited;
pnlButtons.Color := clBtnFace;
// load button images
btnAdd.LoadGlyphFromResourceName(HInstance, 'arrow_right');
btnRemove.LoadGlyphFromResourceName(HInstance, 'arrow_left');
btnMoveUp.LoadGlyphFromResourceName(HInstance, 'arrow_up');
btnMoveDown.LoadGlyphFromResourceName(HInstance, 'arrow_down');
btnClear.LoadGlyphFromResourceName(HINSTANCE,'menu_close');
btnHelp.LoadGlyphFromResourceName(HINSTANCE, 'menu_help');
sbAddDivider.LoadGlyphFromResourceName(HINSTANCE, 'menu_divider16');
btnAdd.Hint := rsAddSelected;
btnRemove.Hint := rsRemoveSelected;
btnMoveUp.Hint := rsMoveSelectedUp;
btnMoveDown.Hint := rsMoveSelectedDown;
sbAddDivider.Hint:= rsAddDivider;
btnClear.Hint := rsClearSelection;
TV.Images := IDEImages.Images_16;
lvToolbar.SmallImages := IDEImages.Images_16;
// default image to be used when none is available
defImageIndex := IDEImages.LoadImage(16, 'execute16');
// Image for divider
divImageIndex := IDEImages.Images_16.Add(sbAddDivider.Glyph,nil);
MainList := TStringList.Create;
MainList.OwnsObjects:= True; // it should be the default, but just to make sure...
SetupCaptions;
LoadStyleSettings;
LoadCategories;
LoadSettings;
end;
procedure TEdtTbConfigForm.FormDestroy(Sender: TObject);
begin
MainList.Free;
end;
procedure TEdtTbConfigForm.cbPosChange(Sender: TObject);
var
i: Integer;
begin
i:= cbPos.ItemIndex;
if i >= 0 then begin
FToolbarPos:= sPosValues[i];
end;
end;
procedure TEdtTbConfigForm.cbProfileChange(Sender: TObject);
begin
CurrProfile:= ProfileMask[cbProfile.ItemIndex];
ReloadToolBar;
end;
procedure TEdtTbConfigForm.btnClearClick(Sender: TObject);
begin
lvToolbar.Selected := nil;
end;
procedure TEdtTbConfigForm.btnHelpClick(Sender: TObject);
begin
ShowMessageFmt('%s%s%s%s%s%s%s', [rsHelp1,LineEnding,rsHelp2,LineEnding,rsHelp3,LineEnding,rsHelp4]);
end;
procedure TEdtTbConfigForm.btnShowClick(Sender: TObject);
begin
lvToolbar.Columns[1].Visible:= true;
end;
procedure TEdtTbConfigForm.btnHideClick(Sender: TObject);
begin
lvToolbar.Columns[1].Visible:= false;
end;
procedure TEdtTbConfigForm.lbToolbarSelectionChange(Sender: TObject; User: boolean);
var
i: Integer;
begin
i := lvToolbar.ItemIndex;
btnRemove.Enabled := i > -1;
btnMoveUp.Enabled := i > 0;
btnMoveDown.Enabled := (i > -1) and (i < lvToolbar.Items.Count-1);
end;
procedure TEdtTbConfigForm.TVSelectionChanged(Sender: TObject);
var
n: TTreeNode;
begin
n := TV.Selected;
btnAdd.Enabled := (Assigned(n) and Assigned(n.Data));
end;
function TEdtTbConfigForm.GetMainListIndex(Item: TListItem): Integer;
var
I: Integer;
begin
for I:= 0 to MainList.Count -1 do begin
if TLvItem(MainList.Objects[I]).LvIndex = Item.Index then begin
Result := I;
Exit;
end;
end;
Result := -1;
end;
procedure TEdtTbConfigForm.UpdateMainListProfile(Item: TListItem);
var
I: Integer;
begin
I := GetMainListIndex(Item);
if I > -1 then TLvItem(MainList.Objects[I]).Profile:= StrToInt(Item.SubItems[0]);
end;
procedure TEdtTbConfigForm.InsertMainListItem(Item,NextItem: TListItem);
var
I,J: Integer;
aMainListItem: TLvItem;
begin
aMainListItem := TLvItem.Create;
aMainListItem.Item := TIDEMenuItem(Item.Data);
aMainListItem.Profile := StrToInt(Item.SubItems[0]);
aMainListItem.LvIndex := Item.Index;
if NextItem = Nil then
MainList.AddObject(Item.Caption,aMainListItem)
else begin
I := GetMainListIndex(NextItem);
MainList.InsertObject(I,Item.Caption,aMainListItem);
for J := I+1 to MainList.Count -1 do begin
aMainListItem := TLvItem(MainList.Objects[J]);
aMainListItem.LvIndex:= aMainListItem.LvIndex +1;
end;
end;
end;
procedure TEdtTbConfigForm.RemoveMainListItem(Item: TListItem);
var
I,J: Integer;
aMainListItem: TLvItem;
begin
I := GetMainListIndex(Item);
if I > -1 then begin
MainList.Delete(I);
for J := I to MainList.Count -1 do begin
aMainListItem := TLvItem(MainList.Objects[J]);
aMainListItem.LvIndex:= aMainListItem.LvIndex -1;
end;
end;
end;
procedure TEdtTbConfigForm.ExchangeMainListItem(Item1, Item2: TListItem);
var
MainIndex1,MainIndex2: Integer;
aMainListItem: TLvItem;
begin
MainIndex1:= GetMainListIndex(Item1);
MainIndex2:= GetMainListIndex(Item2);
MainList.Exchange(MainIndex1,MainIndex2);
aMainListItem := TLvItem(MainList.Objects[MainIndex1]);
aMainListItem.LvIndex:= Item1.Index;
aMainListItem := TLvItem(MainList.Objects[MainIndex2]);
aMainListItem.LvIndex:= Item2.Index;
end;
procedure TEdtTbConfigForm.btnAddClick(Sender: TObject);
var
n: TTreeNode;
ACaption: string;
lvItem: TListItem;
anIndex: Integer;
begin
n := TV.Selected;
if (Assigned(n) and Assigned(n.Data)) then
begin
btnAdd.Enabled := False;
anIndex:= lvToolbar.ItemIndex;
ACaption:= TIDEMenuItem(n.Data).Caption;
DeleteAmpersands(ACaption);
if anIndex > -1 then begin
lvItem := lvToolbar.Items.Insert(lvToolbar.ItemIndex);
end
else begin
lvItem := lvToolbar.Items.Add;
end;
lvItem.Caption := ACaption;
lvItem.Data := n.Data;
if n.ImageIndex > -1 then
lvItem.ImageIndex := n.ImageIndex
else
lvItem.ImageIndex := defImageIndex;
lvItem.SubItems.Add(IntToStr(CurrProfile));
if anIndex > -1 then begin
// clear previous selection to avoid double sel in Qt
lvToolbar.Selected := nil;
lvToolbar.ItemIndex := lvItem.Index;
InsertMainListItem(lvItem,lvToolbar.Items[anIndex]);
end
else begin
lvToolbar.ItemIndex := lvToolbar.Items.Count-1;
InsertMainListItem(lvItem,Nil);
end;
lbToolbarSelectionChange(lblToolbar, False);
TV.Selected.Visible:= False;
end;
end;
procedure TEdtTbConfigForm.btnRemoveClick(Sender: TObject);
Var
mi: TIDEMenuItem;
n: TTreeNode;
I: Integer;
lvItem: TListItem;
begin
I := lvToolbar.ItemIndex;
if I > -1 then begin
lvItem := lvToolbar.Items[I];
mi := TIDEMenuItem(lvItem.Data);
RemoveMainListItem(lvItem);
lvToolbar.Items.Delete(lvToolbar.ItemIndex);
if I < lvToolbar.Items.Count then
lvToolbar.Selected := lvToolbar.Items[I]; // Qt Workaround
lbToolbarSelectionChange(lvToolbar, False);
if assigned(mi) then begin
n:= TV.Items.FindNodeWithData(mi);
n.Visible:= True;
end;
TVSelectionChanged(TV);
end;
end;
procedure TEdtTbConfigForm.lvToolbarSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
lbToolbarSelectionChange(Sender,False);
lbSelect.Caption:= IntToStr(lvToolbar.ItemIndex)+ ' / ' + IntToStr(lvToolbar.Items.Count);
btnClear.Enabled:= lvToolbar.Selected <> nil;
btnRemove.Enabled:= btnClear.Enabled;
end;
procedure TEdtTbConfigForm.miAllClick(Sender: TObject);
begin
if lvToolbar.ItemIndex = -1 then begin
puMenuItems.Close;
Exit
end;
if miAll.Checked then begin
lvToolbar.Selected.SubItems[0] := IntToStr(iAll);
miDesign.Checked := False;
miDebug.Checked := False;
miHTML.Checked := False;
miCustom.Checked := False;
end
else
lvToolbar.Selected.SubItems[0] := '0';
UpdateMainListProfile(lvToolbar.Selected);
end;
procedure TEdtTbConfigForm.miCustomClick(Sender: TObject);
var
aMask: Integer;
begin
if lvToolbar.ItemIndex = -1 then begin
puMenuItems.Close;
Exit
end;
aMask:= StrToInt(lvToolbar.Selected.SubItems[0]);
if (aMask and iCustom) = 0 then
aMask := aMask or iCustom
else
aMask := aMask and (not iCustom);
miCustom.Checked:= (aMask and iCustom) <> 0;
lvToolbar.Selected.SubItems[0] := IntToStr(aMask);
UpdateMainListProfile(lvToolbar.Selected);
end;
procedure TEdtTbConfigForm.miDebugClick(Sender: TObject);
var
aMask: Integer;
begin
if lvToolbar.ItemIndex = -1 then begin
puMenuItems.Close;
Exit
end;
aMask:= StrToInt(lvToolbar.Selected.SubItems[0]);
if (aMask and iDebug) = 0 then
aMask := aMask or iDebug
else
aMask := aMask and (not iDebug);
miDebug.Checked:= (aMask and iDebug) <> 0;
lvToolbar.Selected.SubItems[0] := IntToStr(aMask);
UpdateMainListProfile(lvToolbar.Selected);
end;
procedure TEdtTbConfigForm.miDesignClick(Sender: TObject);
var
aMask: Integer;
begin
if lvToolbar.ItemIndex = -1 then begin
puMenuItems.Close;
Exit
end;
aMask:= StrToInt(lvToolbar.Selected.SubItems[0]);
if (aMask and iDesign) = 0 then
aMask := aMask or iDesign
else
aMask := aMask and (not iDesign);
miDesign.Checked:= (aMask and iDesign) <> 0;
lvToolbar.Selected.SubItems[0] := IntToStr(aMask);
UpdateMainListProfile(lvToolbar.Selected);
end;
procedure TEdtTbConfigForm.miHTMLClick(Sender: TObject);
var
aMask: Integer;
begin
if lvToolbar.ItemIndex = -1 then begin
puMenuItems.Close;
Exit
end;
aMask:= StrToInt(lvToolbar.Selected.SubItems[0]);
if (aMask and iHTML) = 0 then
aMask := aMask or iHTML
else
aMask := aMask and (not iHTML);
miHTML.Checked:= (aMask and iHTML) <> 0;
lvToolbar.Selected.SubItems[0] := IntToStr(aMask);
UpdateMainListProfile(lvToolbar.Selected);
end;
procedure TEdtTbConfigForm.puMenuItemsPopup(Sender: TObject);
var
aMask: Integer;
begin
if lvToolbar.ItemIndex = -1 then begin
puMenuItems.Close;
Exit
end;
aMask:= StrToInt(lvToolbar.Selected.SubItems[0]);
if aMask = iAll then begin
miAll.Checked:= True;
miDesign.Checked := False;
miDebug.Checked := False;
miHTML.Checked := False;
miCustom.Checked := False;
end
else begin
miAll.Checked:= False;
if (aMask and iDesign) <> 0 then miDesign.Checked:= True
else miDesign.Checked:= False;
if (aMask and iDebug) <> 0 then miDebug.Checked:= True
else miDebug.Checked:= False;
if (aMask and iHTML) <> 0 then miHTML.Checked:= True
else miHTML.Checked:= False;
if (aMask and iCustom) <> 0 then miCustom.Checked:= True
else miCustom.Checked:= False;
end;
end;
procedure TEdtTbConfigForm.btnAddDividerClick(Sender: TObject);
var
lvItem: TListItem;
anIndex: Integer;
begin
anIndex := lvToolbar.ItemIndex;
if anIndex > -1 then
lvItem := lvToolbar.Items.Insert(anIndex)
else
lvItem := lvToolbar.Items.Add;
lvItem.Caption:= cDivider;
lvItem.ImageIndex:= divImageIndex;
lvItem.SubItems.Add(IntToStr(CurrProfile));
if lvToolbar.ItemIndex > -1 then
InsertMainListItem(lvItem,lvToolbar.Items[anIndex])
else
InsertMainListItem(lvItem,Nil);
end;
procedure TEdtTbConfigForm.btnMoveDownClick(Sender: TObject);
var
Index1,Index2: Integer;
begin
if lvToolbar.ItemIndex = -1 then
Exit;
if lvToolbar.ItemIndex < lvToolbar.Items.Count - 1 then begin
Index1 := lvToolbar.ItemIndex;
Index2 := Index1+1;
lvToolbar.Items.Exchange(Index1,Index2);
ExchangeMainListItem(lvToolbar.Items[Index1],lvToolbar.Items[Index2]);
lvToolbar.Items[Index1].Selected := False;
lvToolbar.Items[Index2].Selected := False;
lvToolbar.Selected := nil;
lvToolbar.ItemIndex:= Index2;
end;
end;
procedure TEdtTbConfigForm.btnMoveUpClick(Sender: TObject);
var
Index1,Index2: Integer;
begin
if lvToolbar.ItemIndex = -1 then
exit;
if lvToolbar.ItemIndex > 0 then begin
Index1:= lvToolbar.ItemIndex;
Index2:= Index1-1;
lvToolbar.Items.Exchange(Index1, Index2);
ExchangeMainListItem(lvToolbar.Items[Index1],lvToolbar.Items[Index2]);
lvToolbar.Items[Index1].Selected := False;
lvToolbar.Items[Index2].Selected := False;
lvToolbar.Selected := nil;
lvToolbar.ItemIndex:= Index2;
end;
end;
procedure TEdtTbConfigForm.btnOKClick(Sender: TObject);
begin
SaveSettings;
end;
procedure TEdtTbConfigForm.SetupCaptions;
var
i: integer;
begin
Caption := rsEditorToolbarConfigForm;
btnOK.Caption := rsOK;
btnCancel.Caption := rsCancel;
lblMenuTree.Caption := rsMenuTree;
lblToolbar.Caption := rsToolbar;
lblpos.Caption := rsPosition;
lblProfile.Caption := rsProfile;
sLocalizedPosValues[0] := rsTop;
sLocalizedPosValues[1] := rsBottom;
sLocalizedPosValues[2] := rsRight;
sLocalizedPosValues[3] := rsLeft;
for i := 0 to high(sLocalizedPosValues) do
begin
cbPos.Items[i] := sLocalizedPosValues[i]; // localized
end;
for i := 0 to high(sLocalizedProfileNames) do
begin
cbProfile.Items[i] := sLocalizedProfileNames[i];
end;
end;
procedure TEdtTbConfigForm.LoadCategories;
var
i: integer;
begin
TV.Items.BeginUpdate;
try
TV.Items.Clear;
for i := 0 to IDEMenuRoots.Count-1 do
AddMenuItem(nil, IDEMenuRoots[i],0);
finally
TV.Items.EndUpdate;
end;
end;
procedure TEdtTbConfigForm.LoadSettings;
var
i: integer;
c: integer;
cfg: TConfigStorage;
value: string;
aProfileMask: Integer;
mi: TIDEMenuItem;
ms: TIDEMenuSection;
begin
cfg := GetIDEConfigStorage(cSettingsFile, True);
try
c := cfg.GetValue('Count', 0);
if c = 0 then begin
// Let's provide a Jump Back/Jump Forward as a starting default
ms := itmJumpings;
mi := ms.FindByName('itmJumpBack');
AddListItem(mi,iAll);
mi := ms.FindByName('itmJumpForward');
AddListItem(mi,iAll);
end
else begin
for i := 0 to c - 1 do
begin
value := cfg.GetValue('Button' + Format('%2.2d', [i+1]) + '/Value', '');
aProfileMask := cfg.GetValue('Button' + Format('%2.2d', [i+1]) + '/Profile', iAll);
if value <> '' then
begin
if value = cDivider then
begin
AddListItem(nil,aProfileMask);
Continue;
end;
mi := IDEMenuRoots.FindByPath(value, false);
AddListItem(mi,aProfileMask);
end;
end;
end;
value := cfg.GetValue('Position','Top');
FToolbarPos := value;
FToolBarShow := cfg.GetValue('Visible',true);
finally
cfg.Free;
end;
FillToolBar;
i := IndexFromEnglish(FToolBarPos);
cbPos.Text:= sLocalizedPosValues[i];
end;
procedure TEdtTbConfigForm.LoadStyleSettings;
var
cfg: TConfigStorage;
value: Integer;
begin
cfg := GetIDEConfigStorage(cSettingsFile, True);
try
value := cfg.GetValue('Profile',iAll);
CurrProfile := value;
value := GetProfileIndex(value);
//cbProfile.ItemIndex:= value;
cbProfile.Text:= sLocalizedProfileNames[value];
finally
cfg.Free;
end;
end;
procedure TEdtTbConfigForm.SaveSettings;
var
i: integer;
cfg: TConfigStorage;
lvItem: TLvItem;
aProfileMask: Integer;
begin
cfg := GetIDEConfigStorage(cSettingsFile, False);
try
cfg.SetValue('Count', MainList.Count);
for i := 0 to MainList.Count - 1 do begin
lvItem := TLvItem(MainList.Objects[I]);
aProfileMask:= lvItem.Profile;
if MainList[I] = cDivider then
cfg.SetDeleteValue('Button' + Format('%2.2d', [i+1]) + '/Value', cDivider, '')
else
cfg.SetDeleteValue('Button' + Format('%2.2d', [i+1]) + '/Value', lvItem.Item.GetPath, '');
cfg.SetDeleteValue('Button' + Format('%2.2d', [i+1]) + '/Profile', aProfileMask,iAll);
end;
cfg.SetValue('Position', FToolbarPos);
cfg.SetValue('Visible',FToolBarShow);
cfg.SetValue('Profile',CurrProfile);
cfg.WriteToDisk;
finally
cfg.Free;
end;
end;
procedure TEdtTbConfigForm.AddMenuItem(ParentNode: TTreeNode; Item: TIDEMenuItem; Level: Integer);
var
n: TTreeNode;
i: integer;
sec: TIDEMenuSection;
ACaption: string;
hasCaption: boolean;
begin
if Item is TIDEMenuSection then
begin
if Item.Name <> Item.Caption then hasCaption:= true
else hasCaption:= false;
sec := (Item as TIDEMenuSection);
if sec.Count > 0 then begin // skip empty sections
if Level= 0 then ACaption:= RootNodeCaption(Item)
else begin
if hasCaption then ACaption:= Item.Caption
else ACaption:= '---';
end;
DeleteAmpersands(ACaption);
if (Level > 0) and ( not hasCaption) then n:= ParentNode
else begin
n := TV.Items.AddChild(ParentNode, Format('%s', [ACaption]));
n.ImageIndex := Item.ImageIndex;
n.SelectedIndex := Item.ImageIndex;
end;
for i := 0 to sec.Count-1 do
AddMenuItem(n, sec.Items[i],Level+1);
end;
end
else begin
if Item.Caption <> '-' then begin // workaround for HTML Editor dividers
ACaption:= Item.Caption;
DeleteAmpersands(ACaption);
ACaption:= ACaption+GetShortcut(Item);
n := TV.Items.AddChild(ParentNode, Format('%s', [ACaption]));
n.ImageIndex := Item.ImageIndex;
n.SelectedIndex := Item.ImageIndex;
n.Data := Item;
end;
end;
end;
function TEdtTbConfigForm.RootNodeCaption(Item: TIDEMenuItem): string;
var
AName: string;
begin
AName:= Item.Caption;
case AName of
'IDEMainMenu': Result := rsIDEMainMenu; // mnuMain
'SourceTab': Result := rsSourceTab; // SourceTabMenuRootName
'SourceEditor': Result := rsSourceEditor; // SourceEditorMenuRootName
'Messages': Result := rsMessages; // MessagesMenuRootName
'Code Explorer': Result := rsCodeExplorer; // CodeExplorerMenuRootName
'CodeTemplates': Result := rsCodeTemplates; // CodeTemplatesMenuRootName
'Designer': Result := rsDesigner; // DesignerMenuRootName
'PackageEditor': Result := rsPackageEditor; // PackageEditorMenuRootName
'PackageEditorFiles': Result := rsPackageEditorFiles // PackageEditorMenuFilesRootName
else Result := Item.Caption;
end;
end;
procedure TEdtTbConfigForm.AddListItem(Item: TIDEMenuItem; PMask: Integer);
var
aListItem: TLvItem;
begin
aListItem := TLvItem.Create;
if assigned(Item) then begin
aListItem.Item := Item;
aListItem.Profile:= Pmask;
MainList.AddObject(Item.Caption,aListItem);
end
else begin
aListItem.Item := nil;
aListItem.Profile:= PMask;
MainList.AddObject(cDivider,aListItem);
end;
end;
procedure TEdtTbConfigForm.AddToolBarItem(Item: TIDEMenuItem; PMask: Integer);
Var
n: TTreeNode;
ACaption: string;
lvItem: TListItem;
begin
if Assigned(Item) then begin
ACaption:= Item.Caption;
DeleteAmpersands(ACaption);
ACaption:= ACaption+GetShortcut(Item);
lvItem := lvToolbar.Items.Add;
lvItem.Caption:= ACaption;
lvItem.Data:= Item;
if Item.ImageIndex > -1 then
lvItem.ImageIndex:= Item.ImageIndex
else
lvItem.ImageIndex:= defImageIndex;
lvItem.SubItems.Add(IntToStr(PMask));
n:= TV.Items.FindNodeWithData(Item);
n.Visible:= False;
end;
end;
procedure TEdtTbConfigForm.AddDivider(PMask: Integer);
var
lvItem: TListItem;
begin
lvItem := lvToolbar.Items.Add;
lvItem.Caption:= cDivider;
lvItem.ImageIndex:= divImageIndex;
lvItem.SubItems.Add(IntToStr(PMask));
end;
procedure TEdtTbConfigForm.FillToolBar;
var
I: Integer;
aListItem: TLvItem;
aCaption: string;
aPMask: Integer;
mi: TIDEMenuItem;
canShow: Boolean;
begin
for I:= 0 to MainList.Count -1 do begin
aListItem := TLvItem(MainList.Objects[I]);
aPMask := aListItem.Profile;
canShow := (CurrProfile = iAll) or ((aPMask and CurrProfile) <> 0);
if canShow then begin
mi := aListItem.Item;
aCaption := MainList.Strings[I];
if aCaption = cDivider then AddDivider(aPMask)
else AddToolBarItem(mi,aPMask);
aListItem.LvIndex:= lvToolbar.Items.Count-1;
end;
end;
end;
procedure TEdtTbConfigForm.ReloadToolBar;
begin
lvToolbar.Clear;
FillToolBar;
end;
class function TEdtTbConfigForm.Execute: boolean;
var
frm: TEdtTbConfigForm;
begin
frm := TEdtTbConfigForm.Create(nil);
try
result := frm.ShowModal = mrOK;
finally
frm.Free;
end;
end;
class procedure TEdtTbConfigForm.Setup;
var
frm: TEdtTbConfigForm;
begin
frm := TEdtTbConfigForm.Create(nil);
try
frm.SaveSettings;
finally
frm.Free;
end;
end;
class procedure TEdtTbConfigForm.UpdateVisible(NewStatus: Boolean);
var
frm: TEdtTbConfigForm;
begin
frm := TEdtTbConfigForm.Create(nil);
try
frm.FToolBarShow:= NewStatus;
frm.SaveSettings;
finally
frm.Free;
end;
end;
end.