UPD: Creating menu toolbar buttons.

This commit is contained in:
cobines 2012-04-12 12:08:14 +00:00
commit 9ebbfccf78
4 changed files with 451 additions and 183 deletions

View file

@ -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

View file

@ -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;