mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-28 10:02:14 +00:00
UPD: Creating menu toolbar buttons.
This commit is contained in:
parent
66e7033548
commit
9ebbfccf78
4 changed files with 451 additions and 183 deletions
|
|
@ -142,33 +142,7 @@ inherited frmOptionsToolbar: TfrmOptionsToolbar
|
|||
VertScrollBar.Page = 82
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Around = 6
|
||||
ClientHeight = 82
|
||||
ClientWidth = 834
|
||||
TabOrder = 1
|
||||
OnClick = sboxToolbarsClick
|
||||
object ktbBar: TKASToolBar
|
||||
Left = 1
|
||||
Height = 24
|
||||
Top = 0
|
||||
Width = 832
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 1
|
||||
BorderSpacing.Right = 1
|
||||
Constraints.MinHeight = 24
|
||||
TabOrder = 0
|
||||
OnClick = ktbBarClick
|
||||
OnToolItemShortcutsHint = ktbBarToolItemShortcutsHint
|
||||
OnLoadButtonGlyph = ktbBarLoadButtonGlyph
|
||||
OnToolButtonClick = ktbBarToolButtonClick
|
||||
OnToolButtonMouseDown = ktbBarToolButtonMouseDown
|
||||
OnToolButtonMouseUp = ktbBarToolButtonMouseUp
|
||||
OnToolButtonMouseMove = ktbBarToolButtonMouseMove
|
||||
OnToolButtonDragDrop = ktbBarToolButtonDragDrop
|
||||
OnToolButtonDragOver = ktbBarToolButtonDragOver
|
||||
RadioToolBar = True
|
||||
GlyphSize = 16
|
||||
ShowDividerAsButton = True
|
||||
end
|
||||
end
|
||||
object pnlFullToolbarButtons: TPanel[2]
|
||||
AnchorSideLeft.Control = Owner
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ uses
|
|||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
ComCtrls, ExtCtrls, Buttons, fOptionsFrame, KASToolBar, KASToolItems,
|
||||
uFormCommands, uHotkeyManager, DCBasicTypes,
|
||||
fOptionsHotkeysEditHotkey;
|
||||
fOptionsHotkeysEditHotkey, DCXmlConfig;
|
||||
|
||||
type
|
||||
|
||||
|
|
@ -53,7 +53,6 @@ type
|
|||
edtToolTip: TEdit;
|
||||
gbGroupBox: TGroupBox;
|
||||
edtIconFileName: TEdit;
|
||||
ktbBar: TKASToolBar;
|
||||
lblInternalParameters: TLabel;
|
||||
lblBarSize: TLabel;
|
||||
lblBarSizeValue: TLabel;
|
||||
|
|
@ -86,24 +85,21 @@ type
|
|||
procedure cbInternalCommandSelect(Sender: TObject);
|
||||
procedure cbFlatButtonsChange(Sender: TObject);
|
||||
procedure edtIconFileNameChange(Sender: TObject);
|
||||
procedure ktbBarClick(Sender: TObject);
|
||||
function ktbBarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer;
|
||||
function ToolbarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer;
|
||||
clBackColor: TColor): TBitmap;
|
||||
procedure ktbBarToolButtonClick(Sender: TObject);
|
||||
procedure ktbBarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer;
|
||||
NumberOfButton: Integer);
|
||||
procedure ktbBarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer;
|
||||
procedure ToolbarToolButtonClick(Sender: TObject);
|
||||
procedure ToolbarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
|
||||
procedure ToolbarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer;
|
||||
State: TDragState; var Accept: Boolean; NumberOfButton: Integer);
|
||||
procedure ktbBarToolButtonMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer);
|
||||
procedure ktbBarToolButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||||
procedure ToolbarToolButtonMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure ToolbarToolButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||||
Y: Integer; NumberOfButton: Integer);
|
||||
procedure ktbBarToolButtonMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer);
|
||||
procedure ToolbarToolButtonMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure btnOpenIconClick(Sender: TObject);
|
||||
function ktbBarToolItemShortcutsHint(ToolItem: TKASNormalItem): String;
|
||||
function ToolbarToolItemShortcutsHint(ToolItem: TKASNormalItem): String;
|
||||
procedure rgToolItemTypeSelectionChanged(Sender: TObject);
|
||||
procedure sboxToolbarsClick(Sender: TObject);
|
||||
procedure trbBarSizeChange(Sender: TObject);
|
||||
procedure trbIconSizeChange(Sender: TObject);
|
||||
private
|
||||
|
|
@ -111,12 +107,20 @@ type
|
|||
FEditForm: TfrmEditHotkey;
|
||||
FFormCommands: IFormCommands;
|
||||
FToolButtonMouseX, FToolButtonMouseY, FToolDragButtonNumber: Integer; // For dragging
|
||||
FUpdatingIconText: Boolean;
|
||||
FUpdatingButtonType: Boolean;
|
||||
FUpdatingIconText: Boolean;
|
||||
function AddNewSubToolbar(ToolItem: TKASMenuItem): TKASToolBar;
|
||||
procedure ApplyEditControls;
|
||||
procedure CloseToolbarsBelowCurrentButton;
|
||||
procedure CloseToolbar(Index: Integer);
|
||||
function CreateToolbar(Items: TKASToolBarItems): TKASToolBar;
|
||||
class function FindHotkey(NormalItem: TKASNormalItem; Hotkeys: THotkeys): THotkey;
|
||||
class function FindHotkey(NormalItem: TKASNormalItem): THotkey;
|
||||
function GetTopToolbar: TKASToolBar;
|
||||
procedure LoadCurrentButton;
|
||||
procedure LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfig; RootNode: TXmlNode);
|
||||
procedure MarkCurrentToolbar;
|
||||
procedure PressButtonDown(Button: TKASToolButton);
|
||||
procedure UpdateIcon(Icon: String);
|
||||
protected
|
||||
procedure Init; override;
|
||||
|
|
@ -134,8 +138,8 @@ implementation
|
|||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
LCLVersion,
|
||||
DCStrUtils, uGlobs, uLng, DCXmlConfig, uOSForms, uDCUtils, uPixMapManager,
|
||||
LCLVersion, Toolwin,
|
||||
DCStrUtils, uGlobs, uLng, uOSForms, uDCUtils, uPixMapManager,
|
||||
uKASToolItemsExtended,
|
||||
fMain;
|
||||
|
||||
|
|
@ -165,7 +169,17 @@ begin
|
|||
Result := rsOptionsEditorToolbar;
|
||||
end;
|
||||
|
||||
function TfrmOptionsToolbar.GetTopToolbar: TKASToolBar;
|
||||
begin
|
||||
if sboxToolbars.ControlCount > 0 then
|
||||
Result := sboxToolbars.Controls[0] as TKASToolBar
|
||||
else
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.Init;
|
||||
var
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
FFormCommands := frmMain as IFormCommands;
|
||||
FFormCommands.GetCommandsList(cbInternalCommand.Items);
|
||||
|
|
@ -179,12 +193,17 @@ begin
|
|||
{$ELSE}
|
||||
rgToolItemType.OnClick := @rgToolItemTypeSelectionChanged;
|
||||
{$ENDIF}
|
||||
ToolBar := CreateToolbar(nil);
|
||||
if Assigned(ToolBar) then
|
||||
// Put first one on top so that any other toolbars
|
||||
// created before Show are put below it.
|
||||
ToolBar.Top := 0;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.Load;
|
||||
var
|
||||
ToolBarLoader: TKASToolBarExtendedLoader;
|
||||
ToolBarNode: TXmlNode;
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
trbBarSize.Position := gToolBarButtonSize div 2;
|
||||
trbIconSize.Position := gToolBarIconSize div 2;
|
||||
|
|
@ -193,21 +212,14 @@ begin
|
|||
lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2);
|
||||
lblIconSizeValue.Caption := IntToStr(trbIconSize.Position*2);
|
||||
|
||||
ktbBar.GlyphSize := gToolBarIconSize;
|
||||
ktbBar.SetButtonSize(gToolBarButtonSize, gToolBarButtonSize);
|
||||
ktbBar.Clear;
|
||||
ToolBarLoader := TKASToolBarExtendedLoader.Create;
|
||||
try
|
||||
ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False);
|
||||
if Assigned(ToolBarNode) then
|
||||
begin
|
||||
ktbBar.LoadConfiguration(gConfig, ToolBarNode, ToolBarLoader);
|
||||
if ktbBar.ButtonCount > 0 then
|
||||
ktbBar.Buttons[0].Click;
|
||||
end;
|
||||
finally
|
||||
ToolBarLoader.Free;
|
||||
end;
|
||||
FCurrentButton := nil;
|
||||
CloseToolbarsBelowCurrentButton;
|
||||
|
||||
ToolBar := GetTopToolbar;
|
||||
ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False);
|
||||
LoadToolbar(ToolBar, gConfig, ToolBarNode);
|
||||
if ToolBar.ButtonCount > 0 then
|
||||
PressButtonDown(ToolBar.Buttons[0]);
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.LoadCurrentButton;
|
||||
|
|
@ -226,6 +238,8 @@ begin
|
|||
|
||||
DisableAutoSizing;
|
||||
try
|
||||
CloseToolbarsBelowCurrentButton;
|
||||
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
ToolItem := FCurrentButton.ToolItem;
|
||||
|
|
@ -264,7 +278,10 @@ begin
|
|||
edtStartPath.Text := ProgramItem.StartPath;
|
||||
end;
|
||||
if ToolItem is TKASMenuItem then
|
||||
begin
|
||||
ButtonTypeIndex := 3;
|
||||
AddNewSubToolbar(TKASMenuItem(ToolItem));
|
||||
end;
|
||||
end;
|
||||
|
||||
FUpdatingButtonType := True;
|
||||
|
|
@ -294,13 +311,88 @@ begin
|
|||
btnCloneButton.Visible := Assigned(FCurrentButton);
|
||||
btnDeleteButton.Visible := Assigned(FCurrentButton);
|
||||
rgToolItemType.Visible := Assigned(FCurrentButton);
|
||||
|
||||
MarkCurrentToolbar;
|
||||
finally
|
||||
EnableAutoSizing;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfig; RootNode: TXmlNode);
|
||||
var
|
||||
ToolBarLoader: TKASToolBarExtendedLoader;
|
||||
begin
|
||||
ToolBarLoader := TKASToolBarExtendedLoader.Create;
|
||||
try
|
||||
if Assigned(RootNode) then
|
||||
ToolBar.LoadConfiguration(Config, RootNode, ToolBarLoader);
|
||||
finally
|
||||
ToolBarLoader.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.MarkCurrentToolbar;
|
||||
var
|
||||
MarkToolBar, ToolBar, PrevToolBar: TKASToolBar;
|
||||
i: Integer;
|
||||
begin
|
||||
if Assigned(FCurrentButton) then
|
||||
MarkToolBar := FCurrentButton.ToolBar
|
||||
else
|
||||
MarkToolBar := GetTopToolbar;
|
||||
|
||||
if Assigned(MarkToolBar) then
|
||||
begin
|
||||
DisableAutoSizing;
|
||||
try
|
||||
PrevToolBar := nil;
|
||||
for i := 0 to sboxToolbars.ControlCount - 1 do
|
||||
begin
|
||||
ToolBar := sboxToolbars.Controls[i] as TKASToolBar;
|
||||
if ToolBar = MarkToolBar then
|
||||
begin
|
||||
if Assigned(PrevToolBar) then
|
||||
begin
|
||||
PrevToolBar.EdgeBorders := [ebBottom];
|
||||
PrevToolBar.EdgeInner := esLowered;
|
||||
PrevToolBar.EdgeOuter := esLowered;
|
||||
end;
|
||||
ToolBar.EdgeInner := esRaised;
|
||||
ToolBar.EdgeOuter := esRaised;
|
||||
ToolBar.EdgeBorders := [ebTop, ebBottom];
|
||||
end
|
||||
else if PrevToolBar = MarkToolBar then
|
||||
begin
|
||||
ToolBar.EdgeInner := esLowered;
|
||||
ToolBar.EdgeOuter := esLowered;
|
||||
ToolBar.EdgeBorders := [ebTop];
|
||||
end
|
||||
else
|
||||
begin
|
||||
ToolBar.EdgeInner := esNone;
|
||||
ToolBar.EdgeOuter := esNone;
|
||||
ToolBar.EdgeBorders := [];
|
||||
end;
|
||||
PrevToolBar := ToolBar;
|
||||
end;
|
||||
PrevToolBar.EdgeOuter := esRaised;
|
||||
PrevToolBar.EdgeBorders := [ebBottom];
|
||||
finally
|
||||
EnableAutoSizing;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.PressButtonDown(Button: TKASToolButton);
|
||||
begin
|
||||
FUpdatingButtonType := True;
|
||||
Button.Click;
|
||||
FUpdatingButtonType := False;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.rgToolItemTypeSelectionChanged(Sender: TObject);
|
||||
var
|
||||
ToolBar: TKASToolBar;
|
||||
ToolItem: TKASToolItem = nil;
|
||||
NewButton: TKASToolButton;
|
||||
begin
|
||||
|
|
@ -314,12 +406,13 @@ begin
|
|||
end;
|
||||
if Assigned(ToolItem) then
|
||||
begin
|
||||
ToolBar := FCurrentButton.ToolBar;
|
||||
// Copy what you can from previous button type.
|
||||
ToolItem.Assign(FCurrentButton.ToolItem);
|
||||
NewButton := ktbBar.InsertButton(FCurrentButton, ToolItem);
|
||||
ktbBar.RemoveButton(FCurrentButton);
|
||||
NewButton := ToolBar.InsertButton(FCurrentButton, ToolItem);
|
||||
ToolBar.RemoveButton(FCurrentButton);
|
||||
FCurrentButton := NewButton;
|
||||
NewButton.Click;
|
||||
PressButtonDown(NewButton);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -327,6 +420,7 @@ end;
|
|||
function TfrmOptionsToolbar.Save: TOptionsEditorSaveFlags;
|
||||
var
|
||||
ToolBarNode: TXmlNode;
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
ApplyEditControls;
|
||||
|
||||
|
|
@ -334,9 +428,13 @@ begin
|
|||
gToolBarButtonSize := trbBarSize.Position * 2;
|
||||
gToolBarIconSize := trbIconSize.Position * 2;
|
||||
|
||||
ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', True);
|
||||
gConfig.ClearNode(ToolBarNode);
|
||||
ktbBar.SaveConfiguration(gConfig, ToolBarNode);
|
||||
ToolBar := GetTopToolbar;
|
||||
if Assigned(ToolBar) then
|
||||
begin
|
||||
ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', True);
|
||||
gConfig.ClearNode(ToolBarNode);
|
||||
Toolbar.SaveConfiguration(gConfig, ToolBarNode);
|
||||
end;
|
||||
|
||||
Result := [];
|
||||
end;
|
||||
|
|
@ -350,6 +448,41 @@ begin
|
|||
edtIconFileName.Text := sFileName;
|
||||
end;
|
||||
|
||||
function TfrmOptionsToolbar.CreateToolbar(Items: TKASToolBarItems): TKASToolBar;
|
||||
begin
|
||||
Result := TKASToolBar.Create(sboxToolbars);
|
||||
Result.AutoSize := True;
|
||||
Result.Constraints.MinHeight := 24;
|
||||
Result.Flat := cbFlatButtons.Checked;
|
||||
Result.GlyphSize := trbIconSize.Position * 2;
|
||||
Result.RadioToolBar := True;
|
||||
Result.SetButtonSize(trbBarSize.Position * 2, trbBarSize.Position * 2);
|
||||
Result.ShowDividerAsButton := True;
|
||||
Result.OnLoadButtonGlyph := @ToolbarLoadButtonGlyph;
|
||||
Result.OnToolButtonClick := @ToolbarToolButtonClick;
|
||||
Result.OnToolButtonMouseDown := @ToolbarToolButtonMouseDown;
|
||||
Result.OnToolButtonMouseUp := @ToolbarToolButtonMouseUp;
|
||||
Result.OnToolButtonMouseMove := @ToolbarToolButtonMouseMove;
|
||||
Result.OnToolButtonDragDrop := @ToolbarToolButtonDragDrop;
|
||||
Result.OnToolButtonDragOver := @ToolbarToolButtonDragOver;
|
||||
Result.OnToolItemShortcutsHint := @ToolbarToolItemShortcutsHint;
|
||||
Result.BorderSpacing.Bottom := 2;
|
||||
Result.EdgeInner := esNone;
|
||||
Result.EdgeOuter := esNone;
|
||||
Result.EdgeBorders := [];
|
||||
Result.Top := MaxInt; // So that it is put under all existing toolbars (because of Align=alTop).
|
||||
|
||||
Result.UseItems(Items);
|
||||
Result.Parent := sboxToolbars;
|
||||
end;
|
||||
|
||||
function TfrmOptionsToolbar.AddNewSubToolbar(ToolItem: TKASMenuItem): TKASToolBar;
|
||||
begin
|
||||
Result := CreateToolbar(ToolItem.SubItems);
|
||||
if Result.ButtonCount = 0 then
|
||||
Result.AddButton(TKASCommandItem.Create);
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.ApplyEditControls;
|
||||
var
|
||||
ToolItem: TKASToolItem;
|
||||
|
|
@ -384,10 +517,22 @@ end;
|
|||
|
||||
(*Add new button on tool bar*)
|
||||
procedure TfrmOptionsToolbar.btnInsertButtonClick(Sender: TObject);
|
||||
var
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
ApplyEditControls;
|
||||
FCurrentButton := ktbBar.InsertButton(FCurrentButton, TKASCommandItem.Create);
|
||||
FCurrentButton.Click;
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
ApplyEditControls;
|
||||
ToolBar := FCurrentButton.ToolBar;
|
||||
end
|
||||
else
|
||||
ToolBar := GetTopToolbar;
|
||||
|
||||
if Assigned(ToolBar) then
|
||||
begin
|
||||
FCurrentButton := ToolBar.InsertButton(FCurrentButton, TKASCommandItem.Create);
|
||||
PressButtonDown(FCurrentButton);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.btnRemoveHotKeyClick(Sender: TObject);
|
||||
|
|
@ -425,29 +570,37 @@ var
|
|||
SourceItem: TKASToolItem;
|
||||
Button: TKASToolButton;
|
||||
begin
|
||||
ApplyEditControls;
|
||||
SourceItem := FCurrentButton.ToolItem;
|
||||
Button := ktbBar.InsertButton(FCurrentButton, SourceItem.Clone);
|
||||
Button.Click;
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
ApplyEditControls;
|
||||
SourceItem := FCurrentButton.ToolItem;
|
||||
Button := FCurrentButton.ToolBar.InsertButton(FCurrentButton, SourceItem.Clone);
|
||||
PressButtonDown(Button);
|
||||
end;
|
||||
end;
|
||||
|
||||
(*Remove current button*)
|
||||
procedure TfrmOptionsToolbar.btnDeleteButtonClick(Sender: TObject);
|
||||
var
|
||||
NextButton: Integer;
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
ToolBar := FCurrentButton.ToolBar;
|
||||
NextButton := FCurrentButton.Tag;
|
||||
ktbBar.RemoveButton(FCurrentButton);
|
||||
Toolbar.RemoveButton(FCurrentButton);
|
||||
FCurrentButton := nil;
|
||||
LoadCurrentButton;
|
||||
if ktbBar.ButtonCount > 0 then
|
||||
if Toolbar.ButtonCount > 0 then
|
||||
begin
|
||||
// Select next button or the last one.
|
||||
if NextButton >= ktbBar.ButtonCount then
|
||||
NextButton := ktbBar.ButtonCount - 1;
|
||||
ktbBar.Buttons[NextButton].Click;
|
||||
if NextButton >= Toolbar.ButtonCount then
|
||||
NextButton := Toolbar.ButtonCount - 1;
|
||||
PressButtonDown(Toolbar.Buttons[NextButton]);
|
||||
end
|
||||
else
|
||||
begin
|
||||
LoadCurrentButton;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -522,9 +675,46 @@ begin
|
|||
edtInternalParameters.HelpKeyword := '/cmds.html#' + Command;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.cbFlatButtonsChange(Sender: TObject);
|
||||
procedure TfrmOptionsToolbar.CloseToolbarsBelowCurrentButton;
|
||||
var
|
||||
CloseFrom: Integer = 1;
|
||||
i: Integer;
|
||||
begin
|
||||
ktbBar.Flat := cbFlatButtons.Checked;
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
for i := 0 to sboxToolbars.ControlCount - 1 do
|
||||
if sboxToolbars.Controls[i] = FCurrentButton.ToolBar then
|
||||
begin
|
||||
CloseFrom := i + 1;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
for i := sboxToolbars.ControlCount - 1 downto CloseFrom do
|
||||
CloseToolbar(i);
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.CloseToolbar(Index: Integer);
|
||||
var
|
||||
ToolBar: TControl;
|
||||
begin
|
||||
if Index > 0 then
|
||||
begin
|
||||
ToolBar := sboxToolbars.Controls[Index];
|
||||
sboxToolbars.RemoveControl(ToolBar);
|
||||
RemoveComponent(ToolBar);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.cbFlatButtonsChange(Sender: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
for i := 0 to sboxToolbars.ControlCount - 1 do
|
||||
begin
|
||||
ToolBar := sboxToolbars.Controls[i] as TKASToolBar;
|
||||
ToolBar.Flat := cbFlatButtons.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.edtIconFileNameChange(Sender: TObject);
|
||||
|
|
@ -573,16 +763,40 @@ begin
|
|||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.trbBarSizeChange(Sender: TObject);
|
||||
var
|
||||
ToolBar: TKASToolBar;
|
||||
i: Integer;
|
||||
begin
|
||||
lblBarSizeValue.Caption:=IntToStr(trbBarSize.Position*2);
|
||||
trbIconSize.Position:= trbBarSize.Position - (trbBarSize.Position div 5);
|
||||
ktbBar.SetButtonSize(trbBarSize.Position*2,trbBarSize.Position*2);
|
||||
DisableAutoSizing;
|
||||
try
|
||||
lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2);
|
||||
trbIconSize.Position := trbBarSize.Position - (trbBarSize.Position div 5);
|
||||
for i := 0 to sboxToolbars.ControlCount - 1 do
|
||||
begin
|
||||
ToolBar := sboxToolbars.Controls[i] as TKASToolBar;
|
||||
ToolBar.SetButtonSize(trbBarSize.Position * 2, trbBarSize.Position * 2);
|
||||
end;
|
||||
finally
|
||||
EnableAutoSizing;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.trbIconSizeChange(Sender: TObject);
|
||||
var
|
||||
ToolBar: TKASToolBar;
|
||||
i: Integer;
|
||||
begin
|
||||
lblIconSizeValue.Caption := IntToStr(trbIconSize.Position*2);
|
||||
ktbBar.GlyphSize := trbIconSize.Position*2;
|
||||
DisableAutoSizing;
|
||||
try
|
||||
lblIconSizeValue.Caption := IntToStr(trbIconSize.Position * 2);
|
||||
for i := 0 to sboxToolbars.ControlCount - 1 do
|
||||
begin
|
||||
ToolBar := sboxToolbars.Controls[i] as TKASToolBar;
|
||||
ToolBar.GlyphSize := trbIconSize.Position * 2;
|
||||
end;
|
||||
finally
|
||||
EnableAutoSizing;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.UpdateIcon(Icon: String);
|
||||
|
|
@ -596,16 +810,11 @@ begin
|
|||
begin
|
||||
NormalItem := TKASNormalItem(ToolItem);
|
||||
NormalItem.Icon := Icon;
|
||||
ktbBar.UpdateIcon(FCurrentButton);
|
||||
FCurrentButton.ToolBar.UpdateIcon(FCurrentButton);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.ktbBarClick(Sender: TObject);
|
||||
begin
|
||||
sboxToolbarsClick(Sender);
|
||||
end;
|
||||
|
||||
function TfrmOptionsToolbar.ktbBarLoadButtonGlyph(ToolItem: TKASToolItem;
|
||||
function TfrmOptionsToolbar.ToolbarLoadButtonGlyph(ToolItem: TKASToolItem;
|
||||
iIconSize: Integer; clBackColor: TColor): TBitmap;
|
||||
begin
|
||||
if ToolItem is TKASSeparatorItem then // Paint 'separator' icon
|
||||
|
|
@ -626,86 +835,106 @@ begin
|
|||
end;
|
||||
|
||||
(*Select button on panel*)
|
||||
procedure TfrmOptionsToolbar.ktbBarToolButtonClick(Sender: TObject);
|
||||
procedure TfrmOptionsToolbar.ToolbarToolButtonClick(Sender: TObject);
|
||||
var
|
||||
ClickedButton: TKASToolButton;
|
||||
begin
|
||||
FCurrentButton := Sender as TKASToolButton;
|
||||
ClickedButton := Sender as TKASToolButton;
|
||||
|
||||
if not FUpdatingButtonType then
|
||||
ApplyEditControls;
|
||||
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
// If current toolbar has changed depress the previous button.
|
||||
if FCurrentButton.ToolBar <> ClickedButton.ToolBar then
|
||||
FCurrentButton.Down := False;
|
||||
end;
|
||||
|
||||
FCurrentButton := ClickedButton;
|
||||
LoadCurrentButton;
|
||||
end;
|
||||
|
||||
(* Select button after it is dragged*)
|
||||
procedure TfrmOptionsToolbar.ktbBarToolButtonDragDrop(Sender, Source: TObject;
|
||||
X, Y: Integer; NumberOfButton: Integer);
|
||||
procedure TfrmOptionsToolbar.ToolbarToolButtonDragDrop(Sender, Source: TObject;
|
||||
X, Y: Integer);
|
||||
begin
|
||||
ktbBarToolButtonClick(Sender);
|
||||
ToolbarToolButtonClick(Sender);
|
||||
end;
|
||||
|
||||
(* Move button if it is dragged*)
|
||||
procedure TfrmOptionsToolbar.ktbBarToolButtonDragOver(Sender, Source: TObject;
|
||||
procedure TfrmOptionsToolbar.ToolbarToolButtonDragOver(Sender, Source: TObject;
|
||||
X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer);
|
||||
var
|
||||
SourceButton, TargetButton: TKASToolButton;
|
||||
begin
|
||||
if not (Source is TKASToolButton) then exit;
|
||||
if (FToolDragButtonNumber <> (Sender as TKASToolButton).Tag) then
|
||||
if Source is TKASToolButton then
|
||||
begin
|
||||
SourceButton := Source as TKASToolButton;
|
||||
TargetButton := Sender as TKASToolButton;
|
||||
// If moving on the same toolbar.
|
||||
if SourceButton.ToolBar = TargetButton.ToolBar then
|
||||
begin
|
||||
ktbBar.MoveButton((Source as TKASToolButton).Tag, (Sender as TKASToolButton).Tag);
|
||||
FToolDragButtonNumber := (Sender as TKASToolButton).Tag;
|
||||
Accept:=True;
|
||||
if FToolDragButtonNumber <> TargetButton.Tag then
|
||||
begin
|
||||
SourceButton.ToolBar.MoveButton(SourceButton.Tag, TargetButton.Tag);
|
||||
FToolDragButtonNumber := TargetButton.Tag;
|
||||
Accept := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* Do not start drag in here, because oterwise button wouldn't be pushed down*)
|
||||
procedure TfrmOptionsToolbar.ktbBarToolButtonMouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer;
|
||||
NumberOfButton: Integer);
|
||||
procedure TfrmOptionsToolbar.ToolbarToolButtonMouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
ApplyEditControls;
|
||||
FToolButtonMouseX:=X;
|
||||
FToolButtonMouseY:=Y;
|
||||
FToolButtonMouseX := X;
|
||||
FToolButtonMouseY := Y;
|
||||
end;
|
||||
|
||||
(* Start dragging only if mbLeft if pressed and mouse moved.*)
|
||||
procedure TfrmOptionsToolbar.ktbBarToolButtonMouseMove(Sender: TObject;
|
||||
procedure TfrmOptionsToolbar.ToolbarToolButtonMouseMove(Sender: TObject;
|
||||
Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer);
|
||||
var
|
||||
Button: TKASToolButton;
|
||||
begin
|
||||
if (ssLeft in Shift) and (FToolDragButtonNumber = -1) then
|
||||
if (abs(FToolButtonMouseX-X)>10) or (abs(FToolButtonMouseY-Y)>10) then
|
||||
begin
|
||||
FToolDragButtonNumber:=NumberOfButton;
|
||||
ktbBar.Buttons[NumberOfButton].BeginDrag(false,5);
|
||||
end;
|
||||
if Sender is TKASToolButton then
|
||||
begin
|
||||
if (ssLeft in Shift) and (FToolDragButtonNumber = -1) then
|
||||
if (abs(FToolButtonMouseX-X)>10) or (abs(FToolButtonMouseY-Y)>10) then
|
||||
begin
|
||||
Button := TKASToolButton(Sender);
|
||||
FToolDragButtonNumber := NumberOfButton;
|
||||
Button.Toolbar.Buttons[NumberOfButton].BeginDrag(False, 5);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* End button drag*)
|
||||
procedure TfrmOptionsToolbar.ktbBarToolButtonMouseUp(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer;
|
||||
NumberOfButton: Integer);
|
||||
procedure TfrmOptionsToolbar.ToolbarToolButtonMouseUp(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
FToolDragButtonNumber := -1;
|
||||
end;
|
||||
|
||||
function TfrmOptionsToolbar.ktbBarToolItemShortcutsHint(ToolItem: TKASNormalItem): String;
|
||||
function TfrmOptionsToolbar.ToolbarToolItemShortcutsHint(ToolItem: TKASNormalItem): String;
|
||||
begin
|
||||
Result := ShortcutsToText(GetShortcuts(ToolItem));
|
||||
end;
|
||||
|
||||
// Deselect any selected button
|
||||
procedure TfrmOptionsToolbar.sboxToolbarsClick(Sender: TObject);
|
||||
begin
|
||||
if Assigned(FCurrentButton) then
|
||||
begin
|
||||
ApplyEditControls;
|
||||
if Assigned(FCurrentButton) then
|
||||
FCurrentButton.Down := False;
|
||||
FCurrentButton := nil;
|
||||
LoadCurrentButton;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.SelectButton(ButtonNumber: Integer);
|
||||
var
|
||||
ToolBar: TKASToolBar;
|
||||
begin
|
||||
if (ButtonNumber >= 0) and (ButtonNumber < ktbBar.ButtonCount) then
|
||||
if sboxToolbars.ControlCount > 0 then
|
||||
begin
|
||||
FCurrentButton := ktbBar.Buttons[ButtonNumber];
|
||||
FCurrentButton.Click;
|
||||
ToolBar := sboxToolbars.Controls[0] as TKASToolBar;
|
||||
if (ButtonNumber >= 0) and (ButtonNumber < Toolbar.ButtonCount) then
|
||||
begin
|
||||
FCurrentButton := Toolbar.Buttons[ButtonNumber];
|
||||
PressButtonDown(FCurrentButton);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue