mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 16:59:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			273 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			6.6 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, MenuIntf;
 | 
						|
 | 
						|
type
 | 
						|
  TEdtTbConfigForm = class(TForm)
 | 
						|
    Bevel1: TBevel;
 | 
						|
    btnRemove: TBitBtn;
 | 
						|
    btnAdd: TBitBtn;
 | 
						|
    btnMoveUp: TBitBtn;
 | 
						|
    btnMoveDown: TBitBtn;
 | 
						|
    btnOK: TButton;
 | 
						|
    btnCancel: TButton;
 | 
						|
    btnAddDivider: TButton;
 | 
						|
    lblMenuTree: TLabel;
 | 
						|
    lblToolbar: TLabel;
 | 
						|
    lbToolbar: TListBox;
 | 
						|
    pnlButtons: TPanel;
 | 
						|
    TV: TTreeView;
 | 
						|
    procedure FormCreate(Sender: TObject);
 | 
						|
    procedure TVChange(Sender: TObject; Node: TTreeNode);
 | 
						|
    procedure btnAddClick(Sender: TObject);
 | 
						|
    procedure btnAddDividerClick(Sender: TObject);
 | 
						|
    procedure btnMoveDownClick(Sender: TObject);
 | 
						|
    procedure btnMoveUpClick(Sender: TObject);
 | 
						|
    procedure btnOKClick(Sender: TObject);
 | 
						|
    procedure btnRemoveClick(Sender: TObject);
 | 
						|
  private
 | 
						|
    procedure SetupCaptions;
 | 
						|
    procedure LoadCategories;
 | 
						|
    procedure LoadSettings;
 | 
						|
    procedure SaveSettings;
 | 
						|
    procedure AddMenuItem(ParentNode: TTreeNode; Item: TIDEMenuItem);
 | 
						|
  public
 | 
						|
    class function Execute: boolean;
 | 
						|
  end; 
 | 
						|
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
uses
 | 
						|
  editortoolbar_impl
 | 
						|
  ,LazConfigStorage
 | 
						|
  ,BaseIDEIntf
 | 
						|
  ,LazIDEIntf
 | 
						|
  ,IDEImagesIntf
 | 
						|
  ;
 | 
						|
 | 
						|
 | 
						|
resourcestring
 | 
						|
  rsEditorToolbarConfigForm = 'Editor Toolbar Configuration';
 | 
						|
  rsOK                      = 'OK';
 | 
						|
  rsCancel                  = 'Cancel';
 | 
						|
  rsToolbar                 = 'Toolbar';
 | 
						|
  rsMenuTree                = 'Menu Tree';
 | 
						|
  rsAddDivider              = 'Add Divider';
 | 
						|
 | 
						|
 | 
						|
{ TEdtTbConfigForm }
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.FormCreate(Sender: TObject);
 | 
						|
begin
 | 
						|
  inherited;
 | 
						|
  pnlButtons.Color := clBtnFace;
 | 
						|
  // load button images
 | 
						|
  btnRemove.Glyph.LoadFromLazarusResource('arrowleft_blue16');
 | 
						|
  btnAdd.Glyph.LoadFromLazarusResource('arrowright_blue16');
 | 
						|
  btnMoveUp.Glyph.LoadFromLazarusResource('arrowup_blue16');
 | 
						|
  btnMoveDown.Glyph.LoadFromLazarusResource('arrowdown_blue16');
 | 
						|
 | 
						|
  TV.Images := IDEImages.Images_16;
 | 
						|
  SetupCaptions;
 | 
						|
  LoadCategories;
 | 
						|
  LoadSettings;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.TVChange(Sender: TObject; Node: TTreeNode);
 | 
						|
var
 | 
						|
  n: TTreeNode;
 | 
						|
begin
 | 
						|
  if Sender = nil then ;
 | 
						|
  if Node = nil then ;
 | 
						|
  n := TV.Selected;
 | 
						|
 | 
						|
  btnAdd.Enabled := (Assigned(n) and Assigned(n.Data));
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.btnAddClick(Sender: TObject);
 | 
						|
var
 | 
						|
  n: TTreeNode;
 | 
						|
begin
 | 
						|
  n := TV.Selected;
 | 
						|
  if (Assigned(n) and Assigned(n.Data)) then
 | 
						|
  begin
 | 
						|
    lbToolbar.Items.AddObject(TIDEMenuItem(n.Data).Caption, TObject(n.Data));
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.btnAddDividerClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  lbToolbar.Items.Add(cDivider);
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.btnMoveDownClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  if lbToolbar.ItemIndex = -1 then
 | 
						|
    exit;
 | 
						|
  if lbToolbar.ItemIndex < lbToolbar.Items.Count - 1 then
 | 
						|
  begin
 | 
						|
    lbToolbar.Items.Exchange(lbToolbar.ItemIndex, lbToolbar.ItemIndex+1);
 | 
						|
    lbToolbar.ItemIndex := lbToolbar.ItemIndex+1;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.btnMoveUpClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  if lbToolbar.ItemIndex = -1 then
 | 
						|
    exit;
 | 
						|
  if lbToolbar.ItemIndex > 0 then
 | 
						|
  begin
 | 
						|
    lbToolbar.Items.Exchange(lbToolbar.ItemIndex, lbToolbar.ItemIndex-1);
 | 
						|
    lbToolbar.ItemIndex := lbToolbar.ItemIndex-1;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.btnOKClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  SaveSettings;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.btnRemoveClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  if lbToolbar.ItemIndex > -1 then
 | 
						|
    lbToolbar.Items.Delete(lbToolbar.ItemIndex);
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.SetupCaptions;
 | 
						|
begin
 | 
						|
  Caption               := rsEditorToolbarConfigForm;
 | 
						|
  btnOK.Caption         := rsOK;
 | 
						|
  btnCancel.Caption     := rsCancel;
 | 
						|
  btnAddDivider.Caption := rsAddDivider;
 | 
						|
  lblMenuTree.Caption   := rsMenuTree;
 | 
						|
  lblToolbar.Caption    := rsToolbar;
 | 
						|
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]);
 | 
						|
  finally
 | 
						|
    TV.Items.EndUpdate;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.LoadSettings;
 | 
						|
var
 | 
						|
  i: integer;
 | 
						|
  c: integer;
 | 
						|
  cfg: TConfigStorage;
 | 
						|
  value: string;
 | 
						|
  mi: TIDEMenuItem;
 | 
						|
begin
 | 
						|
  cfg := GetIDEConfigStorage(cSettingsFile, True);
 | 
						|
  try
 | 
						|
    c := cfg.GetValue('Count', 0);
 | 
						|
    for i := 0 to c - 1 do
 | 
						|
    begin
 | 
						|
      value := cfg.GetValue('Button' + Format('%2.2d', [i+1]) + '/Value', '');
 | 
						|
      if value <> '' then
 | 
						|
      begin
 | 
						|
       if value = cDivider then
 | 
						|
       begin
 | 
						|
         lbToolbar.Items.Add(value);
 | 
						|
         Continue;
 | 
						|
       end;
 | 
						|
      
 | 
						|
       mi := IDEMenuRoots.FindByPath(value, false);
 | 
						|
       if Assigned(mi) then
 | 
						|
         lbToolbar.Items.AddObject(mi.Caption, TObject(mi));
 | 
						|
      end;
 | 
						|
    end;
 | 
						|
  finally
 | 
						|
    cfg.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.SaveSettings;
 | 
						|
var
 | 
						|
  i: integer;
 | 
						|
  cfg: TConfigStorage;
 | 
						|
begin
 | 
						|
  cfg := GetIDEConfigStorage(cSettingsFile, False);
 | 
						|
  try
 | 
						|
    cfg.SetValue('Count', lbToolbar.Items.Count);
 | 
						|
    for i := 0 to lbToolbar.Items.Count - 1 do
 | 
						|
    begin
 | 
						|
      if lbToolbar.Items[i] = cDivider then
 | 
						|
        cfg.SetDeleteValue('Button' + Format('%2.2d', [i+1]) + '/Value', cDivider, '')
 | 
						|
      else
 | 
						|
        cfg.SetDeleteValue('Button' + Format('%2.2d', [i+1]) + '/Value', TIDEMenuItem(lbToolbar.Items.Objects[i]).GetPath, '');
 | 
						|
    end;
 | 
						|
    cfg.WriteToDisk;
 | 
						|
  finally
 | 
						|
    cfg.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TEdtTbConfigForm.AddMenuItem(ParentNode: TTreeNode;
 | 
						|
    Item: TIDEMenuItem);
 | 
						|
var
 | 
						|
  n: TTreeNode;
 | 
						|
  i: integer;
 | 
						|
  sec: TIDEMenuSection;
 | 
						|
begin
 | 
						|
  n := TV.Items.AddChild(ParentNode, Format('%s', [Item.Caption]));
 | 
						|
  n.ImageIndex := Item.ImageIndex;
 | 
						|
  n.Data := Item;
 | 
						|
  if Item is TIDEMenuSection then
 | 
						|
  begin
 | 
						|
    sec := (Item as TIDEMenuSection);
 | 
						|
    for i := 0 to sec.Count-1 do
 | 
						|
      AddMenuItem(n, sec.Items[i]);
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
class function TEdtTbConfigForm.Execute: boolean;
 | 
						|
var
 | 
						|
  frm: TEdtTbConfigForm;
 | 
						|
begin
 | 
						|
  frm := TEdtTbConfigForm.Create(nil);
 | 
						|
  try
 | 
						|
    result := frm.ShowModal = mrOK;
 | 
						|
  finally
 | 
						|
    frm.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
initialization
 | 
						|
  {$I edttbconfigfrm.lrs}
 | 
						|
 | 
						|
end.
 | 
						|
 |