mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-04 22:58:18 +02:00
193 lines
6.3 KiB
ObjectPascal
193 lines
6.3 KiB
ObjectPascal
unit MouseActionDialog;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
|
StdCtrls, ButtonPanel, SynEditMouseCmds, LazarusIDEStrConsts;
|
|
|
|
const
|
|
ButtonName: Array [TMouseButton] of String =
|
|
(dlgMouseOptBtnLeft, dlgMouseOptBtnRight, dlgMouseOptBtnMiddle);
|
|
ClickName: Array [TSynMAClickCount] of String =
|
|
(dlgMouseOptBtn1, dlgMouseOptBtn2, dlgMouseOptBtn3, dlgMouseOptBtn4, dlgMouseOptBtnAny);
|
|
ButtonDirName: Array [TSynMAClickDir] of String =
|
|
(dlgMouseOptBtnUp, dlgMouseOptBtnDown);
|
|
|
|
type
|
|
|
|
{ TMouseaActionDialog }
|
|
|
|
TMouseaActionDialog = class(TForm)
|
|
ActionBox: TComboBox;
|
|
ActionLabel: TLabel;
|
|
AltCheck: TCheckBox;
|
|
BtnDefault: TButton;
|
|
BtnLabel: TLabel;
|
|
ButtonBox: TComboBox;
|
|
ButtonPanel1: TButtonPanel;
|
|
CaretCheck: TCheckBox;
|
|
ClickBox: TComboBox;
|
|
OptBox: TComboBox;
|
|
CtrlCheck: TCheckBox;
|
|
DirCheck: TCheckBox;
|
|
CapturePanel: TPanel;
|
|
OptLabel: TLabel;
|
|
ShiftCheck: TCheckBox;
|
|
procedure ActionBoxChange(Sender: TObject);
|
|
procedure BtnDefaultClick(Sender: TObject);
|
|
procedure CapturePanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
|
|
X, Y: Integer);
|
|
procedure FormCreate(Sender: TObject);
|
|
public
|
|
{ public declarations }
|
|
Procedure ResetInputs;
|
|
Procedure ReadFromAction(MAct: TSynEditMouseAction);
|
|
Procedure WriteToAction(MAct: TSynEditMouseAction);
|
|
end;
|
|
|
|
implementation
|
|
|
|
const
|
|
BtnToIndex: array [mbLeft..mbMiddle] of Integer = (0, 1, 2);
|
|
ClickToIndex: array [ccSingle..ccAny] of Integer = (0, 1, 2, 3, 4);
|
|
IndexToBtn: array [0..2] of TMouseButton = (mbLeft, mbRight, mbMiddle);
|
|
IndexToClick: array [0..4] of TSynMAClickCount = (ccSingle, ccDouble, ccTriple, ccQuad, ccAny);
|
|
|
|
{ MouseaActionDialog }
|
|
|
|
procedure TMouseaActionDialog.FormCreate(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
CName: String;
|
|
mb: TMouseButton;
|
|
cc: TSynMAClickCount;
|
|
begin
|
|
Caption := dlgMouseOptDlgTitle;
|
|
CapturePanel.Caption := dlgMouseOptCapture;
|
|
CaretCheck.Caption := dlgMouseOptCaretMove;
|
|
ActionBox.Clear;
|
|
for i:= 0 to emcMax do begin
|
|
CName := MouseCommandName(i);
|
|
if CName <> '' then
|
|
ActionBox.Items.AddObject(CName, TObject(ptrint(i)));
|
|
end;
|
|
ButtonBox.Clear;
|
|
for mb := low(TMouseButton) to high(TMouseButton) do
|
|
ButtonBox.Items.add(ButtonName[mb]);
|
|
ClickBox.Clear;
|
|
for cc:= low(TSynMAClickCount) to high(TSynMAClickCount) do
|
|
ClickBox.Items.add(ClickName[cc]);
|
|
DirCheck.Caption := dlgMouseOptCheckUpDown;
|
|
ShiftCheck.Caption := dlgMouseOptModShift;
|
|
AltCheck.Caption := dlgMouseOptModAlt;
|
|
CtrlCheck.Caption := dlgMouseOptModCtrl;
|
|
ActionLabel.Caption := dlgMouseOptDescAction;
|
|
BtnLabel.Caption := dlgMouseOptDescButton;
|
|
BtnDefault.Caption := dlgMouseOptBtnModDef
|
|
end;
|
|
|
|
procedure TMouseaActionDialog.ResetInputs;
|
|
begin
|
|
ActionBox.ItemIndex := 0;
|
|
ButtonBox.ItemIndex := 0;
|
|
ClickBox.ItemIndex := 0;
|
|
DirCheck.Checked := False;
|
|
ShiftCheck.State := cbGrayed;
|
|
AltCheck.State := cbGrayed;
|
|
CtrlCheck.State := cbGrayed;
|
|
end;
|
|
|
|
procedure TMouseaActionDialog.BtnDefaultClick(Sender: TObject);
|
|
begin
|
|
ShiftCheck.State := cbGrayed;
|
|
AltCheck.State := cbGrayed;
|
|
CtrlCheck.State := cbGrayed;
|
|
end;
|
|
|
|
procedure TMouseaActionDialog.ActionBoxChange(Sender: TObject);
|
|
begin
|
|
OptBox.Items.Clear;
|
|
OptBox.Items.CommaText := MouseCommandConfigName
|
|
(TSynEditorMouseCommand(PtrUInt(Pointer(ActionBox.items.Objects[ActionBox.ItemIndex]))));
|
|
if OptBox.Items.Count > 0 then begin
|
|
OptLabel.Caption := OptBox.Items[0];
|
|
OptBox.Items.Delete(0);
|
|
OptBox.Enabled := True;
|
|
OptBox.ItemIndex := 0;
|
|
end else begin
|
|
OptLabel.Caption := '';
|
|
OptBox.Enabled := False
|
|
end;
|
|
end;
|
|
|
|
procedure TMouseaActionDialog.CapturePanelMouseDown(Sender: TObject;
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
ButtonBox.ItemIndex := BtnToIndex[Button];
|
|
ClickBox.ItemIndex := 0;
|
|
if ssDouble in Shift then ClickBox.ItemIndex := 1;
|
|
if ssTriple in Shift then ClickBox.ItemIndex := 2;
|
|
if ssQuad in Shift then ClickBox.ItemIndex := 3;
|
|
ShiftCheck.Checked := ssShift in Shift ;
|
|
AltCheck.Checked := ssAlt in Shift ;
|
|
CtrlCheck.Checked := ssCtrl in Shift ;
|
|
end;
|
|
|
|
procedure TMouseaActionDialog.ReadFromAction(MAct: TSynEditMouseAction);
|
|
begin
|
|
ActionBox.ItemIndex := ActionBox.Items.IndexOfObject(TObject(Pointer(PtrUInt(MAct.Command))));
|
|
ButtonBox.ItemIndex := BtnToIndex[MAct.Button];
|
|
ClickBox.ItemIndex := ClickToIndex[MAct.ClickCount];
|
|
DirCheck.Checked := MAct.ClickDir = cdUp;
|
|
CaretCheck.Checked := MAct.MoveCaret;
|
|
ShiftCheck.Checked := (ssShift in MAct.ShiftMask) and (ssShift in MAct.Shift);
|
|
if not(ssShift in MAct.ShiftMask) then ShiftCheck.State := cbGrayed;
|
|
AltCheck.Checked := (ssAlt in MAct.ShiftMask) and (ssAlt in MAct.Shift);
|
|
if not(ssAlt in MAct.ShiftMask) then AltCheck.State := cbGrayed;
|
|
CtrlCheck.Checked := (ssCtrl in MAct.ShiftMask) and (ssCtrl in MAct.Shift);
|
|
if not(ssCtrl in MAct.ShiftMask) then CtrlCheck.State := cbGrayed;
|
|
|
|
OptBox.Items.Clear;
|
|
OptBox.Items.CommaText := MouseCommandConfigName(MAct.Command);
|
|
if OptBox.Items.Count > 0 then begin
|
|
OptLabel.Caption := OptBox.Items[0];
|
|
OptBox.Items.Delete(0);
|
|
OptBox.Enabled := True;
|
|
OptBox.ItemIndex := MAct.Option;
|
|
end else begin
|
|
OptLabel.Caption := '';
|
|
OptBox.Enabled := False
|
|
end;
|
|
end;
|
|
|
|
procedure TMouseaActionDialog.WriteToAction(MAct: TSynEditMouseAction);
|
|
begin
|
|
MAct.Command := TSynEditorMouseCommand(PtrUInt(Pointer(ActionBox.items.Objects[ActionBox.ItemIndex])));
|
|
MAct.Button := IndexToBtn[ButtonBox.ItemIndex];
|
|
MAct.ClickCount := IndexToClick[ClickBox.ItemIndex];
|
|
MAct.MoveCaret := CaretCheck.Checked;
|
|
if DirCheck.Checked
|
|
then MAct.ClickDir := cdUp
|
|
else MAct.ClickDir := cdDown;
|
|
MAct.Shift := [];
|
|
MAct.ShiftMask := [];
|
|
if ShiftCheck.State <> cbGrayed then MAct.ShiftMask := MAct.ShiftMask + [ssShift];
|
|
if AltCheck.State <> cbGrayed then MAct.ShiftMask := MAct.ShiftMask + [ssAlt];
|
|
if CtrlCheck.State <> cbGrayed then MAct.ShiftMask := MAct.ShiftMask + [ssCtrl];
|
|
if ShiftCheck.Checked then MAct.Shift := MAct.Shift + [ssShift];
|
|
if AltCheck.Checked then MAct.Shift := MAct.Shift + [ssAlt];
|
|
if CtrlCheck.Checked then MAct.Shift := MAct.Shift + [ssCtrl];
|
|
|
|
if OptBox.Enabled then
|
|
MAct.Option := OptBox.ItemIndex;
|
|
end;
|
|
|
|
initialization
|
|
{$I mouseactiondialog.lrs}
|
|
|
|
end.
|
|
|